@succsoft/succapp 5.0.1 → 5.0.2

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.
@@ -1,46 +1,48 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var nR=Object.create;var Na=Object.defineProperty;var oR=Object.getOwnPropertyDescriptor;var iR=Object.getOwnPropertyNames;var aR=Object.getPrototypeOf,sR=Object.prototype.hasOwnProperty;var pe=(r,e)=>()=>(r&&(e=r(r=0)),e);var z=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Gl=(r,e)=>{for(var t in e)Na(r,t,{get:e[t],enumerable:!0})},ph=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of iR(e))!sR.call(r,o)&&o!==t&&Na(r,o,{get:()=>e[o],enumerable:!(n=oR(e,o))||n.enumerable});return r};var b=(r,e,t)=>(t=r!=null?nR(aR(r)):{},ph(e||!r||!r.__esModule?Na(t,"default",{value:r,enumerable:!0}):t,r)),dh=r=>ph(Na({},"__esModule",{value:!0}),r);var qt=pe(()=>{});function U(r,e,t){if(!r)throw new Ua(e,t)}function uo(r,e){throw new Ua(r,e)}var Ua,Ce=pe(()=>{Ua=class extends Error{cause;constructor(e,t={}){super(e),this.name="AssertError",this.cause=t.cause}}});function hh(r){let e=r.trim();return U(e,"logger module name cannot be empty"),e}function pR(r,e){let t=hh(e);return r?`${r}.${t}`:t}function Ci(r,e){return r?`[${r}] ${e}`:e}function dR(r,e){let t=mo(e);if(!r)return t;let n=`[${r}]`;return typeof t[0]=="string"?[`${n} ${t[0]}`,...t.slice(1)]:[n,...t]}function Si(r,e){if(e.length===0||!ja.test(r))return ja.lastIndex=0,{message:r,args:e};ja.lastIndex=0;let t=new Set;return{message:r.replace(ja,(o,i)=>{let a=Number(i);return!Number.isSafeInteger(a)||a<0||a>=e.length?o:(t.add(a),String(e[a]))}),args:e.filter((o,i)=>!t.has(i))}}function mo(r){let e;for(let t=0;t<r.length;t++){let n=r[t];n instanceof Error?(e??=r.slice(0,t),e.push(uR(n))):e?.push(n)}return e??r}function uR(r){return r.stack?r.stack:r.name&&r.message?`${r.name}: ${r.message}`:r.message||String(r)}function fh(r){return new Ba(r===void 0?void 0:hh(r))}function T(r){return fh(r)}function gh(r){Ba.setAppender(r)}var Yl,Ba,ja,kO,G=pe(()=>{Ce();Yl=class{isTraceEnabled(){return!1}isDebugEnabled(){return!1}isInfoEnabled(){return!1}isWarnEnabled(){return!1}isErrorEnabled(){return!1}trace(e,...t){}debug(e,...t){}info(e,...t){}warn(e,...t){}error(e,...t){}},Ba=class r{constructor(e){this.moduleName=e}static appender=new Yl;static setAppender(e){r.appender=e}static getAppender(){return r.appender}isTraceEnabled(){return r.appender.isTraceEnabled()}isDebugEnabled(){return r.appender.isDebugEnabled()}createModuleLogger(e){return new r(pR(this.moduleName,e))}trace(e,...t){let n=r.appender;if(!n.isTraceEnabled())return;let o=Si(e,t);n.trace(Ci(this.moduleName,o.message),...mo(o.args))}debug(e,...t){let n=r.appender;if(!n.isDebugEnabled())return;let o=Si(e,t);n.debug(Ci(this.moduleName,o.message),...mo(o.args))}info(e,...t){let n=r.appender;if(!n.isInfoEnabled())return;let o=Si(e,t);n.info(Ci(this.moduleName,o.message),...mo(o.args))}warn(e,...t){let n=r.appender;if(!n.isWarnEnabled())return;let o=Si(e,t);n.warn(Ci(this.moduleName,o.message),...mo(o.args))}error(e,...t){let n=r.appender;if(!n.isErrorEnabled())return;if(e instanceof Error){n.error(e,...dR(this.moduleName,t));return}let o=Si(e,t);n.error(Ci(this.moduleName,o.message),...mo(o.args))}};ja=/\{(\d+)\}/g;kO=fh()});function h(r,...e){return Xl.t(r,...e)}function Ct(r,...e){let t=Xl.t(r,...e);return t===r?void 0:t}function Ch(r){Xl=r}function nn(r,...e){return qa(e)?yR(r,e[0]):e.reduce((t,n,o)=>t.split(`{${o}}`).join(String(n)),r)}function qa(r){return r.length===1&&typeof r[0]=="object"&&r[0]!==null&&!Array.isArray(r[0])}function yR(r,e){return r.replace(gR,(t,n)=>Object.hasOwn(e,n)?String(e[n]):t)}function CR(){let r=Ql(__dirname);if(!r)return{};let e=rn.join(r,yh);try{let t=JSON.parse(Va.readFileSync(e,"utf8"));return SR(t)?t:{}}catch(t){return vR(t)?{}:(mR.warn("failed to load default l10n bundle: {0}",e,t),{})}}function Ql(r){let e=rn.resolve(r),t=[rn.join(e,"l10n"),rn.resolve(e,"..","..","l10n"),rn.resolve(e,"..","..","..","l10n")];for(let n of t)if(Va.existsSync(rn.join(n,yh)))return n}function SR(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)&&Object.values(r).every(e=>typeof e=="string")}function vR(r){return typeof r=="object"&&r!==null&&"code"in r&&r.code==="ENOENT"}var Va,rn,yh,mR,hR,fR,Xl,gR,q=pe(()=>{Va=b(require("fs")),rn=b(require("path"));G();yh="bundle.l10n.json",mR=T("i18n"),hR=CR(),fR={t(r,...e){let t=hR[r]??r;return qa(e)?nn(t,e[0]):nn(t,...e)}},Xl=fR;gR=/\{([A-Za-z_][A-Za-z0-9_]*)\}/g});var J=pe(()=>{});function V(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function Et(r){return typeof r=="string"&&r.length>0?r:void 0}function A(r){let e={};for(let[t,n]of Object.entries(r))n!==void 0&&(e[t]=n);return e}function Ha(r){return r.startsWith("{")||r.startsWith("[")}function fo(r){if(Array.isArray(r))return r.map(e=>fo(e));if(V(r)){let e={};return Object.keys(r).forEach(t=>{e[t]=fo(r[t])}),e}return r}function ar(r,e){if(r===e)return!0;if(Array.isArray(r)||Array.isArray(e))return Array.isArray(r)&&Array.isArray(e)&&r.length===e.length&&r.every((o,i)=>ar(o,e[i]));if(!V(r)||!V(e))return!1;let t=Object.keys(r),n=Object.keys(e);return t.length===n.length&&t.every(o=>Object.prototype.hasOwnProperty.call(e,o)&&ar(r[o],e[o]))}var ne=pe(()=>{});function NR(r){let e=WR(r);if(Ha(e))try{let t=JSON.parse(e);return!V(t)||V(t.errorInfo)?void 0:np(t)}catch{return}}function Mh(r){let e=NR(r);return e?wi(e):void 0}function wi(r){let e=new rp(r.message??"",{platform:r.platform,stack:r.stack,properties:r.properties});return e.name=r.className||r.name||e.name,e.errorCode=r.errorCode,e.errorType=r.errorType,e.errorDialogStyle=r.errorDialogStyle,e.hintMessage=r.hintMessage,e.locationPath=r.locationPath,e.__httpStatusErrorCode__=r.__httpStatusErrorCode__,r.cause&&(e.cause=wi(r.cause)),Array.isArray(r.suppressed)&&(e.suppressed=r.suppressed.map(t=>wi(t))),e}function on(r){let e=r,t=new Set;for(let n=0;n<100&&!t.has(e);n++){t.add(e);let o=Ah(e);if(!o)break;e=o}return e}function Dh(r){let e=[],t=r,n=new Set;for(;t&&!n.has(t)&&e.length<100;)e.push(t),n.add(t),t=Ah(t);return e.reverse().map((o,i)=>qR(o,i===0?"":"Wrapped by: ")).join(`
3
- `)}function pt(r){return Pi(r)||V(r)?Ht(r.errorCode):void 0}function sr(r){return Pi(r)?r.errorType:V(r)?Ih(r.errorType):void 0}function bt(r){return Pi(r)||V(r)&&V(r.properties)?r.properties:void 0}function WR(r){let e=r.indexOf(Fh);return(e>=0?r.slice(e+Fh.length):r).trim()}function np(r){if(!UR(r))return;let e={};e.message=Ht(r.message),e.name=Ht(r.name),e.errorCode=Ht(r.errorCode),e.errorType=Ih(r.errorType),e.className=Ht(r.className),e.platform=Ht(r.platform),e.hintMessage=Ht(r.hintMessage),e.errorDialogStyle=Ht(r.errorDialogStyle),e.__httpStatusErrorCode__=jR(r.__httpStatusErrorCode__),V(r.properties)&&(e.properties=r.properties);let t=BR(r.locationPath);t&&(e.locationPath=t);let n=VR(r.stack);if(n&&(e.stack=n),V(r.cause)&&(e.cause=np(r.cause)),Array.isArray(r.suppressed)){let o=r.suppressed.filter(V).map(i=>np(i)).filter(i=>i!==void 0);o.length>0&&(e.suppressed=o)}return e}function UR(r){return["message","name","errorCode","errorType","className","platform","hintMessage","locationPath","errorDialogStyle","__httpStatusErrorCode__","properties","cause","suppressed","stack"].some(e=>e in r)}function Ht(r){return typeof r=="string"&&r.length>0?r:void 0}function Ih(r){return r===null?null:Ht(r)}function jR(r){return typeof r=="number"?r:void 0}function BR(r){if(!Array.isArray(r))return;let e=r.filter(V).map(t=>({type:Ht(t.type),value:Ht(t.value)})).filter(t=>t.type!==void 0&&t.value!==void 0);return e.length>0?e:void 0}function VR(r){if(typeof r=="string")return r.split(/\r?\n/).filter(t=>t.length>0);if(!Array.isArray(r))return;let e=r.filter(t=>typeof t=="string");return e.length>0?e:void 0}function Ah(r){let e=r.cause;return e instanceof Error?e:void 0}function Pi(r){return r instanceof Error}function qR(r,e){let t=[],n=$R(r);t.push(e?`${e}${n}`:n),ki(t,"errorCode",pt(r));let o=sr(r);if(ki(t,"errorType",o==null?void 0:String(o)),Pi(r)&&(ki(t,"errorDialogStyle",r.errorDialogStyle),ki(t,"hintMessage",r.hintMessage),HR(t,r.locationPath),r.properties))for(let[a,s]of Object.entries(r.properties))ki(t,a,zR(s));let i=r.stack?.split(/\r?\n/).map(a=>a.trim()).filter(a=>a.startsWith("at ")||a.startsWith("... "));return i&&t.push(...i),t.join(`
4
- `)}function $R(r){let e=r.name||Pi(r)&&r.platform||"Error";return r.message?`${e}: ${r.message}`:e}function ki(r,e,t){t&&r.push(`${e}: ${t}`)}function HR(r,e){if(!(!e||e.length===0))for(let t of e)r.push(`location: ${t.type} ${t.value}`)}function zR(r){if(r!=null){if(typeof r=="string")return r;if(typeof r=="number"||typeof r=="boolean")return String(r);try{return JSON.stringify(r)}catch{return String(r)}}}var Fh,rp,Un=pe(()=>{ne();Fh="===SUCC=ERROR=INFO=START===",rp=class extends Error{platform;errorCode;errorType;errorDialogStyle;hintMessage;locationPath;properties;__httpStatusErrorCode__;cause;suppressed;constructor(e="",t={}){super(e),this.name="RemotePlatformError",this.platform=t.platform,this.stack=Array.isArray(t.stack)?t.stack.join(`
5
- `):t.stack??"",this.cause=t.cause,t.properties&&(this.properties={...t.properties})}}});function F(r){return Bn(r)==="ENOENT"}function Ei(r){let e=Bn(r);return e!==void 0&&KR.has(e)}function Oh(r){return _h(r)&&r.status===404}function Ga(r){return Bn(r)==="ENOTDIR"}function Ja(r){return Bn(r)==="ELOCKED"}function _h(r){return r instanceof zt}function Bn(r){if(!r||typeof r!="object"||!("code"in r))return;let e=r.code;return typeof e=="string"?e:void 0}function op(r){if(!(!r||typeof r!="object"||!("cause"in r)))return r.cause}function Lh(r){return Nh(r,0)}function Nh(r,e){if(e>JR||!r||typeof r!="object"||bi(r)||_h(r))return!1;let t=Bn(r);return t!==void 0&&GR.has(t)?!0:Nh(op(r),e+1)}function bi(r){return r instanceof _e}function Vn(r,e){return bi(r)&&r.errorCode===e}function Wh(r){let e=ip(r.properties),t=Ct(r.errorCode,e);if(!t)return r.message||r.errorCode;let n=Ct(`${r.errorCode}.desc`,e);return n?`${t}
6
- ${n}`:t}function Uh(r){if(r.hintMessage)return r.hintMessage;if(r.hint)return h(r.hint,ip(r.properties))}function qn(r){if(r==null)return"";if(r instanceof Error)return r.message;if(typeof r=="string")return r;let e=YR(r);if(e)return e;try{return JSON.stringify(r)}catch{return String(r)}}function YR(r){if(typeof r!="object"||r===null||Array.isArray(r))return"";let e=r.message;return typeof e=="string"?e:""}function XR(r,e){let t=ip(e);return Ct(r,t)??r}function ip(r){let e={};for(let[t,n]of Object.entries(r))QR(n)&&(e[t]=n);return e}function QR(r){return typeof r=="string"||typeof r=="number"||typeof r=="boolean"}function jh(r){return r instanceof ut||Vn(r,"err.login.notlogin")}var KR,GR,JR,_e,zt,E,St,Ot,za,dt,ut,Ri,Ka,jn,Ir,Kt,D=pe(()=>{q();J();Un();KR=new Set(["ENOENT","EACCES","EPERM","EISDIR","ENOTDIR","ELOOP","ENAMETOOLONG"]);GR=new Set(["ECONNRESET","EPIPE","ETIMEDOUT","ECONNABORTED","UND_ERR_SOCKET","UND_ERR_BODY_TIMEOUT","UND_ERR_HEADERS_TIMEOUT"]),JR=4;_e=class extends Error{errorCode;style;category;properties;errorType;errorDialogStyle;hintMessage;locationPath;hint;cause;constructor(e,t={}){let n=t.properties??{};super(t.message??XR(e,n)),this.name="BaseError",this.errorCode=e,this.style=t.style??"error",this.category=t.category??"generic",this.properties=n,this.errorType=t.errorType,this.errorDialogStyle=t.errorDialogStyle,this.hintMessage=t.hintMessage,this.locationPath=t.locationPath,this.hint=t.hint,this.cause=t.cause}setProperty(e,t){return this.properties[e]=t,this}setPropertyIf(e,t){return t!=null&&t!==""&&(this.properties[e]=t),this}setProperties(e){return Object.assign(this.properties,e),this}},zt=class r extends _e{constructor(t,n,o,i,a){let s=Mh(n),c=s?on(s):void 0,l=bt(c)??bt(s)??{},p=r.formatSummary(n,o,a,c,s),m=sr(c)??sr(s),g=c?.errorDialogStyle??s?.errorDialogStyle;super(pt(c)??pt(s)??"err.net.httpStatusUnexpected",{message:`HTTP ${t}: ${p}`,properties:r.createProperties(l,t,o,a,n,s),style:r.getDisplayStyle(m,g),errorType:m,errorDialogStyle:g,hintMessage:c?.hintMessage??s?.hintMessage,locationPath:c?.locationPath??s?.locationPath,cause:s});this.status=t;this.responseText=n;this.statusText=o;this.contentType=a;this.name="SuccHttpError",this.remoteError=s;let d=i?.stack??this.stack,f=s?Dh(s):r.isServerStack(n)?n.trim():"";f&&(this.stack=d?`${f}
7
- Wrapped by: ${d}`:f)}remoteError;static createProperties(t,n,o,i,a,s){let c={...t,status:n,statusText:o};if(i!==void 0&&(c.contentType=i),!s){let l=r.createResponsePreview(a);l!==void 0&&(c.responsePreview=l)}return c}static formatSummary(t,n,o,i,a){return i||a?i?.message||pt(i)||a?.message||pt(a)||n.trim()||"Request failed":r.isServerStack(t)?n.trim()||"Request failed":r.isHtmlResponse(t,o)?n.trim()||"server returned HTML error response":t.split(/\r?\n/).map(s=>s.trim()).find(Boolean)?.slice(0,240)||"Request failed"}static createResponsePreview(t){let n=t.trim();if(n)return n.length>512?`${n.slice(0,512)}...`:n}static isHtmlResponse(t,n){return(n?.toLowerCase()??"").includes("text/html")?!0:/^<!doctype html\b|^<html[\s>]/i.test(t.trimStart())}static isServerStack(t){let n=t.trim();return!n||n.startsWith("{")||n.startsWith("[")?!1:n.split(/\r?\n/).some(o=>{let i=o.trimStart();return i.startsWith("at ")||i.startsWith("... ")||i.startsWith("Caused by:")||i.startsWith("Wrapped by:")})}static getDisplayStyle(t,n){return t==="info"?"info":t==="warn"?"warn":t===void 0&&n==="quietly"?"info":"error"}};E=class extends _e{constructor(e,t={},n={}){super(e,{...n,category:n.category??"usage",style:n.style??"warn",properties:t}),this.name="UsageError"}},St=class extends _e{constructor(e,t={},n={}){super(e,{...n,style:n.style??"warn",properties:t}),this.name="OperationBlockedError"}},Ot=class extends _e{constructor(e,t={},n={}){super(e,{...n,category:n.category??"conflict",style:n.style??"error",properties:t}),this.name="ConflictError"}},za=class extends _e{constructor(e,t={}){super(e,{...t,style:t.style??"warn",category:t.category??"usage"}),this.name="CommandError"}},dt=class extends _e{constructor(e,t){super("err.net.connectionFailed",{category:"networkAuth",properties:{url:e,causeMessage:t?` - ${t.message}`:""},cause:t}),this.name="ConnectionError"}},ut=class extends _e{constructor(e={}){super("err.login.notlogin",{category:"networkAuth",hint:"Log in again, then retry the command."}),this.name="AuthError",this.withContext(e)}withContext(e){return e.workspaceRoot&&!this.workspaceRoot&&this.setProperty("workspaceRoot",e.workspaceRoot),e.serverUrl&&!this.serverUrl&&this.setProperty("serverUrl",e.serverUrl),this}get context(){return{workspaceRoot:this.workspaceRoot,serverUrl:this.serverUrl}}get workspaceRoot(){return typeof this.properties.workspaceRoot=="string"?this.properties.workspaceRoot:void 0}get serverUrl(){return typeof this.properties.serverUrl=="string"?this.properties.serverUrl:void 0}};Ri=class extends _e{constructor(t,n,o={}){super("err.workspace.problem",{style:"warn",properties:{root:t,code:n,count:o.count??o.projectPaths?.length??o.remotePaths?.length??0}});this.root=t;this.code=n;this.options=o;this.name="WorkspaceProblemError"}get projectPaths(){return this.options.projectPaths}get remotePaths(){return this.options.remotePaths}get count(){return this.options.count}},Ka=class extends E{constructor(t,n){super("err.net.invalidUrl",{url:t},{cause:n});this.url=t;this.name="InvalidUrlError"}},jn=class extends _e{constructor(t,n,o,i){super("err.lock.busy",{category:"lockBusy",style:"warn",properties:{attemptedCommand:t,conflictScope:o,...i?{pid:i.pid,host:i.hostname,command:i.command,source:i.source,scope:i.scope,startTime:i.startTime,lastHeartbeat:i.lastHeartbeat}:{}},hint:"Wait for the running SuccApp process to finish, then retry."});this.attemptedCommand=t;this.attemptedScopes=n;this.conflictScope=o;this.holder=i;this.name="LockBusyError"}},Ir=class extends _e{constructor(t,n={}){super("err.lock.compromised",{category:"lockCompromised",style:"warn",properties:{attemptedCommand:t},cause:n.cause});this.attemptedCommand=t;this.name="LockCompromisedError"}},Kt=class extends _e{constructor(){super("err.base.cancel",{category:"cancel",style:"silent"}),this.name="CancelledError"}}});function ap(r){return r.reason instanceof Error?r.reason:new Kt}function mt(r){if(r?.aborted)throw ap(r)}function qh(...r){let e=r.filter(n=>n!==void 0);if(e.length===0)return Xa;if(e.length===1)return e[0];let t=new AbortController;for(let n of e){let o=()=>{t.signal.aborted||t.abort(n.reason instanceof Error?n.reason:new Kt)};n.addEventListener("abort",o),n.aborted&&o()}return t.signal}var nE,Xa,$n=pe(()=>{D();nE=new AbortController,Xa=nE.signal});var go,ht,Ar=pe(()=>{D();Ce();$n();go=class r{children=[];parent;weight;signal;total=0;done=0;ratio=0;message;constructor(e,t=0,n){this.parent=e,this.weight=Math.max(t,0),this.signal=n??Xa}start(e){this.total=Math.max(e??0,0),this.done=0,this.ratio=0,this.children.length=0,this.doStart(e),this.reportToParent()}progress(e){this.assertNoSubTasks(),this.reportProgress(Math.max(this.done,e,0))}step(e){this.assertNoSubTasks(),this.reportProgress(Math.max(this.done+Math.max(e??1,0),0))}setMessage(e){this.message=e||void 0,this.parent&&this.parent.setMessage(this.message)}finish(){this.total<=0&&(this.total=Math.max(this.done,1),this.doStart(this.total),this.reportToParent()),this.reportProgress(Math.max(this.done,this.total))}subTaskMonitor(e){let t=new r(this,e);return this.children.push(t),t}isCancellationRequested(){return this.parent?this.parent.isCancellationRequested():this.signal.aborted}getAbortSignal(){return this.parent?this.parent.getAbortSignal():this.signal}setAbortSignal(e){this.parent?this.parent.setAbortSignal(e):this.signal=e}throwIfAborted(){this.parent?this.parent.throwIfAborted():mt(this.signal)}onSubTaskProgress(){let e=this.children.reduce((o,i)=>o+i.getWeight(),0);if(e<=0){this.reportProgress(this.done);return}let t=this.children.reduce((o,i)=>o+i.getWeight()*i.getCompletionRatio(),0),n=this.total>0?this.total:e;this.reportProgress(Math.max(this.done,n*t/e))}doStart(e){}doProgress(e,t){}getProgressTotal(){return this.total}reportProgress(e){let t=this.done;this.done=e,this.refreshRatio(),this.doProgress(this.done,t),this.reportToParent()}assertNoSubTasks(){U(this.children.length===0,"TaskMonitor with subtasks must report progress from subtasks")}refreshRatio(){let e=this.getProgressTotal();e>0&&(this.ratio=Math.max(this.ratio,Math.min(this.done/e,1)))}reportToParent(){this.parent?.onSubTaskProgress()}getWeight(){return this.weight}getCompletionRatio(){return this.ratio}},ht=class r{static INSTANCE=new r;start(e){}progress(e){}step(e){}setMessage(e){}finish(){}subTaskMonitor(e){return this}isCancellationRequested(){return!1}getAbortSignal(){return Xa}setAbortSignal(e){}throwIfAborted(){}}});var Qh=z((l_,Xh)=>{var an=require("constants"),bE=process.cwd,es=null,TE=process.env.GRACEFUL_FS_PLATFORM||process.platform;process.cwd=function(){return es||(es=bE.call(process)),es};try{process.cwd()}catch{}typeof process.chdir=="function"&&(hp=process.chdir,process.chdir=function(r){es=null,hp.call(process,r)},Object.setPrototypeOf&&Object.setPrototypeOf(process.chdir,hp));var hp;Xh.exports=xE;function xE(r){an.hasOwnProperty("O_SYMLINK")&&process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)&&e(r),r.lutimes||t(r),r.chown=i(r.chown),r.fchown=i(r.fchown),r.lchown=i(r.lchown),r.chmod=n(r.chmod),r.fchmod=n(r.fchmod),r.lchmod=n(r.lchmod),r.chownSync=a(r.chownSync),r.fchownSync=a(r.fchownSync),r.lchownSync=a(r.lchownSync),r.chmodSync=o(r.chmodSync),r.fchmodSync=o(r.fchmodSync),r.lchmodSync=o(r.lchmodSync),r.stat=s(r.stat),r.fstat=s(r.fstat),r.lstat=s(r.lstat),r.statSync=c(r.statSync),r.fstatSync=c(r.fstatSync),r.lstatSync=c(r.lstatSync),r.chmod&&!r.lchmod&&(r.lchmod=function(p,m,g){g&&process.nextTick(g)},r.lchmodSync=function(){}),r.chown&&!r.lchown&&(r.lchown=function(p,m,g,d){d&&process.nextTick(d)},r.lchownSync=function(){}),TE==="win32"&&(r.rename=typeof r.rename!="function"?r.rename:function(p){function m(g,d,f){var y=Date.now(),C=0;p(g,d,function v(P){if(P&&(P.code==="EACCES"||P.code==="EPERM"||P.code==="EBUSY")&&Date.now()-y<6e4){setTimeout(function(){r.stat(d,function(u,S){u&&u.code==="ENOENT"?p(g,d,v):f(P)})},C),C<100&&(C+=10);return}f&&f(P)})}return Object.setPrototypeOf&&Object.setPrototypeOf(m,p),m}(r.rename)),r.read=typeof r.read!="function"?r.read:function(p){function m(g,d,f,y,C,v){var P;if(v&&typeof v=="function"){var u=0;P=function(S,k,R){if(S&&S.code==="EAGAIN"&&u<10)return u++,p.call(r,g,d,f,y,C,P);v.apply(this,arguments)}}return p.call(r,g,d,f,y,C,P)}return Object.setPrototypeOf&&Object.setPrototypeOf(m,p),m}(r.read),r.readSync=typeof r.readSync!="function"?r.readSync:function(p){return function(m,g,d,f,y){for(var C=0;;)try{return p.call(r,m,g,d,f,y)}catch(v){if(v.code==="EAGAIN"&&C<10){C++;continue}throw v}}}(r.readSync);function e(p){p.lchmod=function(m,g,d){p.open(m,an.O_WRONLY|an.O_SYMLINK,g,function(f,y){if(f){d&&d(f);return}p.fchmod(y,g,function(C){p.close(y,function(v){d&&d(C||v)})})})},p.lchmodSync=function(m,g){var d=p.openSync(m,an.O_WRONLY|an.O_SYMLINK,g),f=!0,y;try{y=p.fchmodSync(d,g),f=!1}finally{if(f)try{p.closeSync(d)}catch{}else p.closeSync(d)}return y}}function t(p){an.hasOwnProperty("O_SYMLINK")&&p.futimes?(p.lutimes=function(m,g,d,f){p.open(m,an.O_SYMLINK,function(y,C){if(y){f&&f(y);return}p.futimes(C,g,d,function(v){p.close(C,function(P){f&&f(v||P)})})})},p.lutimesSync=function(m,g,d){var f=p.openSync(m,an.O_SYMLINK),y,C=!0;try{y=p.futimesSync(f,g,d),C=!1}finally{if(C)try{p.closeSync(f)}catch{}else p.closeSync(f)}return y}):p.futimes&&(p.lutimes=function(m,g,d,f){f&&process.nextTick(f)},p.lutimesSync=function(){})}function n(p){return p&&function(m,g,d){return p.call(r,m,g,function(f){l(f)&&(f=null),d&&d.apply(this,arguments)})}}function o(p){return p&&function(m,g){try{return p.call(r,m,g)}catch(d){if(!l(d))throw d}}}function i(p){return p&&function(m,g,d,f){return p.call(r,m,g,d,function(y){l(y)&&(y=null),f&&f.apply(this,arguments)})}}function a(p){return p&&function(m,g,d){try{return p.call(r,m,g,d)}catch(f){if(!l(f))throw f}}}function s(p){return p&&function(m,g,d){typeof g=="function"&&(d=g,g=null);function f(y,C){C&&(C.uid<0&&(C.uid+=4294967296),C.gid<0&&(C.gid+=4294967296)),d&&d.apply(this,arguments)}return g?p.call(r,m,g,f):p.call(r,m,f)}}function c(p){return p&&function(m,g){var d=g?p.call(r,m,g):p.call(r,m);return d&&(d.uid<0&&(d.uid+=4294967296),d.gid<0&&(d.gid+=4294967296)),d}}function l(p){if(!p||p.code==="ENOSYS")return!0;var m=!process.getuid||process.getuid()!==0;return!!(m&&(p.code==="EINVAL"||p.code==="EPERM"))}}});var tf=z((p_,ef)=>{var Zh=require("stream").Stream;ef.exports=FE;function FE(r){return{ReadStream:e,WriteStream:t};function e(n,o){if(!(this instanceof e))return new e(n,o);Zh.call(this);var i=this;this.path=n,this.fd=null,this.readable=!0,this.paused=!1,this.flags="r",this.mode=438,this.bufferSize=64*1024,o=o||{};for(var a=Object.keys(o),s=0,c=a.length;s<c;s++){var l=a[s];this[l]=o[l]}if(this.encoding&&this.setEncoding(this.encoding),this.start!==void 0){if(typeof this.start!="number")throw TypeError("start must be a Number");if(this.end===void 0)this.end=1/0;else if(typeof this.end!="number")throw TypeError("end must be a Number");if(this.start>this.end)throw new Error("start must be <= end");this.pos=this.start}if(this.fd!==null){process.nextTick(function(){i._read()});return}r.open(this.path,this.flags,this.mode,function(p,m){if(p){i.emit("error",p),i.readable=!1;return}i.fd=m,i.emit("open",m),i._read()})}function t(n,o){if(!(this instanceof t))return new t(n,o);Zh.call(this),this.path=n,this.fd=null,this.writable=!0,this.flags="w",this.encoding="binary",this.mode=438,this.bytesWritten=0,o=o||{};for(var i=Object.keys(o),a=0,s=i.length;a<s;a++){var c=i[a];this[c]=o[c]}if(this.start!==void 0){if(typeof this.start!="number")throw TypeError("start must be a Number");if(this.start<0)throw new Error("start must be >= zero");this.pos=this.start}this.busy=!1,this._queue=[],this.fd===null&&(this._open=r.open,this._queue.push([this._open,this.path,this.flags,this.mode,void 0]),this.flush())}}});var nf=z((d_,rf)=>{"use strict";rf.exports=DE;var ME=Object.getPrototypeOf||function(r){return r.__proto__};function DE(r){if(r===null||typeof r!="object")return r;if(r instanceof Object)var e={__proto__:ME(r)};else var e=Object.create(null);return Object.getOwnPropertyNames(r).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}),e}});var Cp=z((u_,yp)=>{var we=require("fs"),IE=Qh(),AE=tf(),OE=nf(),ts=require("util"),rt,ns;typeof Symbol=="function"&&typeof Symbol.for=="function"?(rt=Symbol.for("graceful-fs.queue"),ns=Symbol.for("graceful-fs.previous")):(rt="___graceful-fs.queue",ns="___graceful-fs.previous");function _E(){}function sf(r,e){Object.defineProperty(r,rt,{get:function(){return e}})}var Hn=_E;ts.debuglog?Hn=ts.debuglog("gfs4"):/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&(Hn=function(){var r=ts.format.apply(ts,arguments);r="GFS4: "+r.split(/\n/).join(`
8
- GFS4: `),console.error(r)});we[rt]||(of=global[rt]||[],sf(we,of),we.close=function(r){function e(t,n){return r.call(we,t,function(o){o||af(),typeof n=="function"&&n.apply(this,arguments)})}return Object.defineProperty(e,ns,{value:r}),e}(we.close),we.closeSync=function(r){function e(t){r.apply(we,arguments),af()}return Object.defineProperty(e,ns,{value:r}),e}(we.closeSync),/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&process.on("exit",function(){Hn(we[rt]),require("assert").equal(we[rt].length,0)}));var of;global[rt]||sf(global,we[rt]);yp.exports=fp(OE(we));process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH&&!we.__patched&&(yp.exports=fp(we),we.__patched=!0);function fp(r){IE(r),r.gracefulify=fp,r.createReadStream=k,r.createWriteStream=R;var e=r.readFile;r.readFile=t;function t(x,j,L){return typeof j=="function"&&(L=j,j=null),ie(x,j,L);function ie(ee,B,K,oe){return e(ee,B,function(re){re&&(re.code==="EMFILE"||re.code==="ENFILE")?yo([ie,[ee,B,K],re,oe||Date.now(),Date.now()]):typeof K=="function"&&K.apply(this,arguments)})}}var n=r.writeFile;r.writeFile=o;function o(x,j,L,ie){return typeof L=="function"&&(ie=L,L=null),ee(x,j,L,ie);function ee(B,K,oe,re,M){return n(B,K,oe,function(W){W&&(W.code==="EMFILE"||W.code==="ENFILE")?yo([ee,[B,K,oe,re],W,M||Date.now(),Date.now()]):typeof re=="function"&&re.apply(this,arguments)})}}var i=r.appendFile;i&&(r.appendFile=a);function a(x,j,L,ie){return typeof L=="function"&&(ie=L,L=null),ee(x,j,L,ie);function ee(B,K,oe,re,M){return i(B,K,oe,function(W){W&&(W.code==="EMFILE"||W.code==="ENFILE")?yo([ee,[B,K,oe,re],W,M||Date.now(),Date.now()]):typeof re=="function"&&re.apply(this,arguments)})}}var s=r.copyFile;s&&(r.copyFile=c);function c(x,j,L,ie){return typeof L=="function"&&(ie=L,L=0),ee(x,j,L,ie);function ee(B,K,oe,re,M){return s(B,K,oe,function(W){W&&(W.code==="EMFILE"||W.code==="ENFILE")?yo([ee,[B,K,oe,re],W,M||Date.now(),Date.now()]):typeof re=="function"&&re.apply(this,arguments)})}}var l=r.readdir;r.readdir=m;var p=/^v[0-5]\./;function m(x,j,L){typeof j=="function"&&(L=j,j=null);var ie=p.test(process.version)?function(K,oe,re,M){return l(K,ee(K,oe,re,M))}:function(K,oe,re,M){return l(K,oe,ee(K,oe,re,M))};return ie(x,j,L);function ee(B,K,oe,re){return function(M,W){M&&(M.code==="EMFILE"||M.code==="ENFILE")?yo([ie,[B,K,oe],M,re||Date.now(),Date.now()]):(W&&W.sort&&W.sort(),typeof oe=="function"&&oe.call(this,M,W))}}}if(process.version.substr(0,4)==="v0.8"){var g=AE(r);v=g.ReadStream,u=g.WriteStream}var d=r.ReadStream;d&&(v.prototype=Object.create(d.prototype),v.prototype.open=P);var f=r.WriteStream;f&&(u.prototype=Object.create(f.prototype),u.prototype.open=S),Object.defineProperty(r,"ReadStream",{get:function(){return v},set:function(x){v=x},enumerable:!0,configurable:!0}),Object.defineProperty(r,"WriteStream",{get:function(){return u},set:function(x){u=x},enumerable:!0,configurable:!0});var y=v;Object.defineProperty(r,"FileReadStream",{get:function(){return y},set:function(x){y=x},enumerable:!0,configurable:!0});var C=u;Object.defineProperty(r,"FileWriteStream",{get:function(){return C},set:function(x){C=x},enumerable:!0,configurable:!0});function v(x,j){return this instanceof v?(d.apply(this,arguments),this):v.apply(Object.create(v.prototype),arguments)}function P(){var x=this;H(x.path,x.flags,x.mode,function(j,L){j?(x.autoClose&&x.destroy(),x.emit("error",j)):(x.fd=L,x.emit("open",L),x.read())})}function u(x,j){return this instanceof u?(f.apply(this,arguments),this):u.apply(Object.create(u.prototype),arguments)}function S(){var x=this;H(x.path,x.flags,x.mode,function(j,L){j?(x.destroy(),x.emit("error",j)):(x.fd=L,x.emit("open",L))})}function k(x,j){return new r.ReadStream(x,j)}function R(x,j){return new r.WriteStream(x,j)}var w=r.open;r.open=H;function H(x,j,L,ie){return typeof L=="function"&&(ie=L,L=null),ee(x,j,L,ie);function ee(B,K,oe,re,M){return w(B,K,oe,function(W,ae){W&&(W.code==="EMFILE"||W.code==="ENFILE")?yo([ee,[B,K,oe,re],W,M||Date.now(),Date.now()]):typeof re=="function"&&re.apply(this,arguments)})}}return r}function yo(r){Hn("ENQUEUE",r[0].name,r[1]),we[rt].push(r),gp()}var rs;function af(){for(var r=Date.now(),e=0;e<we[rt].length;++e)we[rt][e].length>2&&(we[rt][e][3]=r,we[rt][e][4]=r);gp()}function gp(){if(clearTimeout(rs),rs=void 0,we[rt].length!==0){var r=we[rt].shift(),e=r[0],t=r[1],n=r[2],o=r[3],i=r[4];if(o===void 0)Hn("RETRY",e.name,t),e.apply(null,t);else if(Date.now()-o>=6e4){Hn("TIMEOUT",e.name,t);var a=t.pop();typeof a=="function"&&a.call(null,n)}else{var s=Date.now()-i,c=Math.max(i-o,1),l=Math.min(c*1.2,100);s>=l?(Hn("RETRY",e.name,t),e.apply(null,t.concat([o]))):we[rt].push(r)}rs===void 0&&(rs=setTimeout(gp,0))}}});var lf=z((m_,cf)=>{function Gt(r,e){typeof e=="boolean"&&(e={forever:e}),this._originalTimeouts=JSON.parse(JSON.stringify(r)),this._timeouts=r,this._options=e||{},this._maxRetryTime=e&&e.maxRetryTime||1/0,this._fn=null,this._errors=[],this._attempts=1,this._operationTimeout=null,this._operationTimeoutCb=null,this._timeout=null,this._operationStart=null,this._options.forever&&(this._cachedTimeouts=this._timeouts.slice(0))}cf.exports=Gt;Gt.prototype.reset=function(){this._attempts=1,this._timeouts=this._originalTimeouts};Gt.prototype.stop=function(){this._timeout&&clearTimeout(this._timeout),this._timeouts=[],this._cachedTimeouts=null};Gt.prototype.retry=function(r){if(this._timeout&&clearTimeout(this._timeout),!r)return!1;var e=new Date().getTime();if(r&&e-this._operationStart>=this._maxRetryTime)return this._errors.unshift(new Error("RetryOperation timeout occurred")),!1;this._errors.push(r);var t=this._timeouts.shift();if(t===void 0)if(this._cachedTimeouts)this._errors.splice(this._errors.length-1,this._errors.length),this._timeouts=this._cachedTimeouts.slice(0),t=this._timeouts.shift();else return!1;var n=this,o=setTimeout(function(){n._attempts++,n._operationTimeoutCb&&(n._timeout=setTimeout(function(){n._operationTimeoutCb(n._attempts)},n._operationTimeout),n._options.unref&&n._timeout.unref()),n._fn(n._attempts)},t);return this._options.unref&&o.unref(),!0};Gt.prototype.attempt=function(r,e){this._fn=r,e&&(e.timeout&&(this._operationTimeout=e.timeout),e.cb&&(this._operationTimeoutCb=e.cb));var t=this;this._operationTimeoutCb&&(this._timeout=setTimeout(function(){t._operationTimeoutCb()},t._operationTimeout)),this._operationStart=new Date().getTime(),this._fn(this._attempts)};Gt.prototype.try=function(r){console.log("Using RetryOperation.try() is deprecated"),this.attempt(r)};Gt.prototype.start=function(r){console.log("Using RetryOperation.start() is deprecated"),this.attempt(r)};Gt.prototype.start=Gt.prototype.try;Gt.prototype.errors=function(){return this._errors};Gt.prototype.attempts=function(){return this._attempts};Gt.prototype.mainError=function(){if(this._errors.length===0)return null;for(var r={},e=null,t=0,n=0;n<this._errors.length;n++){var o=this._errors[n],i=o.message,a=(r[i]||0)+1;r[i]=a,a>=t&&(e=o,t=a)}return e}});var pf=z(zn=>{var LE=lf();zn.operation=function(r){var e=zn.timeouts(r);return new LE(e,{forever:r&&r.forever,unref:r&&r.unref,maxRetryTime:r&&r.maxRetryTime})};zn.timeouts=function(r){if(r instanceof Array)return[].concat(r);var e={retries:10,factor:2,minTimeout:1*1e3,maxTimeout:1/0,randomize:!1};for(var t in r)e[t]=r[t];if(e.minTimeout>e.maxTimeout)throw new Error("minTimeout is greater than maxTimeout");for(var n=[],o=0;o<e.retries;o++)n.push(this.createTimeout(o,e));return r&&r.forever&&!n.length&&n.push(this.createTimeout(o,e)),n.sort(function(i,a){return i-a}),n};zn.createTimeout=function(r,e){var t=e.randomize?Math.random()+1:1,n=Math.round(t*e.minTimeout*Math.pow(e.factor,r));return n=Math.min(n,e.maxTimeout),n};zn.wrap=function(r,e,t){if(e instanceof Array&&(t=e,e=null),!t){t=[];for(var n in r)typeof r[n]=="function"&&t.push(n)}for(var o=0;o<t.length;o++){var i=t[o],a=r[i];r[i]=function(c){var l=zn.operation(e),p=Array.prototype.slice.call(arguments,1),m=p.pop();p.push(function(g){l.retry(g)||(g&&(arguments[0]=l.mainError()),m.apply(this,arguments))}),l.attempt(function(){c.apply(r,p)})}.bind(r,a),r[i].options=e}}});var uf=z((f_,df)=>{df.exports=pf()});var mf=z((g_,os)=>{os.exports=["SIGABRT","SIGALRM","SIGHUP","SIGINT","SIGTERM"];process.platform!=="win32"&&os.exports.push("SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&os.exports.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT","SIGUNUSED")});var Cf=z((y_,vo)=>{var ve=global.process,Kn=function(r){return r&&typeof r=="object"&&typeof r.removeListener=="function"&&typeof r.emit=="function"&&typeof r.reallyExit=="function"&&typeof r.listeners=="function"&&typeof r.kill=="function"&&typeof r.pid=="number"&&typeof r.on=="function"};Kn(ve)?(hf=require("assert"),Co=mf(),ff=/^win/i.test(ve.platform),Fi=require("events"),typeof Fi!="function"&&(Fi=Fi.EventEmitter),ve.__signal_exit_emitter__?Ze=ve.__signal_exit_emitter__:(Ze=ve.__signal_exit_emitter__=new Fi,Ze.count=0,Ze.emitted={}),Ze.infinite||(Ze.setMaxListeners(1/0),Ze.infinite=!0),vo.exports=function(r,e){if(!Kn(global.process))return function(){};hf.equal(typeof r,"function","a callback must be provided for exit handler"),So===!1&&Sp();var t="exit";e&&e.alwaysLast&&(t="afterexit");var n=function(){Ze.removeListener(t,r),Ze.listeners("exit").length===0&&Ze.listeners("afterexit").length===0&&is()};return Ze.on(t,r),n},is=function(){!So||!Kn(global.process)||(So=!1,Co.forEach(function(e){try{ve.removeListener(e,as[e])}catch{}}),ve.emit=ss,ve.reallyExit=vp,Ze.count-=1)},vo.exports.unload=is,Gn=function(e,t,n){Ze.emitted[e]||(Ze.emitted[e]=!0,Ze.emit(e,t,n))},as={},Co.forEach(function(r){as[r]=function(){if(Kn(global.process)){var t=ve.listeners(r);t.length===Ze.count&&(is(),Gn("exit",null,r),Gn("afterexit",null,r),ff&&r==="SIGHUP"&&(r="SIGINT"),ve.kill(ve.pid,r))}}}),vo.exports.signals=function(){return Co},So=!1,Sp=function(){So||!Kn(global.process)||(So=!0,Ze.count+=1,Co=Co.filter(function(e){try{return ve.on(e,as[e]),!0}catch{return!1}}),ve.emit=yf,ve.reallyExit=gf)},vo.exports.load=Sp,vp=ve.reallyExit,gf=function(e){Kn(global.process)&&(ve.exitCode=e||0,Gn("exit",ve.exitCode,null),Gn("afterexit",ve.exitCode,null),vp.call(ve,ve.exitCode))},ss=ve.emit,yf=function(e,t){if(e==="exit"&&Kn(global.process)){t!==void 0&&(ve.exitCode=t);var n=ss.apply(this,arguments);return Gn("exit",ve.exitCode,null),Gn("afterexit",ve.exitCode,null),n}else return ss.apply(this,arguments)}):vo.exports=function(){return function(){}};var hf,Co,ff,Fi,Ze,is,Gn,as,So,Sp,vp,gf,ss,yf});var vf=z((C_,kp)=>{"use strict";var Sf=Symbol();function NE(r,e,t){let n=e[Sf];if(n)return e.stat(r,(i,a)=>{if(i)return t(i);t(null,a.mtime,n)});let o=new Date(Math.ceil(Date.now()/1e3)*1e3+5);e.utimes(r,o,o,i=>{if(i)return t(i);e.stat(r,(a,s)=>{if(a)return t(a);let c=s.mtime.getTime()%1e3===0?"s":"ms";Object.defineProperty(e,Sf,{value:c}),t(null,s.mtime,c)})})}function WE(r){let e=Date.now();return r==="s"&&(e=Math.ceil(e/1e3)*1e3),new Date(e)}kp.exports.probe=NE;kp.exports.getMtime=WE});var Ef=z((S_,Di)=>{"use strict";var UE=require("path"),Rp=Cp(),jE=uf(),BE=Cf(),kf=vf(),Or={};function Mi(r,e){return e.lockfilePath||`${r}.lock`}function Ep(r,e,t){if(!e.realpath)return t(null,UE.resolve(r));e.fs.realpath(r,t)}function Pp(r,e,t){let n=Mi(r,e);e.fs.mkdir(n,o=>{if(!o)return kf.probe(n,e.fs,(i,a,s)=>{if(i)return e.fs.rmdir(n,()=>{}),t(i);t(null,a,s)});if(o.code!=="EEXIST")return t(o);if(e.stale<=0)return t(Object.assign(new Error("Lock file is already being held"),{code:"ELOCKED",file:r}));e.fs.stat(n,(i,a)=>{if(i)return i.code==="ENOENT"?Pp(r,{...e,stale:0},t):t(i);if(!wf(a,e))return t(Object.assign(new Error("Lock file is already being held"),{code:"ELOCKED",file:r}));Pf(r,e,s=>{if(s)return t(s);Pp(r,{...e,stale:0},t)})})})}function wf(r,e){return r.mtime.getTime()<Date.now()-e.stale}function Pf(r,e,t){e.fs.rmdir(Mi(r,e),n=>{if(n&&n.code!=="ENOENT")return t(n);t()})}function cs(r,e){let t=Or[r];t.updateTimeout||(t.updateDelay=t.updateDelay||e.update,t.updateTimeout=setTimeout(()=>{t.updateTimeout=null,e.fs.stat(t.lockfilePath,(n,o)=>{let i=t.lastUpdate+e.stale<Date.now();if(n)return n.code==="ENOENT"||i?wp(r,t,Object.assign(n,{code:"ECOMPROMISED"})):(t.updateDelay=1e3,cs(r,e));if(!(t.mtime.getTime()===o.mtime.getTime()))return wp(r,t,Object.assign(new Error("Unable to update lock within the stale threshold"),{code:"ECOMPROMISED"}));let s=kf.getMtime(t.mtimePrecision);e.fs.utimes(t.lockfilePath,s,s,c=>{let l=t.lastUpdate+e.stale<Date.now();if(!t.released){if(c)return c.code==="ENOENT"||l?wp(r,t,Object.assign(c,{code:"ECOMPROMISED"})):(t.updateDelay=1e3,cs(r,e));t.mtime=s,t.lastUpdate=Date.now(),t.updateDelay=null,cs(r,e)}})})},t.updateDelay),t.updateTimeout.unref&&t.updateTimeout.unref())}function wp(r,e,t){e.released=!0,e.updateTimeout&&clearTimeout(e.updateTimeout),Or[r]===e&&delete Or[r],e.options.onCompromised(t)}function VE(r,e,t){e={stale:1e4,update:null,realpath:!0,retries:0,fs:Rp,onCompromised:n=>{throw n},...e},e.retries=e.retries||0,e.retries=typeof e.retries=="number"?{retries:e.retries}:e.retries,e.stale=Math.max(e.stale||0,2e3),e.update=e.update==null?e.stale/2:e.update||0,e.update=Math.max(Math.min(e.update,e.stale/2),1e3),Ep(r,e,(n,o)=>{if(n)return t(n);let i=jE.operation(e.retries);i.attempt(()=>{Pp(o,e,(a,s,c)=>{if(i.retry(a))return;if(a)return t(i.mainError());let l=Or[o]={lockfilePath:Mi(o,e),mtime:s,mtimePrecision:c,options:e,lastUpdate:Date.now()};cs(o,e),t(null,p=>{if(l.released)return p&&p(Object.assign(new Error("Lock is already released"),{code:"ERELEASED"}));Rf(o,{...e,realpath:!1},p)})})})})}function Rf(r,e,t){e={fs:Rp,realpath:!0,...e},Ep(r,e,(n,o)=>{if(n)return t(n);let i=Or[o];if(!i)return t(Object.assign(new Error("Lock is not acquired/owned by you"),{code:"ENOTACQUIRED"}));i.updateTimeout&&clearTimeout(i.updateTimeout),i.released=!0,delete Or[o],Pf(o,e,t)})}function qE(r,e,t){e={stale:1e4,realpath:!0,fs:Rp,...e},e.stale=Math.max(e.stale||0,2e3),Ep(r,e,(n,o)=>{if(n)return t(n);e.fs.stat(Mi(o,e),(i,a)=>i?i.code==="ENOENT"?t(null,!1):t(i):t(null,!wf(a,e)))})}function $E(){return Or}BE(()=>{for(let r in Or){let e=Or[r].options;try{e.fs.rmdirSync(Mi(r,e))}catch{}}});Di.exports.lock=VE;Di.exports.unlock=Rf;Di.exports.check=qE;Di.exports.getLocks=$E});var Tf=z((v_,bf)=>{"use strict";var HE=Cp();function zE(r){let e=["mkdir","realpath","stat","rmdir","utimes"],t={...r};return e.forEach(n=>{t[n]=(...o)=>{let i=o.pop(),a;try{a=r[`${n}Sync`](...o)}catch(s){return i(s)}i(null,a)}}),t}function KE(r){return(...e)=>new Promise((t,n)=>{e.push((o,i)=>{o?n(o):t(i)}),r(...e)})}function GE(r){return(...e)=>{let t,n;if(e.push((o,i)=>{t=o,n=i}),r(...e),t)throw t;return n}}function JE(r){if(r={...r},r.fs=zE(r.fs||HE),typeof r.retries=="number"&&r.retries>0||r.retries&&typeof r.retries.retries=="number"&&r.retries.retries>0)throw Object.assign(new Error("Cannot use retries with the sync api"),{code:"ESYNC"});return r}bf.exports={toPromise:KE,toSync:GE,toSyncOptions:JE}});var Tp=z((k_,sn)=>{"use strict";var ko=Ef(),{toPromise:ls,toSync:ps,toSyncOptions:bp}=Tf();async function xf(r,e){let t=await ls(ko.lock)(r,e);return ls(t)}function YE(r,e){let t=ps(ko.lock)(r,bp(e));return ps(t)}function XE(r,e){return ls(ko.unlock)(r,e)}function QE(r,e){return ps(ko.unlock)(r,bp(e))}function ZE(r,e){return ls(ko.check)(r,e)}function eb(r,e){return ps(ko.check)(r,bp(e))}sn.exports=xf;sn.exports.lock=xf;sn.exports.unlock=XE;sn.exports.lockSync=YE;sn.exports.unlockSync=QE;sn.exports.check=ZE;sn.exports.checkSync=eb});async function Fp(r){return lr.promises.readFile(r,"utf8")}async function Le(r,e=""){try{return await Fp(r)}catch(t){if(F(t))return xp.debug("optional text file does not exist: %s",r),e;throw t}}async function He(r,e){await lr.promises.mkdir(ds.dirname(r),{recursive:!0}),await lr.promises.writeFile(r,e,"utf8")}async function If(r,e,t={}){await lr.promises.mkdir(ds.dirname(r),{recursive:!0});let n,o=t.timeoutMs??tb,i=t.retryDelayMs??rb;try{n=await Df.lock(r,{lockfilePath:r,realpath:!1,stale:t.staleMs??nb,retries:{retries:Math.ceil(o/i),factor:1,minTimeout:i,maxTimeout:i}})}catch(a){throw Ja(a)?new St("err.lock.busy",{lockPath:r,timeoutMs:o},{category:"lockBusy",cause:a instanceof Error?a:void 0,message:`file lock is held by another process: ${r}`}):a}try{return await e()}finally{if(n)try{await n()}catch(a){xp.warn(`release file lock failed: ${r}`,a)}}}async function cn(r,e){await lr.promises.mkdir(ds.dirname(r),{recursive:!0});let t=`${r}.succapp-tmp.${process.pid}.${Date.now()}.${(0,Ff.randomUUID)()}`;try{typeof e=="string"||Buffer.isBuffer(e)?await lr.promises.writeFile(t,e):await(0,Mf.pipeline)(e,lr.createWriteStream(t)),await lr.promises.rename(t,r)}catch(n){throw await lr.promises.rm(t,{force:!0}).catch(o=>{xp.debug("cleanup temporary write file failed: %s",t,o)}),n}}var lr,ds,Ff,Mf,Df,xp,tb,rb,nb,vt=pe(()=>{lr=b(require("fs")),ds=b(require("path")),Ff=require("crypto"),Mf=require("stream/promises"),Df=b(Tp());D();J();G();xp=T("common.file");tb=5e3,rb=100,nb=3e4});function Np(r){return Bb(r)??Vb(hs(r))}function hs(r){if(!r)return"";let e=r.replace(/\\/g,"/"),t=e.substring(e.lastIndexOf("/")+1),n=t.lastIndexOf(".");return(n>=0?t.substring(n+1):t).toLowerCase()}function Wb(r){if(!r)return!1;let e=Wp(r);return e.startsWith("text/")?!0:e==="image/svg+xml"||e==="application/json"||e==="application/javascript"||e==="application/xml"||e==="application/xhtml+xml"||e==="application/x-javascript"}function Ub(r){return r?Wp(r)==="application/json":!1}function hg(r){if(!r)return!1;let e=Wp(r);return e==="application/json"||e.endsWith("+json")}function fg(r){return Wb(Np(r))}function gg(r){return Ub(Np(r))}function jb(r){let e=new Map;for(let t of r.split(/\r?\n/)){let n=t.trim();if(!n||n.startsWith("#")||n.startsWith("!"))continue;let o=n.indexOf(":");o<0||e.set(yg(n.substring(0,o)),n.substring(o+1).trim())}return e}function Bb(r){let e=r.replace(/\\/g,"/").toLowerCase(),t=e.substring(e.lastIndexOf("/")+1),n=t.lastIndexOf("."),o=n>=0?t.substring(n+1):"";for(let i of Nb)if(i.basename===t||i.extension===o)return i.contentType}function Vb(r,e=Ob){return qb().get(yg(r))??e}function qb(){let r=$b(),e=Yn.statSync(r);return(!Ni||Ni.filePath!==r||Ni.mtimeMs!==e.mtimeMs)&&(Ni={filePath:r,mtimeMs:e.mtimeMs,contents:jb(Yn.readFileSync(r,"utf8"))}),Ni.contents}function yg(r){return(r??"").trim().replace(/^\./,"").toLowerCase()}function Wp(r){let e=r.indexOf(";");return(e>=0?r.substring(0,e):r).trim().toLowerCase()}function $b(){let r=bo.join(Hb(),"resources",_b);return U(Yn.existsSync(r),`Content-Type resource not found: ${r}. Run build/watch to sync it from BI project.`),r}function Hb(){for(let r=__dirname;;r=bo.dirname(r)){if(Yn.existsSync(bo.join(r,Lb)))return r;bo.dirname(r)===r&&uo(`Extension root not found from ${__dirname}`)}}var Yn,bo,Ob,_b,Lb,Ni,Nb,To=pe(()=>{Yn=b(require("fs")),bo=b(require("path"));Ce();Ob="application/octet-stream",_b="contents.properties",Lb="package.json",Nb=[]});async function Mg(r,e,t){let n=typeof e=="function"?e:t;if(U(n,"runConcurrently task is required"),r.length===0)return;let o=typeof e=="function"?void 0:e,i=new ze(o);await Promise.all(r.map(a=>i.addTask(()=>n(a))))}var rT,ze,pn=pe(()=>{$n();Ce();D();rT=8,ze=class{activeCount=0;canceledError;pendingSlots=[];idleWaiters=[];signal;abortListener;maxConcurrency;constructor(e){typeof e=="number"?this.maxConcurrency=e:(this.maxConcurrency=e?.maxConcurrency??rT,this.signal=e?.signal),this.maxConcurrency=Math.max(1,this.maxConcurrency),this.signal&&(this.abortListener=()=>this.cancel(ap(this.signal)),this.signal.aborted?this.abortListener():this.signal.addEventListener("abort",this.abortListener,{once:!0}))}async addTask(e){let t=await this.acquire();try{return mt(this.signal),await e()}catch(n){throw n instanceof Kt&&this.cancel(n),n}finally{t.release()}}async acquire(){if(mt(this.signal),this.canceledError)throw this.canceledError;if(this.activeCount<this.maxConcurrency)return this.activeCount++,this.createSlot();if(await new Promise((e,t)=>{this.pendingSlots.push({resolve:e,reject:t})}),mt(this.signal),this.canceledError)throw this.canceledError;return this.createSlot()}async waitAll(){this.isIdle()||await new Promise(e=>this.idleWaiters.push(e))}cancel(e){if(this.canceledError)return;this.canceledError=e instanceof Error?e:new Error(String(e??"ConTasksRunner cancelled")),this.disposeAbortListener();let t=this.pendingSlots.splice(0);for(let n of t)n.reject(this.canceledError);this.notifyIdleIfNeeded()}createSlot(){let e=!1;return{release:()=>{e||(e=!0,this.releaseSlot())}}}releaseSlot(){let e=this.pendingSlots.shift();if(e){e.resolve();return}this.activeCount--,this.notifyIdleIfNeeded()}isIdle(){return this.activeCount===0&&this.pendingSlots.length===0}notifyIdleIfNeeded(){if(this.isIdle())for(let e of this.idleWaiters.splice(0))e()}disposeAbortListener(){this.signal&&this.abortListener&&this.signal.removeEventListener("abort",this.abortListener)}}});function Pe(r){let e=r.replace(iT,"/").replace(/^\/+|\/+$/g,"");return e?"/"+e:"/"}function Og(r){let e=Pe(r);if(e.split("/").filter(Boolean).includes(aT))throw new Error(`Unsafe metadata path: ${r}`);return e}function _g(r){if(!r.startsWith("/"))throw new E("err.meta.invalidPath",{path:r,reason:"notAbsolute"});try{return Og(r)}catch(e){throw new E("err.meta.invalidPath",{path:r,reason:"unsafe"},{cause:e})}}function te(r,e){return ue.join(r,Pe(e).replace(/^\//,""))}function Lg(r,e){let t=ue.resolve(r),n=ue.resolve(t,Og(e).replace(/^\//,""));if(n!==t&&!n.startsWith(t+ue.sep))throw new Error(`Metadata path escapes root: ${e}`);return n}function pr(r){return ue.join(r,Xt)}function Wr(r,...e){return ue.join(pr(r),...e)}function dr(r){return ue.join(r,pT,dT)}function Xn(r){let e=r.replace(sT,"/");if(!e||ue.posix.isAbsolute(e)||ue.win32.isAbsolute(r)||ue.win32.isAbsolute(e))return;let t=e.split("/");return t.some(hT)?void 0:t.join("/")}function dn(r,e="relative path"){let t=Xn(r);if(!t)throw new Error(`invalid ${e}: ${r}`);return t}function Ng(r,e,t="relative path"){return ue.join(r,...dn(e,t).split("/"))}function Wt(r,e){return ue.isAbsolute(e)?ue.normalize(e):ue.resolve(r,e)}async function Z(r){try{return await vs.promises.access(r),!0}catch(e){if(F(e))return Ag.debug(`path does not exist: ${r}`),!1;throw e}}async function ks(r){let e;try{e=await vs.promises.stat(r)}catch(t){throw F(t)?new E("err.file.notFound",{path:r},{cause:t}):t}if(!e.isDirectory())throw new E("err.file.notDirectory",{path:r})}function vr(r){return r.trim().replace(nT,"").replace(oT,"-")}function kr(r,e){let t=ue.resolve(r),n=ue.resolve(e);if(n===t||!n.startsWith(t+ue.sep))return;let o=ue.relative(t,n);if(!o)return"/";let i=o.split(ue.sep);if(!i[0].startsWith("."))return Pe(i.join("/"))}function Ne(r){return r.replace(/^\//,"")}function We(r){let e=Pe(r);if(e==="/")return;let[t]=e.slice(1).split("/");return t?`/${t}`:void 0}function Tt(r){let e=r.trim();if(!e||e.startsWith(".")||e.includes("/")||e.includes("\\"))throw new Error(`invalid project name: ${r}`);return`/${e}`}function Q(r,e){let t=Ig(r),n=Ig(e);return t===n||n==="/"?!0:t.length<=n.length?!1:t.charCodeAt(n.length)===47&&t.startsWith(n)}function Fo(r,e,t,n){return Ss(r,t)||e&&Ss(e,t)?!0:!!n&&(Ss(r,n)||!!e&&Ss(e,n))}function Ss(r,e){return Q(r,e)||Q(e,r)}function Wg(r){let e;for(let t of r){let n=uT(t);if(!e){e=n;continue}e=mT(e,n)}if(e)return Pe(e.join("/"))}function uT(r){let e=Pe(r);if(e==="/")return[];let t=e.split("/").filter(Boolean);return t.pop(),t}function mT(r,e){let t=Math.min(r.length,e.length),n=[];for(let o=0;o<t&&r[o]===e[o];o++)n.push(r[o]);return n}function ft(r){let e=[...r].sort((n,o)=>{let i=Dg(n)-Dg(o);return i===0?n.localeCompare(o):i}),t=[];for(let n of e)t.some(o=>Q(n,o))||t.push(n);return t}function Dg(r){return r.split("/").filter(Boolean).length}function Ig(r){return ue.posix.normalize(Pe(r))}function hT(r){return!r||r===cT||r===lT}async function Qt(r){try{await vs.promises.rm(r,{recursive:!0,force:!0})}catch(e){if(!F(e))throw e;Ag.debug(`remove ignored missing path: ${r}`)}}function wr(r){return r.split("/").filter(Boolean).length}var vs,ue,Ag,nT,oT,iT,aT,sT,cT,lT,Xt,pT,dT,$=pe(()=>{vs=b(require("fs")),ue=b(require("path"));D();J();G();Ag=T("common.path"),nT=/^https?:\/\/|\/+$/gi,oT=/[^a-zA-Z0-9.]+/g,iT=/[\\/]+/g,aT="..",sT=/\\/g,cT=".",lT="..",Xt=".succapp",pT=".vscode",dT="settings.json"});var Pd=z((bU,lC)=>{lC.exports={LOCHDR:30,LOCSIG:67324752,LOCVER:4,LOCFLG:6,LOCHOW:8,LOCTIM:10,LOCCRC:14,LOCSIZ:18,LOCLEN:22,LOCNAM:26,LOCEXT:28,EXTSIG:134695760,EXTHDR:16,EXTCRC:4,EXTSIZ:8,EXTLEN:12,CENHDR:46,CENSIG:33639248,CENVEM:4,CENVER:6,CENFLG:8,CENHOW:10,CENTIM:12,CENCRC:16,CENSIZ:20,CENLEN:24,CENNAM:28,CENEXT:30,CENCOM:32,CENDSK:34,CENATT:36,CENATX:38,CENOFF:42,ENDHDR:22,ENDSIG:101010256,ENDSUB:8,ENDTOT:10,ENDSIZ:12,ENDOFF:16,ENDCOM:20,END64HDR:20,END64SIG:117853008,END64START:4,END64OFF:8,END64NUMDISKS:16,ZIP64SIG:101075792,ZIP64HDR:56,ZIP64LEAD:12,ZIP64SIZE:4,ZIP64VEM:12,ZIP64VER:14,ZIP64DSK:16,ZIP64DSKDIR:20,ZIP64SUB:24,ZIP64TOT:32,ZIP64SIZB:40,ZIP64OFF:48,ZIP64EXTRA:56,STORED:0,SHRUNK:1,REDUCED1:2,REDUCED2:3,REDUCED3:4,REDUCED4:5,IMPLODED:6,DEFLATED:8,ENHANCED_DEFLATED:9,PKWARE:10,BZIP2:12,LZMA:14,IBM_TERSE:18,IBM_LZ77:19,AES_ENCRYPT:99,FLG_ENC:1,FLG_COMP1:2,FLG_COMP2:4,FLG_DESC:8,FLG_ENH:16,FLG_PATCH:32,FLG_STR:64,FLG_EFS:2048,FLG_MSK:4096,FILE:2,BUFFER:1,NONE:0,EF_ID:0,EF_SIZE:2,ID_ZIP64:1,ID_AVINFO:7,ID_PFS:8,ID_OS2:9,ID_NTFS:10,ID_OPENVMS:12,ID_UNIX:13,ID_FORK:14,ID_PATCH:15,ID_X509_PKCS7:20,ID_X509_CERTID_F:21,ID_X509_CERTID_C:22,ID_STRONGENC:23,ID_RECORD_MGT:24,ID_X509_PKCS7_RL:25,ID_IBM1:101,ID_IBM2:102,ID_POSZIP:18064,EF_ZIP64_OR_32:4294967295,EF_ZIP64_OR_16:65535,EF_ZIP64_SUNCOMP:0,EF_ZIP64_SCOMP:8,EF_ZIP64_RHO:16,EF_ZIP64_DSN:24}});var _s=z(dC=>{var pC={INVALID_LOC:"Invalid LOC header (bad signature)",INVALID_CEN:"Invalid CEN header (bad signature)",INVALID_END:"Invalid END header (bad signature)",DESCRIPTOR_NOT_EXIST:"No descriptor present",DESCRIPTOR_UNKNOWN:"Unknown descriptor format",DESCRIPTOR_FAULTY:"Descriptor data is malformed",NO_DATA:"Nothing to decompress",BAD_CRC:"CRC32 checksum failed {0}",FILE_IN_THE_WAY:"There is a file in the way: {0}",UNKNOWN_METHOD:"Invalid/unsupported compression method",AVAIL_DATA:"inflate::Available inflate data did not terminate",INVALID_DISTANCE:"inflate::Invalid literal/length or distance code in fixed or dynamic block",TO_MANY_CODES:"inflate::Dynamic block code description: too many length or distance codes",INVALID_REPEAT_LEN:"inflate::Dynamic block code description: repeat more than specified lengths",INVALID_REPEAT_FIRST:"inflate::Dynamic block code description: repeat lengths with no first length",INCOMPLETE_CODES:"inflate::Dynamic block code description: code lengths codes incomplete",INVALID_DYN_DISTANCE:"inflate::Dynamic block code description: invalid distance code lengths",INVALID_CODES_LEN:"inflate::Dynamic block code description: invalid literal/length code lengths",INVALID_STORE_BLOCK:"inflate::Stored block length did not match one's complement",INVALID_BLOCK_TYPE:"inflate::Invalid block type (type == 3)",CANT_EXTRACT_FILE:"Could not extract the file",CANT_OVERRIDE:"Target file already exists",DISK_ENTRY_TOO_LARGE:"Number of disk entries is too large",NO_ZIP:"No zip file was loaded",NO_ENTRY:"Entry doesn't exist",DIRECTORY_CONTENT_ERROR:"A directory cannot have content",FILE_NOT_FOUND:'File not found: "{0}"',NOT_IMPLEMENTED:"Not implemented",INVALID_FILENAME:"Invalid filename",INVALID_FORMAT:"Invalid or unsupported zip format. No END header found",INVALID_PASS_PARAM:"Incompatible password parameter",WRONG_PASSWORD:"Wrong Password",COMMENT_TOO_LONG:"Comment is too long",EXTRA_FIELD_PARSE_ERROR:"Extra field parsing error"};function ax(r){return function(...e){return e.length&&(r=r.replace(/\{(\d)\}/g,(t,n)=>e[n]||"")),new Error("ADM-ZIP: "+r)}}for(let r of Object.keys(pC))dC[r]=ax(pC[r])});var gC=z((xU,fC)=>{var sx=require("fs"),Ge=require("path"),uC=Pd(),cx=_s(),lx=typeof process=="object"&&process.platform==="win32",mC=r=>typeof r=="object"&&r!==null,hC=new Uint32Array(256).map((r,e)=>{for(let t=0;t<8;t++)e&1?e=3988292384^e>>>1:e>>>=1;return e>>>0});function Me(r){this.sep=Ge.sep,this.fs=sx,mC(r)&&mC(r.fs)&&typeof r.fs.statSync=="function"&&(this.fs=r.fs)}fC.exports=Me;Me.prototype.makeDir=function(r){let e=this;function t(n){let o=n.split(e.sep)[0];n.split(e.sep).forEach(function(i){if(!(!i||i.substr(-1,1)===":")){o+=e.sep+i;var a;try{a=e.fs.statSync(o)}catch(s){if(s.message&&s.message.startsWith("ENOENT"))e.fs.mkdirSync(o);else throw s}if(a&&a.isFile())throw cx.FILE_IN_THE_WAY(`"${o}"`)}})}t(r)};Me.prototype.writeFileTo=function(r,e,t,n){let o=this;if(o.fs.existsSync(r)){if(!t)return!1;var i=o.fs.statSync(r);if(i.isDirectory())return!1}var a=Ge.dirname(r);o.fs.existsSync(a)||o.makeDir(a);var s;try{s=o.fs.openSync(r,"w",438)}catch{o.fs.chmodSync(r,438),s=o.fs.openSync(r,"w",438)}if(s)try{o.fs.writeSync(s,e,0,e.length,0)}finally{o.fs.closeSync(s)}return o.fs.chmodSync(r,n||438),!0};Me.prototype.writeFileToAsync=function(r,e,t,n,o){typeof n=="function"&&(o=n,n=void 0);let i=this;i.fs.exists(r,function(a){if(a&&!t)return o(!1);i.fs.stat(r,function(s,c){if(a&&c.isDirectory())return o(!1);var l=Ge.dirname(r);i.fs.exists(l,function(p){p||i.makeDir(l),i.fs.open(r,"w",438,function(m,g){m?i.fs.chmod(r,438,function(){i.fs.open(r,"w",438,function(d,f){i.fs.write(f,e,0,e.length,0,function(){i.fs.close(f,function(){i.fs.chmod(r,n||438,function(){o(!0)})})})})}):g?i.fs.write(g,e,0,e.length,0,function(){i.fs.close(g,function(){i.fs.chmod(r,n||438,function(){o(!0)})})}):i.fs.chmod(r,n||438,function(){o(!0)})})})})})};Me.prototype.findFiles=function(r){let e=this;function t(n,o,i){typeof o=="boolean"&&(i=o,o=void 0);let a=[];return e.fs.readdirSync(n).forEach(function(s){let c=Ge.join(n,s),l=e.fs.statSync(c);(!o||o.test(c))&&a.push(Ge.normalize(c)+(l.isDirectory()?e.sep:"")),l.isDirectory()&&i&&(a=a.concat(t(c,o,i)))}),a}return t(r,void 0,!0)};Me.prototype.findFilesAsync=function(r,e){let t=this,n=[];t.fs.readdir(r,function(o,i){if(o)return e(o);let a=i.length;if(!a)return e(null,n);i.forEach(function(s){s=Ge.join(r,s),t.fs.stat(s,function(c,l){if(c)return e(c);l&&(n.push(Ge.normalize(s)+(l.isDirectory()?t.sep:"")),l.isDirectory()?t.findFilesAsync(s,function(p,m){if(p)return e(p);n=n.concat(m),--a||e(null,n)}):--a||e(null,n))})})})};Me.prototype.getAttributes=function(){};Me.prototype.setAttributes=function(){};Me.crc32update=function(r,e){return hC[(r^e)&255]^r>>>8};Me.crc32=function(r){typeof r=="string"&&(r=Buffer.from(r,"utf8"));let e=r.length,t=-1;for(let n=0;n<e;)t=Me.crc32update(t,r[n++]);return~t>>>0};Me.methodToString=function(r){switch(r){case uC.STORED:return"STORED ("+r+")";case uC.DEFLATED:return"DEFLATED ("+r+")";default:return"UNSUPPORTED ("+r+")"}};Me.canonical=function(r){if(!r)return"";let e=Ge.posix.normalize("/"+r.split("\\").join("/"));return Ge.join(".",e)};Me.zipnamefix=function(r){if(!r)return"";let e=Ge.posix.normalize("/"+r.split("\\").join("/"));return Ge.posix.join(".",e)};Me.findLast=function(r,e){if(!Array.isArray(r))throw new TypeError("arr is not array");let t=r.length>>>0;for(let n=t-1;n>=0;n--)if(e(r[n],n,r))return r[n]};Me.sanitize=function(r,e){r=Ge.resolve(Ge.normalize(r));for(var t=e.split("/"),n=0,o=t.length;n<o;n++){var i=Ge.normalize(Ge.join(r,t.slice(n,o).join(Ge.sep)));if(i.indexOf(r)===0)return i}return Ge.normalize(Ge.join(r,Ge.basename(e)))};Me.toBuffer=function(e,t){return Buffer.isBuffer(e)?e:e instanceof Uint8Array?Buffer.from(e):typeof e=="string"?t(e):Buffer.alloc(0)};Me.readBigUInt64LE=function(r,e){let t=r.readUInt32LE(e);return r.readUInt32LE(e+4)*4294967296+t};Me.fromDOS2Date=function(r){return new Date((r>>25&127)+1980,Math.max((r>>21&15)-1,0),Math.max(r>>16&31,1),r>>11&31,r>>5&63,(r&31)<<1)};Me.fromDate2DOS=function(r){let e=0,t=0;return r.getFullYear()>1979&&(e=(r.getFullYear()-1980&127)<<9|r.getMonth()+1<<5|r.getDate(),t=r.getHours()<<11|r.getMinutes()<<5|r.getSeconds()>>1),e<<16|t};Me.isWin=lx;Me.crcTable=hC});var CC=z((FU,yC)=>{var px=require("path");yC.exports=function(r,{fs:e}){var t=r||"",n=i(),o=null;function i(){return{directory:!1,readonly:!1,hidden:!1,executable:!1,mtime:0,atime:0}}return t&&e.existsSync(t)?(o=e.statSync(t),n.directory=o.isDirectory(),n.mtime=o.mtime,n.atime=o.atime,n.executable=(73&o.mode)!==0,n.readonly=(128&o.mode)===0,n.hidden=px.basename(t)[0]==="."):console.warn("Invalid path: "+t),{get directory(){return n.directory},get readOnly(){return n.readonly},get hidden(){return n.hidden},get mtime(){return n.mtime},get atime(){return n.atime},get executable(){return n.executable},decodeAttributes:function(){},encodeAttributes:function(){},toJSON:function(){return{path:t,isDirectory:n.directory,isReadOnly:n.readonly,isHidden:n.hidden,isExecutable:n.executable,mTime:n.mtime,aTime:n.atime}},toString:function(){return JSON.stringify(this.toJSON(),null," ")}}}});var vC=z((MU,SC)=>{SC.exports={efs:!0,encode:r=>Buffer.from(r,"utf8"),decode:r=>r.toString("utf8")}});var $o=z((DU,qo)=>{qo.exports=gC();qo.exports.Constants=Pd();qo.exports.Errors=_s();qo.exports.FileAttr=CC();qo.exports.decoder=vC()});var wC=z((IU,kC)=>{var wn=$o(),I=wn.Constants;kC.exports=function(){var r=20,e=10,t=0,n=0,o=0,i=0,a=0,s=0,c=0,l=0,p=0,m=0,g=0,d=0,f=0;r|=wn.isWin?2560:768,t|=I.FLG_EFS;let y={extraLen:0},C=u=>Math.max(0,u)>>>0,v=u=>Math.max(0,u)&65535,P=u=>Math.max(0,u)&255;return o=wn.fromDate2DOS(new Date),{get made(){return r},set made(u){r=u},get version(){return e},set version(u){e=u},get flags(){return t},set flags(u){t=u},get flags_efs(){return(t&I.FLG_EFS)>0},set flags_efs(u){u?t|=I.FLG_EFS:t&=~I.FLG_EFS},get flags_desc(){return(t&I.FLG_DESC)>0},set flags_desc(u){u?t|=I.FLG_DESC:t&=~I.FLG_DESC},get method(){return n},set method(u){switch(u){case I.STORED:this.version=10;case I.DEFLATED:default:this.version=20}n=u},get time(){return wn.fromDOS2Date(this.timeval)},set time(u){u=new Date(u),this.timeval=wn.fromDate2DOS(u)},get timeval(){return o},set timeval(u){o=C(u)},get timeHighByte(){return P(o>>>8)},get crc(){return i},set crc(u){i=C(u)},get compressedSize(){return a},set compressedSize(u){a=C(u)},get size(){return s},set size(u){s=C(u)},get fileNameLength(){return c},set fileNameLength(u){c=u},get extraLength(){return l},set extraLength(u){l=u},get extraLocalLength(){return y.extraLen},set extraLocalLength(u){y.extraLen=u},get commentLength(){return p},set commentLength(u){p=u},get diskNumStart(){return m},set diskNumStart(u){m=C(u)},get inAttr(){return g},set inAttr(u){g=C(u)},get attr(){return d},set attr(u){d=C(u)},get fileAttr(){return(d||0)>>16&4095},get offset(){return f},set offset(u){f=C(u)},get encrypted(){return(t&I.FLG_ENC)===I.FLG_ENC},get centralHeaderSize(){return I.CENHDR+c+l+p},get realDataOffset(){return f+I.LOCHDR+y.fnameLen+y.extraLen},get localHeader(){return y},loadLocalHeaderFromBinary:function(u){var S=u.slice(f,f+I.LOCHDR);if(S.readUInt32LE(0)!==I.LOCSIG)throw wn.Errors.INVALID_LOC();y.version=S.readUInt16LE(I.LOCVER),y.flags=S.readUInt16LE(I.LOCFLG),y.flags_desc=(y.flags&I.FLG_DESC)>0,y.method=S.readUInt16LE(I.LOCHOW),y.time=S.readUInt32LE(I.LOCTIM),y.crc=S.readUInt32LE(I.LOCCRC),y.compressedSize=S.readUInt32LE(I.LOCSIZ),y.size=S.readUInt32LE(I.LOCLEN),y.fnameLen=S.readUInt16LE(I.LOCNAM),y.extraLen=S.readUInt16LE(I.LOCEXT);let k=f+I.LOCHDR+y.fnameLen,R=k+y.extraLen;return u.slice(k,R)},loadFromBinary:function(u){if(u.length!==I.CENHDR||u.readUInt32LE(0)!==I.CENSIG)throw wn.Errors.INVALID_CEN();r=u.readUInt16LE(I.CENVEM),e=u.readUInt16LE(I.CENVER),t=u.readUInt16LE(I.CENFLG),n=u.readUInt16LE(I.CENHOW),o=u.readUInt32LE(I.CENTIM),i=u.readUInt32LE(I.CENCRC),a=u.readUInt32LE(I.CENSIZ),s=u.readUInt32LE(I.CENLEN),c=u.readUInt16LE(I.CENNAM),l=u.readUInt16LE(I.CENEXT),p=u.readUInt16LE(I.CENCOM),m=u.readUInt16LE(I.CENDSK),g=u.readUInt16LE(I.CENATT),d=u.readUInt32LE(I.CENATX),f=u.readUInt32LE(I.CENOFF)},localHeaderToBinary:function(){var u=Buffer.alloc(I.LOCHDR);return u.writeUInt32LE(I.LOCSIG,0),u.writeUInt16LE(e,I.LOCVER),u.writeUInt16LE(t,I.LOCFLG),u.writeUInt16LE(n,I.LOCHOW),u.writeUInt32LE(o,I.LOCTIM),u.writeUInt32LE(i,I.LOCCRC),u.writeUInt32LE(a,I.LOCSIZ),u.writeUInt32LE(s,I.LOCLEN),u.writeUInt16LE(c,I.LOCNAM),u.writeUInt16LE(y.extraLen,I.LOCEXT),u},centralHeaderToBinary:function(){var u=Buffer.alloc(I.CENHDR+c+l+p);return u.writeUInt32LE(I.CENSIG,0),u.writeUInt16LE(r,I.CENVEM),u.writeUInt16LE(e,I.CENVER),u.writeUInt16LE(t,I.CENFLG),u.writeUInt16LE(n,I.CENHOW),u.writeUInt32LE(o,I.CENTIM),u.writeUInt32LE(i,I.CENCRC),u.writeUInt32LE(a,I.CENSIZ),u.writeUInt32LE(s,I.CENLEN),u.writeUInt16LE(c,I.CENNAM),u.writeUInt16LE(l,I.CENEXT),u.writeUInt16LE(p,I.CENCOM),u.writeUInt16LE(m,I.CENDSK),u.writeUInt16LE(g,I.CENATT),u.writeUInt32LE(d,I.CENATX),u.writeUInt32LE(f,I.CENOFF),u},toJSON:function(){let u=function(S){return S+" bytes"};return{made:r,version:e,flags:t,method:wn.methodToString(n),time:this.time,crc:"0x"+i.toString(16).toUpperCase(),compressedSize:u(a),size:u(s),fileNameLength:u(c),extraLength:u(l),commentLength:u(p),diskNumStart:m,inAttr:g,attr:d,offset:f,centralHeaderSize:u(I.CENHDR+c+l+p)}},toString:function(){return JSON.stringify(this.toJSON(),null," ")}}}});var RC=z((AU,PC)=>{var Ho=$o(),Ee=Ho.Constants;PC.exports=function(){var r=0,e=0,t=0,n=0,o=0;return{get diskEntries(){return r},set diskEntries(i){r=e=i},get totalEntries(){return e},set totalEntries(i){e=r=i},get size(){return t},set size(i){t=i},get offset(){return n},set offset(i){n=i},get commentLength(){return o},set commentLength(i){o=i},get mainHeaderSize(){return Ee.ENDHDR+o},loadFromBinary:function(i){if((i.length!==Ee.ENDHDR||i.readUInt32LE(0)!==Ee.ENDSIG)&&(i.length<Ee.ZIP64HDR||i.readUInt32LE(0)!==Ee.ZIP64SIG))throw Ho.Errors.INVALID_END();i.readUInt32LE(0)===Ee.ENDSIG?(r=i.readUInt16LE(Ee.ENDSUB),e=i.readUInt16LE(Ee.ENDTOT),t=i.readUInt32LE(Ee.ENDSIZ),n=i.readUInt32LE(Ee.ENDOFF),o=i.readUInt16LE(Ee.ENDCOM)):(r=Ho.readBigUInt64LE(i,Ee.ZIP64SUB),e=Ho.readBigUInt64LE(i,Ee.ZIP64TOT),t=Ho.readBigUInt64LE(i,Ee.ZIP64SIZE),n=Ho.readBigUInt64LE(i,Ee.ZIP64OFF),o=0)},toBinary:function(){var i=Buffer.alloc(Ee.ENDHDR+o);return i.writeUInt32LE(Ee.ENDSIG,0),i.writeUInt32LE(0,4),i.writeUInt16LE(r,Ee.ENDSUB),i.writeUInt16LE(e,Ee.ENDTOT),i.writeUInt32LE(t,Ee.ENDSIZ),i.writeUInt32LE(n,Ee.ENDOFF),i.writeUInt16LE(o,Ee.ENDCOM),i.fill(" ",Ee.ENDHDR),i},toJSON:function(){let i=function(a,s){let c=a.toString(16).toUpperCase();for(;c.length<s;)c="0"+c;return"0x"+c};return{diskEntries:r,totalEntries:e,size:t+" bytes",offset:i(n,4),commentLength:o}},toString:function(){return JSON.stringify(this.toJSON(),null," ")}}}});var Ed=z(Rd=>{Rd.EntryHeader=wC();Rd.MainHeader=RC()});var bC=z((_U,EC)=>{EC.exports=function(r){var e=require("zlib"),t={chunkSize:(parseInt(r.length/1024)+1)*1024};return{deflate:function(){return e.deflateRawSync(r,t)},deflateAsync:function(n){var o=e.createDeflateRaw(t),i=[],a=0;o.on("data",function(s){i.push(s),a+=s.length}),o.on("end",function(){var s=Buffer.alloc(a),c=0;s.fill(0);for(var l=0;l<i.length;l++){var p=i[l];p.copy(s,c),c+=p.length}n&&n(s)}),o.end(r)}}}});var xC=z((LU,TC)=>{var dx=+(process.versions?process.versions.node:"").split(".")[0]||0;TC.exports=function(r,e){var t=require("zlib");let n=dx>=15&&e>0?{maxOutputLength:e}:{};return{inflate:function(){return t.inflateRawSync(r,n)},inflateAsync:function(o){var i=t.createInflateRaw(n),a=[],s=0;i.on("data",function(c){a.push(c),s+=c.length}),i.on("end",function(){var c=Buffer.alloc(s),l=0;c.fill(0);for(var p=0;p<a.length;p++){var m=a[p];m.copy(c,l),l+=m.length}o&&o(c)}),i.end(r)}}}});var AC=z((NU,IC)=>{"use strict";var{randomFillSync:FC}=require("crypto"),ux=_s(),mx=new Uint32Array(256).map((r,e)=>{for(let t=0;t<8;t++)e&1?e=e>>>1^3988292384:e>>>=1;return e>>>0}),DC=(r,e)=>Math.imul(r,e)>>>0,MC=(r,e)=>mx[(r^e)&255]^r>>>8,$i=()=>typeof FC=="function"?FC(Buffer.alloc(12)):$i.node();$i.node=()=>{let r=Buffer.alloc(12),e=r.length;for(let t=0;t<e;t++)r[t]=Math.random()*256&255;return r};var Ls={genSalt:$i};function Ns(r){let e=Buffer.isBuffer(r)?r:Buffer.from(r);this.keys=new Uint32Array([305419896,591751049,878082192]);for(let t=0;t<e.length;t++)this.updateKeys(e[t])}Ns.prototype.updateKeys=function(r){let e=this.keys;return e[0]=MC(e[0],r),e[1]+=e[0]&255,e[1]=DC(e[1],134775813)+1,e[2]=MC(e[2],e[1]>>>24),r};Ns.prototype.next=function(){let r=(this.keys[2]|2)>>>0;return DC(r,r^1)>>8&255};function hx(r){let e=new Ns(r);return function(t){let n=Buffer.alloc(t.length),o=0;for(let i of t)n[o++]=e.updateKeys(i^e.next());return n}}function fx(r){let e=new Ns(r);return function(t,n,o=0){n||(n=Buffer.alloc(t.length));for(let i of t){let a=e.next();n[o++]=i^a,e.updateKeys(i)}return n}}function gx(r,e,t){if(!r||!Buffer.isBuffer(r)||r.length<12)return Buffer.alloc(0);let n=hx(t),o=n(r.slice(0,12)),i=(e.flags&8)===8?e.timeHighByte:e.crc>>>24;if(o[11]!==i)throw ux.WRONG_PASSWORD();return n(r.slice(12))}function yx(r){Buffer.isBuffer(r)&&r.length>=12?Ls.genSalt=function(){return r.slice(0,12)}:r==="node"?Ls.genSalt=$i.node:Ls.genSalt=$i}function Cx(r,e,t,n=!1){r==null&&(r=Buffer.alloc(0)),Buffer.isBuffer(r)||(r=Buffer.from(r.toString()));let o=fx(t),i=Ls.genSalt();i[11]=e.crc>>>24&255,n&&(i[10]=e.crc>>>16&255);let a=Buffer.alloc(r.length+12);return o(i,a),o(r,a,12)}IC.exports={decrypt:gx,encrypt:Cx,_salter:yx}});var OC=z(Ws=>{Ws.Deflater=bC();Ws.Inflater=xC();Ws.ZipCrypto=AC()});var Td=z((UU,_C)=>{var le=$o(),Sx=Ed(),De=le.Constants,bd=OC();_C.exports=function(r,e){var t=new Sx.EntryHeader,n=Buffer.alloc(0),o=Buffer.alloc(0),i=!1,a=null,s=Buffer.alloc(0),c=Buffer.alloc(0),l=!0;let p=r,m=typeof p.decoder=="object"?p.decoder:le.decoder;l=m.hasOwnProperty("efs")?m.efs:!1;function g(){return!e||!(e instanceof Uint8Array)?Buffer.alloc(0):(c=t.loadLocalHeaderFromBinary(e),e.slice(t.realDataOffset,t.realDataOffset+t.compressedSize))}function d(u){if(!t.flags_desc&&!t.localHeader.flags_desc){if(le.crc32(u)!==t.localHeader.crc)return!1}else{let S={},k=t.realDataOffset+t.compressedSize;if(e.readUInt32LE(k)==De.LOCSIG||e.readUInt32LE(k)==De.CENSIG)throw le.Errors.DESCRIPTOR_NOT_EXIST();if(e.readUInt32LE(k)==De.EXTSIG)S.crc=e.readUInt32LE(k+De.EXTCRC),S.compressedSize=e.readUInt32LE(k+De.EXTSIZ),S.size=e.readUInt32LE(k+De.EXTLEN);else if(e.readUInt16LE(k+12)===19280)S.crc=e.readUInt32LE(k+De.EXTCRC-4),S.compressedSize=e.readUInt32LE(k+De.EXTSIZ-4),S.size=e.readUInt32LE(k+De.EXTLEN-4);else throw le.Errors.DESCRIPTOR_UNKNOWN();if(S.compressedSize!==t.compressedSize||S.size!==t.size||S.crc!==t.crc)throw le.Errors.DESCRIPTOR_FAULTY();if(le.crc32(u)!==S.crc)return!1}return!0}function f(u,S,k){if(typeof S>"u"&&typeof u=="string"&&(k=u,u=void 0),i)return u&&S&&S(Buffer.alloc(0),le.Errors.DIRECTORY_CONTENT_ERROR()),Buffer.alloc(0);var R=g();if(R.length===0)return u&&S&&S(R),R;if(t.encrypted){if(typeof k!="string"&&!Buffer.isBuffer(k))throw le.Errors.INVALID_PASS_PARAM();R=bd.ZipCrypto.decrypt(R,t,k)}var w=Buffer.alloc(t.size);switch(t.method){case le.Constants.STORED:if(R.copy(w),d(w))return u&&S&&S(w),w;throw u&&S&&S(w,le.Errors.BAD_CRC()),le.Errors.BAD_CRC();case le.Constants.DEFLATED:var H=new bd.Inflater(R,t.size);if(u)H.inflateAsync(function(x){x.copy(x,0),S&&(d(x)?S(x):S(x,le.Errors.BAD_CRC()))});else{if(H.inflate(w).copy(w,0),!d(w))throw le.Errors.BAD_CRC(`"${m.decode(n)}"`);return w}break;default:throw u&&S&&S(Buffer.alloc(0),le.Errors.UNKNOWN_METHOD()),le.Errors.UNKNOWN_METHOD()}}function y(u,S){if((!a||!a.length)&&Buffer.isBuffer(e))return u&&S&&S(g()),g();if(a.length&&!i){var k;switch(t.method){case le.Constants.STORED:return t.compressedSize=t.size,k=Buffer.alloc(a.length),a.copy(k),u&&S&&S(k),k;default:case le.Constants.DEFLATED:var R=new bd.Deflater(a);if(u)R.deflateAsync(function(H){k=Buffer.alloc(H.length),t.compressedSize=H.length,H.copy(k),S&&S(k)});else{var w=R.deflate();return t.compressedSize=w.length,w}R=null;break}}else if(u&&S)S(Buffer.alloc(0));else return Buffer.alloc(0)}function C(u,S){return le.readBigUInt64LE(u,S)}function v(u){try{for(var S=0,k,R,w;S+4<u.length;)k=u.readUInt16LE(S),S+=2,R=u.readUInt16LE(S),S+=2,w=u.slice(S,S+R),S+=R,De.ID_ZIP64===k&&P(w)}catch{throw le.Errors.EXTRA_FIELD_PARSE_ERROR()}}function P(u){var S,k,R,w;u.length>=De.EF_ZIP64_SCOMP&&(S=C(u,De.EF_ZIP64_SUNCOMP),t.size===De.EF_ZIP64_OR_32&&(t.size=S)),u.length>=De.EF_ZIP64_RHO&&(k=C(u,De.EF_ZIP64_SCOMP),t.compressedSize===De.EF_ZIP64_OR_32&&(t.compressedSize=k)),u.length>=De.EF_ZIP64_DSN&&(R=C(u,De.EF_ZIP64_RHO),t.offset===De.EF_ZIP64_OR_32&&(t.offset=R)),u.length>=De.EF_ZIP64_DSN+4&&(w=u.readUInt32LE(De.EF_ZIP64_DSN),t.diskNumStart===De.EF_ZIP64_OR_16&&(t.diskNumStart=w))}return{get entryName(){return m.decode(n)},get rawEntryName(){return n},set entryName(u){n=le.toBuffer(u,m.encode);var S=n[n.length-1];i=S===47||S===92,t.fileNameLength=n.length},get efs(){return typeof l=="function"?l(this.entryName):l},get extra(){return s},set extra(u){s=u,t.extraLength=u.length,v(u)},get comment(){return m.decode(o)},set comment(u){if(o=le.toBuffer(u,m.encode),t.commentLength=o.length,o.length>65535)throw le.Errors.COMMENT_TOO_LONG()},get name(){var u=m.decode(n);return i?u.substr(u.length-1).split("/").pop():u.split("/").pop()},get isDirectory(){return i},getCompressedData:function(){return y(!1,null)},getCompressedDataAsync:function(u){y(!0,u)},setData:function(u){a=le.toBuffer(u,le.decoder.encode),!i&&a.length?(t.size=a.length,t.method=le.Constants.DEFLATED,t.crc=le.crc32(u),t.changed=!0):t.method=le.Constants.STORED},getData:function(u){return t.changed?a:f(!1,null,u)},getDataAsync:function(u,S){t.changed?u(a):f(!0,u,S)},set attr(u){t.attr=u},get attr(){return t.attr},set header(u){t.loadFromBinary(u)},get header(){return t},packCentralHeader:function(){t.flags_efs=this.efs,t.extraLength=s.length;var u=t.centralHeaderToBinary(),S=le.Constants.CENHDR;return n.copy(u,S),S+=n.length,s.copy(u,S),S+=t.extraLength,o.copy(u,S),u},packLocalHeader:function(){let u=0;t.flags_efs=this.efs,t.extraLocalLength=c.length;let S=t.localHeaderToBinary(),k=Buffer.alloc(S.length+n.length+t.extraLocalLength);return S.copy(k,u),u+=S.length,n.copy(k,u),u+=n.length,c.copy(k,u),u+=c.length,k},toJSON:function(){let u=function(S){return"<"+(S&&S.length+" bytes buffer"||"null")+">"};return{entryName:this.entryName,name:this.name,comment:this.comment,isDirectory:this.isDirectory,header:t.toJSON(),compressedData:u(e),data:u(a)}},toString:function(){return JSON.stringify(this.toJSON(),null," ")}}}});var WC=z((jU,NC)=>{var LC=Td(),vx=Ed(),ot=$o();NC.exports=function(r,e){var t=[],n={},o=Buffer.alloc(0),i=new vx.MainHeader,a=!1,s=null;let c=new Set,l=e,{noSort:p,decoder:m}=l;r?f(l.readEntries):a=!0;function g(){let C=new Set;for(let v of Object.keys(n)){let P=v.split("/");if(P.pop(),!!P.length)for(let u=0;u<P.length;u++){let S=P.slice(0,u+1).join("/")+"/";C.add(S)}}for(let v of C)if(!(v in n)){let P=new LC(l);P.entryName=v,P.attr=16,P.temporary=!0,t.push(P),n[P.entryName]=P,c.add(P)}}function d(){if(a=!0,n={},i.diskEntries>(r.length-i.offset)/ot.Constants.CENHDR)throw ot.Errors.DISK_ENTRY_TOO_LARGE();t=new Array(i.diskEntries);for(var C=i.offset,v=0;v<t.length;v++){var P=C,u=new LC(l,r);u.header=r.slice(P,P+=ot.Constants.CENHDR),u.entryName=r.slice(P,P+=u.header.fileNameLength),u.header.extraLength&&(u.extra=r.slice(P,P+=u.header.extraLength)),u.header.commentLength&&(u.comment=r.slice(P,P+u.header.commentLength)),C+=u.header.centralHeaderSize,t[v]=u,n[u.entryName]=u}c.clear(),g()}function f(C){var v=r.length-ot.Constants.ENDHDR,P=Math.max(0,v-65535),u=P,S=r.length,k=-1,R=0;for((typeof l.trailingSpace=="boolean"?l.trailingSpace:!1)&&(P=0),v;v>=u;v--)if(r[v]===80){if(r.readUInt32LE(v)===ot.Constants.ENDSIG){k=v,R=v,S=v+ot.Constants.ENDHDR,u=v-ot.Constants.END64HDR;continue}if(r.readUInt32LE(v)===ot.Constants.END64SIG){u=P;continue}if(r.readUInt32LE(v)===ot.Constants.ZIP64SIG){k=v,S=v+ot.readBigUInt64LE(r,v+ot.Constants.ZIP64SIZE)+ot.Constants.ZIP64LEAD;break}}if(k==-1)throw ot.Errors.INVALID_FORMAT();i.loadFromBinary(r.slice(k,S)),i.commentLength&&(o=r.slice(R+ot.Constants.ENDHDR)),C&&d()}function y(){t.length>1&&!p&&t.sort((C,v)=>C.entryName.toLowerCase().localeCompare(v.entryName.toLowerCase()))}return{get entries(){return a||d(),t.filter(C=>!c.has(C))},get comment(){return m.decode(o)},set comment(C){o=ot.toBuffer(C,m.encode),i.commentLength=o.length},getEntryCount:function(){return a?t.length:i.diskEntries},forEach:function(C){this.entries.forEach(C)},getEntry:function(C){return a||d(),n[C]||null},setEntry:function(C){a||d(),t.push(C),n[C.entryName]=C,i.totalEntries=t.length},deleteFile:function(C,v=!0){a||d();let P=n[C];this.getEntryChildren(P,v).map(S=>S.entryName).forEach(this.deleteEntry)},deleteEntry:function(C){a||d();let v=n[C],P=t.indexOf(v);P>=0&&(t.splice(P,1),delete n[C],i.totalEntries=t.length)},getEntryChildren:function(C,v=!0){if(a||d(),typeof C=="object")if(C.isDirectory&&v){let P=[],u=C.entryName;for(let S of t)S.entryName.startsWith(u)&&P.push(S);return P}else return[C];return[]},getChildCount:function(C){if(C&&C.isDirectory){let v=this.getEntryChildren(C);return v.includes(C)?v.length-1:v.length}return 0},compressToBuffer:function(){a||d(),y();let C=[],v=[],P=0,u=0;i.size=0,i.offset=0;let S=0;for(let w of this.entries){let H=w.getCompressedData();w.header.offset=u;let x=w.packLocalHeader(),j=x.length+H.length;u+=j,C.push(x),C.push(H);let L=w.packCentralHeader();v.push(L),i.size+=L.length,P+=j+L.length,S++}P+=i.mainHeaderSize,i.offset=u,i.totalEntries=S,u=0;let k=Buffer.alloc(P);for(let w of C)w.copy(k,u),u+=w.length;for(let w of v)w.copy(k,u),u+=w.length;let R=i.toBinary();return o&&o.copy(R,ot.Constants.ENDHDR),R.copy(k,u),r=k,a=!1,k},toAsyncBuffer:function(C,v,P,u){try{a||d(),y();let S=[],k=[],R=0,w=0,H=0;i.size=0,i.offset=0;let x=function(j){if(j.length>0){let L=j.shift(),ie=L.entryName+L.extra.toString();P&&P(ie),L.getCompressedDataAsync(function(ee){u&&u(ie),L.header.offset=w;let B=L.packLocalHeader(),K=B.length+ee.length;w+=K,S.push(B),S.push(ee);let oe=L.packCentralHeader();k.push(oe),i.size+=oe.length,R+=K+oe.length,H++,x(j)})}else{R+=i.mainHeaderSize,i.offset=w,i.totalEntries=H,w=0;let L=Buffer.alloc(R);S.forEach(function(ee){ee.copy(L,w),w+=ee.length}),k.forEach(function(ee){ee.copy(L,w),w+=ee.length});let ie=i.toBinary();o&&o.copy(ie,ot.Constants.ENDHDR),ie.copy(L,w),r=L,a=!1,C(L)}};x(Array.from(this.entries))}catch(S){v(S)}}}}});var BC=z((BU,jC)=>{var Te=$o(),be=require("path"),kx=Td(),wx=WC(),eo=(...r)=>Te.findLast(r,e=>typeof e=="boolean"),UC=(...r)=>Te.findLast(r,e=>typeof e=="string"),Px=(...r)=>Te.findLast(r,e=>typeof e=="function"),Rx={noSort:!1,readEntries:!1,method:Te.Constants.NONE,fs:null};jC.exports=function(r,e){let t=null,n=Object.assign(Object.create(null),Rx);r&&typeof r=="object"&&(r instanceof Uint8Array||(Object.assign(n,r),r=n.input?n.input:void 0,n.input&&delete n.input),Buffer.isBuffer(r)&&(t=r,n.method=Te.Constants.BUFFER,r=void 0)),Object.assign(n,e);let o=new Te(n);if((typeof n.decoder!="object"||typeof n.decoder.encode!="function"||typeof n.decoder.decode!="function")&&(n.decoder=Te.decoder),r&&typeof r=="string")if(o.fs.existsSync(r))n.method=Te.Constants.FILE,n.filename=r,t=o.fs.readFileSync(r);else throw Te.Errors.INVALID_FILENAME();let i=new wx(t,n),{canonical:a,sanitize:s,zipnamefix:c}=Te;function l(d){if(d&&i){var f;if(typeof d=="string"&&(f=i.getEntry(be.posix.normalize(d))),typeof d=="object"&&typeof d.entryName<"u"&&typeof d.header<"u"&&(f=i.getEntry(d.entryName)),f)return f}return null}function p(d){let{join:f,normalize:y,sep:C}=be.posix;return f(be.isAbsolute(d)?"/":".",y(C+d.split("\\").join(C)+C))}function m(d){return d instanceof RegExp?function(f){return function(y){return f.test(y)}}(d):typeof d!="function"?()=>!0:d}let g=(d,f)=>{let y=f.slice(-1);return y=y===o.sep?o.sep:"",be.relative(d,f)+y};return{readFile:function(d,f){var y=l(d);return y&&y.getData(f)||null},childCount:function(d){let f=l(d);if(f)return i.getChildCount(f)},readFileAsync:function(d,f){var y=l(d);y?y.getDataAsync(f):f(null,"getEntry failed for:"+d)},readAsText:function(d,f){var y=l(d);if(y){var C=y.getData();if(C&&C.length)return C.toString(f||"utf8")}return""},readAsTextAsync:function(d,f,y){var C=l(d);C?C.getDataAsync(function(v,P){if(P){f(v,P);return}v&&v.length?f(v.toString(y||"utf8")):f("")}):f("")},deleteFile:function(d,f=!0){var y=l(d);y&&i.deleteFile(y.entryName,f)},deleteEntry:function(d){var f=l(d);f&&i.deleteEntry(f.entryName)},addZipComment:function(d){i.comment=d},getZipComment:function(){return i.comment||""},addZipEntryComment:function(d,f){var y=l(d);y&&(y.comment=f)},getZipEntryComment:function(d){var f=l(d);return f&&f.comment||""},updateFile:function(d,f){var y=l(d);y&&y.setData(f)},addLocalFile:function(d,f,y,C){if(o.fs.existsSync(d)){f=f?p(f):"";let v=be.win32.basename(be.win32.normalize(d));f+=y||v;let P=o.fs.statSync(d),u=P.isFile()?o.fs.readFileSync(d):Buffer.alloc(0);P.isDirectory()&&(f+=o.sep),this.addFile(f,u,C,P)}else throw Te.Errors.FILE_NOT_FOUND(d)},addLocalFileAsync:function(d,f){d=typeof d=="object"?d:{localPath:d};let y=be.resolve(d.localPath),{comment:C}=d,{zipPath:v,zipName:P}=d,u=this;o.fs.stat(y,function(S,k){if(S)return f(S,!1);v=v?p(v):"";let R=be.win32.basename(be.win32.normalize(y));if(v+=P||R,k.isFile())o.fs.readFile(y,function(w,H){return w?f(w,!1):(u.addFile(v,H,C,k),setImmediate(f,void 0,!0))});else if(k.isDirectory())return v+=o.sep,u.addFile(v,Buffer.alloc(0),C,k),setImmediate(f,void 0,!0)})},addLocalFolder:function(d,f,y){if(y=m(y),f=f?p(f):"",d=be.normalize(d),o.fs.existsSync(d)){let C=o.findFiles(d),v=this;if(C.length)for(let P of C){let u=be.join(f,g(d,P));y(u)&&v.addLocalFile(P,be.dirname(u))}}else throw Te.Errors.FILE_NOT_FOUND(d)},addLocalFolderAsync:function(d,f,y,C){C=m(C),y=y?p(y):"",d=be.normalize(d);var v=this;o.fs.open(d,"r",function(P){if(P&&P.code==="ENOENT")f(void 0,Te.Errors.FILE_NOT_FOUND(d));else if(P)f(void 0,P);else{var u=o.findFiles(d),S=-1,k=function(){if(S+=1,S<u.length){var R=u[S],w=g(d,R).split("\\").join("/");w=w.normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/[^\x20-\x7E]/g,""),C(w)?o.fs.stat(R,function(H,x){H&&f(void 0,H),x.isFile()?o.fs.readFile(R,function(j,L){j?f(void 0,j):(v.addFile(y+w,L,"",x),k())}):(v.addFile(y+w+"/",Buffer.alloc(0),"",x),k())}):process.nextTick(()=>{k()})}else f(!0,void 0)};k()}})},addLocalFolderAsync2:function(d,f){let y=this;d=typeof d=="object"?d:{localPath:d},localPath=be.resolve(p(d.localPath));let{zipPath:C,filter:v,namefix:P}=d;v instanceof RegExp?v=function(k){return function(R){return k.test(R)}}(v):typeof v!="function"&&(v=function(){return!0}),C=C?p(C):"",P=="latin1"&&(P=k=>k.normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/[^\x20-\x7E]/g,"")),typeof P!="function"&&(P=k=>k);let u=k=>be.join(C,P(g(localPath,k))),S=k=>be.win32.basename(be.win32.normalize(P(k)));o.fs.open(localPath,"r",function(k){k&&k.code==="ENOENT"?f(void 0,Te.Errors.FILE_NOT_FOUND(localPath)):k?f(void 0,k):o.findFilesAsync(localPath,function(R,w){if(R)return f(R);w=w.filter(H=>v(u(H))),w.length||f(void 0,!1),setImmediate(w.reverse().reduce(function(H,x){return function(j,L){if(j||L===!1)return setImmediate(H,j,!1);y.addLocalFileAsync({localPath:x,zipPath:be.dirname(u(x)),zipName:S(x)},H)}},f))})})},addLocalFolderPromise:function(d,f){return new Promise((y,C)=>{this.addLocalFolderAsync2(Object.assign({localPath:d},f),(v,P)=>{v&&C(v),P&&y(this)})})},addFile:function(d,f,y,C){d=c(d);let v=l(d),P=v!=null;P||(v=new kx(n),v.entryName=d),v.comment=y||"";let u=typeof C=="object"&&C instanceof o.fs.Stats;u&&(v.header.time=C.mtime);var S=v.isDirectory?16:0;let k=v.isDirectory?16384:32768;return u?k|=4095&C.mode:typeof C=="number"?k|=4095&C:k|=v.isDirectory?493:420,S=(S|k<<16)>>>0,v.attr=S,v.setData(f),P||i.setEntry(v),v},getEntries:function(d){return i.password=d,i?i.entries:[]},getEntry:function(d){return l(d)},getEntryCount:function(){return i.getEntryCount()},forEach:function(d){return i.forEach(d)},extractEntryTo:function(d,f,y,C,v,P){C=eo(!1,C),v=eo(!1,v),y=eo(!0,y),P=UC(v,P);var u=l(d);if(!u)throw Te.Errors.NO_ENTRY();var S=a(u.entryName),k=s(f,P&&!u.isDirectory?P:y?S:be.basename(S));if(u.isDirectory){var R=i.getEntryChildren(u);return R.forEach(function(x){if(x.isDirectory)return;var j=x.getData();if(!j)throw Te.Errors.CANT_EXTRACT_FILE();var L=a(x.entryName),ie=s(f,y?L:be.basename(L));let ee=v?x.header.fileAttr:void 0;o.writeFileTo(ie,j,C,ee)}),!0}var w=u.getData(i.password);if(!w)throw Te.Errors.CANT_EXTRACT_FILE();if(o.fs.existsSync(k)&&!C)throw Te.Errors.CANT_OVERRIDE();let H=v?d.header.fileAttr:void 0;return o.writeFileTo(k,w,C,H),!0},test:function(d){if(!i)return!1;for(var f in i.entries)try{if(f.isDirectory)continue;var y=i.entries[f].getData(d);if(!y)return!1}catch{return!1}return!0},extractAllTo:function(d,f,y,C){if(y=eo(!1,y),C=UC(y,C),f=eo(!1,f),!i)throw Te.Errors.NO_ZIP();i.entries.forEach(function(v){var P=s(d,a(v.entryName));if(v.isDirectory){o.makeDir(P);return}var u=v.getData(C);if(!u)throw Te.Errors.CANT_EXTRACT_FILE();let S=y?v.header.fileAttr:void 0;o.writeFileTo(P,u,f,S);try{o.fs.utimesSync(P,v.header.time,v.header.time)}catch{throw Te.Errors.CANT_EXTRACT_FILE()}})},extractAllToAsync:function(d,f,y,C){if(C=Px(f,y,C),y=eo(!1,y),f=eo(!1,f),!C)return new Promise((k,R)=>{this.extractAllToAsync(d,f,y,function(w){w?R(w):k(this)})});if(!i){C(Te.Errors.NO_ZIP());return}d=be.resolve(d);let v=k=>s(d,be.normalize(a(k.entryName))),P=(k,R)=>new Error(k+': "'+R+'"'),u=[],S=[];i.entries.forEach(k=>{k.isDirectory?u.push(k):S.push(k)});for(let k of u){let R=v(k),w=y?k.header.fileAttr:void 0;try{o.makeDir(R),w&&o.fs.chmodSync(R,w),o.fs.utimesSync(R,k.header.time,k.header.time)}catch{C(P("Unable to create folder",R))}}S.reverse().reduce(function(k,R){return function(w){if(w)k(w);else{let H=be.normalize(a(R.entryName)),x=s(d,H);R.getDataAsync(function(j,L){if(L)k(L);else if(!j)k(Te.Errors.CANT_EXTRACT_FILE());else{let ie=y?R.header.fileAttr:void 0;o.writeFileToAsync(x,j,f,ie,function(ee){ee||k(P("Unable to write file",x)),o.fs.utimes(x,R.header.time,R.header.time,function(B){B?k(P("Unable to set times",x)):k()})})}})}}},C)()},writeZip:function(d,f){if(arguments.length===1&&typeof d=="function"&&(f=d,d=""),!d&&n.filename&&(d=n.filename),!!d){var y=i.compressToBuffer();if(y){var C=o.writeFileTo(d,y,!0);typeof f=="function"&&f(C?null:new Error("failed"),"")}}},writeZipPromise:function(d,f){let{overwrite:y,perm:C}=Object.assign({overwrite:!0},f);return new Promise((v,P)=>{!d&&n.filename&&(d=n.filename),d||P("ADM-ZIP: ZIP File Name Missing"),this.toBufferPromise().then(u=>{let S=k=>k?v(k):P("ADM-ZIP: Wasn't able to write zip file");o.writeFileToAsync(d,u,y,C,S)},P)})},toBufferPromise:function(){return new Promise((d,f)=>{i.toAsyncBuffer(d,f)})},toBuffer:function(d,f,y,C){return typeof d=="function"?(i.toAsyncBuffer(d,f,y,C),null):i.compressToBuffer()}}}});var mr,Kd=pe(()=>{mr=class extends Error{constructor(e,t){super(`${e} at position ${t}`),this.position=t}}});function bS(r){return/^[0-9A-Fa-f]$/.test(r)}function En(r){return r>="0"&&r<="9"}function TS(r){return r>=" "}function Yi(r){return`,:[]/{}()
9
- +`.includes(r)}function Gd(r){return r>="a"&&r<="z"||r>="A"&&r<="Z"||r==="_"||r==="$"}function Jd(r){return r>="a"&&r<="z"||r>="A"&&r<="Z"||r==="_"||r==="$"||r>="0"&&r<="9"}function Qd(r){return`,[]/{}
10
- +`.includes(r)}function Zd(r){return Xi(r)||Hx.test(r)}function xS(r){return r===`
11
- `||r==="\r"||r===" "||r==="\b"||r==="\f"}function Rn(r,e){let t=r.charCodeAt(e);return t===32||t===10||t===9||t===13}function FS(r,e){let t=r.charCodeAt(e);return t===32||t===9||t===13}function MS(r,e){let t=r.charCodeAt(e);return t===160||t>=8192&&t<=8202||t===8239||t===8287||t===12288}function Xi(r){return eu(r)||tc(r)}function eu(r){return r==='"'||r==="\u201C"||r==="\u201D"}function tu(r){return r==='"'}function tc(r){return r==="'"||r==="\u2018"||r==="\u2019"||r==="`"||r==="\xB4"}function ru(r){return r==="'"}function Yo(r,e){let t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,n=r.lastIndexOf(e);return n!==-1?r.substring(0,n)+(t?"":r.substring(n+1)):r}function er(r,e){let t=r.length;if(!Rn(r,t-1))return r+e;for(;Rn(r,t-1);)t--;return r.substring(0,t)+e+r.substring(t)}function DS(r,e,t){return r.substring(0,e)+r.substring(e+t)}function IS(r){return/[,\n][ \t\r]*$/.test(r)}var Yd,Xd,Hx,AS=pe(()=>{Yd=/^(http|https|ftp|mailto|file|data|irc):\/\/$/,Xd=/^[A-Za-z0-9-._~:/?#@!$&'()*+;=]$/;Hx=/^[[{\w-]$/});function OS(r){let e=0,t="";l(["```","[```","{```"]),i()||B(),l(["```","```]","```}"]);let o=m(",");for(o&&a(),Zd(r[e])&&IS(t)?(o||(t=er(t,",")),v()):o&&(t=Yo(t,","));r[e]==="}"||r[e]==="]";)e++,a();if(e>=r.length)return t;ee();function i(){a();let M=y()||C()||P()||S()||k()||w(!1)||H();return a(),M}function a(){let M=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,W=e,ae=s(M);do ae=c(),ae&&(ae=s(M));while(ae);return e>W}function s(M){let W=M?Rn:FS,ae="";for(;;)if(W(r,e))ae+=r[e],e++;else if(MS(r,e))ae+=" ",e++;else break;return ae.length>0?(t+=ae,!0):!1}function c(){if(r[e]==="/"&&r[e+1]==="*"){for(;e<r.length&&!Gx(r,e);)e++;return e+=2,!0}if(r[e]==="/"&&r[e+1]==="/"){for(;e<r.length&&r[e]!==`
12
- `;)e++;return!0}return!1}function l(M){if(p(M)){if(Gd(r[e]))for(;e<r.length&&Jd(r[e]);)e++;return a(),!0}return!1}function p(M){s(!0);for(let W of M){let ae=e+W.length;if(r.slice(e,ae)===W)return e=ae,!0}return!1}function m(M){return r[e]===M?(t+=r[e],e++,!0):!1}function g(M){return r[e]===M?(e++,!0):!1}function d(){return g("\\")}function f(){return a(),r[e]==="."&&r[e+1]==="."&&r[e+2]==="."?(e+=3,a(),g(","),!0):!1}function y(){if(r[e]==="{"){t+="{",e++,a(),g(",")&&a();let M=!0;for(;e<r.length&&r[e]!=="}";){let W;if(M?(W=!0,M=!1):(W=m(","),W||(t=er(t,",")),a()),f(),!(P()||w(!0))){r[e]==="}"||r[e]==="{"||r[e]==="]"||r[e]==="["||r[e]===void 0?t=Yo(t,","):K();break}a();let La=m(":"),Ln=e>=r.length;La||(Zd(r[e])||Ln?t=er(t,":"):oe()),i()||(La||Ln?t+="null":oe())}return r[e]==="}"?(t+="}",e++):t=er(t,"}"),!0}return!1}function C(){if(r[e]==="["){t+="[",e++,a(),g(",")&&a();let M=!0;for(;e<r.length&&r[e]!=="]";)if(M?M=!1:m(",")||(t=er(t,",")),f(),!i()){t=Yo(t,",");break}return r[e]==="]"?(t+="]",e++):t=er(t,"]"),!0}return!1}function v(){let M=!0,W=!0;for(;W;)M?M=!1:m(",")||(t=er(t,",")),W=i();W||(t=Yo(t,",")),t=`[
2
+ "use strict";var DE=Object.create;var cs=Object.defineProperty;var AE=Object.getOwnPropertyDescriptor;var OE=Object.getOwnPropertyNames;var _E=Object.getPrototypeOf,LE=Object.prototype.hasOwnProperty;var he=(r,e)=>()=>(r&&(e=r(r=0)),e);var G=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),bp=(r,e)=>{for(var t in e)cs(r,t,{get:e[t],enumerable:!0})},sf=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of OE(e))!LE.call(r,o)&&o!==t&&cs(r,o,{get:()=>e[o],enumerable:!(n=AE(e,o))||n.enumerable});return r};var b=(r,e,t)=>(t=r!=null?DE(_E(r)):{},sf(e||!r||!r.__esModule?cs(t,"default",{value:r,enumerable:!0}):t,r)),cf=r=>sf(cs({},"__esModule",{value:!0}),r);var Yt=he(()=>{});function $(r,e,t){if(!r)throw new ps(e,t)}function Do(r,e){throw new ps(r,e)}var ps,we=he(()=>{ps=class extends Error{cause;constructor(e,t={}){super(e),this.name="AssertError",this.cause=t.cause}}});function uf(r){let e=r.trim();return $(e,"logger module name cannot be empty"),e}function UE(r,e){let t=uf(e);return r?`${r}.${t}`:t}function $i(r,e){return r?`[${r}] ${e}`:e}function jE(r,e){let t=Ao(e);if(!r)return t;let n=`[${r}]`;return typeof t[0]=="string"?[`${n} ${t[0]}`,...t.slice(1)]:[n,...t]}function Hi(r,e){if(e.length===0||!us.test(r))return us.lastIndex=0,{message:r,args:e};us.lastIndex=0;let t=new Set;return{message:r.replace(us,(o,i)=>{let a=Number(i);return!Number.isSafeInteger(a)||a<0||a>=e.length?o:(t.add(a),String(e[a]))}),args:e.filter((o,i)=>!t.has(i))}}function Ao(r){let e;for(let t=0;t<r.length;t++){let n=r[t];n instanceof Error?(e??=r.slice(0,t),e.push(BE(n))):e?.push(n)}return e??r}function BE(r){return r.stack?r.stack:r.name&&r.message?`${r.name}: ${r.message}`:r.message||String(r)}function df(r){return new ds(r===void 0?void 0:uf(r))}function T(r){return df(r)}function mf(r){ds.setAppender(r)}var Mp,ds,us,e0,K=he(()=>{we();Mp=class{isTraceEnabled(){return!1}isDebugEnabled(){return!1}isInfoEnabled(){return!1}isWarnEnabled(){return!1}isErrorEnabled(){return!1}trace(e,...t){}debug(e,...t){}info(e,...t){}warn(e,...t){}error(e,...t){}},ds=class r{constructor(e){this.moduleName=e}static appender=new Mp;static setAppender(e){r.appender=e}static getAppender(){return r.appender}isTraceEnabled(){return r.appender.isTraceEnabled()}isDebugEnabled(){return r.appender.isDebugEnabled()}createModuleLogger(e){return new r(UE(this.moduleName,e))}trace(e,...t){let n=r.appender;if(!n.isTraceEnabled())return;let o=Hi(e,t);n.trace($i(this.moduleName,o.message),...Ao(o.args))}debug(e,...t){let n=r.appender;if(!n.isDebugEnabled())return;let o=Hi(e,t);n.debug($i(this.moduleName,o.message),...Ao(o.args))}info(e,...t){let n=r.appender;if(!n.isInfoEnabled())return;let o=Hi(e,t);n.info($i(this.moduleName,o.message),...Ao(o.args))}warn(e,...t){let n=r.appender;if(!n.isWarnEnabled())return;let o=Hi(e,t);n.warn($i(this.moduleName,o.message),...Ao(o.args))}error(e,...t){let n=r.appender;if(!n.isErrorEnabled())return;if(e instanceof Error){n.error(e,...jE(this.moduleName,t));return}let o=Hi(e,t);n.error($i(this.moduleName,o.message),...Ao(o.args))}};us=/\{(\d+)\}/g;e0=df()});function u(r,...e){return xp.t(r,...e)}function kt(r,...e){let t=xp.t(r,...e);return t===r?void 0:t}function ff(r){xp=r}function ln(r,...e){return hs(e)?zE(r,e[0]):e.reduce((t,n,o)=>t.split(`{${o}}`).join(String(n)),r)}function hs(r){return r.length===1&&typeof r[0]=="object"&&r[0]!==null&&!Array.isArray(r[0])}function zE(r,e){return r.replace(HE,(t,n)=>Object.hasOwn(e,n)?String(e[n]):t)}function GE(){let r=Fp(__dirname);if(!r)return{};let e=cn.join(r,hf);try{let t=JSON.parse(ms.readFileSync(e,"utf8"));return KE(t)?t:{}}catch(t){return JE(t)?{}:(VE.warn("failed to load default l10n bundle: {0}",e,t),{})}}function Fp(r){let e=cn.resolve(r),t=[cn.join(e,"l10n"),cn.resolve(e,"..","..","l10n"),cn.resolve(e,"..","..","..","l10n")];for(let n of t)if(ms.existsSync(cn.join(n,hf)))return n}function KE(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)&&Object.values(r).every(e=>typeof e=="string")}function JE(r){return typeof r=="object"&&r!==null&&"code"in r&&r.code==="ENOENT"}var ms,cn,hf,VE,qE,$E,xp,HE,D=he(()=>{ms=b(require("fs")),cn=b(require("path"));K();hf="bundle.l10n.json",VE=T("i18n"),qE=GE(),$E={t(r,...e){let t=qE[r]??r;return hs(e)?ln(t,e[0]):ln(t,...e)}},xp=$E;HE=/\{([A-Za-z_][A-Za-z0-9_]*)\}/g});var U=he(()=>{});function z(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function Ut(r){return typeof r=="string"&&r.length>0?r:void 0}function Jn(r){if(!Array.isArray(r))return;let e=r.filter(t=>typeof t=="string"&&t.length>0);return e.length>0?e:void 0}function O(r){let e={};for(let[t,n]of Object.entries(r))n!==void 0&&(e[t]=n);return e}function gs(r){return r.startsWith("{")||r.startsWith("[")}function _o(r){if(Array.isArray(r))return r.map(e=>_o(e));if(z(r)){let e={};return Object.keys(r).forEach(t=>{e[t]=_o(r[t])}),e}return r}function Qt(r,e){if(r===e)return!0;if(Array.isArray(r)||Array.isArray(e))return Array.isArray(r)&&Array.isArray(e)&&r.length===e.length&&r.every((o,i)=>Qt(o,e[i]));if(!z(r)||!z(e))return!1;let t=Object.keys(r),n=Object.keys(e);return t.length===n.length&&t.every(o=>Object.prototype.hasOwnProperty.call(e,o)&&Qt(r[o],e[o]))}var te=he(()=>{});function db(r){let e=mb(r);if(gs(e))try{let t=JSON.parse(e);return!z(t)||z(t.errorInfo)?void 0:_p(t)}catch{return}}function Tf(r){let e=db(r);return e?Ki(e):void 0}function Ki(r){let e=new Op(r.message??"",{platform:r.platform,stack:r.stack,properties:r.properties});return e.name=r.className||r.name||e.name,e.errorCode=r.errorCode,e.errorType=r.errorType,e.errorDialogStyle=r.errorDialogStyle,e.hintMessage=r.hintMessage,e.locationPath=r.locationPath,e.__httpStatusErrorCode__=r.__httpStatusErrorCode__,r.cause&&(e.cause=Ki(r.cause)),Array.isArray(r.suppressed)&&(e.suppressed=r.suppressed.map(t=>Ki(t))),e}function pn(r){let e=r,t=new Set;for(let n=0;n<100&&!t.has(e);n++){t.add(e);let o=Ff(e);if(!o)break;e=o}return e}function Mf(r){let e=[],t=r,n=new Set;for(;t&&!n.has(t)&&e.length<100;)e.push(t),n.add(t),t=Ff(t);return e.reverse().map((o,i)=>Cb(o,i===0?"":"Wrapped by: ")).join(`
3
+ `)}function tt(r){return Ji(r)||z(r)?Zt(r.errorCode):void 0}function pr(r){return Ji(r)?r.errorType:z(r)?xf(r.errorType):void 0}function It(r){return Ji(r)||z(r)&&z(r.properties)?r.properties:void 0}function mb(r){let e=r.indexOf(bf);return(e>=0?r.slice(e+bf.length):r).trim()}function _p(r){if(!hb(r))return;let e={};e.message=Zt(r.message),e.name=Zt(r.name),e.errorCode=Zt(r.errorCode),e.errorType=xf(r.errorType),e.className=Zt(r.className),e.platform=Zt(r.platform),e.hintMessage=Zt(r.hintMessage),e.errorDialogStyle=Zt(r.errorDialogStyle),e.__httpStatusErrorCode__=fb(r.__httpStatusErrorCode__),z(r.properties)&&(e.properties=r.properties);let t=gb(r.locationPath);t&&(e.locationPath=t);let n=yb(r.stack);if(n&&(e.stack=n),z(r.cause)&&(e.cause=_p(r.cause)),Array.isArray(r.suppressed)){let o=r.suppressed.filter(z).map(i=>_p(i)).filter(i=>i!==void 0);o.length>0&&(e.suppressed=o)}return e}function hb(r){return["message","name","errorCode","errorType","className","platform","hintMessage","locationPath","errorDialogStyle","__httpStatusErrorCode__","properties","cause","suppressed","stack"].some(e=>e in r)}function Zt(r){return typeof r=="string"&&r.length>0?r:void 0}function xf(r){return r===null?null:Zt(r)}function fb(r){return typeof r=="number"?r:void 0}function gb(r){if(!Array.isArray(r))return;let e=r.filter(z).map(t=>({type:Zt(t.type),value:Zt(t.value)})).filter(t=>t.type!==void 0&&t.value!==void 0);return e.length>0?e:void 0}function yb(r){if(typeof r=="string")return r.split(/\r?\n/).filter(t=>t.length>0);if(!Array.isArray(r))return;let e=r.filter(t=>typeof t=="string");return e.length>0?e:void 0}function Ff(r){let e=r.cause;return e instanceof Error?e:void 0}function Ji(r){return r instanceof Error}function Cb(r,e){let t=[],n=Sb(r);t.push(e?`${e}${n}`:n),Gi(t,"errorCode",tt(r));let o=pr(r);if(Gi(t,"errorType",o==null?void 0:String(o)),Ji(r)&&(Gi(t,"errorDialogStyle",r.errorDialogStyle),Gi(t,"hintMessage",r.hintMessage),vb(t,r.locationPath),r.properties))for(let[a,s]of Object.entries(r.properties))Gi(t,a,kb(s));let i=r.stack?.split(/\r?\n/).map(a=>a.trim()).filter(a=>a.startsWith("at ")||a.startsWith("... "));return i&&t.push(...i),t.join(`
4
+ `)}function Sb(r){let e=r.name||Ji(r)&&r.platform||"Error";return r.message?`${e}: ${r.message}`:e}function Gi(r,e,t){t&&r.push(`${e}: ${t}`)}function vb(r,e){if(!(!e||e.length===0))for(let t of e)r.push(`location: ${t.type} ${t.value}`)}function kb(r){if(r!=null){if(typeof r=="string")return r;if(typeof r=="number"||typeof r=="boolean")return String(r);try{return JSON.stringify(r)}catch{return String(r)}}}var bf,Op,un=he(()=>{te();bf="===SUCC=ERROR=INFO=START===",Op=class extends Error{platform;errorCode;errorType;errorDialogStyle;hintMessage;locationPath;properties;__httpStatusErrorCode__;cause;suppressed;constructor(e="",t={}){super(e),this.name="RemotePlatformError",this.platform=t.platform,this.stack=Array.isArray(t.stack)?t.stack.join(`
5
+ `):t.stack??"",this.cause=t.cause,t.properties&&(this.properties={...t.properties})}}});function x(r){return Xn(r)==="ENOENT"}function Xi(r){let e=Xn(r);return e!==void 0&&wb.has(e)}function If(r){return vs(r)&&r.status===404}function Cs(r){return Xn(r)==="ENOTDIR"}function Ss(r){return Xn(r)==="ELOCKED"}function vs(r){return r instanceof er}function Xn(r){if(!r||typeof r!="object"||!("code"in r))return;let e=r.code;return typeof e=="string"?e:void 0}function Lp(r){if(!(!r||typeof r!="object"||!("cause"in r)))return r.cause}function Df(r){return Af(r,0)}function Af(r,e){if(e>Rb||!r||typeof r!="object"||Qi(r)||vs(r))return!1;let t=Xn(r);return t!==void 0&&Pb.has(t)?!0:Af(Lp(r),e+1)}function Qi(r){return r instanceof fe}function Qn(r,e){return Qi(r)&&r.errorCode===e}function Of(r){let e=Np(r.properties),t=kt(r.errorCode,e);if(!t)return r.message||r.errorCode;let n=kt(`${r.errorCode}.desc`,e);return n?`${t}
6
+ ${n}`:t}function _f(r){if(r.hintMessage)return r.hintMessage;if(r.hint)return u(r.hint,Np(r.properties))}function Zn(r){if(r==null)return"";if(r instanceof Error)return r.message;if(typeof r=="string")return r;let e=Eb(r);if(e)return e;try{return JSON.stringify(r)}catch{return String(r)}}function Eb(r){if(typeof r!="object"||r===null||Array.isArray(r))return"";let e=r.message;return typeof e=="string"?e:""}function bb(r,e){let t=Np(e);return kt(r,t)??r}function Np(r){let e={};for(let[t,n]of Object.entries(r))Tb(n)&&(e[t]=n);return e}function Tb(r){return typeof r=="string"||typeof r=="number"||typeof r=="boolean"}function Lf(r){return r instanceof Oe||Qn(r,"err.login.notlogin")}var wb,Pb,Rb,fe,er,R,wt,jt,mt,Oe,Yi,ys,Yn,Ur,tr,F=he(()=>{D();U();un();wb=new Set(["ENOENT","EACCES","EPERM","EISDIR","ENOTDIR","ELOOP","ENAMETOOLONG"]);Pb=new Set(["ECONNRESET","EPIPE","ETIMEDOUT","ECONNABORTED","UND_ERR_SOCKET","UND_ERR_BODY_TIMEOUT","UND_ERR_HEADERS_TIMEOUT"]),Rb=4;fe=class extends Error{errorCode;style;category;properties;errorType;errorDialogStyle;hintMessage;locationPath;hint;cause;constructor(e,t={}){let n=t.properties??{};super(t.message??bb(e,n)),this.name="BaseError",this.errorCode=e,this.style=t.style??"error",this.category=t.category??"generic",this.properties=n,this.errorType=t.errorType,this.errorDialogStyle=t.errorDialogStyle,this.hintMessage=t.hintMessage,this.locationPath=t.locationPath,this.hint=t.hint,this.cause=t.cause}setProperty(e,t){return this.properties[e]=t,this}setPropertyIf(e,t){return t!=null&&t!==""&&(this.properties[e]=t),this}setProperties(e){return Object.assign(this.properties,e),this}},er=class r extends fe{constructor(t,n,o,i,a){let s=Tf(n),c=s?pn(s):void 0,l=It(c)??It(s)??{},p=r.formatSummary(n,o,a,c,s),d=pr(c)??pr(s),g=c?.errorDialogStyle??s?.errorDialogStyle;super(tt(c)??tt(s)??"err.net.httpStatusUnexpected",{message:`HTTP ${t}: ${p}`,properties:r.createProperties(l,t,o,a,n,s),style:r.getDisplayStyle(d,g),errorType:d,errorDialogStyle:g,hintMessage:c?.hintMessage??s?.hintMessage,locationPath:c?.locationPath??s?.locationPath,cause:s});this.status=t;this.responseText=n;this.statusText=o;this.contentType=a;this.name="SuccHttpError",this.remoteError=s;let m=i?.stack??this.stack,f=s?Mf(s):r.isServerStack(n)?n.trim():"";f&&(this.stack=m?`${f}
7
+ Wrapped by: ${m}`:f)}remoteError;static createProperties(t,n,o,i,a,s){let c={...t,status:n,statusText:o};if(i!==void 0&&(c.contentType=i),!s){let l=r.createResponsePreview(a);l!==void 0&&(c.responsePreview=l)}return c}static formatSummary(t,n,o,i,a){return i||a?i?.message||tt(i)||a?.message||tt(a)||n.trim()||"Request failed":r.isServerStack(t)?n.trim()||"Request failed":r.isHtmlResponse(t,o)?n.trim()||"server returned HTML error response":t.split(/\r?\n/).map(s=>s.trim()).find(Boolean)?.slice(0,240)||"Request failed"}static createResponsePreview(t){let n=t.trim();if(n)return n.length>512?`${n.slice(0,512)}...`:n}static isHtmlResponse(t,n){return(n?.toLowerCase()??"").includes("text/html")?!0:/^<!doctype html\b|^<html[\s>]/i.test(t.trimStart())}static isServerStack(t){let n=t.trim();return!n||n.startsWith("{")||n.startsWith("[")?!1:n.split(/\r?\n/).some(o=>{let i=o.trimStart();return i.startsWith("at ")||i.startsWith("... ")||i.startsWith("Caused by:")||i.startsWith("Wrapped by:")})}static getDisplayStyle(t,n){return t==="info"?"info":t==="warn"?"warn":t===void 0&&n==="quietly"?"info":"error"}};R=class extends fe{constructor(e,t={},n={}){super(e,{...n,category:n.category??"usage",style:n.style??"warn",properties:t}),this.name="UsageError"}},wt=class extends fe{constructor(e,t={},n={}){super(e,{...n,style:n.style??"warn",properties:t}),this.name="OperationBlockedError"}},jt=class extends fe{constructor(e,t={},n={}){super(e,{...n,category:n.category??"conflict",style:n.style??"error",properties:t}),this.name="ConflictError"}},mt=class extends fe{constructor(e,t){super("err.net.connectionFailed",{category:"networkAuth",properties:{url:e,causeMessage:t?` - ${t.message}`:""},cause:t}),this.name="ConnectionError"}},Oe=class extends fe{constructor(e={}){super("err.login.notlogin",{category:"networkAuth",hint:"Log in again, then retry the command."}),this.name="AuthError",this.withContext(e)}withContext(e){return e.workspaceRoot&&!this.workspaceRoot&&this.setProperty("workspaceRoot",e.workspaceRoot),e.serverUrl&&!this.serverUrl&&this.setProperty("serverUrl",e.serverUrl),this}get context(){return{workspaceRoot:this.workspaceRoot,serverUrl:this.serverUrl}}get workspaceRoot(){return typeof this.properties.workspaceRoot=="string"?this.properties.workspaceRoot:void 0}get serverUrl(){return typeof this.properties.serverUrl=="string"?this.properties.serverUrl:void 0}};Yi=class extends fe{constructor(t,n,o={}){super("err.workspace.problem",{style:"warn",properties:{root:t,code:n,count:o.count??o.projectPaths?.length??o.remotePaths?.length??0}});this.root=t;this.code=n;this.options=o;this.name="WorkspaceProblemError"}get projectPaths(){return this.options.projectPaths}get remotePaths(){return this.options.remotePaths}get count(){return this.options.count}},ys=class extends R{constructor(t,n){super("err.net.invalidUrl",{url:t},{cause:n});this.url=t;this.name="InvalidUrlError"}},Yn=class extends fe{constructor(t,n,o,i){super("err.lock.busy",{category:"lockBusy",style:"warn",properties:{attemptedCommand:t,conflictScope:o,...i?{pid:i.pid,host:i.hostname,command:i.command,source:i.source,scope:i.scope,startTime:i.startTime,lastHeartbeat:i.lastHeartbeat}:{}},hint:"Wait for the running SuccApp process to finish, then retry."});this.attemptedCommand=t;this.attemptedScopes=n;this.conflictScope=o;this.holder=i;this.name="LockBusyError"}},Ur=class extends fe{constructor(t,n={}){super("err.lock.compromised",{category:"lockCompromised",style:"warn",properties:{attemptedCommand:t},cause:n.cause});this.attemptedCommand=t;this.name="LockCompromisedError"}},tr=class extends fe{constructor(){super("err.base.cancel",{category:"cancel",style:"silent"}),this.name="CancelledError"}}});function Wp(r){return r.reason instanceof Error?r.reason:new tr}function ht(r){if(r?.aborted)throw Wp(r)}function Ps(...r){let e=r.filter(n=>n!==void 0);if(e.length===0)return ws;if(e.length===1)return e[0];let t=new AbortController;for(let n of e){let o=()=>{t.signal.aborted||t.abort(n.reason instanceof Error?n.reason:new tr)};n.addEventListener("abort",o),n.aborted&&o()}return t.signal}var Db,ws,dn=he(()=>{F();Db=new AbortController,ws=Db.signal});var mn,it,jr=he(()=>{F();we();dn();mn=class r{children=[];parent;weight;signal;total=0;done=0;ratio=0;message;constructor(e,t=0,n){this.parent=e,this.weight=Math.max(t,0),this.signal=n??ws}retainOnFinish=!1;retainedFinishReported=!1;start(e,t){this.total=Math.max(e??0,0),this.done=0,this.ratio=0,this.children.length=0,this.retainOnFinish=t?.retainOnFinish===!0,this.retainedFinishReported=!1,t?.message!==void 0&&this.setMessage(t.message),this.doStart(e),this.reportToParent()}progress(e){this.assertNoSubTasks(),this.reportProgress(Math.max(this.done,e,0))}step(e){this.assertNoSubTasks(),this.reportProgress(Math.max(this.done+Math.max(e??1,0),0))}setMessage(e){this.message=e||void 0,this.parent&&this.parent.setMessage(this.message)}finish(){this.total<=0&&(this.total=Math.max(this.done,1),this.doStart(this.total),this.reportToParent()),this.reportProgress(Math.max(this.done,this.total)),this.reportRetainedFinish()}subTaskMonitor(e){let t=new r(this,e);return this.children.push(t),t}isCancellationRequested(){return this.parent?this.parent.isCancellationRequested():this.signal.aborted}getAbortSignal(){return this.parent?this.parent.getAbortSignal():this.signal}setAbortSignal(e){this.parent?this.parent.setAbortSignal(e):this.signal=e}throwIfAborted(){this.parent?this.parent.throwIfAborted():ht(this.signal)}onSubTaskProgress(){let e=this.children.reduce((o,i)=>o+i.getWeight(),0);if(e<=0){this.reportProgress(this.done);return}let t=this.children.reduce((o,i)=>o+i.getWeight()*i.getCompletionRatio(),0),n=this.total>0?this.total:e;this.reportProgress(Math.max(this.done,n*t/e))}doStart(e){}doProgress(e,t){}doRetainedFinish(e){}getProgressTotal(){return this.total}reportProgress(e){let t=this.done;this.done=e,this.refreshRatio(),this.doProgress(this.done,t),this.reportToParent()}assertNoSubTasks(){$(this.children.length===0,"TaskMonitor with subtasks must report progress from subtasks")}refreshRatio(){let e=this.getProgressTotal();e>0&&(this.ratio=Math.max(this.ratio,Math.min(this.done/e,1)))}reportToParent(){this.parent?.onSubTaskProgress()}reportRetainedFinish(){!this.retainOnFinish||this.retainedFinishReported||!this.message||(this.retainedFinishReported=!0,this.reportRetainedFinishMessage(this.message))}reportRetainedFinishMessage(e){this.parent?this.parent.reportRetainedFinishMessage(e):this.doRetainedFinish(e)}getWeight(){return this.weight}getCompletionRatio(){return this.ratio}},it=class r{static INSTANCE=new r;start(e,t){}progress(e){}step(e){}setMessage(e){}finish(){}subTaskMonitor(e){return this}isCancellationRequested(){return!1}getAbortSignal(){return ws}setAbortSignal(e){}throwIfAborted(){}}});function zp(r){return uT(r)??dT(Ms(r))}function Ms(r){if(!r)return"";let e=r.replace(/\\/g,"/"),t=e.substring(e.lastIndexOf("/")+1),n=t.lastIndexOf(".");return(n>=0?t.substring(n+1):t).toLowerCase()}function cT(r){if(!r)return!1;let e=Gp(r);return e.startsWith("text/")?!0:e==="image/svg+xml"||e==="application/json"||e==="application/javascript"||e==="application/xml"||e==="application/xhtml+xml"||e==="application/x-javascript"}function lT(r){return r?Gp(r)==="application/json":!1}function eg(r){if(!r)return!1;let e=Gp(r);return e==="application/json"||e.endsWith("+json")}function tg(r){return cT(zp(r))}function rg(r){return lT(zp(r))}function pT(r){let e=new Map;for(let t of r.split(/\r?\n/)){let n=t.trim();if(!n||n.startsWith("#")||n.startsWith("!"))continue;let o=n.indexOf(":");o<0||e.set(ng(n.substring(0,o)),n.substring(o+1).trim())}return e}function uT(r){let e=r.replace(/\\/g,"/").toLowerCase(),t=e.substring(e.lastIndexOf("/")+1),n=t.lastIndexOf("."),o=n>=0?t.substring(n+1):"";for(let i of sT)if(i.basename===t||i.extension===o)return i.contentType}function dT(r,e=oT){return mT().get(ng(r))??e}function mT(){let r=hT(),e=to.statSync(r);return(!ea||ea.filePath!==r||ea.mtimeMs!==e.mtimeMs)&&(ea={filePath:r,mtimeMs:e.mtimeMs,contents:pT(to.readFileSync(r,"utf8"))}),ea.contents}function ng(r){return(r??"").trim().replace(/^\./,"").toLowerCase()}function Gp(r){let e=r.indexOf(";");return(e>=0?r.substring(0,e):r).trim().toLowerCase()}function hT(){let r=No.join(fT(),"resources",iT);return $(to.existsSync(r),`Content-Type resource not found: ${r}. Run build/watch to sync it from BI project.`),r}function fT(){for(let r=__dirname;;r=No.dirname(r)){if(to.existsSync(No.join(r,aT)))return r;No.dirname(r)===r&&Do(`Extension root not found from ${__dirname}`)}}var to,No,oT,iT,aT,ea,sT,Wo=he(()=>{to=b(require("fs")),No=b(require("path"));we();oT="application/octet-stream",iT="contents.properties",aT="package.json",sT=[]});var bg=G((kN,Eg)=>{var gn=require("constants"),OT=process.cwd,_s=null,_T=process.env.GRACEFUL_FS_PLATFORM||process.platform;process.cwd=function(){return _s||(_s=OT.call(process)),_s};try{process.cwd()}catch{}typeof process.chdir=="function"&&(ru=process.chdir,process.chdir=function(r){_s=null,ru.call(process,r)},Object.setPrototypeOf&&Object.setPrototypeOf(process.chdir,ru));var ru;Eg.exports=LT;function LT(r){gn.hasOwnProperty("O_SYMLINK")&&process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)&&e(r),r.lutimes||t(r),r.chown=i(r.chown),r.fchown=i(r.fchown),r.lchown=i(r.lchown),r.chmod=n(r.chmod),r.fchmod=n(r.fchmod),r.lchmod=n(r.lchmod),r.chownSync=a(r.chownSync),r.fchownSync=a(r.fchownSync),r.lchownSync=a(r.lchownSync),r.chmodSync=o(r.chmodSync),r.fchmodSync=o(r.fchmodSync),r.lchmodSync=o(r.lchmodSync),r.stat=s(r.stat),r.fstat=s(r.fstat),r.lstat=s(r.lstat),r.statSync=c(r.statSync),r.fstatSync=c(r.fstatSync),r.lstatSync=c(r.lstatSync),r.chmod&&!r.lchmod&&(r.lchmod=function(p,d,g){g&&process.nextTick(g)},r.lchmodSync=function(){}),r.chown&&!r.lchown&&(r.lchown=function(p,d,g,m){m&&process.nextTick(m)},r.lchownSync=function(){}),_T==="win32"&&(r.rename=typeof r.rename!="function"?r.rename:function(p){function d(g,m,f){var y=Date.now(),C=0;p(g,m,function v(P){if(P&&(P.code==="EACCES"||P.code==="EPERM"||P.code==="EBUSY")&&Date.now()-y<6e4){setTimeout(function(){r.stat(m,function(h,S){h&&h.code==="ENOENT"?p(g,m,v):f(P)})},C),C<100&&(C+=10);return}f&&f(P)})}return Object.setPrototypeOf&&Object.setPrototypeOf(d,p),d}(r.rename)),r.read=typeof r.read!="function"?r.read:function(p){function d(g,m,f,y,C,v){var P;if(v&&typeof v=="function"){var h=0;P=function(S,k,E){if(S&&S.code==="EAGAIN"&&h<10)return h++,p.call(r,g,m,f,y,C,P);v.apply(this,arguments)}}return p.call(r,g,m,f,y,C,P)}return Object.setPrototypeOf&&Object.setPrototypeOf(d,p),d}(r.read),r.readSync=typeof r.readSync!="function"?r.readSync:function(p){return function(d,g,m,f,y){for(var C=0;;)try{return p.call(r,d,g,m,f,y)}catch(v){if(v.code==="EAGAIN"&&C<10){C++;continue}throw v}}}(r.readSync);function e(p){p.lchmod=function(d,g,m){p.open(d,gn.O_WRONLY|gn.O_SYMLINK,g,function(f,y){if(f){m&&m(f);return}p.fchmod(y,g,function(C){p.close(y,function(v){m&&m(C||v)})})})},p.lchmodSync=function(d,g){var m=p.openSync(d,gn.O_WRONLY|gn.O_SYMLINK,g),f=!0,y;try{y=p.fchmodSync(m,g),f=!1}finally{if(f)try{p.closeSync(m)}catch{}else p.closeSync(m)}return y}}function t(p){gn.hasOwnProperty("O_SYMLINK")&&p.futimes?(p.lutimes=function(d,g,m,f){p.open(d,gn.O_SYMLINK,function(y,C){if(y){f&&f(y);return}p.futimes(C,g,m,function(v){p.close(C,function(P){f&&f(v||P)})})})},p.lutimesSync=function(d,g,m){var f=p.openSync(d,gn.O_SYMLINK),y,C=!0;try{y=p.futimesSync(f,g,m),C=!1}finally{if(C)try{p.closeSync(f)}catch{}else p.closeSync(f)}return y}):p.futimes&&(p.lutimes=function(d,g,m,f){f&&process.nextTick(f)},p.lutimesSync=function(){})}function n(p){return p&&function(d,g,m){return p.call(r,d,g,function(f){l(f)&&(f=null),m&&m.apply(this,arguments)})}}function o(p){return p&&function(d,g){try{return p.call(r,d,g)}catch(m){if(!l(m))throw m}}}function i(p){return p&&function(d,g,m,f){return p.call(r,d,g,m,function(y){l(y)&&(y=null),f&&f.apply(this,arguments)})}}function a(p){return p&&function(d,g,m){try{return p.call(r,d,g,m)}catch(f){if(!l(f))throw f}}}function s(p){return p&&function(d,g,m){typeof g=="function"&&(m=g,g=null);function f(y,C){C&&(C.uid<0&&(C.uid+=4294967296),C.gid<0&&(C.gid+=4294967296)),m&&m.apply(this,arguments)}return g?p.call(r,d,g,f):p.call(r,d,f)}}function c(p){return p&&function(d,g){var m=g?p.call(r,d,g):p.call(r,d);return m&&(m.uid<0&&(m.uid+=4294967296),m.gid<0&&(m.gid+=4294967296)),m}}function l(p){if(!p||p.code==="ENOSYS")return!0;var d=!process.getuid||process.getuid()!==0;return!!(d&&(p.code==="EINVAL"||p.code==="EPERM"))}}});var xg=G((wN,Mg)=>{var Tg=require("stream").Stream;Mg.exports=NT;function NT(r){return{ReadStream:e,WriteStream:t};function e(n,o){if(!(this instanceof e))return new e(n,o);Tg.call(this);var i=this;this.path=n,this.fd=null,this.readable=!0,this.paused=!1,this.flags="r",this.mode=438,this.bufferSize=64*1024,o=o||{};for(var a=Object.keys(o),s=0,c=a.length;s<c;s++){var l=a[s];this[l]=o[l]}if(this.encoding&&this.setEncoding(this.encoding),this.start!==void 0){if(typeof this.start!="number")throw TypeError("start must be a Number");if(this.end===void 0)this.end=1/0;else if(typeof this.end!="number")throw TypeError("end must be a Number");if(this.start>this.end)throw new Error("start must be <= end");this.pos=this.start}if(this.fd!==null){process.nextTick(function(){i._read()});return}r.open(this.path,this.flags,this.mode,function(p,d){if(p){i.emit("error",p),i.readable=!1;return}i.fd=d,i.emit("open",d),i._read()})}function t(n,o){if(!(this instanceof t))return new t(n,o);Tg.call(this),this.path=n,this.fd=null,this.writable=!0,this.flags="w",this.encoding="binary",this.mode=438,this.bytesWritten=0,o=o||{};for(var i=Object.keys(o),a=0,s=i.length;a<s;a++){var c=i[a];this[c]=o[c]}if(this.start!==void 0){if(typeof this.start!="number")throw TypeError("start must be a Number");if(this.start<0)throw new Error("start must be >= zero");this.pos=this.start}this.busy=!1,this._queue=[],this.fd===null&&(this._open=r.open,this._queue.push([this._open,this.path,this.flags,this.mode,void 0]),this.flush())}}});var Ig=G((PN,Fg)=>{"use strict";Fg.exports=UT;var WT=Object.getPrototypeOf||function(r){return r.__proto__};function UT(r){if(r===null||typeof r!="object")return r;if(r instanceof Object)var e={__proto__:WT(r)};else var e=Object.create(null);return Object.getOwnPropertyNames(r).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}),e}});var au=G((RN,iu)=>{var Te=require("fs"),jT=bg(),BT=xg(),VT=Ig(),Ls=require("util"),at,Ws;typeof Symbol=="function"&&typeof Symbol.for=="function"?(at=Symbol.for("graceful-fs.queue"),Ws=Symbol.for("graceful-fs.previous")):(at="___graceful-fs.queue",Ws="___graceful-fs.previous");function qT(){}function Og(r,e){Object.defineProperty(r,at,{get:function(){return e}})}var no=qT;Ls.debuglog?no=Ls.debuglog("gfs4"):/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&(no=function(){var r=Ls.format.apply(Ls,arguments);r="GFS4: "+r.split(/\n/).join(`
8
+ GFS4: `),console.error(r)});Te[at]||(Dg=global[at]||[],Og(Te,Dg),Te.close=function(r){function e(t,n){return r.call(Te,t,function(o){o||Ag(),typeof n=="function"&&n.apply(this,arguments)})}return Object.defineProperty(e,Ws,{value:r}),e}(Te.close),Te.closeSync=function(r){function e(t){r.apply(Te,arguments),Ag()}return Object.defineProperty(e,Ws,{value:r}),e}(Te.closeSync),/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&process.on("exit",function(){no(Te[at]),require("assert").equal(Te[at].length,0)}));var Dg;global[at]||Og(global,Te[at]);iu.exports=nu(VT(Te));process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH&&!Te.__patched&&(iu.exports=nu(Te),Te.__patched=!0);function nu(r){jT(r),r.gracefulify=nu,r.createReadStream=k,r.createWriteStream=E;var e=r.readFile;r.readFile=t;function t(M,V,N){return typeof V=="function"&&(N=V,V=null),se(M,V,N);function se(Z,q,X,ie){return e(Z,q,function(ne){ne&&(ne.code==="EMFILE"||ne.code==="ENFILE")?Vo([se,[Z,q,X],ne,ie||Date.now(),Date.now()]):typeof X=="function"&&X.apply(this,arguments)})}}var n=r.writeFile;r.writeFile=o;function o(M,V,N,se){return typeof N=="function"&&(se=N,N=null),Z(M,V,N,se);function Z(q,X,ie,ne,I){return n(q,X,ie,function(j){j&&(j.code==="EMFILE"||j.code==="ENFILE")?Vo([Z,[q,X,ie,ne],j,I||Date.now(),Date.now()]):typeof ne=="function"&&ne.apply(this,arguments)})}}var i=r.appendFile;i&&(r.appendFile=a);function a(M,V,N,se){return typeof N=="function"&&(se=N,N=null),Z(M,V,N,se);function Z(q,X,ie,ne,I){return i(q,X,ie,function(j){j&&(j.code==="EMFILE"||j.code==="ENFILE")?Vo([Z,[q,X,ie,ne],j,I||Date.now(),Date.now()]):typeof ne=="function"&&ne.apply(this,arguments)})}}var s=r.copyFile;s&&(r.copyFile=c);function c(M,V,N,se){return typeof N=="function"&&(se=N,N=0),Z(M,V,N,se);function Z(q,X,ie,ne,I){return s(q,X,ie,function(j){j&&(j.code==="EMFILE"||j.code==="ENFILE")?Vo([Z,[q,X,ie,ne],j,I||Date.now(),Date.now()]):typeof ne=="function"&&ne.apply(this,arguments)})}}var l=r.readdir;r.readdir=d;var p=/^v[0-5]\./;function d(M,V,N){typeof V=="function"&&(N=V,V=null);var se=p.test(process.version)?function(X,ie,ne,I){return l(X,Z(X,ie,ne,I))}:function(X,ie,ne,I){return l(X,ie,Z(X,ie,ne,I))};return se(M,V,N);function Z(q,X,ie,ne){return function(I,j){I&&(I.code==="EMFILE"||I.code==="ENFILE")?Vo([se,[q,X,ie],I,ne||Date.now(),Date.now()]):(j&&j.sort&&j.sort(),typeof ie=="function"&&ie.call(this,I,j))}}}if(process.version.substr(0,4)==="v0.8"){var g=BT(r);v=g.ReadStream,h=g.WriteStream}var m=r.ReadStream;m&&(v.prototype=Object.create(m.prototype),v.prototype.open=P);var f=r.WriteStream;f&&(h.prototype=Object.create(f.prototype),h.prototype.open=S),Object.defineProperty(r,"ReadStream",{get:function(){return v},set:function(M){v=M},enumerable:!0,configurable:!0}),Object.defineProperty(r,"WriteStream",{get:function(){return h},set:function(M){h=M},enumerable:!0,configurable:!0});var y=v;Object.defineProperty(r,"FileReadStream",{get:function(){return y},set:function(M){y=M},enumerable:!0,configurable:!0});var C=h;Object.defineProperty(r,"FileWriteStream",{get:function(){return C},set:function(M){C=M},enumerable:!0,configurable:!0});function v(M,V){return this instanceof v?(m.apply(this,arguments),this):v.apply(Object.create(v.prototype),arguments)}function P(){var M=this;Y(M.path,M.flags,M.mode,function(V,N){V?(M.autoClose&&M.destroy(),M.emit("error",V)):(M.fd=N,M.emit("open",N),M.read())})}function h(M,V){return this instanceof h?(f.apply(this,arguments),this):h.apply(Object.create(h.prototype),arguments)}function S(){var M=this;Y(M.path,M.flags,M.mode,function(V,N){V?(M.destroy(),M.emit("error",V)):(M.fd=N,M.emit("open",N))})}function k(M,V){return new r.ReadStream(M,V)}function E(M,V){return new r.WriteStream(M,V)}var w=r.open;r.open=Y;function Y(M,V,N,se){return typeof N=="function"&&(se=N,N=null),Z(M,V,N,se);function Z(q,X,ie,ne,I){return w(q,X,ie,function(j,ce){j&&(j.code==="EMFILE"||j.code==="ENFILE")?Vo([Z,[q,X,ie,ne],j,I||Date.now(),Date.now()]):typeof ne=="function"&&ne.apply(this,arguments)})}}return r}function Vo(r){no("ENQUEUE",r[0].name,r[1]),Te[at].push(r),ou()}var Ns;function Ag(){for(var r=Date.now(),e=0;e<Te[at].length;++e)Te[at][e].length>2&&(Te[at][e][3]=r,Te[at][e][4]=r);ou()}function ou(){if(clearTimeout(Ns),Ns=void 0,Te[at].length!==0){var r=Te[at].shift(),e=r[0],t=r[1],n=r[2],o=r[3],i=r[4];if(o===void 0)no("RETRY",e.name,t),e.apply(null,t);else if(Date.now()-o>=6e4){no("TIMEOUT",e.name,t);var a=t.pop();typeof a=="function"&&a.call(null,n)}else{var s=Date.now()-i,c=Math.max(i-o,1),l=Math.min(c*1.2,100);s>=l?(no("RETRY",e.name,t),e.apply(null,t.concat([o]))):Te[at].push(r)}Ns===void 0&&(Ns=setTimeout(ou,0))}}});var Lg=G((EN,_g)=>{function rr(r,e){typeof e=="boolean"&&(e={forever:e}),this._originalTimeouts=JSON.parse(JSON.stringify(r)),this._timeouts=r,this._options=e||{},this._maxRetryTime=e&&e.maxRetryTime||1/0,this._fn=null,this._errors=[],this._attempts=1,this._operationTimeout=null,this._operationTimeoutCb=null,this._timeout=null,this._operationStart=null,this._options.forever&&(this._cachedTimeouts=this._timeouts.slice(0))}_g.exports=rr;rr.prototype.reset=function(){this._attempts=1,this._timeouts=this._originalTimeouts};rr.prototype.stop=function(){this._timeout&&clearTimeout(this._timeout),this._timeouts=[],this._cachedTimeouts=null};rr.prototype.retry=function(r){if(this._timeout&&clearTimeout(this._timeout),!r)return!1;var e=new Date().getTime();if(r&&e-this._operationStart>=this._maxRetryTime)return this._errors.unshift(new Error("RetryOperation timeout occurred")),!1;this._errors.push(r);var t=this._timeouts.shift();if(t===void 0)if(this._cachedTimeouts)this._errors.splice(this._errors.length-1,this._errors.length),this._timeouts=this._cachedTimeouts.slice(0),t=this._timeouts.shift();else return!1;var n=this,o=setTimeout(function(){n._attempts++,n._operationTimeoutCb&&(n._timeout=setTimeout(function(){n._operationTimeoutCb(n._attempts)},n._operationTimeout),n._options.unref&&n._timeout.unref()),n._fn(n._attempts)},t);return this._options.unref&&o.unref(),!0};rr.prototype.attempt=function(r,e){this._fn=r,e&&(e.timeout&&(this._operationTimeout=e.timeout),e.cb&&(this._operationTimeoutCb=e.cb));var t=this;this._operationTimeoutCb&&(this._timeout=setTimeout(function(){t._operationTimeoutCb()},t._operationTimeout)),this._operationStart=new Date().getTime(),this._fn(this._attempts)};rr.prototype.try=function(r){console.log("Using RetryOperation.try() is deprecated"),this.attempt(r)};rr.prototype.start=function(r){console.log("Using RetryOperation.start() is deprecated"),this.attempt(r)};rr.prototype.start=rr.prototype.try;rr.prototype.errors=function(){return this._errors};rr.prototype.attempts=function(){return this._attempts};rr.prototype.mainError=function(){if(this._errors.length===0)return null;for(var r={},e=null,t=0,n=0;n<this._errors.length;n++){var o=this._errors[n],i=o.message,a=(r[i]||0)+1;r[i]=a,a>=t&&(e=o,t=a)}return e}});var Ng=G(oo=>{var $T=Lg();oo.operation=function(r){var e=oo.timeouts(r);return new $T(e,{forever:r&&r.forever,unref:r&&r.unref,maxRetryTime:r&&r.maxRetryTime})};oo.timeouts=function(r){if(r instanceof Array)return[].concat(r);var e={retries:10,factor:2,minTimeout:1*1e3,maxTimeout:1/0,randomize:!1};for(var t in r)e[t]=r[t];if(e.minTimeout>e.maxTimeout)throw new Error("minTimeout is greater than maxTimeout");for(var n=[],o=0;o<e.retries;o++)n.push(this.createTimeout(o,e));return r&&r.forever&&!n.length&&n.push(this.createTimeout(o,e)),n.sort(function(i,a){return i-a}),n};oo.createTimeout=function(r,e){var t=e.randomize?Math.random()+1:1,n=Math.round(t*e.minTimeout*Math.pow(e.factor,r));return n=Math.min(n,e.maxTimeout),n};oo.wrap=function(r,e,t){if(e instanceof Array&&(t=e,e=null),!t){t=[];for(var n in r)typeof r[n]=="function"&&t.push(n)}for(var o=0;o<t.length;o++){var i=t[o],a=r[i];r[i]=function(c){var l=oo.operation(e),p=Array.prototype.slice.call(arguments,1),d=p.pop();p.push(function(g){l.retry(g)||(g&&(arguments[0]=l.mainError()),d.apply(this,arguments))}),l.attempt(function(){c.apply(r,p)})}.bind(r,a),r[i].options=e}}});var Ug=G((TN,Wg)=>{Wg.exports=Ng()});var jg=G((MN,Us)=>{Us.exports=["SIGABRT","SIGALRM","SIGHUP","SIGINT","SIGTERM"];process.platform!=="win32"&&Us.exports.push("SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&Us.exports.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT","SIGUNUSED")});var Hg=G((xN,Ho)=>{var Pe=global.process,io=function(r){return r&&typeof r=="object"&&typeof r.removeListener=="function"&&typeof r.emit=="function"&&typeof r.reallyExit=="function"&&typeof r.listeners=="function"&&typeof r.kill=="function"&&typeof r.pid=="number"&&typeof r.on=="function"};io(Pe)?(Bg=require("assert"),qo=jg(),Vg=/^win/i.test(Pe.platform),na=require("events"),typeof na!="function"&&(na=na.EventEmitter),Pe.__signal_exit_emitter__?nt=Pe.__signal_exit_emitter__:(nt=Pe.__signal_exit_emitter__=new na,nt.count=0,nt.emitted={}),nt.infinite||(nt.setMaxListeners(1/0),nt.infinite=!0),Ho.exports=function(r,e){if(!io(global.process))return function(){};Bg.equal(typeof r,"function","a callback must be provided for exit handler"),$o===!1&&su();var t="exit";e&&e.alwaysLast&&(t="afterexit");var n=function(){nt.removeListener(t,r),nt.listeners("exit").length===0&&nt.listeners("afterexit").length===0&&js()};return nt.on(t,r),n},js=function(){!$o||!io(global.process)||($o=!1,qo.forEach(function(e){try{Pe.removeListener(e,Bs[e])}catch{}}),Pe.emit=Vs,Pe.reallyExit=cu,nt.count-=1)},Ho.exports.unload=js,ao=function(e,t,n){nt.emitted[e]||(nt.emitted[e]=!0,nt.emit(e,t,n))},Bs={},qo.forEach(function(r){Bs[r]=function(){if(io(global.process)){var t=Pe.listeners(r);t.length===nt.count&&(js(),ao("exit",null,r),ao("afterexit",null,r),Vg&&r==="SIGHUP"&&(r="SIGINT"),Pe.kill(Pe.pid,r))}}}),Ho.exports.signals=function(){return qo},$o=!1,su=function(){$o||!io(global.process)||($o=!0,nt.count+=1,qo=qo.filter(function(e){try{return Pe.on(e,Bs[e]),!0}catch{return!1}}),Pe.emit=$g,Pe.reallyExit=qg)},Ho.exports.load=su,cu=Pe.reallyExit,qg=function(e){io(global.process)&&(Pe.exitCode=e||0,ao("exit",Pe.exitCode,null),ao("afterexit",Pe.exitCode,null),cu.call(Pe,Pe.exitCode))},Vs=Pe.emit,$g=function(e,t){if(e==="exit"&&io(global.process)){t!==void 0&&(Pe.exitCode=t);var n=Vs.apply(this,arguments);return ao("exit",Pe.exitCode,null),ao("afterexit",Pe.exitCode,null),n}else return Vs.apply(this,arguments)}):Ho.exports=function(){return function(){}};var Bg,qo,Vg,na,nt,js,ao,Bs,$o,su,cu,qg,Vs,$g});var Gg=G((FN,lu)=>{"use strict";var zg=Symbol();function HT(r,e,t){let n=e[zg];if(n)return e.stat(r,(i,a)=>{if(i)return t(i);t(null,a.mtime,n)});let o=new Date(Math.ceil(Date.now()/1e3)*1e3+5);e.utimes(r,o,o,i=>{if(i)return t(i);e.stat(r,(a,s)=>{if(a)return t(a);let c=s.mtime.getTime()%1e3===0?"s":"ms";Object.defineProperty(e,zg,{value:c}),t(null,s.mtime,c)})})}function zT(r){let e=Date.now();return r==="s"&&(e=Math.ceil(e/1e3)*1e3),new Date(e)}lu.exports.probe=HT;lu.exports.getMtime=zT});var Qg=G((IN,ia)=>{"use strict";var GT=require("path"),du=au(),KT=Ug(),JT=Hg(),Kg=Gg(),Br={};function oa(r,e){return e.lockfilePath||`${r}.lock`}function mu(r,e,t){if(!e.realpath)return t(null,GT.resolve(r));e.fs.realpath(r,t)}function uu(r,e,t){let n=oa(r,e);e.fs.mkdir(n,o=>{if(!o)return Kg.probe(n,e.fs,(i,a,s)=>{if(i)return e.fs.rmdir(n,()=>{}),t(i);t(null,a,s)});if(o.code!=="EEXIST")return t(o);if(e.stale<=0)return t(Object.assign(new Error("Lock file is already being held"),{code:"ELOCKED",file:r}));e.fs.stat(n,(i,a)=>{if(i)return i.code==="ENOENT"?uu(r,{...e,stale:0},t):t(i);if(!Jg(a,e))return t(Object.assign(new Error("Lock file is already being held"),{code:"ELOCKED",file:r}));Yg(r,e,s=>{if(s)return t(s);uu(r,{...e,stale:0},t)})})})}function Jg(r,e){return r.mtime.getTime()<Date.now()-e.stale}function Yg(r,e,t){e.fs.rmdir(oa(r,e),n=>{if(n&&n.code!=="ENOENT")return t(n);t()})}function qs(r,e){let t=Br[r];t.updateTimeout||(t.updateDelay=t.updateDelay||e.update,t.updateTimeout=setTimeout(()=>{t.updateTimeout=null,e.fs.stat(t.lockfilePath,(n,o)=>{let i=t.lastUpdate+e.stale<Date.now();if(n)return n.code==="ENOENT"||i?pu(r,t,Object.assign(n,{code:"ECOMPROMISED"})):(t.updateDelay=1e3,qs(r,e));if(!(t.mtime.getTime()===o.mtime.getTime()))return pu(r,t,Object.assign(new Error("Unable to update lock within the stale threshold"),{code:"ECOMPROMISED"}));let s=Kg.getMtime(t.mtimePrecision);e.fs.utimes(t.lockfilePath,s,s,c=>{let l=t.lastUpdate+e.stale<Date.now();if(!t.released){if(c)return c.code==="ENOENT"||l?pu(r,t,Object.assign(c,{code:"ECOMPROMISED"})):(t.updateDelay=1e3,qs(r,e));t.mtime=s,t.lastUpdate=Date.now(),t.updateDelay=null,qs(r,e)}})})},t.updateDelay),t.updateTimeout.unref&&t.updateTimeout.unref())}function pu(r,e,t){e.released=!0,e.updateTimeout&&clearTimeout(e.updateTimeout),Br[r]===e&&delete Br[r],e.options.onCompromised(t)}function YT(r,e,t){e={stale:1e4,update:null,realpath:!0,retries:0,fs:du,onCompromised:n=>{throw n},...e},e.retries=e.retries||0,e.retries=typeof e.retries=="number"?{retries:e.retries}:e.retries,e.stale=Math.max(e.stale||0,2e3),e.update=e.update==null?e.stale/2:e.update||0,e.update=Math.max(Math.min(e.update,e.stale/2),1e3),mu(r,e,(n,o)=>{if(n)return t(n);let i=KT.operation(e.retries);i.attempt(()=>{uu(o,e,(a,s,c)=>{if(i.retry(a))return;if(a)return t(i.mainError());let l=Br[o]={lockfilePath:oa(o,e),mtime:s,mtimePrecision:c,options:e,lastUpdate:Date.now()};qs(o,e),t(null,p=>{if(l.released)return p&&p(Object.assign(new Error("Lock is already released"),{code:"ERELEASED"}));Xg(o,{...e,realpath:!1},p)})})})})}function Xg(r,e,t){e={fs:du,realpath:!0,...e},mu(r,e,(n,o)=>{if(n)return t(n);let i=Br[o];if(!i)return t(Object.assign(new Error("Lock is not acquired/owned by you"),{code:"ENOTACQUIRED"}));i.updateTimeout&&clearTimeout(i.updateTimeout),i.released=!0,delete Br[o],Yg(o,e,t)})}function XT(r,e,t){e={stale:1e4,realpath:!0,fs:du,...e},e.stale=Math.max(e.stale||0,2e3),mu(r,e,(n,o)=>{if(n)return t(n);e.fs.stat(oa(o,e),(i,a)=>i?i.code==="ENOENT"?t(null,!1):t(i):t(null,!Jg(a,e)))})}function QT(){return Br}JT(()=>{for(let r in Br){let e=Br[r].options;try{e.fs.rmdirSync(oa(r,e))}catch{}}});ia.exports.lock=YT;ia.exports.unlock=Xg;ia.exports.check=XT;ia.exports.getLocks=QT});var ey=G((DN,Zg)=>{"use strict";var ZT=au();function eM(r){let e=["mkdir","realpath","stat","rmdir","utimes"],t={...r};return e.forEach(n=>{t[n]=(...o)=>{let i=o.pop(),a;try{a=r[`${n}Sync`](...o)}catch(s){return i(s)}i(null,a)}}),t}function tM(r){return(...e)=>new Promise((t,n)=>{e.push((o,i)=>{o?n(o):t(i)}),r(...e)})}function rM(r){return(...e)=>{let t,n;if(e.push((o,i)=>{t=o,n=i}),r(...e),t)throw t;return n}}function nM(r){if(r={...r},r.fs=eM(r.fs||ZT),typeof r.retries=="number"&&r.retries>0||r.retries&&typeof r.retries.retries=="number"&&r.retries.retries>0)throw Object.assign(new Error("Cannot use retries with the sync api"),{code:"ESYNC"});return r}Zg.exports={toPromise:tM,toSync:rM,toSyncOptions:nM}});var fu=G((AN,yn)=>{"use strict";var zo=Qg(),{toPromise:$s,toSync:Hs,toSyncOptions:hu}=ey();async function ty(r,e){let t=await $s(zo.lock)(r,e);return $s(t)}function oM(r,e){let t=Hs(zo.lock)(r,hu(e));return Hs(t)}function iM(r,e){return $s(zo.unlock)(r,e)}function aM(r,e){return Hs(zo.unlock)(r,hu(e))}function sM(r,e){return $s(zo.check)(r,e)}function cM(r,e){return Hs(zo.check)(r,hu(e))}yn.exports=ty;yn.exports.lock=ty;yn.exports.unlock=iM;yn.exports.lockSync=oM;yn.exports.unlockSync=aM;yn.exports.check=sM;yn.exports.checkSync=cM});async function yu(r){return mr.promises.readFile(r,"utf8")}async function qe(r,e=""){try{return await yu(r)}catch(t){if(x(t))return gu.debug("optional text file does not exist: %s",r),e;throw t}}async function Ke(r,e){await mr.promises.mkdir(zs.dirname(r),{recursive:!0}),await mr.promises.writeFile(r,e,"utf8")}async function iy(r,e,t={}){await mr.promises.mkdir(zs.dirname(r),{recursive:!0});let n,o=t.timeoutMs??lM,i=t.retryDelayMs??pM;try{n=await oy.lock(r,{lockfilePath:r,realpath:!1,stale:t.staleMs??uM,retries:{retries:Math.ceil(o/i),factor:1,minTimeout:i,maxTimeout:i}})}catch(a){throw Ss(a)?new wt("err.lock.busy",{lockPath:r,timeoutMs:o},{category:"lockBusy",cause:a instanceof Error?a:void 0,message:`file lock is held by another process: ${r}`}):a}try{return await e()}finally{if(n)try{await n()}catch(a){gu.warn(`release file lock failed: ${r}`,a)}}}async function Cn(r,e){await mr.promises.mkdir(zs.dirname(r),{recursive:!0});let t=`${r}.succapp-tmp.${process.pid}.${Date.now()}.${(0,ry.randomUUID)()}`;try{typeof e=="string"||Buffer.isBuffer(e)?await mr.promises.writeFile(t,e):await(0,ny.pipeline)(e,mr.createWriteStream(t)),await mr.promises.rename(t,r)}catch(n){throw await mr.promises.rm(t,{force:!0}).catch(o=>{gu.debug("cleanup temporary write file failed: %s",t,o)}),n}}var mr,zs,ry,ny,oy,gu,lM,pM,uM,Pt=he(()=>{mr=b(require("fs")),zs=b(require("path")),ry=require("crypto"),ny=require("stream/promises"),oy=b(fu());F();U();K();gu=T("common.file");lM=5e3,pM=100,uM=3e4});async function Ny(r,e,t){let n=typeof e=="function"?e:t;if($(n,"runConcurrently task is required"),r.length===0)return;let o=typeof e=="function"?void 0:e,i=new Je(o);await Promise.all(r.map(a=>i.addTask(()=>n(a))))}var jM,Je,Sn=he(()=>{dn();we();F();jM=8,Je=class{activeCount=0;canceledError;pendingSlots=[];idleWaiters=[];signal;abortListener;maxConcurrency;constructor(e){typeof e=="number"?this.maxConcurrency=e:(this.maxConcurrency=e?.maxConcurrency??jM,this.signal=e?.signal),this.maxConcurrency=Math.max(1,this.maxConcurrency),this.signal&&(this.abortListener=()=>this.cancel(Wp(this.signal)),this.signal.aborted?this.abortListener():this.signal.addEventListener("abort",this.abortListener,{once:!0}))}async addTask(e){let t=await this.acquire();try{return ht(this.signal),await e()}catch(n){throw n instanceof tr&&this.cancel(n),n}finally{t.release()}}async acquire(){if(ht(this.signal),this.canceledError)throw this.canceledError;if(this.activeCount<this.maxConcurrency)return this.activeCount++,this.createSlot();if(await new Promise((e,t)=>{this.pendingSlots.push({resolve:e,reject:t})}),ht(this.signal),this.canceledError)throw this.canceledError;return this.createSlot()}async waitAll(){this.isIdle()||await new Promise(e=>this.idleWaiters.push(e))}cancel(e){if(this.canceledError)return;this.canceledError=e instanceof Error?e:new Error(String(e??"ConTasksRunner cancelled")),this.disposeAbortListener();let t=this.pendingSlots.splice(0);for(let n of t)n.reject(this.canceledError);this.notifyIdleIfNeeded()}createSlot(){let e=!1;return{release:()=>{e||(e=!0,this.releaseSlot())}}}releaseSlot(){let e=this.pendingSlots.shift();if(e){e.resolve();return}this.activeCount--,this.notifyIdleIfNeeded()}isIdle(){return this.activeCount===0&&this.pendingSlots.length===0}notifyIdleIfNeeded(){if(this.isIdle())for(let e of this.idleWaiters.splice(0))e()}disposeAbortListener(){this.signal&&this.abortListener&&this.signal.removeEventListener("abort",this.abortListener)}}});function ae(r){let e=r.replace($M,"/").replace(/^\/+|\/+$/g,"");return e?"/"+e:"/"}function jy(r){let e=ae(r);if(e.split("/").filter(Boolean).includes(HM))throw new Error(`Unsafe metadata path: ${r}`);return e}function By(r){if(!r.startsWith("/"))throw new R("err.meta.invalidPath",{path:r,reason:"notAbsolute"});try{return jy(r)}catch(e){throw new R("err.meta.invalidPath",{path:r,reason:"unsafe"},{cause:e})}}function re(r,e){return le.join(r,ae(e).replace(/^\//,""))}function Vy(r,e){let t=le.resolve(r),n=le.resolve(t,jy(e).replace(/^\//,""));if(n!==t&&!n.startsWith(t+le.sep))throw new Error(`Metadata path escapes root: ${e}`);return n}function nr(r){return le.join(r,$t)}function pa(r,...e){return le.join(nr(r),...e)}function $r(r){return le.join(r,JM,YM)}function Hr(r){let e=r.replace(zM,"/");if(!e||le.posix.isAbsolute(e)||le.win32.isAbsolute(r)||le.win32.isAbsolute(e))return;let t=e.split("/");return t.some(ex)?void 0:t.join("/")}function vn(r,e="relative path"){let t=Hr(r);if(!t)throw new Error(`invalid ${e}: ${r}`);return t}function Iu(r,e,t="relative path"){return le.join(r,...vn(e,t).split("/"))}function Rt(r,e){return le.isAbsolute(e)?le.normalize(e):le.resolve(r,e)}async function ee(r){try{return await Qs.promises.access(r),!0}catch(e){if(x(e))return!1;throw e}}async function Zs(r){let e;try{e=await Qs.promises.stat(r)}catch(t){throw x(t)?new R("err.file.notFound",{path:r},{cause:t}):t}if(!e.isDirectory())throw new R("err.file.notDirectory",{path:r})}function fr(r){return r.trim().replace(VM,"").replace(qM,"-")}function Tr(r,e){let t=le.resolve(r),n=le.resolve(e);if(n===t||!n.startsWith(t+le.sep))return;let o=le.relative(t,n);if(!o)return"/";let i=o.split(le.sep);if(!i[0].startsWith("."))return ae(i.join("/"))}function Re(r){return r.replace(/^\//,"")}function je(r){let e=ae(r);if(e==="/")return;let[t]=e.slice(1).split("/");return t?`/${t}`:void 0}function Et(r){let e=r.trim();if(!e||e.startsWith(".")||e.includes("/")||e.includes("\\"))throw new Error(`invalid project name: ${r}`);return`/${e}`}function Q(r,e){let t=Uy(r),n=Uy(e);return t===n||n==="/"?!0:t.length<=n.length?!1:t.charCodeAt(n.length)===47&&t.startsWith(n)}function kn(r,e,t,n){return Xs(r,t)||e&&Xs(e,t)?!0:!!n&&(Xs(r,n)||!!e&&Xs(e,n))}function Xs(r,e){return Q(r,e)||Q(e,r)}function qy(r){let e;for(let t of r){let n=XM(t);if(!e){e=n;continue}e=QM(e,n)}if(e)return ae(e.join("/"))}function XM(r){let e=ae(r);if(e==="/")return[];let t=e.split("/").filter(Boolean);return t.pop(),t}function QM(r,e){let t=Math.min(r.length,e.length),n=[];for(let o=0;o<t&&r[o]===e[o];o++)n.push(r[o]);return n}function ft(r){let e=[...r].sort((n,o)=>{let i=Wy(n)-Wy(o);return i===0?n.localeCompare(o):i}),t=[];for(let n of e)ZM(n,r)||t.push(n);return t}function ZM(r,e){let t=le.posix.dirname(r);for(;t!==r;){if(e.has(t))return!0;if(t==="/")return!1;r=t,t=le.posix.dirname(r)}return!1}function Wy(r){return r.split("/").filter(Boolean).length}function Uy(r){return le.posix.normalize(ae(r))}function ex(r){return!r||r===GM||r===KM}async function or(r){try{await Qs.promises.rm(r,{recursive:!0,force:!0})}catch(e){if(!x(e))throw e;BM.debug(`remove ignored missing path: ${r}`)}}function Mr(r){return r.split("/").filter(Boolean).length}var Qs,le,BM,VM,qM,$M,HM,zM,GM,KM,$t,JM,YM,H=he(()=>{Qs=b(require("fs")),le=b(require("path"));F();U();K();BM=T("common.path"),VM=/^https?:\/\/|\/+$/gi,qM=/[^a-zA-Z0-9.]+/g,$M=/[\\/]+/g,HM="..",zM=/\\/g,GM=".",KM="..",$t=".succapp",JM=".vscode",YM="settings.json"});var ud=G((WB,hS)=>{hS.exports={LOCHDR:30,LOCSIG:67324752,LOCVER:4,LOCFLG:6,LOCHOW:8,LOCTIM:10,LOCCRC:14,LOCSIZ:18,LOCLEN:22,LOCNAM:26,LOCEXT:28,EXTSIG:134695760,EXTHDR:16,EXTCRC:4,EXTSIZ:8,EXTLEN:12,CENHDR:46,CENSIG:33639248,CENVEM:4,CENVER:6,CENFLG:8,CENHOW:10,CENTIM:12,CENCRC:16,CENSIZ:20,CENLEN:24,CENNAM:28,CENEXT:30,CENCOM:32,CENDSK:34,CENATT:36,CENATX:38,CENOFF:42,ENDHDR:22,ENDSIG:101010256,ENDSUB:8,ENDTOT:10,ENDSIZ:12,ENDOFF:16,ENDCOM:20,END64HDR:20,END64SIG:117853008,END64START:4,END64OFF:8,END64NUMDISKS:16,ZIP64SIG:101075792,ZIP64HDR:56,ZIP64LEAD:12,ZIP64SIZE:4,ZIP64VEM:12,ZIP64VER:14,ZIP64DSK:16,ZIP64DSKDIR:20,ZIP64SUB:24,ZIP64TOT:32,ZIP64SIZB:40,ZIP64OFF:48,ZIP64EXTRA:56,STORED:0,SHRUNK:1,REDUCED1:2,REDUCED2:3,REDUCED3:4,REDUCED4:5,IMPLODED:6,DEFLATED:8,ENHANCED_DEFLATED:9,PKWARE:10,BZIP2:12,LZMA:14,IBM_TERSE:18,IBM_LZ77:19,AES_ENCRYPT:99,FLG_ENC:1,FLG_COMP1:2,FLG_COMP2:4,FLG_DESC:8,FLG_ENH:16,FLG_PATCH:32,FLG_STR:64,FLG_EFS:2048,FLG_MSK:4096,FILE:2,BUFFER:1,NONE:0,EF_ID:0,EF_SIZE:2,ID_ZIP64:1,ID_AVINFO:7,ID_PFS:8,ID_OS2:9,ID_NTFS:10,ID_OPENVMS:12,ID_UNIX:13,ID_FORK:14,ID_PATCH:15,ID_X509_PKCS7:20,ID_X509_CERTID_F:21,ID_X509_CERTID_C:22,ID_STRONGENC:23,ID_RECORD_MGT:24,ID_X509_PKCS7_RL:25,ID_IBM1:101,ID_IBM2:102,ID_POSZIP:18064,EF_ZIP64_OR_32:4294967295,EF_ZIP64_OR_16:65535,EF_ZIP64_SUNCOMP:0,EF_ZIP64_SCOMP:8,EF_ZIP64_RHO:16,EF_ZIP64_DSN:24}});var hc=G(gS=>{var fS={INVALID_LOC:"Invalid LOC header (bad signature)",INVALID_CEN:"Invalid CEN header (bad signature)",INVALID_END:"Invalid END header (bad signature)",DESCRIPTOR_NOT_EXIST:"No descriptor present",DESCRIPTOR_UNKNOWN:"Unknown descriptor format",DESCRIPTOR_FAULTY:"Descriptor data is malformed",NO_DATA:"Nothing to decompress",BAD_CRC:"CRC32 checksum failed {0}",FILE_IN_THE_WAY:"There is a file in the way: {0}",UNKNOWN_METHOD:"Invalid/unsupported compression method",AVAIL_DATA:"inflate::Available inflate data did not terminate",INVALID_DISTANCE:"inflate::Invalid literal/length or distance code in fixed or dynamic block",TO_MANY_CODES:"inflate::Dynamic block code description: too many length or distance codes",INVALID_REPEAT_LEN:"inflate::Dynamic block code description: repeat more than specified lengths",INVALID_REPEAT_FIRST:"inflate::Dynamic block code description: repeat lengths with no first length",INCOMPLETE_CODES:"inflate::Dynamic block code description: code lengths codes incomplete",INVALID_DYN_DISTANCE:"inflate::Dynamic block code description: invalid distance code lengths",INVALID_CODES_LEN:"inflate::Dynamic block code description: invalid literal/length code lengths",INVALID_STORE_BLOCK:"inflate::Stored block length did not match one's complement",INVALID_BLOCK_TYPE:"inflate::Invalid block type (type == 3)",CANT_EXTRACT_FILE:"Could not extract the file",CANT_OVERRIDE:"Target file already exists",DISK_ENTRY_TOO_LARGE:"Number of disk entries is too large",NO_ZIP:"No zip file was loaded",NO_ENTRY:"Entry doesn't exist",DIRECTORY_CONTENT_ERROR:"A directory cannot have content",FILE_NOT_FOUND:'File not found: "{0}"',NOT_IMPLEMENTED:"Not implemented",INVALID_FILENAME:"Invalid filename",INVALID_FORMAT:"Invalid or unsupported zip format. No END header found",INVALID_PASS_PARAM:"Incompatible password parameter",WRONG_PASSWORD:"Wrong Password",COMMENT_TOO_LONG:"Comment is too long",EXTRA_FIELD_PARSE_ERROR:"Extra field parsing error"};function hF(r){return function(...e){return e.length&&(r=r.replace(/\{(\d)\}/g,(t,n)=>e[n]||"")),new Error("ADM-ZIP: "+r)}}for(let r of Object.keys(fS))gS[r]=hF(fS[r])});var kS=G((jB,vS)=>{var fF=require("fs"),Xe=require("path"),yS=ud(),gF=hc(),yF=typeof process=="object"&&process.platform==="win32",CS=r=>typeof r=="object"&&r!==null,SS=new Uint32Array(256).map((r,e)=>{for(let t=0;t<8;t++)e&1?e=3988292384^e>>>1:e>>>=1;return e>>>0});function _e(r){this.sep=Xe.sep,this.fs=fF,CS(r)&&CS(r.fs)&&typeof r.fs.statSync=="function"&&(this.fs=r.fs)}vS.exports=_e;_e.prototype.makeDir=function(r){let e=this;function t(n){let o=n.split(e.sep)[0];n.split(e.sep).forEach(function(i){if(!(!i||i.substr(-1,1)===":")){o+=e.sep+i;var a;try{a=e.fs.statSync(o)}catch(s){if(s.message&&s.message.startsWith("ENOENT"))e.fs.mkdirSync(o);else throw s}if(a&&a.isFile())throw gF.FILE_IN_THE_WAY(`"${o}"`)}})}t(r)};_e.prototype.writeFileTo=function(r,e,t,n){let o=this;if(o.fs.existsSync(r)){if(!t)return!1;var i=o.fs.statSync(r);if(i.isDirectory())return!1}var a=Xe.dirname(r);o.fs.existsSync(a)||o.makeDir(a);var s;try{s=o.fs.openSync(r,"w",438)}catch{o.fs.chmodSync(r,438),s=o.fs.openSync(r,"w",438)}if(s)try{o.fs.writeSync(s,e,0,e.length,0)}finally{o.fs.closeSync(s)}return o.fs.chmodSync(r,n||438),!0};_e.prototype.writeFileToAsync=function(r,e,t,n,o){typeof n=="function"&&(o=n,n=void 0);let i=this;i.fs.exists(r,function(a){if(a&&!t)return o(!1);i.fs.stat(r,function(s,c){if(a&&c.isDirectory())return o(!1);var l=Xe.dirname(r);i.fs.exists(l,function(p){p||i.makeDir(l),i.fs.open(r,"w",438,function(d,g){d?i.fs.chmod(r,438,function(){i.fs.open(r,"w",438,function(m,f){i.fs.write(f,e,0,e.length,0,function(){i.fs.close(f,function(){i.fs.chmod(r,n||438,function(){o(!0)})})})})}):g?i.fs.write(g,e,0,e.length,0,function(){i.fs.close(g,function(){i.fs.chmod(r,n||438,function(){o(!0)})})}):i.fs.chmod(r,n||438,function(){o(!0)})})})})})};_e.prototype.findFiles=function(r){let e=this;function t(n,o,i){typeof o=="boolean"&&(i=o,o=void 0);let a=[];return e.fs.readdirSync(n).forEach(function(s){let c=Xe.join(n,s),l=e.fs.statSync(c);(!o||o.test(c))&&a.push(Xe.normalize(c)+(l.isDirectory()?e.sep:"")),l.isDirectory()&&i&&(a=a.concat(t(c,o,i)))}),a}return t(r,void 0,!0)};_e.prototype.findFilesAsync=function(r,e){let t=this,n=[];t.fs.readdir(r,function(o,i){if(o)return e(o);let a=i.length;if(!a)return e(null,n);i.forEach(function(s){s=Xe.join(r,s),t.fs.stat(s,function(c,l){if(c)return e(c);l&&(n.push(Xe.normalize(s)+(l.isDirectory()?t.sep:"")),l.isDirectory()?t.findFilesAsync(s,function(p,d){if(p)return e(p);n=n.concat(d),--a||e(null,n)}):--a||e(null,n))})})})};_e.prototype.getAttributes=function(){};_e.prototype.setAttributes=function(){};_e.crc32update=function(r,e){return SS[(r^e)&255]^r>>>8};_e.crc32=function(r){typeof r=="string"&&(r=Buffer.from(r,"utf8"));let e=r.length,t=-1;for(let n=0;n<e;)t=_e.crc32update(t,r[n++]);return~t>>>0};_e.methodToString=function(r){switch(r){case yS.STORED:return"STORED ("+r+")";case yS.DEFLATED:return"DEFLATED ("+r+")";default:return"UNSUPPORTED ("+r+")"}};_e.canonical=function(r){if(!r)return"";let e=Xe.posix.normalize("/"+r.split("\\").join("/"));return Xe.join(".",e)};_e.zipnamefix=function(r){if(!r)return"";let e=Xe.posix.normalize("/"+r.split("\\").join("/"));return Xe.posix.join(".",e)};_e.findLast=function(r,e){if(!Array.isArray(r))throw new TypeError("arr is not array");let t=r.length>>>0;for(let n=t-1;n>=0;n--)if(e(r[n],n,r))return r[n]};_e.sanitize=function(r,e){r=Xe.resolve(Xe.normalize(r));for(var t=e.split("/"),n=0,o=t.length;n<o;n++){var i=Xe.normalize(Xe.join(r,t.slice(n,o).join(Xe.sep)));if(i.indexOf(r)===0)return i}return Xe.normalize(Xe.join(r,Xe.basename(e)))};_e.toBuffer=function(e,t){return Buffer.isBuffer(e)?e:e instanceof Uint8Array?Buffer.from(e):typeof e=="string"?t(e):Buffer.alloc(0)};_e.readBigUInt64LE=function(r,e){let t=r.readUInt32LE(e);return r.readUInt32LE(e+4)*4294967296+t};_e.fromDOS2Date=function(r){return new Date((r>>25&127)+1980,Math.max((r>>21&15)-1,0),Math.max(r>>16&31,1),r>>11&31,r>>5&63,(r&31)<<1)};_e.fromDate2DOS=function(r){let e=0,t=0;return r.getFullYear()>1979&&(e=(r.getFullYear()-1980&127)<<9|r.getMonth()+1<<5|r.getDate(),t=r.getHours()<<11|r.getMinutes()<<5|r.getSeconds()>>1),e<<16|t};_e.isWin=yF;_e.crcTable=SS});var PS=G((BB,wS)=>{var CF=require("path");wS.exports=function(r,{fs:e}){var t=r||"",n=i(),o=null;function i(){return{directory:!1,readonly:!1,hidden:!1,executable:!1,mtime:0,atime:0}}return t&&e.existsSync(t)?(o=e.statSync(t),n.directory=o.isDirectory(),n.mtime=o.mtime,n.atime=o.atime,n.executable=(73&o.mode)!==0,n.readonly=(128&o.mode)===0,n.hidden=CF.basename(t)[0]==="."):console.warn("Invalid path: "+t),{get directory(){return n.directory},get readOnly(){return n.readonly},get hidden(){return n.hidden},get mtime(){return n.mtime},get atime(){return n.atime},get executable(){return n.executable},decodeAttributes:function(){},encodeAttributes:function(){},toJSON:function(){return{path:t,isDirectory:n.directory,isReadOnly:n.readonly,isHidden:n.hidden,isExecutable:n.executable,mTime:n.mtime,aTime:n.atime}},toString:function(){return JSON.stringify(this.toJSON(),null," ")}}}});var ES=G((VB,RS)=>{RS.exports={efs:!0,encode:r=>Buffer.from(r,"utf8"),decode:r=>r.toString("utf8")}});var li=G((qB,ci)=>{ci.exports=kS();ci.exports.Constants=ud();ci.exports.Errors=hc();ci.exports.FileAttr=PS();ci.exports.decoder=ES()});var TS=G(($B,bS)=>{var Dn=li(),A=Dn.Constants;bS.exports=function(){var r=20,e=10,t=0,n=0,o=0,i=0,a=0,s=0,c=0,l=0,p=0,d=0,g=0,m=0,f=0;r|=Dn.isWin?2560:768,t|=A.FLG_EFS;let y={extraLen:0},C=h=>Math.max(0,h)>>>0,v=h=>Math.max(0,h)&65535,P=h=>Math.max(0,h)&255;return o=Dn.fromDate2DOS(new Date),{get made(){return r},set made(h){r=h},get version(){return e},set version(h){e=h},get flags(){return t},set flags(h){t=h},get flags_efs(){return(t&A.FLG_EFS)>0},set flags_efs(h){h?t|=A.FLG_EFS:t&=~A.FLG_EFS},get flags_desc(){return(t&A.FLG_DESC)>0},set flags_desc(h){h?t|=A.FLG_DESC:t&=~A.FLG_DESC},get method(){return n},set method(h){switch(h){case A.STORED:this.version=10;case A.DEFLATED:default:this.version=20}n=h},get time(){return Dn.fromDOS2Date(this.timeval)},set time(h){h=new Date(h),this.timeval=Dn.fromDate2DOS(h)},get timeval(){return o},set timeval(h){o=C(h)},get timeHighByte(){return P(o>>>8)},get crc(){return i},set crc(h){i=C(h)},get compressedSize(){return a},set compressedSize(h){a=C(h)},get size(){return s},set size(h){s=C(h)},get fileNameLength(){return c},set fileNameLength(h){c=h},get extraLength(){return l},set extraLength(h){l=h},get extraLocalLength(){return y.extraLen},set extraLocalLength(h){y.extraLen=h},get commentLength(){return p},set commentLength(h){p=h},get diskNumStart(){return d},set diskNumStart(h){d=C(h)},get inAttr(){return g},set inAttr(h){g=C(h)},get attr(){return m},set attr(h){m=C(h)},get fileAttr(){return(m||0)>>16&4095},get offset(){return f},set offset(h){f=C(h)},get encrypted(){return(t&A.FLG_ENC)===A.FLG_ENC},get centralHeaderSize(){return A.CENHDR+c+l+p},get realDataOffset(){return f+A.LOCHDR+y.fnameLen+y.extraLen},get localHeader(){return y},loadLocalHeaderFromBinary:function(h){var S=h.slice(f,f+A.LOCHDR);if(S.readUInt32LE(0)!==A.LOCSIG)throw Dn.Errors.INVALID_LOC();y.version=S.readUInt16LE(A.LOCVER),y.flags=S.readUInt16LE(A.LOCFLG),y.flags_desc=(y.flags&A.FLG_DESC)>0,y.method=S.readUInt16LE(A.LOCHOW),y.time=S.readUInt32LE(A.LOCTIM),y.crc=S.readUInt32LE(A.LOCCRC),y.compressedSize=S.readUInt32LE(A.LOCSIZ),y.size=S.readUInt32LE(A.LOCLEN),y.fnameLen=S.readUInt16LE(A.LOCNAM),y.extraLen=S.readUInt16LE(A.LOCEXT);let k=f+A.LOCHDR+y.fnameLen,E=k+y.extraLen;return h.slice(k,E)},loadFromBinary:function(h){if(h.length!==A.CENHDR||h.readUInt32LE(0)!==A.CENSIG)throw Dn.Errors.INVALID_CEN();r=h.readUInt16LE(A.CENVEM),e=h.readUInt16LE(A.CENVER),t=h.readUInt16LE(A.CENFLG),n=h.readUInt16LE(A.CENHOW),o=h.readUInt32LE(A.CENTIM),i=h.readUInt32LE(A.CENCRC),a=h.readUInt32LE(A.CENSIZ),s=h.readUInt32LE(A.CENLEN),c=h.readUInt16LE(A.CENNAM),l=h.readUInt16LE(A.CENEXT),p=h.readUInt16LE(A.CENCOM),d=h.readUInt16LE(A.CENDSK),g=h.readUInt16LE(A.CENATT),m=h.readUInt32LE(A.CENATX),f=h.readUInt32LE(A.CENOFF)},localHeaderToBinary:function(){var h=Buffer.alloc(A.LOCHDR);return h.writeUInt32LE(A.LOCSIG,0),h.writeUInt16LE(e,A.LOCVER),h.writeUInt16LE(t,A.LOCFLG),h.writeUInt16LE(n,A.LOCHOW),h.writeUInt32LE(o,A.LOCTIM),h.writeUInt32LE(i,A.LOCCRC),h.writeUInt32LE(a,A.LOCSIZ),h.writeUInt32LE(s,A.LOCLEN),h.writeUInt16LE(c,A.LOCNAM),h.writeUInt16LE(y.extraLen,A.LOCEXT),h},centralHeaderToBinary:function(){var h=Buffer.alloc(A.CENHDR+c+l+p);return h.writeUInt32LE(A.CENSIG,0),h.writeUInt16LE(r,A.CENVEM),h.writeUInt16LE(e,A.CENVER),h.writeUInt16LE(t,A.CENFLG),h.writeUInt16LE(n,A.CENHOW),h.writeUInt32LE(o,A.CENTIM),h.writeUInt32LE(i,A.CENCRC),h.writeUInt32LE(a,A.CENSIZ),h.writeUInt32LE(s,A.CENLEN),h.writeUInt16LE(c,A.CENNAM),h.writeUInt16LE(l,A.CENEXT),h.writeUInt16LE(p,A.CENCOM),h.writeUInt16LE(d,A.CENDSK),h.writeUInt16LE(g,A.CENATT),h.writeUInt32LE(m,A.CENATX),h.writeUInt32LE(f,A.CENOFF),h},toJSON:function(){let h=function(S){return S+" bytes"};return{made:r,version:e,flags:t,method:Dn.methodToString(n),time:this.time,crc:"0x"+i.toString(16).toUpperCase(),compressedSize:h(a),size:h(s),fileNameLength:h(c),extraLength:h(l),commentLength:h(p),diskNumStart:d,inAttr:g,attr:m,offset:f,centralHeaderSize:h(A.CENHDR+c+l+p)}},toString:function(){return JSON.stringify(this.toJSON(),null," ")}}}});var xS=G((HB,MS)=>{var pi=li(),Fe=pi.Constants;MS.exports=function(){var r=0,e=0,t=0,n=0,o=0;return{get diskEntries(){return r},set diskEntries(i){r=e=i},get totalEntries(){return e},set totalEntries(i){e=r=i},get size(){return t},set size(i){t=i},get offset(){return n},set offset(i){n=i},get commentLength(){return o},set commentLength(i){o=i},get mainHeaderSize(){return Fe.ENDHDR+o},loadFromBinary:function(i){if((i.length!==Fe.ENDHDR||i.readUInt32LE(0)!==Fe.ENDSIG)&&(i.length<Fe.ZIP64HDR||i.readUInt32LE(0)!==Fe.ZIP64SIG))throw pi.Errors.INVALID_END();i.readUInt32LE(0)===Fe.ENDSIG?(r=i.readUInt16LE(Fe.ENDSUB),e=i.readUInt16LE(Fe.ENDTOT),t=i.readUInt32LE(Fe.ENDSIZ),n=i.readUInt32LE(Fe.ENDOFF),o=i.readUInt16LE(Fe.ENDCOM)):(r=pi.readBigUInt64LE(i,Fe.ZIP64SUB),e=pi.readBigUInt64LE(i,Fe.ZIP64TOT),t=pi.readBigUInt64LE(i,Fe.ZIP64SIZE),n=pi.readBigUInt64LE(i,Fe.ZIP64OFF),o=0)},toBinary:function(){var i=Buffer.alloc(Fe.ENDHDR+o);return i.writeUInt32LE(Fe.ENDSIG,0),i.writeUInt32LE(0,4),i.writeUInt16LE(r,Fe.ENDSUB),i.writeUInt16LE(e,Fe.ENDTOT),i.writeUInt32LE(t,Fe.ENDSIZ),i.writeUInt32LE(n,Fe.ENDOFF),i.writeUInt16LE(o,Fe.ENDCOM),i.fill(" ",Fe.ENDHDR),i},toJSON:function(){let i=function(a,s){let c=a.toString(16).toUpperCase();for(;c.length<s;)c="0"+c;return"0x"+c};return{diskEntries:r,totalEntries:e,size:t+" bytes",offset:i(n,4),commentLength:o}},toString:function(){return JSON.stringify(this.toJSON(),null," ")}}}});var md=G(dd=>{dd.EntryHeader=TS();dd.MainHeader=xS()});var IS=G((GB,FS)=>{FS.exports=function(r){var e=require("zlib"),t={chunkSize:(parseInt(r.length/1024)+1)*1024};return{deflate:function(){return e.deflateRawSync(r,t)},deflateAsync:function(n){var o=e.createDeflateRaw(t),i=[],a=0;o.on("data",function(s){i.push(s),a+=s.length}),o.on("end",function(){var s=Buffer.alloc(a),c=0;s.fill(0);for(var l=0;l<i.length;l++){var p=i[l];p.copy(s,c),c+=p.length}n&&n(s)}),o.end(r)}}}});var AS=G((KB,DS)=>{var SF=+(process.versions?process.versions.node:"").split(".")[0]||0;DS.exports=function(r,e){var t=require("zlib");let n=SF>=15&&e>0?{maxOutputLength:e}:{};return{inflate:function(){return t.inflateRawSync(r,n)},inflateAsync:function(o){var i=t.createInflateRaw(n),a=[],s=0;i.on("data",function(c){a.push(c),s+=c.length}),i.on("end",function(){var c=Buffer.alloc(s),l=0;c.fill(0);for(var p=0;p<a.length;p++){var d=a[p];d.copy(c,l),l+=d.length}o&&o(c)}),i.end(r)}}}});var WS=G((JB,NS)=>{"use strict";var{randomFillSync:OS}=require("crypto"),vF=hc(),kF=new Uint32Array(256).map((r,e)=>{for(let t=0;t<8;t++)e&1?e=e>>>1^3988292384:e>>>=1;return e>>>0}),LS=(r,e)=>Math.imul(r,e)>>>0,_S=(r,e)=>kF[(r^e)&255]^r>>>8,ya=()=>typeof OS=="function"?OS(Buffer.alloc(12)):ya.node();ya.node=()=>{let r=Buffer.alloc(12),e=r.length;for(let t=0;t<e;t++)r[t]=Math.random()*256&255;return r};var fc={genSalt:ya};function gc(r){let e=Buffer.isBuffer(r)?r:Buffer.from(r);this.keys=new Uint32Array([305419896,591751049,878082192]);for(let t=0;t<e.length;t++)this.updateKeys(e[t])}gc.prototype.updateKeys=function(r){let e=this.keys;return e[0]=_S(e[0],r),e[1]+=e[0]&255,e[1]=LS(e[1],134775813)+1,e[2]=_S(e[2],e[1]>>>24),r};gc.prototype.next=function(){let r=(this.keys[2]|2)>>>0;return LS(r,r^1)>>8&255};function wF(r){let e=new gc(r);return function(t){let n=Buffer.alloc(t.length),o=0;for(let i of t)n[o++]=e.updateKeys(i^e.next());return n}}function PF(r){let e=new gc(r);return function(t,n,o=0){n||(n=Buffer.alloc(t.length));for(let i of t){let a=e.next();n[o++]=i^a,e.updateKeys(i)}return n}}function RF(r,e,t){if(!r||!Buffer.isBuffer(r)||r.length<12)return Buffer.alloc(0);let n=wF(t),o=n(r.slice(0,12)),i=(e.flags&8)===8?e.timeHighByte:e.crc>>>24;if(o[11]!==i)throw vF.WRONG_PASSWORD();return n(r.slice(12))}function EF(r){Buffer.isBuffer(r)&&r.length>=12?fc.genSalt=function(){return r.slice(0,12)}:r==="node"?fc.genSalt=ya.node:fc.genSalt=ya}function bF(r,e,t,n=!1){r==null&&(r=Buffer.alloc(0)),Buffer.isBuffer(r)||(r=Buffer.from(r.toString()));let o=PF(t),i=fc.genSalt();i[11]=e.crc>>>24&255,n&&(i[10]=e.crc>>>16&255);let a=Buffer.alloc(r.length+12);return o(i,a),o(r,a,12)}NS.exports={decrypt:RF,encrypt:bF,_salter:EF}});var US=G(yc=>{yc.Deflater=IS();yc.Inflater=AS();yc.ZipCrypto=WS()});var fd=G((XB,jS)=>{var me=li(),TF=md(),Le=me.Constants,hd=US();jS.exports=function(r,e){var t=new TF.EntryHeader,n=Buffer.alloc(0),o=Buffer.alloc(0),i=!1,a=null,s=Buffer.alloc(0),c=Buffer.alloc(0),l=!0;let p=r,d=typeof p.decoder=="object"?p.decoder:me.decoder;l=d.hasOwnProperty("efs")?d.efs:!1;function g(){return!e||!(e instanceof Uint8Array)?Buffer.alloc(0):(c=t.loadLocalHeaderFromBinary(e),e.slice(t.realDataOffset,t.realDataOffset+t.compressedSize))}function m(h){if(!t.flags_desc&&!t.localHeader.flags_desc){if(me.crc32(h)!==t.localHeader.crc)return!1}else{let S={},k=t.realDataOffset+t.compressedSize;if(e.readUInt32LE(k)==Le.LOCSIG||e.readUInt32LE(k)==Le.CENSIG)throw me.Errors.DESCRIPTOR_NOT_EXIST();if(e.readUInt32LE(k)==Le.EXTSIG)S.crc=e.readUInt32LE(k+Le.EXTCRC),S.compressedSize=e.readUInt32LE(k+Le.EXTSIZ),S.size=e.readUInt32LE(k+Le.EXTLEN);else if(e.readUInt16LE(k+12)===19280)S.crc=e.readUInt32LE(k+Le.EXTCRC-4),S.compressedSize=e.readUInt32LE(k+Le.EXTSIZ-4),S.size=e.readUInt32LE(k+Le.EXTLEN-4);else throw me.Errors.DESCRIPTOR_UNKNOWN();if(S.compressedSize!==t.compressedSize||S.size!==t.size||S.crc!==t.crc)throw me.Errors.DESCRIPTOR_FAULTY();if(me.crc32(h)!==S.crc)return!1}return!0}function f(h,S,k){if(typeof S>"u"&&typeof h=="string"&&(k=h,h=void 0),i)return h&&S&&S(Buffer.alloc(0),me.Errors.DIRECTORY_CONTENT_ERROR()),Buffer.alloc(0);var E=g();if(E.length===0)return h&&S&&S(E),E;if(t.encrypted){if(typeof k!="string"&&!Buffer.isBuffer(k))throw me.Errors.INVALID_PASS_PARAM();E=hd.ZipCrypto.decrypt(E,t,k)}var w=Buffer.alloc(t.size);switch(t.method){case me.Constants.STORED:if(E.copy(w),m(w))return h&&S&&S(w),w;throw h&&S&&S(w,me.Errors.BAD_CRC()),me.Errors.BAD_CRC();case me.Constants.DEFLATED:var Y=new hd.Inflater(E,t.size);if(h)Y.inflateAsync(function(M){M.copy(M,0),S&&(m(M)?S(M):S(M,me.Errors.BAD_CRC()))});else{if(Y.inflate(w).copy(w,0),!m(w))throw me.Errors.BAD_CRC(`"${d.decode(n)}"`);return w}break;default:throw h&&S&&S(Buffer.alloc(0),me.Errors.UNKNOWN_METHOD()),me.Errors.UNKNOWN_METHOD()}}function y(h,S){if((!a||!a.length)&&Buffer.isBuffer(e))return h&&S&&S(g()),g();if(a.length&&!i){var k;switch(t.method){case me.Constants.STORED:return t.compressedSize=t.size,k=Buffer.alloc(a.length),a.copy(k),h&&S&&S(k),k;default:case me.Constants.DEFLATED:var E=new hd.Deflater(a);if(h)E.deflateAsync(function(Y){k=Buffer.alloc(Y.length),t.compressedSize=Y.length,Y.copy(k),S&&S(k)});else{var w=E.deflate();return t.compressedSize=w.length,w}E=null;break}}else if(h&&S)S(Buffer.alloc(0));else return Buffer.alloc(0)}function C(h,S){return me.readBigUInt64LE(h,S)}function v(h){try{for(var S=0,k,E,w;S+4<h.length;)k=h.readUInt16LE(S),S+=2,E=h.readUInt16LE(S),S+=2,w=h.slice(S,S+E),S+=E,Le.ID_ZIP64===k&&P(w)}catch{throw me.Errors.EXTRA_FIELD_PARSE_ERROR()}}function P(h){var S,k,E,w;h.length>=Le.EF_ZIP64_SCOMP&&(S=C(h,Le.EF_ZIP64_SUNCOMP),t.size===Le.EF_ZIP64_OR_32&&(t.size=S)),h.length>=Le.EF_ZIP64_RHO&&(k=C(h,Le.EF_ZIP64_SCOMP),t.compressedSize===Le.EF_ZIP64_OR_32&&(t.compressedSize=k)),h.length>=Le.EF_ZIP64_DSN&&(E=C(h,Le.EF_ZIP64_RHO),t.offset===Le.EF_ZIP64_OR_32&&(t.offset=E)),h.length>=Le.EF_ZIP64_DSN+4&&(w=h.readUInt32LE(Le.EF_ZIP64_DSN),t.diskNumStart===Le.EF_ZIP64_OR_16&&(t.diskNumStart=w))}return{get entryName(){return d.decode(n)},get rawEntryName(){return n},set entryName(h){n=me.toBuffer(h,d.encode);var S=n[n.length-1];i=S===47||S===92,t.fileNameLength=n.length},get efs(){return typeof l=="function"?l(this.entryName):l},get extra(){return s},set extra(h){s=h,t.extraLength=h.length,v(h)},get comment(){return d.decode(o)},set comment(h){if(o=me.toBuffer(h,d.encode),t.commentLength=o.length,o.length>65535)throw me.Errors.COMMENT_TOO_LONG()},get name(){var h=d.decode(n);return i?h.substr(h.length-1).split("/").pop():h.split("/").pop()},get isDirectory(){return i},getCompressedData:function(){return y(!1,null)},getCompressedDataAsync:function(h){y(!0,h)},setData:function(h){a=me.toBuffer(h,me.decoder.encode),!i&&a.length?(t.size=a.length,t.method=me.Constants.DEFLATED,t.crc=me.crc32(h),t.changed=!0):t.method=me.Constants.STORED},getData:function(h){return t.changed?a:f(!1,null,h)},getDataAsync:function(h,S){t.changed?h(a):f(!0,h,S)},set attr(h){t.attr=h},get attr(){return t.attr},set header(h){t.loadFromBinary(h)},get header(){return t},packCentralHeader:function(){t.flags_efs=this.efs,t.extraLength=s.length;var h=t.centralHeaderToBinary(),S=me.Constants.CENHDR;return n.copy(h,S),S+=n.length,s.copy(h,S),S+=t.extraLength,o.copy(h,S),h},packLocalHeader:function(){let h=0;t.flags_efs=this.efs,t.extraLocalLength=c.length;let S=t.localHeaderToBinary(),k=Buffer.alloc(S.length+n.length+t.extraLocalLength);return S.copy(k,h),h+=S.length,n.copy(k,h),h+=n.length,c.copy(k,h),h+=c.length,k},toJSON:function(){let h=function(S){return"<"+(S&&S.length+" bytes buffer"||"null")+">"};return{entryName:this.entryName,name:this.name,comment:this.comment,isDirectory:this.isDirectory,header:t.toJSON(),compressedData:h(e),data:h(a)}},toString:function(){return JSON.stringify(this.toJSON(),null," ")}}}});var qS=G((QB,VS)=>{var BS=fd(),MF=md(),st=li();VS.exports=function(r,e){var t=[],n={},o=Buffer.alloc(0),i=new MF.MainHeader,a=!1,s=null;let c=new Set,l=e,{noSort:p,decoder:d}=l;r?f(l.readEntries):a=!0;function g(){let C=new Set;for(let v of Object.keys(n)){let P=v.split("/");if(P.pop(),!!P.length)for(let h=0;h<P.length;h++){let S=P.slice(0,h+1).join("/")+"/";C.add(S)}}for(let v of C)if(!(v in n)){let P=new BS(l);P.entryName=v,P.attr=16,P.temporary=!0,t.push(P),n[P.entryName]=P,c.add(P)}}function m(){if(a=!0,n={},i.diskEntries>(r.length-i.offset)/st.Constants.CENHDR)throw st.Errors.DISK_ENTRY_TOO_LARGE();t=new Array(i.diskEntries);for(var C=i.offset,v=0;v<t.length;v++){var P=C,h=new BS(l,r);h.header=r.slice(P,P+=st.Constants.CENHDR),h.entryName=r.slice(P,P+=h.header.fileNameLength),h.header.extraLength&&(h.extra=r.slice(P,P+=h.header.extraLength)),h.header.commentLength&&(h.comment=r.slice(P,P+h.header.commentLength)),C+=h.header.centralHeaderSize,t[v]=h,n[h.entryName]=h}c.clear(),g()}function f(C){var v=r.length-st.Constants.ENDHDR,P=Math.max(0,v-65535),h=P,S=r.length,k=-1,E=0;for((typeof l.trailingSpace=="boolean"?l.trailingSpace:!1)&&(P=0),v;v>=h;v--)if(r[v]===80){if(r.readUInt32LE(v)===st.Constants.ENDSIG){k=v,E=v,S=v+st.Constants.ENDHDR,h=v-st.Constants.END64HDR;continue}if(r.readUInt32LE(v)===st.Constants.END64SIG){h=P;continue}if(r.readUInt32LE(v)===st.Constants.ZIP64SIG){k=v,S=v+st.readBigUInt64LE(r,v+st.Constants.ZIP64SIZE)+st.Constants.ZIP64LEAD;break}}if(k==-1)throw st.Errors.INVALID_FORMAT();i.loadFromBinary(r.slice(k,S)),i.commentLength&&(o=r.slice(E+st.Constants.ENDHDR)),C&&m()}function y(){t.length>1&&!p&&t.sort((C,v)=>C.entryName.toLowerCase().localeCompare(v.entryName.toLowerCase()))}return{get entries(){return a||m(),t.filter(C=>!c.has(C))},get comment(){return d.decode(o)},set comment(C){o=st.toBuffer(C,d.encode),i.commentLength=o.length},getEntryCount:function(){return a?t.length:i.diskEntries},forEach:function(C){this.entries.forEach(C)},getEntry:function(C){return a||m(),n[C]||null},setEntry:function(C){a||m(),t.push(C),n[C.entryName]=C,i.totalEntries=t.length},deleteFile:function(C,v=!0){a||m();let P=n[C];this.getEntryChildren(P,v).map(S=>S.entryName).forEach(this.deleteEntry)},deleteEntry:function(C){a||m();let v=n[C],P=t.indexOf(v);P>=0&&(t.splice(P,1),delete n[C],i.totalEntries=t.length)},getEntryChildren:function(C,v=!0){if(a||m(),typeof C=="object")if(C.isDirectory&&v){let P=[],h=C.entryName;for(let S of t)S.entryName.startsWith(h)&&P.push(S);return P}else return[C];return[]},getChildCount:function(C){if(C&&C.isDirectory){let v=this.getEntryChildren(C);return v.includes(C)?v.length-1:v.length}return 0},compressToBuffer:function(){a||m(),y();let C=[],v=[],P=0,h=0;i.size=0,i.offset=0;let S=0;for(let w of this.entries){let Y=w.getCompressedData();w.header.offset=h;let M=w.packLocalHeader(),V=M.length+Y.length;h+=V,C.push(M),C.push(Y);let N=w.packCentralHeader();v.push(N),i.size+=N.length,P+=V+N.length,S++}P+=i.mainHeaderSize,i.offset=h,i.totalEntries=S,h=0;let k=Buffer.alloc(P);for(let w of C)w.copy(k,h),h+=w.length;for(let w of v)w.copy(k,h),h+=w.length;let E=i.toBinary();return o&&o.copy(E,st.Constants.ENDHDR),E.copy(k,h),r=k,a=!1,k},toAsyncBuffer:function(C,v,P,h){try{a||m(),y();let S=[],k=[],E=0,w=0,Y=0;i.size=0,i.offset=0;let M=function(V){if(V.length>0){let N=V.shift(),se=N.entryName+N.extra.toString();P&&P(se),N.getCompressedDataAsync(function(Z){h&&h(se),N.header.offset=w;let q=N.packLocalHeader(),X=q.length+Z.length;w+=X,S.push(q),S.push(Z);let ie=N.packCentralHeader();k.push(ie),i.size+=ie.length,E+=X+ie.length,Y++,M(V)})}else{E+=i.mainHeaderSize,i.offset=w,i.totalEntries=Y,w=0;let N=Buffer.alloc(E);S.forEach(function(Z){Z.copy(N,w),w+=Z.length}),k.forEach(function(Z){Z.copy(N,w),w+=Z.length});let se=i.toBinary();o&&o.copy(se,st.Constants.ENDHDR),se.copy(N,w),r=N,a=!1,C(N)}};M(Array.from(this.entries))}catch(S){v(S)}}}}});var zS=G((ZB,HS)=>{var De=li(),Ie=require("path"),xF=fd(),FF=qS(),mo=(...r)=>De.findLast(r,e=>typeof e=="boolean"),$S=(...r)=>De.findLast(r,e=>typeof e=="string"),IF=(...r)=>De.findLast(r,e=>typeof e=="function"),DF={noSort:!1,readEntries:!1,method:De.Constants.NONE,fs:null};HS.exports=function(r,e){let t=null,n=Object.assign(Object.create(null),DF);r&&typeof r=="object"&&(r instanceof Uint8Array||(Object.assign(n,r),r=n.input?n.input:void 0,n.input&&delete n.input),Buffer.isBuffer(r)&&(t=r,n.method=De.Constants.BUFFER,r=void 0)),Object.assign(n,e);let o=new De(n);if((typeof n.decoder!="object"||typeof n.decoder.encode!="function"||typeof n.decoder.decode!="function")&&(n.decoder=De.decoder),r&&typeof r=="string")if(o.fs.existsSync(r))n.method=De.Constants.FILE,n.filename=r,t=o.fs.readFileSync(r);else throw De.Errors.INVALID_FILENAME();let i=new FF(t,n),{canonical:a,sanitize:s,zipnamefix:c}=De;function l(m){if(m&&i){var f;if(typeof m=="string"&&(f=i.getEntry(Ie.posix.normalize(m))),typeof m=="object"&&typeof m.entryName<"u"&&typeof m.header<"u"&&(f=i.getEntry(m.entryName)),f)return f}return null}function p(m){let{join:f,normalize:y,sep:C}=Ie.posix;return f(Ie.isAbsolute(m)?"/":".",y(C+m.split("\\").join(C)+C))}function d(m){return m instanceof RegExp?function(f){return function(y){return f.test(y)}}(m):typeof m!="function"?()=>!0:m}let g=(m,f)=>{let y=f.slice(-1);return y=y===o.sep?o.sep:"",Ie.relative(m,f)+y};return{readFile:function(m,f){var y=l(m);return y&&y.getData(f)||null},childCount:function(m){let f=l(m);if(f)return i.getChildCount(f)},readFileAsync:function(m,f){var y=l(m);y?y.getDataAsync(f):f(null,"getEntry failed for:"+m)},readAsText:function(m,f){var y=l(m);if(y){var C=y.getData();if(C&&C.length)return C.toString(f||"utf8")}return""},readAsTextAsync:function(m,f,y){var C=l(m);C?C.getDataAsync(function(v,P){if(P){f(v,P);return}v&&v.length?f(v.toString(y||"utf8")):f("")}):f("")},deleteFile:function(m,f=!0){var y=l(m);y&&i.deleteFile(y.entryName,f)},deleteEntry:function(m){var f=l(m);f&&i.deleteEntry(f.entryName)},addZipComment:function(m){i.comment=m},getZipComment:function(){return i.comment||""},addZipEntryComment:function(m,f){var y=l(m);y&&(y.comment=f)},getZipEntryComment:function(m){var f=l(m);return f&&f.comment||""},updateFile:function(m,f){var y=l(m);y&&y.setData(f)},addLocalFile:function(m,f,y,C){if(o.fs.existsSync(m)){f=f?p(f):"";let v=Ie.win32.basename(Ie.win32.normalize(m));f+=y||v;let P=o.fs.statSync(m),h=P.isFile()?o.fs.readFileSync(m):Buffer.alloc(0);P.isDirectory()&&(f+=o.sep),this.addFile(f,h,C,P)}else throw De.Errors.FILE_NOT_FOUND(m)},addLocalFileAsync:function(m,f){m=typeof m=="object"?m:{localPath:m};let y=Ie.resolve(m.localPath),{comment:C}=m,{zipPath:v,zipName:P}=m,h=this;o.fs.stat(y,function(S,k){if(S)return f(S,!1);v=v?p(v):"";let E=Ie.win32.basename(Ie.win32.normalize(y));if(v+=P||E,k.isFile())o.fs.readFile(y,function(w,Y){return w?f(w,!1):(h.addFile(v,Y,C,k),setImmediate(f,void 0,!0))});else if(k.isDirectory())return v+=o.sep,h.addFile(v,Buffer.alloc(0),C,k),setImmediate(f,void 0,!0)})},addLocalFolder:function(m,f,y){if(y=d(y),f=f?p(f):"",m=Ie.normalize(m),o.fs.existsSync(m)){let C=o.findFiles(m),v=this;if(C.length)for(let P of C){let h=Ie.join(f,g(m,P));y(h)&&v.addLocalFile(P,Ie.dirname(h))}}else throw De.Errors.FILE_NOT_FOUND(m)},addLocalFolderAsync:function(m,f,y,C){C=d(C),y=y?p(y):"",m=Ie.normalize(m);var v=this;o.fs.open(m,"r",function(P){if(P&&P.code==="ENOENT")f(void 0,De.Errors.FILE_NOT_FOUND(m));else if(P)f(void 0,P);else{var h=o.findFiles(m),S=-1,k=function(){if(S+=1,S<h.length){var E=h[S],w=g(m,E).split("\\").join("/");w=w.normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/[^\x20-\x7E]/g,""),C(w)?o.fs.stat(E,function(Y,M){Y&&f(void 0,Y),M.isFile()?o.fs.readFile(E,function(V,N){V?f(void 0,V):(v.addFile(y+w,N,"",M),k())}):(v.addFile(y+w+"/",Buffer.alloc(0),"",M),k())}):process.nextTick(()=>{k()})}else f(!0,void 0)};k()}})},addLocalFolderAsync2:function(m,f){let y=this;m=typeof m=="object"?m:{localPath:m},localPath=Ie.resolve(p(m.localPath));let{zipPath:C,filter:v,namefix:P}=m;v instanceof RegExp?v=function(k){return function(E){return k.test(E)}}(v):typeof v!="function"&&(v=function(){return!0}),C=C?p(C):"",P=="latin1"&&(P=k=>k.normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/[^\x20-\x7E]/g,"")),typeof P!="function"&&(P=k=>k);let h=k=>Ie.join(C,P(g(localPath,k))),S=k=>Ie.win32.basename(Ie.win32.normalize(P(k)));o.fs.open(localPath,"r",function(k){k&&k.code==="ENOENT"?f(void 0,De.Errors.FILE_NOT_FOUND(localPath)):k?f(void 0,k):o.findFilesAsync(localPath,function(E,w){if(E)return f(E);w=w.filter(Y=>v(h(Y))),w.length||f(void 0,!1),setImmediate(w.reverse().reduce(function(Y,M){return function(V,N){if(V||N===!1)return setImmediate(Y,V,!1);y.addLocalFileAsync({localPath:M,zipPath:Ie.dirname(h(M)),zipName:S(M)},Y)}},f))})})},addLocalFolderPromise:function(m,f){return new Promise((y,C)=>{this.addLocalFolderAsync2(Object.assign({localPath:m},f),(v,P)=>{v&&C(v),P&&y(this)})})},addFile:function(m,f,y,C){m=c(m);let v=l(m),P=v!=null;P||(v=new xF(n),v.entryName=m),v.comment=y||"";let h=typeof C=="object"&&C instanceof o.fs.Stats;h&&(v.header.time=C.mtime);var S=v.isDirectory?16:0;let k=v.isDirectory?16384:32768;return h?k|=4095&C.mode:typeof C=="number"?k|=4095&C:k|=v.isDirectory?493:420,S=(S|k<<16)>>>0,v.attr=S,v.setData(f),P||i.setEntry(v),v},getEntries:function(m){return i.password=m,i?i.entries:[]},getEntry:function(m){return l(m)},getEntryCount:function(){return i.getEntryCount()},forEach:function(m){return i.forEach(m)},extractEntryTo:function(m,f,y,C,v,P){C=mo(!1,C),v=mo(!1,v),y=mo(!0,y),P=$S(v,P);var h=l(m);if(!h)throw De.Errors.NO_ENTRY();var S=a(h.entryName),k=s(f,P&&!h.isDirectory?P:y?S:Ie.basename(S));if(h.isDirectory){var E=i.getEntryChildren(h);return E.forEach(function(M){if(M.isDirectory)return;var V=M.getData();if(!V)throw De.Errors.CANT_EXTRACT_FILE();var N=a(M.entryName),se=s(f,y?N:Ie.basename(N));let Z=v?M.header.fileAttr:void 0;o.writeFileTo(se,V,C,Z)}),!0}var w=h.getData(i.password);if(!w)throw De.Errors.CANT_EXTRACT_FILE();if(o.fs.existsSync(k)&&!C)throw De.Errors.CANT_OVERRIDE();let Y=v?m.header.fileAttr:void 0;return o.writeFileTo(k,w,C,Y),!0},test:function(m){if(!i)return!1;for(var f in i.entries)try{if(f.isDirectory)continue;var y=i.entries[f].getData(m);if(!y)return!1}catch{return!1}return!0},extractAllTo:function(m,f,y,C){if(y=mo(!1,y),C=$S(y,C),f=mo(!1,f),!i)throw De.Errors.NO_ZIP();i.entries.forEach(function(v){var P=s(m,a(v.entryName));if(v.isDirectory){o.makeDir(P);return}var h=v.getData(C);if(!h)throw De.Errors.CANT_EXTRACT_FILE();let S=y?v.header.fileAttr:void 0;o.writeFileTo(P,h,f,S);try{o.fs.utimesSync(P,v.header.time,v.header.time)}catch{throw De.Errors.CANT_EXTRACT_FILE()}})},extractAllToAsync:function(m,f,y,C){if(C=IF(f,y,C),y=mo(!1,y),f=mo(!1,f),!C)return new Promise((k,E)=>{this.extractAllToAsync(m,f,y,function(w){w?E(w):k(this)})});if(!i){C(De.Errors.NO_ZIP());return}m=Ie.resolve(m);let v=k=>s(m,Ie.normalize(a(k.entryName))),P=(k,E)=>new Error(k+': "'+E+'"'),h=[],S=[];i.entries.forEach(k=>{k.isDirectory?h.push(k):S.push(k)});for(let k of h){let E=v(k),w=y?k.header.fileAttr:void 0;try{o.makeDir(E),w&&o.fs.chmodSync(E,w),o.fs.utimesSync(E,k.header.time,k.header.time)}catch{C(P("Unable to create folder",E))}}S.reverse().reduce(function(k,E){return function(w){if(w)k(w);else{let Y=Ie.normalize(a(E.entryName)),M=s(m,Y);E.getDataAsync(function(V,N){if(N)k(N);else if(!V)k(De.Errors.CANT_EXTRACT_FILE());else{let se=y?E.header.fileAttr:void 0;o.writeFileToAsync(M,V,f,se,function(Z){Z||k(P("Unable to write file",M)),o.fs.utimes(M,E.header.time,E.header.time,function(q){q?k(P("Unable to set times",M)):k()})})}})}}},C)()},writeZip:function(m,f){if(arguments.length===1&&typeof m=="function"&&(f=m,m=""),!m&&n.filename&&(m=n.filename),!!m){var y=i.compressToBuffer();if(y){var C=o.writeFileTo(m,y,!0);typeof f=="function"&&f(C?null:new Error("failed"),"")}}},writeZipPromise:function(m,f){let{overwrite:y,perm:C}=Object.assign({overwrite:!0},f);return new Promise((v,P)=>{!m&&n.filename&&(m=n.filename),m||P("ADM-ZIP: ZIP File Name Missing"),this.toBufferPromise().then(h=>{let S=k=>k?v(k):P("ADM-ZIP: Wasn't able to write zip file");o.writeFileToAsync(m,h,y,C,S)},P)})},toBufferPromise:function(){return new Promise((m,f)=>{i.toAsyncBuffer(m,f)})},toBuffer:function(m,f,y,C){return typeof m=="function"?(i.toAsyncBuffer(m,f,y,C),null):i.compressToBuffer()}}}});var Cr,Ld=he(()=>{Cr=class extends Error{constructor(e,t){super(`${e} at position ${t}`),this.position=t}}});function Vv(r){return/^[0-9A-Fa-f]$/.test(r)}function _n(r){return r>="0"&&r<="9"}function qv(r){return r>=" "}function ka(r){return`,:[]/{}()
9
+ +`.includes(r)}function Nd(r){return r>="a"&&r<="z"||r>="A"&&r<="Z"||r==="_"||r==="$"}function Wd(r){return r>="a"&&r<="z"||r>="A"&&r<="Z"||r==="_"||r==="$"||r>="0"&&r<="9"}function Bd(r){return`,[]/{}
10
+ +`.includes(r)}function Vd(r){return wa(r)||tI.test(r)}function $v(r){return r===`
11
+ `||r==="\r"||r===" "||r==="\b"||r==="\f"}function On(r,e){let t=r.charCodeAt(e);return t===32||t===10||t===9||t===13}function Hv(r,e){let t=r.charCodeAt(e);return t===32||t===9||t===13}function zv(r,e){let t=r.charCodeAt(e);return t===160||t>=8192&&t<=8202||t===8239||t===8287||t===12288}function wa(r){return qd(r)||Oc(r)}function qd(r){return r==='"'||r==="\u201C"||r==="\u201D"}function $d(r){return r==='"'}function Oc(r){return r==="'"||r==="\u2018"||r==="\u2019"||r==="`"||r==="\xB4"}function Hd(r){return r==="'"}function Ci(r,e){let t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,n=r.lastIndexOf(e);return n!==-1?r.substring(0,n)+(t?"":r.substring(n+1)):r}function ir(r,e){let t=r.length;if(!On(r,t-1))return r+e;for(;On(r,t-1);)t--;return r.substring(0,t)+e+r.substring(t)}function Gv(r,e,t){return r.substring(0,e)+r.substring(e+t)}function Kv(r){return/[,\n][ \t\r]*$/.test(r)}var Ud,jd,tI,Jv=he(()=>{Ud=/^(http|https|ftp|mailto|file|data|irc):\/\/$/,jd=/^[A-Za-z0-9-._~:/?#@!$&'()*+;=]$/;tI=/^[[{\w-]$/});function Yv(r){let e=0,t="";l(["```","[```","{```"]),i()||q(),l(["```","```]","```}"]);let o=d(",");for(o&&a(),Vd(r[e])&&Kv(t)?(o||(t=ir(t,",")),v()):o&&(t=Ci(t,","));r[e]==="}"||r[e]==="]";)e++,a();if(e>=r.length)return t;Z();function i(){a();let I=y()||C()||P()||S()||k()||w(!1)||Y();return a(),I}function a(){let I=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,j=e,ce=s(I);do ce=c(),ce&&(ce=s(I));while(ce);return e>j}function s(I){let j=I?On:Hv,ce="";for(;;)if(j(r,e))ce+=r[e],e++;else if(zv(r,e))ce+=" ",e++;else break;return ce.length>0?(t+=ce,!0):!1}function c(){if(r[e]==="/"&&r[e+1]==="*"){for(;e<r.length&&!oI(r,e);)e++;return e+=2,!0}if(r[e]==="/"&&r[e+1]==="/"){for(;e<r.length&&r[e]!==`
12
+ `;)e++;return!0}return!1}function l(I){if(p(I)){if(Nd(r[e]))for(;e<r.length&&Wd(r[e]);)e++;return a(),!0}return!1}function p(I){s(!0);for(let j of I){let ce=e+j.length;if(r.slice(e,ce)===j)return e=ce,!0}return!1}function d(I){return r[e]===I?(t+=r[e],e++,!0):!1}function g(I){return r[e]===I?(e++,!0):!1}function m(){return g("\\")}function f(){return a(),r[e]==="."&&r[e+1]==="."&&r[e+2]==="."?(e+=3,a(),g(","),!0):!1}function y(){if(r[e]==="{"){t+="{",e++,a(),g(",")&&a();let I=!0;for(;e<r.length&&r[e]!=="}";){let j;if(I?(j=!0,I=!1):(j=d(","),j||(t=ir(t,",")),a()),f(),!(P()||w(!0))){r[e]==="}"||r[e]==="{"||r[e]==="]"||r[e]==="["||r[e]===void 0?t=Ci(t,","):X();break}a();let ss=d(":"),zn=e>=r.length;ss||(Vd(r[e])||zn?t=ir(t,":"):ie()),i()||(ss||zn?t+="null":ie())}return r[e]==="}"?(t+="}",e++):t=ir(t,"}"),!0}return!1}function C(){if(r[e]==="["){t+="[",e++,a(),g(",")&&a();let I=!0;for(;e<r.length&&r[e]!=="]";)if(I?I=!1:d(",")||(t=ir(t,",")),f(),!i()){t=Ci(t,",");break}return r[e]==="]"?(t+="]",e++):t=ir(t,"]"),!0}return!1}function v(){let I=!0,j=!0;for(;j;)I?I=!1:d(",")||(t=ir(t,",")),j=i();j||(t=Ci(t,",")),t=`[
13
13
  ${t}
14
- ]`}function P(){let M=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,W=arguments.length>1&&arguments[1]!==void 0?arguments[1]:-1,ae=r[e]==="\\";if(ae&&(e++,ae=!0),Xi(r[e])){let La=tu(r[e])?tu:ru(r[e])?ru:tc(r[e])?tc:eu,Ln=e,fi=t.length,xe='"';for(e++;;){if(e>=r.length){let lt=x(e-1);return!M&&Yi(r.charAt(lt))?(e=Ln,t=t.substring(0,fi),P(!0)):(xe=er(xe,'"'),t+=xe,!0)}if(e===W)return xe=er(xe,'"'),t+=xe,!0;if(La(r[e])){let lt=e,Kl=xe.length;if(xe+='"',e++,t+=xe,a(!1),M||e>=r.length||Yi(r[e])||Xi(r[e])||En(r[e]))return u(),!0;let tn=x(lt-1),lh=r.charAt(tn);if(lh===",")return e=Ln,t=t.substring(0,fi),P(!1,tn);if(Yi(lh))return e=Ln,t=t.substring(0,fi),P(!0);t=t.substring(0,fi),e=lt+1,xe=`${xe.substring(0,Kl)}\\${xe.substring(Kl)}`}else if(M&&Qd(r[e])){if(r[e-1]===":"&&Yd.test(r.substring(Ln+1,e+2)))for(;e<r.length&&Xd.test(r[e]);)xe+=r[e],e++;return xe=er(xe,'"'),t+=xe,u(),!0}else if(r[e]==="\\"){let lt=r.charAt(e+1);if(Kx[lt]!==void 0)xe+=r.slice(e,e+2),e+=2;else if(lt==="u"){let tn=2;for(;tn<6&&bS(r[e+tn]);)tn++;tn===6?(xe+=r.slice(e,e+6),e+=6):e+tn>=r.length?e=r.length:re()}else xe+=lt,e+=2}else{let lt=r.charAt(e);lt==='"'&&r[e-1]!=="\\"?(xe+=`\\${lt}`,e++):xS(lt)?(xe+=zx[lt],e++):(TS(lt)||ie(lt),xe+=lt,e++)}ae&&d()}}return!1}function u(){let M=!1;for(a();r[e]==="+";){M=!0,e++,a(),t=Yo(t,'"',!0);let W=t.length;P()?t=DS(t,W,1):t=er(t,'"')}return M}function S(){let M=e;if(r[e]==="-"){if(e++,j())return L(M),!0;if(!En(r[e]))return e=M,!1}for(;En(r[e]);)e++;if(r[e]==="."){if(e++,j())return L(M),!0;if(!En(r[e]))return e=M,!1;for(;En(r[e]);)e++}if(r[e]==="e"||r[e]==="E"){if(e++,(r[e]==="-"||r[e]==="+")&&e++,j())return L(M),!0;if(!En(r[e]))return e=M,!1;for(;En(r[e]);)e++}if(!j())return e=M,!1;if(e>M){let W=r.slice(M,e),ae=/^0\d/.test(W);return t+=ae?`"${W}"`:W,!0}return!1}function k(){return R("true","true")||R("false","false")||R("null","null")||R("True","true")||R("False","false")||R("None","null")}function R(M,W){return r.slice(e,e+M.length)===M?(t+=W,e+=M.length,!0):!1}function w(M){let W=e;if(Gd(r[e])){for(;e<r.length&&Jd(r[e]);)e++;let ae=e;for(;Rn(r,ae);)ae++;if(r[ae]==="(")return e=ae+1,i(),r[e]===")"&&(e++,r[e]===";"&&e++),!0}for(;e<r.length&&!Qd(r[e])&&!Xi(r[e])&&(!M||r[e]!==":");)e++;if(r[e-1]===":"&&Yd.test(r.substring(W,e+2)))for(;e<r.length&&Xd.test(r[e]);)e++;if(e>W){for(;Rn(r,e-1)&&e>0;)e--;let ae=r.slice(W,e);return t+=ae==="undefined"?"null":JSON.stringify(ae),r[e]==='"'&&e++,!0}}function H(){if(r[e]==="/"){let M=e;for(e++;e<r.length&&(r[e]!=="/"||r[e-1]==="\\");)e++;return e++,t+=`"${r.substring(M,e)}"`,!0}}function x(M){let W=M;for(;W>0&&Rn(r,W);)W--;return W}function j(){return e>=r.length||Yi(r[e])||Rn(r,e)}function L(M){t+=`${r.slice(M,e)}0`}function ie(M){throw new mr(`Invalid character ${JSON.stringify(M)}`,e)}function ee(){throw new mr(`Unexpected character ${JSON.stringify(r[e])}`,e)}function B(){throw new mr("Unexpected end of json string",r.length)}function K(){throw new mr("Object key expected",e)}function oe(){throw new mr("Colon expected",e)}function re(){let M=r.slice(e,e+6);throw new mr(`Invalid unicode character "${M}"`,e)}}function Gx(r,e){return r[e]==="*"&&r[e+1]==="/"}var zx,Kx,_S=pe(()=>{Kd();AS();zx={"\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r"," ":"\\t"},Kx={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:`
15
- `,r:"\r",t:" "}});var LS={};Gl(LS,{JSONRepairError:()=>mr,jsonrepair:()=>OS});var NS=pe(()=>{_S();Kd()});function rc(r,e){let t=Bt.posix.dirname(Pe(e));return Bt.join(te(r,t),Y)}function nc(r){return Bt.posix.basename(Pe(r))}function ou(r){for(let e=0;e<r.length;e++){let t=r.charCodeAt(e);if(t!==32&&t!==9&&t!==10&&t!==13)return!1}return!0}function zS(r){if(ou(r))return!0;try{let e=JSON.parse(r);return V(e)&&Object.keys(e).length===0}catch{return!1}}async function iu(r){let e;try{e=await tr.promises.stat(r)}catch(a){if(F(a))return!1;throw a}if(!e.isDirectory())return!1;let t=Bt.join(Bt.dirname(r),Y),n;try{n=await tr.promises.readFile(t,"utf-8")}catch(a){if(F(a))return!1;throw a}if(zS(n))return!1;let o;try{o=JSON.parse(n)}catch{return!1}if(!V(o))return!1;let i=o[Bt.basename(r)];return V(i)}async function KS(r){if(!await iu(r))return!0;let e=Bt.join(r,Y);try{let t=await tr.promises.readFile(e,"utf-8");return zS(t)}catch(t){if(F(t))return!0;throw t}}async function oc(r){let e=Buffer.alloc(100),t=await tr.promises.open(r,"r"),n;try{let{bytesRead:a}=await t.read(e,0,e.length,0);n=e.toString("utf-8",0,a)}finally{await t.close()}let o=qS.exec(n);if(o)return String(JSON.parse(o[1]));let i=await tr.promises.readFile(r,"utf-8");return au(i)}function au(r){let e=r.slice(0,100),t=qS.exec(e);if(t)return String(JSON.parse(t[1]));let n=JSON.parse(r);return n.version==null?void 0:String(n.version)}async function Zi(r,e,t){let n=rc(r,e);return await ZS(n),GS(n,t)}async function zr(r,e){let t=te(r,e);await ZS(t);try{let n=await tr.promises.readFile(t,"utf-8");if(ou(n))return{dotMeta:{},exists:!0,readable:!0};try{return{dotMeta:Qi(t,n),exists:!0,readable:!0}}catch(o){try{let i=await JS(n),a=Qi(t,i);return to.debug(`read repaired damaged .meta file without writing: ${t}`,o),{dotMeta:a,exists:!0,readable:!1,damaged:!0,repairable:!0}}catch(i){return to.debug(`failed to parse damaged .meta file without writing: ${t}`,i),{dotMeta:{},exists:!0,readable:!1,damaged:!0,repairable:!1}}}}catch(n){if(F(n))return to.debug(`.meta file does not exist: ${t}`),{dotMeta:{},exists:!1,readable:!0};throw n}}async function ea(r,e){let t=rc(r,e);await cc(t,!0,n=>{delete n[nc(e)]})}async function ic(r,e,t){let n=te(r,e),i=(Hr.get(n)??Promise.resolve()).catch(()=>{}).then(()=>su(n,t));Hr.set(n,i);try{await i}finally{Hr.get(n)===i&&Hr.delete(n)}}async function GS(r,e={}){let t=e.strict??!1,n=e.silentMissing??!0;try{let o=await tr.promises.readFile(r,"utf-8");return ou(o)?{}:await Zx(r,o)}catch(o){if(F(o))return n||to.debug(`read missing .meta as empty: ${r}`),{};if(t)throw new Xo(r,o);return to.warn(`failed to read .meta file: ${r}`,o),{}}}async function Zx(r,e){try{return Qi(r,e)}catch(t){let n=await JS(e),o=Qi(r,n);return await su(r,o),to.debug(`repaired invalid .meta file: ${r}`,t),o}}async function JS(r){nu||(nu=Promise.resolve().then(()=>(NS(),LS)));let e=await nu;for(let t of YS(r))try{let n=e.jsonrepair(t);return Qi(".meta",n),n}catch(n){to.debug("failed to repair .meta git conflict candidate",n)}return e.jsonrepair(r)}function YS(r){let e=eF(r);if(!e)return[];let t=[tF(e.left,e.right),e.right,e.left],n=[];for(let o of t){let i=r.slice(0,e.start)+o+r.slice(e.end),a=YS(i);a.length===0?n.push(i):n.push(...a)}return Array.from(new Set(n))}function eF(r){let e=r.indexOf("<<<<<<<");if(e<0)return;let t=r.indexOf(`
14
+ ]`}function P(){let I=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,j=arguments.length>1&&arguments[1]!==void 0?arguments[1]:-1,ce=r[e]==="\\";if(ce&&(e++,ce=!0),wa(r[e])){let ss=$d(r[e])?$d:Hd(r[e])?Hd:Oc(r[e])?Oc:qd,zn=e,Bi=t.length,Ae='"';for(e++;;){if(e>=r.length){let dt=M(e-1);return!I&&ka(r.charAt(dt))?(e=zn,t=t.substring(0,Bi),P(!0)):(Ae=ir(Ae,'"'),t+=Ae,!0)}if(e===j)return Ae=ir(Ae,'"'),t+=Ae,!0;if(ss(r[e])){let dt=e,Ep=Ae.length;if(Ae+='"',e++,t+=Ae,a(!1),I||e>=r.length||ka(r[e])||wa(r[e])||_n(r[e]))return h(),!0;let sn=M(dt-1),af=r.charAt(sn);if(af===",")return e=zn,t=t.substring(0,Bi),P(!1,sn);if(ka(af))return e=zn,t=t.substring(0,Bi),P(!0);t=t.substring(0,Bi),e=dt+1,Ae=`${Ae.substring(0,Ep)}\\${Ae.substring(Ep)}`}else if(I&&Bd(r[e])){if(r[e-1]===":"&&Ud.test(r.substring(zn+1,e+2)))for(;e<r.length&&jd.test(r[e]);)Ae+=r[e],e++;return Ae=ir(Ae,'"'),t+=Ae,h(),!0}else if(r[e]==="\\"){let dt=r.charAt(e+1);if(nI[dt]!==void 0)Ae+=r.slice(e,e+2),e+=2;else if(dt==="u"){let sn=2;for(;sn<6&&Vv(r[e+sn]);)sn++;sn===6?(Ae+=r.slice(e,e+6),e+=6):e+sn>=r.length?e=r.length:ne()}else Ae+=dt,e+=2}else{let dt=r.charAt(e);dt==='"'&&r[e-1]!=="\\"?(Ae+=`\\${dt}`,e++):$v(dt)?(Ae+=rI[dt],e++):(qv(dt)||se(dt),Ae+=dt,e++)}ce&&m()}}return!1}function h(){let I=!1;for(a();r[e]==="+";){I=!0,e++,a(),t=Ci(t,'"',!0);let j=t.length;P()?t=Gv(t,j,1):t=ir(t,'"')}return I}function S(){let I=e;if(r[e]==="-"){if(e++,V())return N(I),!0;if(!_n(r[e]))return e=I,!1}for(;_n(r[e]);)e++;if(r[e]==="."){if(e++,V())return N(I),!0;if(!_n(r[e]))return e=I,!1;for(;_n(r[e]);)e++}if(r[e]==="e"||r[e]==="E"){if(e++,(r[e]==="-"||r[e]==="+")&&e++,V())return N(I),!0;if(!_n(r[e]))return e=I,!1;for(;_n(r[e]);)e++}if(!V())return e=I,!1;if(e>I){let j=r.slice(I,e),ce=/^0\d/.test(j);return t+=ce?`"${j}"`:j,!0}return!1}function k(){return E("true","true")||E("false","false")||E("null","null")||E("True","true")||E("False","false")||E("None","null")}function E(I,j){return r.slice(e,e+I.length)===I?(t+=j,e+=I.length,!0):!1}function w(I){let j=e;if(Nd(r[e])){for(;e<r.length&&Wd(r[e]);)e++;let ce=e;for(;On(r,ce);)ce++;if(r[ce]==="(")return e=ce+1,i(),r[e]===")"&&(e++,r[e]===";"&&e++),!0}for(;e<r.length&&!Bd(r[e])&&!wa(r[e])&&(!I||r[e]!==":");)e++;if(r[e-1]===":"&&Ud.test(r.substring(j,e+2)))for(;e<r.length&&jd.test(r[e]);)e++;if(e>j){for(;On(r,e-1)&&e>0;)e--;let ce=r.slice(j,e);return t+=ce==="undefined"?"null":JSON.stringify(ce),r[e]==='"'&&e++,!0}}function Y(){if(r[e]==="/"){let I=e;for(e++;e<r.length&&(r[e]!=="/"||r[e-1]==="\\");)e++;return e++,t+=`"${r.substring(I,e)}"`,!0}}function M(I){let j=I;for(;j>0&&On(r,j);)j--;return j}function V(){return e>=r.length||ka(r[e])||On(r,e)}function N(I){t+=`${r.slice(I,e)}0`}function se(I){throw new Cr(`Invalid character ${JSON.stringify(I)}`,e)}function Z(){throw new Cr(`Unexpected character ${JSON.stringify(r[e])}`,e)}function q(){throw new Cr("Unexpected end of json string",r.length)}function X(){throw new Cr("Object key expected",e)}function ie(){throw new Cr("Colon expected",e)}function ne(){let I=r.slice(e,e+6);throw new Cr(`Invalid unicode character "${I}"`,e)}}function oI(r,e){return r[e]==="*"&&r[e+1]==="/"}var rI,nI,Xv=he(()=>{Ld();Jv();rI={"\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r"," ":"\\t"},nI={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:`
15
+ `,r:"\r",t:" "}});var Qv={};bp(Qv,{JSONRepairError:()=>Cr,jsonrepair:()=>Yv});var Zv=he(()=>{Xv();Ld()});function _c(r,e){let t=Kt.posix.dirname(ae(e));return Kt.join(re(r,t),J)}function Lc(r){return Kt.posix.basename(ae(r))}function Gd(r){for(let e=0;e<r.length;e++){let t=r.charCodeAt(e);if(t!==32&&t!==9&&t!==10&&t!==13)return!1}return!0}function ck(r){if(Gd(r))return!0;try{let e=JSON.parse(r);return z(e)&&Object.keys(e).length===0}catch{return!1}}async function Kd(r){let e;try{e=await ar.promises.stat(r)}catch(a){if(x(a))return!1;throw a}if(!e.isDirectory())return!1;let t=Kt.join(Kt.dirname(r),J),n;try{n=await ar.promises.readFile(t,"utf-8")}catch(a){if(x(a))return!1;throw a}if(ck(n))return!1;let o;try{o=JSON.parse(n)}catch{return!1}if(!z(o))return!1;let i=o[Kt.basename(r)];return z(i)}async function lk(r){if(!await Kd(r))return!0;let e=Kt.join(r,J);try{let t=await ar.promises.readFile(e,"utf-8");return ck(t)}catch(t){if(x(t))return!0;throw t}}async function Nc(r){let e=Buffer.alloc(100),t=await ar.promises.open(r,"r"),n;try{let{bytesRead:a}=await t.read(e,0,e.length,0);n=e.toString("utf-8",0,a)}finally{await t.close()}let o=ik.exec(n);if(o)return String(JSON.parse(o[1]));let i=await ar.promises.readFile(r,"utf-8");return Jd(i)}function Jd(r){let e=r.slice(0,100),t=ik.exec(e);if(t)return String(JSON.parse(t[1]));let n=JSON.parse(r);return n.version==null?void 0:String(n.version)}async function Ra(r,e,t){let n=_c(r,e);return await fk(n),pk(n,t)}async function vr(r,e){let t=re(r,e);await fk(t);try{let n=await ar.promises.readFile(t,"utf-8");if(Gd(n))return{dotMeta:{},exists:!0,readable:!0};try{return{dotMeta:Pa(t,n),exists:!0,readable:!0}}catch(o){try{let i=await uk(n),a=Pa(t,i);return fo.debug(`read repaired damaged .meta file without writing: ${t}`,o),{dotMeta:a,exists:!0,readable:!1,damaged:!0,repairable:!0}}catch(i){return fo.debug(`failed to parse damaged .meta file without writing: ${t}`,i),{dotMeta:{},exists:!0,readable:!1,damaged:!0,repairable:!1}}}}catch(n){if(x(n))return fo.debug(`.meta file does not exist: ${t}`),{dotMeta:{},exists:!1,readable:!0};throw n}}async function Ea(r,e){let t=_c(r,e);await Bc(t,!0,n=>{delete n[Lc(e)]})}async function Wc(r,e,t){let n=re(r,e),i=(Yr.get(n)??Promise.resolve()).catch(()=>{}).then(()=>Yd(n,t));Yr.set(n,i);try{await i}finally{Yr.get(n)===i&&Yr.delete(n)}}async function pk(r,e={}){let t=e.strict??!1,n=e.silentMissing??!0;try{let o=await ar.promises.readFile(r,"utf-8");return Gd(o)?{}:await lI(r,o)}catch(o){if(x(o))return n||fo.debug(`read missing .meta as empty: ${r}`),{};if(t)throw new Si(r,o);return fo.warn(`failed to read .meta file: ${r}`,o),{}}}async function lI(r,e){try{return Pa(r,e)}catch(t){let n=await uk(e),o=Pa(r,n);return await Yd(r,o),fo.debug(`repaired invalid .meta file: ${r}`,t),o}}async function uk(r){zd||(zd=Promise.resolve().then(()=>(Zv(),Qv)));let e=await zd;for(let t of dk(r))try{let n=e.jsonrepair(t);return Pa(".meta",n),n}catch(n){fo.debug("failed to repair .meta git conflict candidate",n)}return e.jsonrepair(r)}function dk(r){let e=pI(r);if(!e)return[];let t=[uI(e.left,e.right),e.right,e.left],n=[];for(let o of t){let i=r.slice(0,e.start)+o+r.slice(e.end),a=dk(i);a.length===0?n.push(i):n.push(...a)}return Array.from(new Set(n))}function pI(r){let e=r.indexOf("<<<<<<<");if(e<0)return;let t=r.indexOf(`
16
16
  `,e),n=r.indexOf(`
17
17
  =======`,t),o=r.indexOf(`
18
18
  >>>>>>>`,n);if(t<0||n<0||o<0)return;let i=r.indexOf(`
19
- `,o+1),a=i<0?r.length:i+1;return{start:e,end:a,left:r.slice(t+1,n),right:r.slice(n+8,o)}}function tF(r,e){let t=new Map;for(let o of[...r.split(/\r?\n/),...e.split(/\r?\n/)]){let i=rF(o);i&&t.set(i,o)}if(t.size===0)return e;let n=Array.from(t.values());return n.map((o,i)=>i>=n.length-1||/,\s*$/.test(o)?o:o+",").join(`
20
- `)}function rF(r){return/^\s*"([^"]+)"\s*:/.exec(r)?.[1]}function Qi(r,e){let t=JSON.parse(e);if(V(t))return t;throw new Xo(r,new Error(".meta root must be an object"))}async function Ie(r,e,t){return(await Zi(r,e,t))[nc(e)]}async function ta(r,e,t){let n=rc(r,e.path);await cc(n,!1,o=>{o[nc(e.path)]=Vt(e,t)})}async function XS(r,e,t){let n=new Map;for(let o of e){let i=rc(r,o.path),a=n.get(i);a?a.push(o):n.set(i,[o])}await Promise.all([...n].map(async([o,i])=>{await cc(o,!1,a=>{for(let s of i)a[nc(s.path)]=Vt(s,t)})}))}async function ac(r,e,t){let n=Bt.join(te(r,e),Y);await cc(n,!1,o=>{for(let[i,a]of Object.entries(t))a?o[i]=a:delete o[i]})}async function ro(r){return(await Promise.all(r.map(async t=>(await tr.promises.stat(t)).isDirectory()?1+await QS(t):1))).reduce((t,n)=>t+n,0)}async function QS(r){let e=await tr.promises.readdir(r,{withFileTypes:!0});return(await Promise.all(e.filter(n=>n.name!==Y).map(async n=>n.isDirectory()?1+await QS(Bt.join(r,n.name)):1))).reduce((n,o)=>n+o,0)}async function sc(r){let e=(0,US.createHash)("sha256");return await(0,BS.pipeline)(tr.createReadStream(r,{highWaterMark:64*1024}),new jS.Writable({write(t,n,o){e.update(t),o()}})),e.digest("hex")}function Vt(r,e){let t={};if(hr(t,"id",r.id),hr(t,"revision",r.revision),e?.writeContentInfo){if(r.size!==void 0){if(!Number.isSafeInteger(r.size)||r.size<0)throw new Error(`invalid file content size: ${r.path}`);t.size=r.size}if(r.hash!==void 0){let n=r.hash.trim().toLowerCase();if(!Xx.test(n))throw new Error(`invalid file content hash: ${r.path}`);t.hash=n}}return hr(t,"icon",r.icon),hr(t,"desc",r.desc),r.isFolder&&r.type&&r.type!==Yx&&(t.type=r.type),hr(t,"order",r.order),hr(t,"creator",r.creator),hr(t,"createTime",r.createTime),hr(t,"modifier",r.modifier),hr(t,"modifyTime",r.modifyTime),r.hidden&&(t.hidden=!0),hr(t,"subFileType",r.subFileType),hr(t,"labels",r.labels),WS(t,"option",r.option),WS(t,"customOption",r.customOption),ev(t)}function no(r,e,t=!0){for(let n of $S)if(!(t&&Qx.has(n))&&!nF(r,e,n))return!1;return!0}function nF(r,e,t){let n=r[t],o=e[t];return(n===""||n===!1)&&(n=void 0),(o===""||o===!1)&&(o=void 0),n===o?!0:t==="option"||t==="customOption"?(0,VS.isDeepStrictEqual)(n,o)?!0:(n&&Object.keys(n).length===0&&(n=void 0),o&&Object.keys(o).length===0&&(o=void 0),n===o):!1}function oo(r){if(!r)return{};let e={...r};for(let t of HS)delete e[t];return e}async function cc(r,e,t){let o=(Hr.get(r)??Promise.resolve()).catch(()=>{}).then(async()=>{let i=await GS(r,{strict:e});t(i),await su(r,i)});Hr.set(r,o);try{await o}finally{Hr.get(r)===o&&Hr.delete(r)}}async function ZS(r){let e=Hr.get(r);e&&await e.catch(()=>{})}async function su(r,e){await cn(r,JSON.stringify(oF(e),null,Jx))}function oF(r){let e={};for(let t of Object.keys(r))e[t]=ev(r[t]);return e}function ev(r){let e={};for(let t of $S)Object.prototype.hasOwnProperty.call(r,t)&&(e[t]=r[t]);return e}function hr(r,e,t){t==null||t===""||typeof t=="number"&&t===0||(r[e]=t)}function WS(r,e,t){!t||Object.keys(t).length===0||(r[e]=t)}var tr,Bt,US,jS,BS,VS,to,Y,Jx,Yx,qS,Xx,$S,HS,Qx,Hr,nu,Xo,Je=pe(()=>{tr=b(require("fs")),Bt=b(require("path")),US=require("node:crypto"),jS=require("node:stream"),BS=require("node:stream/promises"),VS=require("node:util");$();G();D();To();ne();vt();to=T("common.meta"),Y=".meta",Jx=" ",Yx="fold",qS=/"version"\s*:\s*("(?:\\.|[^"\\])*")/,Xx=/^[0-9a-f]{64}$/,$S=["id","revision","size","hash","icon","desc","type","order","creator","createTime","modifier","modifyTime","hidden","subFileType","labels","option","customOption"],HS=["id","revision","size","hash","type","creator","createTime","modifier","modifyTime","subFileType"],Qx=new Set(HS),Hr=new Map,Xo=class extends Error{constructor(t,n){super(`invalid .meta file: ${t}`);this.filePath=t;this.cause=n;this.name="DotMetaParseError"}}});function cu(r,e){return tv.join(te(r,e),ra)}async function pc(r,e){await lc.promises.mkdir(te(r,e),{recursive:!0}),await lc.promises.writeFile(cu(r,e),"","utf8")}async function dc(r,e){await lc.promises.rm(cu(r,e),{force:!0})}function uc(r,e){return Z(cu(r,e))}var lc,tv,ra,Qo=pe(()=>{lc=b(require("fs")),tv=b(require("path"));$();ra=".succapp-clone-in-progress"});var bn,mc,rv,Mt,Zo=pe(()=>{bn=b(require("fs")),mc=b(require("path"));$();Je();D();G();Qo();Qo();rv=T("sync.mirror-store"),Mt=class{constructor(e){this.root=e}toLocalPath(e){return te(this.root,e)}readMeta(e){return Ie(this.root,e)}readMetaStrict(e){return Ie(this.root,e,{strict:!0})}async writeMeta(e,t){t?.throwIfAborted(),await ta(this.root,e,{writeContentInfo:!0})}async writeMetas(e,t){t?.throwIfAborted(),await XS(this.root,e,{writeContentInfo:!0})}async patchMeta(e,t,n){n?.throwIfAborted(),await ac(this.root,e,t)}async listDirectChildren(e){try{return(await bn.promises.readdir(this.toLocalPath(e),{withFileTypes:!0})).filter(n=>n.name!==Y&&!n.name.startsWith(".")).map(n=>({path:this.joinRemotePath(e,n.name),isFolder:n.isDirectory()}))}catch(t){if(F(t))return rv.debug(`mirror directory does not exist: ${e}`),[];throw t}}async listDirectMetaChildren(e){let t=await Zi(this.root,this.joinRemotePath(e,Y));return Object.keys(t).map(n=>{let o=t[n];return{path:this.joinRemotePath(e,n),isFolder:!!o.type&&o.type!=="file",meta:o}})}async countMetaResources(e){if(!e)return ro([this.root]);let t=await Promise.all(e.map(async i=>{let a=this.toLocalPath(i);return await Z(a)?a:void 0})),n=t.filter(i=>i!==void 0);return t.length-n.length+await ro(n)}async exists(e){return Z(this.toLocalPath(e))}markCloneInProgress(e){return pc(this.root,e)}clearCloneInProgress(e){return dc(this.root,e)}isCloneInProgress(e){return uc(this.root,e)}async isFolder(e){try{return(await bn.promises.stat(this.toLocalPath(e))).isDirectory()}catch(t){if(F(t))return rv.debug(`mirror path is not a folder: ${e}`),!1;throw t}}async removePath(e,t){if(t?.throwIfAborted(),t){await this.removeLocalResource(this.toLocalPath(e),e,t);return}await bn.promises.rm(this.toLocalPath(e),{force:!0,recursive:!0})}async removeLocalResource(e,t,n){let o;try{o=await bn.promises.stat(e)}catch(a){if(F(a)){n?.step(1);return}throw a}if(!o.isDirectory()){await bn.promises.rm(e,{force:!0}),n?.step(1);return}let i=await bn.promises.readdir(e,{withFileTypes:!0});await Promise.all(i.filter(a=>a.name!==Y).map(a=>(n?.throwIfAborted(),this.removeLocalResource(mc.join(e,a.name),mc.posix.join(t,a.name),n)))),await bn.promises.rm(e,{force:!0,recursive:!0}),n?.step(1)}removeMeta(e){return ea(this.root,e)}async listProjectPaths(){return(await this.listDirectChildren("/")).filter(t=>t.isFolder).map(t=>t.path).sort((t,n)=>t.localeCompare(n))}joinRemotePath(e,t){return e==="/"?"/"+t:e+"/"+t}}});var me,ye,wt,iF,pu,aF,rr,na=pe(()=>{me=b(require("fs")),ye=b(require("path"));$();Je();G();D();pn();Qo();Qo();wt=T("sync.workspace-store"),iF=8,pu=20,aF=new Set([".git",Xt,"node_modules"]),rr=class{constructor(e,t){this.workspaceRoot=e;this.mirror=t}toLocalPath(e){return te(this.workspaceRoot,e)}async countFiles(e,t={}){let n=t.limit;if(n!==void 0&&n<=0)return 0;let o=await Promise.all(e.map(async a=>{let s=this.toLocalPath(a),c;try{c=await me.promises.stat(s)}catch(l){if(F(l)||Ga(l))return 0;throw l}return c.isDirectory()?this.countDirectoryFiles(s,n):1})),i=0;for(let a of o)if(i+=a,n!==void 0&&i>=n)return i;return i}async writeMeta(e,t){t?.throwIfAborted(),await ta(this.workspaceRoot,e)}async patchMeta(e,t,n){n?.throwIfAborted(),await ac(this.workspaceRoot,e,t)}async deletePath(e,t){t?.throwIfAborted(),t?await this.removeLocalResource(this.toLocalPath(e),e,t):await me.promises.rm(this.toLocalPath(e),{force:!0,recursive:!0});let n=ye.dirname(this.toLocalPath(e));await Z(n)&&await ea(this.workspaceRoot,e),t?.step(1)}async removeEmptyOrphanDirectory(e){let t=this.toLocalPath(e),n;try{n=await me.promises.stat(t)}catch(s){if(F(s))return wt.debug(`orphan cleanup skip missing: remotePath=${e}`),!1;throw s}if(!n.isDirectory())return wt.debug(`orphan cleanup skip non-directory: remotePath=${e}`),!1;let i=(await me.promises.readdir(t)).filter(s=>s!==Y);if(i.length>0)return wt.debug(`orphan cleanup skip non-empty: remotePath=${e} nonMetaChildren=${i.length} samples=${i.slice(0,5).join("|")}`),!1;await me.promises.rm(t,{force:!0,recursive:!0});let a=ye.dirname(t);return await Z(a)&&await ea(this.workspaceRoot,e),wt.debug(`orphan cleanup removed: remotePath=${e}`),!0}async countResources(e){return(await Promise.all(e.map(async n=>{let o=this.toLocalPath(n),i;try{i=await Z(o)?await ro([o]):1}catch(a){if(!Ga(a))throw a;i=1}return i+1}))).reduce((n,o)=>n+o,0)}async countCheckoutResources(e){let t=this.mirror.toLocalPath(e),n=await this.statCheckoutSource(t);if(!n)return 1;if(!n.isDirectory())return 2;let[o,i,a]=await Promise.all([this.countExistingResources(e),ro([t]),this.countDirectories(t)]);return Math.max(o+i+a+1,1)}async statCheckoutSource(e){try{return await me.promises.stat(e)}catch(t){if(F(t))return;throw t}}async copyMirrorContent(e,t){t?.throwIfAborted();let n=this.toLocalPath(e);await me.promises.mkdir(ye.dirname(n),{recursive:!0}),await me.promises.copyFile(this.mirror.toLocalPath(e),n)}async checkoutFromMirror(e,t){t?.throwIfAborted();let n=Date.now(),o=this.mirror.toLocalPath(e),i=this.toLocalPath(e),s=(await me.promises.stat(o)).isDirectory();if(wt.debug(`checkout from mirror start: remotePath=${e} isFolder=${s} source=${o} target=${i}`),await this.copyMirrorMetaInfo(e,s),t?.step(1),s){await this.prepareCheckoutDirectory(e,t),await this.checkoutMirrorDirectory(e,t),wt.debug(`checkout from mirror done: remotePath=${e} elapsed=${Date.now()-n}ms`);return}await this.copyMirrorContent(e),t?.step(1),wt.debug(`checkout from mirror done: remotePath=${e} elapsed=${Date.now()-n}ms`)}async prepareCheckoutDirectory(e,t){t?.throwIfAborted();let n=this.toLocalPath(e),o=await Z(n);t&&o?await this.removeLocalResource(n,e,t):await me.promises.rm(n,{force:!0,recursive:!0}),wt.debug(`checkout prepared workspace target: remotePath=${e} targetExisted=${o}`)}async checkoutMirrorDirectory(e,t){let n=this.toLocalPath(e),o=new ze({maxConcurrency:iF,signal:t?.getAbortSignal()});try{await this.copyMirrorDirectory(e,t,o),await o.waitAll()}catch(a){throw o.cancel(a),await o.waitAll(),a}wt.debug(`checkout copied mirror tree: remotePath=${e}`),t?.step(1),await this.ensureFolderDotMetas(n,t,e);let i=await this.listResidualEntries(n);i.length>0&&wt.info(`checkout from mirror left workspace-only entries: remotePath=${e} count=${i.length} samples=${i.slice(0,pu).join("|")}`)}isCloneInProgress(e){return uc(this.workspaceRoot,e)}async listResidualEntries(e){let t=ye.join(this.mirror.toLocalPath("/"),ye.relative(this.workspaceRoot,e)),n=[];return await this.collectResidualEntries(e,t,"",n),n}async collectResidualEntries(e,t,n,o){if(o.length>=pu)return;let i;try{i=await me.promises.readdir(e,{withFileTypes:!0})}catch{return}let a;try{a=new Set(await me.promises.readdir(t))}catch{a=new Set}for(let s of i){if(s.name===Y||s.name===ra||o.length>=pu)continue;let c=n?`${n}/${s.name}`:s.name;if(!a.has(s.name)){o.push(c);continue}s.isDirectory()&&await this.collectResidualEntries(ye.join(e,s.name),ye.join(t,s.name),c,o)}}async copyMirrorDirectory(e,t,n){let o=this.mirror.toLocalPath(e),i=this.toLocalPath(e);await me.promises.mkdir(i,{recursive:!0});let a=await me.promises.readdir(o,{withFileTypes:!0});wt.debug(`copy mirror dir: remotePath=${e} children=${a.length}`),await Promise.all(a.map(async s=>{if(t?.throwIfAborted(),s.name===ra)return;let c=ye.join(o,s.name),l=ye.join(i,s.name);if(s.isDirectory()){await this.copyMirrorDirectory(ye.posix.join(e,s.name),t,n),t?.step(1);return}await n.addTask(async()=>{t?.throwIfAborted(),await me.promises.mkdir(ye.dirname(l),{recursive:!0}),await me.promises.copyFile(c,l),s.name!==Y&&t?.step(1)})}))}async countExistingResources(e){let t=this.toLocalPath(e);return await Z(t)?ro([t]):0}async countDirectoryFiles(e,t){let n;try{n=await me.promises.readdir(e,{withFileTypes:!0})}catch(c){if(F(c)||Ga(c))return 0;throw c}let o=0,i=[];for(let c of n)c.name!==Y&&(c.isDirectory()?aF.has(c.name)||i.push(c):o++);if(t!==void 0&&o>=t)return o;let a=await Promise.all(i.map(c=>this.countDirectoryFiles(ye.join(e,c.name),t))),s=o;for(let c of a)if(s+=c,t!==void 0&&s>=t)return s;return s}toParentDotMetaPath(e){return this.toFolderDotMetaPath(ye.posix.dirname(e))}toFolderDotMetaPath(e){return e==="/"?`/${Y}`:`${e}/${Y}`}async countDirectories(e){let t=await me.promises.readdir(e,{withFileTypes:!0});return 1+(await Promise.all(t.filter(o=>o.isDirectory()).map(o=>this.countDirectories(ye.join(e,o.name))))).reduce((o,i)=>o+i,0)}async removeLocalResource(e,t,n){let o;try{o=await me.promises.stat(e)}catch(a){if(F(a)){n?.step(1);return}throw a}if(!o.isDirectory()){await me.promises.rm(e,{force:!0}),n?.step(1);return}let i=await me.promises.readdir(e,{withFileTypes:!0});wt.debug(`remove local dir: remotePath=${t} children=${i.length}`+(i.length>0?` names=${i.slice(0,10).map(a=>a.name).join("|")}`:"")),await Promise.all(i.filter(a=>a.name!==Y).map(a=>(n?.throwIfAborted(),this.removeLocalResource(ye.join(e,a.name),ye.posix.join(t,a.name),n)))),await me.promises.rm(e,{force:!0,recursive:!0}),n?.step(1)}async copyMirrorMetaInfo(e,t,n){n?.throwIfAborted();let o=await Ie(this.mirror.root,e);o&&await ta(this.workspaceRoot,{...o,id:o.id??"",path:e,parentDir:ye.posix.dirname(e),name:ye.posix.basename(e),isFolder:t})}async listProjectPaths(){try{let e=await me.promises.readdir(this.workspaceRoot,{withFileTypes:!0});return(await Promise.all(e.filter(n=>n.isDirectory()&&!n.name.startsWith(".")).map(async n=>await this.hasProjectMetaFile(n.name)?"/"+n.name:void 0))).filter(n=>n!==void 0)}catch(e){if(F(e))return wt.debug(`workspace root has no local projects yet: ${this.workspaceRoot}`),[];throw e}}async ensureFolderDotMetas(e,t,n){let o=await me.promises.readdir(e,{withFileTypes:!0}),i=ye.join(e,Y);try{await me.promises.access(i)}catch(a){if(!F(a))throw a;wt.debug(`create missing folder .meta: ${i}`),await me.promises.writeFile(i,"{}","utf-8")}t?.step(1),await Promise.all(o.filter(a=>a.isDirectory()).map(a=>this.ensureFolderDotMetas(ye.join(e,a.name),t,n?ye.posix.join(n,a.name):void 0)))}async hasProjectMetaFile(e){try{let t=ye.join(this.workspaceRoot,e,Y);return(await me.promises.stat(t)).isFile()}catch(t){if(F(t))return wt.debug(`project .meta does not exist: ${e}`),!1;throw t}}}});var Tn,qe,sF,ei,du=pe(()=>{Tn=b(require("fs")),qe=b(require("path"));G();$();Je();sF=T("sync.file-mutation-baseline"),ei=class{constructor(e){this.options=e}workspaceMetaPatches=new Map;mirrorMetaPatches=new Map;physicalDeletes=new Set;mirrorPhysicalDeletes=new Set;mirrorFolderCreates=new Set;mirrorSubtreeSyncs=new Set;mirrorContentSyncs=new Set;authoritativeMetaPaths=new Set;deletedPaths=new Set;folderPathMutations=[];async apply(e,t){t?.throwIfAborted(),this.resetEffects(),await this.collectEffects(e),t?.throwIfAborted(),await this.applyPhysicalDeletes(),t?.throwIfAborted(),await this.applyMirrorFolderCreates(),t?.throwIfAborted(),await this.applyWorkspaceMetaPatches(t),t?.throwIfAborted(),await this.syncMirrorSubtrees(),t?.throwIfAborted(),await this.applyMirrorMetaPatches(t),t?.throwIfAborted(),await this.syncMirrorContents()}resetEffects(){this.workspaceMetaPatches=new Map,this.mirrorMetaPatches=new Map,this.physicalDeletes=new Set,this.mirrorPhysicalDeletes=new Set,this.mirrorFolderCreates=new Set,this.mirrorSubtreeSyncs=new Set,this.mirrorContentSyncs=new Set,this.authoritativeMetaPaths=new Set,this.deletedPaths=new Set,this.folderPathMutations=[]}async collectEffects(e){for(let t of e){if(!t.success)continue;let n=this.isNoWritableChangeResponse(t);await this.collectResponseEffects(t),n||await this.collectParentWatermarkEffects(t)}}async collectResponseEffects(e){if(e.pathMutation&&e.pathMutation!=="none"&&e.oldPath&&e.metaInfo){await this.collectPathMutationEffects(e);return}if(e.contentMutation==="deleted"){this.collectDeleteEffects(e);return}await this.collectContentOrMetaEffects(e)}async collectPathMutationEffects(e){let t=e.metaInfo,n=e.oldPath;if(this.mirrorPhysicalDeletes.add(n),this.addMetaPatch(this.workspaceMetaPatches,qe.posix.dirname(n),qe.posix.basename(n),void 0),this.addMetaPatch(this.mirrorMetaPatches,qe.posix.dirname(n),qe.posix.basename(n),void 0),this.addAuthoritativeMetaPatch(t),t.isFolder){this.folderPathMutations.push({oldPath:n,newPath:t.path}),this.collectMappedDeleteEffectsForFolderMove(n,t.path),this.mirrorSubtreeSyncs.add(t.path);for(let o of await this.getAuthoritativeDescendants(t.path))this.addAuthoritativeMetaPatch(o);return}this.mirrorContentSyncs.add(t.path)}collectDeleteEffects(e){let t=e.metaInfo?.path??e.path;this.deletedPaths.add(t),this.physicalDeletes.add(t);let n=qe.posix.dirname(t),o=qe.posix.basename(t);this.addMetaPatch(this.workspaceMetaPatches,n,o,void 0),this.addMetaPatch(this.mirrorMetaPatches,n,o,void 0);for(let i of this.folderPathMutations)this.collectMappedDeleteEffectsForFolderMove(i.oldPath,i.newPath)}collectMappedDeleteEffectsForFolderMove(e,t){for(let n of[...this.deletedPaths])this.collectMappedDeleteEffect(n,e,t)}collectMappedDeleteEffect(e,t,n){if(e===t||!Q(e,t))return;let o=n+e.slice(t.length);this.addMetaPatch(this.workspaceMetaPatches,qe.posix.dirname(o),qe.posix.basename(o),void 0),this.addMetaPatch(this.mirrorMetaPatches,qe.posix.dirname(o),qe.posix.basename(o),void 0),this.deletedPaths.add(o)}async collectContentOrMetaEffects(e){let t=e.metaInfo;if(t){if(this.isNoWritableChangeResponse(e)){await this.collectNoWritableChangeEffects(t);return}this.addAuthoritativeMetaPatch(t),t.isFolder?this.mirrorFolderCreates.add(t.path):(e.contentMutation==="created"||e.contentMutation==="modified")&&this.mirrorContentSyncs.add(t.path)}}async collectNoWritableChangeEffects(e){await this.addBaselineOnlyMetaPatch(this.workspaceMetaPatches,this.options.workspace.workspaceRoot,e),await this.addBaselineOnlyMetaPatch(this.mirrorMetaPatches,this.options.mirror.root,e),this.authoritativeMetaPaths.add(e.path)}async collectParentWatermarkEffects(e){if(typeof e.modifyTime!="number")return;let t=e.metaInfo?.path??e.path,n=e.oldPath?[e.oldPath,t]:[t];for(let o of this.getUniqueParentPaths(n))this.authoritativeMetaPaths.has(o)||await this.addParentWatermarkPatch(o,e.modifyTime)}async addParentWatermarkPatch(e,t){let n=qe.posix.dirname(e),o=qe.posix.basename(e);await this.addStoreParentWatermarkPatch(this.workspaceMetaPatches,this.options.workspace.workspaceRoot,e,n,o,t),await this.addStoreParentWatermarkPatch(this.mirrorMetaPatches,this.options.mirror.root,e,n,o,t)}async addStoreParentWatermarkPatch(e,t,n,o,i,a){let s=e.get(o);if(s&&Object.prototype.hasOwnProperty.call(s,i)){let m=s[i];m&&(s[i]={...m,modifyTime:a});return}let c=await Ie(t,n),l=this.toServerMetaFromExisting(n,c,a);if(!l)return;let p=e.get(o);p||(p={},e.set(o,p)),p[i]=Vt(l)}async applyPhysicalDeletes(){for(let e of this.physicalDeletes)await Tn.promises.rm(this.options.workspace.toLocalPath(e),{force:!0,recursive:!0}),await this.options.mirror.removePath(e);for(let e of this.mirrorPhysicalDeletes)await this.options.mirror.removePath(e)}async applyMirrorFolderCreates(){for(let e of this.mirrorFolderCreates)await Tn.promises.mkdir(this.options.mirror.toLocalPath(e),{recursive:!0})}async applyWorkspaceMetaPatches(e){for(let[t,n]of this.workspaceMetaPatches)this.isInsidePhysicalDelete(t)||await this.options.workspace.patchMeta(t,n,e)}async syncMirrorSubtrees(){for(let e of this.mirrorSubtreeSyncs)this.isInsidePhysicalDelete(e)||await this.syncWorkspaceSubtreeToMirror(e)}async applyMirrorMetaPatches(e){for(let[t,n]of this.mirrorMetaPatches)this.isInsidePhysicalDelete(t)||await this.options.mirror.patchMeta(t,n,e)}async syncMirrorContents(){for(let e of this.mirrorContentSyncs){let t=this.options.workspace.toLocalPath(e),n=this.options.mirror.toLocalPath(e);await Tn.promises.mkdir(qe.dirname(n),{recursive:!0}),await Tn.promises.copyFile(t,n)}}addAuthoritativeMetaPatch(e){let t=qe.posix.dirname(e.path),n=qe.posix.basename(e.path);this.addMetaPatch(this.workspaceMetaPatches,t,n,Vt(e)),this.addMetaPatch(this.mirrorMetaPatches,t,n,Vt(e)),this.authoritativeMetaPaths.add(e.path)}async addBaselineOnlyMetaPatch(e,t,n){this.addMetaPatch(e,n.parentDir,n.name,this.toBaselineOnlyMetaInfo(n,await Ie(t,n.path)))}toBaselineOnlyMetaInfo(e,t){return t?{...t,...e.id!==void 0?{id:e.id}:{},...e.revision!==void 0?{revision:e.revision}:{},...e.modifyTime!==void 0?{modifyTime:e.modifyTime}:{}}:Vt(e)}isNoWritableChangeResponse(e){return e.contentMutation==="none"&&(e.pathMutation===void 0||e.pathMutation==="none")&&e.metaInfoChanged===!1}async getAuthoritativeDescendants(e){try{return await(await this.options.getApiClient()).getFileDescendant(e)}catch(t){return sF.warn(`failed to fetch authoritative descendants after folder mutation: ${e}`,t),[]}}async syncWorkspaceSubtreeToMirror(e){let t=this.options.workspace.toLocalPath(e),n=this.options.mirror.toLocalPath(e);await Tn.promises.rm(n,{force:!0,recursive:!0}),await Tn.promises.mkdir(qe.dirname(n),{recursive:!0}),await Tn.promises.cp(t,n,{force:!0,recursive:!0})}addMetaPatch(e,t,n,o){let i=e.get(t);i||(i={},e.set(t,i)),i[n]=o}isInsidePhysicalDelete(e){return[...this.physicalDeletes,...this.mirrorPhysicalDeletes].some(t=>Q(e,t))}getUniqueParentPaths(e){let t=new Set;for(let n of e)for(let o of this.getParentPaths(n))t.add(o);return[...t]}getParentPaths(e){let t=e.replace(/^\/+|\/+$/g,"").split("/").filter(Boolean),n=[];for(let o=0;o<t.length-1;o++)n.push("/"+t.slice(0,o+1).join("/"));return n}toServerMetaFromExisting(e,t,n){if(t)return{...t,id:t.id??e,path:e,parentDir:qe.posix.dirname(e),name:qe.posix.basename(e),isFolder:!0,type:t.type??"fold",modifyTime:n}}}});var io,ti,uu=pe(()=>{io=b(require("path"));D();J();$();ti=class{constructor(e){this.options=e}async resolve(e,t){let n=io.resolve(this.options.workspaceRoot),o=io.resolve(e);if(o===n||o.startsWith(n+io.sep))return this.requireMetaPath(e);if(io.isAbsolute(e)){let i=Pe(e);if(await this.isKnownRemoteProjectPath(i,t))return i;throw new Ot("err.sync.pathOutOfScope",{remotePath:e,reason:"notInSyncScope"},{style:"warn"})}return Pe(e)}requireMetaPath(e){let t=kr(this.options.workspaceRoot,e);if(!t)throw new Error(`file is not in sync scope: ${e}`);return Pe(t)}async isKnownRemoteProjectPath(e,t){let n=We(e);if(!n)return!1;let o=n.replace(/^\//,"");if(t==="server-backed")return(await this.options.getServerProjects()).some(c=>c.name===o);let[i,a]=await Promise.all([this.options.workspace.listProjectPaths(),this.options.mirror.listProjectPaths()]);return i.includes(n)||a.includes(n)}}});function nv(r){let e=r.split(".").map(t=>{let n=t.match(/^\d+/);return n?Number(n[0]):Number.NaN});return e.some(Number.isNaN)?void 0:e}function oa(r){return(typeof r=="string"?r.trim():"")||void 0}function hc(r,e){if(!r||!e)return;let t=nv(r),n=nv(e);if(!t||!n)return;let o=Math.max(t.length,n.length);for(let i=0;i<o;i++){let a=t[i]??0,s=n[i]??0;if(a!==s)return a>s?1:-1}return 0}function fc(r,e){if(!r)return!0;let t=hc(r,e);return t===void 0?r!==e:t<0}function gc(r,e){let t=hc(r,e);return t!==void 0&&t>0}var ia=pe(()=>{});var mu,ri,hu=pe(()=>{mu=b(require("fs"));D();Je();ia();ri=class{client;constructor(e){this.client=e.client}async upgradeContent(e){let t=this.createContentBaseResult(e),n=e.versionInfo;if(!n?.upgradeSupported)return{...t,reason:"unsupported"};let o=n.contentVersion;if(!o)return{...t,reason:"unsupported"};let i;try{i=e.currentVersion??au(e.content)}catch(l){return{...t,reason:"invalidContent",errorInfo:l}}let a={...t,currentVersion:i,targetVersion:o};if(gc(i,o))return{...a,reason:"newerVersion"};if(!fc(i,o))return{...a,reason:"upToDate"};let s={...a,upgradeRequired:!0};if(e.checkOnly)return s;let c;try{c=await this.client.upgradeFileContent({path:e.path,content:e.content})}catch(l){return{...s,reason:"upgradeFailed",errorInfo:l}}return!c.changed||c.content===e.content?{...s,reason:"upToDate"}:{...s,content:c.content,changed:!0}}async upgradeFile(e){let t;if(e.content!==void 0)t=e.content;else try{t=await mu.promises.readFile(e.localPath,"utf-8")}catch(o){return{path:e.path,localPath:e.localPath,targetVersion:e.versionInfo?.contentVersion,content:"",changed:!1,upgradeRequired:!1,reason:F(o)?"fileNotFound":"readFailed",errorInfo:o}}let n=await this.upgradeContent({path:e.path,content:t,versionInfo:e.versionInfo,currentVersion:e.currentVersion,checkOnly:e.checkOnly});if(!n.changed||e.checkOnly)return{...n,localPath:e.localPath};try{return await mu.promises.writeFile(e.localPath,n.content,"utf-8"),{...n,localPath:e.localPath}}catch(o){return{...n,localPath:e.localPath,changed:!1,reason:"writeFailed",errorInfo:o}}}createContentBaseResult(e){return{path:e.path,targetVersion:e.versionInfo?.contentVersion,content:e.content,changed:!1,upgradeRequired:!1}}}});var iv={};Gl(iv,{SyncCommandUpgradeMetadata:()=>aa});var fu,xn,ov,cF,Kr,aa,gu=pe(()=>{fu=b(require("fs")),xn=b(require("path"));D();G();Je();pn();$();it();hu();ov=8,cF=new Set([".git",".succapp","node_modules"]),Kr=T("sync.upgrade-metadata"),aa=class extends Ae{upgrader=new ri({client:{upgradeFileContent:async e=>(await this.getApiClient()).upgradeFileContent(e)}});scannedContent=new Map;async execute(){let e=await this.resolveInputTargetPaths();if(e.length===0)return this.createResult();await this.getApiClient();let t=this.formatTargetScope(e);this.options.checkOnly?(Kr.info("metadata version check start: {0}",t),Kr.info("scan metadata version files")):(Kr.info("metadata upgrade start: {0}",t),Kr.info("scan metadata upgrade files"));let n=await this.scanCandidates(e);if(this.options.checkOnly)return n;await this.options.onChecked?.(n);let o=this.createUpgradeResult(n);return await this.upgradeCandidates(o),this.sortResult(o),Kr.info("metadata upgrade done: changed={0} candidates={1} skipped={2} failures={3} checked={4}",o.changed.length,o.candidates.length,o.skipped.length,o.failures.length,o.checked),o}formatTargetScope(e){return e.length===1?e[0]:`targets=${e.length}`}async resolveInputTargetPaths(){if(!this.options.paths||this.options.paths.length===0)return this.resolveDefaultTargetPaths();let e=new Set;for(let t of this.options.paths){this.task.throwIfAborted();let n=await this.resolveInputMetaPath(t);n&&e.add(n)}return ft(e)}async resolveDefaultTargetPaths(){let e=await this.createWorkspaceStore().listProjectPaths();return ft(new Set(e))}async resolveInputMetaPath(e){if(e==="/")return"/";let t=kr(this.context.root,e);if(t)return t;if(!(xn.isAbsolute(e)&&await Z(e))&&e.startsWith("/"))return Pe(e)}async scanCandidates(e){let t=new ze(ov),n=this.createResult(),o=[],i=0,a=s=>{i++,o.push(async()=>this.checkFile(s,n))};return await Promise.all(e.map(s=>this.scanInputPath(s,a))),this.task.start(Math.max(i,1)),await Promise.all(o.map(s=>t.addTask(async()=>{try{this.task.throwIfAborted(),await s()}finally{this.task.step()}}))),await t.waitAll(),this.task.finish(),this.sortResult(n),Kr.info("metadata version check done: candidates={0} skipped={1} failures={2} checked={3}",n.candidates.length,n.skipped.length,n.failures.length,n.checked),n}async upgradeCandidates(e){let t=e.candidates.length;if(t===0)return;Kr.info("metadata upgrade apply start: candidates={0}",t);let n=new ze(ov),o=0;await Promise.all(e.candidates.map(i=>n.addTask(async()=>{this.task.throwIfAborted();let a=await this.upgradeCandidate(i,e);o++,await this.options.onFileUpgraded?.({...a,index:o,total:t})}))),await n.waitAll()}async scanInputPath(e,t){let n=Pe(e),o=te(this.context.root,n);try{if((await fu.promises.stat(o)).isDirectory()){(this.options.recursive??!0)&&await this.scanDirectory(n,o,t);return}if(xn.basename(o)===Y)return;t({path:n,localPath:o})}catch(i){if(F(i)){t({path:n,localPath:o});return}throw i}}async scanDirectory(e,t,n){let o=(await fu.promises.readdir(t,{withFileTypes:!0})).sort((a,s)=>a.name.localeCompare(s.name)),i=[];for(let a of o){if(this.task.throwIfAborted(),a.name===Y)continue;let s=xn.join(t,a.name),c=Pe(xn.posix.join(e,a.name));if(a.isDirectory()){cF.has(a.name)||i.push(this.scanDirectory(c,s,n));continue}n({path:c,localPath:s})}await Promise.all(i)}createResult(){return{checked:0,candidates:[],changed:[],skipped:[],failures:[]}}createUpgradeResult(e){return{checked:e.checked,candidates:[...e.candidates],changed:[],skipped:[...e.skipped],failures:[...e.failures]}}sortResult(e){let t=(n,o)=>n.remotePath.localeCompare(o.remotePath);e.candidates.sort(t),e.changed.sort(t),e.skipped.sort(t),e.failures.sort(t)}async checkFile(e,t){let n=this.getMetadataVersionInfoByPath(e.path);if(!n?.upgradeSupported)return;t.checked++;let o=await this.upgrader.upgradeFile({path:e.path,localPath:e.localPath,versionInfo:n,checkOnly:!0}),i=this.createItemResult(o);if(o.upgradeRequired&&(t.candidates.push(i),this.scannedContent.set(e.localPath,{content:o.content,currentVersion:o.currentVersion})),!o.reason){o.upgradeRequired&&this.debugMetadataFile(i,"candidate","check");return}if(this.isSkippedReason(o.reason)){t.skipped.push({...i,reason:o.reason}),this.debugMetadataFile(i,o.reason,"check");return}this.logUpgradeFailure(e.path,o.errorInfo),t.failures.push({...i,reason:o.reason,errorInfo:o.errorInfo})}async upgradeCandidate(e,t){let n=this.getMetadataVersionInfoByPath(e.remotePath),o=this.scannedContent.get(e.localPath),i=await this.upgrader.upgradeFile({path:e.remotePath,localPath:e.localPath,versionInfo:n,content:o?.content,currentVersion:o?.currentVersion}),a=this.createItemResult(i);if(i.changed){let c={...a,changed:!0};return t.changed.push(c),this.debugMetadataFile(a,"changed","upgrade"),{item:c,status:"upgraded"}}if(i.reason&&this.isSkippedReason(i.reason)){let c={...a,reason:i.reason};return t.skipped.push(c),this.debugMetadataFile(a,i.reason,"upgrade"),{item:c,status:"skipped"}}if(!i.reason){let c={...a,reason:"upToDate"};return t.skipped.push(c),this.debugMetadataFile(a,"upToDate","upgrade"),{item:c,status:"skipped"}}this.logUpgradeFailure(e.remotePath,i.errorInfo);let s={...a,reason:i.reason,errorInfo:i.errorInfo};return t.failures.push(s),{item:s,status:"failed"}}logUpgradeFailure(e,t){Kr.error("metadata upgrade failed: {0}",e,t)}debugMetadataFile(e,t,n){Kr.debug("{0}: {1} current={2} target={3} result={4}",n==="check"?"metadata version check file":"metadata upgrade file",e.remotePath,e.currentVersion??"",e.targetVersion??"",t)}getMetadataVersionInfoByPath(e){return this.context.getMetadataVersionInfoByPath?.(e)}createItemResult(e){return{remotePath:e.path,localPath:e.localPath,currentVersion:e.currentVersion,targetVersion:e.targetVersion}}isSkippedReason(e){return e==="upToDate"||e==="newerVersion"}}});async function Cc(r,e,t){if(t.length===0)return[];let n=(gu(),dh(iv)),{SyncCommandUpgradeMetadata:o}=n;return(await new o(r,{paths:t,checkOnly:!0,task:e}).execute()).candidates}async function lv(r){return fg(r)?uF(r):!1}async function uF(r){let e=sv.createReadStream(r,{encoding:"utf-8"}),t=cv.createInterface({input:e,crlfDelay:1/0}),n="start",o=0;try{for await(let i of t){let a=lF.exec(i);if(a){n="separator",o=a[1].length;continue}if(n==="start")continue;let s=pF.exec(i);if(n==="separator"&&s?.[1].length===o){n="end";continue}let c=dF.exec(i);if(n==="end"&&c?.[1].length===o)return!0}return!1}finally{t.close(),e.destroy()}}function ca(r){let e=new Set([r.remotePath]);return r.oldRemotePath&&e.add(r.oldRemotePath),[...e]}function Sc(r){let e=new Set;for(let t of r)for(let n of ca(t))e.add(n);return[...e]}function pv(r){return ft(new Set(Sc(r)))}function dv(r){let e=new Set;for(let t of r)for(let n of ca(t))mF(e,n);return[...e].sort()}function mF(r,e){let t=sa.posix.dirname(e);for(;;){if(r.add(hF(t)),t==="/")return;t=sa.posix.dirname(t)}}function hF(r){return r==="/"?"/"+Y:r+"/"+Y}function at(r){return r.type==="added"||r.type==="modified"||r.type==="deleted"||r.type==="renamed"||r.type==="conflict"}function fr(r){return r.type==="remoteAdded"||r.type==="remoteModified"||r.type==="remoteDeleted"||r.type==="remoteRenamed"||r.type==="conflict"}function yu(r){return r.type!=="remoteRenamed"||!r.isFolder||!r.oldRemotePath?!1:We(r.remotePath)===r.remotePath&&We(r.oldRemotePath)===r.oldRemotePath}function Cu(r){return r.type!=="remoteRenamed"||!r.oldRemotePath?!1:We(r.remotePath)!==We(r.oldRemotePath)}function la(r){let e=r.filter(n=>fr(n)),t=new Set(Sc(e.filter(n=>n.type!=="conflict")));return t.size===0?e:e.filter(n=>n.type!=="conflict"||!ca(n).some(o=>t.has(o)))}function yc(r){return!!r.isFolder&&(r.type==="added"||r.type==="deleted"||r.type==="renamed"||r.type==="remoteAdded"||r.type==="remoteDeleted"||r.type==="remoteRenamed")}function vc(r,e){return e.some(t=>Q(r.remotePath,t)||!!r.oldRemotePath&&Q(r.oldRemotePath,t))}function uv(r,e){return e.some(t=>r.remotePath===t||r.oldRemotePath===t)}function kc(r){return[r.type,r.remotePath,r.oldRemotePath??""].join("\0")}function mv(r,e){let t=[];for(let n of e)r.some(o=>fF(o,n))&&t.push({path:n.path,remotePath:n.remotePath,...n.fileId!==void 0?{fileId:n.fileId}:{},oldPath:n.oldPath,oldRemotePath:n.oldRemotePath,type:"conflict",isFolder:n.isFolder,contentChanged:n.contentChanged,metaChanged:n.metaChanged});return t}function fF(r,e){return Fo(r.remotePath,r.oldRemotePath,e.remotePath,e.oldRemotePath)?gF(r,e):!1}function gF(r,e){return av(r)&&av(e)||!!r.metaChanged&&!!e.metaChanged||yc(r)||yc(e)}function av(r){return r.contentChanged===!0||r.type==="added"||r.type==="deleted"||r.type==="renamed"||r.type==="remoteAdded"||r.type==="remoteDeleted"||r.type==="remoteRenamed"?!0:r.contentChanged===void 0&&r.metaChanged===void 0&&(r.type==="modified"||r.type==="remoteModified")}var sv,sa,cv,lF,pF,dF,gr=pe(()=>{sv=b(require("fs")),sa=b(require("path")),cv=b(require("readline"));Je();To();$();qt();lF=/^(<{7,})(?:\s.*)?$/,pF=/^(={7,})$/,dF=/^(>{7,})(?:\s.*)?$/});function hv(r){let e=r.map(o=>o.remotePath),t=e.slice(0,yF),n=e.length-t.length;return n<=0?t.join(", "):`${t.join(", ")} (+${n})`}var Su,pa,yF,ni,oi,Dt,Ae,it=pe(()=>{Su=b(require("path"));$();Zo();na();du();uu();gr();qt();Ar();D();J();G();pa=T("sync.command"),yF=3,ni=class{runs=0;durationMs=0;api={total:0,byApi:{},byPath:{},droppedPathKeys:0,recentCallsDropped:0};startRun(){return this.runs++,Date.now()}finishRun(e){this.durationMs+=Date.now()-e}captureApiDiagnostics(e){this.api=e}describeForLog(){return`
21
- `+JSON.stringify(this.createSnapshot(),null,2).replace(/^\{\n/,"").replace(/\n\}$/,"")}},oi=class{constructor(e,t){this.context=e;this.options=t;this.serverUrl=e.activeServerUrl,this.mirrorRoot=e.getMirrorRoot(this.serverUrl)}serverUrl;mirrorRoot;apiClientPromise;get task(){return this.options.task??ht.INSTANCE}get workspaceRoot(){return this.context.root}createMirrorStore(){return new Mt(this.mirrorRoot)}createWorkspaceStore(e=this.createMirrorStore()){return new rr(this.workspaceRoot,e)}createPathResolver(e=this.createMirrorStore()){return new ti({workspaceRoot:this.workspaceRoot,mirror:e,workspace:this.createWorkspaceStore(e),getServerProjects:async()=>(await this.getApiClient()).getProjects()})}getApiClient(){return this.apiClientPromise||(this.apiClientPromise=this.context.requireServerClient(this.serverUrl)),this.apiClientPromise}getLocalSyncChanges(){return this.context.getSyncChanges().filter(e=>at(e))}getRemoteSyncChanges(){return this.excludeBlockedProjectRootRenameSubtree(this.context.getSyncChanges().filter(e=>fr(e)))}excludeBlockedProjectRootRenameSubtree(e){let t=new Set;for(let i of e)yu(i)&&(t.add(i.remotePath),i.oldRemotePath&&t.add(i.oldRemotePath));if(t.size===0)return e;let n=[...t],o=e.filter(i=>!n.some(a=>Q(i.remotePath,a)||!!i.oldRemotePath&&Q(i.oldRemotePath,a)));return pa.warn(`skip remote project rename changes that cannot be auto applied: ${[...t].join(", ")}`),o}assertNoProjectRootRenameChanges(e,t){if(!e)return;let n=e.filter(o=>yu(o));if(n.length!==0)throw new St("err.sync.projectRootRenameUnsupported",{actionName:t,paths:hv(n),changes:n})}clearSyncStatusTargets(e){this.context.clearSyncStatusTargets(e)}hasKnownChanges(e){return e!==void 0}assertNoRemoteProjectUnavailableChanges(e,t){if(!e)return;let n=e.filter(o=>o.type==="remoteProjectUnavailable");if(n.length!==0)throw new St("err.sync.projectUnavailable",{actionName:t,paths:hv(n),changes:n})}getKnownChangeTargetRemotePaths(e){return Sc([...e])}getKnownChangeTargets(e){return new Set(pv([...e]))}async resolveTargetRemotePaths(e,t="server-backed"){if(!e)return;let n=this.createPathResolver();return new Set(await Promise.all(e.map(o=>n.resolve(o,t))))}filterChangesByTargets(e,t){return t?e.filter(n=>{for(let o of t)if(Q(n.remotePath,o)||n.oldRemotePath&&Q(n.oldRemotePath,o))return!0;return!1}):e}expandTargetsForRenameChanges(e,t){if(!e)return;let n,o=i=>{e.has(i)||(n||(n=new Set(e)),n.add(i))};for(let i of t)i.type!=="renamed"&&i.type!=="remoteRenamed"||(o(i.remotePath),i.oldRemotePath&&o(i.oldRemotePath));return n??e}async resolveRemotePath(e,t="server-backed"){return this.createPathResolver().resolve(e,t)}reportDiagnostic(e){pa.warn(this.createDiagnosticLogMessage(e))}createDiagnosticLogMessage(e){let t=[`sync diagnostic: ${qn(e.errorInfo)||e.message}`,`workspaceRoot=${this.workspaceRoot}`,`serverUrl=${this.serverUrl}`];return e.path&&t.push(`path=${e.path}`),e.errorInfo!==void 0&&t.push(`errorInfo=${this.stringifyDiagnosticValue(e.errorInfo)}`),t.join(`
19
+ `,o+1),a=i<0?r.length:i+1;return{start:e,end:a,left:r.slice(t+1,n),right:r.slice(n+8,o)}}function uI(r,e){let t=new Map;for(let o of[...r.split(/\r?\n/),...e.split(/\r?\n/)]){let i=dI(o);i&&t.set(i,o)}if(t.size===0)return e;let n=Array.from(t.values());return n.map((o,i)=>i>=n.length-1||/,\s*$/.test(o)?o:o+",").join(`
20
+ `)}function dI(r){return/^\s*"([^"]+)"\s*:/.exec(r)?.[1]}function Pa(r,e){let t=JSON.parse(e);if(z(t))return t;throw new Si(r,new Error(".meta root must be an object"))}async function Ne(r,e,t){return(await Ra(r,e,t))[Lc(e)]}async function ba(r,e,t){let n=_c(r,e.path);await Bc(n,!1,o=>{o[Lc(e.path)]=Jt(e,t)})}async function mk(r,e,t){let n=new Map;for(let o of e){let i=_c(r,o.path),a=n.get(i);a?a.push(o):n.set(i,[o])}await Promise.all([...n].map(async([o,i])=>{await Bc(o,!1,a=>{for(let s of i)a[Lc(s.path)]=Jt(s,t)})}))}async function Uc(r,e,t){let n=Kt.join(re(r,e),J);await Bc(n,!1,o=>{for(let[i,a]of Object.entries(t))a?o[i]=a:delete o[i]})}async function go(r){return(await Promise.all(r.map(async t=>(await ar.promises.stat(t)).isDirectory()?1+await hk(t):1))).reduce((t,n)=>t+n,0)}async function hk(r){let e=await ar.promises.readdir(r,{withFileTypes:!0});return(await Promise.all(e.filter(n=>n.name!==J).map(async n=>n.isDirectory()?1+await hk(Kt.join(r,n.name)):1))).reduce((n,o)=>n+o,0)}async function jc(r){let e=(0,tk.createHash)("sha256");return await(0,nk.pipeline)(ar.createReadStream(r,{highWaterMark:64*1024}),new rk.Writable({write(t,n,o){e.update(t),o()}})),e.digest("hex")}function Jt(r,e){let t={};if(Sr(t,"id",r.id),Sr(t,"revision",r.revision),e?.writeContentInfo){if(r.size!==void 0){if(!Number.isSafeInteger(r.size)||r.size<0)throw new Error(`invalid file content size: ${r.path}`);t.size=r.size}if(r.hash!==void 0){let n=r.hash.trim().toLowerCase();if(!sI.test(n))throw new Error(`invalid file content hash: ${r.path}`);t.hash=n}}return Sr(t,"icon",r.icon),Sr(t,"desc",r.desc),r.isFolder&&r.type&&r.type!==aI&&(t.type=r.type),Sr(t,"order",r.order),Sr(t,"creator",r.creator),Sr(t,"createTime",r.createTime),Sr(t,"modifier",r.modifier),Sr(t,"modifyTime",r.modifyTime),r.hidden&&(t.hidden=!0),Sr(t,"subFileType",r.subFileType),Sr(t,"labels",r.labels),ek(t,"option",r.option),ek(t,"customOption",r.customOption),gk(t)}function yo(r,e,t=!0){for(let n of ak)if(!(t&&cI.has(n))&&!mI(r,e,n))return!1;return!0}function mI(r,e,t){let n=r[t],o=e[t];return(n===""||n===!1)&&(n=void 0),(o===""||o===!1)&&(o=void 0),n===o?!0:t==="option"||t==="customOption"?(0,ok.isDeepStrictEqual)(n,o)?!0:(n&&Object.keys(n).length===0&&(n=void 0),o&&Object.keys(o).length===0&&(o=void 0),n===o):!1}function Co(r){if(!r)return{};let e={...r};for(let t of sk)delete e[t];return e}async function Bc(r,e,t){let o=(Yr.get(r)??Promise.resolve()).catch(()=>{}).then(async()=>{let i=await pk(r,{strict:e});t(i),await Yd(r,i)});Yr.set(r,o);try{await o}finally{Yr.get(r)===o&&Yr.delete(r)}}async function fk(r){let e=Yr.get(r);e&&await e.catch(()=>{})}async function Yd(r,e){await Cn(r,JSON.stringify(hI(e),null,iI))}function hI(r){let e={};for(let t of Object.keys(r))e[t]=gk(r[t]);return e}function gk(r){let e={};for(let t of ak)Object.prototype.hasOwnProperty.call(r,t)&&(e[t]=r[t]);return e}function Sr(r,e,t){t==null||t===""||typeof t=="number"&&t===0||(r[e]=t)}function ek(r,e,t){!t||Object.keys(t).length===0||(r[e]=t)}var ar,Kt,tk,rk,nk,ok,fo,J,iI,aI,ik,sI,ak,sk,cI,Yr,zd,Si,He=he(()=>{ar=b(require("fs")),Kt=b(require("path")),tk=require("node:crypto"),rk=require("node:stream"),nk=require("node:stream/promises"),ok=require("node:util");H();K();F();Wo();te();Pt();fo=T("common.meta"),J=".meta",iI=" ",aI="fold",ik=/"version"\s*:\s*("(?:\\.|[^"\\])*")/,sI=/^[0-9a-f]{64}$/,ak=["id","revision","size","hash","icon","desc","type","order","creator","createTime","modifier","modifyTime","hidden","subFileType","labels","option","customOption"],sk=["id","revision","size","hash","type","creator","createTime","modifier","modifyTime","subFileType"],cI=new Set(sk),Yr=new Map,Si=class extends Error{constructor(t,n){super(`invalid .meta file: ${t}`);this.filePath=t;this.cause=n;this.name="DotMetaParseError"}}});function Xd(r,e){return yk.join(re(r,e),Ta)}async function qc(r,e){await Vc.promises.mkdir(re(r,e),{recursive:!0}),await Vc.promises.writeFile(Xd(r,e),"","utf8")}async function $c(r,e){await Vc.promises.rm(Xd(r,e),{force:!0})}function Hc(r,e){return ee(Xd(r,e))}var Vc,yk,Ta,vi=he(()=>{Vc=b(require("fs")),yk=b(require("path"));H();Ta=".succapp-clone-in-progress"});var Ln,zc,Ck,yt,So=he(()=>{Ln=b(require("fs")),zc=b(require("path"));H();He();F();K();vi();vi();Ck=T("sync.mirror-store"),yt=class{constructor(e){this.root=e}toLocalPath(e){return re(this.root,e)}readMeta(e){return Ne(this.root,e)}readMetaStrict(e){return Ne(this.root,e,{strict:!0})}async writeMeta(e,t){t?.throwIfAborted(),await ba(this.root,e,{writeContentInfo:!0})}async writeMetas(e,t){t?.throwIfAborted(),await mk(this.root,e,{writeContentInfo:!0})}async patchMeta(e,t,n){n?.throwIfAborted(),await Uc(this.root,e,t)}async listDirectChildren(e){try{return(await Ln.promises.readdir(this.toLocalPath(e),{withFileTypes:!0})).filter(n=>n.name!==J&&!n.name.startsWith(".")).map(n=>({path:this.joinRemotePath(e,n.name),isFolder:n.isDirectory()}))}catch(t){if(x(t))return Ck.debug(`mirror directory does not exist: ${e}`),[];throw t}}async listDirectMetaChildren(e){let t=await Ra(this.root,this.joinRemotePath(e,J));return Object.keys(t).map(n=>{let o=t[n];return{path:this.joinRemotePath(e,n),isFolder:!!o.type&&o.type!=="file",meta:o}})}async countMetaResources(e){if(!e)return go([this.root]);let t=await Promise.all(e.map(async i=>{let a=this.toLocalPath(i);return await ee(a)?a:void 0})),n=t.filter(i=>i!==void 0);return t.length-n.length+await go(n)}async exists(e){return ee(this.toLocalPath(e))}markCloneInProgress(e){return qc(this.root,e)}clearCloneInProgress(e){return $c(this.root,e)}isCloneInProgress(e){return Hc(this.root,e)}async isFolder(e){try{return(await Ln.promises.stat(this.toLocalPath(e))).isDirectory()}catch(t){if(x(t))return Ck.debug(`mirror path is not a folder: ${e}`),!1;throw t}}async removePath(e,t){if(t?.throwIfAborted(),t){await this.removeLocalResource(this.toLocalPath(e),e,t);return}await Ln.promises.rm(this.toLocalPath(e),{force:!0,recursive:!0})}async removeLocalResource(e,t,n){let o;try{o=await Ln.promises.stat(e)}catch(a){if(x(a)){n?.step(1);return}throw a}if(!o.isDirectory()){await Ln.promises.rm(e,{force:!0}),n?.step(1);return}let i=await Ln.promises.readdir(e,{withFileTypes:!0});await Promise.all(i.filter(a=>a.name!==J).map(a=>(n?.throwIfAborted(),this.removeLocalResource(zc.join(e,a.name),zc.posix.join(t,a.name),n)))),await Ln.promises.rm(e,{force:!0,recursive:!0}),n?.step(1)}removeMeta(e){return Ea(this.root,e)}async listProjectPaths(){return(await this.listDirectChildren("/")).filter(t=>t.isFolder).map(t=>t.path).sort((t,n)=>t.localeCompare(n))}joinRemotePath(e,t){return e==="/"?"/"+t:e+"/"+t}}});var ye,ve,Tt,fI,Zd,gI,sr,Ma=he(()=>{ye=b(require("fs")),ve=b(require("path"));H();He();K();F();Sn();vi();vi();Tt=T("sync.workspace-store"),fI=8,Zd=20,gI=new Set([".git",$t,"node_modules"]),sr=class{constructor(e,t){this.workspaceRoot=e;this.mirror=t}toLocalPath(e){return re(this.workspaceRoot,e)}async countFiles(e,t={}){let n=t.limit;if(n!==void 0&&n<=0)return 0;let o=await Promise.all(e.map(async a=>{let s=this.toLocalPath(a),c;try{c=await ye.promises.stat(s)}catch(l){if(x(l)||Cs(l))return 0;throw l}return c.isDirectory()?this.countDirectoryFiles(s,n):1})),i=0;for(let a of o)if(i+=a,n!==void 0&&i>=n)return i;return i}async writeMeta(e,t){t?.throwIfAborted(),await ba(this.workspaceRoot,e)}async patchMeta(e,t,n){n?.throwIfAborted(),await Uc(this.workspaceRoot,e,t)}async deletePath(e,t){t?.throwIfAborted(),t?await this.removeLocalResource(this.toLocalPath(e),e,t):await ye.promises.rm(this.toLocalPath(e),{force:!0,recursive:!0});let n=ve.dirname(this.toLocalPath(e));await ee(n)&&await Ea(this.workspaceRoot,e),t?.step(1)}async removeEmptyOrphanDirectory(e){let t=this.toLocalPath(e),n;try{n=await ye.promises.stat(t)}catch(s){if(x(s))return Tt.debug(`orphan cleanup skip missing: remotePath=${e}`),!1;throw s}if(!n.isDirectory())return Tt.debug(`orphan cleanup skip non-directory: remotePath=${e}`),!1;let i=(await ye.promises.readdir(t)).filter(s=>s!==J);if(i.length>0)return Tt.debug(`orphan cleanup skip non-empty: remotePath=${e} nonMetaChildren=${i.length} samples=${i.slice(0,5).join("|")}`),!1;await ye.promises.rm(t,{force:!0,recursive:!0});let a=ve.dirname(t);return await ee(a)&&await Ea(this.workspaceRoot,e),Tt.debug(`orphan cleanup removed: remotePath=${e}`),!0}async countResources(e){return(await Promise.all(e.map(async n=>{let o=this.toLocalPath(n),i;try{i=await ee(o)?await go([o]):1}catch(a){if(!Cs(a))throw a;i=1}return i+1}))).reduce((n,o)=>n+o,0)}async countCheckoutResources(e){let t=this.mirror.toLocalPath(e),n=await this.statCheckoutSource(t);if(!n)return 1;if(!n.isDirectory())return 2;let[o,i,a]=await Promise.all([this.countExistingResources(e),go([t]),this.countDirectories(t)]);return Math.max(o+i+a+1,1)}async statCheckoutSource(e){try{return await ye.promises.stat(e)}catch(t){if(x(t))return;throw t}}async copyMirrorContent(e,t){t?.throwIfAborted();let n=this.toLocalPath(e);await ye.promises.mkdir(ve.dirname(n),{recursive:!0}),await ye.promises.copyFile(this.mirror.toLocalPath(e),n)}async checkoutFromMirror(e,t){t?.throwIfAborted();let n=Date.now(),o=this.mirror.toLocalPath(e),i=this.toLocalPath(e),s=(await ye.promises.stat(o)).isDirectory();if(Tt.debug(`checkout from mirror start: remotePath=${e} isFolder=${s} source=${o} target=${i}`),await this.copyMirrorMetaInfo(e,s),t?.step(1),s){await this.prepareCheckoutDirectory(e,t),await this.checkoutMirrorDirectory(e,t),Tt.debug(`checkout from mirror done: remotePath=${e} elapsed=${Date.now()-n}ms`);return}await this.copyMirrorContent(e),t?.step(1),Tt.debug(`checkout from mirror done: remotePath=${e} elapsed=${Date.now()-n}ms`)}async prepareCheckoutDirectory(e,t){t?.throwIfAborted();let n=this.toLocalPath(e),o=await ee(n);t&&o?await this.removeLocalResource(n,e,t):await ye.promises.rm(n,{force:!0,recursive:!0}),Tt.debug(`checkout prepared workspace target: remotePath=${e} targetExisted=${o}`)}async checkoutMirrorDirectory(e,t){let n=this.toLocalPath(e),o=new Je({maxConcurrency:fI,signal:t?.getAbortSignal()});try{await this.copyMirrorDirectory(e,t,o),await o.waitAll()}catch(a){throw o.cancel(a),await o.waitAll(),a}Tt.debug(`checkout copied mirror tree: remotePath=${e}`),t?.step(1),await this.ensureFolderDotMetas(n,t,e);let i=await this.listResidualEntries(n);i.length>0&&Tt.info(`checkout from mirror left workspace-only entries: remotePath=${e} count=${i.length} samples=${i.slice(0,Zd).join("|")}`)}isCloneInProgress(e){return Hc(this.workspaceRoot,e)}async listResidualEntries(e){let t=ve.join(this.mirror.toLocalPath("/"),ve.relative(this.workspaceRoot,e)),n=[];return await this.collectResidualEntries(e,t,"",n),n}async collectResidualEntries(e,t,n,o){if(o.length>=Zd)return;let i;try{i=await ye.promises.readdir(e,{withFileTypes:!0})}catch{return}let a;try{a=new Set(await ye.promises.readdir(t))}catch{a=new Set}for(let s of i){if(s.name===J||s.name===Ta||o.length>=Zd)continue;let c=n?`${n}/${s.name}`:s.name;if(!a.has(s.name)){o.push(c);continue}s.isDirectory()&&await this.collectResidualEntries(ve.join(e,s.name),ve.join(t,s.name),c,o)}}async copyMirrorDirectory(e,t,n){let o=this.mirror.toLocalPath(e),i=this.toLocalPath(e);await ye.promises.mkdir(i,{recursive:!0});let a=await ye.promises.readdir(o,{withFileTypes:!0});Tt.debug(`copy mirror dir: remotePath=${e} children=${a.length}`),await Promise.all(a.map(async s=>{if(t?.throwIfAborted(),s.name===Ta)return;let c=ve.join(o,s.name),l=ve.join(i,s.name);if(s.isDirectory()){await this.copyMirrorDirectory(ve.posix.join(e,s.name),t,n),t?.step(1);return}await n.addTask(async()=>{t?.throwIfAborted(),await ye.promises.mkdir(ve.dirname(l),{recursive:!0}),await ye.promises.copyFile(c,l),s.name!==J&&t?.step(1)})}))}async countExistingResources(e){let t=this.toLocalPath(e);return await ee(t)?go([t]):0}async countDirectoryFiles(e,t){let n;try{n=await ye.promises.readdir(e,{withFileTypes:!0})}catch(c){if(x(c)||Cs(c))return 0;throw c}let o=0,i=[];for(let c of n)c.name!==J&&(c.isDirectory()?gI.has(c.name)||i.push(c):o++);if(t!==void 0&&o>=t)return o;let a=await Promise.all(i.map(c=>this.countDirectoryFiles(ve.join(e,c.name),t))),s=o;for(let c of a)if(s+=c,t!==void 0&&s>=t)return s;return s}toParentDotMetaPath(e){return this.toFolderDotMetaPath(ve.posix.dirname(e))}toFolderDotMetaPath(e){return e==="/"?`/${J}`:`${e}/${J}`}async countDirectories(e){let t=await ye.promises.readdir(e,{withFileTypes:!0});return 1+(await Promise.all(t.filter(o=>o.isDirectory()).map(o=>this.countDirectories(ve.join(e,o.name))))).reduce((o,i)=>o+i,0)}async removeLocalResource(e,t,n){let o;try{o=await ye.promises.stat(e)}catch(a){if(x(a)){n?.step(1);return}throw a}if(!o.isDirectory()){await ye.promises.rm(e,{force:!0}),n?.step(1);return}let i=await ye.promises.readdir(e,{withFileTypes:!0});Tt.debug(`remove local dir: remotePath=${t} children=${i.length}`+(i.length>0?` names=${i.slice(0,10).map(a=>a.name).join("|")}`:"")),await Promise.all(i.filter(a=>a.name!==J).map(a=>(n?.throwIfAborted(),this.removeLocalResource(ve.join(e,a.name),ve.posix.join(t,a.name),n)))),await ye.promises.rm(e,{force:!0,recursive:!0}),n?.step(1)}async copyMirrorMetaInfo(e,t,n){n?.throwIfAborted();let o=await Ne(this.mirror.root,e);o&&await ba(this.workspaceRoot,{...o,id:o.id??"",path:e,parentDir:ve.posix.dirname(e),name:ve.posix.basename(e),isFolder:t})}async listProjectPaths(){try{let e=await ye.promises.readdir(this.workspaceRoot,{withFileTypes:!0});return(await Promise.all(e.filter(n=>n.isDirectory()&&!n.name.startsWith(".")).map(async n=>await this.hasProjectMetaFile(n.name)?"/"+n.name:void 0))).filter(n=>n!==void 0)}catch(e){if(x(e))return Tt.debug(`workspace root has no local projects yet: ${this.workspaceRoot}`),[];throw e}}async ensureFolderDotMetas(e,t,n){let o=await ye.promises.readdir(e,{withFileTypes:!0}),i=ve.join(e,J);try{await ye.promises.access(i)}catch(a){if(!x(a))throw a;Tt.debug(`create missing folder .meta: ${i}`),await ye.promises.writeFile(i,"{}","utf-8")}t?.step(1),await Promise.all(o.filter(a=>a.isDirectory()).map(a=>this.ensureFolderDotMetas(ve.join(e,a.name),t,n?ve.posix.join(n,a.name):void 0)))}async hasProjectMetaFile(e){try{let t=ve.join(this.workspaceRoot,e,J);return(await ye.promises.stat(t)).isFile()}catch(t){if(x(t))return Tt.debug(`project .meta does not exist: ${e}`),!1;throw t}}}});var Nn,ze,yI,ki,em=he(()=>{Nn=b(require("fs")),ze=b(require("path"));K();H();He();yI=T("sync.file-mutation-baseline"),ki=class{constructor(e){this.options=e}workspaceMetaPatches=new Map;mirrorMetaPatches=new Map;physicalDeletes=new Set;mirrorPhysicalDeletes=new Set;mirrorFolderCreates=new Set;mirrorSubtreeSyncs=new Set;mirrorContentSyncs=new Set;authoritativeMetaPaths=new Set;deletedPaths=new Set;folderPathMutations=[];async apply(e,t){t?.throwIfAborted(),this.resetEffects(),await this.collectEffects(e),t?.throwIfAborted(),await this.applyPhysicalDeletes(),t?.throwIfAborted(),await this.applyMirrorFolderCreates(),t?.throwIfAborted(),await this.applyWorkspaceMetaPatches(t),t?.throwIfAborted(),await this.syncMirrorSubtrees(),t?.throwIfAborted(),await this.applyMirrorMetaPatches(t),t?.throwIfAborted(),await this.syncMirrorContents()}resetEffects(){this.workspaceMetaPatches=new Map,this.mirrorMetaPatches=new Map,this.physicalDeletes=new Set,this.mirrorPhysicalDeletes=new Set,this.mirrorFolderCreates=new Set,this.mirrorSubtreeSyncs=new Set,this.mirrorContentSyncs=new Set,this.authoritativeMetaPaths=new Set,this.deletedPaths=new Set,this.folderPathMutations=[]}async collectEffects(e){for(let t of e){if(!t.success)continue;let n=this.isNoWritableChangeResponse(t);await this.collectResponseEffects(t),n||await this.collectParentWatermarkEffects(t)}}async collectResponseEffects(e){if(e.pathMutation&&e.pathMutation!=="none"&&e.oldPath&&e.metaInfo){await this.collectPathMutationEffects(e);return}if(e.contentMutation==="deleted"){this.collectDeleteEffects(e);return}await this.collectContentOrMetaEffects(e)}async collectPathMutationEffects(e){let t=e.metaInfo,n=e.oldPath;if(this.mirrorPhysicalDeletes.add(n),this.addMetaPatch(this.workspaceMetaPatches,ze.posix.dirname(n),ze.posix.basename(n),void 0),this.addMetaPatch(this.mirrorMetaPatches,ze.posix.dirname(n),ze.posix.basename(n),void 0),this.addAuthoritativeMetaPatch(t),t.isFolder){this.folderPathMutations.push({oldPath:n,newPath:t.path}),this.collectMappedDeleteEffectsForFolderMove(n,t.path),this.mirrorSubtreeSyncs.add(t.path);for(let o of await this.getAuthoritativeDescendants(t.path))this.addAuthoritativeMetaPatch(o);return}this.mirrorContentSyncs.add(t.path)}collectDeleteEffects(e){let t=e.metaInfo?.path??e.path;this.deletedPaths.add(t),this.physicalDeletes.add(t);let n=ze.posix.dirname(t),o=ze.posix.basename(t);this.addMetaPatch(this.workspaceMetaPatches,n,o,void 0),this.addMetaPatch(this.mirrorMetaPatches,n,o,void 0);for(let i of this.folderPathMutations)this.collectMappedDeleteEffectsForFolderMove(i.oldPath,i.newPath)}collectMappedDeleteEffectsForFolderMove(e,t){for(let n of[...this.deletedPaths])this.collectMappedDeleteEffect(n,e,t)}collectMappedDeleteEffect(e,t,n){if(e===t||!Q(e,t))return;let o=n+e.slice(t.length);this.addMetaPatch(this.workspaceMetaPatches,ze.posix.dirname(o),ze.posix.basename(o),void 0),this.addMetaPatch(this.mirrorMetaPatches,ze.posix.dirname(o),ze.posix.basename(o),void 0),this.deletedPaths.add(o)}async collectContentOrMetaEffects(e){let t=e.metaInfo;if(t){if(this.isNoWritableChangeResponse(e)){await this.collectNoWritableChangeEffects(t);return}this.addAuthoritativeMetaPatch(t),t.isFolder?this.mirrorFolderCreates.add(t.path):(e.contentMutation==="created"||e.contentMutation==="modified")&&this.mirrorContentSyncs.add(t.path)}}async collectNoWritableChangeEffects(e){await this.addBaselineOnlyMetaPatch(this.workspaceMetaPatches,this.options.workspace.workspaceRoot,e),await this.addBaselineOnlyMetaPatch(this.mirrorMetaPatches,this.options.mirror.root,e),this.authoritativeMetaPaths.add(e.path)}async collectParentWatermarkEffects(e){if(typeof e.modifyTime!="number")return;let t=e.metaInfo?.path??e.path,n=e.oldPath?[e.oldPath,t]:[t];for(let o of this.getUniqueParentPaths(n))this.authoritativeMetaPaths.has(o)||await this.addParentWatermarkPatch(o,e.modifyTime)}async addParentWatermarkPatch(e,t){let n=ze.posix.dirname(e),o=ze.posix.basename(e);await this.addStoreParentWatermarkPatch(this.workspaceMetaPatches,this.options.workspace.workspaceRoot,e,n,o,t),await this.addStoreParentWatermarkPatch(this.mirrorMetaPatches,this.options.mirror.root,e,n,o,t)}async addStoreParentWatermarkPatch(e,t,n,o,i,a){let s=e.get(o);if(s&&Object.prototype.hasOwnProperty.call(s,i)){let d=s[i];d&&(s[i]={...d,modifyTime:a});return}let c=await Ne(t,n),l=this.toServerMetaFromExisting(n,c,a);if(!l)return;let p=e.get(o);p||(p={},e.set(o,p)),p[i]=Jt(l)}async applyPhysicalDeletes(){for(let e of this.physicalDeletes)await Nn.promises.rm(this.options.workspace.toLocalPath(e),{force:!0,recursive:!0}),await this.options.mirror.removePath(e);for(let e of this.mirrorPhysicalDeletes)await this.options.mirror.removePath(e)}async applyMirrorFolderCreates(){for(let e of this.mirrorFolderCreates)await Nn.promises.mkdir(this.options.mirror.toLocalPath(e),{recursive:!0})}async applyWorkspaceMetaPatches(e){for(let[t,n]of this.workspaceMetaPatches)this.isInsidePhysicalDelete(t)||await this.options.workspace.patchMeta(t,n,e)}async syncMirrorSubtrees(){for(let e of this.mirrorSubtreeSyncs)this.isInsidePhysicalDelete(e)||await this.syncWorkspaceSubtreeToMirror(e)}async applyMirrorMetaPatches(e){for(let[t,n]of this.mirrorMetaPatches)this.isInsidePhysicalDelete(t)||await this.options.mirror.patchMeta(t,n,e)}async syncMirrorContents(){for(let e of this.mirrorContentSyncs){let t=this.options.workspace.toLocalPath(e),n=this.options.mirror.toLocalPath(e);await Nn.promises.mkdir(ze.dirname(n),{recursive:!0}),await Nn.promises.copyFile(t,n)}}addAuthoritativeMetaPatch(e){let t=ze.posix.dirname(e.path),n=ze.posix.basename(e.path);this.addMetaPatch(this.workspaceMetaPatches,t,n,Jt(e)),this.addMetaPatch(this.mirrorMetaPatches,t,n,Jt(e)),this.authoritativeMetaPaths.add(e.path)}async addBaselineOnlyMetaPatch(e,t,n){this.addMetaPatch(e,n.parentDir,n.name,this.toBaselineOnlyMetaInfo(n,await Ne(t,n.path)))}toBaselineOnlyMetaInfo(e,t){return t?{...t,...e.id!==void 0?{id:e.id}:{},...e.revision!==void 0?{revision:e.revision}:{},...e.modifyTime!==void 0?{modifyTime:e.modifyTime}:{}}:Jt(e)}isNoWritableChangeResponse(e){return e.contentMutation==="none"&&(e.pathMutation===void 0||e.pathMutation==="none")&&e.metaInfoChanged===!1}async getAuthoritativeDescendants(e){try{return await(await this.options.getApiClient()).getFileDescendant(e)}catch(t){return yI.warn(`failed to fetch authoritative descendants after folder mutation: ${e}`,t),[]}}async syncWorkspaceSubtreeToMirror(e){let t=this.options.workspace.toLocalPath(e),n=this.options.mirror.toLocalPath(e);await Nn.promises.rm(n,{force:!0,recursive:!0}),await Nn.promises.mkdir(ze.dirname(n),{recursive:!0}),await Nn.promises.cp(t,n,{force:!0,recursive:!0})}addMetaPatch(e,t,n,o){let i=e.get(t);i||(i={},e.set(t,i)),i[n]=o}isInsidePhysicalDelete(e){return[...this.physicalDeletes,...this.mirrorPhysicalDeletes].some(t=>Q(e,t))}getUniqueParentPaths(e){let t=new Set;for(let n of e)for(let o of this.getParentPaths(n))t.add(o);return[...t]}getParentPaths(e){let t=e.replace(/^\/+|\/+$/g,"").split("/").filter(Boolean),n=[];for(let o=0;o<t.length-1;o++)n.push("/"+t.slice(0,o+1).join("/"));return n}toServerMetaFromExisting(e,t,n){if(t)return{...t,id:t.id??e,path:e,parentDir:ze.posix.dirname(e),name:ze.posix.basename(e),isFolder:!0,type:t.type??"fold",modifyTime:n}}}});var vo,wi,tm=he(()=>{vo=b(require("path"));F();U();H();wi=class{constructor(e){this.options=e}async resolve(e,t){let n=vo.resolve(this.options.workspaceRoot),o=vo.resolve(e);if(o===n||o.startsWith(n+vo.sep))return this.requireMetaPath(e);if(vo.isAbsolute(e)){let i=ae(e);if(await this.isKnownRemoteProjectPath(i,t))return i;throw new jt("err.sync.pathOutOfScope",{remotePath:e,reason:"notInSyncScope"},{style:"warn"})}return ae(e)}requireMetaPath(e){let t=Tr(this.options.workspaceRoot,e);if(!t)throw new Error(`file is not in sync scope: ${e}`);return ae(t)}async isKnownRemoteProjectPath(e,t){let n=je(e);if(!n)return!1;let o=n.replace(/^\//,"");if(t==="server-backed")return(await this.options.getServerProjects()).some(c=>c.name===o);let[i,a]=await Promise.all([this.options.workspace.listProjectPaths(),this.options.mirror.listProjectPaths()]);return i.includes(n)||a.includes(n)}}});function Sk(r){let e=r.split(".").map(t=>{let n=t.match(/^\d+/);return n?Number(n[0]):Number.NaN});return e.some(Number.isNaN)?void 0:e}function xa(r){return(typeof r=="string"?r.trim():"")||void 0}function Gc(r,e){if(!r||!e)return;let t=Sk(r),n=Sk(e);if(!t||!n)return;let o=Math.max(t.length,n.length);for(let i=0;i<o;i++){let a=t[i]??0,s=n[i]??0;if(a!==s)return a>s?1:-1}return 0}function Kc(r,e){if(!r)return!0;let t=Gc(r,e);return t===void 0?r!==e:t<0}function Jc(r,e){let t=Gc(r,e);return t!==void 0&&t>0}var Fa=he(()=>{});var rm,Pi,nm=he(()=>{rm=b(require("fs"));F();He();Fa();Pi=class{client;constructor(e){this.client=e.client}async upgradeContent(e){let t=this.createContentBaseResult(e),n=e.versionInfo;if(!n?.upgradeSupported)return{...t,reason:"unsupported"};let o=n.contentVersion;if(!o)return{...t,reason:"unsupported"};let i;try{i=e.currentVersion??Jd(e.content)}catch(l){return{...t,reason:"invalidContent",errorInfo:l}}let a={...t,currentVersion:i,targetVersion:o};if(Jc(i,o))return{...a,reason:"newerVersion"};if(!Kc(i,o))return{...a,reason:"upToDate"};let s={...a,upgradeRequired:!0};if(e.dryRun)return s;let c;try{c=await this.client.upgradeFileContent({path:e.path,content:e.content})}catch(l){return{...s,reason:"upgradeFailed",errorInfo:l}}return!c.changed||c.content===e.content?{...s,reason:"upToDate"}:{...s,content:c.content,changed:!0}}async upgradeFile(e){let t;if(e.content!==void 0)t=e.content;else try{t=await rm.promises.readFile(e.localPath,"utf-8")}catch(o){return{path:e.path,localPath:e.localPath,targetVersion:e.versionInfo?.contentVersion,content:"",changed:!1,upgradeRequired:!1,reason:x(o)?"fileNotFound":"readFailed",errorInfo:o}}let n=await this.upgradeContent({path:e.path,content:t,versionInfo:e.versionInfo,currentVersion:e.currentVersion,dryRun:e.dryRun});if(!n.changed||e.dryRun)return{...n,localPath:e.localPath};try{return await rm.promises.writeFile(e.localPath,n.content,"utf-8"),{...n,localPath:e.localPath}}catch(o){return{...n,localPath:e.localPath,changed:!1,reason:"writeFailed",errorInfo:o}}}createContentBaseResult(e){return{path:e.path,targetVersion:e.versionInfo?.contentVersion,content:e.content,changed:!1,upgradeRequired:!1}}}});var Pk={};bp(Pk,{SyncCommandUpgradeMetadata:()=>Ia});var om,Wn,vk,kk,wk,CI,Xr,Ia,im=he(()=>{om=b(require("fs")),Wn=b(require("path"));F();K();D();He();Sn();H();ct();nm();vk=8,kk=5,wk=95,CI=new Set([".git",".succapp","node_modules"]),Xr=T("sync.upgrade-metadata"),Ia=class extends We{upgrader=new Pi({client:{upgradeFileContent:async e=>(await this.getApiClient()).upgradeFileContent(e)}});scannedContent=new Map;async execute(){let e=await this.resolveInputTargetPaths();if(e.length===0)return this.createResult();let t=this.formatTargetScope(e);if(this.options.dryRun?(Xr.info("metadata version check start: {0}",t),Xr.info("scan metadata version files")):(Xr.info("metadata upgrade start: {0}",t),Xr.info("scan metadata upgrade files")),this.options.dryRun){let s=await this.scanCandidates(e,this.task,{finish:!1,retainOnFinish:!0});return this.task.setMessage(u("workspace.sync.progress.upgradeMeta.checked",s.checked,s.candidates.length)),this.task.finish(),s}this.task.start(kk+wk,{message:u("workspace.sync.progress.upgradeMeta.apply"),retainOnFinish:!0});let n=this.task.subTaskMonitor(kk),o=this.task.subTaskMonitor(wk),i=await this.scanCandidates(e,n);await this.options.onChecked?.(i);let a=this.createUpgradeResult(i);return await this.upgradeCandidates(a,o),this.sortResult(a),Xr.info("metadata upgrade done: changed={0} candidates={1} skipped={2} failures={3} checked={4}",a.changed.length,a.candidates.length,a.skipped.length,a.failures.length,a.checked),this.task.setMessage(u("workspace.sync.progress.upgradeMeta.done",a.changed.length,a.failures.length,a.checked)),this.task.finish(),a}formatTargetScope(e){return e.length===1?e[0]:`targets=${e.length}`}async resolveInputTargetPaths(){if(!this.options.paths||this.options.paths.length===0)return this.resolveDefaultTargetPaths();let e=new Set;for(let t of this.options.paths){this.task.throwIfAborted();let n=await this.resolveInputMetaPath(t);n&&e.add(n)}return ft(e)}async resolveDefaultTargetPaths(){let e=await this.createWorkspaceStore().listProjectPaths();return ft(new Set(e))}async resolveInputMetaPath(e){if(e==="/")return"/";let t=Tr(this.context.root,e);if(t)return t;if(!(Wn.isAbsolute(e)&&await ee(e))&&e.startsWith("/"))return ae(e)}async scanCandidates(e,t,n={}){let o=new Je(vk),i=this.createResult(),a=[],s=0,c=l=>{s++,a.push(async()=>this.checkFile(l,i))};return await Promise.all(e.map(l=>this.scanInputPath(l,c))),t.start(Math.max(s,1),{message:u("workspace.sync.progress.upgradeMeta.scan"),retainOnFinish:n.retainOnFinish===!0}),await Promise.all(a.map(l=>o.addTask(async()=>{try{t.throwIfAborted(),await l()}finally{t.step()}}))),await o.waitAll(),n.finish!==!1&&t.finish(),this.sortResult(i),Xr.info("metadata version check done: candidates={0} skipped={1} failures={2} checked={3}",i.candidates.length,i.skipped.length,i.failures.length,i.checked),i}async upgradeCandidates(e,t){let n=e.candidates.length;if(n===0){t.finish();return}Xr.info("metadata upgrade apply start: candidates={0}",n),t.start(n,{message:u("workspace.sync.progress.upgradeMeta.apply")});let o=new Je(vk),i=0;await Promise.all(e.candidates.map(a=>o.addTask(async()=>{try{t.throwIfAborted();let s=await this.upgradeCandidate(a,e);i++,await this.options.onFileUpgraded?.({...s,index:i,total:n})}finally{t.step()}}))),await o.waitAll(),t.finish()}async scanInputPath(e,t){let n=ae(e),o=re(this.context.root,n);try{if((await om.promises.stat(o)).isDirectory()){(this.options.recursive??!0)&&await this.scanDirectory(n,o,t);return}if(Wn.basename(o)===J)return;t({path:n,localPath:o})}catch(i){if(x(i)){t({path:n,localPath:o});return}throw i}}async scanDirectory(e,t,n){let o=(await om.promises.readdir(t,{withFileTypes:!0})).sort((a,s)=>a.name.localeCompare(s.name)),i=[];for(let a of o){if(this.task.throwIfAborted(),a.name===J)continue;let s=Wn.join(t,a.name),c=ae(Wn.posix.join(e,a.name));if(a.isDirectory()){CI.has(a.name)||i.push(this.scanDirectory(c,s,n));continue}n({path:c,localPath:s})}await Promise.all(i)}createResult(){return{checked:0,candidates:[],changed:[],skipped:[],failures:[]}}createUpgradeResult(e){return{checked:e.checked,candidates:[...e.candidates],changed:[],skipped:[...e.skipped],failures:[...e.failures]}}sortResult(e){let t=(n,o)=>n.remotePath.localeCompare(o.remotePath);e.candidates.sort(t),e.changed.sort(t),e.skipped.sort(t),e.failures.sort(t)}async checkFile(e,t){let n=(await this.context.getMetadataVersionCatalog()).getInfoByPath(e.path);if(!n?.upgradeSupported)return;t.checked++;let o=await this.upgrader.upgradeFile({path:e.path,localPath:e.localPath,versionInfo:n,dryRun:!0}),i=this.createItemResult(o);if(o.upgradeRequired&&(t.candidates.push(i),this.scannedContent.set(e.localPath,{content:o.content,currentVersion:o.currentVersion})),!o.reason){o.upgradeRequired&&this.logMetadataFile(i,"candidate","check");return}if(this.isSkippedReason(o.reason)){t.skipped.push({...i,reason:o.reason}),this.logMetadataFile(i,o.reason,"check");return}this.logUpgradeFailure(e.path,o.errorInfo),t.failures.push({...i,reason:o.reason,errorInfo:o.errorInfo})}async upgradeCandidate(e,t){let n=(await this.context.getMetadataVersionCatalog()).getInfoByPath(e.remotePath),o=this.scannedContent.get(e.localPath),i=await this.upgrader.upgradeFile({path:e.remotePath,localPath:e.localPath,versionInfo:n,content:o?.content,currentVersion:o?.currentVersion}),a=this.createItemResult(i);if(i.changed){let c={...a,changed:!0};return t.changed.push(c),this.logMetadataFile(a,"changed","upgrade"),{item:c,status:"upgraded"}}if(i.reason&&this.isSkippedReason(i.reason)){let c={...a,reason:i.reason};return t.skipped.push(c),this.logMetadataFile(a,i.reason,"upgrade"),{item:c,status:"skipped"}}if(!i.reason){let c={...a,reason:"upToDate"};return t.skipped.push(c),this.logMetadataFile(a,"upToDate","upgrade"),{item:c,status:"skipped"}}this.logUpgradeFailure(e.remotePath,i.errorInfo);let s={...a,reason:i.reason,errorInfo:i.errorInfo};return t.failures.push(s),{item:s,status:"failed"}}logUpgradeFailure(e,t){Xr.error("metadata upgrade failed: {0}",e,t)}logMetadataFile(e,t,n){Xr.info("{0}: {1} current={2} target={3} result={4}",n==="check"?"metadata version check file":"metadata upgrade file",e.remotePath,e.currentVersion??"",e.targetVersion??"",t)}createItemResult(e){return{remotePath:e.path,localPath:e.localPath,currentVersion:e.currentVersion,targetVersion:e.targetVersion}}isSkippedReason(e){return e==="upToDate"||e==="newerVersion"}}});async function Xc(r,e,t){if(t.length===0)return[];let n=(im(),cf(Pk)),{SyncCommandUpgradeMetadata:o}=n;return(await new o(r,{paths:t,dryRun:!0,task:e}).execute()).candidates}async function Mk(r){return tg(r)?wI(r):!1}async function wI(r){let e=bk.createReadStream(r,{encoding:"utf-8"}),t=Tk.createInterface({input:e,crlfDelay:1/0}),n="start",o=0;try{for await(let i of t){let a=SI.exec(i);if(a){n="separator",o=a[1].length;continue}if(n==="start")continue;let s=vI.exec(i);if(n==="separator"&&s?.[1].length===o){n="end";continue}let c=kI.exec(i);if(n==="end"&&c?.[1].length===o)return!0}return!1}finally{t.close(),e.destroy()}}function Da(r){let e=new Set([r.remotePath]);return r.oldRemotePath&&e.add(r.oldRemotePath),[...e]}function Qc(r){let e=new Set;for(let t of r)for(let n of Da(t))e.add(n);return[...e]}function xk(r){return ft(new Set(Qc(r)))}function Fk(r){let e=new Set;for(let t of r)for(let n of Da(t))PI(e,n);return[...e].sort()}function PI(r,e){let t=Ri.posix.dirname(e);for(;;){if(r.add(RI(t)),t==="/")return;t=Ri.posix.dirname(t)}}function RI(r){return r==="/"?"/"+J:r+"/"+J}function lt(r){return r.type==="added"||r.type==="modified"||r.type==="deleted"||r.type==="renamed"||r.type==="conflict"}function kr(r){return r.type==="remoteAdded"||r.type==="remoteModified"||r.type==="remoteDeleted"||r.type==="remoteRenamed"||r.type==="conflict"}function am(r){return r.type!=="remoteRenamed"||!r.isFolder||!r.oldRemotePath?!1:je(r.remotePath)===r.remotePath&&je(r.oldRemotePath)===r.oldRemotePath}function sm(r){return r.type!=="remoteRenamed"||!r.oldRemotePath?!1:je(r.remotePath)!==je(r.oldRemotePath)}function Aa(r){let e=r.filter(n=>kr(n)),t=new Set(Qc(e.filter(n=>n.type!=="conflict")));return t.size===0?e:e.filter(n=>n.type!=="conflict"||!Da(n).some(o=>t.has(o)))}function Yc(r){return!!r.isFolder&&(r.type==="added"||r.type==="deleted"||r.type==="renamed"||r.type==="remoteAdded"||r.type==="remoteDeleted"||r.type==="remoteRenamed")}function cm(r,e){return e.some(t=>Q(r.remotePath,t)||!!r.oldRemotePath&&Q(r.oldRemotePath,t))}function Ei(r){let e=new Set(r.map(ae));return t=>Rk(t.remotePath,e)||!!t.oldRemotePath&&Rk(t.oldRemotePath,e)}function Rk(r,e){let t=ae(r);for(;;){if(e.has(t))return!0;if(t==="/")return!1;t=Ri.posix.dirname(t)}}function Ik(r,e){return e.some(t=>r.remotePath===t||r.oldRemotePath===t)}function Zc(r){return[r.type,r.remotePath,r.oldRemotePath??""].join("\0")}function Dk(r,e){let t=[];for(let n of e)r.some(o=>EI(o,n))&&t.push({path:n.path,remotePath:n.remotePath,...n.fileId!==void 0?{fileId:n.fileId}:{},oldPath:n.oldPath,oldRemotePath:n.oldRemotePath,type:"conflict",isFolder:n.isFolder,contentChanged:n.contentChanged,metaChanged:n.metaChanged});return t}function EI(r,e){return kn(r.remotePath,r.oldRemotePath,e.remotePath,e.oldRemotePath)?bI(r,e):!1}function bI(r,e){return Ek(r)&&Ek(e)||!!r.metaChanged&&!!e.metaChanged||Yc(r)||Yc(e)}function Ek(r){return r.contentChanged===!0||r.type==="added"||r.type==="deleted"||r.type==="renamed"||r.type==="remoteAdded"||r.type==="remoteDeleted"||r.type==="remoteRenamed"?!0:r.contentChanged===void 0&&r.metaChanged===void 0&&(r.type==="modified"||r.type==="remoteModified")}var bk,Ri,Tk,SI,vI,kI,wr=he(()=>{bk=b(require("fs")),Ri=b(require("path")),Tk=b(require("readline"));He();Wo();H();Yt();SI=/^(<{7,})(?:\s.*)?$/,vI=/^(={7,})$/,kI=/^(>{7,})(?:\s.*)?$/});function Ak(r){let e=r.map(o=>o.remotePath),t=e.slice(0,TI),n=e.length-t.length;return n<=0?t.join(", "):`${t.join(", ")} (+${n})`}var lm,Oa,TI,bi,Ti,_t,We,ct=he(()=>{lm=b(require("path"));H();So();Ma();em();tm();wr();Yt();jr();F();U();K();Oa=T("sync.command"),TI=3,bi=class{runs=0;durationMs=0;api={total:0,byApi:{},byPath:{},droppedPathKeys:0,recentCallsDropped:0};startRun(){return this.runs++,Date.now()}finishRun(e){this.durationMs+=Date.now()-e}captureApiDiagnostics(e){this.api=e}describeForLog(){return`
21
+ `+JSON.stringify(this.createSnapshot(),null,2).replace(/^\{\n/,"").replace(/\n\}$/,"")}},Ti=class{constructor(e,t){this.context=e;this.options=t;this.serverUrl=e.activeServerUrl,this.mirrorRoot=e.getMirrorRoot(this.serverUrl)}serverUrl;mirrorRoot;apiClientPromise;get task(){return this.options.task??it.INSTANCE}get workspaceRoot(){return this.context.root}createMirrorStore(){return new yt(this.mirrorRoot)}createWorkspaceStore(e=this.createMirrorStore()){return new sr(this.workspaceRoot,e)}createPathResolver(e=this.createMirrorStore()){return new wi({workspaceRoot:this.workspaceRoot,mirror:e,workspace:this.createWorkspaceStore(e),getServerProjects:async()=>(await this.getApiClient()).getProjects()})}getApiClient(){return this.apiClientPromise||(this.apiClientPromise=this.context.requireServerClient(this.serverUrl)),this.apiClientPromise}getLocalSyncChanges(){return this.context.getSyncChanges().filter(e=>lt(e))}getRemoteSyncChanges(){return this.excludeBlockedProjectRootRenameSubtree(this.context.getSyncChanges().filter(e=>kr(e)))}excludeBlockedProjectRootRenameSubtree(e){let t=new Set;for(let i of e)am(i)&&(t.add(i.remotePath),i.oldRemotePath&&t.add(i.oldRemotePath));if(t.size===0)return e;let n=[...t],o=e.filter(i=>!n.some(a=>Q(i.remotePath,a)||!!i.oldRemotePath&&Q(i.oldRemotePath,a)));return Oa.warn(`skip remote project rename changes that cannot be auto applied: ${[...t].join(", ")}`),o}assertNoProjectRootRenameChanges(e,t){if(!e)return;let n=e.filter(o=>am(o));if(n.length!==0)throw new wt("err.sync.projectRootRenameUnsupported",{actionName:t,paths:Ak(n),changes:n})}clearSyncStatusTargets(e){this.context.clearSyncStatusTargets(e)}hasKnownChanges(e){return e!==void 0}assertNoRemoteProjectUnavailableChanges(e,t){if(!e)return;let n=e.filter(o=>o.type==="remoteProjectUnavailable");if(n.length!==0)throw new wt("err.sync.projectUnavailable",{actionName:t,paths:Ak(n),changes:n})}getKnownChangeTargetRemotePaths(e){return Qc([...e])}getKnownChangeTargets(e){return new Set(xk([...e]))}async resolveTargetRemotePaths(e,t="server-backed"){if(!e)return;let n=this.createPathResolver();return new Set(await Promise.all(e.map(o=>n.resolve(o,t))))}filterChangesByTargets(e,t){if(!t)return e;let n=Ei([...t]);return e.filter(n)}expandTargetsForRenameChanges(e,t){if(!e)return;let n,o=i=>{e.has(i)||(n||(n=new Set(e)),n.add(i))};for(let i of t)i.type!=="renamed"&&i.type!=="remoteRenamed"||(o(i.remotePath),i.oldRemotePath&&o(i.oldRemotePath));return n??e}async resolveRemotePath(e,t="server-backed"){return this.createPathResolver().resolve(e,t)}reportDiagnostic(e){Oa.warn(this.createDiagnosticLogMessage(e))}createDiagnosticLogMessage(e){let t=[`sync diagnostic: ${Zn(e.errorInfo)||e.message}`,`workspaceRoot=${this.workspaceRoot}`,`serverUrl=${this.serverUrl}`];return e.path&&t.push(`path=${e.path}`),e.errorInfo!==void 0&&t.push(`errorInfo=${this.stringifyDiagnosticValue(e.errorInfo)}`),t.join(`
22
22
  `)}stringifyDiagnosticValue(e){if(e instanceof Error)return`${e.message}${e.stack?`
23
- `+e.stack:""}`;if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return String(e)}}},Dt=class extends oi{},Ae=class extends oi{async applyFileMutationResponses(e){let t=this.createMirrorStore(),n=this.createWorkspaceStore(t);await new ei({workspace:n,mirror:t,getApiClient:()=>this.getApiClient()}).apply(e,this.task)}async cleanupEmptyOrphanParents(e,t,n){if(e.length===0)return;let o=new Set;pa.debug(`orphan cleanup start: deletedPaths=${e.length}`);for(let i of e)await this.cleanupAncestorsIfEmpty(Su.posix.dirname(i),o,t,n);pa.debug(`orphan cleanup done: visitedAncestors=${o.size}`)}async cleanupAncestorsIfEmpty(e,t,n,o){let i=e;for(;i!=="/"&&i!=="."&&!t.has(i);){if(t.add(i),await n.exists(i)){pa.debug(`orphan cleanup stop at tracked: remotePath=${i}`);return}if(!await o.removeEmptyOrphanDirectory(i))return;i=Su.posix.dirname(i)}}}});var Gv=z((nz,Kv)=>{var XF=function(){var r=256,e=t();function t(){for(var o=new Array(r),i=0;i<o.length;i++)o[i]=new Array(r);for(var i=0;i<r;i++)for(var a=0;a<r;a++){for(var s=i,c=a,l=0,p=0;p<4;p++){var m=Math.abs(s%4-c%4);m==3?l+=m*2:l+=m,p<3&&(s=Math.floor(s/4),c=Math.floor(c/4))}o[i][a]=l}return o}var n=function(o,i){return e[o][i]};return n}();Kv.exports=XF});var Ju=z((oz,Jv)=>{var QF=Gv(),ZF=function(r){var e=function(t){for(var n=0,o=0;o<r.length;o++)n+=QF(r[o],t.getValue(o));return n};this.calculateDifference=function(t){return e(t)},this.getValue=function(t){return r[t]}};Jv.exports=ZF});var Yu=z((iz,Yv)=>{var eM=function(r){var e=function(t,n){var o=t.length;if(o!=n.length)return!1;for(;o--;)if(t[o]!==n[o])return!1;return!0};this.calculateDifference=function(t){return e(r,t.getValue())?0:1},this.getValue=function(){return r}};Yv.exports=eM});var Xu=z((az,Xv)=>{Xv.exports=function(r){var e=(r&240)>>4&15;return e|=(r&15)<<4&240,e}});var Zv=z((sz,Qv)=>{var Qu=Xu(),tM=function(){return function(r){var e=1,t=32,n=function(l){for(var p="",m=0;m<l.length;m++)l[m]<16&&(p+="0"),p+=l[m].toString(16).toUpperCase();return p},o=function(l){for(var p=new Array(e),m=0;m<e;m++)p[m]=Qu(l.getValue()[m]);return n(p)},i=function(l){return n([Qu(l.getValue())])},a=function(l){return n([Qu(l.getValue())])},s=function(l){for(var p=new Array(t),m=0;m<t;m++)p[m]=l.getValue(t-1-m);return n(p)},c="";return c+=o(r.getChecksum()),c+=i(r.getLValue()),c+=a(r.getQ()),c+=s(r.getBody()),c}}();Qv.exports=tM});var Zu=z((cz,ek)=>{var rM=Zv(),nM=function(r,e,t,n){this.getLValue=function(){return e},this.getQ=function(){return t},this.getChecksum=function(){return r},this.getBody=function(){return n},this.calculateDifference=function(o,i){var a=0;return i&&(a+=e.calculateDifference(o.getLValue())),a+=t.calculateDifference(o.getQ()),a+=r.calculateDifference(o.getChecksum()),a+=n.calculateDifference(o.getBody()),a},this.toString=function(){return rM(this)}};ek.exports=nM});var em=z((lz,tk)=>{tk.exports=function(r,e,t){var n=Math.abs(e-r),o=t-n;return Math.min(n,o)}});var tm=z((pz,rk)=>{var oM=em(),iM=function(r){var e=256;this.calculateDifference=function(t){var n=oM(r,t.getValue(),e);return n===0?0:n===1?1:n*12},this.getValue=function(){return r}};rk.exports=iM});var rm=z((dz,ok)=>{var nk=em(),aM=function(r){this.getQLo=function(){return r&15},this.getQHi=function(){return(r&240)>>4},this.calculateDifference=function(e){var t=16,n=0,o=nk(this.getQLo(),e.getQLo(),t);o<=1?n+=o:n+=(o-1)*12;var i=nk(this.getQHi(),e.getQHi(),t);return i<=1?n+=i:n+=(i-1)*12,n},this.getValue=function(){return r}};ok.exports=aM});var ak=z((uz,ik)=>{var sM=Ju(),cM=Yu(),lM=Zu(),pM=tm(),dM=rm(),uM=function(){var r=256,e=.09531018,t=.26236426,n=.4054651,o,i,a,s,c={LOW:656,MID:3199},l=function(y){return this.checksum=new cM(y),this},p=function(y){return this.lValue=new pM(f(y)),this},m=function(y){var C=function(v,P){var u=function(S,k){return(0|S&15)&15|(k&15)<<4};return new dM(u(v,P))};return this.q=new C(y.getQ1Ratio(),y.getQ2Ratio()),this},g=function(y){return this.body=new sM(y),this},d=function(){return new lM(this.checksum,this.lValue,this.q,this.body)},f=function(y){return y<=c.LOW?Math.floor(Math.log(y)/n)%r:y<=c.MID?Math.floor(Math.log(y)/t-8.72777)%r:Math.floor(Math.log(y)/e-62.5472)%r};return{withChecksum:l,withLength:p,withQuartiles:m,withBody:g,build:d}};ik.exports=uM});var ck=z((mz,sk)=>{var mM=ak(),hM=function(r,e,t,n){var o=512,i=32,a=function(p){return e[p]>0},s=function(){for(var p=0,m=0;m<i*4;m++)a(m)&&p++;return p>i*2},c=function(){return t>=o},l=function(){for(var p=new Array(i),m=0;m<i;m++){for(var g=0,d=0;d<4;d++){var f=e[4*m+d];n.getThird()<f?g+=3<<d*2:n.getSecond()<f?g+=2<<d*2:n.getFirst()<f&&(g+=1<<d*2)}p[m]=g}return p};this.isProcessedDataTooSimple=function(){return!c()||!s()},this.buildDigest=function(){return new mM().withChecksum(r).withLength(t).withQuartiles(n).withBody(l()).build()}};sk.exports=hM});var pk=z((hz,lk)=>{var fM=function(){var r=[1,87,49,12,176,178,102,166,121,193,6,84,249,230,44,163,14,197,213,181,161,85,218,80,64,239,24,226,236,142,38,200,110,177,104,103,141,253,255,50,77,101,81,18,45,96,31,222,25,107,190,70,86,237,240,34,72,242,20,214,244,227,149,235,97,234,57,22,60,250,82,175,208,5,127,199,111,62,135,248,174,169,211,58,66,154,106,195,245,171,17,187,182,179,0,243,132,56,148,75,128,133,158,100,130,126,91,13,153,246,216,219,119,68,223,78,83,88,201,99,122,11,92,32,136,114,52,10,138,30,48,183,156,35,61,26,143,74,251,94,129,162,63,152,170,7,115,167,241,206,3,150,55,59,151,220,90,53,23,131,125,173,15,238,79,95,89,16,105,137,225,224,217,160,37,123,118,73,2,157,46,116,9,145,134,228,207,212,202,215,69,229,27,188,67,124,168,252,42,4,29,108,21,247,19,205,39,203,233,40,186,147,198,192,155,33,164,191,98,204,165,180,117,76,140,36,210,172,41,54,159,8,185,232,113,196,231,47,146,120,51,65,28,144,254,221,93,189,194,139,112,43,71,109,184,209],e=function(t){var n=0;return t.forEach(function(o){n=r[n^o]}),n};return e}();lk.exports=fM});var mk=z((fz,uk)=>{var gM=pk(),dk=function(r,e,t,n){this.c1=r,this.c2=e,this.c3=t,this.salt=n};dk.prototype.getHash=function(){return gM([this.salt,this.c1,this.c2,this.c3])};uk.exports=dk});var fk=z((gz,hk)=>{var yM=mk(),CM=function(){var r=5,e=1,t=new Array(r),n=0,o=function(s){return t[s]},i=function(s,c,l,p){return new yM(s,c,l,p).getHash()},a=function(){return n>=r};this.put=function(s){t[this.getPivot()]=s&255,n++},this.getPivot=function(){return n%r},this.getTripletHashes=function(s){if(!a())return[];var c=s,l=(c+1)%r,p=(c+2)%r,m=(c+3)%r,g=(c+4)%r;return[i(t[c],t[g],t[m],2),i(t[c],t[g],t[p],3),i(t[c],t[m],t[p],5),i(t[c],t[m],t[l],7),i(t[c],t[g],t[l],11),i(t[c],t[p],t[l],13)]},this.getChecksum=function(s,c){if(!a())return null;for(var l=(s+4)%r,p=new Array(e),m=0;m<e;m++){var g=o(s),d=o(l),f=0,y=0;c&&(f=c[m]),m!==0&&(y=p[m-1]),p[m]=i(g,d,f,y)}return p}};hk.exports=CM});var yk=z((yz,gk)=>{var SM=function(r){if(r.length<e)throw new Error;var e=128,t=16,n=r.slice(0,e).sort(function(o,i){return o-i});this.getQ1Ratio=function(){return Math.floor(this.getFirst()*100/this.getThird())%t},this.getQ2Ratio=function(){return Math.floor(this.getSecond()*100/this.getThird())%t},this.getFirst=function(){return n[e/4-1]},this.getSecond=function(){return n[e/2-1]},this.getThird=function(){return n[e-e/4-1]}};gk.exports=SM});var Sk=z((Cz,Ck)=>{var vM=ck(),kM=fk(),wM=yk(),PM=function(){var r=256,e=function(n,o,i){var a=new wM(o);return new vM(i,o,n,a)},t=function(n){for(var o=n?n.length:0,i=Array.apply(null,Array(r)).map(Number.prototype.valueOf,0),a,s=new kM,c=this,l=function(d){i[d]?i[d]++:i[d]=1},p=0;p<o;p++){var m=n.charCodeAt(p),g=s.getPivot();s.put(m),a=s.getChecksum(g,a),s.getTripletHashes(g).forEach(l)}return e(o,i,a)};return t}();Ck.exports=PM});var kk=z((Sz,vk)=>{var nl=function(r){this.name="InsufficientComplexityError",this.message=r,this.stack=new Error().stack};nl.prototype=Object.create(Error.prototype);nl.prototype.constructor=nl;vk.exports=nl});var Pk=z((vz,wk)=>{var RM=Sk(),EM=kk();wk.exports=function(r){var e=RM(r);if(e.isProcessedDataTooSimple())throw new EM("Input data hasn't enough complexity");return e.buildDigest().toString()}});var Ek=z((kz,Rk)=>{var bM=Ju(),TM=Yu(),xM=Zu(),FM=tm(),MM=rm(),nm=Xu(),DM=function(){var r=32,e,t,n,o,i=function(d){var f=s(d),y=0;return c(f[y++]),l(f[y++]),p(f[y++]),m(g(f,y)),this},a=function(){return new xM(e,t,n,o)},s=function(d){for(var f=new Array(d.length/2),y=0;y<d.length;y+=2)f[y/2]=parseInt(d.substring(y,y+2),16);return f},c=function(d){e=new TM([nm(d)])},l=function(d){t=new FM([nm(d)])},p=function(d){n=new MM([nm(d)])},m=function(d){for(var f=new Array(d.length),y=0;y<d.length;y++)f[y]=d[d.length-1-y];o=new bM(f)},g=function(d,f){return d.slice(f,d.length)};return{withHash:i,build:a}};Rk.exports=DM});var hw=z((bG,Pl)=>{function cw(r){return Array.isArray(r)?r:[r]}var JD=void 0,mm="",aw=" ",um="\\",YD=/^\s+$/,XD=/(?:[^\\]|^)\\$/,QD=/^\\!/,ZD=/^\\#/,eI=/\r?\n/g,tI=/^\.{0,2}\/|^\.{1,2}$/,rI=/\/$/,ui="/",lw="node-ignore";typeof Symbol<"u"&&(lw=Symbol.for("node-ignore"));var pw=lw,mi=(r,e,t)=>(Object.defineProperty(r,e,{value:t}),t),nI=/([0-z])-([0-z])/g,dw=()=>!1,oI=r=>r.replace(nI,(e,t,n)=>t.charCodeAt(0)<=n.charCodeAt(0)?e:mm),iI=r=>{let{length:e}=r;return r.slice(0,e-e%2)},aI=[[/^\uFEFF/,()=>mm],[/((?:\\\\)*?)(\\?\s+)$/,(r,e,t)=>e+(t.indexOf("\\")===0?aw:mm)],[/(\\+?)\s/g,(r,e)=>{let{length:t}=e;return e.slice(0,t-t%2)+aw}],[/[\\$.|*+(){^]/g,r=>`\\${r}`],[/(?!\\)\?/g,()=>"[^/]"],[/^\//,()=>"^"],[/\//g,()=>"\\/"],[/^\^*\\\*\\\*\\\//,()=>"^(?:.*\\/)?"],[/^(?=[^^])/,function(){return/\/(?!$)/.test(this)?"^":"(?:^|\\/)"}],[/\\\/\\\*\\\*(?=\\\/|$)/g,(r,e,t)=>e+6<t.length?"(?:\\/[^\\/]+)*":"\\/.+"],[/(^|[^\\]+)(\\\*)+(?=.+)/g,(r,e,t)=>{let n=t.replace(/\\\*/g,"[^\\/]*");return e+n}],[/\\\\\\(?=[$.|*+(){^])/g,()=>um],[/\\\\/g,()=>um],[/(\\)?\[([^\]/]*?)(\\*)($|\])/g,(r,e,t,n,o)=>e===um?`\\[${t}${iI(n)}${o}`:o==="]"&&n.length%2===0?`[${oI(t)}${n}]`:"[]"],[/(?:[^*])$/,r=>/\/$/.test(r)?`${r}$`:`${r}(?=$|\\/$)`]],sI=/(^|\\\/)?\\\*$/,Ia="regex",kl="checkRegex",sw="_",cI={[Ia](r,e){return`${e?`${e}[^/]+`:"[^/]*"}(?=$|\\/$)`},[kl](r,e){return`${e?`${e}[^/]*`:"[^/]*"}(?=$|\\/$)`}},lI=r=>aI.reduce((e,[t,n])=>e.replace(t,n.bind(r)),r),wl=r=>typeof r=="string",pI=r=>r&&wl(r)&&!YD.test(r)&&!XD.test(r)&&r.indexOf("#")!==0,dI=r=>r.split(eI).filter(Boolean),hm=class{constructor(e,t,n,o,i,a){this.pattern=e,this.mark=t,this.negative=i,mi(this,"body",n),mi(this,"ignoreCase",o),mi(this,"regexPrefix",a)}get regex(){let e=sw+Ia;return this[e]?this[e]:this._make(Ia,e)}get checkRegex(){let e=sw+kl;return this[e]?this[e]:this._make(kl,e)}_make(e,t){let n=this.regexPrefix.replace(sI,cI[e]),o=this.ignoreCase?new RegExp(n,"i"):new RegExp(n);return mi(this,t,o)}},uI=({pattern:r,mark:e},t)=>{let n=!1,o=r;o.indexOf("!")===0&&(n=!0,o=o.substr(1)),o=o.replace(QD,"!").replace(ZD,"#");let i=lI(o);return new hm(r,e,o,t,n,i)},fm=class{constructor(e){this._ignoreCase=e,this._rules=[]}_add(e){if(e&&e[pw]){this._rules=this._rules.concat(e._rules._rules),this._added=!0;return}if(wl(e)&&(e={pattern:e}),pI(e.pattern)){let t=uI(e,this._ignoreCase);this._added=!0,this._rules.push(t)}}add(e){return this._added=!1,cw(wl(e)?dI(e):e).forEach(this._add,this),this._added}test(e,t,n){let o=!1,i=!1,a;this._rules.forEach(c=>{let{negative:l}=c;i===l&&o!==i||l&&!o&&!i&&!t||!c[n].test(e)||(o=!l,i=l,a=l?JD:c)});let s={ignored:o,unignored:i};return a&&(s.rule=a),s}},mI=(r,e)=>{throw new e(r)},Zr=(r,e,t)=>wl(r)?r?Zr.isNotRelative(r)?t(`path should be a \`path.relative()\`d string, but got "${e}"`,RangeError):!0:t("path must not be empty",TypeError):t(`path must be a string, but got \`${e}\``,TypeError),uw=r=>tI.test(r);Zr.isNotRelative=uw;Zr.convert=r=>r;var gm=class{constructor({ignorecase:e=!0,ignoreCase:t=e,allowRelativePaths:n=!1}={}){mi(this,pw,!0),this._rules=new fm(t),this._strictPathCheck=!n,this._initCache()}_initCache(){this._ignoreCache=Object.create(null),this._testCache=Object.create(null)}add(e){return this._rules.add(e)&&this._initCache(),this}addPattern(e){return this.add(e)}_test(e,t,n,o){let i=e&&Zr.convert(e);return Zr(i,e,this._strictPathCheck?mI:dw),this._t(i,t,n,o)}checkIgnore(e){if(!rI.test(e))return this.test(e);let t=e.split(ui).filter(Boolean);if(t.pop(),t.length){let n=this._t(t.join(ui)+ui,this._testCache,!0,t);if(n.ignored)return n}return this._rules.test(e,!1,kl)}_t(e,t,n,o){if(e in t)return t[e];if(o||(o=e.split(ui).filter(Boolean)),o.pop(),!o.length)return t[e]=this._rules.test(e,n,Ia);let i=this._t(o.join(ui)+ui,t,n,o);return t[e]=i.ignored?i:this._rules.test(e,n,Ia)}ignores(e){return this._test(e,this._ignoreCache,!1).ignored}createFilter(){return e=>!this.ignores(e)}filter(e){return cw(e).filter(this.createFilter())}test(e){return this._test(e,this._testCache,!0)}},ym=r=>new gm(r),hI=r=>Zr(r&&Zr.convert(r),r,dw),mw=()=>{let r=t=>/^\\\\\?\\/.test(t)||/["<>|\u0000-\u001F]+/u.test(t)?t:t.replace(/\\/g,"/");Zr.convert=r;let e=/^[a-z]:\//i;Zr.isNotRelative=t=>e.test(t)||uw(t)};typeof process<"u"&&process.platform==="win32"&&mw();Pl.exports=ym;ym.default=ym;Pl.exports.isPathValid=hI;mi(Pl.exports,Symbol.for("setupWindows"),mw)});var iO={};Gl(iO,{runCli:()=>rR});module.exports=dh(iO);var tR=b(require("path"));var $e=class{constructor(e,t,n){this.id=e;this.payload=t;this.source=n}};var gi=class{listeners=new Map;on(e,t){let n=this.listeners.get(e);n||(n=new Set,this.listeners.set(e,n));let o=t,i=c=>o(c),a=n.size>0;n.add(i),!a&&n.size>0&&this.fireListenerChanged(e,!0);let s=!1;return{dispose:()=>{if(s)return;s=!0;let c=this.listeners.get(e);!c||!c.delete(i)||c.size===0&&(this.listeners.delete(e),this.fireListenerChanged(e,!1))}}}fire(e){let t=this.listeners.get(e.id);if(t)for(let n of[...t])n(e)}fireAsync(e){return Promise.resolve().then(()=>this.fire(e))}dispose(){this.listeners.clear()}fireListenerChanged(e,t){e!=="event.listener.changed"&&this.fire(new $e("event.listener.changed",{id:e,hasListeners:t},this))}};qt();var yi=(n=>(n.IDE="ide",n.CLI="cli",n.AUTO_SYNC="auto-sync",n))(yi||{}),Wa="5.0.1",cR=`succapp@${Wa}`;function Jl(r){return{source:r,agentVersion:cR}}var lR=Jl("ide"),uh=lR;function mh(r){uh=r}function po(){return uh}q();G();var Wn=b(require("fs")),ep=b(require("os")),$t=b(require("path")),Th=require("crypto");var vi=["trace","debug","info","warn","error"];var Sh={trace:0,debug:1,info:2,warn:3,error:4},vh=["TRACE","DEBUG","INFO","WARN","ERROR"],kR=new Set(vi);function wR(r){return typeof r=="string"&&kR.has(r)}function ho(r){let e=r?.trim().toLowerCase();return wR(e)?e:void 0}var PR=30,RR=2e3,ER=24*60*60*1e3,bR=/^succapp-\d{4}-\d{2}-\d{2}\.log$/,TR=/^succapp-\d{8}T\d{6}\.\d{3}Z-p\d+-[0-9a-f]+\.log$/,$a=class{disabled=!1;levelOrdinal;stream;logFile;constructor(e={}){this.levelOrdinal=Sh[e.level??"info"],this.logFile=e.logFile,this.stream=e.logFile?this.createStream(e.logFile):void 0,e.startupInfo&&this.writeRaw(2,"cli log started",e.startupInfo)}async close(){let e=this.stream;!e||e.destroyed||await new Promise(t=>{let n=()=>{this.disabled=!0,t()};e.once("error",n),e.end(t)})}isTraceEnabled(){return this.isEnabled(0)}isDebugEnabled(){return this.isEnabled(1)}isInfoEnabled(){return this.isEnabled(2)}isWarnEnabled(){return this.isEnabled(3)}isErrorEnabled(){return this.isEnabled(4)}trace(e,...t){this.write(0,e,...t)}debug(e,...t){this.write(1,e,...t)}info(e,...t){this.write(2,e,...t)}warn(e,...t){this.write(3,e,...t)}error(e,...t){this.write(4,e,...t)}isEnabled(e){return!this.disabled&&this.stream!==void 0&&e>=this.levelOrdinal}write(e,t,...n){this.isEnabled(e)&&this.writeRaw(e,t,...n)}writeRaw(e,t,...n){if(this.disabled||this.stream===void 0)return;let o=[new Date().toISOString(),vh[e],bh(t),...n.map(bh)].join(" ");this.stream.write(`${o}
24
- `)}createStream(e){try{let t=Wn.createWriteStream(e,{flags:"a"});return t.on("error",()=>{this.disabled=!0}),t}catch{this.disabled=!0;return}}};async function xh(r={}){let e=r.level??"info",t=r.logDir??$t.join(MR(r.env),"logs"),n=new Date,o=(0,Th.randomBytes)(3).toString("hex");try{await Wn.promises.mkdir(t,{recursive:!0});let i=$t.join(t,DR(n,process.pid,o)),a=new $a({level:e,logFile:i,startupInfo:{runId:o,pid:process.pid,cwd:r.cwd,level:e}});return xR(t,{activeLogFile:i,retentionDays:r.retentionDays,maxFiles:r.maxFiles}).catch(s=>{a.warn("cli log cleanup failed",s)}),a}catch{return new $a({level:e})}}async function xR(r,e={}){let t=await FR(r),n=e.activeLogFile?$t.resolve(e.activeLogFile):void 0,o=OR(e.retentionDays),i=_R(e.maxFiles),a=Date.now()-o*ER,s=new Set;for(let l of t)$t.resolve(l.filePath)!==n&&l.mtimeMs<a&&await Eh(l.filePath)&&s.add(l.filePath);let c=t.filter(l=>!s.has(l.filePath)).sort((l,p)=>l.mtimeMs-p.mtimeMs);for(;c.length>i;){let l=c.shift();if(!l)break;if($t.resolve(l.filePath)===n){c.push(l);continue}await Eh(l.filePath)&&s.add(l.filePath)}return{deletedFiles:s.size}}async function FR(r){let e;try{e=await Wn.promises.readdir(r,{withFileTypes:!0})}catch(o){if(tp(o,"ENOENT"))return[];throw o}let t=e.filter(o=>o.isFile()).map(o=>({filePath:$t.join(r,o.name),kind:AR(o.name)})).filter(o=>o.kind!==void 0);return(await Promise.all(t.map(async o=>{let i=await IR(o.filePath);if(i)return{filePath:o.filePath,mtimeMs:i.mtimeMs,size:i.size,kind:o.kind}}))).filter(o=>o!==void 0).sort((o,i)=>o.filePath.localeCompare(i.filePath))}function MR(r=process.env){return process.platform==="win32"?$t.join(r.LOCALAPPDATA||$t.join(ep.homedir(),"AppData","Local"),"succapp"):$t.join(r.XDG_CACHE_HOME||$t.join(ep.homedir(),".cache"),"succapp")}function DR(r,e,t){return`succapp-${r.toISOString().replace(/[-:]/g,"")}-p${e}-${t}.log`}async function IR(r){try{return await Wn.promises.stat(r)}catch(e){if(tp(e,"ENOENT"))return;throw e}}async function Eh(r){try{return await Wn.promises.unlink(r),!0}catch(e){if(tp(e,"ENOENT"))return!1;throw e}}function AR(r){if(bR.test(r))return"legacy";if(TR.test(r))return"run"}function OR(r){return r===void 0||!Number.isFinite(r)||r<0?PR:Math.floor(r)}function _R(r){return r===void 0||!Number.isFinite(r)||r<1?RR:Math.floor(r)}function tp(r,e){return typeof r=="object"&&r!==null&&"code"in r&&r.code===e}function bh(r){if(r instanceof Error)return LR(r);if(typeof r=="string")return r;try{return JSON.stringify(r)??String(r)}catch{return String(r)}}function LR(r){return r.stack?r.stack:r.name&&r.message?`${r.name}: ${r.message}`:r.message||String(r)}var Vh=b(require("fs")),Ti=b(require("path"));q();Ce();D();G();ne();var ZR=T("cli.localizer"),Ya=class r{constructor(e,t,n){this.defaultBundle=e;this.localeBundle=t;this.unresolvedLocale=n}static async create(e={}){let t=e.bundleDir??rE(),n=await Bh(Ti.join(t,"bundle.l10n.json"))??{},o=eE(e.locale);if(!o)return new r(n,{});let i=Ti.join(t,`bundle.l10n.${o}.json`),a=await Bh(i);return a||ZR.debug("CLI l10n bundle not found, falling back to default bundle",i,e.bundleDir?"configured bundleDir":"default bundleDir"),new r(n,a??{},a?void 0:e.locale)}t(e,...t){let n=this.localeBundle[e]??this.defaultBundle[e]??e;return qa(t)?nn(n,t[0]):nn(n,...t)}};async function Bh(r){try{let e=await Vh.promises.readFile(r,"utf8"),t=JSON.parse(e);U(V(t),`l10n bundle root is not an object: ${r}`);let n={};for(let[o,i]of Object.entries(t))typeof i=="string"&&(n[o]=i);return n}catch(e){if(F(e))return;throw e}}function eE(r){let e=tE(r);if(!(!e||e==="en"||e.startsWith("en-")))return e==="zh"?"zh-cn":e}function tE(r){if(!r)return;let e=r.split(".")[0].trim();if(!(!e||e==="C"||e==="POSIX"))return e.replace(/_/g,"-").toLowerCase()}function rE(){return Ti.resolve(__dirname,"..","..","..","..","l10n")}q();Ar();var cp=100,$h=100,Qa=class extends go{constructor(t,n){super(void 0,0,n);this.output=t}lastProgressKey;doStart(t){this.lastProgressKey=void 0,this.emitProgress(0,t)}doProgress(t,n){this.emitProgress(t,this.getProgressTotal())}emitProgress(t,n){let o=oE(t,n,this.message),i=`${o.message??""}:${o.current}:${o.total??""}:${o.percent??""}`;i!==this.lastProgressKey&&(this.lastProgressKey=i,this.output.progress(o,()=>iE(o)))}};function oE(r,e,t){let n=sp(r);if(e===void 0||e<=0)return t?{message:t,current:n}:{current:n};let o=sp(e),i={current:n,total:o,percent:sp(Math.min(n/o,1)*cp)};return t?{message:t,...i}:i}function iE(r){if(r.total!==void 0&&r.percent!==void 0){if(r.percent>=cp)return"";let e=Math.min(Math.max(Math.round(r.percent),0),cp-1);return r.message?h("cli.out.task.progressMessagePercent",r.message,e):h("cli.out.task.progressPercent",e)}return r.message?h("cli.out.task.progressMessageText",r.message,r.current):h("cli.out.task.progressText",r.current)}function sp(r){return Math.round(r*$h)/$h}D();q();ne();function Kh(r){return bi(r)?cE(r.category):1}function sE(r){return r instanceof Error?r.message||r.name:qn(r)||h("common.err.unexpected")}function Za(r,e){return bi(r)?lE(r,e):{code:"error",name:r instanceof Error&&r.name||"Error",message:sE(r),internal:!0,stack:r instanceof Error?r.stack:void 0,cause:op(r)}}function cE(r){switch(r){case"usage":return 2;case"lockBusy":return 3;case"lockCompromised":return 4;case"networkAuth":return 5;case"conflict":return 6;case"cancel":return 130;default:return 1}}function lE(r,e){let t=e?Jh(r.properties,e):r.properties;return{code:r.errorCode,name:r.name,message:pE(r,t),hint:dE(r,t),details:uE(r,t,e),internal:!1,category:r.category,style:r.style,errorType:r.errorType==null?void 0:String(r.errorType),errorDialogStyle:r.errorDialogStyle,hintMessage:r.hintMessage,locationPath:r.locationPath,properties:r.properties}}function pE(r,e){return Gh(r.errorCode,e)??Wh(r)}function Gh(r,e){let t=dp(e),n=pp(r,e),o=Ct(n,t);if(o){if(n!==r)return o;let s=Ct(`${r}.desc`,t);return s?`${o}
25
- ${s}`:o}let i=n===r?void 0:Ct(r,t);if(!i)return;let a=Ct(`${r}.desc`,t);return a?`${i}
26
- ${a}`:i}function dE(r,e){let t=Uh(r);if(t)return t;let n=dp(e),o=pp(r.errorCode,e);if(o!==r.errorCode){let i=Ct(`${o}.hint`,n);if(i)return i}if(cr(n.sources)){let i=Ct(`${r.errorCode}.hintWithSources`,n);if(i)return i}return Ct(`${r.errorCode}.hint`,n)}function pp(r,e){let t=cr(e.reason);return t?`${r}.${t}`:r}function uE(r,e,t){let n=[...CE(e.issues,t),...gE(r.errorCode,e),...SE(e.sqlInfos)];return n.length>0?n:void 0}function Jh(r,e){let t=mE(e);return t.size===0?r:{...r,input:lp(r.input,t),option:lp(r.option,t),flag:lp(r.flag,t),sources:Hh(r.sources,t),inputs:Hh(r.inputs,t)}}function mE(r){let e=new Map;for(let n of r.commandSpec.flags)n.alias&&e.set(n.alias,n);let t=new Map;for(let n of r.commandArgv){if(n==="--")break;if(n.startsWith("--")||!n.startsWith("-")||n.length<=1)continue;let o=n.slice(1);for(let i=0;i<o.length;i++){let a=o[i],s=e.get(a);if(s&&(t.set(s.name,`-${a}`),s.takesValue))break}}return t}function lp(r,e){return typeof r=="string"?Yh(r,e):r}function Hh(r,e){return Array.isArray(r)?r.map(t=>typeof t=="string"?Yh(t,e):t):r}function Yh(r,e){let t=/^--([A-Za-z0-9-]+)(.*)$/.exec(r);if(!t)return r;let n=e.get(t[1]);if(!n)return r;let o=t[2];return o.startsWith("=")?`${n} ${o.slice(1)}`:`${n}${o}`}function hE(r){let e=up(r.sourceIds);return e.length===0?[]:e.flatMap(t=>{let n=fE(t,r);return n?[n]:[]})}function fE(r,e){let t=cr(e.commandName),n=cr(e.envName)??"SUCCAPP_SERVER";switch(r){case"serverPositional":return t?h("cli.err.context.exampleCommandUrl",{commandName:t}):h("cli.err.context.exampleUrl");case"serverOption":return t?h("cli.err.context.exampleCommandServer",{commandName:t}):h("cli.err.context.exampleServerOpt");case"workspaceRemoteAdd":return h("cli.err.context.workspaceRemoteAdd");case"environmentServer":return t?h("cli.err.context.exampleEnvUrl",{envName:n,commandName:t}):h("cli.err.context.text",{envName:n});default:return}}function gE(r,e){let t=up(e.details),n=dp(e),o=pp(r,e);if(o!==r){let a=Ct(`${o}.desc`,n);a&&t.push(a)}let i=cr(e.detailKey);if(i){let a=Ct(`${r}.detail.${i}`,n);a&&t.push(a)}return t}function dp(r){let e={};for(let[n,o]of Object.entries(r)){if(typeof o=="string"||typeof o=="number"||typeof o=="boolean"){e[n]=n==="value"?zh(o):o;continue}let i=up(o);i.length>0&&(e[n]=i.join(", "))}e.input=yE(r),Object.hasOwn(r,"value")&&(e.value=zh(r.value));let t=hE(r);return t.length>0&&(e.sources=t.join(", ")),e}function yE(r){let e=cr(r.input);if(e)return e;let t=cr(r.option)??cr(r.flag);if(t)return t;let n=cr(r.argument);if(n)return n;let o=cr(r.inputId);return o?Ct(`cli.input.${o}`)??o:h("cli.input.value")}function zh(r){return r==null||r===""?h("cli.out.value.none"):String(r)}function CE(r,e){return Array.isArray(r)?r.flatMap(t=>{if(!V(t))return[];let n=cr(t.errorCode);if(!n||!V(t.properties))return[];let o=e?Jh(t.properties,e):t.properties,i=Gh(n,o);return i?[i]:[]}):[]}function up(r){return Array.isArray(r)?r.flatMap(e=>typeof e=="string"&&e?[e]:[]):[]}function cr(r){return typeof r=="string"&&r?r:void 0}function SE(r){return Array.isArray(r)?r.flatMap((e,t)=>vE(e,t)):[]}function vE(r,e){if(!V(r))return[];let t=typeof r.sqlType=="string"?r.sqlType:h("cli.out.value.unknown"),n=typeof r.tableName=="string"?` ${r.tableName}`:"",o=kE(r);return[`#${e} ${t}${n}${o}`]}function kE(r){let e=[];return r.schemaMutation===!0&&e.push(h("cli.cmd.db.exec.schemaMutation")),r.dataMutation===!0&&r.manipulateAllRows===!0&&e.push(h("cli.cmd.db.exec.fullTableData")),e.length?` (${e.join(", ")})`:""}Ce();Ce();D();J();ne();D();var wE=/\/+$/,PE=/^https?:\/\//i,RE="127.0.0.1",EE="localhost";function mp(r){let e;try{e=new URL(r.trim())}catch(t){throw new Ka(r,t)}return e.hostname===RE&&(e.hostname=EE),e.pathname.length>1&&(e.pathname=e.pathname.replace(/\/+$/,"")),e}function Se(r){return mp(r).href.replace(wE,"")}function Qe(r,e){let t=mp(r),n=mp(e);return t.hostname===n.hostname&&t.port===n.port&&t.pathname===n.pathname}function xi(r){return r!==void 0&&PE.test(r)}var Jf=b(require("os")),Nr=b(require("path"));vt();var $f=b(require("fs"));function Ai(r,e=!1){let t=r.length,n=0,o="",i=0,a=16,s=0,c=0,l=0,p=0,m=0;function g(u,S){let k=0,R=0;for(;k<u||!S;){let w=r.charCodeAt(n);if(w>=48&&w<=57)R=R*16+w-48;else if(w>=65&&w<=70)R=R*16+w-65+10;else if(w>=97&&w<=102)R=R*16+w-97+10;else break;n++,k++}return k<u&&(R=-1),R}function d(u){n=u,o="",i=0,a=16,m=0}function f(){let u=n;if(r.charCodeAt(n)===48)n++;else for(n++;n<r.length&&wo(r.charCodeAt(n));)n++;if(n<r.length&&r.charCodeAt(n)===46)if(n++,n<r.length&&wo(r.charCodeAt(n)))for(n++;n<r.length&&wo(r.charCodeAt(n));)n++;else return m=3,r.substring(u,n);let S=n;if(n<r.length&&(r.charCodeAt(n)===69||r.charCodeAt(n)===101))if(n++,(n<r.length&&r.charCodeAt(n)===43||r.charCodeAt(n)===45)&&n++,n<r.length&&wo(r.charCodeAt(n))){for(n++;n<r.length&&wo(r.charCodeAt(n));)n++;S=n}else m=3;return r.substring(u,S)}function y(){let u="",S=n;for(;;){if(n>=t){u+=r.substring(S,n),m=2;break}let k=r.charCodeAt(n);if(k===34){u+=r.substring(S,n),n++;break}if(k===92){if(u+=r.substring(S,n),n++,n>=t){m=2;break}switch(r.charCodeAt(n++)){case 34:u+='"';break;case 92:u+="\\";break;case 47:u+="/";break;case 98:u+="\b";break;case 102:u+="\f";break;case 110:u+=`
27
- `;break;case 114:u+="\r";break;case 116:u+=" ";break;case 117:let w=g(4,!0);w>=0?u+=String.fromCharCode(w):m=4;break;default:m=5}S=n;continue}if(k>=0&&k<=31)if(Ii(k)){u+=r.substring(S,n),m=2;break}else m=6;n++}return u}function C(){if(o="",m=0,i=n,c=s,p=l,n>=t)return i=t,a=17;let u=r.charCodeAt(n);if(Mp(u)){do n++,o+=String.fromCharCode(u),u=r.charCodeAt(n);while(Mp(u));return a=15}if(Ii(u))return n++,o+=String.fromCharCode(u),u===13&&r.charCodeAt(n)===10&&(n++,o+=`
28
- `),s++,l=n,a=14;switch(u){case 123:return n++,a=1;case 125:return n++,a=2;case 91:return n++,a=3;case 93:return n++,a=4;case 58:return n++,a=6;case 44:return n++,a=5;case 34:return n++,o=y(),a=10;case 47:let S=n-1;if(r.charCodeAt(n+1)===47){for(n+=2;n<t&&!Ii(r.charCodeAt(n));)n++;return o=r.substring(S,n),a=12}if(r.charCodeAt(n+1)===42){n+=2;let k=t-1,R=!1;for(;n<k;){let w=r.charCodeAt(n);if(w===42&&r.charCodeAt(n+1)===47){n+=2,R=!0;break}n++,Ii(w)&&(w===13&&r.charCodeAt(n)===10&&n++,s++,l=n)}return R||(n++,m=1),o=r.substring(S,n),a=13}return o+=String.fromCharCode(u),n++,a=16;case 45:if(o+=String.fromCharCode(u),n++,n===t||!wo(r.charCodeAt(n)))return a=16;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return o+=f(),a=11;default:for(;n<t&&v(u);)n++,u=r.charCodeAt(n);if(i!==n){switch(o=r.substring(i,n),o){case"true":return a=8;case"false":return a=9;case"null":return a=7}return a=16}return o+=String.fromCharCode(u),n++,a=16}}function v(u){if(Mp(u)||Ii(u))return!1;switch(u){case 125:case 93:case 123:case 91:case 34:case 58:case 44:case 47:return!1}return!0}function P(){let u;do u=C();while(u>=12&&u<=15);return u}return{setPosition:d,getPosition:()=>n,scan:e?P:C,getToken:()=>a,getTokenValue:()=>o,getTokenOffset:()=>i,getTokenLength:()=>n-i,getTokenStartLine:()=>c,getTokenStartCharacter:()=>i-p,getTokenError:()=>m}}function Mp(r){return r===32||r===9}function Ii(r){return r===10||r===13}function wo(r){return r>=48&&r<=57}var Af;(function(r){r[r.lineFeed=10]="lineFeed",r[r.carriageReturn=13]="carriageReturn",r[r.space=32]="space",r[r._0=48]="_0",r[r._1=49]="_1",r[r._2=50]="_2",r[r._3=51]="_3",r[r._4=52]="_4",r[r._5=53]="_5",r[r._6=54]="_6",r[r._7=55]="_7",r[r._8=56]="_8",r[r._9=57]="_9",r[r.a=97]="a",r[r.b=98]="b",r[r.c=99]="c",r[r.d=100]="d",r[r.e=101]="e",r[r.f=102]="f",r[r.g=103]="g",r[r.h=104]="h",r[r.i=105]="i",r[r.j=106]="j",r[r.k=107]="k",r[r.l=108]="l",r[r.m=109]="m",r[r.n=110]="n",r[r.o=111]="o",r[r.p=112]="p",r[r.q=113]="q",r[r.r=114]="r",r[r.s=115]="s",r[r.t=116]="t",r[r.u=117]="u",r[r.v=118]="v",r[r.w=119]="w",r[r.x=120]="x",r[r.y=121]="y",r[r.z=122]="z",r[r.A=65]="A",r[r.B=66]="B",r[r.C=67]="C",r[r.D=68]="D",r[r.E=69]="E",r[r.F=70]="F",r[r.G=71]="G",r[r.H=72]="H",r[r.I=73]="I",r[r.J=74]="J",r[r.K=75]="K",r[r.L=76]="L",r[r.M=77]="M",r[r.N=78]="N",r[r.O=79]="O",r[r.P=80]="P",r[r.Q=81]="Q",r[r.R=82]="R",r[r.S=83]="S",r[r.T=84]="T",r[r.U=85]="U",r[r.V=86]="V",r[r.W=87]="W",r[r.X=88]="X",r[r.Y=89]="Y",r[r.Z=90]="Z",r[r.asterisk=42]="asterisk",r[r.backslash=92]="backslash",r[r.closeBrace=125]="closeBrace",r[r.closeBracket=93]="closeBracket",r[r.colon=58]="colon",r[r.comma=44]="comma",r[r.dot=46]="dot",r[r.doubleQuote=34]="doubleQuote",r[r.minus=45]="minus",r[r.openBrace=123]="openBrace",r[r.openBracket=91]="openBracket",r[r.plus=43]="plus",r[r.slash=47]="slash",r[r.formFeed=12]="formFeed",r[r.tab=9]="tab"})(Af||(Af={}));var _t=new Array(20).fill(0).map((r,e)=>" ".repeat(e)),Po=200,Dp={" ":{"\n":new Array(Po).fill(0).map((r,e)=>`
29
- `+" ".repeat(e)),"\r":new Array(Po).fill(0).map((r,e)=>"\r"+" ".repeat(e)),"\r\n":new Array(Po).fill(0).map((r,e)=>`\r
30
- `+" ".repeat(e))}," ":{"\n":new Array(Po).fill(0).map((r,e)=>`
31
- `+" ".repeat(e)),"\r":new Array(Po).fill(0).map((r,e)=>"\r"+" ".repeat(e)),"\r\n":new Array(Po).fill(0).map((r,e)=>`\r
32
- `+" ".repeat(e))}},Of=[`
23
+ `+e.stack:""}`;if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return String(e)}}},_t=class extends Ti{},We=class extends Ti{async applyFileMutationResponses(e){let t=this.createMirrorStore(),n=this.createWorkspaceStore(t);await new ki({workspace:n,mirror:t,getApiClient:()=>this.getApiClient()}).apply(e,this.task)}async cleanupEmptyOrphanParents(e,t,n){if(e.length===0)return;let o=new Set;Oa.debug(`orphan cleanup start: deletedPaths=${e.length}`);for(let i of e)await this.cleanupAncestorsIfEmpty(lm.posix.dirname(i),o,t,n);Oa.debug(`orphan cleanup done: visitedAncestors=${o.size}`)}async cleanupAncestorsIfEmpty(e,t,n,o){let i=e;for(;i!=="/"&&i!=="."&&!t.has(i);){if(t.add(i),await n.exists(i)){Oa.debug(`orphan cleanup stop at tracked: remotePath=${i}`);return}if(!await o.removeEmptyOrphanDirectory(i))return;i=lm.posix.dirname(i)}}}});var mw=G((C4,dw)=>{var aD=function(){var r=256,e=t();function t(){for(var o=new Array(r),i=0;i<o.length;i++)o[i]=new Array(r);for(var i=0;i<r;i++)for(var a=0;a<r;a++){for(var s=i,c=a,l=0,p=0;p<4;p++){var d=Math.abs(s%4-c%4);d==3?l+=d*2:l+=d,p<3&&(s=Math.floor(s/4),c=Math.floor(c/4))}o[i][a]=l}return o}var n=function(o,i){return e[o][i]};return n}();dw.exports=aD});var Nm=G((S4,hw)=>{var sD=mw(),cD=function(r){var e=function(t){for(var n=0,o=0;o<r.length;o++)n+=sD(r[o],t.getValue(o));return n};this.calculateDifference=function(t){return e(t)},this.getValue=function(t){return r[t]}};hw.exports=cD});var Wm=G((v4,fw)=>{var lD=function(r){var e=function(t,n){var o=t.length;if(o!=n.length)return!1;for(;o--;)if(t[o]!==n[o])return!1;return!0};this.calculateDifference=function(t){return e(r,t.getValue())?0:1},this.getValue=function(){return r}};fw.exports=lD});var Um=G((k4,gw)=>{gw.exports=function(r){var e=(r&240)>>4&15;return e|=(r&15)<<4&240,e}});var Cw=G((w4,yw)=>{var jm=Um(),pD=function(){return function(r){var e=1,t=32,n=function(l){for(var p="",d=0;d<l.length;d++)l[d]<16&&(p+="0"),p+=l[d].toString(16).toUpperCase();return p},o=function(l){for(var p=new Array(e),d=0;d<e;d++)p[d]=jm(l.getValue()[d]);return n(p)},i=function(l){return n([jm(l.getValue())])},a=function(l){return n([jm(l.getValue())])},s=function(l){for(var p=new Array(t),d=0;d<t;d++)p[d]=l.getValue(t-1-d);return n(p)},c="";return c+=o(r.getChecksum()),c+=i(r.getLValue()),c+=a(r.getQ()),c+=s(r.getBody()),c}}();yw.exports=pD});var Bm=G((P4,Sw)=>{var uD=Cw(),dD=function(r,e,t,n){this.getLValue=function(){return e},this.getQ=function(){return t},this.getChecksum=function(){return r},this.getBody=function(){return n},this.calculateDifference=function(o,i){var a=0;return i&&(a+=e.calculateDifference(o.getLValue())),a+=t.calculateDifference(o.getQ()),a+=r.calculateDifference(o.getChecksum()),a+=n.calculateDifference(o.getBody()),a},this.toString=function(){return uD(this)}};Sw.exports=dD});var Vm=G((R4,vw)=>{vw.exports=function(r,e,t){var n=Math.abs(e-r),o=t-n;return Math.min(n,o)}});var qm=G((E4,kw)=>{var mD=Vm(),hD=function(r){var e=256;this.calculateDifference=function(t){var n=mD(r,t.getValue(),e);return n===0?0:n===1?1:n*12},this.getValue=function(){return r}};kw.exports=hD});var $m=G((b4,Pw)=>{var ww=Vm(),fD=function(r){this.getQLo=function(){return r&15},this.getQHi=function(){return(r&240)>>4},this.calculateDifference=function(e){var t=16,n=0,o=ww(this.getQLo(),e.getQLo(),t);o<=1?n+=o:n+=(o-1)*12;var i=ww(this.getQHi(),e.getQHi(),t);return i<=1?n+=i:n+=(i-1)*12,n},this.getValue=function(){return r}};Pw.exports=fD});var Ew=G((T4,Rw)=>{var gD=Nm(),yD=Wm(),CD=Bm(),SD=qm(),vD=$m(),kD=function(){var r=256,e=.09531018,t=.26236426,n=.4054651,o,i,a,s,c={LOW:656,MID:3199},l=function(y){return this.checksum=new yD(y),this},p=function(y){return this.lValue=new SD(f(y)),this},d=function(y){var C=function(v,P){var h=function(S,k){return(0|S&15)&15|(k&15)<<4};return new vD(h(v,P))};return this.q=new C(y.getQ1Ratio(),y.getQ2Ratio()),this},g=function(y){return this.body=new gD(y),this},m=function(){return new CD(this.checksum,this.lValue,this.q,this.body)},f=function(y){return y<=c.LOW?Math.floor(Math.log(y)/n)%r:y<=c.MID?Math.floor(Math.log(y)/t-8.72777)%r:Math.floor(Math.log(y)/e-62.5472)%r};return{withChecksum:l,withLength:p,withQuartiles:d,withBody:g,build:m}};Rw.exports=kD});var Tw=G((M4,bw)=>{var wD=Ew(),PD=function(r,e,t,n){var o=512,i=32,a=function(p){return e[p]>0},s=function(){for(var p=0,d=0;d<i*4;d++)a(d)&&p++;return p>i*2},c=function(){return t>=o},l=function(){for(var p=new Array(i),d=0;d<i;d++){for(var g=0,m=0;m<4;m++){var f=e[4*d+m];n.getThird()<f?g+=3<<m*2:n.getSecond()<f?g+=2<<m*2:n.getFirst()<f&&(g+=1<<m*2)}p[d]=g}return p};this.isProcessedDataTooSimple=function(){return!c()||!s()},this.buildDigest=function(){return new wD().withChecksum(r).withLength(t).withQuartiles(n).withBody(l()).build()}};bw.exports=PD});var xw=G((x4,Mw)=>{var RD=function(){var r=[1,87,49,12,176,178,102,166,121,193,6,84,249,230,44,163,14,197,213,181,161,85,218,80,64,239,24,226,236,142,38,200,110,177,104,103,141,253,255,50,77,101,81,18,45,96,31,222,25,107,190,70,86,237,240,34,72,242,20,214,244,227,149,235,97,234,57,22,60,250,82,175,208,5,127,199,111,62,135,248,174,169,211,58,66,154,106,195,245,171,17,187,182,179,0,243,132,56,148,75,128,133,158,100,130,126,91,13,153,246,216,219,119,68,223,78,83,88,201,99,122,11,92,32,136,114,52,10,138,30,48,183,156,35,61,26,143,74,251,94,129,162,63,152,170,7,115,167,241,206,3,150,55,59,151,220,90,53,23,131,125,173,15,238,79,95,89,16,105,137,225,224,217,160,37,123,118,73,2,157,46,116,9,145,134,228,207,212,202,215,69,229,27,188,67,124,168,252,42,4,29,108,21,247,19,205,39,203,233,40,186,147,198,192,155,33,164,191,98,204,165,180,117,76,140,36,210,172,41,54,159,8,185,232,113,196,231,47,146,120,51,65,28,144,254,221,93,189,194,139,112,43,71,109,184,209],e=function(t){var n=0;return t.forEach(function(o){n=r[n^o]}),n};return e}();Mw.exports=RD});var Dw=G((F4,Iw)=>{var ED=xw(),Fw=function(r,e,t,n){this.c1=r,this.c2=e,this.c3=t,this.salt=n};Fw.prototype.getHash=function(){return ED([this.salt,this.c1,this.c2,this.c3])};Iw.exports=Fw});var Ow=G((I4,Aw)=>{var bD=Dw(),TD=function(){var r=5,e=1,t=new Array(r),n=0,o=function(s){return t[s]},i=function(s,c,l,p){return new bD(s,c,l,p).getHash()},a=function(){return n>=r};this.put=function(s){t[this.getPivot()]=s&255,n++},this.getPivot=function(){return n%r},this.getTripletHashes=function(s){if(!a())return[];var c=s,l=(c+1)%r,p=(c+2)%r,d=(c+3)%r,g=(c+4)%r;return[i(t[c],t[g],t[d],2),i(t[c],t[g],t[p],3),i(t[c],t[d],t[p],5),i(t[c],t[d],t[l],7),i(t[c],t[g],t[l],11),i(t[c],t[p],t[l],13)]},this.getChecksum=function(s,c){if(!a())return null;for(var l=(s+4)%r,p=new Array(e),d=0;d<e;d++){var g=o(s),m=o(l),f=0,y=0;c&&(f=c[d]),d!==0&&(y=p[d-1]),p[d]=i(g,m,f,y)}return p}};Aw.exports=TD});var Lw=G((D4,_w)=>{var MD=function(r){if(r.length<e)throw new Error;var e=128,t=16,n=r.slice(0,e).sort(function(o,i){return o-i});this.getQ1Ratio=function(){return Math.floor(this.getFirst()*100/this.getThird())%t},this.getQ2Ratio=function(){return Math.floor(this.getSecond()*100/this.getThird())%t},this.getFirst=function(){return n[e/4-1]},this.getSecond=function(){return n[e/2-1]},this.getThird=function(){return n[e-e/4-1]}};_w.exports=MD});var Ww=G((A4,Nw)=>{var xD=Tw(),FD=Ow(),ID=Lw(),DD=function(){var r=256,e=function(n,o,i){var a=new ID(o);return new xD(i,o,n,a)},t=function(n){for(var o=n?n.length:0,i=Array.apply(null,Array(r)).map(Number.prototype.valueOf,0),a,s=new FD,c=this,l=function(m){i[m]?i[m]++:i[m]=1},p=0;p<o;p++){var d=n.charCodeAt(p),g=s.getPivot();s.put(d),a=s.getChecksum(g,a),s.getTripletHashes(g).forEach(l)}return e(o,i,a)};return t}();Nw.exports=DD});var jw=G((O4,Uw)=>{var Il=function(r){this.name="InsufficientComplexityError",this.message=r,this.stack=new Error().stack};Il.prototype=Object.create(Error.prototype);Il.prototype.constructor=Il;Uw.exports=Il});var Vw=G((_4,Bw)=>{var AD=Ww(),OD=jw();Bw.exports=function(r){var e=AD(r);if(e.isProcessedDataTooSimple())throw new OD("Input data hasn't enough complexity");return e.buildDigest().toString()}});var $w=G((L4,qw)=>{var _D=Nm(),LD=Wm(),ND=Bm(),WD=qm(),UD=$m(),Hm=Um(),jD=function(){var r=32,e,t,n,o,i=function(m){var f=s(m),y=0;return c(f[y++]),l(f[y++]),p(f[y++]),d(g(f,y)),this},a=function(){return new ND(e,t,n,o)},s=function(m){for(var f=new Array(m.length/2),y=0;y<m.length;y+=2)f[y/2]=parseInt(m.substring(y,y+2),16);return f},c=function(m){e=new LD([Hm(m)])},l=function(m){t=new WD([Hm(m)])},p=function(m){n=new UD([Hm(m)])},d=function(m){for(var f=new Array(m.length),y=0;y<m.length;y++)f[y]=m[m.length-1-y];o=new _D(f)},g=function(m,f){return m.slice(f,m.length)};return{withHash:i,build:a}};qw.exports=jD});var DP=G((Z3,Zl)=>{function bP(r){return Array.isArray(r)?r:[r]}var sO=void 0,ah="",RP=" ",ih="\\",cO=/^\s+$/,lO=/(?:[^\\]|^)\\$/,pO=/^\\!/,uO=/^\\#/,dO=/\r?\n/g,mO=/^\.{0,2}\/|^\.{1,2}$/,hO=/\/$/,Wi="/",TP="node-ignore";typeof Symbol<"u"&&(TP=Symbol.for("node-ignore"));var MP=TP,Ui=(r,e,t)=>(Object.defineProperty(r,e,{value:t}),t),fO=/([0-z])-([0-z])/g,xP=()=>!1,gO=r=>r.replace(fO,(e,t,n)=>t.charCodeAt(0)<=n.charCodeAt(0)?e:ah),yO=r=>{let{length:e}=r;return r.slice(0,e-e%2)},CO=[[/^\uFEFF/,()=>ah],[/((?:\\\\)*?)(\\?\s+)$/,(r,e,t)=>e+(t.indexOf("\\")===0?RP:ah)],[/(\\+?)\s/g,(r,e)=>{let{length:t}=e;return e.slice(0,t-t%2)+RP}],[/[\\$.|*+(){^]/g,r=>`\\${r}`],[/(?!\\)\?/g,()=>"[^/]"],[/^\//,()=>"^"],[/\//g,()=>"\\/"],[/^\^*\\\*\\\*\\\//,()=>"^(?:.*\\/)?"],[/^(?=[^^])/,function(){return/\/(?!$)/.test(this)?"^":"(?:^|\\/)"}],[/\\\/\\\*\\\*(?=\\\/|$)/g,(r,e,t)=>e+6<t.length?"(?:\\/[^\\/]+)*":"\\/.+"],[/(^|[^\\]+)(\\\*)+(?=.+)/g,(r,e,t)=>{let n=t.replace(/\\\*/g,"[^\\/]*");return e+n}],[/\\\\\\(?=[$.|*+(){^])/g,()=>ih],[/\\\\/g,()=>ih],[/(\\)?\[([^\]/]*?)(\\*)($|\])/g,(r,e,t,n,o)=>e===ih?`\\[${t}${yO(n)}${o}`:o==="]"&&n.length%2===0?`[${gO(t)}${n}]`:"[]"],[/(?:[^*])$/,r=>/\/$/.test(r)?`${r}$`:`${r}(?=$|\\/$)`]],SO=/(^|\\\/)?\\\*$/,rs="regex",Xl="checkRegex",EP="_",vO={[rs](r,e){return`${e?`${e}[^/]+`:"[^/]*"}(?=$|\\/$)`},[Xl](r,e){return`${e?`${e}[^/]*`:"[^/]*"}(?=$|\\/$)`}},kO=r=>CO.reduce((e,[t,n])=>e.replace(t,n.bind(r)),r),Ql=r=>typeof r=="string",wO=r=>r&&Ql(r)&&!cO.test(r)&&!lO.test(r)&&r.indexOf("#")!==0,PO=r=>r.split(dO).filter(Boolean),sh=class{constructor(e,t,n,o,i,a){this.pattern=e,this.mark=t,this.negative=i,Ui(this,"body",n),Ui(this,"ignoreCase",o),Ui(this,"regexPrefix",a)}get regex(){let e=EP+rs;return this[e]?this[e]:this._make(rs,e)}get checkRegex(){let e=EP+Xl;return this[e]?this[e]:this._make(Xl,e)}_make(e,t){let n=this.regexPrefix.replace(SO,vO[e]),o=this.ignoreCase?new RegExp(n,"i"):new RegExp(n);return Ui(this,t,o)}},RO=({pattern:r,mark:e},t)=>{let n=!1,o=r;o.indexOf("!")===0&&(n=!0,o=o.substr(1)),o=o.replace(pO,"!").replace(uO,"#");let i=kO(o);return new sh(r,e,o,t,n,i)},ch=class{constructor(e){this._ignoreCase=e,this._rules=[]}_add(e){if(e&&e[MP]){this._rules=this._rules.concat(e._rules._rules),this._added=!0;return}if(Ql(e)&&(e={pattern:e}),wO(e.pattern)){let t=RO(e,this._ignoreCase);this._added=!0,this._rules.push(t)}}add(e){return this._added=!1,bP(Ql(e)?PO(e):e).forEach(this._add,this),this._added}test(e,t,n){let o=!1,i=!1,a;this._rules.forEach(c=>{let{negative:l}=c;i===l&&o!==i||l&&!o&&!i&&!t||!c[n].test(e)||(o=!l,i=l,a=l?sO:c)});let s={ignored:o,unignored:i};return a&&(s.rule=a),s}},EO=(r,e)=>{throw new e(r)},on=(r,e,t)=>Ql(r)?r?on.isNotRelative(r)?t(`path should be a \`path.relative()\`d string, but got "${e}"`,RangeError):!0:t("path must not be empty",TypeError):t(`path must be a string, but got \`${e}\``,TypeError),FP=r=>mO.test(r);on.isNotRelative=FP;on.convert=r=>r;var lh=class{constructor({ignorecase:e=!0,ignoreCase:t=e,allowRelativePaths:n=!1}={}){Ui(this,MP,!0),this._rules=new ch(t),this._strictPathCheck=!n,this._initCache()}_initCache(){this._ignoreCache=Object.create(null),this._testCache=Object.create(null)}add(e){return this._rules.add(e)&&this._initCache(),this}addPattern(e){return this.add(e)}_test(e,t,n,o){let i=e&&on.convert(e);return on(i,e,this._strictPathCheck?EO:xP),this._t(i,t,n,o)}checkIgnore(e){if(!hO.test(e))return this.test(e);let t=e.split(Wi).filter(Boolean);if(t.pop(),t.length){let n=this._t(t.join(Wi)+Wi,this._testCache,!0,t);if(n.ignored)return n}return this._rules.test(e,!1,Xl)}_t(e,t,n,o){if(e in t)return t[e];if(o||(o=e.split(Wi).filter(Boolean)),o.pop(),!o.length)return t[e]=this._rules.test(e,n,rs);let i=this._t(o.join(Wi)+Wi,t,n,o);return t[e]=i.ignored?i:this._rules.test(e,n,rs)}ignores(e){return this._test(e,this._ignoreCache,!1).ignored}createFilter(){return e=>!this.ignores(e)}filter(e){return bP(e).filter(this.createFilter())}test(e){return this._test(e,this._testCache,!0)}},ph=r=>new lh(r),bO=r=>on(r&&on.convert(r),r,xP),IP=()=>{let r=t=>/^\\\\\?\\/.test(t)||/["<>|\u0000-\u001F]+/u.test(t)?t:t.replace(/\\/g,"/");on.convert=r;let e=/^[a-z]:\//i;on.isNotRelative=t=>e.test(t)||FP(t)};typeof process<"u"&&process.platform==="win32"&&IP();Zl.exports=ph;ph.default=ph;Zl.exports.isPathValid=bO;Ui(Zl.exports,Symbol.for("setupWindows"),IP)});var WL={};bp(WL,{runCli:()=>IE});module.exports=cf(WL);var FE=b(require("path"));var Ge=class{constructor(e,t,n){this.id=e;this.payload=t;this.source=n}};var Vi=class{listeners=new Map;on(e,t){let n=this.listeners.get(e);n||(n=new Set,this.listeners.set(e,n));let o=t,i=c=>o(c),a=n.size>0;n.add(i),!a&&n.size>0&&this.fireListenerChanged(e,!0);let s=!1;return{dispose:()=>{if(s)return;s=!0;let c=this.listeners.get(e);!c||!c.delete(i)||c.size===0&&(this.listeners.delete(e),this.fireListenerChanged(e,!1))}}}fire(e){let t=this.listeners.get(e.id);if(t)for(let n of[...t])n(e)}fireAsync(e){return Promise.resolve().then(()=>this.fire(e))}dispose(){this.listeners.clear()}fireListenerChanged(e,t){e!=="event.listener.changed"&&this.fire(new Ge("event.listener.changed",{id:e,hasListeners:t},this))}};Yt();var qi=(n=>(n.IDE="ide",n.CLI="cli",n.AUTO_SYNC="auto-sync",n))(qi||{}),ls="5.0.2",NE=`succapp@${ls}`;function Tp(r){return{source:r,agentVersion:NE}}var WE=Tp("ide"),lf=WE;function pf(r){lf=r}function Io(){return lf}D();K();var Kn=b(require("fs")),Dp=b(require("os")),Xt=b(require("path")),Rf=require("crypto");var zi=["trace","debug","info","warn","error"];var gf={trace:0,debug:1,info:2,warn:3,error:4},yf=["TRACE","DEBUG","INFO","WARN","ERROR"],YE=new Set(zi);function XE(r){return typeof r=="string"&&YE.has(r)}function Oo(r){let e=r?.trim().toLowerCase();return XE(e)?e:void 0}var QE=30,ZE=2e3,eb=24*60*60*1e3,tb=/^succapp-\d{4}-\d{2}-\d{2}\.log$/,rb=/^succapp-\d{8}T\d{6}\.\d{3}Z-p\d+-[0-9a-f]+\.log$/,fs=class{disabled=!1;levelOrdinal;stream;logFile;constructor(e={}){this.levelOrdinal=gf[e.level??"info"],this.logFile=e.logFile,this.stream=e.logFile?this.createStream(e.logFile):void 0,e.startupInfo&&this.writeRaw(2,"cli log started",e.startupInfo)}async close(){let e=this.stream;!e||e.destroyed||await new Promise(t=>{let n=()=>{this.disabled=!0,t()};e.once("error",n),e.end(t)})}isTraceEnabled(){return this.isEnabled(0)}isDebugEnabled(){return this.isEnabled(1)}isInfoEnabled(){return this.isEnabled(2)}isWarnEnabled(){return this.isEnabled(3)}isErrorEnabled(){return this.isEnabled(4)}trace(e,...t){this.write(0,e,...t)}debug(e,...t){this.write(1,e,...t)}info(e,...t){this.write(2,e,...t)}warn(e,...t){this.write(3,e,...t)}error(e,...t){this.write(4,e,...t)}isEnabled(e){return!this.disabled&&this.stream!==void 0&&e>=this.levelOrdinal}write(e,t,...n){this.isEnabled(e)&&this.writeRaw(e,t,...n)}writeRaw(e,t,...n){if(this.disabled||this.stream===void 0)return;let o=[new Date().toISOString(),yf[e],Pf(t),...n.map(Pf)].join(" ");this.stream.write(`${o}
24
+ `)}createStream(e){try{let t=Kn.createWriteStream(e,{flags:"a"});return t.on("error",()=>{this.disabled=!0}),t}catch{this.disabled=!0;return}}};async function Ef(r={}){let e=r.level??"info",t=r.logDir??Xt.join(ib(r.env),"logs"),n=new Date,o=(0,Rf.randomBytes)(3).toString("hex");try{await Kn.promises.mkdir(t,{recursive:!0});let i=Xt.join(t,ab(n,process.pid,o)),a=new fs({level:e,logFile:i,startupInfo:{runId:o,pid:process.pid,cwd:r.cwd,level:e}});return nb(t,{activeLogFile:i,retentionDays:r.retentionDays,maxFiles:r.maxFiles}).catch(s=>{a.warn("cli log cleanup failed",s)}),a}catch{return new fs({level:e})}}async function nb(r,e={}){let t=await ob(r),n=e.activeLogFile?Xt.resolve(e.activeLogFile):void 0,o=lb(e.retentionDays),i=pb(e.maxFiles),a=Date.now()-o*eb,s=new Set;for(let l of t)Xt.resolve(l.filePath)!==n&&l.mtimeMs<a&&await wf(l.filePath)&&s.add(l.filePath);let c=t.filter(l=>!s.has(l.filePath)).sort((l,p)=>l.mtimeMs-p.mtimeMs);for(;c.length>i;){let l=c.shift();if(!l)break;if(Xt.resolve(l.filePath)===n){c.push(l);continue}await wf(l.filePath)&&s.add(l.filePath)}return{deletedFiles:s.size}}async function ob(r){let e;try{e=await Kn.promises.readdir(r,{withFileTypes:!0})}catch(o){if(Ap(o,"ENOENT"))return[];throw o}let t=e.filter(o=>o.isFile()).map(o=>({filePath:Xt.join(r,o.name),kind:cb(o.name)})).filter(o=>o.kind!==void 0);return(await Promise.all(t.map(async o=>{let i=await sb(o.filePath);if(i)return{filePath:o.filePath,mtimeMs:i.mtimeMs,size:i.size,kind:o.kind}}))).filter(o=>o!==void 0).sort((o,i)=>o.filePath.localeCompare(i.filePath))}function ib(r=process.env){return process.platform==="win32"?Xt.join(r.LOCALAPPDATA||Xt.join(Dp.homedir(),"AppData","Local"),"succapp"):Xt.join(r.XDG_CACHE_HOME||Xt.join(Dp.homedir(),".cache"),"succapp")}function ab(r,e,t){return`succapp-${r.toISOString().replace(/[-:]/g,"")}-p${e}-${t}.log`}async function sb(r){try{return await Kn.promises.stat(r)}catch(e){if(Ap(e,"ENOENT"))return;throw e}}async function wf(r){try{return await Kn.promises.unlink(r),!0}catch(e){if(Ap(e,"ENOENT"))return!1;throw e}}function cb(r){if(tb.test(r))return"legacy";if(rb.test(r))return"run"}function lb(r){return r===void 0||!Number.isFinite(r)||r<0?QE:Math.floor(r)}function pb(r){return r===void 0||!Number.isFinite(r)||r<1?ZE:Math.floor(r)}function Ap(r,e){return typeof r=="object"&&r!==null&&"code"in r&&r.code===e}function Pf(r){if(r instanceof Error)return ub(r);if(typeof r=="string")return r;try{return JSON.stringify(r)??String(r)}catch{return String(r)}}function ub(r){return r.stack?r.stack:r.name&&r.message?`${r.name}: ${r.message}`:r.message||String(r)}var Wf=b(require("fs")),Zi=b(require("path"));D();we();F();K();te();var Mb=T("cli.localizer"),ks=class r{constructor(e,t,n){this.defaultBundle=e;this.localeBundle=t;this.unresolvedLocale=n}static async create(e={}){let t=e.bundleDir??Ib(),n=await Nf(Zi.join(t,"bundle.l10n.json"))??{},o=xb(e.locale);if(!o)return new r(n,{});let i=Zi.join(t,`bundle.l10n.${o}.json`),a=await Nf(i);return a||Mb.debug("CLI l10n bundle not found, falling back to default bundle",i,e.bundleDir?"configured bundleDir":"default bundleDir"),new r(n,a??{},a?void 0:e.locale)}t(e,...t){let n=this.localeBundle[e]??this.defaultBundle[e]??e;return hs(t)?ln(n,t[0]):ln(n,...t)}};async function Nf(r){try{let e=await Wf.promises.readFile(r,"utf8"),t=JSON.parse(e);$(z(t),`l10n bundle root is not an object: ${r}`);let n={};for(let[o,i]of Object.entries(t))typeof i=="string"&&(n[o]=i);return n}catch(e){if(x(e))return;throw e}}function xb(r){let e=Fb(r);if(!(!e||e==="en"||e.startsWith("en-")))return e==="zh"?"zh-cn":e}function Fb(r){if(!r)return;let e=r.split(".")[0].trim();if(!(!e||e==="C"||e==="POSIX"))return e.replace(/_/g,"-").toLowerCase()}function Ib(){return Zi.resolve(__dirname,"..","..","..","..","l10n")}D();jr();var jp=100,Uf=100,Rs=class extends mn{constructor(t,n){super(void 0,0,n);this.output=t}lastProgressKey;doStart(t){this.lastProgressKey=void 0,this.emitProgress(0,t)}doProgress(t,n){this.emitProgress(t,this.getProgressTotal())}doRetainedFinish(t){this.output.progress({message:t,retained:!0,current:0},()=>t)}emitProgress(t,n){let o=Ab(t,n,this.message),i=`${o.message??""}:${o.current}:${o.total??""}:${o.percent??""}`;i!==this.lastProgressKey&&(this.lastProgressKey=i,this.output.progress(o,()=>Ob(o)))}};function Ab(r,e,t){let n=Up(r);if(e===void 0||e<=0)return t?{message:t,current:n}:{current:n};let o=Up(e),i={current:n,total:o,percent:Up(Math.min(n/o,1)*jp)};return t?{message:t,...i}:i}function Ob(r){if(r.total!==void 0&&r.percent!==void 0){if(r.percent>=jp)return"";let e=Math.min(Math.max(Math.round(r.percent),0),jp-1);return r.message?u("cli.out.task.progressMessagePercent",r.message,e):u("cli.out.task.progressPercent",e)}return r.message?u("cli.out.task.progressMessageText",r.message,r.current):u("cli.out.task.progressText",r.current)}function Up(r){return Math.round(r*Uf)/Uf}F();D();te();function $f(r){return Qi(r)?Lb(r.category):1}function _b(r){return r instanceof Error?r.message||r.name:Zn(r)||u("common.err.unexpected")}function bs(r,e){return Qi(r)?Nb(r,e):{code:"error",name:r instanceof Error&&r.name||"Error",message:_b(r),internal:!0,stack:r instanceof Error?r.stack:void 0,cause:Lp(r)}}function Lb(r){switch(r){case"usage":return 2;case"lockBusy":return 3;case"lockCompromised":return 4;case"networkAuth":return 5;case"conflict":return 6;case"cancel":return 130;default:return 1}}function Nb(r,e){let t=e?zf(r.properties,e):r.properties;return{code:r.errorCode,name:r.name,message:Wb(r,t),hint:Ub(r,t),details:Vb(r,t,e),internal:!1,category:r.category,style:r.style,errorType:r.errorType==null?void 0:String(r.errorType),errorDialogStyle:r.errorDialogStyle,hintMessage:r.hintMessage,locationPath:r.locationPath,properties:r.properties}}function Wb(r,e){return Hf(r.errorCode,e)??Of(r)}function Hf(r,e){let t=qp(e),n=Vp(r,e),o=kt(n,t);if(o){if(n!==r)return o;let s=kt(`${r}.desc`,t);return s?`${o}
25
+ ${s}`:o}let i=n===r?void 0:kt(r,t);if(!i)return;let a=kt(`${r}.desc`,t);return a?`${i}
26
+ ${a}`:i}function Ub(r,e){let t=_f(r);if(t)return t;if(r.errorCode==="err.cli.unknownCommand"){let i=jb(e);if(i)return i}let n=qp(e),o=Vp(r.errorCode,e);if(o!==r.errorCode){let i=kt(`${o}.hint`,n);if(i)return i}if(ur(n.sources)){let i=kt(`${r.errorCode}.hintWithSources`,n);if(i)return i}return kt(`${r.errorCode}.hint`,n)}function jb(r){let e=Ts(r.suggestedCommands);if(e.length!==0)return u("err.cli.unknownCommand.suggestion.hint",{commands:Bb(e)})}function Bb(r){return r.length===1?` '${r[0]}'`:`
27
+ ${r.map(e=>` '${e}'`).join(`
28
+ `)}`}function Vp(r,e){let t=ur(e.reason);return t?`${r}.${t}`:r}function Vb(r,e,t){let n=[...Kb(e.issues,t),...zb(r.errorCode,e),...Jb(e.sqlInfos)];return n.length>0?n:void 0}function zf(r,e){let t=qb(e);return t.size===0?r:{...r,input:Bp(r.input,t),option:Bp(r.option,t),flag:Bp(r.flag,t),sources:jf(r.sources,t),inputs:jf(r.inputs,t)}}function qb(r){let e=new Map;for(let n of r.commandSpec.flags)n.alias&&e.set(n.alias,n);let t=new Map;for(let n of r.commandArgv){if(n==="--")break;if(n.startsWith("--")||!n.startsWith("-")||n.length<=1)continue;let o=n.slice(1);for(let i=0;i<o.length;i++){let a=o[i],s=e.get(a);if(s&&(t.set(s.name,`-${a}`),s.takesValue))break}}return t}function Bp(r,e){return typeof r=="string"?Gf(r,e):r}function jf(r,e){return Array.isArray(r)?r.map(t=>typeof t=="string"?Gf(t,e):t):r}function Gf(r,e){let t=/^--([A-Za-z0-9-]+)(.*)$/.exec(r);if(!t)return r;let n=e.get(t[1]);if(!n)return r;let o=t[2];return o.startsWith("=")?`${n} ${o.slice(1)}`:`${n}${o}`}function $b(r){let e=Ts(r.sourceIds);return e.length===0?[]:e.flatMap(t=>{let n=Hb(t,r);return n?[n]:[]})}function Hb(r,e){let t=ur(e.commandName),n=ur(e.envName)??"SUCCAPP_SERVER";switch(r){case"serverPositional":return t?Es(u("cli.err.context.exampleCommandUrl",{commandName:t})):u("cli.err.context.exampleUrl");case"serverOption":return t?Es(u("cli.err.context.exampleCommandServer",{commandName:t})):u("cli.err.context.exampleServerOpt");case"workspaceRemoteAdd":return Es(u("cli.err.context.workspaceRemoteAdd"));case"environmentServer":return t?Es(u("cli.err.context.exampleEnvUrl",{envName:n,commandName:t})):u("cli.err.context.text",{envName:n});default:return}}function Es(r){return`'${r}'`}function zb(r,e){let t=Ts(e.details),n=qp(e),o=Vp(r,e);if(o!==r){let a=kt(`${o}.desc`,n);a&&t.push(a)}let i=ur(e.detailKey);if(i){let a=kt(`${r}.detail.${i}`,n);a&&t.push(a)}return t}function qp(r){let e={};for(let[n,o]of Object.entries(r)){if(typeof o=="string"||typeof o=="number"||typeof o=="boolean"){e[n]=n==="value"?Vf(o):o;continue}let i=Ts(o);i.length>0&&(e[n]=n==="sources"?Bf(i):i.join(", "))}e.input=Gb(r),Object.hasOwn(r,"value")&&(e.value=Vf(r.value));let t=$b(r);return t.length>0&&(e.sources=Bf(t)),e}function Bf(r){return r.length<=1?r[0]??"":r.length===2?u("cli.err.context.sourceListPair",{first:r[0],second:r[1]}):u("cli.err.context.sourceListMany",{head:r.slice(0,-1).join(u("cli.err.context.sourceListSeparator")),tail:r[r.length-1]})}function Gb(r){let e=ur(r.input);if(e)return e;let t=ur(r.option)??ur(r.flag);if(t)return t;let n=ur(r.argument);if(n)return n;let o=ur(r.inputId);return o?kt(`cli.input.${o}`)??o:u("cli.input.value")}function Vf(r){return r==null||r===""?u("cli.out.value.none"):String(r)}function Kb(r,e){return Array.isArray(r)?r.flatMap(t=>{if(!z(t))return[];let n=ur(t.errorCode);if(!n||!z(t.properties))return[];let o=e?zf(t.properties,e):t.properties,i=Hf(n,o);return i?[i]:[]}):[]}function Ts(r){return Array.isArray(r)?r.flatMap(e=>typeof e=="string"&&e?[e]:[]):[]}function ur(r){return typeof r=="string"&&r?r:void 0}function Jb(r){return Array.isArray(r)?r.flatMap((e,t)=>Yb(e,t)):[]}function Yb(r,e){if(!z(r))return[];let t=typeof r.sqlType=="string"?r.sqlType:u("cli.out.value.unknown"),n=typeof r.tableName=="string"?` ${r.tableName}`:"",o=Xb(r);return[`#${e} ${t}${n}${o}`]}function Xb(r){let e=[];return r.schemaMutation===!0&&e.push(u("cli.cmd.db.exec.schemaMutation")),r.dataMutation===!0&&r.manipulateAllRows===!0&&e.push(u("cli.cmd.db.exec.fullTableData")),e.length?` (${e.join(", ")})`:""}we();var Os=require("crypto");F();U();te();F();var Qb=/\/+$/,Zb=/^https?:\/\//i,eT="127.0.0.1",tT="localhost";function $p(r){let e;try{e=new URL(r.trim())}catch(t){throw new ys(r,t)}return e.hostname===eT&&(e.hostname=tT),e.pathname.length>1&&(e.pathname=e.pathname.replace(/\/+$/,"")),e}function ge(r){return $p(r).href.replace(Qb,"")}function rt(r,e){let t=$p(r),n=$p(e);return t.hostname===n.hostname&&t.port===n.port&&t.pathname===n.pathname}function eo(r){return r!==void 0&&Zb.test(r)}function Ve(r){return r&&r.trim()?r:void 0}function Dt(r,e){if(r===void 0)return;let t=r.trim();if(!/^\d+$/.test(t))return;let n=Number(t);if(Number.isSafeInteger(n)&&!(e!==void 0&&n>e))return n}function Jf(r,e=void 0){if(r===void 0)return e;let t=r.trim();return t===""?e:t==="1"||hn(t,"true")||hn(t,"yes")||hn(t,"on")?!0:t==="0"||hn(t,"false")||hn(t,"no")||hn(t,"off")?!1:e}function hn(r,e){if(r===e)return!0;if(r==null||e===void 0||e===null||r.length!==e.length)return!1;for(let t=0;t<r.length;t++){let n=Kf(r.charCodeAt(t)),o=Kf(e.charCodeAt(t));if(n!==o)return!1}return!0}function Er(r){let e=0;for(let t of r){let n=t.codePointAt(0);n===void 0||rT(n)||(e+=nT(n)?2:1)}return e}function Lo(r,e){return`${r}${" ".repeat(Math.max(0,e-Er(r)))}`}function Yf(r){return r.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function Hp(r){return Buffer.from(r).toString("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function rT(r){return r<=31||r>=127&&r<=159||r>=768&&r<=879||r>=6832&&r<=6911||r>=7616&&r<=7679||r>=8400&&r<=8447||r>=65024&&r<=65039||r>=65056&&r<=65071||r===8203||r===8204||r===8205||r===8288}function nT(r){return r>=4352&&r<=4447||r===9001||r===9002||r>=11904&&r<=42191||r>=44032&&r<=55203||r>=63744&&r<=64255||r>=65040&&r<=65049||r>=65072&&r<=65135||r>=65280&&r<=65376||r>=65504&&r<=65510}function Kf(r){return r>=65&&r<=90?r+32:r}F();var Xf="SuccApp/2.0",Qf="X-Requested-With",Zf="XMLHttpRequest";F();U();un();te();Wo();var Kp=512;async function xs(r,e){r.ok||await gT(r,e);let t=await ig(r,e);if(t.trim().length===0)throw Jp(e,r,"empty response body");let n=yT(t,e,r);return ag(n,e,r),n}async function og(r,e){if(!eg(r.headers.get("content-type")??void 0))return;let t=await ig(r,e);if(t.trim().length===0)return;let n;try{n=JSON.parse(t)}catch{return}ag(n,e,r)}async function gT(r,e){if(r.status===401)throw new Oe({serverUrl:e.serverUrl});let t;try{t=await r.text()}catch(n){throw new mt(e.url,n instanceof Error?n:void 0)}throw new er(r.status,t,r.statusText,new Error(`SuccBI HTTP ${r.status} ${r.statusText}: ${e.url}`),r.headers.get("content-type")??void 0)}async function ig(r,e){try{return await r.text()}catch(t){throw Jp(e,r,"cannot read response body",t)}}function yT(r,e,t){try{return JSON.parse(r)}catch(n){throw Jp(e,t,"response body is not valid JSON",n,r)}}function ag(r,e,t){if(z(r)&&vT(r))throw CT(r,e,t)}function CT(r,e,t){let n=Ki(r),o=pn(n),i=tt(o)??tt(n),a=i??"err.net.invalidResponse",s={...It(o),...It(n),...sg(e,t),...i?{}:{reason:"missingErrorCode"}};return new fe(a,{message:o.message||n.message||a,properties:s,errorType:pr(o)??pr(n),errorDialogStyle:o.errorDialogStyle??n.errorDialogStyle,hintMessage:o.hintMessage??n.hintMessage,locationPath:o.locationPath??n.locationPath,cause:n})}function Jp(r,e,t,n,o){return new fe("err.net.invalidResponse",{properties:{...sg(r,e),reason:t,responsePreview:ST(o),responseTruncated:o!==void 0&&o.length>Kp},cause:n})}function sg(r,e){return{url:r.url,endpoint:r.endpoint??new URL(r.url).pathname,serverUrl:r.serverUrl,operation:r.operation,request:r.request,httpStatus:e.status,contentType:e.headers.get("content-type")??void 0}}function ST(r){if(r===void 0)return;let e=r.trim();if(e.length!==0)return e.length>Kp?`${e.slice(0,Kp)}...`:e}function vT(r){return typeof r.errorCode=="string"||typeof r.className=="string"||Array.isArray(r.stack)}async function fn(r,e){try{let t=await fetch(r,{...e,headers:kT(e?.headers)});return t.status>=500&&await ro(t,r),t}catch(t){throw t instanceof er||t instanceof mt?t:new mt(r,t instanceof Error?t:void 0)}}async function Fs(r){let e=`${r}/api/dev-tool/v2/server/ping`,t=await fn(e);return xs(t,{url:e,endpoint:"/server/ping",serverUrl:r})}async function ro(r,e){let t;try{t=await r.text()}catch(n){throw new mt(e,n instanceof Error?n:void 0)}throw new er(r.status,t,r.statusText,new Error(`SuccBI HTTP ${r.status} ${r.statusText}: ${e}`),r.headers.get("content-type")??void 0)}function Yp(r){if(!r)return{};if(r instanceof Headers){let e={};return r.forEach((t,n)=>{e[n]=t}),e}return Array.isArray(r)?Object.fromEntries(r):{...r}}function kT(r){let e=Yp(r);return ta(e,"User-Agent",Xf),ta(e,Qf,Zf),ta(e,"X-Succ-Client-Type","nodejs"),ta(e,"Accept","application/json"),ta(e,"Accept-Encoding","gzip"),e}function ta(r,e,t){Object.keys(r).some(o=>hn(o,e))||(r[e]=t)}var wT="SuccApp-Devtool",PT="SUCCAPP_OAUTH_APP_ID",RT="/api/oauth2/authorize",cg="/api/oauth2/token",lg="/api/oauth2/refreshToken";function Ds(){return process.env[PT]?.trim()||wT}function pg(r,e){let t=new URL(`${ge(r)}${RT}`);return t.searchParams.set("appid",e.appId??Ds()),t.searchParams.set("redirect_uri",e.redirectUri),t.searchParams.set("response_type","code"),t.searchParams.set("state",e.state),t.searchParams.set("code_challenge",e.codeChallenge),t.searchParams.set("code_challenge_method","S256"),t.toString()}async function ug(r,e){let t=ge(r),n=await mg(`${t}${cg}`,{grant_type:"code",appid:e.appId??Ds(),code:e.code,code_verifier:e.codeVerifier});return hg(t,cg,n)}async function dg(r,e){let t=ge(r),n=await mg(`${t}${lg}`,{refresh_token:e.refreshToken});return hg(t,lg,n)}async function mg(r,e){let t=await fn(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});return t.ok||await ro(t,r),t}async function hg(r,e,t){let n;try{n=await t.json()}catch(a){throw Is(r,e,"response body is not valid JSON",a)}if(!z(n))throw Is(r,e,"response body is not an object");if(n.result!==!0)throw Is(r,e,"token response result is not true");let o=Ut(n.access_token),i=Ut(n.refresh_token);if(!o||!i)throw Is(r,e,"token response misses token fields");return O({accessToken:o,refreshToken:i,expiresAt:ET(n.expires_in),scope:bT(n.scope)})}function ET(r){let e=typeof r=="number"?r:typeof r=="string"?Number(r):Number.NaN;if(!(!Number.isFinite(e)||e<=0))return new Date(Date.now()+e*1e3).toISOString()}function bT(r){return typeof r=="string"?Jn(r.split(/\s+/)):Jn(r)}function Is(r,e,t,n){return new fe("err.login.oauthTokenInvalid",{properties:{serverUrl:r,endpoint:e,reason:t},cause:n})}var Sg=b(require("http"));F();U();K();var TT=T("common.promise"),Xp=new WeakMap,Uo=new WeakMap;function Zp(r,e){return Qp(r)?.get(e)}function dr(r,e,t){let n=Qp(r);n||(n=new Map,Xp.set(r,n));let o=n.get(e);if(o)return o;let i=(async()=>t())().finally(()=>{let a=Qp(r);!a||a.get(e)!==i||(a.delete(e),a.size===0&&Xp.delete(r))});return n.set(e,i),i}function jo(r,e,t,n,o={}){let i=Uo.get(r);i||(i=new Map,Uo.set(r,i));let a=Date.now(),s=i.get(e);s&&MT(s.timer)&&i.delete(e);let c=i.get(e),l=c?.firstScheduledAt??a;c&&clearTimeout(c.timer);let p=Math.max(0,t);if(o.maxWaitMs!==void 0){let g=Math.max(0,l+o.maxWaitMs-a);p=Math.min(p,g)}let d=setTimeout(()=>{let g=Uo.get(r);g?.get(e)?.timer===d&&(g.delete(e),g.size===0&&Uo.delete(r)),Promise.resolve().then(n).catch(m=>TT.warn(`debounced task failed: ${e}`,m))},p);return i.set(e,{timer:d,firstScheduledAt:l}),d}function Bo(r,e){let t=Uo.get(r),n=t?.get(e)?.timer;return!t||!n?!1:(clearTimeout(n),t.delete(e),t.size===0&&Uo.delete(r),!0)}function Qp(r){return Xp.get(r)}function MT(r){return!r||typeof r!="object"?!1:r._destroyed===!0}async function fg(r,e){let t;try{return await Promise.race([r,new Promise(n=>{t=setTimeout(()=>n(!1),Math.max(0,e))})])}finally{t&&clearTimeout(t)}}var eu="127.0.0.1",gg="/callback",FT=2*60*1e3;async function vg(r){let e=!1,t,n,o=new Promise((l,p)=>{t=l,n=p}),i=Sg.createServer((l,p)=>{let d=new URL(l.url??"/",`http://${eu}`);if(d.pathname!==gg){ra(p,404,"Not Found");return}IT(d,p,r.state).then(g=>{e||(e=!0,t(g))}).catch(g=>{e||(e=!0,n(g))})});await DT(i);let a=i.address();if(!a||typeof a=="string")throw await As(i),new fe("err.login.oauthLoopbackFailed",{properties:{reason:"loopback server address is unavailable"}});let s=r.timeoutMs??FT,c=()=>{e||(e=!0,n(Cg()))};if(r.abortSignal?.aborted)throw await As(i),Cg();return r.abortSignal?.addEventListener("abort",c,{once:!0}),{redirectUri:`http://${eu}:${a.port}${gg}`,async waitForCallback(){try{let l=await fg(o,s);if(l===!1)throw new fe("err.login.oauthTimeout",{category:"networkAuth",style:"warn"});return l}finally{r.abortSignal?.removeEventListener("abort",c),await As(i)}},dispose(){return r.abortSignal?.removeEventListener("abort",c),As(i)}}}async function IT(r,e,t){if(r.searchParams.get("state")!==t)throw ra(e,400,"Authorization state does not match."),new fe("err.login.oauthStateMismatch",{category:"networkAuth",style:"warn"});if(r.searchParams.get("error"))throw ra(e,400,"Authorization failed."),yg("authorization server returned error");let i=r.searchParams.get("code");if(!i)throw ra(e,400,"Authorization code is missing."),yg("authorization code is missing");return ra(e,200,"Authorization completed. You can close this page."),{code:i}}function DT(r){return new Promise((e,t)=>{let n=o=>t(o);r.once("error",n),r.listen(0,eu,()=>{r.off("error",n),e()})})}function As(r){return new Promise(e=>{if(!r.listening){e();return}r.close(()=>e())})}function ra(r,e,t){r.writeHead(e,{"Content-Type":"text/html; charset=utf-8"}),r.end(`<!doctype html><html><body>${Yf(t)}</body></html>`)}function yg(r){return new fe("err.login.oauthInvalidCallback",{category:"networkAuth",style:"warn",properties:{reason:r}})}function Cg(){return new fe("err.base.cancel",{category:"cancel",style:"silent"})}async function wg(r,e={}){let t=e.appId??Ds(),n=kg(32),o=kg(64),i=AT(o),a=await vg({state:n,timeoutMs:e.timeoutMs,abortSignal:e.abortSignal});try{let s=pg(r,{appId:t,redirectUri:a.redirectUri,state:n,codeChallenge:i});e.onProgress?.({stage:"openingBrowser"});try{await e.openExternal?.(s)}catch{e.onProgress?.({stage:"manualAuthorizationUrl",authorizationUrl:s})}e.onProgress?.({stage:"waitingForCallback"});let c=await a.waitForCallback();e.onProgress?.({stage:"exchangingToken"});let l=await ug(r,{appId:t,code:c.code,codeVerifier:o});return{type:"oauth",token:l.accessToken,refreshToken:l.refreshToken,expiresAt:l.expiresAt,scope:l.scope}}finally{await a.dispose()}}function kg(r){return Hp((0,Os.randomBytes)(r))}function AT(r){return Hp((0,Os.createHash)("sha256").update(r).digest())}we();F();U();te();function tu(r,e=Date.now()){let t=Rg(r);return t!==void 0&&t<=e}function Pg(r,e,t=Date.now()){let n=Rg(r);return n!==void 0&&t>=n-e}function Rg(r){if(!r)return;let e=Date.parse(r);return Number.isFinite(e)?e:void 0}var wy=b(require("os")),qr=b(require("path"));Pt();var yy=b(require("fs"));function sa(r,e=!1){let t=r.length,n=0,o="",i=0,a=16,s=0,c=0,l=0,p=0,d=0;function g(h,S){let k=0,E=0;for(;k<h||!S;){let w=r.charCodeAt(n);if(w>=48&&w<=57)E=E*16+w-48;else if(w>=65&&w<=70)E=E*16+w-65+10;else if(w>=97&&w<=102)E=E*16+w-97+10;else break;n++,k++}return k<h&&(E=-1),E}function m(h){n=h,o="",i=0,a=16,d=0}function f(){let h=n;if(r.charCodeAt(n)===48)n++;else for(n++;n<r.length&&Go(r.charCodeAt(n));)n++;if(n<r.length&&r.charCodeAt(n)===46)if(n++,n<r.length&&Go(r.charCodeAt(n)))for(n++;n<r.length&&Go(r.charCodeAt(n));)n++;else return d=3,r.substring(h,n);let S=n;if(n<r.length&&(r.charCodeAt(n)===69||r.charCodeAt(n)===101))if(n++,(n<r.length&&r.charCodeAt(n)===43||r.charCodeAt(n)===45)&&n++,n<r.length&&Go(r.charCodeAt(n))){for(n++;n<r.length&&Go(r.charCodeAt(n));)n++;S=n}else d=3;return r.substring(h,S)}function y(){let h="",S=n;for(;;){if(n>=t){h+=r.substring(S,n),d=2;break}let k=r.charCodeAt(n);if(k===34){h+=r.substring(S,n),n++;break}if(k===92){if(h+=r.substring(S,n),n++,n>=t){d=2;break}switch(r.charCodeAt(n++)){case 34:h+='"';break;case 92:h+="\\";break;case 47:h+="/";break;case 98:h+="\b";break;case 102:h+="\f";break;case 110:h+=`
29
+ `;break;case 114:h+="\r";break;case 116:h+=" ";break;case 117:let w=g(4,!0);w>=0?h+=String.fromCharCode(w):d=4;break;default:d=5}S=n;continue}if(k>=0&&k<=31)if(aa(k)){h+=r.substring(S,n),d=2;break}else d=6;n++}return h}function C(){if(o="",d=0,i=n,c=s,p=l,n>=t)return i=t,a=17;let h=r.charCodeAt(n);if(Cu(h)){do n++,o+=String.fromCharCode(h),h=r.charCodeAt(n);while(Cu(h));return a=15}if(aa(h))return n++,o+=String.fromCharCode(h),h===13&&r.charCodeAt(n)===10&&(n++,o+=`
30
+ `),s++,l=n,a=14;switch(h){case 123:return n++,a=1;case 125:return n++,a=2;case 91:return n++,a=3;case 93:return n++,a=4;case 58:return n++,a=6;case 44:return n++,a=5;case 34:return n++,o=y(),a=10;case 47:let S=n-1;if(r.charCodeAt(n+1)===47){for(n+=2;n<t&&!aa(r.charCodeAt(n));)n++;return o=r.substring(S,n),a=12}if(r.charCodeAt(n+1)===42){n+=2;let k=t-1,E=!1;for(;n<k;){let w=r.charCodeAt(n);if(w===42&&r.charCodeAt(n+1)===47){n+=2,E=!0;break}n++,aa(w)&&(w===13&&r.charCodeAt(n)===10&&n++,s++,l=n)}return E||(n++,d=1),o=r.substring(S,n),a=13}return o+=String.fromCharCode(h),n++,a=16;case 45:if(o+=String.fromCharCode(h),n++,n===t||!Go(r.charCodeAt(n)))return a=16;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return o+=f(),a=11;default:for(;n<t&&v(h);)n++,h=r.charCodeAt(n);if(i!==n){switch(o=r.substring(i,n),o){case"true":return a=8;case"false":return a=9;case"null":return a=7}return a=16}return o+=String.fromCharCode(h),n++,a=16}}function v(h){if(Cu(h)||aa(h))return!1;switch(h){case 125:case 93:case 123:case 91:case 34:case 58:case 44:case 47:return!1}return!0}function P(){let h;do h=C();while(h>=12&&h<=15);return h}return{setPosition:m,getPosition:()=>n,scan:e?P:C,getToken:()=>a,getTokenValue:()=>o,getTokenOffset:()=>i,getTokenLength:()=>n-i,getTokenStartLine:()=>c,getTokenStartCharacter:()=>i-p,getTokenError:()=>d}}function Cu(r){return r===32||r===9}function aa(r){return r===10||r===13}function Go(r){return r>=48&&r<=57}var ay;(function(r){r[r.lineFeed=10]="lineFeed",r[r.carriageReturn=13]="carriageReturn",r[r.space=32]="space",r[r._0=48]="_0",r[r._1=49]="_1",r[r._2=50]="_2",r[r._3=51]="_3",r[r._4=52]="_4",r[r._5=53]="_5",r[r._6=54]="_6",r[r._7=55]="_7",r[r._8=56]="_8",r[r._9=57]="_9",r[r.a=97]="a",r[r.b=98]="b",r[r.c=99]="c",r[r.d=100]="d",r[r.e=101]="e",r[r.f=102]="f",r[r.g=103]="g",r[r.h=104]="h",r[r.i=105]="i",r[r.j=106]="j",r[r.k=107]="k",r[r.l=108]="l",r[r.m=109]="m",r[r.n=110]="n",r[r.o=111]="o",r[r.p=112]="p",r[r.q=113]="q",r[r.r=114]="r",r[r.s=115]="s",r[r.t=116]="t",r[r.u=117]="u",r[r.v=118]="v",r[r.w=119]="w",r[r.x=120]="x",r[r.y=121]="y",r[r.z=122]="z",r[r.A=65]="A",r[r.B=66]="B",r[r.C=67]="C",r[r.D=68]="D",r[r.E=69]="E",r[r.F=70]="F",r[r.G=71]="G",r[r.H=72]="H",r[r.I=73]="I",r[r.J=74]="J",r[r.K=75]="K",r[r.L=76]="L",r[r.M=77]="M",r[r.N=78]="N",r[r.O=79]="O",r[r.P=80]="P",r[r.Q=81]="Q",r[r.R=82]="R",r[r.S=83]="S",r[r.T=84]="T",r[r.U=85]="U",r[r.V=86]="V",r[r.W=87]="W",r[r.X=88]="X",r[r.Y=89]="Y",r[r.Z=90]="Z",r[r.asterisk=42]="asterisk",r[r.backslash=92]="backslash",r[r.closeBrace=125]="closeBrace",r[r.closeBracket=93]="closeBracket",r[r.colon=58]="colon",r[r.comma=44]="comma",r[r.dot=46]="dot",r[r.doubleQuote=34]="doubleQuote",r[r.minus=45]="minus",r[r.openBrace=123]="openBrace",r[r.openBracket=91]="openBracket",r[r.plus=43]="plus",r[r.slash=47]="slash",r[r.formFeed=12]="formFeed",r[r.tab=9]="tab"})(ay||(ay={}));var Bt=new Array(20).fill(0).map((r,e)=>" ".repeat(e)),Ko=200,Su={" ":{"\n":new Array(Ko).fill(0).map((r,e)=>`
31
+ `+" ".repeat(e)),"\r":new Array(Ko).fill(0).map((r,e)=>"\r"+" ".repeat(e)),"\r\n":new Array(Ko).fill(0).map((r,e)=>`\r
32
+ `+" ".repeat(e))}," ":{"\n":new Array(Ko).fill(0).map((r,e)=>`
33
+ `+" ".repeat(e)),"\r":new Array(Ko).fill(0).map((r,e)=>"\r"+" ".repeat(e)),"\r\n":new Array(Ko).fill(0).map((r,e)=>`\r
34
+ `+" ".repeat(e))}},sy=[`
33
35
  `,"\r",`\r
34
- `];function Ip(r,e,t){let n,o,i,a,s;if(e){for(a=e.offset,s=a+e.length,i=a;i>0&&!Oi(r,i-1);)i--;let k=s;for(;k<r.length&&!Oi(r,k);)k++;o=r.substring(i,k),n=ib(o,t)}else o=r,n=0,i=0,a=0,s=r.length;let c=ab(t,r),l=Of.includes(c),p=0,m=0,g;t.insertSpaces?g=_t[t.tabSize||4]??Ro(_t[1],t.tabSize||4):g=" ";let d=g===" "?" ":" ",f=Ai(o,!1),y=!1;function C(){if(p>1)return Ro(c,p)+Ro(g,n+m);let k=g.length*(n+m);return!l||k>Dp[d][c].length?c+Ro(g,n+m):k<=0?c:Dp[d][c][k]}function v(){let k=f.scan();for(p=0;k===15||k===14;)k===14&&t.keepLines?p+=1:k===14&&(p=1),k=f.scan();return y=k===16||f.getTokenError()!==0,k}let P=[];function u(k,R,w){!y&&(!e||R<s&&w>a)&&r.substring(R,w)!==k&&P.push({offset:R,length:w-R,content:k})}let S=v();if(t.keepLines&&p>0&&u(Ro(c,p),0,0),S!==17){let k=f.getTokenOffset()+i,R=g.length*n<20&&t.insertSpaces?_t[g.length*n]:Ro(g,n);u(R,i,k)}for(;S!==17;){let k=f.getTokenOffset()+f.getTokenLength()+i,R=v(),w="",H=!1;for(;p===0&&(R===12||R===13);){let j=f.getTokenOffset()+i;u(_t[1],k,j),k=f.getTokenOffset()+f.getTokenLength()+i,H=R===12,w=H?C():"",R=v()}if(R===2)S!==1&&m--,t.keepLines&&p>0||!t.keepLines&&S!==1?w=C():t.keepLines&&(w=_t[1]);else if(R===4)S!==3&&m--,t.keepLines&&p>0||!t.keepLines&&S!==3?w=C():t.keepLines&&(w=_t[1]);else{switch(S){case 3:case 1:m++,t.keepLines&&p>0||!t.keepLines?w=C():w=_t[1];break;case 5:t.keepLines&&p>0||!t.keepLines?w=C():w=_t[1];break;case 12:w=C();break;case 13:p>0?w=C():H||(w=_t[1]);break;case 6:t.keepLines&&p>0?w=C():H||(w=_t[1]);break;case 10:t.keepLines&&p>0?w=C():R===6&&!H&&(w="");break;case 7:case 8:case 9:case 11:case 2:case 4:t.keepLines&&p>0?w=C():(R===12||R===13)&&!H?w=_t[1]:R!==5&&R!==17&&(y=!0);break;case 16:y=!0;break}p>0&&(R===12||R===13)&&(w=C())}R===17&&(t.keepLines&&p>0?w=C():w=t.insertFinalNewline?c:"");let x=f.getTokenOffset()+i;u(w,k,x),S=R}return P}function Ro(r,e){let t="";for(let n=0;n<e;n++)t+=r;return t}function ib(r,e){let t=0,n=0,o=e.tabSize||4;for(;t<r.length;){let i=r.charAt(t);if(i===_t[1])n++;else if(i===" ")n+=o;else break;t++}return Math.floor(n/o)}function ab(r,e){for(let t=0;t<e.length;t++){let n=e.charAt(t);if(n==="\r")return t+1<e.length&&e.charAt(t+1)===`
36
+ `];function vu(r,e,t){let n,o,i,a,s;if(e){for(a=e.offset,s=a+e.length,i=a;i>0&&!ca(r,i-1);)i--;let k=s;for(;k<r.length&&!ca(r,k);)k++;o=r.substring(i,k),n=mM(o,t)}else o=r,n=0,i=0,a=0,s=r.length;let c=hM(t,r),l=sy.includes(c),p=0,d=0,g;t.insertSpaces?g=Bt[t.tabSize||4]??Jo(Bt[1],t.tabSize||4):g=" ";let m=g===" "?" ":" ",f=sa(o,!1),y=!1;function C(){if(p>1)return Jo(c,p)+Jo(g,n+d);let k=g.length*(n+d);return!l||k>Su[m][c].length?c+Jo(g,n+d):k<=0?c:Su[m][c][k]}function v(){let k=f.scan();for(p=0;k===15||k===14;)k===14&&t.keepLines?p+=1:k===14&&(p=1),k=f.scan();return y=k===16||f.getTokenError()!==0,k}let P=[];function h(k,E,w){!y&&(!e||E<s&&w>a)&&r.substring(E,w)!==k&&P.push({offset:E,length:w-E,content:k})}let S=v();if(t.keepLines&&p>0&&h(Jo(c,p),0,0),S!==17){let k=f.getTokenOffset()+i,E=g.length*n<20&&t.insertSpaces?Bt[g.length*n]:Jo(g,n);h(E,i,k)}for(;S!==17;){let k=f.getTokenOffset()+f.getTokenLength()+i,E=v(),w="",Y=!1;for(;p===0&&(E===12||E===13);){let V=f.getTokenOffset()+i;h(Bt[1],k,V),k=f.getTokenOffset()+f.getTokenLength()+i,Y=E===12,w=Y?C():"",E=v()}if(E===2)S!==1&&d--,t.keepLines&&p>0||!t.keepLines&&S!==1?w=C():t.keepLines&&(w=Bt[1]);else if(E===4)S!==3&&d--,t.keepLines&&p>0||!t.keepLines&&S!==3?w=C():t.keepLines&&(w=Bt[1]);else{switch(S){case 3:case 1:d++,t.keepLines&&p>0||!t.keepLines?w=C():w=Bt[1];break;case 5:t.keepLines&&p>0||!t.keepLines?w=C():w=Bt[1];break;case 12:w=C();break;case 13:p>0?w=C():Y||(w=Bt[1]);break;case 6:t.keepLines&&p>0?w=C():Y||(w=Bt[1]);break;case 10:t.keepLines&&p>0?w=C():E===6&&!Y&&(w="");break;case 7:case 8:case 9:case 11:case 2:case 4:t.keepLines&&p>0?w=C():(E===12||E===13)&&!Y?w=Bt[1]:E!==5&&E!==17&&(y=!0);break;case 16:y=!0;break}p>0&&(E===12||E===13)&&(w=C())}E===17&&(t.keepLines&&p>0?w=C():w=t.insertFinalNewline?c:"");let M=f.getTokenOffset()+i;h(w,k,M),S=E}return P}function Jo(r,e){let t="";for(let n=0;n<e;n++)t+=r;return t}function mM(r,e){let t=0,n=0,o=e.tabSize||4;for(;t<r.length;){let i=r.charAt(t);if(i===Bt[1])n++;else if(i===" ")n+=o;else break;t++}return Math.floor(n/o)}function hM(r,e){for(let t=0;t<e.length;t++){let n=e.charAt(t);if(n==="\r")return t+1<e.length&&e.charAt(t+1)===`
35
37
  `?`\r
36
38
  `:"\r";if(n===`
37
39
  `)return`
38
40
  `}return r&&r.eol||`
39
- `}function Oi(r,e){return`\r
40
- `.indexOf(r.charAt(e))!==-1}var _i;(function(r){r.DEFAULT={allowTrailingComma:!1}})(_i||(_i={}));function _f(r,e=[],t=_i.DEFAULT){let n=null,o=[],i=[];function a(c){Array.isArray(o)?o.push(c):n!==null&&(o[n]=c)}return Op(r,{onObjectBegin:()=>{let c={};a(c),i.push(o),o=c,n=null},onObjectProperty:c=>{n=c},onObjectEnd:()=>{o=i.pop()},onArrayBegin:()=>{let c=[];a(c),i.push(o),o=c,n=null},onArrayEnd:()=>{o=i.pop()},onLiteralValue:a,onError:(c,l,p)=>{e.push({error:c,offset:l,length:p})}},t),o[0]}function Ap(r,e=[],t=_i.DEFAULT){let n={type:"array",offset:-1,length:-1,children:[],parent:void 0};function o(c){n.type==="property"&&(n.length=c-n.offset,n=n.parent)}function i(c){return n.children.push(c),c}Op(r,{onObjectBegin:c=>{n=i({type:"object",offset:c,length:-1,parent:n,children:[]})},onObjectProperty:(c,l,p)=>{n=i({type:"property",offset:l,length:-1,parent:n,children:[]}),n.children.push({type:"string",value:c,offset:l,length:p,parent:n})},onObjectEnd:(c,l)=>{o(c+l),n.length=c+l-n.offset,n=n.parent,o(c+l)},onArrayBegin:(c,l)=>{n=i({type:"array",offset:c,length:-1,parent:n,children:[]})},onArrayEnd:(c,l)=>{n.length=c+l-n.offset,n=n.parent,o(c+l)},onLiteralValue:(c,l,p)=>{i({type:cb(c),offset:l,length:p,parent:n,value:c}),o(l+p)},onSeparator:(c,l,p)=>{n.type==="property"&&(c===":"?n.colonOffset=l:c===","&&o(l))},onError:(c,l,p)=>{e.push({error:c,offset:l,length:p})}},t);let s=n.children[0];return s&&delete s.parent,s}function us(r,e){if(!r)return;let t=r;for(let n of e)if(typeof n=="string"){if(t.type!=="object"||!Array.isArray(t.children))return;let o=!1;for(let i of t.children)if(Array.isArray(i.children)&&i.children[0].value===n&&i.children.length===2){t=i.children[1],o=!0;break}if(!o)return}else{let o=n;if(t.type!=="array"||o<0||!Array.isArray(t.children)||o>=t.children.length)return;t=t.children[o]}return t}function Op(r,e,t=_i.DEFAULT){let n=Ai(r,!1),o=[],i=0;function a(B){return B?()=>i===0&&B(n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter()):()=>!0}function s(B){return B?K=>i===0&&B(K,n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter()):()=>!0}function c(B){return B?K=>i===0&&B(K,n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter(),()=>o.slice()):()=>!0}function l(B){return B?()=>{i>0?i++:B(n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter(),()=>o.slice())===!1&&(i=1)}:()=>!0}function p(B){return B?()=>{i>0&&i--,i===0&&B(n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter())}:()=>!0}let m=l(e.onObjectBegin),g=c(e.onObjectProperty),d=p(e.onObjectEnd),f=l(e.onArrayBegin),y=p(e.onArrayEnd),C=c(e.onLiteralValue),v=s(e.onSeparator),P=a(e.onComment),u=s(e.onError),S=t&&t.disallowComments,k=t&&t.allowTrailingComma;function R(){for(;;){let B=n.scan();switch(n.getTokenError()){case 4:w(14);break;case 5:w(15);break;case 3:w(13);break;case 1:S||w(11);break;case 2:w(12);break;case 6:w(16);break}switch(B){case 12:case 13:S?w(10):P();break;case 16:w(1);break;case 15:case 14:break;default:return B}}}function w(B,K=[],oe=[]){if(u(B),K.length+oe.length>0){let re=n.getToken();for(;re!==17;){if(K.indexOf(re)!==-1){R();break}else if(oe.indexOf(re)!==-1)break;re=R()}}}function H(B){let K=n.getTokenValue();return B?C(K):(g(K),o.push(K)),R(),!0}function x(){switch(n.getToken()){case 11:let B=n.getTokenValue(),K=Number(B);isNaN(K)&&(w(2),K=0),C(K);break;case 7:C(null);break;case 8:C(!0);break;case 9:C(!1);break;default:return!1}return R(),!0}function j(){return n.getToken()!==10?(w(3,[],[2,5]),!1):(H(!1),n.getToken()===6?(v(":"),R(),ee()||w(4,[],[2,5])):w(5,[],[2,5]),o.pop(),!0)}function L(){m(),R();let B=!1;for(;n.getToken()!==2&&n.getToken()!==17;){if(n.getToken()===5){if(B||w(4,[],[]),v(","),R(),n.getToken()===2&&k)break}else B&&w(6,[],[]);j()||w(4,[],[2,5]),B=!0}return d(),n.getToken()!==2?w(7,[2],[]):R(),!0}function ie(){f(),R();let B=!0,K=!1;for(;n.getToken()!==4&&n.getToken()!==17;){if(n.getToken()===5){if(K||w(4,[],[]),v(","),R(),n.getToken()===4&&k)break}else K&&w(6,[],[]);B?(o.push(0),B=!1):o[o.length-1]++,ee()||w(4,[],[4,5]),K=!0}return y(),B||o.pop(),n.getToken()!==4?w(8,[4],[]):R(),!0}function ee(){switch(n.getToken()){case 3:return ie();case 1:return L();case 10:return H(!0);default:return x()}}return R(),n.getToken()===17?t.allowEmptyContent?!0:(w(4,[],[]),!1):ee()?(n.getToken()!==17&&w(9,[],[]),!0):(w(4,[],[]),!1)}function cb(r){switch(typeof r){case"boolean":return"boolean";case"number":return"number";case"string":return"string";case"object":{if(r){if(Array.isArray(r))return"array"}else return"null";return"object"}default:return"null"}}function Lf(r,e,t,n){let o=e.slice(),a=Ap(r,[]),s,c;for(;o.length>0&&(c=o.pop(),s=us(a,o),s===void 0&&t!==void 0);)typeof c=="string"?t={[c]:t}:t=[t];if(s)if(s.type==="object"&&typeof c=="string"&&Array.isArray(s.children)){let l=us(s,[c]);if(l!==void 0)if(t===void 0){if(!l.parent)throw new Error("Malformed AST");let p=s.children.indexOf(l.parent),m,g=l.parent.offset+l.parent.length;if(p>0){let d=s.children[p-1];m=d.offset+d.length}else m=s.offset+1,s.children.length>1&&(g=s.children[1].offset);return Jn(r,{offset:m,length:g-m,content:""},n)}else return Jn(r,{offset:l.offset,length:l.length,content:JSON.stringify(t)},n);else{if(t===void 0)return[];let p=`${JSON.stringify(c)}: ${JSON.stringify(t)}`,m=n.getInsertionIndex?n.getInsertionIndex(s.children.map(d=>d.children[0].value)):s.children.length,g;if(m>0){let d=s.children[m-1];g={offset:d.offset+d.length,length:0,content:","+p}}else s.children.length===0?g={offset:s.offset+1,length:0,content:p}:g={offset:s.offset+1,length:0,content:p+","};return Jn(r,g,n)}}else if(s.type==="array"&&typeof c=="number"&&Array.isArray(s.children)){let l=c;if(l===-1){let p=`${JSON.stringify(t)}`,m;if(s.children.length===0)m={offset:s.offset+1,length:0,content:p};else{let g=s.children[s.children.length-1];m={offset:g.offset+g.length,length:0,content:","+p}}return Jn(r,m,n)}else if(t===void 0&&s.children.length>=0){let p=c,m=s.children[p],g;if(s.children.length===1)g={offset:s.offset+1,length:s.length-2,content:""};else if(s.children.length-1===p){let d=s.children[p-1],f=d.offset+d.length,y=s.offset+s.length;g={offset:f,length:y-2-f,content:""}}else g={offset:m.offset,length:s.children[p+1].offset-m.offset,content:""};return Jn(r,g,n)}else if(t!==void 0){let p,m=`${JSON.stringify(t)}`;if(!n.isArrayInsertion&&s.children.length>c){let g=s.children[c];p={offset:g.offset,length:g.length,content:m}}else if(s.children.length===0||c===0)p={offset:s.offset+1,length:0,content:s.children.length===0?m:m+","};else{let g=c>s.children.length?s.children.length:c,d=s.children[g-1];p={offset:d.offset+d.length,length:0,content:","+m}}return Jn(r,p,n)}else throw new Error(`Can not ${t===void 0?"remove":n.isArrayInsertion?"insert":"modify"} Array index ${l} as length is not sufficient`)}else throw new Error(`Can not add ${typeof c!="number"?"index":"property"} to parent of type ${s.type}`);else{if(t===void 0)throw new Error("Can not delete in empty document");return Jn(r,{offset:a?a.offset:0,length:a?a.length:0,content:JSON.stringify(t)},n)}}function Jn(r,e,t){if(!t.formattingOptions)return[e];let n=ms(r,e),o=e.offset,i=e.offset+e.content.length;if(e.length===0||e.content.length===0){for(;o>0&&!Oi(n,o-1);)o--;for(;i<n.length&&!Oi(n,i);)i++}let a=Ip(n,{offset:o,length:i-o},{...t.formattingOptions,keepLines:!1});for(let c=a.length-1;c>=0;c--){let l=a[c];n=ms(n,l),o=Math.min(o,l.offset),i=Math.max(i,l.offset+l.length),i+=l.content.length-l.length}let s=r.length-(n.length-i)-o;return[{offset:o,length:s,content:n.substring(o,i)}]}function ms(r,e){return r.substring(0,e.offset)+e.content+r.substring(e.offset+e.length)}var Nf;(function(r){r[r.None=0]="None",r[r.UnexpectedEndOfComment=1]="UnexpectedEndOfComment",r[r.UnexpectedEndOfString=2]="UnexpectedEndOfString",r[r.UnexpectedEndOfNumber=3]="UnexpectedEndOfNumber",r[r.InvalidUnicode=4]="InvalidUnicode",r[r.InvalidEscapeCharacter=5]="InvalidEscapeCharacter",r[r.InvalidCharacter=6]="InvalidCharacter"})(Nf||(Nf={}));var Wf;(function(r){r[r.OpenBraceToken=1]="OpenBraceToken",r[r.CloseBraceToken=2]="CloseBraceToken",r[r.OpenBracketToken=3]="OpenBracketToken",r[r.CloseBracketToken=4]="CloseBracketToken",r[r.CommaToken=5]="CommaToken",r[r.ColonToken=6]="ColonToken",r[r.NullKeyword=7]="NullKeyword",r[r.TrueKeyword=8]="TrueKeyword",r[r.FalseKeyword=9]="FalseKeyword",r[r.StringLiteral=10]="StringLiteral",r[r.NumericLiteral=11]="NumericLiteral",r[r.LineCommentTrivia=12]="LineCommentTrivia",r[r.BlockCommentTrivia=13]="BlockCommentTrivia",r[r.LineBreakTrivia=14]="LineBreakTrivia",r[r.Trivia=15]="Trivia",r[r.Unknown=16]="Unknown",r[r.EOF=17]="EOF"})(Wf||(Wf={}));var jf=_f;var Uf;(function(r){r[r.InvalidSymbol=1]="InvalidSymbol",r[r.InvalidNumberFormat=2]="InvalidNumberFormat",r[r.PropertyNameExpected=3]="PropertyNameExpected",r[r.ValueExpected=4]="ValueExpected",r[r.ColonExpected=5]="ColonExpected",r[r.CommaExpected=6]="CommaExpected",r[r.CloseBraceExpected=7]="CloseBraceExpected",r[r.CloseBracketExpected=8]="CloseBracketExpected",r[r.EndOfFileExpected=9]="EndOfFileExpected",r[r.InvalidCommentToken=10]="InvalidCommentToken",r[r.UnexpectedEndOfComment=11]="UnexpectedEndOfComment",r[r.UnexpectedEndOfString=12]="UnexpectedEndOfString",r[r.UnexpectedEndOfNumber=13]="UnexpectedEndOfNumber",r[r.InvalidUnicode=14]="InvalidUnicode",r[r.InvalidEscapeCharacter=15]="InvalidEscapeCharacter",r[r.InvalidCharacter=16]="InvalidCharacter"})(Uf||(Uf={}));function Bf(r){switch(r){case 1:return"InvalidSymbol";case 2:return"InvalidNumberFormat";case 3:return"PropertyNameExpected";case 4:return"ValueExpected";case 5:return"ColonExpected";case 6:return"CommaExpected";case 7:return"CloseBraceExpected";case 8:return"CloseBracketExpected";case 9:return"EndOfFileExpected";case 10:return"InvalidCommentToken";case 11:return"UnexpectedEndOfComment";case 12:return"UnexpectedEndOfString";case 13:return"UnexpectedEndOfNumber";case 14:return"InvalidUnicode";case 15:return"InvalidEscapeCharacter";case 16:return"InvalidCharacter"}return"<unknown ParseErrorCode>"}function Vf(r,e,t,n){return Lf(r,e,t,n)}function qf(r,e){let t=e.slice(0).sort((o,i)=>{let a=o.offset-i.offset;return a===0?o.length-i.length:a}),n=r.length;for(let o=t.length-1;o>=0;o--){let i=t[o];if(i.offset+i.length<=n)r=ms(r,i);else throw new Error("Overlapping edit");n=i.offset}return r}vt();G();ne();var db=T("common.json");var Jt={allowComment:!0},ub={insertSpaces:!1,tabSize:4,eol:`
41
- `,insertFinalNewline:!0};function Lt(r,e={}){try{if(!r.trim())return{};let t;if(e.allowComment===!0){let n=[];if(t=jf(r,n,hb(e)),n.length>0)throw new Error(`JSON cannot be parsed safely: ${mb(e.filePath,n)}`)}else t=JSON.parse(r);if(!V(t))throw new Error(`JSON root is not an object: ${e.filePath??"<inline>"}`);return t}catch(t){if(e.ignoreParseError===!0)return db.warn(`ignore JSON object because it cannot be parsed safely: ${e.filePath??"<inline>"}`,t instanceof Error?t.message:String(t)),e.defaultValue;throw t}}async function Hf(r,e={}){let{attempts:t=3,delayMs:n=50,ignoreParseError:o=!0,...i}=e,a=Math.max(1,Math.floor(t)),s="",c;for(let l=0;l<a;l++){let p=await $f.promises.readFile(r,"utf8");s=p;try{return Lt(p,{...i,filePath:r})}catch(m){c=m}l<a-1&&await new Promise(m=>setTimeout(m,n))}if(o)return Lt(s,{...i,filePath:r,ignoreParseError:!0});throw c}async function _r(r,e={}){let{defaultValue:t,ignoreParseError:n=!0,...o}=e,i=await Le(r);return i.trim()?Lt(i,{...o,filePath:r,defaultValue:t,ignoreParseError:n}):t??{}}function mb(r,e){let t=r??"<inline>",n=e.map(o=>`${Bf(o.error)}@${o.offset}`).join(", ");return`${t} (${n})`}function Lr(r){return r.trim()?r:`{}
42
- `}function Nt(r,e,t){let n=Lr(r);return qf(n,Vf(n,e,t,{formattingOptions:ub}))}function hb(r){let e=r.allowComment===!0;return{allowEmptyContent:!0,allowTrailingComma:e,disallowComments:!e}}G();ne();async function Yf(){let r=ig();return bb(await _r(r,{defaultValue:{},ignoreParseError:!1}))}async function Xf(){let r=ag();return Tb(await _r(r,{defaultValue:{},ignoreParseError:!0}))}async function _p(r){let[e,t]=await Promise.all([Yf(),Xf()]);if(r===void 0)return{auth:e,session:t};let n=Se(r);return{serverUrl:n,auth:e.servers[n],session:t.servers[n]}}async function Qf(r){return(await Li(()=>({patch:r,result:void 0}))).state}async function Li(r){return If(Mb(),async()=>{let[e,t]=await Promise.all([Yf(),Xf()]),n=r({auth:e,session:t}),o=n.patch,i=o.auth===void 0?e:wb(e,o.auth),a=o.session===void 0?t:Eb(t,o.session);return await Promise.all([o.auth===void 0?void 0:Gf(ig(),i),o.session===void 0?void 0:Gf(ag(),a)]),{state:{auth:i,session:a},result:n.result}})}var Zf=1,eg=1,fb=".succapp",gb="auth.json",yb="session.json",Cb="auth-state.lock",Sb="SUCCAPP_AUTH_SETTINGS_FILE",vb="SUCCAPP_AUTH_SETTINGS_DIR",kb=T("api.auth-settings");function tg(r,e,t){if(e===null)return{};let n={...r};for(let[o,i]of Object.entries(e)){let a=Se(o),s=i==null?void 0:t(n[a],i);s===void 0?delete n[a]:n[a]=s}return n}function wb(r,e){return e.servers===void 0?r:{version:Zf,servers:tg(r.servers,e.servers,(t,n)=>{let o=Pb(t??{},n);return Object.keys(o).length===0?void 0:o})}}var zf=["authType","username","userId","lastLoginAt","updatedAt"];function Pb(r,e){let t={};if(V(r))for(let n of zf){let o=r[n];o!==void 0&&(t[n]=o)}for(let n of zf)Rb(t,e,n);return t}function Rb(r,e,t){if(!Object.prototype.hasOwnProperty.call(e,t))return;let n=e[t];if(n==null){delete r[t];return}r[t]=n}function Eb(r,e){return e.servers===void 0?r:{version:eg,servers:tg(r.servers,e.servers,(t,n)=>{let o=ng(n);return Object.keys(o).length===0?void 0:o})}}function bb(r){return{version:Zf,servers:rg(r,"auth settings",!0,xb)}}function rg(r,e,t,n){let o={},a=(V(r)?r:{}).servers;if(a===void 0)return o;if(!V(a)){if(t)throw new Error(`${e} servers must be an object`);return o}for(let[s,c]of Object.entries(a)){let l=Fb(s,e,t);if(!l)continue;if(!V(c)){if(!t)continue;throw new Error(`${e} server entry must be an object: ${s}`)}let p=n(c);p!==void 0&&(o[l]=p)}return o}function Tb(r){return{version:eg,servers:rg(r,"session settings",!1,ng)}}function xb(r){if(!V(r))return;let e=A({authType:og(r.authType),username:Cr(r.username),userId:Cr(r.userId),lastLoginAt:Cr(r.lastLoginAt),updatedAt:Cr(r.updatedAt)});return Object.keys(e).length===0?void 0:e}function ng(r){return V(r)?A({authType:og(r.authType),token:Kf(r.token),accessToken:Kf(r.accessToken),refreshToken:Cr(r.refreshToken),lastSeenAt:Cr(r.lastSeenAt),updatedAt:Cr(r.updatedAt)}):{}}function Kf(r){if(!V(r)||r.type!=="Bearer")return;let e=Cr(r.value);if(!e)return;let t=Array.isArray(r.scope)?r.scope.filter(n=>typeof n=="string"&&n.length>0):void 0;return A({type:"Bearer",value:e,expiresAt:Cr(r.expiresAt),scope:t&&t.length>0?t:void 0,updatedAt:Cr(r.updatedAt)})}function og(r){return r==="oauth"||r==="pat"?r:void 0}function Cr(r){return typeof r=="string"?r:void 0}function Fb(r,e,t){try{return Se(r)}catch(n){if(t)throw new Error(`invalid ${e} server key: ${r}`,{cause:n instanceof Error?n:void 0});kb.warn(`ignored invalid ${e} server key: ${r}`,n);return}}async function Gf(r,e){await cn(r,`${JSON.stringify(e,void 0," ")}
43
- `)}function Lp(){let r=sg();if(r)return Nr.dirname(r);let e=Db();return e||Nr.join(Jf.homedir(),fb)}function ig(){let r=sg();return r||Nr.join(Lp(),gb)}function ag(){return Nr.join(Lp(),yb)}function Mb(){return Nr.join(Lp(),Cb)}function sg(){return cg(Sb)}function Db(){return cg(vb)}function cg(r){let e=process.env[r]?.trim();return e?Nr.resolve(e):void 0}function nt(r){return r&&r.trim()?r:void 0}function Yt(r,e){if(r===void 0)return;let t=r.trim();if(!/^\d+$/.test(t))return;let n=Number(t);if(Number.isSafeInteger(n)&&!(e!==void 0&&n>e))return n}function pg(r,e=void 0){if(r===void 0)return e;let t=r.trim();return t===""?e:t==="1"||ln(t,"true")||ln(t,"yes")||ln(t,"on")?!0:t==="0"||ln(t,"false")||ln(t,"no")||ln(t,"off")?!1:e}function ln(r,e){if(r===e)return!0;if(r==null||e===void 0||e===null||r.length!==e.length)return!1;for(let t=0;t<r.length;t++){let n=lg(r.charCodeAt(t)),o=lg(e.charCodeAt(t));if(n!==o)return!1}return!0}function Sr(r){let e=0;for(let t of r){let n=t.codePointAt(0);n===void 0||Ib(n)||(e+=Ab(n)?2:1)}return e}function Eo(r,e){return`${r}${" ".repeat(Math.max(0,e-Sr(r)))}`}function Ib(r){return r<=31||r>=127&&r<=159||r>=768&&r<=879||r>=6832&&r<=6911||r>=7616&&r<=7679||r>=8400&&r<=8447||r>=65024&&r<=65039||r>=65056&&r<=65071||r===8203||r===8204||r===8205||r===8288}function Ab(r){return r>=4352&&r<=4447||r===9001||r===9002||r>=11904&&r<=42191||r>=44032&&r<=55203||r>=63744&&r<=64255||r>=65040&&r<=65049||r>=65072&&r<=65135||r>=65280&&r<=65376||r>=65504&&r<=65510}function lg(r){return r>=65&&r<=90?r+32:r}D();var dg="SuccApp/2.0",ug="X-Requested-With",mg="XMLHttpRequest";D();J();Un();ne();To();var Up=512;async function fs(r,e){r.ok||await zb(r,e);let t=await Sg(r,e);if(t.trim().length===0)throw jp(e,r,"empty response body");let n=Kb(t,e,r);return vg(n,e,r),n}async function Cg(r,e){if(!hg(r.headers.get("content-type")??void 0))return;let t=await Sg(r,e);if(t.trim().length===0)return;let n;try{n=JSON.parse(t)}catch{return}vg(n,e,r)}async function zb(r,e){if(r.status===401)throw new ut({serverUrl:e.serverUrl});let t;try{t=await r.text()}catch(n){throw new dt(e.url,n instanceof Error?n:void 0)}throw new zt(r.status,t,r.statusText,new Error(`SuccBI HTTP ${r.status} ${r.statusText}: ${e.url}`),r.headers.get("content-type")??void 0)}async function Sg(r,e){try{return await r.text()}catch(t){throw jp(e,r,"cannot read response body",t)}}function Kb(r,e,t){try{return JSON.parse(r)}catch(n){throw jp(e,t,"response body is not valid JSON",n,r)}}function vg(r,e,t){if(V(r)&&Yb(r))throw Gb(r,e,t)}function Gb(r,e,t){let n=wi(r),o=on(n),i=pt(o)??pt(n),a=i??"err.net.invalidResponse",s={...bt(o),...bt(n),...kg(e,t),...i?{}:{reason:"missingErrorCode"}};return new _e(a,{message:o.message||n.message||a,properties:s,errorType:sr(o)??sr(n),errorDialogStyle:o.errorDialogStyle??n.errorDialogStyle,hintMessage:o.hintMessage??n.hintMessage,locationPath:o.locationPath??n.locationPath,cause:n})}function jp(r,e,t,n,o){return new _e("err.net.invalidResponse",{properties:{...kg(r,e),reason:t,responsePreview:Jb(o),responseTruncated:o!==void 0&&o.length>Up},cause:n})}function kg(r,e){return{url:r.url,endpoint:r.endpoint??new URL(r.url).pathname,serverUrl:r.serverUrl,operation:r.operation,request:r.request,httpStatus:e.status,contentType:e.headers.get("content-type")??void 0}}function Jb(r){if(r===void 0)return;let e=r.trim();if(e.length!==0)return e.length>Up?`${e.slice(0,Up)}...`:e}function Yb(r){return typeof r.errorCode=="string"||typeof r.className=="string"||Array.isArray(r.stack)}async function xo(r,e){try{let t=await fetch(r,{...e,headers:Xb(e?.headers)});return t.status>=500&&await Ui(t,r),t}catch(t){throw t instanceof zt||t instanceof dt?t:new dt(r,t instanceof Error?t:void 0)}}async function gs(r){let e=`${r}/api/dev-tool/v2/server/ping`,t=await xo(e);return fs(t,{url:e,endpoint:"/server/ping",serverUrl:r})}async function Ui(r,e){let t;try{t=await r.text()}catch(n){throw new dt(e,n instanceof Error?n:void 0)}throw new zt(r.status,t,r.statusText,new Error(`SuccBI HTTP ${r.status} ${r.statusText}: ${e}`),r.headers.get("content-type")??void 0)}function Bp(r){if(!r)return{};if(r instanceof Headers){let e={};return r.forEach((t,n)=>{e[n]=t}),e}return Array.isArray(r)?Object.fromEntries(r):{...r}}function Xb(r){let e=Bp(r);return Wi(e,"User-Agent",dg),Wi(e,ug,mg),Wi(e,"X-Succ-Client-Type","nodejs"),Wi(e,"Accept","application/json"),Wi(e,"Accept-Encoding","gzip"),e}function Wi(r,e,t){Object.keys(r).some(o=>ln(o,e))||(r[e]=t)}async function Eg(r,e){let t=await ys(r,e);return Vp(r,t)}async function ys(r,e){let t=Se(r),n=new Date().toISOString();return e.type==="pat"?Pg(t,{authType:"pat",credentialType:"pat",token:e.token,verifiedAt:n}):Pg(t,{authType:"oauth",credentialType:"oauth",token:e.accessToken,refreshToken:e.refreshToken,expiresAt:e.expiresAt,scope:e.scope,verifiedAt:n})}async function Vp(r,e){U(Qe(r,e.serverUrl),`verified credential belongs to another server: ${e.serverUrl}`);let t=Se(r),n=new Date().toISOString(),o=A({authType:e.authType,username:e.username,userId:e.userId,lastLoginAt:e.verifiedAt??n,updatedAt:n}),i=A({authType:e.authType,token:e.authType==="pat"?e.token:void 0,accessToken:e.authType==="oauth"?e.token:void 0,refreshToken:e.refreshToken,lastSeenAt:e.verifiedAt??n,updatedAt:n}),a=await Qf({auth:{servers:{[t]:o}},session:{servers:{[t]:i}}}),s=a.auth.servers[t],c=$p(a.session.servers[t]);return{serverUrl:t,credentialType:e.credentialType,authType:e.authType,stored:!0,username:s?.username,userId:s?.userId,methods:c?["token"]:[],updatedAt:c?.updatedAt??s?.updatedAt}}async function Cs(r){let e=Se(r),{auth:t,session:n}=await _p(e),o=$p(n),i=Fg(o);if(i)return{serverUrl:e,username:t?.username,userId:t?.userId,authType:i.authType,methods:["token"],bearerToken:i,lastLoginAt:t?.lastLoginAt,updatedAt:o?.updatedAt??t?.updatedAt}}async function bg(r){let e=Se(r),{auth:t,session:n}=await _p(e),o=$p(n);return o?eT(e,t,o):void 0}async function qp(r){if(!r){let{result:n}=await Li(o=>({patch:{auth:{servers:null},session:{servers:null}},result:new Set([...Object.keys(o.auth.servers),...Object.keys(o.session.servers)]).size}));return{all:!0,removed:n}}let e=Se(r),{result:t}=await Li(n=>({patch:{auth:{servers:{[e]:null}},session:{servers:{[e]:null}}},result:n.auth.servers[e]||n.session.servers[e]?1:0}));return{all:!1,serverUrl:e,removed:t}}async function Tg(r){let e=Se(r);await Li(()=>({patch:{session:{servers:{[e]:null}}},result:void 0}))}var xg="/api/me/whoami";function $p(r){if(!V(r))return;let e=wg(r.token),t=wg(r.accessToken),n=Et(r.refreshToken),o=A({authType:Qb(r.authType),token:e,accessToken:t,refreshToken:n,lastSeenAt:Et(r.lastSeenAt),updatedAt:Et(r.updatedAt)});return e||t?o:void 0}function wg(r){if(!V(r)||r.type!=="Bearer")return;let e=Et(r.value),t=Et(r.expiresAt);if(!e||Zb(t))return;let n=Array.isArray(r.scope)?r.scope.filter(o=>typeof o=="string"&&o.length>0):void 0;return A({type:"Bearer",value:e,expiresAt:t,scope:n&&n.length>0?n:void 0,updatedAt:Et(r.updatedAt)})}function Qb(r){return r==="oauth"||r==="pat"?r:void 0}function Zb(r){if(!r)return!1;let e=Date.parse(r);return Number.isFinite(e)&&e<=Date.now()}function eT(r,e,t){let n=Fg(t);return{serverUrl:r,username:e?.username,userId:e?.userId,authType:n?.authType,methods:n?["token"]:[],expiresAt:n?.expiresAt,lastLoginAt:e?.lastLoginAt,updatedAt:t?.updatedAt??e?.updatedAt}}function Fg(r){let e=r?.token??r?.accessToken;if(!e)return;let t=r?.authType==="oauth"||r?.accessToken?"oauth":"pat";return A({type:"token",authType:t,token:e.value,expiresAt:e.expiresAt,scope:e.scope,updatedAt:e.updatedAt??r?.updatedAt})}async function Pg(r,e){let t=Et(e.token);if(!t)throw new ut({serverUrl:r});let n=await tT(r,t);return{serverUrl:r,credentialType:e.credentialType,authType:e.authType,username:n.username,userId:n.userId,methods:["token"],token:A({type:"Bearer",value:t,expiresAt:Et(e.expiresAt),scope:e.scope?.filter(o=>typeof o=="string"&&o.length>0),updatedAt:e.verifiedAt}),refreshToken:Et(e.refreshToken),verifiedAt:e.verifiedAt}}async function tT(r,e){let t=`${r}${xg}`,n=await xo(t,{headers:{Authorization:`Bearer ${e}`}});if(n.status===401)throw new ut({serverUrl:r});n.ok||await Ui(n,t);let o;try{o=await n.json()}catch(s){throw Rg(r,t,"response body is not valid JSON",s)}if(!V(o))throw Rg(r,t,"response body is not an object");let i=Et(o.userName)??Et(o.username),a=Et(o.userId)??Et(o.id);if(o.anonymous===!0||!i&&!a)throw new ut({serverUrl:r});return{username:i,userId:a}}function Rg(r,e,t,n){return new _e("err.net.invalidResponse",{properties:{url:e,endpoint:xg,serverUrl:r,reason:t},cause:n})}var Hg=b(require("fs")),zg=b(require("os")),Jp=b(require("path"));var Ug=b(require("fs")),Qn=b(require("path")),ji=require("stream");Ce();pn();$();G();var fT=T("common.promise"),Hp=new WeakMap,Mo=new WeakMap;function Kp(r,e){return zp(r)?.get(e)}function Ur(r,e,t){let n=zp(r);n||(n=new Map,Hp.set(r,n));let o=n.get(e);if(o)return o;let i=(async()=>t())().finally(()=>{let a=zp(r);!a||a.get(e)!==i||(a.delete(e),a.size===0&&Hp.delete(r))});return n.set(e,i),i}function Do(r,e,t,n,o={}){let i=Mo.get(r);i||(i=new Map,Mo.set(r,i));let a=Date.now(),s=i.get(e);s&&gT(s.timer)&&i.delete(e);let c=i.get(e),l=c?.firstScheduledAt??a;c&&clearTimeout(c.timer);let p=Math.max(0,t);if(o.maxWaitMs!==void 0){let g=Math.max(0,l+o.maxWaitMs-a);p=Math.min(p,g)}let m=setTimeout(()=>{let g=Mo.get(r);g?.get(e)?.timer===m&&(g.delete(e),g.size===0&&Mo.delete(r)),Promise.resolve().then(n).catch(d=>fT.warn(`debounced task failed: ${e}`,d))},p);return i.set(e,{timer:m,firstScheduledAt:l}),m}function Io(r,e){let t=Mo.get(r),n=t?.get(e)?.timer;return!t||!n?!1:(clearTimeout(n),t.delete(e),t.size===0&&Mo.delete(r),!0)}function zp(r){return Hp.get(r)}function gT(r){return!r||typeof r!="object"?!1:r._destroyed===!0}ne();D();J();var Ut="/api/dev-tool/v2",yT={viewFile:`${Ut}/file/view`};function Ao(r,e){let t=new URLSearchParams;return t.set("path",e.path),e[":edit"]!==void 0&&t.set(":edit",e[":edit"]),`${r}${yT.viewFile}?${t.toString()}`}var un=class{constructor(e,t={}){this.serverUrl=e;this.workspaceRoot=t.workspaceRoot,this.authPolicy=t.authPolicy??"auto",t.initialCredential&&(this.applyCredential(t.initialCredential),this.storedCredentialState="missing"),this.requestRunner=new ze}requestRunner;workspaceRoot;authPolicy;storedCredentialState="not-loaded";bearerToken;get connected(){return this.bearerToken!==void 0}get currentAuthorizationHeader(){return this.bearerToken?`Bearer ${this.bearerToken.token}`:""}getDiagnostics(e){return null}async verify(){return this.getServerInfo()}async getServerInfo(){return this.get("/server/info")}async getProjects(){return this.get("/project/list")}async createProject(e){return this.post("/project/create",e)}async listFiles(e){return(await this.get(`/file/list?path=${encodeURIComponent(e)}`)).map(n=>this.normalizeMetaFileInfo(n))}async countFiles(e){return this.get(`/file/count?path=${encodeURIComponent(e)}`)}async getFileDescendant(e){let t=[];return await this.collectFileDescendants(e,t),t}async getFile(e){return this.normalizeMetaFileInfo(await this.get(`/file/get-info?path=${encodeURIComponent(e)}`))}async getFileInfos(e){return(await this.post("/file/get-infos",{paths:e})).map(n=>this.normalizeMetaFileInfo(n))}async getFileHistory(e,t={}){return this.get(this.createEndpoint("/file/get-history",{path:e,limit:t.limit}))}isNotFoundError(e){return Oh(e)}async getFileContent(e,t){let n=await this.doGetFileContentStream(e,t),o=[];for await(let i of n.stream)o.push(Buffer.isBuffer(i)?i:Buffer.from(i));return{buffer:Buffer.concat(o),revision:n.revision,modifyTime:n.modifyTime}}async getFileContentStream(e,t){return this.doGetFileContentStream(e,t)}async doGetFileContentStream(e,t){let n=`${this.serverUrl}${Ut}/file/get-content?path=${encodeURIComponent(e)}`;t?.revision!==void 0&&(n+=`&revision=${t.revision}`),t?.upgradeContent!==void 0&&(n+=`&upgradeContent=${t.upgradeContent}`);let o=await this.requestStream(n);return{stream:o.stream,revision:Number(o.response.headers.get("X-Meta-Revision")??"0"),modifyTime:Number(o.response.headers.get("X-Meta-ModifyTime")??"0")}}async upgradeFileContent(e){return this.post("/file/upgrade-content",e)}async saveFile(e,t,n){let o={action:n?.expectedRevision===null?"create":"modify",path:e,isFolder:!1},i=`${this.serverUrl}${Ut}/file/save?path=${encodeURIComponent(e)}`;n?.desc!==void 0&&(i+=`&desc=${encodeURIComponent(n.desc)}`),n?.expectedRevision!==void 0&&(i+=`&expectedRevision=${n.expectedRevision===null?"":n.expectedRevision}`);let a=await this.requestJson(i,{method:"POST",headers:{"Content-Type":"application/octet-stream"},body:this.toRequestBody(t),duplex:t instanceof ji.Readable?"half":void 0});return this.toFileMutationResponse(a,o)}async createFile(e){return this.postFileMutation("/file/create",e)}async modifyFile(e){return this.postFileMutation("/file/save",e)}async moveFile(e){return this.postFileMutation("/file/move",e)}async deleteFile(e,t){let n={path:e},o={action:"delete",path:e};t?.expectedRevision!==void 0&&(n.expectedRevision=t.expectedRevision),t?.expectedModifyTime!==void 0&&(n.expectedModifyTime=t.expectedModifyTime);let i=await this.post("/file/delete",n);return this.toFileMutationResponse(i,o)}buildViewFileRedirectUrl(e){return Ao(this.serverUrl,e)}async getExtensionTemplates(){return this.get("/extension/list-templates")}async downloadExtensionTemplate(e,t){let n=encodeURIComponent(e),o=encodeURIComponent(`${t}.zip`),i=`${this.serverUrl}${Ut}/extension/get-template?extensionPoint=${n}&zipFile=${o}`,a=await this.requestStream(i),s=[];for await(let c of a.stream)s.push(Buffer.isBuffer(c)?c:Buffer.from(c));return Buffer.concat(s)}async getDataSources(){return this.get("/db/list-datasources")}async getSettings(e={}){return this.post("/settings/get",e)}async setSettings(e){return this.post("/settings/set",e)}async probeDataSource(e,t){return this.post("/db/probe-datasource",{dataSource:e})}async getDataSourceConfig(e,t={}){return this.get(this.createEndpoint("/db/get-datasource-config",{dataSource:e}))}async testDataSource(e){let{projectName:t,originalDataSource:n,...o}=e,a={result:await this.post("/db/test-datasource",o)};return e.config.name!==void 0&&(a.dataSource=e.config.name),a}async createDataSource(e){let{projectName:t,...n}=e;return this.post("/db/create-datasource",n)}async updateDataSource(e){let{projectName:t,...n}=e;return this.post("/db/update-datasource",n)}async deleteDataSource(e){let{projectName:t,...n}=e;return this.post("/db/delete-datasource",n)}async listDbSchemas(e,t={}){return this.get(this.createEndpoint("/db/list-schemas",{dataSource:e,catalog:t.catalog}))}async listDbTables(e,t={}){return this.get(this.createEndpoint("/db/list-tables",{dataSource:e,schema:t.schema,tableNameContains:t.tableNameContains}))}async describeDbTable(e,t,n={}){let o={dataSource:e,tableName:t,schema:n.schema},i=this.createEndpoint("/db/describe-table",o),a=await this.get(i);if(!V(a))throw this.createInvalidEndpointResponseError("/db/describe-table","missing table metadata",{dataSource:e,tableName:t,schema:n.schema});let s=n.includeDDL?(await this.queryDbDdl(e,t,n)).ddl:void 0,c={dataSource:e,table:a};return s!==void 0&&(c.ddl=s),c}async executeDbQuery(e){return this.post("/db/exec-query-sql",this.resolveDbSqlExecRequest(e))}async queryDbDdl(e,t,n={}){let o=await this.post("/db/query-ddl",{dataSource:e,tableName:t,...n.schema!==void 0?{schema:n.schema}:{}});return{dataSource:e,tableName:t,ddl:o}}async exportDbQueryData(e){let t=this.resolveDbSqlExecRequest(e);return this.requestBuffer(`${this.serverUrl}${Ut}/db/export-query-data`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async exportDbTableData(e){let t=this.resolveDbTableRequest(e);return this.requestBuffer(`${this.serverUrl}${Ut}/db/export-table-data`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async executeDbAny(e){return this.post("/db/exec-any-sql",this.resolveDbSqlExecRequest(e))}async importDbTableData(e){return this.post("/db/import-table-data",this.resolveDbTableRequest(e))}async executeScript(e){return this.post("/script/execute-temp",e)}async checkScript(e){return{diagnostics:await this.post("/script/check",e)}}async refreshCache(){await this.post("/server/refresh-cache",{})}async getTypeScriptSupportApiLibs(){return this.get("/support/typescript-libs")}async getJsonSchemaSupport(){return this.get("/support/json-schema-manifest")}async downloadJsonSchema(e){let t="dist/json-schemas/",o=dn(e.startsWith(t)?e.slice(t.length):e,"JSON Schema source").split("/").map(i=>encodeURIComponent(i)).join("/");return this.requestText(`${this.serverUrl}${Ut}/support/json-schema?schemaFile=${o}`)}async getFrontendFrameworksManifest(){return this.get("/support/frontend-frameworks")}async get(e){return this.requestJson(`${this.serverUrl}${Ut}${e}`)}async post(e,t,n){return this.requestJson(`${this.serverUrl}${Ut}${e}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)},n)}createEndpoint(e,t){let n=new URLSearchParams;for(let[i,a]of Object.entries(t))a!=null&&n.set(i,String(a));let o=n.toString();return o?`${e}?${o}`:e}resolveDbSqlExecRequest(e){let{projectName:t,...n}=e;return n}resolveDbTableRequest(e){let{projectName:t,...n}=e;return n}async postFileMutation(e,t){let n=e==="/file/move"?this.toMoveFileMutationMetadata(t):this.toFileMutationMetadata(t),o=this.toFileMutationContext(e,t),i=t.contentChanged?await this.postMultipartFileMutation(e,t,n):await this.post(e,n);return this.toFileMutationResponse(i,o)}async postMultipartFileMutation(e,t,n){U(t.localContentPath,`localContentPath is required when contentChanged is true: ${t.path}`);let o=this.createMultipartBoundary(),i=ji.Readable.from(this.createFileMutationMultipartBody(o,t.localContentPath,n));return this.requestJson(`${this.serverUrl}${Ut}${e}`,{method:"POST",headers:{"Content-Type":`multipart/form-data; boundary=${o}`},body:i,duplex:"half"})}async*createFileMutationMultipartBody(e,t,n){let o=JSON.stringify(n);yield Buffer.from(`--${e}\r
41
+ `}function ca(r,e){return`\r
42
+ `.indexOf(r.charAt(e))!==-1}var la;(function(r){r.DEFAULT={allowTrailingComma:!1}})(la||(la={}));function cy(r,e=[],t=la.DEFAULT){let n=null,o=[],i=[];function a(c){Array.isArray(o)?o.push(c):n!==null&&(o[n]=c)}return wu(r,{onObjectBegin:()=>{let c={};a(c),i.push(o),o=c,n=null},onObjectProperty:c=>{n=c},onObjectEnd:()=>{o=i.pop()},onArrayBegin:()=>{let c=[];a(c),i.push(o),o=c,n=null},onArrayEnd:()=>{o=i.pop()},onLiteralValue:a,onError:(c,l,p)=>{e.push({error:c,offset:l,length:p})}},t),o[0]}function ku(r,e=[],t=la.DEFAULT){let n={type:"array",offset:-1,length:-1,children:[],parent:void 0};function o(c){n.type==="property"&&(n.length=c-n.offset,n=n.parent)}function i(c){return n.children.push(c),c}wu(r,{onObjectBegin:c=>{n=i({type:"object",offset:c,length:-1,parent:n,children:[]})},onObjectProperty:(c,l,p)=>{n=i({type:"property",offset:l,length:-1,parent:n,children:[]}),n.children.push({type:"string",value:c,offset:l,length:p,parent:n})},onObjectEnd:(c,l)=>{o(c+l),n.length=c+l-n.offset,n=n.parent,o(c+l)},onArrayBegin:(c,l)=>{n=i({type:"array",offset:c,length:-1,parent:n,children:[]})},onArrayEnd:(c,l)=>{n.length=c+l-n.offset,n=n.parent,o(c+l)},onLiteralValue:(c,l,p)=>{i({type:gM(c),offset:l,length:p,parent:n,value:c}),o(l+p)},onSeparator:(c,l,p)=>{n.type==="property"&&(c===":"?n.colonOffset=l:c===","&&o(l))},onError:(c,l,p)=>{e.push({error:c,offset:l,length:p})}},t);let s=n.children[0];return s&&delete s.parent,s}function Gs(r,e){if(!r)return;let t=r;for(let n of e)if(typeof n=="string"){if(t.type!=="object"||!Array.isArray(t.children))return;let o=!1;for(let i of t.children)if(Array.isArray(i.children)&&i.children[0].value===n&&i.children.length===2){t=i.children[1],o=!0;break}if(!o)return}else{let o=n;if(t.type!=="array"||o<0||!Array.isArray(t.children)||o>=t.children.length)return;t=t.children[o]}return t}function wu(r,e,t=la.DEFAULT){let n=sa(r,!1),o=[],i=0;function a(q){return q?()=>i===0&&q(n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter()):()=>!0}function s(q){return q?X=>i===0&&q(X,n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter()):()=>!0}function c(q){return q?X=>i===0&&q(X,n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter(),()=>o.slice()):()=>!0}function l(q){return q?()=>{i>0?i++:q(n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter(),()=>o.slice())===!1&&(i=1)}:()=>!0}function p(q){return q?()=>{i>0&&i--,i===0&&q(n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter())}:()=>!0}let d=l(e.onObjectBegin),g=c(e.onObjectProperty),m=p(e.onObjectEnd),f=l(e.onArrayBegin),y=p(e.onArrayEnd),C=c(e.onLiteralValue),v=s(e.onSeparator),P=a(e.onComment),h=s(e.onError),S=t&&t.disallowComments,k=t&&t.allowTrailingComma;function E(){for(;;){let q=n.scan();switch(n.getTokenError()){case 4:w(14);break;case 5:w(15);break;case 3:w(13);break;case 1:S||w(11);break;case 2:w(12);break;case 6:w(16);break}switch(q){case 12:case 13:S?w(10):P();break;case 16:w(1);break;case 15:case 14:break;default:return q}}}function w(q,X=[],ie=[]){if(h(q),X.length+ie.length>0){let ne=n.getToken();for(;ne!==17;){if(X.indexOf(ne)!==-1){E();break}else if(ie.indexOf(ne)!==-1)break;ne=E()}}}function Y(q){let X=n.getTokenValue();return q?C(X):(g(X),o.push(X)),E(),!0}function M(){switch(n.getToken()){case 11:let q=n.getTokenValue(),X=Number(q);isNaN(X)&&(w(2),X=0),C(X);break;case 7:C(null);break;case 8:C(!0);break;case 9:C(!1);break;default:return!1}return E(),!0}function V(){return n.getToken()!==10?(w(3,[],[2,5]),!1):(Y(!1),n.getToken()===6?(v(":"),E(),Z()||w(4,[],[2,5])):w(5,[],[2,5]),o.pop(),!0)}function N(){d(),E();let q=!1;for(;n.getToken()!==2&&n.getToken()!==17;){if(n.getToken()===5){if(q||w(4,[],[]),v(","),E(),n.getToken()===2&&k)break}else q&&w(6,[],[]);V()||w(4,[],[2,5]),q=!0}return m(),n.getToken()!==2?w(7,[2],[]):E(),!0}function se(){f(),E();let q=!0,X=!1;for(;n.getToken()!==4&&n.getToken()!==17;){if(n.getToken()===5){if(X||w(4,[],[]),v(","),E(),n.getToken()===4&&k)break}else X&&w(6,[],[]);q?(o.push(0),q=!1):o[o.length-1]++,Z()||w(4,[],[4,5]),X=!0}return y(),q||o.pop(),n.getToken()!==4?w(8,[4],[]):E(),!0}function Z(){switch(n.getToken()){case 3:return se();case 1:return N();case 10:return Y(!0);default:return M()}}return E(),n.getToken()===17?t.allowEmptyContent?!0:(w(4,[],[]),!1):Z()?(n.getToken()!==17&&w(9,[],[]),!0):(w(4,[],[]),!1)}function gM(r){switch(typeof r){case"boolean":return"boolean";case"number":return"number";case"string":return"string";case"object":{if(r){if(Array.isArray(r))return"array"}else return"null";return"object"}default:return"null"}}function ly(r,e,t,n){let o=e.slice(),a=ku(r,[]),s,c;for(;o.length>0&&(c=o.pop(),s=Gs(a,o),s===void 0&&t!==void 0);)typeof c=="string"?t={[c]:t}:t=[t];if(s)if(s.type==="object"&&typeof c=="string"&&Array.isArray(s.children)){let l=Gs(s,[c]);if(l!==void 0)if(t===void 0){if(!l.parent)throw new Error("Malformed AST");let p=s.children.indexOf(l.parent),d,g=l.parent.offset+l.parent.length;if(p>0){let m=s.children[p-1];d=m.offset+m.length}else d=s.offset+1,s.children.length>1&&(g=s.children[1].offset);return so(r,{offset:d,length:g-d,content:""},n)}else return so(r,{offset:l.offset,length:l.length,content:JSON.stringify(t)},n);else{if(t===void 0)return[];let p=`${JSON.stringify(c)}: ${JSON.stringify(t)}`,d=n.getInsertionIndex?n.getInsertionIndex(s.children.map(m=>m.children[0].value)):s.children.length,g;if(d>0){let m=s.children[d-1];g={offset:m.offset+m.length,length:0,content:","+p}}else s.children.length===0?g={offset:s.offset+1,length:0,content:p}:g={offset:s.offset+1,length:0,content:p+","};return so(r,g,n)}}else if(s.type==="array"&&typeof c=="number"&&Array.isArray(s.children)){let l=c;if(l===-1){let p=`${JSON.stringify(t)}`,d;if(s.children.length===0)d={offset:s.offset+1,length:0,content:p};else{let g=s.children[s.children.length-1];d={offset:g.offset+g.length,length:0,content:","+p}}return so(r,d,n)}else if(t===void 0&&s.children.length>=0){let p=c,d=s.children[p],g;if(s.children.length===1)g={offset:s.offset+1,length:s.length-2,content:""};else if(s.children.length-1===p){let m=s.children[p-1],f=m.offset+m.length,y=s.offset+s.length;g={offset:f,length:y-2-f,content:""}}else g={offset:d.offset,length:s.children[p+1].offset-d.offset,content:""};return so(r,g,n)}else if(t!==void 0){let p,d=`${JSON.stringify(t)}`;if(!n.isArrayInsertion&&s.children.length>c){let g=s.children[c];p={offset:g.offset,length:g.length,content:d}}else if(s.children.length===0||c===0)p={offset:s.offset+1,length:0,content:s.children.length===0?d:d+","};else{let g=c>s.children.length?s.children.length:c,m=s.children[g-1];p={offset:m.offset+m.length,length:0,content:","+d}}return so(r,p,n)}else throw new Error(`Can not ${t===void 0?"remove":n.isArrayInsertion?"insert":"modify"} Array index ${l} as length is not sufficient`)}else throw new Error(`Can not add ${typeof c!="number"?"index":"property"} to parent of type ${s.type}`);else{if(t===void 0)throw new Error("Can not delete in empty document");return so(r,{offset:a?a.offset:0,length:a?a.length:0,content:JSON.stringify(t)},n)}}function so(r,e,t){if(!t.formattingOptions)return[e];let n=Ks(r,e),o=e.offset,i=e.offset+e.content.length;if(e.length===0||e.content.length===0){for(;o>0&&!ca(n,o-1);)o--;for(;i<n.length&&!ca(n,i);)i++}let a=vu(n,{offset:o,length:i-o},{...t.formattingOptions,keepLines:!1});for(let c=a.length-1;c>=0;c--){let l=a[c];n=Ks(n,l),o=Math.min(o,l.offset),i=Math.max(i,l.offset+l.length),i+=l.content.length-l.length}let s=r.length-(n.length-i)-o;return[{offset:o,length:s,content:n.substring(o,i)}]}function Ks(r,e){return r.substring(0,e.offset)+e.content+r.substring(e.offset+e.length)}var py;(function(r){r[r.None=0]="None",r[r.UnexpectedEndOfComment=1]="UnexpectedEndOfComment",r[r.UnexpectedEndOfString=2]="UnexpectedEndOfString",r[r.UnexpectedEndOfNumber=3]="UnexpectedEndOfNumber",r[r.InvalidUnicode=4]="InvalidUnicode",r[r.InvalidEscapeCharacter=5]="InvalidEscapeCharacter",r[r.InvalidCharacter=6]="InvalidCharacter"})(py||(py={}));var uy;(function(r){r[r.OpenBraceToken=1]="OpenBraceToken",r[r.CloseBraceToken=2]="CloseBraceToken",r[r.OpenBracketToken=3]="OpenBracketToken",r[r.CloseBracketToken=4]="CloseBracketToken",r[r.CommaToken=5]="CommaToken",r[r.ColonToken=6]="ColonToken",r[r.NullKeyword=7]="NullKeyword",r[r.TrueKeyword=8]="TrueKeyword",r[r.FalseKeyword=9]="FalseKeyword",r[r.StringLiteral=10]="StringLiteral",r[r.NumericLiteral=11]="NumericLiteral",r[r.LineCommentTrivia=12]="LineCommentTrivia",r[r.BlockCommentTrivia=13]="BlockCommentTrivia",r[r.LineBreakTrivia=14]="LineBreakTrivia",r[r.Trivia=15]="Trivia",r[r.Unknown=16]="Unknown",r[r.EOF=17]="EOF"})(uy||(uy={}));var my=cy;var dy;(function(r){r[r.InvalidSymbol=1]="InvalidSymbol",r[r.InvalidNumberFormat=2]="InvalidNumberFormat",r[r.PropertyNameExpected=3]="PropertyNameExpected",r[r.ValueExpected=4]="ValueExpected",r[r.ColonExpected=5]="ColonExpected",r[r.CommaExpected=6]="CommaExpected",r[r.CloseBraceExpected=7]="CloseBraceExpected",r[r.CloseBracketExpected=8]="CloseBracketExpected",r[r.EndOfFileExpected=9]="EndOfFileExpected",r[r.InvalidCommentToken=10]="InvalidCommentToken",r[r.UnexpectedEndOfComment=11]="UnexpectedEndOfComment",r[r.UnexpectedEndOfString=12]="UnexpectedEndOfString",r[r.UnexpectedEndOfNumber=13]="UnexpectedEndOfNumber",r[r.InvalidUnicode=14]="InvalidUnicode",r[r.InvalidEscapeCharacter=15]="InvalidEscapeCharacter",r[r.InvalidCharacter=16]="InvalidCharacter"})(dy||(dy={}));function hy(r){switch(r){case 1:return"InvalidSymbol";case 2:return"InvalidNumberFormat";case 3:return"PropertyNameExpected";case 4:return"ValueExpected";case 5:return"ColonExpected";case 6:return"CommaExpected";case 7:return"CloseBraceExpected";case 8:return"CloseBracketExpected";case 9:return"EndOfFileExpected";case 10:return"InvalidCommentToken";case 11:return"UnexpectedEndOfComment";case 12:return"UnexpectedEndOfString";case 13:return"UnexpectedEndOfNumber";case 14:return"InvalidUnicode";case 15:return"InvalidEscapeCharacter";case 16:return"InvalidCharacter"}return"<unknown ParseErrorCode>"}function fy(r,e,t,n){return ly(r,e,t,n)}function gy(r,e){let t=e.slice(0).sort((o,i)=>{let a=o.offset-i.offset;return a===0?o.length-i.length:a}),n=r.length;for(let o=t.length-1;o>=0;o--){let i=t[o];if(i.offset+i.length<=n)r=Ks(r,i);else throw new Error("Overlapping edit");n=i.offset}return r}Pt();K();te();var SM=T("common.json");var hr={allowComment:!0},vM={insertSpaces:!1,tabSize:4,eol:`
43
+ `,insertFinalNewline:!0};function Vt(r,e={}){try{if(!r.trim())return{};let t;if(e.allowComment===!0){let n=[];if(t=my(r,n,wM(e)),n.length>0)throw new Error(`JSON cannot be parsed safely: ${kM(e.filePath,n)}`)}else t=JSON.parse(r);if(!z(t))throw new Error(`JSON root is not an object: ${e.filePath??"<inline>"}`);return t}catch(t){if(e.ignoreParseError===!0)return SM.warn(`ignore JSON object because it cannot be parsed safely: ${e.filePath??"<inline>"}`,t instanceof Error?t.message:String(t)),e.defaultValue;throw t}}async function Cy(r,e={}){let{attempts:t=3,delayMs:n=50,ignoreParseError:o=!0,...i}=e,a=Math.max(1,Math.floor(t)),s="",c;for(let l=0;l<a;l++){let p=await yy.promises.readFile(r,"utf8");s=p;try{return Vt(p,{...i,filePath:r})}catch(d){c=d}l<a-1&&await new Promise(d=>setTimeout(d,n))}if(o)return Vt(s,{...i,filePath:r,ignoreParseError:!0});throw c}async function co(r,e={}){let{defaultValue:t,ignoreParseError:n=!0,...o}=e,i=await qe(r);return i.trim()?Vt(i,{...o,filePath:r,defaultValue:t,ignoreParseError:n}):t??{}}function kM(r,e){let t=r??"<inline>",n=e.map(o=>`${hy(o.error)}@${o.offset}`).join(", ");return`${t} (${n})`}function Vr(r){return r.trim()?r:`{}
44
+ `}function qt(r,e,t){let n=Vr(r);return gy(n,fy(n,e,t,{formattingOptions:vM}))}function wM(r){let e=r.allowComment===!0;return{allowEmptyContent:!0,allowTrailingComma:e,disallowComments:!e}}K();te();async function Py(){let r=xy();return AM(await co(r,{defaultValue:{},ignoreParseError:!1}))}async function Ry(){let r=Fy();return OM(await co(r,{defaultValue:{},ignoreParseError:!0}))}async function Ey(r){let[e,t]=await Promise.all([Py(),Ry()]);if(r===void 0)return{auth:e,session:t};let n=ge(r);return{serverUrl:n,auth:e.servers[n],session:t.servers[n]}}async function Eu(r){return(await Js(()=>({patch:r,result:void 0}))).state}async function Js(r){return iy(NM(),async()=>{let[e,t]=await Promise.all([Py(),Ry()]),n=r({auth:e,session:t}),o=n.patch,i=o.auth===void 0?e:FM(e,o.auth),a=o.session===void 0?t:DM(t,o.session);return await Promise.all([o.auth===void 0?void 0:ky(xy(),i),o.session===void 0?void 0:ky(Fy(),a)]),{state:{auth:i,session:a},result:n.result}})}var Pu=1,Ru=1,PM=".succapp",RM="auth.json",EM="session.json",bM="auth-state.lock",TM="SUCCAPP_AUTH_SETTINGS_FILE",MM="SUCCAPP_AUTH_SETTINGS_DIR",xM=T("api.auth-settings");function FM(r,e){if(e.servers===void 0)return r;if(e.servers===null)return{version:Pu,servers:{}};let t={...r.servers};for(let[n,o]of Object.entries(e.servers)){let i=ge(n);if(o==null){delete t[i];continue}let a=IM(t[i]??{},o);Object.keys(a).length===0?delete t[i]:t[i]=a}return{version:Pu,servers:t}}var Sy=["authType","username","userId","lastLoginAt","updatedAt"];function IM(r,e){let t={};for(let n of Sy){let o=r[n];o!==void 0&&(t[n]=o)}for(let n of Sy){if(!Object.prototype.hasOwnProperty.call(e,n))continue;let o=e[n];o==null?delete t[n]:t[n]=o}return t}function DM(r,e){if(e.servers===void 0)return r;if(e.servers===null)return{version:Ru,servers:{}};let t={...r.servers};for(let[n,o]of Object.entries(e.servers)){let i=ge(n),a=o==null?void 0:Ty(o);a===void 0?delete t[i]:t[i]=a}return{version:Ru,servers:t}}function AM(r){return{version:Pu,servers:by(r,"auth settings",!0,_M)}}function by(r,e,t,n){let o={},a=(z(r)?r:{}).servers;if(a===void 0)return o;if(!z(a)){if(t)throw new Error(`${e} servers must be an object`);return o}for(let[s,c]of Object.entries(a)){let l=LM(s,e,t);if(!l)continue;if(!z(c)){if(!t)continue;throw new Error(`${e} server entry must be an object: ${s}`)}let p=n(c);p!==void 0&&(o[l]=p)}return o}function OM(r){return{version:Ru,servers:by(r,"session settings",!1,Ty)}}function _M(r){if(!z(r))return;let e=O({authType:My(r.authType),username:br(r.username),userId:br(r.userId),lastLoginAt:br(r.lastLoginAt),updatedAt:br(r.updatedAt)});return Object.keys(e).length===0?void 0:e}function Ty(r){if(!z(r))return;let e=vy(r.token),t=vy(r.accessToken),n=br(r.refreshToken),o=My(r.authType);!o&&(t||n)&&(o="oauth"),!o&&e&&(o="pat");let i=O({authType:o,token:e??t,refreshToken:n,lastSeenAt:br(r.lastSeenAt),updatedAt:br(r.updatedAt)});return Object.keys(i).length===0?void 0:i}function vy(r){if(!z(r)||r.type!=="Bearer")return;let e=br(r.value);if(e)return O({type:"Bearer",value:e,expiresAt:br(r.expiresAt),scope:Jn(r.scope),updatedAt:br(r.updatedAt)})}function My(r){return r==="oauth"||r==="pat"?r:void 0}function br(r){return typeof r=="string"?r:void 0}function LM(r,e,t){try{return ge(r)}catch(n){if(t)throw new Error(`invalid ${e} server key: ${r}`,{cause:n instanceof Error?n:void 0});xM.warn(`ignored invalid ${e} server key: ${r}`,n);return}}async function ky(r,e){await Cn(r,`${JSON.stringify(e,void 0," ")}
45
+ `)}function bu(){let r=Iy();if(r)return qr.dirname(r);let e=WM();return e||qr.join(wy.homedir(),PM)}function xy(){let r=Iy();return r||qr.join(bu(),RM)}function Fy(){return qr.join(bu(),EM)}function NM(){return qr.join(bu(),bM)}function Iy(){return Dy(TM)}function WM(){return Dy(MM)}function Dy(r){let e=process.env[r]?.trim();return e?qr.resolve(e):void 0}async function Tu(r,e){let t=await Ys(r,e);return Mu(r,t)}async function Ys(r,e){let t=ge(r),n=new Date().toISOString();return e.type==="pat"?Ay(t,{authType:"pat",token:e.token,verifiedAt:n}):Ay(t,{authType:"oauth",token:e.token,refreshToken:e.refreshToken,expiresAt:e.expiresAt,scope:e.scope,verifiedAt:n})}async function Mu(r,e){$(rt(r,e.serverUrl),`verified credential belongs to another server: ${e.serverUrl}`);let t=ge(r),n=new Date().toISOString(),o=Ut(e.token);if(!o)throw new Oe({serverUrl:t});let i=O({authType:e.authType,username:e.username,userId:e.userId,lastLoginAt:e.verifiedAt??n,updatedAt:n}),a=O({authType:e.authType,token:O({type:"Bearer",value:o,expiresAt:e.expiresAt,scope:e.scope,updatedAt:e.verifiedAt??n}),refreshToken:e.refreshToken,lastSeenAt:e.verifiedAt??n,updatedAt:n}),s=await Eu({auth:{servers:{[t]:i}},session:{servers:{[t]:a}}}),c=Fu(t,s.auth.servers[t],s.session.servers[t]);if(!c)throw new Oe({serverUrl:t});return c}async function lo(r){let e=ge(r),{auth:t,session:n}=await Ey(e);return Fu(e,t,n)}async function xu(r){if(!r){let{result:n}=await Js(o=>({patch:{auth:{servers:null},session:{servers:null}},result:new Set([...Object.keys(o.auth.servers),...Object.keys(o.session.servers)]).size}));return{all:!0,removed:n}}let e=ge(r),{result:t}=await Js(n=>({patch:{auth:{servers:{[e]:null}},session:{servers:{[e]:null}}},result:n.auth.servers[e]||n.session.servers[e]?1:0}));return{all:!1,serverUrl:e,removed:t}}async function _y(r,e){let t=ge(r),n=e??await lo(t),o=n?.authType==="oauth"?Ut(n.refreshToken):void 0;if(!o)throw new Oe({serverUrl:t});let i=await dg(t,{refreshToken:o}),a=new Date().toISOString(),s=O({authType:"oauth",token:O({type:"Bearer",value:i.accessToken,expiresAt:i.expiresAt,scope:i.scope,updatedAt:a}),refreshToken:i.refreshToken,lastSeenAt:a,updatedAt:a}),c=await Eu({auth:{servers:{[t]:{authType:"oauth",updatedAt:a}}},session:{servers:{[t]:s}}}),l=Fu(t,c.auth.servers[t],c.session.servers[t]);if(!l)throw new Oe({serverUrl:t});return l}var Ly="/api/me/whoami";function Fu(r,e,t){if(!t?.authType)return;if(t.authType==="pat")return!t.token||tu(t.token.expiresAt)?void 0:{serverUrl:r,username:e?.username,userId:e?.userId,authType:"pat",token:t.token.value,expiresAt:t.token.expiresAt,scope:t.token.scope,tokenExpired:!1,lastLoginAt:e?.lastLoginAt,updatedAt:t.updatedAt??e?.updatedAt};if(!t.refreshToken)return;let n=tu(t.token?.expiresAt),o=t.token&&!n?t.token:void 0;return{serverUrl:r,username:e?.username,userId:e?.userId,authType:"oauth",token:o?.value,expiresAt:o?.expiresAt??t.token?.expiresAt,scope:o?.scope,refreshToken:t.refreshToken,tokenExpired:n,lastLoginAt:e?.lastLoginAt,updatedAt:t.updatedAt??e?.updatedAt}}async function Ay(r,e){let t=Ut(e.token);if(!t)throw new Oe({serverUrl:r});let n=await UM(r,t);return{serverUrl:r,authType:e.authType,username:n.username,userId:n.userId,token:t,expiresAt:Ut(e.expiresAt),scope:Jn(e.scope),refreshToken:Ut(e.refreshToken),verifiedAt:e.verifiedAt}}async function UM(r,e){let t=`${r}${Ly}`,n=await fn(t,{headers:{Authorization:`Bearer ${e}`}});if(n.status===401)throw new Oe({serverUrl:r});n.ok||await ro(n,t);let o;try{o=await n.json()}catch(s){throw Oy(r,t,"response body is not valid JSON",s)}if(!z(o))throw Oy(r,t,"response body is not an object");let i=Ut(o.userName)??Ut(o.username),a=Ut(o.userId)??Ut(o.id);if(o.anonymous===!0||!i&&!a)throw new Oe({serverUrl:r});return{username:i,userId:a}}function Oy(r,e,t,n){return new fe("err.net.invalidResponse",{properties:{url:e,endpoint:Ly,serverUrl:r,reason:t},cause:n})}var tC=b(require("fs")),rC=b(require("os")),Ou=b(require("path"));var Jy=b(require("fs")),uo=b(require("path")),ua=require("stream");we();Sn();H();te();Wo();function tx(r){let e="";for(let t=0;t<r.length;t++){let n=r[t];n==="*"&&r[t+1]==="*"?r[t+2]==="/"?(e+="(?:.*/)?",t+=2):(e+=".*",t++):n==="*"?e+="[^/]*":n==="?"?e+="[^/]":".+^$()|{}[]\\".includes(n)?e+="\\"+n:e+=n}return new RegExp("^"+e+"$")}var $y=new Map;function Du(r){let e=$y.get(r);return e||(e=tx(r),$y.set(r,e)),e}function Hy(r){let e=r.map(Du);return{matches(t){if(e.length===0)return!1;let n=t.replace(/^\/+/,"");return e.some(o=>o.test(n)||o.test("/"+n))}}}function ec(r,e){if(!e||e.length===0)return!1;let t=r.replace(/^\/+/,"");return e.some(n=>Du(n).test(t)||Du(n).test("/"+t))}H();var zy=/^[a-z0-9]+$/,po=class r{constructor(e){this.infos=e;this.infoByExtension=rx(e),this.patternInfos=nx(e)}infoByExtension;patternInfos;static empty(){return new r({})}static fromServerVersions(e){let t={};for(let[n,o]of Object.entries(e??{})){let i=ox(n,o);t[i.metaType]=i}return new r(t)}isEmpty(){return Object.keys(this.infos).length===0}getInfos(){return this.infos}getInfo(e){return this.infos[e]??this.infos[e.toLowerCase()]}getInfoByPath(e){let t=Re(ae(e)),n=this.infoByExtension.get(Ms(t));return n||this.patternInfos.find(o=>o.matcher.matches(t))?.info}};function rx(r){let e=new Map;for(let t of Object.values(r))Gy(t)&&e.set(t.metaType,t);return e}function nx(r){return Object.values(r).filter(e=>e.fileMatch.length>0&&!Gy(e)).map(e=>({info:e,matcher:Hy(e.fileMatch),specificity:ax(e)})).sort((e,t)=>t.specificity-e.specificity)}function Gy(r){return zy.test(r.metaType)&&r.fileMatch.length===1&&r.fileMatch[0]===`**/*.${r.metaType}`}function ox(r,e){let t=r.trim(),n=t.toLowerCase();if(zy.test(n))return{metaType:n,fileMatch:[`**/*.${n}`],contentVersion:e,upgradeSupported:!0};let o=ix(t);return{metaType:o,fileMatch:[o],contentVersion:e,upgradeSupported:!0}}function ix(r){return Re(ae(r))}function ax(r){return Math.max(0,...r.fileMatch.map(e=>e.replace(/[*?]/g,"").length))}F();U();un();var Ht="/api/dev-tool/v2",sx={viewFile:`${Ht}/file/view`},cx=5*60*1e3;function Yo(r,e){let t=new URLSearchParams;return t.set("path",e.path),e[":edit"]!==void 0&&t.set(":edit",e[":edit"]),`${r}${sx.viewFile}?${t.toString()}`}var wn=class{constructor(e,t={}){this.serverUrl=e;this.workspaceRoot=t.workspaceRoot,t.initialCredential&&(this.authCredential=t.initialCredential),this.requestRunner=new Je}requestRunner;workspaceRoot;authCredential;rejectedAuthCredentialSignature;get connected(){return this.authCredential?.token!==void 0}get currentAuthorizationHeader(){let e=this.authCredential?.token;return e?`Bearer ${e}`:""}getDiagnostics(e){return null}async verify(){if(this.authCredential===null?await this.doEnsureAuthCredentialLoaded():await this.ensureAuthCredentialLoaded(),await this.refreshOAuthCredentialIfNeeded(!1),!this.authCredential?.token)throw new Oe({workspaceRoot:this.workspaceRoot,serverUrl:this.serverUrl})}async getServerInfo(){return this.get("/server/info")}async getServerDetailInfo(){return this.get("/server/detail-info")}async getMetadataVersions(){return po.fromServerVersions((await this.getServerInfo()).metadataVersions)}async getProjects(){return this.get("/project/list")}async createProject(e){return this.post("/project/create",e)}async listFiles(e){return(await this.get(`/file/list?path=${encodeURIComponent(e)}`)).map(n=>this.normalizeMetaFileInfo(n))}async countFiles(e){return this.get(`/file/count?path=${encodeURIComponent(e)}`)}async getFileDescendant(e){let t=[];return await this.collectFileDescendants(e,t),t}async getFile(e){return this.normalizeMetaFileInfo(await this.get(`/file/get-info?path=${encodeURIComponent(e)}`))}async getFileInfos(e){return(await this.post("/file/get-infos",{paths:e})).map(n=>this.normalizeMetaFileInfo(n))}async getFileHistory(e,t={}){return this.get(this.createEndpoint("/file/get-history",{path:e,limit:t.limit}))}isNotFoundError(e){return If(e)}async getFileContent(e,t){let n=await this.doGetFileContentStream(e,t),o=[];for await(let i of n.stream)o.push(Buffer.isBuffer(i)?i:Buffer.from(i));return{buffer:Buffer.concat(o),revision:n.revision,modifyTime:n.modifyTime}}async getFileContentStream(e,t){return this.doGetFileContentStream(e,t)}async doGetFileContentStream(e,t){let n=`${this.serverUrl}${Ht}/file/get-content?path=${encodeURIComponent(e)}`;t?.revision!==void 0&&(n+=`&revision=${t.revision}`),t?.upgradeContent!==void 0&&(n+=`&upgradeContent=${t.upgradeContent}`);let o=await this.requestStream(n);return{stream:o.stream,revision:Number(o.response.headers.get("X-Meta-Revision")??"0"),modifyTime:Number(o.response.headers.get("X-Meta-ModifyTime")??"0")}}async upgradeFileContent(e){return this.post("/file/upgrade-content",e)}async saveFile(e,t,n){let o={action:n?.expectedRevision===null?"create":"modify",path:e,isFolder:!1},i=`${this.serverUrl}${Ht}/file/save?path=${encodeURIComponent(e)}`;n?.desc!==void 0&&(i+=`&desc=${encodeURIComponent(n.desc)}`),n?.expectedRevision!==void 0&&(i+=`&expectedRevision=${n.expectedRevision===null?"":n.expectedRevision}`);let a=await this.requestJson(i,{method:"POST",headers:{"Content-Type":"application/octet-stream"},body:this.toRequestBody(t),duplex:t instanceof ua.Readable?"half":void 0});return this.toFileMutationResponse(a,o)}async createFile(e){return this.postFileMutation("/file/create",e)}async modifyFile(e){return this.postFileMutation("/file/save",e)}async moveFile(e){return this.postFileMutation("/file/move",e)}async deleteFile(e,t){let n={path:e},o={action:"delete",path:e};t?.expectedRevision!==void 0&&(n.expectedRevision=t.expectedRevision),t?.expectedModifyTime!==void 0&&(n.expectedModifyTime=t.expectedModifyTime);let i=await this.post("/file/delete",n);return this.toFileMutationResponse(i,o)}buildViewFileRedirectUrl(e){return Yo(this.serverUrl,e)}async getExtensionTemplates(){return this.get("/extension/list-templates")}async downloadExtensionTemplate(e,t){let n=encodeURIComponent(e),o=encodeURIComponent(`${t}.zip`),i=`${this.serverUrl}${Ht}/extension/get-template?extensionPoint=${n}&zipFile=${o}`,a=await this.requestStream(i),s=[];for await(let c of a.stream)s.push(Buffer.isBuffer(c)?c:Buffer.from(c));return Buffer.concat(s)}async getDataSources(){return this.get("/db/list-datasources")}async getSettings(e={}){return this.post("/settings/get",e)}async setSettings(e){return this.post("/settings/set",e)}async probeDataSource(e,t){return this.post("/db/probe-datasource",{dataSource:e})}async getDataSourceConfig(e,t={}){return this.get(this.createEndpoint("/db/get-datasource-config",{dataSource:e}))}async testDataSource(e){let{projectName:t,originalDataSource:n,...o}=e,a={result:await this.post("/db/test-datasource",o)};return e.config.name!==void 0&&(a.dataSource=e.config.name),a}async createDataSource(e){let{projectName:t,...n}=e;return this.post("/db/create-datasource",n)}async updateDataSource(e){let{projectName:t,...n}=e;return this.post("/db/update-datasource",n)}async deleteDataSource(e){let{projectName:t,...n}=e;return this.post("/db/delete-datasource",n)}async listDbSchemas(e,t={}){return this.get(this.createEndpoint("/db/list-schemas",{dataSource:e,catalog:t.catalog}))}async listDbTables(e,t={}){return this.get(this.createEndpoint("/db/list-tables",{dataSource:e,schema:t.schema,tableNameContains:t.tableNameContains}))}async describeDbTable(e,t,n={}){let o={dataSource:e,tableName:t,schema:n.schema},i=this.createEndpoint("/db/describe-table",o),a=await this.get(i);if(!z(a))throw this.createInvalidEndpointResponseError("/db/describe-table","missing table metadata",{dataSource:e,tableName:t,schema:n.schema});let s=n.includeDDL?(await this.queryDbDdl(e,t,n)).ddl:void 0,c={dataSource:e,table:a};return s!==void 0&&(c.ddl=s),c}async executeDbQuery(e){return this.post("/db/exec-query-sql",this.resolveDbSqlExecRequest(e))}async queryDbDdl(e,t,n={}){let o=await this.post("/db/query-ddl",{dataSource:e,tableName:t,...n.schema!==void 0?{schema:n.schema}:{}});return{dataSource:e,tableName:t,ddl:o}}async exportDbQueryData(e){let t=this.resolveDbSqlExecRequest(e);return this.requestBuffer(`${this.serverUrl}${Ht}/db/export-query-data`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async exportDbTableData(e){let t=this.resolveDbTableRequest(e);return this.requestBuffer(`${this.serverUrl}${Ht}/db/export-table-data`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async executeDbAny(e){return this.post("/db/exec-any-sql",this.resolveDbSqlExecRequest(e))}async importDbTableData(e){return this.post("/db/import-table-data",this.resolveDbTableRequest(e))}async executeScript(e){return this.post("/script/execute-temp",e)}async checkScript(e){return{diagnostics:await this.post("/script/check",e)}}async refreshCache(){await this.post("/server/refresh-cache",{})}async getTypeScriptSupportApiLibs(){return this.get("/support/typescript-libs")}async getJsonSchemaSupport(){return this.get("/support/json-schema-manifest")}async downloadJsonSchema(e){let t="dist/json-schemas/",o=vn(e.startsWith(t)?e.slice(t.length):e,"JSON Schema source").split("/").map(i=>encodeURIComponent(i)).join("/");return this.requestText(`${this.serverUrl}${Ht}/support/json-schema?schemaFile=${o}`)}async getFrontendFrameworksManifest(){return this.get("/support/frontend-frameworks")}async get(e){return this.requestJson(`${this.serverUrl}${Ht}${e}`)}async post(e,t){return this.requestJson(`${this.serverUrl}${Ht}${e}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}createEndpoint(e,t){let n=new URLSearchParams;for(let[i,a]of Object.entries(t))a!=null&&n.set(i,String(a));let o=n.toString();return o?`${e}?${o}`:e}resolveDbSqlExecRequest(e){let{projectName:t,...n}=e;return n}resolveDbTableRequest(e){let{projectName:t,...n}=e;return n}async postFileMutation(e,t){let n=e==="/file/move"?this.toMoveFileMutationMetadata(t):this.toFileMutationMetadata(t),o=this.toFileMutationContext(e,t),i=t.contentChanged?await this.postMultipartFileMutation(e,t,n):await this.post(e,n);return this.toFileMutationResponse(i,o)}async postMultipartFileMutation(e,t,n){$(t.localContentPath,`localContentPath is required when contentChanged is true: ${t.path}`);let o=this.createMultipartBoundary(),i=ua.Readable.from(this.createFileMutationMultipartBody(o,t.localContentPath,n));return this.requestJson(`${this.serverUrl}${Ht}${e}`,{method:"POST",headers:{"Content-Type":`multipart/form-data; boundary=${o}`},body:i,duplex:"half"})}async*createFileMutationMultipartBody(e,t,n){let o=JSON.stringify(n);yield Buffer.from(`--${e}\r
44
46
  Content-Disposition: form-data; name="metadata"\r
45
47
  Content-Type: application/json; charset=utf-8\r
46
48
  \r
@@ -49,54 +51,61 @@ Content-Type: application/json; charset=utf-8\r
49
51
  Content-Disposition: form-data; name="content"; filename="content.bin"\r
50
52
  Content-Type: application/octet-stream\r
51
53
  \r
52
- `,"utf-8");for await(let i of Ug.createReadStream(t))yield Buffer.isBuffer(i)?i:Buffer.from(i);yield Buffer.from(`\r
54
+ `,"utf-8");for await(let i of Jy.createReadStream(t))yield Buffer.isBuffer(i)?i:Buffer.from(i);yield Buffer.from(`\r
53
55
  --${e}--\r
54
- `,"utf-8")}toFileMutationMetadata(e){let{localContentPath:t,contentChanged:n,...o}=e;return o}toMoveFileMutationMetadata(e){let{isFolder:t,...n}=this.toFileMutationMetadata(e);return n}toFileMutationContext(e,t){return e==="/file/create"?{action:"create",path:t.path,isFolder:t.isFolder}:e==="/file/move"?{action:"move",path:t.path,targetPath:t.targetPath,isFolder:t.isFolder}:{action:"modify",path:t.path,isFolder:t.isFolder}}toFileMutationResponse(e,t){let n=e.fileInfo?this.normalizeMetaFileInfo(e.fileInfo):void 0,o=n?.path??(t.action==="move"?t.targetPath??t.path:t.path),i={path:o,success:!0,contentMutation:this.getContentMutation(e,t.action),pathMutation:this.getPathMutation(t,o)};t.action==="move"&&(i.oldPath=t.path),e.modifyTime!==void 0&&(i.modifyTime=e.modifyTime);let a=this.getMetaInfoChanged(e,t);return a!==void 0&&(i.metaInfoChanged=a),n!==void 0&&(i.metaInfo=n),i}getContentMutation(e,t){return t==="delete"?"deleted":e.created===!0?"created":e.contentChanged===!0?"modified":"none"}getPathMutation(e,t){if(e.action!=="move"||e.path===t)return"none";let n=Qn.posix.dirname(e.path)!==Qn.posix.dirname(t),o=Qn.posix.basename(e.path)!==Qn.posix.basename(t);return n&&o?"renamedAndMoved":n?"moved":"renamed"}getMetaInfoChanged(e,t){return t.action==="create"&&t.isFolder===!0&&e.created!==!0?!0:e.metaInfoChanged}createMultipartBoundary(){return"----succapp-"+Date.now().toString(36)+"-"+Math.random().toString(36).slice(2)}toRequestBody(e){return e instanceof ji.Readable||Buffer.isBuffer(e)?e:Buffer.from(e,"utf-8")}normalizeMetaFileInfo(e){return{...e,parentDir:Qn.posix.dirname(e.path),name:Qn.posix.basename(e.path)}}async collectFileDescendants(e,t){let n=await this.listFiles(e);t.push(...n);for(let o of n)o.isFolder&&await this.collectFileDescendants(o.path,t)}async requestJson(e,t,n){return this.requestRunner.addTask(async()=>{let o=await this.fetchWithAuth(e,t,n);return await fs(o,this.createRequestContext(e,t))})}async requestText(e,t,n){return this.requestRunner.addTask(async()=>await(await this.fetchWithAuth(e,t,n)).text())}async requestBuffer(e,t,n){return this.requestRunner.addTask(async()=>{let o=await this.fetchWithAuth(e,t,n);return Buffer.from(await o.arrayBuffer())})}async requestStream(e,t,n){let o=await this.requestRunner.acquire();try{let i=await this.fetchWithAuth(e,t,n);if(await Cg(i.clone(),this.createRequestContext(e,t)),!i.body)throw new dt(e);let a=ji.Readable.fromWeb(i.body);return this.releaseRequestSlotAfterStream(a,o),{response:i,stream:a}}catch(i){throw o.release(),i}}async fetchWithAuth(e,t,n){let o=n?.authPolicy??this.authPolicy;await this.ensureStoredCredentialLoaded(o);let i=Bp(t?.headers),a=o==="auto"?this.bearerToken?.token:void 0;a&&(i.Authorization=`Bearer ${a}`);let s=await xo(e,{...t,headers:i});if(s.status===401)throw o==="auto"&&await this.handleAuthFailure(),new ut({workspaceRoot:this.workspaceRoot,serverUrl:this.serverUrl});return s.ok||await Ui(s,e),s}createRequestContext(e,t){return{url:e,endpoint:CT(e),serverUrl:this.serverUrl,request:ST(t?.body)}}createInvalidEndpointResponseError(e,t,n){return new _e("err.net.invalidResponse",{properties:{url:`${this.serverUrl}${Ut}${e}`,endpoint:e,serverUrl:this.serverUrl,reason:t,request:n}})}async ensureStoredCredentialLoaded(e){if(e!=="none"&&this.storedCredentialState==="not-loaded")return Ur(this,"storedCredential",()=>this.doEnsureStoredCredentialLoaded())}async doEnsureStoredCredentialLoaded(){let e=await Cs(this.serverUrl);if(!e){this.storedCredentialState="missing";return}if(!this.applyCredential(e)){this.storedCredentialState="missing";return}this.storedCredentialState="loaded"}applyCredential(e){let t=e.bearerToken;return t?.token?(this.bearerToken=t,!0):!1}async handleAuthFailure(){this.storedCredentialState==="loaded"&&await Tg(this.serverUrl),this.bearerToken=void 0,this.resetPersistedCredentialState()}resetPersistedCredentialState(){this.storedCredentialState="not-loaded"}releaseRequestSlotAfterStream(e,t){e.once("close",()=>t.release()),e.once("error",()=>t.release())}};function CT(r){try{let e=new URL(r),t=e.pathname.indexOf(Ut);return t<0?e.pathname:e.pathname.slice(t+Ut.length)||"/"}catch{return}}function ST(r){if(typeof r=="string")try{let e=JSON.parse(r);return V(e)?e:void 0}catch{return}}var jr={workspace:"SUCCAPP_WORKSPACE",server:"SUCCAPP_SERVER",json:"SUCCAPP_JSON",logLevel:"SUCCAPP_LOG_LEVEL",locale:"SUCCAPP_LOCALE"},ws={lcAll:"LC_ALL",lcMessages:"LC_MESSAGES",lang:"LANG"};var Pr=[{name:"workspace",alias:"C",takesValue:!0,valueHint:"path",description:"cli.opt.workspace",acceptWorkspaceTarget:!0},{name:"server",takesValue:!0,valueHint:"url",description:"cli.opt.server",acceptServerTarget:!0},{name:"json",takesValue:!1,description:"cli.opt.json"},{name:"quiet",alias:"q",takesValue:!1,description:"cli.opt.quiet"},{name:"verbose",alias:"v",takesValue:!1,description:"cli.opt.verbose"},{name:"lock-timeout",takesValue:!0,valueHint:"seconds",description:"cli.opt.lockTimeout",acceptDomains:["workspace"],acceptLockUsages:["workspace-write"],showInTopLevelHelp:!1},{name:"log-level",takesValue:!0,valueHint:"level",description:"cli.opt.logLevel"},{name:"locale",takesValue:!0,valueHint:"locale",description:"cli.opt.locale"},{name:"help",alias:"h",takesValue:!1,description:"cli.opt.help"},{name:"version",alias:"V",takesValue:!1,description:"cli.opt.version"}],Gp=Pr.filter(r=>r.showInTopLevelHelp!==!1);function jg(r){return{workspace:r.value("workspace"),server:r.value("server"),json:r.has("json"),quiet:r.has("quiet"),verbose:r.has("verbose"),lockTimeout:r.value("lock-timeout"),logLevel:r.value("log-level"),locale:r.value("locale"),help:r.has("help"),version:r.has("version")}}function Br(r,e){if(r.spec.flags.some(a=>a.name===e))return!0;let n=Pr.find(a=>a.name===e);if(!n)return!1;let o=n.acceptDomains;if(o&&o.length>0&&!o.includes(r.domain)||n.acceptWorkspaceTarget&&r.workspaceTarget==="none"||n.acceptServerTarget&&r.serverTarget==="none")return!1;let i=n.acceptLockUsages;return!(i&&!i.includes(r.lockUsage??"none"))}D();J();function Bg(r,e="param"){return r.map(t=>vT(t,e))}function Vg(r){let e={};for(let t of r)e[t.key]=t.value;return e}function Fe(r){return r.startsWith("-")?r:r.length===1?`-${r}`:`--${r}`}function Oo(r){return r.startsWith("-")&&r!=="-"}function vT(r,e){let t=Fe(e),n=r.indexOf("=");if(n<=0)throw new E("err.cli.invalidKeyValue",{input:t,option:t,flag:e,value:r});let o=r.slice(0,n).trim();if(!o)throw new E("err.cli.invalidNonEmptyKeyValue",{input:t,option:t,flag:e,value:r});return{key:o,value:r.slice(n+1)}}J();D();vt();$();var qg=b(require("fs")),Bi=b(require("path"));D();$();var kT=8;async function $g(r){let e=Bi.resolve(r.startPath),t=new Set((r.excludedRoots??[]).map(o=>Bi.resolve(o))),n=r.maxDepth??kT;for(let o=0;o<=n;o++){if(!t.has(e)&&await wT(e))return e;let i=Bi.dirname(e);if(i===e)return;e=i}}async function wT(r){try{return(await qg.promises.stat(pr(r))).isDirectory()}catch(e){if(F(e))return!1;throw e}}async function Rs(r,e){let t=r.command,n=t?.serverTarget??e.serverTarget??"required",o=t?.spec.positionals.some(C=>C.role==="server-url")??e.explicitServerUrl!==void 0,i=t?Br(t,"server"):!0,a=n!=="none"&&(t?t.workspaceTarget!=="none":!0),s=n!=="none",c=r.workspace;c&&a&&await c.config.ensureLoaded();let l=o?e.explicitServerUrl:void 0,p=i?r.config.server:void 0,m=a?c?.activeServerUrl:void 0,g=s?r.config.envServer:void 0,d=l??p??m??g;if(!d)throw new E("err.cli.missingInput",{inputId:"server",sourceIds:PT({positionalServerUrl:o,serverOption:i,workspaceServer:a,environmentServer:s}),commandName:r.command?.spec.name,envName:jr.server});let f=c?.config.resolveServerUrl(d);if(f!==void 0)return f;if(l!==void 0||p===void 0)return Vr(d);let y=Fe("server");return Vr(d,{input:y,option:y,flag:"server"})}function Vr(r,e={inputId:"server"}){try{return Se(r)}catch(t){throw Vn(t,"err.net.invalidUrl")?new E("err.cli.invalidUrl",{...e,value:r,url:r},{cause:t}):t}}async function Rr(r,e){let t=r.config.server;await e.config.ensureLoaded();let n=e.activeServerUrl;if(!n)throw new E("err.cli.missingInput",{inputId:"activeServer",sourceIds:["workspaceRemoteAdd"]});if(!t)return;let o=Fe("server"),i=Vr(t,{input:o,option:o,flag:"server"});if(!Qe(i,n))throw new E("err.cli.serverMismatch",{input:o,option:o,value:i,expected:n,context:{target:i,active:n}})}function PT(r){let e=[];return r.positionalServerUrl&&e.push("serverPositional"),r.serverOption&&e.push("serverOption"),r.workspaceServer&&e.push("workspaceRemoteAdd"),r.environmentServer&&e.push("environmentServer"),e}async function Kg(r,e){let t=r.workspace?.config.resolveServerUrl(e);return r.workspace&&t?r.workspace.requireServerClient(t):new un(e,{workspaceRoot:r.workspace?.root})}async function Gg(r){let e=r.workspace?Jp.resolve(r.cwd,r.workspace):Jp.resolve(r.cwd);r.workspace!==void 0&&await ks(e);let t=await $g({startPath:e,excludedRoots:[RT(r.env)],maxDepth:r.maxDepth});if(!t&&r.required!==!1)throw new E("err.cli.invalidWorkspace",{inputId:"workspace",source:e});return t}async function _o(r){try{return await Fp(r)}catch(e){throw Yg(r,e)}}async function Jg(r){try{return await Hg.promises.stat(r)}catch(e){throw Yg(r,e)}}function se(r,e){return{...r.workspace?{workspace:r.workspace.root}:{},server:e}}function RT(r=process.env){return r.HOME||r.USERPROFILE||zg.homedir()}function Yg(r,e){return F(e)?new E("err.file.notFound",{path:r},{cause:e}):new E("err.cli.invalidReadableFile",{inputId:"inputFile",source:r,path:r},{cause:e})}Ce();var de=class{toOptions(e){return{}}async execute(e,t){return await this.validateOptions(e,t),this.executeCommand(e,t)}validateOptions(e,t){}requireWorkspace(e){return U(e.workspace,"CLI command requires a workspace context"),e.workspace}async resolveServerUrl(e,t){return Rs(e,{explicitServerUrl:t})}createServerApiClient(e,t){return Kg(e,t)}},ce=class extends de{async executeCommand(e,t){let n=this.requireWorkspace(e);return this.executeWorkspaceCommand(n,e,t)}};D();J();q();D();async function mn(){let r=process.stdin,e=[];for await(let t of r)e.push(ET(t));return Buffer.concat(e).toString("utf8")}async function Xg(r=""){let e=process.stdin,t=process.stderr,n=e.isRaw===!0;return r&&t.write(r),e.isTTY&&e.setRawMode(!0),e.resume(),new Promise((o,i)=>{let a="",s=!1,c=f=>{for(let y of bT(f)){if(s)break;switch(y){case"\r":case`
55
- `:case"":g(a,o);break;case"":d(new Kt,i);break;case"\b":case"\x7F":a=a.slice(0,-1);break;default:a+=y}}},l=f=>{d(f,i)},p=()=>{g(a,o)},m=()=>{e.off("data",c),e.off("error",l),e.off("end",p),e.off("close",p),e.isTTY&&e.setRawMode(n),e.pause(),t.write(`
56
- `)},g=(f,y)=>{s||(s=!0,m(),y(f))},d=(f,y)=>{s||(s=!0,m(),y(f))};e.on("data",c),e.on("error",l),e.on("end",p),e.on("close",p)})}function ET(r){return typeof r=="string"?Buffer.from(r):Buffer.isBuffer(r)?r:Buffer.from(r)}function bT(r){return typeof r=="string"?r:Buffer.isBuffer(r)?r.toString("utf8"):r instanceof Uint8Array?Buffer.from(r).toString("utf8"):String(r??"")}var Yp=class extends de{readStdin;constructor(e=mn){super(),this.readStdin=e}toOptions(e){let t=e.has("oauth"),n=e.has("pat");return{serverUrl:e.positional[0],mode:n?"pat":"oauth",oauthRequested:t,patRequested:n}}validateOptions(e,t){if(t.oauthRequested&&t.patRequested)throw new E("err.cli.conflictingInputs",{inputs:["oauth","pat"]})}async executeCommand(e,t){let n=await this.resolveServerUrl(e,t.serverUrl);if(t.mode==="oauth")throw xT();let o=await TT(this.readStdin),i=await Eg(n,{type:"pat",token:o});return e.output.result({server:n,loggedIn:!0,authType:i.authType,stored:i.stored,username:i.username,userId:i.userId,methods:i.methods,token:i.methods.includes("token")},()=>h("cli.cmd.auth.login.loggedIn",n)),0}},Zg={path:["auth","login"],domain:"auth",spec:{name:"auth login",flags:[{name:"oauth",takesValue:!1},{name:"pat",takesValue:!1}],positionals:[{name:"url",role:"server-url"}],usageArgs:"[<options>] [<url>]",examples:["succapp auth login http://localhost:8080","succapp auth login --pat http://localhost:8080",'printf "%s" "$PAT" | succapp auth login --pat http://localhost:8080']},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Yp};async function TT(r){let e=!!process.stdin.isTTY,t=(e?await Xg(h("cli.cmd.auth.login.patPrompt")):await r()).trim();if(!t)throw new E("err.cli.missingInput",{inputId:"token",sources:e?void 0:["stdin"]});return t}function xT(){return new za("err.cli.unsupportedAuthFlow",{properties:{authType:"oauth",supportedAuthType:"pat"}})}q();D();J();var Xp=class extends de{toOptions(e){return{serverUrl:e.positional[0],all:e.has("all")}}validateOptions(e,t){if(t.all&&t.serverUrl)throw new E("err.cli.conflictingInputs",{inputs:["<url>","--all"]})}async executeCommand(e,t){if(t.all){let a=await qp();return e.output.result({all:a.all,removed:a.removed},()=>h("cli.cmd.auth.logout.removedAllAuth",a.removed)),0}let n=await this.resolveServerUrl(e,t.serverUrl),o=await qp(n),i=o.removed>0;return e.output.result({server:o.serverUrl??n,removed:i},()=>i?h("cli.cmd.auth.logout.removedAuth",n):h("cli.cmd.auth.logout.storedAuth",n)),0}},ey={path:["auth","logout"],domain:"auth",spec:{name:"auth logout",flags:[{name:"all",takesValue:!1}],positionals:[{name:"url",role:"server-url"}],usageArgs:"[<options>] [<url>]",examples:["succapp auth logout","succapp auth logout https://bi.example.com","succapp auth logout --all"]},workspaceTarget:"optional",serverTarget:"optional",createExecutor:()=>new Xp};q();var Qp=class extends de{toOptions(e){return{serverUrl:e.positional[0]}}async executeCommand(e,t){let n=await this.resolveServerUrl(e,t.serverUrl),o=await bg(n);return e.output.result({server:n,...FT(o)},()=>MT(n,o)),0}},ty={path:["auth","status"],domain:"auth",spec:{name:"auth status",flags:[],positionals:[{name:"url",role:"server-url"}],usageArgs:"[<options>] [<url>]",examples:["succapp auth status","succapp --server=https://bi.example.com auth status"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Qp};function FT(r){let e=r?.methods??[],t=e.includes("token");return{storedAuth:r!==void 0,authType:r?.authType,username:r?.username,userId:r?.userId,methods:e,token:t,expiresAt:r?.expiresAt,lastLoginAt:r?.lastLoginAt,updatedAt:r?.updatedAt}}function MT(r,e){return e?e.methods.length===0?h("cli.cmd.auth.storedAuthNoCred",r):h("cli.cmd.auth.storedAuth",r,e.methods.join(", ")):h("cli.cmd.auth.noStoredAuth",r)}var ry=[Zg,ey,ty];q();ne();$();D();J();var Zp=b(require("fs")),oy=b(require("path")),hn="file",Wo="input",Uo="mode",ed="dry-run",td="output",xt="force",Vi="config",jo="test",gt="timeout",rd="catalog",Ft="schema",nd="table-name-contains",gn="max-rows",Lo="query",No="query-file",yn=30,Re=class extends de{async executeCommand(e,t){let n=await this.prepareDbCommand(e,t),o=await this.resolveServerUrl(e),i=await this.createServerApiClient(e,o);return this.executeDbCommand(e,o,i,n)}prepareDbCommand(e,t){return Promise.resolve(t)}readDbInputTextFile(e,t){return _o(Wt(e.cwd,t))}readDbStdinText(){return mn()}isDbStdinInteractive(){return process.stdin.isTTY}async readDbSqlFromSource(e,t){return BT(t,{hasInteractiveStdin:()=>this.isDbStdinInteractive(),readFileText:n=>this.readDbInputTextFile(e,n),readStdin:()=>this.readDbStdinText()})}readDbImportContent(e,t){if(t.type==="file")return this.readDbInputTextFile(e,t.file);if(this.isDbStdinInteractive())throw new E("err.cli.missingInput",{inputId:"inputFile",sources:[`--${Wo}=<csv-file>`,"stdin"]});return this.readDbStdinText()}},fn=class extends Re{async readConfig(e,t){let n=t.type==="file"?await this.readDbInputTextFile(e,t.file):await this.readConfigFromStdin();return VT(n,t.type==="file"?t.file:"stdin")}async readConfigFromStdin(){if(this.isDbStdinInteractive())throw new E("err.cli.missingInput",{inputId:"dataSourceConfig",sources:[`--${Vi}=<json-file>`,"stdin"]});return this.readDbStdinText()}};function Bo(r){return[{name:Vi,takesValue:!0,valueHint:"json-file|-"},...r]}function iy(r){return A({name:r.name,desc:r.desc,defaultSchema:r.defaultSchema,defaultCatalog:r.defaultCatalog,readonly:r.readonly})}function Es(r){return A({schema:r.schema,tableName:r.tableName,tableType:r.tableType,tableComment:r.tableComment})}function ay(r){return A({name:r.name,primaryKey:r.primaryKey,unique:r.unique,dataType:r.dataType,dbType:r.dbType,length:r.length,scale:r.scale,defaultValue:r.defaultValue,autoInc:r.autoInc,nullable:r.nullable,comment:r.comment})}function sy(r){return A({elapsedMs:r.elapsedMs,fields:r.fields,data:r.data,rowCount:r.rowCount,maxRows:r.maxRows,truncated:r.truncated})}function cy(r){return A({dataSource:r.dataSource,resultType:r.resultType,force:r.force,updateCount:r.updateCount,results:r.results,sqlInfos:r.sqlInfos?.map(DT),fields:r.fields,data:r.data,columns:r.columns,rowCount:r.rowCount,maxRows:r.maxRows,truncated:r.truncated,elapsedMs:r.elapsedMs,timeoutMs:r.timeoutMs})}function ly(r){return A({dataSource:r.dataSource,schema:r.schema,tableName:r.tableName,mode:r.mode,dryRun:r.dryRun,importedRows:r.importedRows,skippedRows:r.skippedRows,elapsedMs:r.elapsedMs,timeoutMs:r.timeoutMs})}function DT(r){return A({datasource:r.datasource,schema:r.schema,sql:r.sql,sqlType:r.sqlType,tableName:r.tableName,dataMutation:r.dataMutation,schemaMutation:r.schemaMutation,manipulateAllRows:r.manipulateAllRows,dangerous:r.dangerous})}function Cn(r){let e=r;return A({result:r.result,dataSource:r.dataSource,originalDataSource:e.originalDataSource,config:e.config?bs(e.config):void 0})}function bs(r){let e=A({...r});return delete e.password,e}function py(r){return{columns:[h("cli.cmd.db.dataSource"),h("cli.out.header.description"),h("cli.cmd.db.defaultSchema"),h("cli.cmd.db.readonly")],rows:r.map(e=>[e.name??"",e.desc??"",e.defaultSchema??e.defaultCatalog??"",e.readonly===void 0?"":h(e.readonly?"cli.out.value.yes":"cli.out.value.no")])}}function dy(r){let e=bs(r);return{columns:[h("cli.out.header.field"),h("cli.out.header.value")],rows:Object.keys(e).sort().map(t=>[t,Cy(e[t])])}}function uy(r){return{columns:[h("cli.out.header.schema"),h("cli.out.header.table"),h("cli.out.header.type"),h("cli.out.header.comment")],rows:r.map(e=>[e.schema??"",e.tableName,e.tableType??"",e.tableComment??""])}}function my(r){let e=r.table.columns??[],t=_T(r.table);return{columns:[h("cli.out.header.field"),h("cli.out.header.type"),h("cli.out.header.null"),h("cli.out.header.key"),h("cli.out.header.default"),h("cli.out.header.extra"),h("cli.out.header.comment")],rows:e.map(n=>[n.name,IT(n),AT(n),OT(n,t),WT(n),UT(n),n.comment??""])}}function IT(r){let e=r.dbType??r.dataType??"";return!e||r.length===void 0||r.length<=0||e.includes("(")?e:r.scale!==void 0&&r.scale>0?`${e}(${r.length},${r.scale})`:`${e}(${r.length})`}function AT(r){return r.nullable===void 0?"":r.nullable?"YES":"NO"}function OT(r,e){return r.primaryKey?"PRI":r.unique?"UNI":e.get(od(r.name))??""}function _T(r){let e=new Map;for(let t of r.primaryKeys??[])e.set(od(t),"PRI");for(let t of r.indexes??[]){let n=t.primaryKey?"PRI":t.unique?"UNI":"MUL";for(let o of LT(t.parts))NT(e,o,n)}return e}function LT(r){if(!r)return[];let e=[];for(let t of r)typeof t=="string"?e.push(t):t.column&&e.push(t.column);return e}function NT(r,e,t){let n=od(e),o=r.get(n);o==="PRI"||o==="UNI"&&t==="MUL"||r.set(n,t)}function od(r){return r.toLowerCase()}function WT(r){return r.defaultValue===void 0?"":r.defaultValue??"NULL"}function UT(r){return r.autoInc?"auto_increment":""}function hy(r){return jT(r)?gy(r.fields,r.data):typeof r.updateCount=="number"?h("cli.cmd.db.sqlUpdateCount",String(r.updateCount)):h("cli.cmd.db.sqlExecutedSuccess")}function fy(r){return gy(r.fields,r.data)}function gy(r,e){return r.length?{columns:r,rows:e.map(t=>t.map(Cy))}:h("cli.cmd.db.sqlExecutedSuccess")}function yy(r){let e=r.skippedRows===void 0?"":h("cli.cmd.db.skipped",String(r.skippedRows)),t=r.dryRun?h("cli.cmd.db.dryImport"):h("cli.cmd.db.imported");return h("cli.cmd.db.rowsModeDry",t,String(r.importedRows),r.tableName,e,r.mode,String(r.dryRun))}function jT(r){return Array.isArray(r.fields)&&Array.isArray(r.data)}function Cy(r){return r==null?"":typeof r=="string"?r:typeof r=="number"||typeof r=="boolean"?String(r):JSON.stringify(r)}function Ts(r,e){let t=r.value(hn);if(e&&t)throw new E("err.cli.conflictingInputs",{inputs:["<sql>",`--${hn}=<sql-file>`]});return t?{type:"file",file:t}:e?{type:"argument",sql:e}:{type:"stdin"}}function Sy(r){let e=r.positional[1],t=ny(r,Lo),n=ny(r,No);if(t!==void 0&&n!==void 0)throw new E("err.cli.conflictingInputs",{inputs:[`--${Lo}=<sql>`,`--${No}=<sql-file>`]});if(e!==void 0&&(t!==void 0||n!==void 0))throw new E("err.cli.conflictingInputs",{inputs:["<table>",`--${Lo}`,`--${No}`]});if(t!==void 0)return{type:"query",sqlSource:{type:"argument",sql:t}};if(n!==void 0)return{type:"query",sqlSource:{type:"file",file:n}};if(e===void 0)throw new E("err.cli.missingInput",{inputId:"exportTarget",sources:["<table>",`--${Lo}=<sql>`,`--${No}=<sql-file>`]});let o=qi(r,e);return{type:"table",schema:o.schema,tableName:o.tableName}}function vy(r){let e=r.value(Wo);if(!e)throw new E("err.cli.missingInput",{inputId:"inputFile",sources:[`--${Wo}=<csv-file>`,`--${Wo}=-`]});return e==="-"?{type:"stdin"}:{type:"file",file:e}}async function BT(r,e){if(r.type==="argument")return r.sql;if(r.type==="file")return e.readFileText(r.file);if(e.hasInteractiveStdin())throw new E("err.cli.missingInput",{inputId:"sql",sources:["<sql>",`--${hn}=<sql-file>`,"stdin"]});let t=await e.readStdin();if(!nt(t))throw new E("err.cli.missingInput",{inputId:"sql",sources:["<sql>",`--${hn}=<sql-file>`,"stdin"]});return t}function Vo(r){let e=r.value(Vi);if(!e)throw new E("err.cli.missingInput",{inputId:"dataSourceConfig",sources:[`--${Vi}=<json-file>`,`--${Vi}=-`]});return e==="-"?{type:"stdin"}:{type:"file",file:e}}function VT(r,e){let t;try{t=JSON.parse(r)}catch(n){throw new E("err.cli.invalidJsonObject",{inputId:"dataSourceConfig",source:e},{cause:n})}if(!V(t))throw new E("err.cli.invalidJsonObject",{inputId:"dataSourceConfig",source:e});return t}async function ky(r,e,t){await Zp.promises.mkdir(oy.dirname(r),{recursive:!0});try{await Zp.promises.writeFile(r,e,{flag:t?"w":"wx"})}catch(n){throw!t&&$T(n)?new E("err.cli.confirmationRequired",{reason:"outputOverwrite",flag:`--${xt}`,path:r},{cause:n}):n}}function qT(r){let e=r.lastIndexOf(".");return e<=0||e===r.length-1?{tableName:r}:{schema:r.slice(0,e),tableName:r.slice(e+1)}}function qi(r,e){let t=r.value(Ft);return t!==void 0?{schema:t,tableName:e}:qT(e)}function Sn(r,e,t){if(r===void 0)return t;let n=Number(r);if(!Number.isInteger(n)||n<=0){let o=Fe(e);throw new E("err.cli.invalidPositiveInteger",{input:o,option:o,flag:e,value:r})}return n}function xs(r,e){if(r===void 0)return;let t=Number(r);if(!Number.isInteger(t)||t<0){let n=Fe(e);throw new E("err.cli.invalidNonNegativeInteger",{input:n,option:n,flag:e,value:r})}return t}function wy(r){if(r===void 0)return"append";if(r==="append"||r==="truncate"||r==="replace")return r;throw new E("err.cli.invalidChoice",{input:`--${Uo}`,option:`--${Uo}`,flag:Uo,value:r,allowedValues:["append","truncate","replace"]})}function $T(r){return typeof r=="object"&&r!==null&&"code"in r&&r.code==="EEXIST"}function ny(r,e){let t=r.value(e);return t===void 0||t.trim()===""?void 0:t}J();D();var id=class extends Re{toOptions(e){return{dataSource:e.positional[0],schema:e.value(Ft),sqlSource:Ts(e,e.positional[1]),timeoutSeconds:Sn(e.value(gt),gt,yn),maxRows:xs(e.value(gn),gn),force:e.has(xt)}}async prepareDbCommand(e,t){return{...t,sqlSource:{type:"argument",sql:await this.readDbSqlFromSource(e,t.sqlSource)}}}async executeDbCommand(e,t,n,o){let i=await this.readDbSqlFromSource(e,o.sqlSource),a=await this.executeAnySql(n,{dataSource:o.dataSource,schema:o.schema,sql:i,timeoutMs:o.timeoutSeconds*1e3,maxRows:o.maxRows,force:o.force});return e.output.result({...se(e,t),dataSource:o.dataSource,...o.schema!==void 0?{schema:o.schema}:{},timeoutSeconds:o.timeoutSeconds,...o.maxRows!==void 0?{maxRows:o.maxRows}:{},...o.force?{force:!0}:{},...cy(a)},()=>hy(a)),0}async executeAnySql(e,t){try{return await e.executeDbAny({dataSource:t.dataSource,...t.schema!==void 0?{schema:t.schema}:{},sql:t.sql,timeoutMs:t.timeoutMs,...t.maxRows!==void 0?{maxRows:t.maxRows}:{},...t.force?{force:!0}:{}})}catch(n){throw Vn(n,"err.sql.forceRequired")?new E("err.cli.confirmationRequired",{reason:"dbSqlMutation",flag:`--${xt}`,sqlInfos:n.properties.sqlInfos,context:{forceRequired:!0}},{cause:n}):n}}},Py={path:["db","exec"],domain:"db",spec:{name:"db exec",flags:[{name:hn,takesValue:!0,valueHint:"sql-file"},{name:Ft,takesValue:!0,valueHint:"schema"},{name:gt,takesValue:!0,valueHint:"seconds"},{name:gn,takesValue:!0,valueHint:"n"},{name:xt,takesValue:!1}],positionals:[{name:"datasource",required:!0},{name:"sql"}],usageArgs:"[<options>] <datasource> [<sql>]",examples:['succapp db exec default "update orders set status = 1 where id = 42"',"succapp db exec default --file=./change.sql --max-rows=10",'succapp db exec default "create table TEMP_ORDERS (ID int)" --force']},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new id};q();$();var ad=class extends Re{toOptions(e){return{dataSource:e.positional[0],schema:e.value(Ft),target:Sy(e),timeoutSeconds:Sn(e.value(gt),gt,yn),output:e.value(td),force:e.has(xt)}}async prepareDbCommand(e,t){return t.target.type!=="query"?t:{...t,target:{...t.target,sqlSource:{type:"argument",sql:await this.readDbSqlFromSource(e,t.target.sqlSource)}}}}async executeDbCommand(e,t,n,o){let i=o.target.type==="table"?{tableName:o.target.tableName}:{query:!0},a=o.target.type==="table"?await n.exportDbTableData({dataSource:o.dataSource,...o.target.schema!==void 0?{schema:o.target.schema}:{},tableName:o.target.tableName,timeoutMs:o.timeoutSeconds*1e3}):await n.exportDbQueryData({dataSource:o.dataSource,...o.schema!==void 0?{schema:o.schema}:{},sql:await this.readDbSqlFromSource(e,o.target.sqlSource),timeoutMs:o.timeoutSeconds*1e3}),s={...se(e,t),dataSource:o.dataSource,...o.target.type==="table"&&o.target.schema!==void 0?{schema:o.target.schema}:{},...o.target.type==="query"&&o.schema!==void 0?{schema:o.schema}:{},...i,timeoutSeconds:o.timeoutSeconds,size:a.length};if(o.output){let c=Wt(e.cwd,o.output);return await ky(c,a,o.force),e.output.result({...s,output:c},()=>h("cli.cmd.db.export.exportedData",c)),0}return e.output.content(s,a),0}},Ry={path:["db","export"],domain:"db",spec:{name:"db export",flags:[{name:Lo,takesValue:!0,valueHint:"sql"},{name:No,takesValue:!0,valueHint:"sql-file"},{name:Ft,takesValue:!0,valueHint:"schema"},{name:gt,takesValue:!0,valueHint:"seconds"},{name:td,takesValue:!0,valueHint:"csv-file"},{name:xt,takesValue:!1}],positionals:[{name:"datasource",required:!0},{name:"table"}],usageArgs:"[<options>] <datasource> [<table>]",examples:["succapp db export default orders --output=orders.csv","succapp db export default --query-file=./query.sql"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new ad};var sd=class extends Re{toOptions(e){let t=qi(e,e.positional[1]);return{dataSource:e.positional[0],schema:t.schema,tableName:t.tableName,inputSource:vy(e),mode:wy(e.value(Uo)),dryRun:e.has(ed),timeoutSeconds:Sn(e.value(gt),gt,yn)}}async executeDbCommand(e,t,n,o){let i=await this.readDbImportContent(e,o.inputSource),a=await n.importDbTableData({dataSource:o.dataSource,...o.schema!==void 0?{schema:o.schema}:{},tableName:o.tableName,content:i,format:"csv",mode:o.mode,dryRun:o.dryRun,timeoutMs:o.timeoutSeconds*1e3}),s={...a,mode:a.mode??o.mode,dryRun:a.dryRun??o.dryRun};return e.output.result({...se(e,t),...ly(s),timeoutSeconds:o.timeoutSeconds},()=>yy(s)),0}},Ey={path:["db","import"],domain:"db",spec:{name:"db import",flags:[{name:Wo,takesValue:!0,valueHint:"csv-file|-"},{name:Uo,takesValue:!0,valueHint:"append|truncate|replace"},{name:ed,takesValue:!1},{name:Ft,takesValue:!0,valueHint:"schema"},{name:gt,takesValue:!0,valueHint:"seconds"}],positionals:[{name:"datasource",required:!0},{name:"table",required:!0}],usageArgs:"[<options>] <datasource> <table>",examples:["succapp db import default orders --input=./orders.csv","succapp db import default public.orders --input=./orders.csv --mode=truncate --dry-run","cat orders.csv | succapp db import default public.orders --input=- --mode=append"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new sd};J();D();var cd=class extends Re{toOptions(e){return{dataSource:e.positional[0],schema:e.value(Ft),sqlSource:Ts(e,e.positional[1]),timeoutSeconds:Sn(e.value(gt),gt,yn),maxRows:xs(e.value(gn),gn)}}async prepareDbCommand(e,t){return{...t,sqlSource:{type:"argument",sql:await this.readDbSqlFromSource(e,t.sqlSource)}}}async executeDbCommand(e,t,n,o){let i=await this.readDbSqlFromSource(e,o.sqlSource),a=await this.executeQuerySql(n,{dataSource:o.dataSource,...o.schema!==void 0?{schema:o.schema}:{},sql:i,timeoutMs:o.timeoutSeconds*1e3,...o.maxRows!==void 0?{maxRows:o.maxRows}:{}});return e.output.result({...se(e,t),dataSource:o.dataSource,...o.schema!==void 0?{schema:o.schema}:{},readOnly:!0,timeoutSeconds:o.timeoutSeconds,...o.maxRows!==void 0?{maxRows:o.maxRows}:{},...sy(a)},()=>fy(a)),0}async executeQuerySql(e,t){try{return await e.executeDbQuery(t)}catch(n){throw Vn(n,"err.db.nonReadOnlySql")?new E("err.cli.confirmationRequired",{reason:"dbQueryWriteSql",flag:`--${xt}`,context:{backendErrorCode:"err.db.nonReadOnlySql"}},{cause:n}):n}}},by={path:["db","query"],domain:"db",spec:{name:"db query",flags:[{name:hn,takesValue:!0,valueHint:"sql-file"},{name:Ft,takesValue:!0,valueHint:"schema"},{name:gt,takesValue:!0,valueHint:"seconds"},{name:gn,takesValue:!0,valueHint:"n"}],positionals:[{name:"datasource",required:!0},{name:"sql"}],usageArgs:"[<options>] <datasource> [<sql>]",examples:['succapp db query default "select * from orders"',"succapp db query default --file=./query.sql --schema=PUBLIC --timeout=10 --max-rows=100"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new cd};q();ne();var ld=class extends Re{toOptions(e){return{dataSource:e.positional[0],catalog:e.value(rd)}}async executeDbCommand(e,t,n,o){let i=await n.listDbSchemas(o.dataSource,{...o.catalog!==void 0?{catalog:o.catalog}:{}});return e.output.result({...se(e,t),dataSource:o.dataSource,...o.catalog!==void 0?{catalog:o.catalog}:{},schemas:i.map(a=>A({...a}))},()=>({columns:[h("cli.out.header.schema"),h("cli.cmd.db.schema.list.catalog")],rows:i.map(a=>[a.name,a.catalog??""])})),0}},Ty={path:["db","schema","list"],domain:"db",spec:{name:"db schema list",flags:[{name:rd,takesValue:!0,valueHint:"catalog"}],positionals:[{name:"datasource",required:!0}],usageArgs:"[<options>] <datasource>",examples:["succapp db schema list default","succapp db schema list default --catalog=PUBLIC"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new ld};q();var pd=class extends fn{toOptions(e){return{configSource:Vo(e),testBeforeSave:e.has(jo)}}async executeDbCommand(e,t,n,o){let i=await this.readConfig(e,o.configSource),a=await n.createDataSource({config:i,testBeforeSave:o.testBeforeSave});return e.output.result({...se(e,t),...Cn(a)},()=>h("cli.cmd.db.source.create.created",a.dataSource??i.name??"")),0}},xy={path:["db","source","create"],domain:"db",spec:{name:"db source create",flags:Bo([{name:jo,takesValue:!1}]),positionals:[],usageArgs:"[<options>]",examples:["succapp db source create --config=./datasource.json --test"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new pd};var dd=class extends Re{async executeDbCommand(e,t,n){let o=await n.getDataSources();return e.output.result({...se(e,t),dataSources:o.map(iy)},()=>py(o)),0}},Fy={path:["db","source","list"],domain:"db",spec:{name:"db source list",flags:[],positionals:[],usageArgs:"[<options>]",examples:["succapp db source list","succapp --server=http://localhost:8180 db source list --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new dd};q();D();J();var ud=class extends Re{toOptions(e){return{dataSource:e.positional[0],force:e.has(xt)}}validateOptions(e,t){if(!t.force)throw new E("err.cli.confirmationRequired",{reason:"dbSourceDelete",flag:`--${xt}`,inputId:"dataSourceConfig"})}async executeDbCommand(e,t,n,o){let i=await n.deleteDataSource({dataSource:o.dataSource});return e.output.result({...se(e,t),...Cn(i)},()=>h("cli.cmd.db.source.remove.deleted",i.dataSource??o.dataSource)),0}},My={path:["db","source","remove"],domain:"db",spec:{name:"db source remove",flags:[{name:xt,takesValue:!1}],positionals:[{name:"datasource",required:!0}],usageArgs:"[<options>] <datasource>",examples:["succapp db source remove oldDs --force"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new ud};var md=class extends Re{toOptions(e){return{dataSource:e.positional[0]}}async executeDbCommand(e,t,n,o){let i=await n.getDataSourceConfig(o.dataSource);return e.output.result({...se(e,t),dataSource:o.dataSource,config:bs(i)},()=>dy(i)),0}},Dy={path:["db","source","show"],domain:"db",spec:{name:"db source show",flags:[],positionals:[{name:"datasource",required:!0}],usageArgs:"[<options>] <datasource>",examples:["succapp db source show default"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new md};q();var hd=class extends fn{toOptions(e){return{configSource:Vo(e)}}async executeDbCommand(e,t,n,o){let i=await this.readConfig(e,o.configSource),a=await n.testDataSource({config:i});return e.output.result({...se(e,t),...Cn(a)},()=>h("cli.cmd.db.source.test.testOk",a.dataSource??i.name??"")),0}},Iy={path:["db","source","test"],domain:"db",spec:{name:"db source test",flags:Bo([]),positionals:[],usageArgs:"[<options>]",examples:["succapp db source test --config=./datasource.json","cat datasource.json | succapp db source test --config=-"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new hd};q();var fd=class extends fn{toOptions(e){return{dataSource:e.positional[0],configSource:Vo(e),testBeforeSave:e.has(jo)}}async executeDbCommand(e,t,n,o){let i=await this.readConfig(e,o.configSource),a=await n.updateDataSource({dataSource:o.dataSource,config:i,testBeforeSave:o.testBeforeSave});return e.output.result({...se(e,t),...Cn(a)},()=>h("cli.cmd.db.source.update.updated",a.dataSource??i.name??o.dataSource)),0}},Ay={path:["db","source","update"],domain:"db",spec:{name:"db source update",flags:Bo([{name:jo,takesValue:!1}]),positionals:[{name:"datasource",required:!0}],usageArgs:"[<options>] <datasource>",examples:["succapp db source update oldDs --config=./datasource.json --test"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new fd};var gd=class extends Re{toOptions(e){let t=qi(e,e.positional[1]);return{dataSource:e.positional[0],schema:t.schema,tableName:t.tableName}}async executeDbCommand(e,t,n,o){let i=await n.describeDbTable(o.dataSource,o.tableName,{...o.schema!==void 0?{schema:o.schema}:{}});return e.output.result({...se(e,t),dataSource:o.dataSource,table:Es(i.table),columns:i.table.columns?.map(ay)??[]},()=>my(i)),0}},Oy={path:["db","table","describe"],domain:"db",spec:{name:"db table describe",flags:[{name:Ft,takesValue:!0,valueHint:"schema"}],positionals:[{name:"datasource",required:!0},{name:"table",required:!0}],usageArgs:"[<options>] <datasource> <table>",examples:["succapp db table describe default orders","succapp db table describe default public.orders"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new gd};var yd=class extends Re{toOptions(e){return{dataSource:e.positional[0],schema:e.positional[1],tableNameContains:e.value(nd)}}async executeDbCommand(e,t,n,o){let i=await n.listDbTables(o.dataSource,{...o.schema!==void 0?{schema:o.schema}:{},...o.tableNameContains!==void 0?{tableNameContains:o.tableNameContains}:{}});return e.output.result({...se(e,t),dataSource:o.dataSource,...o.schema!==void 0?{schema:o.schema}:{},...o.tableNameContains!==void 0?{tableNameContains:o.tableNameContains}:{},tables:i.map(Es)},()=>uy(i)),0}},_y={path:["db","table","list"],domain:"db",spec:{name:"db table list",flags:[{name:nd,takesValue:!0,valueHint:"text"}],positionals:[{name:"datasource",required:!0},{name:"schema"}],usageArgs:"[<options>] <datasource> [<schema>]",examples:["succapp db table list default","succapp db table list default PUBLIC --table-name-contains=order"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new yd};var Ly=[Fy,Dy,Iy,xy,Ay,My,Ty,_y,Oy,by,Py,Ey,Ry];var zT=2,Cd=class{constructor(e,t={}){this.model=e;this.columnGap=KT(t.columnGap)}columnGap;columnWidths;render(){return this.model.columns.length===0?"":(this.columnWidths=this.calculateColumnWidths(),[this.renderRow(this.model.columns),...this.model.rows.map(t=>this.renderRow(t))].join(`
57
- `))}calculateColumnWidths(){return this.model.columns.map((e,t)=>{let n=this.model.rows.map(o=>Sr(this.getCellText(o,t)));return Math.max(Sr(e),...n)})}renderRow(e){return this.getColumnWidths().map((t,n)=>this.padCell(this.getCellText(e,n),t)).join(this.getColumnSeparator()).trimEnd()}padCell(e,t){return Eo(e,t)}getCellText(e,t){return e[t]??""}getColumnSeparator(){return" ".repeat(this.columnGap)}getColumnWidths(){return this.columnWidths===void 0&&(this.columnWidths=this.calculateColumnWidths()),this.columnWidths}};function ke(r,e){return new Cd(r,e).render()}function KT(r){return r===void 0||!Number.isFinite(r)?zT:Math.max(0,Math.floor(r))}Un();q();ne();function Ny(r){return{changes:r.changes.length,local:r.localChanges.length,remote:r.remoteChanges.length,conflicts:r.conflicts.length}}function vn(r){return A({type:r.type,path:r.path,remotePath:r.remotePath,oldPath:r.oldPath,oldRemotePath:r.oldRemotePath,fileId:r.fileId,isFolder:r.isFolder,contentChanged:r.contentChanged,metaChanged:r.metaChanged,modifier:r.modifier,modifierName:r.modifierName,modifyTime:r.modifyTime})}function Fs(r){return A({name:r.name,id:r.id,desc:r.desc})}function Wy(r){return{url:r.url,active:r.active}}function Uy(r){return A({productType:r.productType,version:r.version,devToolApiVersion:r.devToolApiVersion,capabilities:r.capabilities,metadataVersions:r.metadataVersions})}function qr(r){return A({remotePath:r.remotePath,localPath:r.localPath,currentVersion:r.currentVersion,targetVersion:r.targetVersion,changed:r.changed,reason:r.reason,...zy(r.errorInfo)})}function Ms(r){return A({path:r.path,...zy(r.errorInfo)})}function Ds(r){return A({path:r.path,currentVersion:r.currentVersion,targetVersion:r.targetVersion,metaType:r.metaType,kind:r.kind})}function Is(r){switch(r){case"older":return h("cli.out.value.older");case"newer":return h("cli.out.value.newer");default:return r}}function jy(r,e){let t=new Set(r),n=new Set(e);return Array.from(new Set([...r,...e])).sort((o,i)=>o.localeCompare(i)).map(o=>({name:o,workspace:t.has(o),baseline:n.has(o)}))}function By(r,e){let t=GT(r);return e.length===0?`${t}
58
- ${h("cli.out.common.changes")}`:`${t}
59
- ${Zn(e)}`}function Zn(r){return ke({columns:[h("cli.out.header.type"),h("cli.out.header.path"),h("cli.out.header.remote")],rows:r.map(e=>[e.type,e.path,e.remotePath])})}function GT(r){return h("cli.out.common.changesLocalRemote",r.changes,r.local,r.remote,r.conflicts)}function Vy(r){return{columns:[h("cli.out.header.project"),h("cli.out.common.workspace"),h("cli.out.common.baseline")],rows:r.map(e=>[e.name,h(e.workspace?"cli.out.value.yes":"cli.out.value.no"),h(e.baseline?"cli.out.value.yes":"cli.out.value.no")])}}function qy(r){return{columns:[h("cli.out.header.project"),h("cli.out.common.id"),h("cli.out.header.description")],rows:r.map(e=>[e.name,e.id??"",e.desc??""])}}function As(r){return ke({columns:[h("cli.out.header.remote"),h("cli.out.common.version"),h("cli.out.common.targetVersion")],rows:r.map(e=>[e.remotePath,e.currentVersion??"",e.targetVersion??""])})}function $y(r){return r.length===0?h("cli.out.common.noServers"):{columns:[h("cli.out.common.server"),h("cli.out.common.active")],rows:r.map(e=>[e.url,h(e.active?"cli.out.value.yes":"cli.out.value.no")])}}function Hy(r,e){return{columns:[h("cli.out.header.field"),h("cli.out.header.value")],rows:[[h("cli.out.common.server"),r],[h("cli.out.common.product"),e.productType],[h("cli.out.header.version"),e.version],[h("cli.out.common.api"),e.devToolApiVersion??""],[h("cli.out.common.capabilities"),e.capabilities?.join(", ")??""]]}}function zy(r){if(r===void 0)return{};let e=JT(r);return e||(r instanceof Error?A({errorName:r.name||"Error",errorMessage:r.message}):typeof r=="object"&&r!==null?A({errorName:jt(r,"name"),errorCode:jt(r,"code")??jt(r,"errorCode"),errorMessage:jt(r,"message")??jt(r,"reason")}):{errorMessage:String(r)})}function kn(r){if(r===void 0)return"";let e=YT(r);if(e)return e;if(r instanceof Error)return r.message||r.name;if(typeof r=="object"&&r!==null){let t=jt(r,"code")??jt(r,"errorCode"),n=jt(r,"message")??jt(r,"reason");return[t,n].filter(o=>o&&o.length>0).join(": ")}return String(r)}function JT(r){let e=pt(r),t=sr(r),n=bt(r);if(!(e===void 0&&t===void 0&&n===void 0))return A({errorName:XT(r),errorCode:e,errorType:t==null?void 0:String(t),errorMessage:Ky(r),errorProperties:n})}function YT(r){let e=pt(r),t=Ky(r);return[e,t].filter(n=>n&&n.length>0).join(": ")}function XT(r){if(r instanceof Error)return r.name||"Error";if(!(typeof r!="object"||r===null))return jt(r,"name")??jt(r,"className")}function Ky(r){if(r instanceof Error)return r.message;if(!(typeof r!="object"||r===null))return jt(r,"message")??jt(r,"reason")}function jt(r,e){if(!Object.hasOwn(r,e))return;let t=r[e];return typeof t=="string"?t:void 0}var Sd=class extends de{toOptions(e){return{url:e.positional[0]}}async executeCommand(e,t){let n=await this.resolveServerUrl(e,t.url),i=await(await this.createServerApiClient(e,n)).getServerInfo();return e.output.result({...e.workspace?{workspace:e.workspace.root}:{},server:n,info:Uy(i)},()=>Hy(n,i)),0}},Gy={path:["server","info"],domain:"server",spec:{name:"server info",flags:[],positionals:[{name:"url",role:"server-url"}],usageArgs:"[<options>] [<url>]",examples:["succapp server info","succapp --server=https://bi.example.com server info","succapp server info http://localhost:8180 --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Sd};q();var vd=class extends de{constructor(t=gs){super();this.ping=t}toOptions(t){return{url:t.positional[0]}}async executeCommand(t,n){let o=await this.resolveServerUrl(t,n.url);return await this.ping(o),t.output.result({server:o,reachable:!0},()=>h("cli.cmd.server.serverReachable",o)),0}},Jy={path:["server","ping"],domain:"server",spec:{name:"server ping",flags:[],positionals:[{name:"url",role:"server-url"}],usageArgs:"[<options>] [<url>]",examples:["succapp server ping","succapp --server=https://bi.example.com server ping","succapp server ping http://localhost:8180 --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new vd};q();var kd=class extends de{toOptions(e){return{url:e.positional[0]}}async executeCommand(e,t){let n=await this.resolveServerUrl(e,t.url);return await(await this.createServerApiClient(e,n)).refreshCache(),e.output.result({...e.workspace?{workspace:e.workspace.root}:{},server:n,refreshed:!0},()=>h("cli.cmd.server.cache.refresh.refreshed",n)),0}},Yy={path:["server","cache","refresh"],domain:"server",spec:{name:"server cache refresh",flags:[],positionals:[{name:"url",role:"server-url"}],usageArgs:"[<options>] [<url>]",examples:["succapp server cache refresh","succapp --server=https://bi.example.com server cache refresh","succapp server cache refresh http://localhost:8180 --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new kd};q();ne();var Xy=b(require("fs")),Ke=b(require("path"));D();$();var $r=Ke.posix.join("sysdata","extensions");function Qy(r){if(r.extensionName){let e=r.extensionName.trim();return ZT(e)?{extensionRoot:Os(r.workspaceRoot,e),extensionName:e}:void 0}if(r.path)return ex(r.workspaceRoot,r.path)}function Os(r,e){return Ke.join(r,$r,e)}async function wd(r){return Z(Ke.join(r,$r))}async function QT(r){let e=Ke.join(r,$r),t;try{t=await Xy.promises.readdir(e,{withFileTypes:!0})}catch(n){if(F(n))return[];throw n}return t.filter(n=>n.isDirectory()).map(n=>n.name).sort()}async function Zy(r){return QT(r)}function ZT(r){return r.length>0&&r!=="."&&r!==".."&&!r.includes("/")&&!r.includes("\\")}function ex(r,e){let t=Ke.isAbsolute(e)?Ke.normalize(e):Ke.resolve(r,e),n=Ke.join(r,$r),o=n+Ke.sep;if(t!==n&&!t.startsWith(o))return;let a=Ke.relative(n,t).split(Ke.sep)[0];if(!(!a||a===".."||a==="."))return{extensionRoot:Ke.join(n,a),extensionName:a}}function eC(r){return A({extensionPoint:r.extensionPoint,templateName:r.templateName,name:r.summary.name,desc:r.summary.desc,version:r.summary.version})}function tC(r,e){return{extensionName:r,extensionRoot:e.extensionRoot,packageJsonPath:e.packageJsonPath,extensionPoint:e.extensionPoint,templateName:e.templateName,template:tx(e.templateSummary)}}function rC(r){let e=r.metadataVersionSuggestions??[];return{summary:{pushed:r.pushed.length,rejected:r.rejected.length,failures:r.failures.length,metadataVersionSuggestions:e.length},pushed:r.pushed,rejected:r.rejected.map(vn),failures:r.failures.map(Ms),metadataVersionSuggestions:e.map(Ds)}}function nC(r){return r.length===0?h("cli.out.workspace.ext.extTemplates"):{columns:[h("cli.out.workspace.ext.extPoint"),h("cli.out.workspace.ext.template"),h("cli.out.header.version"),h("cli.out.header.description")],rows:r.map(e=>[e.extensionPoint,e.templateName,e.summary.version??"",e.summary.desc??""])}}function oC(r){return r.length===0?h("cli.out.workspace.ext.ext",$r):{columns:[h("cli.out.header.extension")],rows:r.map(e=>[e])}}function iC(r,e){return h("cli.out.workspace.ext.createdExt",r,e.extensionRoot)}function aC(r,e){if(e.pushed.length===0&&e.rejected.length===0&&e.failures.length===0)return h("cli.out.workspace.ext.noLocalChanges",r);let t=[h("cli.out.workspace.ext.pushExtPushed",r,e.pushed.length,e.rejected.length,e.failures.length)];e.pushed.length>0&&(t.push(h("cli.out.workspace.ext.pushedFiles",e.pushed.length)),t.push(rx(e.pushed))),e.rejected.length>0&&(t.push(h("cli.out.workspace.ext.pushBlockedRemote",e.rejected.length)),t.push(Zn(e.rejected))),e.failures.length>0&&(t.push(h("cli.out.workspace.ext.failed",e.failures.length)),t.push(nx(e.failures)));let n=e.metadataVersionSuggestions??[];return n.length>0&&(t.push(h("cli.out.workspace.ext.metaVersions",n.length)),t.push(ox(n))),t.join(`
60
- `)}function tx(r){return A({name:r.name,desc:r.desc,version:r.version})}function rx(r){return ke({columns:[h("cli.out.header.path")],rows:r.map(e=>[e])})}function nx(r){return ke({columns:[h("cli.out.header.path"),h("cli.out.header.error")],rows:r.map(e=>[e.path,kn(e.errorInfo)])})}function ox(r){return ke({columns:[h("cli.out.header.path"),h("cli.out.workspace.ext.version"),h("cli.out.workspace.ext.targetVersion"),h("cli.out.workspace.ext.kind")],rows:r.map(e=>[e.path,e.currentVersion??"",e.targetVersion,Is(e.kind)])})}ne();var Us=b(require("fs")),ur=b(require("path"));G();D();J();$();var sC=b(require("path"));vt();G();var ix=T("workspace.extension-dev.package");async function cC(r,e){let t=sC.join(r,"package.json"),n=await Le(t);if(!n.trim())return ix.warn(`extension package.json is missing or empty: ${t}`),!1;let o=Nt(n,["name"],e);return o===n?!1:(await He(t,o),!0)}var Ex=BC(),bx=/^[a-z0-9]+(?:-[a-z0-9]+){2,}$/,Tx=T("workspace.extension-dev.create"),js=class{workspace;cachedClient;cachedOptions;constructor(e){this.workspace=e}async prepare(){if(!await wd(this.workspace.root))throw new St("err.extension.sysdataNotCloned",{extensionsDir:ur.join(this.workspace.root,$r)});let t=await(await this.requireClient()).getExtensionTemplates(),n=xd(t);if(n.length===0)throw new St("err.extension.templateUnavailable");return this.cachedOptions=n,n}groupOptionsByExtensionPoint(){let e=this.cachedOptions??[],t=new Map;for(let n of e){let o=t.get(n.extensionPoint)??[];o.push(n),t.set(n.extensionPoint,o)}return t}async validate(e){let t=e.extensionName.trim();if(!t)return{ok:!1,error:"empty"};if(!bx.test(t))return{ok:!1,error:"invalidFormat"};let o=t.split("-")[1];return o!==e.extensionPoint?{ok:!1,error:"extensionPointMismatch",actualExtensionPoint:o}:await Z(Os(this.workspace.root,t))?{ok:!1,error:"targetExists"}:{ok:!0}}async execute(e){let{extensionPoint:t,templateName:n,extensionName:o}=e;if(!await wd(this.workspace.root))throw new St("err.extension.sysdataNotCloned",{extensionsDir:ur.join(this.workspace.root,$r)});let i=await this.requireOption(t,n),a=Os(this.workspace.root,o);if(await Z(a))throw new Error(`target extension directory already exists: ${a}`);let c=await(await this.requireClient()).downloadExtensionTemplate(t,n);return await xx(c,a),await cC(a,o),await this.workspace.refreshSyncStatus(),{extensionRoot:a,packageJsonPath:ur.join(a,"package.json"),extensionPoint:t,templateName:n,templateSummary:i.summary}}async requireClient(){return this.cachedClient||(this.cachedClient=await this.workspace.requireClient()),this.cachedClient}async requireOption(e,t){let o=(this.cachedOptions??await this.prepare()).find(i=>i.extensionPoint===e&&i.templateName===t);if(!o)throw new Error(`extension template not found: ${e}/${t}`);return o}};function xd(r){let e=[],t=r.templates??{};for(let[n,o]of Object.entries(t))if(o)for(let[i,a]of Object.entries(o))e.push({extensionPoint:n,templateName:i,summary:a});return e}async function xx(r,e){let n=new Ex(r).getEntries();if(n.length===0)throw new Error("extension template zip is empty");await Us.promises.mkdir(e,{recursive:!0});try{let o=ur.resolve(e),i=o+ur.sep,a=[],s=new Set;for(let c of n){let l=c.entryName.replace(/\\/g,"/"),p=dn(l.endsWith("/")?l.slice(0,-1):l,"extension template entry"),m=ur.resolve(o,p);if(m!==o&&!m.startsWith(i))throw new Error(`extension template entry escapes target directory: ${l}`);if(l.endsWith("/")||c.isDirectory){s.add(m);continue}s.add(ur.dirname(m)),a.push({destination:m,entry:c})}await Promise.all(Array.from(s).map(c=>Us.promises.mkdir(c,{recursive:!0}))),await Promise.all(a.map(({destination:c,entry:l})=>Us.promises.writeFile(c,l.getData())))}catch(o){try{await Qt(e)}catch(i){Tx.debug(`cleanup partial extension directory failed: ${e}`,i)}throw o}}var Fd=class extends de{toOptions(e){return{extensionPoint:e.value("extension-point")}}async executeCommand(e,t){let n=await this.resolveServerUrl(e),o=await this.createServerApiClient(e,n),i=Fx(xd(await o.getExtensionTemplates()),t.extensionPoint);return e.output.result(A({workspace:e.workspace?.root,server:n,extensionPoint:t.extensionPoint,templates:i.map(eC)}),()=>nC(i)),0}},VC={path:["server","extension","template","list"],domain:"server",spec:{name:"server extension template list",flags:[{name:"extension-point",takesValue:!0,valueHint:"point"}],positionals:[],usageArgs:"[<options>]",examples:["succapp server extension template list","succapp --server=https://bi.example.com server extension template list --extension-point=component"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Fd};function Fx(r,e){return e?r.filter(t=>t.extensionPoint===e):[...r]}J();Un();function qC(r,e={}){return Bs(r,e)!==void 0}function Hi(r,e={}){let t=Bs(r,e);if(!t||!r||typeof r!="object")return r;let n={...bt(r),suggestedAction:t,retryable:!1},o=pt(r);return t==="fixMeta"&&typeof n.backendErrorCode!="string"&&typeof o=="string"&&(n.backendErrorCode=o),(typeof n.path!="string"||n.path.length===0)&&(n.path=e.targetPath??e.path),r.properties=n,sr(r)==null&&(r.errorType=Mx(r)),r}function Bs(r,e={}){let t=bt(r)?.suggestedAction;if(Dx(t))return t;let n=pt(r);if(n==="err.meta.fileExists"||n==="err.meta.file.notfound"||n==="err.meta.saveConcurrent")return"pull";if(n==="err.meta.filefolder.notfound")return"fixMeta";if(n==="err.meta.fileExistsIgnoreCase")return"rename";if(n==="err.meta.delete.project")return"refresh";if(n==="err.permission.denied")return e.action==="delete"&&Ix(e.path)?"refresh":"contactAdmin"}function Mx(r){let e=pt(r);return e==="err.permission.denied"||e==="err.meta.delete.project"?"error":"warn"}function Dx(r){return r==="pull"||r==="rename"||r==="refresh"||r==="fixMeta"||r==="contactAdmin"}function Ix(r){return typeof r=="string"&&/^\/[^/]+$/.test(r)}D();J();Un();q();ne();$();var Vs=b(require("fs")),Ve=class extends de{async resolveServerFileTarget(e,t){return{serverUrl:await this.resolveServerUrl(e,t.url),remotePath:_g(t.path)}}createServerFileClient(e,t){return this.createServerApiClient(e,t.serverUrl)}};function et(r,e={}){let[t,n]=r.positional,o=e.defaultPath;return t===void 0?(o===void 0&&$C(),{path:o}):n===void 0?xi(t)?(o===void 0&&$C(),{url:t,path:o}):{path:t}:{url:t,path:n}}function $C(){throw new E("err.cli.missingInput",{inputId:"serverFilePath",sources:["<path>"]})}function Pn(r,e="--revision"){if(r===void 0)return;let t=Yt(r);if(t===void 0)throw new E("err.cli.invalidNonNegativeInteger",{input:e,option:e,value:r});return t}function qs(r){let e=nt(r.value("file")),t=r.has("stdin");if(e&&t)throw new E("err.cli.conflictingInputs",{inputs:["--file=<local-file>","--stdin"]});if(!e&&!t)throw new E("err.cli.missingInput",{inputId:"contentSource",sources:["--file=<local-file>","--stdin"]});return e?{kind:"file",file:e}:{kind:"stdin"}}async function $s(r,e,t){if(e.kind==="stdin")return{source:"stdin",content:await t()};let n=Wt(r.cwd,e.file);if(!(await Jg(n)).isFile())throw new E("err.cli.invalidRegularFile",{inputId:"inputFile",source:n,path:n});return{source:"file",localFile:n,content:Vs.createReadStream(n)}}function HC(r){let e=nt(r.value("output"));if(!e)throw new E("err.cli.missingInput",{inputId:"outputFile",sources:["--output=<file>"]});return e}async function zC(r,e){try{await Vs.promises.stat(r)}catch(t){if(F(t))return;throw t}if(!e)throw new E("err.cli.confirmationRequired",{reason:"outputOverwrite",flag:"--force",path:r})}function Hs(r,e,t){if(r!==void 0&&e)throw new E("err.cli.conflictingInputs",{inputs:["--expected-revision","--force"],context:{command:t}});if(r===void 0&&!e)throw new E("err.cli.missingInput",{inputId:"revisionOrForce",sources:["--expected-revision=<revision>","--force"],context:{command:t}})}function Ki(r){return A({id:r.id,projectName:r.projectName,path:r.path,parentDir:r.parentDir,name:r.name,isFolder:r.isFolder,type:r.type,size:r.size,hash:r.hash,revision:r.revision,modifyTime:r.modifyTime,modifier:r.modifier,desc:r.desc,labels:r.labels,hidden:r.hidden,order:r.order})}function Ax(r){return A({path:r.path,oldPath:r.oldPath,modifyTime:r.modifyTime,contentMutation:r.contentMutation,pathMutation:r.pathMutation,metaInfoChanged:r.metaInfoChanged,metaInfo:r.metaInfo?Ki(r.metaInfo):void 0,warnings:r.warnings})}function zo(r,e,t,n){return A({workspace:r.workspace?.root,server:e,path:t.path,source:n?.source,localFile:n?.localFile,result:Ax(t)})}async function Ko(r,e,t){try{let n=await t();return Ox(r,n),n}catch(n){let o=_x(n,r,e);if(!o)throw n;KC(r,e,o)}}function Ox(r,e){e.success||KC(r,e.path,Hi(e.errorInfo,{action:r,path:e.path}))}function KC(r,e,t){let n=kn(t)||h("cli.cmd.server.file.unknownServerFile"),o={action:r,remotePath:e,reason:n,errorInfo:t};throw Lx(t)?new Ot("err.base.operationFailed",o,{cause:t}):new St("err.base.operationFailed",o,{cause:t})}function _x(r,e,t){if(!(!(r instanceof zt)||!r.remoteError))return Hi(on(r.remoteError),{action:e,path:t})}function Lx(r){let e=Bs(r);return e==="pull"||e==="rename"}function GC(r){return r.length===0?h("cli.cmd.server.file.files"):ke({columns:[h("cli.out.header.type"),h("cli.cmd.server.file.name"),h("cli.out.header.path"),h("cli.out.header.revision"),h("cli.cmd.server.file.size")],rows:r.map(e=>[e.isFolder?h("cli.cmd.server.file.folder"):h("cli.cmd.server.file.file"),e.name,e.path,zi(e.revision),zi(e.size)])})}function JC(r){return ke({columns:[h("cli.out.header.field"),h("cli.out.header.value")],rows:[[h("cli.out.header.path"),r.path],[h("cli.out.header.type"),r.isFolder?h("cli.cmd.server.file.folder"):h("cli.cmd.server.file.file")],[h("cli.cmd.server.file.id"),r.id],[h("cli.out.header.revision"),zi(r.revision)],[h("cli.cmd.server.file.size"),zi(r.size)],[h("cli.cmd.server.file.modifyTime"),zi(r.modifyTime)],[h("cli.out.header.description"),r.desc??""]]})}function Go(r,e){return h("cli.cmd.server.file.success",r,e.path)}function zi(r){return r===void 0?"":String(r)}var Md=class extends Ve{constructor(t=mn){super();this.readStdin=t}toOptions(t){return{...et(t),source:qs(t)}}async executeCommand(t,n){let o=await this.resolveServerFileTarget(t,n),i=await this.createServerFileClient(t,o),a=await $s(t,n.source,this.readStdin),s=await Ko("Create",o.remotePath,()=>i.saveFile(o.remotePath,a.content,{expectedRevision:null}));return t.output.result(zo(t,o.serverUrl,s,a),()=>Go("Create",s)),0}},YC={path:["server","file","create"],domain:"server",spec:{name:"server file create",flags:[{name:"file",takesValue:!0,valueHint:"local-file"},{name:"stdin",takesValue:!1}],positionals:[{name:"url",role:"server-url"},{name:"path",required:!0}],usageArgs:"[<options>] [<url>] <path>",examples:["succapp --server=https://bi.example.com server file create /DEMO/apps/new.view --file=./new.view",'printf "{}" | succapp server file create /DEMO/apps/new.view --stdin',"succapp server file create https://bi.example.com /DEMO/apps/new.view --file=./new.view"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Md};q();D();J();ne();$();var XC=b(require("fs")),QC=require("stream/promises"),Dd=class extends Ve{toOptions(e){return{...et(e),revision:Pn(e.value("revision")),upgradeContent:e.has("upgrade-content"),output:HC(e),force:e.has("force")}}async executeCommand(e,t){let n=await this.resolveServerFileTarget(e,t),o=Wt(e.cwd,t.output);await zC(o,t.force);let a=await(await this.createServerFileClient(e,n)).getFileContentStream(n.remotePath,{revision:t.revision,upgradeContent:t.upgradeContent});try{await(0,QC.pipeline)(a.stream,XC.createWriteStream(o,{flags:t.force?"w":"wx"}))}catch(s){throw!t.force&&Nx(s)?new E("err.cli.confirmationRequired",{reason:"outputOverwrite",flag:"--force",path:o},{cause:s}):s}return e.output.result(A({workspace:e.workspace?.root,server:n.serverUrl,path:n.remotePath,output:o,revision:a.revision,modifyTime:a.modifyTime}),()=>h("cli.cmd.server.file.download.downloaded",n.remotePath,o)),0}},ZC={path:["server","file","download"],domain:"server",spec:{name:"server file download",flags:[{name:"revision",takesValue:!0,valueHint:"n"},{name:"upgrade-content",takesValue:!1},{name:"output",takesValue:!0,valueHint:"local-file"},{name:"force",takesValue:!1}],positionals:[{name:"url",role:"server-url"},{name:"path",required:!0}],usageArgs:"[<options>] [<url>] <path>",examples:["succapp --server=https://bi.example.com server file download /DEMO/apps/a.view --output=./a.view","succapp server file download --revision=12 /DEMO/apps/a.view --output=./a.view","succapp server file download /DEMO/apps/a.view --output=./a.view --force"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Dd};function Nx(r){return typeof r=="object"&&r!==null&&"code"in r&&r.code==="EEXIST"}J();D();q();ne();function zs(r){let e=Yt(r);if(r===void 0||e!==void 0&&e>0)return e;throw new E("err.cli.invalidPositiveInteger",{input:"--limit",option:"--limit",value:r})}function Ks(r){return r.length===0?h("cli.out.workspace.file.hist.empty"):ke({columns:[h("cli.out.header.revision"),h("cli.out.header.action"),h("cli.out.header.modified"),h("cli.out.header.modifier"),h("cli.out.header.path"),h("cli.out.header.message")],rows:r.map(e=>[Wx(e.revision),e.action??"",Ux(e.modifyTime),e.modifierName??e.modifier??"",e.path,e.message??""])})}function Gs(r){return A({id:r.id,fileId:r.fileId,path:r.path,revision:r.revision,action:r.action,modifyTime:r.modifyTime,modifier:r.modifier,modifierName:r.modifierName,message:r.message,detail:r.detail})}function Wx(r){return r===void 0?"":String(r)}function Ux(r){return r===void 0?"":new Date(r).toISOString()}ne();var Id=class extends Ve{toOptions(e){return{...et(e),limit:zs(e.value("limit"))}}async executeCommand(e,t){let n=await this.resolveServerFileTarget(e,t),i=await(await this.createServerFileClient(e,n)).getFileHistory(n.remotePath,{limit:t.limit});return e.output.result(A({workspace:e.workspace?.root,server:n.serverUrl,path:n.remotePath,summary:{histories:i.length},histories:i.map(Gs)}),()=>Ks(i)),0}},eS={path:["server","file","history"],domain:"server",spec:{name:"server file history",flags:[{name:"limit",takesValue:!0,valueHint:"n"}],positionals:[{name:"url",role:"server-url"},{name:"path",required:!0}],usageArgs:"[<options>] [<url>] <path>",examples:["succapp --server=https://bi.example.com server file history /DEMO/views/sales.view","succapp server file history https://bi.example.com /DEMO/views/sales.view","succapp server file history --limit=20 /DEMO/views/sales.view --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Id};ne();var Ad=class extends Ve{toOptions(e){return et(e)}async executeCommand(e,t){let n=await this.resolveServerFileTarget(e,t),i=await(await this.createServerFileClient(e,n)).getFile(n.remotePath);return e.output.result(A({workspace:e.workspace?.root,server:n.serverUrl,path:n.remotePath,file:Ki(i)}),()=>JC(i)),0}},tS={path:["server","file","info"],domain:"server",spec:{name:"server file info",flags:[],positionals:[{name:"url",role:"server-url"},{name:"path",required:!0}],usageArgs:"[<options>] [<url>] <path>",examples:["succapp --server=https://bi.example.com server file info /DEMO/apps/a.view","succapp server file info https://bi.example.com /DEMO/apps/a.view","succapp server file info /DEMO/apps/a.view --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Ad};ne();var Od=class extends Ve{toOptions(e){return et(e,{defaultPath:"/"})}async executeCommand(e,t){let n=await this.resolveServerFileTarget(e,t),i=await(await this.createServerFileClient(e,n)).listFiles(n.remotePath);return e.output.result(A({workspace:e.workspace?.root,server:n.serverUrl,path:n.remotePath,summary:{files:i.length},files:i.map(Ki)}),()=>GC(i)),0}},rS={path:["server","file","list"],domain:"server",spec:{name:"server file list",flags:[],positionals:[{name:"url",role:"server-url"},{name:"path"}],usageArgs:"[<options>] [<url>] [<path>]",examples:["succapp --server=https://bi.example.com server file list /DEMO","succapp server file list https://bi.example.com /DEMO/apps","succapp server file list --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Od};var nS=require("node:child_process"),oS=require("node:util"),jx=(0,oS.promisify)(nS.execFile);async function Js(r,e){let t=Bx(r);await jx(t.command,t.args,{signal:e})}function Bx(r){return process.platform==="darwin"?{command:"open",args:[r]}:process.platform==="win32"?{command:"rundll32",args:["url.dll,FileProtocolHandler",r]}:{command:"xdg-open",args:[r]}}q();ne();var _d=class extends Ve{constructor(t=Js){super();this.opener=t}toOptions(t){return{...et(t),edit:t.has("edit")}}async executeCommand(t,n){let o=await this.resolveServerFileTarget(t,n),i=n.edit===!0,a=Ao(o.serverUrl,{path:o.remotePath,...i?{":edit":"true"}:{}});return await this.opener(a,t.abortSignal),t.output.result(A({workspace:t.workspace?.root,server:o.serverUrl,path:o.remotePath,edit:i,url:a}),()=>Vx(a,i)),0}},iS={path:["server","file","open"],domain:"server",spec:{name:"server file open",flags:[{name:"edit",takesValue:!1}],positionals:[{name:"url",role:"server-url"},{name:"path",required:!0}],usageArgs:"[<options>] [<url>] <path>",examples:["succapp --server=https://bi.example.com server file open /DEMO/views/sales.view","succapp server file open https://bi.example.com /DEMO/views/sales.view","succapp server file open --edit /DEMO/views/sales.view --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new _d};function Vx(r,e){return h(e?"cli.cmd.server.file.open.openedEdit":"cli.cmd.server.file.open.openedView",r)}var Ld=class extends Ve{toOptions(e){return{...et(e),expectedRevision:Pn(e.value("expected-revision"),"--expected-revision"),force:e.has("force")}}async executeCommand(e,t){Hs(t.expectedRevision,t.force,"server file remove");let n=await this.resolveServerFileTarget(e,t),o=await this.createServerFileClient(e,n),i=await Ko("Delete",n.remotePath,()=>o.deleteFile(n.remotePath,t.force?void 0:{expectedRevision:t.expectedRevision}));return e.output.result(zo(e,n.serverUrl,i),()=>Go("Delete",i)),0}},aS={path:["server","file","remove"],domain:"server",spec:{name:"server file remove",flags:[{name:"expected-revision",takesValue:!0,valueHint:"n"},{name:"force",takesValue:!1}],positionals:[{name:"url",role:"server-url"},{name:"path",required:!0}],usageArgs:"[<options>] [<url>] <path>",examples:["succapp --server=https://bi.example.com server file remove /DEMO/apps/a.view --expected-revision=12","succapp server file remove https://bi.example.com /DEMO/apps/a.view --expected-revision=12","succapp server file remove /DEMO/apps/a.view --force"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Ld};ne();var Nd=class extends Ve{toOptions(e){return{...et(e),revision:Pn(e.value("revision")),upgradeContent:e.has("upgrade-content")}}async executeCommand(e,t){let n=await this.resolveServerFileTarget(e,t),i=await(await this.createServerFileClient(e,n)).getFileContent(n.remotePath,{revision:t.revision,upgradeContent:t.upgradeContent});return e.output.content(A({workspace:e.workspace?.root,server:n.serverUrl,path:n.remotePath,revision:i.revision,modifyTime:i.modifyTime,size:i.buffer.length}),i.buffer),0}},sS={path:["server","file","show"],domain:"server",spec:{name:"server file show",flags:[{name:"revision",takesValue:!0,valueHint:"n"},{name:"upgrade-content",takesValue:!1}],positionals:[{name:"url",role:"server-url"},{name:"path",required:!0}],usageArgs:"[<options>] [<url>] <path>",examples:["succapp --server=https://bi.example.com server file show /DEMO/apps/a.view","succapp server file show --revision=12 /DEMO/apps/a.view","succapp server file show /DEMO/apps/a.view --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Nd};var Wd=class extends Ve{constructor(t=mn){super();this.readStdin=t}toOptions(t){return{...et(t),source:qs(t),expectedRevision:Pn(t.value("expected-revision"),"--expected-revision"),force:t.has("force")}}async executeCommand(t,n){Hs(n.expectedRevision,n.force,"server file update");let o=await this.resolveServerFileTarget(t,n),i=await this.createServerFileClient(t,o),a=await $s(t,n.source,this.readStdin),s=await Ko("Put",o.remotePath,()=>i.saveFile(o.remotePath,a.content,n.force?void 0:{expectedRevision:n.expectedRevision}));return t.output.result(zo(t,o.serverUrl,s,a),()=>Go("Put",s)),0}},cS={path:["server","file","update"],domain:"server",spec:{name:"server file update",flags:[{name:"file",takesValue:!0,valueHint:"local-file"},{name:"stdin",takesValue:!1},{name:"expected-revision",takesValue:!0,valueHint:"n"},{name:"force",takesValue:!1}],positionals:[{name:"url",role:"server-url"},{name:"path",required:!0}],usageArgs:"[<options>] [<url>] <path>",examples:["succapp --server=https://bi.example.com server file update /DEMO/apps/a.view --file=./a.view --expected-revision=12",'printf "{}" | succapp server file update /DEMO/apps/a.view --stdin --expected-revision=12',"succapp server file update /DEMO/apps/a.view --file=./a.view --force"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Wd};var Ud=class extends de{toOptions(e){return{url:e.positional[0]}}async executeCommand(e,t){let n=await this.resolveServerUrl(e,t.url),i=await(await this.createServerApiClient(e,n)).getProjects();return e.output.result({...e.workspace?{workspace:e.workspace.root}:{},server:n,projects:i.map(Fs)},()=>qy(i)),0}},lS={path:["server","project","list"],domain:"server",spec:{name:"server project list",flags:[],positionals:[{name:"url",role:"server-url"}],usageArgs:"[<options>] [<url>]",examples:["succapp server project list","succapp --server=https://bi.example.com server project list","succapp server project list http://localhost:8180 --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Ud};J();D();q();var jd=class extends de{toOptions(e){return{...qx(e),desc:nt(e.value("desc"))}}validateOptions(e,t){!e.workspace&&!t.url&&!e.config.server&&uS()}async executeCommand(e,t){let n=await this.resolveServerUrl(e,t.url),i=await(await this.createServerApiClient(e,n)).createProject({name:t.projectName,desc:t.desc});return e.output.result({...e.workspace?{workspace:e.workspace.root}:{},server:n,project:Fs(i)},()=>$x(i)),0}},dS={path:["server","project","create"],domain:"server",spec:{name:"server project create",flags:[{name:"desc",takesValue:!0,valueHint:"text",description:"cli.cmd.server.proj.create.descOption"}],positionals:[{name:"url",role:"server-url"},{name:"project"}],usageArgs:"[<options>] [<url>] <project>",examples:["succapp server project create SALES",'succapp server project create SALES --desc="Sales demo"',"succapp server project create http://localhost:8180 SALES --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new jd};function qx(r){let[e,t]=r.positional;return e===void 0&&pS(),t===void 0?(xi(e)&&pS(),{projectName:e}):(xi(e)||uS(),{url:e,projectName:t})}function pS(){throw new E("err.cli.missingInput",{inputId:"projectName",sources:["<project>"]})}function uS(){throw new E("err.cli.missingInput",{inputId:"server",sources:["--server=<url>","<url> <project>"]})}function $x(r){return h("cli.cmd.server.proj.create.created",r.name)}q();D();J();ne();var Bd="input",Vd="param",Jo=class extends de{async executeCommand(e,t){let n=await this.resolveServerUrl(e),o=await this.createServerApiClient(e,n);return this.executeScriptCommand(e,n,o,t)}};function Ys(r){return A({result:"result"in r?r.result:void 0,elapsedMs:"elapsedMs"in r?r.elapsedMs:void 0,diagnostics:"diagnostics"in r?r.diagnostics:void 0})}function Xs(){return h("cli.cmd.server.script.done")}function mS(r,e){let t=r.trim();if(!Ha(t))return r;try{return JSON.parse(t)}catch(n){throw new E("err.cli.invalidJson",{inputId:"inputFile",source:e,context:{file:e}},{cause:n})}}$();var qd=class extends Jo{constructor(t=_o){super();this.readFileText=t}toOptions(t){return{scriptPath:t.positional[0]}}async executeScriptCommand(t,n,o,i){let a=await this.readFileText(Wt(t.cwd,i.scriptPath)),s=await o.checkScript({script:a});return t.output.result({...se(t,n),path:i.scriptPath,...Ys(s)},()=>Xs()),0}},hS={path:["server","script","check"],domain:"server",spec:{name:"server script check",flags:[],positionals:[{name:"file",required:!0}],usageArgs:"[<options>] <file>",examples:["succapp server script check ./scripts/job.js"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new qd};ne();$();var $d=class extends Jo{constructor(t=_o){super();this.readFileText=t}toOptions(t){return{scriptPath:t.positional[0],inputFile:t.value(Bd),params:Bg(t.values(Vd))}}async executeScriptCommand(t,n,o,i){let a=await this.readFileText(Wt(t.cwd,i.scriptPath)),s=i.inputFile?mS(await this.readFileText(Wt(t.cwd,i.inputFile)),i.inputFile):void 0,c=Vg(i.params),l=await o.executeScript({script:a,args:A({input:s,params:c})});return t.output.result({...se(t,n),path:i.scriptPath,params:c,...Ys(l)},()=>Xs()),0}},fS={path:["server","script","exec"],domain:"server",spec:{name:"server script exec",flags:[{name:Bd,takesValue:!0,valueHint:"file"},{name:Vd,takesValue:!0,repeatable:!0,valueHint:"key=value"}],positionals:[{name:"file",required:!0}],usageArgs:"[<options>] <file>",examples:["succapp server script exec ./scripts/job.js","succapp server script exec ./scripts/job.js --input=./input.json --param=mode=preview"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new $d};var gS=[Jy,Gy,lS,dS,rS,tS,sS,ZC,iS,eS,YC,cS,aS,fS,hS,Yy,VC];q();D();J();ne();var yS=["missing-baseline","workspace-config","missing-meta","state-file"];function Zs(r){return r.map(e=>{if(yS.includes(e))return e;throw new E("err.cli.invalidChoice",{input:"--only",option:"--only",value:e,allowedValues:yS})})}function Ji(r){return A({checks:r.checks.length>0?r.checks:void 0,targetRemotePaths:r.paths.length>0?r.paths:void 0})}function CS(r){let e=r.issues.filter(t=>t.repairable).length;return{workspace:r.workspaceRootPath,server:r.serverUrl,status:r.issues.length===0?"ok":"problems",summary:{issues:r.issues.length,repairable:e,unrepairable:r.issues.length-e},issues:r.issues.map(Gi)}}function SS(r){let e=r.issues.filter(t=>t.repairable).length;return{workspace:r.workspaceRootPath,server:r.serverUrl,dryRun:!0,summary:{issues:r.issues.length,repairable:e,unrepairable:r.issues.length-e},issues:r.issues.map(Gi)}}function vS(r){return{workspace:r.workspaceRootPath,server:r.serverUrl,dryRun:!1,summary:{issues:r.issues.length,repaired:r.repaired.length,unresolved:r.unresolved.length},issues:r.issues.map(Gi),repaired:r.repaired.map(Gi),unresolved:r.unresolved.map(Gi)}}function kS(r){if(r.issues.length===0)return h("cli.cmd.workspace.repair.checkClean");let e=r.issues.filter(t=>t.repairable).length;return[h("cli.cmd.workspace.repair.checkIssue",r.issues.length,e),Qs(r.issues)].join(`
61
- `)}function wS(r){if(r.issues.length===0)return h("cli.cmd.workspace.repair.dryRunClean");let e=r.issues.filter(t=>t.repairable).length;return[h("cli.cmd.workspace.repair.dryRunIssues",r.issues.length,e,r.issues.length-e),Qs(r.issues)].join(`
62
- `)}function PS(r){if(r.issues.length===0)return h("cli.cmd.workspace.repair.clean");let e=[h("cli.cmd.workspace.repair.repaired",r.repaired.length,r.unresolved.length)];return r.repaired.length>0&&(e.push(h("cli.cmd.workspace.repair.repairedIssues")),e.push(Qs(r.repaired))),r.unresolved.length>0&&(e.push(h("cli.cmd.workspace.repair.unresolved")),e.push(Qs(r.unresolved))),e.join(`
63
- `)}function Gi(r){return A({checkId:r.checkId,strategy:r.strategy,repairable:r.repairable,remotePaths:r.remotePaths,message:r.message,details:r.details})}function Qs(r){return ke({columns:[h("cli.cmd.workspace.repair.check"),h("cli.cmd.workspace.repair.strategy"),h("cli.cmd.workspace.repair.repairable"),h("cli.cmd.workspace.repair.remotePaths"),h("cli.out.header.message")],rows:r.map(e=>[e.checkId,e.strategy,h(e.repairable?"cli.out.value.yes":"cli.out.value.no"),e.remotePaths.join(", "),e.message])})}var ge=class extends ce{async executeWorkspaceCommand(e,t,n){return!t.command||t.command.serverTarget!=="none"?await Rr(t,e):await e.config.ensureLoaded(),this.executeSyncCommand(e,e.createSyncService(),t,n)}};var Hd=class extends ge{toOptions(e){return{checks:Zs(e.values("only")),paths:e.positional}}async executeSyncCommand(e,t,n,o){let i=await t.fsckWorkspace({...Ji(o),task:n.task});return n.output.result(CS(i),()=>kS(i)),i.issues.length>0?1:0}},RS={path:["workspace","check"],domain:"workspace",spec:{name:"workspace check",flags:[{name:"only",takesValue:!0,repeatable:!0,valueHint:"item"}],positionals:[{name:"path",repeatable:!0}],usageArgs:"[<options>] [--] [<path>...]",examples:["succapp workspace check","succapp workspace check --only=missing-baseline","succapp workspace check /DEMO_BLANK --json"]},workspaceTarget:"required",serverTarget:"required",createExecutor:()=>new Hd};q();Ce();D();J();$();var Ew=b(require("path"));var Tl=b(require("fs")),yr=b(require("path"));var ec=class{total=0;byApi=new Map;byPath=new Map;pathKeyCount=0;droppedPathKeys=0;recentCallsDropped=0;recentCalls=[];maxPathKeys;maxRecentCalls;constructor(e={}){this.maxPathKeys=e.maxPathKeys??500,this.maxRecentCalls=e.maxRecentCalls??200}record(e){this.total++,this.byApi.set(e.name,(this.byApi.get(e.name)??0)+1),e.path!==void 0&&this.recordPath(e.name,e.path),this.recordRecentCall(e)}getSnapshot(e={}){let t={total:this.total,byApi:Object.fromEntries(this.byApi),byPath:this.createByPathSnapshot(),droppedPathKeys:this.droppedPathKeys,recentCallsDropped:this.recentCallsDropped,...e.includeRecentCalls?{recentCalls:this.recentCalls.map(n=>({...n}))}:{}};return e.reset&&this.reset(),t}reset(){this.total=0,this.byApi.clear(),this.byPath.clear(),this.pathKeyCount=0,this.droppedPathKeys=0,this.recentCallsDropped=0,this.recentCalls.length=0}recordPath(e,t){let n=this.byPath.get(e);if(n?.has(t)){n.set(t,(n.get(t)??0)+1);return}if(this.pathKeyCount>=this.maxPathKeys){this.droppedPathKeys++;return}n||(n=new Map,this.byPath.set(e,n)),n.set(t,1),this.pathKeyCount++}recordRecentCall(e){if(this.maxRecentCalls<=0){this.recentCallsDropped++;return}this.recentCalls.length>=this.maxRecentCalls&&(this.recentCalls.shift(),this.recentCallsDropped++),this.recentCalls.push({...e})}createByPathSnapshot(){let e={};for(let[t,n]of this.byPath)e[t]=Object.fromEntries(n);return e}};var zd=class{constructor(e){this.delegate=e}diagnostics=new ec;get serverUrl(){return this.delegate.serverUrl}get currentAuthorizationHeader(){return this.delegate.currentAuthorizationHeader}getDiagnostics(e){return this.diagnostics.getSnapshot(e)}async getServerInfo(){return this.recordApiCall("getServerInfo"),this.delegate.getServerInfo()}async getProjects(){return this.recordApiCall("getProjects"),this.delegate.getProjects()}async createProject(e){return this.recordApiCall("createProject",e.name),this.delegate.createProject(e)}async listFiles(e){return this.recordApiCall("listFiles",e),this.delegate.listFiles(e)}async countFiles(e){return this.recordApiCall("countFiles",e),this.delegate.countFiles(e)}async getFileDescendant(e){return this.recordApiCall("getFileDescendant",e),this.delegate.getFileDescendant(e)}async getFile(e){return this.recordApiCall("getFile",e),this.delegate.getFile(e)}async getFileInfos(e){return this.recordApiCall("getFileInfos"),this.delegate.getFileInfos(e)}async getFileHistory(e,t){return this.recordApiCall("getFileHistory",e),this.delegate.getFileHistory(e,t)}isNotFoundError(e){return this.delegate.isNotFoundError(e)}async getFileContent(e,t){return this.recordApiCall("getFileContent",e),this.delegate.getFileContent(e,t)}async getFileContentStream(e,t){return this.recordApiCall("getFileContentStream",e),this.delegate.getFileContentStream(e,t)}async saveFile(e,t,n){return this.recordApiCall("saveFile",e),this.delegate.saveFile(e,t,n)}async createFile(e){return this.recordApiCall("createFile",e.path),this.delegate.createFile(e)}async modifyFile(e){return this.recordApiCall("modifyFile",e.path),this.delegate.modifyFile(e)}async moveFile(e){return this.recordApiCall("moveFile",e.path),this.delegate.moveFile(e)}async upgradeFileContent(e){return this.recordApiCall("upgradeFileContent",e.path),this.delegate.upgradeFileContent(e)}async deleteFile(e,t){return this.recordApiCall("deleteFile",e),this.delegate.deleteFile(e,t)}async getExtensionTemplates(){return this.recordApiCall("getExtensionTemplates"),this.delegate.getExtensionTemplates()}async downloadExtensionTemplate(e,t){return this.recordApiCall("downloadExtensionTemplate",`${e}/${t}`),this.delegate.downloadExtensionTemplate(e,t)}async getDataSources(){return this.recordApiCall("getDataSources"),this.delegate.getDataSources()}async getSettings(e){return this.recordApiCall("getSettings",e?.path),this.delegate.getSettings(e)}async setSettings(e){return this.recordApiCall("setSettings",e.path),this.delegate.setSettings(e)}async probeDataSource(e,t){return this.recordApiCall("probeDataSource",e),this.delegate.probeDataSource(e,t)}async getDataSourceConfig(e,t){return this.recordApiCall("getDataSourceConfig",e),this.delegate.getDataSourceConfig(e,t)}async testDataSource(e){return this.recordApiCall("testDataSource",e.originalDataSource??e.config.name),this.delegate.testDataSource(e)}async createDataSource(e){return this.recordApiCall("createDataSource",e.config.name),this.delegate.createDataSource(e)}async updateDataSource(e){return this.recordApiCall("updateDataSource",e.dataSource),this.delegate.updateDataSource(e)}async deleteDataSource(e){return this.recordApiCall("deleteDataSource",e.dataSource),this.delegate.deleteDataSource(e)}async listDbSchemas(e,t){return this.recordApiCall("listDbSchemas",e),this.delegate.listDbSchemas(e,t)}async listDbTables(e,t){return this.recordApiCall("listDbTables",e),this.delegate.listDbTables(e,t)}async describeDbTable(e,t,n){return this.recordApiCall("describeDbTable",`${e}/${t}`),this.delegate.describeDbTable(e,t,n)}async queryDbDdl(e,t,n){return this.recordApiCall("queryDbDdl",`${e}/${t}`),this.delegate.queryDbDdl(e,t,n)}async executeDbQuery(e){return this.recordApiCall("executeDbQuery",e.dataSource),this.delegate.executeDbQuery(e)}async exportDbQueryData(e){return this.recordApiCall("exportDbQueryData",e.dataSource),this.delegate.exportDbQueryData(e)}async exportDbTableData(e){return this.recordApiCall("exportDbTableData",`${e.dataSource}/${e.tableName}`),this.delegate.exportDbTableData(e)}async executeDbAny(e){return this.recordApiCall("executeDbAny",e.dataSource),this.delegate.executeDbAny(e)}async importDbTableData(e){return this.recordApiCall("importDbTableData",`${e.dataSource}/${e.tableName}`),this.delegate.importDbTableData(e)}async executeScript(e){return this.recordApiCall("executeScript","<temporary-script>"),this.delegate.executeScript(e)}async checkScript(e){return this.recordApiCall("checkScript","<temporary-script>"),this.delegate.checkScript(e)}async refreshCache(){return this.recordApiCall("refreshCache"),this.delegate.refreshCache()}buildViewFileRedirectUrl(e){return this.delegate.buildViewFileRedirectUrl(e)}async getTypeScriptSupportApiLibs(){return this.recordApiCall("getTypeScriptSupportApiLibs"),this.delegate.getTypeScriptSupportApiLibs()}async getJsonSchemaSupport(){return this.recordApiCall("getJsonSchemaSupport"),this.delegate.getJsonSchemaSupport()}async downloadJsonSchema(e){return this.recordApiCall("downloadJsonSchema"),this.delegate.downloadJsonSchema(e)}async getFrontendFrameworksManifest(){return this.recordApiCall("getFrontendFrameworksManifest"),this.delegate.getFrontendFrameworksManifest()}recordApiCall(e,t){this.diagnostics.record({name:e,path:t})}};function ES(r){return new zd(r)}$();Ar();$n();it();gr();qt();var wc=class extends Dt{async execute(){this.task.throwIfAborted();let e=this.options.scope??"both",t=e==="local",n=this.options.refreshAll?await this.context.refreshSyncStatusState({scope:e,forceRefresh:this.options.forceRefresh,rootRemotePath:this.options.rootRemotePath,source:this.options.source,task:this.task}):void 0,o=this.context.getSyncChanges();if(t&&(o=o.filter(a=>a.type!=="conflict"&&at(a))),this.options.paths?.length){let a=await this.resolveTargetRemotePaths(this.options.paths,t?"mirror-only":"server-backed");o=this.filterChangesByTargets(o,a)}let i=n?.warnings??[];return{changes:o,localChanges:o.filter(a=>at(a)),remoteChanges:t?[]:o.filter(a=>fr(a)),conflicts:t?[]:o.filter(a=>a.type==="conflict"),...i.length>0?{warnings:i}:{}}}};var kv=b(require("fs"));G();$();it();var Gr=b(require("fs")),Jr=b(require("path")),Pu=require("node:util");$();$n();Ce();D();Je();G();it();pn();$n();D();G();vt();var CF=T("sync.file-fetcher"),SF=3,vF=20,kF=300,Pc=class{constructor(e){this.options=e;let t={};e.maxConcurrency!==void 0&&(t.maxConcurrency=e.maxConcurrency),e.signal&&(t.signal=e.signal),this.runner=new ze(t),this.maxAttemptsPerFile=Math.max(1,e.maxAttemptsPerFile??SF),this.maxRetries=Math.max(0,e.maxRetries??vF),this.retryBaseDelayMs=Math.max(0,e.retryBaseDelayMs??kF)}runner;maxAttemptsPerFile;maxRetries;retryBaseDelayMs;retryCount=0;stoppedError;fetchToLocal(e,t){return mt(this.options.signal),this.stoppedError?Promise.reject(this.stoppedError):this.runner.addTask(()=>this.fetchToLocalWithRetry(e,t))}async fetchToLocalWithRetry(e,t){let n;for(let o=1;o<=this.maxAttemptsPerFile;o++){if(mt(this.options.signal),this.stoppedError)throw this.stoppedError;try{let i=await this.options.getContentStream(e);return mt(this.options.signal),await cn(t,i.stream),i}catch(i){if(i instanceof Kt)throw i;if(n=i,!this.shouldRetryContentDownload(i))throw this.stop(i),i;if(o>=this.maxAttemptsPerFile){let s=new Error(`download file content failed: ${e}: ${qn(i)}`);throw this.stop(s),s}if(!this.consumeRetryBudget()){let s=new Error(`download file content retry budget exhausted after ${this.maxRetries} retries: ${e}: ${qn(i)}`);throw this.stop(s),s}let a=this.retryBaseDelayMs*o;CF.warn(`content download interrupted, retrying file attempt ${o+1}/${this.maxAttemptsPerFile}, fetch retry budget ${this.retryCount}/${this.maxRetries}: `+e,i),await new Promise(s=>setTimeout(s,a)),mt(this.options.signal)}}throw n instanceof Error?n:new Error(String(n??"content download failed"))}stop(e){this.stoppedError||(this.stoppedError=e instanceof Error?e:new Error(String(e??"content download failed")),this.runner.cancel(this.stoppedError))}consumeRetryBudget(){return this.retryCount>=this.maxRetries?!1:(this.retryCount++,!0)}shouldRetryContentDownload(e){return Lh(e)}};var ku=b(require("fs")),Rc=b(require("path"));$();Je();G();pn();D();qt();Zo();function gv(r){let e=new Map(r.serverProjects.map(a=>[a.remotePath,a])),t=wF(r.serverProjects),n=new Map(r.mirrorProjects.map(a=>[a.remotePath,a])),o=PF(r.mirrorProjects),i={scannableProjectPaths:new Set,unavailableProjects:[],renamedProjects:[]};for(let a of r.trackedProjects){let s=n.get(a),c=s?.id,l=e.get(a);if(l){c&&l.id&&c!==l.id?i.unavailableProjects.push(fv(a,s)):i.scannableProjectPaths.add(a);continue}let p=c&&!o.has(c)?t.get(c):void 0;if(p&&p.remotePath!==a){i.renamedProjects.push({oldProject:s??{name:yv(a),remotePath:a,id:c},newProject:p});continue}i.unavailableProjects.push(fv(a,s))}return i}function wF(r){let e=new Map,t=new Set;for(let n of r)if(n.id){if(e.has(n.id)){t.add(n.id);continue}e.set(n.id,n)}for(let n of t)e.delete(n);return e}function PF(r){let e=new Set,t=new Set;for(let n of r)n.id&&(e.has(n.id)&&t.add(n.id),e.add(n.id));return t}function fv(r,e){return e||{name:yv(r),remotePath:r}}function yv(r){let e=r.lastIndexOf("/");return e>=0?r.slice(e+1):r}var RF=8,Cv=100,EF=/^[0-9a-f]{64}$/,Pt=T("sync.detector.remote"),wu=class{detectRuns=0;serverFileInfoRequests=0;serverFileInfoHits=0;serverFileInfoMisses=0;serverFoldersListed=0;serverFoldersSkippedByScope=0;serverFoldersSkippedByWaterline=0;mirrorFoldersScanned=0;mirrorEntriesCollected=0;mirrorContentStatChecks=0;mirrorContentHashChecks=0;changesByType={};changesByKind=bF();scanScope=TF();visitorEvents={};api={total:0,byApi:{},byPath:{},droppedPathKeys:0,recentCallsDropped:0};describeForLog(){return`
64
- `+JSON.stringify(this.createSnapshot(),null,2).replace(/^\{\n/,"").replace(/\n\}$/,"")}createSnapshot(){return{detectRuns:this.detectRuns,serverFileInfoRequests:this.serverFileInfoRequests,serverFileInfoHits:this.serverFileInfoHits,serverFileInfoMisses:this.serverFileInfoMisses,serverFoldersListed:this.serverFoldersListed,serverFoldersSkippedByScope:this.serverFoldersSkippedByScope,serverFoldersSkippedByWaterline:this.serverFoldersSkippedByWaterline,mirrorFoldersScanned:this.mirrorFoldersScanned,mirrorEntriesCollected:this.mirrorEntriesCollected,mirrorContentStatChecks:this.mirrorContentStatChecks,mirrorContentHashChecks:this.mirrorContentHashChecks,changesByType:{...this.changesByType},changesByKind:{...this.changesByKind},scanScope:{...this.scanScope},visitorEvents:{...this.visitorEvents},api:this.api}}},Er=class{constructor(e){this.options=e;this.serverRequestRunner=new ze({maxConcurrency:RF,signal:e.task.getAbortSignal()})}diagnostics=Sv();workspaceState;workspaceStateInitialized=!1;expandedServerFolders=new Set;serverRequestRunner;loggedChangeDetailCount=0;changeDetailLimitLogged=!1;loggedChangeDetailKeys=new Set;visitorTasks=[];visitorChangeKeys=new Set;getDiagnostics(e={}){this.diagnostics.api=this.workspaceStateInitialized?this.workspaceState.client.getDiagnostics({reset:e.reset,includeRecentCalls:e.includeApiRecentCalls})??vu():vu();let t=this.diagnostics.createSnapshot();return e.reset&&this.resetDiagnostics(),t}async detect(){this.diagnostics.detectRuns++;let e=Date.now();Pt.debug(`detect start targets=${this.options.targets?.size??"<all>"}`);try{if(this.isSignalAborted()||!await this.initializeWorkspaceState())return[];this.resetChangeDetailLogState();let t=await this.createSnapshot(),n=Date.now(),o=await this.matchSnapshot(t);for(Pt.debug(`match snapshot done elapsed=${Date.now()-n}ms changes=${o.changes.length} renamedFolders=${o.renamedFolders.length}`);await this.expandRenamedFolderChildren(t,o.renamedFolders);)n=Date.now(),o=await this.matchSnapshot(t),Pt.debug(`rematch after folder expansion done elapsed=${Date.now()-n}ms changes=${o.changes.length} renamedFolders=${o.renamedFolders.length}`);let i=o.changes.filter(a=>this.isTargetChange(a));for(let a of i)this.incrementRecordCounter(this.diagnostics.changesByType,a.type),this.recordChangeKind(a),this.dispatchChange(a,t);return await this.waitVisitorTasks(),Pt.debug(`detect diagnostics ${this.describeDiagnosticsForLog()}`),Pt.debug(`detect done elapsed=${Date.now()-e}ms changes=${i.length}`),i}catch(t){throw this.serverRequestRunner.cancel(t),await this.serverRequestRunner.waitAll(),t}}async initializeWorkspaceState(){if(this.workspaceStateInitialized)return!0;let e=this.options.workspace,t=await e.requireServerClient(e.activeServerUrl);if(this.isSignalAborted())return!1;let n=new Mt(e.getMirrorRoot()),o=await e.listWorkspaceProjects();return this.isSignalAborted()?!1:(this.workspaceState={client:t,mirror:n,trackedProjects:new Set(o.map(i=>"/"+i))},this.workspaceStateInitialized=!0,!0)}isSignalAborted(){return this.options.signal?.aborted===!0}async createSnapshot(){let e=Date.now(),t={server:new Map,mirror:new Map,skippedServerFolders:new Set,explicitMissingTargets:new Set};return this.diagnostics.scanScope.trackedProjects=this.workspaceState.trackedProjects.size,this.options.targets||(t.projectCompare=await this.computeProjectCompare()),await Promise.all([this.collectMirrorSnapshot(t),this.collectServerSnapshot(t)]),await this.collectMirrorRenameCandidates(t),Pt.debug(`create snapshot done elapsed=${Date.now()-e}ms serverEntries=${t.server.size} mirrorEntries=${t.mirror.size} skippedServerFolders=${t.skippedServerFolders.size} explicitMissingTargets=${t.explicitMissingTargets.size}`),t}async collectServerSnapshot(e){let t=Date.now();if(this.options.targets){let a=await this.filterCloneInProgressPaths(ft(this.options.targets));await Promise.all(a.map(s=>this.collectServerTarget(s,e))),Pt.debug(`collect server targets done elapsed=${Date.now()-t}ms targets=${this.options.targets.size} serverEntries=${e.server.size}`);return}let n=e.projectCompare,o=n?[...n.scannableProjectPaths]:[],i=n?n.renamedProjects.map(a=>a.newProject.remotePath):[];await Promise.all([...o.map(a=>this.collectServerEntry(a,e,!0)),...i.map(a=>this.collectServerEntry(a,e,!1))]),Pt.debug(`collect server projects done elapsed=${Date.now()-t}ms scannableProjects=${o.length} renameTargets=${i.length} trackedProjects=${this.workspaceState.trackedProjects.size} serverEntries=${e.server.size} skippedServerFolders=${e.skippedServerFolders.size}`)}async computeProjectCompare(){let[e,t]=await Promise.all([this.workspaceState.client.getProjects(),this.listMirrorProjectPaths()]),n=e.map(s=>({name:s.name,remotePath:"/"+s.name,id:s.id,desc:s.desc})),o=await Promise.all([...t].map(async s=>{let c=await this.workspaceState.mirror.readMeta(s);return{name:s.slice(1),remotePath:s,id:c?.id,desc:c?.desc}})),i=new Set(await this.filterCloneInProgressPaths([...this.workspaceState.trackedProjects])),a=gv({trackedProjects:i,serverProjects:n,mirrorProjects:o});return this.recordProjectCompareScanScope(a,e.length,t),a}recordProjectCompareScanScope(e,t,n){let o=e.scannableProjectPaths.size+e.renamedProjects.length,i=[...e.scannableProjectPaths].filter(s=>n.has(s)).length+e.renamedProjects.filter(s=>n.has(s.oldProject.remotePath)).length,a=this.diagnostics.scanScope;a.serverProjects=t,a.probedProjects=o,a.missingTrackedProjects=e.unavailableProjects.length,a.skippedUntrackedProjects=Math.max(t-o,0),a.mirrorProjectsScanned=i,a.skippedUntrackedMirrorProjects=[...n].filter(s=>!this.workspaceState.trackedProjects.has(s)).length}async collectServerTarget(e,t){let[n,o]=await Promise.all([this.collectServerEntry(e,t,!0),this.workspaceState.mirror.readMeta(e)]);n||!o||(t.explicitMissingTargets.add(e),await this.collectServerEntry(We(e)??"/",t,!0))}async collectServerEntry(e,t,n){this.options.task.throwIfAborted();let o=await this.getRemoteFileInfo(e);return o?(await this.collectKnownServerEntry(o,t,n),!0):!1}async collectKnownServerEntry(e,t,n){let o=this.createServerEntry(e);if(o.shouldReport=n,o.isFolder||await this.enrichFileContentState(o),t.server.set(o.remotePath,o),!o.isFolder)return;if(!n){t.skippedServerFolders.add(o.remotePath),this.diagnostics.serverFoldersSkippedByScope++;return}if(await this.canSkipServerFolder(o.remotePath,e)){t.skippedServerFolders.add(o.remotePath),this.diagnostics.serverFoldersSkippedByWaterline++,this.dispatchFolderSkipped(o.remotePath,e);return}let i=await this.listRemoteFiles(o.remotePath);await this.dispatchFolderScanned(o.remotePath,e,i),await Promise.all(i.map(a=>this.collectServerChild(a,t)))}async collectServerChild(e,t){await this.collectKnownServerEntry(e,t,!0)}async canSkipServerFolder(e,t){if(this.options.forceRefresh||this.expandedServerFolders.has(e))return!1;let n=await this.workspaceState.mirror.readMeta(e);return!n||n.modifyTime!==t.modifyTime||!await this.workspaceState.mirror.exists(e)?!1:this.hasHealthyDirectMirrorChildren(e)}async hasHealthyDirectMirrorChildren(e){let t;try{t=(await ku.promises.readdir(this.workspaceState.mirror.toLocalPath(e),{withFileTypes:!0})).filter(a=>a.name!==Y).map(a=>a.name).sort()}catch(i){if(F(i))return Pt.debug(`mirror folder baseline cannot be listed: ${e}`),!1;throw i}let n=await zr(this.workspaceState.mirror.root,Rc.posix.join(e,Y));if(!n.exists||n.damaged)return!1;let o=Object.keys(n.dotMeta).sort();return t.length===o.length&&t.every((i,a)=>i===o[a])}async enrichFileContentState(e){!this.options.forceRefresh||!e.serverInfo||(e.contentMatchesMirror=await this.getContentMatchesMirrorPath(e,e.remotePath))}async getContentMatchesMirrorPath(e,t){if(!e.serverInfo)return;let n=this.getValidServerHash(e.serverInfo),o=this.getValidServerSize(e.serverInfo);if(!(n===void 0||o===void 0)){try{this.diagnostics.mirrorContentStatChecks++;let i=await ku.promises.stat(this.workspaceState.mirror.toLocalPath(t));if(!i.isFile()||i.size!==o)return!1}catch(i){if(F(i))return Pt.debug(`mirror file content cannot be verified during remote detection: ${t}`),!1;throw i}return this.diagnostics.mirrorContentHashChecks++,await sc(this.workspaceState.mirror.toLocalPath(t))===n}}getValidServerHash(e){if(e.hash===void 0||e.hash===null)return;if(typeof e.hash!="string")throw new Error(`invalid file content hash: ${e.path}`);let t=e.hash.trim().toLowerCase();if(!EF.test(t))throw new Error(`invalid file content hash: ${e.path}`);return t}getValidServerSize(e){if(!(e.size===void 0||e.size===null)){if(!Number.isSafeInteger(e.size)||e.size<0)throw new Error(`invalid file content size: ${e.path}`);return e.size}}async collectMirrorSnapshot(e){if(this.options.targets){let i=await this.filterCloneInProgressPaths(ft(this.options.targets));await Promise.all(i.map(a=>this.collectMirrorRootAndSubtree(a,e)));return}let t=e.projectCompare,n=t?[...t.scannableProjectPaths]:[],o=t?t.renamedProjects.map(i=>i.oldProject.remotePath):[];await Promise.all([...n.map(i=>this.collectMirrorRootAndSubtree(i,e)),...o.map(i=>this.collectMirrorRootEntry(i,e))])}async collectMirrorRenameCandidates(e){if(!this.options.targets)return;let t=new Set;for(let i of e.mirror.values())i.meta.id&&t.add(i.meta.id);let n=new Set,o=new Set;for(let i of e.server.values()){let a=i.meta.id;if(!a||t.has(a))continue;n.add(a);let s=Rc.posix.dirname(i.remotePath);s!=="/"&&o.add(s)}n.size!==0&&await Promise.all([...o].map(i=>this.collectMirrorDirectMetaCandidates(i,n,e)))}async collectMirrorDirectMetaCandidates(e,t,n){this.options.task.throwIfAborted(),this.diagnostics.mirrorFoldersScanned++;let o=await this.workspaceState.mirror.listDirectMetaChildren(e);await Promise.all(o.map(async i=>{let a=i.meta.id;if(!a||!t.has(a)||n.mirror.has(i.path))return;let[s,c]=await Promise.all([this.workspaceState.mirror.exists(i.path),this.workspaceState.mirror.isFolder(i.path)]);n.mirror.set(i.path,{remotePath:i.path,isFolder:s?c:i.isFolder,meta:i.meta,exists:s}),this.diagnostics.mirrorEntriesCollected++}))}async listMirrorProjectPaths(){let[e,t]=await Promise.all([this.workspaceState.mirror.listDirectChildren("/"),this.workspaceState.mirror.listDirectMetaChildren("/")]);return new Set([...e,...t].map(n=>n.path))}async filterCloneInProgressPaths(e){return(await Promise.all(e.map(async n=>await this.shouldSkipCloneInProgressProject(n)?void 0:n))).filter(n=>n!==void 0)}async shouldSkipCloneInProgressProject(e){if(this.options.visitor)return!1;let t=We(e);if(!t)return!1;let n=await this.workspaceState.mirror.isCloneInProgress(t);return n&&Pt.debug(`skip clone in-progress mirror project: ${t}`),n}async collectMirrorRootAndSubtree(e,t){if(e==="/"){await this.collectMirrorSubtree(e,t);return}(await this.collectMirrorRootEntry(e,t))?.isFolder&&await this.collectMirrorSubtree(e,t)}async collectMirrorRootEntry(e,t){let[n,o,i]=await Promise.all([this.workspaceState.mirror.readMeta(e),this.workspaceState.mirror.exists(e),this.workspaceState.mirror.isFolder(e)]);if(n||o){let a={remotePath:e,isFolder:o?i:!!n?.type&&n.type!=="file",meta:n??{},exists:o};return t.mirror.set(e,a),this.diagnostics.mirrorEntriesCollected++,a}}async collectMirrorSubtree(e,t){this.options.task.throwIfAborted(),this.diagnostics.mirrorFoldersScanned++;let[n,o]=await Promise.all([this.workspaceState.mirror.listDirectChildren(e),this.workspaceState.mirror.listDirectMetaChildren(e)]),i=new Map(o.map(a=>[a.path,a]));await Promise.all(n.map(async a=>{let c=i.get(a.path)?.meta;(c||!a.isFolder)&&(t.mirror.set(a.path,{remotePath:a.path,isFolder:a.isFolder,meta:c??{},exists:!0}),this.diagnostics.mirrorEntriesCollected++),a.isFolder&&await this.collectMirrorSubtree(a.path,t)}));for(let a of o)t.mirror.has(a.path)||(t.mirror.set(a.path,{remotePath:a.path,isFolder:a.isFolder,meta:a.meta,exists:!1}),this.diagnostics.mirrorEntriesCollected++)}async matchSnapshot(e){let t=new Set,n=new Set,o=[],i=[];return await this.matchByPath(e,t,n,o,i),await this.matchById(e,t,n,o,i),this.addUnmatchedChanges(e,t,n,o),{changes:o,renamedFolders:i}}async matchByPath(e,t,n,o,i){let a=this.groupMirrorEntriesById(e.mirror);for(let s of e.server.values()){let c=e.mirror.get(s.remotePath);if(!c)continue;t.add(s.remotePath),n.add(c.remotePath);let l=this.findUnmatchedMirrorEntryById(a,s.meta.id,n);if(!s.meta.id||s.meta.id!==c.meta.id){if(l){if(!c.meta.id){await this.addRemoteRenameChange(e,s,l,n,o,i);continue}n.add(l.remotePath),this.addChange(o,this.createConflictChange(s,l.remotePath),e);continue}if(s.meta.id&&!c.meta.id){this.addChange(o,this.createMirrorRecoveryChange(s,c),e);continue}this.addChange(o,this.createConflictChange(s),e);continue}if(l){await this.addRemoteRenameChange(e,s,l,n,o,i);continue}this.addComparedChange(s,c,o,e)}}async matchById(e,t,n,o,i){let a=this.indexUniqueById(e.server,t),s=this.indexUniqueById(e.mirror,n);for(let c of e.server.values()){if(t.has(c.remotePath)||!c.meta.id)continue;let l=s.get(c.meta.id);if(!(!l||n.has(l.remotePath))&&a.get(c.meta.id)===c){if(t.add(c.remotePath),c.isFolder!==l.isFolder){n.add(l.remotePath),this.addChange(o,this.createConflictChange(c,l.remotePath),e);continue}await this.addRemoteRenameChange(e,c,l,n,o,i)}}}async addRemoteRenameChange(e,t,n,o,i,a){o.add(n.remotePath);let s=await this.createRenamedChange(t,n);this.addChange(i,s,e),t.isFolder&&a.push(s)}addUnmatchedChanges(e,t,n,o){this.addUnavailableTrackedProjectChanges(e,o);for(let i of e.server.values())t.has(i.remotePath)||i.shouldReport===!1||!this.isUnmatchedChangeInTargetSubtree(i.remotePath)||this.addChange(o,this.createRemoteChange(i,"remoteAdded"),e);for(let i of e.mirror.values())n.has(i.remotePath)||this.isUnmatchedChangeInTargetSubtree(i.remotePath)&&(!this.isUnderExplicitMissingTarget(e,i.remotePath)&&this.isUnderSkippedServerFolder(e,i.remotePath)||this.addChange(o,this.createRemoteChange(i,"remoteDeleted"),e))}addUnavailableTrackedProjectChanges(e,t){for(let n of e.projectCompare?.unavailableProjects??[])this.addChange(t,this.createProjectUnavailableChange(n),e)}async expandRenamedFolderChildren(e,t){let n=!1;return await Promise.all(t.map(async o=>{!o.isFolder||this.expandedServerFolders.has(o.remotePath)||this.isProjectRootRenameChange(o)||(this.expandedServerFolders.add(o.remotePath),e.skippedServerFolders.delete(o.remotePath),await this.collectServerEntry(o.remotePath,e,!0),n=!0)})),n}isProjectRootRenameChange(e){return!!e.oldRemotePath&&We(e.remotePath)===e.remotePath&&We(e.oldRemotePath)===e.oldRemotePath}addComparedChange(e,t,n,o){if(e.isFolder!==t.isFolder){this.addChange(n,this.createConflictChange(e),o);return}let i=this.isRemoteMetaChanged(t.meta,e.meta)||this.isRemoteContentBaselineChanged(t,e,e.contentMatchesMirror),a=!e.isFolder&&(t.exists===!1||this.isRemoteFileContentChanged(t,e,e.contentMatchesMirror,i));(a||i)&&this.addChange(n,this.createRemoteChange(e,"remoteModified",{contentChanged:a,metaChanged:i}),o)}indexUniqueById(e,t){let n=new Map,o=new Set;for(let i of e.values()){let a=i.meta.id;if(!(!a||t.has(i.remotePath))){if(n.has(a)){o.add(a);continue}n.set(a,i)}}for(let i of o)n.delete(i);return n}groupMirrorEntriesById(e){let t=new Map;for(let n of e.values()){let o=n.meta.id;if(!o)continue;let i=t.get(o);i?i.push(n):t.set(o,[n])}return t}findUnmatchedMirrorEntryById(e,t,n){if(!t)return;let o=e.get(t);if(!o)return;let i;for(let a of o)if(!n.has(a.remotePath)){if(i)return;i=a}return i}isUnderSkippedServerFolder(e,t){for(let n of e.skippedServerFolders)if(t!==n&&Q(t,n))return!0;return!1}isUnmatchedChangeInTargetSubtree(e){let t=this.options.targets;if(!t||t.size===0)return!0;for(let n of t)if(Q(e,n))return!0;return!1}isUnderExplicitMissingTarget(e,t){for(let n of e.explicitMissingTargets)if(Q(t,n))return!0;return!1}isTargetChange(e){let t=this.options.targets;return!t||t.size===0?!0:[...t].some(n=>Q(e.remotePath,n)||Q(n,e.remotePath)||!!e.oldRemotePath&&(Q(e.oldRemotePath,n)||Q(n,e.oldRemotePath)))}async getRemoteFileInfo(e){this.diagnostics.serverFileInfoRequests++;try{let t=await this.serverRequestRunner.addTask(()=>this.workspaceState.client.getFile(e));return this.diagnostics.serverFileInfoHits++,t}catch(t){if(this.workspaceState.client.isNotFoundError(t)){Pt.debug(`remote file disappeared during remote change detection: ${e}`),this.diagnostics.serverFileInfoMisses++;return}throw t}}async listRemoteFiles(e){return this.diagnostics.serverFoldersListed++,this.serverRequestRunner.addTask(()=>this.workspaceState.client.listFiles(e))}createServerEntry(e){return{remotePath:e.path,isFolder:!!e.isFolder,meta:Vt(e),contentMeta:Vt(e,{writeContentInfo:!0}),serverInfo:e}}isRemoteMetaChanged(e,t){return!no(e,t)}isRemoteContentBaselineChanged(e,t,n){return!t.contentMeta||t.isFolder||n===!1||t.contentMeta.hash===void 0||t.contentMeta.size===void 0?!1:n===!0&&((e.meta.revision??0)!==(t.meta.revision??0)||(e.meta.modifyTime??0)!==(t.meta.modifyTime??0))?!0:this.hasCompleteContentBaseline(e.meta)?e.meta.hash!==t.contentMeta.hash||e.meta.size!==t.contentMeta.size?n===!0:(e.meta.revision??0)!==(t.meta.revision??0)||(e.meta.modifyTime??0)!==(t.meta.modifyTime??0):!0}isRemoteFileContentChanged(e,t,n,o){return n===!1?!0:n===!0?!1:t.contentMeta&&this.hasCompleteContentBaseline(e.meta)&&t.contentMeta.hash!==void 0&&t.contentMeta.size!==void 0?e.meta.hash!==t.contentMeta.hash||e.meta.size!==t.contentMeta.size:t.contentMeta?.hash!==void 0&&t.contentMeta.size!==void 0?(e.meta.revision??0)!==(t.meta.revision??0)||(e.meta.modifyTime??0)!==(t.meta.modifyTime??0):(e.meta.revision??0)!==(t.meta.revision??0)?!0:!o&&(e.meta.modifyTime??0)!==(t.meta.modifyTime??0)}hasCompleteContentBaseline(e){return e.hash!==void 0&&e.size!==void 0}resetChangeDetailLogState(){this.loggedChangeDetailCount=0,this.changeDetailLimitLogged=!1,this.loggedChangeDetailKeys.clear(),this.visitorChangeKeys.clear(),this.visitorTasks.length=0}addChange(e,t,n){e.push(t),this.logChangeDetail(t,n)}dispatchChange(e,t){if(!this.options.visitor?.onChange||!this.isTargetChange(e))return;let n=this.getChangeDetailLogKey(e);if(this.visitorChangeKeys.has(n))return;this.visitorChangeKeys.add(n),this.incrementRecordCounter(this.diagnostics.visitorEvents,"change");let o={change:e,serverEntry:t.server.get(e.remotePath),mirrorEntry:t.mirror.get(e.oldRemotePath??e.remotePath)};this.addVisitorTask(()=>this.options.visitor?.onChange?.(o))}async dispatchFolderScanned(e,t,n){if(!this.options.visitor?.onFolderScanned)return;this.incrementRecordCounter(this.diagnostics.visitorEvents,"folderScanned");let o=await this.workspaceState.mirror.listDirectMetaChildren(e),i={remotePath:e,folderInfo:t,children:n,mirrorChildMetas:new Map(o.map(a=>[Rc.posix.basename(a.path),a.meta])),serverChildPaths:new Set(n.map(a=>a.path))};this.addVisitorTask(()=>this.options.visitor?.onFolderScanned?.(i))}dispatchFolderSkipped(e,t){if(!this.options.visitor?.onFolderSkipped)return;this.incrementRecordCounter(this.diagnostics.visitorEvents,"folderSkipped");let n={remotePath:e,folderInfo:t,reason:"waterlineUnchanged"};this.addVisitorTask(()=>this.options.visitor?.onFolderSkipped?.(n))}addVisitorTask(e){this.visitorTasks.push(()=>Promise.resolve(e()))}async waitVisitorTasks(){for(let e of this.visitorTasks)await e()}logChangeDetail(e,t){if(!Pt.isDebugEnabled()||!this.isTargetChange(e))return;let n=this.getChangeDetailLogKey(e);if(!this.loggedChangeDetailKeys.has(n)){if(this.loggedChangeDetailKeys.add(n),this.loggedChangeDetailCount>=Cv){this.changeDetailLimitLogged||(Pt.debug(`change detail ... displayed=${Cv} further changes omitted`),this.changeDetailLimitLogged=!0);return}this.loggedChangeDetailCount++,Pt.debug(`change detail ${this.loggedChangeDetailCount} ${this.describeChange(e,t)}`)}}getChangeDetailLogKey(e){return`${e.type}|${e.remotePath}|${e.oldRemotePath??""}`}describeChange(e,t){let n=t.server.get(e.remotePath),o=t.mirror.get(e.oldRemotePath??e.remotePath);return[`type=${e.type}`,`remotePath=${e.remotePath}`,`oldRemotePath=${e.oldRemotePath??"<none>"}`,`fileId=${e.fileId??"<none>"}`,`isFolder=${e.isFolder}`,`contentChanged=${e.contentChanged}`,`metaChanged=${e.metaChanged}`,`serverRevision=${this.formatLogValue(n?.meta.revision)}`,`mirrorRevision=${this.formatLogValue(o?.meta.revision)}`,`serverModifyTime=${this.formatLogValue(n?.meta.modifyTime)}`,`mirrorModifyTime=${this.formatLogValue(o?.meta.modifyTime)}`,`serverModifier=${this.formatLogValue(n?.meta.modifier)}`,`mirrorModifier=${this.formatLogValue(o?.meta.modifier)}`].join(" ")}formatLogValue(e){return e===void 0?"<none>":String(e)}describeDiagnosticsForLog(){return this.diagnostics.api=this.workspaceState.client.getDiagnostics()??vu(),this.diagnostics.describeForLog()}recordChangeKind(e){switch(e.type){case"remoteModified":e.contentChanged?this.diagnostics.changesByKind.contentModified++:e.metaChanged&&this.diagnostics.changesByKind.metaOnlyModified++;break;case"remoteDeleted":this.diagnostics.changesByKind.remoteDeleted++;break;case"remoteProjectUnavailable":this.diagnostics.changesByKind.remoteProjectUnavailable++;break;case"remoteAdded":this.diagnostics.changesByKind.remoteAdded++;break;case"remoteRenamed":this.diagnostics.changesByKind.remoteRenamed++;break;case"conflict":this.diagnostics.changesByKind.conflict++;break;default:break}}incrementRecordCounter(e,t){e[t]=(e[t]??0)+1}resetDiagnostics(){this.diagnostics=Sv()}createRemoteChange(e,t,n){return{path:Ne(e.remotePath),remotePath:e.remotePath,...e.meta.id!==void 0?{fileId:e.meta.id}:{},type:t,isFolder:e.isFolder,contentChanged:n?.contentChanged??(t!=="remoteDeleted"&&!e.isFolder),metaChanged:n?.metaChanged??t!=="remoteDeleted",...t==="remoteDeleted"?{}:{modifier:e.meta.modifier,modifyTime:e.meta.modifyTime}}}createProjectUnavailableChange(e){return{path:Ne(e.remotePath),remotePath:e.remotePath,...e.id!==void 0?{fileId:e.id}:{},type:"remoteProjectUnavailable",isFolder:!0,contentChanged:!1,metaChanged:!1}}async createRenamedChange(e,t){let n=e.remotePath===t.remotePath?e.contentMatchesMirror:this.options.forceRefresh?await this.getContentMatchesMirrorPath(e,t.remotePath):void 0,o=this.isRemoteMetaChanged(t.meta,e.meta)||this.isRemoteContentBaselineChanged(t,e,n),i=!e.isFolder&&this.isRemoteFileContentChanged(t,e,n,o);return{path:Ne(e.remotePath),remotePath:e.remotePath,...e.meta.id!==void 0?{fileId:e.meta.id}:{},oldPath:Ne(t.remotePath),oldRemotePath:t.remotePath,type:"remoteRenamed",isFolder:e.isFolder,contentChanged:i,metaChanged:o,modifier:e.meta.modifier,modifyTime:e.meta.modifyTime}}createMirrorRecoveryChange(e,t){return this.createRemoteChange(e,"remoteModified",{contentChanged:this.isMirrorRecoveryContentChanged(e,t),metaChanged:!0})}isMirrorRecoveryContentChanged(e,t){return e.isFolder?!1:t?t.exists===!1?!0:this.isRemoteFileContentChanged(t,e,e.contentMatchesMirror,!0):e.contentMatchesMirror!==!0}createConflictChange(e,t){return{path:Ne(e.remotePath),remotePath:e.remotePath,...e.meta.id!==void 0?{fileId:e.meta.id}:{},oldPath:t?Ne(t):void 0,oldRemotePath:t,type:"conflict",isFolder:e.isFolder,contentChanged:!e.isFolder,metaChanged:!0,modifier:e.meta.modifier,modifyTime:e.meta.modifyTime}}};function Sv(){return new wu}function bF(){return{contentModified:0,metaOnlyModified:0,remoteDeleted:0,remoteProjectUnavailable:0,remoteAdded:0,remoteRenamed:0,conflict:0}}function TF(){return{trackedProjects:0,serverProjects:0,probedProjects:0,missingTrackedProjects:0,skippedUntrackedProjects:0,mirrorProjectsScanned:0,skippedUntrackedMirrorProjects:0}}function vu(){return{total:0,byApi:{},byPath:{},droppedPathKeys:0,recentCallsDropped:0}}gr();qt();var xF=4,he=T("sync.fetch"),Ru=class extends ni{projectTargets=0;resourceTargets=0;countedResources=0;remoteResourceCountRequests=0;mirrorResourceCountRequests=0;contentDownloadsScheduled=0;mirrorFilesMoved=0;mirrorResourcesRemoved=0;mirrorPhysicalChildrenRemoved=0;mirrorMetaWrites=0;downloaded=0;deleted=0;skippedFolders=0;updatedMetas=0;detector;setDetector(e){this.detector=e}createSnapshot(){return{runs:this.runs,durationMs:this.durationMs,projectTargets:this.projectTargets,resourceTargets:this.resourceTargets,countedResources:this.countedResources,remoteResourceCountRequests:this.remoteResourceCountRequests,mirrorResourceCountRequests:this.mirrorResourceCountRequests,contentDownloadsScheduled:this.contentDownloadsScheduled,mirrorFilesMoved:this.mirrorFilesMoved,mirrorResourcesRemoved:this.mirrorResourcesRemoved,mirrorPhysicalChildrenRemoved:this.mirrorPhysicalChildrenRemoved,mirrorMetaWrites:this.mirrorMetaWrites,downloaded:this.downloaded,deleted:this.deleted,skippedFolders:this.skippedFolders,updatedMetas:this.updatedMetas,...this.detector?{detector:this.detector}:{},api:this.api}}},Fn=class extends Ae{mirror;fileFetcher;fetchResult;diagnostics=vv();downloadTask;downloadTotal=0;constructor(e,t){super(e,t),this.mirror=this.createMirrorStore(),this.fileFetcher=new Pc({maxConcurrency:xF,signal:this.task.getAbortSignal(),getContentStream:async n=>{mt(this.task.getAbortSignal());let o=await this.getApiClient();return mt(this.task.getAbortSignal()),o.getFileContentStream(n)}}),this.fetchResult={mirrorRoot:this.mirrorRoot,downloaded:[],deleted:[],skippedFolders:[],updatedMetas:[]}}execute(){return this.fetchTrackedMirror()}getDiagnostics(e={}){this.syncResultDiagnostics();let t=this.diagnostics.createSnapshot();return e.reset&&this.resetDiagnostics(),t}async fetchTrackedMirror(){let e=this.diagnostics.startRun(),t=!1;he.info("fetch start: {0}",this.createFetchScopeLog()),this.task.start(100);let n=this.task.subTaskMonitor(5),o=this.task.subTaskMonitor(5),i=this.task.subTaskMonitor(90),a=[];if(this.hasKnownChanges(this.options.changes)){n.start(1),he.info("fetch prepare start"),this.task.throwIfAborted(),await Gr.promises.mkdir(this.mirrorRoot,{recursive:!0}),n.step(1),he.info("fetch prepare done: knownChanges={0}",this.options.changes.length),this.downloadTask=i;try{return await this.fetchKnownChanges(o),this.finishRunDiagnostics(e),t=!0,this.logFetchDone(),this.fetchResult}finally{t||this.finishRunDiagnostics(e),this.downloadTask=void 0,this.downloadTotal=0}}n.start(1);let s=this.resolveFetchProjectPaths(),c=await this.getApiClient(),l=c.getProjects();he.info("fetch prepare start"),this.task.throwIfAborted(),await Gr.promises.mkdir(this.mirrorRoot,{recursive:!0});let p=this.createWorkspaceStore(this.mirror).listProjectPaths(),[m,g,d]=await Promise.all([l,this.readMirrorChildMetas("/"),p]),f=new Set(d),y=new Set([...m.map(C=>"/"+C.name),...f]);await this.removeMissingMirrorChildren("/",y,g),s&&(a=await this.markNewFetchProjects(s)),n.step(1),he.info("fetch prepare done: serverProjects={0}",m.length),this.downloadTask=i;try{if(s){this.diagnostics.projectTargets=s.length,he.info("fetch count resources start: {0}",this.createFetchScopeLog());let S=await this.countFetchResources(o,()=>this.countRemoteFiles(s));return he.info("fetch count resources done: resources={0}",S),this.startFetchProgress(S),s.length===0&&this.completeDownloadProgress(),he.info("fetch mirror update start: targets={0}",s.length),await this.fetchWithRemoteChangeDetector({targets:new Set(s),forceRefresh:this.options.forceRefresh===!0}),this.completeDownloadProgress(),await this.clearNewFetchProjectMarkers(a),he.info("fetch mirror update done: targets={0}",s.length),this.captureApiDiagnostics(c),this.finishRunDiagnostics(e),t=!0,this.logFetchDone(),this.fetchResult}let C=await this.resolveTargetRemotePaths(this.options.paths);if(C){let S=ft(C);this.diagnostics.resourceTargets=S.length,he.info("fetch count resources start: {0}",this.createFetchScopeLog());let k=await this.countFetchResources(o,()=>(this.diagnostics.mirrorResourceCountRequests++,this.mirror.countMetaResources(S)));return he.info("fetch count resources done: resources={0}",k),this.startFetchProgress(k),S.length===0&&this.completeDownloadProgress(),he.info("fetch mirror update start: targets={0}",S.length),await this.fetchWithRemoteChangeDetector({targets:new Set(S),forceRefresh:!1}),this.completeDownloadProgress(),he.info("fetch mirror update done: targets={0}",S.length),this.captureApiDiagnostics(c),this.finishRunDiagnostics(e),t=!0,this.logFetchDone(),this.fetchResult}let v=m.filter(S=>f.has("/"+S.name)),P=v.map(S=>"/"+S.name);a=await this.markNewFetchProjects(P),this.diagnostics.projectTargets=P.length,he.info("fetch count resources start: {0}",this.createFetchScopeLog());let u=await this.countFetchResources(o,()=>this.countRemoteFiles(P));return he.info("fetch count resources done: resources={0}",u),this.startFetchProgress(u),v.length===0&&this.completeDownloadProgress(),he.info("fetch mirror update start: targets={0}",v.length),await this.fetchWithRemoteChangeDetector({forceRefresh:!1}),this.completeDownloadProgress(),await this.clearNewFetchProjectMarkers(a),he.info("fetch mirror update done: targets={0}",v.length),this.captureApiDiagnostics(c),this.finishRunDiagnostics(e),t=!0,this.logFetchDone(),this.fetchResult}finally{t||(await this.cleanupNewFetchProjectsAfterFailure(a),this.finishRunDiagnostics(e)),this.downloadTask=void 0,this.downloadTotal=0}}async markNewFetchProjects(e){let t=[];try{for(let n of e){let[o,i]=await Promise.all([this.mirror.isCloneInProgress(n),this.mirror.exists(n)]);!o&&i||(o&&(await this.mirror.removePath(n),await this.mirror.removeMeta(n)),t.push(n),await this.mirror.markCloneInProgress(n))}return t}catch(n){throw await this.cleanupNewFetchProjectsAfterFailure(t),n}}async clearNewFetchProjectMarkers(e){await Promise.all(e.map(t=>this.mirror.clearCloneInProgress(t)))}async cleanupNewFetchProjectsAfterFailure(e){if(e.length!==0)try{await Promise.all(e.map(async t=>{await this.mirror.removePath(t),await this.mirror.removeMeta(t)}))}catch(t){he.warn(`fetch failed, cleanup new mirror projects failed: ${e.join(", ")}`,t)}}createFetchScopeLog(){return this.hasKnownChanges(this.options.changes)?`changes=${this.options.changes.length}`:this.options.projectNames?`projects=${this.options.projectNames.join(", ")}`:this.options.paths?`paths=${this.options.paths.join(", ")}`:"<tracked>"}logFetchDone(){this.syncResultDiagnostics(),he.info("fetch done: downloaded={0} deleted={1} updatedMetas={2} skippedFolders={3}",this.fetchResult.downloaded.length,this.fetchResult.deleted.length,this.fetchResult.updatedMetas.length,this.fetchResult.skippedFolders.length),he.debug(`fetch diagnostics ${this.diagnostics.describeForLog()}`)}resolveFetchProjectPaths(){if(!this.options.projectNames){U(!this.options.forceRefresh,"FetchOptions.forceRefresh can only be used with FetchOptions.projectNames");return}return U(!this.options.paths,"FetchOptions.projectNames and FetchOptions.paths cannot be used together"),ft(new Set(this.options.projectNames.map(e=>Tt(e))))}startFetchProgress(e){this.downloadTotal=Math.max(e,1),this.progressTask.start(this.downloadTotal)}async countFetchResources(e,t){e.start(1);let n=await t();return this.diagnostics.countedResources+=n,e.step(1),n}completeDownloadProgress(){this.progressTask.progress(this.downloadTotal||1)}stepFetchProgress(){this.progressTask.step(1)}get progressTask(){return this.downloadTask??this.task}async countRemoteFiles(e){let t=await this.getApiClient();return this.diagnostics.remoteResourceCountRequests+=e.length,(await Promise.all(e.map(o=>t.countFiles(o)))).reduce((o,i)=>o+i,0)}async fetchWithRemoteChangeDetector(e){let t=[],n=[],o=new Map,i=new Er({workspace:this.context,targets:e.targets,task:this.progressTask,forceRefresh:e.forceRefresh,visitor:{onFolderScanned:s=>this.prepareScannedFolder(s,n),onFolderSkipped:s=>this.applySkippedFolder(s),onChange:s=>{if(this.isActionableFetchChange(s.change,e.targets))return this.applyRemoteChange(s,t,o)}}});await i.detect(),this.diagnostics.setDetector(i.getDiagnostics());let a=(await Promise.all(t)).filter(s=>s instanceof Error);if(a.length>0)throw a[0];await this.writeScannedFolderMetas(n,o)}async fetchKnownChanges(e){let t=this.getKnownFetchChanges();this.diagnostics.resourceTargets=ft(new Set(this.getKnownChangeTargetRemotePaths(t))).length,he.info("fetch count resources start: {0}",this.createFetchScopeLog());let n=await this.countFetchResources(e,async()=>t.length);if(he.info("fetch count resources done: resources={0}",n),this.startFetchProgress(n),t.length===0){this.completeDownloadProgress();return}he.info("fetch mirror update start: changes={0}",t.length);let o=await this.getApiClient(),i=[],a=new Map;for(let c of t)await this.applyKnownRemoteChange(c,o,i,a);let s=(await Promise.all(i)).filter(c=>c instanceof Error);if(s.length>0)throw s[0];this.completeDownloadProgress(),this.captureApiDiagnostics(o),he.info("fetch mirror update done: changes={0}",t.length)}getKnownFetchChanges(){return la(this.options.changes??[]).filter(e=>!Cu(e))}async applyKnownRemoteChange(e,t,n,o){if(e.type==="remoteDeleted"){await this.removeMirrorResource(e.oldRemotePath??e.remotePath),this.stepFetchProgress();return}let i=await this.getKnownRemoteFileInfo(t,e.remotePath);if(!i){await this.removeMirrorResource(e.remotePath),this.stepFetchProgress();return}if(e.type==="remoteRenamed"){await this.applyRemoteRenamedChange(e,i,n,o);return}if(e.type==="conflict"){await this.applyRemoteConflictChange(e,i,n,o);return}await this.applyRemotePresentChange(e,i,n,o)}async getKnownRemoteFileInfo(e,t){try{return await e.getFile(t)}catch(n){if(e.isNotFoundError(n)){he.debug(`known remote change target disappeared before fetch: ${t}`);return}throw n}}isActionableFetchChange(e,t){return Cu(e)?!1:!t||t.size===0?!0:[...t].some(n=>Q(e.remotePath,n)||!!e.oldRemotePath&&Q(e.oldRemotePath,n))}async prepareScannedFolder(e,t){this.task.throwIfAborted(),await Gr.promises.mkdir(this.mirror.toLocalPath(e.remotePath),{recursive:!0}),t.push(e)}async writeScannedFolderMetas(e,t){for(let n of e)await this.writeMirrorChildMetas(n.remotePath,n.mirrorChildMetas,n.children.map(o=>t.get(o.path)??o),n.serverChildPaths)&&this.addUpdatedMeta(n.remotePath),await this.removeMissingMirrorPhysicalChildren(n.remotePath,n.serverChildPaths)}async applySkippedFolder(e){this.addSkippedFolder(e.remotePath),await this.completeSkippedFolderProgress(e.remotePath)}async applyRemoteChange(e,t,n){let o=e.change;if(o.type==="remoteDeleted"){await this.removeMirrorResource(o.oldRemotePath??o.remotePath),this.stepFetchProgress();return}if(o.type==="remoteRenamed"){await this.applyRemoteRenamedChange(o,e.serverEntry?.serverInfo,t,n);return}if(o.type==="conflict"){let i=e.serverEntry?.serverInfo;U(i,`remote conflict missing server entry: ${o.remotePath}`),await this.applyRemoteConflictChange(o,i,t,n);return}if(e.serverEntry?.serverInfo){await this.applyRemotePresentChange(o,e.serverEntry.serverInfo,t,n);return}this.stepFetchProgress()}async applyRemoteConflictChange(e,t,n,o){if(e.oldRemotePath&&!t.isFolder&&e.contentChanged===!1){if(await this.moveMirrorFile(e.oldRemotePath,e.remotePath)){await this.removeMirrorMetaIfReadable(e.oldRemotePath),this.addDeleted(e.oldRemotePath),await this.writeMirrorMetaIfChanged(t,await this.mirror.readMeta(t.path)),this.stepFetchProgress();return}await this.removeMirrorResource(e.oldRemotePath),await this.removeMirrorResource(e.remotePath),await this.applyRemotePresentChange(e,t,n,o,!0);return}if(e.oldRemotePath&&await this.removeMirrorResource(e.oldRemotePath),t.isFolder||e.contentChanged!==!1){await this.removeMirrorResource(e.remotePath),await this.applyRemotePresentChange(e,t,n,o);return}await this.applyRemotePresentChange(e,t,n,o,!t.isFolder&&!await this.mirror.exists(e.remotePath))}async applyRemoteRenamedChange(e,t,n,o){if(!e.oldRemotePath){if(t){await this.applyRemotePresentChange(e,t,n,o);return}this.stepFetchProgress();return}if(t&&!t.isFolder&&e.contentChanged===!1&&await this.moveMirrorFile(e.oldRemotePath,e.remotePath)){await this.removeMirrorMetaIfReadable(e.oldRemotePath),this.addDeleted(e.oldRemotePath),await this.writeMirrorMetaIfChanged(t,await this.mirror.readMeta(t.path)),this.stepFetchProgress();return}if(await this.removeMirrorResource(e.oldRemotePath),t){await this.applyRemotePresentChange(e,t,n,o);return}this.stepFetchProgress()}async applyRemotePresentChange(e,t,n,o,i=!1){if(t.isFolder){await this.applyRemoteFolder(t),this.stepFetchProgress();return}if(!i&&e.contentChanged===!1){await this.writeMirrorMetaIfChanged(t,await this.mirror.readMeta(t.path)),this.stepFetchProgress();return}this.addPendingDownload(n,this.fetchMirrorFile(t).then(a=>(o.set(a.path,a),this.writeMirrorMetaIfChanged(a,void 0))).finally(()=>this.stepFetchProgress()))}async applyRemoteFolder(e){this.task.throwIfAborted(),await Gr.promises.mkdir(this.mirror.toLocalPath(e.path),{recursive:!0}),await this.writeMirrorMetaIfChanged(e,await this.mirror.readMeta(e.path))}addPendingDownload(e,t){this.diagnostics.contentDownloadsScheduled++,e.push(t.then(()=>{},n=>n instanceof Error?n:new Error(String(n??"fetch download failed"))))}async completeSkippedFolderProgress(e){let t=Math.max(await this.mirror.countMetaResources([e])-1,0);t>0&&this.progressTask.step(t)}async fetchMirrorFile(e){let t=this.mirror.toLocalPath(e.path),n=await this.fileFetcher.fetchToLocal(e.path,t),o={...e,revision:n.revision??e.revision,modifyTime:n.modifyTime??e.modifyTime};return this.addDownloaded(e.path),o}async readMirrorChildMetas(e){let t=await Zi(this.mirror.root,Jr.posix.join(e,Y),{strict:!1});return new Map(Object.entries(t))}async writeMirrorMetaIfChanged(e,t){this.isMirrorMetaSame(t,e)||(await this.mirror.writeMeta(e,this.task),this.diagnostics.mirrorMetaWrites++)}isMirrorMetaSame(e,t){return e!==void 0&&(0,Pu.isDeepStrictEqual)(e,Vt(t,{writeContentInfo:!0}))}async writeMirrorChildMetas(e,t,n,o){let i={};for(let[c,l]of t)(!o||o.has(Jr.posix.join(e,c)))&&(i[c]=l);for(let c of n)i[Jr.posix.basename(c.path)]=Vt(c,{writeContentInfo:!0});let a=Jr.posix.join(e,Y),s=await zr(this.mirror.root,a);return s.exists&&!s.damaged&&(0,Pu.isDeepStrictEqual)(i,Object.fromEntries(t))?!1:(await ic(this.mirror.root,a,i),!0)}async removeMissingMirrorChildren(e,t,n){let o={},i=[...n.keys()].map(a=>({name:a,path:Jr.posix.join(e,a)})).filter(a=>!t.has(a.path));await Promise.all(i.map(a=>this.mirror.removePath(a.path)));for(let a of i)o[a.name]=void 0,this.addDeleted(a.path);Object.keys(o).length>0&&await this.mirror.patchMeta(e,o,this.task),await this.removeMissingMirrorPhysicalChildren(e,t)}async removeMissingMirrorPhysicalChildren(e,t){let n=this.mirror.toLocalPath(e),o;try{o=await Gr.promises.readdir(n,{withFileTypes:!0})}catch(a){if(F(a)){he.debug(`mirror folder physical children cannot be listed: ${e}`);return}throw a}let i=o.filter(a=>a.name!==Y).map(a=>Jr.posix.join(e,a.name)).filter(a=>!t.has(a));await Promise.all(i.map(a=>this.mirror.removePath(a))),this.diagnostics.mirrorPhysicalChildrenRemoved+=i.length;for(let a of i)this.addDeleted(a)}async removeMirrorResource(e){await Promise.all([this.mirror.removePath(e),this.removeMirrorMetaIfReadable(e)]),this.diagnostics.mirrorResourcesRemoved++,this.addDeleted(e)}async removeMirrorMetaIfReadable(e){try{await this.mirror.removeMeta(e)}catch(t){if(t instanceof Xo){he.debug(`skip removing mirror meta from damaged .meta during fetch: ${e}`,t);return}throw t}}async moveMirrorFile(e,t){let n=this.mirror.toLocalPath(e),o=this.mirror.toLocalPath(t);try{return this.task.throwIfAborted(),await Gr.promises.mkdir(Jr.dirname(o),{recursive:!0}),await Gr.promises.rm(o,{force:!0,recursive:!0}),await Gr.promises.rename(n,o),this.diagnostics.mirrorFilesMoved++,!0}catch(i){if(F(i))return he.debug(`mirror file cannot be moved during remote rename: ${e} -> ${t}`),!1;throw i}}addDownloaded(e){this.addUniqueResultPath(this.fetchResult.downloaded,e)}addDeleted(e){this.addUniqueResultPath(this.fetchResult.deleted,e)}addSkippedFolder(e){this.addUniqueResultPath(this.fetchResult.skippedFolders,e)}addUpdatedMeta(e){this.addUniqueResultPath(this.fetchResult.updatedMetas,e)}addUniqueResultPath(e,t){e.includes(t)||e.push(t)}captureApiDiagnostics(e){let t=e.getDiagnostics();t&&this.diagnostics.captureApiDiagnostics(t)}finishRunDiagnostics(e){this.diagnostics.finishRun(e)}syncResultDiagnostics(){this.diagnostics.downloaded=this.fetchResult.downloaded.length,this.diagnostics.deleted=this.fetchResult.deleted.length,this.diagnostics.skippedFolders=this.fetchResult.skippedFolders.length,this.diagnostics.updatedMetas=this.fetchResult.updatedMetas.length}resetDiagnostics(){this.diagnostics=vv()}};function vv(){return new Ru}var Eu=b(require("fs"));Je();$();G();it();Qo();var br=T("sync.checkout"),Ec=class extends Ae{mirror=this.createMirrorStore();workspace=this.createWorkspaceStore(this.mirror);async execute(){br.info("checkout start: {0}",this.options.projectNames.join(", ")||"<none>");let e=await this.createCheckoutItems();if(e.length===0)return this.task.start(1),this.task.finish(),br.info("checkout done: <none>"),{projectNames:[]};let t=e.reduce((o,i)=>o+i.total,0);this.task.start(Math.max(t,1));for(let o of e)this.task.throwIfAborted(),await this.checkoutProject(o.projectPath,this.task);let n=e.map(o=>o.projectPath);return br.info("checkout cleanup status start: {0}",n.join(", ")),this.clearSyncStatusTargets(n),br.info("checkout cleanup status done"),e.some(o=>!o.workspaceProjectExists)&&this.context.notifyLocalProjectsChanged?.(),this.task.finish(),br.info("checkout done: {0}",e.map(o=>o.projectName).join(", ")),{projectNames:e.map(o=>o.projectName)}}async createCheckoutItems(){let e=[],t=[...new Set(this.options.projectNames.map(n=>Tt(n)))];for(let n of t){await this.assertMirrorProjectDirectory(n);let o=await iu(this.workspace.toLocalPath(n));e.push({projectName:n.slice(1),projectPath:n,total:Math.max(await this.workspace.countCheckoutResources(n),1),workspaceProjectExists:o})}return e}async assertMirrorProjectDirectory(e){let t=this.mirror.toLocalPath(e);if(!(await Eu.promises.stat(t)).isDirectory())throw new Error(`checkout source must be a mirror project directory: ${e}`)}async checkoutProject(e,t){let n=Date.now(),o=this.workspace.toLocalPath(e),i=await KS(o);if(br.debug(`checkout project start: projectPath=${e} projectBlank=${i}`),!i){await this.workspace.checkoutFromMirror(e,t),br.debug(`checkout project done: projectPath=${e} elapsed=${Date.now()-n}ms`);return}try{await this.workspace.prepareCheckoutDirectory(e,t),await pc(this.workspaceRoot,e),await this.workspace.checkoutMirrorDirectory(e,t),t.throwIfAborted(),await this.workspace.copyMirrorMetaInfo(e,!0),t.step(1)}catch(a){throw await this.rollbackNewProjectCheckout(e,o,a),a}finally{await dc(this.workspaceRoot,e)}br.debug(`checkout project done: projectPath=${e} elapsed=${Date.now()-n}ms`)}async rollbackNewProjectCheckout(e,t,n){try{await Eu.promises.rm(t,{force:!0,recursive:!0}),br.info(`checkout failed, rolled back new workspace project: projectPath=${e}`)}catch(o){br.warn(`checkout failed, rollback new workspace project failed: projectPath=${e} cause=${String(n)}`,o)}}};gr();var bc=T("sync.clone"),Tc=class extends Ae{async execute(){bc.info("clone start: {0}",this.options.projectNames?.join(", ")??"<all>"),this.task.start(100);let e=this.task.subTaskMonitor(5),t=this.task.subTaskMonitor(68),n=this.task.subTaskMonitor(17),o=this.task.subTaskMonitor(6),i=this.task.subTaskMonitor(4);e.start(1),bc.info("clone prepare start"),this.task.throwIfAborted(),await kv.promises.mkdir(this.mirrorRoot,{recursive:!0});let a=await this.resolveCloneProjects();e.step(1);let s=a.map(p=>p.name),c=s.map(p=>Tt(p));bc.info("clone prepare done: projects={0}",s.join(", ")),await new Fn(this.context,{task:t,projectNames:s,forceRefresh:!0}).execute(),a.length===0&&(t.start(1),t.step(1)),await new Ec(this.context,{task:n,projectNames:s}).execute();let l=await Cc(this.context,o,c);return i.finish(),bc.info("clone done: {0}",s.join(", ")),{projectNames:s,oldFiles:l}}async resolveCloneProjects(){if(this.options.projectNames&&this.options.projectNames.length===0)return[];let e=await this.getApiClient(),t=await e.getProjects(),n=this.options.projectNames??t.map(i=>i.name),o=[...new Set(n.map(i=>Tt(i)))];return Promise.all(o.map(i=>e.getFile(i)))}};var Yr=b(require("fs")),It=b(require("path"));it();$();Je();G();Ce();qt();var ii=b(require("fs")),Fv=b(require("os")),Tr=b(require("path")),Mv=require("node:util");var ua=b(require("fs")),xv=b(require("os")),xu=b(require("path"));$();Je();hu();var da=b(require("fs"));function Pv(r,e){let t={};for(let i=0;i<e.length;i++){let a=e[i];t[a]?t[a].push(i):t[a]=[i]}let o=[{buffer1index:-1,buffer2index:-1,chain:null}];for(let i=0;i<r.length;i++){let a=r[i],s=t[a]||[],c=0,l=o[0];for(let p=0;p<s.length;p++){let m=s[p],g;for(g=c;g<o.length&&!(o[g].buffer2index<m&&(g===o.length-1||o[g+1].buffer2index>m));g++);if(g<o.length){let d={buffer1index:i,buffer2index:m,chain:o[g]};if(c===o.length?o.push(l):o[c]=l,c=g+1,l=d,c===o.length)break}}o[c]=l}return o[o.length-1]}function wv(r,e){let t=Pv(r,e),n=[],o=r.length,i=e.length;for(let a=t;a!==null;a=a.chain){let s=o-a.buffer1index-1,c=i-a.buffer2index-1;o=a.buffer1index,i=a.buffer2index,(s||c)&&n.push({buffer1:[o+1,s],buffer1Content:r.slice(o+1,o+1+s),buffer2:[i+1,c],buffer2Content:e.slice(i+1,i+1+c)})}return n.reverse(),n}function Rv(r,e){let t=Pv(r,e),n=[],o=r.length,i=e.length;function a(s,c,l){let p=[];for(let m=0;m<l;m++)p.push(s[c+m]);return{offset:c,length:l,chunk:p}}for(let s=t;s!==null;s=s.chain){let c=o-s.buffer1index-1,l=i-s.buffer2index-1;o=s.buffer1index,i=s.buffer2index,(c||l)&&n.push({buffer1:a(r,s.buffer1index+1,c),buffer2:a(e,s.buffer2index+1,l)})}return n.reverse(),n}function FF(r,e,t){let n=[];function o(c,l){n.push({ab:l,oStart:c.buffer1[0],oLength:c.buffer1[1],abStart:c.buffer2[0],abLength:c.buffer2[1]})}wv(e,r).forEach(c=>o(c,"a")),wv(e,t).forEach(c=>o(c,"b")),n.sort((c,l)=>c.oStart-l.oStart);let i=[],a=0;function s(c){c>a&&(i.push({stable:!0,buffer:"o",bufferStart:a,bufferLength:c-a,bufferContent:e.slice(a,c)}),a=c)}for(;n.length;){let c=n.shift(),l=c.oStart,p=c.oStart+c.oLength,m=[c];for(s(l);n.length;){let g=n[0],d=g.oStart;if(d>p)break;p=Math.max(p,d+g.oLength),m.push(n.shift())}if(m.length===1){if(c.abLength>0){let g=c.ab==="a"?r:t;i.push({stable:!0,buffer:c.ab,bufferStart:c.abStart,bufferLength:c.abLength,bufferContent:g.slice(c.abStart,c.abStart+c.abLength)})}}else{let g={a:[r.length,-1,e.length,-1],b:[t.length,-1,e.length,-1]};for(;m.length;){c=m.shift();let P=c.oStart,u=P+c.oLength,S=c.abStart,k=S+c.abLength,R=g[c.ab];R[0]=Math.min(S,R[0]),R[1]=Math.max(k,R[1]),R[2]=Math.min(P,R[2]),R[3]=Math.max(u,R[3])}let d=g.a[0]+(l-g.a[2]),f=g.a[1]+(p-g.a[3]),y=g.b[0]+(l-g.b[2]),C=g.b[1]+(p-g.b[3]),v={stable:!1,aStart:d,aLength:f-d,aContent:r.slice(d,f),oStart:l,oLength:p-l,oContent:e.slice(l,p),bStart:y,bLength:C-y,bContent:t.slice(y,C)};i.push(v)}a=p}return s(e.length),i}function Ev(r,e,t,n){n=Object.assign({excludeFalseConflicts:!0,stringSeparator:/\s+/},n);let i=typeof r=="string",a=typeof e=="string",s=typeof t=="string";i&&(r=r.split(n.stringSeparator)),a&&(e=e.split(n.stringSeparator)),s&&(t=t.split(n.stringSeparator));let c=[],l=FF(r,e,t),p=[];function m(){p.length&&c.push({ok:p}),p=[]}function g(d,f){if(d.length!==f.length)return!1;for(let y=0;y<d.length;y++)if(d[y]!==f[y])return!1;return!0}return l.forEach(d=>{d.stable?p.push(...d.bufferContent):n.excludeFalseConflicts&&g(d.aContent,d.bContent)?p.push(...d.aContent):(m(),c.push({conflict:{a:d.aContent,aIndex:d.aStart,o:d.oContent,oIndex:d.oStart,b:d.bContent,bIndex:d.bStart}}))}),m(),c}G();To();var Tv=T("sync.three-way-merge"),MF=/\n|\r\n|\r/;function bu(r){return r.split(MF)}function DF(r){return r.includes(`\r
56
+ `,"utf-8")}toFileMutationMetadata(e){let{localContentPath:t,contentChanged:n,...o}=e;return o}toMoveFileMutationMetadata(e){let{isFolder:t,...n}=this.toFileMutationMetadata(e);return n}toFileMutationContext(e,t){return e==="/file/create"?{action:"create",path:t.path,isFolder:t.isFolder}:e==="/file/move"?{action:"move",path:t.path,targetPath:t.targetPath,isFolder:t.isFolder}:{action:"modify",path:t.path,isFolder:t.isFolder}}toFileMutationResponse(e,t){let n=e.fileInfo?this.normalizeMetaFileInfo(e.fileInfo):void 0,o=n?.path??(t.action==="move"?t.targetPath??t.path:t.path),i={path:o,success:!0,contentMutation:this.getContentMutation(e,t.action),pathMutation:this.getPathMutation(t,o)};t.action==="move"&&(i.oldPath=t.path),e.modifyTime!==void 0&&(i.modifyTime=e.modifyTime);let a=this.getMetaInfoChanged(e,t);return a!==void 0&&(i.metaInfoChanged=a),n!==void 0&&(i.metaInfo=n),i}getContentMutation(e,t){return t==="delete"?"deleted":e.created===!0?"created":e.contentChanged===!0?"modified":"none"}getPathMutation(e,t){if(e.action!=="move"||e.path===t)return"none";let n=uo.posix.dirname(e.path)!==uo.posix.dirname(t),o=uo.posix.basename(e.path)!==uo.posix.basename(t);return n&&o?"renamedAndMoved":n?"moved":"renamed"}getMetaInfoChanged(e,t){return t.action==="create"&&t.isFolder===!0&&e.created!==!0?!0:e.metaInfoChanged}createMultipartBoundary(){return"----succapp-"+Date.now().toString(36)+"-"+Math.random().toString(36).slice(2)}toRequestBody(e){return e instanceof ua.Readable||Buffer.isBuffer(e)?e:Buffer.from(e,"utf-8")}normalizeMetaFileInfo(e){return{...e,parentDir:uo.posix.dirname(e.path),name:uo.posix.basename(e.path)}}async collectFileDescendants(e,t){let n=await this.listFiles(e);t.push(...n);for(let o of n)o.isFolder&&await this.collectFileDescendants(o.path,t)}async requestJson(e,t){return this.requestRunner.addTask(async()=>{let n=await this.fetchWithAuth(e,t);return await xs(n,this.createRequestContext(e,t))})}async requestText(e,t){return this.requestRunner.addTask(async()=>await(await this.fetchWithAuth(e,t)).text())}async requestBuffer(e,t){return this.requestRunner.addTask(async()=>{let n=await this.fetchWithAuth(e,t);return Buffer.from(await n.arrayBuffer())})}async requestStream(e,t){let n=await this.requestRunner.acquire();try{let o=await this.fetchWithAuth(e,t);if(await og(o.clone(),this.createRequestContext(e,t)),!o.body)throw new mt(e);let i=ua.Readable.fromWeb(o.body);return this.releaseRequestSlotAfterStream(i,n),{response:o,stream:i}}catch(o){throw n.release(),o}}async fetchWithAuth(e,t,n=!1){await this.ensureAuthCredentialLoaded(),await this.refreshOAuthCredentialIfNeeded(!1);let o=Yp(t?.headers),i=this.authCredential?.token;i&&(o.Authorization=`Bearer ${i}`);let a=await fn(e,{...t,headers:o});if(a.status===401){if(!n&&await this.isOAuthTokenExpiredResponse(a)&&await this.refreshOAuthCredentialIfNeeded(!0))return this.fetchWithAuth(e,t,!0);throw this.handleAuthFailure(),new Oe({workspaceRoot:this.workspaceRoot,serverUrl:this.serverUrl})}return a.ok||await ro(a,e),a}createRequestContext(e,t){return{url:e,endpoint:lx(e),serverUrl:this.serverUrl,request:px(t?.body)}}createInvalidEndpointResponseError(e,t,n){return new fe("err.net.invalidResponse",{properties:{url:`${this.serverUrl}${Ht}${e}`,endpoint:e,serverUrl:this.serverUrl,reason:t,request:n}})}async ensureAuthCredentialLoaded(){if(!this.authCredential)return dr(this,"authCredential",()=>this.doEnsureAuthCredentialLoaded())}async doEnsureAuthCredentialLoaded(){let e=await lo(this.serverUrl);if(!e||!e.token&&(e.authType!=="oauth"||!e.refreshToken)){this.authCredential=null;return}if(this.rejectedAuthCredentialSignature===Ky(e)){this.authCredential=null;return}this.rejectedAuthCredentialSignature=void 0,this.authCredential=e}async refreshOAuthCredentialIfNeeded(e){let t=this.authCredential;if(!t||t.authType!=="oauth"||!t.refreshToken||!e&&!this.shouldRefreshOAuthCredential(t))return!1;try{let n=await dr(this,`oauthRefresh:${this.serverUrl}`,()=>_y(this.serverUrl,t));return this.authCredential=n,!0}catch(n){throw ux(n)&&this.handleAuthFailure(),n}}shouldRefreshOAuthCredential(e){return e.tokenExpired||!e.token?!0:Pg(e.expiresAt,cx)}async isOAuthTokenExpiredResponse(e){let t;try{t=await e.clone().text()}catch{return!1}if(!t.trim())return!1;let n;try{n=JSON.parse(t)}catch{return!1}return tt(n)==="err.oauth2.tokenExpired"}handleAuthFailure(){this.authCredential&&(this.rejectedAuthCredentialSignature=Ky(this.authCredential)),this.authCredential=null}releaseRequestSlotAfterStream(e,t){e.once("close",()=>t.release()),e.once("error",()=>t.release())}};function lx(r){try{let e=new URL(r),t=e.pathname.indexOf(Ht);return t<0?e.pathname:e.pathname.slice(t+Ht.length)||"/"}catch{return}}function px(r){if(typeof r=="string")try{let e=JSON.parse(r);return z(e)?e:void 0}catch{return}}function ux(r){return r instanceof Oe?!0:vs(r)?r.status>=400&&r.status<500:r instanceof fe&&r.errorCode==="err.login.oauthTokenInvalid"}function Ky(r){return[r.authType,r.token??"",r.refreshToken??""].join("\0")}var zr={workspace:"SUCCAPP_WORKSPACE",server:"SUCCAPP_SERVER",json:"SUCCAPP_JSON",logLevel:"SUCCAPP_LOG_LEVEL",locale:"SUCCAPP_LOCALE"},tc={lcAll:"LC_ALL",lcMessages:"LC_MESSAGES",lang:"LANG"};var xr=[{name:"workspace",alias:"C",takesValue:!0,valueHint:"path",description:"cli.opt.workspace",acceptWorkspaceTarget:!0},{name:"server",takesValue:!0,valueHint:"url",description:"cli.opt.server",acceptServerTarget:!0},{name:"json",takesValue:!1,description:"cli.opt.json"},{name:"quiet",alias:"q",takesValue:!1,description:"cli.opt.quiet"},{name:"verbose",alias:"v",takesValue:!1,description:"cli.opt.verbose"},{name:"lock-timeout",takesValue:!0,valueHint:"seconds",description:"cli.opt.lockTimeout",acceptDomains:["workspace"],acceptLockUsages:["workspace-write"],showInTopLevelHelp:!1},{name:"log-level",takesValue:!0,valueHint:"level",description:"cli.opt.logLevel"},{name:"locale",takesValue:!0,valueHint:"locale",description:"cli.opt.locale"},{name:"help",alias:"h",takesValue:!1,description:"cli.opt.help"},{name:"version",alias:"V",takesValue:!1,description:"cli.opt.version"}],Au=xr.filter(r=>r.showInTopLevelHelp!==!1);function Yy(r){return{workspace:r.value("workspace"),server:r.value("server"),json:r.has("json"),quiet:r.has("quiet"),verbose:r.has("verbose"),lockTimeout:r.value("lock-timeout"),logLevel:r.value("log-level"),locale:r.value("locale"),help:r.has("help"),version:r.has("version")}}function Gr(r,e){if(r.spec.flags.some(a=>a.name===e))return!0;let n=xr.find(a=>a.name===e);if(!n)return!1;let o=n.acceptDomains;if(o&&o.length>0&&!o.includes(r.domain)||n.acceptWorkspaceTarget&&r.workspaceTarget==="none"||n.acceptServerTarget&&r.serverTarget==="none")return!1;let i=n.acceptLockUsages;return!(i&&!i.includes(r.lockUsage??"none"))}F();U();function Xy(r,e="param"){return r.map(t=>dx(t,e))}function Qy(r){let e={};for(let t of r)e[t.key]=t.value;return e}function Ee(r){return r.startsWith("-")?r:r.length===1?`-${r}`:`--${r}`}function Xo(r){return r.startsWith("-")&&r!=="-"}function dx(r,e){let t=Ee(e),n=r.indexOf("=");if(n<=0)throw new R("err.cli.invalidKeyValue",{input:t,option:t,flag:e,value:r});let o=r.slice(0,n).trim();if(!o)throw new R("err.cli.invalidNonEmptyKeyValue",{input:t,option:t,flag:e,value:r});return{key:o,value:r.slice(n+1)}}U();F();Pt();H();var Zy=b(require("fs")),da=b(require("path"));F();H();var mx=8;async function eC(r){let e=da.resolve(r.startPath),t=new Set((r.excludedRoots??[]).map(o=>da.resolve(o))),n=r.maxDepth??mx;for(let o=0;o<=n;o++){if(!t.has(e)&&await hx(e))return e;let i=da.dirname(e);if(i===e)return;e=i}}async function hx(r){try{return(await Zy.promises.stat(nr(r))).isDirectory()}catch(e){if(x(e))return!1;throw e}}async function rc(r,e){let t=r.command,n=t?.serverTarget??e.serverTarget??"required",o=t?.spec.positionals.some(C=>C.role==="server-url")??e.explicitServerUrl!==void 0,i=t?Gr(t,"server"):!0,a=n!=="none"&&(t?t.workspaceTarget!=="none":!0),s=n!=="none",c=r.workspace;c&&a&&await c.config.ensureLoaded();let l=o?e.explicitServerUrl:void 0,p=i?r.config.server:void 0,d=a?c?.activeServerUrl:void 0,g=s?r.config.envServer:void 0,m=l??p??d??g;if(!m)throw new R("err.cli.missingInput",{inputId:"server",sourceIds:fx({positionalServerUrl:o,serverOption:i,workspaceServer:a,environmentServer:s}),commandName:r.command?.spec.name,envName:zr.server});let f=c?.config.resolveServerUrl(m);if(f!==void 0)return f;if(l!==void 0||p===void 0)return gr(m);let y=Ee("server");return gr(m,{input:y,option:y,flag:"server"})}function gr(r,e={inputId:"server"}){try{return ge(r)}catch(t){throw Qn(t,"err.net.invalidUrl")?new R("err.cli.invalidUrl",{...e,value:r,url:r},{cause:t}):t}}async function Fr(r,e){let t=r.config.server;await e.config.ensureLoaded();let n=e.activeServerUrl;if(!n)throw new R("err.cli.missingInput",{inputId:"activeServer",sourceIds:["workspaceRemoteAdd"]});if(!t)return;let o=Ee("server"),i=gr(t,{input:o,option:o,flag:"server"});if(!rt(i,n))throw new R("err.cli.serverMismatch",{input:o,option:o,value:i,expected:n,context:{target:i,active:n}})}function fx(r){let e=[];return r.positionalServerUrl&&e.push("serverPositional"),r.serverOption&&e.push("serverOption"),r.workspaceServer&&e.push("workspaceRemoteAdd"),r.environmentServer&&e.push("environmentServer"),e}async function nC(r,e){let t=r.workspace?.config.resolveServerUrl(e);return r.workspace&&t?r.workspace.requireServerClient(t):new wn(e,{workspaceRoot:r.workspace?.root})}async function oC(r){let e=r.workspace?Ou.resolve(r.cwd,r.workspace):Ou.resolve(r.cwd);r.workspace!==void 0&&await Zs(e);let t=await eC({startPath:e,excludedRoots:[gx(r.env)],maxDepth:r.maxDepth});if(!t&&r.required!==!1)throw new R("err.cli.invalidWorkspace",{inputId:"workspace",source:e});return t}async function Qo(r){try{return await yu(r)}catch(e){throw iC(r,e)}}async function nc(r){try{return await tC.promises.stat(r)}catch(e){throw iC(r,e)}}function pe(r,e){return{...r.workspace?{workspace:r.workspace.root}:{},server:e}}function gx(r=process.env){return r.HOME||r.USERPROFILE||rC.homedir()}function iC(r,e){return x(e)?new R("err.file.notFound",{path:r},{cause:e}):new R("err.cli.invalidReadableFile",{inputId:"inputFile",source:r,path:r},{cause:e})}we();var oe=class{toOptions(e){return{}}async execute(e,t){return await this.validateOptions(e,t),this.executeCommand(e,t)}validateOptions(e,t){}requireWorkspace(e){return $(e.workspace,"CLI command requires a workspace context"),e.workspace}async resolveServerUrl(e,t){return rc(e,{explicitServerUrl:t})}createServerApiClient(e,t){return nC(e,t)}},ue=class extends oe{async executeCommand(e,t){let n=this.requireWorkspace(e);return this.executeWorkspaceCommand(n,e,t)}};var aC=require("node:child_process"),sC=require("node:util"),yx=(0,sC.promisify)(aC.execFile);async function Zo(r,e){let t=Cx(r);await yx(t.command,t.args,{signal:e})}function Cx(r){return process.platform==="darwin"?{command:"open",args:[r]}:process.platform==="win32"?{command:"rundll32",args:["url.dll,FileProtocolHandler",r]}:{command:"xdg-open",args:[r]}}F();U();D();F();async function Ir(){let r=process.stdin,e=[];for await(let t of r)e.push(Sx(t));return Buffer.concat(e).toString("utf8")}async function cC(r=""){let e=process.stdin,t=process.stderr,n=e.isRaw===!0;return r&&t.write(r),e.isTTY&&e.setRawMode(!0),e.resume(),new Promise((o,i)=>{let a="",s=!1,c=f=>{for(let y of vx(f)){if(s)break;switch(y){case"\r":case`
57
+ `:case"":g(a,o);break;case"":m(new tr,i);break;case"\b":case"\x7F":a=a.slice(0,-1);break;default:a+=y}}},l=f=>{m(f,i)},p=()=>{g(a,o)},d=()=>{e.off("data",c),e.off("error",l),e.off("end",p),e.off("close",p),e.isTTY&&e.setRawMode(n),e.pause(),t.write(`
58
+ `)},g=(f,y)=>{s||(s=!0,d(),y(f))},m=(f,y)=>{s||(s=!0,d(),y(f))};e.on("data",c),e.on("error",l),e.on("end",p),e.on("close",p)})}function Sx(r){return typeof r=="string"?Buffer.from(r):Buffer.isBuffer(r)?r:Buffer.from(r)}function vx(r){return typeof r=="string"?r:Buffer.isBuffer(r)?r.toString("utf8"):r instanceof Uint8Array?Buffer.from(r).toString("utf8"):String(r??"")}var _u=class extends oe{readStdin;constructor(e=Ir){super(),this.readStdin=e}toOptions(e){let t=e.has("oauth"),n=e.has("pat");return{serverUrl:e.positional[0],mode:n?"pat":"oauth",oauthRequested:t,patRequested:n}}validateOptions(e,t){if(t.oauthRequested&&t.patRequested)throw new R("err.cli.conflictingInputs",{inputs:["oauth","pat"]})}async executeCommand(e,t){let n=await this.resolveServerUrl(e,t.serverUrl);if(t.mode==="oauth"){let a=await wg(n,{openExternal:c=>Zo(c,e.abortSignal),abortSignal:e.abortSignal,onProgress:c=>wx(e,c)}),s=await Tu(n,a);return lC(e,n,s),0}let o=await kx(this.readStdin),i=await Tu(n,{type:"pat",token:o});return lC(e,n,i),0}},pC={path:["auth","login"],domain:"auth",spec:{name:"auth login",flags:[{name:"oauth",takesValue:!1},{name:"pat",takesValue:!1}],positionals:[{name:"url",role:"server-url"}],usageArgs:"[<options>] [<url>]",examples:["succapp auth login http://localhost:8080","succapp auth login --pat http://localhost:8080",'printf "%s" "$PAT" | succapp auth login --pat http://localhost:8080']},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new _u};async function kx(r){let e=!!process.stdin.isTTY,t=(e?await cC(u("cli.cmd.auth.login.patPrompt")):await r()).trim();if(!t)throw new R("err.cli.missingInput",{inputId:"token",sources:e?void 0:["stdin"]});return t}function lC(r,e,t){let n={server:e,loggedIn:!0,authType:t.authType,stored:!0,username:t.username,userId:t.userId,token:!!t.token};t.refreshToken!==void 0&&(n.refreshToken=!0),t.expiresAt!==void 0&&(n.expiresAt=t.expiresAt);let o=t.username||t.userId;r.output.result(n,()=>o?u("cli.cmd.auth.login.loggedInAs",e,o):u("cli.cmd.auth.login.loggedIn",e))}function wx(r,e){switch(e.stage){case"openingBrowser":r.output.progress({stage:e.stage},()=>u("cli.cmd.auth.login.openingBrowser"));return;case"manualAuthorizationUrl":r.output.info(u("cli.cmd.auth.login.oauthManualUrl",e.authorizationUrl??""));return;case"waitingForCallback":r.output.progress({stage:e.stage},()=>u("cli.cmd.auth.login.waitingForCallback"));return;case"exchangingToken":r.output.progress({stage:e.stage},()=>u("cli.cmd.auth.login.exchangingToken"));return}}D();F();U();var Lu=class extends oe{toOptions(e){return{serverUrl:e.positional[0],all:e.has("all")}}validateOptions(e,t){if(t.all&&t.serverUrl)throw new R("err.cli.conflictingInputs",{inputs:["<url>","--all"]})}async executeCommand(e,t){if(t.all){let a=await xu();return e.output.result({all:a.all,removed:a.removed},()=>u("cli.cmd.auth.logout.removedAllAuth",a.removed)),0}let n=await this.resolveServerUrl(e,t.serverUrl),o=await xu(n),i=o.removed>0;return e.output.result({server:o.serverUrl??n,removed:i},()=>i?u("cli.cmd.auth.logout.removedAuth",n):u("cli.cmd.auth.logout.storedAuth",n)),0}},uC={path:["auth","logout"],domain:"auth",spec:{name:"auth logout",flags:[{name:"all",takesValue:!1}],positionals:[{name:"url",role:"server-url"}],usageArgs:"[<options>] [<url>]",examples:["succapp auth logout","succapp auth logout https://bi.example.com","succapp auth logout --all"]},workspaceTarget:"optional",serverTarget:"optional",createExecutor:()=>new Lu};D();var Nu=class extends oe{toOptions(e){return{serverUrl:e.positional[0]}}async executeCommand(e,t){let n=await this.resolveServerUrl(e,t.serverUrl),o=await lo(n),i={server:n,...Px(o)};return e.output.result(i,()=>Rx(i)),0}},dC={path:["auth","status"],domain:"auth",spec:{name:"auth status",flags:[],positionals:[{name:"url",role:"server-url"}],usageArgs:"[<options>] [<url>]",examples:["succapp auth status","succapp --server=https://bi.example.com auth status"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Nu};function Px(r){return{storedAuth:r!==void 0,authType:r?.authType,username:r?.username,userId:r?.userId,token:!!r?.token,refreshToken:!!r?.refreshToken,expiresAt:r?.expiresAt,lastLoginAt:r?.lastLoginAt,updatedAt:r?.updatedAt}}function Rx(r){return u(r.storedAuth===!1?"cli.cmd.auth.status.noStoredOutput":"cli.cmd.auth.status.output",Ex(r))}function Ex(r){let e={};for(let[t,n]of Object.entries(r))e[t]=n===void 0?"":String(n);return e}var mC=[pC,uC,dC];D();te();H();F();U();var Wu=b(require("fs")),fC=b(require("path")),Pn="file",ri="input",ni="mode",Uu="dry-run",ju="output",At="force",ha="config",oi="test",gt="timeout",Bu="catalog",Ot="schema",Vu="table-name-contains",En="max-rows",ei="query",ti="query-file",bn=30,xe=class extends oe{async executeCommand(e,t){let n=await this.prepareDbCommand(e,t),o=await this.resolveServerUrl(e),i=await this.createServerApiClient(e,o);return this.executeDbCommand(e,o,i,n)}prepareDbCommand(e,t){return Promise.resolve(t)}readDbInputTextFile(e,t){return Qo(Rt(e.cwd,t))}readDbStdinText(){return Ir()}isDbStdinInteractive(){return process.stdin.isTTY}async readDbSqlFromSource(e,t){return Lx(t,{hasInteractiveStdin:()=>this.isDbStdinInteractive(),readFileText:n=>this.readDbInputTextFile(e,n),readStdin:()=>this.readDbStdinText()})}readDbImportContent(e,t){if(t.type==="file")return this.readDbInputTextFile(e,t.file);if(this.isDbStdinInteractive())throw new R("err.cli.missingInput",{inputId:"inputFile",sources:[`--${ri}=<csv-file>`,"stdin"]});return this.readDbStdinText()}},Rn=class extends xe{async readConfig(e,t){let n=t.type==="file"?await this.readDbInputTextFile(e,t.file):await this.readConfigFromStdin();return Nx(n,t.type==="file"?t.file:"stdin")}async readConfigFromStdin(){if(this.isDbStdinInteractive())throw new R("err.cli.missingInput",{inputId:"dataSourceConfig",sources:[`--${ha}=<json-file>`,"stdin"]});return this.readDbStdinText()}};function ii(r){return[{name:ha,takesValue:!0,valueHint:"json-file|-"},...r]}function gC(r){return O({name:r.name,desc:r.desc,defaultSchema:r.defaultSchema,defaultCatalog:r.defaultCatalog,readonly:r.readonly})}function oc(r){return O({schema:r.schema,tableName:r.tableName,tableType:r.tableType,tableComment:r.tableComment})}function yC(r){return O({name:r.name,primaryKey:r.primaryKey,unique:r.unique,dataType:r.dataType,dbType:r.dbType,length:r.length,scale:r.scale,defaultValue:r.defaultValue,autoInc:r.autoInc,nullable:r.nullable,comment:r.comment})}function CC(r){return O({elapsedMs:r.elapsedMs,fields:r.fields,data:r.data,rowCount:r.rowCount,maxRows:r.maxRows,truncated:r.truncated})}function SC(r){return O({dataSource:r.dataSource,resultType:r.resultType,force:r.force,updateCount:r.updateCount,results:r.results,sqlInfos:r.sqlInfos?.map(bx),fields:r.fields,data:r.data,columns:r.columns,rowCount:r.rowCount,maxRows:r.maxRows,truncated:r.truncated,elapsedMs:r.elapsedMs,timeoutMs:r.timeoutMs})}function vC(r){return O({dataSource:r.dataSource,schema:r.schema,tableName:r.tableName,mode:r.mode,dryRun:r.dryRun,importedRows:r.importedRows,skippedRows:r.skippedRows,elapsedMs:r.elapsedMs,timeoutMs:r.timeoutMs})}function bx(r){return O({datasource:r.datasource,schema:r.schema,sql:r.sql,sqlType:r.sqlType,tableName:r.tableName,dataMutation:r.dataMutation,schemaMutation:r.schemaMutation,manipulateAllRows:r.manipulateAllRows,dangerous:r.dangerous})}function Tn(r){let e=r;return O({result:r.result,dataSource:r.dataSource,originalDataSource:e.originalDataSource,config:e.config?ic(e.config):void 0})}function ic(r){let e=O({...r});return delete e.password,e}function kC(r){return{columns:[u("cli.cmd.db.dataSource"),u("cli.out.header.description"),u("cli.cmd.db.defaultSchema"),u("cli.cmd.db.readonly")],rows:r.map(e=>[e.name??"",e.desc??"",e.defaultSchema??e.defaultCatalog??"",e.readonly===void 0?"":u(e.readonly?"cli.out.value.yes":"cli.out.value.no")])}}function wC(r){let e=ic(r);return{columns:[u("cli.out.header.field"),u("cli.out.header.value")],rows:Object.keys(e).sort().map(t=>[t,xC(e[t])])}}function PC(r){return{columns:[u("cli.out.header.schema"),u("cli.out.header.table"),u("cli.out.header.type"),u("cli.out.header.comment")],rows:r.map(e=>[e.schema??"",e.tableName,e.tableType??"",e.tableComment??""])}}function RC(r){let e=r.table.columns??[],t=Fx(r.table);return{columns:[u("cli.out.header.field"),u("cli.out.header.type"),u("cli.out.header.null"),u("cli.out.header.key"),u("cli.out.header.default"),u("cli.out.header.extra"),u("cli.out.header.comment")],rows:e.map(n=>[n.name,Tx(n),Mx(n),xx(n,t),Ax(n),Ox(n),n.comment??""])}}function Tx(r){let e=r.dbType??r.dataType??"";return!e||r.length===void 0||r.length<=0||e.includes("(")?e:r.scale!==void 0&&r.scale>0?`${e}(${r.length},${r.scale})`:`${e}(${r.length})`}function Mx(r){return r.nullable===void 0?"":r.nullable?"YES":"NO"}function xx(r,e){return r.primaryKey?"PRI":r.unique?"UNI":e.get(qu(r.name))??""}function Fx(r){let e=new Map;for(let t of r.primaryKeys??[])e.set(qu(t),"PRI");for(let t of r.indexes??[]){let n=t.primaryKey?"PRI":t.unique?"UNI":"MUL";for(let o of Ix(t.parts))Dx(e,o,n)}return e}function Ix(r){if(!r)return[];let e=[];for(let t of r)typeof t=="string"?e.push(t):t.column&&e.push(t.column);return e}function Dx(r,e,t){let n=qu(e),o=r.get(n);o==="PRI"||o==="UNI"&&t==="MUL"||r.set(n,t)}function qu(r){return r.toLowerCase()}function Ax(r){return r.defaultValue===void 0?"":r.defaultValue??"NULL"}function Ox(r){return r.autoInc?"auto_increment":""}function EC(r){return _x(r)?TC(r.fields,r.data):typeof r.updateCount=="number"?u("cli.cmd.db.sqlUpdateCount",String(r.updateCount)):u("cli.cmd.db.sqlExecutedSuccess")}function bC(r){return TC(r.fields,r.data)}function TC(r,e){return r.length?{columns:r,rows:e.map(t=>t.map(xC))}:u("cli.cmd.db.sqlExecutedSuccess")}function MC(r){let e=r.skippedRows===void 0?"":u("cli.cmd.db.skipped",String(r.skippedRows)),t=r.dryRun?u("cli.cmd.db.dryImport"):u("cli.cmd.db.imported");return u("cli.cmd.db.rowsModeDry",t,String(r.importedRows),r.tableName,e,r.mode,String(r.dryRun))}function _x(r){return Array.isArray(r.fields)&&Array.isArray(r.data)}function xC(r){return r==null?"":typeof r=="string"?r:typeof r=="number"||typeof r=="boolean"?String(r):JSON.stringify(r)}function ac(r,e){let t=r.value(Pn);if(e&&t)throw new R("err.cli.conflictingInputs",{inputs:["<sql>",`--${Pn}=<sql-file>`]});return t?{type:"file",file:t}:e?{type:"argument",sql:e}:{type:"stdin"}}function FC(r){let e=r.positional[1],t=hC(r,ei),n=hC(r,ti);if(t!==void 0&&n!==void 0)throw new R("err.cli.conflictingInputs",{inputs:[`--${ei}=<sql>`,`--${ti}=<sql-file>`]});if(e!==void 0&&(t!==void 0||n!==void 0))throw new R("err.cli.conflictingInputs",{inputs:["<table>",`--${ei}`,`--${ti}`]});if(t!==void 0)return{type:"query",sqlSource:{type:"argument",sql:t}};if(n!==void 0)return{type:"query",sqlSource:{type:"file",file:n}};if(e===void 0)throw new R("err.cli.missingInput",{inputId:"exportTarget",sources:["<table>",`--${ei}=<sql>`,`--${ti}=<sql-file>`]});let o=fa(r,e);return{type:"table",schema:o.schema,tableName:o.tableName}}function IC(r){let e=r.value(ri);if(!e)throw new R("err.cli.missingInput",{inputId:"inputFile",sources:[`--${ri}=<csv-file>`,`--${ri}=-`]});return e==="-"?{type:"stdin"}:{type:"file",file:e}}async function Lx(r,e){if(r.type==="argument")return r.sql;if(r.type==="file")return e.readFileText(r.file);if(e.hasInteractiveStdin())throw new R("err.cli.missingInput",{inputId:"sql",sources:["<sql>",`--${Pn}=<sql-file>`,"stdin"]});let t=await e.readStdin();if(!Ve(t))throw new R("err.cli.missingInput",{inputId:"sql",sources:["<sql>",`--${Pn}=<sql-file>`,"stdin"]});return t}function ai(r){let e=r.value(ha);if(!e)throw new R("err.cli.missingInput",{inputId:"dataSourceConfig",sources:[`--${ha}=<json-file>`,`--${ha}=-`]});return e==="-"?{type:"stdin"}:{type:"file",file:e}}function Nx(r,e){let t;try{t=JSON.parse(r)}catch(n){throw new R("err.cli.invalidJsonObject",{inputId:"dataSourceConfig",source:e},{cause:n})}if(!z(t))throw new R("err.cli.invalidJsonObject",{inputId:"dataSourceConfig",source:e});return t}async function DC(r,e,t){await Wu.promises.mkdir(fC.dirname(r),{recursive:!0});try{await Wu.promises.writeFile(r,e,{flag:t?"w":"wx"})}catch(n){throw!t&&Ux(n)?new R("err.cli.confirmationRequired",{reason:"outputOverwrite",flag:`--${At}`,path:r},{cause:n}):n}}function Wx(r){let e=r.lastIndexOf(".");return e<=0||e===r.length-1?{tableName:r}:{schema:r.slice(0,e),tableName:r.slice(e+1)}}function fa(r,e){let t=r.value(Ot);return t!==void 0?{schema:t,tableName:e}:Wx(e)}function Mn(r,e,t){if(r===void 0)return t;let n=Number(r);if(!Number.isInteger(n)||n<=0){let o=Ee(e);throw new R("err.cli.invalidPositiveInteger",{input:o,option:o,flag:e,value:r})}return n}function sc(r,e){if(r===void 0)return;let t=Number(r);if(!Number.isInteger(t)||t<0){let n=Ee(e);throw new R("err.cli.invalidNonNegativeInteger",{input:n,option:n,flag:e,value:r})}return t}function AC(r){if(r===void 0)return"append";if(r==="append"||r==="truncate"||r==="replace")return r;throw new R("err.cli.invalidChoice",{input:`--${ni}`,option:`--${ni}`,flag:ni,value:r,allowedValues:["append","truncate","replace"]})}function Ux(r){return typeof r=="object"&&r!==null&&"code"in r&&r.code==="EEXIST"}function hC(r,e){let t=r.value(e);return t===void 0||t.trim()===""?void 0:t}U();F();var $u=class extends xe{toOptions(e){return{dataSource:e.positional[0],schema:e.value(Ot),sqlSource:ac(e,e.positional[1]),timeoutSeconds:Mn(e.value(gt),gt,bn),maxRows:sc(e.value(En),En),force:e.has(At)}}async prepareDbCommand(e,t){return{...t,sqlSource:{type:"argument",sql:await this.readDbSqlFromSource(e,t.sqlSource)}}}async executeDbCommand(e,t,n,o){let i=await this.readDbSqlFromSource(e,o.sqlSource),a=await this.executeAnySql(n,{dataSource:o.dataSource,schema:o.schema,sql:i,timeoutMs:o.timeoutSeconds*1e3,maxRows:o.maxRows,force:o.force});return e.output.result({...pe(e,t),dataSource:o.dataSource,...o.schema!==void 0?{schema:o.schema}:{},timeoutSeconds:o.timeoutSeconds,...o.maxRows!==void 0?{maxRows:o.maxRows}:{},...o.force?{force:!0}:{},...SC(a)},()=>EC(a)),0}async executeAnySql(e,t){try{return await e.executeDbAny({dataSource:t.dataSource,...t.schema!==void 0?{schema:t.schema}:{},sql:t.sql,timeoutMs:t.timeoutMs,...t.maxRows!==void 0?{maxRows:t.maxRows}:{},...t.force?{force:!0}:{}})}catch(n){throw Qn(n,"err.sql.forceRequired")?new R("err.cli.confirmationRequired",{reason:"dbSqlMutation",flag:`--${At}`,sqlInfos:n.properties.sqlInfos,context:{forceRequired:!0}},{cause:n}):n}}},OC={path:["db","exec"],domain:"db",spec:{name:"db exec",flags:[{name:Pn,takesValue:!0,valueHint:"sql-file"},{name:Ot,takesValue:!0,valueHint:"schema"},{name:gt,takesValue:!0,valueHint:"seconds"},{name:En,takesValue:!0,valueHint:"n"},{name:At,takesValue:!1}],positionals:[{name:"datasource",required:!0},{name:"sql"}],usageArgs:"[<options>] <datasource> [<sql>]",examples:['succapp db exec default "update orders set status = 1 where id = 42"',"succapp db exec default --file=./change.sql --max-rows=10",'succapp db exec default "create table TEMP_ORDERS (ID int)" --force']},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new $u};D();H();var Hu=class extends xe{toOptions(e){return{dataSource:e.positional[0],schema:e.value(Ot),target:FC(e),timeoutSeconds:Mn(e.value(gt),gt,bn),output:e.value(ju),force:e.has(At)}}async prepareDbCommand(e,t){return t.target.type!=="query"?t:{...t,target:{...t.target,sqlSource:{type:"argument",sql:await this.readDbSqlFromSource(e,t.target.sqlSource)}}}}async executeDbCommand(e,t,n,o){let i=o.target.type==="table"?{tableName:o.target.tableName}:{query:!0},a=o.target.type==="table"?await n.exportDbTableData({dataSource:o.dataSource,...o.target.schema!==void 0?{schema:o.target.schema}:{},tableName:o.target.tableName,timeoutMs:o.timeoutSeconds*1e3}):await n.exportDbQueryData({dataSource:o.dataSource,...o.schema!==void 0?{schema:o.schema}:{},sql:await this.readDbSqlFromSource(e,o.target.sqlSource),timeoutMs:o.timeoutSeconds*1e3}),s={...pe(e,t),dataSource:o.dataSource,...o.target.type==="table"&&o.target.schema!==void 0?{schema:o.target.schema}:{},...o.target.type==="query"&&o.schema!==void 0?{schema:o.schema}:{},...i,timeoutSeconds:o.timeoutSeconds,size:a.length};if(o.output){let c=Rt(e.cwd,o.output);return await DC(c,a,o.force),e.output.result({...s,output:c},()=>u("cli.cmd.db.export.exportedData",c)),0}return e.output.content(s,a),0}},_C={path:["db","export"],domain:"db",spec:{name:"db export",flags:[{name:ei,takesValue:!0,valueHint:"sql"},{name:ti,takesValue:!0,valueHint:"sql-file"},{name:Ot,takesValue:!0,valueHint:"schema"},{name:gt,takesValue:!0,valueHint:"seconds"},{name:ju,takesValue:!0,valueHint:"csv-file"},{name:At,takesValue:!1}],positionals:[{name:"datasource",required:!0},{name:"table"}],usageArgs:"[<options>] <datasource> [<table>]",examples:["succapp db export default orders --output=orders.csv","succapp db export default --query-file=./query.sql"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Hu};var zu=class extends xe{toOptions(e){let t=fa(e,e.positional[1]);return{dataSource:e.positional[0],schema:t.schema,tableName:t.tableName,inputSource:IC(e),mode:AC(e.value(ni)),dryRun:e.has(Uu),timeoutSeconds:Mn(e.value(gt),gt,bn)}}async executeDbCommand(e,t,n,o){let i=await this.readDbImportContent(e,o.inputSource),a=await n.importDbTableData({dataSource:o.dataSource,...o.schema!==void 0?{schema:o.schema}:{},tableName:o.tableName,content:i,format:"csv",mode:o.mode,dryRun:o.dryRun,timeoutMs:o.timeoutSeconds*1e3}),s={...a,mode:a.mode??o.mode,dryRun:a.dryRun??o.dryRun};return e.output.result({...pe(e,t),...vC(s),timeoutSeconds:o.timeoutSeconds},()=>MC(s)),0}},LC={path:["db","import"],domain:"db",spec:{name:"db import",flags:[{name:ri,takesValue:!0,valueHint:"csv-file|-"},{name:ni,takesValue:!0,valueHint:"append|truncate|replace"},{name:Uu,takesValue:!1},{name:Ot,takesValue:!0,valueHint:"schema"},{name:gt,takesValue:!0,valueHint:"seconds"}],positionals:[{name:"datasource",required:!0},{name:"table",required:!0}],usageArgs:"[<options>] <datasource> <table>",examples:["succapp db import default orders --input=./orders.csv","succapp db import default public.orders --input=./orders.csv --mode=truncate --dry-run","cat orders.csv | succapp db import default public.orders --input=- --mode=append"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new zu};U();F();var Gu=class extends xe{toOptions(e){return{dataSource:e.positional[0],schema:e.value(Ot),sqlSource:ac(e,e.positional[1]),timeoutSeconds:Mn(e.value(gt),gt,bn),maxRows:sc(e.value(En),En)}}async prepareDbCommand(e,t){return{...t,sqlSource:{type:"argument",sql:await this.readDbSqlFromSource(e,t.sqlSource)}}}async executeDbCommand(e,t,n,o){let i=await this.readDbSqlFromSource(e,o.sqlSource),a=await this.executeQuerySql(n,{dataSource:o.dataSource,...o.schema!==void 0?{schema:o.schema}:{},sql:i,timeoutMs:o.timeoutSeconds*1e3,...o.maxRows!==void 0?{maxRows:o.maxRows}:{}});return e.output.result({...pe(e,t),dataSource:o.dataSource,...o.schema!==void 0?{schema:o.schema}:{},readOnly:!0,timeoutSeconds:o.timeoutSeconds,...o.maxRows!==void 0?{maxRows:o.maxRows}:{},...CC(a)},()=>bC(a)),0}async executeQuerySql(e,t){try{return await e.executeDbQuery(t)}catch(n){throw Qn(n,"err.db.nonReadOnlySql")?new R("err.cli.confirmationRequired",{reason:"dbQueryWriteSql",flag:`--${At}`,context:{backendErrorCode:"err.db.nonReadOnlySql"}},{cause:n}):n}}},NC={path:["db","query"],domain:"db",spec:{name:"db query",flags:[{name:Pn,takesValue:!0,valueHint:"sql-file"},{name:Ot,takesValue:!0,valueHint:"schema"},{name:gt,takesValue:!0,valueHint:"seconds"},{name:En,takesValue:!0,valueHint:"n"}],positionals:[{name:"datasource",required:!0},{name:"sql"}],usageArgs:"[<options>] <datasource> [<sql>]",examples:['succapp db query default "select * from orders"',"succapp db query default --file=./query.sql --schema=PUBLIC --timeout=10 --max-rows=100"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Gu};D();te();var Ku=class extends xe{toOptions(e){return{dataSource:e.positional[0],catalog:e.value(Bu)}}async executeDbCommand(e,t,n,o){let i=await n.listDbSchemas(o.dataSource,{...o.catalog!==void 0?{catalog:o.catalog}:{}});return e.output.result({...pe(e,t),dataSource:o.dataSource,...o.catalog!==void 0?{catalog:o.catalog}:{},schemas:i.map(a=>O({...a}))},()=>({columns:[u("cli.out.header.schema"),u("cli.cmd.db.schema.list.catalog")],rows:i.map(a=>[a.name,a.catalog??""])})),0}},WC={path:["db","schema","list"],domain:"db",spec:{name:"db schema list",flags:[{name:Bu,takesValue:!0,valueHint:"catalog"}],positionals:[{name:"datasource",required:!0}],usageArgs:"[<options>] <datasource>",examples:["succapp db schema list default","succapp db schema list default --catalog=PUBLIC"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Ku};D();var Ju=class extends Rn{toOptions(e){return{configSource:ai(e),testBeforeSave:e.has(oi)}}async executeDbCommand(e,t,n,o){let i=await this.readConfig(e,o.configSource),a=await n.createDataSource({config:i,testBeforeSave:o.testBeforeSave});return e.output.result({...pe(e,t),...Tn(a)},()=>u("cli.cmd.db.source.create.created",a.dataSource??i.name??"")),0}},UC={path:["db","source","create"],domain:"db",spec:{name:"db source create",flags:ii([{name:oi,takesValue:!1}]),positionals:[],usageArgs:"[<options>]",examples:["succapp db source create --config=./datasource.json --test"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Ju};var Yu=class extends xe{async executeDbCommand(e,t,n){let o=await n.getDataSources();return e.output.result({...pe(e,t),dataSources:o.map(gC)},()=>kC(o)),0}},jC={path:["db","source","list"],domain:"db",spec:{name:"db source list",flags:[],positionals:[],usageArgs:"[<options>]",examples:["succapp db source list","succapp --server=http://localhost:8180 db source list --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Yu};D();F();U();var Xu=class extends xe{toOptions(e){return{dataSource:e.positional[0],force:e.has(At)}}validateOptions(e,t){if(!t.force)throw new R("err.cli.confirmationRequired",{reason:"dbSourceDelete",flag:`--${At}`,inputId:"dataSourceConfig"})}async executeDbCommand(e,t,n,o){let i=await n.deleteDataSource({dataSource:o.dataSource});return e.output.result({...pe(e,t),...Tn(i)},()=>u("cli.cmd.db.source.remove.deleted",i.dataSource??o.dataSource)),0}},BC={path:["db","source","remove"],domain:"db",spec:{name:"db source remove",flags:[{name:At,takesValue:!1}],positionals:[{name:"datasource",required:!0}],usageArgs:"[<options>] <datasource>",examples:["succapp db source remove oldDs --force"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Xu};var Qu=class extends xe{toOptions(e){return{dataSource:e.positional[0]}}async executeDbCommand(e,t,n,o){let i=await n.getDataSourceConfig(o.dataSource);return e.output.result({...pe(e,t),dataSource:o.dataSource,config:ic(i)},()=>wC(i)),0}},VC={path:["db","source","show"],domain:"db",spec:{name:"db source show",flags:[],positionals:[{name:"datasource",required:!0}],usageArgs:"[<options>] <datasource>",examples:["succapp db source show default"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Qu};D();var Zu=class extends Rn{toOptions(e){return{configSource:ai(e)}}async executeDbCommand(e,t,n,o){let i=await this.readConfig(e,o.configSource),a=await n.testDataSource({config:i});return e.output.result({...pe(e,t),...Tn(a)},()=>u("cli.cmd.db.source.test.testOk",a.dataSource??i.name??"")),0}},qC={path:["db","source","test"],domain:"db",spec:{name:"db source test",flags:ii([]),positionals:[],usageArgs:"[<options>]",examples:["succapp db source test --config=./datasource.json","cat datasource.json | succapp db source test --config=-"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Zu};D();var ed=class extends Rn{toOptions(e){return{dataSource:e.positional[0],configSource:ai(e),testBeforeSave:e.has(oi)}}async executeDbCommand(e,t,n,o){let i=await this.readConfig(e,o.configSource),a=await n.updateDataSource({dataSource:o.dataSource,config:i,testBeforeSave:o.testBeforeSave});return e.output.result({...pe(e,t),...Tn(a)},()=>u("cli.cmd.db.source.update.updated",a.dataSource??i.name??o.dataSource)),0}},$C={path:["db","source","update"],domain:"db",spec:{name:"db source update",flags:ii([{name:oi,takesValue:!1}]),positionals:[{name:"datasource",required:!0}],usageArgs:"[<options>] <datasource>",examples:["succapp db source update oldDs --config=./datasource.json --test"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new ed};var td=class extends xe{toOptions(e){let t=fa(e,e.positional[1]);return{dataSource:e.positional[0],schema:t.schema,tableName:t.tableName}}async executeDbCommand(e,t,n,o){let i=await n.describeDbTable(o.dataSource,o.tableName,{...o.schema!==void 0?{schema:o.schema}:{}});return e.output.result({...pe(e,t),dataSource:o.dataSource,table:oc(i.table),columns:i.table.columns?.map(yC)??[]},()=>RC(i)),0}},HC={path:["db","table","describe"],domain:"db",spec:{name:"db table describe",flags:[{name:Ot,takesValue:!0,valueHint:"schema"}],positionals:[{name:"datasource",required:!0},{name:"table",required:!0}],usageArgs:"[<options>] <datasource> <table>",examples:["succapp db table describe default orders","succapp db table describe default public.orders"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new td};var rd=class extends xe{toOptions(e){return{dataSource:e.positional[0],schema:e.positional[1],tableNameContains:e.value(Vu)}}async executeDbCommand(e,t,n,o){let i=await n.listDbTables(o.dataSource,{...o.schema!==void 0?{schema:o.schema}:{},...o.tableNameContains!==void 0?{tableNameContains:o.tableNameContains}:{}});return e.output.result({...pe(e,t),dataSource:o.dataSource,...o.schema!==void 0?{schema:o.schema}:{},...o.tableNameContains!==void 0?{tableNameContains:o.tableNameContains}:{},tables:i.map(oc)},()=>PC(i)),0}},zC={path:["db","table","list"],domain:"db",spec:{name:"db table list",flags:[{name:Vu,takesValue:!0,valueHint:"text"}],positionals:[{name:"datasource",required:!0},{name:"schema"}],usageArgs:"[<options>] <datasource> [<schema>]",examples:["succapp db table list default","succapp db table list default PUBLIC --table-name-contains=order"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new rd};var GC=[jC,VC,qC,UC,$C,BC,WC,zC,HC,NC,OC,LC,_C];var Bx=2,nd=class{constructor(e,t={}){this.model=e;this.columnGap=Vx(t.columnGap)}columnGap;columnWidths;render(){return this.model.columns.length===0?"":(this.columnWidths=this.calculateColumnWidths(),[this.renderRow(this.model.columns),...this.model.rows.map(t=>this.renderRow(t))].join(`
59
+ `))}calculateColumnWidths(){return this.model.columns.map((e,t)=>{let n=this.model.rows.map(o=>Er(this.getCellText(o,t)));return Math.max(Er(e),...n)})}renderRow(e){return this.getColumnWidths().map((t,n)=>this.padCell(this.getCellText(e,n),t)).join(this.getColumnSeparator()).trimEnd()}padCell(e,t){return Lo(e,t)}getCellText(e,t){return e[t]??""}getColumnSeparator(){return" ".repeat(this.columnGap)}getColumnWidths(){return this.columnWidths===void 0&&(this.columnWidths=this.calculateColumnWidths()),this.columnWidths}};function de(r,e){return new nd(r,e).render()}function Vx(r){return r===void 0||!Number.isFinite(r)?Bx:Math.max(0,Math.floor(r))}D();F();U();te();var id=["product","sys","metadata","inspect","jvm","env"],KC=[...id,"all"],qx=["product","metadata"],$x=["sys","inspect","jvm","env"],od=class extends oe{toOptions(e){let t=Hx(e.values("scope"));return{url:e.positional[0],scopes:t.scopes,all:e.has("all")||t.all,raw:e.has("raw")}}async executeCommand(e,t){let n=await this.resolveServerUrl(e,t.url),o=await this.createServerApiClient(e,n),i=Gx(t)?await o.getServerDetailInfo():await o.getServerInfo();return e.output.result({...e.workspace?{workspace:e.workspace.root}:{},server:n,info:Kx(i,t)},()=>Jx(n,i,t)),0}},JC={path:["server","info"],domain:"server",spec:{name:"server info",flags:[{name:"scope",takesValue:!0,repeatable:!0,valueHint:"name"},{name:"all",takesValue:!1},{name:"raw",takesValue:!1}],positionals:[{name:"url",role:"server-url"}],usageArgs:"[<options>] [<url>]",examples:["succapp server info","succapp --server=https://bi.example.com server info","succapp server info --scope=env,jvm","succapp server info --scope=all","succapp server info http://localhost:8180 --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new od};function Hx(r){let e=[],t=!1;for(let n of r)for(let o of zx(n)){if(o==="all"){t=!0;continue}if(id.includes(o)){e.includes(o)||e.push(o);continue}throw new R("err.cli.invalidChoice",{input:"--scope",option:"--scope",value:o,allowedValues:KC})}return{scopes:e,all:t}}function zx(r){let e=r.split(",").map(t=>t.trim());for(let t of e)if(!(t.length>0))throw new R("err.cli.invalidChoice",{input:"--scope",option:"--scope",value:t,allowedValues:KC});return e}function YC(r){return r.all?id:r.scopes.length>0?r.scopes:qx}function Gx(r){return r.raw||r.all||r.scopes.some(e=>$x.includes(e))}function Kx(r,e){if(e.raw)return O(r);let t=YC(e);return O({productType:r.productType,version:r.version,devToolApiVersion:r.devToolApiVersion,scopes:t,productInfo:t.includes("product")?sd(r):void 0,sysInfo:t.includes("sys")?XC(r):void 0,metadataVersions:t.includes("metadata")?r.metadataVersions:void 0,sysInspectInfo:t.includes("inspect")?si(r,"sysInspectInfo"):void 0,jvmInfo:t.includes("jvm")?si(r,"jvmInfo"):void 0,systemEnvirInfo:t.includes("env")?si(r,"systemEnvirInfo"):void 0})}function Jx(r,e,t){if(t.raw)return JSON.stringify(e,null,2);let n=[de(Yx(r,e))];for(let o of YC(t)){let i=Xx(o,e);i&&n.push("",i)}return n.join(`
60
+ `)}function Yx(r,e){return{columns:[u("cli.out.header.field"),u("cli.out.header.value")],rows:[[u("cli.out.common.server"),r],[u("cli.out.common.product"),e.productType??""],[u("cli.out.header.version"),e.version??rF(sd(e),"productVersion")??""],[u("cli.out.common.api"),e.devToolApiVersion??""]]}}function Xx(r,e){switch(r){case"product":return cc(u("cli.out.common.productInfo"),sd(e));case"sys":return Qx(XC(e));case"metadata":return Zx(e.metadataVersions);case"inspect":return cc(u("cli.out.common.sysInspectInfo"),si(e,"sysInspectInfo"));case"jvm":return cc(u("cli.out.common.jvmInfo"),si(e,"jvmInfo"));case"env":return cc(u("cli.out.common.systemEnvirInfo"),si(e,"systemEnvirInfo"));default:return""}}function cc(r,e){return!e||Object.keys(e).length===0?"":[r,de({columns:[u("cli.out.header.field"),u("cli.out.header.value")],rows:Object.entries(e).sort(([t],[n])=>t.localeCompare(n)).map(([t,n])=>[t,ad(n)])})].join(`
61
+ `)}function Qx(r){return!r||r.length===0?"":[u("cli.out.common.sysInfo"),de({columns:[u("cli.out.header.field"),u("cli.out.header.value")],rows:r.map(e=>[e.name,eF(e)])})].join(`
62
+ `)}function Zx(r){return!r||Object.keys(r).length===0?"":[u("cli.out.common.metaVersions"),de({columns:[u("cli.out.header.metaType"),u("cli.out.header.latestVersion")],rows:Object.entries(r).sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>[e,t])})].join(`
63
+ `)}function eF(r){return r.name==="startTime"||r.name==="osTime"?tF(r.value):ad(r.value)}function tF(r){if(typeof r!="number")return ad(r);let e=new Date(r),t=n=>n.toString().padStart(2,"0");return[e.getFullYear(),t(e.getMonth()+1),t(e.getDate())].join("-")+" "+[t(e.getHours()),t(e.getMinutes()),t(e.getSeconds())].join(":")}function ad(r){return r==null?"":typeof r=="string"?r:typeof r=="number"||typeof r=="boolean"?String(r):JSON.stringify(r)}function rF(r,e){let t=r?.[e];return typeof t=="string"?t:void 0}function sd(r){return"productInfo"in r?r.productInfo:{productVersion:r.version}}function XC(r){return"sysInfo"in r?r.sysInfo:void 0}function si(r,e){switch(e){case"sysInspectInfo":return"sysInspectInfo"in r?r.sysInspectInfo:void 0;case"jvmInfo":return"jvmInfo"in r?r.jvmInfo:void 0;case"systemEnvirInfo":return"systemEnvirInfo"in r?r.systemEnvirInfo:void 0;default:return}}D();var cd=class extends oe{constructor(t=Fs){super();this.ping=t}toOptions(t){return{url:t.positional[0]}}async executeCommand(t,n){let o=await this.resolveServerUrl(t,n.url);return await this.ping(o),t.output.result({server:o,reachable:!0},()=>u("cli.cmd.server.serverReachable",o)),0}},QC={path:["server","ping"],domain:"server",spec:{name:"server ping",flags:[],positionals:[{name:"url",role:"server-url"}],usageArgs:"[<options>] [<url>]",examples:["succapp server ping","succapp --server=https://bi.example.com server ping","succapp server ping http://localhost:8180 --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new cd};D();var ld=class extends oe{toOptions(e){return{url:e.positional[0]}}async executeCommand(e,t){let n=await this.resolveServerUrl(e,t.url);return await(await this.createServerApiClient(e,n)).refreshCache(),e.output.result({...e.workspace?{workspace:e.workspace.root}:{},server:n,refreshed:!0},()=>u("cli.cmd.server.cache.refresh.refreshed",n)),0}},ZC={path:["server","cache","refresh"],domain:"server",spec:{name:"server cache refresh",flags:[],positionals:[{name:"url",role:"server-url"}],usageArgs:"[<options>] [<url>]",examples:["succapp server cache refresh","succapp --server=https://bi.example.com server cache refresh","succapp server cache refresh http://localhost:8180 --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new ld};un();D();te();function xn(r){return O({type:r.type,path:r.path,remotePath:r.remotePath,oldPath:r.oldPath,oldRemotePath:r.oldRemotePath,fileId:r.fileId,isFolder:r.isFolder,contentChanged:r.contentChanged,metaChanged:r.metaChanged,modifier:r.modifier,modifierName:r.modifierName,modifyTime:r.modifyTime})}function lc(r){return O({name:r.name,id:r.id,desc:r.desc})}function Kr(r){return O({remotePath:r.remotePath,localPath:r.localPath,currentVersion:r.currentVersion,targetVersion:r.targetVersion,changed:r.changed,reason:r.reason,...eS(r.errorInfo)})}function pc(r){return O({path:r.path,...eS(r.errorInfo)})}function uc(r){return O({path:r.path,currentVersion:r.currentVersion,targetVersion:r.targetVersion,metaType:r.metaType,kind:r.kind})}function dc(r){switch(r){case"older":return u("cli.out.value.older");case"newer":return u("cli.out.value.newer");default:return r}}function Fn(r){return de({columns:[u("cli.out.header.type"),u("cli.out.header.path"),u("cli.out.header.remote")],rows:r.map(e=>[e.type,e.path,e.remotePath])})}function ga(r){return de({columns:[u("cli.out.header.remote"),u("cli.out.common.version"),u("cli.out.common.targetVersion")],rows:r.map(e=>[e.remotePath,e.currentVersion??"",e.targetVersion??""])})}function eS(r){if(r===void 0)return{};let e=nF(r);return e||(r instanceof Error?O({errorName:r.name||"Error",errorMessage:r.message}):typeof r=="object"&&r!==null?O({errorName:Gt(r,"name"),errorCode:Gt(r,"code")??Gt(r,"errorCode"),errorMessage:Gt(r,"message")??Gt(r,"reason")}):{errorMessage:String(r)})}function In(r){if(r===void 0)return"";let e=oF(r);if(e)return e;if(r instanceof Error)return r.message||r.name;if(typeof r=="object"&&r!==null){let t=Gt(r,"code")??Gt(r,"errorCode"),n=Gt(r,"message")??Gt(r,"reason");return[t,n].filter(o=>o&&o.length>0).join(": ")}return String(r)}function nF(r){let e=tt(r),t=pr(r),n=It(r);if(!(e===void 0&&t===void 0&&n===void 0))return O({errorName:iF(r),errorCode:e,errorType:t==null?void 0:String(t),errorMessage:tS(r),errorProperties:n})}function oF(r){let e=tt(r),t=tS(r);return[e,t].filter(n=>n&&n.length>0).join(": ")}function iF(r){if(r instanceof Error)return r.name||"Error";if(!(typeof r!="object"||r===null))return Gt(r,"name")??Gt(r,"className")}function tS(r){if(r instanceof Error)return r.message;if(!(typeof r!="object"||r===null))return Gt(r,"message")??Gt(r,"reason")}function Gt(r,e){if(!Object.hasOwn(r,e))return;let t=r[e];return typeof t=="string"?t:void 0}D();te();var rS=b(require("fs")),Ye=b(require("path"));F();H();var Jr=Ye.posix.join("sysdata","extensions");function nS(r){if(r.extensionName){let e=r.extensionName.trim();return sF(e)?{extensionRoot:mc(r.workspaceRoot,e),extensionName:e}:void 0}if(r.path)return cF(r.workspaceRoot,r.path)}function mc(r,e){return Ye.join(r,Jr,e)}async function pd(r){return ee(Ye.join(r,Jr))}async function aF(r){let e=Ye.join(r,Jr),t;try{t=await rS.promises.readdir(e,{withFileTypes:!0})}catch(n){if(x(n))return[];throw n}return t.filter(n=>n.isDirectory()).map(n=>n.name).sort()}async function oS(r){return aF(r)}function sF(r){return r.length>0&&r!=="."&&r!==".."&&!r.includes("/")&&!r.includes("\\")}function cF(r,e){let t=Ye.isAbsolute(e)?Ye.normalize(e):Ye.resolve(r,e),n=Ye.join(r,Jr),o=n+Ye.sep;if(t!==n&&!t.startsWith(o))return;let a=Ye.relative(n,t).split(Ye.sep)[0];if(!(!a||a===".."||a==="."))return{extensionRoot:Ye.join(n,a),extensionName:a}}function iS(r){return O({extensionPoint:r.extensionPoint,templateName:r.templateName,name:r.summary.name,desc:r.summary.desc,version:r.summary.version})}function aS(r,e){return{extensionName:r,extensionRoot:e.extensionRoot,packageJsonPath:e.packageJsonPath,extensionPoint:e.extensionPoint,templateName:e.templateName,template:lF(e.templateSummary)}}function sS(r){let e=r.metadataVersionSuggestions??[];return{summary:{pushed:r.pushed.length,rejected:r.rejected.length,failures:r.failures.length,metadataVersionSuggestions:e.length},pushed:r.pushed,rejected:r.rejected.map(xn),failures:r.failures.map(pc),metadataVersionSuggestions:e.map(uc)}}function cS(r){return r.length===0?u("cli.out.workspace.ext.extTemplates"):{columns:[u("cli.out.workspace.ext.extPoint"),u("cli.out.workspace.ext.template"),u("cli.out.header.version"),u("cli.out.header.description")],rows:r.map(e=>[e.extensionPoint,e.templateName,e.summary.version??"",e.summary.desc??""])}}function lS(r){return r.length===0?u("cli.out.workspace.ext.ext",Jr):{columns:[u("cli.out.header.extension")],rows:r.map(e=>[e])}}function pS(r,e){return u("cli.out.workspace.ext.createdExt",r,e.extensionRoot)}function uS(r,e){if(e.pushed.length===0&&e.rejected.length===0&&e.failures.length===0)return u("cli.out.workspace.ext.noLocalChanges",r);let t=[u("cli.out.workspace.ext.pushExtPushed",r,e.pushed.length,e.rejected.length,e.failures.length)];e.pushed.length>0&&(t.push(u("cli.out.workspace.ext.pushedFiles",e.pushed.length)),t.push(pF(e.pushed))),e.rejected.length>0&&(t.push(u("cli.out.workspace.ext.pushBlockedRemote",e.rejected.length)),t.push(Fn(e.rejected))),e.failures.length>0&&(t.push(u("cli.out.workspace.ext.failed",e.failures.length)),t.push(uF(e.failures)));let n=e.metadataVersionSuggestions??[];return n.length>0&&(t.push(u("cli.out.workspace.ext.metaVersions",n.length)),t.push(dF(n))),t.join(`
64
+ `)}function lF(r){return O({name:r.name,desc:r.desc,version:r.version})}function pF(r){return de({columns:[u("cli.out.header.path")],rows:r.map(e=>[e])})}function uF(r){return de({columns:[u("cli.out.header.path"),u("cli.out.header.error")],rows:r.map(e=>[e.path,In(e.errorInfo)])})}function dF(r){return de({columns:[u("cli.out.header.path"),u("cli.out.workspace.ext.version"),u("cli.out.workspace.ext.targetVersion"),u("cli.out.workspace.ext.kind")],rows:r.map(e=>[e.path,e.currentVersion??"",e.targetVersion,dc(e.kind)])})}te();var Cc=b(require("fs")),yr=b(require("path"));K();D();jr();F();U();H();var dS=b(require("path"));Pt();K();var mF=T("workspace.extension-dev.package");async function mS(r,e){let t=dS.join(r,"package.json"),n=await qe(t);if(!n.trim())return mF.warn(`extension package.json is missing or empty: ${t}`),!1;let o=qt(n,["name"],e);return o===n?!1:(await Ke(t,o),!0)}var AF=zS(),OF=/^[a-z0-9]+(?:-[a-z0-9]+){2,}$/,_F=T("workspace.extension-dev.create"),Sc=class{workspace;cachedClient;cachedOptions;constructor(e){this.workspace=e}async prepare(e=it.INSTANCE){if(e.start(1,{message:u("workspace.extension.progress.templates")}),!await pd(this.workspace.root))throw new wt("err.extension.sysdataNotCloned",{extensionsDir:yr.join(this.workspace.root,Jr)});let n=await(await this.requireClient()).getExtensionTemplates(),o=gd(n);if(o.length===0)throw new wt("err.extension.templateUnavailable");return this.cachedOptions=o,e.step(1),o}groupOptionsByExtensionPoint(){let e=this.cachedOptions??[],t=new Map;for(let n of e){let o=t.get(n.extensionPoint)??[];o.push(n),t.set(n.extensionPoint,o)}return t}async validate(e){let t=e.extensionName.trim();if(!t)return{ok:!1,error:"empty"};if(!OF.test(t))return{ok:!1,error:"invalidFormat"};let o=t.split("-")[1];return o!==e.extensionPoint?{ok:!1,error:"extensionPointMismatch",actualExtensionPoint:o}:await ee(mc(this.workspace.root,t))?{ok:!1,error:"targetExists"}:{ok:!0}}async execute(e){let{extensionPoint:t,templateName:n,extensionName:o}=e,i=e.task??it.INSTANCE;i.start(100,{message:u("workspace.extension.progress.create.running",o),retainOnFinish:!0});let a=i.subTaskMonitor(10),s=i.subTaskMonitor(35),c=i.subTaskMonitor(40),l=i.subTaskMonitor(15);if(a.start(1),!await pd(this.workspace.root))throw new wt("err.extension.sysdataNotCloned",{extensionsDir:yr.join(this.workspace.root,Jr)});let p=await this.requireOption(t,n),d=mc(this.workspace.root,o);if(await ee(d))throw new Error(`target extension directory already exists: ${d}`);a.step(1);let g=await this.requireClient();s.start(1);let m=await g.downloadExtensionTemplate(t,n);return s.step(1),c.start(1),await LF(m,d),await mS(d,o),c.step(1),await this.workspace.refreshSyncStatus(l),i.setMessage(u("workspace.extension.progress.create.done",o)),i.finish(),{extensionRoot:d,packageJsonPath:yr.join(d,"package.json"),extensionPoint:t,templateName:n,templateSummary:p.summary}}async requireClient(){return this.cachedClient||(this.cachedClient=await this.workspace.requireClient()),this.cachedClient}async requireOption(e,t){let o=(this.cachedOptions??await this.prepare()).find(i=>i.extensionPoint===e&&i.templateName===t);if(!o)throw new Error(`extension template not found: ${e}/${t}`);return o}};function gd(r){let e=[],t=r.templates??{};for(let[n,o]of Object.entries(t))if(o)for(let[i,a]of Object.entries(o))e.push({extensionPoint:n,templateName:i,summary:a});return e}async function LF(r,e){let n=new AF(r).getEntries();if(n.length===0)throw new Error("extension template zip is empty");await Cc.promises.mkdir(e,{recursive:!0});try{let o=yr.resolve(e),i=o+yr.sep,a=[],s=new Set;for(let c of n){let l=c.entryName.replace(/\\/g,"/"),p=vn(l.endsWith("/")?l.slice(0,-1):l,"extension template entry"),d=yr.resolve(o,p);if(d!==o&&!d.startsWith(i))throw new Error(`extension template entry escapes target directory: ${l}`);if(l.endsWith("/")||c.isDirectory){s.add(d);continue}s.add(yr.dirname(d)),a.push({destination:d,entry:c})}await Promise.all(Array.from(s).map(c=>Cc.promises.mkdir(c,{recursive:!0}))),await Promise.all(a.map(({destination:c,entry:l})=>Cc.promises.writeFile(c,l.getData())))}catch(o){try{await or(e)}catch(i){_F.debug(`cleanup partial extension directory failed: ${e}`,i)}throw o}}var yd=class extends oe{toOptions(e){return{extensionPoint:e.value("extension-point")}}async executeCommand(e,t){let n=await this.resolveServerUrl(e),o=await this.createServerApiClient(e,n),i=NF(gd(await o.getExtensionTemplates()),t.extensionPoint);return e.output.result(O({workspace:e.workspace?.root,server:n,extensionPoint:t.extensionPoint,templates:i.map(iS)}),()=>cS(i)),0}},GS={path:["server","extension","template","list"],domain:"server",spec:{name:"server extension template list",flags:[{name:"extension-point",takesValue:!0,valueHint:"point"}],positionals:[],usageArgs:"[<options>]",examples:["succapp server extension template list","succapp --server=https://bi.example.com server extension template list --extension-point=component"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new yd};function NF(r,e){return e?r.filter(t=>t.extensionPoint===e):[...r]}U();un();function KS(r,e={}){return vc(r,e)!==void 0}function Ca(r,e={}){let t=vc(r,e);if(!t||!r||typeof r!="object")return r;let n={...It(r),suggestedAction:t,retryable:!1},o=tt(r);return t==="fixMeta"&&typeof n.backendErrorCode!="string"&&typeof o=="string"&&(n.backendErrorCode=o),(typeof n.path!="string"||n.path.length===0)&&(n.path=e.targetPath??e.path),r.properties=n,pr(r)==null&&(r.errorType=WF(r)),r}function vc(r,e={}){let t=It(r)?.suggestedAction;if(UF(t))return t;let n=tt(r);if(n==="err.meta.fileExists"||n==="err.meta.file.notfound"||n==="err.meta.saveConcurrent")return"pull";if(n==="err.meta.filefolder.notfound")return"fixMeta";if(n==="err.meta.fileExistsIgnoreCase")return"rename";if(n==="err.meta.delete.project")return"refresh";if(n==="err.permission.denied")return e.action==="delete"&&jF(e.path)?"refresh":"contactAdmin"}function WF(r){let e=tt(r);return e==="err.permission.denied"||e==="err.meta.delete.project"?"error":"warn"}function UF(r){return r==="pull"||r==="rename"||r==="refresh"||r==="fixMeta"||r==="contactAdmin"}function jF(r){return typeof r=="string"&&/^\/[^/]+$/.test(r)}F();U();un();D();te();H();var kc=b(require("fs")),$e=class extends oe{async resolveServerFileTarget(e,t){return{serverUrl:await this.resolveServerUrl(e,t.url),remotePath:By(t.path)}}createServerFileClient(e,t){return this.createServerApiClient(e,t.serverUrl)}};function ot(r,e={}){let[t,n]=r.positional,o=e.defaultPath;return t===void 0?(o===void 0&&JS(),{path:o}):n===void 0?eo(t)?(o===void 0&&JS(),{url:t,path:o}):{path:t}:{url:t,path:n}}function JS(){throw new R("err.cli.missingInput",{inputId:"serverFilePath",sources:["<path>"]})}function An(r,e="--revision"){if(r===void 0)return;let t=Dt(r);if(t===void 0)throw new R("err.cli.invalidNonNegativeInteger",{input:e,option:e,value:r});return t}function wc(r){let e=Ve(r.value("file")),t=r.has("stdin");if(e&&t)throw new R("err.cli.conflictingInputs",{inputs:["--file=<local-file>","--stdin"]});if(!e&&!t)throw new R("err.cli.missingInput",{inputId:"contentSource",sources:["--file=<local-file>","--stdin"]});return e?{kind:"file",file:e}:{kind:"stdin"}}async function Pc(r,e,t){if(e.kind==="stdin")return{source:"stdin",content:await t()};let n=Rt(r.cwd,e.file);if(!(await nc(n)).isFile())throw new R("err.cli.invalidRegularFile",{inputId:"inputFile",source:n,path:n});return{source:"file",localFile:n,content:kc.createReadStream(n)}}function YS(r){let e=Ve(r.value("output"));if(!e)throw new R("err.cli.missingInput",{inputId:"outputFile",sources:["--output=<file>"]});return e}async function XS(r,e){try{await kc.promises.stat(r)}catch(t){if(x(t))return;throw t}if(!e)throw new R("err.cli.confirmationRequired",{reason:"outputOverwrite",flag:"--force",path:r})}function Rc(r,e,t){if(r!==void 0&&e)throw new R("err.cli.conflictingInputs",{inputs:["--expected-revision","--force"],context:{command:t}});if(r===void 0&&!e)throw new R("err.cli.missingInput",{inputId:"revisionOrForce",sources:["--expected-revision=<revision>","--force"],context:{command:t}})}function va(r){return O({id:r.id,projectName:r.projectName,path:r.path,parentDir:r.parentDir,name:r.name,isFolder:r.isFolder,type:r.type,size:r.size,hash:r.hash,revision:r.revision,modifyTime:r.modifyTime,modifier:r.modifier,desc:r.desc,labels:r.labels,hidden:r.hidden,order:r.order})}function BF(r){return O({path:r.path,oldPath:r.oldPath,modifyTime:r.modifyTime,contentMutation:r.contentMutation,pathMutation:r.pathMutation,metaInfoChanged:r.metaInfoChanged,metaInfo:r.metaInfo?va(r.metaInfo):void 0,warnings:r.warnings})}function ui(r,e,t,n){return O({workspace:r.workspace?.root,server:e,path:t.path,source:n?.source,localFile:n?.localFile,result:BF(t)})}async function di(r,e,t){try{let n=await t();return VF(r,n),n}catch(n){let o=qF(n,r,e);if(!o)throw n;QS(r,e,o)}}function VF(r,e){e.success||QS(r,e.path,Ca(e.errorInfo,{action:r,path:e.path}))}function QS(r,e,t){let n=In(t)||u("cli.cmd.server.file.unknownServerFile"),o={action:r,remotePath:e,reason:n,errorInfo:t};throw $F(t)?new jt("err.base.operationFailed",o,{cause:t}):new wt("err.base.operationFailed",o,{cause:t})}function qF(r,e,t){if(!(!(r instanceof er)||!r.remoteError))return Ca(pn(r.remoteError),{action:e,path:t})}function $F(r){let e=vc(r);return e==="pull"||e==="rename"}function ZS(r){return r.length===0?u("cli.cmd.server.file.files"):de({columns:[u("cli.out.header.type"),u("cli.cmd.server.file.name"),u("cli.out.header.path"),u("cli.out.header.revision"),u("cli.cmd.server.file.size")],rows:r.map(e=>[e.isFolder?u("cli.cmd.server.file.folder"):u("cli.cmd.server.file.file"),e.name,e.path,Sa(e.revision),Sa(e.size)])})}function ev(r){return de({columns:[u("cli.out.header.field"),u("cli.out.header.value")],rows:[[u("cli.out.header.path"),r.path],[u("cli.out.header.type"),r.isFolder?u("cli.cmd.server.file.folder"):u("cli.cmd.server.file.file")],[u("cli.cmd.server.file.id"),r.id],[u("cli.out.header.revision"),Sa(r.revision)],[u("cli.cmd.server.file.size"),Sa(r.size)],[u("cli.cmd.server.file.modifyTime"),Sa(r.modifyTime)],[u("cli.out.header.description"),r.desc??""]]})}function mi(r,e){return u("cli.cmd.server.file.success",r,e.path)}function Sa(r){return r===void 0?"":String(r)}var Cd=class extends $e{constructor(t=Ir){super();this.readStdin=t}toOptions(t){return{...ot(t),source:wc(t)}}async executeCommand(t,n){let o=await this.resolveServerFileTarget(t,n),i=await this.createServerFileClient(t,o),a=await Pc(t,n.source,this.readStdin),s=await di("Create",o.remotePath,()=>i.saveFile(o.remotePath,a.content,{expectedRevision:null}));return t.output.result(ui(t,o.serverUrl,s,a),()=>mi("Create",s)),0}},tv={path:["server","file","create"],domain:"server",spec:{name:"server file create",flags:[{name:"file",takesValue:!0,valueHint:"local-file"},{name:"stdin",takesValue:!1}],positionals:[{name:"url",role:"server-url"},{name:"path",required:!0}],usageArgs:"[<options>] [<url>] <path>",examples:["succapp --server=https://bi.example.com server file create /DEMO/apps/new.view --file=./new.view",'printf "{}" | succapp server file create /DEMO/apps/new.view --stdin',"succapp server file create https://bi.example.com /DEMO/apps/new.view --file=./new.view"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Cd};D();F();U();te();H();var rv=b(require("fs")),nv=require("stream/promises"),Sd=class extends $e{toOptions(e){return{...ot(e),revision:An(e.value("revision")),upgradeContent:e.has("upgrade-content"),output:YS(e),force:e.has("force")}}async executeCommand(e,t){let n=await this.resolveServerFileTarget(e,t),o=Rt(e.cwd,t.output);await XS(o,t.force);let a=await(await this.createServerFileClient(e,n)).getFileContentStream(n.remotePath,{revision:t.revision,upgradeContent:t.upgradeContent});try{await(0,nv.pipeline)(a.stream,rv.createWriteStream(o,{flags:t.force?"w":"wx"}))}catch(s){throw!t.force&&HF(s)?new R("err.cli.confirmationRequired",{reason:"outputOverwrite",flag:"--force",path:o},{cause:s}):s}return e.output.result(O({workspace:e.workspace?.root,server:n.serverUrl,path:n.remotePath,output:o,revision:a.revision,modifyTime:a.modifyTime}),()=>u("cli.cmd.server.file.download.downloaded",n.remotePath,o)),0}},ov={path:["server","file","download"],domain:"server",spec:{name:"server file download",flags:[{name:"revision",takesValue:!0,valueHint:"n"},{name:"upgrade-content",takesValue:!1},{name:"output",takesValue:!0,valueHint:"local-file"},{name:"force",takesValue:!1}],positionals:[{name:"url",role:"server-url"},{name:"path",required:!0}],usageArgs:"[<options>] [<url>] <path>",examples:["succapp --server=https://bi.example.com server file download /DEMO/apps/a.view --output=./a.view","succapp server file download --revision=12 /DEMO/apps/a.view --output=./a.view","succapp server file download /DEMO/apps/a.view --output=./a.view --force"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Sd};function HF(r){return typeof r=="object"&&r!==null&&"code"in r&&r.code==="EEXIST"}U();F();D();te();function Ec(r){let e=Dt(r);if(r===void 0||e!==void 0&&e>0)return e;throw new R("err.cli.invalidPositiveInteger",{input:"--limit",option:"--limit",value:r})}function bc(r){return r.length===0?u("cli.out.workspace.file.hist.empty"):de({columns:[u("cli.out.header.revision"),u("cli.out.header.action"),u("cli.out.header.modified"),u("cli.out.header.modifier"),u("cli.out.header.path"),u("cli.out.header.message")],rows:r.map(e=>[zF(e.revision),e.action??"",GF(e.modifyTime),e.modifierName??e.modifier??"",e.path,e.message??""])})}function Tc(r){return O({id:r.id,fileId:r.fileId,path:r.path,revision:r.revision,action:r.action,modifyTime:r.modifyTime,modifier:r.modifier,modifierName:r.modifierName,message:r.message,detail:r.detail})}function zF(r){return r===void 0?"":String(r)}function GF(r){return r===void 0?"":new Date(r).toISOString()}te();var vd=class extends $e{toOptions(e){return{...ot(e),limit:Ec(e.value("limit"))}}async executeCommand(e,t){let n=await this.resolveServerFileTarget(e,t),i=await(await this.createServerFileClient(e,n)).getFileHistory(n.remotePath,{limit:t.limit});return e.output.result(O({workspace:e.workspace?.root,server:n.serverUrl,path:n.remotePath,summary:{histories:i.length},histories:i.map(Tc)}),()=>bc(i)),0}},iv={path:["server","file","history"],domain:"server",spec:{name:"server file history",flags:[{name:"limit",takesValue:!0,valueHint:"n"}],positionals:[{name:"url",role:"server-url"},{name:"path",required:!0}],usageArgs:"[<options>] [<url>] <path>",examples:["succapp --server=https://bi.example.com server file history /DEMO/views/sales.view","succapp server file history https://bi.example.com /DEMO/views/sales.view","succapp server file history --limit=20 /DEMO/views/sales.view --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new vd};te();var kd=class extends $e{toOptions(e){return ot(e)}async executeCommand(e,t){let n=await this.resolveServerFileTarget(e,t),i=await(await this.createServerFileClient(e,n)).getFile(n.remotePath);return e.output.result(O({workspace:e.workspace?.root,server:n.serverUrl,path:n.remotePath,file:va(i)}),()=>ev(i)),0}},av={path:["server","file","info"],domain:"server",spec:{name:"server file info",flags:[],positionals:[{name:"url",role:"server-url"},{name:"path",required:!0}],usageArgs:"[<options>] [<url>] <path>",examples:["succapp --server=https://bi.example.com server file info /DEMO/apps/a.view","succapp server file info https://bi.example.com /DEMO/apps/a.view","succapp server file info /DEMO/apps/a.view --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new kd};te();var wd=class extends $e{toOptions(e){return ot(e,{defaultPath:"/"})}async executeCommand(e,t){let n=await this.resolveServerFileTarget(e,t),i=await(await this.createServerFileClient(e,n)).listFiles(n.remotePath);return e.output.result(O({workspace:e.workspace?.root,server:n.serverUrl,path:n.remotePath,summary:{files:i.length},files:i.map(va)}),()=>ZS(i)),0}},sv={path:["server","file","list"],domain:"server",spec:{name:"server file list",flags:[],positionals:[{name:"url",role:"server-url"},{name:"path"}],usageArgs:"[<options>] [<url>] [<path>]",examples:["succapp --server=https://bi.example.com server file list /DEMO","succapp server file list https://bi.example.com /DEMO/apps","succapp server file list --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new wd};D();te();var Pd=class extends $e{constructor(t=Zo){super();this.opener=t}toOptions(t){return{...ot(t),edit:t.has("edit")}}async executeCommand(t,n){let o=await this.resolveServerFileTarget(t,n),i=n.edit===!0,a=Yo(o.serverUrl,{path:o.remotePath,...i?{":edit":"true"}:{}});return await this.opener(a,t.abortSignal),t.output.result(O({workspace:t.workspace?.root,server:o.serverUrl,path:o.remotePath,edit:i,url:a}),()=>KF(a,i)),0}},cv={path:["server","file","open"],domain:"server",spec:{name:"server file open",flags:[{name:"edit",takesValue:!1}],positionals:[{name:"url",role:"server-url"},{name:"path",required:!0}],usageArgs:"[<options>] [<url>] <path>",examples:["succapp --server=https://bi.example.com server file open /DEMO/views/sales.view","succapp server file open https://bi.example.com /DEMO/views/sales.view","succapp server file open --edit /DEMO/views/sales.view --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Pd};function KF(r,e){return u(e?"cli.cmd.server.file.open.openedEdit":"cli.cmd.server.file.open.openedView",r)}var Rd=class extends $e{toOptions(e){return{...ot(e),expectedRevision:An(e.value("expected-revision"),"--expected-revision"),force:e.has("force")}}async executeCommand(e,t){Rc(t.expectedRevision,t.force,"server file remove");let n=await this.resolveServerFileTarget(e,t),o=await this.createServerFileClient(e,n),i=await di("Delete",n.remotePath,()=>o.deleteFile(n.remotePath,t.force?void 0:{expectedRevision:t.expectedRevision}));return e.output.result(ui(e,n.serverUrl,i),()=>mi("Delete",i)),0}},lv={path:["server","file","remove"],domain:"server",spec:{name:"server file remove",flags:[{name:"expected-revision",takesValue:!0,valueHint:"n"},{name:"force",takesValue:!1}],positionals:[{name:"url",role:"server-url"},{name:"path",required:!0}],usageArgs:"[<options>] [<url>] <path>",examples:["succapp --server=https://bi.example.com server file remove /DEMO/apps/a.view --expected-revision=12","succapp server file remove https://bi.example.com /DEMO/apps/a.view --expected-revision=12","succapp server file remove /DEMO/apps/a.view --force"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Rd};te();var Ed=class extends $e{toOptions(e){return{...ot(e),revision:An(e.value("revision")),upgradeContent:e.has("upgrade-content")}}async executeCommand(e,t){let n=await this.resolveServerFileTarget(e,t),i=await(await this.createServerFileClient(e,n)).getFileContent(n.remotePath,{revision:t.revision,upgradeContent:t.upgradeContent});return e.output.content(O({workspace:e.workspace?.root,server:n.serverUrl,path:n.remotePath,revision:i.revision,modifyTime:i.modifyTime,size:i.buffer.length}),i.buffer),0}},pv={path:["server","file","show"],domain:"server",spec:{name:"server file show",flags:[{name:"revision",takesValue:!0,valueHint:"n"},{name:"upgrade-content",takesValue:!1}],positionals:[{name:"url",role:"server-url"},{name:"path",required:!0}],usageArgs:"[<options>] [<url>] <path>",examples:["succapp --server=https://bi.example.com server file show /DEMO/apps/a.view","succapp server file show --revision=12 /DEMO/apps/a.view","succapp server file show /DEMO/apps/a.view --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Ed};var bd=class extends $e{constructor(t=Ir){super();this.readStdin=t}toOptions(t){return{...ot(t),source:wc(t),expectedRevision:An(t.value("expected-revision"),"--expected-revision"),force:t.has("force")}}async executeCommand(t,n){Rc(n.expectedRevision,n.force,"server file update");let o=await this.resolveServerFileTarget(t,n),i=await this.createServerFileClient(t,o),a=await Pc(t,n.source,this.readStdin),s=await di("Put",o.remotePath,()=>i.saveFile(o.remotePath,a.content,n.force?void 0:{expectedRevision:n.expectedRevision}));return t.output.result(ui(t,o.serverUrl,s,a),()=>mi("Put",s)),0}},uv={path:["server","file","update"],domain:"server",spec:{name:"server file update",flags:[{name:"file",takesValue:!0,valueHint:"local-file"},{name:"stdin",takesValue:!1},{name:"expected-revision",takesValue:!0,valueHint:"n"},{name:"force",takesValue:!1}],positionals:[{name:"url",role:"server-url"},{name:"path",required:!0}],usageArgs:"[<options>] [<url>] <path>",examples:["succapp --server=https://bi.example.com server file update /DEMO/apps/a.view --file=./a.view --expected-revision=12",'printf "{}" | succapp server file update /DEMO/apps/a.view --stdin --expected-revision=12',"succapp server file update /DEMO/apps/a.view --file=./a.view --force"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new bd};D();var Td=class extends oe{toOptions(e){return{url:e.positional[0]}}async executeCommand(e,t){let n=await this.resolveServerUrl(e,t.url),i=await(await this.createServerApiClient(e,n)).getProjects();return e.output.result({...e.workspace?{workspace:e.workspace.root}:{},server:n,projects:i.map(lc)},()=>JF(i)),0}},dv={path:["server","project","list"],domain:"server",spec:{name:"server project list",flags:[],positionals:[{name:"url",role:"server-url"}],usageArgs:"[<options>] [<url>]",examples:["succapp server project list","succapp --server=https://bi.example.com server project list","succapp server project list http://localhost:8180 --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Td};function JF(r){return{columns:[u("cli.out.header.project"),u("cli.out.common.id"),u("cli.out.header.description")],rows:r.map(e=>[e.name,e.id??"",e.desc??""])}}U();F();D();var Md=class extends oe{toOptions(e){return{...YF(e),desc:Ve(e.value("desc"))}}validateOptions(e,t){!e.workspace&&!t.url&&!e.config.server&&fv()}async executeCommand(e,t){let n=await this.resolveServerUrl(e,t.url),i=await(await this.createServerApiClient(e,n)).createProject({name:t.projectName,desc:t.desc});return e.output.result({...e.workspace?{workspace:e.workspace.root}:{},server:n,project:lc(i)},()=>XF(i)),0}},hv={path:["server","project","create"],domain:"server",spec:{name:"server project create",flags:[{name:"desc",takesValue:!0,valueHint:"text",description:"cli.cmd.server.proj.create.descOption"}],positionals:[{name:"url",role:"server-url"},{name:"project"}],usageArgs:"[<options>] [<url>] <project>",examples:["succapp server project create SALES",'succapp server project create SALES --desc="Sales demo"',"succapp server project create http://localhost:8180 SALES --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Md};function YF(r){let[e,t]=r.positional;return e===void 0&&mv(),t===void 0?(eo(e)&&mv(),{projectName:e}):(eo(e)||fv(),{url:e,projectName:t})}function mv(){throw new R("err.cli.missingInput",{inputId:"projectName",sources:["<project>"]})}function fv(){throw new R("err.cli.missingInput",{inputId:"server",sources:["--server=<url>","<url> <project>"]})}function XF(r){return u("cli.cmd.server.proj.create.created",r.name)}D();F();U();te();var xd="input",Fd="param",hi=class extends oe{async executeCommand(e,t){let n=await this.resolveServerUrl(e),o=await this.createServerApiClient(e,n);return this.executeScriptCommand(e,n,o,t)}};function Mc(r){return O({result:"result"in r?r.result:void 0,elapsedMs:"elapsedMs"in r?r.elapsedMs:void 0,diagnostics:"diagnostics"in r?r.diagnostics:void 0})}function xc(){return u("cli.cmd.server.script.done")}function gv(r,e){let t=r.trim();if(!gs(t))return r;try{return JSON.parse(t)}catch(n){throw new R("err.cli.invalidJson",{inputId:"inputFile",source:e,context:{file:e}},{cause:n})}}H();var Id=class extends hi{constructor(t=Qo){super();this.readFileText=t}toOptions(t){return{scriptPath:t.positional[0]}}async executeScriptCommand(t,n,o,i){let a=await this.readFileText(Rt(t.cwd,i.scriptPath)),s=await o.checkScript({script:a});return t.output.result({...pe(t,n),path:i.scriptPath,...Mc(s)},()=>xc()),0}},yv={path:["server","script","check"],domain:"server",spec:{name:"server script check",flags:[],positionals:[{name:"file",required:!0}],usageArgs:"[<options>] <file>",examples:["succapp server script check ./scripts/job.js"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Id};te();H();var Dd=class extends hi{constructor(t=Qo){super();this.readFileText=t}toOptions(t){return{scriptPath:t.positional[0],inputFile:t.value(xd),params:Xy(t.values(Fd))}}async executeScriptCommand(t,n,o,i){let a=await this.readFileText(Rt(t.cwd,i.scriptPath)),s=i.inputFile?gv(await this.readFileText(Rt(t.cwd,i.inputFile)),i.inputFile):void 0,c=Qy(i.params),l=await o.executeScript({script:a,args:O({input:s,params:c})});return t.output.result({...pe(t,n),path:i.scriptPath,params:c,...Mc(l)},()=>xc()),0}},Cv={path:["server","script","exec"],domain:"server",spec:{name:"server script exec",flags:[{name:xd,takesValue:!0,valueHint:"file"},{name:Fd,takesValue:!0,repeatable:!0,valueHint:"key=value"}],positionals:[{name:"file",required:!0}],usageArgs:"[<options>] <file>",examples:["succapp server script exec ./scripts/job.js","succapp server script exec ./scripts/job.js --input=./input.json --param=mode=preview"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Dd};F();U();D();te();H();var wv=b(require("fs")),ho="key",fi="set",gi="file",yi="stdin",Fc="unset",Ic="expected-revision",QF="system";function Dc(r,e={}){let[t,n]=r.positional,o=e.requireTarget===!0;return t===void 0?(o&&vv(),{}):n===void 0?eo(t)?(o&&vv(t),{url:t}):{target:Sv(t)}:{url:t,target:Sv(n)}}function Sv(r){if(r!==QF)return r}function vv(r){throw new R("err.cli.missingInput",{inputId:"settingsTarget",sources:["<target>"],...r!==void 0?{context:{server:r}}:{}})}function Pv(r){let e=Ve(r.value(fi)),t=Ve(r.value(gi)),n=r.has(yi),o=[];if(e&&o.push(`--${fi}=<json>`),t&&o.push(`--${gi}=<local-file>`),n&&o.push(`--${yi}`),o.length>1)throw new R("err.cli.conflictingInputs",{inputs:o});if(e)return{kind:"inline",json:e};if(t)return{kind:"file",file:t};if(n)return{kind:"stdin"}}function Rv(r){return Tv(r,ho)}function Ev(r){let e=r.value(ho);if(e!==void 0)return Mv(ho,e),e}function bv(r){return Tv(r,Fc)}function Tv(r,e){let t=[];for(let n of r.values(e))Mv(e,n),t.push(n);return t}function Mv(r,e){if(!e)throw new R("err.cli.missingOptionValue",{option:`--${r}`})}function xv(r,e=`--${Ic}`){if(r===void 0)return;let t=Dt(r);if(t===void 0)throw new R("err.cli.invalidNonNegativeInteger",{input:e,option:e,value:r});return t}async function Fv(r,e,t,n){if(!e&&t.length===0)throw new R("err.cli.missingInput",{inputId:"settingsPatch",sources:[`--${fi}=<json>`,`--${gi}=<local-file>`,`--${yi}`,`--${Fc}=<key>`]});let i={...e?await ZF(r,e,n):{}};for(let a of t)i[a]=null;return i}async function ZF(r,e,t){if(e.kind==="inline"){let a=`--${fi}`;return kv(e.json,a,a)}if(e.kind==="stdin"){let a=`--${yi}`;return kv(await t(),a,a)}let n=Rt(r.cwd,e.file);if(!(await nc(n)).isFile())throw new R("err.cli.invalidRegularFile",{inputId:"inputFile",source:n,path:n});let i=await wv.promises.readFile(n,"utf-8");return eI(i,n)}function kv(r,e,t){let n=Iv(r);if(n===void 0)throw new R("err.cli.invalidJsonObject",{input:e,source:t});return n}function eI(r,e){let t=Iv(r);if(t===void 0)throw new R("err.cli.invalidJsonObject",{input:`--${gi}`,source:e});return t}function Iv(r){let e=r.trim();if(!e)return;let t;try{t=JSON.parse(e)}catch{return}return z(t)?t:void 0}function Dv(r){return r??u("cli.cmd.server.settings.target.system")}function Av(r,e){return`${u("cli.cmd.server.settings.get.header",Dv(r))}
65
+ ${_v(e)}`}function Ov(r,e){let t=Object.keys(e),n=t.length>0?t.join(", "):u("cli.cmd.server.settings.set.noKeys");return`${u("cli.cmd.server.settings.set.success",Dv(r),n)}
66
+ ${_v(e)}`}function _v(r){return JSON.stringify(r,null,2)}function Lv(r,e,t,n){return{settings:t,...r!==void 0?{path:r}:{},...e!==void 0?{key:e}:{},...n!==void 0?{expectedRevision:n}:{}}}var Nv=Ir;var Ad=class extends oe{toOptions(e){return{...Dc(e),keys:Rv(e)}}async executeCommand(e,t){let n=await this.resolveServerUrl(e,t.url),a=await(await this.createServerApiClient(e,n)).getSettings({...t.target!==void 0?{path:t.target}:{},...t.keys.length>0?{keys:[...t.keys]}:{}});return e.output.result({...e.workspace?{workspace:e.workspace.root}:{},server:n,target:t.target,settings:a},()=>Av(t.target,a)),0}},Wv={path:["server","settings","get"],domain:"server",spec:{name:"server settings get",flags:[{name:ho,takesValue:!0,repeatable:!0,valueHint:"key"}],positionals:[{name:"url",role:"server-url"},{name:"target"}],usageArgs:"[<options>] [<url>] [<target>]",examples:["succapp server settings get","succapp server settings get DEMO --json","succapp server settings get /DEMO/app/x.app --key modelConfig"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Ad};var Od=class extends oe{constructor(t=Nv){super();this.readStdin=t}toOptions(t){return{...Dc(t,{requireTarget:!0}),source:Pv(t),unsetKeys:bv(t),key:Ev(t),expectedRevision:xv(t.value(Ic))}}async executeCommand(t,n){let o=await Fv(t,n.source,n.unsetKeys,this.readStdin),i=await this.resolveServerUrl(t,n.url),a=await this.createServerApiClient(t,i),s=Lv(n.target,n.key,o,n.expectedRevision),l=await a.setSettings(s);return t.output.result({...t.workspace?{workspace:t.workspace.root}:{},server:i,target:n.target,settings:l},()=>Ov(n.target,l)),0}},Uv={path:["server","settings","set"],domain:"server",spec:{name:"server settings set",flags:[{name:fi,takesValue:!0,valueHint:"json"},{name:gi,takesValue:!0,valueHint:"local-file"},{name:yi,takesValue:!1},{name:Fc,takesValue:!0,repeatable:!0,valueHint:"key"},{name:ho,takesValue:!0,valueHint:"key"},{name:Ic,takesValue:!0,valueHint:"n"}],positionals:[{name:"url",role:"server-url"},{name:"target",required:!0}],usageArgs:"[<options>] [<url>] <target>",examples:[`succapp server settings set system --set '{"ai":{"defaultModel":"qwen-max"}}'`,"succapp server settings set DEMO --file=./patch.json --expected-revision=12","succapp server settings set /DEMO/app/x.app --unset rag"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Od};var jv=[QC,JC,dv,hv,sv,av,pv,ov,cv,iv,tv,uv,lv,Cv,yv,ZC,GS,Wv,Uv];D();F();U();H();var qP=b(require("path"));var np=b(require("fs")),Rr=b(require("path"));var Ac=class{total=0;byApi=new Map;byPath=new Map;pathKeyCount=0;droppedPathKeys=0;recentCallsDropped=0;recentCalls=[];maxPathKeys;maxRecentCalls;constructor(e={}){this.maxPathKeys=e.maxPathKeys??500,this.maxRecentCalls=e.maxRecentCalls??200}record(e){this.total++,this.byApi.set(e.name,(this.byApi.get(e.name)??0)+1),e.path!==void 0&&this.recordPath(e.name,e.path),this.recordRecentCall(e)}getSnapshot(e={}){let t={total:this.total,byApi:Object.fromEntries(this.byApi),byPath:this.createByPathSnapshot(),droppedPathKeys:this.droppedPathKeys,recentCallsDropped:this.recentCallsDropped,...e.includeRecentCalls?{recentCalls:this.recentCalls.map(n=>({...n}))}:{}};return e.reset&&this.reset(),t}reset(){this.total=0,this.byApi.clear(),this.byPath.clear(),this.pathKeyCount=0,this.droppedPathKeys=0,this.recentCallsDropped=0,this.recentCalls.length=0}recordPath(e,t){let n=this.byPath.get(e);if(n?.has(t)){n.set(t,(n.get(t)??0)+1);return}if(this.pathKeyCount>=this.maxPathKeys){this.droppedPathKeys++;return}n||(n=new Map,this.byPath.set(e,n)),n.set(t,1),this.pathKeyCount++}recordRecentCall(e){if(this.maxRecentCalls<=0){this.recentCallsDropped++;return}this.recentCalls.length>=this.maxRecentCalls&&(this.recentCalls.shift(),this.recentCallsDropped++),this.recentCalls.push({...e})}createByPathSnapshot(){let e={};for(let[t,n]of this.byPath)e[t]=Object.fromEntries(n);return e}};var _d=class{constructor(e){this.delegate=e}diagnostics=new Ac;get serverUrl(){return this.delegate.serverUrl}get currentAuthorizationHeader(){return this.delegate.currentAuthorizationHeader}getDiagnostics(e){return this.diagnostics.getSnapshot(e)}async getServerInfo(){return this.recordApiCall("getServerInfo"),this.delegate.getServerInfo()}async getServerDetailInfo(){return this.recordApiCall("getServerDetailInfo"),this.delegate.getServerDetailInfo()}async getMetadataVersions(){return this.recordApiCall("getMetadataVersions"),this.delegate.getMetadataVersions()}async getProjects(){return this.recordApiCall("getProjects"),this.delegate.getProjects()}async createProject(e){return this.recordApiCall("createProject",e.name),this.delegate.createProject(e)}async listFiles(e){return this.recordApiCall("listFiles",e),this.delegate.listFiles(e)}async countFiles(e){return this.recordApiCall("countFiles",e),this.delegate.countFiles(e)}async getFileDescendant(e){return this.recordApiCall("getFileDescendant",e),this.delegate.getFileDescendant(e)}async getFile(e){return this.recordApiCall("getFile",e),this.delegate.getFile(e)}async getFileInfos(e){return this.recordApiCall("getFileInfos"),this.delegate.getFileInfos(e)}async getFileHistory(e,t){return this.recordApiCall("getFileHistory",e),this.delegate.getFileHistory(e,t)}isNotFoundError(e){return this.delegate.isNotFoundError(e)}async getFileContent(e,t){return this.recordApiCall("getFileContent",e),this.delegate.getFileContent(e,t)}async getFileContentStream(e,t){return this.recordApiCall("getFileContentStream",e),this.delegate.getFileContentStream(e,t)}async saveFile(e,t,n){return this.recordApiCall("saveFile",e),this.delegate.saveFile(e,t,n)}async createFile(e){return this.recordApiCall("createFile",e.path),this.delegate.createFile(e)}async modifyFile(e){return this.recordApiCall("modifyFile",e.path),this.delegate.modifyFile(e)}async moveFile(e){return this.recordApiCall("moveFile",e.path),this.delegate.moveFile(e)}async upgradeFileContent(e){return this.recordApiCall("upgradeFileContent",e.path),this.delegate.upgradeFileContent(e)}async deleteFile(e,t){return this.recordApiCall("deleteFile",e),this.delegate.deleteFile(e,t)}async getExtensionTemplates(){return this.recordApiCall("getExtensionTemplates"),this.delegate.getExtensionTemplates()}async downloadExtensionTemplate(e,t){return this.recordApiCall("downloadExtensionTemplate",`${e}/${t}`),this.delegate.downloadExtensionTemplate(e,t)}async getDataSources(){return this.recordApiCall("getDataSources"),this.delegate.getDataSources()}async getSettings(e){return this.recordApiCall("getSettings",e?.path),this.delegate.getSettings(e)}async setSettings(e){return this.recordApiCall("setSettings",e.path),this.delegate.setSettings(e)}async probeDataSource(e,t){return this.recordApiCall("probeDataSource",e),this.delegate.probeDataSource(e,t)}async getDataSourceConfig(e,t){return this.recordApiCall("getDataSourceConfig",e),this.delegate.getDataSourceConfig(e,t)}async testDataSource(e){return this.recordApiCall("testDataSource",e.originalDataSource??e.config.name),this.delegate.testDataSource(e)}async createDataSource(e){return this.recordApiCall("createDataSource",e.config.name),this.delegate.createDataSource(e)}async updateDataSource(e){return this.recordApiCall("updateDataSource",e.dataSource),this.delegate.updateDataSource(e)}async deleteDataSource(e){return this.recordApiCall("deleteDataSource",e.dataSource),this.delegate.deleteDataSource(e)}async listDbSchemas(e,t){return this.recordApiCall("listDbSchemas",e),this.delegate.listDbSchemas(e,t)}async listDbTables(e,t){return this.recordApiCall("listDbTables",e),this.delegate.listDbTables(e,t)}async describeDbTable(e,t,n){return this.recordApiCall("describeDbTable",`${e}/${t}`),this.delegate.describeDbTable(e,t,n)}async queryDbDdl(e,t,n){return this.recordApiCall("queryDbDdl",`${e}/${t}`),this.delegate.queryDbDdl(e,t,n)}async executeDbQuery(e){return this.recordApiCall("executeDbQuery",e.dataSource),this.delegate.executeDbQuery(e)}async exportDbQueryData(e){return this.recordApiCall("exportDbQueryData",e.dataSource),this.delegate.exportDbQueryData(e)}async exportDbTableData(e){return this.recordApiCall("exportDbTableData",`${e.dataSource}/${e.tableName}`),this.delegate.exportDbTableData(e)}async executeDbAny(e){return this.recordApiCall("executeDbAny",e.dataSource),this.delegate.executeDbAny(e)}async importDbTableData(e){return this.recordApiCall("importDbTableData",`${e.dataSource}/${e.tableName}`),this.delegate.importDbTableData(e)}async executeScript(e){return this.recordApiCall("executeScript","<temporary-script>"),this.delegate.executeScript(e)}async checkScript(e){return this.recordApiCall("checkScript","<temporary-script>"),this.delegate.checkScript(e)}async refreshCache(){return this.recordApiCall("refreshCache"),this.delegate.refreshCache()}buildViewFileRedirectUrl(e){return this.delegate.buildViewFileRedirectUrl(e)}async getTypeScriptSupportApiLibs(){return this.recordApiCall("getTypeScriptSupportApiLibs"),this.delegate.getTypeScriptSupportApiLibs()}async getJsonSchemaSupport(){return this.recordApiCall("getJsonSchemaSupport"),this.delegate.getJsonSchemaSupport()}async downloadJsonSchema(e){return this.recordApiCall("downloadJsonSchema"),this.delegate.downloadJsonSchema(e)}async getFrontendFrameworksManifest(){return this.recordApiCall("getFrontendFrameworksManifest"),this.delegate.getFrontendFrameworksManifest()}recordApiCall(e,t){this.diagnostics.record({name:e,path:t})}};function Bv(r){return new _d(r)}H();jr();dn();ct();wr();Yt();var el=class extends _t{async execute(){this.task.throwIfAborted();let e=this.options.scope??"both",t=e==="local",n=this.options.refreshAll?await this.context.refreshSyncStatusState({scope:e,forceRefresh:this.options.forceRefresh,rootRemotePath:this.options.rootRemotePath,source:this.options.source,task:this.task}):void 0,o=this.context.getSyncChanges();if(t&&(o=o.filter(a=>a.type!=="conflict"&&lt(a))),this.options.paths?.length){let a=await this.resolveTargetRemotePaths(this.options.paths,t?"mirror-only":"server-backed");o=this.filterChangesByTargets(o,a)}let i=n?.warnings??[];return{changes:o,localChanges:o.filter(a=>lt(a)),remoteChanges:t?[]:o.filter(a=>kr(a)),conflicts:t?[]:o.filter(a=>a.type==="conflict"),...i.length>0?{warnings:i}:{}}}};var jk=b(require("fs"));K();D();H();ct();var Qr=b(require("fs")),Zr=b(require("path")),mm=require("node:util");H();dn();we();F();He();K();ct();Sn();dn();F();K();Pt();var MI=T("sync.file-fetcher"),xI=3,FI=20,II=300,tl=class{constructor(e){this.options=e;let t={};e.maxConcurrency!==void 0&&(t.maxConcurrency=e.maxConcurrency),e.signal&&(t.signal=e.signal),this.runner=new Je(t),this.maxAttemptsPerFile=Math.max(1,e.maxAttemptsPerFile??xI),this.maxRetries=Math.max(0,e.maxRetries??FI),this.retryBaseDelayMs=Math.max(0,e.retryBaseDelayMs??II)}runner;maxAttemptsPerFile;maxRetries;retryBaseDelayMs;retryCount=0;stoppedError;fetchToLocal(e,t){return ht(this.options.signal),this.stoppedError?Promise.reject(this.stoppedError):this.runner.addTask(()=>this.fetchToLocalWithRetry(e,t))}async fetchToLocalWithRetry(e,t){let n;for(let o=1;o<=this.maxAttemptsPerFile;o++){if(ht(this.options.signal),this.stoppedError)throw this.stoppedError;try{let i=await this.options.getContentStream(e);return ht(this.options.signal),await Cn(t,i.stream),i}catch(i){if(i instanceof tr)throw i;if(n=i,!this.shouldRetryContentDownload(i))throw this.stop(i),i;if(o>=this.maxAttemptsPerFile){let s=new Error(`download file content failed: ${e}: ${Zn(i)}`);throw this.stop(s),s}if(!this.consumeRetryBudget()){let s=new Error(`download file content retry budget exhausted after ${this.maxRetries} retries: ${e}: ${Zn(i)}`);throw this.stop(s),s}let a=this.retryBaseDelayMs*o;MI.warn(`content download interrupted, retrying file attempt ${o+1}/${this.maxAttemptsPerFile}, fetch retry budget ${this.retryCount}/${this.maxRetries}: `+e,i),await new Promise(s=>setTimeout(s,a)),ht(this.options.signal)}}throw n instanceof Error?n:new Error(String(n??"content download failed"))}stop(e){this.stoppedError||(this.stoppedError=e instanceof Error?e:new Error(String(e??"content download failed")),this.runner.cancel(this.stoppedError))}consumeRetryBudget(){return this.retryCount>=this.maxRetries?!1:(this.retryCount++,!0)}shouldRetryContentDownload(e){return Df(e)}};var um=b(require("fs")),rl=b(require("path"));H();He();K();Sn();F();Yt();So();function _k(r){let e=new Map(r.serverProjects.map(a=>[a.remotePath,a])),t=DI(r.serverProjects),n=new Map(r.mirrorProjects.map(a=>[a.remotePath,a])),o=AI(r.mirrorProjects),i={scannableProjectPaths:new Set,unavailableProjects:[],renamedProjects:[]};for(let a of r.trackedProjects){let s=n.get(a),c=s?.id,l=e.get(a);if(l){c&&l.id&&c!==l.id?i.unavailableProjects.push(Ok(a,s)):i.scannableProjectPaths.add(a);continue}let p=c&&!o.has(c)?t.get(c):void 0;if(p&&p.remotePath!==a){i.renamedProjects.push({oldProject:s??{name:Lk(a),remotePath:a,id:c},newProject:p});continue}i.unavailableProjects.push(Ok(a,s))}return i}function DI(r){let e=new Map,t=new Set;for(let n of r)if(n.id){if(e.has(n.id)){t.add(n.id);continue}e.set(n.id,n)}for(let n of t)e.delete(n);return e}function AI(r){let e=new Set,t=new Set;for(let n of r)n.id&&(e.has(n.id)&&t.add(n.id),e.add(n.id));return t}function Ok(r,e){return e||{name:Lk(r),remotePath:r}}function Lk(r){let e=r.lastIndexOf("/");return e>=0?r.slice(e+1):r}var OI=8,Nk=100,_I=/^[0-9a-f]{64}$/,Mt=T("sync.detector.remote"),dm=class{detectRuns=0;serverFileInfoRequests=0;serverFileInfoHits=0;serverFileInfoMisses=0;serverFoldersListed=0;serverFoldersSkippedByScope=0;serverFoldersSkippedByWaterline=0;mirrorFoldersScanned=0;mirrorEntriesCollected=0;mirrorContentStatChecks=0;mirrorContentHashChecks=0;changesByType={};changesByKind=LI();scanScope=NI();visitorEvents={};api={total:0,byApi:{},byPath:{},droppedPathKeys:0,recentCallsDropped:0};describeForLog(){return`
67
+ `+JSON.stringify(this.createSnapshot(),null,2).replace(/^\{\n/,"").replace(/\n\}$/,"")}createSnapshot(){return{detectRuns:this.detectRuns,serverFileInfoRequests:this.serverFileInfoRequests,serverFileInfoHits:this.serverFileInfoHits,serverFileInfoMisses:this.serverFileInfoMisses,serverFoldersListed:this.serverFoldersListed,serverFoldersSkippedByScope:this.serverFoldersSkippedByScope,serverFoldersSkippedByWaterline:this.serverFoldersSkippedByWaterline,mirrorFoldersScanned:this.mirrorFoldersScanned,mirrorEntriesCollected:this.mirrorEntriesCollected,mirrorContentStatChecks:this.mirrorContentStatChecks,mirrorContentHashChecks:this.mirrorContentHashChecks,changesByType:{...this.changesByType},changesByKind:{...this.changesByKind},scanScope:{...this.scanScope},visitorEvents:{...this.visitorEvents},api:this.api}}},Dr=class{constructor(e){this.options=e;this.serverRequestRunner=new Je({maxConcurrency:OI,signal:e.task.getAbortSignal()})}diagnostics=Wk();workspaceState;workspaceStateInitialized=!1;expandedServerFolders=new Set;serverRequestRunner;loggedChangeDetailCount=0;changeDetailLimitLogged=!1;loggedChangeDetailKeys=new Set;visitorTasks=[];visitorChangeKeys=new Set;getDiagnostics(e={}){this.diagnostics.api=this.workspaceStateInitialized?this.workspaceState.client.getDiagnostics({reset:e.reset,includeRecentCalls:e.includeApiRecentCalls})??pm():pm();let t=this.diagnostics.createSnapshot();return e.reset&&this.resetDiagnostics(),t}async detect(){this.diagnostics.detectRuns++;let e=Date.now();Mt.debug(`detect start targets=${this.options.targets?.size??"<all>"}`);try{if(this.isSignalAborted()||!await this.initializeWorkspaceState())return[];this.resetChangeDetailLogState();let t=await this.createSnapshot(),n=Date.now(),o=await this.matchSnapshot(t);for(Mt.debug(`match snapshot done elapsed=${Date.now()-n}ms changes=${o.changes.length} renamedFolders=${o.renamedFolders.length}`);await this.expandRenamedFolderChildren(t,o.renamedFolders);)n=Date.now(),o=await this.matchSnapshot(t),Mt.debug(`rematch after folder expansion done elapsed=${Date.now()-n}ms changes=${o.changes.length} renamedFolders=${o.renamedFolders.length}`);let i=o.changes.filter(a=>this.isTargetChange(a));for(let a of i)this.incrementRecordCounter(this.diagnostics.changesByType,a.type),this.recordChangeKind(a),this.dispatchChange(a,t);return await this.waitVisitorTasks(),Mt.debug(`detect diagnostics ${this.describeDiagnosticsForLog()}`),Mt.debug(`detect done elapsed=${Date.now()-e}ms changes=${i.length}`),i}catch(t){throw this.serverRequestRunner.cancel(t),await this.serverRequestRunner.waitAll(),t}}async initializeWorkspaceState(){if(this.workspaceStateInitialized)return!0;let e=this.options.workspace,t=await e.requireServerClient(e.activeServerUrl);if(this.isSignalAborted())return!1;let n=new yt(e.getMirrorRoot()),o=await e.listWorkspaceProjects();return this.isSignalAborted()?!1:(this.workspaceState={client:t,mirror:n,trackedProjects:new Set(o.map(i=>"/"+i))},this.workspaceStateInitialized=!0,!0)}isSignalAborted(){return this.options.signal?.aborted===!0}async createSnapshot(){let e=Date.now(),t={server:new Map,mirror:new Map,skippedServerFolders:new Set,explicitMissingTargets:new Set};return this.diagnostics.scanScope.trackedProjects=this.workspaceState.trackedProjects.size,this.options.targets||(t.projectCompare=await this.computeProjectCompare()),await Promise.all([this.collectMirrorSnapshot(t),this.collectServerSnapshot(t)]),await this.collectMirrorRenameCandidates(t),Mt.debug(`create snapshot done elapsed=${Date.now()-e}ms serverEntries=${t.server.size} mirrorEntries=${t.mirror.size} skippedServerFolders=${t.skippedServerFolders.size} explicitMissingTargets=${t.explicitMissingTargets.size}`),t}async collectServerSnapshot(e){let t=Date.now();if(this.options.targets){let a=await this.filterCloneInProgressPaths(ft(this.options.targets));await Promise.all(a.map(s=>this.collectServerTarget(s,e))),Mt.debug(`collect server targets done elapsed=${Date.now()-t}ms targets=${this.options.targets.size} serverEntries=${e.server.size}`);return}let n=e.projectCompare,o=n?[...n.scannableProjectPaths]:[],i=n?n.renamedProjects.map(a=>a.newProject.remotePath):[];await Promise.all([...o.map(a=>this.collectServerEntry(a,e,!0)),...i.map(a=>this.collectServerEntry(a,e,!1))]),Mt.debug(`collect server projects done elapsed=${Date.now()-t}ms scannableProjects=${o.length} renameTargets=${i.length} trackedProjects=${this.workspaceState.trackedProjects.size} serverEntries=${e.server.size} skippedServerFolders=${e.skippedServerFolders.size}`)}async computeProjectCompare(){let[e,t]=await Promise.all([this.workspaceState.client.getProjects(),this.listMirrorProjectPaths()]),n=e.map(s=>({name:s.name,remotePath:"/"+s.name,id:s.id,desc:s.desc})),o=await Promise.all([...t].map(async s=>{let c=await this.workspaceState.mirror.readMeta(s);return{name:s.slice(1),remotePath:s,id:c?.id,desc:c?.desc}})),i=new Set(await this.filterCloneInProgressPaths([...this.workspaceState.trackedProjects])),a=_k({trackedProjects:i,serverProjects:n,mirrorProjects:o});return this.recordProjectCompareScanScope(a,e.length,t),a}recordProjectCompareScanScope(e,t,n){let o=e.scannableProjectPaths.size+e.renamedProjects.length,i=[...e.scannableProjectPaths].filter(s=>n.has(s)).length+e.renamedProjects.filter(s=>n.has(s.oldProject.remotePath)).length,a=this.diagnostics.scanScope;a.serverProjects=t,a.probedProjects=o,a.missingTrackedProjects=e.unavailableProjects.length,a.skippedUntrackedProjects=Math.max(t-o,0),a.mirrorProjectsScanned=i,a.skippedUntrackedMirrorProjects=[...n].filter(s=>!this.workspaceState.trackedProjects.has(s)).length}async collectServerTarget(e,t){let[n,o]=await Promise.all([this.collectServerEntry(e,t,!0),this.workspaceState.mirror.readMeta(e)]);n||!o||(t.explicitMissingTargets.add(e),await this.collectServerEntry(je(e)??"/",t,!0))}async collectServerEntry(e,t,n){this.options.task.throwIfAborted();let o=await this.getRemoteFileInfo(e);return o?(await this.collectKnownServerEntry(o,t,n),!0):!1}async collectKnownServerEntry(e,t,n){let o=this.createServerEntry(e);if(o.shouldReport=n,o.isFolder||await this.enrichFileContentState(o),t.server.set(o.remotePath,o),!o.isFolder)return;if(!n){t.skippedServerFolders.add(o.remotePath),this.diagnostics.serverFoldersSkippedByScope++;return}if(await this.canSkipServerFolder(o.remotePath,e)){t.skippedServerFolders.add(o.remotePath),this.diagnostics.serverFoldersSkippedByWaterline++,this.dispatchFolderSkipped(o.remotePath,e);return}let i=await this.listRemoteFiles(o.remotePath);await this.dispatchFolderScanned(o.remotePath,e,i),await Promise.all(i.map(a=>this.collectServerChild(a,t)))}async collectServerChild(e,t){await this.collectKnownServerEntry(e,t,!0)}async canSkipServerFolder(e,t){if(this.options.forceRefresh||this.expandedServerFolders.has(e))return!1;let n=await this.workspaceState.mirror.readMeta(e);return!n||n.modifyTime!==t.modifyTime||!await this.workspaceState.mirror.exists(e)?!1:this.hasHealthyDirectMirrorChildren(e)}async hasHealthyDirectMirrorChildren(e){let t;try{t=(await um.promises.readdir(this.workspaceState.mirror.toLocalPath(e),{withFileTypes:!0})).filter(a=>a.name!==J).map(a=>a.name).sort()}catch(i){if(x(i))return Mt.debug(`mirror folder baseline cannot be listed: ${e}`),!1;throw i}let n=await vr(this.workspaceState.mirror.root,rl.posix.join(e,J));if(!n.exists||n.damaged)return!1;let o=Object.keys(n.dotMeta).sort();return t.length===o.length&&t.every((i,a)=>i===o[a])}async enrichFileContentState(e){!this.options.forceRefresh||!e.serverInfo||(e.contentMatchesMirror=await this.getContentMatchesMirrorPath(e,e.remotePath))}async getContentMatchesMirrorPath(e,t){if(!e.serverInfo)return;let n=this.getValidServerHash(e.serverInfo),o=this.getValidServerSize(e.serverInfo);if(!(n===void 0||o===void 0)){try{this.diagnostics.mirrorContentStatChecks++;let i=await um.promises.stat(this.workspaceState.mirror.toLocalPath(t));if(!i.isFile()||i.size!==o)return!1}catch(i){if(x(i))return Mt.debug(`mirror file content cannot be verified during remote detection: ${t}`),!1;throw i}return this.diagnostics.mirrorContentHashChecks++,await jc(this.workspaceState.mirror.toLocalPath(t))===n}}getValidServerHash(e){if(e.hash===void 0||e.hash===null)return;if(typeof e.hash!="string")throw new Error(`invalid file content hash: ${e.path}`);let t=e.hash.trim().toLowerCase();if(!_I.test(t))throw new Error(`invalid file content hash: ${e.path}`);return t}getValidServerSize(e){if(!(e.size===void 0||e.size===null)){if(!Number.isSafeInteger(e.size)||e.size<0)throw new Error(`invalid file content size: ${e.path}`);return e.size}}async collectMirrorSnapshot(e){if(this.options.targets){let i=await this.filterCloneInProgressPaths(ft(this.options.targets));await Promise.all(i.map(a=>this.collectMirrorRootAndSubtree(a,e)));return}let t=e.projectCompare,n=t?[...t.scannableProjectPaths]:[],o=t?t.renamedProjects.map(i=>i.oldProject.remotePath):[];await Promise.all([...n.map(i=>this.collectMirrorRootAndSubtree(i,e)),...o.map(i=>this.collectMirrorRootEntry(i,e))])}async collectMirrorRenameCandidates(e){if(!this.options.targets)return;let t=new Set;for(let i of e.mirror.values())i.meta.id&&t.add(i.meta.id);let n=new Set,o=new Set;for(let i of e.server.values()){let a=i.meta.id;if(!a||t.has(a))continue;n.add(a);let s=rl.posix.dirname(i.remotePath);s!=="/"&&o.add(s)}n.size!==0&&await Promise.all([...o].map(i=>this.collectMirrorDirectMetaCandidates(i,n,e)))}async collectMirrorDirectMetaCandidates(e,t,n){this.options.task.throwIfAborted(),this.diagnostics.mirrorFoldersScanned++;let o=await this.workspaceState.mirror.listDirectMetaChildren(e);await Promise.all(o.map(async i=>{let a=i.meta.id;if(!a||!t.has(a)||n.mirror.has(i.path))return;let[s,c]=await Promise.all([this.workspaceState.mirror.exists(i.path),this.workspaceState.mirror.isFolder(i.path)]);n.mirror.set(i.path,{remotePath:i.path,isFolder:s?c:i.isFolder,meta:i.meta,exists:s}),this.diagnostics.mirrorEntriesCollected++}))}async listMirrorProjectPaths(){let[e,t]=await Promise.all([this.workspaceState.mirror.listDirectChildren("/"),this.workspaceState.mirror.listDirectMetaChildren("/")]);return new Set([...e,...t].map(n=>n.path))}async filterCloneInProgressPaths(e){return(await Promise.all(e.map(async n=>await this.shouldSkipCloneInProgressProject(n)?void 0:n))).filter(n=>n!==void 0)}async shouldSkipCloneInProgressProject(e){if(this.options.visitor)return!1;let t=je(e);if(!t)return!1;let n=await this.workspaceState.mirror.isCloneInProgress(t);return n&&Mt.debug(`skip clone in-progress mirror project: ${t}`),n}async collectMirrorRootAndSubtree(e,t){if(e==="/"){await this.collectMirrorSubtree(e,t);return}(await this.collectMirrorRootEntry(e,t))?.isFolder&&await this.collectMirrorSubtree(e,t)}async collectMirrorRootEntry(e,t){let[n,o,i]=await Promise.all([this.workspaceState.mirror.readMeta(e),this.workspaceState.mirror.exists(e),this.workspaceState.mirror.isFolder(e)]);if(n||o){let a={remotePath:e,isFolder:o?i:!!n?.type&&n.type!=="file",meta:n??{},exists:o};return t.mirror.set(e,a),this.diagnostics.mirrorEntriesCollected++,a}}async collectMirrorSubtree(e,t){this.options.task.throwIfAborted(),this.diagnostics.mirrorFoldersScanned++;let[n,o]=await Promise.all([this.workspaceState.mirror.listDirectChildren(e),this.workspaceState.mirror.listDirectMetaChildren(e)]),i=new Map(o.map(a=>[a.path,a]));await Promise.all(n.map(async a=>{let c=i.get(a.path)?.meta;(c||!a.isFolder)&&(t.mirror.set(a.path,{remotePath:a.path,isFolder:a.isFolder,meta:c??{},exists:!0}),this.diagnostics.mirrorEntriesCollected++),a.isFolder&&await this.collectMirrorSubtree(a.path,t)}));for(let a of o)t.mirror.has(a.path)||(t.mirror.set(a.path,{remotePath:a.path,isFolder:a.isFolder,meta:a.meta,exists:!1}),this.diagnostics.mirrorEntriesCollected++)}async matchSnapshot(e){let t=new Set,n=new Set,o=[],i=[];return await this.matchByPath(e,t,n,o,i),await this.matchById(e,t,n,o,i),this.addUnmatchedChanges(e,t,n,o),{changes:o,renamedFolders:i}}async matchByPath(e,t,n,o,i){let a=this.groupMirrorEntriesById(e.mirror);for(let s of e.server.values()){let c=e.mirror.get(s.remotePath);if(!c)continue;t.add(s.remotePath),n.add(c.remotePath);let l=this.findUnmatchedMirrorEntryById(a,s.meta.id,n);if(!s.meta.id||s.meta.id!==c.meta.id){if(l){if(!c.meta.id){await this.addRemoteRenameChange(e,s,l,n,o,i);continue}n.add(l.remotePath),this.addChange(o,this.createConflictChange(s,l.remotePath),e);continue}if(s.meta.id&&!c.meta.id){this.addChange(o,this.createMirrorRecoveryChange(s,c),e);continue}this.addChange(o,this.createConflictChange(s),e);continue}if(l){await this.addRemoteRenameChange(e,s,l,n,o,i);continue}this.addComparedChange(s,c,o,e)}}async matchById(e,t,n,o,i){let a=this.indexUniqueById(e.server,t),s=this.indexUniqueById(e.mirror,n);for(let c of e.server.values()){if(t.has(c.remotePath)||!c.meta.id)continue;let l=s.get(c.meta.id);if(!(!l||n.has(l.remotePath))&&a.get(c.meta.id)===c){if(t.add(c.remotePath),c.isFolder!==l.isFolder){n.add(l.remotePath),this.addChange(o,this.createConflictChange(c,l.remotePath),e);continue}await this.addRemoteRenameChange(e,c,l,n,o,i)}}}async addRemoteRenameChange(e,t,n,o,i,a){o.add(n.remotePath);let s=await this.createRenamedChange(t,n);this.addChange(i,s,e),t.isFolder&&a.push(s)}addUnmatchedChanges(e,t,n,o){this.addUnavailableTrackedProjectChanges(e,o);for(let i of e.server.values())t.has(i.remotePath)||i.shouldReport===!1||!this.isUnmatchedChangeInTargetSubtree(i.remotePath)||this.addChange(o,this.createRemoteChange(i,"remoteAdded"),e);for(let i of e.mirror.values())n.has(i.remotePath)||this.isUnmatchedChangeInTargetSubtree(i.remotePath)&&(!this.isUnderExplicitMissingTarget(e,i.remotePath)&&this.isUnderSkippedServerFolder(e,i.remotePath)||this.addChange(o,this.createRemoteChange(i,"remoteDeleted"),e))}addUnavailableTrackedProjectChanges(e,t){for(let n of e.projectCompare?.unavailableProjects??[])this.addChange(t,this.createProjectUnavailableChange(n),e)}async expandRenamedFolderChildren(e,t){let n=!1;return await Promise.all(t.map(async o=>{!o.isFolder||this.expandedServerFolders.has(o.remotePath)||this.isProjectRootRenameChange(o)||(this.expandedServerFolders.add(o.remotePath),e.skippedServerFolders.delete(o.remotePath),await this.collectServerEntry(o.remotePath,e,!0),n=!0)})),n}isProjectRootRenameChange(e){return!!e.oldRemotePath&&je(e.remotePath)===e.remotePath&&je(e.oldRemotePath)===e.oldRemotePath}addComparedChange(e,t,n,o){if(e.isFolder!==t.isFolder){this.addChange(n,this.createConflictChange(e),o);return}let i=this.isRemoteMetaChanged(t.meta,e.meta)||this.isRemoteContentBaselineChanged(t,e,e.contentMatchesMirror),a=!e.isFolder&&(t.exists===!1||this.isRemoteFileContentChanged(t,e,e.contentMatchesMirror,i));(a||i)&&this.addChange(n,this.createRemoteChange(e,"remoteModified",{contentChanged:a,metaChanged:i}),o)}indexUniqueById(e,t){let n=new Map,o=new Set;for(let i of e.values()){let a=i.meta.id;if(!(!a||t.has(i.remotePath))){if(n.has(a)){o.add(a);continue}n.set(a,i)}}for(let i of o)n.delete(i);return n}groupMirrorEntriesById(e){let t=new Map;for(let n of e.values()){let o=n.meta.id;if(!o)continue;let i=t.get(o);i?i.push(n):t.set(o,[n])}return t}findUnmatchedMirrorEntryById(e,t,n){if(!t)return;let o=e.get(t);if(!o)return;let i;for(let a of o)if(!n.has(a.remotePath)){if(i)return;i=a}return i}isUnderSkippedServerFolder(e,t){for(let n of e.skippedServerFolders)if(t!==n&&Q(t,n))return!0;return!1}isUnmatchedChangeInTargetSubtree(e){let t=this.options.targets;if(!t||t.size===0)return!0;for(let n of t)if(Q(e,n))return!0;return!1}isUnderExplicitMissingTarget(e,t){for(let n of e.explicitMissingTargets)if(Q(t,n))return!0;return!1}isTargetChange(e){let t=this.options.targets;return!t||t.size===0?!0:[...t].some(n=>Q(e.remotePath,n)||Q(n,e.remotePath)||!!e.oldRemotePath&&(Q(e.oldRemotePath,n)||Q(n,e.oldRemotePath)))}async getRemoteFileInfo(e){this.diagnostics.serverFileInfoRequests++;try{let t=await this.serverRequestRunner.addTask(()=>this.workspaceState.client.getFile(e));return this.diagnostics.serverFileInfoHits++,t}catch(t){if(this.workspaceState.client.isNotFoundError(t)){Mt.debug(`remote file disappeared during remote change detection: ${e}`),this.diagnostics.serverFileInfoMisses++;return}throw t}}async listRemoteFiles(e){return this.diagnostics.serverFoldersListed++,this.serverRequestRunner.addTask(()=>this.workspaceState.client.listFiles(e))}createServerEntry(e){return{remotePath:e.path,isFolder:!!e.isFolder,meta:Jt(e),contentMeta:Jt(e,{writeContentInfo:!0}),serverInfo:e}}isRemoteMetaChanged(e,t){return!yo(e,t)}isRemoteContentBaselineChanged(e,t,n){return!t.contentMeta||t.isFolder||n===!1||t.contentMeta.hash===void 0||t.contentMeta.size===void 0?!1:n===!0&&((e.meta.revision??0)!==(t.meta.revision??0)||(e.meta.modifyTime??0)!==(t.meta.modifyTime??0))?!0:this.hasCompleteContentBaseline(e.meta)?e.meta.hash!==t.contentMeta.hash||e.meta.size!==t.contentMeta.size?n===!0:(e.meta.revision??0)!==(t.meta.revision??0)||(e.meta.modifyTime??0)!==(t.meta.modifyTime??0):!0}isRemoteFileContentChanged(e,t,n,o){return n===!1?!0:n===!0?!1:t.contentMeta&&this.hasCompleteContentBaseline(e.meta)&&t.contentMeta.hash!==void 0&&t.contentMeta.size!==void 0?e.meta.hash!==t.contentMeta.hash||e.meta.size!==t.contentMeta.size:t.contentMeta?.hash!==void 0&&t.contentMeta.size!==void 0?(e.meta.revision??0)!==(t.meta.revision??0)||(e.meta.modifyTime??0)!==(t.meta.modifyTime??0):(e.meta.revision??0)!==(t.meta.revision??0)?!0:!o&&(e.meta.modifyTime??0)!==(t.meta.modifyTime??0)}hasCompleteContentBaseline(e){return e.hash!==void 0&&e.size!==void 0}resetChangeDetailLogState(){this.loggedChangeDetailCount=0,this.changeDetailLimitLogged=!1,this.loggedChangeDetailKeys.clear(),this.visitorChangeKeys.clear(),this.visitorTasks.length=0}addChange(e,t,n){e.push(t),this.logChangeDetail(t,n)}dispatchChange(e,t){if(!this.options.visitor?.onChange||!this.isTargetChange(e))return;let n=this.getChangeDetailLogKey(e);if(this.visitorChangeKeys.has(n))return;this.visitorChangeKeys.add(n),this.incrementRecordCounter(this.diagnostics.visitorEvents,"change");let o={change:e,serverEntry:t.server.get(e.remotePath),mirrorEntry:t.mirror.get(e.oldRemotePath??e.remotePath)};this.addVisitorTask(()=>this.options.visitor?.onChange?.(o))}async dispatchFolderScanned(e,t,n){if(!this.options.visitor?.onFolderScanned)return;this.incrementRecordCounter(this.diagnostics.visitorEvents,"folderScanned");let o=await this.workspaceState.mirror.listDirectMetaChildren(e),i={remotePath:e,folderInfo:t,children:n,mirrorChildMetas:new Map(o.map(a=>[rl.posix.basename(a.path),a.meta])),serverChildPaths:new Set(n.map(a=>a.path))};this.addVisitorTask(()=>this.options.visitor?.onFolderScanned?.(i))}dispatchFolderSkipped(e,t){if(!this.options.visitor?.onFolderSkipped)return;this.incrementRecordCounter(this.diagnostics.visitorEvents,"folderSkipped");let n={remotePath:e,folderInfo:t,reason:"waterlineUnchanged"};this.addVisitorTask(()=>this.options.visitor?.onFolderSkipped?.(n))}addVisitorTask(e){this.visitorTasks.push(()=>Promise.resolve(e()))}async waitVisitorTasks(){for(let e of this.visitorTasks)await e()}logChangeDetail(e,t){if(!Mt.isDebugEnabled()||!this.isTargetChange(e))return;let n=this.getChangeDetailLogKey(e);if(!this.loggedChangeDetailKeys.has(n)){if(this.loggedChangeDetailKeys.add(n),this.loggedChangeDetailCount>=Nk){this.changeDetailLimitLogged||(Mt.debug(`change detail ... displayed=${Nk} further changes omitted`),this.changeDetailLimitLogged=!0);return}this.loggedChangeDetailCount++,Mt.debug(`change detail ${this.loggedChangeDetailCount} ${this.describeChange(e,t)}`)}}getChangeDetailLogKey(e){return`${e.type}|${e.remotePath}|${e.oldRemotePath??""}`}describeChange(e,t){let n=t.server.get(e.remotePath),o=t.mirror.get(e.oldRemotePath??e.remotePath);return[`type=${e.type}`,`remotePath=${e.remotePath}`,`oldRemotePath=${e.oldRemotePath??"<none>"}`,`fileId=${e.fileId??"<none>"}`,`isFolder=${e.isFolder}`,`contentChanged=${e.contentChanged}`,`metaChanged=${e.metaChanged}`,`serverRevision=${this.formatLogValue(n?.meta.revision)}`,`mirrorRevision=${this.formatLogValue(o?.meta.revision)}`,`serverModifyTime=${this.formatLogValue(n?.meta.modifyTime)}`,`mirrorModifyTime=${this.formatLogValue(o?.meta.modifyTime)}`,`serverModifier=${this.formatLogValue(n?.meta.modifier)}`,`mirrorModifier=${this.formatLogValue(o?.meta.modifier)}`].join(" ")}formatLogValue(e){return e===void 0?"<none>":String(e)}describeDiagnosticsForLog(){return this.diagnostics.api=this.workspaceState.client.getDiagnostics()??pm(),this.diagnostics.describeForLog()}recordChangeKind(e){switch(e.type){case"remoteModified":e.contentChanged?this.diagnostics.changesByKind.contentModified++:e.metaChanged&&this.diagnostics.changesByKind.metaOnlyModified++;break;case"remoteDeleted":this.diagnostics.changesByKind.remoteDeleted++;break;case"remoteProjectUnavailable":this.diagnostics.changesByKind.remoteProjectUnavailable++;break;case"remoteAdded":this.diagnostics.changesByKind.remoteAdded++;break;case"remoteRenamed":this.diagnostics.changesByKind.remoteRenamed++;break;case"conflict":this.diagnostics.changesByKind.conflict++;break;default:break}}incrementRecordCounter(e,t){e[t]=(e[t]??0)+1}resetDiagnostics(){this.diagnostics=Wk()}createRemoteChange(e,t,n){return{path:Re(e.remotePath),remotePath:e.remotePath,...e.meta.id!==void 0?{fileId:e.meta.id}:{},type:t,isFolder:e.isFolder,contentChanged:n?.contentChanged??(t!=="remoteDeleted"&&!e.isFolder),metaChanged:n?.metaChanged??t!=="remoteDeleted",...t==="remoteDeleted"?{}:{modifier:e.meta.modifier,modifyTime:e.meta.modifyTime}}}createProjectUnavailableChange(e){return{path:Re(e.remotePath),remotePath:e.remotePath,...e.id!==void 0?{fileId:e.id}:{},type:"remoteProjectUnavailable",isFolder:!0,contentChanged:!1,metaChanged:!1}}async createRenamedChange(e,t){let n=e.remotePath===t.remotePath?e.contentMatchesMirror:this.options.forceRefresh?await this.getContentMatchesMirrorPath(e,t.remotePath):void 0,o=this.isRemoteMetaChanged(t.meta,e.meta)||this.isRemoteContentBaselineChanged(t,e,n),i=!e.isFolder&&this.isRemoteFileContentChanged(t,e,n,o);return{path:Re(e.remotePath),remotePath:e.remotePath,...e.meta.id!==void 0?{fileId:e.meta.id}:{},oldPath:Re(t.remotePath),oldRemotePath:t.remotePath,type:"remoteRenamed",isFolder:e.isFolder,contentChanged:i,metaChanged:o,modifier:e.meta.modifier,modifyTime:e.meta.modifyTime}}createMirrorRecoveryChange(e,t){return this.createRemoteChange(e,"remoteModified",{contentChanged:this.isMirrorRecoveryContentChanged(e,t),metaChanged:!0})}isMirrorRecoveryContentChanged(e,t){return e.isFolder?!1:t?t.exists===!1?!0:this.isRemoteFileContentChanged(t,e,e.contentMatchesMirror,!0):e.contentMatchesMirror!==!0}createConflictChange(e,t){return{path:Re(e.remotePath),remotePath:e.remotePath,...e.meta.id!==void 0?{fileId:e.meta.id}:{},oldPath:t?Re(t):void 0,oldRemotePath:t,type:"conflict",isFolder:e.isFolder,contentChanged:!e.isFolder,metaChanged:!0,modifier:e.meta.modifier,modifyTime:e.meta.modifyTime}}};function Wk(){return new dm}function LI(){return{contentModified:0,metaOnlyModified:0,remoteDeleted:0,remoteProjectUnavailable:0,remoteAdded:0,remoteRenamed:0,conflict:0}}function NI(){return{trackedProjects:0,serverProjects:0,probedProjects:0,missingTrackedProjects:0,skippedUntrackedProjects:0,mirrorProjectsScanned:0,skippedUntrackedMirrorProjects:0}}function pm(){return{total:0,byApi:{},byPath:{},droppedPathKeys:0,recentCallsDropped:0}}wr();Yt();var WI=4,Ce=T("sync.fetch"),hm=class extends bi{projectTargets=0;resourceTargets=0;countedResources=0;remoteResourceCountRequests=0;mirrorResourceCountRequests=0;contentDownloadsScheduled=0;mirrorFilesMoved=0;mirrorResourcesRemoved=0;mirrorPhysicalChildrenRemoved=0;mirrorMetaWrites=0;downloaded=0;deleted=0;skippedFolders=0;updatedMetas=0;detector;setDetector(e){this.detector=e}createSnapshot(){return{runs:this.runs,durationMs:this.durationMs,projectTargets:this.projectTargets,resourceTargets:this.resourceTargets,countedResources:this.countedResources,remoteResourceCountRequests:this.remoteResourceCountRequests,mirrorResourceCountRequests:this.mirrorResourceCountRequests,contentDownloadsScheduled:this.contentDownloadsScheduled,mirrorFilesMoved:this.mirrorFilesMoved,mirrorResourcesRemoved:this.mirrorResourcesRemoved,mirrorPhysicalChildrenRemoved:this.mirrorPhysicalChildrenRemoved,mirrorMetaWrites:this.mirrorMetaWrites,downloaded:this.downloaded,deleted:this.deleted,skippedFolders:this.skippedFolders,updatedMetas:this.updatedMetas,...this.detector?{detector:this.detector}:{},api:this.api}}},Un=class extends We{mirror;fileFetcher;fetchResult;diagnostics=Uk();downloadTask;downloadTotal=0;constructor(e,t){super(e,t),this.mirror=this.createMirrorStore(),this.fileFetcher=new tl({maxConcurrency:WI,signal:this.task.getAbortSignal(),getContentStream:async n=>{ht(this.task.getAbortSignal());let o=await this.getApiClient();return ht(this.task.getAbortSignal()),o.getFileContentStream(n)}}),this.fetchResult={mirrorRoot:this.mirrorRoot,downloaded:[],deleted:[],skippedFolders:[],updatedMetas:[]}}execute(){return this.fetchTrackedMirror()}getDiagnostics(e={}){this.syncResultDiagnostics();let t=this.diagnostics.createSnapshot();return e.reset&&this.resetDiagnostics(),t}async fetchTrackedMirror(){let e=this.diagnostics.startRun(),t=!1;Ce.info("fetch start: {0}",this.createFetchScopeLog()),this.task.start(100);let n=this.task.subTaskMonitor(5),o=this.task.subTaskMonitor(5),i=this.task.subTaskMonitor(90),a=[];if(this.hasKnownChanges(this.options.changes)){n.start(1),Ce.info("fetch prepare start"),this.task.throwIfAborted(),await Qr.promises.mkdir(this.mirrorRoot,{recursive:!0}),n.step(1),Ce.info("fetch prepare done: knownChanges={0}",this.options.changes.length),this.downloadTask=i;try{return await this.fetchKnownChanges(o),this.finishRunDiagnostics(e),t=!0,this.logFetchDone(),this.fetchResult}finally{t||this.finishRunDiagnostics(e),this.downloadTask=void 0,this.downloadTotal=0}}n.start(1);let s=this.resolveFetchProjectPaths(),c=await this.getApiClient(),l=c.getProjects();Ce.info("fetch prepare start"),this.task.throwIfAborted(),await Qr.promises.mkdir(this.mirrorRoot,{recursive:!0});let p=this.createWorkspaceStore(this.mirror).listProjectPaths(),[d,g,m]=await Promise.all([l,this.readMirrorChildMetas("/"),p]),f=new Set(m),y=new Set([...d.map(C=>"/"+C.name),...f]);await this.removeMissingMirrorChildren("/",y,g),s&&(a=await this.markNewFetchProjects(s)),n.step(1),Ce.info("fetch prepare done: serverProjects={0}",d.length),this.downloadTask=i;try{if(s){this.diagnostics.projectTargets=s.length,Ce.info("fetch count resources start: {0}",this.createFetchScopeLog());let S=await this.countFetchResources(o,()=>this.countRemoteFiles(s));return Ce.info("fetch count resources done: resources={0}",S),this.startFetchProgress(S),s.length===0&&this.completeDownloadProgress(),Ce.info("fetch mirror update start: targets={0}",s.length),await this.fetchWithRemoteChangeDetector({targets:new Set(s),forceRefresh:this.options.forceRefresh===!0}),this.completeDownloadProgress(),await this.clearNewFetchProjectMarkers(a),Ce.info("fetch mirror update done: targets={0}",s.length),this.captureApiDiagnostics(c),this.finishRunDiagnostics(e),t=!0,this.logFetchDone(),this.fetchResult}let C=await this.resolveTargetRemotePaths(this.options.paths);if(C){let S=ft(C);this.diagnostics.resourceTargets=S.length,Ce.info("fetch count resources start: {0}",this.createFetchScopeLog());let k=await this.countFetchResources(o,()=>(this.diagnostics.mirrorResourceCountRequests++,this.mirror.countMetaResources(S)));return Ce.info("fetch count resources done: resources={0}",k),this.startFetchProgress(k),S.length===0&&this.completeDownloadProgress(),Ce.info("fetch mirror update start: targets={0}",S.length),await this.fetchWithRemoteChangeDetector({targets:new Set(S),forceRefresh:!1}),this.completeDownloadProgress(),Ce.info("fetch mirror update done: targets={0}",S.length),this.captureApiDiagnostics(c),this.finishRunDiagnostics(e),t=!0,this.logFetchDone(),this.fetchResult}let v=d.filter(S=>f.has("/"+S.name)),P=v.map(S=>"/"+S.name);a=await this.markNewFetchProjects(P),this.diagnostics.projectTargets=P.length,Ce.info("fetch count resources start: {0}",this.createFetchScopeLog());let h=await this.countFetchResources(o,()=>this.countRemoteFiles(P));return Ce.info("fetch count resources done: resources={0}",h),this.startFetchProgress(h),v.length===0&&this.completeDownloadProgress(),Ce.info("fetch mirror update start: targets={0}",v.length),await this.fetchWithRemoteChangeDetector({forceRefresh:!1}),this.completeDownloadProgress(),await this.clearNewFetchProjectMarkers(a),Ce.info("fetch mirror update done: targets={0}",v.length),this.captureApiDiagnostics(c),this.finishRunDiagnostics(e),t=!0,this.logFetchDone(),this.fetchResult}finally{t||(await this.cleanupNewFetchProjectsAfterFailure(a),this.finishRunDiagnostics(e)),this.downloadTask=void 0,this.downloadTotal=0}}async markNewFetchProjects(e){let t=[];try{for(let n of e){let[o,i]=await Promise.all([this.mirror.isCloneInProgress(n),this.mirror.exists(n)]);!o&&i||(o&&(await this.mirror.removePath(n),await this.mirror.removeMeta(n)),t.push(n),await this.mirror.markCloneInProgress(n))}return t}catch(n){throw await this.cleanupNewFetchProjectsAfterFailure(t),n}}async clearNewFetchProjectMarkers(e){await Promise.all(e.map(t=>this.mirror.clearCloneInProgress(t)))}async cleanupNewFetchProjectsAfterFailure(e){if(e.length!==0)try{await Promise.all(e.map(async t=>{await this.mirror.removePath(t),await this.mirror.removeMeta(t)}))}catch(t){Ce.warn(`fetch failed, cleanup new mirror projects failed: ${e.join(", ")}`,t)}}createFetchScopeLog(){return this.hasKnownChanges(this.options.changes)?`changes=${this.options.changes.length}`:this.options.projectNames?`projects=${this.options.projectNames.join(", ")}`:this.options.paths?`paths=${this.options.paths.join(", ")}`:"<tracked>"}logFetchDone(){this.syncResultDiagnostics(),Ce.info("fetch done: downloaded={0} deleted={1} updatedMetas={2} skippedFolders={3}",this.fetchResult.downloaded.length,this.fetchResult.deleted.length,this.fetchResult.updatedMetas.length,this.fetchResult.skippedFolders.length),Ce.debug(`fetch diagnostics ${this.diagnostics.describeForLog()}`)}resolveFetchProjectPaths(){if(!this.options.projectNames){$(!this.options.forceRefresh,"FetchOptions.forceRefresh can only be used with FetchOptions.projectNames");return}return $(!this.options.paths,"FetchOptions.projectNames and FetchOptions.paths cannot be used together"),ft(new Set(this.options.projectNames.map(e=>Et(e))))}startFetchProgress(e){this.downloadTotal=Math.max(e,1),this.progressTask.start(this.downloadTotal)}async countFetchResources(e,t){e.start(1);let n=await t();return this.diagnostics.countedResources+=n,e.step(1),n}completeDownloadProgress(){this.progressTask.progress(this.downloadTotal||1)}stepFetchProgress(){this.progressTask.step(1)}get progressTask(){return this.downloadTask??this.task}async countRemoteFiles(e){let t=await this.getApiClient();return this.diagnostics.remoteResourceCountRequests+=e.length,(await Promise.all(e.map(o=>t.countFiles(o)))).reduce((o,i)=>o+i,0)}async fetchWithRemoteChangeDetector(e){let t=[],n=[],o=new Map,i=e.targets&&e.targets.size>0?Ei([...e.targets]):void 0,a=new Dr({workspace:this.context,targets:e.targets,task:this.progressTask,forceRefresh:e.forceRefresh,visitor:{onFolderScanned:c=>this.prepareScannedFolder(c,n),onFolderSkipped:c=>this.applySkippedFolder(c),onChange:c=>{if(this.isActionableFetchChange(c.change,i))return this.applyRemoteChange(c,t,o)}}});await a.detect(),this.diagnostics.setDetector(a.getDiagnostics());let s=(await Promise.all(t)).filter(c=>c instanceof Error);if(s.length>0)throw s[0];await this.writeScannedFolderMetas(n,o)}async fetchKnownChanges(e){let t=this.getKnownFetchChanges();this.diagnostics.resourceTargets=ft(new Set(this.getKnownChangeTargetRemotePaths(t))).length,Ce.info("fetch count resources start: {0}",this.createFetchScopeLog());let n=await this.countFetchResources(e,async()=>t.length);if(Ce.info("fetch count resources done: resources={0}",n),this.startFetchProgress(n),t.length===0){this.completeDownloadProgress();return}Ce.info("fetch mirror update start: changes={0}",t.length);let o=await this.getApiClient(),i=[],a=new Map;for(let c of t)await this.applyKnownRemoteChange(c,o,i,a);let s=(await Promise.all(i)).filter(c=>c instanceof Error);if(s.length>0)throw s[0];this.completeDownloadProgress(),this.captureApiDiagnostics(o),Ce.info("fetch mirror update done: changes={0}",t.length)}getKnownFetchChanges(){return Aa(this.options.changes??[]).filter(e=>!sm(e))}async applyKnownRemoteChange(e,t,n,o){if(e.type==="remoteDeleted"){await this.removeMirrorResource(e.oldRemotePath??e.remotePath),this.stepFetchProgress();return}let i=await this.getKnownRemoteFileInfo(t,e.remotePath);if(!i){await this.removeMirrorResource(e.remotePath),this.stepFetchProgress();return}if(e.type==="remoteRenamed"){await this.applyRemoteRenamedChange(e,i,n,o);return}if(e.type==="conflict"){await this.applyRemoteConflictChange(e,i,n,o);return}await this.applyRemotePresentChange(e,i,n,o)}async getKnownRemoteFileInfo(e,t){try{return await e.getFile(t)}catch(n){if(e.isNotFoundError(n)){Ce.debug(`known remote change target disappeared before fetch: ${t}`);return}throw n}}isActionableFetchChange(e,t){return sm(e)?!1:!t||t(e)}async prepareScannedFolder(e,t){this.task.throwIfAborted(),await Qr.promises.mkdir(this.mirror.toLocalPath(e.remotePath),{recursive:!0}),t.push(e)}async writeScannedFolderMetas(e,t){for(let n of e)await this.writeMirrorChildMetas(n.remotePath,n.mirrorChildMetas,n.children.map(o=>t.get(o.path)??o),n.serverChildPaths)&&this.addUpdatedMeta(n.remotePath),await this.removeMissingMirrorPhysicalChildren(n.remotePath,n.serverChildPaths)}async applySkippedFolder(e){this.addSkippedFolder(e.remotePath),await this.completeSkippedFolderProgress(e.remotePath)}async applyRemoteChange(e,t,n){let o=e.change;if(o.type==="remoteDeleted"){await this.removeMirrorResource(o.oldRemotePath??o.remotePath),this.stepFetchProgress();return}if(o.type==="remoteRenamed"){await this.applyRemoteRenamedChange(o,e.serverEntry?.serverInfo,t,n);return}if(o.type==="conflict"){let i=e.serverEntry?.serverInfo;$(i,`remote conflict missing server entry: ${o.remotePath}`),await this.applyRemoteConflictChange(o,i,t,n);return}if(e.serverEntry?.serverInfo){await this.applyRemotePresentChange(o,e.serverEntry.serverInfo,t,n);return}this.stepFetchProgress()}async applyRemoteConflictChange(e,t,n,o){if(e.oldRemotePath&&!t.isFolder&&e.contentChanged===!1){if(await this.moveMirrorFile(e.oldRemotePath,e.remotePath)){await this.removeMirrorMetaIfReadable(e.oldRemotePath),this.addDeleted(e.oldRemotePath),await this.writeMirrorMetaIfChanged(t,await this.mirror.readMeta(t.path)),this.stepFetchProgress();return}await this.removeMirrorResource(e.oldRemotePath),await this.removeMirrorResource(e.remotePath),await this.applyRemotePresentChange(e,t,n,o,!0);return}if(e.oldRemotePath&&await this.removeMirrorResource(e.oldRemotePath),t.isFolder||e.contentChanged!==!1){await this.removeMirrorResource(e.remotePath),await this.applyRemotePresentChange(e,t,n,o);return}await this.applyRemotePresentChange(e,t,n,o,!t.isFolder&&!await this.mirror.exists(e.remotePath))}async applyRemoteRenamedChange(e,t,n,o){if(!e.oldRemotePath){if(t){await this.applyRemotePresentChange(e,t,n,o);return}this.stepFetchProgress();return}if(t&&!t.isFolder&&e.contentChanged===!1&&await this.moveMirrorFile(e.oldRemotePath,e.remotePath)){await this.removeMirrorMetaIfReadable(e.oldRemotePath),this.addDeleted(e.oldRemotePath),await this.writeMirrorMetaIfChanged(t,await this.mirror.readMeta(t.path)),this.stepFetchProgress();return}if(await this.removeMirrorResource(e.oldRemotePath),t){await this.applyRemotePresentChange(e,t,n,o);return}this.stepFetchProgress()}async applyRemotePresentChange(e,t,n,o,i=!1){if(t.isFolder){await this.applyRemoteFolder(t),this.stepFetchProgress();return}if(!i&&e.contentChanged===!1){await this.writeMirrorMetaIfChanged(t,await this.mirror.readMeta(t.path)),this.stepFetchProgress();return}this.addPendingDownload(n,this.fetchMirrorFile(t).then(a=>(o.set(a.path,a),this.writeMirrorMetaIfChanged(a,void 0))).finally(()=>this.stepFetchProgress()))}async applyRemoteFolder(e){this.task.throwIfAborted(),await Qr.promises.mkdir(this.mirror.toLocalPath(e.path),{recursive:!0}),await this.writeMirrorMetaIfChanged(e,await this.mirror.readMeta(e.path))}addPendingDownload(e,t){this.diagnostics.contentDownloadsScheduled++,e.push(t.then(()=>{},n=>n instanceof Error?n:new Error(String(n??"fetch download failed"))))}async completeSkippedFolderProgress(e){let t=Math.max(await this.mirror.countMetaResources([e])-1,0);t>0&&this.progressTask.step(t)}async fetchMirrorFile(e){let t=this.mirror.toLocalPath(e.path),n=await this.fileFetcher.fetchToLocal(e.path,t),o={...e,revision:n.revision??e.revision,modifyTime:n.modifyTime??e.modifyTime};return this.addDownloaded(e.path),o}async readMirrorChildMetas(e){let t=await Ra(this.mirror.root,Zr.posix.join(e,J),{strict:!1});return new Map(Object.entries(t))}async writeMirrorMetaIfChanged(e,t){this.isMirrorMetaSame(t,e)||(await this.mirror.writeMeta(e,this.task),this.diagnostics.mirrorMetaWrites++)}isMirrorMetaSame(e,t){return e!==void 0&&(0,mm.isDeepStrictEqual)(e,Jt(t,{writeContentInfo:!0}))}async writeMirrorChildMetas(e,t,n,o){let i={};for(let[c,l]of t)(!o||o.has(Zr.posix.join(e,c)))&&(i[c]=l);for(let c of n)i[Zr.posix.basename(c.path)]=Jt(c,{writeContentInfo:!0});let a=Zr.posix.join(e,J),s=await vr(this.mirror.root,a);return s.exists&&!s.damaged&&(0,mm.isDeepStrictEqual)(i,Object.fromEntries(t))?!1:(await Wc(this.mirror.root,a,i),!0)}async removeMissingMirrorChildren(e,t,n){let o={},i=[...n.keys()].map(a=>({name:a,path:Zr.posix.join(e,a)})).filter(a=>!t.has(a.path));await Promise.all(i.map(a=>this.mirror.removePath(a.path)));for(let a of i)o[a.name]=void 0,this.addDeleted(a.path);Object.keys(o).length>0&&await this.mirror.patchMeta(e,o,this.task),await this.removeMissingMirrorPhysicalChildren(e,t)}async removeMissingMirrorPhysicalChildren(e,t){let n=this.mirror.toLocalPath(e),o;try{o=await Qr.promises.readdir(n,{withFileTypes:!0})}catch(a){if(x(a)){Ce.debug(`mirror folder physical children cannot be listed: ${e}`);return}throw a}let i=o.filter(a=>a.name!==J).map(a=>Zr.posix.join(e,a.name)).filter(a=>!t.has(a));await Promise.all(i.map(a=>this.mirror.removePath(a))),this.diagnostics.mirrorPhysicalChildrenRemoved+=i.length;for(let a of i)this.addDeleted(a)}async removeMirrorResource(e){await Promise.all([this.mirror.removePath(e),this.removeMirrorMetaIfReadable(e)]),this.diagnostics.mirrorResourcesRemoved++,this.addDeleted(e)}async removeMirrorMetaIfReadable(e){try{await this.mirror.removeMeta(e)}catch(t){if(t instanceof Si){Ce.debug(`skip removing mirror meta from damaged .meta during fetch: ${e}`,t);return}throw t}}async moveMirrorFile(e,t){let n=this.mirror.toLocalPath(e),o=this.mirror.toLocalPath(t);try{return this.task.throwIfAborted(),await Qr.promises.mkdir(Zr.dirname(o),{recursive:!0}),await Qr.promises.rm(o,{force:!0,recursive:!0}),await Qr.promises.rename(n,o),this.diagnostics.mirrorFilesMoved++,!0}catch(i){if(x(i))return Ce.debug(`mirror file cannot be moved during remote rename: ${e} -> ${t}`),!1;throw i}}addDownloaded(e){this.addUniqueResultPath(this.fetchResult.downloaded,e)}addDeleted(e){this.addUniqueResultPath(this.fetchResult.deleted,e)}addSkippedFolder(e){this.addUniqueResultPath(this.fetchResult.skippedFolders,e)}addUpdatedMeta(e){this.addUniqueResultPath(this.fetchResult.updatedMetas,e)}addUniqueResultPath(e,t){e.includes(t)||e.push(t)}captureApiDiagnostics(e){let t=e.getDiagnostics();t&&this.diagnostics.captureApiDiagnostics(t)}finishRunDiagnostics(e){this.diagnostics.finishRun(e)}syncResultDiagnostics(){this.diagnostics.downloaded=this.fetchResult.downloaded.length,this.diagnostics.deleted=this.fetchResult.deleted.length,this.diagnostics.skippedFolders=this.fetchResult.skippedFolders.length,this.diagnostics.updatedMetas=this.fetchResult.updatedMetas.length}resetDiagnostics(){this.diagnostics=Uk()}};function Uk(){return new hm}var fm=b(require("fs"));He();H();K();ct();vi();var Ar=T("sync.checkout"),nl=class extends We{mirror=this.createMirrorStore();workspace=this.createWorkspaceStore(this.mirror);async execute(){Ar.info("checkout start: {0}",this.options.projectNames.join(", ")||"<none>");let e=await this.createCheckoutItems();if(e.length===0)return this.task.start(1),this.task.finish(),Ar.info("checkout done: <none>"),{projectNames:[]};let t=e.reduce((o,i)=>o+i.total,0);this.task.start(Math.max(t,1));for(let o of e)this.task.throwIfAborted(),await this.checkoutProject(o.projectPath,this.task);let n=e.map(o=>o.projectPath);return Ar.info("checkout cleanup status start: {0}",n.join(", ")),this.clearSyncStatusTargets(n),Ar.info("checkout cleanup status done"),e.some(o=>!o.workspaceProjectExists)&&this.context.notifyLocalProjectsChanged?.(),this.task.finish(),Ar.info("checkout done: {0}",e.map(o=>o.projectName).join(", ")),{projectNames:e.map(o=>o.projectName)}}async createCheckoutItems(){let e=[],t=[...new Set(this.options.projectNames.map(n=>Et(n)))];for(let n of t){await this.assertMirrorProjectDirectory(n);let o=await Kd(this.workspace.toLocalPath(n));e.push({projectName:n.slice(1),projectPath:n,total:Math.max(await this.workspace.countCheckoutResources(n),1),workspaceProjectExists:o})}return e}async assertMirrorProjectDirectory(e){let t=this.mirror.toLocalPath(e);if(!(await fm.promises.stat(t)).isDirectory())throw new Error(`checkout source must be a mirror project directory: ${e}`)}async checkoutProject(e,t){let n=Date.now(),o=this.workspace.toLocalPath(e),i=await lk(o);if(Ar.debug(`checkout project start: projectPath=${e} projectBlank=${i}`),!i){await this.workspace.checkoutFromMirror(e,t),Ar.debug(`checkout project done: projectPath=${e} elapsed=${Date.now()-n}ms`);return}try{await this.workspace.prepareCheckoutDirectory(e,t),await qc(this.workspaceRoot,e),await this.workspace.checkoutMirrorDirectory(e,t),t.throwIfAborted(),await this.workspace.copyMirrorMetaInfo(e,!0),t.step(1)}catch(a){throw await this.rollbackNewProjectCheckout(e,o,a),a}finally{await $c(this.workspaceRoot,e)}Ar.debug(`checkout project done: projectPath=${e} elapsed=${Date.now()-n}ms`)}async rollbackNewProjectCheckout(e,t,n){try{await fm.promises.rm(t,{force:!0,recursive:!0}),Ar.info(`checkout failed, rolled back new workspace project: projectPath=${e}`)}catch(o){Ar.warn(`checkout failed, rollback new workspace project failed: projectPath=${e} cause=${String(n)}`,o)}}};wr();var ol=T("sync.clone"),il=class extends We{async execute(){ol.info("clone start: {0}",this.options.projectNames?.join(", ")??"<all>"),this.task.start(100,{message:u("workspace.sync.progress.clone.running"),retainOnFinish:!0});let e=this.task.subTaskMonitor(5),t=this.task.subTaskMonitor(68),n=this.task.subTaskMonitor(17),o=this.task.subTaskMonitor(6),i=this.task.subTaskMonitor(4);e.start(1),ol.info("clone prepare start"),this.task.throwIfAborted(),await jk.promises.mkdir(this.mirrorRoot,{recursive:!0});let a=await this.resolveCloneProjects();e.step(1);let s=a.map(p=>p.name),c=s.map(p=>Et(p));ol.info("clone prepare done: projects={0}",s.join(", ")),await new Un(this.context,{task:t,projectNames:s,forceRefresh:!0}).execute(),a.length===0&&(t.start(1),t.step(1)),await new nl(this.context,{task:n,projectNames:s}).execute();let l=await Xc(this.context,o,c);return i.finish(),ol.info("clone done: {0}",s.join(", ")),this.task.setMessage(u("workspace.sync.progress.clone.done",s.length)),this.task.finish(),{projectNames:s,oldFiles:l}}async resolveCloneProjects(){if(this.options.projectNames&&this.options.projectNames.length===0)return[];let e=await this.getApiClient(),t=await e.getProjects(),n=this.options.projectNames??t.map(i=>i.name),o=[...new Set(n.map(i=>Et(i)))];return Promise.all(o.map(i=>e.getFile(i)))}};var en=b(require("fs")),Lt=b(require("path"));ct();H();He();K();we();Yt();var Mi=b(require("fs")),Kk=b(require("os")),Or=b(require("path")),Jk=require("node:util");var La=b(require("fs")),Gk=b(require("os")),Cm=b(require("path"));H();He();nm();var _a=b(require("fs"));function Vk(r,e){let t={};for(let i=0;i<e.length;i++){let a=e[i];t[a]?t[a].push(i):t[a]=[i]}let o=[{buffer1index:-1,buffer2index:-1,chain:null}];for(let i=0;i<r.length;i++){let a=r[i],s=t[a]||[],c=0,l=o[0];for(let p=0;p<s.length;p++){let d=s[p],g;for(g=c;g<o.length&&!(o[g].buffer2index<d&&(g===o.length-1||o[g+1].buffer2index>d));g++);if(g<o.length){let m={buffer1index:i,buffer2index:d,chain:o[g]};if(c===o.length?o.push(l):o[c]=l,c=g+1,l=m,c===o.length)break}}o[c]=l}return o[o.length-1]}function Bk(r,e){let t=Vk(r,e),n=[],o=r.length,i=e.length;for(let a=t;a!==null;a=a.chain){let s=o-a.buffer1index-1,c=i-a.buffer2index-1;o=a.buffer1index,i=a.buffer2index,(s||c)&&n.push({buffer1:[o+1,s],buffer1Content:r.slice(o+1,o+1+s),buffer2:[i+1,c],buffer2Content:e.slice(i+1,i+1+c)})}return n.reverse(),n}function qk(r,e){let t=Vk(r,e),n=[],o=r.length,i=e.length;function a(s,c,l){let p=[];for(let d=0;d<l;d++)p.push(s[c+d]);return{offset:c,length:l,chunk:p}}for(let s=t;s!==null;s=s.chain){let c=o-s.buffer1index-1,l=i-s.buffer2index-1;o=s.buffer1index,i=s.buffer2index,(c||l)&&n.push({buffer1:a(r,s.buffer1index+1,c),buffer2:a(e,s.buffer2index+1,l)})}return n.reverse(),n}function UI(r,e,t){let n=[];function o(c,l){n.push({ab:l,oStart:c.buffer1[0],oLength:c.buffer1[1],abStart:c.buffer2[0],abLength:c.buffer2[1]})}Bk(e,r).forEach(c=>o(c,"a")),Bk(e,t).forEach(c=>o(c,"b")),n.sort((c,l)=>c.oStart-l.oStart);let i=[],a=0;function s(c){c>a&&(i.push({stable:!0,buffer:"o",bufferStart:a,bufferLength:c-a,bufferContent:e.slice(a,c)}),a=c)}for(;n.length;){let c=n.shift(),l=c.oStart,p=c.oStart+c.oLength,d=[c];for(s(l);n.length;){let g=n[0],m=g.oStart;if(m>p)break;p=Math.max(p,m+g.oLength),d.push(n.shift())}if(d.length===1){if(c.abLength>0){let g=c.ab==="a"?r:t;i.push({stable:!0,buffer:c.ab,bufferStart:c.abStart,bufferLength:c.abLength,bufferContent:g.slice(c.abStart,c.abStart+c.abLength)})}}else{let g={a:[r.length,-1,e.length,-1],b:[t.length,-1,e.length,-1]};for(;d.length;){c=d.shift();let P=c.oStart,h=P+c.oLength,S=c.abStart,k=S+c.abLength,E=g[c.ab];E[0]=Math.min(S,E[0]),E[1]=Math.max(k,E[1]),E[2]=Math.min(P,E[2]),E[3]=Math.max(h,E[3])}let m=g.a[0]+(l-g.a[2]),f=g.a[1]+(p-g.a[3]),y=g.b[0]+(l-g.b[2]),C=g.b[1]+(p-g.b[3]),v={stable:!1,aStart:m,aLength:f-m,aContent:r.slice(m,f),oStart:l,oLength:p-l,oContent:e.slice(l,p),bStart:y,bLength:C-y,bContent:t.slice(y,C)};i.push(v)}a=p}return s(e.length),i}function $k(r,e,t,n){n=Object.assign({excludeFalseConflicts:!0,stringSeparator:/\s+/},n);let i=typeof r=="string",a=typeof e=="string",s=typeof t=="string";i&&(r=r.split(n.stringSeparator)),a&&(e=e.split(n.stringSeparator)),s&&(t=t.split(n.stringSeparator));let c=[],l=UI(r,e,t),p=[];function d(){p.length&&c.push({ok:p}),p=[]}function g(m,f){if(m.length!==f.length)return!1;for(let y=0;y<m.length;y++)if(m[y]!==f[y])return!1;return!0}return l.forEach(m=>{m.stable?p.push(...m.bufferContent):n.excludeFalseConflicts&&g(m.aContent,m.bContent)?p.push(...m.aContent):(d(),c.push({conflict:{a:m.aContent,aIndex:m.aStart,o:m.oContent,oIndex:m.oStart,b:m.bContent,bIndex:m.bStart}}))}),d(),c}K();Wo();var zk=T("sync.three-way-merge"),jI=/\n|\r\n|\r/;function gm(r){return r.split(jI)}function BI(r){return r.includes(`\r
65
68
  `)?`\r
66
69
  `:r.includes("\r")?"\r":`
67
- `}function IF(r,e){if(gg(r))return!0;let t=e.trimStart();return t.startsWith("{")||t.startsWith("[")}function Tu(r){try{return JSON.stringify(JSON.parse(r),null,2)}catch(e){return Tv.debug("skip JSON normalization because content is not valid JSON",e),r}}function bv(r){return r===void 0||r===""||r===!1||typeof r=="object"&&r!==null&&Object.keys(r).length===0}var xc=class{serverControlledKeys;constructor(e=["id","revision","creator","createTime","modifier","modifyTime"]){this.serverControlledKeys=new Set(e)}async merge(e){let t=await this.mergeContent(e),n=this.mergeMetaInfo(e.workspaceMeta,e.baseMeta,e.remoteMeta);return{hasConflict:t.hasConflict,mergedMeta:n.merged,hasMetaConflict:n.hasConflict}}async mergeContent(e){let[t,n,o]=[];try{[t,n,o]=await Promise.all([da.promises.readFile(e.workspaceFile,"utf-8"),da.promises.readFile(e.baseFile,"utf-8"),da.promises.readFile(e.remoteFile,"utf-8")])}catch(g){return Tv.debug(`treat merge content as conflicted because inputs cannot be read: ${e.workspaceFile}`,g),{hasConflict:!0}}IF(e.workspaceFile,t)&&(t=Tu(t),n=Tu(n),o=Tu(o));let i=bu(t),a=bu(n),s=bu(o),c=Ev(i,a,s),l=DF(t),p=c.some(g=>"conflict"in g),m=c.flatMap(g=>{if("ok"in g)return g.ok;let d=g.conflict;return["<<<<<<< Local",...d.a,"=======",...d.b,">>>>>>> Remote"]}).join(l);return await da.promises.writeFile(e.workspaceFile,m,"utf-8"),{hasConflict:p}}mergeMetaInfo(e,t,n){if(!e&&!t&&!n)return{hasConflict:!1};let o=t??{},i=n??{},a=e??{},s={...o},c=!1,l=new Set([...Object.keys(o),...Object.keys(i),...Object.keys(a)]);for(let p of l){if(this.serverControlledKeys.has(p)){p in a?s[p]=a[p]:p in i&&(s[p]=i[p]);continue}let m=p in o,g=p in i,d=p in a,f=m!==g||m&&g&&this.isMetaFieldDifferent(o[p],i[p]),y=m!==d||m&&d&&this.isMetaFieldDifferent(o[p],a[p]);if(!(!f&&!y)){if(f&&!y){g?s[p]=i[p]:delete s[p];continue}if(!f&&y){d?s[p]=a[p]:delete s[p];continue}if(!g&&!d){delete s[p];continue}if(!g&&d){c=!0,s[p]=a[p];continue}if(g&&!d){delete s[p];continue}c=!0,s[p]=a[p]}}return{merged:Object.keys(s).length>0?s:void 0,hasConflict:c}}isMetaFieldDifferent(e,t){if(e===t)return!1;let n=bv(e),o=bv(t);return n&&o?!1:e!==t}};var Fc=class{input;constructor(e){this.input=e}async execute(){let e;try{e=await this.normalizeMergeFiles();let t={workspaceFile:e.workspaceFile,baseFile:e.baseFile,remoteFile:e.remoteFile,workspaceMeta:this.input.workspaceMeta,baseMeta:this.input.baseMeta,remoteMeta:this.input.remoteMeta},n=await(this.input.threeWayMerge??new xc).merge(t);return e.workspaceFile!==this.input.workspaceFile&&await ua.promises.copyFile(e.workspaceFile,this.input.workspaceFile),{merged:!n.hasConflict,hasConflict:n.hasConflict,conflictReason:n.hasConflict?"contentConflict":void 0,threeWayResult:n}}catch(t){if(t instanceof ao)return{merged:!1,hasConflict:!0,conflictReason:t.conflictReason,metadataUpgradeReason:t.reason,errorInfo:t.errorInfo};throw t}finally{e?.tempDir&&await Qt(e.tempDir)}}async normalizeMergeFiles(){if(!this.input.versionInfo?.upgradeSupported)return this.createOriginalMergeFiles();if(!this.input.client)return this.createOriginalMergeFiles();let t=await this.readMergeContentVersions();if(this.areMergeContentVersionsSame(t))return this.createOriginalMergeFiles();let n=await ua.promises.mkdtemp(xu.join(xv.tmpdir(),"succapp-single-file-merge-"));try{let o=new ri({client:this.input.client}),i=await Promise.all([this.readAndNormalizeContent(o,"workspace",this.input.workspaceFile),this.readAndNormalizeContent(o,"base",this.input.baseFile),this.readAndNormalizeContent(o,"remote",this.input.remoteFile)]),[a,s,c]=await Promise.all([this.writeTempContent(n,"workspace",i[0]),this.writeTempContent(n,"base",i[1]),this.writeTempContent(n,"remote",i[2])]);return{workspaceFile:a,baseFile:s,remoteFile:c,tempDir:n}}catch(o){throw await Qt(n),o}}createOriginalMergeFiles(){return{workspaceFile:this.input.workspaceFile,baseFile:this.input.baseFile,remoteFile:this.input.remoteFile}}async readMergeContentVersions(){let[e,t,n]=await Promise.all([this.readMergeContentVersion("workspace",this.input.workspaceFile),this.readMergeContentVersion("base",this.input.baseFile),this.readMergeContentVersion("remote",this.input.remoteFile)]);return{workspace:e,base:t,remote:n}}async readMergeContentVersion(e,t){try{return await oc(t)}catch(n){throw new ao("metadataVersionUpgradeFailed",n instanceof SyntaxError?"invalidContent":"readFailed",`metadata ${e} version normalize input cannot be read`,n)}}areMergeContentVersionsSame(e){return e.workspace===e.base&&e.workspace===e.remote}async readAndNormalizeContent(e,t,n){let o;try{o=await ua.promises.readFile(n,"utf-8")}catch(a){throw new ao("metadataVersionUpgradeFailed","readFailed",`metadata ${t} version normalize input cannot be read`,a)}let i=await e.upgradeContent({path:this.input.remotePath,content:o,versionInfo:this.input.versionInfo});if(i.reason==="newerVersion")throw new ao("metadataVersionNewerThanServer",i.reason,`metadata ${t} version is newer than server target version`,i.errorInfo);if(i.reason&&i.reason!=="upToDate")throw new ao("metadataVersionUpgradeFailed",i.reason,`metadata ${t} version normalize failed`,i.errorInfo);return i.content}async writeTempContent(e,t,n){let o=xu.join(e,t);return await ua.promises.writeFile(o,n,"utf-8"),o}},ao=class extends Error{conflictReason;reason;errorInfo;constructor(e,t,n,o){super(n),this.name="MetadataVersionNormalizeError",this.conflictReason=e,this.reason=t,this.errorInfo=o}};it();var Mc=T("sync.apply-remote"),Dc=class extends Ae{mirror=this.createMirrorStore();workspace=this.createWorkspaceStore(this.mirror);updated=[];deleted=[];conflicts=[];currentChangeTask;async execute(){this.updated=[],this.deleted=[],this.conflicts=[],this.currentChangeTask=void 0;let e=this.sortRemoteChanges(this.options.remoteChanges);Mc.info("apply remote changes start: changes={0}",e.length);let t=new Set;if(e.length===0)return this.task.start(1),this.task.step(1),this.finishApplyRemoteChanges({updated:this.updated,deleted:this.deleted,conflicts:this.conflicts});let n=await this.createProgressItems(e);Mc.info("apply remote changes prepared: changes={0} resources={1}",e.length,n.reduce((i,a)=>i+a.total,0)),this.task.start(Math.max(n.reduce((i,a)=>i+a.total,0),1));let o=n.map(i=>({change:i.change,total:i.total,task:this.task.subTaskMonitor(i.total)}));for(let{change:i,total:a,task:s}of o){this.task.throwIfAborted(),s.start(a),this.currentChangeTask=s;try{if(this.isCoveredByAppliedFolderCheckout(i,t)){s.progress(a);continue}let c=this.findLocalOverlaps(i);if(c.length>0&&!this.options.force){if(await this.tryApplyRemoteChangeWithLocalOverlaps(i,c))continue;this.conflicts.push(i),s.step(1);continue}i.type==="remoteDeleted"?(await this.workspace.deletePath(i.remotePath,s),this.deleted.push(i.remotePath)):i.type==="remoteRenamed"?(i.oldRemotePath&&(await this.workspace.deletePath(i.oldRemotePath,s),this.deleted.push(i.oldRemotePath)),await this.workspace.checkoutFromMirror(i.remotePath,s),this.updated.push(i.remotePath)):i.isFolder&&i.type==="remoteModified"?(await this.workspace.copyMirrorMetaInfo(i.remotePath,!0,s),this.updated.push(i.remotePath),s.step(1)):(await this.workspace.checkoutFromMirror(i.remotePath,s),this.updated.push(i.remotePath),i.isFolder&&t.add(i.remotePath))}finally{this.currentChangeTask=void 0}}return await this.cleanupEmptyOrphanParents(this.deleted,this.mirror,this.workspace),this.finishApplyRemoteChanges({updated:this.updated,deleted:this.deleted,conflicts:this.conflicts})}finishApplyRemoteChanges(e){return Mc.info("apply remote changes done: updated={0} deleted={1} conflicts={2}",e.updated.length,e.deleted.length,e.conflicts.length),e}isCoveredByAppliedFolderCheckout(e,t){for(let n of t)if(e.remotePath!==n&&Q(e.remotePath,n))return!0;return!1}async createProgressItems(e){return Promise.all(e.map(async t=>({change:t,total:await this.countChangeProgress(t)})))}async countChangeProgress(e){if(e.type==="remoteDeleted")return this.countWorkspaceProgress(e.remotePath);if(e.type==="remoteRenamed"){let[t,n]=await Promise.all([e.oldRemotePath?this.countWorkspaceProgress(e.oldRemotePath):Promise.resolve(0),this.countCheckoutProgress(e.remotePath)]);return t+n}return e.isFolder&&e.type==="remoteModified"?1:this.countCheckoutProgress(e.remotePath)}async countCheckoutProgress(e){return Math.max(await this.workspace.countCheckoutResources(e),1)}async countWorkspaceProgress(e){return Math.max(await this.workspace.countResources([e]),1)}async tryApplyRemoteChangeWithLocalOverlaps(e,t){return await this.tryApplyRemoteRenamePreservingLocalModification(e,t)||await this.tryMergeSeparatedMetaAndContentChanges(e,t)?!0:this.canApplyFolderMetaOnly(e,t)?(await this.workspace.copyMirrorMetaInfo(e.remotePath,!0,this.getCurrentChangeTask()),this.updated.push(e.remotePath),this.getCurrentChangeTask().step(1),!0):this.tryThreeWayMergeSameFileContentChange(e,t)}async tryMergeSeparatedMetaAndContentChanges(e,t){if(e.type!=="remoteModified"||t.length!==1)return!1;let n=t[0];return n.remotePath!==e.remotePath||n.type!=="modified"?!1:e.metaChanged&&!e.contentChanged&&n.contentChanged&&!n.metaChanged?(await this.workspace.copyMirrorMetaInfo(e.remotePath,!!e.isFolder,this.getCurrentChangeTask()),this.updated.push(e.remotePath),this.getCurrentChangeTask().step(1),!0):e.contentChanged&&!e.metaChanged&&n.metaChanged&&!n.contentChanged?(await this.workspace.copyMirrorContent(e.remotePath,this.getCurrentChangeTask()),this.updated.push(e.remotePath),this.getCurrentChangeTask().step(1),!0):!1}async tryApplyRemoteRenamePreservingLocalModification(e,t){if(e.type!=="remoteRenamed"||!e.oldRemotePath||t.length!==1)return!1;let n=t[0];return n.type!=="modified"||n.remotePath!==e.oldRemotePath||!await this.applyRemoteRenameContent(e,n)?!1:(await this.applyRemoteRenameMeta(e,n),await this.workspace.deletePath(e.oldRemotePath,this.getCurrentChangeTask()),this.updated.push(e.remotePath),this.deleted.push(e.oldRemotePath),e.isFolder||this.getCurrentChangeTask().step(1),!0)}async applyRemoteRenameContent(e,t){if(e.isFolder)return await this.workspace.checkoutFromMirror(e.remotePath,this.getCurrentChangeTask()),!0;let n=this.workspace.toLocalPath(e.remotePath);return this.task.throwIfAborted(),await ii.promises.mkdir(Tr.dirname(n),{recursive:!0}),e.contentChanged&&t.contentChanged?this.mergeRemoteRenameContent(e,n):t.contentChanged&&e.oldRemotePath?(this.options.mergeBaseDir&&await this.mergeRemoteRenameContent(e,n)||(this.task.throwIfAborted(),await ii.promises.copyFile(this.workspace.toLocalPath(e.oldRemotePath),n)),!0):(await this.workspace.copyMirrorContent(e.remotePath,this.getCurrentChangeTask()),!0)}async mergeRemoteRenameContent(e,t){if(!e.oldRemotePath)return!1;let n;try{if(!this.options.mergeBaseDir||!e.oldRemotePath)return!1;n=await ii.promises.mkdtemp(Tr.join(Fv.tmpdir(),"succapp-remote-rename-merge-"));let o=Tr.join(n,"workspace");this.task.throwIfAborted(),await ii.promises.copyFile(this.workspace.toLocalPath(e.oldRemotePath),o);let i=Tr.join(this.options.mergeBaseDir,Ne(e.oldRemotePath)),a=this.mirror.toLocalPath(e.remotePath),s=await this.mergeSingleFileContent({remotePath:e.remotePath,workspaceFile:o,baseFile:i,remoteFile:a});return s.threeWayResult&&(this.task.throwIfAborted(),await ii.promises.copyFile(o,t)),s.merged}catch(o){return Mc.debug(`merge remote rename content failed: ${e.remotePath}`,o),!1}finally{n&&await Qt(n)}}async applyRemoteRenameMeta(e,t){let n=await Ie(this.mirror.root,e.remotePath);if(!n)return;let o=n;if(t.metaChanged&&e.oldRemotePath){let[i,a]=await Promise.all([Ie(this.workspaceRoot,e.oldRemotePath),this.options.mergeBaseDir?Ie(this.options.mergeBaseDir,e.oldRemotePath):Promise.resolve(void 0)]);o=this.mergeMetaWithLocalDelta(n,i,a)}await this.workspace.patchMeta(Tr.posix.dirname(e.remotePath),{[Tr.posix.basename(e.remotePath)]:o},this.getCurrentChangeTask())}mergeMetaWithLocalDelta(e,t,n){let o={...e},i=oo(t),a=oo(n),s=new Set([...Object.keys(i),...Object.keys(a)]);for(let c of s)(0,Mv.isDeepStrictEqual)(i[c],a[c])||(c in i?o[c]=i[c]:delete o[c]);return o}canApplyFolderMetaOnly(e,t){return e.type==="remoteModified"&&!!e.isFolder&&!!e.metaChanged&&!e.contentChanged&&t.every(n=>n.remotePath!==e.remotePath&&n.oldRemotePath!==e.remotePath)}findLocalOverlaps(e){return this.options.localChanges.filter(t=>Fo(t.remotePath,t.oldRemotePath,e.remotePath,e.oldRemotePath))}sortRemoteChanges(e){return[...e].sort((t,n)=>{let o=this.getApplyOrderRank(t),i=this.getApplyOrderRank(n);return o!==i?o-i:t.type==="remoteDeleted"&&n.type==="remoteDeleted"?wr(n.remotePath)-wr(t.remotePath)||t.remotePath.localeCompare(n.remotePath):t.type==="remoteRenamed"&&n.type==="remoteRenamed"?this.getRemoteRenameDeleteDepth(n)-this.getRemoteRenameDeleteDepth(t)||this.getRemoteRenameDeletePath(t).localeCompare(this.getRemoteRenameDeletePath(n)):t.remotePath.localeCompare(n.remotePath)})}getApplyOrderRank(e){return e.type==="remoteDeleted"?0:e.type==="remoteRenamed"?1:2}getRemoteRenameDeleteDepth(e){return wr(this.getRemoteRenameDeletePath(e))}getRemoteRenameDeletePath(e){return e.oldRemotePath??e.remotePath}async tryThreeWayMergeSameFileContentChange(e,t){if(e.type!=="remoteModified"||!e.contentChanged||t.length!==1)return!1;let n=t[0];if(n.type!=="modified"||!n.contentChanged||n.remotePath!==e.remotePath||!this.options.mergeBaseDir)return!1;let o=this.workspace.toLocalPath(e.remotePath),i=Tr.join(this.options.mergeBaseDir,Ne(e.remotePath)),a=this.mirror.toLocalPath(e.remotePath),s=await this.mergeSingleFileContent({remotePath:e.remotePath,workspaceFile:o,baseFile:i,remoteFile:a});return s.threeWayResult&&(await this.workspace.copyMirrorMetaInfo(e.remotePath,!!e.isFolder,this.getCurrentChangeTask()),this.updated.push(e.remotePath)),s.merged?(this.getCurrentChangeTask().step(1),!0):!1}async mergeSingleFileContent(e){let t=this.context.getMetadataVersionInfoByPath?.(e.remotePath),n=t?.upgradeSupported?await this.getApiClient():void 0;return new Fc({...e,versionInfo:t,client:n}).execute()}getCurrentChangeTask(){return U(this.currentChangeTask,"current apply remote change task is missing."),this.currentChangeTask}};qt();$();G();Je();var Dv="merge-base",so="merge-backup";gr();var Ye=T("sync.pull"),Ic=class extends Ae{async execute(){Ye.info("pull start: {0}",this.createPullScopeLog()),this.task.start(100);let e=this.task.subTaskMonitor(8),t=this.task.subTaskMonitor(55),n=this.task.subTaskMonitor(3),o=this.task.subTaskMonitor(22),i=this.task.subTaskMonitor(8),a=this.task.subTaskMonitor(2),s=this.task.subTaskMonitor(2);e.start(4),Ye.info("pull prepare start");let c=e.subTaskMonitor(1),l=e.subTaskMonitor(1),p=e.subTaskMonitor(1),m=e.subTaskMonitor(1);c.start(1),this.assertNoRemoteProjectUnavailableChanges(this.options.changes,"pull"),this.assertNoProjectRootRenameChanges(this.options.changes,"pull");let g=this.getKnownRemoteChanges(),d=g?this.getKnownChangeTargets(g):await this.resolveTargetRemotePaths(this.options.paths);c.step(1),Ye.info("pull targets resolved: {0}",this.formatTargetsForLog(d)),!this.options.paths&&!g?(Ye.info("pull refresh status start"),await this.context.refreshSyncStatus(l),Ye.info("pull refresh status done")):l.finish();let f,y,C=[],v;if(g?(f=this.getTargetLocalChanges(d),y=g,C=this.options.force===!0?this.getTargetCachedPullChanges(d):[],p.finish()):this.options.paths?(f=this.getTargetLocalChanges(d),C=this.options.force===!0?this.getTargetCachedPullChanges(d):[],v=this.expandTargetsForRenameChanges(d,[...f,...C]),p.start(1),y=this.filterChangesByTargets(await this.detectRemoteChanges(v,p),v),p.step(1)):(f=this.getLocalSyncChanges().filter(k=>k.type!=="conflict"),y=this.getRemoteSyncChanges(),p.finish()),Ye.info("pull changes prepared: local={0} remote={1}",f.length,y.length),y.length===0&&this.options.force!==!0)return Ye.info("pull skipped: no applicable remote changes"),m.finish(),t.finish(),n.finish(),o.finish(),i.finish(),a.finish(),s.finish(),{updated:[],deleted:[],conflicts:[],oldFiles:[]};m.start(1),Ye.info("pull merge base capture start");let P=await this.captureMergeBaseDir(f,y);m.step(1),Ye.info("pull merge base capture done");let u,S=!1;try{await new Fn(this.context,{task:t,...this.createFetchOptions(y,d,g)}).execute(),Ye.info("pull reconcile local changes start");let k=await this.reconcileLocalChangesAfterFetch(f,y,d,n);Ye.info("pull reconcile local changes done: local={0}",k.length);let R=this.options.force?await this.includeForceTargetChanges(y,k,d,C):y;u=await new Dc(this.context,{remoteChanges:R,localChanges:k,force:!!this.options.force,mergeBaseDir:P,task:o}).execute(),this.applyPullOperationResult(R,u),Ye.info("pull metadata version check start: paths={0}",u.updated.length);let w=await this.detectOldFiles(i,u.updated);Ye.info("pull metadata version check done: oldFiles={0}",w.length);let H={...u,oldFiles:w};return S=!0,Ye.info("pull done: updated={0} deleted={1} conflicts={2} oldFiles={3}",H.updated.length,H.deleted.length,H.conflicts.length,w.length),H}finally{await this.cleanupPullState(a,P,u),S&&s.finish()}}createPullScopeLog(){return this.hasKnownChanges(this.options.changes)?`changes=${this.options.changes.length}`:this.options.paths?.join(", ")??"<all>"}getKnownRemoteChanges(){if(this.hasKnownChanges(this.options.changes))return la(this.options.changes)}getTargetLocalChanges(e){return this.filterChangesByTargets(this.context.getSyncChanges().filter(t=>at(t)&&t.type!=="conflict"),e)}getTargetCachedPullChanges(e){return this.filterChangesByTargets(la(this.context.getSyncChanges()),e)}async detectRemoteChanges(e,t){return new Er({targets:e,task:t,workspace:this.context}).detect()}async detectOldFiles(e,t){return t.length===0?(e.finish(),[]):Cc(this.context,e,t.map(n=>te(this.workspaceRoot,n)))}async cleanupPullState(e,t,n){if(!t){e.finish();return}let o=!n||n.conflicts.length===0;Ye.info("pull cleanup start"),e.start(o?2:1),await Qt(t),e.step(1),o&&(await Qt(It.join(this.workspaceRoot,".succapp",so)),e.step(1)),Ye.info("pull cleanup done")}formatTargetsForLog(e){return e?`targets=${e.size}`:"<all>"}getFetchPaths(e,t){if(!this.options.paths)return;if(e.length===0)return[...t||new Set(this.options.paths)];let n=new Set;for(let o of e)n.add(o.remotePath),o.oldRemotePath&&n.add(o.oldRemotePath);return[...n]}createFetchOptions(e,t,n){return n?{changes:e}:{paths:this.getFetchPaths(e,t)}}async reconcileLocalChangesAfterFetch(e,t,n,o){if(o.start(1),e.length===0||t.length===0||!e.some(s=>t.some(c=>this.isOverlappedChange(s,c)))||n)return o.step(1),e;await this.context.refreshSyncStatus(o);let i=this.filterChangesByTargets(this.getLocalSyncChanges().filter(s=>s.type!=="conflict"),n),a=e.filter(s=>t.some(c=>this.isOverlappedChange(s,c))?i.some(c=>this.isOverlappedChange(s,c)):!0);for(let s of i){let c=t.find(l=>this.isOverlappedChange(s,l));c&&(a.some(l=>this.isSameChange(l,s))||this.isFetchIntroducedRemoteMetaOnlyChange(s,c)||a.push(s))}return a}applyPullOperationResult(e,t){for(let n of e)this.context.applySyncOperationResult(n,t.conflicts.filter(o=>this.isOverlappedChange(n,o)))}isFetchIntroducedRemoteMetaOnlyChange(e,t){return e.remotePath===t.remotePath&&e.type==="modified"&&t.type==="remoteModified"&&!!e.metaChanged&&!e.contentChanged&&!!t.metaChanged&&!t.contentChanged}isOverlappedChange(e,t){return Fo(e.remotePath,e.oldRemotePath,t.remotePath,t.oldRemotePath)}isSameChange(e,t){return e.type===t.type&&e.remotePath===t.remotePath&&e.oldRemotePath===t.oldRemotePath}async includeForceTargetChanges(e,t,n,o=[]){if(!n)return e;let i=[...e],a=new Set(e.map(c=>c.remotePath)),s=this.createMirrorStore();for(let c of o)if(!a.has(c.remotePath)){if(c.type==="conflict"){await this.addForceMirrorChange(i,a,s,c);continue}i.push(c),a.add(c.remotePath)}for(let c of t){if(c.type==="renamed"&&c.oldRemotePath){if(!n.has(c.remotePath)&&!n.has(c.oldRemotePath))continue;await this.addForceMirrorChange(i,a,s,{path:c.oldPath??Ne(c.oldRemotePath),remotePath:c.oldRemotePath,isFolder:c.isFolder,contentChanged:c.contentChanged,metaChanged:c.metaChanged}),await this.addForceMirrorChange(i,a,s,c);continue}a.has(c.remotePath)||n.has(c.remotePath)&&await this.addForceMirrorChange(i,a,s,c)}return i}async addForceMirrorChange(e,t,n,o){if(t.has(o.remotePath))return;let i=await n.exists(o.remotePath);e.push({path:o.path,remotePath:o.remotePath,...o.fileId!==void 0?{fileId:o.fileId}:{},type:i?"remoteModified":"remoteDeleted",isFolder:i?await n.isFolder(o.remotePath):o.isFolder,contentChanged:i?o.contentChanged:!1,metaChanged:i?o.metaChanged:!1}),t.add(o.remotePath)}async captureMergeBaseDir(e,t){let n=e.filter(m=>m.type==="modified"&&m.contentChanged),o=e.filter(m=>m.type==="modified"&&(m.contentChanged||m.metaChanged));if(o.length===0)return;let i=t.filter(m=>m.type==="remoteModified"?!!m.contentChanged&&n.some(g=>this.isOverlappedChange(g,m)):m.type==="remoteRenamed"?o.some(g=>this.isOverlappedChange(g,m)):!1);if(i.length===0)return;let a=It.join(this.workspaceRoot,".succapp"),s=It.join(a,Dv),c=It.join(a,so);await Promise.all([Qt(s),Qt(c)]),this.task.throwIfAborted(),await Promise.all([Yr.promises.mkdir(s,{recursive:!0}),Yr.promises.mkdir(c,{recursive:!0})]);let l=this.createMirrorStore(),p=this.createWorkspaceStore(l);return await Promise.all(i.map(async m=>{let g=m.type==="remoteRenamed"&&m.oldRemotePath?m.oldRemotePath:m.remotePath,d=Ne(g),f=It.join(s,d),y=It.join(c,d);await Promise.all([(async()=>{try{this.task.throwIfAborted(),await Yr.promises.mkdir(It.dirname(f),{recursive:!0}),await Yr.promises.copyFile(l.toLocalPath(g),f),await this.copyBaseMetaFile(l.root,s,d,g)}catch(C){Ye.debug(`capture merge base failed for ${g}`,C)}})(),(async()=>{try{this.task.throwIfAborted(),await Yr.promises.mkdir(It.dirname(y),{recursive:!0}),await Yr.promises.copyFile(p.toLocalPath(g),y)}catch(C){Ye.debug(`backup workspace file failed for ${g}`,C)}})()])})),s}async copyBaseMetaFile(e,t,n,o){let i=It.dirname(n),a=It.join(e,i,Y),s=It.join(t,i,Y);try{this.task.throwIfAborted(),await Yr.promises.mkdir(It.dirname(s),{recursive:!0}),await Yr.promises.copyFile(a,s)}catch(c){Ye.debug(`capture merge base meta failed for ${o}`,c)}}};var Nc=b(require("fs")),Iu=b(require("path"));D();Ce();J();Un();$();Je();qt();var AF;function Fu(){return AF}G();ia();it();gr();var Mu=b(require("path"));Je();G();D();qt();var OF=T("sync.meta-repair"),Iv="unreadableMeta",Av="blockedMetaPath",Ac=class{constructor(e){this.workspace=e}async repair(e){let t=new Set(e.suspectMetaPaths),n=new Map,o=[],i=new Set;for(let s of t)await this.getWorkItem(s,n,o);for(let s of e.localChanges)await this.repairChange(s,t,n,o,i);let a=[];for(let s of n.values())!s.changed||s.blocked||(await ic(this.workspace.root,s.metaPath,s.dotMeta),a.push(s.metaPath));return{repairedMetaPaths:a,affectedRemotePaths:[...i].sort(),failures:o}}async repairChange(e,t,n,o,i){if(e.type==="deleted"){await this.repairDeleted(e,t,n,o,i);return}if(e.type==="modified"){await this.repairModified(e,t,n,o,i);return}e.type==="renamed"&&e.oldRemotePath&&await this.repairRenamed(e,t,n,o,i)}async repairDeleted(e,t,n,o,i){let a=this.getDotMetaMetaPath(e.remotePath);if(!t.has(a))return;let s=await this.getWorkItem(a,n,o);if(!s||s.blocked)return;let c=this.getDotMetaKey(e.remotePath);s.dotMeta[c]&&(delete s.dotMeta[c],s.changed=!0,i.add(e.remotePath))}async repairModified(e,t,n,o,i){let a=this.getDotMetaMetaPath(e.remotePath);if(!t.has(a))return;let s=await this.getWorkItem(a,n,o);if(!s||s.blocked)return;let c=this.getDotMetaKey(e.remotePath);if(s.dotMeta[c])return;let l=await this.readMirrorMeta(e.remotePath);l&&(s.dotMeta[c]=this.cloneMetaInfo(l),s.changed=!0,i.add(e.remotePath))}async repairRenamed(e,t,n,o,i){let a=this.getDotMetaMetaPath(e.oldRemotePath),s=this.getDotMetaMetaPath(e.remotePath);if(!t.has(a)&&!t.has(s))return;let c=await this.getWorkItem(a,n,o),l=await this.getWorkItem(s,n,o);if(!c||!l||c.blocked||l.blocked)return;let p=this.getDotMetaKey(e.oldRemotePath),m=this.getDotMetaKey(e.remotePath),g=c.dotMeta[p]??await this.readMirrorMeta(e.oldRemotePath);!l.dotMeta[m]&&g&&(l.dotMeta[m]=this.cloneMetaInfo(g),l.changed=!0),c.dotMeta[p]&&(delete c.dotMeta[p],c.changed=!0),i.add(e.remotePath),i.add(e.oldRemotePath)}async getWorkItem(e,t,n){let o=t.get(e);if(o)return o;let i;try{i=await zr(this.workspace.root,e)}catch(c){if(!this.isBlockedMetaPathError(c))throw c;let l={metaPath:e,dotMeta:{},changed:!1,blocked:!0};return n.push({path:e,errorInfo:Av}),this.logRepairFailure(e,Av),t.set(e,l),l}let a=this.normalizeDotMeta(i.dotMeta),s={metaPath:e,dotMeta:a.dotMeta,changed:!!i.damaged||a.changed,blocked:i.repairable===!1};return s.blocked&&(n.push({path:e,errorInfo:Iv}),this.logRepairFailure(e,Iv)),t.set(e,s),s}isBlockedMetaPathError(e){let t=Bn(e);return t==="ENOTDIR"||t==="EISDIR"}logRepairFailure(e,t){OF.warn(["workspace meta repair failed",`workspaceRoot=${this.workspace.root}`,`mirrorRoot=${this.workspace.getMirrorRoot()}`,`path=${e}`,`errorInfo=${String(t)}`].join(`
68
- `))}normalizeDotMeta(e){let t={},n=!1;for(let o of Object.keys(e)){let i=e[o];if(typeof i=="object"&&i!==null&&!Array.isArray(i)){t[o]=i;continue}n=!0}return{dotMeta:t,changed:n}}async readMirrorMeta(e){let t=this.getDotMetaMetaPath(e);return(await zr(this.workspace.getMirrorRoot(),t)).dotMeta[this.getDotMetaKey(e)]}cloneMetaInfo(e){return{...e,option:e.option?{...e.option}:void 0,customOption:e.customOption?{...e.customOption}:void 0}}getDotMetaMetaPath(e){let t=Mu.posix.dirname(e);return t==="/"?"/"+Y:t+"/"+Y}getDotMetaKey(e){return Mu.posix.basename(e)}};Zo();na();du();var Ov="10Mb";var _F=/^\s*(\d+(?:\.\d+)?)\s*(b|kb|mb|gb)?\s*$/i,LF={b:1,kb:1024,mb:1048576,gb:1073741824};function NF(r,e=10485760){let t=_F.exec(r);if(!t)return e;let n=Number(t[1]),o=(t[2]??"b").toLowerCase(),i=LF[o]??1;return Math.floor(n*i)}var Du=class{reader;writer;autoPushValue=!1;autoPushDelayValue=2e3;autoPullValue=!1;autoPullIntervalValue=60;syncIgnoreValue=[];maxPushFileSizeValue=Ov;configure(e,t){this.reader=e,this.writer=t,this.load()}load(){let e=this.reader;e&&(this.autoPushValue=e("sync.autoPush",!1),this.autoPushDelayValue=e("sync.autoPushDelay",2e3),this.autoPullValue=e("sync.autoPull",!1),this.autoPullIntervalValue=e("sync.autoPullInterval",60),this.syncIgnoreValue=e("sync.ignore",[]),this.maxPushFileSizeValue=e("sync.maxPushFileSize",Ov))}get autoPush(){return this.autoPushValue}get autoPushDelay(){return this.autoPushDelayValue}get autoPull(){return this.autoPullValue}get autoPullInterval(){return this.autoPullIntervalValue}get conflictStrategy(){return"ask"}get syncIgnore(){return[...this.syncIgnoreValue]}get maxPushFileSizeBytes(){return NF(this.maxPushFileSizeValue,10485760)}async setAutoPush(e){this.autoPushValue=e,await this.writer?.("sync.autoPush",e),this.load()}},yt=new Du;var je=T("sync.push"),Oc=class extends ni{targets;localChanges=0;remoteChanges=0;requests=0;missingParentCreates=0;workspaceMetaRepairCandidates=0;workspaceMetaRepairRepaired=0;workspaceMetaRepairFailures=0;requestsByType={};preflightFailures=0;preflightFailuresByReason={};pushed=0;rejected=0;failures=0;remoteDetector;recordRequests(e){this.requests=e.length,this.requestsByType={};for(let t of e)this.incrementCounter(this.requestsByType,t.action)}recordPreflightFailures(e){this.preflightFailures+=e.length;for(let t of e)this.incrementCounter(this.preflightFailuresByReason,this.getFailureReason(t))}recordResult(e){this.pushed=e.pushed.length,this.rejected=e.rejected.length,this.failures=e.failures.length}createSnapshot(){return{runs:this.runs,durationMs:this.durationMs,...this.targets!==void 0?{targets:this.targets}:{},localChanges:this.localChanges,remoteChanges:this.remoteChanges,requests:this.requests,missingParentCreates:this.missingParentCreates,workspaceMetaRepairCandidates:this.workspaceMetaRepairCandidates,workspaceMetaRepairRepaired:this.workspaceMetaRepairRepaired,workspaceMetaRepairFailures:this.workspaceMetaRepairFailures,requestsByType:{...this.requestsByType},preflightFailures:this.preflightFailures,preflightFailuresByReason:{...this.preflightFailuresByReason},pushed:this.pushed,rejected:this.rejected,failures:this.failures,...this.remoteDetector?{remoteDetector:this.remoteDetector}:{},api:this.api}}getFailureReason(e){let t=e.errorInfo;if(!t||typeof t!="object")return"unknown";let n=t.reason;if(n!=null)return String(n);let o=t.errorCode;if(typeof o=="string"&&o.length>0)return o;let i=t.errorType;return typeof i=="string"&&i.length>0?i:"unknown"}incrementCounter(e,t){e[t]=(e[t]??0)+1}},_c=class extends Ae{constructor(e,t){super(e,t)}diagnostics=new Oc;apiClient;pushContext=this.context;pushOptions=this.options;workspaceRootPath=this.workspaceRoot;mirrorRootPath=this.mirrorRoot;pushResult=this.createEmptyPushResult();run=this.createEmptyRunState();async execute(){this.beginPushRun();for(let e of this.createPushStageTasks())await e.run();return this.finishPush(this.run.startedAt)}beginPushRun(){this.assertNoRemoteProjectUnavailableChanges(this.options.changes,"push"),this.assertNoProjectRootRenameChanges(this.options.changes,"push"),this.pushResult=this.createEmptyPushResult(),this.run={...this.createEmptyRunState(),startedAt:this.diagnostics.startRun()},je.info("push start: {0}",this.createPushScopeLog()),this.task.start(100)}createPushScopeLog(){return this.hasKnownChanges(this.options.changes)?`changes=${this.options.changes.length}`:this.options.paths?.join(", ")??"<all>"}getDiagnostics(e={}){if(this.apiClient){let n=this.apiClient.getDiagnostics();n&&this.diagnostics.captureApiDiagnostics(n)}let t=this.diagnostics.createSnapshot();return e.reset&&(this.diagnostics=new Oc,this.apiClient=void 0),t}finishPush(e){if(this.diagnostics.recordResult(this.pushResult),this.apiClient){let t=this.apiClient.getDiagnostics();t&&this.diagnostics.captureApiDiagnostics(t)}return this.diagnostics.finishRun(e),je.info("push done: pushed={0} rejected={1} failures={2}",this.pushResult.pushed.length,this.pushResult.rejected.length,this.pushResult.failures.length),je.debug(`push diagnostics ${this.diagnostics.describeForLog()}`),this.pushResult}createEmptyRunState(){return{startedAt:0,localChanges:[],workspaceMetaRepairPaths:[],missingParentFolderCreates:[],remoteChanges:[],requests:[]}}createPushStageTasks(){let e=this.task.subTaskMonitor(20),t=this.task.subTaskMonitor(20),n=this.task.subTaskMonitor(54),o=this.task.subTaskMonitor(3),i=this.task.subTaskMonitor(3);return e.start(5),[new Au(this,e),new Ou(this,e),new _u(this,e),new Lu(this,e),new Nu(this,e),new Wu(this,t),new Uu(this,n,o,i)]}canContinuePushPipeline(){return this.pushResult.rejected.length===0&&this.pushResult.failures.length===0}hasPushRequests(){return this.run.requests.length>0}finishTask(){this.task.finish()}isForcePush(){return!!this.options.force}expandPushTargetsForRenameChanges(e,t){return this.expandTargetsForRenameChanges(e,t)}async getApiClientForPush(){let e=await this.getApiClient();return this.apiClient=e,e}async uploadFileMutation(e,t){return await this.notifySyncPushFileRequest(t),t.action==="create"?e.createFile(this.toApiFileMutationRequest(t)):t.action==="modify"?e.modifyFile(this.toApiModifyFileRequest(t)):t.action==="move"?(U(t.targetPath,`targetPath is required when moving file: ${t.path}`),e.moveFile(this.toApiMoveFileRequest(t,t.targetPath))):e.deleteFile(t.path,{expectedRevision:t.expectedRevision===null?void 0:t.expectedRevision,expectedModifyTime:t.expectedModifyTime===null?void 0:t.expectedModifyTime})}notifySyncPushFileRequest(e){return this.options.onSyncPushFileRequest?.(e)}toApiFileMutationRequest(e){let{action:t,contentValidated:n,...o}=e;return o}toApiModifyFileRequest(e){let t=this.toApiFileMutationRequest(e);return{...t,expectedRevision:this.toWriteExpectedRevision(t.expectedRevision)}}toApiMoveFileRequest(e,t){let n=this.toApiFileMutationRequest(e);return{...n,targetPath:t,expectedRevision:this.toWriteExpectedRevision(n.expectedRevision)}}toWriteExpectedRevision(e){return e===null?void 0:e}reportPushDiagnostic(e,t,n){this.reportDiagnostic({path:e,message:t,errorInfo:n})}createEmptyPushResult(){return{pushed:[],rejected:[],failures:[]}}formatTargetsForLog(e){return e?`${e.size}`:"<all>"}reportPushFailure(e,t){this.reportDiagnostic({path:e.path,message:t,errorInfo:e.errorInfo})}},ma=class{constructor(e,t){this.command=e;this.task=t}async run(){this.shouldRun()&&await this.doRun()}shouldRun(){return!0}async isFolderPath(e,t){try{return(await Nc.promises.stat(te(e,t))).isDirectory()}catch(n){if(F(n))return je.debug(`sync folder path does not exist: ${e}:${t}`),!1;throw n}}getParentPaths(e){let t=e.replace(/^\/+|\/+$/g,"").split("/").filter(Boolean),n=[];for(let o=0;o<t.length-1;o++)n.push("/"+t.slice(0,o+1).join("/"));return n}},Au=class extends ma{constructor(e,t){super(e,t.subTaskMonitor(1))}doRun(){return this.collectLocalChanges()}async collectLocalChanges(){je.info("push prepare start");let{targets:e,localChanges:t}=await this.getLocalChangesForPush();this.command.run.targets=e,this.command.run.localChanges=t,this.command.diagnostics.targets=e?.size,this.command.diagnostics.localChanges=t.length,je.info("push local changes prepared: targets={0} local={1}",this.command.formatTargetsForLog(e),t.length)}async getLocalChangesForPush(){let e=this.command.pushOptions;if(this.command.hasKnownChanges(e.changes))return this.task.finish(),{targets:new Set(this.command.getKnownChangeTargetRemotePaths(e.changes)),localChanges:e.changes};this.task.start(2);let t=this.task.subTaskMonitor(1),n=this.task.subTaskMonitor(1);t.start(1);let o=this.normalizeDotMetaTargets(await this.command.resolveTargetRemotePaths(e.paths)),i=o?new Set(ft(o)):void 0;return t.step(1),await this.refreshTargetChangesForPush(i,n),{targets:i,localChanges:this.command.filterChangesByTargets(this.command.pushContext.getSyncChanges().filter(a=>at(a)),i)}}async refreshTargetChangesForPush(e,t){if(!e){await this.command.pushContext.refreshSyncStatus(t);return}if(e.size===0){t.finish();return}if(await this.hasDirectoryTarget(e)){await this.command.pushContext.refreshSyncStatus(t);return}t.start(1),await this.command.pushContext.consumeFileChanges([...e].map(n=>({filePath:te(this.command.workspaceRootPath,n),type:"changed"}))),t.step(1)}async hasDirectoryTarget(e){return(await Promise.all([...e].map(async n=>await this.isDirectoryTarget(this.command.workspaceRootPath,n)||await this.isDirectoryTarget(this.command.mirrorRootPath,n)))).some(Boolean)}async isDirectoryTarget(e,t){try{return(await Nc.promises.stat(te(e,t))).isDirectory()}catch(n){return F(n)?(je.debug(`push target is not a directory: ${e}:${t}`),!1):(je.debug(`push target stat failed, fallback to full status: ${e}:${t}`,n),!0)}}normalizeDotMetaTargets(e){if(!e)return;let t=new Set;for(let n of e){if(Iu.posix.basename(n)===Y){t.add(Iu.posix.dirname(n));continue}t.add(n)}return t}},Ou=class extends ma{constructor(e,t){super(e,t.subTaskMonitor(1))}doRun(){return this.repairWorkspaceMeta()}async repairWorkspaceMeta(){this.task.start(1),this.command.run.workspaceMetaRepairPaths=dv(this.command.run.localChanges),this.command.diagnostics.workspaceMetaRepairCandidates=this.command.run.workspaceMetaRepairPaths.length,je.info("push workspace metadata repair start: candidates={0}",this.command.run.workspaceMetaRepairPaths.length);let e=await new Ac(this.command.pushContext).repair({suspectMetaPaths:this.command.run.workspaceMetaRepairPaths,localChanges:this.command.run.localChanges});this.command.diagnostics.workspaceMetaRepairRepaired=e.repairedMetaPaths.length,this.command.diagnostics.workspaceMetaRepairFailures=e.failures.length,this.task.step(1),je.info("push workspace metadata repair done: failures={0}",e.failures.length),e.failures.length>0&&(this.command.finishTask(),this.command.pushResult.failures.push(...e.failures))}},ai=class extends ma{shouldRun(){return this.command.canContinuePushPipeline()}},_u=class extends ai{constructor(e,t){super(e,t.subTaskMonitor(1))}doRun(){return this.analyzeParentFolders()}async analyzeParentFolders(){if(this.task.start(1),je.info("push parent folder analysis start"),this.command.run.missingParentFolderCreates=await this.collectMissingParentFolderCreates(this.command.run.localChanges),this.command.diagnostics.missingParentCreates=this.command.run.missingParentFolderCreates.length,this.command.run.operationTargets=this.command.expandPushTargetsForRenameChanges(this.command.run.targets,this.command.run.localChanges),this.command.run.operationTargets)for(let e of this.command.run.missingParentFolderCreates)this.command.run.operationTargets.add(e);this.task.step(1),je.info("push parent folder analysis done: missingParents={0}",this.command.run.missingParentFolderCreates.length)}async collectMissingParentFolderCreates(e){let t=new Set,n=new Set;for(let o of e)o.isFolder&&(o.type==="added"||o.type==="renamed")&&n.add(o.remotePath);for(let o of e)if(!(o.type!=="added"&&o.type!=="modified"&&o.type!=="renamed"))for(let i of this.getParentPaths(o.remotePath))n.has(i)||t.has(i)||await this.isFolderPath(this.command.mirrorRootPath,i)||!await this.isFolderPath(this.command.workspaceRootPath,i)||t.add(i);return[...t].sort((o,i)=>{let a=wr(o)-wr(i);return a!==0?a:o.localeCompare(i)})}},Lu=class extends ai{constructor(e,t){super(e,t.subTaskMonitor(1))}doRun(){return this.checkRemoteChanges()}async checkRemoteChanges(){this.task.start(1),je.info("push remote change check start: {0}",this.command.formatTargetsForLog(this.command.run.operationTargets)),this.command.run.remoteChanges=await this.getRemoteChangesForPush(this.command.run.operationTargets),this.command.diagnostics.remoteChanges=this.command.run.remoteChanges.length,this.task.step(1),je.info("push remote change check done: remote={0}",this.command.run.remoteChanges.length),this.command.run.remoteChanges.length>0&&!this.command.isForcePush()&&(this.command.finishTask(),this.command.pushResult.rejected.push(...this.command.run.remoteChanges))}async getRemoteChangesForPush(e){if(this.command.hasKnownChanges(this.command.pushOptions.changes)||!e)return this.command.filterChangesByTargets(this.command.pushContext.getSyncChanges().filter(o=>fr(o)),e);if(e.size===0)return[];let t=new Er({workspace:this.command.pushContext,targets:e,task:this.task}),n=await t.detect();return this.command.diagnostics.remoteDetector=t.getDiagnostics(),this.command.filterChangesByTargets(n,e)}},Nu=class extends ai{constructor(e,t){super(e,t.subTaskMonitor(1))}doRun(){return this.buildPushRequests()}async buildPushRequests(){this.task.start(1),je.info("push request build start: local={0}",this.command.run.localChanges.length),this.command.run.requests=await this.createPushRequests(this.command.run.localChanges,this.command.run.missingParentFolderCreates),this.command.diagnostics.recordRequests(this.command.run.requests),this.task.step(1),je.info("push request build done: requests={0}",this.command.run.requests.length),this.command.run.requests.length===0&&this.command.finishTask()}async createPushRequests(e,t=[]){let n=[],o=[],i=new Set,a=new Set,s=new Set(t);for(let c of this.sortChangesForPush(this.filterDerivedFolderRenameChanges(e))){if(c.type==="renamed"&&c.oldRemotePath){await this.appendMissingParentFolderCreates(c.remotePath,s,a,i,n);let l=this.getMovedFolderChildSource(c.oldRemotePath,o);if(l===c.remotePath){(c.contentChanged||c.metaChanged)&&n.push(await this.createModifyRequest(c,c.oldRemotePath,!0));continue}n.push(await this.createMoveRequest(c,l)),c.isFolder&&(o.push({oldRemotePath:c.oldRemotePath,newRemotePath:c.remotePath}),a.add(c.remotePath));continue}if(c.type==="added"){await this.appendMissingParentFolderCreates(c.remotePath,s,a,i,n),n.push(await this.createCreateRequest(c.remotePath,c.isFolder)),c.isFolder&&a.add(c.remotePath);continue}if(c.type==="modified"){await this.appendMissingParentFolderCreates(c.remotePath,s,a,i,n),n.push(await this.createModifyRequest(c));continue}c.type==="deleted"&&n.push(await this.createDeleteRequest(c.remotePath,c.isFolder))}return n}async appendMissingParentFolderCreates(e,t,n,o,i){for(let a of this.getParentPaths(e))if(!(o.has(a)||!t.has(a)||a==="/"||n.has(a))){if(await this.isFolderPath(this.command.mirrorRootPath,a)){n.add(a);continue}i.push(await this.createCreateRequest(a,!0)),o.add(a),n.add(a)}}filterDerivedFolderRenameChanges(e){let t=e.filter(n=>n.type==="renamed"&&n.isFolder&&!!n.oldRemotePath);return t.length===0?e:e.filter(n=>n.type!=="renamed"||!n.oldRemotePath?!0:!t.some(o=>{if(o===n)return!1;let i=o.oldRemotePath,a=o.remotePath;if(!Q(n.oldRemotePath,i)||!Q(n.remotePath,a))return!1;let s=n.oldRemotePath.slice(i.length),c=n.remotePath.slice(a.length);return s===c&&!n.contentChanged&&!n.metaChanged}))}async createCreateRequest(e,t){let n=this.command.workspaceRootPath,o={path:e,action:"create",isFolder:t,expectedRevision:null,expectedModifyTime:null,metaInfo:oo(await Ie(n,e,{strict:!0})),metaInfoChanged:!0};return t||(o.localContentPath=te(n,e),o.contentChanged=!0),o}async createModifyRequest(e,t=e.remotePath,n=!1){let o=this.command.workspaceRootPath,i=await Ie(this.command.mirrorRootPath,t);if(!i)throw new Ot("err.sync.conflict",{remotePath:e.remotePath,reason:"remoteVersionChanged"});let a=!e.isFolder&&!!e.contentChanged,s={path:e.remotePath,action:"modify",isFolder:e.isFolder,expectedRevision:this.command.isForcePush()||e.isFolder?void 0:i.revision??0,expectedModifyTime:this.command.isForcePush()||n?void 0:i.modifyTime??0,metaInfo:oo(await Ie(o,e.remotePath,{strict:!0})),metaInfoChanged:!!e.metaChanged};return a&&(s.localContentPath=te(o,e.remotePath),s.contentChanged=!0),s}async createMoveRequest(e,t){if(!e.oldRemotePath)throw new Ot("err.sync.conflict",{remotePath:e.remotePath,reason:"remoteVersionChanged"});let n=this.command.workspaceRootPath,o=await Ie(this.command.mirrorRootPath,e.oldRemotePath);if(!o)throw new Ot("err.sync.conflict",{remotePath:e.oldRemotePath,reason:"remoteVersionChanged"});let i=oo(await Ie(n,e.remotePath,{strict:!0})),a={path:t??e.oldRemotePath,targetPath:e.remotePath,action:"move",isFolder:e.isFolder,expectedRevision:this.command.isForcePush()||e.isFolder?void 0:o.revision??0,expectedModifyTime:this.command.isForcePush()||e.isFolder||t?void 0:o.modifyTime??0,metaInfo:i,metaInfoChanged:!!e.metaChanged};return!e.isFolder&&e.contentChanged&&(a.localContentPath=te(n,e.remotePath),a.contentChanged=!0),a}getMovedFolderChildSource(e,t){for(let n of[...t].reverse())if(!(e===n.oldRemotePath||!Q(e,n.oldRemotePath)))return n.newRemotePath+e.slice(n.oldRemotePath.length)}async createDeleteRequest(e,t){let n=await Ie(this.command.mirrorRootPath,e);if(!n)throw new Ot("err.sync.conflict",{remotePath:e,reason:"remoteVersionChanged"});return{path:e,action:"delete",expectedRevision:this.command.isForcePush()||t?void 0:n.revision??0,expectedModifyTime:this.command.isForcePush()||t?void 0:n.modifyTime??0}}sortChangesForPush(e){let t=n=>n.type==="deleted"?-wr(n.remotePath):n.type==="renamed"?10:n.type==="added"?20+wr(n.remotePath):30+wr(n.remotePath);return[...e].sort((n,o)=>{let i=t(n),a=t(o);return i!==a?i-a:n.remotePath.localeCompare(o.remotePath)})}},Lc=class extends ai{shouldRun(){return super.shouldRun()&&this.command.hasPushRequests()}async validatePushRequest(e){let t=yt.maxPushFileSizeBytes;if(e.localContentPath)try{let n=await Nc.promises.stat(e.localContentPath);if(t>0&&n.size>t){let o={path:e.path,errorInfo:{reason:"fileTooLarge",message:`File is larger than configured push limit: ${e.path}`,size:n.size,limit:t}};return this.command.reportPushFailure(o,"push validation failed"),o}if(await lv(e.localContentPath)){let o={path:e.path,errorInfo:{reason:"conflictMarkers",message:`File contains unresolved conflict markers: ${e.path}`}};return this.command.reportPushFailure(o,"push validation failed"),o}}catch(n){let o={path:e.path,errorInfo:{reason:"fileReadFailed",message:`Failed to validate push file content: ${e.path}`,cause:n instanceof Error?n.message:String(n)}};return this.command.reportPushFailure(o,"push validation failed"),o}}},Wu=class extends Lc{doRun(){return this.preflightPushRequests()}async preflightPushRequests(){je.info("push preflight start: requests={0}",this.command.run.requests.length);let e=await this.validatePushRequestsBeforePush(this.command.run.requests);this.command.diagnostics.recordPreflightFailures(e),je.info("push preflight done: failures={0}",e.length),e.length>0&&(this.command.finishTask(),this.command.pushResult.failures.push(...e))}async validatePushRequestsBeforePush(e){let t=[];if(this.task.start(Math.max(e.length,1)),e.length===0)return this.task.step(1),t;let n=e.map(o=>({request:o,task:this.task.subTaskMonitor(1)}));for(let{request:o,task:i}of n){this.task.throwIfAborted(),i.start(1);let a=await this.validatePushRequest(o);if(a){t.push(a),i.progress(1);continue}o.contentValidated=!0,i.step(1)}return t}},Uu=class extends Lc{constructor(t,n,o,i){super(t,n);this.resultTask=o;this.doneTask=i}doRun(){return this.uploadPushRequests()}async uploadPushRequests(){je.info("push upload start: requests={0}",this.command.run.requests.length);let t=await this.pushRequests(this.command.run.requests);this.command.pushResult={pushed:[...t.pushed],rejected:[...t.rejected],failures:[...t.failures],...t.metadataVersionSuggestions?{metadataVersionSuggestions:[...t.metadataVersionSuggestions]}:{}},je.info("push upload done: pushed={0} failures={1}",this.command.pushResult.pushed.length,this.command.pushResult.failures.length),this.doneTask.finish()}async pushRequests(t){let n=await this.command.getApiClientForPush(),o=[],i=[];this.task.start(Math.max(t.length,1)),t.length===0&&this.task.step(1);try{for(let l of t){this.task.throwIfAborted();let p=await this.preparePushRequestForUpload(l);if(p){i.push(p),this.task.step(1);continue}try{let m=await this.command.uploadFileMutation(n,l);if(!m.success){let g={path:m.path,errorInfo:m.errorInfo};this.command.reportPushFailure(g,"push item failed")}o.push(m)}catch(m){let g=this.createPushFailureFromMutationError(l,m);if(!g)throw m;i.push(g),this.command.reportPushFailure(g,"push item failed")}this.task.step(1)}}catch(l){throw await this.applyPushResponsesWithProgress(o),l}let a=await this.applyPushResponsesWithProgress(o),s=await this.createMetadataVersionSuggestions(t,o),c=s.length>0?{...a,metadataVersionSuggestions:s}:a;return i.length===0?c:{...c,failures:[...c.failures,...i]}}createPushFailureFromMutationError(t,n){if(!(n instanceof zt))return;let o=n.remoteError?this.toMutationErrorInfo(Hi(on(n.remoteError),{action:t.action,path:t.path,targetPath:t.targetPath}),n):void 0;if(!(!o||!this.isMutationBlockedErrorInfo(o,t)))return{path:this.getMutationFailurePath(t,o),errorInfo:o}}toMutationErrorInfo(t,n){let o=n.remoteError;return{errorCode:t.errorCode??o?.errorCode??n.errorCode,errorType:t.errorType??o?.errorType??n.errorType,message:t.message??o?.message??n.message,properties:bt(t)}}isMutationBlockedErrorInfo(t,n){return qC(t,{action:n.action,path:n.path,targetPath:n.targetPath})}getMutationFailurePath(t,n){let o=bt(n)?.path;return typeof o=="string"&&o.length>0?o:this.getRequestTargetPath(t)}async applyPushResponsesWithProgress(t){this.resultTask.start(Math.max(t.length,1));let n=await this.applyPushResponses(t);return this.resultTask.step(Math.max(t.length,1)),n}async applyPushResponses(t){let n=new Mt(this.command.mirrorRootPath),o=new rr(this.command.workspaceRootPath,n);await new ei({workspace:o,mirror:n,getApiClient:()=>this.command.getApiClientForPush()}).apply(t);let i=t.filter(s=>s.success).map(s=>s.path);return i.length>0&&this.command.pushContext.clearSyncStatusTargets(i),{pushed:i,rejected:[],failures:t.filter(s=>!s.success).map(s=>({path:s.path,errorInfo:s.errorInfo}))}}async preparePushRequestForUpload(t){return t.contentValidated?void 0:this.validatePushRequest(t)}async createMetadataVersionSuggestions(t,n){let o=new Set(n.filter(s=>s.success).map(s=>s.path));if(o.size===0)return[];let i=[],a=new Set;for(let s of t){if(!this.shouldCheckMetadataVersionSuggestion(s,o))continue;let c=this.getRequestTargetPath(s);if(a.has(c))continue;let l=await this.createMetadataVersionSuggestion(s,c);l&&(a.add(c),i.push(l))}return i}shouldCheckMetadataVersionSuggestion(t,n){if(!t.localContentPath||!t.contentChanged||t.isFolder||t.action==="delete")return!1;let o=this.getRequestTargetPath(t);return n.has(o)||n.has(t.path)}async createMetadataVersionSuggestion(t,n){try{let o=t.localContentPath;if(!o)return;let i=this.command.pushContext.getMetadataVersionInfoByPath?.(n),a=i?.contentVersion;if(!i?.upgradeSupported||!a)return;let s=await oc(o),c=this.getMetadataVersionSuggestionKind(s,a);return c?{path:n,currentVersion:s,targetVersion:a,metaType:i.metaType,kind:c}:void 0}catch(o){je.debug(`push metadata suggestion check failed: ${n}`,o);return}}getMetadataVersionSuggestionKind(t,n){return gc(t,n)?"newer":fc(t,n)?"older":void 0}getRequestTargetPath(t){return t.targetPath??t.path}};gu();it();D();J();$();G();gr();var Rt=T("sync.reset"),Wc=class extends Ae{mirror=this.createMirrorStore();workspace=this.createWorkspaceStore(this.mirror);async execute(){Rt.info("reset start: {0}",this.createResetScopeLog()),this.task.start(100);let e=this.task.subTaskMonitor(8),t=this.task.subTaskMonitor(87),n=this.task.subTaskMonitor(3),o=this.task.subTaskMonitor(2);e.start(4),Rt.info("reset prepare start");let{targets:i,localChanges:a}=await this.prepareResetScope();e.step(1),Rt.info("reset targets resolved: {0}",this.formatTargetsForLog(i)),Rt.info("reset local changes checked: local={0}",a.length),a.length>0&&!this.options.force&&this.throwFirstConflict(a,"requiresOverwrite"),e.step(1);let s=this.expandTargetsForRenameChanges(i,a),c=s?this.sortRemotePathsForCheckout(ft(s)):this.sortRemotePathsForCheckout(await this.workspace.listProjectPaths());e.step(1),Rt.info("reset checkout target paths prepared: paths={0}",c.length),Rt.debug(`reset checkout target paths: ${c.join("|")}`);let l=await this.createCheckoutItems(c);e.step(1),Rt.info("reset checkout items prepared: items={0} resources={1}",l.length,l.reduce((g,d)=>g+d.total,0));for(let g of l)Rt.debug(`reset checkout item: remotePath=${g.remotePath} existsInMirror=${g.existsInMirror} total=${g.total}`);Rt.info("reset checkout start: items={0}",l.length);let p=await this.checkoutMirrorToWorkspace(l,t);Rt.info("reset checkout done: updated={0} deleted={1}",p.updated.length,p.deleted.length);let m=[...p.updated,...p.deleted];return n.start(1),Rt.info("reset cleanup status start"),await this.cleanupEmptyOrphanParents(p.deleted,this.mirror,this.workspace),m.length>0&&this.clearSyncStatusTargets(m),n.step(1),Rt.info("reset cleanup status done"),o.finish(),Rt.info("reset done: updated={0} deleted={1}",p.updated.length,p.deleted.length),p}createResetScopeLog(){return this.hasKnownChanges(this.options.changes)?`changes=${this.options.changes.length}`:this.options.paths?.join(", ")??"<all>"}async prepareResetScope(){if(this.hasKnownChanges(this.options.changes)){let t=this.options.changes.filter(at);return{targets:this.getKnownChangeTargets(t),localChanges:t}}let e=await this.resolveTargetRemotePaths(this.options.paths,"mirror-only");return{targets:e,localChanges:this.filterChangesByTargets(this.getLocalSyncChanges(),e)}}formatTargetsForLog(e){return e?`targets=${e.size}`:"<all>"}async checkoutMirrorToWorkspace(e,t){let n=[],o=[];if(e.length===0)return t.finish(),{updated:n,deleted:o};t.start(e.reduce((a,s)=>a+s.total,0));let i=e.map(a=>({...a,task:t.subTaskMonitor(a.total)}));for(let a of i){t.throwIfAborted(),a.task.start(a.total);let s=Date.now();Rt.debug(`reset item start: remotePath=${a.remotePath} existsInMirror=${a.existsInMirror} total=${a.total}`),a.existsInMirror?(await this.workspace.checkoutFromMirror(a.remotePath,a.task),t.throwIfAborted(),n.push(a.remotePath)):(await this.workspace.deletePath(a.remotePath,a.task),t.throwIfAborted(),o.push(a.remotePath)),Rt.debug(`reset item done: remotePath=${a.remotePath} elapsed=${Date.now()-s}ms`)}return t.finish(),{updated:n,deleted:o}}async createCheckoutItems(e){return Promise.all(e.map(async t=>{let n=await this.mirror.exists(t);return{remotePath:t,existsInMirror:n,total:await this.countCheckoutTotal(t,n)}}))}async countCheckoutTotal(e,t){let n=await(t?this.workspace.countCheckoutResources(e):this.workspace.countResources([e]));return Math.max(n,1)}throwFirstConflict(e,t){let n=e[0];throw new Ot("err.sync.conflict",{remotePath:n.remotePath,reason:t})}sortRemotePathsForCheckout(e){return e.sort((t,n)=>t.localeCompare(n))}};var ju=b(require("fs")),ha=b(require("path"));$();D();G();it();var UF=T("sync.restore-local"),Uc=class extends oi{constructor(e,t){super(e,t)}async execute(){let e=this.options.change,t=ha.join(this.workspaceRoot,".succapp",so,Ne(e.remotePath)),n=ha.join(this.workspaceRoot,e.path);try{this.task.throwIfAborted(),await ju.promises.mkdir(ha.dirname(n),{recursive:!0}),await ju.promises.copyFile(t,n)}catch(o){if(F(o))return UF.debug(`pull backup file does not exist: ${t}`),{restored:!1};throw o}return this.context.applySyncOperationResult(e,[{path:e.path,remotePath:e.remotePath,...e.fileId!==void 0?{fileId:e.fileId}:{},type:"modified",contentChanged:!0,metaChanged:!1}]),{restored:!0}}};var co=b(require("fs")),xr=b(require("path"));D();$();it();var fa=class extends Dt{async execute(){return{workspaceRootPath:this.workspaceRoot,entries:await this.listEntries()}}async listEntries(){let e=this.resolveFilterTargets(),t=await _v(this.workspaceRoot);return e.length===0?t:t.filter(n=>e.some(o=>Q(n.path,o)))}resolveFilterTargets(){return(this.options.paths??[]).map(e=>jF(this.workspaceRoot,e))}},jc=class extends Ae{async execute(){let e=await new fa(this.context,this.options).listEntries(),t=Nv(this.workspaceRoot);if(!this.options.paths||this.options.paths.length===0)return await co.promises.rm(t,{recursive:!0,force:!0}),{workspaceRootPath:this.workspaceRoot,cleared:e,remaining:[]};for(let n of e)this.task.throwIfAborted(),await co.promises.rm(n.backupPath,{force:!0}),await BF(xr.dirname(n.backupPath),t);return{workspaceRootPath:this.workspaceRoot,cleared:e,remaining:await _v(this.workspaceRoot)}}};async function _v(r){let e=Nv(r);return(await Lv(e,e)).sort((n,o)=>n.path.localeCompare(o.path))}async function Lv(r,e){let t=await co.promises.readdir(e,{withFileTypes:!0}).catch(o=>{if(F(o))return[];throw o}),n=[];for(let o of t){let i=xr.join(e,o.name);if(o.isDirectory()){n.push(...await Lv(r,i));continue}if(!o.isFile())continue;let a=await co.promises.stat(i),s=xr.relative(r,i).replace(/\\/g,"/");n.push({path:Pe(s),backupPath:i,size:a.size,mtime:a.mtime.toISOString()})}return n}function jF(r,e){return Pe(kr(r,e)??e)}function Nv(r){return xr.join(r,".succapp",so)}async function BF(r,e){let t=r;for(;t!==e&&t.startsWith(e+xr.sep);){if((await co.promises.readdir(t).catch(o=>{if(F(o))return[];throw o})).length>0)return;await co.promises.rmdir(t),t=xr.dirname(t)}}G();J();D();$();it();var Mn=T("sync.remove-project"),Bc=class extends Ae{mirror=this.createMirrorStore();workspace=this.createWorkspaceStore(this.mirror);async execute(){let e=[...new Set(this.options.projectNames.map(l=>Tt(l)))];Mn.info("remove local project start: {0}",e.join(", "));let[t,n]=await Promise.all([this.workspace.listProjectPaths(),this.mirror.listProjectPaths()]),o=new Set([...t,...n]),i=e.filter(l=>!o.has(l)).map(l=>l.slice(1));if(i.length>0)throw new St("err.sync.projectNotFound",{projectNames:i.join(", ")});Mn.info("remove local project resource count start: projects={0}",e.length);let a=await this.createRemoveItems(e);Mn.info("remove local project resource count done: resources={0}",a.reduce((l,p)=>l+p.total,0)),this.task.start(Math.max(a.reduce((l,p)=>l+p.total,0),1)),a.length===0&&this.task.step(1),Mn.info("remove local project files start: projects={0}",a.length);let s=a.map(l=>({...l,task:this.task.subTaskMonitor(l.total)}));for(let l of s)this.task.throwIfAborted(),l.task.start(l.total),await this.workspace.deletePath(l.projectPath,l.task),this.task.throwIfAborted(),await this.mirror.removePath(l.projectPath,l.task),this.task.throwIfAborted(),await this.mirror.removeMeta(l.projectPath);Mn.info("remove local project files done: projects={0}",a.length);let c=e.map(l=>l.slice(1));return Mn.info("remove local project cleanup status start"),this.clearSyncStatusTargets(e),Mn.info("remove local project cleanup status done"),c.length>0&&this.context.notifyLocalProjectsChanged?.(),Mn.info("remove local project done: {0}",c.join(", ")),{projectNames:c}}async createRemoveItems(e){return Promise.all(e.map(async t=>{let[n,o]=await Promise.all([this.workspace.countResources([t]),this.mirror.countMetaResources([t])]);return{projectPath:t,total:Math.max(n+o,1)}}))}};var Wv=b(require("fs")),Bu=b(require("path"));it();var Vc=class extends Dt{async execute(){let e=this.options.source??"server",t=await this.resolveRemotePath(this.options.path,e==="mirror"?"mirror-only":"server-backed");if(e==="mirror"){let i=this.createMirrorStore();return{path:this.options.path,remotePath:t,fileName:Bu.basename(t),source:e,buffer:await Wv.promises.readFile(i.toLocalPath(t))}}let o=await(await this.getApiClient()).getFileContent(t,{revision:this.options.revision});return{path:this.options.path,remotePath:t,fileName:Bu.basename(t),source:e,buffer:o.buffer}}};var Vu=b(require("fs"));it();var qc=3,VF=/\r\n|\n|\r/,Hc=class extends Dt{async execute(){let e=this.options.source??"server",t=await Promise.all(this.options.paths.map(async n=>(this.task.throwIfAborted(),this.diffFile(n,e))));return{source:e,items:t}}async diffFile(e,t){let n=await this.resolveRemotePath(e,t==="mirror"?"mirror-only":"server-backed"),o=this.createMirrorStore(),a=this.createWorkspaceStore(o).toLocalPath(n),[s,c]=await Promise.all([this.readSourceBuffer(n,t,o),Vu.promises.readFile(a)]),l=qF({sourceBuffer:s,workspaceBuffer:c,sourceLabel:`${t}:${n}`,workspaceLabel:`workspace:${n}`});return{path:e,remotePath:n,localPath:a,source:t,sourceSize:s.length,workspaceSize:c.length,changed:l.changed,binary:l.binary,patch:l.text}}async readSourceBuffer(e,t,n){return t==="mirror"?Vu.promises.readFile(n.toLocalPath(e)):(await(await this.getApiClient()).getFileContent(e)).buffer}};function qF(r){if(r.sourceBuffer.equals(r.workspaceBuffer))return{changed:!1,binary:$c(r.sourceBuffer)||$c(r.workspaceBuffer),text:""};if($c(r.sourceBuffer)||$c(r.workspaceBuffer))return{changed:!0,binary:!0,text:[`diff --succapp ${r.sourceLabel} ${r.workspaceLabel}`,`Binary files ${r.sourceLabel} and ${r.workspaceLabel} differ`,""].join(`
69
- `)};let e=jv(r.sourceBuffer),t=jv(r.workspaceBuffer),n=Rv(e,t);return{changed:n.length>0,binary:!1,text:n.length===0?"":$F(r,e,t,n)}}function $F(r,e,t,n){let o=[`diff --succapp ${r.sourceLabel} ${r.workspaceLabel}`,`--- ${r.sourceLabel}`,`+++ ${r.workspaceLabel}`];for(let i of HF(e,t,n))o.push(...KF(i,e));return o.push(""),o.join(`
70
- `)}function HF(r,e,t){let n=[];for(let o of t){let i=zF(r,e,o),a=n.at(-1);if(a&&i.oldStart<=a.oldEnd&&i.newStart<=a.newEnd){a.oldEnd=Math.max(a.oldEnd,i.oldEnd),a.newEnd=Math.max(a.newEnd,i.newEnd),a.patches.push(o);continue}n.push(i)}return n}function zF(r,e,t){let n=Math.max(0,t.buffer1.offset-qc),o=Math.max(0,t.buffer2.offset-qc);return{oldStart:n,oldEnd:Math.min(r.length,t.buffer1.offset+t.buffer1.length+qc),newStart:o,newEnd:Math.min(e.length,t.buffer2.offset+t.buffer2.length+qc),patches:[t]}}function KF(r,e){let t=[`@@ -${Uv(r.oldStart,r.oldEnd-r.oldStart)} +${Uv(r.newStart,r.newEnd-r.newStart)} @@`],n=r.oldStart;for(let o of r.patches){for(let i=n;i<o.buffer1.offset;i++)t.push(` ${e[i]}`);t.push(...o.buffer1.chunk.map(i=>`-${i}`)),t.push(...o.buffer2.chunk.map(i=>`+${i}`)),n=o.buffer1.offset+o.buffer1.length}for(let o=n;o<r.oldEnd;o++)t.push(` ${e[o]}`);return t}function Uv(r,e){return e===0?`${r}`:e===1?`${r+1}`:`${r+1},${e}`}function jv(r){let e=r.toString("utf8");if(e.length===0)return[];let t=e.split(VF);return t.at(-1)===""&&t.pop(),t}function $c(r){return r.includes(0)}it();var zc=class extends Dt{async execute(){let e=await this.resolveRemotePath(this.options.path,"server-backed"),n=await(await this.getApiClient()).getFileHistory(e,{limit:this.options.limit});return{path:this.options.path,remotePath:e,histories:n}}};it();var Kc=class extends Dt{async execute(){return(await this.getApiClient()).getProjects()}};Ar();q();G();var Bv=["missing-baseline"];Ar();q();G();$();var qu=50,Xr=T("sync.repair.missing-baseline"),Gc=class{checkId="missing-baseline";async run(e){(e.task??ht.INSTANCE).throwIfAborted(),Xr.info("missing-baseline check start: mode={0} targets={1}",e.mode,this.formatPaths(e.targetRemotePaths));let n=await this.detectMissingBaselineIssues(e);if(Xr.info("missing-baseline check result: issues={0} projects={1}",n.length,this.formatIssuePaths(n)),e.mode==="fsck"||n.length===0)return{issues:n,repaired:[],unresolved:[]};let o=await this.listServerProjectNames(e),{evaluatedIssues:i,repairableIssues:a,unresolved:s}=this.evaluateRepairability(n,o);Xr.info("missing-baseline repair plan: repairable={0} unresolved={1} repairableProjects={2} unresolvedProjects={3}",a.length,s.length,this.formatIssuePaths(a),this.formatIssuePaths(s));let c=[],l=[];if(a.length>0){await this.fetchMissingBaselines(e,a);let p=await this.detectMissingBaselineIssues(e);({repaired:c,unresolved:l}=this.evaluateRepairResult(a,p))}return Xr.info("missing-baseline repair result: repaired={0} unresolved={1} repairedProjects={2} unresolvedProjects={3}",c.length,s.length+l.length,this.formatIssuePaths(c),this.formatIssuePaths([...s,...l])),{issues:i,repaired:c,unresolved:[...s,...l]}}async detectMissingBaselineIssues(e){let t=await e.workspaceRuntime.listWorkspaceProjects(),n=new Set(await e.workspaceRuntime.listBaselineProjects(e.workspaceRuntime.activeServerUrl)),o=this.resolveTargetProjectNames(e);return Xr.info("missing-baseline project lists: workspaceProjects={0} baselineProjects={1} targetProjects={2}",this.formatProjectNames(t),this.formatProjectNames([...n]),o?this.formatProjectNames([...o]):"<all>"),t.filter(i=>!o||o.has(i)).filter(i=>!n.has(i)).map(i=>this.createMissingBaselineIssue(i))}resolveTargetProjectNames(e){if(!e.targetRemotePaths||e.targetRemotePaths.length===0)return;let t=e.targetRemotePaths.map(n=>this.getProjectName(n)).filter(n=>!!n);return new Set(t)}getProjectName(e){return We(e)?.replace(/^\//,"")}createMissingBaselineIssue(e){let t=Tt(e);return{checkId:this.checkId,strategy:"fetch-baseline",repairable:!0,remotePaths:[t],message:h("workspace.repair.baseline.missing",t),details:{projectName:e,reason:"baselineProjectMissing"}}}async listServerProjectNames(e){let n=await(await e.workspaceRuntime.requireServerClient(e.workspaceRuntime.activeServerUrl)).getProjects();return Xr.info("missing-baseline server projects loaded: count={0} projects={1}",n.length,this.formatProjectNames(n.map(o=>o.name))),new Set(n.map(o=>o.name))}canRepairIssue(e,t){let n=this.getSingleProjectName(e);return!!n&&t.has(n)}evaluateRepairability(e,t){let n=[],o=[],i=[];for(let a of e)if(this.canRepairIssue(a,t))n.push(a),o.push(a);else{let s=this.createServerMissingIssue(a);n.push(s),i.push(s)}return{evaluatedIssues:n,repairableIssues:o,unresolved:i}}createServerMissingIssue(e){let t=this.getSingleProjectName(e);return{...e,repairable:!1,message:h("workspace.repair.baseline.invisible",e.remotePaths.join(", ")),details:{...e.details,projectName:t??"",reason:"serverProjectMissing"}}}evaluateRepairResult(e,t){let n=new Set(t.map(a=>this.getSingleProjectName(a)).filter(a=>!!a)),o=[],i=[];for(let a of e){let s=this.getSingleProjectName(a);s&&!n.has(s)?o.push(a):i.push(this.createBaselineStillMissingIssue(a))}return{repaired:o,unresolved:i}}createBaselineStillMissingIssue(e){return{...e,repairable:!1,message:h("workspace.repair.baseline.mirrorMissing",e.remotePaths.join(", ")),details:{...e.details,reason:"baselineStillMissingAfterFetch"}}}async fetchMissingBaselines(e,t){let n=t.map(o=>this.getSingleProjectName(o)).filter(o=>!!o);if(n.length===0){Xr.info("missing-baseline fetch skipped: no repairable project names");return}Xr.info("missing-baseline fetch start: projects={0}",this.formatProjectNames(n)),await new Fn(e.workspaceRuntime,{projectNames:n,forceRefresh:!0,task:e.task}).execute(),Xr.info("missing-baseline fetch done: projects={0}",this.formatProjectNames(n))}getSingleProjectName(e){let t=e.remotePaths[0];return t?this.getProjectName(t):void 0}formatIssuePaths(e){return this.formatPaths(e.flatMap(t=>t.remotePaths))}formatProjectNames(e){return this.formatPaths(e.map(t=>Tt(t)))}formatPaths(e){if(!e||e.length===0)return"<none>";let t=e.slice(0,qu),n=e.length>qu?` ...(+${e.length-qu})`:"";return t.join(",")+n}};var Jc=class{tasks=new Map;constructor(){this.register(new Gc)}getTask(e){return this.tasks.get(e)}register(e){this.tasks.set(e.checkId,e)}};var ga=T("sync.repair.workspace"),si=class{constructor(e){this.options=e}registry=new Jc;async run(){let e=this.options.task??ht.INSTANCE,t=this.resolveChecks(),n=[];ga.info("workspace repair run start: mode={0} checks={1} workspace={2} server={3}",this.options.mode,t.join(","),this.options.workspaceRuntime.root,this.options.workspaceRuntime.activeServerUrl);for(let i of t){e.throwIfAborted(),ga.info("workspace repair check start: check={0}",i);let a=this.registry.getTask(i);if(a){let s=await a.run({...this.options,task:e});n.push(s),ga.info("workspace repair check done: check={0} issues={1} repaired={2} unresolved={3}",i,s.issues.length,s.repaired.length,s.unresolved.length)}else{let s=this.createUnsupportedCheckIssue(i);n.push({issues:[s],repaired:[],unresolved:this.options.mode==="repair"?[s]:[]}),ga.warn("workspace repair check skipped: check={0} reason=notImplemented",i)}}let o=this.createReport(n);return ga.info("workspace repair run done: mode={0} issues={1} repaired={2} unresolved={3}",this.options.mode,o.issues.length,o.repaired.length,o.unresolved.length),o}resolveChecks(){return this.options.checks&&this.options.checks.length>0?this.options.checks:Bv}createUnsupportedCheckIssue(e){return{checkId:e,strategy:"none",repairable:!1,remotePaths:[],message:h("workspace.repair.check.notImpl",e),details:{checkId:e}}}createReport(e){return{workspaceRootPath:this.options.workspaceRuntime.root,serverUrl:this.options.workspaceRuntime.activeServerUrl,issues:e.flatMap(t=>t.issues),repaired:e.flatMap(t=>t.repaired),unresolved:e.flatMap(t=>t.unresolved)}}};var Yc=class{constructor(e){this.options=e}execute(){return new si(this.options).run()}};var nr=(o=>(o.config="config",o.sync="sync",o.inodeCache="inode-cache",o.init="init",o))(nr||{}),ci=Object.values(nr),ya=0;function zu(r,e){return new Hu(r,e)}var $u=class{constructor(e,t){this.context=e;this.activeServerUrl=t}get root(){return this.context.root}get isConnected(){return this.context.isConnected}get eventBus(){return this.context.eventBus}get lockManager(){return this.context.lockManager}get lockWait(){return this.context.lockWait}get config(){return this.context.config}ensureConfigLoaded(){return this.context.ensureConfigLoaded()}async ensureActiveServerReady(){return this.activeServerUrl?this.activeServerUrl:this.context.ensureActiveServerReady()}startIdeRuntime(){return this.context.startIdeRuntime()}waitInitialized(){return this.context.waitInitialized()}addServer(e){return this.context.addServer(e)}verifyServerReachable(e){return this.context.verifyServerReachable(e)}removeServer(e){return this.context.removeServer(e)}changeServerUrl(e,t,n){return this.context.changeServerUrl(e,t,n)}switchActiveServer(e){return this.context.switchActiveServer(e)}listWorkspaceProjects(){return this.context.listWorkspaceProjects()}listBaselineProjects(e){return this.context.listBaselineProjects(e)}getMetaProjectLocalPath(e){return this.context.getMetaProjectLocalPath(e)}getMetaFileLocalPath(e){return this.context.getMetaFileLocalPath(e)}countWorkspaceFiles(e,t){return this.context.countWorkspaceFiles(e,t)}checkWorkspaceSettings(){return this.context.checkWorkspaceSettings()}initializeWorkspaceSettings(e){return this.context.initializeWorkspaceSettings(e)}connect(e,t){return this.context.connect(e,t)}disconnect(){this.context.disconnect()}requireClient(){return this.context.requireServerClient()}requireServerClient(e){return this.context.requireServerClient(e)}resolveRemoteFilePath(e){return this.context.resolveRemoteFilePath(e)}getMirrorRoot(e=this.activeServerUrl){return this.context.getMirrorRoot(e)}getMetadataVersionInfoByPath(e){return this.context.getMetadataVersionInfoByPath(e)}createSyncService(){return zu(this)}getMetadataVersionInfos(){return this.context.getMetadataVersionInfos()}getMetadataVersionInfo(e){return this.context.getMetadataVersionInfo(e)}getSyncChanges(){return this.context.getSyncChanges()}getSyncSummary(){return this.context.getSyncSummary()}refreshSyncStatus(e){return this.context.refreshSyncStatus(e)}refreshSyncStatusState(e){return this.context.refreshSyncStatusState(e)}clearSyncStatusTargets(e){this.context.clearSyncStatusTargets(e)}notifyLocalProjectsChanged(){this.context.notifyLocalProjectsChanged?.()}applySyncOperationResult(e,t){this.context.applySyncOperationResult(e,t)}consumeFileChanges(e,t){return this.context.consumeFileChanges(e,t)}clearSyncStatus(){this.context.clearSyncStatus()}readTargetStatusSnapshot(e){return this.context.readTargetStatusSnapshot(e)}notifySyncStatusChanged(){this.context.notifySyncStatusChanged()}notifySyncStatusRefreshing(e,t){this.context.notifySyncStatusRefreshing(e,t)}isGitIgnored(e){return this.context.isGitIgnored(e)}dispose(){}};function tt(r,e){return new $u(r,e)}var Hu=class{constructor(e,t){this.context=e;this.agentSource=t?.agentSource??po().source}agentSource;get config(){return{root:this.context.root}}async status(e={}){let t=tt(this.context,await this.context.ensureActiveServerReady());return new wc(t,e).execute()}async clone(e={}){let t=tt(this.context,await this.context.ensureActiveServerReady());return this.withWriteLock("clone",e.task,n=>new Tc(t,{...e,task:n}).execute())}async pull(e={}){let t=tt(this.context,await this.context.ensureActiveServerReady());return this.withWriteLock("pull",e.task,n=>new Ic(t,{...e,task:n}).execute())}async push(e={}){let t=tt(this.context,await this.context.ensureActiveServerReady());return this.withWriteLock("push",e.task,n=>new _c(t,{...e,task:n}).execute())}async upgradeMetadata(e={}){let t=tt(this.context,await this.context.ensureActiveServerReady());return this.withWriteLock("upgradeMetadata",e.task,n=>new aa(t,{...e,task:n}).execute())}async reset(e={}){let t=tt(this.context,await this.context.ensureActiveServerReady());return this.withWriteLock("reset",e.task,n=>new Wc(t,{...e,task:n}).execute())}async restoreLocalChange(e){await this.context.ensureConfigLoaded();let t=tt(this.context,this.context.activeServerUrl);return this.withWriteLock("restoreLocalChange",e.task,n=>new Uc(t,{...e,task:n}).execute())}async listMergeBackups(e={}){await this.context.ensureConfigLoaded();let t=tt(this.context,this.context.activeServerUrl);return new fa(t,e).execute()}async clearMergeBackups(e={}){await this.context.ensureConfigLoaded();let t=tt(this.context,this.context.activeServerUrl);return this.withWriteLock("merge-backup clear",e.task,n=>new jc(t,{...e,task:n}).execute())}async removeProject(e){let t=tt(this.context,await this.context.ensureActiveServerReady());return this.withWriteLock("removeProject",e.task,n=>new Bc(t,{...e,task:n}).execute())}async fsckWorkspace(e={}){let t=tt(this.context,await this.context.ensureActiveServerReady());return new si({...e,mode:"fsck",workspaceRuntime:t}).run()}async repairWorkspace(e={}){let t=tt(this.context,await this.context.ensureActiveServerReady());return this.withWriteLock("repairWorkspace",e.task,n=>new Yc({...e,mode:"repair",workspaceRuntime:t,task:n}).execute(),["config","sync"])}async listWorkspaceProjects(){return await this.context.ensureConfigLoaded(),tt(this.context,this.context.activeServerUrl).listWorkspaceProjects()}async listBaselineProjects(){await this.context.ensureConfigLoaded();let e=tt(this.context,this.context.activeServerUrl);return e.listBaselineProjects(e.activeServerUrl)}async lsRemote(){let e=tt(this.context,await this.context.ensureActiveServerReady());return new Kc(e,{}).execute()}async show(e){let t=tt(this.context,await this.context.ensureActiveServerReady());return new Vc(t,e).execute()}async history(e){let t=tt(this.context,await this.context.ensureActiveServerReady());return new zc(t,e).execute()}async diff(e){let t=tt(this.context,await this.context.ensureActiveServerReady());return new Hc(t,e).execute()}localToMetaPath(e){return kr(this.context.root,e)}isTrackedFile(e){return this.localToMetaPath(e)!==void 0}async withWriteLock(e,t,n,o=["sync"]){let i=t&&t!==ht.INSTANCE?t:new go;return this.context.lockManager.withLock({scopes:o,command:e,source:this.agentSource,wait:this.context.lockWait},async a=>(i.setAbortSignal(qh(i.getAbortSignal(),a)),n(i)))}};uu();var Gu=b(require("fs")),lo=b(require("path"));G();var Dn=class{disposables=[];_disposed=!1;get disposed(){return this._disposed}add(e){return this.disposables.push(e),e}dispose(){if(!this._disposed){this._disposed=!0;for(let e of this.disposables.splice(0))e.dispose()}}};D();J();ne();ia();var Ku=T("workspace.config"),GF=".succapp/config.json",Vv="reloadConfigAfterFileChange";function Ca(){return{version:2,servers:[],activeServerUrl:""}}function JF(r,e,t){let n=Se(e),o=Se(t);if(o===n)throw new E("err.workspace.sameServerUrl",{server:o});let i=r.find(a=>!Qe(a,n)&&Qe(a,o));if(i)throw new E("err.workspace.serverAlreadyExists",{duplicatedServer:i,server:o});return o}var Xc=class{constructor(e,t,n){this.workspaceRoot=e;this.eventBus=t;if(this.configPath=lo.join(e,".succapp","config.json"),t&&n){let o=this.disposables.add(n.createFileWatcher(e,GF));this.disposables.add(o.onFileChanged(i=>{this.isConfigFilePath(i.filePath)&&Do(this,Vv,50,async()=>{await this.reloadAfterFileChange().catch(a=>{Ku.warn(`reload workspace config after file change failed: ${this.configPath}`,a)})})}))}}disposables=new Dn;data=null;loaded=!1;configPath;get path(){return this.configPath}get(){return this.data??void 0}async load(){return Ur(this,"load",()=>this.doLoad())}async ensureLoaded(){this.loaded||await this.load()}async reloadIfChanged(){return await Ur(this,"reload",()=>this.doReloadIfChanged())===!0}async doReloadIfChanged(e=!1){let t=this.data!==null,n=fo(this.get()),o=await this.readConfigData(!e,e);if(o===void 0&&e){this.loaded=!0;return}this.data=o,this.loaded=!0;let i=t!==(this.data!==null)||!ar(n??null,this.get()??null);return i&&this.fireConfigChanged(),i}async doLoad(){this.data=await this.readConfigData(),this.loaded=!0}async readConfigData(e=!0,t=!1){try{let n=await Hf(this.configPath,{attempts:t?3:1,delayMs:50,ignoreParseError:e});return n?this.normalizeLoadedData(n):void 0}catch(n){if(F(n))return null;let o=n instanceof Error?n.message:String(n);e?Ku.warn(".succapp/config.json is corrupted, ignoring",o):Ku.debug(".succapp/config.json is not ready, will retry",o);return}}normalizeLoadedData(e){if(Array.isArray(e.servers)&&typeof e.activeServerUrl=="string"){let t=[];for(let s of e.servers){let c=Se(s);t.some(l=>Qe(l,c))||t.push(c)}let n=e.activeServerUrl?Se(e.activeServerUrl):"",o=n?t.find(s=>Qe(s,n)):void 0,i={version:e.version??2,servers:t,activeServerUrl:o??t[0]??""},a=oa(e.serverVersion);return a&&(i.serverVersion=a),i}return Ca()}async save(){if(!this.data)return;let e=lo.dirname(this.configPath);await Gu.promises.mkdir(e,{recursive:!0}),await Gu.promises.writeFile(this.configPath,JSON.stringify(this.data,null,2),"utf-8"),this.loaded=!0}async mutateAndSave(e){let t=this.data!==null,n=fo(this.get()),o=this.data?fo(this.data):this.data;e();try{await this.save()}catch(i){throw this.data=o,i}(t!==(this.data!==null)||!ar(n??null,this.get()??null))&&this.fireConfigChanged()}async initialize(e){let t=Se(e);await this.mutateAndSave(()=>{this.data={version:2,servers:[t],activeServerUrl:t}})}async ensureFile(){return await this.ensureLoaded(),this.data===null&&await this.mutateAndSave(()=>{this.data=Ca()}),this.configPath}getServers(){return this.data?.servers??[]}getActiveServerUrl(){return this.data?.activeServerUrl??""}getServerVersion(){return this.data?.serverVersion}async setServerVersion(e){await this.ensureLoaded();let t=oa(e);!t||this.data?.serverVersion===t||await this.mutateAndSave(()=>{let n=this.data??Ca();n.serverVersion=t,this.data=n})}hasServer(e){return!!this.resolveServerUrl(e)}resolveServerUrl(e){let t=Se(e);return this.getServers().find(n=>Qe(n,t))}validateServerUrlChange(e,t){return JF(this.getServers(),e,t)}async addServer(e){await this.ensureLoaded();let t=Se(e);await this.mutateAndSave(()=>{let n=this.data??Ca();n.servers=n.servers??[];let o=n.servers.find(i=>Qe(i,t));o||n.servers.push(t),n.activeServerUrl=o??t,this.data=n})}async removeServer(e){if(await this.ensureLoaded(),!this.data)return;let t=Se(e);await this.mutateAndSave(()=>{let n=this.data;n.servers=n.servers.filter(o=>!Qe(o,t)),Qe(n.activeServerUrl,t)&&(n.activeServerUrl=n.servers[0]??"")})}async changeServerUrl(e,t){await this.ensureLoaded();let n=this.data;if(!n)throw new Error(`server not configured: ${e}`);let o=this.resolveServerUrl(e);if(!o)throw new Error(`server not configured: ${e}`);let i=this.validateServerUrlChange(o,t);return await this.mutateAndSave(()=>{n.servers=n.servers.map(a=>Qe(a,o)?i:a),Qe(n.activeServerUrl,o)&&(n.activeServerUrl=i),this.data=n}),i}async setActiveServerUrl(e){await this.ensureLoaded();let t=Se(e);await this.mutateAndSave(()=>{let n=this.data??Ca();n.servers=n.servers??[];let o=n.servers.find(i=>Qe(i,t));o||n.servers.push(t),n.activeServerUrl=o??t,this.data=n})}get root(){return this.workspaceRoot}dispose(){Io(this,Vv),this.disposables.dispose()}fireConfigChanged(){this.eventBus?.fire(new $e("workspace.config.changed",{root:this.workspaceRoot},this))}async reloadAfterFileChange(){await Ur(this,"reload",()=>this.doReloadIfChanged(!0))===void 0&&await this.reloadIfChanged()}isConfigFilePath(e){return lo.resolve(e)===lo.resolve(this.configPath)}};D();G();q();Ar();Zo();na();G();var qv=T("sync.auto"),$v="autoPush",Qc=class{constructor(e,t,n){this.workspaceRoot=e;this.callbacks=n;this.disposables.push(t.on("workspace.file.changed",o=>{o.payload.root===this.workspaceRoot&&yt.autoPush&&this.scheduleAutoPush()}))}autoPullTimer;disposables=[];scheduleAutoPush(){yt.autoPush&&Do(this,$v,yt.autoPushDelay,async()=>{yt.autoPush&&await this.callbacks.onAutoPush().catch(e=>qv.error("auto push failed",e))})}cancelPendingAutoPush(){Io(this,$v)}refreshAutoSync(){yt.autoPush||this.cancelPendingAutoPush(),this.startAutoPull()}startAutoPull(){this.stopAutoPull(),yt.autoPull&&(this.autoPullTimer=setInterval(()=>{this.callbacks.onAutoPull().catch(e=>qv.error("auto pull failed",e))},yt.autoPullInterval*1e3))}stopAutoPull(){this.autoPullTimer&&(clearInterval(this.autoPullTimer),this.autoPullTimer=void 0)}dispose(){this.stopAutoPull(),this.cancelPendingAutoPush(),this.disposables.forEach(e=>e.dispose())}};To();$();Je();gr();G();var Zc=class{constructor(e,t,n=()=>{}){this.id=e;this.target=t;this.publishResult=n;this.scope=t.kind==="all"?"all":"targets"}kind="clear";source="clear";scope;toResult(){return{kind:"clear",target:this.target}}async run(){return this.toResult()}publish(e){return this.publishResult(e)}};var Sa=b(require("path"));function YF(r){let e="";for(let t=0;t<r.length;t++){let n=r[t];n==="*"&&r[t+1]==="*"?r[t+2]==="/"?(e+="(?:.*/)?",t+=2):(e+=".*",t++):n==="*"?e+="[^/]*":n==="?"?e+="[^/]":".+^$()|{}[]\\".includes(n)?e+="\\"+n:e+=n}return new RegExp("^"+e+"$")}var Hv=new Map;function zv(r){let e=Hv.get(r);return e||(e=YF(r),Hv.set(r,e)),e}function el(r,e){if(!e||e.length===0)return!1;let t=r.replace(/^\/+/,"");return e.some(n=>zv(n).test(t)||zv(n).test("/"+t))}Je();$();gr();var or=class{constructor(e,t){this.id=e;this.fileChanges=[...t.fileChanges],this.workspace=t.workspace,this.bulk=!!t.bulk,this.getChanges=t.getChanges,this.publishResult=t.publish??(()=>{})}kind="fileWatch";source="fileWatch";scope="targets";cancelled=!1;fileChanges;workspace;bulk;getChanges;publishResult;abort(){this.cancelled=!0}isCancelled(){return this.cancelled}merge(e){this.cancelled||e.length===0||this.fileChanges.push(...e)}mergeTask(e){this.merge(e.fileChanges),this.bulk=this.bulk||e.bulk}async run(){let e=this.workspace;if(this.cancelled||!e||this.fileChanges.length===0)return{kind:"noop"};if(this.bulk)return this.requestBulkLocalRefresh();let t=this.createFileChangeStatusTargets(e);if(this.cancelled||t.length===0)return{kind:"noop"};if(t.some(i=>i.isDotMeta))return this.requestLocalRefresh(t);let n=await Promise.all(t.map(i=>e.readTargetStatusSnapshot(i)));if(this.cancelled)return{kind:"noop"};if(this.shouldRefreshAllForFolderRenameRelatedTargets(t,n))return this.requestLocalRefresh(t);let o=this.createFastFileWatchChanges(e,n);return!o||this.shouldRefreshAllForFolderSubtreeBoundary(o)?this.requestLocalRefresh(t):{kind:"replaceTargets",targetRemotePaths:[...new Set(t.map(i=>i.remotePath))],changes:o,mode:"fileWatch"}}publish(e){if(!this.cancelled)return this.publishResult(e)}createFileChangeStatusTargets(e){let t=new Map;for(let n of this.fileChanges){let o=this.resolveFileChangeStatusTarget(e,n);o&&t.set(`${o.type}\0${o.remotePath}`,o)}return[...t.values()]}requestLocalRefresh(e){return{kind:"requestRefresh",scope:"local",source:"manual",rootRemotePath:this.createRefreshRootRemotePath(e)}}requestBulkLocalRefresh(){return{kind:"requestRefresh",scope:"local",source:"manual",rootRemotePath:void 0}}createRefreshRootRemotePath(e){let t=[...e.map(o=>o.remotePath),...this.getChanges().filter(at).flatMap(o=>[o.remotePath,o.oldRemotePath])].filter(o=>!!o),n=Wg(t);return n==="/"?void 0:n}resolveFileChangeStatusTarget(e,t){let n=kr(e.root,t.filePath);if(!n)return;let o=Sa.posix.basename(n)===Y,i=o?Sa.posix.dirname(n):n;return{filePath:o?Sa.dirname(t.filePath):t.filePath,remotePath:i,type:t.type,isDotMeta:o}}shouldRefreshAllForFolderRenameRelatedTargets(e,t){let n=this.getChanges().filter(i=>i.type==="renamed"&&!!i.isFolder&&!!i.oldRemotePath);if(n.length===0)return!1;let o=new Map(t.map(i=>[i.remotePath,i]));for(let i of e){let a=o.get(i.remotePath),s=a?.workspace.kind==="folder"||a?.mirror.kind==="folder";for(let c of n){let l=c.oldRemotePath;if(s&&(i.remotePath!==c.remotePath&&Q(c.remotePath,i.remotePath)||i.remotePath!==l&&Q(l,i.remotePath))||i.remotePath!==l&&Q(i.remotePath,l))return!0;if(!(i.remotePath===c.remotePath||!Q(i.remotePath,c.remotePath))&&(i.type==="deleted"||a?.workspace.fileId!==void 0||a?.mirror.fileId!==void 0))return!0}}return!1}createFastFileWatchChanges(e,t){if(t.some(s=>s.workspace.kind==="unknown"||s.mirror.kind==="unknown"))return;let n=this.createFastRenameChanges(t);if(!n)return;let o=new Set;for(let s of n)o.add(s.remotePath),s.oldRemotePath&&o.add(s.oldRemotePath);let i=[...n];for(let s of t){if(o.has(s.remotePath))continue;if(this.shouldRefreshForUnpairedIdentitySnapshot(s))return;let c=this.createFastChange(s);c&&i.push(c)}let a=new Map(t.map(s=>[s.remotePath,s]));return i.filter(s=>{if(s.type!=="added")return!0;let c=a.get(s.remotePath);return!c||c.workspace.fileId||c.mirror.fileId?!0:!e.isGitIgnored(s.remotePath)&&!el(s.remotePath.replace(/^\//,""),yt.syncIgnore)})}shouldRefreshForUnpairedIdentitySnapshot(e){return e.workspace.kind!=="missing"&&e.mirror.kind==="missing"&&!e.workspace.fileId&&!!e.workspace.identity||e.workspace.kind==="missing"&&e.mirror.kind!=="missing"&&!e.mirror.fileId&&!!e.mirror.identity}shouldRefreshAllForFolderSubtreeBoundary(e){return e.some(t=>t.isFolder&&(t.type==="added"||t.type==="deleted"))}createFastRenameChanges(e){let t=e.filter(a=>a.workspace.kind==="missing"&&a.mirror.kind!=="missing"),n=e.filter(a=>a.workspace.kind!=="missing"&&a.mirror.kind==="missing");if(t.length===0||n.length===0)return[];if(t.length!==n.length)return;let o=[],i=new Set;for(let a of t){let s=a.mirror.identity;if(!s)return;let c=n.filter(p=>!i.has(p)&&p.workspace.identity===s);if(c.length!==1||a.mirror.kind==="folder"||c[0].workspace.kind==="folder")return;let l=c[0];i.add(l),o.push({path:this.toRelativePath(l.remotePath),remotePath:l.remotePath,...this.getFileIdProperty(l.workspace.fileId??a.mirror.fileId),oldPath:this.toRelativePath(a.remotePath),oldRemotePath:a.remotePath,type:"renamed",isFolder:!1,contentChanged:l.contentChanged,metaChanged:l.metaChanged})}if(!(i.size!==n.length||o.length!==t.length))return o}createFastChange(e){let t=e.workspace.kind,n=e.mirror.kind;if(!(t==="missing"&&n==="missing")){if(t!=="missing"&&n==="missing")return{path:this.toRelativePath(e.remotePath),remotePath:e.remotePath,...this.getFileIdProperty(e.workspace.fileId),type:"added",isFolder:t==="folder"};if(t==="missing"&&n!=="missing")return{path:this.toRelativePath(e.remotePath),remotePath:e.remotePath,...this.getFileIdProperty(e.mirror.fileId),type:"deleted",isFolder:n==="folder"};if(!(!e.contentChanged&&!e.metaChanged))return{path:this.toRelativePath(e.remotePath),remotePath:e.remotePath,...this.getFileIdProperty(e.workspace.fileId??e.mirror.fileId),type:"modified",isFolder:t==="folder",contentChanged:e.contentChanged,metaChanged:e.metaChanged}}}getFileIdProperty(e){return e===void 0?{}:{fileId:e}}toRelativePath(e){return e.replace(/^\//,"")}};gr();var tl=class{constructor(e,t,n=[],o=()=>{}){this.id=e;this.handledChange=t;this.remainingChanges=n;this.publishResult=o}kind="operationResult";source="operation";scope="targets";toResult(){return{kind:"replaceTargets",targetRemotePaths:ca(this.handledChange),changes:this.remainingChanges}}async run(){return this.toResult()}publish(e){return this.publishResult(e)}};var rl=class{constructor(e,t){this.id=e;this.source=t.source,this.targetRemotePaths=[...t.targetRemotePaths],this.changes=[...t.changes],this.mode=t.mode,this.publishResult=t.publish??(()=>{})}kind="replaceTargets";source;scope="targets";targetRemotePaths;changes;mode;publishResult;toResult(){return{kind:"replaceTargets",targetRemotePaths:this.targetRemotePaths,changes:this.changes,mode:this.mode}}async run(){return this.toResult()}publish(e){return this.publishResult(e)}};Ar();G();D();J();var wa=b(require("fs")),al=b(require("path"));Je();$();D();G();pn();Ar();Zo();na();qt();var va=b(require("fs")),ka=b(require("path")),Fk=require("crypto"),Mk=b(Pk()),Dk=b(Ek());Je();vt();$();D();pn();G();function ol(r){return{dev:r.dev,ino:r.ino,size:r.size,mtimeMs:r.mtimeMs,ctimeMs:r.ctimeMs}}var om="sha256",bk=".succapp/cache/inode-index.json",IM=.6,Tk=2,AM=1e4,OM=20,xk=5*1024*1024,_M=80,LM=200,NM=8,WM=4,UM=64,jM=2,BM=500,VM=1e4,Oe=T("sync.detector.workspace"),il=class{constructor(e){this.options=e;this.workspaceCachePath=ka.join(e.workspaceRoot,bk),this.mirrorCachePath=ka.join(e.remoteMirrorRoot,bk)}workspaceInodeCache=new Map;mirrorInodeCache=new Map;workspacePathToInode=new Map;mirrorPathToInode=new Map;workspaceCachePath;mirrorCachePath;workspaceInodeCacheDirty=!1;mirrorInodeCacheDirty=!1;workspaceFullScanInodeKeys=new Set;mirrorFullScanInodeKeys=new Set;workspaceFullScanRecorded=!1;mirrorFullScanRecorded=!1;projectCaches=new Map;pendingDigests=new Map;pendingSimilarity=new Map;async findInodeFileCandidates(e,t){let n=this.createOperationCache();await this.prefetchStats([...e,...t],n);let o=await this.groupFilesByInode(t,n),i=[];for(let a of e){let s=await this.getStatCached(a,n),c=s?this.getInodeKey(s):void 0;if(c)for(let l of o.get(c)??[])a.metaPath!==l.metaPath&&i.push({localEntry:a,remoteEntry:l,score:1,reason:"sameInode"})}return i}async findEqualFileCandidates(e,t){let n=this.createOperationCache();await this.prefetchStats([...e,...t],n);let o=await this.groupFilesBySize(t,n),i=[];for(let a of e){let s=await this.getStatCached(a,n);if(!s)continue;let c=o.get(s.size);if(!c)continue;let l;for(let p of c){let m=await this.compareByStat(a,p,n);if(m==="different")continue;if(m==="same"){i.push({localEntry:a,remoteEntry:p,score:1,reason:"sameContentHash"});continue}if(l??=await this.getContentDigest(a,n),!l)continue;(await this.getContentDigest(p,n))?.value===l.value&&i.push({localEntry:a,remoteEntry:p,score:1,reason:"sameContentHash"})}}return i}async findSimilarFileCandidates(e,t){let n={fileCandidateBuckets:0,fileComparableRefs:0,fileEstimatedPairs:0,fileComparedPairs:0,fileTopByLeft:0,fileTopByRight:0};if(e.length===0||t.length===0)return{candidates:[],stats:n};let o=this.createOperationCache(!0),i=this.groupSimilarityRightFiles(t),a=this.collectComparableEntries(e,i),s=this.estimateSimilarityPairs(e,i);n.fileCandidateBuckets=i.size,n.fileComparableRefs=a.size,n.fileEstimatedPairs=s;let c=Date.now();Oe.debug("collect file similarity start localCandidates=%d remoteCandidates=%d buckets=%d comparableRefs=%d estimatedPairs=%d",e.length,t.length,i.size,a.size,s),await this.prefetchStats([...a.values()],o);let l=new Map,p=new Map,m=this.createSimilarityPairCursor(e,i),g=0,d=Array.from({length:Math.min(WM,Math.max(1,a.size))},async()=>{for(;;){let y=m();if(!y)return;let[C,v]=y;g++,n.fileComparedPairs++;let P=await this.compareSimilarityPair(C,v,o);P.score>=IM&&(this.addTopSimilarityCandidate(l,this.getEntryKey(P.left),P,Tk),this.addTopSimilarityCandidate(p,this.getEntryKey(P.right),P,Tk))}});await Promise.all(d),n.fileTopByLeft=l.size,n.fileTopByRight=p.size,Oe.debug("collect file similarity compared elapsed=%dms comparedPairs=%d topByLeft=%d topByRight=%d",Date.now()-c,g,l.size,p.size);let f=new Set;for(let y of[l,p])for(let C of y.values())for(let v of C)f.add(v);return{candidates:[...f].sort((y,C)=>C.score-y.score).map(y=>({localEntry:y.left,remoteEntry:y.right,score:y.score,reason:y.score===1?"sameContentHash":"contentSimilarity"})),stats:n}}getEntryLocalPath(e){return te(e.side==="workspace"?this.options.workspaceRoot:this.options.remoteMirrorRoot,e.metaPath)}getEntryKey(e){return e.side+"\0"+e.metaPath}async areEntriesEqual(e,t){let n=this.createOperationCache(),o=await this.compareByStat(e,t,n);if(o!=="unknown")return o;let[i,a]=await Promise.all([this.getContentDigest(e,n),this.getContentDigest(t,n)]);return!i||!a?"unknown":i.value===a.value?"same":"different"}async compareByStat(e,t,n){let[o,i]=await Promise.all([this.getStatCached(e,n),this.getStatCached(t,n)]);return!o||!i?"unknown":o.size!==i.size?"different":this.isSameInode(o,i)?"same":"unknown"}isSameInode(e,t){return!!e.dev&&!!t.dev&&!!e.ino&&!!t.ino&&e.dev===t.dev&&e.ino===t.ino}async getStatCached(e,t){if(e.stat)return e.stat;let n=this.getEntryKey(e),o=t.stats.get(n);if(o)return o;let i=this.readStat(e);return t.stats.set(n,i),i}async readStat(e){try{let t=await va.promises.stat(this.getEntryLocalPath(e));return t.isFile()?ol(t):void 0}catch(t){if(!Ei(t))throw t;Oe.debug("skip unreadable file stat: %s",this.getEntryLocalPath(e),t);return}}getContentDigest(e,t){let n=this.getEntryKey(e),o=t.digests.get(n);if(o)return o;let i=this.getContentDigestWithContext(e,t);return t.digests.set(n,i),i}async getContentDigestWithContext(e,t){let n=await this.getStatCached(e,t);if(!n)return;let o=this.getEntryKey(e),i=this.pendingDigests.get(o);if(i)return i;let a=this.getContentDigestNow(e,n,t).finally(()=>this.pendingDigests.delete(o));return this.pendingDigests.set(o,a),a}async getContentDigestNow(e,t,n){let o=this.getInodeKey(t);if(o){let a=this.getInodeCache(e.side).get(o);if(this.isMatchingInodeCacheEntry(a,t))return{algorithm:om,value:a.sha256,size:t.size,mtimeMs:t.mtimeMs,ctimeMs:t.ctimeMs,updatedAt:Date.now()}}try{let i={algorithm:om,value:await this.computeContentHash(e,t,n),size:t.size,mtimeMs:t.mtimeMs,ctimeMs:t.ctimeMs,updatedAt:Date.now()};if(o){let a=this.getInodeCache(e.side).get(o);this.rememberInodeCacheEntry(e,o,{sha256:i.value,tlsh:this.getReusableCachedTlsh(a,i.value),size:t.size,mtimeMs:t.mtimeMs,ctimeMs:t.ctimeMs})}return i}catch(i){if(!Ei(i))throw i;Oe.debug("skip unreadable file digest: %s",this.getEntryLocalPath(e),i);return}}isMatchingInodeCacheEntry(e,t){return this.isCompleteInodeCacheEntry(e)&&this.isMatchingInodeCacheStat(e,t)}isMatchingInodeCacheStat(e,t){return e.size===t.size&&e.mtimeMs===t.mtimeMs&&e.ctimeMs===t.ctimeMs}isCompleteInodeCacheEntry(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.sha256=="string"&&t.sha256.length>0&&Number.isFinite(t.size)&&Number.isFinite(t.mtimeMs)&&Number.isFinite(t.ctimeMs)}getCachedTlsh(e){return typeof e.tlsh=="string"&&e.tlsh.length>0?e.tlsh:void 0}getReusableCachedTlsh(e,t){return e?.sha256===t?this.getCachedTlsh(e):void 0}async computeContentHash(e,t,n){let o=await this.getSmallFileContent(e,t,n);return o?o.contentHash:sc(this.getEntryLocalPath(e))}async compareSimilarityPair(e,t,n){if(await this.compareByStat(e,t,n)==="same")return{left:e,right:t,score:1};let[i,a]=await Promise.all([this.getContentDigest(e,n),this.getContentDigest(t,n)]);if(i&&a&&i.value===a.value)return{left:e,right:t,score:1};let[s,c]=await Promise.all([this.getTlshProfile(e,n),this.getTlshProfile(t,n)]);if(!s||!c)return{left:e,right:t,score:0};let l=s.digest.calculateDifference(c.digest,!0);return l>_M?{left:e,right:t,score:0}:{left:e,right:t,score:Math.max(0,1-l/LM)}}getTlshProfile(e,t){let n=this.getEntryKey(e),o=t.profiles.get(n);if(o)return o;let i=this.getTlshProfileWithContext(e,t);return t.profiles.set(n,i),i}async getTlshProfileWithContext(e,t){let n=await this.getSimilarityDigest(e,t);if(!n)return;let o=this.buildTlshProfile(n);if(o)return o;Oe.debug("repair invalid TLSH profile side=%s path=%s",e.side,e.metaPath);let i=await this.getStatCached(e,t);i&&await this.invalidateStat(e,i),await this.invalidateSimilarityDigest(e,t);let a=await this.getSimilarityDigest(e,t);if(a)return this.buildTlshProfile(a)}buildTlshProfile(e){try{let t=new Dk.default().withHash(e).build();return t.calculateDifference(t,!0),{digest:t}}catch(t){Oe.debug("skip invalid TLSH digest: %s",e,t);return}}async getSimilarityDigest(e,t){let n=await this.getStatCached(e,t);if(!n)return;let o=await this.getContentDigest(e,t);if(!o||o.size>xk)return;let i=We(e.metaPath)??"/",a=i+"\0"+o.value,s=this.pendingSimilarity.get(a);if(s)return s;let c=this.getSimilarityDigestNow(i,e,o,n,t).finally(()=>this.pendingSimilarity.delete(a));return this.pendingSimilarity.set(a,c),c}async getSimilarityDigestNow(e,t,n,o,i){let a=await this.withProjectCache(e,async l=>l.similarity.get(n.value));if(a)return a.updatedAt=Date.now(),a.unsupported?void 0:a.tlsh;let s=this.getInodeKey(o);if(s){let p=this.getInodeCache(t.side).get(s);if(this.isMatchingInodeCacheEntry(p,o)){let m=this.getCachedTlsh(p);if(m){if(this.buildTlshProfile(m))return await this.withProjectCache(e,async g=>{g.similarity.set(n.value,{tlsh:m,size:n.size,updatedAt:Date.now()}),this.pruneState(g)}),m;Oe.debug("drop invalid inode cached TLSH side=%s path=%s inode=%s",t.side,t.metaPath,s),this.invalidateStat(t,o)}}}let c=await this.computeTlshHash(t,o,i);if(await this.withProjectCache(e,async l=>{l.similarity.set(n.value,{tlsh:c.hash,unsupported:!c.hash,size:n.size,updatedAt:Date.now()}),this.pruneState(l)}),s){let l=this.getInodeCache(t.side).get(s);this.rememberInodeCacheEntry(t,s,{sha256:n.value,tlsh:c.hash,size:o.size,mtimeMs:o.mtimeMs,ctimeMs:o.ctimeMs})}return c.hash}async computeTlshHash(e,t,n){let o=await this.getSmallFileContent(e,t,n);if(o)return o.similarity;let i=await this.readTlshBuffer(e);return i?this.computeTlshHashFromBuffer(i):{cacheUnsupported:!1}}computeTlshHashFromBuffer(e){try{return{hash:(0,Mk.default)(e.toString("latin1")),cacheUnsupported:!1}}catch(t){let n=t instanceof Error?t.message:String(t);return Oe.debug("skip TLSH digest because hash library rejected buffer: %s",n),{cacheUnsupported:!1}}}async readTlshBuffer(e){try{return await va.promises.readFile(this.getEntryLocalPath(e))}catch(t){if(!Ei(t))throw t;Oe.debug("skip tlsh file read: %s",e.metaPath,t);return}}getSmallFileContent(e,t,n){if(!n.preferSmallFileBuffer||t.size>xk)return Promise.resolve(void 0);let o=this.getEntryKey(e),i=n.smallFiles.get(o);if(i)return i;let a=this.readSmallFileContent(e);return n.smallFiles.set(o,a),this.pruneOperationSmallFiles(n),a}pruneOperationSmallFiles(e){for(;e.smallFiles.size>UM;){let t=e.smallFiles.keys().next().value;if(t===void 0)return;e.smallFiles.delete(t)}}async readSmallFileContent(e){try{let t=await va.promises.readFile(this.getEntryLocalPath(e));return{contentHash:(0,Fk.createHash)(om).update(t).digest("hex"),similarity:this.computeTlshHashFromBuffer(t)}}catch(t){if(!Ei(t))throw t;Oe.debug("skip unreadable small file: %s",this.getEntryLocalPath(e),t);return}}createOperationCache(e=!1){return{preferSmallFileBuffer:e,stats:new Map,digests:new Map,profiles:new Map,smallFiles:new Map}}async prefetchStats(e,t){let n=new ze(NM);await Promise.all(e.map(o=>n.addTask(async()=>{await this.getStatCached(o,t)})))}async groupFilesBySize(e,t){let n=new Map;for(let o of e){let i=await this.getStatCached(o,t);if(!i)continue;let a=n.get(i.size);a||(a=[],n.set(i.size,a)),a.push(o)}return n}async groupFilesByInode(e,t){let n=new Map;for(let o of e){let i=await this.getStatCached(o,t),a=i?this.getInodeKey(i):void 0;if(!a)continue;let s=n.get(a);s||(s=[],n.set(a,s)),s.push(o)}return n}getInodeKey(e){return this.getInodeKeyString(e.dev,e.ino)}groupSimilarityRightFiles(e){let t=new Map;for(let n of e){let o=this.getSimilarityBucketKey(n),i=t.get(o);i?i.push(n):t.set(o,[n])}return t}getSimilarityBucketKey(e){return ka.posix.extname(e.metaPath).toLowerCase()}collectComparableEntries(e,t){let n=new Map,o=new Set;for(let i of e){let a=this.getSimilarityBucketKey(i),s=t.get(a);if(s?.length&&(n.set(this.getEntryKey(i),i),!o.has(a))){o.add(a);for(let c of s)n.set(this.getEntryKey(c),c)}}return n}createSimilarityPairCursor(e,t){let n=0,o=0,i,a=[];return()=>{for(;;){if(i&&o<a.length){let s=a[o++];if(i.metaPath!==s.metaPath)return[i,s];continue}if(n>=e.length)return;i=e[n++],o=0,a=t.get(this.getSimilarityBucketKey(i))??[]}}}addTopSimilarityCandidate(e,t,n,o){let i=e.get(t)??[];i.push(n),e.set(t,this.sortSimilarityCandidates(i).slice(0,o))}sortSimilarityCandidates(e){return[...e].sort((t,n)=>{let o=n.score-t.score;return o!==0?o:this.getEntryKey(t.left).localeCompare(this.getEntryKey(n.left))})}async withProjectCache(e,t){let n=this.pinProjectCache(e);try{return await t(n)}finally{n.activeCount--,this.enforceProjectCacheLimit()}}pinProjectCache(e){let t=this.projectCaches.get(e);return t||(t={lastAccessAt:Date.now(),activeCount:0,similarity:new Map},this.projectCaches.set(e,t)),t.lastAccessAt=Date.now(),t.activeCount++,this.enforceProjectCacheLimit(),t}enforceProjectCacheLimit(){for(;this.projectCaches.size>OM;)if(!this.evictOldestProjectCache())return}evictOldestProjectCache(){let e=[...this.projectCaches.entries()].filter(([,o])=>o.activeCount===0).sort((o,i)=>o[1].lastAccessAt-i[1].lastAccessAt)[0];if(!e)return!1;let[t,n]=e;return n.activeCount>0?!1:(this.projectCaches.delete(t),!0)}pruneState(e){return this.pruneMap(e.similarity,AM)}pruneMap(e,t){if(e.size<=t)return!1;let n=[...e.entries()].sort((o,i)=>i[1].updatedAt-o[1].updatedAt).slice(0,t);e.clear();for(let[o,i]of n)e.set(o,i);return!0}getInodeCache(e){return e==="workspace"?this.workspaceInodeCache:this.mirrorInodeCache}getPathToInode(e){return e==="workspace"?this.workspacePathToInode:this.mirrorPathToInode}markInodeCacheDirty(e){e==="workspace"?this.workspaceInodeCacheDirty=!0:this.mirrorInodeCacheDirty=!0}clearInodeCacheDirty(){this.workspaceInodeCacheDirty=!1,this.mirrorInodeCacheDirty=!1}rememberInodeCacheEntry(e,t,n){this.getInodeCache(e.side).set(t,n),this.getPathToInode(e.side).set(this.getEntryKey(e),t),this.markInodeCacheDirty(e.side)}async load(){await Promise.all([this.loadInodeCacheSide(this.workspaceCachePath,this.workspaceInodeCache,"workspace"),this.loadInodeCacheSide(this.mirrorCachePath,this.mirrorInodeCache,"mirror")])}recordFullScanEntries(e,t){this.workspaceFullScanInodeKeys.clear(),this.mirrorFullScanInodeKeys.clear(),this.collectFullScanInodeKeys(e,this.workspaceFullScanInodeKeys),this.collectFullScanInodeKeys(t,this.mirrorFullScanInodeKeys),this.workspaceFullScanRecorded=!0,this.mirrorFullScanRecorded=!0}collectFullScanInodeKeys(e,t){for(let n of e){if(n.isFolder||!n.stat)continue;let o=this.getInodeKey(n.stat);o&&t.add(o)}}async loadInodeCacheSide(e,t,n){try{let o=await this.readInodeCacheFile(e);if(!o)return;for(let[i,a]of Object.entries(o.files))t.set(i,a)}catch(o){Oe.debug("skip %s inode cache: %s",n,e,o)}}async readInodeCacheFile(e){let t=await _r(e);if(!(!t||t.version!==1))return t}async flush(){if(Oe.debug("workspace change detector flush inode caches called"),await Promise.all([this.pruneStaleEntries("workspace",this.workspacePathToInode,this.workspaceInodeCache,this.options.workspaceRoot),this.pruneStaleEntries("mirror",this.mirrorPathToInode,this.mirrorInodeCache,this.options.remoteMirrorRoot)]),this.pruneFullScanEntries("workspace",this.workspaceInodeCache,this.workspaceFullScanInodeKeys,this.workspaceFullScanRecorded),this.pruneFullScanEntries("mirror",this.mirrorInodeCache,this.mirrorFullScanInodeKeys,this.mirrorFullScanRecorded),!this.workspaceInodeCacheDirty&&!this.mirrorInodeCacheDirty)return;Oe.debug("flush inode caches workspaceDirty=%s workspaceEntries=%d mirrorDirty=%s mirrorEntries=%d",this.workspaceInodeCacheDirty,this.workspaceInodeCache.size,this.mirrorInodeCacheDirty,this.mirrorInodeCache.size),await this.withInodeCacheWriteLock(async()=>{let t=[];this.workspaceInodeCacheDirty&&t.push(this.writeInodeCache(this.workspaceCachePath,this.workspaceInodeCache)),this.mirrorInodeCacheDirty&&t.push(this.writeInodeCache(this.mirrorCachePath,this.mirrorInodeCache)),await Promise.all(t)})?(this.clearInodeCacheDirty(),Oe.debug("flushed inode caches workspaceEntries=%d mirrorEntries=%d",this.workspaceInodeCache.size,this.mirrorInodeCache.size)):Oe.debug("skipped inode cache flush workspaceDirty=%s workspaceEntries=%d mirrorDirty=%s mirrorEntries=%d",this.workspaceInodeCacheDirty,this.workspaceInodeCache.size,this.mirrorInodeCacheDirty,this.mirrorInodeCache.size)}async withInodeCacheWriteLock(e){let t=this.options.lockManager;if(!t||t.isHeldLocally("inode-cache"))return await e(),!0;try{return await t.withLock({scopes:["inode-cache"],command:"flush-inode-cache",wait:1},async()=>e()),!0}catch(n){return n instanceof jn||n instanceof Ir?(Oe.debug("skip inode cache flush because cache lock is unavailable",n),!1):(Oe.warn("skip inode cache flush because cache lock failed unexpectedly",n),!1)}}async pruneStaleEntries(e,t,n,o){if(t.size===0)return;let i=[];for(let[a,s]of t){let c=a.indexOf("\0"),l=a.slice(c+1),p=te(o,l);try{let m=await va.promises.stat(p);if(!m.isFile()){i.push(a);continue}let g=this.getInodeKeyString(m.dev,m.ino);(!g||g!==s)&&i.push(a)}catch(m){if(F(m)){Oe.debug("mark stale inode cache entry: %s",a),i.push(a);continue}throw m}}if(i.length!==0){for(let a of i){let s=t.get(a);s&&n.delete(s),t.delete(a)}i.length>0&&this.markInodeCacheDirty(e)}}pruneFullScanEntries(e,t,n,o){if(!o)return;let i=0;for(let[s,c]of t)this.isCompleteInodeCacheEntry(c)||(t.delete(s),i++);if(i>0&&(this.markInodeCacheDirty(e),Oe.debug("inode cache invalid cleanup side=%s removed=%d after=%d",e,i,t.size)),!this.shouldCleanupFullScanEntries(t,n))return;let a=0;for(let s of t.keys())n.has(s)||(t.delete(s),a++);a>0&&(this.markInodeCacheDirty(e),Oe.debug("inode cache cleanup side=%s actual=%d removed=%d after=%d",e,n.size,a,t.size))}shouldCleanupFullScanEntries(e,t){let n=Math.max(t.size*jM,t.size+BM,VM);return e.size>n}getInodeKeyString(e,t){if(!(!e||!t))return`${e}:${t}`}invalidateStat(e,t){let n=this.getInodeKey(t);if(!n)return;let o=this.getInodeCache(e.side),i=this.getPathToInode(e.side);o.delete(n)&&this.markInodeCacheDirty(e.side),i.delete(this.getEntryKey(e))}async invalidateSimilarityDigest(e,t){let n=await this.getContentDigest(e,t);if(!n)return;let o=We(e.metaPath)??"/";await this.withProjectCache(o,async i=>{i.similarity.delete(n.value)&&Oe.debug("drop project similarity cache project=%s path=%s sha256=%s",o,e.metaPath,n.value.slice(0,12))})}async writeInodeCache(e,t){let n={version:1,files:Object.fromEntries(t)};try{await cn(e,JSON.stringify(n))}catch(o){Oe.debug("failed to write inode cache: %s",e,o)}}estimateSimilarityPairs(e,t){let n=0;for(let o of e)for(let i of t.get(this.getSimilarityBucketKey(o))??[])o.metaPath!==i.metaPath&&n++;return n}};var qM=.6,$M=.15,HM=8,zM=8,KM=8,Ik=4096,GM=8,JM=64,YM=20,fe=T("sync.detector.workspace"),sl=class{detectRuns=0;durationMs=0;records=0;filteredRecords=0;resultChanges=0;suspectMetaPaths=0;changes=0;matchedLocal=0;matchedRemote=0;matchedLocalFiles=0;matchedRemoteFiles=0;availableLocalFiles=0;availableRemoteFiles=0;pendingSamePath=0;local={entries:0,files:0,folders:0,trackedFiles:0,trackedFolders:0};remote={entries:0,files:0,folders:0,trackedFiles:0,trackedFolders:0};stages={};similarity={fileLocalCandidates:0,fileRemoteCandidates:0,fileCandidateBuckets:0,fileComparableRefs:0,fileEstimatedPairs:0,fileComparedPairs:0,pendingSamePathPairs:0,skippedPendingSamePathLocalCandidates:0,skippedPendingSamePathRemoteCandidates:0,fileTopByLeft:0,fileTopByRight:0,stableFileCandidates:0,acceptedFileCandidates:0};startRun(){return this.detectRuns++,Date.now()}finishRun(e){this.durationMs+=Date.now()-e}createSnapshot(){return{detectRuns:this.detectRuns,durationMs:this.durationMs,records:this.records,filteredRecords:this.filteredRecords,resultChanges:this.resultChanges,suspectMetaPaths:this.suspectMetaPaths,changes:this.changes,matchedLocal:this.matchedLocal,matchedRemote:this.matchedRemote,matchedLocalFiles:this.matchedLocalFiles,matchedRemoteFiles:this.matchedRemoteFiles,availableLocalFiles:this.availableLocalFiles,availableRemoteFiles:this.availableRemoteFiles,pendingSamePath:this.pendingSamePath,local:{...this.local},remote:{...this.remote},stages:Object.fromEntries(Object.entries(this.stages).map(([e,t])=>[e,{...t}])),similarity:{...this.similarity}}}describeForLog(){return`
71
- `+JSON.stringify(this.createSnapshot(),null,2).replace(/^\{\n/,"").replace(/\n\}$/,"")}},cl=class{constructor(e){this.options=e;let t=e.workspace;this.workspaceRoot=t.root,this.remoteMirrorRoot=t.getMirrorRoot(),this.task=e.task??ht.INSTANCE,this.mirror=new Mt(this.remoteMirrorRoot),this.workspaceStore=new rr(this.workspaceRoot,this.mirror),this.fingerprint=new il({workspaceRoot:this.workspaceRoot,remoteMirrorRoot:this.remoteMirrorRoot,lockManager:t.lockManager}),this.rootRemotePath=this.normalizeRootRemotePath(e.rootRemotePath)}task;fingerprint;rootRemotePath;mirror;workspaceStore;workspaceRoot;remoteMirrorRoot;diagnostics=new sl;currentMatchPhase="idle";mirrorProjectPresence=new Map;reportedProblemKeys=new Set;reportedProblemEventCount=0;baselineProblems=[];throwIfAborted(){this.options.signal?.throwIfAborted(),this.task.throwIfAborted()}normalizeRootRemotePath(e){if(!e)return"";let t=Pe(e);return t==="/"?"":t}async detect(){let e=Date.now();this.resetProblemReports();let t=this.diagnostics.startRun();fe.debug(`detect start workspace=${this.workspaceRoot} mirror=${this.remoteMirrorRoot}`),this.throwIfAborted();let n=Date.now();await this.fingerprint.load(),fe.debug(`load inode cache done elapsed=${Date.now()-n}ms`);let o=new Set;n=Date.now();let i=await this.detectRecords(o);this.diagnostics.records=i.length,this.diagnostics.suspectMetaPaths=o.size,fe.debug(`detect records done elapsed=${Date.now()-n}ms records=${i.length} suspectMeta=${o.size}`),this.throwIfAborted(),n=Date.now(),await this.fingerprint.flush(),fe.debug(`flush inode cache done elapsed=${Date.now()-n}ms`);let a=i.filter(c=>c.kind!=="localOnly"||!this.isIgnoredUntrackedLocal(c));this.diagnostics.filteredRecords=a.length;let s=new Array(a.length);return n=Date.now(),await Mg(a.map((c,l)=>({change:c,index:l})),KM,async c=>{s[c.index]=await this.toSyncFileChange(c.change)}),this.diagnostics.resultChanges=s.length,fe.debug(`create sync changes done elapsed=${Date.now()-n}ms filteredRecords=${a.length} changes=${s.length}`),this.finishRunDiagnostics(t),fe.debug(`detect diagnostics ${this.diagnostics.describeForLog()}`),fe.debug(`detect done elapsed=${Date.now()-e}ms changes=${s.length} suspectMeta=${o.size}`),{changes:s,suspectMetaPaths:[...o].sort(),baselineProblems:[...this.baselineProblems]}}resetProblemReports(){this.reportedProblemKeys.clear(),this.reportedProblemEventCount=0,this.baselineProblems.length=0}getDiagnostics(e={}){let t=this.diagnostics.createSnapshot();return e.reset&&this.resetDiagnostics(),t}finishRunDiagnostics(e){this.diagnostics.finishRun(e)}resetDiagnostics(){this.diagnostics=new sl}async withMatchPhase(e,t){let n=this.currentMatchPhase;this.currentMatchPhase=e;try{return await t()}finally{this.currentMatchPhase=n}}withMatchPhaseSync(e,t){let n=this.currentMatchPhase;this.currentMatchPhase=e;try{return t()}finally{this.currentMatchPhase=n}}async flush(){await this.fingerprint.flush()}async detectRecords(e){let t=Date.now(),[n,o]=await Promise.all([this.scan(this.workspaceRoot,"workspace",e),this.scan(this.remoteMirrorRoot,"mirror",new Set)]);this.rootRemotePath===""&&this.fingerprint.recordFullScanEntries(n.values(),o.values()),fe.debug(`scan both sides done elapsed=${Date.now()-t}ms localEntries=${this.diagnostics.local.entries} localFiles=${this.diagnostics.local.files} localFolders=${this.diagnostics.local.folders} localTrackedFiles=${this.diagnostics.local.trackedFiles} localTrackedFolders=${this.diagnostics.local.trackedFolders} remoteEntries=${this.diagnostics.remote.entries} remoteFiles=${this.diagnostics.remote.files} remoteFolders=${this.diagnostics.remote.folders} remoteTrackedFiles=${this.diagnostics.remote.trackedFiles} remoteTrackedFolders=${this.diagnostics.remote.trackedFolders} suspectMeta=${e.size}`),this.throwIfAborted();let i=new Map,a=this.filterOutIgnoredMirrorResidues(o,this.indexIgnoredMirrorResidues(n,o)),s=this.rootRemotePath===""?this.collectBaselineMissingLocalEntries(n,a):[],l={local:this.filterOutBaselineMissingLocalEntries(n,s),remote:a,matchedLocal:new Set,matchedRemote:new Set,changes:[]},p=Date.now(),m=this.getPipelineStats();await this.withMatchPhase("matchById",()=>this.matchById(l,i)),this.logDetectPhase("matchById",p,m),this.throwIfAborted(),p=Date.now(),m=this.getPipelineStats(),await this.withMatchPhase("matchByPath",()=>this.matchByPath(l,i)),this.logDetectPhase("matchByPath",p,m),this.throwIfAborted(),p=Date.now(),m=this.getPipelineStats(),await this.withMatchPhase("matchRenamesByInode",()=>this.matchRenamesByInode(l,i)),this.logDetectPhase("matchRenamesByInode",p,m),this.throwIfAborted(),p=Date.now(),m=this.getPipelineStats(),await this.withMatchPhase("matchRenamesByHash",()=>this.matchRenamesByHash(l,i)),this.logDetectPhase("matchRenamesByHash",p,m),this.throwIfAborted(),p=Date.now(),m=this.getPipelineStats(),await this.withMatchPhase("matchRenamesBySimilarity",()=>this.matchRenamesBySimilarity(l,i)),this.logDetectPhase("matchRenamesBySimilarity",p,m),this.throwIfAborted(),p=Date.now(),m=this.getPipelineStats(),this.withMatchPhaseSync("flushPendingSamePathChanges",()=>this.flushPendingSamePathChanges(l,i)),this.logDetectPhase("flushPendingSamePathChanges",p,m),p=Date.now(),await this.addBaselineMissingLocalChanges(l,s);for(let g of l.local.values())if(!l.matchedLocal.has(g.metaPath)){if(g.isFolder&&!g.hasMeta||!await this.isScannedEntryStillPresent(this.workspaceRoot,g))continue;this.addChange(l,{kind:"localOnly",metaPath:g.metaPath,localPath:g.metaPath,fileId:g.meta?.id,isFolder:g.isFolder,hasMeta:g.hasMeta})}for(let g of l.remote.values())if(!l.matchedRemote.has(g.metaPath)){if(!g.hasMeta)continue;this.addChange(l,{kind:"remoteOnly",metaPath:g.metaPath,remotePath:g.metaPath,fileId:g.meta?.id,isFolder:g.isFolder,hasMeta:g.hasMeta})}return fe.debug(`collect unmatched entries done elapsed=${Date.now()-p}ms changes=${this.diagnostics.changes} matchedLocal=${this.diagnostics.matchedLocal} matchedRemote=${this.diagnostics.matchedRemote} availableLocalFiles=${this.diagnostics.availableLocalFiles} availableRemoteFiles=${this.diagnostics.availableRemoteFiles} totalLocalFiles=${this.diagnostics.local.files} totalRemoteFiles=${this.diagnostics.remote.files}`),l.changes}logDetectPhase(e,t,n){let o=this.getPipelineStats(),i={...o,elapsedMs:Date.now()-t,changeDelta:o.changes-n.changes,matchedLocalDelta:o.matchedLocal-n.matchedLocal,matchedRemoteDelta:o.matchedRemote-n.matchedRemote,matchedLocalFileDelta:o.matchedLocalFiles-n.matchedLocalFiles,matchedRemoteFileDelta:o.matchedRemoteFiles-n.matchedRemoteFiles,pendingDelta:o.pendingSamePath-n.pendingSamePath};this.diagnostics.stages[e]=i,fe.debug(`${e} done elapsed=${i.elapsedMs}ms inputLocalFiles=${n.availableLocalFiles} inputRemoteFiles=${n.availableRemoteFiles} matchedLocalFileDelta=${i.matchedLocalFileDelta} matchedRemoteFileDelta=${i.matchedRemoteFileDelta} changeDelta=${i.changeDelta} pendingDelta=${i.pendingDelta} remainingLocalFiles=${i.availableLocalFiles} remainingRemoteFiles=${i.availableRemoteFiles}`)}getPipelineStats(){return{changes:this.diagnostics.changes,matchedLocal:this.diagnostics.matchedLocal,matchedRemote:this.diagnostics.matchedRemote,matchedLocalFiles:this.diagnostics.matchedLocalFiles,matchedRemoteFiles:this.diagnostics.matchedRemoteFiles,availableLocalFiles:this.diagnostics.availableLocalFiles,availableRemoteFiles:this.diagnostics.availableRemoteFiles,pendingSamePath:this.diagnostics.pendingSamePath}}async isScannedEntryStillPresent(e,t){let n=te(e,t.metaPath);try{let o=await wa.promises.stat(n);return t.isFolder?o.isDirectory():o.isFile()}catch(o){if(F(o))return fe.debug(`skip disappeared sync scan entry: ${n}`),!1;throw o}}async scan(e,t,n){let o=Date.now();fe.debug(`scan start side=${t} root=${e} scope=${this.rootRemotePath||"/"}`);let i=new Map;if(!await this.shouldScanScopedProject(t))return fe.warn(`skip sync scan scope because baseline project is missing: side=${t} scope=${this.rootRemotePath}`),i;let a=new ze(HM),s=new ze(zM),c=0,l=!1;return await new Promise((p,m)=>{let g=()=>{c--,c===0&&p()},d=y=>{l||(l=!0,a.cancel(y),s.cancel(y),m(y))},f=(y,C=!1,v=!1)=>{this.throwIfAborted(),c++,a.addTask(async()=>{await this.walk(e,t,y,i,n,f,s,C,v)}).then(g,d)};f(this.rootRemotePath)}),await Promise.all([a.waitAll(),s.waitAll()]),fe.debug(`scan done side=${t} elapsed=${Date.now()-o}ms entries=${this.getSideStats(t).entries} files=${this.getSideStats(t).files} folders=${this.getSideStats(t).folders} trackedFiles=${this.getSideStats(t).trackedFiles} trackedFolders=${this.getSideStats(t).trackedFolders} suspectMeta=${n.size}`),new Map([...i].sort(([p],[m])=>p.localeCompare(m)))}async shouldScanScopedProject(e){if(this.rootRemotePath==="")return!0;let t=We(this.rootRemotePath);return t?this.shouldScanProject(e,t):!0}async shouldScanTopLevelProject(e,t){return this.shouldScanProject(e,t)}async shouldScanProject(e,t){return await this.isCloneInProgressProject(t)?(fe.debug(`skip clone in-progress project during workspace scan: side=${e} project=${t}`),!1):e==="workspace"?this.hasMirrorProject(t):!0}async isCloneInProgressProject(e){return(await Promise.all([this.workspaceStore.isCloneInProgress(e),this.mirror.isCloneInProgress(e)])).some(Boolean)}async hasMirrorProject(e){let t=this.mirrorProjectPresence.get(e);if(t!==void 0)return t;let n=te(this.remoteMirrorRoot,e),o=!1;try{o=(await wa.promises.stat(n)).isDirectory()}catch(i){if(!F(i))throw i}return this.mirrorProjectPresence.set(e,o),o||this.reportProblemOnce(new Ri(this.workspaceRoot,"sync.missingBaselineProject",{projectPaths:[e],count:1})),o}reportProblemOnce(e){let t=[e.code,...e.projectPaths??[]].join("|");if(!this.reportedProblemKeys.has(t)){if(this.reportedProblemEventCount>=GM){fe.warn(`skip workspace problem event because limit reached: ${e.message}`);return}this.reportedProblemKeys.add(t),this.reportedProblemEventCount++,this.baselineProblems.push(e),fe.warn(`workspace problem reported code=${e.code} root=${e.root} projects=${e.projectPaths?.join(",")??""} count=${e.count??""}`),this.options.workspace.eventBus.fireAsync(new $e("workspace.problem.reported",e,this)).catch(n=>fe.warn(`workspace problem event listener failed: ${n instanceof Error?n.message:String(n)}`))}}async walk(e,t,n,o,i,a,s,c,l){let p;try{p=await wa.promises.readdir(te(e,n||"/"),{withFileTypes:!0})}catch(f){if(F(f)){fe.debug(`skip unreadable sync scan directory: ${e}:${n||"/"}`);return}throw f}let m=await this.readDirectoryDotMeta(e,n,i),g=new Set,d=[];for(let f of p){if(this.throwIfAborted(),n===""&&f.name.startsWith(".")||f.name===Y)continue;g.add(f.name);let y=n+"/"+f.name,C=te(e,y);if(!(n===""&&!f.isDirectory())){if(n===""&&f.isDirectory()&&await this.isCloneInProgressProject(y)){fe.debug(`skip clone in-progress root project during workspace scan: side=${t} project=${y}`);continue}if(n===""&&f.isDirectory()&&m.dotMeta[f.name]&&!await this.shouldScanTopLevelProject(t,y)){fe.warn(`skip sync scan project without opposite side baseline: side=${t} project=${y}`);continue}if(n===""&&!m.dotMeta[f.name]){a(y,!0,t==="mirror");continue}if(f.isDirectory()){let v=m.dotMeta[f.name];if(!v){if(c){a(y,!0,l||t==="mirror");continue}i.add(m.metaPath)}this.addSnapshotEntry(o,{metaPath:y,side:t,isFolder:!0,meta:v,hasMeta:!!v,underUnregisteredMirrorDirectory:l}),a(y,!1,l||t==="mirror"&&!v)}else f.isFile()&&d.push(s.addTask(async()=>{let v;try{v=await wa.promises.stat(C)}catch(P){if(F(P)){fe.debug(`skip unreadable sync scan file stat: ${C}`);return}throw P}c&&!m.dotMeta[f.name]||(this.addSnapshotEntry(o,{metaPath:y,side:t,isFolder:!1,contentSize:v?.size,stat:v?ol(v):void 0,meta:m.dotMeta[f.name],hasMeta:!!m.dotMeta[f.name],underUnregisteredMirrorDirectory:l}),m.dotMeta[f.name]||i.add(m.metaPath))}))}}await Promise.all(d);for(let f of Object.keys(m.dotMeta))g.has(f)||i.add(m.metaPath)}addSnapshotEntry(e,t){if(e.has(t.metaPath)){e.set(t.metaPath,t);return}e.set(t.metaPath,t);let n=this.getSideStats(t.side);n.entries++,t.isFolder?(n.folders++,t.hasMeta&&n.trackedFolders++):(n.files++,t.hasMeta&&n.trackedFiles++),this.refreshAvailableFileStats()}getSideStats(e){return e==="workspace"?this.diagnostics.local:this.diagnostics.remote}async readDirectoryDotMeta(e,t,n){let o=this.getDotMetaMetaPath(t),i=await zr(e,o);return(!i.exists||!i.readable||i.damaged)&&n.add(o),{metaPath:o,parentPath:t||"/",exists:i.exists,readable:i.readable,damaged:i.damaged,dotMeta:i.dotMeta}}getDotMetaMetaPath(e){return!e||e==="/"?"/"+Y:e+"/"+Y}getAvailableFiles(e,t){return[...e.values()].filter(n=>!n.isFolder&&!t.has(n.metaPath))}isIgnoredUntrackedLocal(e){if(e.hasMeta)return!1;let t=Ne(e.metaPath);return this.options.workspace.isGitIgnored(e.metaPath)||el(t,this.options.ignore??yt.syncIgnore)}async matchById(e,t){let n=this.indexById(e.local),o=this.indexRemoteByIdForWorkspaceRename(e.remote,e.local),i=[];for(let a of n.values()){let s=a.meta?.id;if(!s)continue;let c=o.get(s);if(!(!c||e.matchedRemote.has(c.metaPath))){if(!a.isFolder&&!c.isFolder){i.push({localEntry:a,remoteEntry:c});continue}await this.addComparisonOrPending(e,a,c,t),await this.matchChildrenAfterFolderRename(e,a,c)}}await this.addComparisonsOrPending(e,i,t)}async matchByPath(e,t){let n=[];for(let o of e.local.values()){if(e.matchedLocal.has(o.metaPath))continue;let i=e.remote.get(o.metaPath);if(!(!i||e.matchedRemote.has(i.metaPath))){if(!o.isFolder&&!i.isFolder){n.push({localEntry:o,remoteEntry:i});continue}await this.addComparisonOrPending(e,o,i,t)}}await this.addComparisonsOrPending(e,n,t)}async matchRenamesByInode(e,t){let n=this.pickStableSimilarityCandidates(await this.collectFileInodeCandidates(e));for(let o of n)e.matchedLocal.has(o.localEntry.metaPath)||e.matchedRemote.has(o.remoteEntry.metaPath)||this.isUnsafePendingSamePathRenameSteal(o,t,n)||await this.addRename(e,o,t)}async matchRenamesByHash(e,t){let n=this.pickStableSimilarityCandidates(await this.collectFolderExactCandidates(e)).sort((i,a)=>i.localEntry.metaPath.length-a.localEntry.metaPath.length);for(let i of n)e.matchedLocal.has(i.localEntry.metaPath)||e.matchedRemote.has(i.remoteEntry.metaPath)||this.isUnsafePendingSamePathRenameSteal(i,t,n)||(await this.addRename(e,i,t),await this.matchChildrenAfterFolderRename(e,i.localEntry,i.remoteEntry));let o=this.pickStableSimilarityCandidates(await this.collectFileEqualCandidates(e));for(let i of o)e.matchedLocal.has(i.localEntry.metaPath)||e.matchedRemote.has(i.remoteEntry.metaPath)||this.isUnsafePendingSamePathRenameSteal(i,t,o)||(await this.addRename(e,i,t),await this.matchChildrenAfterFolderRename(e,i.localEntry,i.remoteEntry))}async matchRenamesBySimilarity(e,t){let n=Date.now(),o=this.pickStableSimilarityCandidates(await this.collectFolderSimilarityCandidates(e));fe.debug(`similarity folder candidates done elapsed=${Date.now()-n}ms candidates=${o.length}`);for(let c of o)e.matchedLocal.has(c.localEntry.metaPath)||e.matchedRemote.has(c.remoteEntry.metaPath)||this.isUnsafePendingSamePathRenameSteal(c,t,o)||(await this.addRename(e,c,t),await this.matchChildrenAfterFolderRename(e,c.localEntry,c.remoteEntry));n=Date.now();let i=this.pickStableSimilarityCandidates(await this.collectFileSimilarityCandidates(e,t));if(this.diagnostics.similarity.stableFileCandidates=i.length,fe.debug(`similarity file candidates done elapsed=${Date.now()-n}ms candidates=${i.length}`),i.length===0)return;n=Date.now();let a=await this.collectFileEqualCandidates(e);fe.debug(`similarity equal candidates done elapsed=${Date.now()-n}ms candidates=${a.length}`);let s=0;for(let c of i)e.matchedLocal.has(c.localEntry.metaPath)||e.matchedRemote.has(c.remoteEntry.metaPath)||this.isUnsafePendingSamePathRenameSteal(c,t,i)||this.isSafeFileSimilarityPair(a,c)&&(await this.addRename(e,c,t),s++);fe.debug(`similarity apply file candidates done accepted=${s} changes=${e.changes.length}`),this.diagnostics.similarity.acceptedFileCandidates=s}async collectFileInodeCandidates(e){let{localEntries:t,remoteEntries:n}=this.getContentCandidateFiles(e);return this.fingerprint.findInodeFileCandidates(t,n)}async collectFileEqualCandidates(e){let{localEntries:t,remoteEntries:n}=this.getContentCandidateFiles(e);return this.fingerprint.findEqualFileCandidates(t,n)}async collectFolderExactCandidates(e){let t=[];for(let n of e.local.values())if(!(!n.isFolder||e.matchedLocal.has(n.metaPath)||this.isIgnoredUntrackedLocal(n)))for(let o of e.remote.values())!o.isFolder||e.matchedRemote.has(o.metaPath)||n.metaPath!==o.metaPath&&await this.areFolderSubtreesEqual(e.local,e.remote,n,o)&&t.push({localEntry:n,remoteEntry:o,score:1,reason:"folderContentHash"});return t}async areFolderSubtreesEqual(e,t,n,o){let i=this.getFolderDescendantsByRelativePath(e,n),a=this.getFolderDescendantsByRelativePath(t,o);if(i.size!==a.size)return!1;for(let[s,c]of i){let l=a.get(s);if(!l||c.isFolder!==l.isFolder)return!1;if(c.isFolder)continue;if(await this.fingerprint.areEntriesEqual(c,l)!=="same")return!1}return!0}getFolderDescendantsByRelativePath(e,t){let n=new Map;for(let o of e.values())o.metaPath===t.metaPath||!Q(o.metaPath,t.metaPath)||n.set(o.metaPath.slice(t.metaPath.length+1),o);return n}async collectFileSimilarityCandidates(e,t){let{localEntries:n,remoteEntries:o}=this.getContentCandidateFiles(e),i=0;if(t?.size&&(i=this.estimatePendingSamePathSimilarityPairs(n,o,t),this.diagnostics.similarity.pendingSamePathPairs=i,t.size<2||i>Ik)){let c=n.length,l=o.length;n=n.filter(m=>!t.has(m.metaPath)),o=o.filter(m=>!t.has(m.metaPath)),this.diagnostics.similarity.skippedPendingSamePathLocalCandidates=c-n.length,this.diagnostics.similarity.skippedPendingSamePathRemoteCandidates=l-o.length;let p=t.size<2?"singlePendingSamePath":"pendingPairBudget";fe.debug(`skip pending same-path similarity candidates pendingSamePath=${t.size} pendingPairs=${i} maxPairs=${Ik} skippedLocal=${c-n.length} skippedRemote=${l-o.length}`);for(let m of t.values())this.logFileFlow("skip similarity",{path:m.localEntry.metaPath,remotePath:m.remoteEntry.metaPath,fileId:this.getEntryFileId(m.localEntry,m.remoteEntry),reason:p,pendingPairs:i})}if(this.diagnostics.similarity.fileLocalCandidates=n.length,this.diagnostics.similarity.fileRemoteCandidates=o.length,n.length===0||o.length===0)return[];let{candidates:a,stats:s}=await this.fingerprint.findSimilarFileCandidates(n,o);return Object.assign(this.diagnostics.similarity,s),a}estimatePendingSamePathSimilarityPairs(e,t,n){let o=new Map,i=new Set,a=c=>{let l=this.getSimilarityBucketKey(c),p=o.get(l);return p||(p={leftTotal:0,rightTotal:0,leftPending:0,rightPending:0,samePathPending:0},o.set(l,p)),p};for(let c of e){let l=a(c);l.leftTotal++,n.has(c.metaPath)&&(l.leftPending++,i.add(c.metaPath))}for(let c of t){let l=a(c);l.rightTotal++,n.has(c.metaPath)&&(l.rightPending++,i.has(c.metaPath)&&l.samePathPending++)}let s=0;for(let c of o.values())s+=c.leftPending*c.rightTotal-c.samePathPending+(c.leftTotal-c.leftPending)*c.rightPending;return s}getSimilarityBucketKey(e){return al.posix.extname(e.metaPath).toLowerCase()}async collectFolderSimilarityCandidates(e){let t=[];for(let n of e.local.values())if(!(!n.isFolder||e.matchedLocal.has(n.metaPath)||this.isIgnoredUntrackedLocal(n)))for(let o of e.remote.values()){if(!o.isFolder||e.matchedRemote.has(o.metaPath)||n.metaPath===o.metaPath)continue;let i=await this.getFolderSimilarity(e.local,e.remote,n,o);i>=qM&&t.push({localEntry:n,remoteEntry:o,score:i,reason:"folderSimilarity"})}return t}async getFolderSimilarity(e,t,n,o){let i=this.getFolderFileDescendants(e,n),a=this.getFolderFileDescendants(t,o),s=Math.max(i.length,a.length);if(s===0)return 1;let c=new Map(a.map(d=>[d.metaPath.slice(o.metaPath.length+1),d])),l=new Set,p=0,m=await this.fingerprint.findEqualFileCandidates(i,a),g=new Map;for(let d of m){let f=g.get(d.localEntry.metaPath);f||(f=[],g.set(d.localEntry.metaPath,f)),f.push(d.remoteEntry.metaPath)}for(let d of i){let f=d.metaPath.slice(n.metaPath.length+1),y=c.get(f);if(y){l.add(y.metaPath),p++;continue}for(let C of g.get(d.metaPath)??[])if(!l.has(C)){l.add(C),p++;break}}return p/s}getFolderFileDescendants(e,t){return[...e.values()].filter(n=>!n.isFolder&&n.metaPath!==t.metaPath&&Q(n.metaPath,t.metaPath))}pickStableSimilarityCandidates(e){let t=[];for(let n of e)this.isUniqueBestCandidate(n,e,!0)&&this.isUniqueBestCandidate(n,e,!1)&&t.push(n);return t}isUniqueBestCandidate(e,t,n){let o=t.filter(a=>n?a.localEntry.metaPath===e.localEntry.metaPath:a.remoteEntry.metaPath===e.remoteEntry.metaPath).sort((a,s)=>s.score-a.score);if(o[0]!==e)return!1;let i=o[1];return i?e.score-i.score>=$M:!0}isSafeFileSimilarityPair(e,t){let n=[...e];return n.some(o=>o.localEntry.metaPath===t.localEntry.metaPath&&o.remoteEntry.metaPath===t.remoteEntry.metaPath)||n.push(t),this.pickStableSimilarityCandidates(n).some(o=>o.localEntry.metaPath===t.localEntry.metaPath&&o.remoteEntry.metaPath===t.remoteEntry.metaPath)}isUnsafePendingSamePathRenameSteal(e,t,n){if(!t.has(e.localEntry.metaPath)&&!t.has(e.remoteEntry.metaPath))return!1;let o=!this.hasPendingSamePathSwapCandidate(e,t,n);return o&&this.logFileFlow("reject rename stealing pending same-path",{localPath:e.localEntry.metaPath,remotePath:e.remoteEntry.metaPath,fileId:this.getEntryFileId(e.localEntry,e.remoteEntry),reason:e.reason,score:e.score}),o}hasPendingSamePathSwapCandidate(e,t,n){let o=e.localEntry.metaPath,i=e.remoteEntry.metaPath;return!t.has(o)||!t.has(i)?!1:n.some(a=>a!==e&&a.localEntry.metaPath===i&&a.remoteEntry.metaPath===o&&(a.reason===e.reason||a.score>=1||e.score>=1))}getContentCandidateFiles(e){return this.getContentCandidateFilesFromAvailable(this.getAvailableFiles(e.local,e.matchedLocal).filter(t=>!this.isIgnoredUntrackedLocal(t)),this.getAvailableFiles(e.remote,e.matchedRemote))}getContentCandidateFilesFromAvailable(e,t){return{localEntries:e,remoteEntries:t}}async addRename(e,t,n){let{localEntry:o,remoteEntry:i,score:a,reason:s}=t;if(!this.isAvailableRenamePair(o,i,e.matchedLocal,e.matchedRemote))return;let c=await this.computeContentChanged(o,i);this.markMatched(e,o,i),this.consumePendingSamePathForRename(n,o,i,s,a),this.addChange(e,{kind:"renamed",metaPath:o.metaPath,localPath:o.metaPath,remotePath:i.metaPath,fileId:this.getEntryFileId(o,i),oldMetaPath:i.metaPath,isFolder:o.isFolder,contentChanged:c,metaChanged:!no(o.meta??{},i.meta??{}),confidence:a,reason:s}),this.logFileFlow("accept rename",{localPath:o.metaPath,remotePath:i.metaPath,fileId:this.getEntryFileId(o,i),reason:s,score:a,contentChanged:c})}isAvailableRenamePair(e,t,n,o){return!n.has(e.metaPath)&&!o.has(t.metaPath)&&e.isFolder===t.isFolder&&e.metaPath!==t.metaPath&&!this.isIgnoredUntrackedLocal(e)}async addComparison(e,t,n){this.applyComparisonOutcome(e,await this.createComparisonOutcome(t,n))}async addComparisonOrPending(e,t,n,o){this.applyComparisonOutcome(e,await this.createComparisonOutcome(t,n),o)}async addComparisonsOrPending(e,t,n){let o=await Promise.all(t.map(i=>this.createComparisonOutcome(i.localEntry,i.remoteEntry)));for(let i of o)e.matchedLocal.has(i.localEntry.metaPath)||e.matchedRemote.has(i.remoteEntry.metaPath)||this.applyComparisonOutcome(e,i,n)}async createComparisonOutcome(e,t){return{localEntry:e,remoteEntry:t,contentChanged:await this.computeContentChanged(e,t),metaChanged:!no(e.meta??{},t.meta??{})}}applyComparisonOutcome(e,t,n){let{localEntry:o,remoteEntry:i,contentChanged:a,metaChanged:s}=t;if(this.markMatched(e,o,i),o.isFolder!==i.isFolder){this.addChange(e,{kind:"metaIssue",metaPath:o.metaPath,localPath:o.metaPath,remotePath:i.metaPath,fileId:this.getEntryFileId(o,i),isFolder:o.isFolder,reason:"resourceTypeChanged"});return}if(o.metaPath!==i.metaPath){this.addChange(e,{kind:"renamed",metaPath:o.metaPath,localPath:o.metaPath,remotePath:i.metaPath,fileId:this.getEntryFileId(o,i),oldMetaPath:i.metaPath,isFolder:o.isFolder,contentChanged:a,metaChanged:s,confidence:1,reason:"sameId"}),this.logFileFlow("accept rename",{localPath:o.metaPath,remotePath:i.metaPath,fileId:this.getEntryFileId(o,i),reason:"sameId",score:1,contentChanged:a});return}if(!(!a&&!s)){if(n){this.unmarkMatched(e,o,i),this.addPendingSamePath(n,{localEntry:o,remoteEntry:i,contentChanged:a,metaChanged:s});return}this.addChange(e,{kind:a?"contentDifferent":"metaDifferent",metaPath:o.metaPath,localPath:o.metaPath,remotePath:i.metaPath,fileId:this.getEntryFileId(o,i),isFolder:o.isFolder,contentChanged:a,metaChanged:s})}}flushPendingSamePathChanges(e,t){for(let[n,o]of[...t]){if(e.matchedLocal.has(o.localEntry.metaPath)||e.matchedRemote.has(o.remoteEntry.metaPath)){let i=this.removePendingSamePath(t,n);i&&this.logFileFlow("consume pending same-path",{path:i.localEntry.metaPath,remotePath:i.remoteEntry.metaPath,fileId:this.getEntryFileId(i.localEntry,i.remoteEntry),reason:"alreadyMatchedBeforeFlush"});continue}this.markMatched(e,o.localEntry,o.remoteEntry),this.addChange(e,{kind:o.contentChanged?"contentDifferent":"metaDifferent",metaPath:o.localEntry.metaPath,localPath:o.localEntry.metaPath,remotePath:o.remoteEntry.metaPath,fileId:this.getEntryFileId(o.localEntry,o.remoteEntry),isFolder:o.localEntry.isFolder,contentChanged:o.contentChanged,metaChanged:o.metaChanged}),this.removePendingSamePath(t,n),this.logFileFlow("flush pending same-path",{path:o.localEntry.metaPath,remotePath:o.remoteEntry.metaPath,fileId:this.getEntryFileId(o.localEntry,o.remoteEntry),contentChanged:o.contentChanged,metaChanged:o.metaChanged})}}addChange(e,t){e.changes.push(t),this.diagnostics.changes++}logFileFlow(e,t){let n=Object.entries(t).filter(([,o])=>o!==void 0).map(([o,i])=>`${o}=${String(i)}`).join(" ");fe.debug(`flow ${e} phase=${this.currentMatchPhase} ${n}`)}addPendingSamePath(e,t){e.has(t.localEntry.metaPath)||this.diagnostics.pendingSamePath++,e.set(t.localEntry.metaPath,t),this.logFileFlow("pending same-path",{path:t.localEntry.metaPath,remotePath:t.remoteEntry.metaPath,fileId:this.getEntryFileId(t.localEntry,t.remoteEntry),contentChanged:t.contentChanged,metaChanged:t.metaChanged})}removePendingSamePath(e,t){let n=e.get(t);if(n)return e.delete(t),this.diagnostics.pendingSamePath--,n}consumePendingSamePathForRename(e,t,n,o,i){if(e?.size)for(let a of new Set([t.metaPath,n.metaPath])){let s=this.removePendingSamePath(e,a);s&&this.logFileFlow("consume pending same-path",{path:s.localEntry.metaPath,remotePath:s.remoteEntry.metaPath,fileId:this.getEntryFileId(s.localEntry,s.remoteEntry),reason:o,score:i,matchedLocalPath:t.metaPath,matchedRemotePath:n.metaPath})}}async computeContentChanged(e,t){return e.isFolder||t.isFolder?!1:await this.fingerprint.areEntriesEqual(e,t)!=="same"}markMatched(e,t,n){e.matchedLocal.has(t.metaPath)||(e.matchedLocal.add(t.metaPath),this.diagnostics.matchedLocal++,t.isFolder||this.diagnostics.matchedLocalFiles++),e.matchedRemote.has(n.metaPath)||(e.matchedRemote.add(n.metaPath),this.diagnostics.matchedRemote++,n.isFolder||this.diagnostics.matchedRemoteFiles++),this.refreshAvailableFileStats()}unmarkMatched(e,t,n){e.matchedLocal.delete(t.metaPath)&&(this.diagnostics.matchedLocal--,t.isFolder||this.diagnostics.matchedLocalFiles--),e.matchedRemote.delete(n.metaPath)&&(this.diagnostics.matchedRemote--,n.isFolder||this.diagnostics.matchedRemoteFiles--),this.refreshAvailableFileStats()}refreshAvailableFileStats(){this.diagnostics.availableLocalFiles=this.diagnostics.local.files-this.diagnostics.matchedLocalFiles,this.diagnostics.availableRemoteFiles=this.diagnostics.remote.files-this.diagnostics.matchedRemoteFiles}async matchChildrenAfterFolderRename(e,t,n){!t.isFolder||!n.isFolder||t.metaPath===n.metaPath||(await this.matchChildrenByRelativePath(e,t,n),await this.matchChildrenByContent(e,t,n))}async matchChildrenByRelativePath(e,t,n){for(let o of e.local.values()){if(e.matchedLocal.has(o.metaPath)||!Q(o.metaPath,t.metaPath))continue;let i=o.metaPath.slice(t.metaPath.length+1),a=e.remote.get(n.metaPath+"/"+i);!a||e.matchedRemote.has(a.metaPath)||await this.addComparison(e,o,a)}}async matchChildrenByContent(e,t,n){let{localEntries:o,remoteEntries:i}=this.getContentCandidateFilesFromAvailable(this.getAvailableFolderFiles(e.local,t,e.matchedLocal).filter(s=>!this.isIgnoredUntrackedLocal(s)),this.getAvailableFolderFiles(e.remote,n,e.matchedRemote)),a=this.pickStableSimilarityCandidates(await this.fingerprint.findEqualFileCandidates(o,i));for(let s of a)!Q(s.localEntry.metaPath,t.metaPath)||!Q(s.remoteEntry.metaPath,n.metaPath)||await this.addRename(e,s)}getAvailableFolderFiles(e,t,n){return this.getFolderFileDescendants(e,t).filter(o=>!n.has(o.metaPath))}indexById(e){let t=new Map,n=new Set;for(let o of e.values()){let i=o.meta?.id;if(i){if(t.has(i)){n.add(i);continue}t.set(i,o)}}for(let o of n)t.delete(o);return t}indexRemoteByIdForWorkspaceRename(e,t){let n=new Map;for(let[o,i]of this.groupRemoteEntriesByMetaId(e)){if(i.length===1){n.set(o,i[0]);continue}let a=i.filter(s=>!t.has(s.metaPath));a.length===1&&n.set(o,a[0])}return n}indexIgnoredMirrorResidues(e,t){let n=this.groupRemoteEntriesByMetaId(t),o=this.collectParentsWithTrackedChild(t),i=new Set;for(let a of t.values()){if(!e.has(a.metaPath))continue;if(!a.hasMeta){o.has(al.posix.dirname(a.metaPath))&&i.add(a.metaPath);continue}let s=a.meta?.id;if(!s)continue;let c=n.get(s);!c||c.length<2||(a.underUnregisteredMirrorDirectory||this.hasUnmatchedSibling(c,a.metaPath,e))&&i.add(a.metaPath)}return i}filterOutIgnoredMirrorResidues(e,t){if(t.size===0)return e;let n=new Map;for(let[o,i]of e)t.has(o)||n.set(o,i);return n}filterOutBaselineMissingLocalEntries(e,t){if(t.length===0)return e;let n=new Set(t.map(i=>i.metaPath)),o=new Map;for(let[i,a]of e)n.has(i)||o.set(i,a);return o}async addBaselineMissingLocalChanges(e,t){for(let n of t)n.isFolder&&!n.hasMeta||await this.isScannedEntryStillPresent(this.workspaceRoot,n)&&this.addChange(e,{kind:"localOnly",metaPath:n.metaPath,localPath:n.metaPath,fileId:n.meta?.id,isFolder:n.isFolder,hasMeta:n.hasMeta})}collectBaselineMissingLocalEntries(e,t){let n=new Set,o=new Set;for(let s of t.values()){let c=s.meta?.id;c&&n.add(c);let l=We(s.metaPath);l&&o.add(l)}let i=new Map;for(let s of e.values()){if(!s.hasMeta||t.has(s.metaPath))continue;let c=s.meta?.id;if(!c||n.has(c))continue;let l=We(s.metaPath);if(!l)continue;let p=i.get(l);p?p.push(s):i.set(l,[s])}let a=[];for(let[s,c]of i)if(!(o.has(s)&&c.length<JM)){for(let l of c)l.baselineMissing=!0,a.push(l);this.reportProblemOnce(new Ri(this.workspaceRoot,"sync.incompleteBaselineFiles",{projectPaths:[s],remotePaths:c.slice(0,YM).map(l=>l.metaPath),count:c.length}))}return a}groupRemoteEntriesByMetaId(e){let t=new Map;for(let n of e.values()){let o=n.meta?.id;if(!o)continue;let i=t.get(o);i?i.push(n):t.set(o,[n])}return t}collectParentsWithTrackedChild(e){let t=new Set;for(let n of e.values())n.hasMeta&&t.add(al.posix.dirname(n.metaPath));return t}hasUnmatchedSibling(e,t,n){for(let o of e)if(o.metaPath!==t&&!n.has(o.metaPath))return!0;return!1}getEntryFileId(e,t){return t.meta?.id??e.meta?.id}async toSyncFileChange(e){return{path:Ne(e.localPath??e.remotePath??e.metaPath),remotePath:e.localPath??e.remotePath??e.metaPath,...e.fileId!==void 0?{fileId:e.fileId}:{},oldPath:e.oldMetaPath?Ne(e.oldMetaPath):void 0,oldRemotePath:e.oldMetaPath,type:this.toScmChangeType(e.kind),isFolder:e.isFolder,contentChanged:e.contentChanged,metaChanged:e.metaChanged}}toScmChangeType(e){return e==="localOnly"?"added":e==="remoteOnly"?"deleted":e==="contentDifferent"||e==="metaDifferent"?"modified":e==="renamed"?"renamed":"conflict"}};var XM=T("workspace.sync-status.refresh"),Fr=class{constructor(e,t={}){this.id=e;this.scope=t.scope??"both",this.source=t.source??"manual",this.task=t.task??ht.INSTANCE,this.forceRefresh=t.forceRefresh===!0,this.rootRemotePath=t.rootRemotePath,this.refreshLocal=this.scope==="local"||this.scope==="both",this.refreshRemote=this.scope==="remote"||this.scope==="both",this.workspace=t.workspace,this.accepted=t.onAccepted??(()=>{}),this.publishResult=t.publish??(()=>{})}kind="refresh";scope;source;task;forceRefresh;rootRemotePath;refreshLocal;refreshRemote;accepted;workspace;publishResult;localController=new AbortController;remoteController=new AbortController;refreshResult={warnings:[]};localCancelled=!1;remoteCancelled=!1;onAccepted(){this.accepted()}abort(){this.cancelLocal(),this.cancelRemote()}cancelConflictingSubTasks(e){this.cancelSubTasks({local:e.refreshLocal,remote:e.refreshRemote})}cancelSubTasks(e){e.local&&this.refreshLocal&&this.cancelLocal(),e.remote&&this.refreshRemote&&this.cancelRemote()}isLocalCancelled(){return this.localCancelled}isRemoteCancelled(){return this.remoteCancelled}canRunSubTask(e){return e==="local"?this.refreshLocal&&!this.localCancelled:this.refreshRemote&&!this.remoteCancelled}hasRunnableSubTask(){return this.canRunSubTask("local")||this.canRunSubTask("remote")}getRefreshResult(){return this.refreshResult}canRunBackgroundRefresh(){let e=this.workspace;return!!e&&e.isConnected&&!!e.activeServerUrl}async run(){if(!this.workspace||!this.hasRunnableSubTask())return{kind:"noop"};this.task.start(Number(this.canRunSubTask("local"))+Number(this.canRunSubTask("remote")));let e=this.canRunSubTask("local")?this.task.subTaskMonitor(1):void 0,t=this.canRunSubTask("remote")?this.task.subTaskMonitor(1):void 0;try{let n=e?this.runLocalRefresh(e):Promise.resolve(void 0),o=t?this.runRemoteRefresh(t):Promise.resolve(void 0),[i,a]=await Promise.all([n,o]);return this.canPublish(i,a)?{kind:"replaceRefreshScope",localChanges:this.localCancelled?void 0:i,...this.localCancelled||!this.rootRemotePath?{}:{localRootRemotePath:this.rootRemotePath},remoteChanges:this.remoteCancelled?void 0:a,...a!==void 0&&this.refreshResult.warnings.length>0?{warnings:this.refreshResult.warnings}:{}}:{kind:"noop"}}catch(n){if(n instanceof Error&&n.name==="AbortError")return{kind:"noop"};throw n}}createPublishableResult(e){if(e.kind!=="replaceRefreshScope")return e;let t=this.localCancelled?void 0:e.localChanges,n=this.remoteCancelled?void 0:e.remoteChanges;return t===void 0&&n===void 0?{kind:"noop"}:{kind:"replaceRefreshScope",localChanges:t,...t===void 0||!e.localRootRemotePath?{}:{localRootRemotePath:e.localRootRemotePath},remoteChanges:n,...n!==void 0&&e.warnings?.length?{warnings:e.warnings}:{}}}publish(e){let t=this.createPublishableResult(e);return this.refreshResult=this.createRefreshResult(t),this.publishResult(t)}async runLocalRefresh(e){e.start(1);let t=this.workspace,n=await new cl({workspace:t,task:e,signal:this.localController.signal,rootRemotePath:this.rootRemotePath}).detect();return e.step(1),n.changes}async runRemoteRefresh(e){e.start(1);let t=await this.detectRemoteChanges(e);return e.step(1),t}async detectRemoteChanges(e){let t=this.workspace;if(!t)return[];try{return this.remoteController.signal.aborted?[]:await new Er({workspace:t,task:e,forceRefresh:this.forceRefresh,signal:this.remoteController.signal}).detect()}catch(n){return jh(n)?(this.refreshResult={warnings:[{errorCode:"err.login.notlogin",properties:{serverUrl:t.activeServerUrl}}]},[]):(XM.warn(`remote sync status detection failed: ${t.root}`,n),[])}}createRefreshResult(e){return e.kind!=="replaceRefreshScope"?{warnings:[]}:{warnings:e.warnings??[]}}canPublish(e,t){return this.refreshLocal&&!this.localCancelled&&!e||this.refreshRemote&&!this.remoteCancelled&&!t?!1:!this.localCancelled&&!!e||!this.remoteCancelled&&!!t}cancelLocal(){this.localCancelled=!0,this.localController.abort()}cancelRemote(){this.remoteCancelled=!0,this.remoteController.abort()}};var ll=class{taskQueue=[];scheduling=!1;dispose(){this.cancelAllStateTasks(),this.scheduleTaskQueue()}hasRemoteRefreshTask(){return this.getRefreshTasks().some(e=>e.refreshRemote)}enqueue(e){let t=this.mergePendingFileWatchTask(e);return t?{accepted:!0,promise:t.promise}:this.prepareTask(e)?(e instanceof Fr&&e.refreshLocal&&this.cancelLocalStateTasks(),e.onAccepted?.(),{accepted:!0,promise:this.enqueueTask(e)}):{accepted:!1,promise:Promise.resolve()}}submitImmediate(e,t={}){t.cancel==="local"?this.cancelLocalStateTasks():this.cancelAllStateTasks();let n=e.publish(e.toResult());this.enqueueFollowUpTask(n),this.scheduleTaskQueue()}prepareTask(e){return e instanceof Fr?this.prepareRefreshTask(e):!0}prepareRefreshTask(e){if(e.source==="background")return this.taskQueue.length===0&&e.canRunBackgroundRefresh();for(let t of this.getRefreshTasks())t.cancelConflictingSubTasks(e);return!0}enqueueTask(e){let t=this.createScheduledTask(e);return this.taskQueue.push(t),this.scheduleTaskQueue(),t.promise}createScheduledTask(e){let t,n,o=new Promise((i,a)=>{t=i,n=a});return{task:e,state:"pending",promise:o,resolve:t,reject:n}}scheduleTaskQueue(){if(!this.scheduling){this.scheduling=!0;try{for(let e of[...this.taskQueue])if(e.state==="pending"){if(this.shouldDiscardScheduledTask(e.task)){this.finishScheduledTask(e);continue}this.canStartScheduledTask(e)&&this.startScheduledTask(e)}}finally{this.scheduling=!1}}}shouldDiscardScheduledTask(e){return e instanceof or?e.isCancelled():e instanceof Fr?!e.hasRunnableSubTask():!1}canStartScheduledTask(e){return e.task instanceof or?!this.hasEarlierPendingFileWatchTask(e)&&!this.hasRunningFileWatchTask()&&!this.hasRunningLocalRefreshTask():!0}startScheduledTask(e){e.state="running",this.runScheduledTask(e)}async runScheduledTask(e){let t;try{let n=await e.task.run();t=await e.task.publish(n)}catch(n){this.finishScheduledTask(e,n);return}this.removeScheduledTask(e);try{t?await this.enqueue(t).promise:this.scheduleTaskQueue(),e.resolve()}catch(n){e.reject(n)}}finishScheduledTask(e,t){this.removeScheduledTask(e),t?e.reject(t):e.resolve(),this.scheduleTaskQueue()}removeScheduledTask(e){let t=this.taskQueue.indexOf(e);t>=0&&this.taskQueue.splice(t,1)}enqueueFollowUpTask(e){e&&this.enqueue(e).promise}cancelAllStateTasks(){this.cancelFileWatchTasks(),this.cancelRefreshTasks({local:!0,remote:!0})}cancelLocalStateTasks(){this.cancelFileWatchTasks(),this.cancelRefreshTasks({local:!0})}cancelRefreshTasks(e){for(let t of this.getRefreshTasks())t.cancelSubTasks(e)}cancelFileWatchTasks(){for(let e of this.taskQueue)e.task instanceof or&&e.task.abort()}mergePendingFileWatchTask(e){if(!(e instanceof or))return;let t=this.findMergeableFileWatchTask();if(t)return t.task.mergeTask(e),t}findMergeableFileWatchTask(){for(let e=this.taskQueue.length-1;e>=0;e--){let t=this.taskQueue[e];if(t.state==="pending"&&t.task instanceof or&&!t.task.isCancelled())return t}}getRefreshTasks(){return this.taskQueue.map(e=>e.task).filter(e=>e instanceof Fr)}hasRunningFileWatchTask(){return this.taskQueue.some(e=>e.state==="running"&&e.task instanceof or)}hasEarlierPendingFileWatchTask(e){for(let t of this.taskQueue){if(t===e)return!1;if(t.state==="pending"&&t.task instanceof or)return!0}return!1}hasRunningLocalRefreshTask(){return this.taskQueue.some(e=>e.state==="running"&&e.task instanceof Fr&&e.task.canRunSubTask("local"))}};var im=T("workspace.sync-status"),pl=class{constructor(e){this.workspace=e;this.coordinator=new ll}changes=new Map;fullRefreshCount=0;taskId=0;coordinator;backgroundRemoteDiscoveryTimer;dispose(){this.stopBackgroundRemoteDiscovery(),this.coordinator.dispose()}startBackgroundRemoteDiscovery(e){this.stopBackgroundRemoteDiscovery(),!(e.intervalMs<=0)&&this.scheduleBackgroundRemoteDiscovery(e.intervalMs,e.runImmediately?0:e.intervalMs)}stopBackgroundRemoteDiscovery(){this.backgroundRemoteDiscoveryTimer&&(clearTimeout(this.backgroundRemoteDiscoveryTimer),this.backgroundRemoteDiscoveryTimer=void 0)}async refreshAll(e={}){let t=this.createRefreshTask(e),n=this.coordinator.enqueue(t);return n.accepted&&this.workspace?.notifySyncStatusRefreshing?.(n.promise,!!e.task),await n.promise,t.getRefreshResult()}scheduleBackgroundRemoteDiscovery(e,t=e){this.backgroundRemoteDiscoveryTimer=setTimeout(()=>{this.backgroundRemoteDiscoveryTimer=void 0,this.runBackgroundRemoteDiscovery(e)},t)}async runBackgroundRemoteDiscovery(e){if(this.scheduleBackgroundRemoteDiscovery(e),await this.hasSyncLock()){im.debug("background remote discovery skipped because sync lock is held");return}if(this.coordinator.hasRemoteRefreshTask()){im.debug("background remote discovery skipped because remote refresh is already queued");return}this.refreshAll({scope:"remote",source:"background"}).catch(t=>{im.warn("background remote discovery failed",t)})}async hasSyncLock(){let e=this.workspace?.lockManager;return e?await e.isHeldLock("sync"):!1}createRefreshTask(e={}){return new Fr(this.nextTaskId(),{...e,workspace:this.workspace,onAccepted:()=>{this.fullRefreshCount++},publish:t=>this.publishTaskResult(t)})}replaceAllByRefreshScope(e,t,n){let o=e?[...e]:[],i=t??[];if(!e||!t)for(let s of this.changes.values()){let c=at(s),l=fr(s);!e&&c&&!l||e&&n&&c&&!l&&!vc(s,[n])?o.push(s):!t&&l&&!c&&i.push(s)}let a=mv(o,i);this.replaceAllWithoutVersionChange([...o,...i,...a])}async consumeFileChanges(e,t={}){await this.coordinator.enqueue(this.createFileWatchTask(e,t)).promise}createFileWatchTask(e,t){return new or(this.nextTaskId(),{fileChanges:e,bulk:t.bulk,workspace:this.workspace,getChanges:()=>this.getChanges(),publish:n=>this.publishTaskResult(n)})}applyOperationResult(e,t=[]){this.coordinator.submitImmediate(new tl(this.nextTaskId(),e,t,n=>this.publishTaskResult(n)))}applyFileWatchResult(e,t){this.coordinator.submitImmediate(this.createReplaceTargetsTask("fileWatch",t,e,"fileWatch"),{cancel:"local"})}clearTargets(e){this.coordinator.submitImmediate(this.createClearTask({kind:"paths",remotePaths:e}))}clear(){this.coordinator.submitImmediate(this.createClearTask({kind:"all"}))}createReplaceTargetsTask(e,t,n,o="normal"){return new rl(this.nextTaskId(),{source:e,targetRemotePaths:t,changes:n,mode:o,publish:i=>this.publishTaskResult(i)})}createClearTask(e){return new Zc(this.nextTaskId(),e,t=>this.publishTaskResult(t))}publishTaskResult(e){if(e.kind!=="noop"){if(e.kind==="requestRefresh")return this.createRefreshTask({scope:e.scope,source:e.source,task:e.task,rootRemotePath:e.rootRemotePath});if(e.kind==="replaceRefreshScope"){this.replaceAllByRefreshScope(e.localChanges,e.remoteChanges,e.localRootRemotePath);return}if(e.kind==="replaceTargets"){this.replaceTargetsByMode(e.targetRemotePaths,e.changes,e.mode??"normal");return}this.publishClearResult(e.target)}}publishClearResult(e){if(e.kind==="all"){this.clearWithoutVersionChange();return}this.clearTargetsWithoutVersionChange(e.remotePaths)}nextTaskId(){return this.taskId++,this.taskId}getChanges(){return[...this.changes.values()]}getSummary(){let e=0,t=0;for(let n of this.changes.values())at(n)?e++:fr(n)&&t++;return{pushCount:e,pullCount:t}}getLocalChanges(){return this.getChanges().filter(e=>at(e))}getRemoteChanges(){return this.getChanges().filter(e=>fr(e))}getFullRefreshCount(){return this.fullRefreshCount}replaceTargets(e,t){if(e.length!==0){for(let[n,o]of this.changes)vc(o,e)&&this.changes.delete(n);this.addChanges(t)}}replaceFileWatchTargets(e,t){if(e.length===0)return;let n=t.filter(yc).flatMap(i=>[i.remotePath,i.oldRemotePath]).filter(i=>!!i),o=new Set;for(let[i,a]of this.changes)if(uv(a,e)||vc(a,n)){if(a.type==="renamed"&&t.some(s=>s.type==="added"&&s.remotePath===a.remotePath)){o.add(a.remotePath);continue}this.changes.delete(i)}this.addChanges(t.filter(i=>i.type!=="added"||!o.has(i.remotePath)))}addChanges(e){for(let t of e)t.type!=="clean"&&this.addMergedChange(t)}addMergedChange(e){let t=this.createMoveChangeByExistingState(e);if(!t){this.changes.set(kc(e),e);return}this.changes.set(kc(t),t)}createMoveChangeByExistingState(e){let t=this.findMoveCounterpart(e);if(t)return this.changes.delete(kc(t)),this.createMoveChange(e,t)}findMoveCounterpart(e){let t;for(let n of this.changes.values())if(this.canMergeMoveChanges(e,n)){if(t)return;t=n}return t}canMergeMoveChanges(e,t){return!!e.fileId&&e.fileId===t.fileId&&(this.isLocalAdded(e)&&this.isLocalDeleted(t)||this.isLocalDeleted(e)&&this.isLocalAdded(t)||this.isRemoteAdded(e)&&this.isRemoteDeleted(t)||this.isRemoteDeleted(e)&&this.isRemoteAdded(t))}createMoveChange(e,t){let n=this.isAddedChange(e)?e:t,o=this.isDeletedChange(e)?e:t,i=this.isRemoteAdded(n)||this.isRemoteDeleted(o);return{path:n.path,remotePath:n.remotePath,fileId:n.fileId??o.fileId,oldPath:o.path,oldRemotePath:o.remotePath,type:i?"remoteRenamed":"renamed",isFolder:n.isFolder??o.isFolder,contentChanged:n.contentChanged??o.contentChanged,metaChanged:n.metaChanged??o.metaChanged}}isAddedChange(e){return this.isLocalAdded(e)||this.isRemoteAdded(e)}isDeletedChange(e){return this.isLocalDeleted(e)||this.isRemoteDeleted(e)}isLocalAdded(e){return e.type==="added"}isLocalDeleted(e){return e.type==="deleted"}isRemoteAdded(e){return e.type==="remoteAdded"}isRemoteDeleted(e){return e.type==="remoteDeleted"}replaceAllWithoutVersionChange(e){this.changes.clear(),this.addChanges(e),this.notifyChanged()}replaceTargetsByMode(e,t,n="normal"){n==="fileWatch"?this.replaceFileWatchTargets(e,t):this.replaceTargets(e,t),this.notifyChanged()}clearTargetsWithoutVersionChange(e){this.replaceTargets(e,[]),this.notifyChanged()}clearWithoutVersionChange(){this.changes.clear(),this.notifyChanged()}notifyChanged(){this.workspace?.notifySyncStatusChanged()}};var ul=b(require("path"));G();var QM=T("workspace.file-watch"),ZM="**/*",eD=1e3,Ak=5e3,tD=200,rD=50,nD=[".succapp"],Ok="refreshAfterFileChange",dl=class{constructor(e,t,n,o={},i){this.workspace=e;this.eventBus=t;this.fileWatcherProvider=n;this.options=o;this.lockManager=i;let a=this.disposables.add(this.fileWatcherProvider.createFileWatcher(e.root,ZM));this.disposables.add(a.onFileChanged(s=>this.onFileChanged(s))),this.lockManager&&this.disposables.add(this.eventBus.on("workspace.lock.changed",s=>{s.payload.root!==this.workspace.root||s.payload.scope!=="sync"||s.payload.held||this.onSyncLockReleased()}))}disposables=new Dn;pendingChanges=new Map;lockReleaseTime=0;deferred=!1;deferredRecheckTimer;cancelPendingRefresh(){this.clearRefreshTimer(),this.clearDeferredRecheckTimer(),this.pendingChanges.clear(),this.deferred=!1}async flushPendingRefresh(){this.clearRefreshTimer(),this.clearDeferredRecheckTimer(),await this.refreshPendingChanges()}onFileChanged(e){let{filePath:t,type:n}=e;this.isWorkspaceSystemFile(t)||Date.now()-this.lockReleaseTime<(this.options.lockReleaseCooldown??rD)||(this.pendingChanges.set(`${n}\0${t}`,e),this.scheduleRefresh())}scheduleRefresh(){Do(this,Ok,this.options.refreshDelay??eD,()=>this.refreshPendingChanges(),{maxWaitMs:this.options.maxRefreshDelay??Ak})}takePendingChanges(){let e=[...this.pendingChanges.values()];return this.pendingChanges.clear(),e}async refreshPendingChanges(e=!1){if(this.pendingChanges.size===0){this.deferred=!1;return}if(await this.isSyncLockHeld()){this.deferred=!0,this.scheduleDeferredRecheck();return}let t=this.deferred;this.deferred=!1,this.clearDeferredRecheckTimer();let n=this.takePendingChanges();await this.refresh(n,e||t)}async refresh(e,t){if(e.length!==0){this.fireWorkspaceFileChanged(e[0]);try{await this.workspace.consumeFileChanges(e,{bulk:t||e.length>=this.getBulkThreshold()})}catch(n){QM.debug(`refresh sync status after file change failed: ${this.workspace.root}`,n)}}}fireWorkspaceFileChanged(e){this.eventBus.fire(new $e("workspace.file.changed",{root:this.workspace.root,filePath:e.filePath,type:e.type},this))}getBulkThreshold(){return Math.max(1,this.options.bulkThreshold??tD)}async isSyncLockHeld(){return this.lockManager?await this.lockManager.isHeldLock("sync"):!1}onSyncLockReleased(){this.lockReleaseTime=Date.now(),this.deferred&&(this.clearRefreshTimer(),this.clearDeferredRecheckTimer(),this.refreshPendingChanges(!0))}scheduleDeferredRecheck(){this.deferredRecheckTimer||(this.deferredRecheckTimer=setTimeout(()=>{this.deferredRecheckTimer=void 0,this.refreshPendingChanges()},this.options.maxRefreshDelay??Ak),this.deferredRecheckTimer.unref?.())}clearDeferredRecheckTimer(){this.deferredRecheckTimer&&(clearTimeout(this.deferredRecheckTimer),this.deferredRecheckTimer=void 0)}clearRefreshTimer(){Io(this,Ok)}isWorkspaceSystemFile(e){let t=ul.relative(this.workspace.root,e);return nD.some(n=>t===n||t.startsWith(`${n}${ul.sep}`))}dispose(){this.clearRefreshTimer(),this.clearDeferredRecheckTimer(),this.pendingChanges.clear(),this.disposables.dispose()}};var Dr=b(require("path"));G();vt();Ce();var Pa=class r{constructor(e,t){this.filePath=e;this.content=t}content;changed=!1;static async read(e){return new r(e,await Le(e))}hasChanges(){return this.changed}getContent(){return this.content}upsertMarkedBlock(e){let t=oD(this.content,e);return this.updateContent(t)}removeMarkedBlock(e){let t=Lk(e),n=Nk(t);if(!n.test(this.content))return!1;let o=this.content.replace(n,"").replace(/\s*$/,"");return this.updateContent(o?`${o}
72
- `:"")}async save(){return this.changed?(await He(this.filePath,this.content),this.changed=!1,!0):!1}updateContent(e){return e===this.content?!1:(this.content=e,this.changed=!0,!0)}};function oD(r,e){let t=Lk(e),n=Nk(t);if(n.test(r))return r.replace(n,t.content);let o=r.replace(/\s*$/,"");return`${o}${o?`
70
+ `}function VI(r,e){if(rg(r))return!0;let t=e.trimStart();return t.startsWith("{")||t.startsWith("[")}function ym(r){try{return JSON.stringify(JSON.parse(r),null,2)}catch(e){return zk.debug("skip JSON normalization because content is not valid JSON",e),r}}function Hk(r){return r===void 0||r===""||r===!1||typeof r=="object"&&r!==null&&Object.keys(r).length===0}var al=class{serverControlledKeys;constructor(e=["id","revision","creator","createTime","modifier","modifyTime"]){this.serverControlledKeys=new Set(e)}async merge(e){let t=await this.mergeContent(e),n=this.mergeMetaInfo(e.workspaceMeta,e.baseMeta,e.remoteMeta);return{hasConflict:t.hasConflict,mergedMeta:n.merged,hasMetaConflict:n.hasConflict}}async mergeContent(e){let[t,n,o]=[];try{[t,n,o]=await Promise.all([_a.promises.readFile(e.workspaceFile,"utf-8"),_a.promises.readFile(e.baseFile,"utf-8"),_a.promises.readFile(e.remoteFile,"utf-8")])}catch(g){return zk.debug(`treat merge content as conflicted because inputs cannot be read: ${e.workspaceFile}`,g),{hasConflict:!0}}VI(e.workspaceFile,t)&&(t=ym(t),n=ym(n),o=ym(o));let i=gm(t),a=gm(n),s=gm(o),c=$k(i,a,s),l=BI(t),p=c.some(g=>"conflict"in g),d=c.flatMap(g=>{if("ok"in g)return g.ok;let m=g.conflict;return["<<<<<<< Local",...m.a,"=======",...m.b,">>>>>>> Remote"]}).join(l);return await _a.promises.writeFile(e.workspaceFile,d,"utf-8"),{hasConflict:p}}mergeMetaInfo(e,t,n){if(!e&&!t&&!n)return{hasConflict:!1};let o=t??{},i=n??{},a=e??{},s={...o},c=!1,l=new Set([...Object.keys(o),...Object.keys(i),...Object.keys(a)]);for(let p of l){if(this.serverControlledKeys.has(p)){p in a?s[p]=a[p]:p in i&&(s[p]=i[p]);continue}let d=p in o,g=p in i,m=p in a,f=d!==g||d&&g&&this.isMetaFieldDifferent(o[p],i[p]),y=d!==m||d&&m&&this.isMetaFieldDifferent(o[p],a[p]);if(!(!f&&!y)){if(f&&!y){g?s[p]=i[p]:delete s[p];continue}if(!f&&y){m?s[p]=a[p]:delete s[p];continue}if(!g&&!m){delete s[p];continue}if(!g&&m){c=!0,s[p]=a[p];continue}if(g&&!m){delete s[p];continue}c=!0,s[p]=a[p]}}return{merged:Object.keys(s).length>0?s:void 0,hasConflict:c}}isMetaFieldDifferent(e,t){if(e===t)return!1;let n=Hk(e),o=Hk(t);return n&&o?!1:e!==t}};var sl=class{input;constructor(e){this.input=e}async execute(){let e;try{e=await this.normalizeMergeFiles();let t={workspaceFile:e.workspaceFile,baseFile:e.baseFile,remoteFile:e.remoteFile,workspaceMeta:this.input.workspaceMeta,baseMeta:this.input.baseMeta,remoteMeta:this.input.remoteMeta},n=await(this.input.threeWayMerge??new al).merge(t);return e.workspaceFile!==this.input.workspaceFile&&await La.promises.copyFile(e.workspaceFile,this.input.workspaceFile),{merged:!n.hasConflict,hasConflict:n.hasConflict,conflictReason:n.hasConflict?"contentConflict":void 0,threeWayResult:n}}catch(t){if(t instanceof ko)return{merged:!1,hasConflict:!0,conflictReason:t.conflictReason,metadataUpgradeReason:t.reason,errorInfo:t.errorInfo};throw t}finally{e?.tempDir&&await or(e.tempDir)}}async normalizeMergeFiles(){if(!this.input.versionInfo?.upgradeSupported)return this.createOriginalMergeFiles();if(!this.input.client)return this.createOriginalMergeFiles();let t=await this.readMergeContentVersions();if(this.areMergeContentVersionsSame(t))return this.createOriginalMergeFiles();let n=await La.promises.mkdtemp(Cm.join(Gk.tmpdir(),"succapp-single-file-merge-"));try{let o=new Pi({client:this.input.client}),i=await Promise.all([this.readAndNormalizeContent(o,"workspace",this.input.workspaceFile),this.readAndNormalizeContent(o,"base",this.input.baseFile),this.readAndNormalizeContent(o,"remote",this.input.remoteFile)]),[a,s,c]=await Promise.all([this.writeTempContent(n,"workspace",i[0]),this.writeTempContent(n,"base",i[1]),this.writeTempContent(n,"remote",i[2])]);return{workspaceFile:a,baseFile:s,remoteFile:c,tempDir:n}}catch(o){throw await or(n),o}}createOriginalMergeFiles(){return{workspaceFile:this.input.workspaceFile,baseFile:this.input.baseFile,remoteFile:this.input.remoteFile}}async readMergeContentVersions(){let[e,t,n]=await Promise.all([this.readMergeContentVersion("workspace",this.input.workspaceFile),this.readMergeContentVersion("base",this.input.baseFile),this.readMergeContentVersion("remote",this.input.remoteFile)]);return{workspace:e,base:t,remote:n}}async readMergeContentVersion(e,t){try{return await Nc(t)}catch(n){throw new ko("metadataVersionUpgradeFailed",n instanceof SyntaxError?"invalidContent":"readFailed",`metadata ${e} version normalize input cannot be read`,n)}}areMergeContentVersionsSame(e){return e.workspace===e.base&&e.workspace===e.remote}async readAndNormalizeContent(e,t,n){let o;try{o=await La.promises.readFile(n,"utf-8")}catch(a){throw new ko("metadataVersionUpgradeFailed","readFailed",`metadata ${t} version normalize input cannot be read`,a)}let i=await e.upgradeContent({path:this.input.remotePath,content:o,versionInfo:this.input.versionInfo});if(i.reason==="newerVersion")throw new ko("metadataVersionNewerThanServer",i.reason,`metadata ${t} version is newer than server target version`,i.errorInfo);if(i.reason&&i.reason!=="upToDate")throw new ko("metadataVersionUpgradeFailed",i.reason,`metadata ${t} version normalize failed`,i.errorInfo);return i.content}async writeTempContent(e,t,n){let o=Cm.join(e,t);return await La.promises.writeFile(o,n,"utf-8"),o}},ko=class extends Error{conflictReason;reason;errorInfo;constructor(e,t,n,o){super(n),this.name="MetadataVersionNormalizeError",this.conflictReason=e,this.reason=t,this.errorInfo=o}};ct();var wo=T("sync.apply-remote"),cl=class extends We{mirror=this.createMirrorStore();workspace=this.createWorkspaceStore(this.mirror);updated=[];deleted=[];conflicts=[];currentChangeTask;async execute(){this.updated=[],this.deleted=[],this.conflicts=[],this.currentChangeTask=void 0;let e=this.sortRemoteChanges(this.options.remoteChanges);wo.info("apply remote changes start: changes={0}",e.length);let t=new Set;if(e.length===0)return this.task.start(1),this.task.step(1),this.finishApplyRemoteChanges({updated:this.updated,deleted:this.deleted,conflicts:this.conflicts});let n=await this.createProgressItems(e);wo.info("apply remote changes prepared: changes={0} resources={1}",e.length,n.reduce((i,a)=>i+a.total,0)),this.task.start(Math.max(n.reduce((i,a)=>i+a.total,0),1));let o=n.map(i=>({change:i.change,total:i.total,task:this.task.subTaskMonitor(i.total)}));for(let{change:i,total:a,task:s}of o){this.task.throwIfAborted(),s.start(a),this.currentChangeTask=s;try{if(this.isCoveredByAppliedFolderCheckout(i,t)){s.progress(a);continue}let c=this.findLocalOverlaps(i);if(c.length>0&&!this.options.force){if(await this.tryApplyRemoteChangeWithLocalOverlaps(i,c))continue;this.conflicts.push(i),s.step(1);continue}i.type==="remoteDeleted"?(await this.workspace.deletePath(i.remotePath,s),this.deleted.push(i.remotePath)):i.type==="remoteRenamed"?(i.oldRemotePath&&(await this.workspace.deletePath(i.oldRemotePath,s),this.deleted.push(i.oldRemotePath)),await this.workspace.checkoutFromMirror(i.remotePath,s),this.updated.push(i.remotePath)):i.isFolder&&i.type==="remoteModified"?(await this.workspace.copyMirrorMetaInfo(i.remotePath,!0,s),this.updated.push(i.remotePath),s.step(1)):(await this.workspace.checkoutFromMirror(i.remotePath,s),this.updated.push(i.remotePath),i.isFolder&&t.add(i.remotePath))}finally{this.currentChangeTask=void 0}}return await this.cleanupEmptyOrphanParents(this.deleted,this.mirror,this.workspace),this.finishApplyRemoteChanges({updated:this.updated,deleted:this.deleted,conflicts:this.conflicts})}finishApplyRemoteChanges(e){wo.info("apply remote changes done: updated={0} deleted={1} conflicts={2}",e.updated.length,e.deleted.length,e.conflicts.length);for(let t of e.updated)wo.info("apply remote change item: status=updated path={0}",t);for(let t of e.deleted)wo.info("apply remote change item: status=deleted path={0}",t);for(let t of e.conflicts)wo.info("apply remote change item: status=conflict path={0}",t.remotePath);return e}isCoveredByAppliedFolderCheckout(e,t){for(let n of t)if(e.remotePath!==n&&Q(e.remotePath,n))return!0;return!1}async createProgressItems(e){return Promise.all(e.map(async t=>({change:t,total:await this.countChangeProgress(t)})))}async countChangeProgress(e){if(e.type==="remoteDeleted")return this.countWorkspaceProgress(e.remotePath);if(e.type==="remoteRenamed"){let[t,n]=await Promise.all([e.oldRemotePath?this.countWorkspaceProgress(e.oldRemotePath):Promise.resolve(0),this.countCheckoutProgress(e.remotePath)]);return t+n}return e.isFolder&&e.type==="remoteModified"?1:this.countCheckoutProgress(e.remotePath)}async countCheckoutProgress(e){return Math.max(await this.workspace.countCheckoutResources(e),1)}async countWorkspaceProgress(e){return Math.max(await this.workspace.countResources([e]),1)}async tryApplyRemoteChangeWithLocalOverlaps(e,t){return await this.tryApplyRemoteRenamePreservingLocalModification(e,t)||await this.tryMergeSeparatedMetaAndContentChanges(e,t)?!0:this.canApplyFolderMetaOnly(e,t)?(await this.workspace.copyMirrorMetaInfo(e.remotePath,!0,this.getCurrentChangeTask()),this.updated.push(e.remotePath),this.getCurrentChangeTask().step(1),!0):this.tryThreeWayMergeSameFileContentChange(e,t)}async tryMergeSeparatedMetaAndContentChanges(e,t){if(e.type!=="remoteModified"||t.length!==1)return!1;let n=t[0];return n.remotePath!==e.remotePath||n.type!=="modified"?!1:e.metaChanged&&!e.contentChanged&&n.contentChanged&&!n.metaChanged?(await this.workspace.copyMirrorMetaInfo(e.remotePath,!!e.isFolder,this.getCurrentChangeTask()),this.updated.push(e.remotePath),this.getCurrentChangeTask().step(1),!0):e.contentChanged&&!e.metaChanged&&n.metaChanged&&!n.contentChanged?(await this.workspace.copyMirrorContent(e.remotePath,this.getCurrentChangeTask()),this.updated.push(e.remotePath),this.getCurrentChangeTask().step(1),!0):!1}async tryApplyRemoteRenamePreservingLocalModification(e,t){if(e.type!=="remoteRenamed"||!e.oldRemotePath||t.length!==1)return!1;let n=t[0];return n.type!=="modified"||n.remotePath!==e.oldRemotePath||!await this.applyRemoteRenameContent(e,n)?!1:(await this.applyRemoteRenameMeta(e,n),await this.workspace.deletePath(e.oldRemotePath,this.getCurrentChangeTask()),this.updated.push(e.remotePath),this.deleted.push(e.oldRemotePath),e.isFolder||this.getCurrentChangeTask().step(1),!0)}async applyRemoteRenameContent(e,t){if(e.isFolder)return await this.workspace.checkoutFromMirror(e.remotePath,this.getCurrentChangeTask()),!0;let n=this.workspace.toLocalPath(e.remotePath);return this.task.throwIfAborted(),await Mi.promises.mkdir(Or.dirname(n),{recursive:!0}),e.contentChanged&&t.contentChanged?this.mergeRemoteRenameContent(e,n):t.contentChanged&&e.oldRemotePath?(this.options.mergeBaseDir&&await this.mergeRemoteRenameContent(e,n)||(this.task.throwIfAborted(),await Mi.promises.copyFile(this.workspace.toLocalPath(e.oldRemotePath),n)),!0):(await this.workspace.copyMirrorContent(e.remotePath,this.getCurrentChangeTask()),!0)}async mergeRemoteRenameContent(e,t){if(!e.oldRemotePath)return!1;let n;try{if(!this.options.mergeBaseDir||!e.oldRemotePath)return!1;n=await Mi.promises.mkdtemp(Or.join(Kk.tmpdir(),"succapp-remote-rename-merge-"));let o=Or.join(n,"workspace");this.task.throwIfAborted(),await Mi.promises.copyFile(this.workspace.toLocalPath(e.oldRemotePath),o);let i=Or.join(this.options.mergeBaseDir,Re(e.oldRemotePath)),a=this.mirror.toLocalPath(e.remotePath),s=await this.mergeSingleFileContent({remotePath:e.remotePath,workspaceFile:o,baseFile:i,remoteFile:a});return s.threeWayResult&&(this.task.throwIfAborted(),await Mi.promises.copyFile(o,t)),s.merged}catch(o){return wo.debug(`merge remote rename content failed: ${e.remotePath}`,o),!1}finally{n&&await or(n)}}async applyRemoteRenameMeta(e,t){let n=await Ne(this.mirror.root,e.remotePath);if(!n)return;let o=n;if(t.metaChanged&&e.oldRemotePath){let[i,a]=await Promise.all([Ne(this.workspaceRoot,e.oldRemotePath),this.options.mergeBaseDir?Ne(this.options.mergeBaseDir,e.oldRemotePath):Promise.resolve(void 0)]);o=this.mergeMetaWithLocalDelta(n,i,a)}await this.workspace.patchMeta(Or.posix.dirname(e.remotePath),{[Or.posix.basename(e.remotePath)]:o},this.getCurrentChangeTask())}mergeMetaWithLocalDelta(e,t,n){let o={...e},i=Co(t),a=Co(n),s=new Set([...Object.keys(i),...Object.keys(a)]);for(let c of s)(0,Jk.isDeepStrictEqual)(i[c],a[c])||(c in i?o[c]=i[c]:delete o[c]);return o}canApplyFolderMetaOnly(e,t){return e.type==="remoteModified"&&!!e.isFolder&&!!e.metaChanged&&!e.contentChanged&&t.every(n=>n.remotePath!==e.remotePath&&n.oldRemotePath!==e.remotePath)}findLocalOverlaps(e){return this.options.localChanges.filter(t=>kn(t.remotePath,t.oldRemotePath,e.remotePath,e.oldRemotePath))}sortRemoteChanges(e){return[...e].sort((t,n)=>{let o=this.getApplyOrderRank(t),i=this.getApplyOrderRank(n);return o!==i?o-i:t.type==="remoteDeleted"&&n.type==="remoteDeleted"?Mr(n.remotePath)-Mr(t.remotePath)||t.remotePath.localeCompare(n.remotePath):t.type==="remoteRenamed"&&n.type==="remoteRenamed"?this.getRemoteRenameDeleteDepth(n)-this.getRemoteRenameDeleteDepth(t)||this.getRemoteRenameDeletePath(t).localeCompare(this.getRemoteRenameDeletePath(n)):t.remotePath.localeCompare(n.remotePath)})}getApplyOrderRank(e){return e.type==="remoteDeleted"?0:e.type==="remoteRenamed"?1:2}getRemoteRenameDeleteDepth(e){return Mr(this.getRemoteRenameDeletePath(e))}getRemoteRenameDeletePath(e){return e.oldRemotePath??e.remotePath}async tryThreeWayMergeSameFileContentChange(e,t){if(e.type!=="remoteModified"||!e.contentChanged||t.length!==1)return!1;let n=t[0];if(n.type!=="modified"||!n.contentChanged||n.remotePath!==e.remotePath||!this.options.mergeBaseDir)return!1;let o=this.workspace.toLocalPath(e.remotePath),i=Or.join(this.options.mergeBaseDir,Re(e.remotePath)),a=this.mirror.toLocalPath(e.remotePath),s=await this.mergeSingleFileContent({remotePath:e.remotePath,workspaceFile:o,baseFile:i,remoteFile:a});return s.threeWayResult&&(await this.workspace.copyMirrorMetaInfo(e.remotePath,!!e.isFolder,this.getCurrentChangeTask()),this.updated.push(e.remotePath)),s.merged?(this.getCurrentChangeTask().step(1),!0):!1}async mergeSingleFileContent(e){let t=(await this.context.getMetadataVersionCatalog()).getInfoByPath(e.remotePath),n=t?.upgradeSupported?await this.getApiClient():void 0;return new sl({...e,versionInfo:t,client:n}).execute()}getCurrentChangeTask(){return $(this.currentChangeTask,"current apply remote change task is missing."),this.currentChangeTask}};Yt();H();K();D();He();var Yk="merge-base",Po="merge-backup";wr();var Qe=T("sync.pull"),ll=class extends We{async execute(){Qe.info("pull start: {0}",this.createPullScopeLog()),this.task.start(100,{message:u("workspace.sync.progress.pull.running"),retainOnFinish:!0});let e=this.task.subTaskMonitor(8),t=this.task.subTaskMonitor(55),n=this.task.subTaskMonitor(3),o=this.task.subTaskMonitor(22),i=this.task.subTaskMonitor(8),a=this.task.subTaskMonitor(2),s=this.task.subTaskMonitor(2);e.start(4),Qe.info("pull prepare start");let c=e.subTaskMonitor(1),l=e.subTaskMonitor(1),p=e.subTaskMonitor(1),d=e.subTaskMonitor(1);c.start(1),this.assertNoRemoteProjectUnavailableChanges(this.options.changes,"pull"),this.assertNoProjectRootRenameChanges(this.options.changes,"pull");let g=this.getKnownRemoteChanges(),m=g?this.getKnownChangeTargets(g):await this.resolveTargetRemotePaths(this.options.paths);c.step(1),Qe.info("pull targets resolved: {0}",this.formatTargetsForLog(m)),!this.options.paths&&!g?(Qe.info("pull refresh status start"),await this.context.refreshSyncStatus(l),Qe.info("pull refresh status done")):l.finish();let f,y,C=[],v;if(g?(f=this.getTargetLocalChanges(m),y=g,C=this.options.force===!0?this.getTargetCachedPullChanges(m):[],p.finish()):this.options.paths?(f=this.getTargetLocalChanges(m),C=this.options.force===!0?this.getTargetCachedPullChanges(m):[],v=this.expandTargetsForRenameChanges(m,[...f,...C]),p.start(1),y=this.filterChangesByTargets(await this.detectRemoteChanges(v,p),v),p.step(1)):(f=this.getLocalSyncChanges().filter(E=>E.type!=="conflict"),y=this.getRemoteSyncChanges(),p.finish()),Qe.info("pull changes prepared: local={0} remote={1}",f.length,y.length),y.length===0&&this.options.force!==!0)return Qe.info("pull skipped: no applicable remote changes"),d.finish(),t.finish(),n.finish(),o.finish(),i.finish(),a.finish(),s.finish(),this.task.setMessage(u("workspace.sync.progress.pull.done",0,0,0)),this.task.finish(),{updated:[],deleted:[],conflicts:[],oldFiles:[]};d.start(1),Qe.info("pull merge base capture start");let P=await this.captureMergeBaseDir(f,y);d.step(1),Qe.info("pull merge base capture done");let h,S=!1,k;try{await new Un(this.context,{task:t,...this.createFetchOptions(y,m,g)}).execute(),Qe.info("pull reconcile local changes start");let E=await this.reconcileLocalChangesAfterFetch(f,y,m,n);Qe.info("pull reconcile local changes done: local={0}",E.length);let w=this.options.force?await this.includeForceTargetChanges(y,E,m,C):y;h=await new cl(this.context,{remoteChanges:w,localChanges:E,force:!!this.options.force,mergeBaseDir:P,task:o}).execute(),this.applyPullOperationResult(w,h),Qe.info("pull metadata version check start: paths={0}",h.updated.length);let Y=await this.detectOldFiles(i,h.updated);Qe.info("pull metadata version check done: oldFiles={0}",Y.length);let M={...h,oldFiles:Y};return S=!0,k=u("workspace.sync.progress.pull.done",M.updated.length,M.deleted.length,M.conflicts.length),Qe.info("pull done: updated={0} deleted={1} conflicts={2} oldFiles={3}",M.updated.length,M.deleted.length,M.conflicts.length,Y.length),M}finally{await this.cleanupPullState(a,P,h),S&&(s.finish(),this.task.setMessage(k),this.task.finish())}}createPullScopeLog(){return this.hasKnownChanges(this.options.changes)?`changes=${this.options.changes.length}`:this.options.paths?.join(", ")??"<all>"}getKnownRemoteChanges(){if(this.hasKnownChanges(this.options.changes))return Aa(this.options.changes)}getTargetLocalChanges(e){return this.filterChangesByTargets(this.context.getSyncChanges().filter(t=>lt(t)&&t.type!=="conflict"),e)}getTargetCachedPullChanges(e){return this.filterChangesByTargets(Aa(this.context.getSyncChanges()),e)}async detectRemoteChanges(e,t){return new Dr({targets:e,task:t,workspace:this.context}).detect()}async detectOldFiles(e,t){return t.length===0?(e.finish(),[]):Xc(this.context,e,t.map(n=>re(this.workspaceRoot,n)))}async cleanupPullState(e,t,n){if(!t){e.finish();return}let o=!n||n.conflicts.length===0;Qe.info("pull cleanup start"),e.start(o?2:1),await or(t),e.step(1),o&&(await or(Lt.join(this.workspaceRoot,".succapp",Po)),e.step(1)),Qe.info("pull cleanup done")}formatTargetsForLog(e){return e?`targets=${e.size}`:"<all>"}getFetchPaths(e,t){if(!this.options.paths)return;if(e.length===0)return[...t||new Set(this.options.paths)];let n=new Set;for(let o of e)n.add(o.remotePath),o.oldRemotePath&&n.add(o.oldRemotePath);return[...n]}createFetchOptions(e,t,n){return n?{changes:e}:{paths:this.getFetchPaths(e,t)}}async reconcileLocalChangesAfterFetch(e,t,n,o){if(o.start(1),e.length===0||t.length===0||!e.some(s=>t.some(c=>this.isOverlappedChange(s,c)))||n)return o.step(1),e;await this.context.refreshSyncStatus(o);let i=this.filterChangesByTargets(this.getLocalSyncChanges().filter(s=>s.type!=="conflict"),n),a=e.filter(s=>t.some(c=>this.isOverlappedChange(s,c))?i.some(c=>this.isOverlappedChange(s,c)):!0);for(let s of i){let c=t.find(l=>this.isOverlappedChange(s,l));c&&(a.some(l=>this.isSameChange(l,s))||this.isFetchIntroducedRemoteMetaOnlyChange(s,c)||a.push(s))}return a}applyPullOperationResult(e,t){for(let n of e)this.context.applySyncOperationResult(n,t.conflicts.filter(o=>this.isOverlappedChange(n,o)))}isFetchIntroducedRemoteMetaOnlyChange(e,t){return e.remotePath===t.remotePath&&e.type==="modified"&&t.type==="remoteModified"&&!!e.metaChanged&&!e.contentChanged&&!!t.metaChanged&&!t.contentChanged}isOverlappedChange(e,t){return kn(e.remotePath,e.oldRemotePath,t.remotePath,t.oldRemotePath)}isSameChange(e,t){return e.type===t.type&&e.remotePath===t.remotePath&&e.oldRemotePath===t.oldRemotePath}async includeForceTargetChanges(e,t,n,o=[]){if(!n)return e;let i=[...e],a=new Set(e.map(c=>c.remotePath)),s=this.createMirrorStore();for(let c of o)if(!a.has(c.remotePath)){if(c.type==="conflict"){await this.addForceMirrorChange(i,a,s,c);continue}i.push(c),a.add(c.remotePath)}for(let c of t){if(c.type==="renamed"&&c.oldRemotePath){if(!n.has(c.remotePath)&&!n.has(c.oldRemotePath))continue;await this.addForceMirrorChange(i,a,s,{path:c.oldPath??Re(c.oldRemotePath),remotePath:c.oldRemotePath,isFolder:c.isFolder,contentChanged:c.contentChanged,metaChanged:c.metaChanged}),await this.addForceMirrorChange(i,a,s,c);continue}a.has(c.remotePath)||n.has(c.remotePath)&&await this.addForceMirrorChange(i,a,s,c)}return i}async addForceMirrorChange(e,t,n,o){if(t.has(o.remotePath))return;let i=await n.exists(o.remotePath);e.push({path:o.path,remotePath:o.remotePath,...o.fileId!==void 0?{fileId:o.fileId}:{},type:i?"remoteModified":"remoteDeleted",isFolder:i?await n.isFolder(o.remotePath):o.isFolder,contentChanged:i?o.contentChanged:!1,metaChanged:i?o.metaChanged:!1}),t.add(o.remotePath)}async captureMergeBaseDir(e,t){let n=e.filter(d=>d.type==="modified"&&d.contentChanged),o=e.filter(d=>d.type==="modified"&&(d.contentChanged||d.metaChanged));if(o.length===0)return;let i=t.filter(d=>d.type==="remoteModified"?!!d.contentChanged&&n.some(g=>this.isOverlappedChange(g,d)):d.type==="remoteRenamed"?o.some(g=>this.isOverlappedChange(g,d)):!1);if(i.length===0)return;let a=Lt.join(this.workspaceRoot,".succapp"),s=Lt.join(a,Yk),c=Lt.join(a,Po);await Promise.all([or(s),or(c)]),this.task.throwIfAborted(),await Promise.all([en.promises.mkdir(s,{recursive:!0}),en.promises.mkdir(c,{recursive:!0})]);let l=this.createMirrorStore(),p=this.createWorkspaceStore(l);return await Promise.all(i.map(async d=>{let g=d.type==="remoteRenamed"&&d.oldRemotePath?d.oldRemotePath:d.remotePath,m=Re(g),f=Lt.join(s,m),y=Lt.join(c,m);await Promise.all([(async()=>{try{this.task.throwIfAborted(),await en.promises.mkdir(Lt.dirname(f),{recursive:!0}),await en.promises.copyFile(l.toLocalPath(g),f),await this.copyBaseMetaFile(l.root,s,m,g)}catch(C){Qe.debug(`capture merge base failed for ${g}`,C)}})(),(async()=>{try{this.task.throwIfAborted(),await en.promises.mkdir(Lt.dirname(y),{recursive:!0}),await en.promises.copyFile(p.toLocalPath(g),y)}catch(C){Qe.debug(`backup workspace file failed for ${g}`,C)}})()])})),s}async copyBaseMetaFile(e,t,n,o){let i=Lt.dirname(n),a=Lt.join(e,i,J),s=Lt.join(t,i,J);try{this.task.throwIfAborted(),await en.promises.mkdir(Lt.dirname(s),{recursive:!0}),await en.promises.copyFile(a,s)}catch(c){Qe.debug(`capture merge base meta failed for ${o}`,c)}}};var hl=b(require("fs")),wm=b(require("path"));F();we();U();un();H();He();Yt();var qI;function Sm(){return qI}K();D();Fa();ct();wr();var vm=b(require("path"));He();K();F();Yt();var $I=T("sync.meta-repair"),Xk="unreadableMeta",Qk="blockedMetaPath",pl=class{constructor(e){this.workspace=e}async repair(e){let t=new Set(e.suspectMetaPaths),n=new Map,o=[],i=new Set;for(let s of t)await this.getWorkItem(s,n,o);for(let s of e.localChanges)await this.repairChange(s,t,n,o,i);let a=[];for(let s of n.values())!s.changed||s.blocked||(await Wc(this.workspace.root,s.metaPath,s.dotMeta),a.push(s.metaPath));return{repairedMetaPaths:a,affectedRemotePaths:[...i].sort(),failures:o}}async repairChange(e,t,n,o,i){if(e.type==="deleted"){await this.repairDeleted(e,t,n,o,i);return}if(e.type==="modified"){await this.repairModified(e,t,n,o,i);return}e.type==="renamed"&&e.oldRemotePath&&await this.repairRenamed(e,t,n,o,i)}async repairDeleted(e,t,n,o,i){let a=this.getDotMetaMetaPath(e.remotePath);if(!t.has(a))return;let s=await this.getWorkItem(a,n,o);if(!s||s.blocked)return;let c=this.getDotMetaKey(e.remotePath);s.dotMeta[c]&&(delete s.dotMeta[c],s.changed=!0,i.add(e.remotePath))}async repairModified(e,t,n,o,i){let a=this.getDotMetaMetaPath(e.remotePath);if(!t.has(a))return;let s=await this.getWorkItem(a,n,o);if(!s||s.blocked)return;let c=this.getDotMetaKey(e.remotePath);if(s.dotMeta[c])return;let l=await this.readMirrorMeta(e.remotePath);l&&(s.dotMeta[c]=this.cloneMetaInfo(l),s.changed=!0,i.add(e.remotePath))}async repairRenamed(e,t,n,o,i){let a=this.getDotMetaMetaPath(e.oldRemotePath),s=this.getDotMetaMetaPath(e.remotePath);if(!t.has(a)&&!t.has(s))return;let c=await this.getWorkItem(a,n,o),l=await this.getWorkItem(s,n,o);if(!c||!l||c.blocked||l.blocked)return;let p=this.getDotMetaKey(e.oldRemotePath),d=this.getDotMetaKey(e.remotePath),g=c.dotMeta[p]??await this.readMirrorMeta(e.oldRemotePath);!l.dotMeta[d]&&g&&(l.dotMeta[d]=this.cloneMetaInfo(g),l.changed=!0),c.dotMeta[p]&&(delete c.dotMeta[p],c.changed=!0),i.add(e.remotePath),i.add(e.oldRemotePath)}async getWorkItem(e,t,n){let o=t.get(e);if(o)return o;let i;try{i=await vr(this.workspace.root,e)}catch(c){if(!this.isBlockedMetaPathError(c))throw c;let l={metaPath:e,dotMeta:{},changed:!1,blocked:!0};return n.push({path:e,errorInfo:Qk}),this.logRepairFailure(e,Qk),t.set(e,l),l}let a=this.normalizeDotMeta(i.dotMeta),s={metaPath:e,dotMeta:a.dotMeta,changed:!!i.damaged||a.changed,blocked:i.repairable===!1};return s.blocked&&(n.push({path:e,errorInfo:Xk}),this.logRepairFailure(e,Xk)),t.set(e,s),s}isBlockedMetaPathError(e){let t=Xn(e);return t==="ENOTDIR"||t==="EISDIR"}logRepairFailure(e,t){$I.warn(["workspace meta repair failed",`workspaceRoot=${this.workspace.root}`,`mirrorRoot=${this.workspace.getMirrorRoot()}`,`path=${e}`,`errorInfo=${String(t)}`].join(`
71
+ `))}normalizeDotMeta(e){let t={},n=!1;for(let o of Object.keys(e)){let i=e[o];if(typeof i=="object"&&i!==null&&!Array.isArray(i)){t[o]=i;continue}n=!0}return{dotMeta:t,changed:n}}async readMirrorMeta(e){let t=this.getDotMetaMetaPath(e);return(await vr(this.workspace.getMirrorRoot(),t)).dotMeta[this.getDotMetaKey(e)]}cloneMetaInfo(e){return{...e,option:e.option?{...e.option}:void 0,customOption:e.customOption?{...e.customOption}:void 0}}getDotMetaMetaPath(e){let t=vm.posix.dirname(e);return t==="/"?"/"+J:t+"/"+J}getDotMetaKey(e){return vm.posix.basename(e)}};So();Ma();em();var Zk="10Mb";var HI=/^\s*(\d+(?:\.\d+)?)\s*(b|kb|mb|gb)?\s*$/i,zI={b:1,kb:1024,mb:1048576,gb:1073741824};function GI(r,e=10485760){let t=HI.exec(r);if(!t)return e;let n=Number(t[1]),o=(t[2]??"b").toLowerCase(),i=zI[o]??1;return Math.floor(n*i)}var km=class{reader;writer;autoPushValue=!1;autoPushDelayValue=2e3;autoPullValue=!1;autoPullIntervalValue=60;syncIgnoreValue=[];maxPushFileSizeValue=Zk;configure(e,t){this.reader=e,this.writer=t,this.load()}load(){let e=this.reader;e&&(this.autoPushValue=e("sync.autoPush",!1),this.autoPushDelayValue=e("sync.autoPushDelay",2e3),this.autoPullValue=e("sync.autoPull",!1),this.autoPullIntervalValue=e("sync.autoPullInterval",60),this.syncIgnoreValue=e("sync.ignore",[]),this.maxPushFileSizeValue=e("sync.maxPushFileSize",Zk))}get autoPush(){return this.autoPushValue}get autoPushDelay(){return this.autoPushDelayValue}get autoPull(){return this.autoPullValue}get autoPullInterval(){return this.autoPullIntervalValue}get conflictStrategy(){return"ask"}get syncIgnore(){return[...this.syncIgnoreValue]}get maxPushFileSizeBytes(){return GI(this.maxPushFileSizeValue,10485760)}async setAutoPush(e){this.autoPushValue=e,await this.writer?.("sync.autoPush",e),this.load()}},Ct=new km;var ke=T("sync.push"),ul=class extends bi{targets;localChanges=0;remoteChanges=0;requests=0;missingParentCreates=0;workspaceMetaRepairCandidates=0;workspaceMetaRepairRepaired=0;workspaceMetaRepairFailures=0;requestsByType={};preflightFailures=0;preflightFailuresByReason={};pushed=0;rejected=0;failures=0;remoteDetector;recordRequests(e){this.requests=e.length,this.requestsByType={};for(let t of e)this.incrementCounter(this.requestsByType,t.action)}recordPreflightFailures(e){this.preflightFailures+=e.length;for(let t of e)this.incrementCounter(this.preflightFailuresByReason,this.getFailureReason(t))}recordResult(e){this.pushed=e.pushed.length,this.rejected=e.rejected.length,this.failures=e.failures.length}createSnapshot(){return{runs:this.runs,durationMs:this.durationMs,...this.targets!==void 0?{targets:this.targets}:{},localChanges:this.localChanges,remoteChanges:this.remoteChanges,requests:this.requests,missingParentCreates:this.missingParentCreates,workspaceMetaRepairCandidates:this.workspaceMetaRepairCandidates,workspaceMetaRepairRepaired:this.workspaceMetaRepairRepaired,workspaceMetaRepairFailures:this.workspaceMetaRepairFailures,requestsByType:{...this.requestsByType},preflightFailures:this.preflightFailures,preflightFailuresByReason:{...this.preflightFailuresByReason},pushed:this.pushed,rejected:this.rejected,failures:this.failures,...this.remoteDetector?{remoteDetector:this.remoteDetector}:{},api:this.api}}getFailureReason(e){let t=e.errorInfo;if(!t||typeof t!="object")return"unknown";let n=t.reason;if(n!=null)return String(n);let o=t.errorCode;if(typeof o=="string"&&o.length>0)return o;let i=t.errorType;return typeof i=="string"&&i.length>0?i:"unknown"}incrementCounter(e,t){e[t]=(e[t]??0)+1}},dl=class extends We{constructor(e,t){super(e,t)}diagnostics=new ul;apiClient;pushContext=this.context;pushOptions=this.options;workspaceRootPath=this.workspaceRoot;mirrorRootPath=this.mirrorRoot;pushResult=this.createEmptyPushResult();run=this.createEmptyRunState();async execute(){this.beginPushRun();for(let e of this.createPushStageTasks())await e.run();return this.finishPush(this.run.startedAt)}beginPushRun(){this.assertNoRemoteProjectUnavailableChanges(this.options.changes,"push"),this.assertNoProjectRootRenameChanges(this.options.changes,"push"),this.pushResult=this.createEmptyPushResult(),this.run={...this.createEmptyRunState(),startedAt:this.diagnostics.startRun()},ke.info("push start: {0}",this.createPushScopeLog()),this.task.start(100,{message:u("workspace.sync.progress.push.running"),retainOnFinish:!0})}createPushScopeLog(){return this.hasKnownChanges(this.options.changes)?`changes=${this.options.changes.length}`:this.options.paths?.join(", ")??"<all>"}getDiagnostics(e={}){if(this.apiClient){let n=this.apiClient.getDiagnostics();n&&this.diagnostics.captureApiDiagnostics(n)}let t=this.diagnostics.createSnapshot();return e.reset&&(this.diagnostics=new ul,this.apiClient=void 0),t}finishPush(e){if(this.diagnostics.recordResult(this.pushResult),this.apiClient){let t=this.apiClient.getDiagnostics();t&&this.diagnostics.captureApiDiagnostics(t)}return this.diagnostics.finishRun(e),ke.info("push done: pushed={0} rejected={1} failures={2}",this.pushResult.pushed.length,this.pushResult.rejected.length,this.pushResult.failures.length),ke.debug(`push diagnostics ${this.diagnostics.describeForLog()}`),this.task.setMessage(u("workspace.sync.progress.push.done",this.pushResult.pushed.length,this.pushResult.rejected.length,this.pushResult.failures.length)),this.task.finish(),this.pushResult}createEmptyRunState(){return{startedAt:0,localChanges:[],workspaceMetaRepairPaths:[],missingParentFolderCreates:[],remoteChanges:[],requests:[]}}createPushStageTasks(){let e=this.task.subTaskMonitor(20),t=this.task.subTaskMonitor(20),n=this.task.subTaskMonitor(54),o=this.task.subTaskMonitor(3),i=this.task.subTaskMonitor(3);return e.start(5),[new Pm(this,e),new Rm(this,e),new Em(this,e),new bm(this,e),new Tm(this,e),new Mm(this,t),new xm(this,n,o,i)]}canContinuePushPipeline(){return this.pushResult.rejected.length===0&&this.pushResult.failures.length===0}hasPushRequests(){return this.run.requests.length>0}finishTask(){this.task.setMessage(u("workspace.sync.progress.push.stopped")),this.task.finish()}isForcePush(){return!!this.options.force}expandPushTargetsForRenameChanges(e,t){return this.expandTargetsForRenameChanges(e,t)}async getApiClientForPush(){let e=await this.getApiClient();return this.apiClient=e,e}async uploadFileMutation(e,t){return await this.notifySyncPushFileRequest(t),t.action==="create"?e.createFile(this.toApiFileMutationRequest(t)):t.action==="modify"?e.modifyFile(this.toApiModifyFileRequest(t)):t.action==="move"?($(t.targetPath,`targetPath is required when moving file: ${t.path}`),e.moveFile(this.toApiMoveFileRequest(t,t.targetPath))):e.deleteFile(t.path,{expectedRevision:t.expectedRevision===null?void 0:t.expectedRevision,expectedModifyTime:t.expectedModifyTime===null?void 0:t.expectedModifyTime})}notifySyncPushFileRequest(e){return this.options.onSyncPushFileRequest?.(e)}toApiFileMutationRequest(e){let{action:t,contentValidated:n,...o}=e;return o}toApiModifyFileRequest(e){let t=this.toApiFileMutationRequest(e);return{...t,expectedRevision:this.toWriteExpectedRevision(t.expectedRevision)}}toApiMoveFileRequest(e,t){let n=this.toApiFileMutationRequest(e);return{...n,targetPath:t,expectedRevision:this.toWriteExpectedRevision(n.expectedRevision)}}toWriteExpectedRevision(e){return e===null?void 0:e}reportPushDiagnostic(e,t,n){this.reportDiagnostic({path:e,message:t,errorInfo:n})}createEmptyPushResult(){return{pushed:[],rejected:[],failures:[]}}formatTargetsForLog(e){return e?`${e.size}`:"<all>"}reportPushFailure(e,t){this.reportDiagnostic({path:e.path,message:t,errorInfo:e.errorInfo})}},Na=class{constructor(e,t){this.command=e;this.task=t}async run(){this.shouldRun()&&await this.doRun()}shouldRun(){return!0}async isFolderPath(e,t){try{return(await hl.promises.stat(re(e,t))).isDirectory()}catch(n){if(x(n))return ke.debug(`sync folder path does not exist: ${e}:${t}`),!1;throw n}}getParentPaths(e){let t=e.replace(/^\/+|\/+$/g,"").split("/").filter(Boolean),n=[];for(let o=0;o<t.length-1;o++)n.push("/"+t.slice(0,o+1).join("/"));return n}},Pm=class extends Na{constructor(e,t){super(e,t.subTaskMonitor(1))}doRun(){return this.collectLocalChanges()}async collectLocalChanges(){ke.info("push prepare start");let{targets:e,localChanges:t}=await this.getLocalChangesForPush();this.command.run.targets=e,this.command.run.localChanges=t,this.command.diagnostics.targets=e?.size,this.command.diagnostics.localChanges=t.length,ke.info("push local changes prepared: targets={0} local={1}",this.command.formatTargetsForLog(e),t.length)}async getLocalChangesForPush(){let e=this.command.pushOptions;if(this.command.hasKnownChanges(e.changes))return this.task.finish(),{targets:new Set(this.command.getKnownChangeTargetRemotePaths(e.changes)),localChanges:e.changes};this.task.start(2);let t=this.task.subTaskMonitor(1),n=this.task.subTaskMonitor(1);t.start(1);let o=this.normalizeDotMetaTargets(await this.command.resolveTargetRemotePaths(e.paths)),i=o?new Set(ft(o)):void 0;return t.step(1),await this.refreshTargetChangesForPush(i,n),{targets:i,localChanges:this.command.filterChangesByTargets(this.command.pushContext.getSyncChanges().filter(a=>lt(a)),i)}}async refreshTargetChangesForPush(e,t){if(!e){await this.command.pushContext.refreshSyncStatus(t);return}if(e.size===0){t.finish();return}if(await this.hasDirectoryTarget(e)){await this.command.pushContext.refreshSyncStatus(t);return}t.start(1),await this.command.pushContext.consumeFileChanges([...e].map(n=>({filePath:re(this.command.workspaceRootPath,n),type:"changed"}))),t.step(1)}async hasDirectoryTarget(e){return(await Promise.all([...e].map(async n=>await this.isDirectoryTarget(this.command.workspaceRootPath,n)||await this.isDirectoryTarget(this.command.mirrorRootPath,n)))).some(Boolean)}async isDirectoryTarget(e,t){try{return(await hl.promises.stat(re(e,t))).isDirectory()}catch(n){return x(n)?(ke.debug(`push target is not a directory: ${e}:${t}`),!1):(ke.debug(`push target stat failed, fallback to full status: ${e}:${t}`,n),!0)}}normalizeDotMetaTargets(e){if(!e)return;let t=new Set;for(let n of e){if(wm.posix.basename(n)===J){t.add(wm.posix.dirname(n));continue}t.add(n)}return t}},Rm=class extends Na{constructor(e,t){super(e,t.subTaskMonitor(1))}doRun(){return this.repairWorkspaceMeta()}async repairWorkspaceMeta(){this.task.start(1),this.command.run.workspaceMetaRepairPaths=Fk(this.command.run.localChanges),this.command.diagnostics.workspaceMetaRepairCandidates=this.command.run.workspaceMetaRepairPaths.length,ke.info("push workspace metadata repair start: candidates={0}",this.command.run.workspaceMetaRepairPaths.length);let e=await new pl(this.command.pushContext).repair({suspectMetaPaths:this.command.run.workspaceMetaRepairPaths,localChanges:this.command.run.localChanges});this.command.diagnostics.workspaceMetaRepairRepaired=e.repairedMetaPaths.length,this.command.diagnostics.workspaceMetaRepairFailures=e.failures.length,this.task.step(1),ke.info("push workspace metadata repair done: failures={0}",e.failures.length),e.failures.length>0&&(this.command.finishTask(),this.command.pushResult.failures.push(...e.failures))}},xi=class extends Na{shouldRun(){return this.command.canContinuePushPipeline()}},Em=class extends xi{constructor(e,t){super(e,t.subTaskMonitor(1))}doRun(){return this.analyzeParentFolders()}async analyzeParentFolders(){if(this.task.start(1),ke.info("push parent folder analysis start"),this.command.run.missingParentFolderCreates=await this.collectMissingParentFolderCreates(this.command.run.localChanges),this.command.diagnostics.missingParentCreates=this.command.run.missingParentFolderCreates.length,this.command.run.operationTargets=this.command.expandPushTargetsForRenameChanges(this.command.run.targets,this.command.run.localChanges),this.command.run.operationTargets)for(let e of this.command.run.missingParentFolderCreates)this.command.run.operationTargets.add(e);this.task.step(1),ke.info("push parent folder analysis done: missingParents={0}",this.command.run.missingParentFolderCreates.length)}async collectMissingParentFolderCreates(e){let t=new Set,n=new Set;for(let o of e)o.isFolder&&(o.type==="added"||o.type==="renamed")&&n.add(o.remotePath);for(let o of e)if(!(o.type!=="added"&&o.type!=="modified"&&o.type!=="renamed"))for(let i of this.getParentPaths(o.remotePath))n.has(i)||t.has(i)||await this.isFolderPath(this.command.mirrorRootPath,i)||!await this.isFolderPath(this.command.workspaceRootPath,i)||t.add(i);return[...t].sort((o,i)=>{let a=Mr(o)-Mr(i);return a!==0?a:o.localeCompare(i)})}},bm=class extends xi{constructor(e,t){super(e,t.subTaskMonitor(1))}doRun(){return this.checkRemoteChanges()}async checkRemoteChanges(){if(this.task.start(1),ke.info("push remote change check start: {0}",this.command.formatTargetsForLog(this.command.run.operationTargets)),this.command.run.remoteChanges=await this.getRemoteChangesForPush(this.command.run.operationTargets),this.command.diagnostics.remoteChanges=this.command.run.remoteChanges.length,this.task.step(1),ke.info("push remote change check done: remote={0}",this.command.run.remoteChanges.length),this.command.run.remoteChanges.length>0&&!this.command.isForcePush()){this.command.finishTask(),this.command.pushResult.rejected.push(...this.command.run.remoteChanges);for(let e of this.command.run.remoteChanges)ke.info("push item done: status=rejected path={0}",e.remotePath)}}async getRemoteChangesForPush(e){if(this.command.hasKnownChanges(this.command.pushOptions.changes)||!e)return this.command.filterChangesByTargets(this.command.pushContext.getSyncChanges().filter(o=>kr(o)),e);if(e.size===0)return[];let t=new Dr({workspace:this.command.pushContext,targets:e,task:this.task}),n=await t.detect();return this.command.diagnostics.remoteDetector=t.getDiagnostics(),this.command.filterChangesByTargets(n,e)}},Tm=class extends xi{constructor(e,t){super(e,t.subTaskMonitor(1))}doRun(){return this.buildPushRequests()}async buildPushRequests(){this.task.start(1),ke.info("push request build start: local={0}",this.command.run.localChanges.length),this.command.run.requests=await this.createPushRequests(this.command.run.localChanges,this.command.run.missingParentFolderCreates),this.command.diagnostics.recordRequests(this.command.run.requests),this.task.step(1),ke.info("push request build done: requests={0}",this.command.run.requests.length),this.command.run.requests.length===0&&this.command.finishTask()}async createPushRequests(e,t=[]){let n=[],o=[],i=new Set,a=new Set,s=new Set(t);for(let c of this.sortChangesForPush(this.filterDerivedFolderRenameChanges(e))){if(c.type==="renamed"&&c.oldRemotePath){await this.appendMissingParentFolderCreates(c.remotePath,s,a,i,n);let l=this.getMovedFolderChildSource(c.oldRemotePath,o);if(l===c.remotePath){(c.contentChanged||c.metaChanged)&&n.push(await this.createModifyRequest(c,c.oldRemotePath,!0));continue}n.push(await this.createMoveRequest(c,l)),c.isFolder&&(o.push({oldRemotePath:c.oldRemotePath,newRemotePath:c.remotePath}),a.add(c.remotePath));continue}if(c.type==="added"){await this.appendMissingParentFolderCreates(c.remotePath,s,a,i,n),n.push(await this.createCreateRequest(c.remotePath,c.isFolder)),c.isFolder&&a.add(c.remotePath);continue}if(c.type==="modified"){await this.appendMissingParentFolderCreates(c.remotePath,s,a,i,n),n.push(await this.createModifyRequest(c));continue}c.type==="deleted"&&n.push(await this.createDeleteRequest(c.remotePath,c.isFolder))}return n}async appendMissingParentFolderCreates(e,t,n,o,i){for(let a of this.getParentPaths(e))if(!(o.has(a)||!t.has(a)||a==="/"||n.has(a))){if(await this.isFolderPath(this.command.mirrorRootPath,a)){n.add(a);continue}i.push(await this.createCreateRequest(a,!0)),o.add(a),n.add(a)}}filterDerivedFolderRenameChanges(e){let t=e.filter(n=>n.type==="renamed"&&n.isFolder&&!!n.oldRemotePath);return t.length===0?e:e.filter(n=>n.type!=="renamed"||!n.oldRemotePath?!0:!t.some(o=>{if(o===n)return!1;let i=o.oldRemotePath,a=o.remotePath;if(!Q(n.oldRemotePath,i)||!Q(n.remotePath,a))return!1;let s=n.oldRemotePath.slice(i.length),c=n.remotePath.slice(a.length);return s===c&&!n.contentChanged&&!n.metaChanged}))}async createCreateRequest(e,t){let n=this.command.workspaceRootPath,o={path:e,action:"create",isFolder:t,expectedRevision:null,expectedModifyTime:null,metaInfo:Co(await Ne(n,e,{strict:!0})),metaInfoChanged:!0};return t||(o.localContentPath=re(n,e),o.contentChanged=!0),o}async createModifyRequest(e,t=e.remotePath,n=!1){let o=this.command.workspaceRootPath,i=await Ne(this.command.mirrorRootPath,t);if(!i)throw new jt("err.sync.conflict",{remotePath:e.remotePath,reason:"remoteVersionChanged"});let a=!e.isFolder&&!!e.contentChanged,s={path:e.remotePath,action:"modify",isFolder:e.isFolder,expectedRevision:this.command.isForcePush()||e.isFolder?void 0:i.revision??0,expectedModifyTime:this.command.isForcePush()||n?void 0:i.modifyTime??0,metaInfo:Co(await Ne(o,e.remotePath,{strict:!0})),metaInfoChanged:!!e.metaChanged};return a&&(s.localContentPath=re(o,e.remotePath),s.contentChanged=!0),s}async createMoveRequest(e,t){if(!e.oldRemotePath)throw new jt("err.sync.conflict",{remotePath:e.remotePath,reason:"remoteVersionChanged"});let n=this.command.workspaceRootPath,o=await Ne(this.command.mirrorRootPath,e.oldRemotePath);if(!o)throw new jt("err.sync.conflict",{remotePath:e.oldRemotePath,reason:"remoteVersionChanged"});let i=Co(await Ne(n,e.remotePath,{strict:!0})),a={path:t??e.oldRemotePath,targetPath:e.remotePath,action:"move",isFolder:e.isFolder,expectedRevision:this.command.isForcePush()||e.isFolder?void 0:o.revision??0,expectedModifyTime:this.command.isForcePush()||e.isFolder||t?void 0:o.modifyTime??0,metaInfo:i,metaInfoChanged:!!e.metaChanged};return!e.isFolder&&e.contentChanged&&(a.localContentPath=re(n,e.remotePath),a.contentChanged=!0),a}getMovedFolderChildSource(e,t){for(let n of[...t].reverse())if(!(e===n.oldRemotePath||!Q(e,n.oldRemotePath)))return n.newRemotePath+e.slice(n.oldRemotePath.length)}async createDeleteRequest(e,t){let n=await Ne(this.command.mirrorRootPath,e);if(!n)throw new jt("err.sync.conflict",{remotePath:e,reason:"remoteVersionChanged"});return{path:e,action:"delete",expectedRevision:this.command.isForcePush()||t?void 0:n.revision??0,expectedModifyTime:this.command.isForcePush()||t?void 0:n.modifyTime??0}}sortChangesForPush(e){let t=n=>n.type==="deleted"?-Mr(n.remotePath):n.type==="renamed"?10:n.type==="added"?20+Mr(n.remotePath):30+Mr(n.remotePath);return[...e].sort((n,o)=>{let i=t(n),a=t(o);return i!==a?i-a:n.remotePath.localeCompare(o.remotePath)})}},ml=class extends xi{shouldRun(){return super.shouldRun()&&this.command.hasPushRequests()}async validatePushRequest(e){let t=Ct.maxPushFileSizeBytes;if(e.localContentPath)try{let n=await hl.promises.stat(e.localContentPath);if(t>0&&n.size>t){let o={path:e.path,errorInfo:{reason:"fileTooLarge",message:`File is larger than configured push limit: ${e.path}`,size:n.size,limit:t}};return this.command.reportPushFailure(o,"push validation failed"),o}if(await Mk(e.localContentPath)){let o={path:e.path,errorInfo:{reason:"conflictMarkers",message:`File contains unresolved conflict markers: ${e.path}`}};return this.command.reportPushFailure(o,"push validation failed"),o}}catch(n){let o={path:e.path,errorInfo:{reason:"fileReadFailed",message:`Failed to validate push file content: ${e.path}`,cause:n instanceof Error?n.message:String(n)}};return this.command.reportPushFailure(o,"push validation failed"),o}}},Mm=class extends ml{doRun(){return this.preflightPushRequests()}async preflightPushRequests(){ke.info("push preflight start: requests={0}",this.command.run.requests.length);let e=await this.validatePushRequestsBeforePush(this.command.run.requests);this.command.diagnostics.recordPreflightFailures(e),ke.info("push preflight done: failures={0}",e.length),e.length>0&&(this.command.finishTask(),this.command.pushResult.failures.push(...e))}async validatePushRequestsBeforePush(e){let t=[];if(this.task.start(Math.max(e.length,1)),e.length===0)return this.task.step(1),t;let n=e.map(o=>({request:o,task:this.task.subTaskMonitor(1)}));for(let{request:o,task:i}of n){this.task.throwIfAborted(),i.start(1);let a=await this.validatePushRequest(o);if(a){t.push(a),i.progress(1);continue}o.contentValidated=!0,i.step(1)}return t}},xm=class extends ml{constructor(t,n,o,i){super(t,n);this.resultTask=o;this.doneTask=i}doRun(){return this.uploadPushRequests()}async uploadPushRequests(){ke.info("push upload start: requests={0}",this.command.run.requests.length);let t=await this.pushRequests(this.command.run.requests);this.command.pushResult={pushed:[...t.pushed],rejected:[...t.rejected],failures:[...t.failures],...t.metadataVersionSuggestions?{metadataVersionSuggestions:[...t.metadataVersionSuggestions]}:{}},ke.info("push upload done: pushed={0} failures={1}",this.command.pushResult.pushed.length,this.command.pushResult.failures.length),this.doneTask.finish()}async pushRequests(t){let n=await this.command.getApiClientForPush(),o=[],i=[];this.task.start(Math.max(t.length,1)),t.length===0&&this.task.step(1);try{for(let l of t){this.task.throwIfAborted();let p=await this.preparePushRequestForUpload(l);if(p){i.push(p),ke.info("push item done: status=failed path={0}",p.path),this.task.step(1);continue}try{let d=await this.command.uploadFileMutation(n,l);if(!d.success){let g={path:d.path,errorInfo:d.errorInfo};this.command.reportPushFailure(g,"push item failed")}o.push(d),ke.info("push item done: status={0} path={1}",d.success?"pushed":"failed",d.path)}catch(d){let g=this.createPushFailureFromMutationError(l,d);if(!g)throw d;i.push(g),this.command.reportPushFailure(g,"push item failed"),ke.info("push item done: status=failed path={0}",g.path)}this.task.step(1)}}catch(l){throw await this.applyPushResponsesWithProgress(o),l}let a=await this.applyPushResponsesWithProgress(o),s=await this.createMetadataVersionSuggestions(t,o),c=s.length>0?{...a,metadataVersionSuggestions:s}:a;return i.length===0?c:{...c,failures:[...c.failures,...i]}}createPushFailureFromMutationError(t,n){if(!(n instanceof er))return;let o=n.remoteError?this.toMutationErrorInfo(Ca(pn(n.remoteError),{action:t.action,path:t.path,targetPath:t.targetPath}),n):void 0;if(!(!o||!this.isMutationBlockedErrorInfo(o,t)))return{path:this.getMutationFailurePath(t,o),errorInfo:o}}toMutationErrorInfo(t,n){let o=n.remoteError;return{errorCode:t.errorCode??o?.errorCode??n.errorCode,errorType:t.errorType??o?.errorType??n.errorType,message:t.message??o?.message??n.message,properties:It(t)}}isMutationBlockedErrorInfo(t,n){return KS(t,{action:n.action,path:n.path,targetPath:n.targetPath})}getMutationFailurePath(t,n){let o=It(n)?.path;return typeof o=="string"&&o.length>0?o:this.getRequestTargetPath(t)}async applyPushResponsesWithProgress(t){this.resultTask.start(Math.max(t.length,1));let n=await this.applyPushResponses(t);return this.resultTask.step(Math.max(t.length,1)),n}async applyPushResponses(t){let n=new yt(this.command.mirrorRootPath),o=new sr(this.command.workspaceRootPath,n);await new ki({workspace:o,mirror:n,getApiClient:()=>this.command.getApiClientForPush()}).apply(t);let i=t.filter(s=>s.success).map(s=>s.path);return i.length>0&&this.command.pushContext.clearSyncStatusTargets(i),{pushed:i,rejected:[],failures:t.filter(s=>!s.success).map(s=>({path:s.path,errorInfo:s.errorInfo}))}}async preparePushRequestForUpload(t){return t.contentValidated?void 0:this.validatePushRequest(t)}async createMetadataVersionSuggestions(t,n){let o=new Set(n.filter(s=>s.success).map(s=>s.path));if(o.size===0)return[];let i=[],a=new Set;for(let s of t){if(!this.shouldCheckMetadataVersionSuggestion(s,o))continue;let c=this.getRequestTargetPath(s);if(a.has(c))continue;let l=await this.createMetadataVersionSuggestion(s,c);l&&(a.add(c),i.push(l))}return i}shouldCheckMetadataVersionSuggestion(t,n){if(!t.localContentPath||!t.contentChanged||t.isFolder||t.action==="delete")return!1;let o=this.getRequestTargetPath(t);return n.has(o)||n.has(t.path)}async createMetadataVersionSuggestion(t,n){try{let o=t.localContentPath;if(!o)return;let i=(await this.command.pushContext.getMetadataVersionCatalog()).getInfoByPath(n),a=i?.contentVersion;if(!i?.upgradeSupported||!a)return;let s=await Nc(o),c=this.getMetadataVersionSuggestionKind(s,a);return c?{path:n,currentVersion:s,targetVersion:a,metaType:i.metaType,kind:c}:void 0}catch(o){ke.debug(`push metadata suggestion check failed: ${n}`,o);return}}getMetadataVersionSuggestionKind(t,n){return Jc(t,n)?"newer":Kc(t,n)?"older":void 0}getRequestTargetPath(t){return t.targetPath??t.path}};im();ct();F();U();H();K();D();wr();var xt=T("sync.reset"),fl=class extends We{mirror=this.createMirrorStore();workspace=this.createWorkspaceStore(this.mirror);async execute(){xt.info("reset start: {0}",this.createResetScopeLog()),this.task.start(100,{message:u("workspace.sync.progress.reset.running"),retainOnFinish:!0});let e=this.task.subTaskMonitor(8),t=this.task.subTaskMonitor(87),n=this.task.subTaskMonitor(3),o=this.task.subTaskMonitor(2);e.start(4),xt.info("reset prepare start");let{targets:i,localChanges:a}=await this.prepareResetScope();e.step(1),xt.info("reset targets resolved: {0}",this.formatTargetsForLog(i)),xt.info("reset local changes checked: local={0}",a.length),a.length>0&&!this.options.force&&this.throwFirstConflict(a,"requiresOverwrite"),e.step(1);let s=this.expandTargetsForRenameChanges(i,a),c=s?this.sortRemotePathsForCheckout(ft(s)):this.sortRemotePathsForCheckout(await this.workspace.listProjectPaths());e.step(1),xt.info("reset checkout target paths prepared: paths={0}",c.length),xt.debug(`reset checkout target paths: ${c.join("|")}`);let l=await this.createCheckoutItems(c);e.step(1),xt.info("reset checkout items prepared: items={0} resources={1}",l.length,l.reduce((g,m)=>g+m.total,0));for(let g of l)xt.debug(`reset checkout item: remotePath=${g.remotePath} existsInMirror=${g.existsInMirror} total=${g.total}`);xt.info("reset checkout start: items={0}",l.length);let p=await this.checkoutMirrorToWorkspace(l,t);xt.info("reset checkout done: updated={0} deleted={1}",p.updated.length,p.deleted.length);let d=[...p.updated,...p.deleted];return n.start(1),xt.info("reset cleanup status start"),await this.cleanupEmptyOrphanParents(p.deleted,this.mirror,this.workspace),d.length>0&&this.clearSyncStatusTargets(d),n.step(1),xt.info("reset cleanup status done"),o.finish(),xt.info("reset done: updated={0} deleted={1}",p.updated.length,p.deleted.length),this.task.setMessage(u("workspace.sync.progress.reset.done",p.updated.length,p.deleted.length)),this.task.finish(),p}createResetScopeLog(){return this.hasKnownChanges(this.options.changes)?`changes=${this.options.changes.length}`:this.options.paths?.join(", ")??"<all>"}async prepareResetScope(){if(this.hasKnownChanges(this.options.changes)){let t=this.options.changes.filter(lt);return{targets:this.getKnownChangeTargets(t),localChanges:t}}let e=await this.resolveTargetRemotePaths(this.options.paths,"mirror-only");return{targets:e,localChanges:this.filterChangesByTargets(this.getLocalSyncChanges(),e)}}formatTargetsForLog(e){return e?`targets=${e.size}`:"<all>"}async checkoutMirrorToWorkspace(e,t){let n=[],o=[];if(e.length===0)return t.finish(),{updated:n,deleted:o};t.start(e.reduce((a,s)=>a+s.total,0));let i=e.map(a=>({...a,task:t.subTaskMonitor(a.total)}));for(let a of i){t.throwIfAborted(),a.task.start(a.total);let s=Date.now();xt.debug(`reset item start: remotePath=${a.remotePath} existsInMirror=${a.existsInMirror} total=${a.total}`),a.existsInMirror?(await this.workspace.checkoutFromMirror(a.remotePath,a.task),t.throwIfAborted(),n.push(a.remotePath)):(await this.workspace.deletePath(a.remotePath,a.task),t.throwIfAborted(),o.push(a.remotePath)),xt.debug(`reset item done: remotePath=${a.remotePath} elapsed=${Date.now()-s}ms`)}return t.finish(),{updated:n,deleted:o}}async createCheckoutItems(e){return Promise.all(e.map(async t=>{let n=await this.mirror.exists(t);return{remotePath:t,existsInMirror:n,total:await this.countCheckoutTotal(t,n)}}))}async countCheckoutTotal(e,t){let n=await(t?this.workspace.countCheckoutResources(e):this.workspace.countResources([e]));return Math.max(n,1)}throwFirstConflict(e,t){let n=e[0];throw new jt("err.sync.conflict",{remotePath:n.remotePath,reason:t})}sortRemotePathsForCheckout(e){return e.sort((t,n)=>t.localeCompare(n))}};var Fm=b(require("fs")),Wa=b(require("path"));H();F();K();D();ct();var JI=T("sync.restore-local"),gl=class extends Ti{constructor(e,t){super(e,t)}async execute(){this.task.start(1,{message:u("workspace.sync.progress.restore.running")});let e=this.options.change,t=Wa.join(this.workspaceRoot,".succapp",Po,Re(e.remotePath)),n=Wa.join(this.workspaceRoot,e.path);try{this.task.throwIfAborted(),await Fm.promises.mkdir(Wa.dirname(n),{recursive:!0}),await Fm.promises.copyFile(t,n)}catch(o){if(x(o))return JI.debug(`pull backup file does not exist: ${t}`),this.task.step(1),{restored:!1};throw o}return this.context.applySyncOperationResult(e,[{path:e.path,remotePath:e.remotePath,...e.fileId!==void 0?{fileId:e.fileId}:{},type:"modified",contentChanged:!0,metaChanged:!1}]),this.task.step(1),{restored:!0}}};var Ro=b(require("fs")),_r=b(require("path"));F();D();H();ct();var Ua=class extends _t{async execute(){this.task.start(1,{message:u("workspace.sync.progress.backupList.running")});let e=await this.listEntries();return this.task.step(1),{workspaceRootPath:this.workspaceRoot,entries:e}}async listEntries(){let e=this.resolveFilterTargets(),t=await ew(this.workspaceRoot);return e.length===0?t:t.filter(n=>e.some(o=>Q(n.path,o)))}resolveFilterTargets(){return(this.options.paths??[]).map(e=>YI(this.workspaceRoot,e))}},yl=class extends We{async execute(){this.task.start(1,{message:u("workspace.sync.progress.backupClear.running")});let e=await new Ua(this.context,this.options).listEntries(),t=rw(this.workspaceRoot);if(!this.options.paths||this.options.paths.length===0)return await Ro.promises.rm(t,{recursive:!0,force:!0}),this.task.step(1),{workspaceRootPath:this.workspaceRoot,cleared:e,remaining:[]};for(let n of e)this.task.throwIfAborted(),await Ro.promises.rm(n.backupPath,{force:!0}),await XI(_r.dirname(n.backupPath),t);return this.task.step(1),{workspaceRootPath:this.workspaceRoot,cleared:e,remaining:await ew(this.workspaceRoot)}}};async function ew(r){let e=rw(r);return(await tw(e,e)).sort((n,o)=>n.path.localeCompare(o.path))}async function tw(r,e){let t=await Ro.promises.readdir(e,{withFileTypes:!0}).catch(o=>{if(x(o))return[];throw o}),n=[];for(let o of t){let i=_r.join(e,o.name);if(o.isDirectory()){n.push(...await tw(r,i));continue}if(!o.isFile())continue;let a=await Ro.promises.stat(i),s=_r.relative(r,i).replace(/\\/g,"/");n.push({path:ae(s),backupPath:i,size:a.size,mtime:a.mtime.toISOString()})}return n}function YI(r,e){return ae(Tr(r,e)??e)}function rw(r){return _r.join(r,".succapp",Po)}async function XI(r,e){let t=r;for(;t!==e&&t.startsWith(e+_r.sep);){if((await Ro.promises.readdir(t).catch(o=>{if(x(o))return[];throw o})).length>0)return;await Ro.promises.rmdir(t),t=_r.dirname(t)}}K();D();U();F();H();ct();var jn=T("sync.remove-project"),Cl=class extends We{mirror=this.createMirrorStore();workspace=this.createWorkspaceStore(this.mirror);async execute(){let e=[...new Set(this.options.projectNames.map(l=>Et(l)))];jn.info("remove local project start: {0}",e.join(", "));let[t,n]=await Promise.all([this.workspace.listProjectPaths(),this.mirror.listProjectPaths()]),o=new Set([...t,...n]),i=e.filter(l=>!o.has(l)).map(l=>l.slice(1));if(i.length>0)throw new wt("err.sync.projectNotFound",{projectNames:i.join(", ")});jn.info("remove local project resource count start: projects={0}",e.length);let a=await this.createRemoveItems(e);jn.info("remove local project resource count done: resources={0}",a.reduce((l,p)=>l+p.total,0)),this.task.start(Math.max(a.reduce((l,p)=>l+p.total,0),1),{message:u("workspace.sync.progress.removeProject.running"),retainOnFinish:!0}),a.length===0&&this.task.step(1),jn.info("remove local project files start: projects={0}",a.length);let s=a.map(l=>({...l,task:this.task.subTaskMonitor(l.total)}));for(let l of s)this.task.throwIfAborted(),l.task.start(l.total),await this.workspace.deletePath(l.projectPath,l.task),this.task.throwIfAborted(),await this.mirror.removePath(l.projectPath,l.task),this.task.throwIfAborted(),await this.mirror.removeMeta(l.projectPath);jn.info("remove local project files done: projects={0}",a.length);let c=e.map(l=>l.slice(1));return jn.info("remove local project cleanup status start"),this.clearSyncStatusTargets(e),jn.info("remove local project cleanup status done"),c.length>0&&this.context.notifyLocalProjectsChanged?.(),jn.info("remove local project done: {0}",c.join(", ")),this.task.setMessage(u("workspace.sync.progress.removeProject.done",c.length)),this.task.finish(),{projectNames:c}}async createRemoveItems(e){return Promise.all(e.map(async t=>{let[n,o]=await Promise.all([this.workspace.countResources([t]),this.mirror.countMetaResources([t])]);return{projectPath:t,total:Math.max(n+o,1)}}))}};var nw=b(require("fs")),ow=b(require("path"));ct();D();var Sl=class extends _t{async execute(){this.task.start(1,{message:u("workspace.sync.progress.show.running")});let e=this.options.source??"server",t=await this.resolveRemotePath(this.options.path,e==="mirror"?"mirror-only":"server-backed"),n;if(e==="mirror"){let o=this.createMirrorStore();n=await nw.promises.readFile(o.toLocalPath(t))}else n=(await(await this.getApiClient()).getFileContent(t,{revision:this.options.revision})).buffer;return this.task.step(1),{path:this.options.path,remotePath:t,fileName:ow.basename(t),source:e,buffer:n}}};var Im=b(require("fs"));ct();D();var vl=3,QI=/\r\n|\n|\r/,wl=class extends _t{async execute(){let e=this.options.source??"server";this.task.start(Math.max(this.options.paths.length,1),{message:u("workspace.sync.progress.diff.running")});let t=await Promise.all(this.options.paths.map(async n=>{try{return this.task.throwIfAborted(),await this.diffFile(n,e)}finally{this.task.step()}}));return this.options.paths.length===0&&this.task.step(1),{source:e,items:t}}async diffFile(e,t){let n=await this.resolveRemotePath(e,t==="mirror"?"mirror-only":"server-backed"),o=this.createMirrorStore(),a=this.createWorkspaceStore(o).toLocalPath(n),[s,c]=await Promise.all([this.readSourceBuffer(n,t,o),Im.promises.readFile(a)]),l=ZI({sourceBuffer:s,workspaceBuffer:c,sourceLabel:`${t}:${n}`,workspaceLabel:`workspace:${n}`});return{path:e,remotePath:n,localPath:a,source:t,sourceSize:s.length,workspaceSize:c.length,changed:l.changed,binary:l.binary,patch:l.text}}async readSourceBuffer(e,t,n){return t==="mirror"?Im.promises.readFile(n.toLocalPath(e)):(await(await this.getApiClient()).getFileContent(e)).buffer}};function ZI(r){if(r.sourceBuffer.equals(r.workspaceBuffer))return{changed:!1,binary:kl(r.sourceBuffer)||kl(r.workspaceBuffer),text:""};if(kl(r.sourceBuffer)||kl(r.workspaceBuffer))return{changed:!0,binary:!0,text:[`diff --succapp ${r.sourceLabel} ${r.workspaceLabel}`,`Binary files ${r.sourceLabel} and ${r.workspaceLabel} differ`,""].join(`
72
+ `)};let e=aw(r.sourceBuffer),t=aw(r.workspaceBuffer),n=qk(e,t);return{changed:n.length>0,binary:!1,text:n.length===0?"":eD(r,e,t,n)}}function eD(r,e,t,n){let o=[`diff --succapp ${r.sourceLabel} ${r.workspaceLabel}`,`--- ${r.sourceLabel}`,`+++ ${r.workspaceLabel}`];for(let i of tD(e,t,n))o.push(...nD(i,e));return o.push(""),o.join(`
73
+ `)}function tD(r,e,t){let n=[];for(let o of t){let i=rD(r,e,o),a=n.at(-1);if(a&&i.oldStart<=a.oldEnd&&i.newStart<=a.newEnd){a.oldEnd=Math.max(a.oldEnd,i.oldEnd),a.newEnd=Math.max(a.newEnd,i.newEnd),a.patches.push(o);continue}n.push(i)}return n}function rD(r,e,t){let n=Math.max(0,t.buffer1.offset-vl),o=Math.max(0,t.buffer2.offset-vl);return{oldStart:n,oldEnd:Math.min(r.length,t.buffer1.offset+t.buffer1.length+vl),newStart:o,newEnd:Math.min(e.length,t.buffer2.offset+t.buffer2.length+vl),patches:[t]}}function nD(r,e){let t=[`@@ -${iw(r.oldStart,r.oldEnd-r.oldStart)} +${iw(r.newStart,r.newEnd-r.newStart)} @@`],n=r.oldStart;for(let o of r.patches){for(let i=n;i<o.buffer1.offset;i++)t.push(` ${e[i]}`);t.push(...o.buffer1.chunk.map(i=>`-${i}`)),t.push(...o.buffer2.chunk.map(i=>`+${i}`)),n=o.buffer1.offset+o.buffer1.length}for(let o=n;o<r.oldEnd;o++)t.push(` ${e[o]}`);return t}function iw(r,e){return e===0?`${r}`:e===1?`${r+1}`:`${r+1},${e}`}function aw(r){let e=r.toString("utf8");if(e.length===0)return[];let t=e.split(QI);return t.at(-1)===""&&t.pop(),t}function kl(r){return r.includes(0)}ct();D();var Pl=class extends _t{async execute(){this.task.start(1,{message:u("workspace.sync.progress.history.running")});let e=await this.resolveRemotePath(this.options.path,"server-backed"),n=await(await this.getApiClient()).getFileHistory(e,{limit:this.options.limit});return this.task.step(1),{path:this.options.path,remotePath:e,histories:n}}};ct();var Rl=class extends _t{async execute(){return(await this.getApiClient()).getProjects()}};var Ze=(o=>(o.config="config",o.sync="sync",o.inodeCache="inode-cache",o.init="init",o))(Ze||{}),Fi=Object.values(Ze),ja=0;var El=["workspace-settings","workspace-gitignore","workspace-agent-files","typescript-support","json-schema-support","frontend-development-skill"],sw=["workspace-config",...El],cw=["workspace-config",...El,"sync-baseline"];function Om(r,e){return new Am(r,e)}var Dm=class{constructor(e,t){this.context=e;this.activeServerUrl=t}get root(){return this.context.root}get isConnected(){return this.context.isConnected}get eventBus(){return this.context.eventBus}get lockManager(){return this.context.lockManager}get lockWait(){return this.context.lockWait}get config(){return this.context.config}ensureConfigLoaded(){return this.context.ensureConfigLoaded()}async ensureActiveServerReady(){return this.activeServerUrl?this.activeServerUrl:this.context.ensureActiveServerReady()}startIdeRuntime(){return this.context.startIdeRuntime()}waitInitialized(){return this.context.waitInitialized()}addServer(e){return this.context.addServer(e)}verifyServerReachable(e){return this.context.verifyServerReachable(e)}removeServer(e){return this.context.removeServer(e)}changeServerUrl(e,t,n){return this.context.changeServerUrl(e,t,n)}switchActiveServer(e){return this.context.switchActiveServer(e)}listWorkspaceProjects(){return this.context.listWorkspaceProjects()}listBaselineProjects(e){return this.context.listBaselineProjects(e)}getMetaProjectLocalPath(e){return this.context.getMetaProjectLocalPath(e)}getMetaFileLocalPath(e){return this.context.getMetaFileLocalPath(e)}countWorkspaceFiles(e,t){return this.context.countWorkspaceFiles(e,t)}runMaintenance(e){return this.context.runMaintenance(e)}connect(e,t){return this.context.connect(e,t)}disconnect(){this.context.disconnect()}requireClient(){return this.context.requireServerClient()}requireServerClient(e){return this.context.requireServerClient(e)}resolveRemoteFilePath(e){return this.context.resolveRemoteFilePath(e)}getMirrorRoot(e=this.activeServerUrl){return this.context.getMirrorRoot(e)}createSyncService(){return Om(this)}getMetadataVersionCatalog(){return this.context.getMetadataVersionCatalog()}getSyncChanges(){return this.context.getSyncChanges()}getSyncSummary(){return this.context.getSyncSummary()}refreshSyncStatus(e){return this.context.refreshSyncStatus(e)}refreshSyncStatusState(e){return this.context.refreshSyncStatusState(e)}clearSyncStatusTargets(e){this.context.clearSyncStatusTargets(e)}notifyLocalProjectsChanged(){this.context.notifyLocalProjectsChanged?.()}applySyncOperationResult(e,t){this.context.applySyncOperationResult(e,t)}consumeFileChanges(e,t){return this.context.consumeFileChanges(e,t)}clearSyncStatus(){this.context.clearSyncStatus()}readTargetStatusSnapshot(e){return this.context.readTargetStatusSnapshot(e)}notifySyncStatusChanged(){this.context.notifySyncStatusChanged()}notifySyncStatusRefreshing(e,t){this.context.notifySyncStatusRefreshing(e,t)}isGitIgnored(e){return this.context.isGitIgnored(e)}dispose(){}};function St(r,e){return new Dm(r,e)}var Am=class{constructor(e,t){this.context=e;this.agentSource=t?.agentSource??Io().source}agentSource;get config(){return{root:this.context.root}}async status(e={}){let t=St(this.context,await this.context.ensureActiveServerReady());return new el(t,e).execute()}async clone(e={}){let t=St(this.context,await this.context.ensureActiveServerReady());return this.withWriteLock("clone",e.task,n=>new il(t,{...e,task:n}).execute())}async pull(e={}){let t=St(this.context,await this.context.ensureActiveServerReady());return this.withWriteLock("pull",e.task,n=>new ll(t,{...e,task:n}).execute())}async push(e={}){let t=St(this.context,await this.context.ensureActiveServerReady());return this.withWriteLock("push",e.task,n=>new dl(t,{...e,task:n}).execute())}async upgradeMetadata(e={}){let t=St(this.context,await this.context.ensureActiveServerReady());return this.withWriteLock("upgradeMetadata",e.task,n=>new Ia(t,{...e,task:n}).execute())}async reset(e={}){let t=St(this.context,await this.context.ensureActiveServerReady());return this.withWriteLock("reset",e.task,n=>new fl(t,{...e,task:n}).execute())}async restoreLocalChange(e){await this.context.ensureConfigLoaded();let t=St(this.context,this.context.activeServerUrl);return this.withWriteLock("restoreLocalChange",e.task,n=>new gl(t,{...e,task:n}).execute())}async listMergeBackups(e={}){await this.context.ensureConfigLoaded();let t=St(this.context,this.context.activeServerUrl);return new Ua(t,e).execute()}async clearMergeBackups(e={}){await this.context.ensureConfigLoaded();let t=St(this.context,this.context.activeServerUrl);return this.withWriteLock("merge-backup clear",e.task,n=>new yl(t,{...e,task:n}).execute())}async removeProject(e){let t=St(this.context,await this.context.ensureActiveServerReady());return this.withWriteLock("removeProject",e.task,n=>new Cl(t,{...e,task:n}).execute())}async repairWorkspace(e={}){return this.context.runMaintenance({taskIds:e.checks??cw,explicitTaskIds:e.checks,dryRun:e.dryRun===!0,task:e.task})}async listWorkspaceProjects(){return await this.context.ensureConfigLoaded(),St(this.context,this.context.activeServerUrl).listWorkspaceProjects()}async listBaselineProjects(){await this.context.ensureConfigLoaded();let e=St(this.context,this.context.activeServerUrl);return e.listBaselineProjects(e.activeServerUrl)}async lsRemote(){let e=St(this.context,await this.context.ensureActiveServerReady());return new Rl(e,{}).execute()}async show(e){let t=St(this.context,await this.context.ensureActiveServerReady());return new Sl(t,e).execute()}async history(e){let t=St(this.context,await this.context.ensureActiveServerReady());return new Pl(t,e).execute()}async diff(e){let t=St(this.context,await this.context.ensureActiveServerReady());return new wl(t,e).execute()}localToMetaPath(e){return Tr(this.context.root,e)}isTrackedFile(e){return this.localToMetaPath(e)!==void 0}async withWriteLock(e,t,n,o=["sync"]){let i=t&&t!==it.INSTANCE?t:new mn;return this.context.lockManager.withLock({scopes:o,command:e,source:this.agentSource,wait:this.context.lockWait},async a=>(i.setAbortSignal(Ps(i.getAbortSignal(),a)),n(i)))}};tm();var Lm=b(require("fs")),Eo=b(require("path"));K();var Bn=class{disposables=[];_disposed=!1;get disposed(){return this._disposed}add(e){return this.disposables.push(e),e}dispose(){if(!this._disposed){this._disposed=!0;for(let e of this.disposables.splice(0))e.dispose()}}};F();U();te();Fa();var _m=T("workspace.config"),oD=".succapp/config.json",lw="reloadConfigAfterFileChange";function Ba(){return{version:2,servers:[],activeServerUrl:""}}function iD(r,e,t){let n=ge(e),o=ge(t);if(o===n)throw new R("err.workspace.sameServerUrl",{server:o});let i=r.find(a=>!rt(a,n)&&rt(a,o));if(i)throw new R("err.workspace.serverAlreadyExists",{duplicatedServer:i,server:o});return o}var bl=class{constructor(e,t,n){this.workspaceRoot=e;this.eventBus=t;if(this.configPath=Eo.join(e,".succapp","config.json"),t&&n){let o=this.disposables.add(n.createFileWatcher(e,oD));this.disposables.add(o.onFileChanged(i=>{this.isConfigFilePath(i.filePath)&&jo(this,lw,50,async()=>{await this.reloadAfterFileChange().catch(a=>{_m.warn(`reload workspace config after file change failed: ${this.configPath}`,a)})})}))}}disposables=new Bn;data=null;loaded=!1;configPath;get path(){return this.configPath}get(){return this.data??void 0}async load(){return dr(this,"load",()=>this.doLoad())}async ensureLoaded(){this.loaded||await this.load()}async reloadIfChanged(){return await dr(this,"reload",()=>this.doReloadIfChanged())===!0}async doReloadIfChanged(e=!1){let t=this.data!==null,n=_o(this.get()),o=await this.readConfigData(!e,e);if(o===void 0&&e){this.loaded=!0;return}this.data=o,this.loaded=!0;let i=t!==(this.data!==null)||!Qt(n??null,this.get()??null);return i&&this.fireConfigChanged(),i}async doLoad(){this.data=await this.readConfigData(),this.loaded=!0}async readConfigData(e=!0,t=!1){try{let n=await Cy(this.configPath,{attempts:t?3:1,delayMs:50,ignoreParseError:e});return n?this.normalizeLoadedData(n):void 0}catch(n){if(x(n))return null;let o=n instanceof Error?n.message:String(n);e?_m.warn(".succapp/config.json is corrupted, ignoring",o):_m.debug(".succapp/config.json is not ready, will retry",o);return}}normalizeLoadedData(e){if(Array.isArray(e.servers)&&typeof e.activeServerUrl=="string"){let t=[];for(let s of e.servers){let c=ge(s);t.some(l=>rt(l,c))||t.push(c)}let n=e.activeServerUrl?ge(e.activeServerUrl):"",o=n?t.find(s=>rt(s,n)):void 0,i={version:e.version??2,servers:t,activeServerUrl:o??t[0]??""},a=xa(e.serverVersion);return a&&(i.serverVersion=a),i}return Ba()}async save(){if(!this.data)return;let e=Eo.dirname(this.configPath);await Lm.promises.mkdir(e,{recursive:!0}),await Lm.promises.writeFile(this.configPath,JSON.stringify(this.data,null,2),"utf-8"),this.loaded=!0}async mutateAndSave(e){let t=this.data!==null,n=_o(this.get()),o=this.data?_o(this.data):this.data;e();try{await this.save()}catch(i){throw this.data=o,i}(t!==(this.data!==null)||!Qt(n??null,this.get()??null))&&this.fireConfigChanged()}async initialize(e){let t=ge(e);await this.mutateAndSave(()=>{this.data={version:2,servers:[t],activeServerUrl:t}})}async ensureFile(){return await this.ensureLoaded(),this.data===null&&await this.mutateAndSave(()=>{this.data=Ba()}),this.configPath}getServers(){return this.data?.servers??[]}getActiveServerUrl(){return this.data?.activeServerUrl??""}getServerVersion(){return this.data?.serverVersion}async setServerVersion(e){await this.ensureLoaded();let t=xa(e);!t||this.data?.serverVersion===t||await this.mutateAndSave(()=>{let n=this.data??Ba();n.serverVersion=t,this.data=n})}hasServer(e){return!!this.resolveServerUrl(e)}resolveServerUrl(e){let t=ge(e);return this.getServers().find(n=>rt(n,t))}validateServerUrlChange(e,t){return iD(this.getServers(),e,t)}async addServer(e){await this.ensureLoaded();let t=ge(e);await this.mutateAndSave(()=>{let n=this.data??Ba();n.servers=n.servers??[];let o=n.servers.find(i=>rt(i,t));o||n.servers.push(t),n.activeServerUrl=o??t,this.data=n})}async removeServer(e){if(await this.ensureLoaded(),!this.data)return;let t=ge(e);await this.mutateAndSave(()=>{let n=this.data;n.servers=n.servers.filter(o=>!rt(o,t)),rt(n.activeServerUrl,t)&&(n.activeServerUrl=n.servers[0]??"")})}async changeServerUrl(e,t){await this.ensureLoaded();let n=this.data;if(!n)throw new Error(`server not configured: ${e}`);let o=this.resolveServerUrl(e);if(!o)throw new Error(`server not configured: ${e}`);let i=this.validateServerUrlChange(o,t);return await this.mutateAndSave(()=>{n.servers=n.servers.map(a=>rt(a,o)?i:a),rt(n.activeServerUrl,o)&&(n.activeServerUrl=i),this.data=n}),i}async setActiveServerUrl(e){await this.ensureLoaded();let t=ge(e);await this.mutateAndSave(()=>{let n=this.data??Ba();n.servers=n.servers??[];let o=n.servers.find(i=>rt(i,t));o||n.servers.push(t),n.activeServerUrl=o??t,this.data=n})}get root(){return this.workspaceRoot}dispose(){Bo(this,lw),this.disposables.dispose()}fireConfigChanged(){this.eventBus?.fire(new Ge("workspace.config.changed",{root:this.workspaceRoot},this))}async reloadAfterFileChange(){await dr(this,"reload",()=>this.doReloadIfChanged(!0))===void 0&&await this.reloadIfChanged()}isConfigFilePath(e){return Eo.resolve(e)===Eo.resolve(this.configPath)}};F();K();D();So();Ma();K();var pw=T("sync.auto"),uw="autoPush",Tl=class{constructor(e,t,n){this.workspaceRoot=e;this.callbacks=n;this.disposables.push(t.on("workspace.file.changed",o=>{o.payload.root===this.workspaceRoot&&Ct.autoPush&&this.scheduleAutoPush()}))}autoPullTimer;disposables=[];scheduleAutoPush(){Ct.autoPush&&jo(this,uw,Ct.autoPushDelay,async()=>{Ct.autoPush&&await this.callbacks.onAutoPush().catch(e=>pw.error("auto push failed",e))})}cancelPendingAutoPush(){Bo(this,uw)}refreshAutoSync(){Ct.autoPush||this.cancelPendingAutoPush(),this.startAutoPull()}startAutoPull(){this.stopAutoPull(),Ct.autoPull&&(this.autoPullTimer=setInterval(()=>{this.callbacks.onAutoPull().catch(e=>pw.error("auto pull failed",e))},Ct.autoPullInterval*1e3))}stopAutoPull(){this.autoPullTimer&&(clearInterval(this.autoPullTimer),this.autoPullTimer=void 0)}dispose(){this.stopAutoPull(),this.cancelPendingAutoPush(),this.disposables.forEach(e=>e.dispose())}};H();He();wr();K();var Ml=class{constructor(e,t,n=()=>{}){this.id=e;this.target=t;this.publishResult=n;this.scope=t.kind==="all"?"all":"targets"}kind="clear";source="clear";scope;toResult(){return{kind:"clear",target:this.target}}async run(){return this.toResult()}publish(e){return this.publishResult(e)}};var Va=b(require("path"));He();H();wr();var cr=class{constructor(e,t){this.id=e;this.fileChanges=[...t.fileChanges],this.workspace=t.workspace,this.bulk=!!t.bulk,this.getChanges=t.getChanges,this.publishResult=t.publish??(()=>{})}kind="fileWatch";source="fileWatch";scope="targets";cancelled=!1;fileChanges;workspace;bulk;getChanges;publishResult;abort(){this.cancelled=!0}isCancelled(){return this.cancelled}merge(e){this.cancelled||e.length===0||this.fileChanges.push(...e)}mergeTask(e){this.merge(e.fileChanges),this.bulk=this.bulk||e.bulk}async run(){let e=this.workspace;if(this.cancelled||!e||this.fileChanges.length===0)return{kind:"noop"};if(this.bulk)return this.requestBulkLocalRefresh();let t=this.createFileChangeStatusTargets(e);if(this.cancelled||t.length===0)return{kind:"noop"};if(t.some(i=>i.isDotMeta))return this.requestLocalRefresh(t);let n=await Promise.all(t.map(i=>e.readTargetStatusSnapshot(i)));if(this.cancelled)return{kind:"noop"};if(this.shouldRefreshAllForFolderRenameRelatedTargets(t,n))return this.requestLocalRefresh(t);let o=this.createFastFileWatchChanges(e,n);return!o||this.shouldRefreshAllForFolderSubtreeBoundary(o)?this.requestLocalRefresh(t):{kind:"replaceTargets",targetRemotePaths:[...new Set(t.map(i=>i.remotePath))],changes:o,mode:"fileWatch"}}publish(e){if(!this.cancelled)return this.publishResult(e)}createFileChangeStatusTargets(e){let t=new Map;for(let n of this.fileChanges){let o=this.resolveFileChangeStatusTarget(e,n);o&&t.set(`${o.type}\0${o.remotePath}`,o)}return[...t.values()]}requestLocalRefresh(e){return{kind:"requestRefresh",scope:"local",source:"manual",rootRemotePath:this.createRefreshRootRemotePath(e)}}requestBulkLocalRefresh(){return{kind:"requestRefresh",scope:"local",source:"manual",rootRemotePath:void 0}}createRefreshRootRemotePath(e){let t=[...e.map(o=>o.remotePath),...this.getChanges().filter(lt).flatMap(o=>[o.remotePath,o.oldRemotePath])].filter(o=>!!o),n=qy(t);return n==="/"?void 0:n}resolveFileChangeStatusTarget(e,t){let n=Tr(e.root,t.filePath);if(!n)return;let o=Va.posix.basename(n)===J,i=o?Va.posix.dirname(n):n;return{filePath:o?Va.dirname(t.filePath):t.filePath,remotePath:i,type:t.type,isDotMeta:o}}shouldRefreshAllForFolderRenameRelatedTargets(e,t){let n=this.getChanges().filter(i=>i.type==="renamed"&&!!i.isFolder&&!!i.oldRemotePath);if(n.length===0)return!1;let o=new Map(t.map(i=>[i.remotePath,i]));for(let i of e){let a=o.get(i.remotePath),s=a?.workspace.kind==="folder"||a?.mirror.kind==="folder";for(let c of n){let l=c.oldRemotePath;if(s&&(i.remotePath!==c.remotePath&&Q(c.remotePath,i.remotePath)||i.remotePath!==l&&Q(l,i.remotePath))||i.remotePath!==l&&Q(i.remotePath,l))return!0;if(!(i.remotePath===c.remotePath||!Q(i.remotePath,c.remotePath))&&(i.type==="deleted"||a?.workspace.fileId!==void 0||a?.mirror.fileId!==void 0))return!0}}return!1}createFastFileWatchChanges(e,t){if(t.some(s=>s.workspace.kind==="unknown"||s.mirror.kind==="unknown"))return;let n=this.createFastRenameChanges(t);if(!n)return;let o=new Set;for(let s of n)o.add(s.remotePath),s.oldRemotePath&&o.add(s.oldRemotePath);let i=[...n];for(let s of t){if(o.has(s.remotePath))continue;if(this.shouldRefreshForUnpairedIdentitySnapshot(s))return;let c=this.createFastChange(s);c&&i.push(c)}let a=new Map(t.map(s=>[s.remotePath,s]));return i.filter(s=>{if(s.type!=="added")return!0;let c=a.get(s.remotePath);return!c||c.workspace.fileId||c.mirror.fileId?!0:!e.isGitIgnored(s.remotePath)&&!ec(s.remotePath.replace(/^\//,""),Ct.syncIgnore)})}shouldRefreshForUnpairedIdentitySnapshot(e){return e.workspace.kind!=="missing"&&e.mirror.kind==="missing"&&!e.workspace.fileId&&!!e.workspace.identity||e.workspace.kind==="missing"&&e.mirror.kind!=="missing"&&!e.mirror.fileId&&!!e.mirror.identity}shouldRefreshAllForFolderSubtreeBoundary(e){return e.some(t=>t.isFolder&&(t.type==="added"||t.type==="deleted"))}createFastRenameChanges(e){let t=e.filter(a=>a.workspace.kind==="missing"&&a.mirror.kind!=="missing"),n=e.filter(a=>a.workspace.kind!=="missing"&&a.mirror.kind==="missing");if(t.length===0||n.length===0)return[];if(t.length!==n.length)return;let o=[],i=new Set;for(let a of t){let s=a.mirror.identity;if(!s)return;let c=n.filter(p=>!i.has(p)&&p.workspace.identity===s);if(c.length!==1||a.mirror.kind==="folder"||c[0].workspace.kind==="folder")return;let l=c[0];i.add(l),o.push({path:this.toRelativePath(l.remotePath),remotePath:l.remotePath,...this.getFileIdProperty(l.workspace.fileId??a.mirror.fileId),oldPath:this.toRelativePath(a.remotePath),oldRemotePath:a.remotePath,type:"renamed",isFolder:!1,contentChanged:l.contentChanged,metaChanged:l.metaChanged})}if(!(i.size!==n.length||o.length!==t.length))return o}createFastChange(e){let t=e.workspace.kind,n=e.mirror.kind;if(!(t==="missing"&&n==="missing")){if(t!=="missing"&&n==="missing")return{path:this.toRelativePath(e.remotePath),remotePath:e.remotePath,...this.getFileIdProperty(e.workspace.fileId),type:"added",isFolder:t==="folder"};if(t==="missing"&&n!=="missing")return{path:this.toRelativePath(e.remotePath),remotePath:e.remotePath,...this.getFileIdProperty(e.mirror.fileId),type:"deleted",isFolder:n==="folder"};if(!(!e.contentChanged&&!e.metaChanged))return{path:this.toRelativePath(e.remotePath),remotePath:e.remotePath,...this.getFileIdProperty(e.workspace.fileId??e.mirror.fileId),type:"modified",isFolder:t==="folder",contentChanged:e.contentChanged,metaChanged:e.metaChanged}}}getFileIdProperty(e){return e===void 0?{}:{fileId:e}}toRelativePath(e){return e.replace(/^\//,"")}};wr();var xl=class{constructor(e,t,n=[],o=()=>{}){this.id=e;this.handledChange=t;this.remainingChanges=n;this.publishResult=o}kind="operationResult";source="operation";scope="targets";toResult(){return{kind:"replaceTargets",targetRemotePaths:Da(this.handledChange),changes:this.remainingChanges}}async run(){return this.toResult()}publish(e){return this.publishResult(e)}};var Fl=class{constructor(e,t){this.id=e;this.source=t.source,this.targetRemotePaths=[...t.targetRemotePaths],this.changes=[...t.changes],this.mode=t.mode,this.publishResult=t.publish??(()=>{})}kind="replaceTargets";source;scope="targets";targetRemotePaths;changes;mode;publishResult;toResult(){return{kind:"replaceTargets",targetRemotePaths:this.targetRemotePaths,changes:this.changes,mode:this.mode}}async run(){return this.toResult()}publish(e){return this.publishResult(e)}};jr();K();D();F();U();var Ha=b(require("fs")),Ol=b(require("path"));He();H();F();K();Sn();jr();So();Ma();Yt();var qa=b(require("fs")),$a=b(require("path")),Kw=require("crypto"),Jw=b(Vw()),Yw=b($w());He();Pt();H();F();Sn();K();function Dl(r){return{dev:r.dev,ino:r.ino,size:r.size,mtimeMs:r.mtimeMs,ctimeMs:r.ctimeMs}}var zm="sha256",Hw=".succapp/cache/inode-index.json",BD=.6,zw=2,VD=1e4,qD=20,Gw=5*1024*1024,$D=80,HD=200,zD=8,GD=4,KD=64,JD=2,YD=500,XD=1e4,Ue=T("sync.detector.workspace"),Al=class{constructor(e){this.options=e;this.workspaceCachePath=$a.join(e.workspaceRoot,Hw),this.mirrorCachePath=$a.join(e.remoteMirrorRoot,Hw)}workspaceInodeCache=new Map;mirrorInodeCache=new Map;workspacePathToInode=new Map;mirrorPathToInode=new Map;workspaceCachePath;mirrorCachePath;workspaceInodeCacheDirty=!1;mirrorInodeCacheDirty=!1;workspaceFullScanInodeKeys=new Set;mirrorFullScanInodeKeys=new Set;workspaceFullScanRecorded=!1;mirrorFullScanRecorded=!1;projectCaches=new Map;pendingDigests=new Map;pendingSimilarity=new Map;async findInodeFileCandidates(e,t){let n=this.createOperationCache();await this.prefetchStats([...e,...t],n);let o=await this.groupFilesByInode(t,n),i=[];for(let a of e){let s=await this.getStatCached(a,n),c=s?this.getInodeKey(s):void 0;if(c)for(let l of o.get(c)??[])a.metaPath!==l.metaPath&&i.push({localEntry:a,remoteEntry:l,score:1,reason:"sameInode"})}return i}async findEqualFileCandidates(e,t){let n=this.createOperationCache();await this.prefetchStats([...e,...t],n);let o=await this.groupFilesBySize(t,n),i=[];for(let a of e){let s=await this.getStatCached(a,n);if(!s)continue;let c=o.get(s.size);if(!c)continue;let l;for(let p of c){let d=await this.compareByStat(a,p,n);if(d==="different")continue;if(d==="same"){i.push({localEntry:a,remoteEntry:p,score:1,reason:"sameContentHash"});continue}if(l??=await this.getContentDigest(a,n),!l)continue;(await this.getContentDigest(p,n))?.value===l.value&&i.push({localEntry:a,remoteEntry:p,score:1,reason:"sameContentHash"})}}return i}async findSimilarFileCandidates(e,t){let n={fileCandidateBuckets:0,fileComparableRefs:0,fileEstimatedPairs:0,fileComparedPairs:0,fileTopByLeft:0,fileTopByRight:0};if(e.length===0||t.length===0)return{candidates:[],stats:n};let o=this.createOperationCache(!0),i=this.groupSimilarityRightFiles(t),a=this.collectComparableEntries(e,i),s=this.estimateSimilarityPairs(e,i);n.fileCandidateBuckets=i.size,n.fileComparableRefs=a.size,n.fileEstimatedPairs=s;let c=Date.now();Ue.debug("collect file similarity start localCandidates=%d remoteCandidates=%d buckets=%d comparableRefs=%d estimatedPairs=%d",e.length,t.length,i.size,a.size,s),await this.prefetchStats([...a.values()],o);let l=new Map,p=new Map,d=this.createSimilarityPairCursor(e,i),g=0,m=Array.from({length:Math.min(GD,Math.max(1,a.size))},async()=>{for(;;){let y=d();if(!y)return;let[C,v]=y;g++,n.fileComparedPairs++;let P=await this.compareSimilarityPair(C,v,o);P.score>=BD&&(this.addTopSimilarityCandidate(l,this.getEntryKey(P.left),P,zw),this.addTopSimilarityCandidate(p,this.getEntryKey(P.right),P,zw))}});await Promise.all(m),n.fileTopByLeft=l.size,n.fileTopByRight=p.size,Ue.debug("collect file similarity compared elapsed=%dms comparedPairs=%d topByLeft=%d topByRight=%d",Date.now()-c,g,l.size,p.size);let f=new Set;for(let y of[l,p])for(let C of y.values())for(let v of C)f.add(v);return{candidates:[...f].sort((y,C)=>C.score-y.score).map(y=>({localEntry:y.left,remoteEntry:y.right,score:y.score,reason:y.score===1?"sameContentHash":"contentSimilarity"})),stats:n}}getEntryLocalPath(e){return re(e.side==="workspace"?this.options.workspaceRoot:this.options.remoteMirrorRoot,e.metaPath)}getEntryKey(e){return e.side+"\0"+e.metaPath}async areEntriesEqual(e,t){let n=this.createOperationCache(),o=await this.compareByStat(e,t,n);if(o!=="unknown")return o;let[i,a]=await Promise.all([this.getContentDigest(e,n),this.getContentDigest(t,n)]);return!i||!a?"unknown":i.value===a.value?"same":"different"}async compareByStat(e,t,n){let[o,i]=await Promise.all([this.getStatCached(e,n),this.getStatCached(t,n)]);return!o||!i?"unknown":o.size!==i.size?"different":this.isSameInode(o,i)?"same":"unknown"}isSameInode(e,t){return!!e.dev&&!!t.dev&&!!e.ino&&!!t.ino&&e.dev===t.dev&&e.ino===t.ino}async getStatCached(e,t){if(e.stat)return e.stat;let n=this.getEntryKey(e),o=t.stats.get(n);if(o)return o;let i=this.readStat(e);return t.stats.set(n,i),i}async readStat(e){try{let t=await qa.promises.stat(this.getEntryLocalPath(e));return t.isFile()?Dl(t):void 0}catch(t){if(!Xi(t))throw t;Ue.debug("skip unreadable file stat: %s",this.getEntryLocalPath(e),t);return}}getContentDigest(e,t){let n=this.getEntryKey(e),o=t.digests.get(n);if(o)return o;let i=this.getContentDigestWithContext(e,t);return t.digests.set(n,i),i}async getContentDigestWithContext(e,t){let n=await this.getStatCached(e,t);if(!n)return;let o=this.getEntryKey(e),i=this.pendingDigests.get(o);if(i)return i;let a=this.getContentDigestNow(e,n,t).finally(()=>this.pendingDigests.delete(o));return this.pendingDigests.set(o,a),a}async getContentDigestNow(e,t,n){let o=this.getInodeKey(t);if(o){let a=this.getInodeCache(e.side).get(o);if(this.isMatchingInodeCacheEntry(a,t))return{algorithm:zm,value:a.sha256,size:t.size,mtimeMs:t.mtimeMs,ctimeMs:t.ctimeMs,updatedAt:Date.now()}}try{let i={algorithm:zm,value:await this.computeContentHash(e,t,n),size:t.size,mtimeMs:t.mtimeMs,ctimeMs:t.ctimeMs,updatedAt:Date.now()};if(o){let a=this.getInodeCache(e.side).get(o);this.rememberInodeCacheEntry(e,o,{sha256:i.value,tlsh:this.getReusableCachedTlsh(a,i.value),size:t.size,mtimeMs:t.mtimeMs,ctimeMs:t.ctimeMs})}return i}catch(i){if(!Xi(i))throw i;Ue.debug("skip unreadable file digest: %s",this.getEntryLocalPath(e),i);return}}isMatchingInodeCacheEntry(e,t){return this.isCompleteInodeCacheEntry(e)&&this.isMatchingInodeCacheStat(e,t)}isMatchingInodeCacheStat(e,t){return e.size===t.size&&e.mtimeMs===t.mtimeMs&&e.ctimeMs===t.ctimeMs}isCompleteInodeCacheEntry(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.sha256=="string"&&t.sha256.length>0&&Number.isFinite(t.size)&&Number.isFinite(t.mtimeMs)&&Number.isFinite(t.ctimeMs)}getCachedTlsh(e){return typeof e.tlsh=="string"&&e.tlsh.length>0?e.tlsh:void 0}getReusableCachedTlsh(e,t){return e?.sha256===t?this.getCachedTlsh(e):void 0}async computeContentHash(e,t,n){let o=await this.getSmallFileContent(e,t,n);return o?o.contentHash:jc(this.getEntryLocalPath(e))}async compareSimilarityPair(e,t,n){if(await this.compareByStat(e,t,n)==="same")return{left:e,right:t,score:1};let[i,a]=await Promise.all([this.getContentDigest(e,n),this.getContentDigest(t,n)]);if(i&&a&&i.value===a.value)return{left:e,right:t,score:1};let[s,c]=await Promise.all([this.getTlshProfile(e,n),this.getTlshProfile(t,n)]);if(!s||!c)return{left:e,right:t,score:0};let l=s.digest.calculateDifference(c.digest,!0);return l>$D?{left:e,right:t,score:0}:{left:e,right:t,score:Math.max(0,1-l/HD)}}getTlshProfile(e,t){let n=this.getEntryKey(e),o=t.profiles.get(n);if(o)return o;let i=this.getTlshProfileWithContext(e,t);return t.profiles.set(n,i),i}async getTlshProfileWithContext(e,t){let n=await this.getSimilarityDigest(e,t);if(!n)return;let o=this.buildTlshProfile(n);if(o)return o;Ue.debug("repair invalid TLSH profile side=%s path=%s",e.side,e.metaPath);let i=await this.getStatCached(e,t);i&&await this.invalidateStat(e,i),await this.invalidateSimilarityDigest(e,t);let a=await this.getSimilarityDigest(e,t);if(a)return this.buildTlshProfile(a)}buildTlshProfile(e){try{let t=new Yw.default().withHash(e).build();return t.calculateDifference(t,!0),{digest:t}}catch(t){Ue.debug("skip invalid TLSH digest: %s",e,t);return}}async getSimilarityDigest(e,t){let n=await this.getStatCached(e,t);if(!n)return;let o=await this.getContentDigest(e,t);if(!o||o.size>Gw)return;let i=je(e.metaPath)??"/",a=i+"\0"+o.value,s=this.pendingSimilarity.get(a);if(s)return s;let c=this.getSimilarityDigestNow(i,e,o,n,t).finally(()=>this.pendingSimilarity.delete(a));return this.pendingSimilarity.set(a,c),c}async getSimilarityDigestNow(e,t,n,o,i){let a=await this.withProjectCache(e,async l=>l.similarity.get(n.value));if(a)return a.updatedAt=Date.now(),a.unsupported?void 0:a.tlsh;let s=this.getInodeKey(o);if(s){let p=this.getInodeCache(t.side).get(s);if(this.isMatchingInodeCacheEntry(p,o)){let d=this.getCachedTlsh(p);if(d){if(this.buildTlshProfile(d))return await this.withProjectCache(e,async g=>{g.similarity.set(n.value,{tlsh:d,size:n.size,updatedAt:Date.now()}),this.pruneState(g)}),d;Ue.debug("drop invalid inode cached TLSH side=%s path=%s inode=%s",t.side,t.metaPath,s),this.invalidateStat(t,o)}}}let c=await this.computeTlshHash(t,o,i);if(await this.withProjectCache(e,async l=>{l.similarity.set(n.value,{tlsh:c.hash,unsupported:!c.hash,size:n.size,updatedAt:Date.now()}),this.pruneState(l)}),s){let l=this.getInodeCache(t.side).get(s);this.rememberInodeCacheEntry(t,s,{sha256:n.value,tlsh:c.hash,size:o.size,mtimeMs:o.mtimeMs,ctimeMs:o.ctimeMs})}return c.hash}async computeTlshHash(e,t,n){let o=await this.getSmallFileContent(e,t,n);if(o)return o.similarity;let i=await this.readTlshBuffer(e);return i?this.computeTlshHashFromBuffer(i):{cacheUnsupported:!1}}computeTlshHashFromBuffer(e){try{return{hash:(0,Jw.default)(e.toString("latin1")),cacheUnsupported:!1}}catch(t){let n=t instanceof Error?t.message:String(t);return Ue.debug("skip TLSH digest because hash library rejected buffer: %s",n),{cacheUnsupported:!1}}}async readTlshBuffer(e){try{return await qa.promises.readFile(this.getEntryLocalPath(e))}catch(t){if(!Xi(t))throw t;Ue.debug("skip tlsh file read: %s",e.metaPath,t);return}}getSmallFileContent(e,t,n){if(!n.preferSmallFileBuffer||t.size>Gw)return Promise.resolve(void 0);let o=this.getEntryKey(e),i=n.smallFiles.get(o);if(i)return i;let a=this.readSmallFileContent(e);return n.smallFiles.set(o,a),this.pruneOperationSmallFiles(n),a}pruneOperationSmallFiles(e){for(;e.smallFiles.size>KD;){let t=e.smallFiles.keys().next().value;if(t===void 0)return;e.smallFiles.delete(t)}}async readSmallFileContent(e){try{let t=await qa.promises.readFile(this.getEntryLocalPath(e));return{contentHash:(0,Kw.createHash)(zm).update(t).digest("hex"),similarity:this.computeTlshHashFromBuffer(t)}}catch(t){if(!Xi(t))throw t;Ue.debug("skip unreadable small file: %s",this.getEntryLocalPath(e),t);return}}createOperationCache(e=!1){return{preferSmallFileBuffer:e,stats:new Map,digests:new Map,profiles:new Map,smallFiles:new Map}}async prefetchStats(e,t){let n=new Je(zD);await Promise.all(e.map(o=>n.addTask(async()=>{await this.getStatCached(o,t)})))}async groupFilesBySize(e,t){let n=new Map;for(let o of e){let i=await this.getStatCached(o,t);if(!i)continue;let a=n.get(i.size);a||(a=[],n.set(i.size,a)),a.push(o)}return n}async groupFilesByInode(e,t){let n=new Map;for(let o of e){let i=await this.getStatCached(o,t),a=i?this.getInodeKey(i):void 0;if(!a)continue;let s=n.get(a);s||(s=[],n.set(a,s)),s.push(o)}return n}getInodeKey(e){return this.getInodeKeyString(e.dev,e.ino)}groupSimilarityRightFiles(e){let t=new Map;for(let n of e){let o=this.getSimilarityBucketKey(n),i=t.get(o);i?i.push(n):t.set(o,[n])}return t}getSimilarityBucketKey(e){return $a.posix.extname(e.metaPath).toLowerCase()}collectComparableEntries(e,t){let n=new Map,o=new Set;for(let i of e){let a=this.getSimilarityBucketKey(i),s=t.get(a);if(s?.length&&(n.set(this.getEntryKey(i),i),!o.has(a))){o.add(a);for(let c of s)n.set(this.getEntryKey(c),c)}}return n}createSimilarityPairCursor(e,t){let n=0,o=0,i,a=[];return()=>{for(;;){if(i&&o<a.length){let s=a[o++];if(i.metaPath!==s.metaPath)return[i,s];continue}if(n>=e.length)return;i=e[n++],o=0,a=t.get(this.getSimilarityBucketKey(i))??[]}}}addTopSimilarityCandidate(e,t,n,o){let i=e.get(t)??[];i.push(n),e.set(t,this.sortSimilarityCandidates(i).slice(0,o))}sortSimilarityCandidates(e){return[...e].sort((t,n)=>{let o=n.score-t.score;return o!==0?o:this.getEntryKey(t.left).localeCompare(this.getEntryKey(n.left))})}async withProjectCache(e,t){let n=this.pinProjectCache(e);try{return await t(n)}finally{n.activeCount--,this.enforceProjectCacheLimit()}}pinProjectCache(e){let t=this.projectCaches.get(e);return t||(t={lastAccessAt:Date.now(),activeCount:0,similarity:new Map},this.projectCaches.set(e,t)),t.lastAccessAt=Date.now(),t.activeCount++,this.enforceProjectCacheLimit(),t}enforceProjectCacheLimit(){for(;this.projectCaches.size>qD;)if(!this.evictOldestProjectCache())return}evictOldestProjectCache(){let e=[...this.projectCaches.entries()].filter(([,o])=>o.activeCount===0).sort((o,i)=>o[1].lastAccessAt-i[1].lastAccessAt)[0];if(!e)return!1;let[t,n]=e;return n.activeCount>0?!1:(this.projectCaches.delete(t),!0)}pruneState(e){return this.pruneMap(e.similarity,VD)}pruneMap(e,t){if(e.size<=t)return!1;let n=[...e.entries()].sort((o,i)=>i[1].updatedAt-o[1].updatedAt).slice(0,t);e.clear();for(let[o,i]of n)e.set(o,i);return!0}getInodeCache(e){return e==="workspace"?this.workspaceInodeCache:this.mirrorInodeCache}getPathToInode(e){return e==="workspace"?this.workspacePathToInode:this.mirrorPathToInode}markInodeCacheDirty(e){e==="workspace"?this.workspaceInodeCacheDirty=!0:this.mirrorInodeCacheDirty=!0}clearInodeCacheDirty(){this.workspaceInodeCacheDirty=!1,this.mirrorInodeCacheDirty=!1}rememberInodeCacheEntry(e,t,n){this.getInodeCache(e.side).set(t,n),this.getPathToInode(e.side).set(this.getEntryKey(e),t),this.markInodeCacheDirty(e.side)}async load(){await Promise.all([this.loadInodeCacheSide(this.workspaceCachePath,this.workspaceInodeCache,"workspace"),this.loadInodeCacheSide(this.mirrorCachePath,this.mirrorInodeCache,"mirror")])}recordFullScanEntries(e,t){this.workspaceFullScanInodeKeys.clear(),this.mirrorFullScanInodeKeys.clear(),this.collectFullScanInodeKeys(e,this.workspaceFullScanInodeKeys),this.collectFullScanInodeKeys(t,this.mirrorFullScanInodeKeys),this.workspaceFullScanRecorded=!0,this.mirrorFullScanRecorded=!0}collectFullScanInodeKeys(e,t){for(let n of e){if(n.isFolder||!n.stat)continue;let o=this.getInodeKey(n.stat);o&&t.add(o)}}async loadInodeCacheSide(e,t,n){try{let o=await this.readInodeCacheFile(e);if(!o)return;for(let[i,a]of Object.entries(o.files))t.set(i,a)}catch(o){Ue.debug("skip %s inode cache: %s",n,e,o)}}async readInodeCacheFile(e){let t=await co(e);if(!(!t||t.version!==1))return t}async flush(){if(Ue.debug("workspace change detector flush inode caches called"),await Promise.all([this.pruneStaleEntries("workspace",this.workspacePathToInode,this.workspaceInodeCache,this.options.workspaceRoot),this.pruneStaleEntries("mirror",this.mirrorPathToInode,this.mirrorInodeCache,this.options.remoteMirrorRoot)]),this.pruneFullScanEntries("workspace",this.workspaceInodeCache,this.workspaceFullScanInodeKeys,this.workspaceFullScanRecorded),this.pruneFullScanEntries("mirror",this.mirrorInodeCache,this.mirrorFullScanInodeKeys,this.mirrorFullScanRecorded),!this.workspaceInodeCacheDirty&&!this.mirrorInodeCacheDirty)return;Ue.debug("flush inode caches workspaceDirty=%s workspaceEntries=%d mirrorDirty=%s mirrorEntries=%d",this.workspaceInodeCacheDirty,this.workspaceInodeCache.size,this.mirrorInodeCacheDirty,this.mirrorInodeCache.size),await this.withInodeCacheWriteLock(async()=>{let t=[];this.workspaceInodeCacheDirty&&t.push(this.writeInodeCache(this.workspaceCachePath,this.workspaceInodeCache)),this.mirrorInodeCacheDirty&&t.push(this.writeInodeCache(this.mirrorCachePath,this.mirrorInodeCache)),await Promise.all(t)})?(this.clearInodeCacheDirty(),Ue.debug("flushed inode caches workspaceEntries=%d mirrorEntries=%d",this.workspaceInodeCache.size,this.mirrorInodeCache.size)):Ue.debug("skipped inode cache flush workspaceDirty=%s workspaceEntries=%d mirrorDirty=%s mirrorEntries=%d",this.workspaceInodeCacheDirty,this.workspaceInodeCache.size,this.mirrorInodeCacheDirty,this.mirrorInodeCache.size)}async withInodeCacheWriteLock(e){let t=this.options.lockManager;if(!t||t.isHeldLocally("inode-cache"))return await e(),!0;try{return await t.withLock({scopes:["inode-cache"],command:"flush-inode-cache",wait:1},async()=>e()),!0}catch(n){return n instanceof Yn||n instanceof Ur?(Ue.debug("skip inode cache flush because cache lock is unavailable",n),!1):(Ue.warn("skip inode cache flush because cache lock failed unexpectedly",n),!1)}}async pruneStaleEntries(e,t,n,o){if(t.size===0)return;let i=[];for(let[a,s]of t){let c=a.indexOf("\0"),l=a.slice(c+1),p=re(o,l);try{let d=await qa.promises.stat(p);if(!d.isFile()){i.push(a);continue}let g=this.getInodeKeyString(d.dev,d.ino);(!g||g!==s)&&i.push(a)}catch(d){if(x(d)){Ue.debug("mark stale inode cache entry: %s",a),i.push(a);continue}throw d}}if(i.length!==0){for(let a of i){let s=t.get(a);s&&n.delete(s),t.delete(a)}i.length>0&&this.markInodeCacheDirty(e)}}pruneFullScanEntries(e,t,n,o){if(!o)return;let i=0;for(let[s,c]of t)this.isCompleteInodeCacheEntry(c)||(t.delete(s),i++);if(i>0&&(this.markInodeCacheDirty(e),Ue.debug("inode cache invalid cleanup side=%s removed=%d after=%d",e,i,t.size)),!this.shouldCleanupFullScanEntries(t,n))return;let a=0;for(let s of t.keys())n.has(s)||(t.delete(s),a++);a>0&&(this.markInodeCacheDirty(e),Ue.debug("inode cache cleanup side=%s actual=%d removed=%d after=%d",e,n.size,a,t.size))}shouldCleanupFullScanEntries(e,t){let n=Math.max(t.size*JD,t.size+YD,XD);return e.size>n}getInodeKeyString(e,t){if(!(!e||!t))return`${e}:${t}`}invalidateStat(e,t){let n=this.getInodeKey(t);if(!n)return;let o=this.getInodeCache(e.side),i=this.getPathToInode(e.side);o.delete(n)&&this.markInodeCacheDirty(e.side),i.delete(this.getEntryKey(e))}async invalidateSimilarityDigest(e,t){let n=await this.getContentDigest(e,t);if(!n)return;let o=je(e.metaPath)??"/";await this.withProjectCache(o,async i=>{i.similarity.delete(n.value)&&Ue.debug("drop project similarity cache project=%s path=%s sha256=%s",o,e.metaPath,n.value.slice(0,12))})}async writeInodeCache(e,t){let n={version:1,files:Object.fromEntries(t)};try{await Cn(e,JSON.stringify(n))}catch(o){Ue.debug("failed to write inode cache: %s",e,o)}}estimateSimilarityPairs(e,t){let n=0;for(let o of e)for(let i of t.get(this.getSimilarityBucketKey(o))??[])o.metaPath!==i.metaPath&&n++;return n}};var QD=.6,ZD=.15,eA=8,tA=8,rA=8,Xw=4096,nA=8,oA=64,iA=20,Se=T("sync.detector.workspace"),_l=class{detectRuns=0;durationMs=0;records=0;filteredRecords=0;resultChanges=0;suspectMetaPaths=0;changes=0;matchedLocal=0;matchedRemote=0;matchedLocalFiles=0;matchedRemoteFiles=0;availableLocalFiles=0;availableRemoteFiles=0;pendingSamePath=0;local={entries:0,files:0,folders:0,trackedFiles:0,trackedFolders:0};remote={entries:0,files:0,folders:0,trackedFiles:0,trackedFolders:0};stages={};similarity={fileLocalCandidates:0,fileRemoteCandidates:0,fileCandidateBuckets:0,fileComparableRefs:0,fileEstimatedPairs:0,fileComparedPairs:0,pendingSamePathPairs:0,skippedPendingSamePathLocalCandidates:0,skippedPendingSamePathRemoteCandidates:0,fileTopByLeft:0,fileTopByRight:0,stableFileCandidates:0,acceptedFileCandidates:0};startRun(){return this.detectRuns++,Date.now()}finishRun(e){this.durationMs+=Date.now()-e}createSnapshot(){return{detectRuns:this.detectRuns,durationMs:this.durationMs,records:this.records,filteredRecords:this.filteredRecords,resultChanges:this.resultChanges,suspectMetaPaths:this.suspectMetaPaths,changes:this.changes,matchedLocal:this.matchedLocal,matchedRemote:this.matchedRemote,matchedLocalFiles:this.matchedLocalFiles,matchedRemoteFiles:this.matchedRemoteFiles,availableLocalFiles:this.availableLocalFiles,availableRemoteFiles:this.availableRemoteFiles,pendingSamePath:this.pendingSamePath,local:{...this.local},remote:{...this.remote},stages:Object.fromEntries(Object.entries(this.stages).map(([e,t])=>[e,{...t}])),similarity:{...this.similarity}}}describeForLog(){return`
74
+ `+JSON.stringify(this.createSnapshot(),null,2).replace(/^\{\n/,"").replace(/\n\}$/,"")}},Ll=class{constructor(e){this.options=e;let t=e.workspace;this.workspaceRoot=t.root,this.remoteMirrorRoot=t.getMirrorRoot(),this.task=e.task??it.INSTANCE,this.mirror=new yt(this.remoteMirrorRoot),this.workspaceStore=new sr(this.workspaceRoot,this.mirror),this.fingerprint=new Al({workspaceRoot:this.workspaceRoot,remoteMirrorRoot:this.remoteMirrorRoot,lockManager:t.lockManager}),this.rootRemotePath=this.normalizeRootRemotePath(e.rootRemotePath)}task;fingerprint;rootRemotePath;mirror;workspaceStore;workspaceRoot;remoteMirrorRoot;diagnostics=new _l;currentMatchPhase="idle";mirrorProjectPresence=new Map;reportedProblemKeys=new Set;reportedProblemEventCount=0;baselineProblems=[];throwIfAborted(){this.options.signal?.throwIfAborted(),this.task.throwIfAborted()}normalizeRootRemotePath(e){if(!e)return"";let t=ae(e);return t==="/"?"":t}async detect(){let e=Date.now();this.resetProblemReports();let t=this.diagnostics.startRun();Se.debug(`detect start workspace=${this.workspaceRoot} mirror=${this.remoteMirrorRoot}`),this.throwIfAborted();let n=Date.now();await this.fingerprint.load(),Se.debug(`load inode cache done elapsed=${Date.now()-n}ms`);let o=new Set;n=Date.now();let i=await this.detectRecords(o);this.diagnostics.records=i.length,this.diagnostics.suspectMetaPaths=o.size,Se.debug(`detect records done elapsed=${Date.now()-n}ms records=${i.length} suspectMeta=${o.size}`),this.throwIfAborted(),n=Date.now(),await this.fingerprint.flush(),Se.debug(`flush inode cache done elapsed=${Date.now()-n}ms`);let a=i.filter(c=>c.kind!=="localOnly"||!this.isIgnoredUntrackedLocal(c));this.diagnostics.filteredRecords=a.length;let s=new Array(a.length);return n=Date.now(),await Ny(a.map((c,l)=>({change:c,index:l})),rA,async c=>{s[c.index]=await this.toSyncFileChange(c.change)}),this.diagnostics.resultChanges=s.length,Se.debug(`create sync changes done elapsed=${Date.now()-n}ms filteredRecords=${a.length} changes=${s.length}`),this.finishRunDiagnostics(t),Se.debug(`detect diagnostics ${this.diagnostics.describeForLog()}`),Se.debug(`detect done elapsed=${Date.now()-e}ms changes=${s.length} suspectMeta=${o.size}`),{changes:s,suspectMetaPaths:[...o].sort(),baselineProblems:[...this.baselineProblems]}}resetProblemReports(){this.reportedProblemKeys.clear(),this.reportedProblemEventCount=0,this.baselineProblems.length=0}getDiagnostics(e={}){let t=this.diagnostics.createSnapshot();return e.reset&&this.resetDiagnostics(),t}finishRunDiagnostics(e){this.diagnostics.finishRun(e)}resetDiagnostics(){this.diagnostics=new _l}async withMatchPhase(e,t){let n=this.currentMatchPhase;this.currentMatchPhase=e;try{return await t()}finally{this.currentMatchPhase=n}}withMatchPhaseSync(e,t){let n=this.currentMatchPhase;this.currentMatchPhase=e;try{return t()}finally{this.currentMatchPhase=n}}async flush(){await this.fingerprint.flush()}async detectRecords(e){let t=Date.now(),[n,o]=await Promise.all([this.scan(this.workspaceRoot,"workspace",e),this.scan(this.remoteMirrorRoot,"mirror",new Set)]);this.rootRemotePath===""&&this.fingerprint.recordFullScanEntries(n.values(),o.values()),Se.debug(`scan both sides done elapsed=${Date.now()-t}ms localEntries=${this.diagnostics.local.entries} localFiles=${this.diagnostics.local.files} localFolders=${this.diagnostics.local.folders} localTrackedFiles=${this.diagnostics.local.trackedFiles} localTrackedFolders=${this.diagnostics.local.trackedFolders} remoteEntries=${this.diagnostics.remote.entries} remoteFiles=${this.diagnostics.remote.files} remoteFolders=${this.diagnostics.remote.folders} remoteTrackedFiles=${this.diagnostics.remote.trackedFiles} remoteTrackedFolders=${this.diagnostics.remote.trackedFolders} suspectMeta=${e.size}`),this.throwIfAborted();let i=new Map,a=this.filterOutIgnoredMirrorResidues(o,this.indexIgnoredMirrorResidues(n,o)),s=this.rootRemotePath===""?this.collectBaselineMissingLocalEntries(n,a):[],l={local:this.filterOutBaselineMissingLocalEntries(n,s),remote:a,matchedLocal:new Set,matchedRemote:new Set,changes:[]},p=Date.now(),d=this.getPipelineStats();await this.withMatchPhase("matchById",()=>this.matchById(l,i)),this.logDetectPhase("matchById",p,d),this.throwIfAborted(),p=Date.now(),d=this.getPipelineStats(),await this.withMatchPhase("matchByPath",()=>this.matchByPath(l,i)),this.logDetectPhase("matchByPath",p,d),this.throwIfAborted(),p=Date.now(),d=this.getPipelineStats(),await this.withMatchPhase("matchRenamesByInode",()=>this.matchRenamesByInode(l,i)),this.logDetectPhase("matchRenamesByInode",p,d),this.throwIfAborted(),p=Date.now(),d=this.getPipelineStats(),await this.withMatchPhase("matchRenamesByHash",()=>this.matchRenamesByHash(l,i)),this.logDetectPhase("matchRenamesByHash",p,d),this.throwIfAborted(),p=Date.now(),d=this.getPipelineStats(),await this.withMatchPhase("matchRenamesBySimilarity",()=>this.matchRenamesBySimilarity(l,i)),this.logDetectPhase("matchRenamesBySimilarity",p,d),this.throwIfAborted(),p=Date.now(),d=this.getPipelineStats(),this.withMatchPhaseSync("flushPendingSamePathChanges",()=>this.flushPendingSamePathChanges(l,i)),this.logDetectPhase("flushPendingSamePathChanges",p,d),p=Date.now(),await this.addBaselineMissingLocalChanges(l,s);for(let g of l.local.values())if(!l.matchedLocal.has(g.metaPath)){if(g.isFolder&&!g.hasMeta||!await this.isScannedEntryStillPresent(this.workspaceRoot,g))continue;this.addChange(l,{kind:"localOnly",metaPath:g.metaPath,localPath:g.metaPath,fileId:g.meta?.id,isFolder:g.isFolder,hasMeta:g.hasMeta})}for(let g of l.remote.values())if(!l.matchedRemote.has(g.metaPath)){if(!g.hasMeta)continue;this.addChange(l,{kind:"remoteOnly",metaPath:g.metaPath,remotePath:g.metaPath,fileId:g.meta?.id,isFolder:g.isFolder,hasMeta:g.hasMeta})}return Se.debug(`collect unmatched entries done elapsed=${Date.now()-p}ms changes=${this.diagnostics.changes} matchedLocal=${this.diagnostics.matchedLocal} matchedRemote=${this.diagnostics.matchedRemote} availableLocalFiles=${this.diagnostics.availableLocalFiles} availableRemoteFiles=${this.diagnostics.availableRemoteFiles} totalLocalFiles=${this.diagnostics.local.files} totalRemoteFiles=${this.diagnostics.remote.files}`),l.changes}logDetectPhase(e,t,n){let o=this.getPipelineStats(),i={...o,elapsedMs:Date.now()-t,changeDelta:o.changes-n.changes,matchedLocalDelta:o.matchedLocal-n.matchedLocal,matchedRemoteDelta:o.matchedRemote-n.matchedRemote,matchedLocalFileDelta:o.matchedLocalFiles-n.matchedLocalFiles,matchedRemoteFileDelta:o.matchedRemoteFiles-n.matchedRemoteFiles,pendingDelta:o.pendingSamePath-n.pendingSamePath};this.diagnostics.stages[e]=i,Se.debug(`${e} done elapsed=${i.elapsedMs}ms inputLocalFiles=${n.availableLocalFiles} inputRemoteFiles=${n.availableRemoteFiles} matchedLocalFileDelta=${i.matchedLocalFileDelta} matchedRemoteFileDelta=${i.matchedRemoteFileDelta} changeDelta=${i.changeDelta} pendingDelta=${i.pendingDelta} remainingLocalFiles=${i.availableLocalFiles} remainingRemoteFiles=${i.availableRemoteFiles}`)}getPipelineStats(){return{changes:this.diagnostics.changes,matchedLocal:this.diagnostics.matchedLocal,matchedRemote:this.diagnostics.matchedRemote,matchedLocalFiles:this.diagnostics.matchedLocalFiles,matchedRemoteFiles:this.diagnostics.matchedRemoteFiles,availableLocalFiles:this.diagnostics.availableLocalFiles,availableRemoteFiles:this.diagnostics.availableRemoteFiles,pendingSamePath:this.diagnostics.pendingSamePath}}async isScannedEntryStillPresent(e,t){let n=re(e,t.metaPath);try{let o=await Ha.promises.stat(n);return t.isFolder?o.isDirectory():o.isFile()}catch(o){if(x(o))return Se.debug(`skip disappeared sync scan entry: ${n}`),!1;throw o}}async scan(e,t,n){let o=Date.now();Se.debug(`scan start side=${t} root=${e} scope=${this.rootRemotePath||"/"}`);let i=new Map;if(!await this.shouldScanScopedProject(t))return Se.warn(`skip sync scan scope because baseline project is missing: side=${t} scope=${this.rootRemotePath}`),i;let a=new Je(eA),s=new Je(tA),c=0,l=!1;return await new Promise((p,d)=>{let g=()=>{c--,c===0&&p()},m=y=>{l||(l=!0,a.cancel(y),s.cancel(y),d(y))},f=(y,C=!1,v=!1)=>{this.throwIfAborted(),c++,a.addTask(async()=>{await this.walk(e,t,y,i,n,f,s,C,v)}).then(g,m)};f(this.rootRemotePath)}),await Promise.all([a.waitAll(),s.waitAll()]),Se.debug(`scan done side=${t} elapsed=${Date.now()-o}ms entries=${this.getSideStats(t).entries} files=${this.getSideStats(t).files} folders=${this.getSideStats(t).folders} trackedFiles=${this.getSideStats(t).trackedFiles} trackedFolders=${this.getSideStats(t).trackedFolders} suspectMeta=${n.size}`),new Map([...i].sort(([p],[d])=>p.localeCompare(d)))}async shouldScanScopedProject(e){if(this.rootRemotePath==="")return!0;let t=je(this.rootRemotePath);return t?this.shouldScanProject(e,t):!0}async shouldScanTopLevelProject(e,t){return this.shouldScanProject(e,t)}async shouldScanProject(e,t){return await this.isCloneInProgressProject(t)?(Se.debug(`skip clone in-progress project during workspace scan: side=${e} project=${t}`),!1):e==="workspace"?this.hasMirrorProject(t):!0}async isCloneInProgressProject(e){return(await Promise.all([this.workspaceStore.isCloneInProgress(e),this.mirror.isCloneInProgress(e)])).some(Boolean)}async hasMirrorProject(e){let t=this.mirrorProjectPresence.get(e);if(t!==void 0)return t;let n=re(this.remoteMirrorRoot,e),o=!1;try{o=(await Ha.promises.stat(n)).isDirectory()}catch(i){if(!x(i))throw i}return this.mirrorProjectPresence.set(e,o),o||this.reportProblemOnce(new Yi(this.workspaceRoot,"sync.missingBaselineProject",{projectPaths:[e],count:1})),o}reportProblemOnce(e){let t=[e.code,...e.projectPaths??[]].join("|");if(!this.reportedProblemKeys.has(t)){if(this.reportedProblemEventCount>=nA){Se.warn(`skip workspace problem event because limit reached: ${e.message}`);return}this.reportedProblemKeys.add(t),this.reportedProblemEventCount++,this.baselineProblems.push(e),Se.warn(`workspace problem reported code=${e.code} root=${e.root} projects=${e.projectPaths?.join(",")??""} count=${e.count??""}`),this.options.workspace.eventBus.fireAsync(new Ge("workspace.problem.reported",e,this)).catch(n=>Se.warn(`workspace problem event listener failed: ${n instanceof Error?n.message:String(n)}`))}}async walk(e,t,n,o,i,a,s,c,l){let p;try{p=await Ha.promises.readdir(re(e,n||"/"),{withFileTypes:!0})}catch(f){if(x(f)){Se.debug(`skip unreadable sync scan directory: ${e}:${n||"/"}`);return}throw f}let d=await this.readDirectoryDotMeta(e,n,i),g=new Set,m=[];for(let f of p){if(this.throwIfAborted(),n===""&&f.name.startsWith(".")||f.name===J)continue;g.add(f.name);let y=n+"/"+f.name,C=re(e,y);if(!(n===""&&!f.isDirectory())){if(n===""&&f.isDirectory()&&await this.isCloneInProgressProject(y)){Se.debug(`skip clone in-progress root project during workspace scan: side=${t} project=${y}`);continue}if(n===""&&f.isDirectory()&&d.dotMeta[f.name]&&!await this.shouldScanTopLevelProject(t,y)){Se.warn(`skip sync scan project without opposite side baseline: side=${t} project=${y}`);continue}if(n===""&&!d.dotMeta[f.name]){a(y,!0,t==="mirror");continue}if(f.isDirectory()){let v=d.dotMeta[f.name];if(!v){if(c){a(y,!0,l||t==="mirror");continue}i.add(d.metaPath)}this.addSnapshotEntry(o,{metaPath:y,side:t,isFolder:!0,meta:v,hasMeta:!!v,underUnregisteredMirrorDirectory:l}),a(y,!1,l||t==="mirror"&&!v)}else f.isFile()&&m.push(s.addTask(async()=>{let v;try{v=await Ha.promises.stat(C)}catch(P){if(x(P)){Se.debug(`skip unreadable sync scan file stat: ${C}`);return}throw P}c&&!d.dotMeta[f.name]||(this.addSnapshotEntry(o,{metaPath:y,side:t,isFolder:!1,contentSize:v?.size,stat:v?Dl(v):void 0,meta:d.dotMeta[f.name],hasMeta:!!d.dotMeta[f.name],underUnregisteredMirrorDirectory:l}),d.dotMeta[f.name]||i.add(d.metaPath))}))}}await Promise.all(m);for(let f of Object.keys(d.dotMeta))g.has(f)||i.add(d.metaPath)}addSnapshotEntry(e,t){if(e.has(t.metaPath)){e.set(t.metaPath,t);return}e.set(t.metaPath,t);let n=this.getSideStats(t.side);n.entries++,t.isFolder?(n.folders++,t.hasMeta&&n.trackedFolders++):(n.files++,t.hasMeta&&n.trackedFiles++),this.refreshAvailableFileStats()}getSideStats(e){return e==="workspace"?this.diagnostics.local:this.diagnostics.remote}async readDirectoryDotMeta(e,t,n){let o=this.getDotMetaMetaPath(t),i=await vr(e,o);return(!i.exists||!i.readable||i.damaged)&&n.add(o),{metaPath:o,parentPath:t||"/",exists:i.exists,readable:i.readable,damaged:i.damaged,dotMeta:i.dotMeta}}getDotMetaMetaPath(e){return!e||e==="/"?"/"+J:e+"/"+J}getAvailableFiles(e,t){return[...e.values()].filter(n=>!n.isFolder&&!t.has(n.metaPath))}isIgnoredUntrackedLocal(e){if(e.hasMeta)return!1;let t=Re(e.metaPath);return this.options.workspace.isGitIgnored(e.metaPath)||ec(t,this.options.ignore??Ct.syncIgnore)}async matchById(e,t){let n=this.indexById(e.local),o=this.indexRemoteByIdForWorkspaceRename(e.remote,e.local),i=[];for(let a of n.values()){let s=a.meta?.id;if(!s)continue;let c=o.get(s);if(!(!c||e.matchedRemote.has(c.metaPath))){if(!a.isFolder&&!c.isFolder){i.push({localEntry:a,remoteEntry:c});continue}await this.addComparisonOrPending(e,a,c,t),await this.matchChildrenAfterFolderRename(e,a,c)}}await this.addComparisonsOrPending(e,i,t)}async matchByPath(e,t){let n=[];for(let o of e.local.values()){if(e.matchedLocal.has(o.metaPath))continue;let i=e.remote.get(o.metaPath);if(!(!i||e.matchedRemote.has(i.metaPath))){if(!o.isFolder&&!i.isFolder){n.push({localEntry:o,remoteEntry:i});continue}await this.addComparisonOrPending(e,o,i,t)}}await this.addComparisonsOrPending(e,n,t)}async matchRenamesByInode(e,t){let n=this.pickStableSimilarityCandidates(await this.collectFileInodeCandidates(e));for(let o of n)e.matchedLocal.has(o.localEntry.metaPath)||e.matchedRemote.has(o.remoteEntry.metaPath)||this.isUnsafePendingSamePathRenameSteal(o,t,n)||await this.addRename(e,o,t)}async matchRenamesByHash(e,t){let n=this.pickStableSimilarityCandidates(await this.collectFolderExactCandidates(e)).sort((i,a)=>i.localEntry.metaPath.length-a.localEntry.metaPath.length);for(let i of n)e.matchedLocal.has(i.localEntry.metaPath)||e.matchedRemote.has(i.remoteEntry.metaPath)||this.isUnsafePendingSamePathRenameSteal(i,t,n)||(await this.addRename(e,i,t),await this.matchChildrenAfterFolderRename(e,i.localEntry,i.remoteEntry));let o=this.pickStableSimilarityCandidates(await this.collectFileEqualCandidates(e));for(let i of o)e.matchedLocal.has(i.localEntry.metaPath)||e.matchedRemote.has(i.remoteEntry.metaPath)||this.isUnsafePendingSamePathRenameSteal(i,t,o)||(await this.addRename(e,i,t),await this.matchChildrenAfterFolderRename(e,i.localEntry,i.remoteEntry))}async matchRenamesBySimilarity(e,t){let n=Date.now(),o=this.pickStableSimilarityCandidates(await this.collectFolderSimilarityCandidates(e));Se.debug(`similarity folder candidates done elapsed=${Date.now()-n}ms candidates=${o.length}`);for(let c of o)e.matchedLocal.has(c.localEntry.metaPath)||e.matchedRemote.has(c.remoteEntry.metaPath)||this.isUnsafePendingSamePathRenameSteal(c,t,o)||(await this.addRename(e,c,t),await this.matchChildrenAfterFolderRename(e,c.localEntry,c.remoteEntry));n=Date.now();let i=this.pickStableSimilarityCandidates(await this.collectFileSimilarityCandidates(e,t));if(this.diagnostics.similarity.stableFileCandidates=i.length,Se.debug(`similarity file candidates done elapsed=${Date.now()-n}ms candidates=${i.length}`),i.length===0)return;n=Date.now();let a=await this.collectFileEqualCandidates(e);Se.debug(`similarity equal candidates done elapsed=${Date.now()-n}ms candidates=${a.length}`);let s=0;for(let c of i)e.matchedLocal.has(c.localEntry.metaPath)||e.matchedRemote.has(c.remoteEntry.metaPath)||this.isUnsafePendingSamePathRenameSteal(c,t,i)||this.isSafeFileSimilarityPair(a,c)&&(await this.addRename(e,c,t),s++);Se.debug(`similarity apply file candidates done accepted=${s} changes=${e.changes.length}`),this.diagnostics.similarity.acceptedFileCandidates=s}async collectFileInodeCandidates(e){let{localEntries:t,remoteEntries:n}=this.getContentCandidateFiles(e);return this.fingerprint.findInodeFileCandidates(t,n)}async collectFileEqualCandidates(e){let{localEntries:t,remoteEntries:n}=this.getContentCandidateFiles(e);return this.fingerprint.findEqualFileCandidates(t,n)}async collectFolderExactCandidates(e){let t=[];for(let n of e.local.values())if(!(!n.isFolder||e.matchedLocal.has(n.metaPath)||this.isIgnoredUntrackedLocal(n)))for(let o of e.remote.values())!o.isFolder||e.matchedRemote.has(o.metaPath)||n.metaPath!==o.metaPath&&await this.areFolderSubtreesEqual(e.local,e.remote,n,o)&&t.push({localEntry:n,remoteEntry:o,score:1,reason:"folderContentHash"});return t}async areFolderSubtreesEqual(e,t,n,o){let i=this.getFolderDescendantsByRelativePath(e,n),a=this.getFolderDescendantsByRelativePath(t,o);if(i.size!==a.size)return!1;for(let[s,c]of i){let l=a.get(s);if(!l||c.isFolder!==l.isFolder)return!1;if(c.isFolder)continue;if(await this.fingerprint.areEntriesEqual(c,l)!=="same")return!1}return!0}getFolderDescendantsByRelativePath(e,t){let n=new Map;for(let o of e.values())o.metaPath===t.metaPath||!Q(o.metaPath,t.metaPath)||n.set(o.metaPath.slice(t.metaPath.length+1),o);return n}async collectFileSimilarityCandidates(e,t){let{localEntries:n,remoteEntries:o}=this.getContentCandidateFiles(e),i=0;if(t?.size&&(i=this.estimatePendingSamePathSimilarityPairs(n,o,t),this.diagnostics.similarity.pendingSamePathPairs=i,t.size<2||i>Xw)){let c=n.length,l=o.length;n=n.filter(d=>!t.has(d.metaPath)),o=o.filter(d=>!t.has(d.metaPath)),this.diagnostics.similarity.skippedPendingSamePathLocalCandidates=c-n.length,this.diagnostics.similarity.skippedPendingSamePathRemoteCandidates=l-o.length;let p=t.size<2?"singlePendingSamePath":"pendingPairBudget";Se.debug(`skip pending same-path similarity candidates pendingSamePath=${t.size} pendingPairs=${i} maxPairs=${Xw} skippedLocal=${c-n.length} skippedRemote=${l-o.length}`);for(let d of t.values())this.logFileFlow("skip similarity",{path:d.localEntry.metaPath,remotePath:d.remoteEntry.metaPath,fileId:this.getEntryFileId(d.localEntry,d.remoteEntry),reason:p,pendingPairs:i})}if(this.diagnostics.similarity.fileLocalCandidates=n.length,this.diagnostics.similarity.fileRemoteCandidates=o.length,n.length===0||o.length===0)return[];let{candidates:a,stats:s}=await this.fingerprint.findSimilarFileCandidates(n,o);return Object.assign(this.diagnostics.similarity,s),a}estimatePendingSamePathSimilarityPairs(e,t,n){let o=new Map,i=new Set,a=c=>{let l=this.getSimilarityBucketKey(c),p=o.get(l);return p||(p={leftTotal:0,rightTotal:0,leftPending:0,rightPending:0,samePathPending:0},o.set(l,p)),p};for(let c of e){let l=a(c);l.leftTotal++,n.has(c.metaPath)&&(l.leftPending++,i.add(c.metaPath))}for(let c of t){let l=a(c);l.rightTotal++,n.has(c.metaPath)&&(l.rightPending++,i.has(c.metaPath)&&l.samePathPending++)}let s=0;for(let c of o.values())s+=c.leftPending*c.rightTotal-c.samePathPending+(c.leftTotal-c.leftPending)*c.rightPending;return s}getSimilarityBucketKey(e){return Ol.posix.extname(e.metaPath).toLowerCase()}async collectFolderSimilarityCandidates(e){let t=[];for(let n of e.local.values())if(!(!n.isFolder||e.matchedLocal.has(n.metaPath)||this.isIgnoredUntrackedLocal(n)))for(let o of e.remote.values()){if(!o.isFolder||e.matchedRemote.has(o.metaPath)||n.metaPath===o.metaPath)continue;let i=await this.getFolderSimilarity(e.local,e.remote,n,o);i>=QD&&t.push({localEntry:n,remoteEntry:o,score:i,reason:"folderSimilarity"})}return t}async getFolderSimilarity(e,t,n,o){let i=this.getFolderFileDescendants(e,n),a=this.getFolderFileDescendants(t,o),s=Math.max(i.length,a.length);if(s===0)return 1;let c=new Map(a.map(m=>[m.metaPath.slice(o.metaPath.length+1),m])),l=new Set,p=0,d=await this.fingerprint.findEqualFileCandidates(i,a),g=new Map;for(let m of d){let f=g.get(m.localEntry.metaPath);f||(f=[],g.set(m.localEntry.metaPath,f)),f.push(m.remoteEntry.metaPath)}for(let m of i){let f=m.metaPath.slice(n.metaPath.length+1),y=c.get(f);if(y){l.add(y.metaPath),p++;continue}for(let C of g.get(m.metaPath)??[])if(!l.has(C)){l.add(C),p++;break}}return p/s}getFolderFileDescendants(e,t){return[...e.values()].filter(n=>!n.isFolder&&n.metaPath!==t.metaPath&&Q(n.metaPath,t.metaPath))}pickStableSimilarityCandidates(e){let t=[];for(let n of e)this.isUniqueBestCandidate(n,e,!0)&&this.isUniqueBestCandidate(n,e,!1)&&t.push(n);return t}isUniqueBestCandidate(e,t,n){let o=t.filter(a=>n?a.localEntry.metaPath===e.localEntry.metaPath:a.remoteEntry.metaPath===e.remoteEntry.metaPath).sort((a,s)=>s.score-a.score);if(o[0]!==e)return!1;let i=o[1];return i?e.score-i.score>=ZD:!0}isSafeFileSimilarityPair(e,t){let n=[...e];return n.some(o=>o.localEntry.metaPath===t.localEntry.metaPath&&o.remoteEntry.metaPath===t.remoteEntry.metaPath)||n.push(t),this.pickStableSimilarityCandidates(n).some(o=>o.localEntry.metaPath===t.localEntry.metaPath&&o.remoteEntry.metaPath===t.remoteEntry.metaPath)}isUnsafePendingSamePathRenameSteal(e,t,n){if(!t.has(e.localEntry.metaPath)&&!t.has(e.remoteEntry.metaPath))return!1;let o=!this.hasPendingSamePathSwapCandidate(e,t,n);return o&&this.logFileFlow("reject rename stealing pending same-path",{localPath:e.localEntry.metaPath,remotePath:e.remoteEntry.metaPath,fileId:this.getEntryFileId(e.localEntry,e.remoteEntry),reason:e.reason,score:e.score}),o}hasPendingSamePathSwapCandidate(e,t,n){let o=e.localEntry.metaPath,i=e.remoteEntry.metaPath;return!t.has(o)||!t.has(i)?!1:n.some(a=>a!==e&&a.localEntry.metaPath===i&&a.remoteEntry.metaPath===o&&(a.reason===e.reason||a.score>=1||e.score>=1))}getContentCandidateFiles(e){return this.getContentCandidateFilesFromAvailable(this.getAvailableFiles(e.local,e.matchedLocal).filter(t=>!this.isIgnoredUntrackedLocal(t)),this.getAvailableFiles(e.remote,e.matchedRemote))}getContentCandidateFilesFromAvailable(e,t){return{localEntries:e,remoteEntries:t}}async addRename(e,t,n){let{localEntry:o,remoteEntry:i,score:a,reason:s}=t;if(!this.isAvailableRenamePair(o,i,e.matchedLocal,e.matchedRemote))return;let c=await this.computeContentChanged(o,i);this.markMatched(e,o,i),this.consumePendingSamePathForRename(n,o,i,s,a),this.addChange(e,{kind:"renamed",metaPath:o.metaPath,localPath:o.metaPath,remotePath:i.metaPath,fileId:this.getEntryFileId(o,i),oldMetaPath:i.metaPath,isFolder:o.isFolder,contentChanged:c,metaChanged:!yo(o.meta??{},i.meta??{}),confidence:a,reason:s}),this.logFileFlow("accept rename",{localPath:o.metaPath,remotePath:i.metaPath,fileId:this.getEntryFileId(o,i),reason:s,score:a,contentChanged:c})}isAvailableRenamePair(e,t,n,o){return!n.has(e.metaPath)&&!o.has(t.metaPath)&&e.isFolder===t.isFolder&&e.metaPath!==t.metaPath&&!this.isIgnoredUntrackedLocal(e)}async addComparison(e,t,n){this.applyComparisonOutcome(e,await this.createComparisonOutcome(t,n))}async addComparisonOrPending(e,t,n,o){this.applyComparisonOutcome(e,await this.createComparisonOutcome(t,n),o)}async addComparisonsOrPending(e,t,n){let o=await Promise.all(t.map(i=>this.createComparisonOutcome(i.localEntry,i.remoteEntry)));for(let i of o)e.matchedLocal.has(i.localEntry.metaPath)||e.matchedRemote.has(i.remoteEntry.metaPath)||this.applyComparisonOutcome(e,i,n)}async createComparisonOutcome(e,t){return{localEntry:e,remoteEntry:t,contentChanged:await this.computeContentChanged(e,t),metaChanged:!yo(e.meta??{},t.meta??{})}}applyComparisonOutcome(e,t,n){let{localEntry:o,remoteEntry:i,contentChanged:a,metaChanged:s}=t;if(this.markMatched(e,o,i),o.isFolder!==i.isFolder){this.addChange(e,{kind:"metaIssue",metaPath:o.metaPath,localPath:o.metaPath,remotePath:i.metaPath,fileId:this.getEntryFileId(o,i),isFolder:o.isFolder,reason:"resourceTypeChanged"});return}if(o.metaPath!==i.metaPath){this.addChange(e,{kind:"renamed",metaPath:o.metaPath,localPath:o.metaPath,remotePath:i.metaPath,fileId:this.getEntryFileId(o,i),oldMetaPath:i.metaPath,isFolder:o.isFolder,contentChanged:a,metaChanged:s,confidence:1,reason:"sameId"}),this.logFileFlow("accept rename",{localPath:o.metaPath,remotePath:i.metaPath,fileId:this.getEntryFileId(o,i),reason:"sameId",score:1,contentChanged:a});return}if(!(!a&&!s)){if(n){this.unmarkMatched(e,o,i),this.addPendingSamePath(n,{localEntry:o,remoteEntry:i,contentChanged:a,metaChanged:s});return}this.addChange(e,{kind:a?"contentDifferent":"metaDifferent",metaPath:o.metaPath,localPath:o.metaPath,remotePath:i.metaPath,fileId:this.getEntryFileId(o,i),isFolder:o.isFolder,contentChanged:a,metaChanged:s})}}flushPendingSamePathChanges(e,t){for(let[n,o]of[...t]){if(e.matchedLocal.has(o.localEntry.metaPath)||e.matchedRemote.has(o.remoteEntry.metaPath)){let i=this.removePendingSamePath(t,n);i&&this.logFileFlow("consume pending same-path",{path:i.localEntry.metaPath,remotePath:i.remoteEntry.metaPath,fileId:this.getEntryFileId(i.localEntry,i.remoteEntry),reason:"alreadyMatchedBeforeFlush"});continue}this.markMatched(e,o.localEntry,o.remoteEntry),this.addChange(e,{kind:o.contentChanged?"contentDifferent":"metaDifferent",metaPath:o.localEntry.metaPath,localPath:o.localEntry.metaPath,remotePath:o.remoteEntry.metaPath,fileId:this.getEntryFileId(o.localEntry,o.remoteEntry),isFolder:o.localEntry.isFolder,contentChanged:o.contentChanged,metaChanged:o.metaChanged}),this.removePendingSamePath(t,n),this.logFileFlow("flush pending same-path",{path:o.localEntry.metaPath,remotePath:o.remoteEntry.metaPath,fileId:this.getEntryFileId(o.localEntry,o.remoteEntry),contentChanged:o.contentChanged,metaChanged:o.metaChanged})}}addChange(e,t){e.changes.push(t),this.diagnostics.changes++}logFileFlow(e,t){let n=Object.entries(t).filter(([,o])=>o!==void 0).map(([o,i])=>`${o}=${String(i)}`).join(" ");Se.debug(`flow ${e} phase=${this.currentMatchPhase} ${n}`)}addPendingSamePath(e,t){e.has(t.localEntry.metaPath)||this.diagnostics.pendingSamePath++,e.set(t.localEntry.metaPath,t),this.logFileFlow("pending same-path",{path:t.localEntry.metaPath,remotePath:t.remoteEntry.metaPath,fileId:this.getEntryFileId(t.localEntry,t.remoteEntry),contentChanged:t.contentChanged,metaChanged:t.metaChanged})}removePendingSamePath(e,t){let n=e.get(t);if(n)return e.delete(t),this.diagnostics.pendingSamePath--,n}consumePendingSamePathForRename(e,t,n,o,i){if(e?.size)for(let a of new Set([t.metaPath,n.metaPath])){let s=this.removePendingSamePath(e,a);s&&this.logFileFlow("consume pending same-path",{path:s.localEntry.metaPath,remotePath:s.remoteEntry.metaPath,fileId:this.getEntryFileId(s.localEntry,s.remoteEntry),reason:o,score:i,matchedLocalPath:t.metaPath,matchedRemotePath:n.metaPath})}}async computeContentChanged(e,t){return e.isFolder||t.isFolder?!1:await this.fingerprint.areEntriesEqual(e,t)!=="same"}markMatched(e,t,n){e.matchedLocal.has(t.metaPath)||(e.matchedLocal.add(t.metaPath),this.diagnostics.matchedLocal++,t.isFolder||this.diagnostics.matchedLocalFiles++),e.matchedRemote.has(n.metaPath)||(e.matchedRemote.add(n.metaPath),this.diagnostics.matchedRemote++,n.isFolder||this.diagnostics.matchedRemoteFiles++),this.refreshAvailableFileStats()}unmarkMatched(e,t,n){e.matchedLocal.delete(t.metaPath)&&(this.diagnostics.matchedLocal--,t.isFolder||this.diagnostics.matchedLocalFiles--),e.matchedRemote.delete(n.metaPath)&&(this.diagnostics.matchedRemote--,n.isFolder||this.diagnostics.matchedRemoteFiles--),this.refreshAvailableFileStats()}refreshAvailableFileStats(){this.diagnostics.availableLocalFiles=this.diagnostics.local.files-this.diagnostics.matchedLocalFiles,this.diagnostics.availableRemoteFiles=this.diagnostics.remote.files-this.diagnostics.matchedRemoteFiles}async matchChildrenAfterFolderRename(e,t,n){!t.isFolder||!n.isFolder||t.metaPath===n.metaPath||(await this.matchChildrenByRelativePath(e,t,n),await this.matchChildrenByContent(e,t,n))}async matchChildrenByRelativePath(e,t,n){for(let o of e.local.values()){if(e.matchedLocal.has(o.metaPath)||!Q(o.metaPath,t.metaPath))continue;let i=o.metaPath.slice(t.metaPath.length+1),a=e.remote.get(n.metaPath+"/"+i);!a||e.matchedRemote.has(a.metaPath)||await this.addComparison(e,o,a)}}async matchChildrenByContent(e,t,n){let{localEntries:o,remoteEntries:i}=this.getContentCandidateFilesFromAvailable(this.getAvailableFolderFiles(e.local,t,e.matchedLocal).filter(s=>!this.isIgnoredUntrackedLocal(s)),this.getAvailableFolderFiles(e.remote,n,e.matchedRemote)),a=this.pickStableSimilarityCandidates(await this.fingerprint.findEqualFileCandidates(o,i));for(let s of a)!Q(s.localEntry.metaPath,t.metaPath)||!Q(s.remoteEntry.metaPath,n.metaPath)||await this.addRename(e,s)}getAvailableFolderFiles(e,t,n){return this.getFolderFileDescendants(e,t).filter(o=>!n.has(o.metaPath))}indexById(e){let t=new Map,n=new Set;for(let o of e.values()){let i=o.meta?.id;if(i){if(t.has(i)){n.add(i);continue}t.set(i,o)}}for(let o of n)t.delete(o);return t}indexRemoteByIdForWorkspaceRename(e,t){let n=new Map;for(let[o,i]of this.groupRemoteEntriesByMetaId(e)){if(i.length===1){n.set(o,i[0]);continue}let a=i.filter(s=>!t.has(s.metaPath));a.length===1&&n.set(o,a[0])}return n}indexIgnoredMirrorResidues(e,t){let n=this.groupRemoteEntriesByMetaId(t),o=this.collectParentsWithTrackedChild(t),i=new Set;for(let a of t.values()){if(!e.has(a.metaPath))continue;if(!a.hasMeta){o.has(Ol.posix.dirname(a.metaPath))&&i.add(a.metaPath);continue}let s=a.meta?.id;if(!s)continue;let c=n.get(s);!c||c.length<2||(a.underUnregisteredMirrorDirectory||this.hasUnmatchedSibling(c,a.metaPath,e))&&i.add(a.metaPath)}return i}filterOutIgnoredMirrorResidues(e,t){if(t.size===0)return e;let n=new Map;for(let[o,i]of e)t.has(o)||n.set(o,i);return n}filterOutBaselineMissingLocalEntries(e,t){if(t.length===0)return e;let n=new Set(t.map(i=>i.metaPath)),o=new Map;for(let[i,a]of e)n.has(i)||o.set(i,a);return o}async addBaselineMissingLocalChanges(e,t){for(let n of t)n.isFolder&&!n.hasMeta||await this.isScannedEntryStillPresent(this.workspaceRoot,n)&&this.addChange(e,{kind:"localOnly",metaPath:n.metaPath,localPath:n.metaPath,fileId:n.meta?.id,isFolder:n.isFolder,hasMeta:n.hasMeta})}collectBaselineMissingLocalEntries(e,t){let n=new Set,o=new Set;for(let s of t.values()){let c=s.meta?.id;c&&n.add(c);let l=je(s.metaPath);l&&o.add(l)}let i=new Map;for(let s of e.values()){if(!s.hasMeta||t.has(s.metaPath))continue;let c=s.meta?.id;if(!c||n.has(c))continue;let l=je(s.metaPath);if(!l)continue;let p=i.get(l);p?p.push(s):i.set(l,[s])}let a=[];for(let[s,c]of i)if(!(o.has(s)&&c.length<oA)){for(let l of c)l.baselineMissing=!0,a.push(l);this.reportProblemOnce(new Yi(this.workspaceRoot,"sync.incompleteBaselineFiles",{projectPaths:[s],remotePaths:c.slice(0,iA).map(l=>l.metaPath),count:c.length}))}return a}groupRemoteEntriesByMetaId(e){let t=new Map;for(let n of e.values()){let o=n.meta?.id;if(!o)continue;let i=t.get(o);i?i.push(n):t.set(o,[n])}return t}collectParentsWithTrackedChild(e){let t=new Set;for(let n of e.values())n.hasMeta&&t.add(Ol.posix.dirname(n.metaPath));return t}hasUnmatchedSibling(e,t,n){for(let o of e)if(o.metaPath!==t&&!n.has(o.metaPath))return!0;return!1}getEntryFileId(e,t){return t.meta?.id??e.meta?.id}async toSyncFileChange(e){return{path:Re(e.localPath??e.remotePath??e.metaPath),remotePath:e.localPath??e.remotePath??e.metaPath,...e.fileId!==void 0?{fileId:e.fileId}:{},oldPath:e.oldMetaPath?Re(e.oldMetaPath):void 0,oldRemotePath:e.oldMetaPath,type:this.toScmChangeType(e.kind),isFolder:e.isFolder,contentChanged:e.contentChanged,metaChanged:e.metaChanged}}toScmChangeType(e){return e==="localOnly"?"added":e==="remoteOnly"?"deleted":e==="contentDifferent"||e==="metaDifferent"?"modified":e==="renamed"?"renamed":"conflict"}};var aA=T("workspace.sync-status.refresh"),Lr=class{constructor(e,t={}){this.id=e;this.scope=t.scope??"both",this.source=t.source??"manual",this.task=t.task??it.INSTANCE,this.forceRefresh=t.forceRefresh===!0,this.rootRemotePath=t.rootRemotePath,this.refreshLocal=this.scope==="local"||this.scope==="both",this.refreshRemote=this.scope==="remote"||this.scope==="both",this.workspace=t.workspace,this.accepted=t.onAccepted??(()=>{}),this.publishResult=t.publish??(()=>{})}kind="refresh";scope;source;task;forceRefresh;rootRemotePath;refreshLocal;refreshRemote;accepted;workspace;publishResult;localController=new AbortController;remoteController=new AbortController;refreshResult={warnings:[]};localCancelled=!1;remoteCancelled=!1;onAccepted(){this.accepted()}abort(){this.cancelLocal(),this.cancelRemote()}cancelConflictingSubTasks(e){this.cancelSubTasks({local:e.refreshLocal,remote:e.refreshRemote})}cancelSubTasks(e){e.local&&this.refreshLocal&&this.cancelLocal(),e.remote&&this.refreshRemote&&this.cancelRemote()}isLocalCancelled(){return this.localCancelled}isRemoteCancelled(){return this.remoteCancelled}canRunSubTask(e){return e==="local"?this.refreshLocal&&!this.localCancelled:this.refreshRemote&&!this.remoteCancelled}hasRunnableSubTask(){return this.canRunSubTask("local")||this.canRunSubTask("remote")}getRefreshResult(){return this.refreshResult}canRunBackgroundRefresh(){let e=this.workspace;return!!e&&e.isConnected&&!!e.activeServerUrl}async run(){if(!this.workspace||!this.hasRunnableSubTask())return{kind:"noop"};this.task.start(Number(this.canRunSubTask("local"))+Number(this.canRunSubTask("remote")),{message:u("workspace.sync.progress.refresh.running")});let e=this.canRunSubTask("local")?this.task.subTaskMonitor(1):void 0,t=this.canRunSubTask("remote")?this.task.subTaskMonitor(1):void 0;try{let n=e?this.runLocalRefresh(e):Promise.resolve(void 0),o=t?this.runRemoteRefresh(t):Promise.resolve(void 0),[i,a]=await Promise.all([n,o]);return this.canPublish(i,a)?{kind:"replaceRefreshScope",localChanges:this.localCancelled?void 0:i,...this.localCancelled||!this.rootRemotePath?{}:{localRootRemotePath:this.rootRemotePath},remoteChanges:this.remoteCancelled?void 0:a,...a!==void 0&&this.refreshResult.warnings.length>0?{warnings:this.refreshResult.warnings}:{}}:{kind:"noop"}}catch(n){if(n instanceof Error&&n.name==="AbortError")return{kind:"noop"};throw n}}createPublishableResult(e){if(e.kind!=="replaceRefreshScope")return e;let t=this.localCancelled?void 0:e.localChanges,n=this.remoteCancelled?void 0:e.remoteChanges;return t===void 0&&n===void 0?{kind:"noop"}:{kind:"replaceRefreshScope",localChanges:t,...t===void 0||!e.localRootRemotePath?{}:{localRootRemotePath:e.localRootRemotePath},remoteChanges:n,...n!==void 0&&e.warnings?.length?{warnings:e.warnings}:{}}}publish(e){let t=this.createPublishableResult(e);return this.refreshResult=this.createRefreshResult(t),this.publishResult(t)}async runLocalRefresh(e){e.start(1);let t=this.workspace,n=await new Ll({workspace:t,task:e,signal:this.localController.signal,rootRemotePath:this.rootRemotePath}).detect();return e.step(1),n.changes}async runRemoteRefresh(e){e.start(1);let t=await this.detectRemoteChanges(e);return e.step(1),t}async detectRemoteChanges(e){let t=this.workspace;if(!t)return[];try{return this.remoteController.signal.aborted?[]:await new Dr({workspace:t,task:e,forceRefresh:this.forceRefresh,signal:this.remoteController.signal}).detect()}catch(n){return Lf(n)?(this.refreshResult={warnings:[{errorCode:"err.login.notlogin",properties:{serverUrl:t.activeServerUrl}}]},[]):(aA.warn(`remote sync status detection failed: ${t.root}`,n),[])}}createRefreshResult(e){return e.kind!=="replaceRefreshScope"?{warnings:[]}:{warnings:e.warnings??[]}}canPublish(e,t){return this.refreshLocal&&!this.localCancelled&&!e||this.refreshRemote&&!this.remoteCancelled&&!t?!1:!this.localCancelled&&!!e||!this.remoteCancelled&&!!t}cancelLocal(){this.localCancelled=!0,this.localController.abort()}cancelRemote(){this.remoteCancelled=!0,this.remoteController.abort()}};var Nl=class{taskQueue=[];scheduling=!1;dispose(){this.cancelAllStateTasks(),this.scheduleTaskQueue()}hasRemoteRefreshTask(){return this.getRefreshTasks().some(e=>e.refreshRemote)}enqueue(e){let t=this.mergePendingFileWatchTask(e);return t?{accepted:!0,promise:t.promise}:this.prepareTask(e)?(e instanceof Lr&&e.refreshLocal&&this.cancelLocalStateTasks(),e.onAccepted?.(),{accepted:!0,promise:this.enqueueTask(e)}):{accepted:!1,promise:Promise.resolve()}}submitImmediate(e,t={}){t.cancel==="local"?this.cancelLocalStateTasks():this.cancelAllStateTasks();let n=e.publish(e.toResult());this.enqueueFollowUpTask(n),this.scheduleTaskQueue()}prepareTask(e){return e instanceof Lr?this.prepareRefreshTask(e):!0}prepareRefreshTask(e){if(e.source==="background")return this.taskQueue.length===0&&e.canRunBackgroundRefresh();for(let t of this.getRefreshTasks())t.cancelConflictingSubTasks(e);return!0}enqueueTask(e){let t=this.createScheduledTask(e);return this.taskQueue.push(t),this.scheduleTaskQueue(),t.promise}createScheduledTask(e){let t,n,o=new Promise((i,a)=>{t=i,n=a});return{task:e,state:"pending",promise:o,resolve:t,reject:n}}scheduleTaskQueue(){if(!this.scheduling){this.scheduling=!0;try{for(let e of[...this.taskQueue])if(e.state==="pending"){if(this.shouldDiscardScheduledTask(e.task)){this.finishScheduledTask(e);continue}this.canStartScheduledTask(e)&&this.startScheduledTask(e)}}finally{this.scheduling=!1}}}shouldDiscardScheduledTask(e){return e instanceof cr?e.isCancelled():e instanceof Lr?!e.hasRunnableSubTask():!1}canStartScheduledTask(e){return e.task instanceof cr?!this.hasEarlierPendingFileWatchTask(e)&&!this.hasRunningFileWatchTask()&&!this.hasRunningLocalRefreshTask():!0}startScheduledTask(e){e.state="running",this.runScheduledTask(e)}async runScheduledTask(e){let t;try{let n=await e.task.run();t=await e.task.publish(n)}catch(n){this.finishScheduledTask(e,n);return}this.removeScheduledTask(e);try{t?await this.enqueue(t).promise:this.scheduleTaskQueue(),e.resolve()}catch(n){e.reject(n)}}finishScheduledTask(e,t){this.removeScheduledTask(e),t?e.reject(t):e.resolve(),this.scheduleTaskQueue()}removeScheduledTask(e){let t=this.taskQueue.indexOf(e);t>=0&&this.taskQueue.splice(t,1)}enqueueFollowUpTask(e){e&&this.enqueue(e).promise}cancelAllStateTasks(){this.cancelFileWatchTasks(),this.cancelRefreshTasks({local:!0,remote:!0})}cancelLocalStateTasks(){this.cancelFileWatchTasks(),this.cancelRefreshTasks({local:!0})}cancelRefreshTasks(e){for(let t of this.getRefreshTasks())t.cancelSubTasks(e)}cancelFileWatchTasks(){for(let e of this.taskQueue)e.task instanceof cr&&e.task.abort()}mergePendingFileWatchTask(e){if(!(e instanceof cr))return;let t=this.findMergeableFileWatchTask();if(t)return t.task.mergeTask(e),t}findMergeableFileWatchTask(){for(let e=this.taskQueue.length-1;e>=0;e--){let t=this.taskQueue[e];if(t.state==="pending"&&t.task instanceof cr&&!t.task.isCancelled())return t}}getRefreshTasks(){return this.taskQueue.map(e=>e.task).filter(e=>e instanceof Lr)}hasRunningFileWatchTask(){return this.taskQueue.some(e=>e.state==="running"&&e.task instanceof cr)}hasEarlierPendingFileWatchTask(e){for(let t of this.taskQueue){if(t===e)return!1;if(t.state==="pending"&&t.task instanceof cr)return!0}return!1}hasRunningLocalRefreshTask(){return this.taskQueue.some(e=>e.state==="running"&&e.task instanceof Lr&&e.task.canRunSubTask("local"))}};var Gm=T("workspace.sync-status"),Wl=class{constructor(e){this.workspace=e;this.coordinator=new Nl}changes=new Map;fullRefreshCount=0;taskId=0;coordinator;backgroundRemoteDiscoveryTimer;dispose(){this.stopBackgroundRemoteDiscovery(),this.coordinator.dispose()}startBackgroundRemoteDiscovery(e){this.stopBackgroundRemoteDiscovery(),!(e.intervalMs<=0)&&this.scheduleBackgroundRemoteDiscovery(e.intervalMs,e.runImmediately?0:e.intervalMs)}stopBackgroundRemoteDiscovery(){this.backgroundRemoteDiscoveryTimer&&(clearTimeout(this.backgroundRemoteDiscoveryTimer),this.backgroundRemoteDiscoveryTimer=void 0)}async refreshAll(e={}){let t=this.createRefreshTask(e),n=this.coordinator.enqueue(t);return n.accepted&&this.workspace?.notifySyncStatusRefreshing?.(n.promise,!!e.task),await n.promise,t.getRefreshResult()}scheduleBackgroundRemoteDiscovery(e,t=e){this.backgroundRemoteDiscoveryTimer=setTimeout(()=>{this.backgroundRemoteDiscoveryTimer=void 0,this.runBackgroundRemoteDiscovery(e)},t)}async runBackgroundRemoteDiscovery(e){if(this.scheduleBackgroundRemoteDiscovery(e),await this.hasSyncLock()){Gm.debug("background remote discovery skipped because sync lock is held");return}if(this.coordinator.hasRemoteRefreshTask()){Gm.debug("background remote discovery skipped because remote refresh is already queued");return}this.refreshAll({scope:"remote",source:"background"}).catch(t=>{Gm.warn("background remote discovery failed",t)})}async hasSyncLock(){let e=this.workspace?.lockManager;return e?await e.isHeldLock("sync"):!1}createRefreshTask(e={}){return new Lr(this.nextTaskId(),{...e,workspace:this.workspace,onAccepted:()=>{this.fullRefreshCount++},publish:t=>this.publishTaskResult(t)})}replaceAllByRefreshScope(e,t,n){let o=e?[...e]:[],i=t??[];if(!e||!t)for(let s of this.changes.values()){let c=lt(s),l=kr(s);!e&&c&&!l||e&&n&&c&&!l&&!cm(s,[n])?o.push(s):!t&&l&&!c&&i.push(s)}let a=Dk(o,i);this.replaceAllWithoutVersionChange([...o,...i,...a])}async consumeFileChanges(e,t={}){await this.coordinator.enqueue(this.createFileWatchTask(e,t)).promise}createFileWatchTask(e,t){return new cr(this.nextTaskId(),{fileChanges:e,bulk:t.bulk,workspace:this.workspace,getChanges:()=>this.getChanges(),publish:n=>this.publishTaskResult(n)})}applyOperationResult(e,t=[]){this.coordinator.submitImmediate(new xl(this.nextTaskId(),e,t,n=>this.publishTaskResult(n)))}applyFileWatchResult(e,t){this.coordinator.submitImmediate(this.createReplaceTargetsTask("fileWatch",t,e,"fileWatch"),{cancel:"local"})}clearTargets(e){this.coordinator.submitImmediate(this.createClearTask({kind:"paths",remotePaths:e}))}clear(){this.coordinator.submitImmediate(this.createClearTask({kind:"all"}))}createReplaceTargetsTask(e,t,n,o="normal"){return new Fl(this.nextTaskId(),{source:e,targetRemotePaths:t,changes:n,mode:o,publish:i=>this.publishTaskResult(i)})}createClearTask(e){return new Ml(this.nextTaskId(),e,t=>this.publishTaskResult(t))}publishTaskResult(e){if(e.kind!=="noop"){if(e.kind==="requestRefresh")return this.createRefreshTask({scope:e.scope,source:e.source,task:e.task,rootRemotePath:e.rootRemotePath});if(e.kind==="replaceRefreshScope"){this.replaceAllByRefreshScope(e.localChanges,e.remoteChanges,e.localRootRemotePath);return}if(e.kind==="replaceTargets"){this.replaceTargetsByMode(e.targetRemotePaths,e.changes,e.mode??"normal");return}this.publishClearResult(e.target)}}publishClearResult(e){if(e.kind==="all"){this.clearWithoutVersionChange();return}this.clearTargetsWithoutVersionChange(e.remotePaths)}nextTaskId(){return this.taskId++,this.taskId}getChanges(){return[...this.changes.values()]}getSummary(){let e=0,t=0;for(let n of this.changes.values())lt(n)?e++:kr(n)&&t++;return{pushCount:e,pullCount:t}}getLocalChanges(){return this.getChanges().filter(e=>lt(e))}getRemoteChanges(){return this.getChanges().filter(e=>kr(e))}getFullRefreshCount(){return this.fullRefreshCount}replaceTargets(e,t){if(e.length===0)return;let n=Ei(e);for(let[o,i]of this.changes)n(i)&&this.changes.delete(o);this.addChanges(t)}replaceFileWatchTargets(e,t){if(e.length===0)return;let n=t.filter(Yc).flatMap(i=>[i.remotePath,i.oldRemotePath]).filter(i=>!!i),o=new Set;for(let[i,a]of this.changes)if(Ik(a,e)||cm(a,n)){if(a.type==="renamed"&&t.some(s=>s.type==="added"&&s.remotePath===a.remotePath)){o.add(a.remotePath);continue}this.changes.delete(i)}this.addChanges(t.filter(i=>i.type!=="added"||!o.has(i.remotePath)))}addChanges(e){for(let t of e)t.type!=="clean"&&this.addMergedChange(t)}addMergedChange(e){let t=this.createMoveChangeByExistingState(e);if(!t){this.changes.set(Zc(e),e);return}this.changes.set(Zc(t),t)}createMoveChangeByExistingState(e){let t=this.findMoveCounterpart(e);if(t)return this.changes.delete(Zc(t)),this.createMoveChange(e,t)}findMoveCounterpart(e){let t;for(let n of this.changes.values())if(this.canMergeMoveChanges(e,n)){if(t)return;t=n}return t}canMergeMoveChanges(e,t){return!!e.fileId&&e.fileId===t.fileId&&(this.isLocalAdded(e)&&this.isLocalDeleted(t)||this.isLocalDeleted(e)&&this.isLocalAdded(t)||this.isRemoteAdded(e)&&this.isRemoteDeleted(t)||this.isRemoteDeleted(e)&&this.isRemoteAdded(t))}createMoveChange(e,t){let n=this.isAddedChange(e)?e:t,o=this.isDeletedChange(e)?e:t,i=this.isRemoteAdded(n)||this.isRemoteDeleted(o);return{path:n.path,remotePath:n.remotePath,fileId:n.fileId??o.fileId,oldPath:o.path,oldRemotePath:o.remotePath,type:i?"remoteRenamed":"renamed",isFolder:n.isFolder??o.isFolder,contentChanged:n.contentChanged??o.contentChanged,metaChanged:n.metaChanged??o.metaChanged}}isAddedChange(e){return this.isLocalAdded(e)||this.isRemoteAdded(e)}isDeletedChange(e){return this.isLocalDeleted(e)||this.isRemoteDeleted(e)}isLocalAdded(e){return e.type==="added"}isLocalDeleted(e){return e.type==="deleted"}isRemoteAdded(e){return e.type==="remoteAdded"}isRemoteDeleted(e){return e.type==="remoteDeleted"}replaceAllWithoutVersionChange(e){this.changes.clear(),this.addChanges(e),this.notifyChanged()}replaceTargetsByMode(e,t,n="normal"){n==="fileWatch"?this.replaceFileWatchTargets(e,t):this.replaceTargets(e,t),this.notifyChanged()}clearTargetsWithoutVersionChange(e){this.replaceTargets(e,[]),this.notifyChanged()}clearWithoutVersionChange(){this.changes.clear(),this.notifyChanged()}notifyChanged(){this.workspace?.notifySyncStatusChanged()}};var jl=b(require("path"));K();var sA=T("workspace.file-watch"),cA="**/*",lA=1e3,Qw=5e3,pA=200,uA=50,dA=[".succapp"],Zw="refreshAfterFileChange",Ul=class{constructor(e,t,n,o={},i){this.workspace=e;this.eventBus=t;this.fileWatcherProvider=n;this.options=o;this.lockManager=i;let a=this.disposables.add(this.fileWatcherProvider.createFileWatcher(e.root,cA));this.disposables.add(a.onFileChanged(s=>this.onFileChanged(s))),this.lockManager&&this.disposables.add(this.eventBus.on("workspace.lock.changed",s=>{s.payload.root!==this.workspace.root||s.payload.scope!=="sync"||s.payload.held||this.onSyncLockReleased()}))}disposables=new Bn;pendingChanges=new Map;lockReleaseTime=0;deferred=!1;deferredRecheckTimer;cancelPendingRefresh(){this.clearRefreshTimer(),this.clearDeferredRecheckTimer(),this.pendingChanges.clear(),this.deferred=!1}async flushPendingRefresh(){this.clearRefreshTimer(),this.clearDeferredRecheckTimer(),await this.refreshPendingChanges()}onFileChanged(e){let{filePath:t,type:n}=e;this.isWorkspaceSystemFile(t)||Date.now()-this.lockReleaseTime<(this.options.lockReleaseCooldown??uA)||(this.pendingChanges.set(`${n}\0${t}`,e),this.scheduleRefresh())}scheduleRefresh(){jo(this,Zw,this.options.refreshDelay??lA,()=>this.refreshPendingChanges(),{maxWaitMs:this.options.maxRefreshDelay??Qw})}takePendingChanges(){let e=[...this.pendingChanges.values()];return this.pendingChanges.clear(),e}async refreshPendingChanges(e=!1){if(this.pendingChanges.size===0){this.deferred=!1;return}if(await this.isSyncLockHeld()){this.deferred=!0,this.scheduleDeferredRecheck();return}let t=this.deferred;this.deferred=!1,this.clearDeferredRecheckTimer();let n=this.takePendingChanges();await this.refresh(n,e||t)}async refresh(e,t){if(e.length!==0){this.fireWorkspaceFileChanged(e[0]);try{await this.workspace.consumeFileChanges(e,{bulk:t||e.length>=this.getBulkThreshold()})}catch(n){sA.debug(`refresh sync status after file change failed: ${this.workspace.root}`,n)}}}fireWorkspaceFileChanged(e){this.eventBus.fire(new Ge("workspace.file.changed",{root:this.workspace.root,filePath:e.filePath,type:e.type},this))}getBulkThreshold(){return Math.max(1,this.options.bulkThreshold??pA)}async isSyncLockHeld(){return this.lockManager?await this.lockManager.isHeldLock("sync"):!1}onSyncLockReleased(){this.lockReleaseTime=Date.now(),this.deferred&&(this.clearRefreshTimer(),this.clearDeferredRecheckTimer(),this.refreshPendingChanges(!0))}scheduleDeferredRecheck(){this.deferredRecheckTimer||(this.deferredRecheckTimer=setTimeout(()=>{this.deferredRecheckTimer=void 0,this.refreshPendingChanges()},this.options.maxRefreshDelay??Qw),this.deferredRecheckTimer.unref?.())}clearDeferredRecheckTimer(){this.deferredRecheckTimer&&(clearTimeout(this.deferredRecheckTimer),this.deferredRecheckTimer=void 0)}clearRefreshTimer(){Bo(this,Zw)}isWorkspaceSystemFile(e){let t=jl.relative(this.workspace.root,e);return dA.some(n=>t===n||t.startsWith(`${n}${jl.sep}`))}dispose(){this.clearRefreshTimer(),this.clearDeferredRecheckTimer(),this.pendingChanges.clear(),this.disposables.dispose()}};K();var aP=b(require("fs")),Ya=b(require("path"));Pt();K();H();U();function vt(){return{status:"planned",dryRun:!0,applied:!1}}function pt(){return{status:"applied",dryRun:!1,applied:!0}}function Nr(r=!1){return{status:"blocked",dryRun:r,applied:!1}}function Vn(r,e){return{status:"skipped",dryRun:r,applied:!1,properties:{skipCause:e}}}function bo(r=!1){return{status:"failed",dryRun:r,applied:!1}}var Ka=b(require("path"));Pt();we();var za=class r{constructor(e,t){this.filePath=e;this.content=t}content;changed=!1;static async read(e){return new r(e,await qe(e))}hasChanges(){return this.changed}getContent(){return this.content}upsertMarkedBlock(e){let t=mA(this.content,e);return this.updateContent(t)}removeMarkedBlock(e){let t=tP(e),n=rP(t);if(!n.test(this.content))return!1;let o=this.content.replace(n,"").replace(/\s*$/,"");return this.updateContent(o?`${o}
75
+ `:"")}async save(){return this.changed?(await Ke(this.filePath,this.content),this.changed=!1,!0):!1}updateContent(e){return e===this.content?!1:(this.content=e,this.changed=!0,!0)}};function mA(r,e){let t=tP(e),n=rP(t);if(n.test(r))return r.replace(n,t.content);let o=r.replace(/\s*$/,"");return`${o}${o?`
73
76
 
74
77
  `:""}${t.content}
75
- `}function Lk(r){let e=r.trimEnd(),t=e.split(`
76
- `),n=t[0],o=t[t.length-1];return U(t.length>=2&&n.startsWith("# BEGIN ")&&o.startsWith("# END "),"Git ignore template must be a marked block."),{begin:n,end:o,content:e}}function Nk(r){return new RegExp(`${_k(r.begin)}[\\s\\S]*?${_k(r.end)}`)}function _k(r){return r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}$();var Wk=b(require("fs")),Uk=b(require("path"));vt();Ce();$();var am=b(require("fs")),In=b(require("path"));Ce();$();var iD="resources",aD="workspace-templates",sD="succapp-workspace";async function An(r){let e=await ml(r),t=Lt((await am.promises.readFile(e,"utf8")).replace(/\r\n/g,`
77
- `),{...Jt,filePath:e});return U(t,`Workspace template is not a JSON object: ${e}`),t}async function Qr(r){return(await am.promises.readFile(await ml(r),"utf8")).replace(/\r\n/g,`
78
- `)}async function ml(r){return In.join(await lD(),...cD(r).split("/"))}function cD(r){let e=Xn(r);return U(e,`Unsafe workspace template path: ${r}`),e}function Ra(r,e){return Array.isArray(r[e])?r[e].filter(t=>typeof t=="string"):[]}async function lD(){let r=[iD,aD,sD],e=[In.resolve(__dirname,"..",...r),In.resolve(__dirname,"..","..",...r),In.resolve(__dirname,"..","..","..",...r),In.resolve(__dirname,"..","..","..","..",...r),In.resolve(process.cwd(),...r)];for(let t of e)if(await Z(t))return t;return e[e.length-1]}var pD="agent-workspace-template.jsonc",Ea=class{workspace;constructor(e){this.workspace=e}async initialize(e={}){if(e.applyWorkspaceConfiguration!==!0)return!1;let t=await this.readTemplateTargets(),n=!1;for(let o of t.files)await Z(o.targetPath)||(await He(o.targetPath,await Qr(o.relativePath)),n=!0);for(let o of t.directories)await Z(o.targetPath)||(await Wk.promises.mkdir(o.targetPath,{recursive:!0}),n=!0);return n}async previewMissingPaths(){let e=await this.readTemplateTargets(),t=[];for(let n of[...e.files,...e.directories])await Z(n.targetPath)||t.push(n.targetPath);return t}async readManifest(){let e=await An(pD);return{files:Ra(e,"files"),directories:Ra(e,"directories")}}async readTemplateTargets(){let e=await this.readManifest();return{files:e.files.map(t=>this.toTemplateTarget(t)),directories:e.directories.map(t=>this.toTemplateTarget(t))}}toTemplateTarget(e){let t=dD(e);return{relativePath:t,targetPath:this.getTargetPath(t)}}getTargetPath(e){return Uk.join(this.workspace.root,...e.split("/"))}};function dD(r){let e=Xn(r);return U(e,`Unsafe workspace template path: ${r}`),e}var jk=b(require("fs")),ba=b(require("path"));vt();G();$();var uD="frontendFrameworksSupport",mD=ba.posix.join(".agents","skills","succbi-frontend-development"),hD="succ-frontend-frameworks.json",fD=T("workspace.init.frontend-development-skill"),Ta=class{workspace;constructor(e){this.workspace=e}async initialize(e){if(e.applyWorkspaceConfiguration!==!0&&!await Z(this.getSkillRoot()))return!1;let{client:t,serverInfo:n}=e;try{return this.supportsFrontendFrameworks(n)?await this.writeManifest(await t.getFrontendFrameworksManifest()):!1}catch(o){return fD.warn(`initialize frontend development skill support failed: ${this.workspace.root}`,o),!1}}async refreshOnServerVersionChange(e,t){!this.supportsFrontendFrameworks(t)||!await Z(this.getSkillRoot())||await this.writeManifest(await e.getFrontendFrameworksManifest())}supportsFrontendFrameworks(e){return e.capabilities?.includes(uD)===!0}async writeManifest(e){await jk.promises.mkdir(this.getSkillRoot(),{recursive:!0});let t=this.getManifestPath(),n=JSON.stringify(e,null," ")+`
79
- `;return await Le(t)===n?!1:(await He(t,n),!0)}getSkillRoot(){return ba.join(this.workspace.root,...mD.split("/"))}getManifestPath(){return ba.join(this.getSkillRoot(),hD)}};var On=b(require("fs")),li=b(require("path"));vt();G();ne();$();var gD="jsonSchemaSupport",hl="json-schemas",yD="json-schemas.tmp-",Bk="json-schema-support.json",CD="json-schema-support-state.json",fl=T("workspace.init.json-schema"),xa=class{workspace;constructor(e){this.workspace=e}async initialize(e){if(e.applyWorkspaceConfiguration!==!0&&e.forceRefresh!==!0&&!await this.hasSuccAppWorkspaceSetting())return!1;let{client:t,serverInfo:n}=e;try{if(!this.supportsJsonSchemaSupport(n))return!1;let o=await Z(this.getSupportRoot()),i=await Z(this.getManifestPath()),a=e.forceRefresh===!0||!o||!i,s=a?await t.getJsonSchemaSupport():await this.readManifest();if(!s)return!1;let c=a?await this.materializeFiles(s,t):s.schemas,l=await this.ensureWorkspaceSettings(c),p=await this.writeState(t.serverUrl,n);return a||l||p}catch(o){return fl.warn(`initialize JSON Schema support failed: ${this.workspace.root}`,o),!1}}async refreshOnServerVersionChange(e,t){if(!this.supportsJsonSchemaSupport(t))return;let o=(await this.readState()).servers?.[e.serverUrl];if(!o&&!await this.hasSuccAppWorkspaceSetting()||o?.version===t.version)return;let i=await e.getJsonSchemaSupport(),a=await this.materializeFiles(i,e);await this.ensureWorkspaceSettings(a),await this.writeState(e.serverUrl,t)}supportsJsonSchemaSupport(e){return e.capabilities?.includes(gD)===!0}async materializeFiles(e,t){let n=this.getSupportRoot(),o=Wr(this.workspace.root,`${yD}${Date.now()}`);await On.promises.rm(o,{recursive:!0,force:!0});try{await On.promises.mkdir(o,{recursive:!0});let i=e.schemas.map(s=>({...s,path:dn(s.path,"JSON Schema path"),source:dn(s.source,"JSON Schema source")}));await He(li.join(o,Bk),JSON.stringify({schemas:i},null," ")+`
80
- `);let a=new Map(i.map(s=>[s.path,s]));return await Promise.all(Array.from(a.values()).map(async s=>{let c=await t.downloadJsonSchema(s.source),l=Ng(o,s.path,"JSON Schema path");await On.promises.mkdir(li.dirname(l),{recursive:!0}),await On.promises.writeFile(l,c,"utf8")})),await On.promises.rm(n,{recursive:!0,force:!0}),await On.promises.rename(o,n),i}catch(i){throw await On.promises.rm(o,{recursive:!0,force:!0}).catch(a=>{fl.debug(`cleanup temporary JSON Schema support directory failed: ${o}`,a)}),i}}async ensureWorkspaceSettings(e){let t=this.getWorkspaceSettingsPath(),n=await Le(t),o=Lt(n,{...Jt,filePath:t,ignoreParseError:!0});if(!o)return!1;let i=Lr(n);return i=this.upsertMissingJsonSchemas(i,o,e),i===Lr(n)?!1:(await He(t,i),!0)}async hasSuccAppWorkspaceSetting(){let e=await _r(this.getWorkspaceSettingsPath(),Jt);return e?(Array.isArray(e["json.schemas"])?e["json.schemas"]:[]).filter(n=>this.isJsonSchemaSetting(n)).some(n=>{let o=n.url.replace(/\\/g,"/");return o.startsWith(`./${Xt}/${hl}/`)||o.startsWith(`${Xt}/${hl}/`)}):!1}upsertMissingJsonSchemas(e,t,n){let o=Array.isArray(t["json.schemas"])?t["json.schemas"]:[],i=n.filter(l=>l.fileMatch.length>0).map(l=>({fileMatch:l.fileMatch,url:`./${Xt}/${hl}/${l.path}`})),a=[...o],s=new Map;a.forEach((l,p)=>{if(this.isJsonSchemaSetting(l)){let m=this.normalizeSettingUrl(l.url);s.has(m)||s.set(m,p)}});let c=!1;for(let l of i){let p=this.normalizeSettingUrl(l.url),m=s.get(p);if(m===void 0){s.set(p,a.length),a.push(l),c=!0;continue}let g=a[m],d=this.mergeMissingFileMatches(g,l.fileMatch);d&&(a[m]={...V(g)?g:{},fileMatch:d},c=!0)}return c?Nt(e,["json.schemas"],a):e}mergeMissingFileMatches(e,t){let n=V(e)&&Array.isArray(e.fileMatch)?e.fileMatch:[],o=new Set(n.filter(a=>typeof a=="string")),i=t.filter(a=>!o.has(a));return i.length>0?[...n,...i]:void 0}isJsonSchemaSetting(e){return V(e)&&typeof e.url=="string"}normalizeSettingUrl(e){return e.replace(/\\/g,"/").replace(/^\.\//,"")}async readManifest(){let e=await Le(this.getManifestPath());if(e)try{let t=JSON.parse(e);return this.isManifest(t)?t:void 0}catch(t){fl.debug(`skip JSON Schema support manifest because it cannot be parsed: ${this.getManifestPath()}`,t);return}}isManifest(e){return V(e)&&Array.isArray(e.schemas)}async readState(){let e=await Le(this.getStatePath());if(!e)return{};try{let t=JSON.parse(e);return this.isState(t)?t:{}}catch(t){return fl.debug(`skip JSON Schema support state because it cannot be parsed: ${this.getStatePath()}`,t),{}}}isState(e){return typeof e=="object"&&e!==null&&(!("servers"in e)||typeof e.servers=="object"&&e.servers!==null&&!Array.isArray(e.servers))}async writeState(e,t){let n=await this.readState(),o=n.servers?.[e],i=this.createServerState(t);if(o?.updatedAt&&ar(this.createComparableServerState(o),i))return!1;let a={...n.servers};a[e]={...i,updatedAt:new Date().toISOString()};let s=this.getStatePath(),c=JSON.stringify({...n,servers:a},null," ")+`
81
- `;return c===await Le(s)?!1:(await He(s,c),!0)}createServerState(e){return{version:e.version,productType:e.productType,devToolApiVersion:e.devToolApiVersion}}createComparableServerState(e){return{version:e.version,productType:e.productType,devToolApiVersion:e.devToolApiVersion}}getWorkspaceSettingsPath(){return dr(this.workspace.root)}getSupportRoot(){return Wr(this.workspace.root,hl)}getManifestPath(){return li.join(this.getSupportRoot(),Bk)}getStatePath(){return li.join(this.getSupportRoot(),CD)}};var Mr=b(require("fs")),Xe=b(require("path"));Ce();D();vt();G();ne();vt();var Fa=class r{constructor(e,t){this.filePath=e;this.content=t}content;changed=!1;static async read(e){return new r(e,await Le(e))}hasChanges(){return this.changed}getContent(){return this.content}upsertProjectReferences(e){let t=Lt(this.content,{...Jt,filePath:this.filePath,ignoreParseError:!0});if(!t)return{updated:!1,mergeRequired:!0};let n=SD(t,e);return n===t?{updated:!1,mergeRequired:!1}:{updated:this.updateContent(Nt(this.content,["references"],n.references)),mergeRequired:!1}}upsertGeneratedContent(e,t={}){return!this.content.trim()||t.overwrite===!0?{updated:this.updateContent(e),overwriteRequired:!1}:this.content===e?{updated:!1,overwriteRequired:!1}:{updated:!1,overwriteRequired:!0}}replaceContent(e){return this.updateContent(e)}async save(){return this.changed?(await He(this.filePath,Lr(this.content)),this.changed=!1,!0):!1}updateContent(e){return e===this.content?!1:(this.content=e,this.changed=!0,!0)}};function SD(r,e){let t=Array.isArray(r.references)?[...r.references]:[],n=!Array.isArray(r.references);for(let o of e)t.some(i=>vD(i,o))||(t.push({path:o}),n=!0);return n?{...r,references:t}:r}function vD(r,e){return kD(r)&&r.path===e}function kD(r){return typeof r=="object"&&r!==null&&"path"in r&&typeof r.path=="string"}$();var wD="typescriptSupport",PD="succ-types",RD="succ-types.tmp-",qk="typescript-support.json",gl=T("workspace.init.typescript"),Ma="tsconfig.json",sm="tsconfig.action.json",cm="tsconfig.browser.json",ED=Xe.posix.join(".vscode","settings.typescript-support.jsonc");async function $k(r){let e=[Xe.join(r,Ma),Xe.join(pr(r),sm),Xe.join(pr(r),cm),yl(r)],t=[];for(let n of e)await Z(n)&&t.push(n);return t}var Da=class{workspace;constructor(e){this.workspace=e}async initialize(e,t){let{client:n,serverInfo:o}=e;try{if(!this.supportsTypeScriptSupport(o))return!1;let i=await this.ensureTypeScriptSyncIgnore(),a=yl(this.workspace.root),s=await this.hasAnyFile(a),c=e.forceTypeScriptSupportRefresh===!0||!s;c&&await this.materializeTypeScriptSupportFiles(await n.getTypeScriptSupportApiLibs());let l=await this.ensureTypeScriptTsConfigs(e,t),p=await this.writeTypeScriptSupportState(n.serverUrl,o);return i||c||l||p}catch(i){return gl.warn(`initialize metadata TypeScript support failed: ${this.workspace.root}`,i),!1}}async refreshOnServerVersionChange(e,t){if(!this.supportsTypeScriptSupport(t))return;let o=(await this.readTypeScriptSupportState()).servers?.[e.serverUrl];!o||o.version===t.version||(await this.materializeTypeScriptSupportFiles(await e.getTypeScriptSupportApiLibs()),await this.ensureTypeScriptTsConfigs({},()=>{}),await this.writeTypeScriptSupportState(e.serverUrl,t))}supportsTypeScriptSupport(e){return!e.capabilities||e.capabilities.includes(wD)}async hasAnyFile(e){let t=await Mr.promises.readdir(e,{withFileTypes:!0}).catch(n=>{if(F(n))return gl.debug(`skip missing TypeScript support directory: ${e}`),[];throw n});for(let n of t)if(n.isFile()&&n.name!==qk||n.isDirectory()&&await this.hasAnyFile(Xe.join(e,n.name)))return!0;return!1}async materializeTypeScriptSupportFiles(e){let t=yl(this.workspace.root),n=Xe.join(pr(this.workspace.root),`${RD}${Date.now()}`);await Mr.promises.rm(n,{recursive:!0,force:!0});try{await Mr.promises.mkdir(n,{recursive:!0});for(let[o,i]of Object.entries(e)){let a=bD(o);if(!a||typeof i!="string")continue;let s=Xe.join(n,a);await Mr.promises.mkdir(Xe.dirname(s),{recursive:!0}),await Mr.promises.writeFile(s,i,"utf8")}await Mr.promises.rm(t,{recursive:!0,force:!0}),await Mr.promises.rename(n,t)}catch(o){throw await Mr.promises.rm(n,{recursive:!0,force:!0}).catch(i=>{gl.debug(`cleanup temporary TypeScript support directory failed: ${n}`,i)}),o}}async ensureTypeScriptTsConfigs(e,t){let n=pr(this.workspace.root);await Mr.promises.mkdir(n,{recursive:!0});let o=await this.ensureRootTsConfig(e,t),i=await this.ensureGeneratedOrMissingTsConfig(Xe.join(n,sm),await Qr(Xe.posix.join(Xt,sm)),e,t),a=await this.ensureGeneratedOrMissingTsConfig(Xe.join(n,cm),await Qr(Xe.posix.join(Xt,cm)),e,t);return o||i||a}async ensureRootTsConfig(e,t){let n=Xe.join(this.workspace.root,Ma),o=await Qr(Ma),i=await Fa.read(n);if(!i.getContent().trim()||e.overwriteExistingTypeScriptSupport===!0)return i.replaceContent(o),i.save();let a=i.upsertProjectReferences(await TD());return a.mergeRequired?(t({kind:"mergeRootTsConfig",filePath:n}),!1):a.updated?e.mergeExistingRootTsConfig!==!0?(t({kind:"mergeRootTsConfig",filePath:n}),!1):i.save():!1}async ensureGeneratedOrMissingTsConfig(e,t,n,o){let i=await Fa.read(e),a=i.upsertGeneratedContent(t,{overwrite:n.overwriteExistingTypeScriptSupport===!0||n.overwriteExistingTsConfigPaths?.includes(e)===!0});return a.overwriteRequired?(o({kind:"overwriteTsConfig",filePath:e}),!1):a.updated?i.save():!1}async ensureTypeScriptSyncIgnore(){let e=dr(this.workspace.root),t=await Le(e),n=Lt(t,{...Jt,filePath:e,ignoreParseError:!0});if(!n)return!1;let o=await An(ED),i=Ra(o,"succapp.sync.ignore"),a=Array.isArray(n["succapp.sync.ignore"])?n["succapp.sync.ignore"].filter(c=>typeof c=="string"):[],s=i.filter(c=>!a.includes(c));return s.length===0?!1:(await He(e,Nt(t,["succapp.sync.ignore"],[...a,...s])),yt.load(),!0)}async readTypeScriptSupportState(){let e=Vk(this.workspace.root),t=await Le(e);if(!t)return{};try{let n=JSON.parse(t);return FD(n)?n:{}}catch(n){return gl.debug(`skip TypeScript support state because it cannot be parsed: ${e}`,n),{}}}async writeTypeScriptSupportState(e,t){let n=await this.readTypeScriptSupportState(),o=n.servers?.[e],i=MD(t);if(o?.updatedAt&&ar(DD(o),i))return!1;let a={...n.servers};a[e]={...i,updatedAt:new Date().toISOString()};let s=Vk(this.workspace.root),c=JSON.stringify({...n,servers:a},null," ")+`
82
- `;return c===await Le(s)?!1:(await He(s,c),!0)}};function bD(r){return Xn(r)?.split("/").join(Xe.sep)}async function TD(){let r=await An(Ma),e=Array.isArray(r.references)?r.references.map(t=>xD(t)?t.path:void 0).filter(t=>typeof t=="string"):[];return U(e.length>0,`Workspace template does not declare TypeScript references: ${await ml(Ma)}`),e}function xD(r){return typeof r=="object"&&r!==null&&"path"in r&&typeof r.path=="string"}function yl(r){return Wr(r,PD)}function Vk(r){return Xe.join(yl(r),qk)}function FD(r){return typeof r=="object"&&r!==null&&(!("servers"in r)||typeof r.servers=="object"&&r.servers!==null&&!Array.isArray(r.servers))}function MD(r){return{version:r.version,productType:r.productType,devToolApiVersion:r.devToolApiVersion}}function DD(r){return{version:r.version,productType:r.productType,devToolApiVersion:r.devToolApiVersion}}var zk=b(require("path"));vt();ne();$();var Hk=zk.posix.join(".vscode","settings.recommended.jsonc"),pi=class{workspace;constructor(e){this.workspace=e}async initialize(e){if(e.applyWorkspaceConfiguration!==!0)return!1;let t=dr(this.workspace.root),n=await Le(t),o=Lt(n,{...Jt,filePath:t,ignoreParseError:!0});if(!o)return!1;let i=await An(Hk),a=Lr(n);return a=ID(a,o,i),a===Lr(n)?!1:(await He(t,a),!0)}async hasUpdates(){let e=await _r(dr(this.workspace.root),Jt);return e?AD(e,await An(Hk)):!1}};function ID(r,e,t){let n=r;for(let[o,i]of Object.entries(t)){if(V(i)){n=OD(n,e,o,i);continue}if(Array.isArray(i)){n=_D(n,e,o,i);continue}e[o]===void 0&&(n=Nt(n,[o],i))}return n}function AD(r,e){return Object.entries(e).some(([t,n])=>{if(V(n))return Kk(Gk(r,t),n).length>0;if(Array.isArray(n)){let o=Array.isArray(r[t])?r[t]:[];return n.some(i=>!Jk(o,i))}return r[t]===void 0})}function Kk(r,e){return Object.entries(e).filter(([t])=>r[t]===void 0)}function OD(r,e,t,n){let o=Gk(e,t),i=Kk(o,n);if(i.length===0)return r;let a=r;if(e[t]!==void 0&&!V(e[t]))return Nt(a,[t],{...o,...Object.fromEntries(i)});for(let[s,c]of i)a=Nt(a,[t,s],c);return a}function Gk(r,e){return V(r[e])?r[e]:{}}function _D(r,e,t,n){let o=Array.isArray(e[t])?e[t]:[],i=n.filter(a=>!Jk(o,a));return i.length===0?r:Nt(r,[t],[...o,...i])}function Jk(r,e){return r.some(t=>ar(t,e))}var Cl=T("workspace.settings"),di=".gitignore",LD=di,ND=Dr.posix.join(Xt,di),WD="typescriptSupport",UD="jsonSchemaSupport",jD="frontendFrameworksSupport",Yk="json-schemas",BD="json-schema-support.json",Xk=Dr.posix.join(".agents","skills","succbi-frontend-development"),VD="succ-frontend-frameworks.json";function Qk(r){return r.workspaceSettingsUpdated||r.gitIgnoreUpdated||r.typeScriptSupportUpdated||r.jsonSchemaSupportUpdated||r.frontendDevelopmentSkillUpdated||r.agentFilesUpdated}async function Zk(r){let e=new pi(r),[t,n,o,i,a]=await Promise.all([e.hasUpdates(),pm(r,{apply:!1}),new Ea(r).previewMissingPaths(),vl(r.root),lm(r)]);return{workspaceRootPath:r.root,serverSupportAvailable:a!==void 0,actions:[{id:"workspace-settings",status:t?"pending":"up-to-date",paths:[dr(r.root)]},{id:"gitignore",status:n?"pending":"up-to-date",paths:[Dr.join(r.root,di),Dr.join(pr(r.root),di)]},{id:"agent-files",status:o.length>0?"pending":"up-to-date",paths:o},qD(r,i,a),$D(r,a),HD(r,a)]}}async function ew(r){return Sl(r,{applyWorkspaceConfiguration:!0,overwriteExistingTypeScriptSupport:!0,forceTypeScriptSupportRefresh:!0,forceJsonSchemaSupportRefresh:!0})}async function tw(r){let e=new pi(r),[t,n,o]=await Promise.all([vl(r.root),nw(r,e),lm(r)]),i=o!==void 0;return{initialized:!n&&(!i||t.length>0),existingTypeScriptSupportPaths:t,missingWorkspaceConfiguration:n,serverSupportAvailable:i}}async function Sl(r,e={}){let t=[],n=!1,o=!1,i=new pi(r);e.applyWorkspaceConfiguration===!0?(n=await pm(r,{apply:!0}),o=await i.initialize({applyWorkspaceConfiguration:e.applyWorkspaceConfiguration})):await nw(r,i)&&t.push({kind:"applyWorkspaceConfiguration",filePath:dr(r.root)});let a=await new Ea(r).initialize({applyWorkspaceConfiguration:e.applyWorkspaceConfiguration}),s=await lm(r),c=s?await new Ta(r).initialize({...s,applyWorkspaceConfiguration:e.applyWorkspaceConfiguration}):!1,l=s?await new Da(r).initialize({...e,...s},m=>t.push(m)):!1,p=s?await new xa(r).initialize({...s,applyWorkspaceConfiguration:e.applyWorkspaceConfiguration,forceRefresh:e.forceJsonSchemaSupportRefresh}):!1;return{workspaceSettingsUpdated:o,gitIgnoreUpdated:n,typeScriptSupportUpdated:l,jsonSchemaSupportUpdated:p,frontendDevelopmentSkillUpdated:c,agentFilesUpdated:a,confirmationRequests:t}}async function vl(r){return $k(r)}async function rw(r,e,t){try{await new Da(r).refreshOnServerVersionChange(e,t)}catch(n){Cl.warn(`refresh TypeScript support after server version change failed: ${r.root}`,n)}try{await new xa(r).refreshOnServerVersionChange(e,t)}catch(n){Cl.warn(`refresh JSON Schema support after server version change failed: ${r.root}`,n)}try{await new Ta(r).refreshOnServerVersionChange(e,t)}catch(n){Cl.warn(`refresh frontend development skill support after server version change failed: ${r.root}`,n)}}async function lm(r){try{let e=await r.requireClient();return{client:e,serverInfo:await e.getServerInfo()}}catch(e){Cl.debug(`skip server workspace support without server client: ${r.root}`,e);return}}async function nw(r,e){return await pm(r,{apply:!1})||await e.hasUpdates()}async function pm(r,e){let t=Dr.join(r.root,di),n=await Pa.read(t);n.upsertMarkedBlock(await Qr(LD));let o=Dr.join(pr(r.root),di),i=await Pa.read(o);if(i.upsertMarkedBlock(await Qr(ND)),e.apply){let a=await n.save(),s=await i.save();return a||s}return n.hasChanges()||i.hasChanges()}function qD(r,e,t){return t?zD(t.serverInfo,WD)?{id:"typescript-support",status:"pending",paths:e.length>0?e:[Wr(r.root,"succ-types")]}:{id:"typescript-support",status:"skipped",paths:e,reason:"server-capability-missing"}:{id:"typescript-support",status:"skipped",paths:e,reason:"server-support-unavailable"}}function $D(r,e){let t=[Wr(r.root,Yk),Wr(r.root,Yk,BD),dr(r.root)];return e?dm(e.serverInfo,UD)?{id:"json-schema-support",status:"pending",paths:t}:{id:"json-schema-support",status:"skipped",paths:t,reason:"server-capability-missing"}:{id:"json-schema-support",status:"skipped",paths:t,reason:"server-support-unavailable"}}function HD(r,e){let t=[Dr.join(r.root,...Xk.split("/")),Dr.join(r.root,...Xk.split("/"),VD)];return e?dm(e.serverInfo,jD)?{id:"frontend-development-skill",status:"pending",paths:t}:{id:"frontend-development-skill",status:"skipped",paths:t,reason:"server-capability-missing"}:{id:"frontend-development-skill",status:"skipped",paths:t,reason:"server-support-unavailable"}}function dm(r,e){return r.capabilities?.includes(e)===!0}function zD(r,e){return!r.capabilities||dm(r,e)}q();ia();var KD=/^\d+\.\d+\.\d+$/;async function iw(r,e){let t=ow(e.version);if(!t)return{downgrades:[]};let n=ow(r),o=hc(t,n);if(o===-1&&n){let i=[{kind:"server",currentVersion:t,baselineVersion:n}];return{downgrades:i,warningMessage:GD(i)}}return!n||o===void 0||o>0?{downgrades:[],newBaselineVersion:t}:{downgrades:[]}}function ow(r){let e=oa(r);if(e)return KD.test(e)?e:void 0}function GD(r){if(r.length===0)return;let e=r.map(t=>h("workspace.compat.serverVersion",t.currentVersion,t.baselineVersion));return[h("workspace.compat.connectedServerAppears"),...e].join(`
83
- `)}var Cm=b(require("fs")),Sm=b(require("path")),fw=b(hw());$();G();D();var fI=T("workspace.gitignore"),gI=".gitignore",yI=new Set([".git",".succapp","node_modules"]),Rl=class{constructor(e){this.workspaceRoot=e}matchers=[];async refresh(){let e=[];await this.collectIgnoreMatchers(this.workspaceRoot,"",e),this.matchers=e}matches(e){let t=Ne(e),n=!1;for(let[o,i]of this.matchers.entries()){if(this.isMatcherBaseIgnored(i,o))continue;let a=this.getScopedIgnoreDecision(i,t);a!==void 0&&(n=a)}return n}async collectIgnoreMatchers(e,t,n){let o;try{o=await Cm.promises.readdir(e,{withFileTypes:!0})}catch(a){if(F(a)){fI.debug(`skip unreadable gitignore directory: ${e}`);return}throw a}await this.addDirectoryGitIgnore(e,t,n);let i=o.filter(a=>a.isDirectory()&&!yI.has(a.name)).sort((a,s)=>a.name.localeCompare(s.name));for(let a of i){let s=t?`${t}/${a.name}`:a.name;await this.collectIgnoreMatchers(Sm.join(e,a.name),s,n)}}async addDirectoryGitIgnore(e,t,n){let o=Sm.join(e,gI),i;try{i=await Cm.promises.readFile(o,"utf-8")}catch(a){if(F(a))return;throw a}n.push({baseRelativePath:t,matcher:(0,fw.default)({allowRelativePaths:!0}).add(i)})}getScopedIgnoreDecision(e,t){let n=this.toScopedRelativePath(e.baseRelativePath,t);if(n===void 0||n==="")return;let o=this.testIgnore(e,n);if(o.ignored)return!0;if(o.unignored)return!1}testIgnore(e,t){let n=e.matcher.test(t);return n.ignored||n.unignored||t.endsWith("/")?n:e.matcher.test(`${t}/`)}isMatcherBaseIgnored(e,t){if(!e.baseRelativePath)return!1;let n=!1;for(let o=0;o<t;o++){let i=this.getScopedIgnoreDecision(this.matchers[o],e.baseRelativePath);i!==void 0&&(n=i)}return n}toScopedRelativePath(e,t){if(!e)return t;if(t===e)return"";let n=e+"/";if(t.startsWith(n))return t.slice(n.length)}};var Be=b(require("fs")),kw=b(require("os")),El=b(require("path")),ww=b(Tp());G();Ce();D();function Pw(r){return new vm(r)}var CI=10*6e4,SI=".lock.json",vI=".lock",gw=1,st=T("workspace.lock"),vm=class{root;identity;staleMs;locksDir;hostname;eventBus;listeners=new Set;activeLocks=new Set;eventListenerSubscription;lockWatcher;lockWatcherRequested=!1;lockWatchRefreshTimer;observedScopeHeld=new Map;nextLockId=1;disposed=!1;constructor(e){this.root=e.root,this.identity=e.identity??po(),this.staleMs=e.staleMs??CI,this.locksDir=El.join(this.root,".succapp","locks"),this.hostname=kw.hostname(),this.eventBus=e.eventBus,this.eventBus&&(this.eventListenerSubscription=this.eventBus.on("event.listener.changed",t=>{t.payload.id==="workspace.lock.changed"&&(t.payload.hasListeners?this.startLockWatcher():this.stopLockWatcher())}))}async withLock(e,t){U(!this.disposed,"WorkspaceLockManager has been disposed"),U(e.scopes&&e.scopes.length>0,"LockRequest.scopes must not be empty"),await Be.promises.mkdir(this.locksDir,{recursive:!0});let n=[...new Set(e.scopes)].sort(),o=new AbortController,i=this.nextLockId++,a={id:i,ownerId:`${process.pid}-${Date.now()}-${i}`,request:e,acquired:[],abortController:o,heartbeatTimer:void 0,heartbeatInFlight:void 0,releasing:!1};try{await this.acquireAllScopes(a,n)}catch(c){throw await this.releaseAllScopes(a),c}this.activeLocks.add(a);let s=this.buildHolders(a,n);try{for(let[c,l]of s)await this.writeHolderAtomic(this.holderPathFor(c),l)}catch(c){throw this.activeLocks.delete(a),await this.deleteAllHolders(a),await this.releaseAllScopes(a),c}this.startHeartbeat(a);for(let c of a.acquired)this.emitHolderChanged({scope:c.scope,holder:s.get(c.scope),reason:"acquired"});try{let c=await t(o.signal);if(Sw(a))throw new Ir(e.command);return c}catch(c){throw Sw(a)&&!(c instanceof Ir)?new Ir(e.command,{cause:c}):c}finally{a.releasing=!0,this.stopHeartbeat(a),await this.waitForHeartbeat(a),await this.deleteAllHolders(a),await this.releaseAllScopes(a),this.activeLocks.delete(a);for(let c of a.acquired)c.compromised||this.emitHolderChanged({scope:c.scope,holder:void 0,reason:"released"})}}async peekHolder(e){let t=this.holderPathFor(e),n;try{n=await Be.promises.readFile(t,"utf-8")}catch(i){if(F(i))return;st.debug(`peekHolder failed for ${e}`,i);return}let o=this.parseHolderJson(n,e);if(o)try{let i=await Be.promises.stat(t);return{...o,lastHeartbeat:new Date(i.mtimeMs).toISOString()}}catch(i){return F(i)||st.debug(`peekHolder stat failed for ${e}`,i),o}}async peekHolders(e=ci){let t=await Promise.all(e.map(async n=>{let o=await this.peekHolder(n);return[n,o]}));return new Map(t)}async isHeldLock(e){return this.isHeldLocally(e)?!0:!!await this.peekHolder(e)}isHeldLocally(e){for(let t of this.activeLocks)if(t.acquired.some(n=>n.scope===e&&!n.compromised))return!0;return!1}onHolderChanged(e){return this.listeners.add(e),{dispose:()=>{this.listeners.delete(e)}}}dispose(){if(!this.disposed){this.disposed=!0,this.eventListenerSubscription?.dispose(),this.eventListenerSubscription=void 0,this.stopLockWatcher();for(let e of[...this.activeLocks])e.releasing=!0,this.stopHeartbeat(e),e.abortController.abort("lock-manager-disposed"),(async()=>{await this.waitForHeartbeat(e),await this.deleteAllHolders(e),await this.releaseAllScopes(e)})().catch(t=>{st.debug("cleanup lock resources on dispose failed",t)});this.activeLocks.clear(),this.listeners.clear()}}async acquireAllScopes(e,t){for(let n of t){let o=await this.acquireSingleScope(e,n,t);e.acquired.push(o)}}async acquireSingleScope(e,t,n){let o=Date.now()+kI(e.request.wait),i;for(;;){let a=await this.findBlockingExistingLock(t);if(a.blocked){if(i=a.holder,!yw(o))throw new jn(e.request.command,n,t,vw(i));await Cw(o);continue}try{let s=await ww.lock(this.lockfilePathFor(t),{lockfilePath:this.lockfilePathFor(t),realpath:!1,stale:this.staleMs,retries:0,onCompromised:c=>this.onScopeCompromised(e,t,c)});return{scope:t,lockfilePath:this.lockfilePathFor(t),holderPath:this.holderPathFor(t),release:s,compromised:!1}}catch(s){if(!Ja(s))throw s;if(i=await this.peekHolder(t),yw(o)){await Cw(o);continue}throw new jn(e.request.command,n,t,vw(i))}}}async findBlockingExistingLock(e){try{await Be.promises.stat(this.lockfilePathFor(e))}catch(n){if(F(n))return{blocked:!1};throw n}let t=await this.peekHolder(e);return await this.tryClearStaleLock(e,t)?{blocked:!1}:{blocked:!0,holder:t}}async tryClearStaleLock(e,t){return t?t.hostname!==this.hostname||this.isProcessAlive(t.pid)||!await this.isLockDirStale(e)?!1:(st.info(`auto-clear stale lock scope=${e} pid=${t.pid} command=${t.command}`),this.removeLockFiles(e,t)):this.tryClearOrphanedLockDir(e)}async tryClearOrphanedLockDir(e){if(!await this.isLockDirStale(e))return!1;let t=this.lockfilePathFor(e),n=`${t}.stale-${process.pid}-${Date.now()}`;try{await Be.promises.rename(t,n)}catch(o){if(F(o))return!1;throw o}return st.info(`auto-clear orphan lock dir scope=${e}`),await Be.promises.rm(n,{recursive:!0,force:!0}).catch(o=>{st.debug(`delete orphan lock tombstone ${e} failed`,o)}),!0}async releaseAllScopes(e){for(let t of[...e.acquired].reverse())if(!t.compromised)try{await t.release()}catch(n){st.warn(`release scope ${t.scope} failed`,n)}}buildHolders(e,t){let n=new Date().toISOString(),o=e.request.source??this.identity.source,i=new Map;for(let a of t)i.set(a,{version:gw,ownerId:e.ownerId,pid:process.pid,hostname:this.hostname,source:o,command:e.request.command,scope:a,alsoHolds:t.filter(s=>s!==a),startTime:n,lastHeartbeat:n,agentVersion:this.identity.agentVersion});return i}async deleteAllHolders(e){for(let t of e.acquired)try{let n=await this.peekHolder(t.scope);if(!n||n.ownerId!==e.ownerId)continue;await Be.promises.unlink(t.holderPath)}catch(n){if(F(n))continue;st.debug(`delete holder json ${t.scope} failed`,n)}}startHeartbeat(e){let t=Math.max(1e3,Math.floor(this.staleMs/2)),n=setInterval(()=>{this.scheduleHeartbeat(e)},t);n.unref?.(),e.heartbeatTimer=n}stopHeartbeat(e){e.heartbeatTimer&&(clearInterval(e.heartbeatTimer),e.heartbeatTimer=void 0)}scheduleHeartbeat(e){if(e.releasing||e.heartbeatInFlight)return;let t=this.refreshHeartbeat(e).finally(()=>{e.heartbeatInFlight===t&&(e.heartbeatInFlight=void 0)});e.heartbeatInFlight=t}async waitForHeartbeat(e){e.heartbeatInFlight&&await e.heartbeatInFlight}async refreshHeartbeat(e){let t=new Date;for(let n of e.acquired)if(!(e.releasing||n.compromised))try{await Be.promises.utimes(n.holderPath,t,t)}catch(o){if(F(o))continue;st.debug(`heartbeat refresh failed for ${n.scope}`,o)}}onScopeCompromised(e,t,n){st.warn(`lock scope ${t} compromised during ${e.request.command}`,n);let o=e.acquired.find(a=>a.scope===t),i=o?.compromised??!1;o&&(o.compromised=!0),e.abortController.signal.aborted||e.abortController.abort(new Ir(e.request.command)),i||this.emitHolderChanged({scope:t,holder:void 0,reason:"compromised"})}async writeHolderAtomic(e,t){let n=`${e}.${process.pid}.${Date.now()}.tmp`;await Be.promises.writeFile(n,JSON.stringify(t,null,2),"utf-8");try{await Be.promises.rename(n,e)}catch(o){throw await Be.promises.unlink(n).catch(()=>{}),o}}parseHolderJson(e,t){try{let n=JSON.parse(e);return typeof n.pid!="number"||typeof n.hostname!="string"||typeof n.command!="string"||typeof n.source!="string"||!PI(n.source)||typeof n.ownerId!="string"||n.ownerId.length===0||typeof n.startTime!="string"?void 0:{version:gw,ownerId:n.ownerId,pid:n.pid,hostname:n.hostname,source:n.source,command:n.command,scope:n.scope??t,alsoHolds:Array.isArray(n.alsoHolds)?[...n.alsoHolds]:[],startTime:n.startTime,lastHeartbeat:typeof n.lastHeartbeat=="string"&&n.lastHeartbeat.length>0?n.lastHeartbeat:n.startTime,agentVersion:typeof n.agentVersion=="string"?n.agentVersion:""}}catch(n){st.debug(`parse holder json for ${t} failed`,n);return}}async isLockDirStale(e){try{return(await Be.promises.stat(this.lockfilePathFor(e))).mtimeMs<Date.now()-this.staleMs}catch(t){if(F(t))return!1;throw t}}async removeLockFiles(e,t){let n=this.lockfilePathFor(e),o=this.holderPathFor(e);if(!await this.isLockDirStale(e))return!1;let i=`${n}.stale-${process.pid}-${Date.now()}`;try{await Be.promises.rename(n,i)}catch(s){if(F(s))return!1;throw s}let a=!1;try{let s=await this.peekHolder(e);return RI(s,t)?(await Be.promises.unlink(o).catch(c=>{if(!F(c))throw c}),!0):(a=await this.restoreTombstoneLock(e,i),!1)}finally{a||await Be.promises.rm(i,{recursive:!0,force:!0}).catch(s=>{st.debug(`delete stale lock tombstone ${e} failed`,s)})}}async restoreTombstoneLock(e,t){let n=this.lockfilePathFor(e);try{return await Be.promises.rename(t,n),!0}catch(o){return F(o)||st.debug(`restore stale lock tombstone ${e} failed`,o),!1}}isProcessAlive(e){if(e<=0||!Number.isFinite(e))return!1;try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}emitHolderChanged(e){for(let t of[...this.listeners])try{t(e)}catch(n){st.warn(`holder changed listener threw for ${e.scope}`,n)}this.fireWorkspaceLockChanged(e.scope,e.reason==="acquired",e.holder)}startLockWatcher(){this.lockWatcherRequested=!0,!(this.disposed||this.lockWatcher)&&Be.promises.mkdir(this.locksDir,{recursive:!0}).then(()=>{this.disposed||!this.lockWatcherRequested||this.lockWatcher||(this.lockWatcher=Be.watch(this.locksDir,()=>{this.scheduleLockStateRefresh()}),this.lockWatcher.on("error",e=>{st.debug(`workspace lock watcher failed: ${this.root}`,e),this.closeLockWatcher(),this.scheduleLockWatcherRestart()}),this.scheduleLockStateRefresh(0))}).catch(e=>{st.debug(`start workspace lock watcher failed: ${this.root}`,e)})}stopLockWatcher(){this.lockWatcherRequested=!1,this.closeLockWatcher(),this.observedScopeHeld.clear()}closeLockWatcher(){this.lockWatchRefreshTimer&&(clearTimeout(this.lockWatchRefreshTimer),this.lockWatchRefreshTimer=void 0),this.lockWatcher&&(this.lockWatcher.close(),this.lockWatcher=void 0)}scheduleLockWatcherRestart(){if(!this.lockWatcherRequested||this.disposed)return;setTimeout(()=>this.startLockWatcher(),1e3).unref?.(),this.observedScopeHeld.clear()}scheduleLockStateRefresh(e=25){this.lockWatchRefreshTimer&&clearTimeout(this.lockWatchRefreshTimer),this.lockWatchRefreshTimer=setTimeout(()=>{this.lockWatchRefreshTimer=void 0,this.refreshObservedLockStates()},e),this.lockWatchRefreshTimer.unref?.()}async refreshObservedLockStates(){if(!(this.disposed||!this.lockWatcher))for(let e of ci)await this.refreshObservedLockState(e)}async refreshObservedLockState(e){if(this.isHeldLocally(e))return;let t=await this.peekHolder(e);if((t?!0:await this.lockFileExists(e))&&!t){this.scheduleLockStateRefresh(50);return}let o=!!t,i=this.observedScopeHeld.get(e);if(i===void 0&&!o){this.observedScopeHeld.set(e,!1);return}i!==o&&this.fireWorkspaceLockChanged(e,o,t)}async lockFileExists(e){try{return await Be.promises.stat(this.lockfilePathFor(e)),!0}catch(t){return F(t)||st.debug(`stat lock file failed for ${e}`,t),!1}}fireWorkspaceLockChanged(e,t,n){this.observedScopeHeld.set(e,t),this.eventBus?.fire(new $e("workspace.lock.changed",{root:this.root,scope:e,held:t,holder:n},this))}lockfilePathFor(e){return El.join(this.locksDir,`${e}${vI}`)}holderPathFor(e){return El.join(this.locksDir,`${e}${SI}`)}};function kI(r){return!r||r<=0?0:r*1e3}function yw(r){return Date.now()<r}async function Cw(r){let e=Math.max(0,Math.min(500,r-Date.now()));e>0&&await new Promise(t=>setTimeout(t,e))}var wI=new Set(Object.values(yi));function PI(r){return wI.has(r)}function Sw(r){return r.acquired.some(e=>e.compromised)}function RI(r,e){return r?.ownerId===e.ownerId}function vw(r){if(r)return{pid:r.pid,hostname:r.hostname,source:r.source,command:r.command,scope:r.scope,alsoHolds:r.alsoHolds,startTime:r.startTime,lastHeartbeat:r.lastHeartbeat,agentVersion:r.agentVersion}}var bl=b(require("fs")),Rw=b(require("path"));D();q();G();$();var km=T("workspace.connection"),hi=class{constructor(e){this.workspace=e}async change(e,t,n){return await this.workspace.ensureConfigLoaded(),this.workspace.lockManager.withLock({scopes:["config","sync"],command:"change-server-url",wait:this.workspace.lockWait},()=>this.doChange(e,t,n))}async connect(e,t){await this.workspace.ensureConfigLoaded();let n=this.workspace.config.resolveServerUrl(e);if(!n)throw new Error(`server not configured: ${e}`);if(t){let c=await this.withAuthContext(n,()=>ys(n,t)),l=await this.withAuthContext(n,()=>this.createVerifiedCredentialConnection(n,c));return await this.storeVerifiedConnectionCredential(n,c,l.client),await this.setActiveServerUrlForConnection(n),{serverUrl:n,connection:l}}if(!(await Cs(n))?.bearerToken)throw new ut({workspaceRoot:this.workspace.root,serverUrl:n});let i=this.createServerClient(n),a=await i.verify();km.info(`session restored: ${n}`);let s={serverUrl:n,connection:{client:i,serverInfo:a}};return await this.setActiveServerUrlForConnection(n),s}async doChange(e,t,n){let o=this.workspace.config.resolveServerUrl(e);if(!o)throw new Error(h("workspace.server.serverNotConfigured",e));let i=this.workspace.config.validateServerUrlChange(o,t),a=n?await this.withAuthContext(i,()=>ys(i,n)):void 0,s=a?await this.withAuthContext(i,()=>this.createVerifiedCredentialConnection(i,a)):void 0,c=vr(o),l=vr(i),p=this.workspace.getMirrorRoot(o),m=this.workspace.getMirrorRoot(i),g=!1,d=!1,f="";try{if(c!==l&&await Z(p)){if(await Z(m))throw new Error(h("workspace.server.serverMirrorExists",m));await bl.promises.mkdir(Rw.dirname(m),{recursive:!0}),await bl.promises.rename(p,m),g=!0}return f=await this.workspace.config.changeServerUrl(o,i),d=!0,a&&s&&await this.storeVerifiedConnectionCredential(f,a,s.client),{oldServerUrl:o,serverUrl:f,connection:s}}catch(y){throw await this.rollbackServerUrlChange({configChanged:d,changedServerUrl:f,oldConfiguredServerUrl:o,mirrorMoved:g,oldMirrorRoot:p,newMirrorRoot:m}),y}}async rollbackServerUrlChange(e){if(e.configChanged)try{await this.workspace.config.changeServerUrl(e.changedServerUrl,e.oldConfiguredServerUrl)}catch(t){km.warn(`rollback server config failed: ${e.changedServerUrl} -> ${e.oldConfiguredServerUrl}`,t)}if(e.mirrorMoved)try{await bl.promises.rename(e.newMirrorRoot,e.oldMirrorRoot)}catch(t){km.warn(`rollback server mirror failed: ${e.newMirrorRoot} -> ${e.oldMirrorRoot}`,t)}}async setActiveServerUrlForConnection(e){await this.workspace.lockManager.withLock({scopes:["config","sync"],command:"switch-active-server",wait:this.workspace.lockWait},async()=>{await this.workspace.config.setActiveServerUrl(e)})}async withAuthContext(e,t){try{return await t()}catch(n){throw n instanceof ut&&n.withContext({workspaceRoot:this.workspace.root,serverUrl:e}),n}}async createVerifiedCredentialConnection(e,t){let n=this.createServerClient(e,{initialCredential:this.toInitialCredential(e,t)}),o=await n.verify();return{client:n,serverInfo:o}}async storeVerifiedConnectionCredential(e,t,n){await Vp(e,t)}createServerClient(e,t={}){return new un(e,{workspaceRoot:this.workspace.root,authPolicy:"auto",...t})}toInitialCredential(e,t){return{serverUrl:e,username:t.username,userId:t.userId,authType:t.authType,methods:t.methods,bearerToken:{type:"token",authType:t.authType,token:t.token.value,expiresAt:t.token.expiresAt,scope:t.token.scope,updatedAt:t.verifiedAt},lastLoginAt:t.verifiedAt,updatedAt:t.verifiedAt}}};var ct=T("workspace"),EI=6e4,wm=class{constructor(e,t,n,o=ya){this.root=e;this.eventBus=t;this.lockWait=o;this.client=n,this.config=new Xc(e,t,Fu()),this.gitIgnore=new Rl(e),this.lockManager=Pw({root:e,eventBus:t}),this.disposables.add(this.lockManager),n&&this.setClient(n),this.syncStatusTracker=new pl(this),this.disposables.add(this.eventBus.on("workspace.config.changed",i=>{i.payload.root===this.root&&this.onConfigChanged()})),this.startAutoSyncScheduler()}disposables=new Dn;config;clients=new Map;pendingClientTasks=new Map;client;syncStatusTracker;gitIgnore;lockManager;fileChangeRefresh;metadataVersions={};initialized=!1;connectionInitializing=!1;autoSyncScheduler=null;startAutoSyncScheduler(){if(po().source!=="ide")return;let e={onAutoPush:async()=>{let n=this.syncStatusTracker.getLocalChanges();if(n.length===0||await this.shouldYieldAutoSync())return;await this.createSyncService({agentSource:"auto-sync"}).push({changes:n})},onAutoPull:async()=>{if(await this.shouldYieldAutoSync())return;await this.createSyncService({agentSource:"auto-sync"}).pull()}},t=new Qc(this.root,this.eventBus,e);this.autoSyncScheduler=t,this.disposables.add(this.eventBus.on("settings.changed",n=>{n.payload.changedKeys.some(o=>o==="sync.autoPush"||o==="sync.autoPull"||o==="sync.autoPullInterval")&&this.autoSyncScheduler?.refreshAutoSync()})),this.disposables.add(t),t.startAutoPull()}get activeServerUrl(){return this.client?.connected?this.client.serverUrl:this.config.getActiveServerUrl()}get isConnected(){return!!this.client?.connected}async ensureConfigLoaded(){await this.config.ensureLoaded()}async ensureActiveServerReady(){await this.ensureConfigLoaded();let e=this.activeServerUrl;if(!e)throw new dt(e);return e}async requireClient(){return this.requireServerClient()}async requireServerClient(e){await this.ensureConfigLoaded();let t=e??this.config.getActiveServerUrl();if(!t)throw new dt(t);let n=this.resolveConfiguredServerUrl(t),o=this.getConnectedClient(n);return o||(o=await this.createDetachedClient(n)),e===void 0&&(this.client=o,this.updateConnectionStatus()),this.createDiagnosticClient(o)}async resolveRemoteFilePath(e){let t=await this.resolveRemoteFilePathServerUrl(e.serverUrl),n=e.serverUrl?await this.requireServerClient(t):await this.requireServerClient(),o=await this.resolveWorkspaceRemoteFilePath(e.path,t,n);return{path:e.path,remotePath:o,serverUrl:t}}async resolveRemoteFilePathServerUrl(e){return e?(await this.ensureConfigLoaded(),this.resolveConfiguredServerUrl(e)):this.ensureActiveServerReady()}async resolveWorkspaceRemoteFilePath(e,t,n){let o=new Mt(this.getMirrorRoot(t));return new ti({workspaceRoot:this.root,mirror:o,workspace:new rr(this.root,o),getServerProjects:()=>n.getProjects()}).resolve(e,"server-backed")}getConnectedClient(e){let t=this.clients.get(vr(e));if(t?.connected)return t}setClient(e){return this.clients.set(vr(e.serverUrl),e),e}discardServerClientCache(...e){let t=new Set(e.map(n=>vr(n)));for(let n of t)this.clients.delete(n),this.pendingClientTasks.delete(n);this.client&&t.has(vr(this.client.serverUrl))&&(this.client=void 0)}applyServerConnection(e,t={}){this.client=this.setClient(e.client),this.updateMetadataVersions(e.serverInfo),this.updateConnectionStatus(),this.refreshSyncStatusAfterConnection(t),t.refreshWorkspaceSupport!==!1&&this.refreshWorkspaceSupportIfNeeded(e.serverInfo)}createDiagnosticClient(e){return ES(e)}async createDetachedClient(e){if(await this.ensureConfigLoaded(),!this.config.hasServer(e))throw new dt(e);let t=vr(e),n=this.pendingClientTasks.get(t);if(n)return n;let o=this.doCreateDetachedClient(e).finally(()=>{this.pendingClientTasks.delete(t)});return this.pendingClientTasks.set(t,o),o}async doCreateDetachedClient(e){let t=new un(e,{workspaceRoot:this.root,authPolicy:"auto"}),n=await t.verify();if(this.updateMetadataVersions(n),!this.config.hasServer(e))throw new dt(e);return this.setClient(t)}resolveConfiguredServerUrl(e){let t=this.config.resolveServerUrl(e);if(!t)throw new dt(e);return t}async listWorkspaceProjects(){await this.ensureConfigLoaded();let e=new rr(this.root,this.createWorkspaceListingMirror());return this.toProjectNames(await e.listProjectPaths())}async listBaselineProjects(e){await this.ensureConfigLoaded();let t=e??this.activeServerUrl;if(!t)return[];let n=new Mt(this.getMirrorRoot(t));return this.toProjectNames(await n.listProjectPaths())}getMetaProjectLocalPath(e){let t=e.trim();if(!t||t.includes("/")||t.includes("\\"))throw new Error(`invalid metadata project name: ${e}`);return this.getMetaFileLocalPath("/"+t)}getMetaFileLocalPath(e){return Lg(this.root,e)}async countWorkspaceFiles(e,t){return await this.ensureConfigLoaded(),new rr(this.root,this.createWorkspaceListingMirror()).countFiles(e,t)}async startIdeRuntime(){this.initialized||await Ur(this,"startIdeRuntime",async()=>{await this.doStartIdeRuntime(),this.initialized=!0})}async waitInitialized(){this.initialized||await Kp(this,"startIdeRuntime")?.catch(()=>{})}async doStartIdeRuntime(){let e=!1;this.connectionInitializing=!0;try{await this.config.load(),this.syncStatusTracker.startBackgroundRemoteDiscovery({intervalMs:EI}),this.fireConnectionStateChanged(!0),await this.refreshGitIgnore(),this.initializeFileWatcher(),await this.tryAutoConnect({refreshSyncStatus:!1}),e=!0}finally{this.connectionInitializing=!1,this.fireConnectionStateChanged()}e&&this.refreshSyncStatus().catch(t=>{ct.warn(`refresh sync status after IDE runtime start failed: ${this.root}`,t)})}applySyncOperationResult(e,t=[]){this.syncStatusTracker.applyOperationResult(e,t)}applyFileWatchSyncStatus(e,t){this.syncStatusTracker.applyFileWatchResult(e,t)}clearSyncStatus(){this.syncStatusTracker.clear()}async refreshSyncStatus(e){await this.refreshSyncStatusState({task:e})}async refreshSyncStatusState(e={}){await this.ensureConfigLoaded();let t=["refreshSyncStatus",e.scope??"both",e.forceRefresh===!0?"force":"normal"].join(":"),n=e.task,o=!!Kp(this,t),i=Ur(this,t,()=>(ct.info("refresh sync status start: {0}",this.root),this.onSyncStatusRefreshing(),this.syncStatusTracker.refreshAll(e)));o&&n&&n.start(1);let a=await i;return n&&o&&n.step(1),o||ct.info("refresh sync status done: {0}",this.root),a}getSyncChanges(){return this.syncStatusTracker.getChanges()}getSyncSummary(){return this.syncStatusTracker.getSummary()}refreshGitIgnore(){return this.gitIgnore.refresh()}isGitIgnored(e){return this.gitIgnore.matches(e)}getSyncStatusTracker(){return this.syncStatusTracker}async consumeFileChanges(e,t={}){if(e.some(o=>{if(yr.basename(o.filePath)!==".gitignore")return!1;let i=yr.relative(this.root,yr.resolve(o.filePath));return!!i&&!i.startsWith("..")&&!yr.isAbsolute(i)})){await this.refreshGitIgnore(),await this.refreshSyncStatus();return}return this.syncStatusTracker.consumeFileChanges(e,t)}clearSyncStatusTargets(e){this.syncStatusTracker.clearTargets(e)}notifySyncStatusChanged(){this.fireSyncStatusChanged()}initializeFileWatcher(){if(this.fileChangeRefresh)return;let e=Fu();e&&(this.fileChangeRefresh=new dl(this,this.eventBus,e,{},this.lockManager))}cancelPendingSyncStatusRefresh(){this.fileChangeRefresh?.cancelPendingRefresh()}async flushPendingFileChangeRefresh(){await this.fileChangeRefresh?.flushPendingRefresh()}onSyncStatusRefreshing(){this.cancelPendingSyncStatusRefresh()}async addServer(e){return this.lockManager.withLock({scopes:["config","sync"],command:"add-server",wait:this.lockWait},async()=>(await this.config.addServer(e),this.config.getActiveServerUrl()))}async verifyServerReachable(e){let t=Se(e);return await gs(t),t}async removeServer(e){return await this.ensureConfigLoaded(),this.lockManager.withLock({scopes:["config","sync"],command:"remove-server",wait:this.lockWait},async()=>{let t=this.config.getActiveServerUrl(),n=this.config.resolveServerUrl(e)??e;await this.config.removeServer(e),this.discardServerClientCache(n);let o=t!==this.config.getActiveServerUrl();return o&&(this.updateMetadataVersions(),this.updateConnectionStatus()),o})}async changeServerUrl(e,t,n){let o=await new hi(this).change(e,t,n);return this.discardServerClientCache(o.oldServerUrl,o.serverUrl),o.connection&&(this.applyServerConnection(o.connection),ct.info(`login succeeded: ${o.serverUrl}`)),o.serverUrl}async switchActiveServer(e){await this.ensureConfigLoaded();let t=this.config.resolveServerUrl(e);if(!t)throw new Error(h("workspace.server.serverNotConfigured",e));return await this.lockManager.withLock({scopes:["config","sync"],command:"switch-active-server",wait:this.lockWait},async()=>{await this.config.setActiveServerUrl(t)}),this.config.getActiveServerUrl()}async readTargetStatusSnapshot(e){await this.ensureConfigLoaded();try{let[t,n,o,i]=await Promise.all([this.readTargetSideSnapshot(this.root,e.remotePath,{returnStat:!0}),this.readTargetSideSnapshot(this.getMirrorRoot(),e.remotePath,{returnStat:!0}),Ie(this.root,e.remotePath),Ie(this.getMirrorRoot(),e.remotePath)]),a=await this.isTargetContentChanged(e.remotePath,t,n);return a===void 0?this.unknownTargetStatusSnapshot(e.remotePath):{remotePath:e.remotePath,workspace:{...t,fileId:o?.id,identity:t.identity??o?.id},mirror:{...n,fileId:i?.id,identity:n.identity??i?.id},contentChanged:a,metaChanged:!this.isMetaInfoEqual(o,i)}}catch(t){return ct.debug(`read target status snapshot failed: ${e.remotePath}`,t),this.unknownTargetStatusSnapshot(e.remotePath)}}async readTargetSideSnapshot(e,t,n={}){try{let o=await Tl.promises.stat(te(e,t)),i=o.isFile()?"file":o.isDirectory()?"folder":"unknown",a=n.returnStat&&o.isFile()?{size:o.size,mtimeMs:o.mtimeMs}:void 0;return{kind:i,contentStat:a}}catch(o){if(F(o))return ct.debug(`target side path does not exist: ${e}:${t}`),{kind:"missing"};throw o}}async isTargetContentChanged(e,t,n){if(t.kind!=="file"||n.kind!=="file")return!1;let o=t.contentStat,i=n.contentStat;if(o&&i)return this.compareFileContentStats(o,i);try{let[a,s]=await Promise.all([Tl.promises.stat(te(this.root,e)),Tl.promises.stat(te(this.getMirrorRoot(),e))]);return this.compareFileContentStats(a,s)}catch(a){ct.debug(`cannot compare target stat cache for ${e}`,a);return}}compareFileContentStats(e,t){if(e.size!==t.size)return!0;if(e.mtimeMs===t.mtimeMs)return!1}isMetaInfoEqual(e,t){return!e&&!t?!0:!e||!t?!1:no(e,t)}unknownTargetStatusSnapshot(e){return{remotePath:e,workspace:{kind:"unknown"},mirror:{kind:"unknown"}}}async tryAutoConnect(e={}){await this.ensureConfigLoaded();let t=this.config.getActiveServerUrl();if(!t)return;let n=this.getConnectedClient(t);if(n){this.client=n,this.updateConnectionStatus();return}try{let o=await new hi(this).connect(t);this.applyServerConnection(o.connection,e)}catch(o){if(!(o instanceof ut))throw o;ct.debug(`stored credential invalid for ${t}`,o),this.updateConnectionStatus()}}async connect(e,t){let n=await new hi(this).connect(e,t);return t&&this.discardServerClientCache(n.connection.client.serverUrl),this.applyServerConnection(n.connection),t&&ct.info(`login succeeded: ${n.connection.client.serverUrl}`),!0}disconnect(){this.client&&this.discardServerClientCache(this.client.serverUrl),this.updateMetadataVersions(),this.updateConnectionStatus(),ct.info("disconnected")}updateConnectionStatus(){this.connectionInitializing||this.fireConnectionStateChanged()}onConfigChanged(){let e=this.client;e&&e.serverUrl!==this.config.getActiveServerUrl()&&(this.cancelPendingSyncStatusRefresh(),this.clearSyncStatus(),this.discardServerClientCache(e.serverUrl),this.updateMetadataVersions(),this.updateConnectionStatus())}refreshSyncStatusAfterConnection(e={}){e.refreshSyncStatus!==!1&&this.refreshSyncStatus().catch(t=>{ct.warn(`refresh sync status after connection failed: ${this.root}`,t)})}async refreshWorkspaceSupportIfNeeded(e){let t=this.client;if(t)try{let n=this.createDiagnosticClient(t),o=e??await n.getServerInfo();this.updateMetadataVersions(o),await this.warnIfServerLooksOlder(o),await rw(this,n,o)}catch(n){ct.warn(`refresh workspace support after server version change failed: ${this.root}`,n)}finally{this.updateConnectionStatus()}}async warnIfServerLooksOlder(e){try{let t=this.config.getServerVersion(),n=await iw(t,e);if(n.newBaselineVersion&&await this.lockManager.withLock({scopes:["config"],command:"set-server-version",wait:this.lockWait},async()=>{await this.config.setServerVersion(n.newBaselineVersion)}),!n.warningMessage)return;this.eventBus.fire(new $e("user.notification.requested",{level:"warning",message:n.warningMessage},this))}catch(t){ct.warn(`check server compatibility baseline failed: ${this.root}`,t)}}fireConnectionStateChanged(e=!1){this.eventBus.fire(new $e("workspace.connection.changed",{root:this.root,connected:this.isConnected,serverUrl:this.activeServerUrl,initializing:e},this))}notifySyncStatusRefreshing(e,t){this.eventBus.fire(new $e("workspace.sync.status.refreshing",{root:this.root,refreshTask:e,progressVisible:t},this))}fireSyncStatusChanged(){this.eventBus.fire(new $e("workspace.sync.status.changed",{root:this.root},this))}createSyncService(e){return zu(this,e)}async checkWorkspaceSettings(){return tw(this)}async initializeWorkspaceSettings(e=ht.INSTANCE){if(ct.info("initialize workspace settings start"),e.start(1),(await vl(this.root)).length>0){await Sl(this,{applyWorkspaceConfiguration:!0}),e.step(1),ct.info("initialize workspace settings done");return}await Sl(this,{applyWorkspaceConfiguration:!0,overwriteExistingTypeScriptSupport:!0,forceTypeScriptSupportRefresh:!0,forceJsonSchemaSupportRefresh:!0}),e.step(1),ct.info("initialize workspace settings done")}notifyLocalProjectsChanged(){this.eventBus.fire(new $e("workspace.local.projects.changed",{root:this.root,serverUrl:this.activeServerUrl},this))}getMetadataVersionInfos(){return this.metadataVersions}getMetadataVersionInfo(e){return this.metadataVersions[e]??this.metadataVersions[e.toLowerCase()]}getMetadataVersionInfoByPath(e){return this.getMetadataVersionInfo(hs(e))}updateMetadataVersions(e){let t=e?.metadataVersions??{},n={};for(let[o,i]of Object.entries(t)){let a=(i.metaType||o).toLowerCase();n[a]={...i,metaType:a,fileMatch:i.fileMatch??[]}}this.metadataVersions=n}dispose(){this.disposables.dispose(),this.config.dispose(),this.syncStatusTracker.dispose(),this.fileChangeRefresh?.dispose(),this.fileChangeRefresh=void 0}async shouldYieldAutoSync(){let e=await this.lockManager.peekHolders(["config","sync"]),t=this.lockManager.staleMs;for(let n of e.values()){if(!n)continue;if(Date.now()-new Date(n.lastHeartbeat).getTime()<t&&(n.source==="ide"||n.source==="cli"))return ct.info(`auto-sync yield to ${n.command}`),!0}return!1}getMirrorRoot(e=this.activeServerUrl){return yr.join(this.root,".succapp","remote",vr(e))}createWorkspaceListingMirror(){let e=this.activeServerUrl?this.getMirrorRoot(this.activeServerUrl):yr.join(this.root,".succapp","remote","__workspace__");return new Mt(e)}toProjectNames(e){return e.map(t=>t.replace(/^\//,"")).sort((t,n)=>t.localeCompare(n))}};function xl(r){return new wm(r.root,r.eventBus,r.client,r.lockWait)}var Pm=class extends de{toOptions(e){return{setup:e.has("setup")}}async executeCommand(e,t){let n=Ew.resolve(e.cwd,e.config.workspace??".");await ks(n);let o=Fe("server"),i=e.config.server?Vr(e.config.server,{input:o,option:o,flag:"server"}):void 0,a=e.workspace===void 0,s=e.workspace??xl({root:n,eventBus:e.eventBus,lockWait:e.config.lockTimeout});try{let c=await this.initializeWorkspace(s,e,t,i);return e.output.result({...c},()=>xI(c)),0}finally{a&&s.dispose()}}async initializeWorkspace(e,t,n,o){let i=await this.initializeConfig(e,t,o);return n.setup&&await e.initializeWorkspaceSettings(t.task),{...i,setup:n.setup}}async initializeConfig(e,t,n){let o;return await e.lockManager.withLock({scopes:["config"],command:"init",wait:t.config.lockTimeout},async()=>{await e.config.ensureLoaded();let i=e.config.get();if(i===void 0&&await Z(e.config.path))throw new E("err.cli.invalidWorkspaceConfigJson",{inputId:"workspaceConfig",source:e.config.path,context:{workspace:e.root,configPath:e.config.path}});if(n){o=await bI(e,n);return}let a=i===void 0;a&&await e.config.ensureFile(),o={workspace:e.root,configPath:e.config.path,initialized:a,activeServer:e.config.get()?.activeServerUrl||void 0}}),U(o,"init command did not produce a result"),o}},bw={path:["workspace","init"],domain:"workspace",spec:{name:"workspace init",flags:[{name:"server",takesValue:!0,valueHint:"url"},{name:"setup",takesValue:!1}],positionals:[],usageArgs:"[<options>]",examples:["succapp workspace init","succapp -C /path/to/workspace workspace init --server=http://localhost:8180/bi","succapp workspace init --server=https://bi.example.com --setup --json"]},workspaceTarget:"optional",allowUninitializedWorkspaceTarget:!0,serverTarget:"none",lockUsage:"workspace-write",createExecutor:()=>new Pm};async function bI(r,e){let t=r.config.get(),n=t?.activeServerUrl||void 0;if(!t||TI(t))return await r.config.initialize(e),{workspace:r.root,configPath:r.config.path,initialized:!0,activeServer:e};if(!n||!Qe(e,n)){let o=Fe("server");throw new E("err.cli.serverMismatch",{input:o,option:o,value:e,expected:n||h("cli.out.value.none"),context:{workspace:r.root,target:e,active:n}})}return{workspace:r.root,configPath:r.config.path,initialized:!1,activeServer:n}}function TI(r){return(r.servers?.length??0)===0&&!r.activeServerUrl}function xI(r){let e=r.initialized?h("cli.cmd.workspace.init.initWorkspace",r.workspace):h("cli.cmd.workspace.init.workspaceInit",r.workspace),t=r.activeServer?`
84
- ${h("cli.cmd.workspace.init.active",r.activeServer)}`:"",n=r.setup?`
85
- ${h("cli.cmd.workspace.init.supportFiles")}`:"";return`${e}${t}${n}`}q();var Rm=class extends ge{toOptions(e){return{paths:e.positional,force:e.has("force")}}async executeSyncCommand(e,t,n,o){let i=await t.pull({paths:o.paths.length>0?[...o.paths]:void 0,force:o.force,task:n.task});return n.output.result({workspace:e.root,server:e.activeServerUrl,summary:{updated:i.updated.length,deleted:i.deleted.length,conflicts:i.conflicts.length,oldFiles:i.oldFiles.length},updated:i.updated,deleted:i.deleted,conflicts:i.conflicts.map(vn),oldFiles:i.oldFiles.map(qr)},()=>FI(i)),i.conflicts.length>0?6:0}},xw={path:["workspace","pull"],domain:"workspace",spec:{name:"workspace pull",flags:[{name:"force",alias:"f",takesValue:!1}],positionals:[{name:"path",repeatable:!0}],usageArgs:"[<options>] [--] [<path>...]",examples:["succapp workspace pull","succapp workspace pull demo/views/sales.view","succapp workspace pull --force /DEMO/views/sales.view"]},workspaceTarget:"required",serverTarget:"required",lockUsage:"workspace-write",createExecutor:()=>new Rm};function FI(r){if(r.updated.length===0&&r.deleted.length===0&&r.conflicts.length===0)return Tw([h("cli.cmd.workspace.pull.upDate")],r.oldFiles);let e=[h("cli.cmd.workspace.pull.pullResultUpdated",r.updated.length,r.deleted.length,r.conflicts.length)];return(r.updated.length>0||r.deleted.length>0)&&e.push(MI(r)),r.conflicts.length>0&&(e.push(h("cli.cmd.workspace.pull.conflicts",r.conflicts.length)),e.push(Zn(r.conflicts))),Tw(e,r.oldFiles)}function MI(r){return ke({columns:[h("cli.out.header.type"),h("cli.out.header.remote")],rows:[...r.updated.map(e=>[h("cli.out.value.updated"),e]),...r.deleted.map(e=>[h("cli.out.value.deleted"),e])]})}function Tw(r,e){return e.length>0&&(r.push(h("cli.cmd.workspace.pull.oldMeta",e.length)),r.push(As(e))),r.join(`
86
- `)}q();var Em=class extends ge{toOptions(e){return{paths:e.positional,force:e.has("force")}}async executeSyncCommand(e,t,n,o){let i=await t.push({paths:o.paths.length>0?[...o.paths]:void 0,force:o.force,task:n.task}),a=AI(i.metadataVersionSuggestions??[]);return n.output.result({workspace:e.root,server:e.activeServerUrl,summary:{pushed:i.pushed.length,rejected:i.rejected.length,failures:i.failures.length,metadataVersionSuggestions:i.metadataVersionSuggestions?.length??0,olderMetadataVersionSuggestions:a.older,newerMetadataVersionSuggestions:a.newer},pushed:i.pushed,rejected:i.rejected.map(vn),failures:i.failures.map(Ms),metadataVersionSuggestions:(i.metadataVersionSuggestions??[]).map(Ds)},()=>II(i,a)),DI(i)}},Fw={path:["workspace","push"],domain:"workspace",spec:{name:"workspace push",flags:[{name:"force",alias:"f",takesValue:!1}],positionals:[{name:"path",repeatable:!0}],usageArgs:"[<options>] [--] [<path>...]",examples:["succapp workspace push","succapp workspace push demo/views/sales.view","succapp workspace push --force demo/views/sales.view"]},workspaceTarget:"required",serverTarget:"required",lockUsage:"workspace-write",createExecutor:()=>new Em};function DI(r){return r.rejected.length>0?6:r.failures.length>0?1:0}function II(r,e){if(r.pushed.length===0&&r.rejected.length===0&&r.failures.length===0)return h("cli.cmd.workspace.push.noLocalChanges");let t=[h("cli.cmd.workspace.push.pushResultPushed",r.pushed.length,r.rejected.length,r.failures.length)];r.pushed.length>0&&(t.push(h("cli.cmd.workspace.push.pushedFiles",r.pushed.length)),t.push(OI(r.pushed))),r.rejected.length>0&&(t.push(h("cli.cmd.workspace.push.pushBlockedRemote",r.rejected.length)),t.push(Zn(r.rejected))),r.failures.length>0&&(t.push(h("cli.cmd.workspace.push.failed",r.failures.length)),t.push(_I(r.failures)));let n=r.metadataVersionSuggestions??[];return n.length>0&&(t.push(h("cli.cmd.workspace.push.metaVersions",e.older,e.newer)),t.push(LI(n))),t.join(`
87
- `)}function AI(r){let e=0,t=0;for(let n of r)n.kind==="newer"?t++:e++;return{older:e,newer:t}}function OI(r){return ke({columns:[h("cli.out.header.path")],rows:r.map(e=>[e])})}function _I(r){return ke({columns:[h("cli.out.header.path"),h("cli.out.header.error")],rows:r.map(e=>[e.path,kn(e.errorInfo)])})}function LI(r){return ke({columns:[h("cli.out.header.path"),h("cli.cmd.workspace.push.version"),h("cli.cmd.workspace.push.targetVersion"),h("cli.cmd.workspace.push.kind")],rows:r.map(e=>[e.path,e.currentVersion??"",e.targetVersion,Is(e.kind)])})}var bm=class extends ge{toOptions(e){return{checks:Zs(e.values("only")),paths:e.positional,dryRun:e.has("dry-run")}}async executeSyncCommand(e,t,n,o){if(o.dryRun){let a=await t.fsckWorkspace({...Ji(o),task:n.task});return n.output.result(SS(a),()=>wS(a)),a.issues.some(s=>!s.repairable)?1:0}let i=await t.repairWorkspace({...Ji(o),task:n.task});return n.output.result(vS(i),()=>PS(i)),i.unresolved.length>0?1:0}},Mw={path:["workspace","repair"],domain:"workspace",spec:{name:"workspace repair",flags:[{name:"only",takesValue:!0,repeatable:!0,valueHint:"item"},{name:"dry-run",takesValue:!1}],positionals:[{name:"path",repeatable:!0}],usageArgs:"[<options>] [--] [<path>...]",examples:["succapp workspace repair --dry-run","succapp workspace repair --only=missing-baseline","succapp workspace repair /DEMO_BLANK --json"]},workspaceTarget:"required",serverTarget:"required",lockUsage:"workspace-write",createExecutor:()=>new bm};q();ne();var Tm=class extends ce{toOptions(e){return{dryRun:e.has("dry-run")}}async executeWorkspaceCommand(e,t,n){if(n.dryRun){let i=await Zk(e);return t.output.result(NI(i),()=>jI(i)),0}let o=await e.lockManager.withLock({scopes:["init"],command:"workspace-setup",wait:t.config.lockTimeout},()=>ew(e));return t.output.result(WI(e,o),()=>BI(o)),0}},Dw={path:["workspace","setup"],domain:"workspace",spec:{name:"workspace setup",flags:[{name:"dry-run",takesValue:!1}],positionals:[],usageArgs:"[<options>]",examples:["succapp workspace setup --dry-run","succapp workspace setup"]},workspaceTarget:"required",serverTarget:"none",lockUsage:"workspace-write",createExecutor:()=>new Tm};function NI(r){return{workspace:r.workspaceRootPath,dryRun:!0,serverSupportAvailable:r.serverSupportAvailable,summary:Iw(r.actions),actions:r.actions.map(UI)}}function WI(r,e){return{workspace:r.root,dryRun:!1,updated:Qk(e),summary:{updated:Aw(e),confirmationRequests:e.confirmationRequests.length},items:{workspaceSettings:e.workspaceSettingsUpdated,gitIgnore:e.gitIgnoreUpdated,typeScriptSupport:e.typeScriptSupportUpdated,jsonSchemaSupport:e.jsonSchemaSupportUpdated,frontendDevelopmentSkill:e.frontendDevelopmentSkillUpdated,agentFiles:e.agentFilesUpdated},confirmationRequests:e.confirmationRequests.map(t=>({kind:t.kind,filePath:t.filePath}))}}function UI(r){return A({id:r.id,status:r.status,paths:r.paths,reason:r.reason})}function Iw(r){return{pending:r.filter(e=>e.status==="pending").length,upToDate:r.filter(e=>e.status==="up-to-date").length,skipped:r.filter(e=>e.status==="skipped").length}}function Aw(r){return[r.workspaceSettingsUpdated,r.gitIgnoreUpdated,r.typeScriptSupportUpdated,r.jsonSchemaSupportUpdated,r.frontendDevelopmentSkillUpdated,r.agentFilesUpdated].filter(Boolean).length}function jI(r){let e=Iw(r.actions),t=[h("cli.cmd.workspace.setup.dry",e.pending,e.upToDate,e.skipped)];for(let n of r.actions)t.push(` ${n.id}: ${n.status}${n.reason?` (${n.reason})`:""}`);return t.join(`
88
- `)}function BI(r){let e=Aw(r);if(e===0&&r.confirmationRequests.length===0)return h("cli.cmd.workspace.setup.clean");let t=[h("cli.cmd.workspace.setup.updated",e,r.confirmationRequests.length)];for(let n of r.confirmationRequests)t.push(` ${n.kind}: ${n.filePath}`);return t.join(`
89
- `)}q();J();var xm=class extends ge{toOptions(e){return{paths:e.positional,localOnly:e.has("local-only"),forceRefresh:e.has("force-refresh")}}async executeSyncCommand(e,t,n,o){let i=await t.status({refreshAll:!0,scope:o.localOnly?"local":"both",forceRefresh:o.forceRefresh,paths:[...o.paths],task:n.task}),a=Ny(i);for(let s of i.warnings??[])n.output.warning(s.errorCode==="err.login.notlogin"?h("cli.cmd.workspace.status.remoteAuthRequired"):s.errorCode);return n.output.result({workspace:e.root,server:e.activeServerUrl,summary:a,changes:i.changes.map(vn),...i.warnings?.length?{warnings:i.warnings.map(s=>({errorCode:s.errorCode,...s.properties?{properties:s.properties}:{}}))}:{}},()=>By(a,i.changes)),0}},Ow={path:["workspace","status"],domain:"workspace",spec:{name:"workspace status",flags:[{name:"local-only",takesValue:!1},{name:"force-refresh",takesValue:!1}],positionals:[{name:"path",repeatable:!0}],usageArgs:"[<options>] [--] [<path>...]",examples:["succapp workspace status","succapp workspace status --local-only","succapp workspace status --force-refresh","succapp workspace status --json","succapp workspace status demo/views/sales.view"]},workspaceTarget:"required",serverTarget:"required",createExecutor:()=>new xm};q();var _w="1";function Lw(r,e={}){let t=e.targetVersion??_w;return{workspaceRootPath:r.root,currentVersion:_w,targetVersion:t,dryRun:e.dryRun===!0,hasActions:!1,actions:[],reason:"no-workspace-migrations"}}var Fm=class extends ce{toOptions(e){return{targetVersion:e.value("target-version"),dryRun:e.has("dry-run")}}async executeWorkspaceCommand(e,t,n){let o=Lw(e,n);return t.output.result(VI(o),()=>qI(o)),0}},Nw={path:["workspace","upgrade"],domain:"workspace",spec:{name:"workspace upgrade",flags:[{name:"target-version",takesValue:!0,valueHint:"version"},{name:"dry-run",takesValue:!1}],positionals:[],usageArgs:"[<options>]",examples:["succapp workspace upgrade --dry-run","succapp workspace upgrade --target-version=1"]},workspaceTarget:"required",serverTarget:"none",createExecutor:()=>new Fm};function VI(r){return{workspace:r.workspaceRootPath,currentVersion:r.currentVersion,targetVersion:r.targetVersion,dryRun:r.dryRun,hasActions:r.hasActions,actions:r.actions,reason:r.reason}}function qI(r){return r.hasActions?h("cli.cmd.workspace.upgrade.actions",r.actions.length,r.currentVersion,r.targetVersion):h("cli.cmd.workspace.upgrade.noActions",r.currentVersion,r.targetVersion)}q();ne();function Ww(r){return{workspace:r.workspaceRootPath,summary:{entries:r.entries.length},entries:r.entries.map(Mm)}}function Uw(r){return{workspace:r.workspaceRootPath,summary:{cleared:r.cleared.length,remaining:r.remaining.length},cleared:r.cleared.map(Mm),remaining:r.remaining.map(Mm)}}function jw(r){return{columns:[h("cli.out.header.path"),h("cli.cmd.workspace.backup.size"),h("cli.out.header.modified"),h("cli.cmd.workspace.backup.backupPath")],rows:r.map(e=>[e.path,e.size===void 0?"":String(e.size),e.mtime??"",e.backupPath])}}function Bw(r){return h("cli.cmd.workspace.backup.cleared",r.cleared.length,r.remaining.length)}function Mm(r){return A({path:r.path,backupPath:r.backupPath,size:r.size,mtime:r.mtime})}var Dm=class extends ce{toOptions(e){return{paths:e.positional}}async executeWorkspaceCommand(e,t,n){let o=await e.createSyncService().clearMergeBackups({paths:n.paths.length>0?[...n.paths]:void 0,task:t.task});return t.output.result(Uw(o),()=>Bw(o)),0}},Vw={path:["workspace","backup","clear"],domain:"workspace",spec:{name:"workspace backup clear",flags:[],positionals:[{name:"path",repeatable:!0}],usageArgs:"[<options>] [--] [<path>...]",examples:["succapp workspace backup clear","succapp workspace backup clear /DEMO_BLANK/app"]},workspaceTarget:"required",serverTarget:"none",lockUsage:"workspace-write",createExecutor:()=>new Dm};var Im=class extends ce{toOptions(e){return{paths:e.positional}}async executeWorkspaceCommand(e,t,n){let o=await e.createSyncService().listMergeBackups({paths:n.paths.length>0?[...n.paths]:void 0,task:t.task});return t.output.result(Ww(o),()=>jw(o.entries)),0}},qw={path:["workspace","backup","list"],domain:"workspace",spec:{name:"workspace backup list",flags:[],positionals:[{name:"path",repeatable:!0}],usageArgs:"[<options>] [--] [<path>...]",examples:["succapp workspace backup list","succapp workspace backup list /DEMO_BLANK/app"]},workspaceTarget:"required",serverTarget:"none",createExecutor:()=>new Im};D();J();function $w(r,e,t){return r.error==="empty"?new E("err.cli.missingInput",{inputId:"extensionName",sources:["<extension-name>"],context:{scope:e}}):new E("err.cli.invalidExtensionName",{inputId:"extensionName",value:t,expectedScope:e,actualScope:r.actualExtensionPoint,reason:r.error,context:{name:t,scope:e,reason:r.error,actualScope:r.actualExtensionPoint}})}function Hw(r){return r.rejected.length>0?6:r.failures.length>0?1:0}D();J();var Am=class extends ce{toOptions(e){return{extensionPoint:e.positional[0],templateName:e.positional[1],extensionName:e.positional[2]}}async executeWorkspaceCommand(e,t,n){await Rr(t,e);let o=new js(e);if(!(await o.prepare()).some(c=>c.extensionPoint===n.extensionPoint&&c.templateName===n.templateName))throw new E("err.cli.unknownExtensionTemplate",{inputId:"extensionTemplate",value:`${n.extensionPoint}/${n.templateName}`,extensionPoint:n.extensionPoint,templateName:n.templateName,context:{scope:n.extensionPoint,name:n.templateName}});let a=await o.validate({extensionPoint:n.extensionPoint,extensionName:n.extensionName});if(!a.ok)throw $w(a,n.extensionPoint,n.extensionName);let s=await e.lockManager.withLock({scopes:["sync"],command:"extension-create",wait:t.config.lockTimeout},async()=>o.execute({extensionPoint:n.extensionPoint,templateName:n.templateName,extensionName:n.extensionName}));return t.output.result({workspace:e.root,server:e.activeServerUrl,...tC(n.extensionName,s)},()=>iC(n.extensionName,s)),0}},zw={path:["workspace","extension","create"],domain:"workspace",spec:{name:"workspace extension create",flags:[],positionals:[{name:"extension-point",required:!0},{name:"template",required:!0},{name:"name",required:!0}],usageArgs:"[<options>] <extension-point> <template> <name>",examples:["succapp workspace extension create component blank succ-component-card"]},workspaceTarget:"required",serverTarget:"none",lockUsage:"workspace-write",createExecutor:()=>new Am};var Om=class extends ce{async executeWorkspaceCommand(e,t){let n=await Zy(e.root);return t.output.result({workspace:e.root,extensions:n},()=>oC(n)),0}},Kw={path:["workspace","extension","list"],domain:"workspace",spec:{name:"workspace extension list",flags:[],positionals:[],usageArgs:"[<options>]",examples:["succapp workspace extension list","succapp workspace extension list --json"]},workspaceTarget:"required",serverTarget:"none",createExecutor:()=>new Om};D();J();D();J();$();var Fl=class{workspace;cachedService;constructor(e){this.workspace=e}async resolveTarget(e){let t=Qy({workspaceRoot:this.workspace.root,path:e.path,extensionName:e.extensionName});if(!t)throw new E("err.extension.rootUnresolved",{reason:$I(e)});if(!await Z(t.extensionRoot))throw new E("err.extension.rootNotFound",{extensionName:t.extensionName,extensionRoot:t.extensionRoot});return t}async status(){return this.requireService().status()}async execute(e){return this.requireService().push({paths:[e.target.extensionRoot],message:e.message,force:e.force})}requireService(){return this.cachedService||(this.cachedService=this.workspace.createSyncService()),this.cachedService}};function $I(r){return r.extensionName!==void 0?"invalidName":r.path!==void 0?"invalidPath":"missingInput"}var _m=class extends ce{toOptions(e){return{extensionName:e.positional[0],path:e.value("path"),force:e.has("force")}}validateOptions(e,t){if(t.extensionName&&t.path)throw new E("err.cli.conflictingInputs",{inputs:["<extension>","--path=<path>"]});if(!t.extensionName&&!t.path)throw new E("err.cli.missingInput",{inputId:"extensionNameOrPath",sources:["<extension>","--path=<path>"]})}async executeWorkspaceCommand(e,t,n){await Rr(t,e);let o=new Fl(e),i=await o.resolveTarget({extensionName:n.extensionName,path:n.path}),a=await o.execute({target:i,force:n.force});return t.output.result({workspace:e.root,server:e.activeServerUrl,extensionName:i.extensionName,extensionRoot:i.extensionRoot,force:n.force,...rC(a)},()=>aC(i.extensionName,a)),Hw(a)}},Gw={path:["workspace","extension","push"],domain:"workspace",spec:{name:"workspace extension push",flags:[{name:"path",takesValue:!0,valueHint:"path"},{name:"force",alias:"f",takesValue:!1}],positionals:[{name:"name"}],usageArgs:"[<options>] [<name>]",examples:["succapp workspace extension push succ-component-card","succapp workspace extension push --path=sysdata/extensions/succ-component-card/package.json","succapp workspace extension push --force succ-component-card"]},workspaceTarget:"required",serverTarget:"required",lockUsage:"workspace-write",createExecutor:()=>new _m};D();J();var Lm=class extends ge{toOptions(e){return{paths:e.positional,source:HI(e.value("source"))}}async executeSyncCommand(e,t,n,o){let i=await t.diff({paths:[...o.paths],source:o.source,task:n.task});return n.output.result({workspace:e.root,server:e.activeServerUrl,source:i.source,summary:{files:i.items.length,changed:i.items.filter(a=>a.changed).length,binary:i.items.filter(a=>a.binary).length},patches:i.items.map(KI)},()=>zI(i)),0}},Jw={path:["workspace","file","diff"],domain:"workspace",spec:{name:"workspace file diff",flags:[{name:"source",takesValue:!0,valueHint:"server"}],positionals:[{name:"path",required:!0,repeatable:!0}],usageArgs:"[<options>] [--] <path>...",examples:["succapp workspace file diff demo/views/sales.view","succapp workspace file diff --source=server /demo/views/sales.view","succapp workspace file diff demo/views/sales.view --json"]},workspaceTarget:"required",serverTarget:"required",createExecutor:()=>new Lm};function HI(r){if(!r||r==="server")return"server";throw new E("err.cli.invalidChoice",{input:"--source",option:"--source",value:r,allowedValues:["server"]})}function zI(r){return r.items.map(e=>e.patch).filter(Boolean).join(`
90
- `)}function KI(r){return{path:r.path,remotePath:r.remotePath,localPath:r.localPath,source:r.source,sourceSize:r.sourceSize,workspaceSize:r.workspaceSize,changed:r.changed,binary:r.binary,patch:r.patch}}var Nm=class extends ge{toOptions(e){return{path:e.positional[0],limit:zs(e.value("limit"))}}async executeSyncCommand(e,t,n,o){let i=await t.history({path:o.path,limit:o.limit,task:n.task});return n.output.result({workspace:e.root,server:e.activeServerUrl,path:i.path,remotePath:i.remotePath,summary:{histories:i.histories.length},histories:i.histories.map(Gs)},()=>Ks(i.histories)),0}},Yw={path:["workspace","file","history"],domain:"workspace",spec:{name:"workspace file history",flags:[{name:"limit",takesValue:!0,valueHint:"n"}],positionals:[{name:"path",required:!0}],usageArgs:"[<options>] <path>",examples:["succapp workspace file history demo/views/sales.view","succapp workspace file history --limit=20 /DEMO/views/sales.view","succapp workspace file history demo/views/sales.view --json"]},workspaceTarget:"required",serverTarget:"required",createExecutor:()=>new Nm};async function Ml(r,e){let t=await r.resolveRemoteFilePath({path:e.path});return{path:t.path,localPath:r.getMetaFileLocalPath(t.remotePath),remotePath:t.remotePath,serverUrl:t.serverUrl,viewUrl:Ao(t.serverUrl,{path:t.remotePath}),editUrl:Ao(t.serverUrl,{path:t.remotePath,":edit":"true"})}}q();var Wm=class extends ce{constructor(t=Js){super();this.opener=t}toOptions(t){return{path:t.positional[0],edit:t.has("edit")}}async executeWorkspaceCommand(t,n,o){await Rr(n,t);let i=await Ml(t,{path:o.path}),a=o.edit===!0,s=a?i.editUrl:i.viewUrl;return await this.opener(s,n.abortSignal),n.output.result({workspace:t.root,server:i.serverUrl,path:i.path,remotePath:i.remotePath,edit:a,url:s},()=>GI(s,a)),0}},Xw={path:["workspace","file","open"],domain:"workspace",spec:{name:"workspace file open",flags:[{name:"edit",takesValue:!1}],positionals:[{name:"path",required:!0}],usageArgs:"[<options>] <path>",examples:["succapp workspace file open demo/views/sales.view","succapp workspace file open --edit /DEMO/views/sales.view","succapp workspace file open demo/views/sales.view --json"]},workspaceTarget:"required",serverTarget:"required",createExecutor:()=>new Wm};function GI(r,e){return h(e?"cli.cmd.workspace.file.open.openedEdit":"cli.cmd.workspace.file.open.openedView",r)}q();D();J();var Um=class extends ce{toOptions(e){return{path:e.positional[0],url:JI(e.value("url"))}}async executeWorkspaceCommand(e,t,n){await Rr(t,e);let o=await Ml(e,{path:n.path});return t.output.result(YI(e,o),()=>XI(o,n.url)),0}},Qw={path:["workspace","file","resolve"],domain:"workspace",spec:{name:"workspace file resolve",flags:[{name:"url",takesValue:!0,valueHint:"view|edit"}],positionals:[{name:"path",required:!0}],usageArgs:"[<options>] <path>",examples:["succapp workspace file resolve demo/views/sales.view","succapp workspace file resolve --url=view demo/views/sales.view","succapp workspace file resolve --url=edit /DEMO/views/sales.view --json"]},workspaceTarget:"required",serverTarget:"required",createExecutor:()=>new Um};function JI(r){if(r!==void 0){if(r==="view"||r==="edit")return r;throw new E("err.cli.invalidChoice",{input:"--url",option:"--url",value:r,allowedValues:["view","edit"]})}}function YI(r,e){return{workspace:r.root,server:e.serverUrl,path:e.path,remotePath:e.remotePath,localPath:e.localPath,viewUrl:e.viewUrl,editUrl:e.editUrl}}function XI(r,e){return e==="view"?r.viewUrl:e==="edit"?r.editUrl:[h("cli.cmd.workspace.file.resolve.path",r.path),h("cli.cmd.workspace.file.resolve.localPath",r.localPath),h("cli.cmd.workspace.file.resolve.remote",r.remotePath),h("cli.cmd.workspace.file.resolve.viewUrl",r.viewUrl),h("cli.cmd.workspace.file.resolve.editUrl",r.editUrl)].join(`
91
- `)}D();J();var jm=class extends ge{toOptions(e){let t=QI(e.value("source")),n=ZI(e.value("revision"));return{path:e.positional[0],source:t,revision:n}}validateOptions(e,t){if(t.revision!==void 0&&t.source==="mirror")throw new E("err.cli.conflictingInputs",{inputs:["--revision","--source=mirror"]})}async executeSyncCommand(e,t,n,o){let i=await t.show({path:o.path,source:o.source,revision:o.revision,task:n.task});return n.output.content({workspace:e.root,server:e.activeServerUrl,path:i.path,remotePath:i.remotePath,fileName:i.fileName,source:i.source,size:i.buffer.length},i.buffer),0}},Zw={path:["workspace","file","show"],domain:"workspace",spec:{name:"workspace file show",flags:[{name:"source",takesValue:!0,valueHint:"mirror|server"},{name:"revision",takesValue:!0,valueHint:"n"}],positionals:[{name:"path",required:!0}],usageArgs:"[<options>] <path>",examples:["succapp workspace file show /demo/views/sales.view","succapp workspace file show --source=mirror demo/views/sales.view","succapp workspace file show --revision=42 /demo/views/sales.view","succapp workspace file show /demo/views/sales.view --json"]},workspaceTarget:"required",serverTarget:"required",createExecutor:()=>new jm};function QI(r){if(!r)return"server";if(r==="mirror"||r==="server")return r;throw new E("err.cli.invalidChoice",{input:"--source",option:"--source",value:r,allowedValues:["mirror","server"]})}function ZI(r){if(r===void 0)return;let e=Yt(r);if(e===void 0)throw new E("err.cli.invalidNonNegativeInteger",{input:"--revision",option:"--revision",value:r});return e}q();var Bm=class extends ge{toOptions(e){return{paths:e.positional,checkOnly:e.has("check")}}async executeSyncCommand(e,t,n,o){let i={paths:o.paths.length>0?[...o.paths]:void 0,checkOnly:o.checkOnly,task:n.task};o.checkOnly||(i.onChecked=s=>rA(n,s),i.onFileUpgraded=s=>nA(n,s));let a=await t.upgradeMetadata(i);return n.output.result({workspace:e.root,server:e.activeServerUrl,checkOnly:o.checkOnly,summary:{checked:a.checked,candidates:a.candidates.length,changed:a.changed.length,skipped:a.skipped.length,failures:a.failures.length},candidates:a.candidates.map(qr),changed:a.changed.map(qr),skipped:a.skipped.map(qr),failures:a.failures.map(qr)},()=>eA(a,o.checkOnly)),a.failures.length>0?1:0}},eP={path:["workspace","file","upgrade"],domain:"workspace",spec:{name:"workspace file upgrade",flags:[{name:"check",takesValue:!1}],positionals:[{name:"path",repeatable:!0}],usageArgs:"[<options>] [--] [<path>...]",examples:["succapp workspace file upgrade --check","succapp workspace file upgrade demo/views/sales.view","succapp workspace file upgrade /DEMO/views/sales.view --json"]},workspaceTarget:"required",serverTarget:"required",lockUsage:"workspace-write",createExecutor:()=>new Bm};function eA(r,e){let t=[h(e?"cli.cmd.workspace.file.upgrade.checkRes":"cli.cmd.workspace.file.upgrade.result",r.checked,e?r.candidates.length:r.changed.length,r.skipped.length,r.failures.length)];return e&&r.candidates.length>0&&(t.push(h("cli.cmd.workspace.file.upgrade.cands",r.candidates.length)),t.push(As(r.candidates))),r.failures.length>0&&(t.push(h("cli.cmd.workspace.file.upgrade.failed",r.failures.length)),t.push(tA(r.failures))),t.join(`
92
- `)}function tA(r){return ke({columns:[h("cli.out.header.remote"),h("cli.cmd.workspace.file.upgrade.reason"),h("cli.out.header.error")],rows:r.map(e=>[e.remotePath,e.reason??"",kn(e.errorInfo)])})}function rA(r,e){let t=e.candidates.length;r.output.detail({stage:"metadata-upgrade-candidates",candidates:t},()=>t>0?h("cli.cmd.workspace.file.upgrade.cands",t):h("cli.cmd.workspace.file.upgrade.noCands")),t>0&&r.output.detail({stage:"metadata-upgrade-start",candidates:t},()=>h("cli.cmd.workspace.file.upgrade.upgradeStart"))}function nA(r,e){r.output.detail({stage:"metadata-upgrade-file",index:e.index,total:e.total,status:e.status,path:e.item.remotePath,reason:e.item.reason},()=>oA(e))}function oA(r){let e=r.item.reason??"";return r.status==="failed"?h("cli.cmd.workspace.file.upgrade.itemFailed",r.index,r.total,r.item.remotePath,e):r.status==="skipped"?h("cli.cmd.workspace.file.upgrade.itemSkipped",r.index,r.total,r.item.remotePath,e):h("cli.cmd.workspace.file.upgrade.itemUpgraded",r.index,r.total,r.item.remotePath)}q();var Vm=class extends ce{async executeWorkspaceCommand(e,t,n){let o=await e.lockManager.peekHolders(),i=Array.from(o,([a,s])=>({scope:a,holder:s})).filter(a=>a.holder).map(a=>({scope:a.scope}));return t.output.result({workspace:e.root,scopes:i},()=>({columns:[h("cli.cmd.workspace.lock.list.scope")],rows:i.map(a=>[a.scope])})),0}},tP={path:["workspace","lock","list"],domain:"workspace",spec:{name:"workspace lock list",flags:[],positionals:[],usageArgs:"[<options>]",examples:["succapp workspace lock list","succapp workspace lock list --json"]},workspaceTarget:"required",serverTarget:"none",createExecutor:()=>new Vm};D();J();function Dl(r){if(ci.includes(r))return r;throw new E("err.cli.invalidChoice",{inputId:"lockScope",value:r,allowedValues:ci})}q();var qm=class extends ce{toOptions(e){return{scopes:e.positional.map(Dl)}}async executeWorkspaceCommand(e,t,n){let o=await e.lockManager.peekHolders(n.scopes.length===0?void 0:n.scopes),i=Array.from(o,([s,c])=>({scope:s,holder:c})),a={workspace:e.root,staleMs:e.lockManager.staleMs,scopes:i.map(s=>this.toJsonScopeStatus(s))};return t.output.result(a,()=>({columns:[h("cli.cmd.workspace.lock.status.scope"),h("cli.out.header.status"),h("cli.out.header.source"),h("cli.cmd.workspace.lock.status.pid"),h("cli.out.header.command"),h("cli.out.header.started"),h("cli.cmd.workspace.lock.status.heartbeat")],rows:i.map(s=>this.toTableRow(s))})),0}toJsonScopeStatus(e){return e.holder?{scope:e.scope,status:"busy",holder:this.toJsonHolder(e.holder)}:{scope:e.scope,status:"free"}}toJsonHolder(e){return{pid:e.pid,hostname:e.hostname,source:e.source,command:e.command,startTime:e.startTime,lastHeartbeat:e.lastHeartbeat,agentVersion:e.agentVersion,alsoHolds:e.alsoHolds}}toTableRow(e){return[e.scope,h(e.holder?"cli.out.value.busy":"cli.out.value.free"),e.holder?.source??"",e.holder?String(e.holder.pid):"",e.holder?.command??"",e.holder?.startTime??"",e.holder?.lastHeartbeat??""]}},rP={path:["workspace","lock","status"],domain:"workspace",spec:{name:"workspace lock status",flags:[],positionals:[{name:"scope",repeatable:!0}],usageArgs:"[<options>] [<scope>...]",examples:["succapp workspace lock status","succapp workspace lock status sync","succapp -C /path/to/workspace workspace lock status --json"]},workspaceTarget:"required",serverTarget:"none",createExecutor:()=>new qm};function nP(r){return nt(r[jr.locale])??nt(r[ws.lcAll])??nt(r[ws.lcMessages])??nt(r[ws.lang])}G();Ce();D();J();var iA=T("cli.config"),_n=86400,aA,oP=[];function iP(r){let e=sA(r);return aA=e.config,oP=e.diagnostics,e.config}function aP(){for(let r of oP)iA.warn(r.message,r.envName,r.value)}function sA(r){let e=r.env??process.env,t=cA(r),n=t.input,o=[];return{config:{workspace:pA(t,"workspace",e[jr.workspace]),server:dA(t,"server"),envServer:t.hasExplicitValue("server")?void 0:nt(e[jr.server]),outputMode:uA(n,e,o),quiet:n.quiet,lockTimeout:mA(t),logLevel:hA(t,e,o),locale:t.hasExplicitValue("locale")?nt(n.locale):nP(e)},diagnostics:o}}function cA(r){if(r.args){let e=r.args.globalOptions,t=r.args;return{input:e,hasExplicitValue:n=>lA(t,n),strictExplicitValues:!1}}if(r.input){let e=r.input;return{input:e,hasExplicitValue:t=>e[t]!==void 0,strictExplicitValues:!0}}uo("Either args or input must be provided to initializeCliConfig().")}function lA(r,e){switch(e){case"workspace":return r.parsed.has("workspace");case"server":return r.parsed.has("server");case"lockTimeout":return r.parsed.has("lock-timeout");case"logLevel":return r.parsed.has("log-level");case"locale":return r.parsed.has("locale")}}function pA(r,e,t){return nt(r.hasExplicitValue(e)?r.input[e]:t)}function dA(r,e){return r.hasExplicitValue(e)?nt(r.input[e]):void 0}function uA(r,e,t){return r.json||sP(pg,jr.json,e,t)?"json":"human"}function mA(r){let e=r.input;if(r.hasExplicitValue("lockTimeout")){let t=e.lockTimeout,n=Yt(t,_n);if(n===void 0){if(!r.strictExplicitValues)return ya;let o=Fe("lock-timeout");throw new E("err.cli.invalidNonNegativeIntegerRange",{input:o,option:o,value:t??"",max:_n})}return n}return ya}function hA(r,e,t){let n=r.input;if(r.hasExplicitValue("logLevel")){let o=n.logLevel,i=ho(o);if(i===void 0){if(!r.strictExplicitValues)return"info";let a=Fe("log-level");throw new E("err.cli.invalidChoice",{input:a,option:a,value:o??"",allowedValues:vi})}return i}return n.verbose?"debug":sP(ho,jr.logLevel,e,t)??"info"}function sP(r,e,t,n){let o=t[e],i=r(o);return o!==void 0&&o.trim()!==""&&i===void 0&&n.push({code:"invalid-env-value",severity:"warning",message:"Ignoring invalid CLI environment value",envName:e,value:o}),i}$n();q();D();J();var lP=100,fA=["config","sync"],$m=class extends ce{toOptions(e){return{scopes:e.positional.map(Dl),timeoutSeconds:gA(e.value("timeout"))}}async executeWorkspaceCommand(e,t,n){let o=n.scopes.length>0?n.scopes:fA,i=Date.now(),a=n.timeoutSeconds===void 0?void 0:n.timeoutSeconds*1e3;for(;;){mt(t.abortSignal);let s=await yA(e,o),c=s.filter(p=>p.status==="busy"),l=Date.now()-i;if(c.length===0)return t.output.result(cP(e.root,s,"free",l),()=>h("cli.cmd.workspace.lock.wait.locksFree",o.join(", "))),0;if(a!==void 0&&l>=a)return t.output.result(cP(e.root,s,"timeout",l),()=>h("cli.cmd.workspace.lock.wait.locksBusy",n.timeoutSeconds??0,c.map(p=>p.scope).join(", "))),124;await SA(Math.min(lP,CA(a,l)))}}},pP={path:["workspace","lock","wait"],domain:"workspace",spec:{name:"workspace lock wait",flags:[{name:"timeout",takesValue:!0,valueHint:"seconds"}],positionals:[{name:"scope",repeatable:!0}],usageArgs:"[<options>] [<scope>...]",examples:["succapp workspace lock wait","succapp workspace lock wait sync --timeout=30","succapp workspace lock wait config sync --json"]},workspaceTarget:"required",serverTarget:"none",createExecutor:()=>new $m};function gA(r){if(r===void 0)return;let e=Yt(r,_n);if(e===void 0)throw new E("err.cli.invalidNonNegativeIntegerRange",{input:"--timeout",option:"--timeout",value:r,max:_n});return e}async function yA(r,e){let t=await r.lockManager.peekHolders(e);return e.map(n=>({scope:n,status:t.get(n)?"busy":"free"}))}function cP(r,e,t,n){return{workspace:r,status:t,waitedMs:n,scopes:e,busyScopes:e.filter(o=>o.status==="busy").map(o=>o.scope)}}function CA(r,e){return r===void 0?lP:Math.max(0,r-e)}function SA(r){return new Promise(e=>setTimeout(e,r))}q();J();D();$();var Hm=class extends ge{toOptions(e){return{projectNames:e.positional,force:e.has("force")}}async executeSyncCommand(e,t,n,o){await wA(t,o);let i=await t.clone({projectNames:o.projectNames.length>0?[...o.projectNames]:void 0,task:n.task});return n.output.result({workspace:e.root,server:e.activeServerUrl,summary:{projects:i.projectNames.length,oldFiles:i.oldFiles.length},projects:i.projectNames,oldFiles:i.oldFiles.map(qr)},()=>vA(i)),0}},uP={path:["workspace","project","clone"],domain:"workspace",spec:{name:"workspace project clone",flags:[{name:"force",alias:"f",takesValue:!1}],positionals:[{name:"project",repeatable:!0}],usageArgs:"[<options>] [--] [<project>...]",examples:["succapp workspace project clone","succapp workspace project clone DEMO","succapp workspace project clone DEMO --force","succapp workspace project clone DEMO OTHER --json"]},workspaceTarget:"required",serverTarget:"required",lockUsage:"workspace-write",createExecutor:()=>new Hm};function vA(r){let e=r.projectNames.length>0?r.projectNames.join(", "):h("cli.out.value.none"),t=[h("cli.cmd.workspace.proj.clone.cloned",e)];return r.oldFiles.length>0&&(t.push(h("cli.cmd.workspace.proj.clone.oldMeta",r.oldFiles.length)),t.push(h("cli.cmd.workspace.proj.clone.upgradeCommand",kA(r.projectNames)))),t.join(`
93
- `)}function kA(r){return`succapp workspace file upgrade${r.length>0?` ${r.join(" ")}`:""}`}async function wA(r,e){if(e.force)return;let[t,n]=await Promise.all([r.listWorkspaceProjects(),r.listBaselineProjects()]),o=new Set([...t,...n].map(dP)),a=(e.projectNames.length>0?[...new Set(e.projectNames.map(dP))]:[...o]).filter(s=>o.has(s));if(a.length!==0)throw new E("err.cli.confirmationRequired",{reason:"cloneOverwrite",flag:"--force",projectNames:a.join(", ")})}function dP(r){return Tt(r).slice(1)}var zm=class extends ge{async executeSyncCommand(e,t,n,o){let[i,a]=await Promise.all([t.listWorkspaceProjects(),t.listBaselineProjects()]),s=jy(i,a);return n.output.result({workspace:e.root,server:e.activeServerUrl,projects:s},()=>Vy(s)),0}},mP={path:["workspace","project","list"],domain:"workspace",spec:{name:"workspace project list",flags:[],positionals:[],usageArgs:"[<options>]",examples:["succapp workspace project list","succapp workspace project list --json"]},workspaceTarget:"required",serverTarget:"none",createExecutor:()=>new zm};J();D();q();var Km=class extends ge{toOptions(e){return{projectNames:e.positional,force:e.has("force")}}validateOptions(e,t){if(!t.force)throw new E("err.cli.confirmationRequired",{reason:"projRemove",flag:"--force",projectNames:t.projectNames.join(", ")})}async executeSyncCommand(e,t,n,o){let i=await t.removeProject({projectNames:[...o.projectNames],task:n.task});return n.output.result({workspace:e.root,server:e.activeServerUrl,projectNames:i.projectNames},()=>h("cli.cmd.workspace.proj.remove.removed",i.projectNames.join(", ")||h("cli.out.value.none"))),0}},hP={path:["workspace","project","remove"],domain:"workspace",spec:{name:"workspace project remove",flags:[{name:"force",alias:"f",takesValue:!1}],positionals:[{name:"project",required:!0,repeatable:!0}],usageArgs:"[<options>] <project>...",examples:["succapp workspace project remove DEMO_BLANK --force","succapp workspace project remove DEMO_BLANK OTHER --force --json"]},workspaceTarget:"required",serverTarget:"none",lockUsage:"workspace-write",createExecutor:()=>new Km};D();J();var ir=class extends ce{async executeWorkspaceCommand(e,t,n){return await e.config.ensureLoaded(),this.executeServerCommand(e,t,n)}async requireConfiguredServerUrl(e,t,n){let o=await Rs(t,{explicitServerUrl:n}),i=e.config.resolveServerUrl(o);if(!i)throw new E("err.cli.unconfiguredServer",{inputId:"server",value:o,context:{target:o}});return i}};q();var Gm=class extends ir{toOptions(e){return{url:e.positional[0]}}async executeServerCommand(e,t,n){let o=Vr(n.url),i=e.config.hasServer(o),a=await e.addServer(o);return t.output.result({workspace:e.root,server:a,activeServer:a,added:!i},()=>h("cli.cmd.workspace.remote.add.active",a)),0}},fP={path:["workspace","remote","add"],domain:"workspace",spec:{name:"workspace remote add",flags:[],positionals:[{name:"url",required:!0,role:"server-url"}],usageArgs:"[<options>] <url>",examples:["succapp workspace remote add http://localhost:8180","succapp workspace remote add https://bi.example.com --json"]},workspaceTarget:"required",serverTarget:"none",lockUsage:"workspace-write",createExecutor:()=>new Gm};var Jm=class extends ir{async executeServerCommand(e,t,n){let o=e.activeServerUrl,i=e.config.getServers().map(a=>({url:a,active:a===o}));return t.output.result({workspace:e.root,activeServer:o||void 0,servers:i.map(Wy)},()=>$y(i)),0}},gP={path:["workspace","remote","list"],domain:"workspace",spec:{name:"workspace remote list",flags:[],positionals:[],usageArgs:"[<options>]",examples:["succapp workspace remote list","succapp workspace remote list --json"]},workspaceTarget:"required",serverTarget:"none",createExecutor:()=>new Jm};q();var Ym=class extends ir{toOptions(e){return{url:e.positional[0]}}async executeServerCommand(e,t,n){let o=await this.requireConfiguredServerUrl(e,t,n.url),i=await e.removeServer(o);return t.output.result({workspace:e.root,server:o,removedActive:i,activeServer:e.activeServerUrl||void 0},()=>e.activeServerUrl?h("cli.cmd.workspace.remote.remove.active",o,e.activeServerUrl):h("cli.cmd.workspace.remote.remove.removed",o)),0}},yP={path:["workspace","remote","remove"],domain:"workspace",spec:{name:"workspace remote remove",flags:[],positionals:[{name:"url",required:!0,role:"server-url"}],usageArgs:"[<options>] <url>",examples:["succapp workspace remote remove http://localhost:8180","succapp workspace remote remove https://bi.example.com --json"]},workspaceTarget:"required",serverTarget:"none",lockUsage:"workspace-write",createExecutor:()=>new Ym};q();var Xm=class extends ir{toOptions(e){return{oldUrl:e.positional[0],newUrl:e.positional[1]}}async executeServerCommand(e,t,n){let o=await this.requireConfiguredServerUrl(e,t,n.oldUrl),i=Vr(n.newUrl),a=await e.changeServerUrl(o,i);return t.output.result({workspace:e.root,oldServer:o,server:a,activeServer:e.activeServerUrl||void 0},()=>h("cli.cmd.workspace.remote.setUrl.changed",o,a)),0}},CP={path:["workspace","remote","set-url"],domain:"workspace",spec:{name:"workspace remote set-url",flags:[],positionals:[{name:"old-url",required:!0,role:"server-url"},{name:"new-url",required:!0,role:"server-url"}],usageArgs:"[<options>] <old-url> <new-url>",examples:["succapp workspace remote set-url http://localhost:8080 http://localhost:8180","succapp workspace remote set-url https://old.example.com https://new.example.com --json"]},workspaceTarget:"required",serverTarget:"none",lockUsage:"workspace-write",createExecutor:()=>new Xm};q();var Qm=class extends ir{toOptions(e){return{url:e.positional[0]}}async executeServerCommand(e,t,n){let o=await this.requireConfiguredServerUrl(e,t,n.url),i=await e.switchActiveServer(o);return t.output.result({workspace:e.root,server:o,activeServer:i},()=>h("cli.cmd.workspace.remote.use.active",i)),0}},SP={path:["workspace","remote","use"],domain:"workspace",spec:{name:"workspace remote use",flags:[],positionals:[{name:"url",required:!0,role:"server-url"}],usageArgs:"[<options>] <url>",examples:["succapp workspace remote use http://localhost:8180","succapp workspace remote use https://bi.example.com --json"]},workspaceTarget:"required",serverTarget:"none",lockUsage:"workspace-write",createExecutor:()=>new Qm};var vP=[bw,Dw,Ow,xw,Fw,Jw,Zw,Yw,Xw,Qw,eP,uP,mP,hP,RS,Mw,fP,gP,SP,CP,yP,zw,Kw,Gw,rP,tP,pP,qw,Vw,Nw];var kP=[...vP,...gS,...ry,...Ly];var Il=[{path:["server","file"]},{path:["server","cache"]},{path:["server","project"]},{path:["server","script"]},{path:["server","extension"]},{path:["server","extension","template"]},{path:["db","source"]},{path:["db","schema"]},{path:["db","table"]},{path:["workspace","project"]},{path:["workspace","file"]},{path:["workspace","remote"]},{path:["workspace","lock"]},{path:["workspace","backup"]},{path:["workspace","extension"]}];Ce();Ce();var PA="cli.out.help.commands",RA={extension:"ext",project:"proj"};function wP(r){return r.spec.summary??EA(r.path)}function PP(r){return r.spec.description??bA(r.path)}function Al(r){return r.help?.section??PA}function RP(r){return r.title??Ol(r.path)}function EP(r){return r.summary??Aa(r.path)}function bP(r){return r.description??_l(r.path)}function TP(r,e){return r.description?r.description:(U(e,`flag --${r.name} description requires command context`),TA(e.path,r.name))}function EA(r){return Aa(r)}function bA(r){return _l(r)}function Ol(r){return`cli.cmd.${Ll(r)}.title`}function Aa(r){return`cli.cmd.${Ll(r)}.summary`}function _l(r){return`cli.cmd.${Ll(r)}.desc`}function TA(r,e){return`cli.cmd.${Ll(r)}.${xP(e)}`}function Ll(r){return r.map(xA).join(".")}function xA(r){return RA[r]??xP(r)}function xP(r){return r.replace(/-([a-z0-9])/g,(e,t)=>t.toUpperCase())}function FP(r){let e=new Map;for(let t of r){let n=t.path.join(" ");U(!e.has(n),`Duplicate CLI command path: ${n}`),e.set(n,t),FA(t,n),MA(t,n),DA(t,n)}}function FA(r,e){U(r.path.length>0,"CLI command path must not be empty."),r.domain!=="common"&&U(r.path[0]===r.domain,`CLI command domain/path mismatch: ${e}`)}function MA(r,e){U(Al(r).trim(),`CLI command help section must not be empty: ${e}`),U(r.spec.name.trim(),`CLI command spec name must not be empty: ${e}`)}function DA(r,e){U(typeof r.createExecutor=="function",`CLI command createExecutor must be a function: ${e}`)}var MP=["workspace","server","auth","db"];function DP(){return MP.map(r=>{let e=[r];return{title:Ol(e),commands:[{name:r,summary:Aa(e)}]}})}function Nl(r,e=[]){let t=MP.map(o=>{let i=[o],a=r.filter(s=>s.domain===o);return{path:i,title:Ol(i),summary:Aa(i),description:_l(i),sections:IA(a)}}),n=e.flatMap(o=>{let i=r.filter(a=>OA(a,o.path));return i.length===0?[]:[{path:o.path,title:RP(o),summary:EP(o),description:bP(o),sections:AA(o.path,i)}]});return[...t,...n]}function IA(r){return IP(r,e=>e.help?.entry??e.path.slice(1).join(" "))}function AA(r,e){return IP(e,t=>t.help?.entry??t.path.slice(r.length).join(" "))}function IP(r,e){let t=new Map;for(let n of r){let o=Al(n),i=t.get(o)??[];i.push({name:e(n),summary:wP(n)}),t.set(o,i)}return Array.from(t,([n,o])=>({title:n,commands:_A(o)}))}function OA(r,e){return r.path.length>e.length&&e.every((t,n)=>r.path[n]===t)}function _A(r){let e=[],t=new Set;for(let n of r)t.has(n.name)||(t.add(n.name),e.push(n));return e}var Zm=class{commands;namespaces;topLevelHelpGroups;commandsByPath=new Map;namespacesByPath=new Map;constructor(e){FP(e),this.commands=[...e],this.namespaces=Nl(this.commands,Il),this.topLevelHelpGroups=DP();for(let t of this.commands)this.commandsByPath.set(t.path.join(" "),t);for(let t of this.namespaces)this.namespacesByPath.set(t.path.join(" "),t)}findCommand(e){return this.commandsByPath.get(e.join(" "))}findNamespace(e){return this.namespacesByPath.get(e.join(" "))}},eh=new Zm(kP),AP=eh.commands,OP=eh.topLevelHelpGroups,eY=eh.namespaces;q();function NP(r){return rh.renderCommandHelp(r)}function WP(r){return rh.renderTopLevelHelp(r)}function UP(r){return rh.renderNamespaceHelp(r)}var LA=4,_P=3,NA="[<options>]",LP="value",WA=100,th=class{renderCommandHelp(e){let t=e.spec,n=this.mergeGlobalFlags(e),o=t.usageArgs??NA,i=[h("cli.out.help.usageLine",{command:t.name,usageArgs:o})];return this.appendCommandDescription(i,e),this.appendFlags(i,n,e),this.appendExamples(i,t.examples),this.renderLines(i)}renderTopLevelHelp(e){let t=this.renderTopLevelUsage();return this.appendFlags(t,Gp),this.appendCommandGroups(t,e),t.push("",h("cli.out.help.commandHelpSee")),this.renderLines(t)}renderNamespaceHelp(e){let t=e.path.join(" "),n=[`${h("cli.out.help.usageHeader")} succapp ${t} <command> [<args>]`,"",h(e.description)];for(let o of e.sections){if(o.commands.length===0)continue;n.push("",h(o.title));let i=Math.max(...o.commands.map(a=>Sr(a.name)));for(let a of o.commands)n.push(Oa(`${Eo(a.name,i)} ${h(a.summary)}`,_P))}return n.push("",h("cli.out.help.commandHelpRead",t)),this.renderLines(n)}renderTopLevelUsage(){let e=`${h("cli.out.help.usageHeader")} succapp `,t=" ".repeat(Sr(e)),n=[...Gp.map(a=>{let s=a.takesValue?` <${a.valueHint??LP}>`:"";return`[--${a.name}${s}]`}),"<command>","[<args>]"],o=[],i=e;for(let a of n){let c=`${i}${i===e?"":" "}${a}`;if(i!==e&&Sr(c)>WA){o.push(i),i=`${t}${a}`;continue}i=c}return o.push(i),o}appendCommandDescription(e,t){e.push("",Oa(h(PP(t))))}appendFlags(e,t,n){t.length!==0&&(e.push("",h("cli.out.help.options")),e.push(...this.renderFlags(t,n)))}appendExamples(e,t){if(!(!t||t.length===0)){e.push("",h("cli.out.help.examples"));for(let n of t)e.push(Oa(n))}}appendCommandGroups(e,t){for(let n of t)this.appendCommandGroup(e,n)}appendCommandGroup(e,t){if(t.commands.length===0)return;e.push("",h(t.title));let n=Math.max(...t.commands.map(o=>Sr(o.name)));for(let o of t.commands)e.push(Oa(`${Eo(o.name,n)} ${h(o.summary)}`,_P))}renderFlags(e,t){let n=e.map(i=>({left:this.renderFlagLeft(i),description:h(TP(i,t))})),o=Math.max(...n.map(i=>Sr(i.left)));return n.map(i=>Oa(`${Eo(i.left,o)} ${i.description}`))}renderFlagLeft(e){let t=e.takesValue?` <${e.valueHint??LP}>`:"",n=`--${e.name}${t}`;return e.alias?`-${e.alias}, ${n}`:` ${n}`}mergeGlobalFlags(e){let t=new Set(e.spec.flags.map(n=>n.name));return[...e.spec.flags,...Pr.filter(n=>!t.has(n.name)&&Br(e,n.name))]}renderLines(e){return`${e.join(`
78
+ `}function tP(r){let e=r.trimEnd(),t=e.split(`
79
+ `),n=t[0],o=t[t.length-1];return $(t.length>=2&&n.startsWith("# BEGIN ")&&o.startsWith("# END "),"Git ignore template must be a marked block."),{begin:n,end:o,content:e}}function rP(r){return new RegExp(`${eP(r.begin)}[\\s\\S]*?${eP(r.end)}`)}function eP(r){return r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}K();H();var Km=b(require("fs")),tn=b(require("path"));we();H();var hA="resources",fA="workspace-templates",gA="succapp-workspace";async function To(r){let e=await Bl(r),t=Vt((await Km.promises.readFile(e,"utf8")).replace(/\r\n/g,`
80
+ `),{...hr,filePath:e});return $(t,`Workspace template is not a JSON object: ${e}`),t}async function rn(r){return(await Km.promises.readFile(await Bl(r),"utf8")).replace(/\r\n/g,`
81
+ `)}async function Bl(r){return tn.join(await CA(),...yA(r).split("/"))}function Ga(r,e){return Array.isArray(r[e])?r[e].filter(t=>typeof t=="string"):[]}function yA(r){let e=Hr(r);return $(e,`Unsafe workspace template path: ${r}`),e}async function CA(){let r=[hA,fA,gA],e=[tn.resolve(__dirname,"..",...r),tn.resolve(__dirname,"..","..",...r),tn.resolve(__dirname,"..","..","..",...r),tn.resolve(__dirname,"..","..","..","..",...r),tn.resolve(__dirname,"..","..","..","..","..",...r),tn.resolve(process.cwd(),...r)];for(let t of e)if(await ee(t))return t;return e[e.length-1]}var SA=T("workspace.maintenance.support"),Mo=".gitignore",vA=Mo,kA=Ka.posix.join($t,Mo);async function Ii(r){try{let e=await r.requireClient();return{client:e,serverInfo:await e.getServerInfo()}}catch(e){SA.debug(`skip server workspace support without server client: ${r.root}`,e);return}}function Ja(r,e){return r.capabilities?.includes(e)===!0}function nP(r,e){return!r.capabilities||Ja(r,e)}function Vl(r){return{refreshServerSupport:wA(r,"refreshServerSupport")===!0}}async function oP(r,e){let t=Ka.join(r.root,Mo),n=await za.read(t);n.upsertMarkedBlock(await rn(vA));let o=Ka.join(nr(r.root),Mo),i=await za.read(o);if(i.upsertMarkedBlock(await rn(kA)),e.apply){let a=await n.save(),s=await i.save();return a||s}return n.hasChanges()||i.hasChanges()}function Ft(r){return{code:r.code,taskId:r.taskId,repairable:r.repairable,level:r.level,localPaths:r.localPaths,remotePaths:[],properties:r.properties,execution:r.execution}}function wA(r,e){let t=r?.[e];return typeof t=="boolean"?t:void 0}var Jm="frontend-development-skill",iP="err.workspace.issue.E406",PA="frontendFrameworksSupport",RA=Ya.posix.join(".agents","skills","succbi-frontend-development"),EA="succ-frontend-frameworks.json",bA=T("workspace.maintenance.frontend-development-skill"),Di=class{capabilities={taskId:Jm,writeScopes:["init"],serverRequirement:"optional"};async refreshOnServerVersionChange(e,t,n){!this.supportsFrontendFrameworks(n)||!await ee(this.getSkillRoot(e.root))||await this.writeManifest(e.root,await t.getFrontendFrameworksManifest())}async execute(e,t){return e.dryRun?this.maintainManifest(e,!1):t!==void 0&&!t.some(n=>n.repairable)?t:this.maintainManifest(e,!0)}async maintainManifest(e,t){let n=this.getMaintenancePaths(e.workspace.root),o=await Ii(e.workspace);if(!o)return[this.createSkippedIssue(n,!t,"server-support-unavailable")];if(!this.supportsFrontendFrameworks(o.serverInfo))return[this.createSkippedIssue(n,!t,"server-capability-missing")];try{return await this.updateManifest(e.workspace.root,o,t)?[this.createIssue(n,t?pt():vt())]:[]}catch(i){let a=t?"apply":"check";return bA.warn(`${a} frontend development skill support failed: ${e.workspace.root}`,i),[this.createIssue(n,bo(!t))]}}supportsFrontendFrameworks(e){return Ja(e,PA)}getMaintenancePaths(e){return[this.getSkillRoot(e),this.getManifestPath(e)]}createIssue(e,t){return Ft({code:iP,taskId:Jm,repairable:!0,level:"info",localPaths:e,properties:{item:"frontend-development-skill"},execution:t})}createSkippedIssue(e,t,n){return Ft({code:iP,taskId:Jm,repairable:!1,level:"warning",localPaths:e,properties:{item:"frontend-development-skill"},execution:Vn(t,n)})}async updateManifest(e,t,n){return this.checkOrWriteManifest(e,await t.client.getFrontendFrameworksManifest(),n)}async writeManifest(e,t){return this.checkOrWriteManifest(e,t,!0)}async checkOrWriteManifest(e,t,n){let o=this.getManifestPath(e),i=JSON.stringify(t,null," ")+`
82
+ `;return await qe(o)===i?!1:(n&&(await aP.promises.mkdir(this.getSkillRoot(e),{recursive:!0}),await Ke(o,i)),!0)}getSkillRoot(e){return Ya.join(e,...RA.split("/"))}getManifestPath(e){return Ya.join(this.getSkillRoot(e),EA)}};var Pr=b(require("fs")),xo=b(require("path"));Pt();K();te();H();U();F();var Ym="json-schema-support",sP="err.workspace.issue.E405",TA="jsonSchemaSupport",Xa="json-schemas",MA="json-schemas.tmp-",Xm="json-schema-support.json",cP="json-schema-support-state.json",ql=T("workspace.maintenance.json-schema-support"),Ai=class{capabilities={taskId:Ym,writeScopes:["init"],serverRequirement:"optional"};async refreshOnServerVersionChange(e,t,n){if(!this.supportsJsonSchemaSupport(n))return;let i=(await this.readState(e.root)).servers?.[t.serverUrl];if(!i&&!await this.hasSuccAppWorkspaceSetting(e.root)||i?.version===n.version)return;let a=await t.getJsonSchemaSupport(),s=await this.materializeFiles(e.root,a,t);await this.updateWorkspaceSettings(e.root,s,!0),await this.updateState(e.root,t.serverUrl,n,!0)}async execute(e){return this.maintainJsonSchemaSupport(e,!e.dryRun)}async maintainJsonSchemaSupport(e,t){let n=this.getMaintenancePaths(e.workspace.root),o=await Ii(e.workspace);if(!o)return[this.createSkippedIssue(n,e.dryRun,"server-support-unavailable")];if(!this.supportsJsonSchemaSupport(o.serverInfo))return[this.createSkippedIssue(n,e.dryRun,"server-capability-missing")];let i=this.createMaintenanceRun(e,n,t,o);if(i.applyWorkspaceConfiguration!==!0&&i.forceRefresh!==!0&&!await this.hasSuccAppWorkspaceSetting(i.root))return[];let a;try{a=await this.createMaintenancePlan(i)}catch(s){return ql.warn(`plan JSON Schema support failed: ${i.root}`,s),[this.createIssue(i.localPaths,bo(),["schema-files-outdated"])]}if(!i.apply)return a.causes.length>0?[this.createIssue(i.localPaths,vt(),a.causes)]:[];if(a.causes.length===0)return[];try{let s=a.manifest??await i.client.getJsonSchemaSupport();if(!s)throw new Error(`JSON Schema support manifest is invalid: ${this.getManifestPath(i.root)}`);let c=a.shouldDownloadSchemas?await this.materializeFiles(i.root,s,i.client,a.schemaContents):s.schemas,l=await this.updateWorkspaceSettings(i.root,c,!0),p=await this.updateState(i.root,i.client.serverUrl,i.serverInfo,!0);return a.shouldDownloadSchemas||l||p?[this.createIssue(i.localPaths,pt(),a.causes)]:[]}catch(s){return ql.warn(`apply JSON Schema support failed: ${i.root}`,s),[this.createIssue(i.localPaths,bo(),a.causes)]}}async createMaintenancePlan(e){let t=await e.client.getJsonSchemaSupport(),n=this.normalizeSchemas(t),o={schemas:n},i=await this.downloadSchemaContents(n,e.client),a=e.forceRefresh===!0||await this.hasSchemaFileChanges(e.root,n,i),s=[];return a&&s.push("schema-files-outdated"),await this.updateWorkspaceSettings(e.root,n,!1)&&s.push("settings-outdated"),await this.updateState(e.root,e.client.serverUrl,e.serverInfo,!1)&&s.push("state-outdated"),{causes:s,shouldDownloadSchemas:a,manifest:o,schemaContents:i}}createMaintenanceRun(e,t,n,o){return{root:e.workspace.root,localPaths:t,apply:n,...this.createExecutionOptions(e,o)}}createExecutionOptions(e,t){let n=Vl(e.taskOptions);return{...t,applyWorkspaceConfiguration:!0,forceRefresh:n.refreshServerSupport}}supportsJsonSchemaSupport(e){return Ja(e,TA)}getMaintenancePaths(e){return[this.getSupportRoot(e),this.getManifestPath(e),$r(e)]}createIssue(e,t,n=[]){return Ft({code:sP,taskId:Ym,repairable:!0,level:"info",localPaths:e,properties:{item:"json-schema-support",causes:n},execution:t})}createSkippedIssue(e,t,n){return Ft({code:sP,taskId:Ym,repairable:!1,level:"warning",localPaths:e,properties:{item:"json-schema-support"},execution:Vn(t,n)})}async materializeFiles(e,t,n,o){let i=this.getSupportRoot(e),a=pa(e,`${MA}${Date.now()}`);await Pr.promises.rm(a,{recursive:!0,force:!0});try{await Pr.promises.mkdir(a,{recursive:!0});let s=this.normalizeSchemas(t);await Ke(xo.join(a,Xm),JSON.stringify({schemas:s},null," ")+`
83
+ `);let c=new Map(s.map(l=>[l.path,l]));return await Promise.all(Array.from(c.values()).map(async l=>{let p=o?.get(l.path),d=p!==void 0?p:await n.downloadJsonSchema(l.source),g=Iu(a,l.path,"JSON Schema path");await Pr.promises.mkdir(xo.dirname(g),{recursive:!0}),await Pr.promises.writeFile(g,d,"utf8")})),await Pr.promises.rm(i,{recursive:!0,force:!0}),await Pr.promises.rename(a,i),s}catch(s){throw await Pr.promises.rm(a,{recursive:!0,force:!0}).catch(c=>{ql.debug(`cleanup temporary JSON Schema support directory failed: ${a}`,c)}),s}}normalizeSchemas(e){return e.schemas.map(t=>({...t,path:vn(t.path,"JSON Schema path"),source:vn(t.source,"JSON Schema source")}))}async downloadSchemaContents(e,t){let n=new Map,o=Array.from(new Map(e.map(i=>[i.path,i])).values());return await Promise.all(o.map(async i=>{n.set(i.path,await t.downloadJsonSchema(i.source))})),n}async hasSchemaFileChanges(e,t,n){let o=this.getSupportRoot(e);if(!await ee(o))return!0;let i=JSON.stringify({schemas:t},null," ")+`
84
+ `;if(await this.readSupportTextIfFile(this.getManifestPath(e))!==i)return!0;let a=new Set([Xm,...t.map(s=>s.path)]);for(let s of await this.listSupportFiles(o))if(s!==cP&&!a.has(s))return!0;for(let s of t){let c=Iu(o,s.path,"JSON Schema path");if(await this.readSupportTextIfFile(c)!==n.get(s.path))return!0}return!1}async readSupportTextIfFile(e){try{return(await Pr.promises.stat(e)).isFile()?await Pr.promises.readFile(e,"utf8"):void 0}catch(t){if(x(t))return;throw t}}async listSupportFiles(e){let t=[];return await this.collectSupportFiles(e,"",t),t}async collectSupportFiles(e,t,n){let o=t?xo.join(e,...t.split("/")):e,i=await Pr.promises.readdir(o,{withFileTypes:!0});for(let a of i){let s=t?`${t}/${a.name}`:a.name;if(a.isDirectory()){await this.collectSupportFiles(e,s,n);continue}a.isFile()&&n.push(s)}}async updateWorkspaceSettings(e,t,n){let o=$r(e),i=await qe(o),a=Vt(i,{...hr,filePath:o,ignoreParseError:!0});if(!a)return!1;let s=Vr(i);return s=this.upsertMissingJsonSchemas(s,a,t),s===Vr(i)?!1:(n&&await Ke(o,s),!0)}async hasSuccAppWorkspaceSetting(e){let t=await co($r(e),hr);return t?(Array.isArray(t["json.schemas"])?t["json.schemas"]:[]).filter(o=>this.isJsonSchemaSetting(o)).some(o=>{let i=o.url.replace(/\\/g,"/");return i.startsWith(`./${$t}/${Xa}/`)||i.startsWith(`${$t}/${Xa}/`)}):!1}upsertMissingJsonSchemas(e,t,n){let o=Array.isArray(t["json.schemas"])?t["json.schemas"]:[],i=n.filter(p=>p.fileMatch.length>0).map(p=>({fileMatch:p.fileMatch,url:`./${$t}/${Xa}/${p.path}`})),a=new Map(i.map(p=>[this.normalizeSettingUrl(p.url),p])),s=new Set,c=[],l=!1;for(let p of o){if(!this.isJsonSchemaSetting(p)){c.push(p);continue}let d=this.normalizeSettingUrl(p.url);if(!this.isSuccAppJsonSchemaUrl(d)){c.push(p);continue}if(s.has(d)){l=!0;continue}let g=a.get(d);if(!g){l=!0;continue}s.add(d),c.push(g),Qt(p,g)||(l=!0)}for(let p of i){let d=this.normalizeSettingUrl(p.url);s.has(d)||(c.push(p),l=!0)}return l?qt(e,["json.schemas"],c):e}isJsonSchemaSetting(e){return z(e)&&typeof e.url=="string"}isSuccAppJsonSchemaUrl(e){return e.startsWith(`${$t}/${Xa}/`)}normalizeSettingUrl(e){return e.replace(/\\/g,"/").replace(/^\.\//,"")}async readState(e){let t=this.getStatePath(e),n=await qe(t);if(!n)return{};try{let o=JSON.parse(n);return this.isState(o)?o:{}}catch(o){return ql.debug(`skip JSON Schema support state because it cannot be parsed: ${t}`,o),{}}}isState(e){return typeof e=="object"&&e!==null&&(!("servers"in e)||typeof e.servers=="object"&&e.servers!==null&&!Array.isArray(e.servers))}async updateState(e,t,n,o){let i=await this.readState(e),a=i.servers?.[t],s=this.createServerState(n);if(a?.updatedAt&&Qt(this.createComparableServerState(a),s))return!1;let c={...i.servers};c[t]={...s,updatedAt:new Date().toISOString()};let l=this.getStatePath(e),p=JSON.stringify({...i,servers:c},null," ")+`
85
+ `;return p===await qe(l)?!1:(o&&await Ke(l,p),!0)}createServerState(e){return{version:e.version,productType:e.productType,devToolApiVersion:e.devToolApiVersion}}createComparableServerState(e){return{version:e.version,productType:e.productType,devToolApiVersion:e.devToolApiVersion}}getSupportRoot(e){return pa(e,Xa)}getManifestPath(e){return xo.join(this.getSupportRoot(e),Xm)}getStatePath(e){return xo.join(this.getSupportRoot(e),cP)}};var Wr=b(require("fs")),et=b(require("path"));we();F();Pt();K();te();Pt();var Qa=class r{constructor(e,t){this.filePath=e;this.content=t}content;changed=!1;static async read(e){return new r(e,await qe(e))}hasChanges(){return this.changed}getContent(){return this.content}upsertProjectReferences(e){let t=Vt(this.content,{...hr,filePath:this.filePath,ignoreParseError:!0});if(!t)return{updated:!1,mergeRequired:!0};let n=xA(t,e);return n===t?{updated:!1,mergeRequired:!1}:{updated:this.updateContent(qt(this.content,["references"],n.references)),mergeRequired:!1}}upsertGeneratedContent(e,t={}){return!this.content.trim()||t.overwrite===!0?{updated:this.updateContent(e),overwriteRequired:!1}:this.content===e?{updated:!1,overwriteRequired:!1}:{updated:!1,overwriteRequired:!0}}replaceContent(e){return this.updateContent(e)}async save(){return this.changed?(await Ke(this.filePath,Vr(this.content)),this.changed=!1,!0):!1}updateContent(e){return e===this.content?!1:(this.content=e,this.changed=!0,!0)}};function xA(r,e){let t=Array.isArray(r.references)?[...r.references]:[],n=!Array.isArray(r.references);for(let o of e)t.some(i=>FA(i,o))||(t.push({path:o}),n=!0);return n?{...r,references:t}:r}function FA(r,e){return IA(r)&&r.path===e}function IA(r){return typeof r=="object"&&r!==null&&"path"in r&&typeof r.path=="string"}H();U();var Qm="typescript-support",lP="err.workspace.issue.E404",DA="typescriptSupport",AA="succ-types",OA="succ-types.tmp-",uP="typescript-support.json",es="tsconfig.json",Zm="tsconfig.action.json",eh="tsconfig.browser.json",_A=et.posix.join(".vscode","settings.typescript-support.jsonc"),Oi=T("workspace.maintenance.typescript-support"),_i=class{capabilities={taskId:Qm,writeScopes:["init"],serverRequirement:"optional"};async refreshOnServerVersionChange(e,t,n){if(!this.supportsTypeScriptSupport(n))return;let i=(await this.readTypeScriptSupportState(e.root)).servers?.[t.serverUrl];!i||i.version===n.version||(await this.materializeTypeScriptSupportFiles(e.root,await t.getTypeScriptSupportApiLibs()),await this.updateTypeScriptTsConfigs(e.root,{},!0),await this.updateTypeScriptSupportState(e.root,t.serverUrl,n,!0))}async execute(e,t){return e.dryRun?this.maintainTypeScriptSupport(e,!1):t!==void 0&&!t.some(n=>n.repairable)?t:this.maintainTypeScriptSupport(e,!0)}async maintainTypeScriptSupport(e,t){let n=await this.getMaintenancePaths(e.workspace.root),o=await Ii(e.workspace);if(!o)return[this.createSkippedIssue(n,!t,"server-support-unavailable")];if(!this.supportsTypeScriptSupport(o.serverInfo))return[this.createSkippedIssue(n,!t,"server-capability-missing")];let i=this.createExecutionOptions(e,o),a=await this.createMaintenancePlan(e.workspace.root,i);if(!t)return a.causes.length>0?[this.createIssue(n,vt(),a.causes)]:[];if(a.causes.length===0)return[];try{let s=await this.updateTypeScriptSyncIgnore(e.workspace.root,!0);a.shouldDownloadTypes&&await this.materializeTypeScriptSupportFiles(e.workspace.root,await i.client.getTypeScriptSupportApiLibs());let c=await this.updateTypeScriptTsConfigs(e.workspace.root,i,!0),l=await this.updateTypeScriptSupportState(e.workspace.root,i.client.serverUrl,i.serverInfo,!0);return s||a.shouldDownloadTypes||c||l?[this.createIssue(n,pt(),a.causes)]:[]}catch(s){return Oi.warn(`apply TypeScript support failed: ${e.workspace.root}`,s),[this.createIssue(n,bo(),a.causes)]}}async createMaintenancePlan(e,t){let n=[];await this.updateTypeScriptSyncIgnore(e,!1)&&n.push("sync-ignore-outdated");let o=await this.hasAnyFile(Za(e)),i=t.forceRefresh===!0||!o;return i&&n.push("type-files-outdated"),await this.updateTypeScriptTsConfigs(e,t,!1)&&n.push("tsconfig-outdated"),await this.updateTypeScriptSupportState(e,t.client.serverUrl,t.serverInfo,!1)&&n.push("state-outdated"),{causes:n,shouldDownloadTypes:i}}createExecutionOptions(e,t){let n=Vl(e.taskOptions);return{...t,forceRefresh:n.refreshServerSupport,overwriteGeneratedTsConfig:!0}}supportsTypeScriptSupport(e){return nP(e,DA)}async getMaintenancePaths(e){let t=await LA(e);return t.length>0?t:[Za(e)]}createIssue(e,t,n=[]){return Ft({code:lP,taskId:Qm,repairable:!0,level:"info",localPaths:e,properties:{item:"typescript-support",causes:n},execution:t})}createSkippedIssue(e,t,n){return Ft({code:lP,taskId:Qm,repairable:!1,level:"warning",localPaths:e,properties:{item:"typescript-support"},execution:Vn(t,n)})}async hasAnyFile(e){let t=await Wr.promises.readdir(e,{withFileTypes:!0}).catch(n=>{if(x(n))return Oi.debug(`skip missing TypeScript support directory: ${e}`),[];throw n});for(let n of t)if(n.isFile()&&n.name!==uP||n.isDirectory()&&await this.hasAnyFile(et.join(e,n.name)))return!0;return!1}async materializeTypeScriptSupportFiles(e,t){let n=Za(e),o=et.join(nr(e),`${OA}${Date.now()}`);await Wr.promises.rm(o,{recursive:!0,force:!0});try{await Wr.promises.mkdir(o,{recursive:!0});for(let[i,a]of Object.entries(t)){let s=NA(i);if(!s||typeof a!="string")continue;let c=et.join(o,s);await Wr.promises.mkdir(et.dirname(c),{recursive:!0}),await Wr.promises.writeFile(c,a,"utf8")}await Wr.promises.rm(n,{recursive:!0,force:!0}),await Wr.promises.rename(o,n)}catch(i){throw await Wr.promises.rm(o,{recursive:!0,force:!0}).catch(a=>{Oi.debug(`cleanup temporary TypeScript support directory failed: ${o}`,a)}),i}}async updateTypeScriptTsConfigs(e,t,n){let o=nr(e);n&&await Wr.promises.mkdir(o,{recursive:!0});let i=await this.updateRootTsConfig(e,n),a=await this.updateGeneratedOrMissingTsConfig(et.join(o,Zm),await rn(et.posix.join($t,Zm)),t,n),s=await this.updateGeneratedOrMissingTsConfig(et.join(o,eh),await rn(et.posix.join($t,eh)),t,n);return i||a||s}async updateRootTsConfig(e,t){let n=et.join(e,es),o=await rn(es),i=await Qa.read(n);if(!i.getContent().trim())return i.replaceContent(o),t?i.save():!0;let a=i.upsertProjectReferences(await WA());return a.mergeRequired?(Oi.debug(`skip root tsconfig references merge because it cannot be parsed: ${n}`),!1):a.updated?t?i.save():!0:!1}async updateGeneratedOrMissingTsConfig(e,t,n,o){let i=await Qa.read(e),a=i.upsertGeneratedContent(t,{overwrite:n.overwriteGeneratedTsConfig===!0});return a.overwriteRequired?(o&&Oi.debug(`skip generated tsconfig overwrite without refresh permission: ${e}`),!1):a.updated?o?i.save():!0:!1}async updateTypeScriptSyncIgnore(e,t){let n=$r(e),o=await qe(n),i=Vt(o,{...hr,filePath:n,ignoreParseError:!0});if(!i)return!1;let a=await To(_A),s=Ga(a,"succapp.sync.ignore"),c=Array.isArray(i["succapp.sync.ignore"])?i["succapp.sync.ignore"].filter(p=>typeof p=="string"):[],l=s.filter(p=>!c.includes(p));return l.length===0?!1:(t&&(await Ke(n,qt(o,["succapp.sync.ignore"],[...c,...l])),Ct.load()),!0)}async readTypeScriptSupportState(e){let t=pP(e),n=await qe(t);if(!n)return{};try{let o=JSON.parse(n);return jA(o)?o:{}}catch(o){return Oi.debug(`skip TypeScript support state because it cannot be parsed: ${t}`,o),{}}}async updateTypeScriptSupportState(e,t,n,o){let i=await this.readTypeScriptSupportState(e),a=i.servers?.[t],s=BA(n);if(a?.updatedAt&&Qt(VA(a),s))return!1;let c={...i.servers};c[t]={...s,updatedAt:new Date().toISOString()};let l=pP(e),p=JSON.stringify({...i,servers:c},null," ")+`
86
+ `;return p===await qe(l)?!1:(o&&await Ke(l,p),!0)}};async function LA(r){let e=[et.join(r,es),et.join(nr(r),Zm),et.join(nr(r),eh),Za(r)],t=[];for(let n of e)await ee(n)&&t.push(n);return t}function NA(r){return Hr(r)?.split("/").join(et.sep)}async function WA(){let r=await To(es),e=Array.isArray(r.references)?r.references.map(t=>UA(t)?t.path:void 0).filter(t=>typeof t=="string"):[];return $(e.length>0,`Workspace template does not declare TypeScript references: ${await Bl(es)}`),e}function UA(r){return typeof r=="object"&&r!==null&&"path"in r&&typeof r.path=="string"}function Za(r){return pa(r,AA)}function pP(r){return et.join(Za(r),uP)}function jA(r){return typeof r=="object"&&r!==null&&(!("servers"in r)||typeof r.servers=="object"&&r.servers!==null&&!Array.isArray(r.servers))}function BA(r){return{version:r.version,productType:r.productType,devToolApiVersion:r.devToolApiVersion}}function VA(r){return{version:r.version,productType:r.productType,devToolApiVersion:r.devToolApiVersion}}var th=T("workspace.maintenance.support-refresh");async function dP(r,e,t){await r.lockManager.withLock({scopes:["init"],command:"workspace-support-refresh"},async()=>qA(r,e,t))}async function qA(r,e,t){try{await new _i().refreshOnServerVersionChange(r,e,t)}catch(n){th.warn(`refresh TypeScript support after server version change failed: ${r.root}`,n)}try{await new Ai().refreshOnServerVersionChange(r,e,t)}catch(n){th.warn(`refresh JSON Schema support after server version change failed: ${r.root}`,n)}try{await new Di().refreshOnServerVersionChange(r,e,t)}catch(n){th.warn(`refresh frontend development skill support failed: ${r.root}`,n)}}jr();dn();jr();K();D();U();var hP=b(require("node:path"));He();U();K();H();So();var mP="sync-baseline",rh=50,nn=T("workspace.maintenance.sync-baseline"),$l=class{capabilities={taskId:mP,writeScopes:["sync"],serverRequirement:"required"};async execute(e,t){let n=t!==void 0?[...t]:await this.detectBaselineIssues(e);if(nn.info("sync-baseline maintenance scan result: issues={0} paths={1}",n.length,this.formatIssuePaths(n)),e.dryRun||n.length===0)return n.map(l=>this.withExecution(l,this.createDryRunExecution(l)));let o=await this.listServerProjectNames(e),{repairableIssues:i,unresolved:a}=this.evaluateRepairability(n,o);nn.info("sync-baseline maintenance repair plan: repairable={0} unresolved={1} repairablePaths={2} unresolvedPaths={3}",i.length,a.length,this.formatIssuePaths(i),this.formatIssuePaths(a));let s=[],c=[];if(i.length>0){await this.fetchBaselineProjects(e,i);let l=await this.detectBaselineIssues(e);({repaired:s,unresolved:c}=this.evaluateRepairResult(i,l))}return nn.info("sync-baseline maintenance result: repaired={0} unresolved={1} repairedPaths={2} unresolvedPaths={3}",s.length,a.length+c.length,this.formatIssuePaths(s),this.formatIssuePaths([...a,...c])),[...s.map(l=>this.withExecution(l,pt())),...a.map(l=>this.withExecution(l,Nr())),...c.map(l=>this.withExecution(l,Nr()))]}async detectBaselineIssues(e){e.task.throwIfAborted(),nn.info("sync-baseline maintenance start: dryRun={0} targets={1}",e.dryRun,this.formatPaths(e.targetRemotePaths));let t=await e.workspace.listWorkspaceProjects(),n=new Set(await e.workspace.listBaselineProjects(e.activeServerUrl)),o=this.resolveTargetProjectNames(e),i=this.resolveTargetRemotePaths(e);nn.info("sync-baseline project lists: workspaceProjects={0} baselineProjects={1} targetProjects={2}",this.formatProjectNames(t),this.formatProjectNames([...n]),o?this.formatProjectNames([...o]):"<all>");let a=new yt(e.workspace.getMirrorRoot(e.activeServerUrl)),s=[],c=t.filter(l=>!o||o.has(l));for(let l of c){if(!n.has(l)){s.push(this.createMissingBaselineProjectIssue(l));continue}let p=await this.detectIncompleteBaselineIssues(a,l);s.push(...this.filterIssuesByTargets(p,i))}return s}async detectIncompleteBaselineIssues(e,t){let n=Et(t),o=[];return await this.detectDirectoryBaselineIssues(e,t,n,o),o}async detectDirectoryBaselineIssues(e,t,n,o){let i=hP.posix.join(n,J),a=await vr(e.root,i);if(!a.exists){o.push(this.createMissingBaselineMetaIssue(t,n,i));return}if(a.exists&&!a.readable){o.push(this.createUnreadableBaselineMetaIssue(t,n,i));return}let s=Object.keys(a.dotMeta),c=s.find(l=>!this.isValidDotMetaKey(l));if(c){o.push(this.createInvalidBaselineMetaIssue(t,n,i,c));return}for(let l of s){let p=this.joinRemotePath(n,l),d=a.dotMeta[l];if(!await e.exists(p)){o.push(this.createMissingBaselineResourceIssue(t,p));continue}let m=await e.isFolder(p),f=this.getExplicitFolderType(d);if(f!==void 0&&f!==m){o.push(this.createBaselineResourceTypeIssue(t,p,f,m));continue}m&&await this.detectDirectoryBaselineIssues(e,t,p,o)}}resolveTargetProjectNames(e){if(!e.targetRemotePaths||e.targetRemotePaths.length===0)return;let t=e.targetRemotePaths.map(n=>this.getProjectName(ae(n))).filter(n=>!!n);return t.length>0?new Set(t):void 0}resolveTargetRemotePaths(e){if(!(!e.targetRemotePaths||e.targetRemotePaths.length===0))return e.targetRemotePaths.map(t=>ae(t))}filterIssuesByTargets(e,t){return!t||t.length===0?e:e.filter(n=>n.remotePaths.some(o=>t.some(i=>kn(o,void 0,i,void 0))))}getProjectName(e){return je(e)?.replace(/^\//,"")}createMissingBaselineProjectIssue(e){let t=Et(e);return this.createIssue("err.workspace.issue.E305",!0,[t],{projectName:e,issueCause:"baselineProjectMissing"})}createMissingBaselineResourceIssue(e,t){return this.createIssue("err.workspace.issue.E302",!0,[t],{projectName:e,issueCause:"baselineResourceMissing"})}createBaselineResourceTypeIssue(e,t,n,o){return this.createIssue("err.workspace.issue.E301",!0,[t],{projectName:e,issueCause:"baselineResourceTypeMismatch",expectedType:n?"folder":"file",actualType:o?"folder":"file"})}createMissingBaselineMetaIssue(e,t,n){return this.createIssue("err.workspace.issue.E303",!0,[t],{projectName:e,issueCause:"baselineMetaMissing",dotMetaPath:n})}createUnreadableBaselineMetaIssue(e,t,n){return this.createIssue("err.workspace.issue.E304",!0,[t],{projectName:e,issueCause:"baselineMetaUnreadable",dotMetaPath:n})}createInvalidBaselineMetaIssue(e,t,n,o){return this.createIssue("err.workspace.issue.E304",!0,[t],{projectName:e,issueCause:"baselineMetaInvalidKey",dotMetaPath:n,invalidKey:o})}createIssue(e,t,n,o){return{code:e,taskId:mP,repairable:t,level:t?"warning":"error",localPaths:[],remotePaths:n,properties:o}}async listServerProjectNames(e){let n=await(await e.workspace.requireServerClient(e.activeServerUrl)).getProjects();return nn.info("sync-baseline server projects loaded: count={0} projects={1}",n.length,this.formatProjectNames(n.map(o=>o.name))),new Set(n.map(o=>o.name))}canRepairIssue(e,t){let n=this.getSingleProjectName(e);return!!n&&t.has(n)}evaluateRepairability(e,t){let n=[],o=[];for(let i of e)this.canRepairIssue(i,t)?n.push(i):o.push(this.createServerMissingIssue(i));return{repairableIssues:n,unresolved:o}}createServerMissingIssue(e){let t=this.getSingleProjectName(e);return{...e,code:"err.workspace.issue.E307",repairable:!1,level:"error",properties:{...e.properties,projectName:t??"",issueCause:"serverProjectMissing"}}}evaluateRepairResult(e,t){let n=new Set(t.map(s=>this.getIssueKey(s))),o=new Set(e.map(s=>this.getIssueKey(s))),i=[],a=[];for(let s of e)n.has(this.getIssueKey(s))?a.push(this.createBaselineStillMissingIssue(s)):i.push(s);for(let s of t)o.has(this.getIssueKey(s))||a.push(s);return{repaired:i,unresolved:a}}createBaselineStillMissingIssue(e){return{...e,code:"err.workspace.issue.E306",repairable:!1,level:"error",properties:{...e.properties,originalIssueCause:this.getIssueCause(e),issueCause:"baselineStillMissingAfterFetch"}}}async fetchBaselineProjects(e,t){let n=[...new Set(t.map(o=>this.getSingleProjectName(o)).filter(o=>!!o))];if(n.length===0){nn.info("sync-baseline fetch skipped: no repairable project names");return}nn.info("sync-baseline fetch start: projects={0}",this.formatProjectNames(n)),await new Un(e.workspace,{projectNames:n,forceRefresh:!0,task:e.task}).execute(),nn.info("sync-baseline fetch done: projects={0}",this.formatProjectNames(n))}createDryRunExecution(e){return e.repairable?vt():Nr(!0)}withExecution(e,t){return{...e,execution:t}}getIssueKey(e){return[e.code,this.getIssueCause(e),...e.remotePaths].join("|")}getIssueCause(e){let t=e.properties?.issueCause;return typeof t=="string"?t:""}getSingleProjectName(e){let t=e.properties?.projectName;if(typeof t=="string"&&t)return t;let n=e.remotePaths[0];return n?this.getProjectName(n):void 0}getExplicitFolderType(e){if(e.type==="file"||e.hash!==void 0||e.size!==void 0&&e.size>0)return!1;if(e.type)return!0}joinRemotePath(e,t){return e==="/"?"/"+t:e+"/"+t}isValidDotMetaKey(e){return Hr(e)===e&&!e.includes("/")&&e!==J}formatIssuePaths(e){return this.formatPaths(e.flatMap(t=>t.remotePaths))}formatProjectNames(e){return this.formatPaths(e.map(t=>Et(t)))}formatPaths(e){if(!e||e.length===0)return"<none>";let t=e.slice(0,rh),n=e.length>rh?` ...(+${e.length-rh})`:"";return t.join(",")+n}};H();U();var ts="workspace-config",nh="err.workspace.issue.E201",$A="err.workspace.issue.E202",fP="err.workspace.issue.E203",HA="err.workspace.issue.E204",Hl=class{capabilities={taskId:ts,writeScopes:["config"],serverRequirement:"none"};async execute(e,t){let n=t??await this.detectIssues(e);if(e.dryRun)return n.map(i=>this.withExecution(i,this.planIssue(i)));let o=[];for(let i of n)o.push(this.withExecution(i,await this.applyIssue(e,i)));return o}async detectIssues(e){await e.workspace.config.ensureLoaded();let t=e.workspace.config.get(),n=await ee(e.workspace.config.path);if(!t&&n)return[this.createInvalidJsonIssue(e.workspace.config.path)];if(!t)return[this.createMissingConfigIssue(e.workspace.config.path,e.server)];if(!e.server)return[];if(this.isEmptyServerConfig(t))return[this.createServerRequiredIssue(e.workspace.config.path,e.server)];let o=t.activeServerUrl||void 0;return!o||!rt(e.server,o)?[this.createServerMismatchIssue(e.workspace.config.path,e.server,o)]:[]}planIssue(e){return e.repairable?vt():Nr(!0)}async applyIssue(e,t){return t.repairable?e.server&&(t.code===nh||t.code===fP)?(await e.workspace.config.initialize(e.server),pt()):t.code===nh?(await e.workspace.config.ensureFile(),pt()):Nr():Nr()}createMissingConfigIssue(e,t){return{code:nh,taskId:ts,repairable:!0,level:"warning",localPaths:[e],remotePaths:[],properties:this.removeUndefinedProperties({configPath:e,server:t})}}createInvalidJsonIssue(e){return{code:$A,taskId:ts,repairable:!1,level:"error",localPaths:[e],remotePaths:[],properties:{configPath:e}}}createServerRequiredIssue(e,t){return{code:fP,taskId:ts,repairable:!0,level:"warning",localPaths:[e],remotePaths:[],properties:{configPath:e,server:t}}}createServerMismatchIssue(e,t,n){return{code:HA,taskId:ts,repairable:!1,level:"error",localPaths:[e],remotePaths:[],properties:this.removeUndefinedProperties({configPath:e,server:t,activeServer:n})}}withExecution(e,t){return{...e,execution:t}}isEmptyServerConfig(e){return(e.servers?.length??0)===0&&!e.activeServerUrl}removeUndefinedProperties(e){let t={};for(let[n,o]of Object.entries(e))o!==void 0&&(t[n]=o);return t}};var yP=b(require("fs")),CP=b(require("path"));we();Pt();H();U();var gP="workspace-agent-files",zA="err.workspace.issue.E403",GA="agent-workspace-template.jsonc",zl=class{capabilities={taskId:gP,writeScopes:["init"],serverRequirement:"none"};async execute(e){let t=await this.maintainTemplateTargets(e.workspace.root,!e.dryRun);return(e.dryRun?t.missingPaths.length>0:t.updated)?[this.createIssue(t.missingPaths,e.dryRun?vt():pt())]:[]}async maintainTemplateTargets(e,t){let n=await this.readTemplateTargets(e),o=[],i=!1;for(let a of n.files)await ee(a.targetPath)||(o.push(a.targetPath),t&&(await Ke(a.targetPath,await rn(a.relativePath)),i=!0));for(let a of n.directories)await ee(a.targetPath)||(o.push(a.targetPath),t&&(await yP.promises.mkdir(a.targetPath,{recursive:!0}),i=!0));return{missingPaths:o,updated:i}}async readManifest(){let e=await To(GA);return{files:Ga(e,"files"),directories:Ga(e,"directories")}}async readTemplateTargets(e){let t=await this.readManifest();return{files:t.files.map(n=>this.toTemplateTarget(e,n)),directories:t.directories.map(n=>this.toTemplateTarget(e,n))}}toTemplateTarget(e,t){let n=KA(t);return{relativePath:n,targetPath:CP.join(e,...n.split("/"))}}createIssue(e,t){return Ft({code:zA,taskId:gP,repairable:!0,level:"info",localPaths:e,properties:{item:"agent-files"},execution:t})}};function KA(r){let e=Hr(r);return $(e,`Unsafe workspace template path: ${r}`),e}var oh=b(require("path"));U();H();var SP="workspace-gitignore",JA="err.workspace.issue.E402",Gl=class{capabilities={taskId:SP,writeScopes:["init"],serverRequirement:"none"};async execute(e){return await oP(e.workspace,{apply:!e.dryRun})?[this.createIssue(e,e.dryRun?vt():pt())]:[]}createIssue(e,t){return Ft({code:JA,taskId:SP,repairable:!0,level:"info",localPaths:YA(e.workspace.root),properties:{item:"gitignore"},execution:t})}};function YA(r){return[oh.join(r,Mo),oh.join(nr(r),Mo)]}var kP=b(require("path"));Pt();te();H();U();var vP="workspace-settings",XA="err.workspace.issue.E401",QA=kP.posix.join(".vscode","settings.recommended.jsonc"),Kl=class{capabilities={taskId:vP,writeScopes:["init"],serverRequirement:"none"};async execute(e){return await this.updateRecommendedSettings(e.workspace.root,!e.dryRun)?[this.createIssue(e,e.dryRun?vt():pt())]:[]}async updateRecommendedSettings(e,t){let n=$r(e),o=await qe(n),i=Vt(o,{...hr,filePath:n,ignoreParseError:!0});if(!i)return!1;let a=await To(QA),s=Vr(o);return s=ZA(s,i,a),s===Vr(o)?!1:(t&&await Ke(n,s),!0)}createIssue(e,t){return Ft({code:XA,taskId:vP,repairable:!0,level:"info",localPaths:[$r(e.workspace.root)],properties:{item:"workspace-settings"},execution:t})}};function ZA(r,e,t){let n=r;for(let[o,i]of Object.entries(t)){if(z(i)){n=tO(n,e,o,i);continue}if(Array.isArray(i)){n=nO(n,e,o,i);continue}e[o]===void 0&&(n=qt(n,[o],i))}return n}function eO(r,e){return Object.entries(e).filter(([t])=>r[t]===void 0)}function tO(r,e,t,n){let o=rO(e,t),i=eO(o,n);if(i.length===0)return r;let a=r;if(e[t]!==void 0&&!z(e[t]))return qt(a,[t],{...o,...Object.fromEntries(i)});for(let[s,c]of i)a=qt(a,[t,s],c);return a}function rO(r,e){return z(r[e])?r[e]:{}}function nO(r,e,t,n){let o=Array.isArray(e[t])?e[t]:[],i=n.filter(a=>!oO(o,a));return i.length===0?r:qt(r,[t],[...o,...i])}function oO(r,e){return r.some(t=>Qt(t,e))}var Li=class{tasks=new Map;constructor(){this.register(new Hl),this.register(new Kl),this.register(new Gl),this.register(new zl),this.register(new _i),this.register(new Ai),this.register(new Di),this.register(new $l)}getTask(e){return this.tasks.get(e)}register(e){this.tasks.set(e.capabilities.taskId,e)}};var Ni=T("workspace.maintenance"),Jl=class{constructor(e,t,n){this.workspace=e;this.request=t;this.activeServerUrl=n}registry=new Li;async run(){let e=[],t=this.request.taskIds,n=new Set(this.request.explicitTaskIds??[]);Ni.info("workspace maintenance run start: dryRun={0} tasks={1} workspace={2} server={3}",this.request.dryRun===!0,t.join(","),this.workspace.root,this.activeServerUrl??"");let o=this.request.task??it.INSTANCE;o.start(t.length,{message:this.request.dryRun===!0?u("workspace.maintenance.progress.checkingAll"):u("workspace.maintenance.progress.updatingAll")});let i=t.map(()=>o.subTaskMonitor(1));for(let s=0;s<t.length;s++){let c=t[s],l=i[s];l.start(1,{message:u("workspace.maintenance.progress.checking",this.getTaskName(c),s+1,t.length),retainOnFinish:!0});let p=l.subTaskMonitor(1),d=this.registry.getTask(c),g;if(!d)g=[this.createUnsupportedTaskIssue(c)],Ni.warn("workspace maintenance task skipped: task={0} reason=notImplemented",c);else if(d.capabilities.serverRequirement==="required"&&!this.activeServerUrl)g=[this.createMissingServerIssue(d,n.has(c))],Ni.info("workspace maintenance task skipped: task={0} reason=noActiveServer",c);else{Ni.info("workspace maintenance task start: task={0}",c);let m=this.request.issues?this.request.issues.filter(f=>f.taskId===c):void 0;g=await d.execute({workspace:this.workspace,dryRun:this.request.dryRun===!0,explicit:n.has(c),server:this.request.server,activeServerUrl:this.activeServerUrl,targetRemotePaths:this.request.targetRemotePaths,taskOptions:this.request.taskOptions,task:p},m),Ni.info("workspace maintenance task done: task={0} issues={1}",c,g.length)}e.push(...g),l.setMessage(this.renderProgressFinishMessage(c,g)),l.finish()}let a=this.createReport(e);return Ni.info("workspace maintenance run done: dryRun={0} issues={1} planned={2} applied={3} blocked={4} failed={5}",a.dryRun,a.summary.issues,a.summary.planned,a.summary.applied,a.summary.blocked,a.summary.failed),a}createUnsupportedTaskIssue(e){return{code:"err.workspace.issue.E206",taskId:e,repairable:!1,level:"info",localPaths:[],remotePaths:[],properties:{},execution:{status:"skipped",dryRun:this.request.dryRun===!0}}}createMissingServerIssue(e,t){let n=e.capabilities.taskId,o=this.request.dryRun===!0,i="no-active-server";return{code:"err.workspace.issue.E205",taskId:n,repairable:!1,level:t?"warning":"info",localPaths:[],remotePaths:[],properties:{skipCause:i},execution:t?Nr(o):Vn(o,i)}}renderProgressFinishMessage(e,t){let n=this.getTaskName(e);return t.length===0?u("workspace.maintenance.progress.upToDate",n):t.some(o=>o.execution?.status==="failed")?u("workspace.maintenance.progress.failed",n):t.some(o=>o.execution?.status==="blocked")?u("workspace.maintenance.progress.blocked",n):t.some(o=>o.execution?.status==="applied")?u("workspace.maintenance.progress.updated",n):t.every(o=>o.execution?.status==="skipped")?u("workspace.maintenance.progress.skipped",n,this.getSkipCause(t)):u("workspace.maintenance.progress.checked",n)}getSkipCause(e){for(let t of e){let n=t.execution?.properties?.skipCause??t.properties?.skipCause;if(typeof n=="string")return n}return u("workspace.maintenance.progress.skipReason")}getTaskName(e){return u(`workspace.maint.task.${e.replace(/-([a-z])/g,(t,n)=>n.toUpperCase())}`)}createReport(e){let t=0,n=0,o=0,i=0,a=0,s=0;for(let c of e){c.repairable&&t++;let l=c.execution;if(l)switch(l.status){case"planned":n++;break;case"applied":o++;break;case"skipped":i++;break;case"blocked":a++;break;case"failed":s++;break}}return{workspaceRootPath:this.workspace.root,dryRun:this.request.dryRun===!0,serverUrl:this.activeServerUrl,requestedTaskIds:this.request.taskIds,summary:{issues:e.length,repairable:t,planned:n,applied:o,skipped:i,blocked:a,failed:s},issues:e}}};var Yl=class{constructor(e){this.workspace=e}registry=new Li;async run(e){await this.workspace.ensureConfigLoaded();let t=this.workspace.activeServerUrl||void 0;if(e.dryRun===!0)return this.createRunner(e,t).run();let n=this.resolveWriteScopes(e);if(n.length===0)return this.createRunner(e,t).run();let o=e.task&&e.task!==it.INSTANCE?e.task:new mn;return this.workspace.lockManager.withLock({scopes:n,command:"workspace-maintenance",wait:this.workspace.lockWait},async i=>(o.setAbortSignal(Ps(o.getAbortSignal(),i)),this.createRunner({...e,task:o},t).run()))}createRunner(e,t){return new Jl(this.workspace,e,t)}resolveWriteScopes(e){let t=new Set;for(let n of e.taskIds){let o=this.registry.getTask(n);if(o)for(let i of o.capabilities.writeScopes)t.add(i)}return Array.from(t)}};D();Fa();var iO=/^\d+\.\d+\.\d+$/;async function PP(r,e){let t=wP(e.version);if(!t)return{downgrades:[]};let n=wP(r),o=Gc(t,n);if(o===-1&&n){let i=[{kind:"server",currentVersion:t,baselineVersion:n}];return{downgrades:i,warningMessage:aO(i)}}return!n||o===void 0||o>0?{downgrades:[],newBaselineVersion:t}:{downgrades:[]}}function wP(r){let e=xa(r);if(e)return iO.test(e)?e:void 0}function aO(r){if(r.length===0)return;let e=r.map(t=>u("workspace.compat.serverVersion",t.currentVersion,t.baselineVersion));return[u("workspace.compat.connectedServerAppears"),...e].join(`
87
+ `)}var uh=b(require("fs")),dh=b(require("path")),AP=b(DP());H();K();F();var TO=T("workspace.gitignore"),MO=".gitignore",xO=new Set([".git",".succapp","node_modules"]),ep=class{constructor(e){this.workspaceRoot=e}matchers=[];async refresh(){let e=[];await this.collectIgnoreMatchers(this.workspaceRoot,"",e),this.matchers=e}matches(e){let t=Re(e),n=!1;for(let[o,i]of this.matchers.entries()){if(this.isMatcherBaseIgnored(i,o))continue;let a=this.getScopedIgnoreDecision(i,t);a!==void 0&&(n=a)}return n}async collectIgnoreMatchers(e,t,n){let o;try{o=await uh.promises.readdir(e,{withFileTypes:!0})}catch(a){if(x(a)){TO.debug(`skip unreadable gitignore directory: ${e}`);return}throw a}await this.addDirectoryGitIgnore(e,t,n);let i=o.filter(a=>a.isDirectory()&&!xO.has(a.name)).sort((a,s)=>a.name.localeCompare(s.name));for(let a of i){let s=t?`${t}/${a.name}`:a.name;await this.collectIgnoreMatchers(dh.join(e,a.name),s,n)}}async addDirectoryGitIgnore(e,t,n){let o=dh.join(e,MO),i;try{i=await uh.promises.readFile(o,"utf-8")}catch(a){if(x(a))return;throw a}n.push({baseRelativePath:t,matcher:(0,AP.default)({allowRelativePaths:!0}).add(i)})}getScopedIgnoreDecision(e,t){let n=this.toScopedRelativePath(e.baseRelativePath,t);if(n===void 0||n==="")return;let o=this.testIgnore(e,n);if(o.ignored)return!0;if(o.unignored)return!1}testIgnore(e,t){let n=e.matcher.test(t);return n.ignored||n.unignored||t.endsWith("/")?n:e.matcher.test(`${t}/`)}isMatcherBaseIgnored(e,t){if(!e.baseRelativePath)return!1;let n=!1;for(let o=0;o<t;o++){let i=this.getScopedIgnoreDecision(this.matchers[o],e.baseRelativePath);i!==void 0&&(n=i)}return n}toScopedRelativePath(e,t){if(!e)return t;if(t===e)return"";let n=e+"/";if(t.startsWith(n))return t.slice(n.length)}};var Be=b(require("fs")),UP=b(require("os")),tp=b(require("path")),jP=b(fu());K();we();F();function BP(r){return new mh(r)}var FO=10*6e4,IO=".lock.json",DO=".lock",OP=1,ut=T("workspace.lock"),mh=class{root;identity;staleMs;locksDir;hostname;eventBus;listeners=new Set;activeLocks=new Set;eventListenerSubscription;lockWatcher;lockWatcherRequested=!1;lockWatchRefreshTimer;observedScopeHeld=new Map;nextLockId=1;disposed=!1;constructor(e){this.root=e.root,this.identity=e.identity??Io(),this.staleMs=e.staleMs??FO,this.locksDir=tp.join(this.root,".succapp","locks"),this.hostname=UP.hostname(),this.eventBus=e.eventBus,this.eventBus&&(this.eventListenerSubscription=this.eventBus.on("event.listener.changed",t=>{t.payload.id==="workspace.lock.changed"&&(t.payload.hasListeners?this.startLockWatcher():this.stopLockWatcher())}))}async withLock(e,t){$(!this.disposed,"WorkspaceLockManager has been disposed"),$(e.scopes&&e.scopes.length>0,"LockRequest.scopes must not be empty"),await Be.promises.mkdir(this.locksDir,{recursive:!0});let n=[...new Set(e.scopes)].sort(),o=new AbortController,i=this.nextLockId++,a={id:i,ownerId:`${process.pid}-${Date.now()}-${i}`,request:e,acquired:[],abortController:o,heartbeatTimer:void 0,heartbeatInFlight:void 0,releasing:!1};try{await this.acquireAllScopes(a,n)}catch(c){throw await this.releaseAllScopes(a),c}this.activeLocks.add(a);let s=this.buildHolders(a,n);try{for(let[c,l]of s)await this.writeHolderAtomic(this.holderPathFor(c),l)}catch(c){throw this.activeLocks.delete(a),await this.deleteAllHolders(a),await this.releaseAllScopes(a),c}this.startHeartbeat(a);for(let c of a.acquired)this.emitHolderChanged({scope:c.scope,holder:s.get(c.scope),reason:"acquired"});try{let c=await t(o.signal);if(NP(a))throw new Ur(e.command);return c}catch(c){throw NP(a)&&!(c instanceof Ur)?new Ur(e.command,{cause:c}):c}finally{a.releasing=!0,this.stopHeartbeat(a),await this.waitForHeartbeat(a),await this.deleteAllHolders(a),await this.releaseAllScopes(a),this.activeLocks.delete(a);for(let c of a.acquired)c.compromised||this.emitHolderChanged({scope:c.scope,holder:void 0,reason:"released"})}}async peekHolder(e){let t=this.holderPathFor(e),n;try{n=await Be.promises.readFile(t,"utf-8")}catch(i){if(x(i))return;ut.debug(`peekHolder failed for ${e}`,i);return}let o=this.parseHolderJson(n,e);if(o)try{let i=await Be.promises.stat(t);return{...o,lastHeartbeat:new Date(i.mtimeMs).toISOString()}}catch(i){return x(i)||ut.debug(`peekHolder stat failed for ${e}`,i),o}}async peekHolders(e=Fi){let t=await Promise.all(e.map(async n=>{let o=await this.peekHolder(n);return[n,o]}));return new Map(t)}async isHeldLock(e){return this.isHeldLocally(e)?!0:!!await this.peekHolder(e)}isHeldLocally(e){for(let t of this.activeLocks)if(t.acquired.some(n=>n.scope===e&&!n.compromised))return!0;return!1}onHolderChanged(e){return this.listeners.add(e),{dispose:()=>{this.listeners.delete(e)}}}dispose(){if(!this.disposed){this.disposed=!0,this.eventListenerSubscription?.dispose(),this.eventListenerSubscription=void 0,this.stopLockWatcher();for(let e of[...this.activeLocks])e.releasing=!0,this.stopHeartbeat(e),e.abortController.abort("lock-manager-disposed"),(async()=>{await this.waitForHeartbeat(e),await this.deleteAllHolders(e),await this.releaseAllScopes(e)})().catch(t=>{ut.debug("cleanup lock resources on dispose failed",t)});this.activeLocks.clear(),this.listeners.clear()}}async acquireAllScopes(e,t){for(let n of t){let o=await this.acquireSingleScope(e,n,t);e.acquired.push(o)}}async acquireSingleScope(e,t,n){let o=Date.now()+AO(e.request.wait),i;for(;;){let a=await this.findBlockingExistingLock(t);if(a.blocked){if(i=a.holder,!_P(o))throw new Yn(e.request.command,n,t,WP(i));await LP(o);continue}try{let s=await jP.lock(this.lockfilePathFor(t),{lockfilePath:this.lockfilePathFor(t),realpath:!1,stale:this.staleMs,retries:0,onCompromised:c=>this.onScopeCompromised(e,t,c)});return{scope:t,lockfilePath:this.lockfilePathFor(t),holderPath:this.holderPathFor(t),release:s,compromised:!1}}catch(s){if(!Ss(s))throw s;if(i=await this.peekHolder(t),_P(o)){await LP(o);continue}throw new Yn(e.request.command,n,t,WP(i))}}}async findBlockingExistingLock(e){try{await Be.promises.stat(this.lockfilePathFor(e))}catch(n){if(x(n))return{blocked:!1};throw n}let t=await this.peekHolder(e);return await this.tryClearStaleLock(e,t)?{blocked:!1}:{blocked:!0,holder:t}}async tryClearStaleLock(e,t){return t?t.hostname!==this.hostname||this.isProcessAlive(t.pid)||!await this.isLockDirStale(e)?!1:(ut.info(`auto-clear stale lock scope=${e} pid=${t.pid} command=${t.command}`),this.removeLockFiles(e,t)):this.tryClearOrphanedLockDir(e)}async tryClearOrphanedLockDir(e){if(!await this.isLockDirStale(e))return!1;let t=this.lockfilePathFor(e),n=`${t}.stale-${process.pid}-${Date.now()}`;try{await Be.promises.rename(t,n)}catch(o){if(x(o))return!1;throw o}return ut.info(`auto-clear orphan lock dir scope=${e}`),await Be.promises.rm(n,{recursive:!0,force:!0}).catch(o=>{ut.debug(`delete orphan lock tombstone ${e} failed`,o)}),!0}async releaseAllScopes(e){for(let t of[...e.acquired].reverse())if(!t.compromised)try{await t.release()}catch(n){ut.warn(`release scope ${t.scope} failed`,n)}}buildHolders(e,t){let n=new Date().toISOString(),o=e.request.source??this.identity.source,i=new Map;for(let a of t)i.set(a,{version:OP,ownerId:e.ownerId,pid:process.pid,hostname:this.hostname,source:o,command:e.request.command,scope:a,alsoHolds:t.filter(s=>s!==a),startTime:n,lastHeartbeat:n,agentVersion:this.identity.agentVersion});return i}async deleteAllHolders(e){for(let t of e.acquired)try{let n=await this.peekHolder(t.scope);if(!n||n.ownerId!==e.ownerId)continue;await Be.promises.unlink(t.holderPath)}catch(n){if(x(n))continue;ut.debug(`delete holder json ${t.scope} failed`,n)}}startHeartbeat(e){let t=Math.max(1e3,Math.floor(this.staleMs/2)),n=setInterval(()=>{this.scheduleHeartbeat(e)},t);n.unref?.(),e.heartbeatTimer=n}stopHeartbeat(e){e.heartbeatTimer&&(clearInterval(e.heartbeatTimer),e.heartbeatTimer=void 0)}scheduleHeartbeat(e){if(e.releasing||e.heartbeatInFlight)return;let t=this.refreshHeartbeat(e).finally(()=>{e.heartbeatInFlight===t&&(e.heartbeatInFlight=void 0)});e.heartbeatInFlight=t}async waitForHeartbeat(e){e.heartbeatInFlight&&await e.heartbeatInFlight}async refreshHeartbeat(e){let t=new Date;for(let n of e.acquired)if(!(e.releasing||n.compromised))try{await Be.promises.utimes(n.holderPath,t,t)}catch(o){if(x(o))continue;ut.debug(`heartbeat refresh failed for ${n.scope}`,o)}}onScopeCompromised(e,t,n){ut.warn(`lock scope ${t} compromised during ${e.request.command}`,n);let o=e.acquired.find(a=>a.scope===t),i=o?.compromised??!1;o&&(o.compromised=!0),e.abortController.signal.aborted||e.abortController.abort(new Ur(e.request.command)),i||this.emitHolderChanged({scope:t,holder:void 0,reason:"compromised"})}async writeHolderAtomic(e,t){let n=`${e}.${process.pid}.${Date.now()}.tmp`;await Be.promises.writeFile(n,JSON.stringify(t,null,2),"utf-8");try{await Be.promises.rename(n,e)}catch(o){throw await Be.promises.unlink(n).catch(()=>{}),o}}parseHolderJson(e,t){try{let n=JSON.parse(e);return typeof n.pid!="number"||typeof n.hostname!="string"||typeof n.command!="string"||typeof n.source!="string"||!_O(n.source)||typeof n.ownerId!="string"||n.ownerId.length===0||typeof n.startTime!="string"?void 0:{version:OP,ownerId:n.ownerId,pid:n.pid,hostname:n.hostname,source:n.source,command:n.command,scope:n.scope??t,alsoHolds:Array.isArray(n.alsoHolds)?[...n.alsoHolds]:[],startTime:n.startTime,lastHeartbeat:typeof n.lastHeartbeat=="string"&&n.lastHeartbeat.length>0?n.lastHeartbeat:n.startTime,agentVersion:typeof n.agentVersion=="string"?n.agentVersion:""}}catch(n){ut.debug(`parse holder json for ${t} failed`,n);return}}async isLockDirStale(e){try{return(await Be.promises.stat(this.lockfilePathFor(e))).mtimeMs<Date.now()-this.staleMs}catch(t){if(x(t))return!1;throw t}}async removeLockFiles(e,t){let n=this.lockfilePathFor(e),o=this.holderPathFor(e);if(!await this.isLockDirStale(e))return!1;let i=`${n}.stale-${process.pid}-${Date.now()}`;try{await Be.promises.rename(n,i)}catch(s){if(x(s))return!1;throw s}let a=!1;try{let s=await this.peekHolder(e);return LO(s,t)?(await Be.promises.unlink(o).catch(c=>{if(!x(c))throw c}),!0):(a=await this.restoreTombstoneLock(e,i),!1)}finally{a||await Be.promises.rm(i,{recursive:!0,force:!0}).catch(s=>{ut.debug(`delete stale lock tombstone ${e} failed`,s)})}}async restoreTombstoneLock(e,t){let n=this.lockfilePathFor(e);try{return await Be.promises.rename(t,n),!0}catch(o){return x(o)||ut.debug(`restore stale lock tombstone ${e} failed`,o),!1}}isProcessAlive(e){if(e<=0||!Number.isFinite(e))return!1;try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}emitHolderChanged(e){for(let t of[...this.listeners])try{t(e)}catch(n){ut.warn(`holder changed listener threw for ${e.scope}`,n)}this.fireWorkspaceLockChanged(e.scope,e.reason==="acquired",e.holder)}startLockWatcher(){this.lockWatcherRequested=!0,!(this.disposed||this.lockWatcher)&&Be.promises.mkdir(this.locksDir,{recursive:!0}).then(()=>{this.disposed||!this.lockWatcherRequested||this.lockWatcher||(this.lockWatcher=Be.watch(this.locksDir,()=>{this.scheduleLockStateRefresh()}),this.lockWatcher.on("error",e=>{ut.debug(`workspace lock watcher failed: ${this.root}`,e),this.closeLockWatcher(),this.scheduleLockWatcherRestart()}),this.scheduleLockStateRefresh(0))}).catch(e=>{ut.debug(`start workspace lock watcher failed: ${this.root}`,e)})}stopLockWatcher(){this.lockWatcherRequested=!1,this.closeLockWatcher(),this.observedScopeHeld.clear()}closeLockWatcher(){this.lockWatchRefreshTimer&&(clearTimeout(this.lockWatchRefreshTimer),this.lockWatchRefreshTimer=void 0),this.lockWatcher&&(this.lockWatcher.close(),this.lockWatcher=void 0)}scheduleLockWatcherRestart(){if(!this.lockWatcherRequested||this.disposed)return;setTimeout(()=>this.startLockWatcher(),1e3).unref?.(),this.observedScopeHeld.clear()}scheduleLockStateRefresh(e=25){this.lockWatchRefreshTimer&&clearTimeout(this.lockWatchRefreshTimer),this.lockWatchRefreshTimer=setTimeout(()=>{this.lockWatchRefreshTimer=void 0,this.refreshObservedLockStates()},e),this.lockWatchRefreshTimer.unref?.()}async refreshObservedLockStates(){if(!(this.disposed||!this.lockWatcher))for(let e of Fi)await this.refreshObservedLockState(e)}async refreshObservedLockState(e){if(this.isHeldLocally(e))return;let t=await this.peekHolder(e);if((t?!0:await this.lockFileExists(e))&&!t){this.scheduleLockStateRefresh(50);return}let o=!!t,i=this.observedScopeHeld.get(e);if(i===void 0&&!o){this.observedScopeHeld.set(e,!1);return}i!==o&&this.fireWorkspaceLockChanged(e,o,t)}async lockFileExists(e){try{return await Be.promises.stat(this.lockfilePathFor(e)),!0}catch(t){return x(t)||ut.debug(`stat lock file failed for ${e}`,t),!1}}fireWorkspaceLockChanged(e,t,n){this.observedScopeHeld.set(e,t),this.eventBus?.fire(new Ge("workspace.lock.changed",{root:this.root,scope:e,held:t,holder:n},this))}lockfilePathFor(e){return tp.join(this.locksDir,`${e}${DO}`)}holderPathFor(e){return tp.join(this.locksDir,`${e}${IO}`)}};function AO(r){return!r||r<=0?0:r*1e3}function _P(r){return Date.now()<r}async function LP(r){let e=Math.max(0,Math.min(500,r-Date.now()));e>0&&await new Promise(t=>setTimeout(t,e))}var OO=new Set(Object.values(qi));function _O(r){return OO.has(r)}function NP(r){return r.acquired.some(e=>e.compromised)}function LO(r,e){return r?.ownerId===e.ownerId}function WP(r){if(r)return{pid:r.pid,hostname:r.hostname,source:r.source,command:r.command,scope:r.scope,alsoHolds:r.alsoHolds,startTime:r.startTime,lastHeartbeat:r.lastHeartbeat,agentVersion:r.agentVersion}}var rp=b(require("fs")),VP=b(require("path"));F();D();K();H();var hh=T("workspace.connection"),ji=class{constructor(e){this.workspace=e}async change(e,t,n){return await this.workspace.ensureConfigLoaded(),this.workspace.lockManager.withLock({scopes:["config","sync"],command:"change-server-url",wait:this.workspace.lockWait},()=>this.doChange(e,t,n))}async connect(e,t){await this.workspace.ensureConfigLoaded();let n=this.workspace.config.resolveServerUrl(e);if(!n)throw new Error(`server not configured: ${e}`);if(t){let c=await this.withAuthContext(n,()=>Ys(n,t)),l=await this.withAuthContext(n,()=>this.createVerifiedCredentialConnection(n,c));return await this.storeVerifiedConnectionCredential(n,c,l.client),await this.setActiveServerUrlForConnection(n),{serverUrl:n,connection:l}}if(!await lo(n))throw new Oe({workspaceRoot:this.workspace.root,serverUrl:n});let i=this.createServerClient(n);await i.verify();let a=await i.getServerInfo();hh.info(`session restored: ${n}`);let s={serverUrl:n,connection:{client:i,serverInfo:a}};return await this.setActiveServerUrlForConnection(n),s}async doChange(e,t,n){let o=this.workspace.config.resolveServerUrl(e);if(!o)throw new Error(u("workspace.server.serverNotConfigured",e));let i=this.workspace.config.validateServerUrlChange(o,t),a=n?await this.withAuthContext(i,()=>Ys(i,n)):void 0,s=a?await this.withAuthContext(i,()=>this.createVerifiedCredentialConnection(i,a)):void 0,c=fr(o),l=fr(i),p=this.workspace.getMirrorRoot(o),d=this.workspace.getMirrorRoot(i),g=!1,m=!1,f="";try{if(c!==l&&await ee(p)){if(await ee(d))throw new Error(u("workspace.server.serverMirrorExists",d));await rp.promises.mkdir(VP.dirname(d),{recursive:!0}),await rp.promises.rename(p,d),g=!0}return f=await this.workspace.config.changeServerUrl(o,i),m=!0,a&&s&&await this.storeVerifiedConnectionCredential(f,a,s.client),{oldServerUrl:o,serverUrl:f,connection:s}}catch(y){throw await this.rollbackServerUrlChange({configChanged:m,changedServerUrl:f,oldConfiguredServerUrl:o,mirrorMoved:g,oldMirrorRoot:p,newMirrorRoot:d}),y}}async rollbackServerUrlChange(e){if(e.configChanged)try{await this.workspace.config.changeServerUrl(e.changedServerUrl,e.oldConfiguredServerUrl)}catch(t){hh.warn(`rollback server config failed: ${e.changedServerUrl} -> ${e.oldConfiguredServerUrl}`,t)}if(e.mirrorMoved)try{await rp.promises.rename(e.newMirrorRoot,e.oldMirrorRoot)}catch(t){hh.warn(`rollback server mirror failed: ${e.newMirrorRoot} -> ${e.oldMirrorRoot}`,t)}}async setActiveServerUrlForConnection(e){await this.workspace.lockManager.withLock({scopes:["config","sync"],command:"switch-active-server",wait:this.workspace.lockWait},async()=>{await this.workspace.config.setActiveServerUrl(e)})}async withAuthContext(e,t){try{return await t()}catch(n){throw n instanceof Oe&&n.withContext({workspaceRoot:this.workspace.root,serverUrl:e}),n}}async createVerifiedCredentialConnection(e,t){let n=this.createServerClient(e,{initialCredential:t});await n.verify();let o=await n.getServerInfo();return{client:n,serverInfo:o}}async storeVerifiedConnectionCredential(e,t,n){await Mu(e,t)}createServerClient(e,t={}){return new wn(e,{workspaceRoot:this.workspace.root,...t})}};var Nt=T("workspace"),NO=6e4,fh=class{constructor(e,t,n,o=ja){this.root=e;this.eventBus=t;this.lockWait=o;this.connectedServerUrl=n?.connected?n.serverUrl:void 0,this.config=new bl(e,t,Sm()),this.gitIgnore=new ep(e),this.lockManager=BP({root:e,eventBus:t}),this.disposables.add(this.lockManager),this.syncStatusTracker=new Wl(this),this.disposables.add(this.eventBus.on("workspace.config.changed",i=>{i.payload.root===this.root&&this.onConfigChanged()})),this.startAutoSyncScheduler()}disposables=new Bn;config;connectedServerUrl;syncStatusTracker;gitIgnore;lockManager;fileChangeRefresh;metadataVersionCatalog=po.empty();metadataVersionCatalogLoaded=!1;initialized=!1;connectionInitializing=!1;autoSyncScheduler=null;startAutoSyncScheduler(){if(Io().source!=="ide")return;let e={onAutoPush:async()=>{let n=this.syncStatusTracker.getLocalChanges();if(n.length===0||await this.shouldYieldAutoSync())return;await this.createSyncService({agentSource:"auto-sync"}).push({changes:n})},onAutoPull:async()=>{if(await this.shouldYieldAutoSync())return;await this.createSyncService({agentSource:"auto-sync"}).pull()}},t=new Tl(this.root,this.eventBus,e);this.autoSyncScheduler=t,this.disposables.add(this.eventBus.on("settings.changed",n=>{n.payload.changedKeys.some(o=>o==="sync.autoPush"||o==="sync.autoPull"||o==="sync.autoPullInterval")&&this.autoSyncScheduler?.refreshAutoSync()})),this.disposables.add(t),t.startAutoPull()}get activeServerUrl(){return this.connectedServerUrl??this.config.getActiveServerUrl()}get isConnected(){return this.connectedServerUrl!==void 0}async ensureConfigLoaded(){await this.config.ensureLoaded()}async ensureActiveServerReady(){await this.ensureConfigLoaded();let e=this.activeServerUrl;if(!e)throw new mt(e);return e}async requireClient(){return this.requireServerClient()}async requireServerClient(e){await this.ensureConfigLoaded();let t=e??this.config.getActiveServerUrl();if(!t)throw new mt(t);let n=this.resolveConfiguredServerUrl(t),o=await this.createDetachedClient(n);return e===void 0&&(this.connectedServerUrl=o.serverUrl,this.updateConnectionStatus()),this.createDiagnosticClient(o)}async ensureMetadataVersionCatalogLoaded(){this.metadataVersionCatalogLoaded||await dr(this,"metadataVersionCatalog",async()=>{this.metadataVersionCatalogLoaded||(this.metadataVersionCatalog=await(await this.requireServerClient()).getMetadataVersions(),this.metadataVersionCatalogLoaded=!0)})}async resolveRemoteFilePath(e){let t=await this.resolveRemoteFilePathServerUrl(e.serverUrl),n=e.serverUrl?await this.requireServerClient(t):await this.requireServerClient(),o=await this.resolveWorkspaceRemoteFilePath(e.path,t,n);return{path:e.path,remotePath:o,serverUrl:t}}async resolveRemoteFilePathServerUrl(e){return e?(await this.ensureConfigLoaded(),this.resolveConfiguredServerUrl(e)):this.ensureActiveServerReady()}async resolveWorkspaceRemoteFilePath(e,t,n){let o=new yt(this.getMirrorRoot(t));return new wi({workspaceRoot:this.root,mirror:o,workspace:new sr(this.root,o),getServerProjects:()=>n.getProjects()}).resolve(e,"server-backed")}disconnectServers(...e){let t=new Set(e.map(n=>fr(n)));this.connectedServerUrl&&t.has(fr(this.connectedServerUrl))&&(this.connectedServerUrl=void 0)}applyServerConnection(e,t={}){this.connectedServerUrl=e.client.serverUrl,this.updateMetadataVersions(e.serverInfo),this.updateConnectionStatus(),this.refreshSyncStatusAfterConnection(t),t.refreshWorkspaceSupport!==!1&&this.refreshWorkspaceSupportIfNeeded(e.serverInfo)}createDiagnosticClient(e){return Bv(e)}async createDetachedClient(e){if(await this.ensureConfigLoaded(),!this.config.hasServer(e))throw new mt(e);let t=new wn(e,{workspaceRoot:this.root});if(await t.verify(),!this.config.hasServer(e))throw new mt(e);return t}resolveConfiguredServerUrl(e){let t=this.config.resolveServerUrl(e);if(!t)throw new mt(e);return t}async listWorkspaceProjects(){await this.ensureConfigLoaded();let e=new sr(this.root,this.createWorkspaceListingMirror());return this.toProjectNames(await e.listProjectPaths())}async listBaselineProjects(e){await this.ensureConfigLoaded();let t=e??this.activeServerUrl;if(!t)return[];let n=new yt(this.getMirrorRoot(t));return this.toProjectNames(await n.listProjectPaths())}getMetaProjectLocalPath(e){let t=e.trim();if(!t||t.includes("/")||t.includes("\\"))throw new Error(`invalid metadata project name: ${e}`);return this.getMetaFileLocalPath("/"+t)}getMetaFileLocalPath(e){return Vy(this.root,e)}async countWorkspaceFiles(e,t){return await this.ensureConfigLoaded(),new sr(this.root,this.createWorkspaceListingMirror()).countFiles(e,t)}async startIdeRuntime(){this.initialized||await dr(this,"startIdeRuntime",async()=>{await this.doStartIdeRuntime(),this.initialized=!0})}async waitInitialized(){this.initialized||await Zp(this,"startIdeRuntime")?.catch(()=>{})}async doStartIdeRuntime(){let e=!1;this.connectionInitializing=!0;try{await this.config.load(),this.syncStatusTracker.startBackgroundRemoteDiscovery({intervalMs:NO}),this.fireConnectionStateChanged(!0),await this.refreshGitIgnore(),this.initializeFileWatcher(),await this.tryAutoConnect({refreshSyncStatus:!1}),e=!0}finally{this.connectionInitializing=!1,this.fireConnectionStateChanged()}e&&this.refreshSyncStatus().catch(t=>{Nt.warn(`refresh sync status after IDE runtime start failed: ${this.root}`,t)})}applySyncOperationResult(e,t=[]){this.syncStatusTracker.applyOperationResult(e,t)}applyFileWatchSyncStatus(e,t){this.syncStatusTracker.applyFileWatchResult(e,t)}clearSyncStatus(){this.syncStatusTracker.clear()}async refreshSyncStatus(e){await this.refreshSyncStatusState({task:e})}async refreshSyncStatusState(e={}){await this.ensureConfigLoaded();let t=["refreshSyncStatus",e.scope??"both",e.forceRefresh===!0?"force":"normal"].join(":"),n=e.task,o=!!Zp(this,t),i=dr(this,t,()=>(Nt.info("refresh sync status start: {0}",this.root),this.onSyncStatusRefreshing(),this.syncStatusTracker.refreshAll(e)));o&&n&&n.start(1,{message:u("workspace.sync.progress.refresh.running")});let a=await i;return n&&o&&n.step(1),o||Nt.info("refresh sync status done: {0}",this.root),a}getSyncChanges(){return this.syncStatusTracker.getChanges()}getSyncSummary(){return this.syncStatusTracker.getSummary()}refreshGitIgnore(){return this.gitIgnore.refresh()}isGitIgnored(e){return this.gitIgnore.matches(e)}getSyncStatusTracker(){return this.syncStatusTracker}async consumeFileChanges(e,t={}){if(e.some(o=>{if(Rr.basename(o.filePath)!==".gitignore")return!1;let i=Rr.relative(this.root,Rr.resolve(o.filePath));return!!i&&!i.startsWith("..")&&!Rr.isAbsolute(i)})){await this.refreshGitIgnore(),await this.refreshSyncStatus();return}return this.syncStatusTracker.consumeFileChanges(e,t)}clearSyncStatusTargets(e){this.syncStatusTracker.clearTargets(e)}notifySyncStatusChanged(){this.fireSyncStatusChanged()}initializeFileWatcher(){if(this.fileChangeRefresh)return;let e=Sm();e&&(this.fileChangeRefresh=new Ul(this,this.eventBus,e,{},this.lockManager))}cancelPendingSyncStatusRefresh(){this.fileChangeRefresh?.cancelPendingRefresh()}async flushPendingFileChangeRefresh(){await this.fileChangeRefresh?.flushPendingRefresh()}onSyncStatusRefreshing(){this.cancelPendingSyncStatusRefresh()}async addServer(e){return this.lockManager.withLock({scopes:["config","sync"],command:"add-server",wait:this.lockWait},async()=>(await this.config.addServer(e),this.config.getActiveServerUrl()))}async verifyServerReachable(e){let t=ge(e);return await Fs(t),t}async removeServer(e){return await this.ensureConfigLoaded(),this.lockManager.withLock({scopes:["config","sync"],command:"remove-server",wait:this.lockWait},async()=>{let t=this.config.getActiveServerUrl(),n=this.config.resolveServerUrl(e)??e;await this.config.removeServer(e),this.disconnectServers(n);let o=t!==this.config.getActiveServerUrl();return o&&(this.updateMetadataVersions(),this.updateConnectionStatus()),o})}async changeServerUrl(e,t,n){let o=await new ji(this).change(e,t,n);return this.disconnectServers(o.oldServerUrl,o.serverUrl),o.connection&&(this.applyServerConnection(o.connection),Nt.info(`login succeeded: ${o.serverUrl}`)),o.serverUrl}async switchActiveServer(e){await this.ensureConfigLoaded();let t=this.config.resolveServerUrl(e);if(!t)throw new Error(u("workspace.server.serverNotConfigured",e));return await this.lockManager.withLock({scopes:["config","sync"],command:"switch-active-server",wait:this.lockWait},async()=>{await this.config.setActiveServerUrl(t)}),this.config.getActiveServerUrl()}async readTargetStatusSnapshot(e){await this.ensureConfigLoaded();try{let[t,n,o,i]=await Promise.all([this.readTargetSideSnapshot(this.root,e.remotePath,{returnStat:!0}),this.readTargetSideSnapshot(this.getMirrorRoot(),e.remotePath,{returnStat:!0}),Ne(this.root,e.remotePath),Ne(this.getMirrorRoot(),e.remotePath)]),a=await this.isTargetContentChanged(e.remotePath,t,n);return a===void 0?this.unknownTargetStatusSnapshot(e.remotePath):{remotePath:e.remotePath,workspace:{...t,fileId:o?.id,identity:t.identity??o?.id},mirror:{...n,fileId:i?.id,identity:n.identity??i?.id},contentChanged:a,metaChanged:!this.isMetaInfoEqual(o,i)}}catch(t){return Nt.debug(`read target status snapshot failed: ${e.remotePath}`,t),this.unknownTargetStatusSnapshot(e.remotePath)}}async readTargetSideSnapshot(e,t,n={}){try{let o=await np.promises.stat(re(e,t)),i=o.isFile()?"file":o.isDirectory()?"folder":"unknown",a=n.returnStat&&o.isFile()?{size:o.size,mtimeMs:o.mtimeMs}:void 0;return{kind:i,contentStat:a}}catch(o){if(x(o))return Nt.debug(`target side path does not exist: ${e}:${t}`),{kind:"missing"};throw o}}async isTargetContentChanged(e,t,n){if(t.kind!=="file"||n.kind!=="file")return!1;let o=t.contentStat,i=n.contentStat;if(o&&i)return this.compareFileContentStats(o,i);try{let[a,s]=await Promise.all([np.promises.stat(re(this.root,e)),np.promises.stat(re(this.getMirrorRoot(),e))]);return this.compareFileContentStats(a,s)}catch(a){Nt.debug(`cannot compare target stat cache for ${e}`,a);return}}compareFileContentStats(e,t){if(e.size!==t.size)return!0;if(e.mtimeMs===t.mtimeMs)return!1}isMetaInfoEqual(e,t){return!e&&!t?!0:!e||!t?!1:yo(e,t)}unknownTargetStatusSnapshot(e){return{remotePath:e,workspace:{kind:"unknown"},mirror:{kind:"unknown"}}}async tryAutoConnect(e={}){await this.ensureConfigLoaded();let t=this.config.getActiveServerUrl();if(t){if(this.connectedServerUrl&&fr(this.connectedServerUrl)===fr(t)){this.updateConnectionStatus();return}try{let n=await new ji(this).connect(t);this.applyServerConnection(n.connection,e)}catch(n){if(!(n instanceof Oe))throw n;Nt.debug(`stored credential invalid for ${t}`,n),this.updateConnectionStatus()}}}async connect(e,t){let n=await new ji(this).connect(e,t);return this.applyServerConnection(n.connection),t&&Nt.info(`login succeeded: ${n.connection.client.serverUrl}`),!0}disconnect(){this.connectedServerUrl=void 0,this.updateMetadataVersions(),this.updateConnectionStatus(),Nt.info("disconnected")}updateConnectionStatus(){this.connectionInitializing||this.fireConnectionStateChanged()}onConfigChanged(){let e=this.connectedServerUrl;e&&fr(e)!==fr(this.config.getActiveServerUrl())&&(this.cancelPendingSyncStatusRefresh(),this.clearSyncStatus(),this.disconnectServers(e),this.updateMetadataVersions(),this.updateConnectionStatus())}refreshSyncStatusAfterConnection(e={}){e.refreshSyncStatus!==!1&&this.refreshSyncStatus().catch(t=>{Nt.warn(`refresh sync status after connection failed: ${this.root}`,t)})}async refreshWorkspaceSupportIfNeeded(e){let t=this.connectedServerUrl;if(t)try{let n=await this.createDetachedClient(t),o=this.createDiagnosticClient(n),i=e??await o.getServerInfo();this.updateMetadataVersions(i),await this.warnIfServerLooksOlder(i),await dP(this,o,i)}catch(n){Nt.warn(`refresh workspace support after server version change failed: ${this.root}`,n)}finally{this.updateConnectionStatus()}}async warnIfServerLooksOlder(e){try{let t=this.config.getServerVersion(),n=await PP(t,e);if(n.newBaselineVersion&&await this.lockManager.withLock({scopes:["config"],command:"set-server-version",wait:this.lockWait},async()=>{await this.config.setServerVersion(n.newBaselineVersion)}),!n.warningMessage)return;this.eventBus.fire(new Ge("user.notification.requested",{level:"warning",message:n.warningMessage},this))}catch(t){Nt.warn(`check server compatibility baseline failed: ${this.root}`,t)}}fireConnectionStateChanged(e=!1){this.eventBus.fire(new Ge("workspace.connection.changed",{root:this.root,connected:this.isConnected,serverUrl:this.activeServerUrl,initializing:e},this))}notifySyncStatusRefreshing(e,t){this.eventBus.fire(new Ge("workspace.sync.status.refreshing",{root:this.root,refreshTask:e,progressVisible:t},this))}fireSyncStatusChanged(){this.eventBus.fire(new Ge("workspace.sync.status.changed",{root:this.root},this))}createSyncService(e){return Om(this,e)}runMaintenance(e){return new Yl(this).run(e)}notifyLocalProjectsChanged(){this.eventBus.fire(new Ge("workspace.local.projects.changed",{root:this.root,serverUrl:this.activeServerUrl},this))}async getMetadataVersionCatalog(){return await this.ensureMetadataVersionCatalogLoaded(),this.metadataVersionCatalog}updateMetadataVersions(e){this.metadataVersionCatalog=po.fromServerVersions(e?.metadataVersions),this.metadataVersionCatalogLoaded=e!==void 0}dispose(){this.disposables.dispose(),this.config.dispose(),this.syncStatusTracker.dispose(),this.fileChangeRefresh?.dispose(),this.fileChangeRefresh=void 0}async shouldYieldAutoSync(){let e=await this.lockManager.peekHolders(["config","sync"]),t=this.lockManager.staleMs;for(let n of e.values()){if(!n)continue;if(Date.now()-new Date(n.lastHeartbeat).getTime()<t&&(n.source==="ide"||n.source==="cli"))return Nt.info(`auto-sync yield to ${n.command}`),!0}return!1}getMirrorRoot(e=this.activeServerUrl){return Rr.join(this.root,".succapp","remote",fr(e))}createWorkspaceListingMirror(){let e=this.activeServerUrl?this.getMirrorRoot(this.activeServerUrl):Rr.join(this.root,".succapp","remote","__workspace__");return new yt(e)}toProjectNames(e){return e.map(t=>t.replace(/^\//,"")).sort((t,n)=>t.localeCompare(n))}},WO=fh;function op(r){return new WO(r.root,r.eventBus,r.client,r.lockWait)}var gh=class extends oe{async executeCommand(e,t){let n=qP.resolve(e.cwd,e.config.workspace??".");await Zs(n);let o=Ee("server"),i=e.config.server?gr(e.config.server,{input:o,option:o,flag:"server"}):void 0,a=e.workspace===void 0,s=e.workspace??op({root:n,eventBus:e.eventBus,lockWait:e.config.lockTimeout});try{let c=await this.initializeWorkspace(s,e,i);return e.output.result({...c},()=>UO(c)),0}finally{a&&s.dispose()}}async initializeWorkspace(e,t,n){let o=await e.runMaintenance({taskIds:sw,dryRun:!1,server:n,taskOptions:{refreshServerSupport:!0},task:t.task});this.throwBlockedConfigIssue(o,e,n),await e.config.ensureLoaded();let i=o.issues.find(a=>a.taskId==="workspace-config");return{workspace:e.root,configPath:e.config.path,initialized:i?.execution?.status==="applied",activeServer:e.config.get()?.activeServerUrl||void 0,supportFiles:jO(o)}}throwBlockedConfigIssue(e,t,n){let o=e.issues.find(i=>i.taskId==="workspace-config"&&(i.execution?.status==="blocked"||i.execution?.status==="failed"));if(o)throw VO(o,t,n)}},$P={path:["workspace","init"],domain:"workspace",spec:{name:"workspace init",flags:[{name:"server",takesValue:!0,valueHint:"url"}],positionals:[],usageArgs:"[<options>]",examples:["succapp workspace init","succapp -C /path/to/workspace workspace init --server=http://localhost:8180/bi","succapp workspace init --server=https://bi.example.com --json"]},workspaceTarget:"optional",allowUninitializedWorkspaceTarget:!0,serverTarget:"none",lockUsage:"workspace-write",createExecutor:()=>new gh};function UO(r){let e=r.initialized?u("cli.cmd.workspace.init.initWorkspace",r.workspace):u("cli.cmd.workspace.init.workspaceInit",r.workspace),t=r.activeServer?`
88
+ ${u("cli.cmd.workspace.init.active",r.activeServer)}`:"",n=`
89
+ ${u("cli.cmd.workspace.init.supportFiles",r.supportFiles.updatedCount,r.supportFiles.skipped.length)}`,o=r.activeServer?"":`
90
+ ${u("cli.cmd.workspace.init.noActiveServer")}
91
+ ${u("cli.cmd.workspace.init.nextConfigureServer")}`;return`${e}${t}${n}${o}`}function jO(r){let e=r.issues.filter(o=>o.taskId!=="workspace-config"),t=e.filter(o=>o.execution?.status==="applied").length,n=e.filter(o=>o.execution?.status==="skipped").map(o=>({item:o.taskId,reason:BO(o),localPaths:o.localPaths}));return{updated:t>0,updatedCount:t,skipped:n}}function BO(r){let e=r.execution?.properties?.skipCause??r.properties?.skipCause;return typeof e=="string"?e:"skipped"}function VO(r,e,t){if(r.code==="err.workspace.issue.E202")return new R("err.cli.invalidWorkspaceConfigJson",{inputId:"workspaceConfig",source:e.config.path,context:{workspace:e.root,configPath:e.config.path}});let n=Ee("server"),o=typeof r.properties?.activeServer=="string"?r.properties.activeServer:void 0;return new R("err.cli.serverMismatch",{input:n,option:n,value:t??"",expected:o||u("cli.out.value.none"),context:{workspace:e.root,target:t??"",active:o}})}var be=class extends ue{async executeWorkspaceCommand(e,t,n){return await this.prepareSyncCommand(e,t,n),this.executeSyncCommand(e,e.createSyncService(),t,n)}async prepareSyncCommand(e,t,n){!t.command||t.command.serverTarget!=="none"?await Fr(t,e):await e.config.ensureLoaded()}};D();var yh=class extends be{toOptions(e){return{paths:e.positional,force:e.has("force")}}async executeSyncCommand(e,t,n,o){let i=await t.pull({paths:o.paths.length>0?[...o.paths]:void 0,force:o.force,task:n.task});return n.output.result({workspace:e.root,server:e.activeServerUrl,summary:{updated:i.updated.length,deleted:i.deleted.length,conflicts:i.conflicts.length,oldFiles:i.oldFiles.length},updated:i.updated,deleted:i.deleted,conflicts:i.conflicts.map(xn),oldFiles:i.oldFiles.map(Kr)},()=>qO(i)),i.conflicts.length>0?6:0}},zP={path:["workspace","pull"],domain:"workspace",spec:{name:"workspace pull",flags:[{name:"force",alias:"f",takesValue:!1}],positionals:[{name:"path",repeatable:!0}],usageArgs:"[<options>] [--] [<path>...]",examples:["succapp workspace pull","succapp workspace pull demo/views/sales.view","succapp workspace pull --force /DEMO/views/sales.view"]},workspaceTarget:"required",serverTarget:"required",lockUsage:"workspace-write",createExecutor:()=>new yh};function qO(r){if(r.updated.length===0&&r.deleted.length===0&&r.conflicts.length===0)return HP([u("cli.cmd.workspace.pull.upDate")],r.oldFiles);let e=[u("cli.cmd.workspace.pull.pullResultUpdated",r.updated.length,r.deleted.length,r.conflicts.length)];return(r.updated.length>0||r.deleted.length>0)&&e.push($O(r)),r.conflicts.length>0&&(e.push(u("cli.cmd.workspace.pull.conflicts",r.conflicts.length)),e.push(Fn(r.conflicts))),HP(e,r.oldFiles)}function $O(r){return de({columns:[u("cli.out.header.type"),u("cli.out.header.remote")],rows:[...r.updated.map(e=>[u("cli.out.value.updated"),e]),...r.deleted.map(e=>[u("cli.out.value.deleted"),e])]})}function HP(r,e){return e.length>0&&(r.push(u("cli.cmd.workspace.pull.oldMeta",e.length)),r.push(ga(e))),r.join(`
92
+ `)}D();var Ch=class extends be{toOptions(e){return{paths:e.positional,force:e.has("force")}}async executeSyncCommand(e,t,n,o){let i=await t.push({paths:o.paths.length>0?[...o.paths]:void 0,force:o.force,task:n.task}),a=GO(i.metadataVersionSuggestions??[]);return n.output.result({workspace:e.root,server:e.activeServerUrl,summary:{pushed:i.pushed.length,rejected:i.rejected.length,failures:i.failures.length,metadataVersionSuggestions:i.metadataVersionSuggestions?.length??0,olderMetadataVersionSuggestions:a.older,newerMetadataVersionSuggestions:a.newer},pushed:i.pushed,rejected:i.rejected.map(xn),failures:i.failures.map(pc),metadataVersionSuggestions:(i.metadataVersionSuggestions??[]).map(uc)},()=>zO(i,a)),HO(i)}},GP={path:["workspace","push"],domain:"workspace",spec:{name:"workspace push",flags:[{name:"force",alias:"f",takesValue:!1}],positionals:[{name:"path",repeatable:!0}],usageArgs:"[<options>] [--] [<path>...]",examples:["succapp workspace push","succapp workspace push demo/views/sales.view","succapp workspace push --force demo/views/sales.view"]},workspaceTarget:"required",serverTarget:"required",lockUsage:"workspace-write",createExecutor:()=>new Ch};function HO(r){return r.rejected.length>0?6:r.failures.length>0?1:0}function zO(r,e){if(r.pushed.length===0&&r.rejected.length===0&&r.failures.length===0)return u("cli.cmd.workspace.push.noLocalChanges");let t=[u("cli.cmd.workspace.push.pushResultPushed",r.pushed.length,r.rejected.length,r.failures.length)];r.pushed.length>0&&(t.push(u("cli.cmd.workspace.push.pushedFiles",r.pushed.length)),t.push(KO(r.pushed))),r.rejected.length>0&&(t.push(u("cli.cmd.workspace.push.pushBlockedRemote",r.rejected.length)),t.push(Fn(r.rejected))),r.failures.length>0&&(t.push(u("cli.cmd.workspace.push.failed",r.failures.length)),t.push(JO(r.failures)));let n=r.metadataVersionSuggestions??[];return n.length>0&&(t.push(u("cli.cmd.workspace.push.metaVersions",e.older,e.newer)),t.push(YO(n))),t.join(`
93
+ `)}function GO(r){let e=0,t=0;for(let n of r)n.kind==="newer"?t++:e++;return{older:e,newer:t}}function KO(r){return de({columns:[u("cli.out.header.path")],rows:r.map(e=>[e])})}function JO(r){return de({columns:[u("cli.out.header.path"),u("cli.out.header.error")],rows:r.map(e=>[e.path,In(e.errorInfo)])})}function YO(r){return de({columns:[u("cli.out.header.path"),u("cli.cmd.workspace.push.version"),u("cli.cmd.workspace.push.targetVersion"),u("cli.cmd.workspace.push.kind")],rows:r.map(e=>[e.path,e.currentVersion??"",e.targetVersion,dc(e.kind)])})}U();F();D();var Sh=class extends be{toOptions(e){return{paths:e.positional,force:e.has("force")}}validateOptions(e,t){if(t.paths.length===0&&!t.force)throw new R("err.cli.confirmationRequired",{reason:"discardAll",flag:"--force"})}async executeSyncCommand(e,t,n,o){let i=await t.reset({paths:o.paths.length>0?[...o.paths]:void 0,force:!0,task:n.task});return n.output.result({workspace:e.root,server:e.activeServerUrl,summary:{updated:i.updated.length,deleted:i.deleted.length},updated:i.updated,deleted:i.deleted},()=>XO(i)),0}},JP={path:["workspace","discard"],domain:"workspace",spec:{name:"workspace discard",flags:[{name:"force",alias:"f",takesValue:!1}],positionals:[{name:"path",repeatable:!0}],usageArgs:"[<options>] [--] [<path>...]",examples:["succapp workspace discard demo/views/sales.view","succapp workspace discard --force","succapp workspace discard --force --json"]},workspaceTarget:"required",serverTarget:"required",lockUsage:"workspace-write",createExecutor:()=>new Sh};function XO(r){if(r.updated.length===0&&r.deleted.length===0)return u("cli.cmd.workspace.discard.noLocalChanges");let e=[u("cli.cmd.workspace.discard.result",r.updated.length,r.deleted.length)];return r.updated.length>0&&(e.push(u("cli.cmd.workspace.discard.restoredFiles",r.updated.length)),e.push(KP(r.updated))),r.deleted.length>0&&(e.push(u("cli.cmd.workspace.discard.deletedFiles",r.deleted.length)),e.push(KP(r.deleted))),e.join(`
94
+ `)}function KP(r){return de({columns:[u("cli.out.header.path")],rows:r.map(e=>[e])})}D();F();U();te();var YP=["sync-baseline","workspace-config","workspace-settings","workspace-gitignore","workspace-agent-files","typescript-support","json-schema-support","frontend-development-skill"],QO=["workspace-support"],ZO=[...YP,...QO];function XP(r){return r.flatMap(e=>{if(e==="workspace-support")return[...El];if(YP.includes(e))return[e];throw new R("err.cli.invalidChoice",{input:"--only",option:"--only",value:e,allowedValues:ZO})})}function QP(r){return O({checks:r.checks.length>0?r.checks:void 0,dryRun:r.dryRun?!0:void 0})}function Fo(r){let e=new Map;for(let t of r){let n=nR(t.code),o=e.get(n);o?e.set(n,{code:n,count:o.count+1,message:o.message,repairable:o.repairable||t.repairable,repairableCount:o.repairableCount+(t.repairable?1:0),unrepairableCount:o.unrepairableCount+(t.repairable?0:1),remotePaths:[...o.remotePaths,...t.remotePaths],localPaths:[...o.localPaths,...t.localPaths]}):e.set(n,{code:n,count:1,message:e_(t),repairable:t.repairable,repairableCount:t.repairable?1:0,unrepairableCount:t.repairable?0:1,remotePaths:[...t.remotePaths],localPaths:[...t.localPaths]})}return Array.from(e.values())}function ZP(r){let e=qn(r),t=e.filter(o=>o.repairable).length,n=Fo(e).map(o=>({code:o.code,count:o.count,repairable:o.repairableCount,unrepairable:o.unrepairableCount,message:o.message}));return{workspace:r.workspaceRootPath,server:r.serverUrl??"",dryRun:!0,summary:{issues:e.length,repairable:t,unrepairable:e.length-t,skipped:ip(r).length,byCode:n},issues:Fo(e).map(o=>({code:o.code,repairable:o.repairable,repairableCount:o.repairableCount,unrepairableCount:o.unrepairableCount,remotePaths:o.remotePaths,localPaths:o.localPaths})),skipped:ip(r).map(iR)}}function eR(r){let e=qn(r),t=oR(r),n=ap(r),o=Fo(e),i=Fo(t),a=Fo(n);return{workspace:r.workspaceRootPath,server:r.serverUrl??"",dryRun:!1,summary:{issues:e.length,repaired:t.length,unresolved:n.length,skipped:ip(r).length,byCode:o.map(s=>({code:s.code,count:s.count,repairable:s.repairableCount,unrepairable:s.unrepairableCount,message:s.message}))},issues:o.map(s=>({code:s.code,repairable:s.repairable,repairableCount:s.repairableCount,unrepairableCount:s.unrepairableCount,remotePaths:s.remotePaths,localPaths:s.localPaths})),repaired:i.map(s=>({code:s.code,repairable:s.repairable,repairableCount:s.repairableCount,unrepairableCount:s.unrepairableCount,remotePaths:s.remotePaths,localPaths:s.localPaths})),unresolved:a.map(s=>({code:s.code,repairable:s.repairable,repairableCount:s.repairableCount,unrepairableCount:s.unrepairableCount,remotePaths:s.remotePaths,localPaths:s.localPaths})),skipped:ip(r).map(iR)}}function tR(r){let e=qn(r);if(e.length===0)return u("cli.cmd.workspace.repair.dryRunClean");let t=e.filter(o=>o.repairable).length,n=[u("cli.cmd.workspace.repair.dryRunIssue",e.length,t,e.length-t)];return n.push(...vh(e)),n.push(...kh(e)),n.join(`
95
+ `)}function rR(r){let e=qn(r),t=oR(r),n=ap(r);if(e.length===0)return u("cli.cmd.workspace.repair.clean");let o=[u("cli.cmd.workspace.repair.repaired",t.length,n.length)];return t.length>0&&(o.push(""),o.push(u("cli.cmd.workspace.repair.repairedIssues")),o.push(...vh(t)),o.push(...kh(t))),n.length>0&&(o.push(""),o.push(u("cli.cmd.workspace.repair.unresolved")),o.push(...vh(n)),o.push(...kh(n))),o.join(`
96
+ `)}function vh(r){let e=Fo(r);if(e.length===0)return[];let t=[""];t.push("Summary by code:");for(let n of e){let o=n.count.toString().padStart(3);t.push(` ${n.code} ${o} ${n.message}`)}return t}function kh(r){if(r.length===0)return[];let e=Fo(r),t=[];t.push(""),t.push("Issues:");for(let n of e){t.push(` ${n.code}`);for(let o of n.remotePaths)t.push(` ${o}`);for(let o of n.localPaths)t.push(` ${o}`)}return t}function e_(r){return u(r.code)}function nR(r){if(!r)return"-";let e=r.lastIndexOf(".");return e>=0?r.slice(e+1):r}function qn(r){return r.issues.filter(e=>e.execution?.status!=="skipped")}function ip(r){return r.issues.filter(e=>e.execution?.status==="skipped")}function oR(r){return qn(r).filter(e=>e.execution?.status==="applied")}function ap(r){return qn(r).filter(e=>e.execution?.status==="blocked"||e.execution?.status==="failed")}function iR(r){let e=r.execution?.properties?.skipCause??r.properties?.skipCause;return O({check:r.taskId,code:nR(r.code),reason:typeof e=="string"?e:void 0,remotePaths:r.remotePaths,localPaths:r.localPaths})}var wh=class extends ue{toOptions(e){return{checks:XP(e.values("only")),dryRun:e.has("dry-run")}}async executeWorkspaceCommand(e,t,n){let o=await e.createSyncService().repairWorkspace({...QP(n),task:t.task});return n.dryRun?(t.output.result(ZP(o),()=>tR(o)),qn(o).length>0?1:0):(t.output.result(eR(o),()=>rR(o)),ap(o).length>0?1:0)}},aR={path:["workspace","repair"],domain:"workspace",spec:{name:"workspace repair",flags:[{name:"only",takesValue:!0,repeatable:!0,valueHint:"item"},{name:"dry-run",takesValue:!1}],positionals:[],usageArgs:"[<options>]",examples:["succapp workspace repair --dry-run","succapp workspace repair --only=sync-baseline","succapp workspace repair --json"]},workspaceTarget:"required",serverTarget:"none",lockUsage:"workspace-write",createExecutor:()=>new wh};D();U();var Ph=class extends be{toOptions(e){return{paths:e.positional,localOnly:e.has("local-only"),forceRefresh:e.has("force-refresh")}}async executeSyncCommand(e,t,n,o){let i=await t.status({refreshAll:!0,scope:o.localOnly?"local":"both",forceRefresh:o.forceRefresh,paths:[...o.paths],task:n.task}),a=t_(i);for(let s of i.warnings??[])n.output.warning(s.errorCode==="err.login.notlogin"?u("cli.cmd.workspace.status.remoteAuthRequired"):s.errorCode);return n.output.result({workspace:e.root,server:e.activeServerUrl,summary:a,changes:i.changes.map(xn),...i.warnings?.length?{warnings:i.warnings.map(s=>({errorCode:s.errorCode,...s.properties?{properties:s.properties}:{}}))}:{}},()=>r_(a,i.changes)),0}},sR={path:["workspace","status"],domain:"workspace",spec:{name:"workspace status",flags:[{name:"local-only",takesValue:!1},{name:"force-refresh",takesValue:!1}],positionals:[{name:"path",repeatable:!0}],usageArgs:"[<options>] [--] [<path>...]",examples:["succapp workspace status","succapp workspace status --local-only","succapp workspace status --force-refresh","succapp workspace status --json","succapp workspace status demo/views/sales.view"]},workspaceTarget:"required",serverTarget:"required",createExecutor:()=>new Ph};function t_(r){return{changes:r.changes.length,local:r.localChanges.length,remote:r.remoteChanges.length,conflicts:r.conflicts.length}}function r_(r,e){let t=n_(r);return e.length===0?`${t}
97
+ ${u("cli.out.common.changes")}`:`${t}
98
+ ${Fn(e)}`}function n_(r){return u("cli.out.common.changesLocalRemote",r.changes,r.local,r.remote,r.conflicts)}D();var cR="1";function lR(r,e={}){let t=e.targetVersion??cR;return{workspaceRootPath:r.root,currentVersion:cR,targetVersion:t,dryRun:e.dryRun===!0,hasActions:!1,actions:[],reason:"no-workspace-migrations"}}var Rh=class extends ue{toOptions(e){return{targetVersion:e.value("target-version"),dryRun:e.has("dry-run")}}async executeWorkspaceCommand(e,t,n){let o=lR(e,n);return t.output.result(o_(o),()=>i_(o)),0}},pR={path:["workspace","upgrade"],domain:"workspace",spec:{name:"workspace upgrade",flags:[{name:"target-version",takesValue:!0,valueHint:"version"},{name:"dry-run",takesValue:!1}],positionals:[],usageArgs:"[<options>]",examples:["succapp workspace upgrade --dry-run","succapp workspace upgrade --target-version=1"]},workspaceTarget:"required",serverTarget:"none",createExecutor:()=>new Rh};function o_(r){return{workspace:r.workspaceRootPath,currentVersion:r.currentVersion,targetVersion:r.targetVersion,dryRun:r.dryRun,hasActions:r.hasActions,actions:r.actions,reason:r.reason}}function i_(r){return r.hasActions?u("cli.cmd.workspace.upgrade.actions",r.actions.length,r.currentVersion,r.targetVersion):u("cli.cmd.workspace.upgrade.noActions",r.currentVersion,r.targetVersion)}D();te();function uR(r){return{workspace:r.workspaceRootPath,summary:{entries:r.entries.length},entries:r.entries.map(Eh)}}function dR(r){return{workspace:r.workspaceRootPath,summary:{cleared:r.cleared.length,remaining:r.remaining.length},cleared:r.cleared.map(Eh),remaining:r.remaining.map(Eh)}}function mR(r){return{columns:[u("cli.out.header.path"),u("cli.cmd.workspace.backup.size"),u("cli.out.header.modified"),u("cli.cmd.workspace.backup.backupPath")],rows:r.map(e=>[e.path,e.size===void 0?"":String(e.size),e.mtime??"",e.backupPath])}}function hR(r){return u("cli.cmd.workspace.backup.cleared",r.cleared.length,r.remaining.length)}function Eh(r){return O({path:r.path,backupPath:r.backupPath,size:r.size,mtime:r.mtime})}var bh=class extends ue{toOptions(e){return{paths:e.positional}}async executeWorkspaceCommand(e,t,n){let o=await e.createSyncService().clearMergeBackups({paths:n.paths.length>0?[...n.paths]:void 0,task:t.task});return t.output.result(dR(o),()=>hR(o)),0}},fR={path:["workspace","backup","clear"],domain:"workspace",spec:{name:"workspace backup clear",flags:[],positionals:[{name:"path",repeatable:!0}],usageArgs:"[<options>] [--] [<path>...]",examples:["succapp workspace backup clear","succapp workspace backup clear /DEMO_BLANK/app"]},workspaceTarget:"required",serverTarget:"none",lockUsage:"workspace-write",createExecutor:()=>new bh};var Th=class extends ue{toOptions(e){return{paths:e.positional}}async executeWorkspaceCommand(e,t,n){let o=await e.createSyncService().listMergeBackups({paths:n.paths.length>0?[...n.paths]:void 0,task:t.task});return t.output.result(uR(o),()=>mR(o.entries)),0}},gR={path:["workspace","backup","list"],domain:"workspace",spec:{name:"workspace backup list",flags:[],positionals:[{name:"path",repeatable:!0}],usageArgs:"[<options>] [--] [<path>...]",examples:["succapp workspace backup list","succapp workspace backup list /DEMO_BLANK/app"]},workspaceTarget:"required",serverTarget:"none",createExecutor:()=>new Th};F();U();function yR(r,e,t){return r.error==="empty"?new R("err.cli.missingInput",{inputId:"extensionName",sources:["<extension-name>"],context:{scope:e}}):new R("err.cli.invalidExtensionName",{inputId:"extensionName",value:t,expectedScope:e,actualScope:r.actualExtensionPoint,reason:r.error,context:{name:t,scope:e,reason:r.error,actualScope:r.actualExtensionPoint}})}function CR(r){return r.rejected.length>0?6:r.failures.length>0?1:0}F();U();var Mh=class extends ue{toOptions(e){return{extensionPoint:e.positional[0],templateName:e.positional[1],extensionName:e.positional[2]}}async executeWorkspaceCommand(e,t,n){await Fr(t,e);let o=new Sc(e);if(!(await o.prepare(t.task)).some(c=>c.extensionPoint===n.extensionPoint&&c.templateName===n.templateName))throw new R("err.cli.unknownExtensionTemplate",{inputId:"extensionTemplate",value:`${n.extensionPoint}/${n.templateName}`,extensionPoint:n.extensionPoint,templateName:n.templateName,context:{scope:n.extensionPoint,name:n.templateName}});let a=await o.validate({extensionPoint:n.extensionPoint,extensionName:n.extensionName});if(!a.ok)throw yR(a,n.extensionPoint,n.extensionName);let s=await e.lockManager.withLock({scopes:["sync"],command:"extension-create",wait:t.config.lockTimeout},async()=>o.execute({extensionPoint:n.extensionPoint,templateName:n.templateName,extensionName:n.extensionName,task:t.task}));return t.output.result({workspace:e.root,server:e.activeServerUrl,...aS(n.extensionName,s)},()=>pS(n.extensionName,s)),0}},SR={path:["workspace","extension","create"],domain:"workspace",spec:{name:"workspace extension create",flags:[],positionals:[{name:"extension-point",required:!0},{name:"template",required:!0},{name:"name",required:!0}],usageArgs:"[<options>] <extension-point> <template> <name>",examples:["succapp workspace extension create component blank succ-component-card"]},workspaceTarget:"required",serverTarget:"none",lockUsage:"workspace-write",createExecutor:()=>new Mh};var xh=class extends ue{async executeWorkspaceCommand(e,t){let n=await oS(e.root);return t.output.result({workspace:e.root,extensions:n},()=>lS(n)),0}},vR={path:["workspace","extension","list"],domain:"workspace",spec:{name:"workspace extension list",flags:[],positionals:[],usageArgs:"[<options>]",examples:["succapp workspace extension list","succapp workspace extension list --json"]},workspaceTarget:"required",serverTarget:"none",createExecutor:()=>new xh};F();U();F();U();H();var sp=class{workspace;cachedService;constructor(e){this.workspace=e}async resolveTarget(e){let t=nS({workspaceRoot:this.workspace.root,path:e.path,extensionName:e.extensionName});if(!t)throw new R("err.extension.rootUnresolved",{reason:a_(e)});if(!await ee(t.extensionRoot))throw new R("err.extension.rootNotFound",{extensionName:t.extensionName,extensionRoot:t.extensionRoot});return t}async status(){return this.requireService().status()}async execute(e){return this.requireService().push({paths:[e.target.extensionRoot],message:e.message,force:e.force,...e.task?{task:e.task}:{}})}requireService(){return this.cachedService||(this.cachedService=this.workspace.createSyncService()),this.cachedService}};function a_(r){return r.extensionName!==void 0?"invalidName":r.path!==void 0?"invalidPath":"missingInput"}var Fh=class extends ue{toOptions(e){return{extensionName:e.positional[0],path:e.value("path"),force:e.has("force")}}validateOptions(e,t){if(t.extensionName&&t.path)throw new R("err.cli.conflictingInputs",{inputs:["<extension>","--path=<path>"]});if(!t.extensionName&&!t.path)throw new R("err.cli.missingInput",{inputId:"extensionNameOrPath",sources:["<extension>","--path=<path>"]})}async executeWorkspaceCommand(e,t,n){await Fr(t,e);let o=new sp(e),i=await o.resolveTarget({extensionName:n.extensionName,path:n.path}),a=await o.execute({target:i,force:n.force,task:t.task});return t.output.result({workspace:e.root,server:e.activeServerUrl,extensionName:i.extensionName,extensionRoot:i.extensionRoot,force:n.force,...sS(a)},()=>uS(i.extensionName,a)),CR(a)}},kR={path:["workspace","extension","push"],domain:"workspace",spec:{name:"workspace extension push",flags:[{name:"path",takesValue:!0,valueHint:"path"},{name:"force",alias:"f",takesValue:!1}],positionals:[{name:"name"}],usageArgs:"[<options>] [<name>]",examples:["succapp workspace extension push succ-component-card","succapp workspace extension push --path=sysdata/extensions/succ-component-card/package.json","succapp workspace extension push --force succ-component-card"]},workspaceTarget:"required",serverTarget:"required",lockUsage:"workspace-write",createExecutor:()=>new Fh};F();U();var Ih=class extends be{toOptions(e){return{paths:e.positional,source:s_(e.value("source"))}}async executeSyncCommand(e,t,n,o){let i=await t.diff({paths:[...o.paths],source:o.source,task:n.task});return n.output.result({workspace:e.root,server:e.activeServerUrl,source:i.source,summary:{files:i.items.length,changed:i.items.filter(a=>a.changed).length,binary:i.items.filter(a=>a.binary).length},patches:i.items.map(l_)},()=>c_(i)),0}},wR={path:["workspace","file","diff"],domain:"workspace",spec:{name:"workspace file diff",flags:[{name:"source",takesValue:!0,valueHint:"server"}],positionals:[{name:"path",required:!0,repeatable:!0}],usageArgs:"[<options>] [--] <path>...",examples:["succapp workspace file diff demo/views/sales.view","succapp workspace file diff --source=server /demo/views/sales.view","succapp workspace file diff demo/views/sales.view --json"]},workspaceTarget:"required",serverTarget:"required",createExecutor:()=>new Ih};function s_(r){if(!r||r==="server")return"server";throw new R("err.cli.invalidChoice",{input:"--source",option:"--source",value:r,allowedValues:["server"]})}function c_(r){return r.items.map(e=>e.patch).filter(Boolean).join(`
99
+ `)}function l_(r){return{path:r.path,remotePath:r.remotePath,localPath:r.localPath,source:r.source,sourceSize:r.sourceSize,workspaceSize:r.workspaceSize,changed:r.changed,binary:r.binary,patch:r.patch}}var Dh=class extends be{toOptions(e){return{path:e.positional[0],limit:Ec(e.value("limit"))}}async executeSyncCommand(e,t,n,o){let i=await t.history({path:o.path,limit:o.limit,task:n.task});return n.output.result({workspace:e.root,server:e.activeServerUrl,path:i.path,remotePath:i.remotePath,summary:{histories:i.histories.length},histories:i.histories.map(Tc)},()=>bc(i.histories)),0}},PR={path:["workspace","file","history"],domain:"workspace",spec:{name:"workspace file history",flags:[{name:"limit",takesValue:!0,valueHint:"n"}],positionals:[{name:"path",required:!0}],usageArgs:"[<options>] <path>",examples:["succapp workspace file history demo/views/sales.view","succapp workspace file history --limit=20 /DEMO/views/sales.view","succapp workspace file history demo/views/sales.view --json"]},workspaceTarget:"required",serverTarget:"required",createExecutor:()=>new Dh};async function cp(r,e){let t=await r.resolveRemoteFilePath({path:e.path});return{path:t.path,localPath:r.getMetaFileLocalPath(t.remotePath),remotePath:t.remotePath,serverUrl:t.serverUrl,viewUrl:Yo(t.serverUrl,{path:t.remotePath}),editUrl:Yo(t.serverUrl,{path:t.remotePath,":edit":"true"})}}D();var Ah=class extends ue{constructor(t=Zo){super();this.opener=t}toOptions(t){return{path:t.positional[0],edit:t.has("edit")}}async executeWorkspaceCommand(t,n,o){await Fr(n,t);let i=await cp(t,{path:o.path}),a=o.edit===!0,s=a?i.editUrl:i.viewUrl;return await this.opener(s,n.abortSignal),n.output.result({workspace:t.root,server:i.serverUrl,path:i.path,remotePath:i.remotePath,edit:a,url:s},()=>p_(s,a)),0}},RR={path:["workspace","file","open"],domain:"workspace",spec:{name:"workspace file open",flags:[{name:"edit",takesValue:!1}],positionals:[{name:"path",required:!0}],usageArgs:"[<options>] <path>",examples:["succapp workspace file open demo/views/sales.view","succapp workspace file open --edit /DEMO/views/sales.view","succapp workspace file open demo/views/sales.view --json"]},workspaceTarget:"required",serverTarget:"required",createExecutor:()=>new Ah};function p_(r,e){return u(e?"cli.cmd.workspace.file.open.openedEdit":"cli.cmd.workspace.file.open.openedView",r)}D();F();U();var Oh=class extends ue{toOptions(e){return{path:e.positional[0],url:u_(e.value("url"))}}async executeWorkspaceCommand(e,t,n){await Fr(t,e);let o=await cp(e,{path:n.path});return t.output.result(d_(e,o),()=>m_(o,n.url)),0}},ER={path:["workspace","file","resolve"],domain:"workspace",spec:{name:"workspace file resolve",flags:[{name:"url",takesValue:!0,valueHint:"view|edit"}],positionals:[{name:"path",required:!0}],usageArgs:"[<options>] <path>",examples:["succapp workspace file resolve demo/views/sales.view","succapp workspace file resolve --url=view demo/views/sales.view","succapp workspace file resolve --url=edit /DEMO/views/sales.view --json"]},workspaceTarget:"required",serverTarget:"required",createExecutor:()=>new Oh};function u_(r){if(r!==void 0){if(r==="view"||r==="edit")return r;throw new R("err.cli.invalidChoice",{input:"--url",option:"--url",value:r,allowedValues:["view","edit"]})}}function d_(r,e){return{workspace:r.root,server:e.serverUrl,path:e.path,remotePath:e.remotePath,localPath:e.localPath,viewUrl:e.viewUrl,editUrl:e.editUrl}}function m_(r,e){return e==="view"?r.viewUrl:e==="edit"?r.editUrl:[u("cli.cmd.workspace.file.resolve.path",r.path),u("cli.cmd.workspace.file.resolve.localPath",r.localPath),u("cli.cmd.workspace.file.resolve.remote",r.remotePath),u("cli.cmd.workspace.file.resolve.viewUrl",r.viewUrl),u("cli.cmd.workspace.file.resolve.editUrl",r.editUrl)].join(`
100
+ `)}F();U();var _h=class extends be{toOptions(e){let t=h_(e.value("source")),n=f_(e.value("revision"));return{path:e.positional[0],source:t,revision:n}}validateOptions(e,t){if(t.revision!==void 0&&t.source==="mirror")throw new R("err.cli.conflictingInputs",{inputs:["--revision","--source=mirror"]})}async executeSyncCommand(e,t,n,o){let i=await t.show({path:o.path,source:o.source,revision:o.revision,task:n.task});return n.output.content({workspace:e.root,server:e.activeServerUrl,path:i.path,remotePath:i.remotePath,fileName:i.fileName,source:i.source,size:i.buffer.length},i.buffer),0}},bR={path:["workspace","file","show"],domain:"workspace",spec:{name:"workspace file show",flags:[{name:"source",takesValue:!0,valueHint:"mirror|server"},{name:"revision",takesValue:!0,valueHint:"n"}],positionals:[{name:"path",required:!0}],usageArgs:"[<options>] <path>",examples:["succapp workspace file show /demo/views/sales.view","succapp workspace file show --source=mirror demo/views/sales.view","succapp workspace file show --revision=42 /demo/views/sales.view","succapp workspace file show /demo/views/sales.view --json"]},workspaceTarget:"required",serverTarget:"required",createExecutor:()=>new _h};function h_(r){if(!r)return"server";if(r==="mirror"||r==="server")return r;throw new R("err.cli.invalidChoice",{input:"--source",option:"--source",value:r,allowedValues:["mirror","server"]})}function f_(r){if(r===void 0)return;let e=Dt(r);if(e===void 0)throw new R("err.cli.invalidNonNegativeInteger",{input:"--revision",option:"--revision",value:r});return e}D();var Lh=class extends be{toOptions(e){return{paths:e.positional,dryRun:e.has("dry-run")}}async executeSyncCommand(e,t,n,o){let i=await t.upgradeMetadata({paths:o.paths.length>0?[...o.paths]:void 0,dryRun:o.dryRun,task:n.task});return n.output.result({workspace:e.root,server:e.activeServerUrl,dryRun:o.dryRun,summary:{checked:i.checked,candidates:i.candidates.length,changed:i.changed.length,skipped:i.skipped.length,failures:i.failures.length},candidates:i.candidates.map(Kr),changed:i.changed.map(Kr),skipped:i.skipped.map(Kr),failures:i.failures.map(Kr)},()=>g_(i,o.dryRun,n.config.verbose)),i.failures.length>0?1:0}},TR={path:["workspace","file","upgrade"],domain:"workspace",spec:{name:"workspace file upgrade",flags:[{name:"dry-run",takesValue:!1}],positionals:[{name:"path",repeatable:!0}],usageArgs:"[<options>] [--] [<path>...]",examples:["succapp workspace file upgrade --dry-run","succapp workspace file upgrade demo/views/sales.view","succapp workspace file upgrade /DEMO/views/sales.view --json"]},workspaceTarget:"required",serverTarget:"required",lockUsage:"workspace-write",createExecutor:()=>new Lh};function g_(r,e,t){let n=[u(e?"cli.cmd.workspace.file.upgrade.dryRunRes":"cli.cmd.workspace.file.upgrade.result",r.checked,e?r.candidates.length:r.changed.length,r.skipped.length,r.failures.length)];return e&&r.candidates.length>0&&(n.push(u("cli.cmd.workspace.file.upgrade.cands",r.candidates.length)),n.push(ga(r.candidates))),!e&&r.changed.length>0&&(n.push(u("cli.cmd.workspace.file.upgrade.upgraded",r.changed.length)),n.push(ga(r.changed))),r.failures.length>0&&(n.push(u("cli.cmd.workspace.file.upgrade.failed",r.failures.length)),n.push(y_(r.failures))),t&&r.skipped.length>0&&(n.push(u("cli.cmd.workspace.file.upgrade.skipped",r.skipped.length)),n.push(C_(r.skipped))),n.join(`
101
+ `)}function y_(r){return de({columns:[u("cli.out.header.remote"),u("cli.cmd.workspace.file.upgrade.reason"),u("cli.out.header.error")],rows:r.map(e=>[e.remotePath,e.reason??"",In(e.errorInfo)])})}function C_(r){return de({columns:[u("cli.out.header.remote"),u("cli.out.common.version"),u("cli.out.common.targetVersion"),u("cli.cmd.workspace.file.upgrade.reason")],rows:r.map(e=>[e.remotePath,e.currentVersion??"",e.targetVersion??"",e.reason??""])})}D();var Nh=class extends ue{async executeWorkspaceCommand(e,t,n){let o=await e.lockManager.peekHolders(),i=Array.from(o,([a,s])=>({scope:a,holder:s})).filter(a=>a.holder).map(a=>({scope:a.scope}));return t.output.result({workspace:e.root,scopes:i},()=>({columns:[u("cli.cmd.workspace.lock.list.scope")],rows:i.map(a=>[a.scope])})),0}},MR={path:["workspace","lock","list"],domain:"workspace",spec:{name:"workspace lock list",flags:[],positionals:[],usageArgs:"[<options>]",examples:["succapp workspace lock list","succapp workspace lock list --json"]},workspaceTarget:"required",serverTarget:"none",createExecutor:()=>new Nh};F();U();function lp(r){if(Fi.includes(r))return r;throw new R("err.cli.invalidChoice",{inputId:"lockScope",value:r,allowedValues:Fi})}D();var Wh=class extends ue{toOptions(e){return{scopes:e.positional.map(lp)}}async executeWorkspaceCommand(e,t,n){let o=await e.lockManager.peekHolders(n.scopes.length===0?void 0:n.scopes),i=Array.from(o,([s,c])=>({scope:s,holder:c})),a={workspace:e.root,staleMs:e.lockManager.staleMs,scopes:i.map(s=>this.toJsonScopeStatus(s))};return t.output.result(a,()=>({columns:[u("cli.cmd.workspace.lock.status.scope"),u("cli.out.header.status"),u("cli.out.header.source"),u("cli.cmd.workspace.lock.status.pid"),u("cli.out.header.command"),u("cli.out.header.started"),u("cli.cmd.workspace.lock.status.heartbeat")],rows:i.map(s=>this.toTableRow(s))})),0}toJsonScopeStatus(e){return e.holder?{scope:e.scope,status:"busy",holder:this.toJsonHolder(e.holder)}:{scope:e.scope,status:"free"}}toJsonHolder(e){return{pid:e.pid,hostname:e.hostname,source:e.source,command:e.command,startTime:e.startTime,lastHeartbeat:e.lastHeartbeat,agentVersion:e.agentVersion,alsoHolds:e.alsoHolds}}toTableRow(e){return[e.scope,u(e.holder?"cli.out.value.busy":"cli.out.value.free"),e.holder?.source??"",e.holder?String(e.holder.pid):"",e.holder?.command??"",e.holder?.startTime??"",e.holder?.lastHeartbeat??""]}},xR={path:["workspace","lock","status"],domain:"workspace",spec:{name:"workspace lock status",flags:[],positionals:[{name:"scope",repeatable:!0}],usageArgs:"[<options>] [<scope>...]",examples:["succapp workspace lock status","succapp workspace lock status sync","succapp -C /path/to/workspace workspace lock status --json"]},workspaceTarget:"required",serverTarget:"none",createExecutor:()=>new Wh};function FR(r){return Ve(r[zr.locale])??Ve(r[tc.lcAll])??Ve(r[tc.lcMessages])??Ve(r[tc.lang])}K();we();F();U();var S_=T("cli.config"),$n=86400,v_,IR=[];function DR(r){let e=k_(r);return v_=e.config,IR=e.diagnostics,e.config}function AR(){for(let r of IR)S_.warn(r.message,r.envName,r.value)}function k_(r){let e=r.env??process.env,t=w_(r),n=t.input,o=[];return{config:{workspace:R_(t,"workspace",e[zr.workspace]),server:E_(t,"server"),envServer:t.hasExplicitValue("server")?void 0:Ve(e[zr.server]),outputMode:b_(n,e,o),quiet:n.quiet,verbose:n.verbose,lockTimeout:T_(t),logLevel:M_(t,e,o),locale:t.hasExplicitValue("locale")?Ve(n.locale):FR(e)},diagnostics:o}}function w_(r){if(r.args){let e=r.args.globalOptions,t=r.args;return{input:e,hasExplicitValue:n=>P_(t,n),strictExplicitValues:!1}}if(r.input){let e=r.input;return{input:e,hasExplicitValue:t=>e[t]!==void 0,strictExplicitValues:!0}}Do("Either args or input must be provided to initializeCliConfig().")}function P_(r,e){switch(e){case"workspace":return r.parsed.has("workspace");case"server":return r.parsed.has("server");case"lockTimeout":return r.parsed.has("lock-timeout");case"logLevel":return r.parsed.has("log-level");case"locale":return r.parsed.has("locale")}}function R_(r,e,t){return Ve(r.hasExplicitValue(e)?r.input[e]:t)}function E_(r,e){return r.hasExplicitValue(e)?Ve(r.input[e]):void 0}function b_(r,e,t){return r.json||OR(Jf,zr.json,e,t)?"json":"human"}function T_(r){let e=r.input;if(r.hasExplicitValue("lockTimeout")){let t=e.lockTimeout,n=Dt(t,$n);if(n===void 0){if(!r.strictExplicitValues)return ja;let o=Ee("lock-timeout");throw new R("err.cli.invalidNonNegativeIntegerRange",{input:o,option:o,value:t??"",max:$n})}return n}return ja}function M_(r,e,t){let n=r.input;if(r.hasExplicitValue("logLevel")){let o=n.logLevel,i=Oo(o);if(i===void 0){if(!r.strictExplicitValues)return"info";let a=Ee("log-level");throw new R("err.cli.invalidChoice",{input:a,option:a,value:o??"",allowedValues:zi})}return i}return n.verbose?"debug":OR(Oo,zr.logLevel,e,t)??"info"}function OR(r,e,t,n){let o=t[e],i=r(o);return o!==void 0&&o.trim()!==""&&i===void 0&&n.push({code:"invalid-env-value",severity:"warning",message:"Ignoring invalid CLI environment value",envName:e,value:o}),i}dn();D();F();U();var LR=100,x_=["config","sync"],Uh=class extends ue{toOptions(e){return{scopes:e.positional.map(lp),timeoutSeconds:F_(e.value("timeout"))}}async executeWorkspaceCommand(e,t,n){let o=n.scopes.length>0?n.scopes:x_,i=Date.now(),a=n.timeoutSeconds===void 0?void 0:n.timeoutSeconds*1e3;for(;;){ht(t.abortSignal);let s=await I_(e,o),c=s.filter(p=>p.status==="busy"),l=Date.now()-i;if(c.length===0)return t.output.result(_R(e.root,s,"free",l),()=>u("cli.cmd.workspace.lock.wait.locksFree",o.join(", "))),0;if(a!==void 0&&l>=a)return t.output.result(_R(e.root,s,"timeout",l),()=>u("cli.cmd.workspace.lock.wait.locksBusy",n.timeoutSeconds??0,c.map(p=>p.scope).join(", "))),124;await A_(Math.min(LR,D_(a,l)))}}},NR={path:["workspace","lock","wait"],domain:"workspace",spec:{name:"workspace lock wait",flags:[{name:"timeout",takesValue:!0,valueHint:"seconds"}],positionals:[{name:"scope",repeatable:!0}],usageArgs:"[<options>] [<scope>...]",examples:["succapp workspace lock wait","succapp workspace lock wait sync --timeout=30","succapp workspace lock wait config sync --json"]},workspaceTarget:"required",serverTarget:"none",createExecutor:()=>new Uh};function F_(r){if(r===void 0)return;let e=Dt(r,$n);if(e===void 0)throw new R("err.cli.invalidNonNegativeIntegerRange",{input:"--timeout",option:"--timeout",value:r,max:$n});return e}async function I_(r,e){let t=await r.lockManager.peekHolders(e);return e.map(n=>({scope:n,status:t.get(n)?"busy":"free"}))}function _R(r,e,t,n){return{workspace:r,status:t,waitedMs:n,scopes:e,busyScopes:e.filter(o=>o.status==="busy").map(o=>o.scope)}}function D_(r,e){return r===void 0?LR:Math.max(0,r-e)}function A_(r){return new Promise(e=>setTimeout(e,r))}D();U();F();H();var jh=class extends be{configuredActiveServer;toOptions(e){return{projectNames:e.positional,force:e.has("force")}}async prepareSyncCommand(e,t,n){if(this.configuredActiveServer=void 0,await e.config.ensureLoaded(),e.activeServerUrl||!t.config.server){await super.prepareSyncCommand(e,t,n);return}let o=Ee("server"),i=gr(t.config.server,{input:o,option:o,flag:"server"});this.configuredActiveServer=await e.addServer(i)}async executeSyncCommand(e,t,n,o){await __(t,o);let i=await t.clone({projectNames:o.projectNames.length>0?[...o.projectNames]:void 0,task:n.task}),a=this.configuredActiveServer,s=a?{activeServerConfigured:!0,configuredActiveServer:a}:{};return n.output.result({workspace:e.root,server:e.activeServerUrl,summary:{projects:i.projectNames.length,oldFiles:i.oldFiles.length},...s,projects:i.projectNames,oldFiles:i.oldFiles.map(Kr)},()=>this.renderCloneResultText(i)),0}renderCloneResultText(e){let t=e.projectNames.length>0?e.projectNames.join(", "):u("cli.out.value.none"),n=[];return this.configuredActiveServer&&n.push(u("cli.cmd.workspace.proj.clone.configuredActive",this.configuredActiveServer)),n.push(u("cli.cmd.workspace.proj.clone.cloned",t)),e.oldFiles.length>0&&n.push(u("cli.cmd.workspace.proj.clone.oldMetaNotice",{count:e.oldFiles.length,command:O_(e.projectNames)})),n.join(`
102
+ `)}},UR={path:["workspace","project","clone"],domain:"workspace",spec:{name:"workspace project clone",flags:[{name:"force",alias:"f",takesValue:!1}],positionals:[{name:"project",repeatable:!0}],usageArgs:"[<options>] [--] [<project>...]",examples:["succapp workspace project clone","succapp workspace project clone DEMO","succapp workspace project clone DEMO --force","succapp workspace project clone DEMO OTHER --json"]},workspaceTarget:"required",serverTarget:"required",lockUsage:"workspace-write",createExecutor:()=>new jh};function O_(r){return`succapp workspace file upgrade${r.length>0?` ${r.join(" ")}`:""}`}async function __(r,e){if(e.force)return;let[t,n]=await Promise.all([r.listWorkspaceProjects(),r.listBaselineProjects()]),o=new Set([...t,...n].map(WR)),a=(e.projectNames.length>0?[...new Set(e.projectNames.map(WR))]:[...o]).filter(s=>o.has(s));if(a.length!==0)throw new R("err.cli.confirmationRequired",{reason:"cloneOverwrite",flag:"--force",projectNames:a.join(", ")})}function WR(r){return Et(r).slice(1)}D();var Bh=class extends be{async executeSyncCommand(e,t,n,o){let[i,a]=await Promise.all([t.listWorkspaceProjects(),t.listBaselineProjects()]),s=L_(i,a);return n.output.result({workspace:e.root,server:e.activeServerUrl,projects:s},()=>N_(s)),0}},jR={path:["workspace","project","list"],domain:"workspace",spec:{name:"workspace project list",flags:[],positionals:[],usageArgs:"[<options>]",examples:["succapp workspace project list","succapp workspace project list --json"]},workspaceTarget:"required",serverTarget:"none",createExecutor:()=>new Bh};function L_(r,e){let t=new Set(r),n=new Set(e);return Array.from(new Set([...r,...e])).sort((o,i)=>o.localeCompare(i)).map(o=>({name:o,workspace:t.has(o),baseline:n.has(o)}))}function N_(r){return{columns:[u("cli.out.header.project"),u("cli.out.common.workspace"),u("cli.out.common.baseline")],rows:r.map(e=>[e.name,u(e.workspace?"cli.out.value.yes":"cli.out.value.no"),u(e.baseline?"cli.out.value.yes":"cli.out.value.no")])}}U();F();D();var Vh=class extends be{toOptions(e){return{projectNames:e.positional,force:e.has("force")}}validateOptions(e,t){if(!t.force)throw new R("err.cli.confirmationRequired",{reason:"projRemove",flag:"--force",projectNames:t.projectNames.join(", ")})}async executeSyncCommand(e,t,n,o){let i=await t.removeProject({projectNames:[...o.projectNames],task:n.task});return n.output.result({workspace:e.root,server:e.activeServerUrl,projectNames:i.projectNames},()=>u("cli.cmd.workspace.proj.remove.removed",i.projectNames.join(", ")||u("cli.out.value.none"))),0}},BR={path:["workspace","project","remove"],domain:"workspace",spec:{name:"workspace project remove",flags:[{name:"force",alias:"f",takesValue:!1}],positionals:[{name:"project",required:!0,repeatable:!0}],usageArgs:"[<options>] <project>...",examples:["succapp workspace project remove DEMO_BLANK --force","succapp workspace project remove DEMO_BLANK OTHER --force --json"]},workspaceTarget:"required",serverTarget:"none",lockUsage:"workspace-write",createExecutor:()=>new Vh};F();U();var lr=class extends ue{async executeWorkspaceCommand(e,t,n){return await e.config.ensureLoaded(),this.executeServerCommand(e,t,n)}async requireConfiguredServerUrl(e,t,n){let o=await rc(t,{explicitServerUrl:n}),i=e.config.resolveServerUrl(o);if(!i)throw new R("err.cli.unconfiguredServer",{inputId:"server",value:o,context:{target:o}});return i}};D();var qh=class extends lr{toOptions(e){return{url:e.positional[0]}}async executeServerCommand(e,t,n){let o=gr(n.url),i=e.config.hasServer(o),a=await e.addServer(o);return t.output.result({workspace:e.root,server:a,activeServer:a,added:!i},()=>u("cli.cmd.workspace.remote.add.active",a)),0}},VR={path:["workspace","remote","add"],domain:"workspace",spec:{name:"workspace remote add",flags:[],positionals:[{name:"url",required:!0,role:"server-url"}],usageArgs:"[<options>] <url>",examples:["succapp workspace remote add http://localhost:8180","succapp workspace remote add https://bi.example.com --json"]},workspaceTarget:"required",serverTarget:"none",lockUsage:"workspace-write",createExecutor:()=>new qh};D();var $h=class extends lr{async executeServerCommand(e,t,n){let o=e.activeServerUrl,i=e.config.getServers().map(a=>({url:a,active:a===o}));return t.output.result({workspace:e.root,activeServer:o||void 0,servers:i.map(W_)},()=>U_(i)),0}},qR={path:["workspace","remote","list"],domain:"workspace",spec:{name:"workspace remote list",flags:[],positionals:[],usageArgs:"[<options>]",examples:["succapp workspace remote list","succapp workspace remote list --json"]},workspaceTarget:"required",serverTarget:"none",createExecutor:()=>new $h};function W_(r){return{url:r.url,active:r.active}}function U_(r){return r.length===0?u("cli.out.common.noServers"):{columns:[u("cli.out.common.server"),u("cli.out.common.active")],rows:r.map(e=>[e.url,u(e.active?"cli.out.value.yes":"cli.out.value.no")])}}D();var Hh=class extends lr{toOptions(e){return{url:e.positional[0]}}async executeServerCommand(e,t,n){let o=await this.requireConfiguredServerUrl(e,t,n.url),i=await e.removeServer(o);return t.output.result({workspace:e.root,server:o,removedActive:i,activeServer:e.activeServerUrl||void 0},()=>e.activeServerUrl?u("cli.cmd.workspace.remote.remove.active",o,e.activeServerUrl):u("cli.cmd.workspace.remote.remove.removed",o)),0}},$R={path:["workspace","remote","remove"],domain:"workspace",spec:{name:"workspace remote remove",flags:[],positionals:[{name:"url",required:!0,role:"server-url"}],usageArgs:"[<options>] <url>",examples:["succapp workspace remote remove http://localhost:8180","succapp workspace remote remove https://bi.example.com --json"]},workspaceTarget:"required",serverTarget:"none",lockUsage:"workspace-write",createExecutor:()=>new Hh};D();var zh=class extends lr{toOptions(e){return{oldUrl:e.positional[0],newUrl:e.positional[1]}}async executeServerCommand(e,t,n){let o=await this.requireConfiguredServerUrl(e,t,n.oldUrl),i=gr(n.newUrl),a=await e.changeServerUrl(o,i);return t.output.result({workspace:e.root,oldServer:o,server:a,activeServer:e.activeServerUrl||void 0},()=>u("cli.cmd.workspace.remote.setUrl.changed",o,a)),0}},HR={path:["workspace","remote","set-url"],domain:"workspace",spec:{name:"workspace remote set-url",flags:[],positionals:[{name:"old-url",required:!0,role:"server-url"},{name:"new-url",required:!0,role:"server-url"}],usageArgs:"[<options>] <old-url> <new-url>",examples:["succapp workspace remote set-url http://localhost:8080 http://localhost:8180","succapp workspace remote set-url https://old.example.com https://new.example.com --json"]},workspaceTarget:"required",serverTarget:"none",lockUsage:"workspace-write",createExecutor:()=>new zh};D();var Gh=class extends lr{toOptions(e){return{url:e.positional[0]}}async executeServerCommand(e,t,n){let o=await this.requireConfiguredServerUrl(e,t,n.url),i=await e.switchActiveServer(o);return t.output.result({workspace:e.root,server:o,activeServer:i},()=>u("cli.cmd.workspace.remote.use.active",i)),0}},zR={path:["workspace","remote","use"],domain:"workspace",spec:{name:"workspace remote use",flags:[],positionals:[{name:"url",required:!0,role:"server-url"}],usageArgs:"[<options>] <url>",examples:["succapp workspace remote use http://localhost:8180","succapp workspace remote use https://bi.example.com --json"]},workspaceTarget:"required",serverTarget:"none",lockUsage:"workspace-write",createExecutor:()=>new Gh};var GR=[$P,sR,zP,GP,JP,wR,bR,PR,RR,ER,TR,UR,jR,BR,aR,VR,qR,zR,HR,$R,SR,vR,kR,xR,MR,NR,gR,fR,pR];var KR=[...GR,...jv,...mC,...GC];var pp=[{path:["server","file"]},{path:["server","cache"]},{path:["server","project"]},{path:["server","script"]},{path:["server","settings"]},{path:["server","extension"]},{path:["server","extension","template"]},{path:["db","source"]},{path:["db","schema"]},{path:["db","table"]},{path:["workspace","project"]},{path:["workspace","file"]},{path:["workspace","remote"]},{path:["workspace","lock"]},{path:["workspace","backup"]},{path:["workspace","extension"]}];we();we();var j_="cli.out.help.commands",B_={extension:"ext",project:"proj"};function JR(r){return r.spec.summary??V_(r.path)}function YR(r){return r.spec.description??q_(r.path)}function up(r){return r.help?.section??j_}function XR(r){return r.title??dp(r.path)}function QR(r){return r.summary??ns(r.path)}function ZR(r){return r.description??mp(r.path)}function eE(r,e){return r.description?r.description:($(e,`flag --${r.name} description requires command context`),$_(e.path,r.name))}function V_(r){return ns(r)}function q_(r){return mp(r)}function dp(r){return`cli.cmd.${hp(r)}.title`}function ns(r){return`cli.cmd.${hp(r)}.summary`}function mp(r){return`cli.cmd.${hp(r)}.desc`}function $_(r,e){return`cli.cmd.${hp(r)}.${tE(e)}`}function hp(r){return r.map(H_).join(".")}function H_(r){return B_[r]??tE(r)}function tE(r){return r.replace(/-([a-z0-9])/g,(e,t)=>t.toUpperCase())}function rE(r){let e=new Map;for(let t of r){let n=t.path.join(" ");$(!e.has(n),`Duplicate CLI command path: ${n}`),e.set(n,t),z_(t,n),G_(t,n),K_(t,n)}}function z_(r,e){$(r.path.length>0,"CLI command path must not be empty."),r.domain!=="common"&&$(r.path[0]===r.domain,`CLI command domain/path mismatch: ${e}`)}function G_(r,e){$(up(r).trim(),`CLI command help section must not be empty: ${e}`),$(r.spec.name.trim(),`CLI command spec name must not be empty: ${e}`)}function K_(r,e){$(typeof r.createExecutor=="function",`CLI command createExecutor must be a function: ${e}`)}var nE=["workspace","server","auth","db"];function oE(){return nE.map(r=>{let e=[r];return{title:dp(e),commands:[{name:r,summary:ns(e)}]}})}function fp(r,e=[]){let t=nE.map(o=>{let i=[o],a=r.filter(s=>s.domain===o);return{path:i,title:dp(i),summary:ns(i),description:mp(i),sections:J_(a)}}),n=e.flatMap(o=>{let i=r.filter(a=>X_(a,o.path));return i.length===0?[]:[{path:o.path,title:XR(o),summary:QR(o),description:ZR(o),sections:Y_(o.path,i)}]});return[...t,...n]}function J_(r){return iE(r,e=>e.help?.entry??e.path.slice(1).join(" "))}function Y_(r,e){return iE(e,t=>t.help?.entry??t.path.slice(r.length).join(" "))}function iE(r,e){let t=new Map;for(let n of r){let o=up(n),i=t.get(o)??[];i.push({name:e(n),summary:JR(n)}),t.set(o,i)}return Array.from(t,([n,o])=>({title:n,commands:Q_(o)}))}function X_(r,e){return r.path.length>e.length&&e.every((t,n)=>r.path[n]===t)}function Q_(r){let e=[],t=new Set;for(let n of r)t.has(n.name)||(t.add(n.name),e.push(n));return e}var Kh=class{commands;namespaces;topLevelHelpGroups;commandsByPath=new Map;namespacesByPath=new Map;constructor(e){rE(e),this.commands=[...e],this.namespaces=fp(this.commands,pp),this.topLevelHelpGroups=oE();for(let t of this.commands)this.commandsByPath.set(t.path.join(" "),t);for(let t of this.namespaces)this.namespacesByPath.set(t.path.join(" "),t)}findCommand(e){return this.commandsByPath.get(e.join(" "))}findNamespace(e){return this.namespacesByPath.get(e.join(" "))}},Jh=new Kh(KR),aE=Jh.commands,sE=Jh.topLevelHelpGroups,NQ=Jh.namespaces;D();function pE(r){return Xh.renderCommandHelp(r)}function uE(r){return Xh.renderTopLevelHelp(r)}function dE(r){return Xh.renderNamespaceHelp(r)}var Z_=4,cE=3,eL="[<options>]",lE="value",tL=100,Yh=class{renderCommandHelp(e){let t=e.spec,n=this.mergeGlobalFlags(e),o=t.usageArgs??eL,i=[u("cli.out.help.usageLine",{command:t.name,usageArgs:o})];return this.appendCommandDescription(i,e),this.appendFlags(i,n,e),this.appendExamples(i,t.examples),this.renderLines(i)}renderTopLevelHelp(e){let t=this.renderTopLevelUsage();return this.appendFlags(t,Au),this.appendCommandGroups(t,e),t.push("",u("cli.out.help.commandHelpSee")),this.renderLines(t)}renderNamespaceHelp(e){let t=e.path.join(" "),n=[`${u("cli.out.help.usageHeader")} succapp ${t} <command> [<args>]`,"",u(e.description)];for(let o of e.sections){if(o.commands.length===0)continue;n.push("",u(o.title));let i=Math.max(...o.commands.map(a=>Er(a.name)));for(let a of o.commands)n.push(os(`${Lo(a.name,i)} ${u(a.summary)}`,cE))}return n.push("",u("cli.out.help.commandHelpRead",t)),this.renderLines(n)}renderTopLevelUsage(){let e=`${u("cli.out.help.usageHeader")} succapp `,t=" ".repeat(Er(e)),n=[...Au.map(a=>{let s=a.takesValue?` <${a.valueHint??lE}>`:"";return`[--${a.name}${s}]`}),"<command>","[<args>]"],o=[],i=e;for(let a of n){let c=`${i}${i===e?"":" "}${a}`;if(i!==e&&Er(c)>tL){o.push(i),i=`${t}${a}`;continue}i=c}return o.push(i),o}appendCommandDescription(e,t){e.push("",os(u(YR(t))))}appendFlags(e,t,n){t.length!==0&&(e.push("",u("cli.out.help.options")),e.push(...this.renderFlags(t,n)))}appendExamples(e,t){if(!(!t||t.length===0)){e.push("",u("cli.out.help.examples"));for(let n of t)e.push(os(n))}}appendCommandGroups(e,t){for(let n of t)this.appendCommandGroup(e,n)}appendCommandGroup(e,t){if(t.commands.length===0)return;e.push("",u(t.title));let n=Math.max(...t.commands.map(o=>Er(o.name)));for(let o of t.commands)e.push(os(`${Lo(o.name,n)} ${u(o.summary)}`,cE))}renderFlags(e,t){let n=e.map(i=>({left:this.renderFlagLeft(i),description:u(eE(i,t))})),o=Math.max(...n.map(i=>Er(i.left)));return n.map(i=>os(`${Lo(i.left,o)} ${i.description}`))}renderFlagLeft(e){let t=e.takesValue?` <${e.valueHint??lE}>`:"",n=`--${e.name}${t}`;return e.alias?`-${e.alias}, ${n}`:` ${n}`}mergeGlobalFlags(e){let t=new Set(e.spec.flags.map(n=>n.name));return[...e.spec.flags,...xr.filter(n=>!t.has(n.name)&&Gr(e,n.name))]}renderLines(e){return`${e.join(`
94
103
  `)}
95
- `}},rh=new th;function Oa(r,e=LA){return`${" ".repeat(e)}${r}`}function jP(r,e){let t=WP(e);r.result({help:t},()=>t)}function BP(r,e){let t=NP(e);r.result({help:t},()=>t)}function VP(r,e){let t=UP(e);r.result({help:t},()=>t)}function qP(r){r.result({version:Wa},()=>`succapp ${Wa}`)}D();J();function HP(r){return new nh(r).parse()}var nh=class{constructor(e){this.args=e}parse(){let e=this.args.parsed,t=this.args.globalOptions;return this.checkCliInvocationUsage(t),{rawArgv:this.args.rawArgv,kind:this.args.kind,command:this.args.command,namespace:this.args.namespace,token:this.args.token,unknownCommand:this.args.unknownCommand,commandArgv:this.args.commandArgv,parsed:e,globalOptions:t}}validateGlobalOptions(e){let t=[],n=this.args.command;if(!n)return e.logLevel!==void 0&&ho(e.logLevel)===void 0&&t.push(new E("err.cli.invalidChoice",$P(e.logLevel))),this.args.kind==="unknown"||this.validateGlobalOptionsWithoutCommand(e,t),t;if(e.lockTimeout!==void 0&&Br(n,"lock-timeout")&&Yt(e.lockTimeout,_n)===void 0){let o=Fe("lock-timeout");t.push(new E("err.cli.invalidNonNegativeIntegerRange",{input:o,option:o,value:e.lockTimeout,max:_n}))}return e.logLevel!==void 0&&ho(e.logLevel)===void 0&&t.push(new E("err.cli.invalidChoice",$P(e.logLevel))),e.workspace!==void 0&&!Br(n,"workspace")&&t.push(new E("err.cli.unknownOption",{option:Fe("workspace")})),e.server!==void 0&&!Br(n,"server")&&t.push(new E("err.cli.unknownOption",{option:Fe("server")})),e.lockTimeout!==void 0&&!Br(n,"lock-timeout")&&t.push(new E("err.cli.unknownOption",{option:Fe("lock-timeout")})),t}validateGlobalOptionsWithoutCommand(e,t){e.workspace!==void 0&&this.args.kind!=="top-help"&&t.push(new E("err.cli.unknownOption",{option:Fe("workspace")})),e.server!==void 0&&t.push(new E("err.cli.unknownOption",{option:Fe("server")})),e.lockTimeout!==void 0&&t.push(new E("err.cli.unknownOption",{option:Fe("lock-timeout")}))}checkCliInvocationUsage(e){if(this.args.helpOrVersionRequested)return;if(this.args.kind==="unknown")throw UA(this.args);let t=[...this.args.issues,...this.validateGlobalOptions(e)];if(t.length>0)throw jA(t)}};function UA(r){let e=r.unknownCommand,t=e?.path.join(" ")||r.token||"";return new E("err.cli.unknownCommand",{commandName:t,path:e?.path,helpCommand:e?.hint})}function jA(r){return r.length===1?r[0]:new E("err.cli.invalidInvocation",{count:r.length,issues:r.map(e=>({errorCode:e.errorCode,properties:e.properties}))})}function $P(r){let e=Fe("log-level");return{input:e,option:e,value:r,allowedValues:vi}}var Ul=class{async run(e,t){let n=HP(e),o=await this.createWorkspaceForCommand(n,t);try{return await this.executeInvocation(n,t,o)}finally{o?.dispose()}}async executeInvocation(e,t,n){switch(e.kind){case"top-help":return jP(t.output,OP),0;case"command-help":return BP(t.output,zP(e)),0;case"namespace-help":return VP(t.output,BA(e)),0;case"version":return qP(t.output),0;case"unknown":uo("Unknown command invocation should be rejected before runner.");case"run":{let o=zP(e),i=o.createExecutor(),a={cwd:t.cwd,config:t.config,output:new ih(t.output,o,n),task:t.task,eventBus:t.eventBus,workspace:n,command:o,abortSignal:t.abortSignal};return i.execute(a,i.toOptions(e.parsed))}}}async createWorkspaceForCommand(e,t){if(e.kind!=="run"||!e.command)return;let n=e.command.workspaceTarget;if(n==="none")return;let o=e.command.allowUninitializedWorkspaceTarget===!0,i=await Gg({cwd:t.cwd,workspace:t.config.workspace,env:t.env,required:n!=="optional"||!!t.config.workspace&&!o});if(i)return xl({root:i,eventBus:t.eventBus,lockWait:t.config.lockTimeout})}},ih=class{constructor(e,t,n){this.delegate=e;this.command=t;this.workspace=n}result(e,t){this.delegate.result(this.withCommandInfo(e),t)}content(e,t,n){this.delegate.content(this.withCommandInfo(e),t,n)}progress(e,t){this.delegate.progress(e,t)}detail(e,t){this.delegate.detail(this.withCommandInfo(e),t)}info(e){this.delegate.info(e)}warning(e){this.delegate.warning(e)}error(e){this.delegate.error(e)}withCommandInfo(e){let t={...e};Object.hasOwn(t,"domain")||(t.domain=this.command.domain),Object.hasOwn(t,"command")||(t.command=this.command.spec.name);let n=Wl(t.workspaceRoot)??Wl(t.workspace)??this.workspace?.root;n!==void 0&&!Object.hasOwn(t,"workspaceRoot")&&(t.workspaceRoot=n);let o=Wl(t.serverUrl)??Wl(t.server);return o!==void 0&&!Object.hasOwn(t,"serverUrl")&&(t.serverUrl=o),t}};function zP(r){return U(r.command,`Missing command for CLI invocation kind: ${r.kind}`),r.command}function BA(r){return U(r.namespace,`Missing namespace for CLI invocation kind: ${r.kind}`),r.namespace}function Wl(r){return typeof r=="string"?r:void 0}q();function KP(r){VA(r),aP()}function VA(r){let e=r.localizer.unresolvedLocale;!e||!r.args.parsed.has("locale")||r.formatter.warning(h("cli.host.localeFallback",e))}q();function GP(r){return{yellow:e=>_a(e,33,r),green:e=>_a(e,32,r),red:e=>_a(e,31,r),dim:e=>_a(e,2,r),bold:e=>_a(e,1,r)}}function _a(r,e,t){return t?`\x1B[${e}m${r}\x1B[0m`:r}var JP="\r\x1B[2K",Bl=class{constructor(e,t,n){this.env=e;this.logFile=t;this.errorDisplayContext=n;this.colors=GP(e.color)}colors;progressActive=!1;lastProgressText="";result(e,t){this.finishProgressLine();let n=t?qA(t()):JSON.stringify(e,null,2);n&&this.env.writeOut(jl(n))}content(e,t,n){this.finishProgressLine(),this.env.writeOut(n?n():t)}progress(e,t){if(!this.env.isTty||!(this.env.isErrTty??this.env.isTty)||!t)return;let n=t();n?this.writeProgressLine(n):this.clearProgressLine()}detail(e,t){this.finishProgressLine();let n=t?.();n&&this.env.writeOut(jl(n))}info(e){this.finishProgressLine(),this.env.writeErr(jl(h("cli.out.human.info",e)))}warning(e){this.finishProgressLine(),this.env.writeErr(jl(this.colors.yellow(h("cli.out.human.warning",e))))}error(e){this.finishProgressLine();let t=Za(e,this.errorDisplayContext),n=[this.colors.red(h("cli.out.human.error",t.message))];t.details&&t.details.length>0&&n.push(...t.details.map(o=>this.colors.dim(` - ${o}`))),t.hint&&n.push(this.colors.dim(h("cli.out.human.hint",t.hint))),t.internal&&this.logFile&&n.push(this.colors.dim(h("cli.out.human.seeLogs",this.logFile))),this.env.writeErr(`${n.join(`
104
+ `}},Xh=new Yh;function os(r,e=Z_){return`${" ".repeat(e)}${r}`}function mE(r,e){let t=uE(e);r.result({help:t},()=>t)}function hE(r,e){let t=pE(e);r.result({help:t},()=>t)}function fE(r,e){let t=dE(e);r.result({help:t},()=>t)}function gE(r){r.result({version:ls},()=>`succapp ${ls}`)}F();U();function CE(r){return new Qh(r).parse()}var Qh=class{constructor(e){this.args=e}parse(){let e=this.args.parsed,t=this.args.globalOptions;return this.checkCliInvocationUsage(t),{rawArgv:this.args.rawArgv,kind:this.args.kind,command:this.args.command,namespace:this.args.namespace,token:this.args.token,unknownCommand:this.args.unknownCommand,commandArgv:this.args.commandArgv,parsed:e,globalOptions:t}}validateGlobalOptions(e){let t=[],n=this.args.command;if(!n)return e.logLevel!==void 0&&Oo(e.logLevel)===void 0&&t.push(new R("err.cli.invalidChoice",yE(e.logLevel))),this.args.kind==="unknown"||this.validateGlobalOptionsWithoutCommand(e,t),t;if(e.lockTimeout!==void 0&&Gr(n,"lock-timeout")&&Dt(e.lockTimeout,$n)===void 0){let o=Ee("lock-timeout");t.push(new R("err.cli.invalidNonNegativeIntegerRange",{input:o,option:o,value:e.lockTimeout,max:$n}))}return e.logLevel!==void 0&&Oo(e.logLevel)===void 0&&t.push(new R("err.cli.invalidChoice",yE(e.logLevel))),e.workspace!==void 0&&!Gr(n,"workspace")&&t.push(new R("err.cli.unknownOption",{option:Ee("workspace")})),e.server!==void 0&&!Gr(n,"server")&&t.push(new R("err.cli.unknownOption",{option:Ee("server")})),e.lockTimeout!==void 0&&!Gr(n,"lock-timeout")&&t.push(new R("err.cli.unknownOption",{option:Ee("lock-timeout")})),t}validateGlobalOptionsWithoutCommand(e,t){e.workspace!==void 0&&this.args.kind!=="top-help"&&t.push(new R("err.cli.unknownOption",{option:Ee("workspace")})),e.server!==void 0&&t.push(new R("err.cli.unknownOption",{option:Ee("server")})),e.lockTimeout!==void 0&&t.push(new R("err.cli.unknownOption",{option:Ee("lock-timeout")}))}checkCliInvocationUsage(e){if(this.args.helpOrVersionRequested)return;if(this.args.kind==="unknown")throw rL(this.args);let t=[...this.args.issues,...this.validateGlobalOptions(e)];if(t.length>0)throw nL(t)}};function rL(r){let e=r.unknownCommand,t=e?.path.join(" ")||r.token||"";return new R("err.cli.unknownCommand",{commandName:t,path:e?.path,helpCommand:e?.hint,suggestedCommands:e?.suggestedCommands})}function nL(r){return r.length===1?r[0]:new R("err.cli.invalidInvocation",{count:r.length,issues:r.map(e=>({errorCode:e.errorCode,properties:e.properties}))})}function yE(r){let e=Ee("log-level");return{input:e,option:e,value:r,allowedValues:zi}}var yp=class{async run(e,t){let n=CE(e),o=await this.createWorkspaceForCommand(n,t);try{return await this.executeInvocation(n,t,o)}finally{o?.dispose()}}async executeInvocation(e,t,n){switch(e.kind){case"top-help":return mE(t.output,sE),0;case"command-help":return hE(t.output,SE(e)),0;case"namespace-help":return fE(t.output,oL(e)),0;case"version":return gE(t.output),0;case"unknown":Do("Unknown command invocation should be rejected before runner.");case"run":{let o=SE(e),i=o.createExecutor(),a={cwd:t.cwd,config:t.config,output:new ef(t.output,o,n),task:t.task,eventBus:t.eventBus,workspace:n,command:o,abortSignal:t.abortSignal};return i.execute(a,i.toOptions(e.parsed))}}}async createWorkspaceForCommand(e,t){if(e.kind!=="run"||!e.command)return;let n=e.command.workspaceTarget;if(n==="none")return;let o=e.command.allowUninitializedWorkspaceTarget===!0,i=await oC({cwd:t.cwd,workspace:t.config.workspace,env:t.env,required:n!=="optional"||!!t.config.workspace&&!o});if(i)return op({root:i,eventBus:t.eventBus,lockWait:t.config.lockTimeout})}},ef=class{constructor(e,t,n){this.delegate=e;this.command=t;this.workspace=n}result(e,t){this.delegate.result(this.withCommandInfo(e),t)}content(e,t,n){this.delegate.content(this.withCommandInfo(e),t,n)}progress(e,t){this.delegate.progress(e,t)}detail(e,t){this.delegate.detail(this.withCommandInfo(e),t)}info(e){this.delegate.info(e)}warning(e){this.delegate.warning(e)}error(e){this.delegate.error(e)}withCommandInfo(e){let t={...e};Object.hasOwn(t,"domain")||(t.domain=this.command.domain),Object.hasOwn(t,"command")||(t.command=this.command.spec.name);let n=gp(t.workspaceRoot)??gp(t.workspace)??this.workspace?.root;n!==void 0&&!Object.hasOwn(t,"workspaceRoot")&&(t.workspaceRoot=n);let o=gp(t.serverUrl)??gp(t.server);return o!==void 0&&!Object.hasOwn(t,"serverUrl")&&(t.serverUrl=o),t}};function SE(r){return $(r.command,`Missing command for CLI invocation kind: ${r.kind}`),r.command}function oL(r){return $(r.namespace,`Missing namespace for CLI invocation kind: ${r.kind}`),r.namespace}function gp(r){return typeof r=="string"?r:void 0}D();function vE(r){iL(r),AR()}function iL(r){let e=r.localizer.unresolvedLocale;!e||!r.args.parsed.has("locale")||r.formatter.warning(u("cli.host.localeFallback",e))}D();function kE(r){return{yellow:e=>is(e,33,r),green:e=>is(e,32,r),red:e=>is(e,31,r),dim:e=>is(e,2,r),bold:e=>is(e,1,r)}}function is(r,e,t){return t?`\x1B[${e}m${r}\x1B[0m`:r}var tf="\r\x1B[2K",Cp=class{constructor(e,t,n){this.env=e;this.logFile=t;this.errorDisplayContext=n;this.colors=kE(e.color)}colors;progressActive=!1;lastProgressText="";result(e,t){this.finishProgressLine();let n=t?aL(t()):JSON.stringify(e,null,2);n&&this.env.writeOut(as(n))}content(e,t,n){this.finishProgressLine(),this.env.writeOut(n?n():t)}progress(e,t){if(!this.env.isTty||!(this.env.isErrTty??this.env.isTty)||!t)return;let n=t();if(e.retained===!0){this.writeRetainedProgressLine(n);return}n?this.writeProgressLine(n):this.clearProgressLine()}detail(e,t){this.finishProgressLine();let n=t?.();n&&this.env.writeOut(as(n))}info(e){this.finishProgressLine(),this.env.writeErr(as(u("cli.out.human.info",e)))}warning(e){this.finishProgressLine(),this.env.writeErr(as(this.colors.yellow(u("cli.out.human.warning",e))))}error(e){this.finishProgressLine();let t=bs(e,this.errorDisplayContext),n=[this.colors.red(u("cli.out.human.error",t.message))];t.details&&t.details.length>0&&n.push(...t.details.map(o=>this.colors.dim(` - ${o}`))),t.hint&&n.push(this.colors.dim(u("cli.out.human.hint",t.hint))),t.internal&&this.logFile&&n.push(this.colors.dim(u("cli.out.human.seeLogs",this.logFile))),this.env.writeErr(`${n.join(`
96
105
  `)}
97
- `)}writeProgressLine(e){e!==this.lastProgressText&&(this.env.writeErr(`${JP}${this.colors.dim(e)}`),this.progressActive=!0,this.lastProgressText=e)}finishProgressLine(){this.progressActive&&(this.env.writeErr(`
98
- `),this.progressActive=!1,this.lastProgressText="")}clearProgressLine(){this.progressActive&&(this.env.writeErr(JP),this.progressActive=!1,this.lastProgressText="")}};function qA(r){return typeof r=="string"?r:ke(r)}function jl(r){return r.endsWith(`
106
+ `)}writeProgressLine(e){e!==this.lastProgressText&&(this.env.writeErr(`${tf}${this.colors.dim(e)}`),this.progressActive=!0,this.lastProgressText=e)}writeRetainedProgressLine(e){if(e){this.env.writeErr(`${tf}${as(this.colors.dim(e))}`),this.progressActive=!1,this.lastProgressText="";return}this.finishProgressLine()}finishProgressLine(){this.progressActive&&(this.env.writeErr(`
107
+ `),this.progressActive=!1,this.lastProgressText="")}clearProgressLine(){this.progressActive&&(this.env.writeErr(tf),this.progressActive=!1,this.lastProgressText="")}};function aL(r){return typeof r=="string"?r:de(r)}function as(r){return r.endsWith(`
99
108
  `)?r:`${r}
100
- `}Ce();ne();var ql=class{constructor(e){this.env=e}result(e,t){this.writeJson("result",e)}content(e,t,n){this.writeJson("result",{...e,encoding:"base64",content:t.toString("base64")})}progress(e,t){}detail(e,t){this.writeErrJson("log",A({level:"info",message:t?.(),...e}))}info(e){this.writeErrJson("log",{level:"info",message:e})}warning(e){this.writeErrJson("log",{level:"warn",message:e})}error(e){let t=Za(e);this.writeJson("error",A({code:t.code,name:t.name,message:t.message,hint:t.hint,details:Vl(t.details),errorType:t.errorType,errorDialogStyle:t.errorDialogStyle,hintMessage:t.hintMessage,locationPath:Vl(t.locationPath),internal:t.internal,category:t.category,style:t.style,properties:Vl(t.properties),stack:t.stack,cause:Vl(t.cause)}))}writeJson(e,t){YP(t),this.env.writeOut(`${JSON.stringify({kind:e,...t})}
101
- `)}writeErrJson(e,t){YP(t),this.env.writeErr(`${JSON.stringify({kind:e,...t})}
102
- `)}};function YP(r){U(!Object.hasOwn(r,"kind"),"Output data cannot contain reserved field: kind")}function Vl(r){return $l(r,new WeakSet)}function $l(r,e){if(r==null||typeof r=="string"||typeof r=="number"||typeof r=="boolean")return r;if(typeof r=="bigint")return r.toString();if(typeof r=="symbol")return String(r);if(typeof r=="function")return`[Function ${r.name||"anonymous"}]`;if(r instanceof Error)return $A(r,e);if(Array.isArray(r))return e.has(r)?"[Circular]":(e.add(r),r.map(t=>$l(t,e)));if(typeof r=="object"){if(e.has(r))return"[Circular]";e.add(r);let t={};for(let[n,o]of Object.entries(r))t[n]=$l(o,e);return t}return String(r)}function $A(r,e){if(e.has(r))return"[Circular]";e.add(r);let t={name:r.name,message:r.message};r.stack&&(t.stack=r.stack);let n="cause"in r?r.cause:void 0;return n!==void 0&&(t.cause=$l(n,e)),t}var Hl=class{constructor(e){this.delegate=e}result(e,t){this.delegate.result(e,t)}content(e,t,n){this.delegate.content(e,t,n)}progress(e,t){}detail(e,t){}info(e){}warning(e){this.delegate.warning(e)}error(e){this.delegate.error(e)}};Ce();var zl=class{constructor(e,t){this.argv=e;this.commands=[...t].sort((n,o)=>o.path.length-n.path.length),this.namespaces=[...Nl(t,Il)].sort((n,o)=>o.path.length-n.path.length);for(let n of Pr)this.globalFlagsByName.set(n.name,n),n.alias&&this.globalFlagsByAlias.set(n.alias,n)}commands;namespaces;globalFlagsByName=new Map;globalFlagsByAlias=new Map;resolve(){let e=this.locateCommandPath(this.argv);if(e.helpToken)return this.resolveHelpCommand(e.helpToken);if(e.command)return{kind:"run",command:e.command,commandArgv:en(this.argv,e.commandIndexes)};if(e.namespace&&this.shouldShowNamespaceHelp(e))return{kind:"namespace-help",namespace:e.namespace,commandArgv:en(this.argv,e.namespaceIndexes)};if(e.namespace){let t=this.createNamespaceUnknownCommand(e);return{kind:"unknown",token:t.path[0],unknownCommand:t,commandArgv:en(this.argv,e.tokens.map(n=>n.index))}}if(e.firstToken){let t=XP(e.firstToken.value);return{kind:"unknown",token:e.firstToken.value,unknownCommand:t,commandArgv:en(this.argv,[e.firstToken.index])}}return{kind:"top-help",commandArgv:this.argv}}resolveHelpCommand(e){let t=en(this.argv,[e.index]),n=this.locateCommandPath(t);if(!n.firstToken)return{kind:"top-help",commandArgv:t,fromHelpToken:!0};if(n.command)return{kind:"command-help",command:n.command,commandArgv:en(t,n.commandIndexes),fromHelpToken:!0};if(n.namespace&&this.shouldShowNamespaceHelp(n))return{kind:"namespace-help",namespace:n.namespace,commandArgv:en(t,n.namespaceIndexes),fromHelpToken:!0};if(n.namespace){let i=this.createNamespaceUnknownCommand(n);return{kind:"unknown",token:i.path[0],unknownCommand:i,commandArgv:en(t,n.tokens.map(a=>a.index))}}let o=XP(n.firstToken.value);return{kind:"unknown",token:n.firstToken.value,unknownCommand:o,commandArgv:en(t,[n.firstToken.index])}}shouldShowNamespaceHelp(e){return!e.stoppedAtDoubleDash&&e.tokens.length===e.namespaceIndexes.length}createNamespaceUnknownCommand(e){let t=HA(e),n=e.tokens.length>0?e.tokens.map(i=>i.value):t.path,o=t.path.join(" ");return{path:n,hint:`succapp ${o} --help`}}locateCommandPath(e){let t=this.collectPathTokens(e),n=t.tokens,o=n[0];if(!o)return{commandIndexes:[],namespaceIndexes:[],tokens:n,stoppedAtDoubleDash:t.stoppedAtDoubleDash};if(o.value==="help")return{firstToken:o,helpToken:o,commandIndexes:[],namespaceIndexes:[],tokens:n,stoppedAtDoubleDash:t.stoppedAtDoubleDash};let i=this.findCommandByPath(n),a=this.findNamespaceByPath(n);return{command:i,commandIndexes:i?n.slice(0,i.path.length).map(s=>s.index):[],namespace:a,namespaceIndexes:a?n.slice(0,a.path.length).map(s=>s.index):[],tokens:n,firstToken:o,stoppedAtDoubleDash:t.stoppedAtDoubleDash}}findCommandByPath(e){return this.commands.find(t=>t.path.every((n,o)=>e[o]?.value===n))}findNamespaceByPath(e){return this.namespaces.find(t=>t.path.every((n,o)=>e[o]?.value===n))}collectPathTokens(e){let t=[],n=!1;for(let o=0;o<e.length;o++){let i=e[o];if(i==="--"){n=!0;break}if(!Oo(i)){t.push({value:i,index:o});continue}let a=this.consumeKnownGlobalToken(e,o);a!==void 0&&(o=a)}return{tokens:t,stoppedAtDoubleDash:n}}consumeKnownGlobalToken(e,t){let n=e[t];return n.startsWith("--")?this.consumeKnownLongGlobalToken(e,n,t):this.consumeKnownShortGlobalToken(e,n,t)}consumeKnownLongGlobalToken(e,t,n){let o=t.indexOf("="),i=o>=0?t.slice(2,o):t.slice(2),a=this.globalFlagsByName.get(i);if(a)return a.takesValue&&o<0&&QP(e[n+1])?n+1:n}consumeKnownShortGlobalToken(e,t,n){let o=t.slice(1);for(let i=0;i<o.length;i++){let a=this.globalFlagsByAlias.get(o[i]);if(!a)return;if(a.takesValue)return i<o.length-1?n:QP(e[n+1])?n+1:n}return n}};function en(r,e){if(e.length===0)return r;let t=new Set(e);return r.filter((n,o)=>!t.has(o))}function HA(r){return U(r.namespace,"Missing namespace for located command path."),r.namespace}function XP(r){return{path:[r],hint:"succapp --help"}}function QP(r){return r!==void 0&&r!=="--"&&!Oo(r)}q();Ce();D();J();function ZP(r,e=AP){return new ah(r,e).read()}var zA={name:"succapp",flags:Pr,positionals:[],summary:"cli.cmd.root.summary"},KA={name:"succapp",flags:Pr,positionals:[{name:"arg",repeatable:!0}],summary:"cli.cmd.root.summary"},ah=class{constructor(e,t){this.argv=e;this.commands=t}commands;read(){let e=new zl(this.argv,this.commands).resolve(),t=YA(GA(e),e.commandArgv),n=jg(t.parsed),o=this.resolveDispatch(e,n);return{rawArgv:this.argv,kind:o.kind,command:e.command,namespace:e.namespace,token:e.token,unknownCommand:e.unknownCommand,commandArgv:e.commandArgv,parsed:t.parsed,globalOptions:n,issues:t.issues,helpOrVersionRequested:o.helpOrVersionRequested}}resolveDispatch(e,t){return e.fromHelpToken?{kind:e.kind,helpOrVersionRequested:!0}:e.kind==="namespace-help"?t.version&&!t.help?{kind:"version",helpOrVersionRequested:!0}:{kind:e.kind,helpOrVersionRequested:t.help}:t.help&&e.command?{kind:"command-help",helpOrVersionRequested:!0}:t.help&&!e.token?{kind:"top-help",helpOrVersionRequested:!0}:t.version&&(e.command||!e.token)?{kind:"version",helpOrVersionRequested:!0}:{kind:e.kind,helpOrVersionRequested:!1}}};function GA(r){return(r.kind==="run"||r.kind==="command-help")&&r.command?JA(r.command.spec):r.kind==="unknown"?KA:zA}function JA(r){let e=new Set(r.flags.map(t=>t.name));return{...r,flags:[...r.flags,...Pr.filter(t=>!e.has(t.name))]}}function YA(r,e){return new sh(r).parse(e)}var sh=class{constructor(e){this.spec=e;for(let t of e.flags)this.addFlag(t)}longFlags=new Map;aliasFlags=new Map;issues=[];parse(e){let t=new ch;for(let n=0;n<e.length;n++){let o=e[n];if(o==="--"){t.pushPositionals(e.slice(n+1));break}if(o.startsWith("--")&&o.length>2){n=this.parseLongFlag(o,e,n,t);continue}if(o.startsWith("-")&&o.length>1){n=this.parseShortFlags(o,e,n,t);continue}t.pushPositional(o)}return this.validatePositionals(t),{parsed:t,issues:this.issues.slice()}}addFlag(e){U(!this.longFlags.has(e.name),`duplicate flag name: ${e.name}`),this.longFlags.set(e.name,e),e.alias&&(U(e.alias.length===1,`flag alias must be a single character: ${e.name}`),U(!this.aliasFlags.has(e.alias),`duplicate flag alias: ${e.alias}`),this.aliasFlags.set(e.alias,e))}parseLongFlag(e,t,n,o){let i=e.indexOf("="),a=i>=0?e.slice(2,i):e.slice(2),s=this.longFlags.get(a);if(!s)return this.pushIssue("err.cli.unknownOption",{option:`--${a}`}),n;if(s.takesValue){if(o.markFlag(s),i>=0)return o.addFlagValue(s,e.slice(i+1)),n;let c=t[n+1];return c===void 0||c==="--"||Oo(c)?(this.pushIssue("err.cli.missingOptionValue",{option:`--${s.name}`}),n):(o.addFlagValue(s,c),n+1)}return i>=0?(this.pushIssue("err.cli.unexpectedOptionValue",{option:`--${s.name}`}),n):(o.addBooleanFlag(s),n)}parseShortFlags(e,t,n,o){let i=e.slice(1);for(let a=0;a<i.length;a++){let s=i[a],c=this.aliasFlags.get(s);if(!c){this.pushIssue("err.cli.unknownOption",{option:`-${s}`});continue}if(!c.takesValue){o.addBooleanFlag(c);continue}o.markFlag(c);let l=i.slice(a+1);if(l){let m=l.startsWith("=")?l.slice(1):l;return o.addFlagValue(c,m),n}let p=t[n+1];return p===void 0||p==="--"||Oo(p)?(this.pushIssue("err.cli.missingOptionValue",{option:`-${s}`}),n):(o.addFlagValue(c,p),n+1)}return n}validatePositionals(e){let t=e.positional.length,n=this.spec.positionals.filter(a=>a.required===!0).length,i=this.spec.positionals.some(a=>a.repeatable===!0)?void 0:this.spec.positionals.length;if(t<n){let a=this.spec.positionals.find((s,c)=>s.required===!0&&c>=t);if(a){let s=this.spec.usageArgs?` ${this.spec.usageArgs}`:"";this.issues.push(new E("err.cli.missingArgument",{argument:nn("<{name}>{repeatable}",{name:a.name,repeatable:a.repeatable===!0?"...":""}),usage:nn("succapp {name}{usageArgs}",{name:this.spec.name,usageArgs:s})}))}else this.pushIssue("err.cli.missingArgument",{command:this.spec.name,min:n})}i!==void 0&&t>i&&this.pushIssue("err.cli.tooManyArguments",{command:this.spec.name,max:i})}pushIssue(e,t){this.issues.push(new E(e,t))}},ch=class{positionalValues=[];flags=new Map;get positional(){return this.positionalValues.slice()}has(e){return this.flags.has(e)}value(e){let t=this.flags.get(e);return t&&t.length>0?t[t.length-1]:void 0}values(e){return this.flags.get(e)?.slice()??[]}pushPositional(e){this.positionalValues.push(e)}pushPositionals(e){this.positionalValues.push(...e)}addBooleanFlag(e){this.ensureFlagPresent(e)}markFlag(e){this.ensureFlagPresent(e)}ensureFlagPresent(e){this.flags.has(e.name)||this.flags.set(e.name,[])}addFlagValue(e,t){if(!e.repeatable){this.flags.set(e.name,[t]);return}let n=this.flags.get(e.name)??[];n.push(t),this.flags.set(e.name,n)}};async function rR(r,e={}){let t=e.env??process.env,n=e.cwd??process.cwd(),o=e.signal??new AbortController().signal;ZA();let i=eO(t,e.stdio),a=ZP(r),s=iP({args:a,env:t}),c,l,p;try{l=await XA(s,t,n),c=eR(s,i,l.logFile,a);let m=await QA(s.locale);return KP({args:a,localizer:m,formatter:c}),p=new gi,await new Ul().run(a,{cwd:n,config:s,output:c,task:new Qa(c,o),eventBus:p,abortSignal:o,env:t})}catch(m){return l?.error(m instanceof Error?m:String(m)),(c??eR(s,i,l?.logFile,a)).error(m),Kh(m)}finally{p?.dispose(),await l?.close()}}async function XA(r,e,t){let n=await xh({level:r.logLevel,cwd:t,env:e});return gh(n),n}async function QA(r){let e=await Ya.create({locale:r,bundleDir:rO()});return Ch(e),e}function ZA(){mh(Jl("cli"))}function eO(r,e){if(e){let o=e.isTty??!1,i=e.isErrTty??o;return{writeOut:a=>e.writeOut(a),writeErr:a=>e.writeErr(a),isTty:o,isErrTty:i,color:o&&i&&!r.NO_COLOR}}let t=!!process.stdout.isTTY,n=!!process.stderr.isTTY;return{writeOut:o=>{process.stdout.write(o)},writeErr:o=>{process.stderr.write(o)},isTty:t,isErrTty:n,color:t&&n&&!r.NO_COLOR}}function eR(r,e,t,n){let o=r.outputMode==="json"?new ql(e):new Bl(e,t,tO(n));return r.quiet?new Hl(o):o}function tO(r){if(r.command)return{commandArgv:r.commandArgv,commandSpec:r.command.spec}}function rO(){return Ql(__dirname)??tR.join(__dirname,"l10n")}async function nO(){let r=new AbortController,e=oO(r);try{process.exitCode=await rR(process.argv.slice(2),{cwd:process.cwd(),env:process.env,signal:r.signal})}finally{e()}}function oO(r){let e=()=>{r.abort()};return process.once("SIGINT",e),process.once("SIGTERM",e),()=>{process.off("SIGINT",e),process.off("SIGTERM",e)}}require.main===module&&nO();0&&(module.exports={runCli});
109
+ `}we();te();var vp=class{constructor(e){this.env=e}result(e,t){this.writeJson("result",e)}content(e,t,n){this.writeJson("result",{...e,encoding:"base64",content:t.toString("base64")})}progress(e,t){}detail(e,t){this.writeErrJson("log",O({level:"info",message:t?.(),...e}))}info(e){this.writeErrJson("log",{level:"info",message:e})}warning(e){this.writeErrJson("log",{level:"warn",message:e})}error(e){let t=bs(e);this.writeJson("error",O({code:t.code,name:t.name,message:t.message,hint:t.hint,details:Sp(t.details),errorType:t.errorType,errorDialogStyle:t.errorDialogStyle,hintMessage:t.hintMessage,locationPath:Sp(t.locationPath),internal:t.internal,category:t.category,style:t.style,properties:Sp(t.properties),stack:t.stack,cause:Sp(t.cause)}))}writeJson(e,t){wE(t),this.env.writeOut(`${JSON.stringify({kind:e,...t})}
110
+ `)}writeErrJson(e,t){wE(t),this.env.writeErr(`${JSON.stringify({kind:e,...t})}
111
+ `)}};function wE(r){$(!Object.hasOwn(r,"kind"),"Output data cannot contain reserved field: kind")}function Sp(r){return kp(r,new WeakSet)}function kp(r,e){if(r==null||typeof r=="string"||typeof r=="number"||typeof r=="boolean")return r;if(typeof r=="bigint")return r.toString();if(typeof r=="symbol")return String(r);if(typeof r=="function")return`[Function ${r.name||"anonymous"}]`;if(r instanceof Error)return sL(r,e);if(Array.isArray(r))return e.has(r)?"[Circular]":(e.add(r),r.map(t=>kp(t,e)));if(typeof r=="object"){if(e.has(r))return"[Circular]";e.add(r);let t={};for(let[n,o]of Object.entries(r))t[n]=kp(o,e);return t}return String(r)}function sL(r,e){if(e.has(r))return"[Circular]";e.add(r);let t={name:r.name,message:r.message};r.stack&&(t.stack=r.stack);let n="cause"in r?r.cause:void 0;return n!==void 0&&(t.cause=kp(n,e)),t}var wp=class{constructor(e){this.delegate=e}result(e,t){this.delegate.result(e,t)}content(e,t,n){this.delegate.content(e,t,n)}progress(e,t){}detail(e,t){}info(e){}warning(e){this.delegate.warning(e)}error(e){this.delegate.error(e)}};var PE={cat:["show"],delete:["remove"],desc:["describe"],ls:["list"],read:["show"],rm:["remove"],run:["exec"],view:["open","show"]},Pp=class{constructor(e){this.commands=e}resolve(e){let t=kL(e.argv),n=this.commands.filter(i=>!e.namespacePath||SL(i.path,e.namespacePath)).map(i=>({command:i,score:lL(i,e.inputPath,t)})).filter(i=>i.score>=18).sort(cL)[0];if(!n)return;let o=pL(n.command,e.inputPath,t);return o.length>0?o:void 0}};function cL(r,e){return r.score!==e.score?e.score-r.score:r.command.path.length-e.command.path.length}function lL(r,e,t){let n=r.path,o=gL(n,e),i=yL(n,e),a=wL(n,e),s=CL(r.spec,t),c=e.some(l=>RE(l,n[n.length-1]));return 10+o*8+i*3+s*4+(c?8:0)-a*3}function pL(r,e,t){let n=uL(r,e),o=hL(r.spec,t),a=[fL(r.path,n,o),...r.spec.examples??[]];return bE(a).slice(0,2)}function uL(r,e){let t=r.path[r.path.length-1],n=e.findIndex(c=>Hn(c,t));if(r.spec.positionals.length===0)return[];let o=mL(r.spec),i=n>=0?n+1:dL(r.path,e),s=e.slice(i).filter(c=>!r.path.some(l=>Hn(l,c)));return o===void 0?s:s.slice(0,o)}function dL(r,e){let t=0;for(;t<r.length&&t<e.length&&Hn(r[t],e[t]);)t++;return t<e.length?t+1:e.length}function mL(r){if(!r.positionals.some(t=>t.repeatable))return r.positionals.length}function hL(r,e){let t=new Set(r.flags.map(i=>i.name)),n=new Set(r.flags.flatMap(i=>i.alias?[i.alias]:[])),o=e.filter(i=>i.name==="help"||i.name&&t.has(i.name)?!0:!!i.alias&&n.has(i.alias));return bE(o.map(i=>i.display))}function fL(r,e,t){return["succapp",...r,...e,...t].join(" ")}function gL(r,e){return r.filter(t=>e.some(n=>Hn(t,n))).length}function yL(r,e){let t=0;for(let n of r)e.some(o=>!Hn(n,o)&&RE(n,o))&&t++;return t}function CL(r,e){let t=new Set(r.flags.map(o=>o.name)),n=new Set(r.flags.flatMap(o=>o.alias?[o.alias]:[]));return e.filter(o=>o.name&&t.has(o.name)?!0:!!o.alias&&n.has(o.alias)).length}function SL(r,e){return e.every((t,n)=>Hn(r[n],t))}function Hn(r,e){return r!==void 0&&e!==void 0&&r.toLowerCase()===e.toLowerCase()}function RE(r,e){if(Hn(r,e))return!0;if(r===void 0||e===void 0)return!1;let t=r.toLowerCase(),n=e.toLowerCase();return vL(t,n)||t.length>=2&&n.length>=2&&(t.startsWith(n)||n.startsWith(t))?!0:PL(t,n)<=2}function vL(r,e){return(PE[r]??[]).includes(e)?!0:(PE[e]??[]).includes(r)}function kL(r){let e=[];for(let t of r){if(t==="--")break;if(t.startsWith("--")&&t.length>2){let n=t.indexOf("="),o=n>=0?t.slice(2,n):t.slice(2);e.push({name:o,display:n>=0?t.slice(0,n):t});continue}if(t.startsWith("-")&&t.length>1)for(let n of t.slice(1))e.push({alias:n,display:`-${n}`})}return e}function wL(r,e){return EE(r,e,(t,n)=>Hn(t,n)?0:1)}function PL(r,e){return EE([...r.toLowerCase()],[...e.toLowerCase()],(t,n)=>t===n?0:1)}function EE(r,e,t){let n=Array.from({length:e.length+1},(i,a)=>a),o=Array.from({length:e.length+1},()=>0);for(let i=1;i<=r.length;i++){o[0]=i;for(let a=1;a<=e.length;a++)o[a]=Math.min(n[a]+1,o[a-1]+1,n[a-1]+t(r[i-1],e[a-1]));for(let a=0;a<o.length;a++)n[a]=o[a]}return n[e.length]}function bE(r){let e=[],t=new Set;for(let n of r)t.has(n)||(t.add(n),e.push(n));return e}we();var Rp=class{constructor(e,t){this.argv=e;this.commands=[...t].sort((n,o)=>o.path.length-n.path.length),this.namespaces=[...fp(t,pp)].sort((n,o)=>o.path.length-n.path.length);for(let n of xr)this.globalFlagsByName.set(n.name,n),n.alias&&this.globalFlagsByAlias.set(n.alias,n)}commands;namespaces;globalFlagsByName=new Map;globalFlagsByAlias=new Map;resolve(){let e=this.locateCommandPath(this.argv);if(e.helpToken)return this.resolveHelpCommand(e.helpToken);if(e.command)return{kind:"run",command:e.command,commandArgv:an(this.argv,e.commandIndexes)};if(e.namespace&&this.shouldShowNamespaceHelp(e))return{kind:"namespace-help",namespace:e.namespace,commandArgv:an(this.argv,e.namespaceIndexes)};if(e.namespace){let t=this.createNamespaceUnknownCommand(e);return{kind:"unknown",token:t.path[0],unknownCommand:t,commandArgv:an(this.argv,e.tokens.map(n=>n.index))}}if(e.firstToken){let t=this.createTopLevelUnknownCommand(e);return{kind:"unknown",token:e.firstToken.value,unknownCommand:t,commandArgv:an(this.argv,[e.firstToken.index])}}return{kind:"top-help",commandArgv:this.argv}}resolveHelpCommand(e){let t=an(this.argv,[e.index]),n=this.locateCommandPath(t);if(!n.firstToken)return{kind:"top-help",commandArgv:t,fromHelpToken:!0};if(n.command)return{kind:"command-help",command:n.command,commandArgv:an(t,n.commandIndexes),fromHelpToken:!0};if(n.namespace&&this.shouldShowNamespaceHelp(n))return{kind:"namespace-help",namespace:n.namespace,commandArgv:an(t,n.namespaceIndexes),fromHelpToken:!0};if(n.namespace){let i=this.createNamespaceUnknownCommand(n);return{kind:"unknown",token:i.path[0],unknownCommand:i,commandArgv:an(t,n.tokens.map(a=>a.index))}}let o=this.createTopLevelUnknownCommand(n);return{kind:"unknown",token:n.firstToken.value,unknownCommand:o,commandArgv:an(t,[n.firstToken.index])}}shouldShowNamespaceHelp(e){return!e.stoppedAtDoubleDash&&e.tokens.length===e.namespaceIndexes.length}createNamespaceUnknownCommand(e){let t=RL(e),n=e.tokens.length>0?e.tokens.map(a=>a.value):t.path,o=t.path.join(" "),i=this.createUnknownCommandSuggestions(e,t);return{path:n,hint:`succapp ${o} --help`,...i?{suggestedCommands:i}:{}}}createTopLevelUnknownCommand(e){let t=e.firstToken?.value??"",n=this.createUnknownCommandSuggestions(e);return{path:[t],hint:"succapp --help",...n?{suggestedCommands:n}:{}}}createUnknownCommandSuggestions(e,t){return new Pp(this.commands).resolve({argv:this.argv,inputPath:e.tokens.map(n=>n.value),namespacePath:t?.path})}locateCommandPath(e){let t=this.collectPathTokens(e),n=t.tokens,o=n[0];if(!o)return{commandIndexes:[],namespaceIndexes:[],tokens:n,stoppedAtDoubleDash:t.stoppedAtDoubleDash};if(o.value==="help")return{firstToken:o,helpToken:o,commandIndexes:[],namespaceIndexes:[],tokens:n,stoppedAtDoubleDash:t.stoppedAtDoubleDash};let i=this.findCommandByPath(n),a=this.findNamespaceByPath(n);return{command:i,commandIndexes:i?n.slice(0,i.path.length).map(s=>s.index):[],namespace:a,namespaceIndexes:a?n.slice(0,a.path.length).map(s=>s.index):[],tokens:n,firstToken:o,stoppedAtDoubleDash:t.stoppedAtDoubleDash}}findCommandByPath(e){return this.commands.find(t=>t.path.every((n,o)=>e[o]?.value===n))}findNamespaceByPath(e){return this.namespaces.find(t=>t.path.every((n,o)=>e[o]?.value===n))}collectPathTokens(e){let t=[],n=!1;for(let o=0;o<e.length;o++){let i=e[o];if(i==="--"){n=!0;break}if(!Xo(i)){t.push({value:i,index:o});continue}let a=this.consumeKnownGlobalToken(e,o);a!==void 0&&(o=a)}return{tokens:t,stoppedAtDoubleDash:n}}consumeKnownGlobalToken(e,t){let n=e[t];return n.startsWith("--")?this.consumeKnownLongGlobalToken(e,n,t):this.consumeKnownShortGlobalToken(e,n,t)}consumeKnownLongGlobalToken(e,t,n){let o=t.indexOf("="),i=o>=0?t.slice(2,o):t.slice(2),a=this.globalFlagsByName.get(i);if(a)return a.takesValue&&o<0&&TE(e[n+1])?n+1:n}consumeKnownShortGlobalToken(e,t,n){let o=t.slice(1);for(let i=0;i<o.length;i++){let a=this.globalFlagsByAlias.get(o[i]);if(!a)return;if(a.takesValue)return i<o.length-1?n:TE(e[n+1])?n+1:n}return n}};function an(r,e){if(e.length===0)return r;let t=new Set(e);return r.filter((n,o)=>!t.has(o))}function RL(r){return $(r.namespace,"Missing namespace for located command path."),r.namespace}function TE(r){return r!==void 0&&r!=="--"&&!Xo(r)}D();we();F();U();function ME(r,e=aE){return new rf(r,e).read()}var EL={name:"succapp",flags:xr,positionals:[],summary:"cli.cmd.root.summary"},bL={name:"succapp",flags:xr,positionals:[{name:"arg",repeatable:!0}],summary:"cli.cmd.root.summary"},rf=class{constructor(e,t){this.argv=e;this.commands=t}commands;read(){let e=new Rp(this.argv,this.commands).resolve(),t=xL(TL(e),e.commandArgv),n=Yy(t.parsed),o=this.resolveDispatch(e,n);return{rawArgv:this.argv,kind:o.kind,command:e.command,namespace:e.namespace,token:e.token,unknownCommand:e.unknownCommand,commandArgv:e.commandArgv,parsed:t.parsed,globalOptions:n,issues:t.issues,helpOrVersionRequested:o.helpOrVersionRequested}}resolveDispatch(e,t){return e.fromHelpToken?{kind:e.kind,helpOrVersionRequested:!0}:e.kind==="namespace-help"?t.version&&!t.help?{kind:"version",helpOrVersionRequested:!0}:{kind:e.kind,helpOrVersionRequested:t.help}:t.help&&e.command?{kind:"command-help",helpOrVersionRequested:!0}:t.help&&!e.token?{kind:"top-help",helpOrVersionRequested:!0}:t.version&&(e.command||!e.token)?{kind:"version",helpOrVersionRequested:!0}:{kind:e.kind,helpOrVersionRequested:!1}}};function TL(r){return(r.kind==="run"||r.kind==="command-help")&&r.command?ML(r.command.spec):r.kind==="unknown"?bL:EL}function ML(r){let e=new Set(r.flags.map(t=>t.name));return{...r,flags:[...r.flags,...xr.filter(t=>!e.has(t.name))]}}function xL(r,e){return new nf(r).parse(e)}var nf=class{constructor(e){this.spec=e;for(let t of e.flags)this.addFlag(t)}longFlags=new Map;aliasFlags=new Map;issues=[];parse(e){let t=new of;for(let n=0;n<e.length;n++){let o=e[n];if(o==="--"){t.pushPositionals(e.slice(n+1));break}if(o.startsWith("--")&&o.length>2){n=this.parseLongFlag(o,e,n,t);continue}if(o.startsWith("-")&&o.length>1){n=this.parseShortFlags(o,e,n,t);continue}t.pushPositional(o)}return this.validatePositionals(t),{parsed:t,issues:this.issues.slice()}}addFlag(e){$(!this.longFlags.has(e.name),`duplicate flag name: ${e.name}`),this.longFlags.set(e.name,e),e.alias&&($(e.alias.length===1,`flag alias must be a single character: ${e.name}`),$(!this.aliasFlags.has(e.alias),`duplicate flag alias: ${e.alias}`),this.aliasFlags.set(e.alias,e))}parseLongFlag(e,t,n,o){let i=e.indexOf("="),a=i>=0?e.slice(2,i):e.slice(2),s=this.longFlags.get(a);if(!s)return this.pushIssue("err.cli.unknownOption",{option:`--${a}`}),n;if(s.takesValue){if(o.markFlag(s),i>=0)return o.addFlagValue(s,e.slice(i+1)),n;let c=t[n+1];return c===void 0||c==="--"||Xo(c)?(this.pushIssue("err.cli.missingOptionValue",{option:`--${s.name}`}),n):(o.addFlagValue(s,c),n+1)}return i>=0?(this.pushIssue("err.cli.unexpectedOptionValue",{option:`--${s.name}`}),n):(o.addBooleanFlag(s),n)}parseShortFlags(e,t,n,o){let i=e.slice(1);for(let a=0;a<i.length;a++){let s=i[a],c=this.aliasFlags.get(s);if(!c){this.pushIssue("err.cli.unknownOption",{option:`-${s}`});continue}if(!c.takesValue){o.addBooleanFlag(c);continue}o.markFlag(c);let l=i.slice(a+1);if(l){let d=l.startsWith("=")?l.slice(1):l;return o.addFlagValue(c,d),n}let p=t[n+1];return p===void 0||p==="--"||Xo(p)?(this.pushIssue("err.cli.missingOptionValue",{option:`-${s}`}),n):(o.addFlagValue(c,p),n+1)}return n}validatePositionals(e){let t=e.positional.length,n=this.spec.positionals.filter(a=>a.required===!0).length,i=this.spec.positionals.some(a=>a.repeatable===!0)?void 0:this.spec.positionals.length;if(t<n){let a=this.spec.positionals.find((s,c)=>s.required===!0&&c>=t);if(a){let s=this.spec.usageArgs?` ${this.spec.usageArgs}`:"";this.issues.push(new R("err.cli.missingArgument",{argument:ln("<{name}>{repeatable}",{name:a.name,repeatable:a.repeatable===!0?"...":""}),usage:ln("succapp {name}{usageArgs}",{name:this.spec.name,usageArgs:s})}))}else this.pushIssue("err.cli.missingArgument",{command:this.spec.name,min:n})}i!==void 0&&t>i&&this.pushIssue("err.cli.tooManyArguments",{command:this.spec.name,max:i})}pushIssue(e,t){this.issues.push(new R(e,t))}},of=class{positionalValues=[];flags=new Map;get positional(){return this.positionalValues.slice()}has(e){return this.flags.has(e)}value(e){let t=this.flags.get(e);return t&&t.length>0?t[t.length-1]:void 0}values(e){return this.flags.get(e)?.slice()??[]}pushPositional(e){this.positionalValues.push(e)}pushPositionals(e){this.positionalValues.push(...e)}addBooleanFlag(e){this.ensureFlagPresent(e)}markFlag(e){this.ensureFlagPresent(e)}ensureFlagPresent(e){this.flags.has(e.name)||this.flags.set(e.name,[])}addFlagValue(e,t){if(!e.repeatable){this.flags.set(e.name,[t]);return}let n=this.flags.get(e.name)??[];n.push(t),this.flags.set(e.name,n)}};async function IE(r,e={}){let t=e.env??process.env,n=e.cwd??process.cwd(),o=e.signal??new AbortController().signal;DL();let i=AL(t,e.stdio),a=ME(r),s=DR({args:a,env:t}),c,l,p;try{l=await FL(s,t,n),c=xE(s,i,l.logFile,a);let d=await IL(s.locale);return vE({args:a,localizer:d,formatter:c}),p=new Vi,await new yp().run(a,{cwd:n,config:s,output:c,task:new Rs(c,o),eventBus:p,abortSignal:o,env:t})}catch(d){return l?.error(d instanceof Error?d:String(d)),(c??xE(s,i,l?.logFile,a)).error(d),$f(d)}finally{p?.dispose(),await l?.close()}}async function FL(r,e,t){let n=await Ef({level:r.logLevel,cwd:t,env:e});return mf(n),n}async function IL(r){let e=await ks.create({locale:r,bundleDir:_L()});return ff(e),e}function DL(){pf(Tp("cli"))}function AL(r,e){if(e){let o=e.isTty??!1,i=e.isErrTty??o;return{writeOut:a=>e.writeOut(a),writeErr:a=>e.writeErr(a),isTty:o,isErrTty:i,color:o&&i&&!r.NO_COLOR}}let t=!!process.stdout.isTTY,n=!!process.stderr.isTTY;return{writeOut:o=>{process.stdout.write(o)},writeErr:o=>{process.stderr.write(o)},isTty:t,isErrTty:n,color:t&&n&&!r.NO_COLOR}}function xE(r,e,t,n){let o=r.outputMode==="json"?new vp(e):new Cp(e,t,OL(n));return r.quiet?new wp(o):o}function OL(r){if(r.command)return{commandArgv:r.commandArgv,commandSpec:r.command.spec}}function _L(){return Fp(__dirname)??FE.join(__dirname,"l10n")}async function LL(){let r=new AbortController,e=NL(r);try{process.exitCode=await IE(process.argv.slice(2),{cwd:process.cwd(),env:process.env,signal:r.signal})}finally{e()}}function NL(r){let e=()=>{r.abort()};return process.once("SIGINT",e),process.once("SIGTERM",e),()=>{process.off("SIGINT",e),process.off("SIGTERM",e)}}require.main===module&&LL();0&&(module.exports={runCli});