@succsoft/succapp 5.0.2 → 5.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +51 -193
- package/README.md +11 -0
- package/dist/cli/l10n/bundle.l10n.json +148 -22
- package/dist/cli/l10n/bundle.l10n.zh-cn.json +148 -22
- package/dist/cli/succapp.js +90 -83
- package/package.json +1 -1
- package/resources/contents.properties +8 -1
- package/resources/workspace-templates/succapp-workspace/.agents/README.md +3 -3
- package/resources/workspace-templates/succapp-workspace/.agents/gitignore.template +2 -0
- package/resources/workspace-templates/succapp-workspace/.agents/rules/workspace-rules.md +33 -92
- package/resources/workspace-templates/succapp-workspace/.succapp/gitignore.template +9 -0
- package/resources/workspace-templates/succapp-workspace/.succapp/tsconfig.action.json +12 -12
- package/resources/workspace-templates/succapp-workspace/.succapp/tsconfig.browser.json +13 -13
- package/resources/workspace-templates/succapp-workspace/.vscode/settings.typescript-support.jsonc +4 -1
- package/resources/workspace-templates/succapp-workspace/AGENTS.md +19 -35
- package/resources/workspace-templates/succapp-workspace/agent-workspace-template.jsonc +1 -3
- package/resources/workspace-templates/succapp-workspace/gitignore.template +7 -0
- package/resources/workspace-templates/succapp-workspace/.agents/skills/succbi-frontend-development/SKILL.md +0 -76
- /package/resources/workspace-templates/succapp-workspace/.agents/plans/{.gitignore → gitignore.template} +0 -0
- /package/resources/workspace-templates/succapp-workspace/.agents/reports/{.gitignore → gitignore.template} +0 -0
- /package/resources/workspace-templates/succapp-workspace/.agents/reviews/{.gitignore → gitignore.template} +0 -0
package/dist/cli/succapp.js
CHANGED
|
@@ -1,48 +1,51 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var
|
|
3
|
-
`)}function
|
|
4
|
-
`)}function
|
|
5
|
-
`):t.stack??"",this.cause=t.cause,t.properties&&(this.properties={...t.properties})}}});function x(r){return
|
|
6
|
-
${n}`:t}function
|
|
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
|
|
10
|
-
+`.includes(r)}function
|
|
11
|
-
`||r==="\r"||r===" "||r==="\b"||r==="\f"}function
|
|
12
|
-
`;)e++;return!0}return!1}function l(
|
|
2
|
+
"use strict";var yM=Object.create;var $s=Object.defineProperty;var CM=Object.getOwnPropertyDescriptor;var SM=Object.getOwnPropertyNames;var vM=Object.getPrototypeOf,kM=Object.prototype.hasOwnProperty;var ge=(r,e)=>()=>(r&&(e=r(r=0)),e);var Y=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Ed=(r,e)=>{for(var t in e)$s(r,t,{get:e[t],enumerable:!0})},Qg=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of SM(e))!kM.call(r,o)&&o!==t&&$s(r,o,{get:()=>e[o],enumerable:!(n=CM(e,o))||n.enumerable});return r};var E=(r,e,t)=>(t=r!=null?yM(vM(r)):{},Qg(e||!r||!r.__esModule?$s(t,"default",{value:r,enumerable:!0}):t,r)),Yg=r=>Qg($s({},"__esModule",{value:!0}),r);var tr=ge(()=>{});function H(r,e,t){if(!r)throw new Hs(e,t)}function ii(r,e){throw new Hs(r,e)}var Hs,Ie=ge(()=>{Hs=class extends Error{cause;constructor(e,t={}){super(e),this.name="AssertError",this.cause=t.cause}}});function ey(r){let e=r.trim();return H(e,"logger module name cannot be empty"),e}function RM(r,e){let t=ey(e);return r?`${r}.${t}`:t}function va(r,e){return r?`[${r}] ${e}`:e}function bM(r,e){let t=ai(e);if(!r)return t;let n=`[${r}]`;return typeof t[0]=="string"?[`${n} ${t[0]}`,...t.slice(1)]:[n,...t]}function ka(r,e){if(e.length===0||!zs.test(r))return zs.lastIndex=0,{message:r,args:e};zs.lastIndex=0;let t=new Set;return{message:r.replace(zs,(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 ai(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(EM(n))):e?.push(n)}return e??r}function EM(r){return r.stack?r.stack:r.name&&r.message?`${r.name}: ${r.message}`:r.message||String(r)}function ty(r){return new Gs(r===void 0?void 0:ey(r))}function T(r){return ty(r)}function ry(r){Gs.setAppender(r)}var Md,Gs,zs,Wj,J=ge(()=>{Ie();Md=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){}},Gs=class r{constructor(e){this.moduleName=e}static appender=new Md;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(RM(this.moduleName,e))}trace(e,...t){let n=r.appender;if(!n.isTraceEnabled())return;let o=ka(e,t);n.trace(va(this.moduleName,o.message),...ai(o.args))}debug(e,...t){let n=r.appender;if(!n.isDebugEnabled())return;let o=ka(e,t);n.debug(va(this.moduleName,o.message),...ai(o.args))}info(e,...t){let n=r.appender;if(!n.isInfoEnabled())return;let o=ka(e,t);n.info(va(this.moduleName,o.message),...ai(o.args))}warn(e,...t){let n=r.appender;if(!n.isWarnEnabled())return;let o=ka(e,t);n.warn(va(this.moduleName,o.message),...ai(o.args))}error(e,...t){let n=r.appender;if(!n.isErrorEnabled())return;if(e instanceof Error){n.error(e,...bM(this.moduleName,t));return}let o=ka(e,t);n.error(va(this.moduleName,o.message),...ai(o.args))}};zs=/\{(\d+)\}/g;Wj=ty()});function d(r,...e){return xd.t(r,...e)}function Mt(r,...e){let t=xd.t(r,...e);return t===r?void 0:t}function oy(r){xd=r}function _r(r,...e){return Js(e)?FM(r,e[0]):e.reduce((t,n,o)=>t.split(`{${o}}`).join(String(n)),r)}function Js(r){return r.length===1&&typeof r[0]=="object"&&r[0]!==null&&!Array.isArray(r[0])}function FM(r,e){return r.replace(IM,(t,n)=>Object.hasOwn(e,n)?String(e[n]):t)}function DM(){let r=Id(__dirname);if(!r)return{};let e=Dn.join(r,ny);try{let t=JSON.parse(Ks.readFileSync(e,"utf8"));return AM(t)?t:{}}catch(t){return OM(t)?{}:(TM.warn("failed to load default l10n bundle: {0}",e,t),{})}}function Id(r){let e=Dn.resolve(r),t=[Dn.join(e,"l10n"),Dn.resolve(e,"..","..","l10n"),Dn.resolve(e,"..","..","..","l10n")];for(let n of t)if(Ks.existsSync(Dn.join(n,ny)))return n}function AM(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)&&Object.values(r).every(e=>typeof e=="string")}function OM(r){return typeof r=="object"&&r!==null&&"code"in r&&r.code==="ENOENT"}var Ks,Dn,ny,TM,MM,xM,xd,IM,D=ge(()=>{Ks=E(require("fs")),Dn=E(require("path"));J();ny="bundle.l10n.json",TM=T("i18n"),MM=DM(),xM={t(r,...e){let t=MM[r]??r;return Js(e)?_r(t,e[0]):_r(t,...e)}},xd=xM;IM=/\{([A-Za-z_][A-Za-z0-9_]*)\}/g});var _=ge(()=>{});function W(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function Ae(r){return typeof r=="string"&&r.length>0?r:void 0}function an(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 I(r){let e={};for(let[t,n]of Object.entries(r))n!==void 0&&(e[t]=n);return e}function Xs(r){return r.startsWith("{")||r.startsWith("[")}function pi(r){if(Array.isArray(r))return r.map(e=>pi(e));if(W(r)){let e={};return Object.keys(r).forEach(t=>{e[t]=pi(r[t])}),e}return r}function on(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)=>on(o,e[i]));if(!W(r)||!W(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)&&on(r[o],e[o]))}var Z=ge(()=>{});function UM(r){let e=jM(r);if(Xs(e))try{let t=JSON.parse(e);return!W(t)||W(t.errorInfo)?void 0:Od(t)}catch{return}}function uy(r){let e=UM(r);return e?Ra(e):void 0}function Ra(r){let e=new Ad(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=Ra(r.cause)),Array.isArray(r.suppressed)&&(e.suppressed=r.suppressed.map(t=>Ra(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=hy(e);if(!o)break;e=o}return e}function my(r){let e=[],t=r,n=new Set;for(;t&&!n.has(t)&&e.length<100;)e.push(t),n.add(t),t=hy(t);return e.reverse().map((o,i)=>HM(o,i===0?"":"Wrapped by: ")).join(`
|
|
3
|
+
`)}function lt(r){return ba(r)||W(r)?rr(r.errorCode):void 0}function gr(r){return ba(r)?r.errorType:W(r)?fy(r.errorType):void 0}function Lt(r){return ba(r)||W(r)&&W(r.properties)?r.properties:void 0}function jM(r){let e=r.indexOf(dy);return(e>=0?r.slice(e+dy.length):r).trim()}function Od(r){if(!VM(r))return;let e={};e.message=rr(r.message),e.name=rr(r.name),e.errorCode=rr(r.errorCode),e.errorType=fy(r.errorType),e.className=rr(r.className),e.platform=rr(r.platform),e.hintMessage=rr(r.hintMessage),e.errorDialogStyle=rr(r.errorDialogStyle),e.__httpStatusErrorCode__=BM(r.__httpStatusErrorCode__),W(r.properties)&&(e.properties=r.properties);let t=qM(r.locationPath);t&&(e.locationPath=t);let n=$M(r.stack);if(n&&(e.stack=n),W(r.cause)&&(e.cause=Od(r.cause)),Array.isArray(r.suppressed)){let o=r.suppressed.filter(W).map(i=>Od(i)).filter(i=>i!==void 0);o.length>0&&(e.suppressed=o)}return e}function VM(r){return["message","name","errorCode","errorType","className","platform","hintMessage","locationPath","errorDialogStyle","__httpStatusErrorCode__","properties","cause","suppressed","stack"].some(e=>e in r)}function rr(r){return typeof r=="string"&&r.length>0?r:void 0}function fy(r){return r===null?null:rr(r)}function BM(r){return typeof r=="number"?r:void 0}function qM(r){if(!Array.isArray(r))return;let e=r.filter(W).map(t=>({type:rr(t.type),value:rr(t.value)})).filter(t=>t.type!==void 0&&t.value!==void 0);return e.length>0?e:void 0}function $M(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 hy(r){let e=r.cause;return e instanceof Error?e:void 0}function ba(r){return r instanceof Error}function HM(r,e){let t=[],n=zM(r);t.push(e?`${e}${n}`:n),Pa(t,"errorCode",lt(r));let o=gr(r);if(Pa(t,"errorType",o==null?void 0:String(o)),ba(r)&&(Pa(t,"errorDialogStyle",r.errorDialogStyle),Pa(t,"hintMessage",r.hintMessage),GM(t,r.locationPath),r.properties))for(let[a,s]of Object.entries(r.properties))Pa(t,a,KM(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 zM(r){let e=r.name||ba(r)&&r.platform||"Error";return r.message?`${e}: ${r.message}`:e}function Pa(r,e,t){t&&r.push(`${e}: ${t}`)}function GM(r,e){if(!(!e||e.length===0))for(let t of e)r.push(`location: ${t.type} ${t.value}`)}function KM(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 dy,Ad,_n=ge(()=>{Z();dy="===SUCC=ERROR=INFO=START===",Ad=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 Ln(r)==="ENOENT"}function ec(r){return Ln(r)==="EEXIST"}function Ta(r){let e=Ln(r);return e!==void 0&&JM.has(e)}function gy(r){return nc(r)&&r.status===404}function tc(r){return Ln(r)==="ENOTDIR"}function rc(r){return Ln(r)==="ELOCKED"}function nc(r){return r instanceof nr}function Ln(r){if(!r||typeof r!="object"||!("code"in r))return;let e=r.code;return typeof e=="string"?e:void 0}function _d(r){if(!(!r||typeof r!="object"||!("cause"in r)))return r.cause}function yy(r){return Cy(r,0)}function Cy(r,e){if(e>YM||!r||typeof r!="object"||Ma(r)||nc(r))return!1;let t=Ln(r);return t!==void 0&&QM.has(t)?!0:Cy(_d(r),e+1)}function Ma(r){return r instanceof me}function So(r,e){return Ma(r)&&r.errorCode===e}function Sy(r){let e=Ld(r.properties),t=Mt(r.errorCode,e);if(!t)return r.message||r.errorCode;let n=Mt(`${r.errorCode}.desc`,e);return n?`${t}
|
|
6
|
+
${n}`:t}function vy(r){if(r.hintMessage)return r.hintMessage;if(r.hint)return d(r.hint,Ld(r.properties))}function vo(r){if(r==null)return"";if(r instanceof Error)return r.message;if(typeof r=="string")return r;let e=XM(r);if(e)return e;try{return JSON.stringify(r)}catch{return String(r)}}function XM(r){if(typeof r!="object"||r===null||Array.isArray(r))return"";let e=r.message;return typeof e=="string"?e:""}function ZM(r,e){let t=Ld(e);return Mt(r,t)??r}function Ld(r){let e={};for(let[t,n]of Object.entries(r))ex(n)&&(e[t]=n);return e}function ex(r){return typeof r=="string"||typeof r=="number"||typeof r=="boolean"}function ky(r){return r instanceof Ue||So(r,"err.login.notlogin")}var JM,QM,YM,me,nr,R,ut,Kt,St,Ue,Ea,Zs,Co,sn,or,F=ge(()=>{D();_();_n();JM=new Set(["ENOENT","EACCES","EPERM","EISDIR","ENOTDIR","ELOOP","ENAMETOOLONG"]);QM=new Set(["ECONNRESET","EPIPE","ETIMEDOUT","ECONNABORTED","UND_ERR_SOCKET","UND_ERR_BODY_TIMEOUT","UND_ERR_HEADERS_TIMEOUT"]),YM=4;me=class extends Error{errorCode;style;category;properties;errorType;errorDialogStyle;hintMessage;locationPath;hint;cause;constructor(e,t={}){let n=t.properties??{};super(t.message??ZM(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}},nr=class r extends me{constructor(t,n,o,i,a){let s=uy(n),c=s?On(s):void 0,l=Lt(c)??Lt(s)??{},p=r.formatSummary(n,o,a,c,s),u=gr(c)??gr(s),g=c?.errorDialogStyle??s?.errorDialogStyle;super(lt(c)??lt(s)??"err.net.httpStatusUnexpected",{message:`HTTP ${t}: ${p}`,properties:r.createProperties(l,t,o,a,n,s),style:r.getDisplayStyle(u,g),errorType:u,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,h=s?my(s):r.isServerStack(n)?n.trim():"";h&&(this.stack=m?`${h}
|
|
7
|
+
Wrapped by: ${m}`:h)}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||lt(i)||a?.message||lt(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 me{constructor(e,t={},n={}){super(e,{...n,category:n.category??"usage",style:n.style??"warn",properties:t}),this.name="UsageError"}},ut=class extends me{constructor(e,t={},n={}){super(e,{...n,style:n.style??"warn",properties:t}),this.name="OperationBlockedError"}},Kt=class extends me{constructor(e,t={},n={}){super(e,{...n,category:n.category??"conflict",style:n.style??"error",properties:t}),this.name="ConflictError"}},St=class extends me{constructor(e,t){super("err.net.connectionFailed",{category:"networkAuth",properties:{url:e,causeMessage:t?` - ${t.message}`:""},cause:t}),this.name="ConnectionError"}},Ue=class extends me{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}};Ea=class extends me{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}},Zs=class extends R{constructor(t,n){super("err.net.invalidUrl",{url:t},{cause:n});this.url=t;this.name="InvalidUrlError"}},Co=class extends me{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"}},sn=class extends me{constructor(t,n={}){super("err.lock.compromised",{category:"lockCompromised",style:"warn",properties:{attemptedCommand:t},cause:n.cause});this.attemptedCommand=t;this.name="LockCompromisedError"}},or=class extends me{constructor(){super("err.base.cancel",{category:"cancel",style:"silent"}),this.name="CancelledError"}}});var Py=Y((sV,wy)=>{var Nn=require("constants"),tx=process.cwd,oc=null,rx=process.env.GRACEFUL_FS_PLATFORM||process.platform;process.cwd=function(){return oc||(oc=tx.call(process)),oc};try{process.cwd()}catch{}typeof process.chdir=="function"&&(Nd=process.chdir,process.chdir=function(r){oc=null,Nd.call(process,r)},Object.setPrototypeOf&&Object.setPrototypeOf(process.chdir,Nd));var Nd;wy.exports=nx;function nx(r){Nn.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,u,g){g&&process.nextTick(g)},r.lchmodSync=function(){}),r.chown&&!r.lchown&&(r.lchown=function(p,u,g,m){m&&process.nextTick(m)},r.lchownSync=function(){}),rx==="win32"&&(r.rename=typeof r.rename!="function"?r.rename:function(p){function u(g,m,h){var y=Date.now(),C=0;p(g,m,function v(w){if(w&&(w.code==="EACCES"||w.code==="EPERM"||w.code==="EBUSY")&&Date.now()-y<6e4){setTimeout(function(){r.stat(m,function(f,S){f&&f.code==="ENOENT"?p(g,m,v):h(w)})},C),C<100&&(C+=10);return}h&&h(w)})}return Object.setPrototypeOf&&Object.setPrototypeOf(u,p),u}(r.rename)),r.read=typeof r.read!="function"?r.read:function(p){function u(g,m,h,y,C,v){var w;if(v&&typeof v=="function"){var f=0;w=function(S,k,b){if(S&&S.code==="EAGAIN"&&f<10)return f++,p.call(r,g,m,h,y,C,w);v.apply(this,arguments)}}return p.call(r,g,m,h,y,C,w)}return Object.setPrototypeOf&&Object.setPrototypeOf(u,p),u}(r.read),r.readSync=typeof r.readSync!="function"?r.readSync:function(p){return function(u,g,m,h,y){for(var C=0;;)try{return p.call(r,u,g,m,h,y)}catch(v){if(v.code==="EAGAIN"&&C<10){C++;continue}throw v}}}(r.readSync);function e(p){p.lchmod=function(u,g,m){p.open(u,Nn.O_WRONLY|Nn.O_SYMLINK,g,function(h,y){if(h){m&&m(h);return}p.fchmod(y,g,function(C){p.close(y,function(v){m&&m(C||v)})})})},p.lchmodSync=function(u,g){var m=p.openSync(u,Nn.O_WRONLY|Nn.O_SYMLINK,g),h=!0,y;try{y=p.fchmodSync(m,g),h=!1}finally{if(h)try{p.closeSync(m)}catch{}else p.closeSync(m)}return y}}function t(p){Nn.hasOwnProperty("O_SYMLINK")&&p.futimes?(p.lutimes=function(u,g,m,h){p.open(u,Nn.O_SYMLINK,function(y,C){if(y){h&&h(y);return}p.futimes(C,g,m,function(v){p.close(C,function(w){h&&h(v||w)})})})},p.lutimesSync=function(u,g,m){var h=p.openSync(u,Nn.O_SYMLINK),y,C=!0;try{y=p.futimesSync(h,g,m),C=!1}finally{if(C)try{p.closeSync(h)}catch{}else p.closeSync(h)}return y}):p.futimes&&(p.lutimes=function(u,g,m,h){h&&process.nextTick(h)},p.lutimesSync=function(){})}function n(p){return p&&function(u,g,m){return p.call(r,u,g,function(h){l(h)&&(h=null),m&&m.apply(this,arguments)})}}function o(p){return p&&function(u,g){try{return p.call(r,u,g)}catch(m){if(!l(m))throw m}}}function i(p){return p&&function(u,g,m,h){return p.call(r,u,g,m,function(y){l(y)&&(y=null),h&&h.apply(this,arguments)})}}function a(p){return p&&function(u,g,m){try{return p.call(r,u,g,m)}catch(h){if(!l(h))throw h}}}function s(p){return p&&function(u,g,m){typeof g=="function"&&(m=g,g=null);function h(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,u,g,h):p.call(r,u,h)}}function c(p){return p&&function(u,g){var m=g?p.call(r,u,g):p.call(r,u);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 u=!process.getuid||process.getuid()!==0;return!!(u&&(p.code==="EINVAL"||p.code==="EPERM"))}}});var Ey=Y((cV,by)=>{var Ry=require("stream").Stream;by.exports=ox;function ox(r){return{ReadStream:e,WriteStream:t};function e(n,o){if(!(this instanceof e))return new e(n,o);Ry.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,u){if(p){i.emit("error",p),i.readable=!1;return}i.fd=u,i.emit("open",u),i._read()})}function t(n,o){if(!(this instanceof t))return new t(n,o);Ry.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 My=Y((lV,Ty)=>{"use strict";Ty.exports=ax;var ix=Object.getPrototypeOf||function(r){return r.__proto__};function ax(r){if(r===null||typeof r!="object")return r;if(r instanceof Object)var e={__proto__:ix(r)};else var e=Object.create(null);return Object.getOwnPropertyNames(r).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}),e}});var Vd=Y((pV,jd)=>{var Oe=require("fs"),sx=Py(),cx=Ey(),lx=My(),ic=require("util"),mt,sc;typeof Symbol=="function"&&typeof Symbol.for=="function"?(mt=Symbol.for("graceful-fs.queue"),sc=Symbol.for("graceful-fs.previous")):(mt="___graceful-fs.queue",sc="___graceful-fs.previous");function px(){}function Fy(r,e){Object.defineProperty(r,mt,{get:function(){return e}})}var ko=px;ic.debuglog?ko=ic.debuglog("gfs4"):/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&(ko=function(){var r=ic.format.apply(ic,arguments);r="GFS4: "+r.split(/\n/).join(`
|
|
8
|
+
GFS4: `),console.error(r)});Oe[mt]||(xy=global[mt]||[],Fy(Oe,xy),Oe.close=function(r){function e(t,n){return r.call(Oe,t,function(o){o||Iy(),typeof n=="function"&&n.apply(this,arguments)})}return Object.defineProperty(e,sc,{value:r}),e}(Oe.close),Oe.closeSync=function(r){function e(t){r.apply(Oe,arguments),Iy()}return Object.defineProperty(e,sc,{value:r}),e}(Oe.closeSync),/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&process.on("exit",function(){ko(Oe[mt]),require("assert").equal(Oe[mt].length,0)}));var xy;global[mt]||Fy(global,Oe[mt]);jd.exports=Wd(lx(Oe));process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH&&!Oe.__patched&&(jd.exports=Wd(Oe),Oe.__patched=!0);function Wd(r){sx(r),r.gracefulify=Wd,r.createReadStream=k,r.createWriteStream=b;var e=r.readFile;r.readFile=t;function t(M,z,j){return typeof z=="function"&&(j=z,z=null),ee(M,z,j);function ee(V,q,K,oe){return e(V,q,function(ae){ae&&(ae.code==="EMFILE"||ae.code==="ENFILE")?di([ee,[V,q,K],ae,oe||Date.now(),Date.now()]):typeof K=="function"&&K.apply(this,arguments)})}}var n=r.writeFile;r.writeFile=o;function o(M,z,j,ee){return typeof j=="function"&&(ee=j,j=null),V(M,z,j,ee);function V(q,K,oe,ae,A){return n(q,K,oe,function(B){B&&(B.code==="EMFILE"||B.code==="ENFILE")?di([V,[q,K,oe,ae],B,A||Date.now(),Date.now()]):typeof ae=="function"&&ae.apply(this,arguments)})}}var i=r.appendFile;i&&(r.appendFile=a);function a(M,z,j,ee){return typeof j=="function"&&(ee=j,j=null),V(M,z,j,ee);function V(q,K,oe,ae,A){return i(q,K,oe,function(B){B&&(B.code==="EMFILE"||B.code==="ENFILE")?di([V,[q,K,oe,ae],B,A||Date.now(),Date.now()]):typeof ae=="function"&&ae.apply(this,arguments)})}}var s=r.copyFile;s&&(r.copyFile=c);function c(M,z,j,ee){return typeof j=="function"&&(ee=j,j=0),V(M,z,j,ee);function V(q,K,oe,ae,A){return s(q,K,oe,function(B){B&&(B.code==="EMFILE"||B.code==="ENFILE")?di([V,[q,K,oe,ae],B,A||Date.now(),Date.now()]):typeof ae=="function"&&ae.apply(this,arguments)})}}var l=r.readdir;r.readdir=u;var p=/^v[0-5]\./;function u(M,z,j){typeof z=="function"&&(j=z,z=null);var ee=p.test(process.version)?function(K,oe,ae,A){return l(K,V(K,oe,ae,A))}:function(K,oe,ae,A){return l(K,oe,V(K,oe,ae,A))};return ee(M,z,j);function V(q,K,oe,ae){return function(A,B){A&&(A.code==="EMFILE"||A.code==="ENFILE")?di([ee,[q,K,oe],A,ae||Date.now(),Date.now()]):(B&&B.sort&&B.sort(),typeof oe=="function"&&oe.call(this,A,B))}}}if(process.version.substr(0,4)==="v0.8"){var g=cx(r);v=g.ReadStream,f=g.WriteStream}var m=r.ReadStream;m&&(v.prototype=Object.create(m.prototype),v.prototype.open=w);var h=r.WriteStream;h&&(f.prototype=Object.create(h.prototype),f.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 f},set:function(M){f=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=f;Object.defineProperty(r,"FileWriteStream",{get:function(){return C},set:function(M){C=M},enumerable:!0,configurable:!0});function v(M,z){return this instanceof v?(m.apply(this,arguments),this):v.apply(Object.create(v.prototype),arguments)}function w(){var M=this;Q(M.path,M.flags,M.mode,function(z,j){z?(M.autoClose&&M.destroy(),M.emit("error",z)):(M.fd=j,M.emit("open",j),M.read())})}function f(M,z){return this instanceof f?(h.apply(this,arguments),this):f.apply(Object.create(f.prototype),arguments)}function S(){var M=this;Q(M.path,M.flags,M.mode,function(z,j){z?(M.destroy(),M.emit("error",z)):(M.fd=j,M.emit("open",j))})}function k(M,z){return new r.ReadStream(M,z)}function b(M,z){return new r.WriteStream(M,z)}var P=r.open;r.open=Q;function Q(M,z,j,ee){return typeof j=="function"&&(ee=j,j=null),V(M,z,j,ee);function V(q,K,oe,ae,A){return P(q,K,oe,function(B,se){B&&(B.code==="EMFILE"||B.code==="ENFILE")?di([V,[q,K,oe,ae],B,A||Date.now(),Date.now()]):typeof ae=="function"&&ae.apply(this,arguments)})}}return r}function di(r){ko("ENQUEUE",r[0].name,r[1]),Oe[mt].push(r),Ud()}var ac;function Iy(){for(var r=Date.now(),e=0;e<Oe[mt].length;++e)Oe[mt][e].length>2&&(Oe[mt][e][3]=r,Oe[mt][e][4]=r);Ud()}function Ud(){if(clearTimeout(ac),ac=void 0,Oe[mt].length!==0){var r=Oe[mt].shift(),e=r[0],t=r[1],n=r[2],o=r[3],i=r[4];if(o===void 0)ko("RETRY",e.name,t),e.apply(null,t);else if(Date.now()-o>=6e4){ko("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?(ko("RETRY",e.name,t),e.apply(null,t.concat([o]))):Oe[mt].push(r)}ac===void 0&&(ac=setTimeout(Ud,0))}}});var Ay=Y((dV,Dy)=>{function ir(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))}Dy.exports=ir;ir.prototype.reset=function(){this._attempts=1,this._timeouts=this._originalTimeouts};ir.prototype.stop=function(){this._timeout&&clearTimeout(this._timeout),this._timeouts=[],this._cachedTimeouts=null};ir.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};ir.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)};ir.prototype.try=function(r){console.log("Using RetryOperation.try() is deprecated"),this.attempt(r)};ir.prototype.start=function(r){console.log("Using RetryOperation.start() is deprecated"),this.attempt(r)};ir.prototype.start=ir.prototype.try;ir.prototype.errors=function(){return this._errors};ir.prototype.attempts=function(){return this._attempts};ir.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 Oy=Y(wo=>{var dx=Ay();wo.operation=function(r){var e=wo.timeouts(r);return new dx(e,{forever:r&&r.forever,unref:r&&r.unref,maxRetryTime:r&&r.maxRetryTime})};wo.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};wo.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};wo.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=wo.operation(e),p=Array.prototype.slice.call(arguments,1),u=p.pop();p.push(function(g){l.retry(g)||(g&&(arguments[0]=l.mainError()),u.apply(this,arguments))}),l.attempt(function(){c.apply(r,p)})}.bind(r,a),r[i].options=e}}});var Ly=Y((mV,_y)=>{_y.exports=Oy()});var Ny=Y((fV,cc)=>{cc.exports=["SIGABRT","SIGALRM","SIGHUP","SIGINT","SIGTERM"];process.platform!=="win32"&&cc.exports.push("SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&cc.exports.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT","SIGUNUSED")});var By=Y((hV,fi)=>{var Fe=global.process,Po=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"};Po(Fe)?(Wy=require("assert"),ui=Ny(),Uy=/^win/i.test(Fe.platform),xa=require("events"),typeof xa!="function"&&(xa=xa.EventEmitter),Fe.__signal_exit_emitter__?pt=Fe.__signal_exit_emitter__:(pt=Fe.__signal_exit_emitter__=new xa,pt.count=0,pt.emitted={}),pt.infinite||(pt.setMaxListeners(1/0),pt.infinite=!0),fi.exports=function(r,e){if(!Po(global.process))return function(){};Wy.equal(typeof r,"function","a callback must be provided for exit handler"),mi===!1&&Bd();var t="exit";e&&e.alwaysLast&&(t="afterexit");var n=function(){pt.removeListener(t,r),pt.listeners("exit").length===0&&pt.listeners("afterexit").length===0&&lc()};return pt.on(t,r),n},lc=function(){!mi||!Po(global.process)||(mi=!1,ui.forEach(function(e){try{Fe.removeListener(e,pc[e])}catch{}}),Fe.emit=dc,Fe.reallyExit=qd,pt.count-=1)},fi.exports.unload=lc,Ro=function(e,t,n){pt.emitted[e]||(pt.emitted[e]=!0,pt.emit(e,t,n))},pc={},ui.forEach(function(r){pc[r]=function(){if(Po(global.process)){var t=Fe.listeners(r);t.length===pt.count&&(lc(),Ro("exit",null,r),Ro("afterexit",null,r),Uy&&r==="SIGHUP"&&(r="SIGINT"),Fe.kill(Fe.pid,r))}}}),fi.exports.signals=function(){return ui},mi=!1,Bd=function(){mi||!Po(global.process)||(mi=!0,pt.count+=1,ui=ui.filter(function(e){try{return Fe.on(e,pc[e]),!0}catch{return!1}}),Fe.emit=Vy,Fe.reallyExit=jy)},fi.exports.load=Bd,qd=Fe.reallyExit,jy=function(e){Po(global.process)&&(Fe.exitCode=e||0,Ro("exit",Fe.exitCode,null),Ro("afterexit",Fe.exitCode,null),qd.call(Fe,Fe.exitCode))},dc=Fe.emit,Vy=function(e,t){if(e==="exit"&&Po(global.process)){t!==void 0&&(Fe.exitCode=t);var n=dc.apply(this,arguments);return Ro("exit",Fe.exitCode,null),Ro("afterexit",Fe.exitCode,null),n}else return dc.apply(this,arguments)}):fi.exports=function(){return function(){}};var Wy,ui,Uy,xa,pt,lc,Ro,pc,mi,Bd,qd,jy,dc,Vy});var $y=Y((gV,$d)=>{"use strict";var qy=Symbol();function ux(r,e,t){let n=e[qy];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,qy,{value:c}),t(null,s.mtime,c)})})}function mx(r){let e=Date.now();return r==="s"&&(e=Math.ceil(e/1e3)*1e3),new Date(e)}$d.exports.probe=ux;$d.exports.getMtime=mx});var Jy=Y((yV,Fa)=>{"use strict";var fx=require("path"),Gd=Vd(),hx=Ly(),gx=By(),Hy=$y(),cn={};function Ia(r,e){return e.lockfilePath||`${r}.lock`}function Kd(r,e,t){if(!e.realpath)return t(null,fx.resolve(r));e.fs.realpath(r,t)}function zd(r,e,t){let n=Ia(r,e);e.fs.mkdir(n,o=>{if(!o)return Hy.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"?zd(r,{...e,stale:0},t):t(i);if(!zy(a,e))return t(Object.assign(new Error("Lock file is already being held"),{code:"ELOCKED",file:r}));Gy(r,e,s=>{if(s)return t(s);zd(r,{...e,stale:0},t)})})})}function zy(r,e){return r.mtime.getTime()<Date.now()-e.stale}function Gy(r,e,t){e.fs.rmdir(Ia(r,e),n=>{if(n&&n.code!=="ENOENT")return t(n);t()})}function uc(r,e){let t=cn[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?Hd(r,t,Object.assign(n,{code:"ECOMPROMISED"})):(t.updateDelay=1e3,uc(r,e));if(!(t.mtime.getTime()===o.mtime.getTime()))return Hd(r,t,Object.assign(new Error("Unable to update lock within the stale threshold"),{code:"ECOMPROMISED"}));let s=Hy.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?Hd(r,t,Object.assign(c,{code:"ECOMPROMISED"})):(t.updateDelay=1e3,uc(r,e));t.mtime=s,t.lastUpdate=Date.now(),t.updateDelay=null,uc(r,e)}})})},t.updateDelay),t.updateTimeout.unref&&t.updateTimeout.unref())}function Hd(r,e,t){e.released=!0,e.updateTimeout&&clearTimeout(e.updateTimeout),cn[r]===e&&delete cn[r],e.options.onCompromised(t)}function yx(r,e,t){e={stale:1e4,update:null,realpath:!0,retries:0,fs:Gd,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),Kd(r,e,(n,o)=>{if(n)return t(n);let i=hx.operation(e.retries);i.attempt(()=>{zd(o,e,(a,s,c)=>{if(i.retry(a))return;if(a)return t(i.mainError());let l=cn[o]={lockfilePath:Ia(o,e),mtime:s,mtimePrecision:c,options:e,lastUpdate:Date.now()};uc(o,e),t(null,p=>{if(l.released)return p&&p(Object.assign(new Error("Lock is already released"),{code:"ERELEASED"}));Ky(o,{...e,realpath:!1},p)})})})})}function Ky(r,e,t){e={fs:Gd,realpath:!0,...e},Kd(r,e,(n,o)=>{if(n)return t(n);let i=cn[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 cn[o],Gy(o,e,t)})}function Cx(r,e,t){e={stale:1e4,realpath:!0,fs:Gd,...e},e.stale=Math.max(e.stale||0,2e3),Kd(r,e,(n,o)=>{if(n)return t(n);e.fs.stat(Ia(o,e),(i,a)=>i?i.code==="ENOENT"?t(null,!1):t(i):t(null,!zy(a,e)))})}function Sx(){return cn}gx(()=>{for(let r in cn){let e=cn[r].options;try{e.fs.rmdirSync(Ia(r,e))}catch{}}});Fa.exports.lock=yx;Fa.exports.unlock=Ky;Fa.exports.check=Cx;Fa.exports.getLocks=Sx});var Yy=Y((CV,Qy)=>{"use strict";var vx=Vd();function kx(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 wx(r){return(...e)=>new Promise((t,n)=>{e.push((o,i)=>{o?n(o):t(i)}),r(...e)})}function Px(r){return(...e)=>{let t,n;if(e.push((o,i)=>{t=o,n=i}),r(...e),t)throw t;return n}}function Rx(r){if(r={...r},r.fs=kx(r.fs||vx),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}Qy.exports={toPromise:wx,toSync:Px,toSyncOptions:Rx}});var Qd=Y((SV,Wn)=>{"use strict";var hi=Jy(),{toPromise:mc,toSync:fc,toSyncOptions:Jd}=Yy();async function Xy(r,e){let t=await mc(hi.lock)(r,e);return mc(t)}function bx(r,e){let t=fc(hi.lock)(r,Jd(e));return fc(t)}function Ex(r,e){return mc(hi.unlock)(r,e)}function Tx(r,e){return fc(hi.unlock)(r,Jd(e))}function Mx(r,e){return mc(hi.check)(r,e)}function xx(r,e){return fc(hi.check)(r,Jd(e))}Wn.exports=Xy;Wn.exports.lock=Xy;Wn.exports.unlock=Ex;Wn.exports.lockSync=bx;Wn.exports.unlockSync=Tx;Wn.exports.check=Mx;Wn.exports.checkSync=xx});async function Da(r){return ar.promises.readFile(r,"utf8")}async function Re(r,e=""){try{return await Da(r)}catch(t){if(x(t))return Yd.debug("optional text file does not exist: %s",r),e;throw t}}async function nC(r){try{return await ar.promises.stat(r)}catch(e){if(x(e))return;throw e}}async function vt(r,e){await ar.promises.mkdir(hc.dirname(r),{recursive:!0}),await ar.promises.writeFile(r,e,"utf8")}async function oC(r,e,t={}){await ar.promises.mkdir(hc.dirname(r),{recursive:!0});let n,o=t.timeoutMs??Ix,i=t.retryDelayMs??Fx;try{n=await rC.lock(r,{lockfilePath:r,realpath:!1,stale:t.staleMs??Dx,retries:{retries:Math.ceil(o/i),factor:1,minTimeout:i,maxTimeout:i}})}catch(a){throw rc(a)?new ut("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){Yd.warn(`release file lock failed: ${r}`,a)}}}async function It(r,e){await ar.promises.mkdir(hc.dirname(r),{recursive:!0});let t=`${r}.succapp-tmp.${process.pid}.${Date.now()}.${(0,eC.randomUUID)()}`;try{typeof e=="string"||Buffer.isBuffer(e)?await ar.promises.writeFile(t,e):await(0,tC.pipeline)(e,ar.createWriteStream(t)),await ar.promises.rename(t,r)}catch(n){throw await ar.promises.rm(t,{force:!0}).catch(o=>{Yd.debug("cleanup temporary write file failed: %s",t,o)}),n}}var ar,hc,eC,tC,rC,Yd,Ix,Fx,Dx,tt=ge(()=>{ar=E(require("fs")),hc=E(require("path")),eC=require("crypto"),tC=require("stream/promises"),rC=E(Qd());F();_();J();Yd=T("common.file");Ix=5e3,Fx=100,Dx=3e4});function pe(r){let e=r.replace(Wx,"/").replace(/^\/+|\/+$/g,"");return e?"/"+e:"/"}function cC(r){let e=pe(r);if(e.split("/").filter(Boolean).includes(Ux))throw new Error(`Unsafe metadata path: ${r}`);return e}function lC(r){if(!r.startsWith("/"))throw new R("err.meta.invalidPath",{path:r,reason:"notAbsolute"});try{return cC(r)}catch(e){throw new R("err.meta.invalidPath",{path:r,reason:"unsafe"},{cause:e})}}function ce(r,e){return ye.join(r,pe(e).replace(/^\//,""))}function pC(r,e){let t=ye.resolve(r),n=ye.resolve(t,cC(e).replace(/^\//,""));if(n!==t&&!n.startsWith(t+ye.sep))throw new Error(`Metadata path escapes root: ${e}`);return n}function Wr(r){return ye.join(r,ln)}function Ur(r){return ye.join(r,$x,Hx)}function pn(r){let e=r.replace(jx,"/");if(!e||ye.posix.isAbsolute(e)||ye.win32.isAbsolute(r)||ye.win32.isAbsolute(e))return;let t=e.split("/");return t.some(Jx)?void 0:t.join("/")}function Un(r,e="relative path"){let t=pn(r);if(!t)throw new Error(`invalid ${e}: ${r}`);return t}function jr(r,e,t="relative path"){return ye.join(r,...Un(e,t).split("/"))}function He(r,e){return ye.isAbsolute(e)?ye.normalize(e):ye.resolve(r,e)}async function ie(r){try{return await yc.promises.access(r),!0}catch(e){if(x(e))return!1;throw e}}async function Sc(r){let e;try{e=await yc.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 yr(r){return r.trim().replace(Lx,"").replace(Nx,"-")}function Vr(r,e){let t=ye.resolve(r),n=ye.resolve(e);if(n===t||!n.startsWith(t+ye.sep))return;let o=ye.relative(t,n);if(!o)return"/";let i=o.split(ye.sep);if(!i[0].startsWith("."))return pe(i.join("/"))}function De(r){return r.replace(/^\//,"")}function ze(r){let e=pe(r);if(e==="/")return;let[t]=e.slice(1).split("/");return t?`/${t}`:void 0}function kt(r){let e=r.trim();if(!e||e.startsWith(".")||e.includes("/")||e.includes("\\"))throw new Error(`invalid project name: ${r}`);return`/${e}`}function re(r,e){let t=sC(r),n=sC(e);return t===n||n==="/"?!0:t.length<=n.length?!1:t.charCodeAt(n.length)===47&&t.startsWith(n)}function jn(r,e,t,n){return gc(r,t)||e&&gc(e,t)?!0:!!n&&(gc(r,n)||!!e&&gc(e,n))}function gc(r,e){return re(r,e)||re(e,r)}function dC(r){let e;for(let t of r){let n=zx(t);if(!e){e=n;continue}e=Gx(e,n)}if(e)return pe(e.join("/"))}function zx(r){let e=pe(r);if(e==="/")return[];let t=e.split("/").filter(Boolean);return t.pop(),t}function Gx(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 wt(r){let e=[...r].sort((n,o)=>{let i=aC(n)-aC(o);return i===0?n.localeCompare(o):i}),t=[];for(let n of e)Kx(n,r)||t.push(n);return t}function Kx(r,e){let t=ye.posix.dirname(r);for(;t!==r;){if(e.has(t))return!0;if(t==="/")return!1;r=t,t=ye.posix.dirname(r)}return!1}function aC(r){return r.split("/").filter(Boolean).length}function sC(r){return ye.posix.normalize(pe(r))}function Jx(r){return!r||r===Vx||r===Bx}async function sr(r){try{await yc.promises.rm(r,{recursive:!0,force:!0})}catch(e){if(!x(e))throw e;_x.debug(`remove ignored missing path: ${r}`)}}function Br(r){return r.split("/").filter(Boolean).length}var yc,ye,_x,Lx,Nx,Wx,Ux,jx,Vx,Bx,ln,qx,Xd,Cc,$x,Hx,$=ge(()=>{yc=E(require("fs")),ye=E(require("path"));F();_();J();_x=T("common.path"),Lx=/^https?:\/\/|\/+$/gi,Nx=/[^a-zA-Z0-9.]+/g,Wx=/[\\/]+/g,Ux="..",jx=/\\/g,Vx=".",Bx="..",ln=".succapp",qx=".agents",Xd=[ln,qx],Cc=[".git",...Xd,"node_modules"],$x=".vscode",Hx="settings.json"});function tu(r){return r.reason instanceof Error?r.reason:new or}function Pt(r){if(r?.aborted)throw tu(r)}function bc(...r){let e=r.filter(n=>n!==void 0);if(e.length===0)return Rc;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 or)};n.addEventListener("abort",o),n.aborted&&o()}return t.signal}var EI,Rc,Bn=ge(()=>{F();EI=new AbortController,Rc=EI.signal});var qn,Ec,nt,qr=ge(()=>{F();Ie();Bn();qn=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??Rc}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():Pt(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(){H(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}},Ec=class{constructor(e){this.delegate=e}start(e,t){this.delegate.start(e,t)}progress(e){this.delegate.progress(e)}step(e){this.delegate.step(e)}setMessage(e){this.delegate.setMessage(e)}finish(){this.delegate.finish()}subTaskMonitor(e){return this.delegate.subTaskMonitor(e)}isCancellationRequested(){return this.delegate.isCancellationRequested()}getAbortSignal(){return this.delegate.getAbortSignal()}setAbortSignal(e){this.delegate.setAbortSignal(e)}throwIfAborted(){this.delegate.throwIfAborted()}},nt=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 Rc}setAbortSignal(e){}throwIfAborted(){}}});function lu(r){return pF(r)??dF(Fc(r))}function Fc(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 sF(r){if(!r)return!1;let e=pu(r);return e.startsWith("text/")?!0:e==="image/svg+xml"||e==="application/json"||e==="application/manifest+json"||e==="application/yaml"||e==="application/atom+xml"||e==="application/rss+xml"||e==="application/javascript"||e==="application/xml"||e==="application/xhtml+xml"||e==="application/x-javascript"}function cF(r){return r?pu(r)==="application/json":!1}function UC(r){if(!r)return!1;let e=pu(r);return e==="application/json"||e.endsWith("+json")}function jC(r){return sF(lu(r))}function VC(r){return cF(lu(r))}function lF(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(BC(n.substring(0,o)),n.substring(o+1).trim())}return e}function pF(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 aF)if(i.basename===t||i.extension===o)return i.contentType}function dF(r,e=nF){return uF().get(BC(r))??e}function uF(){let r=mF(),e=Mo.statSync(r);return(!Na||Na.filePath!==r||Na.mtimeMs!==e.mtimeMs)&&(Na={filePath:r,mtimeMs:e.mtimeMs,contents:lF(Mo.readFileSync(r,"utf8"))}),Na.contents}function BC(r){return(r??"").trim().replace(/^\./,"").toLowerCase()}function pu(r){let e=r.indexOf(";");return(e>=0?r.substring(0,e):r).trim().toLowerCase()}function mF(){let r=Ci.join(fF(),"resources",oF);return H(Mo.existsSync(r),`Content-Type resource not found: ${r}. Run build/watch to sync it from BI project.`),r}function fF(){for(let r=__dirname;;r=Ci.dirname(r)){if(Mo.existsSync(Ci.join(r,iF)))return r;Ci.dirname(r)===r&&ii(`Extension root not found from ${__dirname}`)}}var Mo,Ci,nF,oF,iF,Na,aF,Si=ge(()=>{Mo=E(require("fs")),Ci=E(require("path"));Ie();nF="application/octet-stream",oF="contents.properties",iF="package.json",aF=[]});async function qa(r,e,t){let n=typeof e=="function"?e:t;if(H(n,"runConcurrently task is required"),r.length===0)return;let o=typeof e=="function"?void 0:e,i=new it(o);await Promise.all(r.map(a=>i.addTask(()=>n(a))))}var cD,it,fn=ge(()=>{Bn();Ie();F();cD=8,it=class{activeCount=0;canceledError;pendingSlots=[];idleWaiters=[];signal;abortListener;maxConcurrency;constructor(e){typeof e=="number"?this.maxConcurrency=e:(this.maxConcurrency=e?.maxConcurrency??cD,this.signal=e?.signal),this.maxConcurrency=Math.max(1,this.maxConcurrency),this.signal&&(this.abortListener=()=>this.cancel(tu(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 Pt(this.signal),await e()}catch(n){throw n instanceof or&&this.cancel(n),n}finally{t.release()}}async acquire(){if(Pt(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})}),Pt(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 ev(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 Xt(r){return(typeof r=="string"?r.trim():"")||void 0}function Gn(r,e){if(!r||!e)return;let t=ev(r),n=ev(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 Hc(r,e){if(!r)return!0;let t=Gn(r,e);return t===void 0?r!==e:t<0}function zc(r,e){let t=Gn(r,e);return t!==void 0&&t>0}var xi=ge(()=>{});var Pr,Lu=ge(()=>{Pr=class extends Error{constructor(e,t){super(`${e} at position ${t}`),this.position=t}}});function rv(r){return/^[0-9A-Fa-f]$/.test(r)}function Jn(r){return r>="0"&&r<="9"}function nv(r){return r>=" "}function Ga(r){return`,:[]/{}()
|
|
9
|
+
+`.includes(r)}function Nu(r){return r>="a"&&r<="z"||r>="A"&&r<="Z"||r==="_"||r==="$"}function Wu(r){return r>="a"&&r<="z"||r>="A"&&r<="Z"||r==="_"||r==="$"||r>="0"&&r<="9"}function Vu(r){return`,[]/{}
|
|
10
|
+
+`.includes(r)}function Bu(r){return Ka(r)||ED.test(r)}function ov(r){return r===`
|
|
11
|
+
`||r==="\r"||r===" "||r==="\b"||r==="\f"}function Kn(r,e){let t=r.charCodeAt(e);return t===32||t===10||t===9||t===13}function iv(r,e){let t=r.charCodeAt(e);return t===32||t===9||t===13}function av(r,e){let t=r.charCodeAt(e);return t===160||t>=8192&&t<=8202||t===8239||t===8287||t===12288}function Ka(r){return qu(r)||Kc(r)}function qu(r){return r==='"'||r==="\u201C"||r==="\u201D"}function $u(r){return r==='"'}function Kc(r){return r==="'"||r==="\u2018"||r==="\u2019"||r==="`"||r==="\xB4"}function Hu(r){return r==="'"}function Ii(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 cr(r,e){let t=r.length;if(!Kn(r,t-1))return r+e;for(;Kn(r,t-1);)t--;return r.substring(0,t)+e+r.substring(t)}function sv(r,e,t){return r.substring(0,e)+r.substring(e+t)}function cv(r){return/[,\n][ \t\r]*$/.test(r)}var Uu,ju,ED,lv=ge(()=>{Uu=/^(http|https|ftp|mailto|file|data|irc):\/\/$/,ju=/^[A-Za-z0-9-._~:/?#@!$&'()*+;=]$/;ED=/^[[{\w-]$/});function pv(r){let e=0,t="";l(["```","[```","{```"]),i()||q(),l(["```","```]","```}"]);let o=u(",");for(o&&a(),Bu(r[e])&&cv(t)?(o||(t=cr(t,",")),v()):o&&(t=Ii(t,","));r[e]==="}"||r[e]==="]";)e++,a();if(e>=r.length)return t;V();function i(){a();let A=y()||C()||w()||S()||k()||P(!1)||Q();return a(),A}function a(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,B=e,se=s(A);do se=c(),se&&(se=s(A));while(se);return e>B}function s(A){let B=A?Kn:iv,se="";for(;;)if(B(r,e))se+=r[e],e++;else if(av(r,e))se+=" ",e++;else break;return se.length>0?(t+=se,!0):!1}function c(){if(r[e]==="/"&&r[e+1]==="*"){for(;e<r.length&&!xD(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(A){if(p(A)){if(Nu(r[e]))for(;e<r.length&&Wu(r[e]);)e++;return a(),!0}return!1}function p(A){s(!0);for(let B of A){let se=e+B.length;if(r.slice(e,se)===B)return e=se,!0}return!1}function u(A){return r[e]===A?(t+=r[e],e++,!0):!1}function g(A){return r[e]===A?(e++,!0):!1}function m(){return g("\\")}function h(){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 A=!0;for(;e<r.length&&r[e]!=="}";){let B;if(A?(B=!0,A=!1):(B=u(","),B||(t=cr(t,",")),a()),h(),!(w()||P(!0))){r[e]==="}"||r[e]==="{"||r[e]==="]"||r[e]==="["||r[e]===void 0?t=Ii(t,","):K();break}a();let xn=u(":"),hr=e>=r.length;xn||(Bu(r[e])||hr?t=cr(t,":"):oe()),i()||(xn||hr?t+="null":oe())}return r[e]==="}"?(t+="}",e++):t=cr(t,"}"),!0}return!1}function C(){if(r[e]==="["){t+="[",e++,a(),g(",")&&a();let A=!0;for(;e<r.length&&r[e]!=="]";)if(A?A=!1:u(",")||(t=cr(t,",")),h(),!i()){t=Ii(t,",");break}return r[e]==="]"?(t+="]",e++):t=cr(t,"]"),!0}return!1}function v(){let A=!0,B=!0;for(;B;)A?A=!1:u(",")||(t=cr(t,",")),B=i();B||(t=Ii(t,",")),t=`[
|
|
13
13
|
${t}
|
|
14
|
-
]`}function
|
|
15
|
-
`,r:"\r",t:" "}});var
|
|
14
|
+
]`}function w(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,B=arguments.length>1&&arguments[1]!==void 0?arguments[1]:-1,se=r[e]==="\\";if(se&&(e++,se=!0),Ka(r[e])){let xn=$u(r[e])?$u:Hu(r[e])?Hu:Kc(r[e])?Kc:qu,hr=e,Te=t.length,le='"';for(e++;;){if(e>=r.length){let Ze=M(e-1);return!A&&Ga(r.charAt(Ze))?(e=hr,t=t.substring(0,Te),w(!0)):(le=cr(le,'"'),t+=le,!0)}if(e===B)return le=cr(le,'"'),t+=le,!0;if(xn(r[e])){let Ze=e,Ca=le.length;if(le+='"',e++,t+=le,a(!1),A||e>=r.length||Ga(r[e])||Ka(r[e])||Jn(r[e]))return f(),!0;let Ht=M(Ze-1),go=r.charAt(Ht);if(go===",")return e=hr,t=t.substring(0,Te),w(!1,Ht);if(Ga(go))return e=hr,t=t.substring(0,Te),w(!0);t=t.substring(0,Te),e=Ze+1,le=`${le.substring(0,Ca)}\\${le.substring(Ca)}`}else if(A&&Vu(r[e])){if(r[e-1]===":"&&Uu.test(r.substring(hr+1,e+2)))for(;e<r.length&&ju.test(r[e]);)le+=r[e],e++;return le=cr(le,'"'),t+=le,f(),!0}else if(r[e]==="\\"){let Ze=r.charAt(e+1);if(MD[Ze]!==void 0)le+=r.slice(e,e+2),e+=2;else if(Ze==="u"){let Ht=2;for(;Ht<6&&rv(r[e+Ht]);)Ht++;Ht===6?(le+=r.slice(e,e+6),e+=6):e+Ht>=r.length?e=r.length:ae()}else le+=Ze,e+=2}else{let Ze=r.charAt(e);Ze==='"'&&r[e-1]!=="\\"?(le+=`\\${Ze}`,e++):ov(Ze)?(le+=TD[Ze],e++):(nv(Ze)||ee(Ze),le+=Ze,e++)}se&&m()}}return!1}function f(){let A=!1;for(a();r[e]==="+";){A=!0,e++,a(),t=Ii(t,'"',!0);let B=t.length;w()?t=sv(t,B,1):t=cr(t,'"')}return A}function S(){let A=e;if(r[e]==="-"){if(e++,z())return j(A),!0;if(!Jn(r[e]))return e=A,!1}for(;Jn(r[e]);)e++;if(r[e]==="."){if(e++,z())return j(A),!0;if(!Jn(r[e]))return e=A,!1;for(;Jn(r[e]);)e++}if(r[e]==="e"||r[e]==="E"){if(e++,(r[e]==="-"||r[e]==="+")&&e++,z())return j(A),!0;if(!Jn(r[e]))return e=A,!1;for(;Jn(r[e]);)e++}if(!z())return e=A,!1;if(e>A){let B=r.slice(A,e),se=/^0\d/.test(B);return t+=se?`"${B}"`:B,!0}return!1}function k(){return b("true","true")||b("false","false")||b("null","null")||b("True","true")||b("False","false")||b("None","null")}function b(A,B){return r.slice(e,e+A.length)===A?(t+=B,e+=A.length,!0):!1}function P(A){let B=e;if(Nu(r[e])){for(;e<r.length&&Wu(r[e]);)e++;let se=e;for(;Kn(r,se);)se++;if(r[se]==="(")return e=se+1,i(),r[e]===")"&&(e++,r[e]===";"&&e++),!0}for(;e<r.length&&!Vu(r[e])&&!Ka(r[e])&&(!A||r[e]!==":");)e++;if(r[e-1]===":"&&Uu.test(r.substring(B,e+2)))for(;e<r.length&&ju.test(r[e]);)e++;if(e>B){for(;Kn(r,e-1)&&e>0;)e--;let se=r.slice(B,e);return t+=se==="undefined"?"null":JSON.stringify(se),r[e]==='"'&&e++,!0}}function Q(){if(r[e]==="/"){let A=e;for(e++;e<r.length&&(r[e]!=="/"||r[e-1]==="\\");)e++;return e++,t+=`"${r.substring(A,e)}"`,!0}}function M(A){let B=A;for(;B>0&&Kn(r,B);)B--;return B}function z(){return e>=r.length||Ga(r[e])||Kn(r,e)}function j(A){t+=`${r.slice(A,e)}0`}function ee(A){throw new Pr(`Invalid character ${JSON.stringify(A)}`,e)}function V(){throw new Pr(`Unexpected character ${JSON.stringify(r[e])}`,e)}function q(){throw new Pr("Unexpected end of json string",r.length)}function K(){throw new Pr("Object key expected",e)}function oe(){throw new Pr("Colon expected",e)}function ae(){let A=r.slice(e,e+6);throw new Pr(`Invalid unicode character "${A}"`,e)}}function xD(r,e){return r[e]==="*"&&r[e+1]==="/"}var TD,MD,dv=ge(()=>{Lu();lv();TD={"\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r"," ":"\\t"},MD={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:`
|
|
15
|
+
`,r:"\r",t:" "}});var uv={};Ed(uv,{JSONRepairError:()=>Pr,jsonrepair:()=>pv});var mv=ge(()=>{dv();Lu()});function wv(r){return r!==void 0&&r.length>=20&&r.length<30&&!r.includes("/")&&!r.includes(".")}function Jc(r,e){let t=Zt.posix.dirname(pe(e));return Zt.join(ce(r,t),X)}function Qc(r){return Zt.posix.basename(pe(r))}function Gu(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 Pv(r){if(Gu(r))return!0;try{let e=JSON.parse(r);return W(e)&&Object.keys(e).length===0}catch{return!1}}async function Ku(r){let e;try{e=await lr.promises.stat(r)}catch(a){if(x(a))return!1;throw a}if(!e.isDirectory())return!1;let t=Zt.join(Zt.dirname(r),X),n;try{n=await lr.promises.readFile(t,"utf-8")}catch(a){if(x(a))return!1;throw a}if(Pv(n))return!1;let o;try{o=JSON.parse(n)}catch{return!1}if(!W(o))return!1;let i=o[Zt.basename(r)];return W(i)}async function Rv(r){if(!await Ku(r))return!0;let e=Zt.join(r,X);try{let t=await lr.promises.readFile(e,"utf-8");return Pv(t)}catch(t){if(x(t))return!0;throw t}}async function Yc(r){let e=Buffer.alloc(100),t=await lr.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=Sv.exec(n);if(o)return String(JSON.parse(o[1]));let i=await lr.promises.readFile(r,"utf-8");return Ju(i)}function Ju(r){let e=r.slice(0,100),t=Sv.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 Qa(r,e,t){let n=Jc(r,e);return await Iv(n),bv(n,t)}async function br(r,e){let t=ce(r,e);await Iv(t);try{let n=await lr.promises.readFile(t,"utf-8");if(Gu(n))return{dotMeta:{},exists:!0,readable:!0};try{return{dotMeta:Ja(t,n),exists:!0,readable:!0}}catch(o){try{let i=await Ev(n),a=Ja(t,i);return Ao.debug(`read repaired damaged .meta file without writing: ${t}`,o),{dotMeta:a,exists:!0,readable:!1,damaged:!0,repairable:!0}}catch(i){return Ao.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 Ao.debug(`.meta file does not exist: ${t}`),{dotMeta:{},exists:!1,readable:!0};throw n}}async function Ya(r,e){let t=Jc(r,e);await tl(t,!0,n=>{delete n[Qc(e)]})}async function Xc(r,e,t){let n=ce(r,e),i=(gn.get(n)??Promise.resolve()).catch(()=>{}).then(()=>Qu(n,t));gn.set(n,i);try{await i}finally{gn.get(n)===i&&gn.delete(n)}}async function bv(r,e={}){let t=e.strict??!1,n=e.silentMissing??!0;try{let o=await lr.promises.readFile(r,"utf-8");return Gu(o)?{}:await OD(r,o)}catch(o){if(x(o))return n||Ao.debug(`read missing .meta as empty: ${r}`),{};if(t)throw new Fi(r,o);return Ao.warn(`failed to read .meta file: ${r}`,o),{}}}async function OD(r,e){try{return Ja(r,e)}catch(t){let n=await Ev(e),o=Ja(r,n);return await Qu(r,o),Ao.debug(`repaired invalid .meta file: ${r}`,t),o}}async function Ev(r){zu||(zu=Promise.resolve().then(()=>(mv(),uv)));let e=await zu;for(let t of Tv(r))try{let n=e.jsonrepair(t);return Ja(".meta",n),n}catch(n){Ao.debug("failed to repair .meta git conflict candidate",n)}return e.jsonrepair(r)}function Tv(r){let e=_D(r);if(!e)return[];let t=[LD(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=Tv(i);a.length===0?n.push(i):n.push(...a)}return Array.from(new Set(n))}function _D(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
|
|
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\}$/,"")}},
|
|
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 LD(r,e){let t=new Map;for(let o of[...r.split(/\r?\n/),...e.split(/\r?\n/)]){let i=ND(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 ND(r){return/^\s*"([^"]+)"\s*:/.exec(r)?.[1]}function Ja(r,e){let t=JSON.parse(e);if(W(t))return t;throw new Fi(r,new Error(".meta root must be an object"))}async function je(r,e,t){return(await Qa(r,e,t))[Qc(e)]}async function Xa(r,e,t){let n=Jc(r,e.path);await tl(n,!1,o=>{o[Qc(e.path)]=Wt(e,t)})}async function Mv(r,e,t){let n=new Map;for(let o of e){let i=Jc(r,o.path),a=n.get(i);a?a.push(o):n.set(i,[o])}await Promise.all([...n].map(async([o,i])=>{await tl(o,!1,a=>{for(let s of i)a[Qc(s.path)]=Wt(s,t)})}))}async function Zc(r,e,t){let n=Zt.join(ce(r,e),X);await tl(n,!1,o=>{for(let[i,a]of Object.entries(t))a?o[i]=a:delete o[i]})}async function Oo(r){return(await Promise.all(r.map(async t=>(await lr.promises.stat(t)).isDirectory()?1+await xv(t):1))).reduce((t,n)=>t+n,0)}async function xv(r){let e=await lr.promises.readdir(r,{withFileTypes:!0});return(await Promise.all(e.filter(n=>n.name!==X).map(async n=>n.isDirectory()?1+await xv(Zt.join(r,n.name)):1))).reduce((n,o)=>n+o,0)}async function el(r){let e=(0,hv.createHash)("sha256");return await(0,yv.pipeline)(lr.createReadStream(r,{highWaterMark:64*1024}),new gv.Writable({write(t,n,o){e.update(t),o()}})),e.digest("hex")}function Wt(r,e){let t={};if(Rr(t,"id",r.id),Rr(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(!DD.test(n))throw new Error(`invalid file content hash: ${r.path}`);t.hash=n}}return Rr(t,"icon",r.icon),Rr(t,"desc",r.desc),r.isFolder&&r.type&&r.type!==FD&&(t.type=r.type),Rr(t,"order",r.order),Rr(t,"creator",r.creator),Rr(t,"createTime",r.createTime),Rr(t,"modifier",r.modifier),Rr(t,"modifyTime",r.modifyTime),r.hidden&&(t.hidden=!0),Rr(t,"subFileType",r.subFileType),Rr(t,"labels",r.labels),fv(t,"option",r.option),fv(t,"customOption",r.customOption),Fv(t)}function _o(r,e,t=!0){for(let n of vv)if(!(t&&AD.has(n))&&!WD(r,e,n))return!1;return!0}function WD(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,Cv.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 Lo(r){if(!r)return{};let e={...r};for(let t of kv)delete e[t];return e}async function tl(r,e,t){let o=(gn.get(r)??Promise.resolve()).catch(()=>{}).then(async()=>{let i=await bv(r,{strict:e});t(i),await Qu(r,i)});gn.set(r,o);try{await o}finally{gn.get(r)===o&&gn.delete(r)}}async function Iv(r){let e=gn.get(r);e&&await e.catch(()=>{})}async function Qu(r,e){await It(r,JSON.stringify(UD(e),null,ID))}function UD(r){let e={};for(let t of Object.keys(r))e[t]=Fv(r[t]);return e}function Fv(r){let e={};for(let t of vv)Object.prototype.hasOwnProperty.call(r,t)&&(e[t]=r[t]);return e}function Rr(r,e,t){t==null||t===""||typeof t=="number"&&t===0||(r[e]=t)}function fv(r,e,t){!t||Object.keys(t).length===0||(r[e]=t)}var lr,Zt,hv,gv,yv,Cv,Ao,X,ID,FD,Sv,DD,vv,kv,AD,gn,zu,Fi,Ge=ge(()=>{lr=E(require("fs")),Zt=E(require("path")),hv=require("node:crypto"),gv=require("node:stream"),yv=require("node:stream/promises"),Cv=require("node:util");$();J();F();Si();Z();tt();Ao=T("common.meta"),X=".meta",ID=" ",FD="fold",Sv=/"version"\s*:\s*("(?:\\.|[^"\\])*")/,DD=/^[0-9a-f]{64}$/,vv=["id","revision","size","hash","icon","desc","type","order","creator","createTime","modifier","modifyTime","hidden","subFileType","labels","option","customOption"],kv=["id","revision","size","hash","type","creator","createTime","modifier","modifyTime","subFileType"],AD=new Set(kv),gn=new Map,Fi=class extends Error{constructor(t,n){super(`invalid .meta file: ${t}`);this.filePath=t;this.cause=n;this.name="DotMetaParseError"}}});function Yu(r,e){return Dv.join(ce(r,e),Za)}async function nl(r,e){await rl.promises.mkdir(ce(r,e),{recursive:!0}),await rl.promises.writeFile(Yu(r,e),"","utf8")}async function ol(r,e){await rl.promises.rm(Yu(r,e),{force:!0})}function il(r,e){return ie(Yu(r,e))}var rl,Dv,Za,Di=ge(()=>{rl=E(require("fs")),Dv=E(require("path"));$();Za=".succapp-clone-in-progress"});var Qn,al,Av,Rt,No=ge(()=>{Qn=E(require("fs")),al=E(require("path"));$();Ge();F();J();Di();Di();Av=T("sync.mirror-store"),Rt=class{constructor(e){this.root=e}toLocalPath(e){return ce(this.root,e)}readMeta(e){return je(this.root,e)}readMetaStrict(e){return je(this.root,e,{strict:!0})}async writeMeta(e,t){t?.throwIfAborted(),await Xa(this.root,e,{writeContentInfo:!0})}async writeMetas(e,t){t?.throwIfAborted(),await Mv(this.root,e,{writeContentInfo:!0})}async patchMeta(e,t,n){n?.throwIfAborted(),await Zc(this.root,e,t)}async listDirectChildren(e){try{return(await Qn.promises.readdir(this.toLocalPath(e),{withFileTypes:!0})).filter(n=>n.name!==X&&!n.name.startsWith(".")).map(n=>({path:this.joinRemotePath(e,n.name),isFolder:n.isDirectory()}))}catch(t){if(x(t))return Av.debug(`mirror directory does not exist: ${e}`),[];throw t}}async listDirectMetaChildren(e){let t=await Qa(this.root,this.joinRemotePath(e,X));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 Oo([this.root]);let t=await Promise.all(e.map(async i=>{let a=this.toLocalPath(i);return await ie(a)?a:void 0})),n=t.filter(i=>i!==void 0);return t.length-n.length+await Oo(n)}async exists(e){return ie(this.toLocalPath(e))}markCloneInProgress(e){return nl(this.root,e)}clearCloneInProgress(e){return ol(this.root,e)}isCloneInProgress(e){return il(this.root,e)}async isFolder(e){try{return(await Qn.promises.stat(this.toLocalPath(e))).isDirectory()}catch(t){if(x(t))return Av.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 Qn.promises.rm(this.toLocalPath(e),{force:!0,recursive:!0})}async removeLocalResource(e,t,n){let o;try{o=await Qn.promises.stat(e)}catch(a){if(x(a)){n?.step(1);return}throw a}if(!o.isDirectory()){await Qn.promises.rm(e,{force:!0}),n?.step(1);return}let i=await Qn.promises.readdir(e,{withFileTypes:!0});await Promise.all(i.filter(a=>a.name!==X).map(a=>(n?.throwIfAborted(),this.removeLocalResource(al.join(e,a.name),al.posix.join(t,a.name),n)))),await Qn.promises.rm(e,{force:!0,recursive:!0}),n?.step(1)}removeMeta(e){return Ya(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 ve,be,Ft,jD,Zu,VD,pr,es=ge(()=>{ve=E(require("fs")),be=E(require("path"));$();Ge();J();F();fn();Di();Di();Ft=T("sync.workspace-store"),jD=8,Zu=20,VD=new Set([".git",ln,".agents","node_modules"]),pr=class{constructor(e,t){this.workspaceRoot=e;this.mirror=t}toLocalPath(e){return ce(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 ve.promises.stat(s)}catch(l){if(x(l)||tc(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 Xa(this.workspaceRoot,e)}async patchMeta(e,t,n){n?.throwIfAborted(),await Zc(this.workspaceRoot,e,t)}async deletePath(e,t){t?.throwIfAborted(),t?await this.removeLocalResource(this.toLocalPath(e),e,t):await ve.promises.rm(this.toLocalPath(e),{force:!0,recursive:!0});let n=be.dirname(this.toLocalPath(e));await ie(n)&&await Ya(this.workspaceRoot,e),t?.step(1)}async removeEmptyOrphanDirectory(e){let t=this.toLocalPath(e),n;try{n=await ve.promises.stat(t)}catch(s){if(x(s))return Ft.debug(`orphan cleanup skip missing: remotePath=${e}`),!1;throw s}if(!n.isDirectory())return Ft.debug(`orphan cleanup skip non-directory: remotePath=${e}`),!1;let i=(await ve.promises.readdir(t)).filter(s=>s!==X);if(i.length>0)return Ft.debug(`orphan cleanup skip non-empty: remotePath=${e} nonMetaChildren=${i.length} samples=${i.slice(0,5).join("|")}`),!1;await ve.promises.rm(t,{force:!0,recursive:!0});let a=be.dirname(t);return await ie(a)&&await Ya(this.workspaceRoot,e),Ft.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 ie(o)?await Oo([o]):1}catch(a){if(!tc(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),Oo([t]),this.countDirectories(t)]);return Math.max(o+i+a+1,1)}async statCheckoutSource(e){try{return await ve.promises.stat(e)}catch(t){if(x(t))return;throw t}}async copyMirrorContent(e,t){t?.throwIfAborted();let n=this.toLocalPath(e);await ve.promises.mkdir(be.dirname(n),{recursive:!0}),await ve.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 ve.promises.stat(o)).isDirectory();if(Ft.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),Ft.debug(`checkout from mirror done: remotePath=${e} elapsed=${Date.now()-n}ms`);return}await this.copyMirrorContent(e),t?.step(1),Ft.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 ie(n);t&&o?await this.removeLocalResource(n,e,t):await ve.promises.rm(n,{force:!0,recursive:!0}),Ft.debug(`checkout prepared workspace target: remotePath=${e} targetExisted=${o}`)}async checkoutMirrorDirectory(e,t){let n=this.toLocalPath(e),o=new it({maxConcurrency:jD,signal:t?.getAbortSignal()});try{await this.copyMirrorDirectory(e,t,o),await o.waitAll()}catch(a){throw o.cancel(a),await o.waitAll(),a}Ft.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&&Ft.info(`checkout from mirror left workspace-only entries: remotePath=${e} count=${i.length} samples=${i.slice(0,Zu).join("|")}`)}isCloneInProgress(e){return il(this.workspaceRoot,e)}async listResidualEntries(e){let t=be.join(this.mirror.toLocalPath("/"),be.relative(this.workspaceRoot,e)),n=[];return await this.collectResidualEntries(e,t,"",n),n}async collectResidualEntries(e,t,n,o){if(o.length>=Zu)return;let i;try{i=await ve.promises.readdir(e,{withFileTypes:!0})}catch{return}let a;try{a=new Set(await ve.promises.readdir(t))}catch{a=new Set}for(let s of i){if(s.name===X||s.name===Za||o.length>=Zu)continue;let c=n?`${n}/${s.name}`:s.name;if(!a.has(s.name)){o.push(c);continue}s.isDirectory()&&await this.collectResidualEntries(be.join(e,s.name),be.join(t,s.name),c,o)}}async copyMirrorDirectory(e,t,n){let o=this.mirror.toLocalPath(e),i=this.toLocalPath(e);await ve.promises.mkdir(i,{recursive:!0});let a=await ve.promises.readdir(o,{withFileTypes:!0});Ft.debug(`copy mirror dir: remotePath=${e} children=${a.length}`),await Promise.all(a.map(async s=>{if(t?.throwIfAborted(),s.name===Za)return;let c=be.join(o,s.name),l=be.join(i,s.name);if(s.isDirectory()){await this.copyMirrorDirectory(be.posix.join(e,s.name),t,n),t?.step(1);return}await n.addTask(async()=>{t?.throwIfAborted(),await ve.promises.mkdir(be.dirname(l),{recursive:!0}),await ve.promises.copyFile(c,l),s.name!==X&&t?.step(1)})}))}async countExistingResources(e){let t=this.toLocalPath(e);return await ie(t)?Oo([t]):0}async countDirectoryFiles(e,t){let n;try{n=await ve.promises.readdir(e,{withFileTypes:!0})}catch(c){if(x(c)||tc(c))return 0;throw c}let o=0,i=[];for(let c of n)c.name!==X&&(c.isDirectory()?VD.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(be.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(be.posix.dirname(e))}toFolderDotMetaPath(e){return e==="/"?`/${X}`:`${e}/${X}`}async countDirectories(e){let t=await ve.promises.readdir(e,{withFileTypes:!0});return 1+(await Promise.all(t.filter(o=>o.isDirectory()).map(o=>this.countDirectories(be.join(e,o.name))))).reduce((o,i)=>o+i,0)}async removeLocalResource(e,t,n){let o;try{o=await ve.promises.stat(e)}catch(a){if(x(a)){n?.step(1);return}throw a}if(!o.isDirectory()){await ve.promises.rm(e,{force:!0}),n?.step(1);return}let i=await ve.promises.readdir(e,{withFileTypes:!0});Ft.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!==X).map(a=>(n?.throwIfAborted(),this.removeLocalResource(be.join(e,a.name),be.posix.join(t,a.name),n)))),await ve.promises.rm(e,{force:!0,recursive:!0}),n?.step(1)}async copyMirrorMetaInfo(e,t,n){n?.throwIfAborted();let o=await je(this.mirror.root,e);o&&await Xa(this.workspaceRoot,{...o,id:o.id??"",path:e,parentDir:be.posix.dirname(e),name:be.posix.basename(e),isFolder:t})}async listProjectPaths(){try{let e=await ve.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 Ft.debug(`workspace root has no local projects yet: ${this.workspaceRoot}`),[];throw e}}async ensureFolderDotMetas(e,t,n){let o=await ve.promises.readdir(e,{withFileTypes:!0}),i=be.join(e,X);try{await ve.promises.access(i)}catch(a){if(!x(a))throw a;Ft.debug(`create missing folder .meta: ${i}`),await ve.promises.writeFile(i,"{}","utf-8")}t?.step(1),await Promise.all(o.filter(a=>a.isDirectory()).map(a=>this.ensureFolderDotMetas(be.join(e,a.name),t,n?be.posix.join(n,a.name):void 0)))}async hasProjectMetaFile(e){try{let t=be.join(this.workspaceRoot,e,X);return(await ve.promises.stat(t)).isFile()}catch(t){if(x(t))return Ft.debug(`project .meta does not exist: ${e}`),!1;throw t}}}});var Yn,Qe,BD,Ai,em=ge(()=>{Yn=E(require("fs")),Qe=E(require("path"));J();$();Ge();BD=T("sync.file-mutation-baseline"),Ai=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||!re(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,{writeContentInfo:!0}),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 u=s[i];u&&(s[i]={...u,modifyTime:a});return}let c=await je(t,n),l=this.toServerMetaFromExisting(n,c,a);if(!l)return;let p=e.get(o);p||(p={},e.set(o,p)),p[i]=Wt(l)}async applyPhysicalDeletes(){for(let e of this.physicalDeletes)await Yn.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 Yn.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 Yn.promises.mkdir(Qe.dirname(n),{recursive:!0}),await Yn.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,this.toWorkspaceMetaInfo(e)),this.addMetaPatch(this.mirrorMetaPatches,t,n,this.toMirrorMetaInfo(e)),this.authoritativeMetaPaths.add(e.path)}async addBaselineOnlyMetaPatch(e,t,n,o){this.addMetaPatch(e,n.parentDir,n.name,this.toBaselineOnlyMetaInfo(n,await je(t,n.path),o))}toBaselineOnlyMetaInfo(e,t,n){if(!t)return Wt(e,n);let o=Wt(e,n);return{...t,...o.id!==void 0?{id:o.id}:{},...o.revision!==void 0?{revision:o.revision}:{},...o.modifyTime!==void 0?{modifyTime:o.modifyTime}:{},...n?.writeContentInfo&&o.size!==void 0?{size:o.size}:{},...n?.writeContentInfo&&o.hash!==void 0?{hash:o.hash}:{}}}toWorkspaceMetaInfo(e){return Wt(e)}toMirrorMetaInfo(e){return Wt(e,{writeContentInfo:!0})}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 BD.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 Yn.promises.rm(n,{force:!0,recursive:!0}),await Yn.promises.mkdir(Qe.dirname(n),{recursive:!0}),await Yn.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=>re(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 Wo,Oi,tm=ge(()=>{Wo=E(require("path"));F();_();$();Oi=class{constructor(e){this.options=e}async resolve(e,t){let n=Wo.resolve(this.options.workspaceRoot),o=Wo.resolve(e);if(o===n||o.startsWith(n+Wo.sep))return this.requireMetaPath(e);if(Wo.isAbsolute(e)){let i=pe(e);if(await this.isKnownRemoteProjectPath(i,t))return i;throw new Kt("err.sync.pathOutOfScope",{remotePath:e,reason:"notInSyncScope"},{style:"warn"})}return pe(e)}requireMetaPath(e){let t=Vr(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=ze(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)}}});var rm,_i,nm=ge(()=>{rm=E(require("fs"));F();Ge();xi();_i=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??Ju(e.content)}catch(l){return{...t,reason:"invalidContent",errorInfo:l}}let a={...t,currentVersion:i,targetVersion:o};if(zc(i,o))return{...a,reason:"newerVersion"};if(!Hc(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 Nv={};Ed(Nv,{SyncCommandUpgradeMetadata:()=>ts});var om,Xn,Ov,_v,Lv,qD,yn,ts,im=ge(()=>{om=E(require("fs")),Xn=E(require("path"));F();J();D();Ge();fn();$();ft();nm();Ov=8,_v=5,Lv=95,qD=new Set(Cc),yn=T("sync.upgrade-metadata"),ts=class extends Ve{upgrader=new _i({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?(yn.info("metadata version check start: {0}",t),yn.info("scan metadata version files")):(yn.info("metadata upgrade start: {0}",t),yn.info("scan metadata upgrade files")),this.options.dryRun){let s=await this.scanCandidates(e,this.task,{finish:!1,retainOnFinish:!0});return this.task.setMessage(d("workspace.sync.progress.upgradeMeta.checked",s.checked,s.candidates.length)),this.task.finish(),s}this.task.start(_v+Lv,{message:d("workspace.sync.progress.upgradeMeta.apply"),retainOnFinish:!0});let n=this.task.subTaskMonitor(_v),o=this.task.subTaskMonitor(Lv),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),yn.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(d("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 wt(e)}async resolveDefaultTargetPaths(){let e=await this.createWorkspaceStore().listProjectPaths();return wt(new Set(e))}async resolveInputMetaPath(e){if(e==="/")return"/";let t=Vr(this.context.root,e);if(t)return t;if(!(Xn.isAbsolute(e)&&await ie(e))&&e.startsWith("/"))return pe(e)}async scanCandidates(e,t,n={}){let o=new it(Ov),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:d("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),yn.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}yn.info("metadata upgrade apply start: candidates={0}",n),t.start(n,{message:d("workspace.sync.progress.upgradeMeta.apply")});let o=new it(Ov),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=pe(e),o=ce(this.context.root,n);try{if((await om.promises.stat(o)).isDirectory()){(this.options.recursive??!0)&&await this.scanDirectory(n,o,t);return}if(Xn.basename(o)===X)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===X)continue;let s=Xn.join(t,a.name),c=pe(Xn.posix.join(e,a.name));if(a.isDirectory()){qD.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){yn.error("metadata upgrade failed: {0}",e,t)}logMetadataFile(e,t,n){yn.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 cl(r,e,t){if(t.length===0)return[];let n=(im(),Yg(Nv)),{SyncCommandUpgradeMetadata:o}=n;return(await new o(r,{paths:t,dryRun:!0,task:e}).execute()).candidates}async function Bv(r){return jC(r)?GD(r):!1}async function GD(r){let e=jv.createReadStream(r,{encoding:"utf-8"}),t=Vv.createInterface({input:e,crlfDelay:1/0}),n="start",o=0;try{for await(let i of t){let a=$D.exec(i);if(a){n="separator",o=a[1].length;continue}if(n==="start")continue;let s=HD.exec(i);if(n==="separator"&&s?.[1].length===o){n="end";continue}let c=zD.exec(i);if(n==="end"&&c?.[1].length===o)return!0}return!1}finally{t.close(),e.destroy()}}function rs(r){let e=new Set([r.remotePath]);return r.oldRemotePath&&e.add(r.oldRemotePath),[...e]}function ll(r){let e=new Set;for(let t of r)for(let n of rs(t))e.add(n);return[...e]}function qv(r){return wt(new Set(ll(r)))}function $v(r){let e=new Set;for(let t of r)for(let n of rs(t))KD(e,n);return[...e].sort()}function KD(r,e){let t=Li.posix.dirname(e);for(;;){if(r.add(JD(t)),t==="/")return;t=Li.posix.dirname(t)}}function JD(r){return r==="/"?"/"+X:r+"/"+X}function ht(r){return r.type==="added"||r.type==="modified"||r.type==="deleted"||r.type==="renamed"||r.type==="conflict"}function Er(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:ze(r.remotePath)===r.remotePath&&ze(r.oldRemotePath)===r.oldRemotePath}function sm(r){return r.type!=="remoteRenamed"||!r.oldRemotePath?!1:ze(r.remotePath)!==ze(r.oldRemotePath)}function ns(r){let e=r.filter(n=>Er(n)),t=new Set(ll(e.filter(n=>n.type!=="conflict")));return t.size===0?e:e.filter(n=>n.type!=="conflict"||!rs(n).some(o=>t.has(o)))}function sl(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=>re(r.remotePath,t)||!!r.oldRemotePath&&re(r.oldRemotePath,t))}function Ni(r){let e=new Set(r.map(pe));return t=>Wv(t.remotePath,e)||!!t.oldRemotePath&&Wv(t.oldRemotePath,e)}function Wv(r,e){let t=pe(r);for(;;){if(e.has(t))return!0;if(t==="/")return!1;t=Li.posix.dirname(t)}}function Hv(r,e){return e.some(t=>r.remotePath===t||r.oldRemotePath===t)}function pl(r){return[r.type,r.remotePath,r.oldRemotePath??""].join("\0")}function zv(r,e){let t=[];for(let n of e)r.some(o=>QD(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 QD(r,e){return jn(r.remotePath,r.oldRemotePath,e.remotePath,e.oldRemotePath)?YD(r,e):!1}function YD(r,e){return Uv(r)&&Uv(e)||!!r.metaChanged&&!!e.metaChanged||sl(r)||sl(e)}function Uv(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 jv,Li,Vv,$D,HD,zD,Tr=ge(()=>{jv=E(require("fs")),Li=E(require("path")),Vv=E(require("readline"));Ge();Si();$();tr();$D=/^(<{7,})(?:\s.*)?$/,HD=/^(={7,})$/,zD=/^(>{7,})(?:\s.*)?$/});function Gv(r){let e=r.map(o=>o.remotePath),t=e.slice(0,XD),n=e.length-t.length;return n<=0?t.join(", "):`${t.join(", ")} (+${n})`}var lm,os,XD,Wi,Ui,Ut,Ve,ft=ge(()=>{lm=E(require("path"));$();No();es();em();tm();Tr();tr();qr();F();_();J();os=T("sync.command"),XD=3,Wi=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\}$/,"")}},Ui=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??nt.INSTANCE}get workspaceRoot(){return this.context.root}createMirrorStore(){return new Rt(this.mirrorRoot)}createWorkspaceStore(e=this.createMirrorStore()){return new pr(this.workspaceRoot,e)}createPathResolver(e=this.createMirrorStore()){return new Oi({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=>ht(e))}getRemoteSyncChanges(){return this.excludeBlockedProjectRootRenameSubtree(this.context.getSyncChanges().filter(e=>Er(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=>re(i.remotePath,a)||!!i.oldRemotePath&&re(i.oldRemotePath,a)));return os.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 ut("err.sync.projectRootRenameUnsupported",{actionName:t,paths:Gv(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 ut("err.sync.projectUnavailable",{actionName:t,paths:Gv(n),changes:n})}getKnownChangeTargetRemotePaths(e){return ll([...e])}getKnownChangeTargets(e){return new Set(qv([...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=Ni([...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){os.warn(this.createDiagnosticLogMessage(e))}createDiagnosticLogMessage(e){let t=[`sync diagnostic: ${vo(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)}}},_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
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
`+e.stack:""}`;if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return String(e)}}},Ut=class extends Ui{},Ve=class extends Ui{async applyFileMutationResponses(e){let t=this.createMirrorStore(),n=this.createWorkspaceStore(t);await new Ai({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;os.debug(`orphan cleanup start: deletedPaths=${e.length}`);for(let i of e)await this.cleanupAncestorsIfEmpty(lm.posix.dirname(i),o,t,n);os.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)){os.debug(`orphan cleanup stop at tracked: remotePath=${i}`);return}if(!await o.removeEmptyOrphanDirectory(i))return;i=lm.posix.dirname(i)}}}});var Ik=Y((IG,xk)=>{var LA=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 u=Math.abs(s%4-c%4);u==3?l+=u*2:l+=u,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}();xk.exports=LA});var Wm=Y((FG,Fk)=>{var NA=Ik(),WA=function(r){var e=function(t){for(var n=0,o=0;o<r.length;o++)n+=NA(r[o],t.getValue(o));return n};this.calculateDifference=function(t){return e(t)},this.getValue=function(t){return r[t]}};Fk.exports=WA});var Um=Y((DG,Dk)=>{var UA=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}};Dk.exports=UA});var jm=Y((AG,Ak)=>{Ak.exports=function(r){var e=(r&240)>>4&15;return e|=(r&15)<<4&240,e}});var _k=Y((OG,Ok)=>{var Vm=jm(),jA=function(){return function(r){var e=1,t=32,n=function(l){for(var p="",u=0;u<l.length;u++)l[u]<16&&(p+="0"),p+=l[u].toString(16).toUpperCase();return p},o=function(l){for(var p=new Array(e),u=0;u<e;u++)p[u]=Vm(l.getValue()[u]);return n(p)},i=function(l){return n([Vm(l.getValue())])},a=function(l){return n([Vm(l.getValue())])},s=function(l){for(var p=new Array(t),u=0;u<t;u++)p[u]=l.getValue(t-1-u);return n(p)},c="";return c+=o(r.getChecksum()),c+=i(r.getLValue()),c+=a(r.getQ()),c+=s(r.getBody()),c}}();Ok.exports=jA});var Bm=Y((_G,Lk)=>{var VA=_k(),BA=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 VA(this)}};Lk.exports=BA});var qm=Y((LG,Nk)=>{Nk.exports=function(r,e,t){var n=Math.abs(e-r),o=t-n;return Math.min(n,o)}});var $m=Y((NG,Wk)=>{var qA=qm(),$A=function(r){var e=256;this.calculateDifference=function(t){var n=qA(r,t.getValue(),e);return n===0?0:n===1?1:n*12},this.getValue=function(){return r}};Wk.exports=$A});var Hm=Y((WG,jk)=>{var Uk=qm(),HA=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=Uk(this.getQLo(),e.getQLo(),t);o<=1?n+=o:n+=(o-1)*12;var i=Uk(this.getQHi(),e.getQHi(),t);return i<=1?n+=i:n+=(i-1)*12,n},this.getValue=function(){return r}};jk.exports=HA});var Bk=Y((UG,Vk)=>{var zA=Wm(),GA=Um(),KA=Bm(),JA=$m(),QA=Hm(),YA=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 GA(y),this},p=function(y){return this.lValue=new JA(h(y)),this},u=function(y){var C=function(v,w){var f=function(S,k){return(0|S&15)&15|(k&15)<<4};return new QA(f(v,w))};return this.q=new C(y.getQ1Ratio(),y.getQ2Ratio()),this},g=function(y){return this.body=new zA(y),this},m=function(){return new KA(this.checksum,this.lValue,this.q,this.body)},h=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:u,withBody:g,build:m}};Vk.exports=YA});var $k=Y((jG,qk)=>{var XA=Bk(),ZA=function(r,e,t,n){var o=512,i=32,a=function(p){return e[p]>0},s=function(){for(var p=0,u=0;u<i*4;u++)a(u)&&p++;return p>i*2},c=function(){return t>=o},l=function(){for(var p=new Array(i),u=0;u<i;u++){for(var g=0,m=0;m<4;m++){var h=e[4*u+m];n.getThird()<h?g+=3<<m*2:n.getSecond()<h?g+=2<<m*2:n.getFirst()<h&&(g+=1<<m*2)}p[u]=g}return p};this.isProcessedDataTooSimple=function(){return!c()||!s()},this.buildDigest=function(){return new XA().withChecksum(r).withLength(t).withQuartiles(n).withBody(l()).build()}};qk.exports=ZA});var zk=Y((VG,Hk)=>{var eO=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}();Hk.exports=eO});var Jk=Y((BG,Kk)=>{var tO=zk(),Gk=function(r,e,t,n){this.c1=r,this.c2=e,this.c3=t,this.salt=n};Gk.prototype.getHash=function(){return tO([this.salt,this.c1,this.c2,this.c3])};Kk.exports=Gk});var Yk=Y((qG,Qk)=>{var rO=Jk(),nO=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 rO(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,u=(c+3)%r,g=(c+4)%r;return[i(t[c],t[g],t[u],2),i(t[c],t[g],t[p],3),i(t[c],t[u],t[p],5),i(t[c],t[u],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),u=0;u<e;u++){var g=o(s),m=o(l),h=0,y=0;c&&(h=c[u]),u!==0&&(y=p[u-1]),p[u]=i(g,m,h,y)}return p}};Qk.exports=nO});var Zk=Y(($G,Xk)=>{var oO=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]}};Xk.exports=oO});var tw=Y((HG,ew)=>{var iO=$k(),aO=Yk(),sO=Zk(),cO=function(){var r=256,e=function(n,o,i){var a=new sO(o);return new iO(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 aO,c=this,l=function(m){i[m]?i[m]++:i[m]=1},p=0;p<o;p++){var u=n.charCodeAt(p),g=s.getPivot();s.put(u),a=s.getChecksum(g,a),s.getTripletHashes(g).forEach(l)}return e(o,i,a)};return t}();ew.exports=cO});var nw=Y((zG,rw)=>{var ql=function(r){this.name="InsufficientComplexityError",this.message=r,this.stack=new Error().stack};ql.prototype=Object.create(Error.prototype);ql.prototype.constructor=ql;rw.exports=ql});var iw=Y((GG,ow)=>{var lO=tw(),pO=nw();ow.exports=function(r){var e=lO(r);if(e.isProcessedDataTooSimple())throw new pO("Input data hasn't enough complexity");return e.buildDigest().toString()}});var sw=Y((KG,aw)=>{var dO=Wm(),uO=Um(),mO=Bm(),fO=$m(),hO=Hm(),zm=jm(),gO=function(){var r=32,e,t,n,o,i=function(m){var h=s(m),y=0;return c(h[y++]),l(h[y++]),p(h[y++]),u(g(h,y)),this},a=function(){return new mO(e,t,n,o)},s=function(m){for(var h=new Array(m.length/2),y=0;y<m.length;y+=2)h[y/2]=parseInt(m.substring(y,y+2),16);return h},c=function(m){e=new uO([zm(m)])},l=function(m){t=new fO([zm(m)])},p=function(m){n=new hO([zm(m)])},u=function(m){for(var h=new Array(m.length),y=0;y<m.length;y++)h[y]=m[m.length-1-y];o=new dO(h)},g=function(m,h){return m.slice(h,m.length)};return{withHash:i,build:a}};aw.exports=gO});var lP=Y((j4,Rp)=>{function nP(r){return Array.isArray(r)?r:[r]}var bL=void 0,hf="",tP=" ",ff="\\",EL=/^\s+$/,TL=/(?:[^\\]|^)\\$/,ML=/^\\!/,xL=/^\\#/,IL=/\r?\n/g,FL=/^\.{0,2}\/|^\.{1,2}$/,DL=/\/$/,Yi="/",oP="node-ignore";typeof Symbol<"u"&&(oP=Symbol.for("node-ignore"));var iP=oP,Xi=(r,e,t)=>(Object.defineProperty(r,e,{value:t}),t),AL=/([0-z])-([0-z])/g,aP=()=>!1,OL=r=>r.replace(AL,(e,t,n)=>t.charCodeAt(0)<=n.charCodeAt(0)?e:hf),_L=r=>{let{length:e}=r;return r.slice(0,e-e%2)},LL=[[/^\uFEFF/,()=>hf],[/((?:\\\\)*?)(\\?\s+)$/,(r,e,t)=>e+(t.indexOf("\\")===0?tP:hf)],[/(\\+?)\s/g,(r,e)=>{let{length:t}=e;return e.slice(0,t-t%2)+tP}],[/[\\$.|*+(){^]/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,()=>ff],[/\\\\/g,()=>ff],[/(\\)?\[([^\]/]*?)(\\*)($|\])/g,(r,e,t,n,o)=>e===ff?`\\[${t}${_L(n)}${o}`:o==="]"&&n.length%2===0?`[${OL(t)}${n}]`:"[]"],[/(?:[^*])$/,r=>/\/$/.test(r)?`${r}$`:`${r}(?=$|\\/$)`]],NL=/(^|\\\/)?\\\*$/,xs="regex",wp="checkRegex",rP="_",WL={[xs](r,e){return`${e?`${e}[^/]+`:"[^/]*"}(?=$|\\/$)`},[wp](r,e){return`${e?`${e}[^/]*`:"[^/]*"}(?=$|\\/$)`}},UL=r=>LL.reduce((e,[t,n])=>e.replace(t,n.bind(r)),r),Pp=r=>typeof r=="string",jL=r=>r&&Pp(r)&&!EL.test(r)&&!TL.test(r)&&r.indexOf("#")!==0,VL=r=>r.split(IL).filter(Boolean),gf=class{constructor(e,t,n,o,i,a){this.pattern=e,this.mark=t,this.negative=i,Xi(this,"body",n),Xi(this,"ignoreCase",o),Xi(this,"regexPrefix",a)}get regex(){let e=rP+xs;return this[e]?this[e]:this._make(xs,e)}get checkRegex(){let e=rP+wp;return this[e]?this[e]:this._make(wp,e)}_make(e,t){let n=this.regexPrefix.replace(NL,WL[e]),o=this.ignoreCase?new RegExp(n,"i"):new RegExp(n);return Xi(this,t,o)}},BL=({pattern:r,mark:e},t)=>{let n=!1,o=r;o.indexOf("!")===0&&(n=!0,o=o.substr(1)),o=o.replace(ML,"!").replace(xL,"#");let i=UL(o);return new gf(r,e,o,t,n,i)},yf=class{constructor(e){this._ignoreCase=e,this._rules=[]}_add(e){if(e&&e[iP]){this._rules=this._rules.concat(e._rules._rules),this._added=!0;return}if(Pp(e)&&(e={pattern:e}),jL(e.pattern)){let t=BL(e,this._ignoreCase);this._added=!0,this._rules.push(t)}}add(e){return this._added=!1,nP(Pp(e)?VL(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?bL:c)});let s={ignored:o,unignored:i};return a&&(s.rule=a),s}},qL=(r,e)=>{throw new e(r)},Rn=(r,e,t)=>Pp(r)?r?Rn.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),sP=r=>FL.test(r);Rn.isNotRelative=sP;Rn.convert=r=>r;var Cf=class{constructor({ignorecase:e=!0,ignoreCase:t=e,allowRelativePaths:n=!1}={}){Xi(this,iP,!0),this._rules=new yf(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&&Rn.convert(e);return Rn(i,e,this._strictPathCheck?qL:aP),this._t(i,t,n,o)}checkIgnore(e){if(!DL.test(e))return this.test(e);let t=e.split(Yi).filter(Boolean);if(t.pop(),t.length){let n=this._t(t.join(Yi)+Yi,this._testCache,!0,t);if(n.ignored)return n}return this._rules.test(e,!1,wp)}_t(e,t,n,o){if(e in t)return t[e];if(o||(o=e.split(Yi).filter(Boolean)),o.pop(),!o.length)return t[e]=this._rules.test(e,n,xs);let i=this._t(o.join(Yi)+Yi,t,n,o);return t[e]=i.ignored?i:this._rules.test(e,n,xs)}ignores(e){return this._test(e,this._ignoreCache,!1).ignored}createFilter(){return e=>!this.ignores(e)}filter(e){return nP(e).filter(this.createFilter())}test(e){return this._test(e,this._testCache,!0)}},Sf=r=>new Cf(r),$L=r=>Rn(r&&Rn.convert(r),r,aP),cP=()=>{let r=t=>/^\\\\\?\\/.test(t)||/["<>|\u0000-\u001F]+/u.test(t)?t:t.replace(/\\/g,"/");Rn.convert=r;let e=/^[a-z]:\//i;Rn.isNotRelative=t=>e.test(t)||sP(t)};typeof process<"u"&&process.platform==="win32"&&cP();Rp.exports=Sf;Sf.default=Sf;Rp.exports.isPathValid=$L;Xi(Rp.exports,Symbol.for("setupWindows"),cP)});var wh=Y((zY,BR)=>{BR.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 Up=Y($R=>{var qR={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 wN(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(qR))$R[r]=wN(qR[r])});var JR=Y((KY,KR)=>{var PN=require("fs"),ct=require("path"),HR=wh(),RN=Up(),bN=typeof process=="object"&&process.platform==="win32",zR=r=>typeof r=="object"&&r!==null,GR=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 qe(r){this.sep=ct.sep,this.fs=PN,zR(r)&&zR(r.fs)&&typeof r.fs.statSync=="function"&&(this.fs=r.fs)}KR.exports=qe;qe.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 RN.FILE_IN_THE_WAY(`"${o}"`)}})}t(r)};qe.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=ct.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};qe.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=ct.dirname(r);i.fs.exists(l,function(p){p||i.makeDir(l),i.fs.open(r,"w",438,function(u,g){u?i.fs.chmod(r,438,function(){i.fs.open(r,"w",438,function(m,h){i.fs.write(h,e,0,e.length,0,function(){i.fs.close(h,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)})})})})})};qe.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=ct.join(n,s),l=e.fs.statSync(c);(!o||o.test(c))&&a.push(ct.normalize(c)+(l.isDirectory()?e.sep:"")),l.isDirectory()&&i&&(a=a.concat(t(c,o,i)))}),a}return t(r,void 0,!0)};qe.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=ct.join(r,s),t.fs.stat(s,function(c,l){if(c)return e(c);l&&(n.push(ct.normalize(s)+(l.isDirectory()?t.sep:"")),l.isDirectory()?t.findFilesAsync(s,function(p,u){if(p)return e(p);n=n.concat(u),--a||e(null,n)}):--a||e(null,n))})})})};qe.prototype.getAttributes=function(){};qe.prototype.setAttributes=function(){};qe.crc32update=function(r,e){return GR[(r^e)&255]^r>>>8};qe.crc32=function(r){typeof r=="string"&&(r=Buffer.from(r,"utf8"));let e=r.length,t=-1;for(let n=0;n<e;)t=qe.crc32update(t,r[n++]);return~t>>>0};qe.methodToString=function(r){switch(r){case HR.STORED:return"STORED ("+r+")";case HR.DEFLATED:return"DEFLATED ("+r+")";default:return"UNSUPPORTED ("+r+")"}};qe.canonical=function(r){if(!r)return"";let e=ct.posix.normalize("/"+r.split("\\").join("/"));return ct.join(".",e)};qe.zipnamefix=function(r){if(!r)return"";let e=ct.posix.normalize("/"+r.split("\\").join("/"));return ct.posix.join(".",e)};qe.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]};qe.sanitize=function(r,e){r=ct.resolve(ct.normalize(r));for(var t=e.split("/"),n=0,o=t.length;n<o;n++){var i=ct.normalize(ct.join(r,t.slice(n,o).join(ct.sep)));if(i.indexOf(r)===0)return i}return ct.normalize(ct.join(r,ct.basename(e)))};qe.toBuffer=function(e,t){return Buffer.isBuffer(e)?e:e instanceof Uint8Array?Buffer.from(e):typeof e=="string"?t(e):Buffer.alloc(0)};qe.readBigUInt64LE=function(r,e){let t=r.readUInt32LE(e);return r.readUInt32LE(e+4)*4294967296+t};qe.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)};qe.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};qe.isWin=bN;qe.crcTable=GR});var YR=Y((JY,QR)=>{var EN=require("path");QR.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=EN.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 ZR=Y((QY,XR)=>{XR.exports={efs:!0,encode:r=>Buffer.from(r,"utf8"),decode:r=>r.toString("utf8")}});var la=Y((YY,ca)=>{ca.exports=JR();ca.exports.Constants=wh();ca.exports.Errors=Up();ca.exports.FileAttr=YR();ca.exports.decoder=ZR()});var tb=Y((XY,eb)=>{var mo=la(),L=mo.Constants;eb.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,u=0,g=0,m=0,h=0;r|=mo.isWin?2560:768,t|=L.FLG_EFS;let y={extraLen:0},C=f=>Math.max(0,f)>>>0,v=f=>Math.max(0,f)&65535,w=f=>Math.max(0,f)&255;return o=mo.fromDate2DOS(new Date),{get made(){return r},set made(f){r=f},get version(){return e},set version(f){e=f},get flags(){return t},set flags(f){t=f},get flags_efs(){return(t&L.FLG_EFS)>0},set flags_efs(f){f?t|=L.FLG_EFS:t&=~L.FLG_EFS},get flags_desc(){return(t&L.FLG_DESC)>0},set flags_desc(f){f?t|=L.FLG_DESC:t&=~L.FLG_DESC},get method(){return n},set method(f){switch(f){case L.STORED:this.version=10;case L.DEFLATED:default:this.version=20}n=f},get time(){return mo.fromDOS2Date(this.timeval)},set time(f){f=new Date(f),this.timeval=mo.fromDate2DOS(f)},get timeval(){return o},set timeval(f){o=C(f)},get timeHighByte(){return w(o>>>8)},get crc(){return i},set crc(f){i=C(f)},get compressedSize(){return a},set compressedSize(f){a=C(f)},get size(){return s},set size(f){s=C(f)},get fileNameLength(){return c},set fileNameLength(f){c=f},get extraLength(){return l},set extraLength(f){l=f},get extraLocalLength(){return y.extraLen},set extraLocalLength(f){y.extraLen=f},get commentLength(){return p},set commentLength(f){p=f},get diskNumStart(){return u},set diskNumStart(f){u=C(f)},get inAttr(){return g},set inAttr(f){g=C(f)},get attr(){return m},set attr(f){m=C(f)},get fileAttr(){return(m||0)>>16&4095},get offset(){return h},set offset(f){h=C(f)},get encrypted(){return(t&L.FLG_ENC)===L.FLG_ENC},get centralHeaderSize(){return L.CENHDR+c+l+p},get realDataOffset(){return h+L.LOCHDR+y.fnameLen+y.extraLen},get localHeader(){return y},loadLocalHeaderFromBinary:function(f){var S=f.slice(h,h+L.LOCHDR);if(S.readUInt32LE(0)!==L.LOCSIG)throw mo.Errors.INVALID_LOC();y.version=S.readUInt16LE(L.LOCVER),y.flags=S.readUInt16LE(L.LOCFLG),y.flags_desc=(y.flags&L.FLG_DESC)>0,y.method=S.readUInt16LE(L.LOCHOW),y.time=S.readUInt32LE(L.LOCTIM),y.crc=S.readUInt32LE(L.LOCCRC),y.compressedSize=S.readUInt32LE(L.LOCSIZ),y.size=S.readUInt32LE(L.LOCLEN),y.fnameLen=S.readUInt16LE(L.LOCNAM),y.extraLen=S.readUInt16LE(L.LOCEXT);let k=h+L.LOCHDR+y.fnameLen,b=k+y.extraLen;return f.slice(k,b)},loadFromBinary:function(f){if(f.length!==L.CENHDR||f.readUInt32LE(0)!==L.CENSIG)throw mo.Errors.INVALID_CEN();r=f.readUInt16LE(L.CENVEM),e=f.readUInt16LE(L.CENVER),t=f.readUInt16LE(L.CENFLG),n=f.readUInt16LE(L.CENHOW),o=f.readUInt32LE(L.CENTIM),i=f.readUInt32LE(L.CENCRC),a=f.readUInt32LE(L.CENSIZ),s=f.readUInt32LE(L.CENLEN),c=f.readUInt16LE(L.CENNAM),l=f.readUInt16LE(L.CENEXT),p=f.readUInt16LE(L.CENCOM),u=f.readUInt16LE(L.CENDSK),g=f.readUInt16LE(L.CENATT),m=f.readUInt32LE(L.CENATX),h=f.readUInt32LE(L.CENOFF)},localHeaderToBinary:function(){var f=Buffer.alloc(L.LOCHDR);return f.writeUInt32LE(L.LOCSIG,0),f.writeUInt16LE(e,L.LOCVER),f.writeUInt16LE(t,L.LOCFLG),f.writeUInt16LE(n,L.LOCHOW),f.writeUInt32LE(o,L.LOCTIM),f.writeUInt32LE(i,L.LOCCRC),f.writeUInt32LE(a,L.LOCSIZ),f.writeUInt32LE(s,L.LOCLEN),f.writeUInt16LE(c,L.LOCNAM),f.writeUInt16LE(y.extraLen,L.LOCEXT),f},centralHeaderToBinary:function(){var f=Buffer.alloc(L.CENHDR+c+l+p);return f.writeUInt32LE(L.CENSIG,0),f.writeUInt16LE(r,L.CENVEM),f.writeUInt16LE(e,L.CENVER),f.writeUInt16LE(t,L.CENFLG),f.writeUInt16LE(n,L.CENHOW),f.writeUInt32LE(o,L.CENTIM),f.writeUInt32LE(i,L.CENCRC),f.writeUInt32LE(a,L.CENSIZ),f.writeUInt32LE(s,L.CENLEN),f.writeUInt16LE(c,L.CENNAM),f.writeUInt16LE(l,L.CENEXT),f.writeUInt16LE(p,L.CENCOM),f.writeUInt16LE(u,L.CENDSK),f.writeUInt16LE(g,L.CENATT),f.writeUInt32LE(m,L.CENATX),f.writeUInt32LE(h,L.CENOFF),f},toJSON:function(){let f=function(S){return S+" bytes"};return{made:r,version:e,flags:t,method:mo.methodToString(n),time:this.time,crc:"0x"+i.toString(16).toUpperCase(),compressedSize:f(a),size:f(s),fileNameLength:f(c),extraLength:f(l),commentLength:f(p),diskNumStart:u,inAttr:g,attr:m,offset:h,centralHeaderSize:f(L.CENHDR+c+l+p)}},toString:function(){return JSON.stringify(this.toJSON(),null," ")}}}});var nb=Y((ZY,rb)=>{var pa=la(),Le=pa.Constants;rb.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 Le.ENDHDR+o},loadFromBinary:function(i){if((i.length!==Le.ENDHDR||i.readUInt32LE(0)!==Le.ENDSIG)&&(i.length<Le.ZIP64HDR||i.readUInt32LE(0)!==Le.ZIP64SIG))throw pa.Errors.INVALID_END();i.readUInt32LE(0)===Le.ENDSIG?(r=i.readUInt16LE(Le.ENDSUB),e=i.readUInt16LE(Le.ENDTOT),t=i.readUInt32LE(Le.ENDSIZ),n=i.readUInt32LE(Le.ENDOFF),o=i.readUInt16LE(Le.ENDCOM)):(r=pa.readBigUInt64LE(i,Le.ZIP64SUB),e=pa.readBigUInt64LE(i,Le.ZIP64TOT),t=pa.readBigUInt64LE(i,Le.ZIP64SIZE),n=pa.readBigUInt64LE(i,Le.ZIP64OFF),o=0)},toBinary:function(){var i=Buffer.alloc(Le.ENDHDR+o);return i.writeUInt32LE(Le.ENDSIG,0),i.writeUInt32LE(0,4),i.writeUInt16LE(r,Le.ENDSUB),i.writeUInt16LE(e,Le.ENDTOT),i.writeUInt32LE(t,Le.ENDSIZ),i.writeUInt32LE(n,Le.ENDOFF),i.writeUInt16LE(o,Le.ENDCOM),i.fill(" ",Le.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 Rh=Y(Ph=>{Ph.EntryHeader=tb();Ph.MainHeader=nb()});var ib=Y((tX,ob)=>{ob.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 sb=Y((rX,ab)=>{var TN=+(process.versions?process.versions.node:"").split(".")[0]||0;ab.exports=function(r,e){var t=require("zlib");let n=TN>=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 u=a[p];u.copy(c,l),l+=u.length}o&&o(c)}),i.end(r)}}}});var ub=Y((nX,db)=>{"use strict";var{randomFillSync:cb}=require("crypto"),MN=Up(),xN=new Uint32Array(256).map((r,e)=>{for(let t=0;t<8;t++)e&1?e=e>>>1^3988292384:e>>>=1;return e>>>0}),pb=(r,e)=>Math.imul(r,e)>>>0,lb=(r,e)=>xN[(r^e)&255]^r>>>8,Ns=()=>typeof cb=="function"?cb(Buffer.alloc(12)):Ns.node();Ns.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 jp={genSalt:Ns};function Vp(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])}Vp.prototype.updateKeys=function(r){let e=this.keys;return e[0]=lb(e[0],r),e[1]+=e[0]&255,e[1]=pb(e[1],134775813)+1,e[2]=lb(e[2],e[1]>>>24),r};Vp.prototype.next=function(){let r=(this.keys[2]|2)>>>0;return pb(r,r^1)>>8&255};function IN(r){let e=new Vp(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 FN(r){let e=new Vp(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 DN(r,e,t){if(!r||!Buffer.isBuffer(r)||r.length<12)return Buffer.alloc(0);let n=IN(t),o=n(r.slice(0,12)),i=(e.flags&8)===8?e.timeHighByte:e.crc>>>24;if(o[11]!==i)throw MN.WRONG_PASSWORD();return n(r.slice(12))}function AN(r){Buffer.isBuffer(r)&&r.length>=12?jp.genSalt=function(){return r.slice(0,12)}:r==="node"?jp.genSalt=Ns.node:jp.genSalt=Ns}function ON(r,e,t,n=!1){r==null&&(r=Buffer.alloc(0)),Buffer.isBuffer(r)||(r=Buffer.from(r.toString()));let o=FN(t),i=jp.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)}db.exports={decrypt:DN,encrypt:ON,_salter:AN}});var mb=Y(Bp=>{Bp.Deflater=ib();Bp.Inflater=sb();Bp.ZipCrypto=ub()});var Eh=Y((iX,fb)=>{var he=la(),_N=Rh(),$e=he.Constants,bh=mb();fb.exports=function(r,e){var t=new _N.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,u=typeof p.decoder=="object"?p.decoder:he.decoder;l=u.hasOwnProperty("efs")?u.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(f){if(!t.flags_desc&&!t.localHeader.flags_desc){if(he.crc32(f)!==t.localHeader.crc)return!1}else{let S={},k=t.realDataOffset+t.compressedSize;if(e.readUInt32LE(k)==$e.LOCSIG||e.readUInt32LE(k)==$e.CENSIG)throw he.Errors.DESCRIPTOR_NOT_EXIST();if(e.readUInt32LE(k)==$e.EXTSIG)S.crc=e.readUInt32LE(k+$e.EXTCRC),S.compressedSize=e.readUInt32LE(k+$e.EXTSIZ),S.size=e.readUInt32LE(k+$e.EXTLEN);else if(e.readUInt16LE(k+12)===19280)S.crc=e.readUInt32LE(k+$e.EXTCRC-4),S.compressedSize=e.readUInt32LE(k+$e.EXTSIZ-4),S.size=e.readUInt32LE(k+$e.EXTLEN-4);else throw he.Errors.DESCRIPTOR_UNKNOWN();if(S.compressedSize!==t.compressedSize||S.size!==t.size||S.crc!==t.crc)throw he.Errors.DESCRIPTOR_FAULTY();if(he.crc32(f)!==S.crc)return!1}return!0}function h(f,S,k){if(typeof S>"u"&&typeof f=="string"&&(k=f,f=void 0),i)return f&&S&&S(Buffer.alloc(0),he.Errors.DIRECTORY_CONTENT_ERROR()),Buffer.alloc(0);var b=g();if(b.length===0)return f&&S&&S(b),b;if(t.encrypted){if(typeof k!="string"&&!Buffer.isBuffer(k))throw he.Errors.INVALID_PASS_PARAM();b=bh.ZipCrypto.decrypt(b,t,k)}var P=Buffer.alloc(t.size);switch(t.method){case he.Constants.STORED:if(b.copy(P),m(P))return f&&S&&S(P),P;throw f&&S&&S(P,he.Errors.BAD_CRC()),he.Errors.BAD_CRC();case he.Constants.DEFLATED:var Q=new bh.Inflater(b,t.size);if(f)Q.inflateAsync(function(M){M.copy(M,0),S&&(m(M)?S(M):S(M,he.Errors.BAD_CRC()))});else{if(Q.inflate(P).copy(P,0),!m(P))throw he.Errors.BAD_CRC(`"${u.decode(n)}"`);return P}break;default:throw f&&S&&S(Buffer.alloc(0),he.Errors.UNKNOWN_METHOD()),he.Errors.UNKNOWN_METHOD()}}function y(f,S){if((!a||!a.length)&&Buffer.isBuffer(e))return f&&S&&S(g()),g();if(a.length&&!i){var k;switch(t.method){case he.Constants.STORED:return t.compressedSize=t.size,k=Buffer.alloc(a.length),a.copy(k),f&&S&&S(k),k;default:case he.Constants.DEFLATED:var b=new bh.Deflater(a);if(f)b.deflateAsync(function(Q){k=Buffer.alloc(Q.length),t.compressedSize=Q.length,Q.copy(k),S&&S(k)});else{var P=b.deflate();return t.compressedSize=P.length,P}b=null;break}}else if(f&&S)S(Buffer.alloc(0));else return Buffer.alloc(0)}function C(f,S){return he.readBigUInt64LE(f,S)}function v(f){try{for(var S=0,k,b,P;S+4<f.length;)k=f.readUInt16LE(S),S+=2,b=f.readUInt16LE(S),S+=2,P=f.slice(S,S+b),S+=b,$e.ID_ZIP64===k&&w(P)}catch{throw he.Errors.EXTRA_FIELD_PARSE_ERROR()}}function w(f){var S,k,b,P;f.length>=$e.EF_ZIP64_SCOMP&&(S=C(f,$e.EF_ZIP64_SUNCOMP),t.size===$e.EF_ZIP64_OR_32&&(t.size=S)),f.length>=$e.EF_ZIP64_RHO&&(k=C(f,$e.EF_ZIP64_SCOMP),t.compressedSize===$e.EF_ZIP64_OR_32&&(t.compressedSize=k)),f.length>=$e.EF_ZIP64_DSN&&(b=C(f,$e.EF_ZIP64_RHO),t.offset===$e.EF_ZIP64_OR_32&&(t.offset=b)),f.length>=$e.EF_ZIP64_DSN+4&&(P=f.readUInt32LE($e.EF_ZIP64_DSN),t.diskNumStart===$e.EF_ZIP64_OR_16&&(t.diskNumStart=P))}return{get entryName(){return u.decode(n)},get rawEntryName(){return n},set entryName(f){n=he.toBuffer(f,u.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(f){s=f,t.extraLength=f.length,v(f)},get comment(){return u.decode(o)},set comment(f){if(o=he.toBuffer(f,u.encode),t.commentLength=o.length,o.length>65535)throw he.Errors.COMMENT_TOO_LONG()},get name(){var f=u.decode(n);return i?f.substr(f.length-1).split("/").pop():f.split("/").pop()},get isDirectory(){return i},getCompressedData:function(){return y(!1,null)},getCompressedDataAsync:function(f){y(!0,f)},setData:function(f){a=he.toBuffer(f,he.decoder.encode),!i&&a.length?(t.size=a.length,t.method=he.Constants.DEFLATED,t.crc=he.crc32(f),t.changed=!0):t.method=he.Constants.STORED},getData:function(f){return t.changed?a:h(!1,null,f)},getDataAsync:function(f,S){t.changed?f(a):h(!0,f,S)},set attr(f){t.attr=f},get attr(){return t.attr},set header(f){t.loadFromBinary(f)},get header(){return t},packCentralHeader:function(){t.flags_efs=this.efs,t.extraLength=s.length;var f=t.centralHeaderToBinary(),S=he.Constants.CENHDR;return n.copy(f,S),S+=n.length,s.copy(f,S),S+=t.extraLength,o.copy(f,S),f},packLocalHeader:function(){let f=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,f),f+=S.length,n.copy(k,f),f+=n.length,c.copy(k,f),f+=c.length,k},toJSON:function(){let f=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:f(e),data:f(a)}},toString:function(){return JSON.stringify(this.toJSON(),null," ")}}}});var yb=Y((aX,gb)=>{var hb=Eh(),LN=Rh(),Ct=la();gb.exports=function(r,e){var t=[],n={},o=Buffer.alloc(0),i=new LN.MainHeader,a=!1,s=null;let c=new Set,l=e,{noSort:p,decoder:u}=l;r?h(l.readEntries):a=!0;function g(){let C=new Set;for(let v of Object.keys(n)){let w=v.split("/");if(w.pop(),!!w.length)for(let f=0;f<w.length;f++){let S=w.slice(0,f+1).join("/")+"/";C.add(S)}}for(let v of C)if(!(v in n)){let w=new hb(l);w.entryName=v,w.attr=16,w.temporary=!0,t.push(w),n[w.entryName]=w,c.add(w)}}function m(){if(a=!0,n={},i.diskEntries>(r.length-i.offset)/Ct.Constants.CENHDR)throw Ct.Errors.DISK_ENTRY_TOO_LARGE();t=new Array(i.diskEntries);for(var C=i.offset,v=0;v<t.length;v++){var w=C,f=new hb(l,r);f.header=r.slice(w,w+=Ct.Constants.CENHDR),f.entryName=r.slice(w,w+=f.header.fileNameLength),f.header.extraLength&&(f.extra=r.slice(w,w+=f.header.extraLength)),f.header.commentLength&&(f.comment=r.slice(w,w+f.header.commentLength)),C+=f.header.centralHeaderSize,t[v]=f,n[f.entryName]=f}c.clear(),g()}function h(C){var v=r.length-Ct.Constants.ENDHDR,w=Math.max(0,v-65535),f=w,S=r.length,k=-1,b=0;for((typeof l.trailingSpace=="boolean"?l.trailingSpace:!1)&&(w=0),v;v>=f;v--)if(r[v]===80){if(r.readUInt32LE(v)===Ct.Constants.ENDSIG){k=v,b=v,S=v+Ct.Constants.ENDHDR,f=v-Ct.Constants.END64HDR;continue}if(r.readUInt32LE(v)===Ct.Constants.END64SIG){f=w;continue}if(r.readUInt32LE(v)===Ct.Constants.ZIP64SIG){k=v,S=v+Ct.readBigUInt64LE(r,v+Ct.Constants.ZIP64SIZE)+Ct.Constants.ZIP64LEAD;break}}if(k==-1)throw Ct.Errors.INVALID_FORMAT();i.loadFromBinary(r.slice(k,S)),i.commentLength&&(o=r.slice(b+Ct.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 u.decode(o)},set comment(C){o=Ct.toBuffer(C,u.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 w=n[C];this.getEntryChildren(w,v).map(S=>S.entryName).forEach(this.deleteEntry)},deleteEntry:function(C){a||m();let v=n[C],w=t.indexOf(v);w>=0&&(t.splice(w,1),delete n[C],i.totalEntries=t.length)},getEntryChildren:function(C,v=!0){if(a||m(),typeof C=="object")if(C.isDirectory&&v){let w=[],f=C.entryName;for(let S of t)S.entryName.startsWith(f)&&w.push(S);return w}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=[],w=0,f=0;i.size=0,i.offset=0;let S=0;for(let P of this.entries){let Q=P.getCompressedData();P.header.offset=f;let M=P.packLocalHeader(),z=M.length+Q.length;f+=z,C.push(M),C.push(Q);let j=P.packCentralHeader();v.push(j),i.size+=j.length,w+=z+j.length,S++}w+=i.mainHeaderSize,i.offset=f,i.totalEntries=S,f=0;let k=Buffer.alloc(w);for(let P of C)P.copy(k,f),f+=P.length;for(let P of v)P.copy(k,f),f+=P.length;let b=i.toBinary();return o&&o.copy(b,Ct.Constants.ENDHDR),b.copy(k,f),r=k,a=!1,k},toAsyncBuffer:function(C,v,w,f){try{a||m(),y();let S=[],k=[],b=0,P=0,Q=0;i.size=0,i.offset=0;let M=function(z){if(z.length>0){let j=z.shift(),ee=j.entryName+j.extra.toString();w&&w(ee),j.getCompressedDataAsync(function(V){f&&f(ee),j.header.offset=P;let q=j.packLocalHeader(),K=q.length+V.length;P+=K,S.push(q),S.push(V);let oe=j.packCentralHeader();k.push(oe),i.size+=oe.length,b+=K+oe.length,Q++,M(z)})}else{b+=i.mainHeaderSize,i.offset=P,i.totalEntries=Q,P=0;let j=Buffer.alloc(b);S.forEach(function(V){V.copy(j,P),P+=V.length}),k.forEach(function(V){V.copy(j,P),P+=V.length});let ee=i.toBinary();o&&o.copy(ee,Ct.Constants.ENDHDR),ee.copy(j,P),r=j,a=!1,C(j)}};M(Array.from(this.entries))}catch(S){v(S)}}}}});var vb=Y((sX,Sb)=>{var We=la(),Ne=require("path"),NN=Eh(),WN=yb(),Yo=(...r)=>We.findLast(r,e=>typeof e=="boolean"),Cb=(...r)=>We.findLast(r,e=>typeof e=="string"),UN=(...r)=>We.findLast(r,e=>typeof e=="function"),jN={noSort:!1,readEntries:!1,method:We.Constants.NONE,fs:null};Sb.exports=function(r,e){let t=null,n=Object.assign(Object.create(null),jN);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=We.Constants.BUFFER,r=void 0)),Object.assign(n,e);let o=new We(n);if((typeof n.decoder!="object"||typeof n.decoder.encode!="function"||typeof n.decoder.decode!="function")&&(n.decoder=We.decoder),r&&typeof r=="string")if(o.fs.existsSync(r))n.method=We.Constants.FILE,n.filename=r,t=o.fs.readFileSync(r);else throw We.Errors.INVALID_FILENAME();let i=new WN(t,n),{canonical:a,sanitize:s,zipnamefix:c}=We;function l(m){if(m&&i){var h;if(typeof m=="string"&&(h=i.getEntry(Ne.posix.normalize(m))),typeof m=="object"&&typeof m.entryName<"u"&&typeof m.header<"u"&&(h=i.getEntry(m.entryName)),h)return h}return null}function p(m){let{join:h,normalize:y,sep:C}=Ne.posix;return h(Ne.isAbsolute(m)?"/":".",y(C+m.split("\\").join(C)+C))}function u(m){return m instanceof RegExp?function(h){return function(y){return h.test(y)}}(m):typeof m!="function"?()=>!0:m}let g=(m,h)=>{let y=h.slice(-1);return y=y===o.sep?o.sep:"",Ne.relative(m,h)+y};return{readFile:function(m,h){var y=l(m);return y&&y.getData(h)||null},childCount:function(m){let h=l(m);if(h)return i.getChildCount(h)},readFileAsync:function(m,h){var y=l(m);y?y.getDataAsync(h):h(null,"getEntry failed for:"+m)},readAsText:function(m,h){var y=l(m);if(y){var C=y.getData();if(C&&C.length)return C.toString(h||"utf8")}return""},readAsTextAsync:function(m,h,y){var C=l(m);C?C.getDataAsync(function(v,w){if(w){h(v,w);return}v&&v.length?h(v.toString(y||"utf8")):h("")}):h("")},deleteFile:function(m,h=!0){var y=l(m);y&&i.deleteFile(y.entryName,h)},deleteEntry:function(m){var h=l(m);h&&i.deleteEntry(h.entryName)},addZipComment:function(m){i.comment=m},getZipComment:function(){return i.comment||""},addZipEntryComment:function(m,h){var y=l(m);y&&(y.comment=h)},getZipEntryComment:function(m){var h=l(m);return h&&h.comment||""},updateFile:function(m,h){var y=l(m);y&&y.setData(h)},addLocalFile:function(m,h,y,C){if(o.fs.existsSync(m)){h=h?p(h):"";let v=Ne.win32.basename(Ne.win32.normalize(m));h+=y||v;let w=o.fs.statSync(m),f=w.isFile()?o.fs.readFileSync(m):Buffer.alloc(0);w.isDirectory()&&(h+=o.sep),this.addFile(h,f,C,w)}else throw We.Errors.FILE_NOT_FOUND(m)},addLocalFileAsync:function(m,h){m=typeof m=="object"?m:{localPath:m};let y=Ne.resolve(m.localPath),{comment:C}=m,{zipPath:v,zipName:w}=m,f=this;o.fs.stat(y,function(S,k){if(S)return h(S,!1);v=v?p(v):"";let b=Ne.win32.basename(Ne.win32.normalize(y));if(v+=w||b,k.isFile())o.fs.readFile(y,function(P,Q){return P?h(P,!1):(f.addFile(v,Q,C,k),setImmediate(h,void 0,!0))});else if(k.isDirectory())return v+=o.sep,f.addFile(v,Buffer.alloc(0),C,k),setImmediate(h,void 0,!0)})},addLocalFolder:function(m,h,y){if(y=u(y),h=h?p(h):"",m=Ne.normalize(m),o.fs.existsSync(m)){let C=o.findFiles(m),v=this;if(C.length)for(let w of C){let f=Ne.join(h,g(m,w));y(f)&&v.addLocalFile(w,Ne.dirname(f))}}else throw We.Errors.FILE_NOT_FOUND(m)},addLocalFolderAsync:function(m,h,y,C){C=u(C),y=y?p(y):"",m=Ne.normalize(m);var v=this;o.fs.open(m,"r",function(w){if(w&&w.code==="ENOENT")h(void 0,We.Errors.FILE_NOT_FOUND(m));else if(w)h(void 0,w);else{var f=o.findFiles(m),S=-1,k=function(){if(S+=1,S<f.length){var b=f[S],P=g(m,b).split("\\").join("/");P=P.normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/[^\x20-\x7E]/g,""),C(P)?o.fs.stat(b,function(Q,M){Q&&h(void 0,Q),M.isFile()?o.fs.readFile(b,function(z,j){z?h(void 0,z):(v.addFile(y+P,j,"",M),k())}):(v.addFile(y+P+"/",Buffer.alloc(0),"",M),k())}):process.nextTick(()=>{k()})}else h(!0,void 0)};k()}})},addLocalFolderAsync2:function(m,h){let y=this;m=typeof m=="object"?m:{localPath:m},localPath=Ne.resolve(p(m.localPath));let{zipPath:C,filter:v,namefix:w}=m;v instanceof RegExp?v=function(k){return function(b){return k.test(b)}}(v):typeof v!="function"&&(v=function(){return!0}),C=C?p(C):"",w=="latin1"&&(w=k=>k.normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/[^\x20-\x7E]/g,"")),typeof w!="function"&&(w=k=>k);let f=k=>Ne.join(C,w(g(localPath,k))),S=k=>Ne.win32.basename(Ne.win32.normalize(w(k)));o.fs.open(localPath,"r",function(k){k&&k.code==="ENOENT"?h(void 0,We.Errors.FILE_NOT_FOUND(localPath)):k?h(void 0,k):o.findFilesAsync(localPath,function(b,P){if(b)return h(b);P=P.filter(Q=>v(f(Q))),P.length||h(void 0,!1),setImmediate(P.reverse().reduce(function(Q,M){return function(z,j){if(z||j===!1)return setImmediate(Q,z,!1);y.addLocalFileAsync({localPath:M,zipPath:Ne.dirname(f(M)),zipName:S(M)},Q)}},h))})})},addLocalFolderPromise:function(m,h){return new Promise((y,C)=>{this.addLocalFolderAsync2(Object.assign({localPath:m},h),(v,w)=>{v&&C(v),w&&y(this)})})},addFile:function(m,h,y,C){m=c(m);let v=l(m),w=v!=null;w||(v=new NN(n),v.entryName=m),v.comment=y||"";let f=typeof C=="object"&&C instanceof o.fs.Stats;f&&(v.header.time=C.mtime);var S=v.isDirectory?16:0;let k=v.isDirectory?16384:32768;return f?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(h),w||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,h,y,C,v,w){C=Yo(!1,C),v=Yo(!1,v),y=Yo(!0,y),w=Cb(v,w);var f=l(m);if(!f)throw We.Errors.NO_ENTRY();var S=a(f.entryName),k=s(h,w&&!f.isDirectory?w:y?S:Ne.basename(S));if(f.isDirectory){var b=i.getEntryChildren(f);return b.forEach(function(M){if(M.isDirectory)return;var z=M.getData();if(!z)throw We.Errors.CANT_EXTRACT_FILE();var j=a(M.entryName),ee=s(h,y?j:Ne.basename(j));let V=v?M.header.fileAttr:void 0;o.writeFileTo(ee,z,C,V)}),!0}var P=f.getData(i.password);if(!P)throw We.Errors.CANT_EXTRACT_FILE();if(o.fs.existsSync(k)&&!C)throw We.Errors.CANT_OVERRIDE();let Q=v?m.header.fileAttr:void 0;return o.writeFileTo(k,P,C,Q),!0},test:function(m){if(!i)return!1;for(var h in i.entries)try{if(h.isDirectory)continue;var y=i.entries[h].getData(m);if(!y)return!1}catch{return!1}return!0},extractAllTo:function(m,h,y,C){if(y=Yo(!1,y),C=Cb(y,C),h=Yo(!1,h),!i)throw We.Errors.NO_ZIP();i.entries.forEach(function(v){var w=s(m,a(v.entryName));if(v.isDirectory){o.makeDir(w);return}var f=v.getData(C);if(!f)throw We.Errors.CANT_EXTRACT_FILE();let S=y?v.header.fileAttr:void 0;o.writeFileTo(w,f,h,S);try{o.fs.utimesSync(w,v.header.time,v.header.time)}catch{throw We.Errors.CANT_EXTRACT_FILE()}})},extractAllToAsync:function(m,h,y,C){if(C=UN(h,y,C),y=Yo(!1,y),h=Yo(!1,h),!C)return new Promise((k,b)=>{this.extractAllToAsync(m,h,y,function(P){P?b(P):k(this)})});if(!i){C(We.Errors.NO_ZIP());return}m=Ne.resolve(m);let v=k=>s(m,Ne.normalize(a(k.entryName))),w=(k,b)=>new Error(k+': "'+b+'"'),f=[],S=[];i.entries.forEach(k=>{k.isDirectory?f.push(k):S.push(k)});for(let k of f){let b=v(k),P=y?k.header.fileAttr:void 0;try{o.makeDir(b),P&&o.fs.chmodSync(b,P),o.fs.utimesSync(b,k.header.time,k.header.time)}catch{C(w("Unable to create folder",b))}}S.reverse().reduce(function(k,b){return function(P){if(P)k(P);else{let Q=Ne.normalize(a(b.entryName)),M=s(m,Q);b.getDataAsync(function(z,j){if(j)k(j);else if(!z)k(We.Errors.CANT_EXTRACT_FILE());else{let ee=y?b.header.fileAttr:void 0;o.writeFileToAsync(M,z,h,ee,function(V){V||k(w("Unable to write file",M)),o.fs.utimes(M,b.header.time,b.header.time,function(q){q?k(w("Unable to set times",M)):k()})})}})}}},C)()},writeZip:function(m,h){if(arguments.length===1&&typeof m=="function"&&(h=m,m=""),!m&&n.filename&&(m=n.filename),!!m){var y=i.compressToBuffer();if(y){var C=o.writeFileTo(m,y,!0);typeof h=="function"&&h(C?null:new Error("failed"),"")}}},writeZipPromise:function(m,h){let{overwrite:y,perm:C}=Object.assign({overwrite:!0},h);return new Promise((v,w)=>{!m&&n.filename&&(m=n.filename),m||w("ADM-ZIP: ZIP File Name Missing"),this.toBufferPromise().then(f=>{let S=k=>k?v(k):w("ADM-ZIP: Wasn't able to write zip file");o.writeFileToAsync(m,f,y,C,S)},w)})},toBufferPromise:function(){return new Promise((m,h)=>{i.toAsyncBuffer(m,h)})},toBuffer:function(m,h,y,C){return typeof m=="function"?(i.toAsyncBuffer(m,h,y,C),null):i.compressToBuffer()}}}});var wj={};Ed(wj,{runCli:()=>gM});module.exports=Yg(wj);var hM=E(require("path"));var et=class{constructor(e,t,n){this.id=e;this.payload=t;this.source=n}};var Sa=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 et("event.listener.changed",{id:e,hasListeners:t},this))}};tr();var oi=(n=>(n.IDE="ide",n.CLI="cli",n.AUTO_SYNC="auto-sync",n))(oi||{}),In="5.0.5",wM=`succapp@${In}`;function Td(r){return{source:r,agentVersion:wM}}var PM=Td("ide"),Xg=PM;function Zg(r){Xg=r}function Fn(){return Xg}D();J();var yi=E(require("fs")),Vn=E(require("path")),RC=require("crypto");var wa=["trace","debug","info","warn","error"];var iy={trace:0,debug:1,info:2,warn:3,error:4},ay=["TRACE","DEBUG","INFO","WARN","ERROR"],_M=new Set(wa);function LM(r){return typeof r=="string"&&_M.has(r)}function si(r){let e=r?.trim().toLowerCase();return LM(e)?e:void 0}var Zd=E(require("os")),Oa=E(require("path"));var Gt={workspace:"SUCCAPP_WORKSPACE",server:"SUCCAPP_SERVER",json:"SUCCAPP_JSON",logLevel:"SUCCAPP_LOG_LEVEL",locale:"SUCCAPP_LOCALE",noUpdateCheck:"SUCCAPP_NO_UPDATE_CHECK",updateCheckTtlSeconds:"SUCCAPP_UPDATE_CHECK_TTL_SECONDS",updateCheckRegistry:"SUCCAPP_UPDATE_CHECK_REGISTRY"},Qs={lcAll:"LC_ALL",lcMessages:"LC_MESSAGES",lang:"LANG"};function Pe(r){return r&&r.trim()?r:void 0}function ci(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 Ys(r,e=void 0){if(r===void 0)return e;let t=r.trim();return t===""?e:t==="1"||An(t,"true")||An(t,"yes")||An(t,"on")?!0:t==="0"||An(t,"false")||An(t,"no")||An(t,"off")?!1:e}function An(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=sy(r.charCodeAt(t)),o=sy(e.charCodeAt(t));if(n!==o)return!1}return!0}function Lr(r){let e=0;for(let t of r){let n=t.codePointAt(0);n===void 0||NM(n)||(e+=WM(n)?2:1)}return e}function li(r,e){return`${r}${" ".repeat(Math.max(0,e-Lr(r)))}`}function cy(r){return r.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function Fd(r){return Buffer.from(r).toString("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function NM(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 WM(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 sy(r){return r>=65&&r<=90?r+32:r}function ly(r){return Pe(r[Gt.locale])??Pe(r[Qs.lcAll])??Pe(r[Qs.lcMessages])??Pe(r[Qs.lang])}var Nr=[{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"}],Dd=Nr.filter(r=>r.showInTopLevelHelp!==!1);function py(r){return{workspace:r.rawValue("workspace"),server:r.rawValue("server"),json:r.has("json"),quiet:r.has("quiet"),verbose:r.has("verbose"),lockTimeout:r.rawValue("lock-timeout"),logLevel:r.rawValue("log-level"),locale:r.rawValue("locale"),help:r.has("help"),version:r.has("version")}}function nn(r,e){if(r.spec.flags.some(a=>a.name===e))return!0;let n=Nr.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();_();tt();F();async function Nt(){let r=process.stdin,e=[];for await(let t of r)e.push(Ax(t));return Buffer.concat(e).toString("utf8")}async function iC(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=h=>{for(let y of Ox(h)){if(s)break;switch(y){case"\r":case`
|
|
24
|
+
`:case"":g(a,o);break;case"":m(new or,i);break;case"\b":case"\x7F":a=a.slice(0,-1);break;default:a+=y}}},l=h=>{m(h,i)},p=()=>{g(a,o)},u=()=>{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(`
|
|
25
|
+
`)},g=(h,y)=>{s||(s=!0,u(),y(h))},m=(h,y)=>{s||(s=!0,u(),y(h))};e.on("data",c),e.on("error",l),e.on("end",p),e.on("close",p)})}function Ax(r){return typeof r=="string"?Buffer.from(r):Buffer.isBuffer(r)?r:Buffer.from(r)}function Ox(r){return typeof r=="string"?r:Buffer.isBuffer(r)?r.toString("utf8"):r instanceof Uint8Array?Buffer.from(r).toString("utf8"):String(r??"")}$();function uC(r,e="param"){return r.map(t=>Zx(t,e))}function mC(r){let e={};for(let t of r)e[t.key]=t.value;return e}function Se(r){return r.startsWith("-")?r:r.length===1?`-${r}`:`--${r}`}function vc(r,e,t=Yx(r)){let n=gi(r).resolveInput(e);return Qx(n,t)}async function Qx(r,e){if(r.kind==="value")return r.value;if(r.kind==="file")return e.readFileText(r.filePath);if(e.hasInteractiveStdin())throw new R("err.cli.missingInput",{inputId:r.inputId,sources:r.sources});return e.readStdin()}function gi(r){if(!r.parsed)throw new Error("Missing parsed CLI arguments in command context.");return r.parsed}function Yx(r){return{hasInteractiveStdin:()=>process.stdin.isTTY,readFileText:e=>Xx(r,e),readStdin:()=>Nt()}}async function Xx(r,e){let t=He(r.cwd,e);try{return await Da(t)}catch(n){throw x(n)?new R("err.file.notFound",{path:t},{cause:n}):new R("err.cli.invalidReadableFile",{inputId:"inputFile",source:t,path:t},{cause:n})}}function Zx(r,e){let t=Se(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)}}J();Ie();F();_();var rt=(o=>(o.config="config",o.sync="sync",o.inodeCache="inode-cache",o.init="init",o))(rt||{}),bo=Object.values(rt),Aa=0;var eI=T("cli.config"),Eo=86400,tI,fC=[];function hC(r){let e=rI(r);return tI=e.config,fC=e.diagnostics,e.config}function gC(){for(let r of fC)eI.warn(r.message,r.envName,r.value)}function kc(r=process.env){return process.platform==="win32"?Oa.join(r.LOCALAPPDATA||Oa.join(Zd.homedir(),"AppData","Local"),"succapp"):Oa.join(r.XDG_CACHE_HOME||Oa.join(Zd.homedir(),".cache"),"succapp")}function rI(r){let e=r.env??process.env,t=nI(r),n=t.input,o=[];return{config:{workspace:iI(t,"workspace",e[Gt.workspace]),server:aI(t,"server"),envServer:t.hasExplicitValue("server")?void 0:Pe(e[Gt.server]),outputMode:sI(n,e,o),quiet:n.quiet,verbose:n.verbose,lockTimeout:cI(t),logLevel:lI(t,e,o),locale:t.hasExplicitValue("locale")?Pe(n.locale):ly(e)},diagnostics:o}}function nI(r){if(r.args){let e=r.args.globalOptions,t=r.args;return{input:e,hasExplicitValue:n=>oI(t,n),strictExplicitValues:!1}}if(r.input){let e=r.input;return{input:e,hasExplicitValue:t=>e[t]!==void 0,strictExplicitValues:!0}}ii("Either args or input must be provided to initializeCliConfig().")}function oI(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 iI(r,e,t){return Pe(r.hasExplicitValue(e)?r.input[e]:t)}function aI(r,e){return r.hasExplicitValue(e)?Pe(r.input[e]):void 0}function sI(r,e,t){return r.json||yC(Ys,Gt.json,e,t)?"json":"human"}function cI(r){let e=r.input;if(r.hasExplicitValue("lockTimeout")){let t=e.lockTimeout,n=ci(t,Eo);if(n===void 0){if(!r.strictExplicitValues)return Aa;let o=Se("lock-timeout");throw new R("err.cli.invalidNonNegativeIntegerRange",{input:o,option:o,value:t??"",max:Eo})}return n}return Aa}function lI(r,e,t){let n=r.input;if(r.hasExplicitValue("logLevel")){let o=n.logLevel,i=si(o);if(i===void 0){if(!r.strictExplicitValues)return"info";let a=Se("log-level");throw new R("err.cli.invalidChoice",{input:a,option:a,value:o??"",allowedValues:wa})}return i}return n.verbose?"debug":yC(si,Gt.logLevel,e,t)??"info"}function yC(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}tt();var pI=30,dI=2e3,uI=24*60*60*1e3,mI=/^succapp-\d{4}-\d{2}-\d{2}\.log$/,fI=/^succapp-\d{8}T\d{6}\.\d{3}Z-p\d+-[0-9a-f]+\.log$/,wc=class{disabled=!1;levelOrdinal;stream;logFile;constructor(e={}){this.levelOrdinal=iy[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(),ay[e],PC(t),...n.map(PC)].join(" ");this.stream.write(`${o}
|
|
26
|
+
`)}createStream(e){try{let t=yi.createWriteStream(e,{flags:"a"});return t.on("error",()=>{this.disabled=!0}),t}catch{this.disabled=!0;return}}};async function bC(r={}){let e=r.level??"info",t=r.logDir??Vn.join(kc(r.env),"logs"),n=new Date,o=(0,RC.randomBytes)(3).toString("hex");try{await yi.promises.mkdir(t,{recursive:!0});let i=Vn.join(t,yI(n,process.pid,o)),a=new wc({level:e,logFile:i,startupInfo:{runId:o,pid:process.pid,cwd:r.cwd,level:e}});return hI(t,{activeLogFile:i,retentionDays:r.retentionDays,maxFiles:r.maxFiles}).catch(s=>{a.warn("cli log cleanup failed",s)}),a}catch{return new wc({level:e})}}async function hI(r,e={}){let t=await gI(r),n=e.activeLogFile?Vn.resolve(e.activeLogFile):void 0,o=SI(e.retentionDays),i=vI(e.maxFiles),a=Date.now()-o*uI,s=new Set;for(let l of t)Vn.resolve(l.filePath)!==n&&l.mtimeMs<a&&await wC(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(Vn.resolve(l.filePath)===n){c.push(l);continue}await wC(l.filePath)&&s.add(l.filePath)}return{deletedFiles:s.size}}async function gI(r){let e;try{e=await yi.promises.readdir(r,{withFileTypes:!0})}catch(o){if(EC(o,"ENOENT"))return[];throw o}let t=e.filter(o=>o.isFile()).map(o=>({filePath:Vn.join(r,o.name),kind:CI(o.name)})).filter(o=>o.kind!==void 0);return(await Promise.all(t.map(async o=>{let i=await nC(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 yI(r,e,t){return`succapp-${r.toISOString().replace(/[-:]/g,"")}-p${e}-${t}.log`}async function wC(r){try{return await yi.promises.unlink(r),!0}catch(e){if(EC(e,"ENOENT"))return!1;throw e}}function CI(r){if(mI.test(r))return"legacy";if(fI.test(r))return"run"}function SI(r){return r===void 0||!Number.isFinite(r)||r<0?pI:Math.floor(r)}function vI(r){return r===void 0||!Number.isFinite(r)||r<1?dI:Math.floor(r)}function EC(r,e){return typeof r=="object"&&r!==null&&"code"in r&&r.code===e}function PC(r){if(r instanceof Error)return kI(r);if(typeof r=="string")return r;try{return JSON.stringify(r)??String(r)}catch{return String(r)}}function kI(r){return r.stack?r.stack:r.name&&r.message?`${r.name}: ${r.message}`:r.message||String(r)}var MC=E(require("fs")),La=E(require("path"));D();Ie();F();J();Z();var wI=T("cli.localizer"),Pc=class r{constructor(e,t,n){this.defaultBundle=e;this.localeBundle=t;this.unresolvedLocale=n}static async create(e={}){let t=e.bundleDir??bI(),n=await TC(La.join(t,"bundle.l10n.json"))??{},o=PI(e.locale);if(!o)return new r(n,{});let i=La.join(t,`bundle.l10n.${o}.json`),a=await TC(i);return a||wI.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 Js(t)?_r(n,t[0]):_r(n,...t)}};async function TC(r){try{let e=await MC.promises.readFile(r,"utf8"),t=JSON.parse(e);H(W(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 PI(r){let e=RI(r);if(!(!e||e==="en"||e.startsWith("en-")))return e==="zh"?"zh-cn":e}function RI(r){if(!r)return;let e=r.split(".")[0].trim();if(!(!e||e==="C"||e==="POSIX"))return e.replace(/_/g,"-").toLowerCase()}function bI(){return La.resolve(__dirname,"..","..","..","..","l10n")}D();qr();var nu=100,xC=100,Tc=class extends qn{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=TI(t,n,this.message),i=`${o.message??""}:${o.current}:${o.total??""}:${o.percent??""}`;i!==this.lastProgressKey&&(this.lastProgressKey=i,this.output.progress(o,()=>MI(o)))}};function TI(r,e,t){let n=ru(r);if(e===void 0||e<=0)return t?{message:t,current:n}:{current:n};let o=ru(e),i={current:n,total:o,percent:ru(Math.min(n/o,1)*nu)};return t?{message:t,...i}:i}function MI(r){if(r.total!==void 0&&r.percent!==void 0){if(r.percent>=nu)return"";let e=Math.min(Math.max(Math.round(r.percent),0),nu-1);return r.message?d("cli.out.task.progressMessagePercent",r.message,e):d("cli.out.task.progressPercent",e)}return r.message?d("cli.out.task.progressMessageText",r.message,r.current):d("cli.out.task.progressText",r.current)}function ru(r){return Math.round(r*xC)/xC}F();D();Z();function AC(r){return Ma(r)?II(r.category):1}function xI(r){return r instanceof Error?r.message||r.name:vo(r)||d("common.err.unexpected")}function xc(r,e){return Ma(r)?FI(r,e):{code:"error",name:r instanceof Error&&r.name||"Error",message:xI(r),internal:!0,stack:r instanceof Error?r.stack:void 0,cause:_d(r)}}function II(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 FI(r,e){let t=e?_C(r.properties,e):r.properties;return{code:r.errorCode,name:r.name,message:DI(r,t),hint:AI(r,t),details:LI(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 DI(r,e){return OC(r.errorCode,e)??Sy(r)}function OC(r,e){let t=au(e),n=iu(r,e),o=Mt(n,t);if(o){if(n!==r)return o;let s=Mt(`${r}.desc`,t);return s?`${o}
|
|
27
|
+
${s}`:o}let i=n===r?void 0:Mt(r,t);if(!i)return;let a=Mt(`${r}.desc`,t);return a?`${i}
|
|
28
|
+
${a}`:i}function AI(r,e){let t=vy(r);if(t)return t;if(r.errorCode==="err.cli.unknownCommand"){let i=OI(e);if(i)return i}let n=au(e),o=iu(r.errorCode,e);if(o!==r.errorCode){let i=Mt(`${o}.hint`,n);if(i)return i}if(Cr(n.sources)){let i=Mt(`${r.errorCode}.hintWithSources`,n);if(i)return i}return Mt(`${r.errorCode}.hint`,n)}function OI(r){let e=Ic(r.suggestedCommands);if(e.length!==0)return d("err.cli.unknownCommand.suggestion.hint",{commands:_I(e)})}function _I(r){return r.length===1?` '${r[0]}'`:`
|
|
27
29
|
${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,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}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:
|
|
30
|
-
`),s++,l=n,a=14;switch(
|
|
31
|
-
`+" ".repeat(e)),"\r":new Array(
|
|
32
|
-
`+" ".repeat(e))}," ":{"\n":new Array(
|
|
33
|
-
`+" ".repeat(e)),"\r":new Array(
|
|
34
|
-
`+" ".repeat(e))}},
|
|
30
|
+
`)}`}function iu(r,e){let t=Cr(e.reason);return t?`${r}.${t}`:r}function LI(r,e,t){let n=[...BI(e.issues,t),...jI(r.errorCode,e),...qI(e.sqlInfos)];return n.length>0?n:void 0}function _C(r,e){let t=NI(e);return t.size===0?r:{...r,input:ou(r.input,t),option:ou(r.option,t),flag:ou(r.flag,t),sources:IC(r.sources,t),inputs:IC(r.inputs,t)}}function NI(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 ou(r,e){return typeof r=="string"?LC(r,e):r}function IC(r,e){return Array.isArray(r)?r.map(t=>typeof t=="string"?LC(t,e):t):r}function LC(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 WI(r){let e=Ic(r.sourceIds);return e.length===0?[]:e.flatMap(t=>{let n=UI(t,r);return n?[n]:[]})}function UI(r,e){let t=Cr(e.commandName),n=Cr(e.envName)??"SUCCAPP_SERVER";switch(r){case"serverPositional":return t?Mc(d("cli.err.context.exampleCommandUrl",{commandName:t})):d("cli.err.context.exampleUrl");case"serverOption":return t?Mc(d("cli.err.context.exampleCommandServer",{commandName:t})):d("cli.err.context.exampleServerOpt");case"workspaceRemoteAdd":return Mc(d("cli.err.context.workspaceRemoteAdd"));case"environmentServer":return t?Mc(d("cli.err.context.exampleEnvUrl",{envName:n,commandName:t})):d("cli.err.context.text",{envName:n});default:return}}function Mc(r){return`'${r}'`}function jI(r,e){let t=Ic(e.details),n=au(e),o=iu(r,e);if(o!==r){let a=Mt(`${o}.desc`,n);a&&t.push(a)}let i=Cr(e.detailKey);if(i){let a=Mt(`${r}.detail.${i}`,n);a&&t.push(a)}return t}function au(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"?DC(o):o;continue}let i=Ic(o);i.length>0&&(e[n]=n==="sources"?FC(i):i.join(", "))}e.input=VI(r),Object.hasOwn(r,"value")&&(e.value=DC(r.value));let t=WI(r);return t.length>0&&(e.sources=FC(t)),e}function FC(r){return r.length<=1?r[0]??"":r.length===2?d("cli.err.context.sourceListPair",{first:r[0],second:r[1]}):d("cli.err.context.sourceListMany",{head:r.slice(0,-1).join(d("cli.err.context.sourceListSeparator")),tail:r[r.length-1]})}function VI(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?Mt(`cli.input.${o}`)??o:d("cli.input.value")}function DC(r){return r==null||r===""?d("cli.out.value.none"):String(r)}function BI(r,e){return Array.isArray(r)?r.flatMap(t=>{if(!W(t))return[];let n=Cr(t.errorCode);if(!n||!W(t.properties))return[];let o=e?_C(t.properties,e):t.properties,i=OC(n,o);return i?[i]:[]}):[]}function Ic(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 qI(r){return Array.isArray(r)?r.flatMap((e,t)=>$I(e,t)):[]}function $I(r,e){if(!W(r))return[];let t=typeof r.sqlType=="string"?r.sqlType:d("cli.out.value.unknown"),n=typeof r.tableName=="string"?` ${r.tableName}`:"",o=HI(r);return[`#${e} ${t}${n}${o}`]}function HI(r){let e=[];return r.schemaMutation===!0&&e.push(d("cli.cmd.db.exec.schemaMutation")),r.dataMutation===!0&&r.manipulateAllRows===!0&&e.push(d("cli.cmd.db.exec.fullTableData")),e.length?` (${e.join(", ")})`:""}Ie();var Wc=require("crypto");F();_();Z();F();var zI=/\/+$/,GI=/^https?:\/\//i,KI="127.0.0.1",JI="localhost";function su(r){let e;try{e=new URL(r.trim())}catch(t){throw new Zs(r,t)}return e.hostname===KI&&(e.hostname=JI),e.pathname.length>1&&(e.pathname=e.pathname.replace(/\/+$/,"")),e}function Ce(r){return su(r).href.replace(zI,"")}function Je(r,e){let t=su(r),n=su(e);return t.hostname===n.hostname&&t.port===n.port&&t.pathname===n.pathname}function Sr(r){return r!==void 0&&GI.test(r)}F();var To=E(require("node:os"));var QI=2,cu;function NC(){let e=Fn().source==="cli"?"SuccAppCLI":"SuccAppForVSCode";return[`SuccAppDevTool/${QI}`,`(${YI()})`,`${e}/${In}`,`Node.js/${process.versions.node}`].join(" ")}function YI(){return cu||(cu=XI()),cu}function XI(){switch(process.platform){case"darwin":return ZI();case"win32":return`Windows NT ${eF()}; ${tF()}`;case"linux":return`X11; Linux ${rF()}`;default:return WC(`${process.platform}; ${To.arch()}`)||"Unknown OS"}}function ZI(){return"Macintosh; Intel Mac OS X"}function eF(){return/^(\d+\.\d+)/.exec(To.release())?.[1]??"10.0"}function tF(){return To.arch()==="ia32"?"WOW64":"Win64; x64"}function rF(){switch(To.arch()){case"x64":return"x86_64";case"arm64":return"aarch64";default:return WC(To.arch())||"unknown"}}function WC(r){return r.replace(/[^A-Za-z0-9._~; -]/g,"_").trim()}F();_();_n();Z();Si();var du=512;async function Dc(r,e){r.ok||await hF(r,e);let t=await $C(r,e);if(t.trim().length===0)throw uu(e,r,"empty response body");let n=gF(t,e,r);return HC(n,e,r),n}async function qC(r,e){if(!UC(r.headers.get("content-type")??void 0))return;let t=await $C(r,e);if(t.trim().length===0)return;let n;try{n=JSON.parse(t)}catch{return}HC(n,e,r)}async function hF(r,e){if(r.status===401)throw new Ue({serverUrl:e.serverUrl});let t;try{t=await r.text()}catch(n){throw new St(e.url,n instanceof Error?n:void 0)}throw new nr(r.status,t,r.statusText,new Error(`SuccBI HTTP ${r.status} ${r.statusText}: ${e.url}`),r.headers.get("content-type")??void 0)}async function $C(r,e){try{return await r.text()}catch(t){throw uu(e,r,"cannot read response body",t)}}function gF(r,e,t){try{return JSON.parse(r)}catch(n){throw uu(e,t,"response body is not valid JSON",n,r)}}function HC(r,e,t){if(W(r)){if(vF(r))throw yF(r,e,t);if(r.result===!1)throw CF(r,e,t)}}function yF(r,e,t){let n=Ra(r),o=On(n),i=lt(o)??lt(n),a=i??"err.net.invalidResponse",s={...Lt(o),...Lt(n),...mu(e,t),...i?{}:{reason:"missingErrorCode"}};return new me(a,{message:o.message||n.message||a,properties:s,errorType:gr(o)??gr(n),errorDialogStyle:o.errorDialogStyle??n.errorDialogStyle,hintMessage:o.hintMessage??n.hintMessage,locationPath:o.locationPath??n.locationPath,cause:n})}function uu(r,e,t,n,o){return new me("err.net.invalidResponse",{properties:{...mu(r,e),reason:t,responsePreview:zC(o),responseTruncated:o!==void 0&&o.length>du},cause:n})}function CF(r,e,t){let n=SF(r)??"err.net.invalidResponse";return new me(n,{message:typeof r.message=="string"?r.message:n,properties:{...mu(e,t),reason:"failureResult",responsePreview:zC(JSON.stringify(r))}})}function SF(r){if(typeof r.errorCode=="string")return r.errorCode;if(typeof r.code=="string")return r.code}function mu(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 zC(r){if(r===void 0)return;let e=r.trim();if(e.length!==0)return e.length>du?`${e.slice(0,du)}...`:e}function vF(r){return typeof r.errorCode=="string"||typeof r.className=="string"||Array.isArray(r.stack)}async function $n(r,e){try{let t=await fetch(r,{...e,headers:kF(e?.headers)});return t.status>=500&&await Hn(t,r),t}catch(t){throw t instanceof nr||t instanceof St?t:new St(r,t instanceof Error?t:void 0)}}async function Oc(r){let e=`${r}/api/dev-tool/v2/server/ping`,t=await $n(e);return Dc(t,{url:e,endpoint:"/server/ping",serverUrl:r})}async function Hn(r,e){let t;try{t=await r.text()}catch(n){throw new St(e,n instanceof Error?n:void 0)}throw new nr(r.status,t,r.statusText,new Error(`SuccBI HTTP ${r.status} ${r.statusText}: ${e}`),r.headers.get("content-type")??void 0)}function fu(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 kF(r){let e=fu(r);return Ac(e,"User-Agent",NC()),Ac(e,"X-Succ-Client-Type","nodejs"),Ac(e,"Accept","application/json"),Ac(e,"Accept-Encoding","gzip"),e}function Ac(r,e,t){Object.keys(r).some(o=>An(o,e))||(r[e]=t)}var wF="SuccApp-Devtool",PF="SUCCAPP_OAUTH_APP_ID",RF="/api/oauth2/authorize",GC="/api/oauth2/token",KC="/api/oauth2/refreshToken";function Lc(){return process.env[PF]?.trim()||wF}function JC(r,e){let t=new URL(`${Ce(r)}${RF}`);return t.searchParams.set("appid",e.appId??Lc()),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 QC(r,e){let t=Ce(r),n=await XC(`${t}${GC}`,{grant_type:"code",appid:e.appId??Lc(),code:e.code,code_verifier:e.codeVerifier});return ZC(t,GC,n)}async function YC(r,e){let t=Ce(r),n=await XC(`${t}${KC}`,{refresh_token:e.refreshToken});return ZC(t,KC,n)}async function XC(r,e){let t=await $n(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});return t.ok||await Hn(t,r),t}async function ZC(r,e,t){let n;try{n=await t.json()}catch(a){throw _c(r,e,"response body is not valid JSON",a)}if(!W(n))throw _c(r,e,"response body is not an object");if(n.result!==!0)throw _c(r,e,"token response result is not true");let o=Ae(n.access_token),i=Ae(n.refresh_token);if(!o||!i)throw _c(r,e,"token response misses token fields");return I({accessToken:o,refreshToken:i,expiresAt:bF(n.expires_in),scope:EF(n.scope)})}function bF(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 EF(r){return typeof r=="string"?an(r.split(/\s+/)):an(r)}function _c(r,e,t,n){return new me("err.login.oauthTokenInvalid",{properties:{serverUrl:r,endpoint:e,reason:t},cause:n})}var oS=E(require("http"));F();_();J();var TF=T("common.promise"),hu=new WeakMap,vi=new WeakMap;function yu(r,e){return gu(r)?.get(e)}function vr(r,e,t){let n=gu(r);n||(n=new Map,hu.set(r,n));let o=n.get(e);if(o)return o;let i=(async()=>t())().finally(()=>{let a=gu(r);!a||a.get(e)!==i||(a.delete(e),a.size===0&&hu.delete(r))});return n.set(e,i),i}function ki(r,e,t,n,o={}){let i=vi.get(r);i||(i=new Map,vi.set(r,i));let a=Date.now(),s=i.get(e);s&&MF(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 u=setTimeout(()=>{let g=vi.get(r);g?.get(e)?.timer===u&&(g.delete(e),g.size===0&&vi.delete(r)),Promise.resolve().then(n).catch(m=>TF.warn(`debounced task failed: ${e}`,m))},p);return i.set(e,{timer:u,firstScheduledAt:l}),u}function wi(r,e){let t=vi.get(r),n=t?.get(e)?.timer;return!t||!n?!1:(clearTimeout(n),t.delete(e),t.size===0&&vi.delete(r),!0)}function gu(r){return hu.get(r)}function MF(r){return!r||typeof r!="object"?!1:r._destroyed===!0}async function eS(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 Cu="127.0.0.1",tS="/callback",IF=2*60*1e3;async function iS(r){let e=!1,t,n,o=new Promise((l,p)=>{t=l,n=p}),i=oS.createServer((l,p)=>{let u=new URL(l.url??"/",`http://${Cu}`);if(u.pathname!==tS){Wa(p,404,"Not Found");return}FF(u,p,r.state).then(g=>{e||(e=!0,t(g))}).catch(g=>{e||(e=!0,n(g))})});await DF(i);let a=i.address();if(!a||typeof a=="string")throw await Nc(i),new me("err.login.oauthLoopbackFailed",{properties:{reason:"loopback server address is unavailable"}});let s=r.timeoutMs??IF,c=()=>{e||(e=!0,n(nS()))};if(r.abortSignal?.aborted)throw await Nc(i),nS();return r.abortSignal?.addEventListener("abort",c,{once:!0}),{redirectUri:`http://${Cu}:${a.port}${tS}`,async waitForCallback(){try{let l=await eS(o,s);if(l===!1)throw new me("err.login.oauthTimeout",{category:"networkAuth",style:"warn"});return l}finally{r.abortSignal?.removeEventListener("abort",c),await Nc(i)}},dispose(){return r.abortSignal?.removeEventListener("abort",c),Nc(i)}}}async function FF(r,e,t){if(r.searchParams.get("state")!==t)throw Wa(e,400,"Authorization state does not match."),new me("err.login.oauthStateMismatch",{category:"networkAuth",style:"warn"});if(r.searchParams.get("error"))throw Wa(e,400,"Authorization failed."),rS("authorization server returned error");let i=r.searchParams.get("code");if(!i)throw Wa(e,400,"Authorization code is missing."),rS("authorization code is missing");return Wa(e,200,"Authorization completed. You can close this page."),{code:i}}function DF(r){return new Promise((e,t)=>{let n=o=>t(o);r.once("error",n),r.listen(0,Cu,()=>{r.off("error",n),e()})})}function Nc(r){return new Promise(e=>{if(!r.listening){e();return}r.close(()=>e())})}function Wa(r,e,t){r.writeHead(e,{"Content-Type":"text/html; charset=utf-8"}),r.end(`<!doctype html><html><body>${cy(t)}</body></html>`)}function rS(r){return new me("err.login.oauthInvalidCallback",{category:"networkAuth",style:"warn",properties:{reason:r}})}function nS(){return new me("err.base.cancel",{category:"cancel",style:"silent"})}async function sS(r,e={}){let t=e.appId??Lc(),n=aS(32),o=aS(64),i=AF(o),a=await iS({state:n,timeoutMs:e.timeoutMs,abortSignal:e.abortSignal});try{let s=JC(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 QC(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 aS(r){return Fd((0,Wc.randomBytes)(r))}function AF(r){return Fd((0,Wc.createHash)("sha256").update(r).digest())}Ie();F();_();Z();function Su(r,e=Date.now()){let t=lS(r);return t!==void 0&&t<=e}function cS(r,e,t=Date.now()){let n=lS(r);return n!==void 0&&t>=n-e}function lS(r){if(!r)return;let e=Date.parse(r);return Number.isFinite(e)?e:void 0}var ES=E(require("os")),mn=E(require("path"));tt();var kS=E(require("fs"));function ja(r,e=!1){let t=r.length,n=0,o="",i=0,a=16,s=0,c=0,l=0,p=0,u=0;function g(f,S){let k=0,b=0;for(;k<f||!S;){let P=r.charCodeAt(n);if(P>=48&&P<=57)b=b*16+P-48;else if(P>=65&&P<=70)b=b*16+P-65+10;else if(P>=97&&P<=102)b=b*16+P-97+10;else break;n++,k++}return k<f&&(b=-1),b}function m(f){n=f,o="",i=0,a=16,u=0}function h(){let f=n;if(r.charCodeAt(n)===48)n++;else for(n++;n<r.length&&Pi(r.charCodeAt(n));)n++;if(n<r.length&&r.charCodeAt(n)===46)if(n++,n<r.length&&Pi(r.charCodeAt(n)))for(n++;n<r.length&&Pi(r.charCodeAt(n));)n++;else return u=3,r.substring(f,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&&Pi(r.charCodeAt(n))){for(n++;n<r.length&&Pi(r.charCodeAt(n));)n++;S=n}else u=3;return r.substring(f,S)}function y(){let f="",S=n;for(;;){if(n>=t){f+=r.substring(S,n),u=2;break}let k=r.charCodeAt(n);if(k===34){f+=r.substring(S,n),n++;break}if(k===92){if(f+=r.substring(S,n),n++,n>=t){u=2;break}switch(r.charCodeAt(n++)){case 34:f+='"';break;case 92:f+="\\";break;case 47:f+="/";break;case 98:f+="\b";break;case 102:f+="\f";break;case 110:f+=`
|
|
31
|
+
`;break;case 114:f+="\r";break;case 116:f+=" ";break;case 117:let P=g(4,!0);P>=0?f+=String.fromCharCode(P):u=4;break;default:u=5}S=n;continue}if(k>=0&&k<=31)if(Ua(k)){f+=r.substring(S,n),u=2;break}else u=6;n++}return f}function C(){if(o="",u=0,i=n,c=s,p=l,n>=t)return i=t,a=17;let f=r.charCodeAt(n);if(vu(f)){do n++,o+=String.fromCharCode(f),f=r.charCodeAt(n);while(vu(f));return a=15}if(Ua(f))return n++,o+=String.fromCharCode(f),f===13&&r.charCodeAt(n)===10&&(n++,o+=`
|
|
32
|
+
`),s++,l=n,a=14;switch(f){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&&!Ua(r.charCodeAt(n));)n++;return o=r.substring(S,n),a=12}if(r.charCodeAt(n+1)===42){n+=2;let k=t-1,b=!1;for(;n<k;){let P=r.charCodeAt(n);if(P===42&&r.charCodeAt(n+1)===47){n+=2,b=!0;break}n++,Ua(P)&&(P===13&&r.charCodeAt(n)===10&&n++,s++,l=n)}return b||(n++,u=1),o=r.substring(S,n),a=13}return o+=String.fromCharCode(f),n++,a=16;case 45:if(o+=String.fromCharCode(f),n++,n===t||!Pi(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+=h(),a=11;default:for(;n<t&&v(f);)n++,f=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(f),n++,a=16}}function v(f){if(vu(f)||Ua(f))return!1;switch(f){case 125:case 93:case 123:case 91:case 34:case 58:case 44:case 47:return!1}return!0}function w(){let f;do f=C();while(f>=12&&f<=15);return f}return{setPosition:m,getPosition:()=>n,scan:e?w:C,getToken:()=>a,getTokenValue:()=>o,getTokenOffset:()=>i,getTokenLength:()=>n-i,getTokenStartLine:()=>c,getTokenStartCharacter:()=>i-p,getTokenError:()=>u}}function vu(r){return r===32||r===9}function Ua(r){return r===10||r===13}function Pi(r){return r>=48&&r<=57}var pS;(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"})(pS||(pS={}));var Jt=new Array(20).fill(0).map((r,e)=>" ".repeat(e)),Ri=200,ku={" ":{"\n":new Array(Ri).fill(0).map((r,e)=>`
|
|
33
|
+
`+" ".repeat(e)),"\r":new Array(Ri).fill(0).map((r,e)=>"\r"+" ".repeat(e)),"\r\n":new Array(Ri).fill(0).map((r,e)=>`\r
|
|
34
|
+
`+" ".repeat(e))}," ":{"\n":new Array(Ri).fill(0).map((r,e)=>`
|
|
35
|
+
`+" ".repeat(e)),"\r":new Array(Ri).fill(0).map((r,e)=>"\r"+" ".repeat(e)),"\r\n":new Array(Ri).fill(0).map((r,e)=>`\r
|
|
36
|
+
`+" ".repeat(e))}},dS=[`
|
|
35
37
|
`,"\r",`\r
|
|
36
|
-
`];function
|
|
38
|
+
`];function wu(r,e,t){let n,o,i,a,s;if(e){for(a=e.offset,s=a+e.length,i=a;i>0&&!Va(r,i-1);)i--;let k=s;for(;k<r.length&&!Va(r,k);)k++;o=r.substring(i,k),n=_F(o,t)}else o=r,n=0,i=0,a=0,s=r.length;let c=LF(t,r),l=dS.includes(c),p=0,u=0,g;t.insertSpaces?g=Jt[t.tabSize||4]??bi(Jt[1],t.tabSize||4):g=" ";let m=g===" "?" ":" ",h=ja(o,!1),y=!1;function C(){if(p>1)return bi(c,p)+bi(g,n+u);let k=g.length*(n+u);return!l||k>ku[m][c].length?c+bi(g,n+u):k<=0?c:ku[m][c][k]}function v(){let k=h.scan();for(p=0;k===15||k===14;)k===14&&t.keepLines?p+=1:k===14&&(p=1),k=h.scan();return y=k===16||h.getTokenError()!==0,k}let w=[];function f(k,b,P){!y&&(!e||b<s&&P>a)&&r.substring(b,P)!==k&&w.push({offset:b,length:P-b,content:k})}let S=v();if(t.keepLines&&p>0&&f(bi(c,p),0,0),S!==17){let k=h.getTokenOffset()+i,b=g.length*n<20&&t.insertSpaces?Jt[g.length*n]:bi(g,n);f(b,i,k)}for(;S!==17;){let k=h.getTokenOffset()+h.getTokenLength()+i,b=v(),P="",Q=!1;for(;p===0&&(b===12||b===13);){let z=h.getTokenOffset()+i;f(Jt[1],k,z),k=h.getTokenOffset()+h.getTokenLength()+i,Q=b===12,P=Q?C():"",b=v()}if(b===2)S!==1&&u--,t.keepLines&&p>0||!t.keepLines&&S!==1?P=C():t.keepLines&&(P=Jt[1]);else if(b===4)S!==3&&u--,t.keepLines&&p>0||!t.keepLines&&S!==3?P=C():t.keepLines&&(P=Jt[1]);else{switch(S){case 3:case 1:u++,t.keepLines&&p>0||!t.keepLines?P=C():P=Jt[1];break;case 5:t.keepLines&&p>0||!t.keepLines?P=C():P=Jt[1];break;case 12:P=C();break;case 13:p>0?P=C():Q||(P=Jt[1]);break;case 6:t.keepLines&&p>0?P=C():Q||(P=Jt[1]);break;case 10:t.keepLines&&p>0?P=C():b===6&&!Q&&(P="");break;case 7:case 8:case 9:case 11:case 2:case 4:t.keepLines&&p>0?P=C():(b===12||b===13)&&!Q?P=Jt[1]:b!==5&&b!==17&&(y=!0);break;case 16:y=!0;break}p>0&&(b===12||b===13)&&(P=C())}b===17&&(t.keepLines&&p>0?P=C():P=t.insertFinalNewline?c:"");let M=h.getTokenOffset()+i;f(P,k,M),S=b}return w}function bi(r,e){let t="";for(let n=0;n<e;n++)t+=r;return t}function _F(r,e){let t=0,n=0,o=e.tabSize||4;for(;t<r.length;){let i=r.charAt(t);if(i===Jt[1])n++;else if(i===" ")n+=o;else break;t++}return Math.floor(n/o)}function LF(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)===`
|
|
37
39
|
`?`\r
|
|
38
40
|
`:"\r";if(n===`
|
|
39
41
|
`)return`
|
|
40
42
|
`}return r&&r.eol||`
|
|
41
|
-
`}function
|
|
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
|
|
44
|
-
`}function
|
|
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
|
|
43
|
+
`}function Va(r,e){return`\r
|
|
44
|
+
`.indexOf(r.charAt(e))!==-1}var Ba;(function(r){r.DEFAULT={allowTrailingComma:!1}})(Ba||(Ba={}));function uS(r,e=[],t=Ba.DEFAULT){let n=null,o=[],i=[];function a(c){Array.isArray(o)?o.push(c):n!==null&&(o[n]=c)}return Ru(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 Pu(r,e=[],t=Ba.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}Ru(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:WF(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 Uc(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 Ru(r,e,t=Ba.DEFAULT){let n=ja(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?K=>i===0&&q(K,n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter()):()=>!0}function c(q){return q?K=>i===0&&q(K,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 u=l(e.onObjectBegin),g=c(e.onObjectProperty),m=p(e.onObjectEnd),h=l(e.onArrayBegin),y=p(e.onArrayEnd),C=c(e.onLiteralValue),v=s(e.onSeparator),w=a(e.onComment),f=s(e.onError),S=t&&t.disallowComments,k=t&&t.allowTrailingComma;function b(){for(;;){let q=n.scan();switch(n.getTokenError()){case 4:P(14);break;case 5:P(15);break;case 3:P(13);break;case 1:S||P(11);break;case 2:P(12);break;case 6:P(16);break}switch(q){case 12:case 13:S?P(10):w();break;case 16:P(1);break;case 15:case 14:break;default:return q}}}function P(q,K=[],oe=[]){if(f(q),K.length+oe.length>0){let ae=n.getToken();for(;ae!==17;){if(K.indexOf(ae)!==-1){b();break}else if(oe.indexOf(ae)!==-1)break;ae=b()}}}function Q(q){let K=n.getTokenValue();return q?C(K):(g(K),o.push(K)),b(),!0}function M(){switch(n.getToken()){case 11:let q=n.getTokenValue(),K=Number(q);isNaN(K)&&(P(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 b(),!0}function z(){return n.getToken()!==10?(P(3,[],[2,5]),!1):(Q(!1),n.getToken()===6?(v(":"),b(),V()||P(4,[],[2,5])):P(5,[],[2,5]),o.pop(),!0)}function j(){u(),b();let q=!1;for(;n.getToken()!==2&&n.getToken()!==17;){if(n.getToken()===5){if(q||P(4,[],[]),v(","),b(),n.getToken()===2&&k)break}else q&&P(6,[],[]);z()||P(4,[],[2,5]),q=!0}return m(),n.getToken()!==2?P(7,[2],[]):b(),!0}function ee(){h(),b();let q=!0,K=!1;for(;n.getToken()!==4&&n.getToken()!==17;){if(n.getToken()===5){if(K||P(4,[],[]),v(","),b(),n.getToken()===4&&k)break}else K&&P(6,[],[]);q?(o.push(0),q=!1):o[o.length-1]++,V()||P(4,[],[4,5]),K=!0}return y(),q||o.pop(),n.getToken()!==4?P(8,[4],[]):b(),!0}function V(){switch(n.getToken()){case 3:return ee();case 1:return j();case 10:return Q(!0);default:return M()}}return b(),n.getToken()===17?t.allowEmptyContent?!0:(P(4,[],[]),!1):V()?(n.getToken()!==17&&P(9,[],[]),!0):(P(4,[],[]),!1)}function WF(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 mS(r,e,t,n){let o=e.slice(),a=Pu(r,[]),s,c;for(;o.length>0&&(c=o.pop(),s=Uc(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=Uc(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),u,g=l.parent.offset+l.parent.length;if(p>0){let m=s.children[p-1];u=m.offset+m.length}else u=s.offset+1,s.children.length>1&&(g=s.children[1].offset);return xo(r,{offset:u,length:g-u,content:""},n)}else return xo(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)}`,u=n.getInsertionIndex?n.getInsertionIndex(s.children.map(m=>m.children[0].value)):s.children.length,g;if(u>0){let m=s.children[u-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 xo(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)}`,u;if(s.children.length===0)u={offset:s.offset+1,length:0,content:p};else{let g=s.children[s.children.length-1];u={offset:g.offset+g.length,length:0,content:","+p}}return xo(r,u,n)}else if(t===void 0&&s.children.length>=0){let p=c,u=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],h=m.offset+m.length,y=s.offset+s.length;g={offset:h,length:y-2-h,content:""}}else g={offset:u.offset,length:s.children[p+1].offset-u.offset,content:""};return xo(r,g,n)}else if(t!==void 0){let p,u=`${JSON.stringify(t)}`;if(!n.isArrayInsertion&&s.children.length>c){let g=s.children[c];p={offset:g.offset,length:g.length,content:u}}else if(s.children.length===0||c===0)p={offset:s.offset+1,length:0,content:s.children.length===0?u:u+","};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:","+u}}return xo(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 xo(r,{offset:a?a.offset:0,length:a?a.length:0,content:JSON.stringify(t)},n)}}function xo(r,e,t){if(!t.formattingOptions)return[e];let n=jc(r,e),o=e.offset,i=e.offset+e.content.length;if(e.length===0||e.content.length===0){for(;o>0&&!Va(n,o-1);)o--;for(;i<n.length&&!Va(n,i);)i++}let a=wu(n,{offset:o,length:i-o},{...t.formattingOptions,keepLines:!1});for(let c=a.length-1;c>=0;c--){let l=a[c];n=jc(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 jc(r,e){return r.substring(0,e.offset)+e.content+r.substring(e.offset+e.length)}var fS;(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"})(fS||(fS={}));var hS;(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"})(hS||(hS={}));var yS=uS;var gS;(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"})(gS||(gS={}));function CS(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 SS(r,e,t,n){return mS(r,e,t,n)}function vS(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=jc(r,i);else throw new Error("Overlapping edit");n=i.offset}return r}tt();J();Z();var VF=T("common.json");var kr={allowComment:!0},BF={insertSpaces:!1,tabSize:4,eol:`
|
|
45
|
+
`,insertFinalNewline:!0};function $r(r){return JSON.stringify(r,null," ")+`
|
|
46
|
+
`}function ot(r,e={}){try{if(!r.trim())return{};let t;if(e.allowComment===!0){let n=[];if(t=yS(r,n,$F(e)),n.length>0)throw new Error(`JSON cannot be parsed safely: ${qF(e.filePath,n)}`)}else t=JSON.parse(r);if(!W(t))throw new Error(`JSON root is not an object: ${e.filePath??"<inline>"}`);return t}catch(t){if(e.ignoreParseError===!0)return VF.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 wS(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 kS.promises.readFile(r,"utf8");s=p;try{return ot(p,{...i,filePath:r})}catch(u){c=u}l<a-1&&await new Promise(u=>setTimeout(u,n))}if(o)return ot(s,{...i,filePath:r,ignoreParseError:!0});throw c}async function dn(r,e={}){let{defaultValue:t,ignoreParseError:n=!0,...o}=e,i=await Re(r);return i.trim()?ot(i,{...o,filePath:r,defaultValue:t,ignoreParseError:n}):t??{}}function qF(r,e){let t=r??"<inline>",n=e.map(o=>`${CS(o.error)}@${o.offset}`).join(", ");return`${t} (${n})`}function un(r){return r.trim()?r:`{}
|
|
47
|
+
`}function Qt(r,e,t){let n=un(r);return vS(n,SS(n,e,t,{formattingOptions:BF}))}function $F(r){let e=r.allowComment===!0;return{allowEmptyContent:!0,allowTrailingComma:e,disallowComments:!e}}J();Z();async function TS(){let r=AS();return tD(await dn(r,{defaultValue:{},ignoreParseError:!1}))}async function MS(){let r=OS();return rD(await dn(r,{defaultValue:{},ignoreParseError:!0}))}async function xS(r){let[e,t]=await Promise.all([TS(),MS()]);if(r===void 0)return{auth:e,session:t};let n=Ce(r);return{serverUrl:n,auth:e.servers[n],session:t.servers[n]}}async function Tu(r){return(await Vc(()=>({patch:r,result:void 0}))).state}async function Vc(r){return oC(iD(),async()=>{let[e,t]=await Promise.all([TS(),MS()]),n=r({auth:e,session:t}),o=n.patch,i=o.auth===void 0?e:XF(e,o.auth),a=o.session===void 0?t:eD(t,o.session);return await Promise.all([o.auth===void 0?void 0:bS(AS(),i),o.session===void 0?void 0:bS(OS(),a)]),{state:{auth:i,session:a},result:n.result}})}var bu=1,Eu=1,HF=".succapp",zF="auth.json",GF="session.json",KF="auth-state.lock",JF="SUCCAPP_AUTH_SETTINGS_FILE",QF="SUCCAPP_AUTH_SETTINGS_DIR",YF=T("api.auth-settings");function XF(r,e){if(e.servers===void 0)return r;if(e.servers===null)return{version:bu,servers:{}};let t={...r.servers};for(let[n,o]of Object.entries(e.servers)){let i=Ce(n);if(o==null){delete t[i];continue}let a=ZF(t[i]??{},o);Object.keys(a).length===0?delete t[i]:t[i]=a}return{version:bu,servers:t}}var PS=["authType","username","userId","lastLoginAt","updatedAt"];function ZF(r,e){let t={};for(let n of PS){let o=r[n];o!==void 0&&(t[n]=o)}for(let n of PS){if(!Object.prototype.hasOwnProperty.call(e,n))continue;let o=e[n];o==null?delete t[n]:t[n]=o}return t}function eD(r,e){if(e.servers===void 0)return r;if(e.servers===null)return{version:Eu,servers:{}};let t={...r.servers};for(let[n,o]of Object.entries(e.servers)){let i=Ce(n),a=o==null?void 0:FS(o);a===void 0?delete t[i]:t[i]=a}return{version:Eu,servers:t}}function tD(r){return{version:bu,servers:IS(r,"auth settings",!0,nD)}}function IS(r,e,t,n){let o={},a=(W(r)?r:{}).servers;if(a===void 0)return o;if(!W(a)){if(t)throw new Error(`${e} servers must be an object`);return o}for(let[s,c]of Object.entries(a)){let l=oD(s,e,t);if(!l)continue;if(!W(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 rD(r){return{version:Eu,servers:IS(r,"session settings",!1,FS)}}function nD(r){if(!W(r))return;let e=I({authType:DS(r.authType),username:Hr(r.username),userId:Hr(r.userId),lastLoginAt:Hr(r.lastLoginAt),updatedAt:Hr(r.updatedAt)});return Object.keys(e).length===0?void 0:e}function FS(r){if(!W(r))return;let e=RS(r.token),t=RS(r.accessToken),n=Hr(r.refreshToken),o=DS(r.authType);!o&&(t||n)&&(o="oauth"),!o&&e&&(o="pat");let i=I({authType:o,token:e??t,refreshToken:n,lastSeenAt:Hr(r.lastSeenAt),updatedAt:Hr(r.updatedAt)});return Object.keys(i).length===0?void 0:i}function RS(r){if(!W(r)||r.type!=="Bearer")return;let e=Hr(r.value);if(e)return I({type:"Bearer",value:e,expiresAt:Hr(r.expiresAt),scope:an(r.scope),updatedAt:Hr(r.updatedAt)})}function DS(r){return r==="oauth"||r==="pat"?r:void 0}function Hr(r){return typeof r=="string"?r:void 0}function oD(r,e,t){try{return Ce(r)}catch(n){if(t)throw new Error(`invalid ${e} server key: ${r}`,{cause:n instanceof Error?n:void 0});YF.warn(`ignored invalid ${e} server key: ${r}`,n);return}}async function bS(r,e){await It(r,`${JSON.stringify(e,void 0," ")}
|
|
48
|
+
`)}function Mu(){let r=_S();if(r)return mn.dirname(r);let e=aD();return e||mn.join(ES.homedir(),HF)}function AS(){let r=_S();return r||mn.join(Mu(),zF)}function OS(){return mn.join(Mu(),GF)}function iD(){return mn.join(Mu(),KF)}function _S(){return LS(JF)}function aD(){return LS(QF)}function LS(r){let e=process.env[r]?.trim();return e?mn.resolve(e):void 0}async function xu(r,e){let t=await Bc(r,e);return Iu(r,t)}async function Bc(r,e){let t=Ce(r),n=new Date().toISOString();return e.type==="pat"?NS(t,{authType:"pat",token:e.token,verifiedAt:n}):NS(t,{authType:"oauth",token:e.token,refreshToken:e.refreshToken,expiresAt:e.expiresAt,scope:e.scope,verifiedAt:n})}async function Iu(r,e){H(Je(r,e.serverUrl),`verified credential belongs to another server: ${e.serverUrl}`);let t=Ce(r),n=new Date().toISOString(),o=Ae(e.token);if(!o)throw new Ue({serverUrl:t});let i=I({authType:e.authType,username:e.username,userId:e.userId,lastLoginAt:e.verifiedAt??n,updatedAt:n}),a=I({authType:e.authType,token:I({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 Tu({auth:{servers:{[t]:i}},session:{servers:{[t]:a}}}),c=Du(t,s.auth.servers[t],s.session.servers[t]);if(!c)throw new Ue({serverUrl:t});return c}async function Io(r){let e=Ce(r),{auth:t,session:n}=await xS(e);return Du(e,t,n)}async function Fu(r){if(!r){let{result:n}=await Vc(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=Ce(r),{result:t}=await Vc(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 US(r,e){let t=Ce(r),n=e??await Io(t),o=n?.authType==="oauth"?Ae(n.refreshToken):void 0;if(!o)throw new Ue({serverUrl:t});let i=await YC(t,{refreshToken:o}),a=new Date().toISOString(),s=I({authType:"oauth",token:I({type:"Bearer",value:i.accessToken,expiresAt:i.expiresAt,scope:i.scope,updatedAt:a}),refreshToken:i.refreshToken,lastSeenAt:a,updatedAt:a}),c=await Tu({auth:{servers:{[t]:{authType:"oauth",updatedAt:a}}},session:{servers:{[t]:s}}}),l=Du(t,c.auth.servers[t],c.session.servers[t]);if(!l)throw new Ue({serverUrl:t});return l}var jS="/api/me/whoami";function Du(r,e,t){if(!t?.authType)return;if(t.authType==="pat")return!t.token||Su(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=Su(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 NS(r,e){let t=Ae(e.token);if(!t)throw new Ue({serverUrl:r});let n=await sD(r,t);return{serverUrl:r,authType:e.authType,username:n.username,userId:n.userId,token:t,expiresAt:Ae(e.expiresAt),scope:an(e.scope),refreshToken:Ae(e.refreshToken),verifiedAt:e.verifiedAt}}async function sD(r,e){let t=`${r}${jS}`,n=await $n(t,{headers:{Authorization:`Bearer ${e}`}});if(n.status===401)throw new Ue({serverUrl:r});n.ok||await Hn(n,t);let o;try{o=await n.json()}catch(s){throw WS(r,t,"response body is not valid JSON",s)}if(!W(o))throw WS(r,t,"response body is not an object");let i=Ae(o.userName)??Ae(o.username),a=Ae(o.userId)??Ae(o.id);if(o.anonymous===!0||!i&&!a)throw new Ue({serverUrl:r});return{username:i,userId:a}}function WS(r,e,t,n){return new me("err.net.invalidResponse",{properties:{url:e,endpoint:jS,serverUrl:r,reason:t},cause:n})}var JS=E(require("fs")),QS=E(require("os")),Ou=E(require("path"));var zS=E(require("fs")),Do=E(require("path")),$a=require("stream");Ie();fn();$();Z();Si();function lD(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 VS=new Map;function Au(r){let e=VS.get(r);return e||(e=lD(r),VS.set(r,e)),e}function BS(r){let e=r.map(Au);return{matches(t){if(e.length===0)return!1;let n=t.replace(/^\/+/,"");return e.some(o=>o.test(n)||o.test("/"+n))}}}function qc(r,e){if(!e||e.length===0)return!1;let t=r.replace(/^\/+/,"");return e.some(n=>Au(n).test(t)||Au(n).test("/"+t))}$();var qS=/^[a-z0-9]+$/,Fo=class r{constructor(e){this.infos=e;this.infoByExtension=pD(e),this.patternInfos=dD(e)}infoByExtension;patternInfos;static empty(){return new r({})}static fromServerVersions(e){let t={};for(let[n,o]of Object.entries(e??{})){let i=uD(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=De(pe(e)),n=this.infoByExtension.get(Fc(t));return n||this.patternInfos.find(o=>o.matcher.matches(t))?.info}};function pD(r){let e=new Map;for(let t of Object.values(r))$S(t)&&e.set(t.metaType,t);return e}function dD(r){return Object.values(r).filter(e=>e.fileMatch.length>0&&!$S(e)).map(e=>({info:e,matcher:BS(e.fileMatch),specificity:fD(e)})).sort((e,t)=>t.specificity-e.specificity)}function $S(r){return qS.test(r.metaType)&&r.fileMatch.length===1&&r.fileMatch[0]===`**/*.${r.metaType}`}function uD(r,e){let t=r.trim(),n=t.toLowerCase();if(qS.test(n))return{metaType:n,fileMatch:[`**/*.${n}`],contentVersion:e,upgradeSupported:!0};let o=mD(t);return{metaType:o,fileMatch:[o],contentVersion:e,upgradeSupported:!0}}function mD(r){return De(pe(r))}function fD(r){return Math.max(0,...r.fileMatch.map(e=>e.replace(/[*?]/g,"").length))}F();_();_n();var Yt="/api/dev-tool/v2",hD={viewFile:`${Yt}/file/view`},gD=5*60*1e3;function hn(r,e){let t=new URLSearchParams;return t.set("path",e.path),e[":edit"]!==void 0&&t.set(":edit",e[":edit"]),`${r}${hD.viewFile}?${t.toString()}`}var zr=class{constructor(e,t={}){this.serverUrl=e;this.workspaceRoot=t.workspaceRoot,t.initialCredential&&(this.authCredential=t.initialCredential),this.requestRunner=new it}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 Ue({workspaceRoot:this.workspaceRoot,serverUrl:this.serverUrl})}async getServerInfo(){return this.get("/server/info")}async getServerDetailInfo(){return this.get("/server/detail-info")}async getMetadataVersions(){return Fo.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 searchFiles(e){return(await this.post("/file/search",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 getFileById(e){return this.normalizeMetaFileInfo(await this.get(`/file/get-info?id=${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 gy(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}${Yt}/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 compileFileContent(e){return this.post("/file/compile-content",e)}async saveFile(e,t,n){let o={action:n?.expectedRevision===null?"create":"modify",path:e,isFolder:!1},i=`${this.serverUrl}${Yt}/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 $a.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 hn(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}${Yt}/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(!W(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){return this.requestJsonBodyStream("/db/export-query-data",this.resolveDbSqlExecRequest(e))}async exportDbTableData(e){return this.requestJsonBodyStream("/db/export-table-data",this.resolveDbTableRequest(e))}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 listModels(e={}){return this.post("/model/list",e)}async getModelSummary(e){return this.post("/model/summary",e)}async listModelFields(e){return this.post("/model/fields",e)}async listModelIndexes(e){return this.post("/model/indexes",e)}async selectModel(e){return this.post("/model/select",e)}async selectModelStream(e){return this.postJsonStream("/model/select",e)}async queryModels(e){return this.post("/model/query",e)}async queryModelsStream(e,t){return this.postJsonStream(this.createEndpoint("/model/query",{maxRows:t}),e)}async exportModelSelectData(e){return this.requestJsonBodyStream("/model/export-select-data",e)}async exportModelQueryData(e){return this.requestJsonBodyStream("/model/export-query-data",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=Un(e.startsWith(t)?e.slice(t.length):e,"JSON Schema source").split("/").map(i=>encodeURIComponent(i)).join("/");return this.requestText(`${this.serverUrl}${Yt}/support/json-schema?schemaFile=${o}`)}async getFrontendFrameworksManifest(){return this.get("/support/frontend-frameworks")}async get(e){return this.requestJson(`${this.serverUrl}${Yt}${e}`)}async post(e,t){return this.requestJson(`${this.serverUrl}${Yt}${e}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async postJsonStream(e,t){return this.requestJsonObjectStream(`${this.serverUrl}${Yt}${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){H(t.localContentPath,`localContentPath is required when contentChanged is true: ${t.path}`);let o=this.createMultipartBoundary(),i=$a.Readable.from(this.createFileMutationMultipartBody(o,t.localContentPath,n));return this.requestJson(`${this.serverUrl}${Yt}${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
|
|
46
49
|
Content-Disposition: form-data; name="metadata"\r
|
|
47
50
|
Content-Type: application/json; charset=utf-8\r
|
|
48
51
|
\r
|
|
@@ -51,61 +54,65 @@ Content-Type: application/json; charset=utf-8\r
|
|
|
51
54
|
Content-Disposition: form-data; name="content"; filename="content.bin"\r
|
|
52
55
|
Content-Type: application/octet-stream\r
|
|
53
56
|
\r
|
|
54
|
-
`,"utf-8");for await(let i of
|
|
57
|
+
`,"utf-8");for await(let i of zS.createReadStream(t))yield Buffer.isBuffer(i)?i:Buffer.from(i);yield Buffer.from(`\r
|
|
55
58
|
--${e}--\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"&<(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
|
|
59
|
+
`,"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=Do.posix.dirname(e.path)!==Do.posix.dirname(t),o=Do.posix.basename(e.path)!==Do.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 $a.Readable||Buffer.isBuffer(e)?e:Buffer.from(e,"utf-8")}normalizeMetaFileInfo(e){return{...e,parentDir:Do.posix.dirname(e.path),name:Do.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 Dc(n,this.createRequestContext(e,t))})}async requestText(e,t){return this.requestRunner.addTask(async()=>await(await this.fetchWithAuth(e,t)).text())}async requestStream(e,t){let n=await this.requestRunner.acquire();try{let o=await this.fetchWithAuth(e,t);if(await qC(o.clone(),this.createRequestContext(e,t)),o.ok||await Hn(o,e),!o.body)throw new St(e);let i=$a.Readable.fromWeb(o.body);return this.releaseRequestSlotAfterStream(i,n),{response:o,stream:i}}catch(o){throw n.release(),o}}async requestJsonObjectStream(e,t){return(await this.requestStream(e,t)).stream}async requestJsonBodyStream(e,t){return(await this.requestStream(`${this.serverUrl}${Yt}${e}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})).stream}async fetchWithAuth(e,t,n=!1){await this.ensureAuthCredentialLoaded(),await this.refreshOAuthCredentialIfNeeded(!1);let o=fu(t?.headers),i=this.authCredential?.token;i&&(o.Authorization=`Bearer ${i}`);let a=await $n(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 Ue({workspaceRoot:this.workspaceRoot,serverUrl:this.serverUrl})}return a.ok||await Hn(a,e),a}createRequestContext(e,t){return{url:e,endpoint:yD(e),serverUrl:this.serverUrl,request:CD(t?.body)}}createInvalidEndpointResponseError(e,t,n){return new me("err.net.invalidResponse",{properties:{url:`${this.serverUrl}${Yt}${e}`,endpoint:e,serverUrl:this.serverUrl,reason:t,request:n}})}async ensureAuthCredentialLoaded(){if(!this.authCredential)return vr(this,"authCredential",()=>this.doEnsureAuthCredentialLoaded())}async doEnsureAuthCredentialLoaded(){let e=await Io(this.serverUrl);if(!e||!e.token&&(e.authType!=="oauth"||!e.refreshToken)){this.authCredential=null;return}if(this.rejectedAuthCredentialSignature===HS(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 vr(this,`oauthRefresh:${this.serverUrl}`,()=>US(this.serverUrl,t));return this.authCredential=n,!0}catch(n){throw SD(n)&&this.handleAuthFailure(),n}}shouldRefreshOAuthCredential(e){return e.tokenExpired||!e.token?!0:cS(e.expiresAt,gD)}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 lt(n)==="err.oauth2.tokenExpired"}handleAuthFailure(){this.authCredential&&(this.rejectedAuthCredentialSignature=HS(this.authCredential)),this.authCredential=null}releaseRequestSlotAfterStream(e,t){e.once("close",()=>t.release()),e.once("error",()=>t.release())}};function yD(r){try{let e=new URL(r),t=e.pathname.indexOf(Yt);return t<0?e.pathname:e.pathname.slice(t+Yt.length)||"/"}catch{return}}function CD(r){if(typeof r=="string")try{let e=JSON.parse(r);return W(e)?e:void 0}catch{return}}function SD(r){return r instanceof Ue?!0:nc(r)?r.status>=400&&r.status<500:r instanceof me&&r.errorCode==="err.login.oauthTokenInvalid"}function HS(r){return[r.authType,r.token??"",r.refreshToken??""].join("\0")}_();F();tt();$();var GS=E(require("fs")),Ha=E(require("path"));F();$();var vD=8;async function KS(r){let e=Ha.resolve(r.startPath),t=new Set((r.excludedRoots??[]).map(o=>Ha.resolve(o))),n=r.maxDepth??vD;for(let o=0;o<=n;o++){if(!t.has(e)&&await kD(e))return e;let i=Ha.dirname(e);if(i===e)return;e=i}}async function kD(r){try{return(await GS.promises.stat(Wr(r))).isDirectory()}catch(e){if(x(e))return!1;throw e}}async function Ei(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?nn(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,u=a?c?.activeServerUrl:void 0,g=s?r.config.envServer:void 0,m=l??p??u??g;if(!m)throw new R("err.cli.missingInput",{inputId:"server",sourceIds:wD({positionalServerUrl:o,serverOption:i,workspaceServer:a,environmentServer:s}),commandName:r.command?.spec.name,envName:Gt.server});let h=c?.config.resolveServerUrl(m);if(h!==void 0)return h;if(l!==void 0||p===void 0)return wr(m);let y=Se("server");return wr(m,{input:y,option:y,flag:"server"})}function wr(r,e={inputId:"server"}){try{return Ce(r)}catch(t){throw So(t,"err.net.invalidUrl")?new R("err.cli.invalidUrl",{...e,value:r,url:r},{cause:t}):t}}async function Gr(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=Se("server"),i=wr(t,{input:o,option:o,flag:"server"});if(!Je(i,n))throw new R("err.cli.serverMismatch",{input:o,option:o,value:i,expected:n,context:{target:i,active:n}})}function wD(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 za(r,e){let t=r.workspace?.config.resolveServerUrl(e);return r.workspace&&t?r.workspace.requireServerClient(t):new zr(e,{workspaceRoot:r.workspace?.root})}async function $c(r){let e=r.workspace?Ou.resolve(r.cwd,r.workspace):Ou.resolve(r.cwd);r.workspace!==void 0&&await Sc(e);let t=await KS({startPath:e,excludedRoots:[PD(r.env)],maxDepth:r.maxDepth});if(!t&&r.required!==!1)throw new R("err.cli.invalidWorkspace",{inputId:"workspace",source:e});return t}async function zn(r){try{return await Da(r)}catch(e){throw YS(r,e)}}async function Ti(r){try{return await JS.promises.stat(r)}catch(e){throw YS(r,e)}}function ne(r,e){return{...r.workspace?{workspace:r.workspace.root}:{},server:e}}function PD(r=process.env){return r.HOME||r.USERPROFILE||QS.homedir()}function YS(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})}Ie();var te=class{toOptions(e){return{}}async execute(e,t){return await this.validateOptions(e,t),this.executeCommand(e,t)}validateOptions(e,t){}requireWorkspace(e){return H(e.workspace,"CLI command requires a workspace context"),e.workspace}async resolveServerUrl(e,t){return Ei(e,{explicitServerUrl:t})}createServerApiClient(e,t){return za(e,t)}},fe=class extends te{async executeCommand(e,t){let n=this.requireWorkspace(e);return this.executeWorkspaceCommand(n,e,t)}};var XS=require("node:child_process"),ZS=require("node:util"),RD=(0,ZS.promisify)(XS.execFile);async function Mi(r,e){let t=bD(r);await RD(t.command,t.args,{signal:e})}function bD(r){return process.platform==="darwin"?{command:"open",args:[r]}:process.platform==="win32"?{command:"rundll32",args:["url.dll,FileProtocolHandler",r]}:{command:"xdg-open",args:[r]}}var PP=require("crypto"),Ef=E(require("path"));tt();D();J();Z();xi();var Mp=E(require("fs")),Fr=E(require("path"));var Gc=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 _u=class{constructor(e){this.delegate=e}diagnostics=new Gc;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 searchFiles(e){return this.recordApiCall("searchFiles",e.path??e.query),this.delegate.searchFiles(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 getFileById(e){return this.recordApiCall("getFileById",e),this.delegate.getFileById(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 compileFileContent(e){return this.recordApiCall("compileFileContent",e.path),this.delegate.compileFileContent(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 listModels(e){return this.recordApiCall("listModels",e?.project),this.delegate.listModels(e)}async getModelSummary(e){return this.recordApiCall("getModelSummary",e.model),this.delegate.getModelSummary(e)}async listModelFields(e){return this.recordApiCall("listModelFields",e.model),this.delegate.listModelFields(e)}async listModelIndexes(e){return this.recordApiCall("listModelIndexes",e.model),this.delegate.listModelIndexes(e)}async selectModel(e){return this.recordApiCall("selectModel",e.model),this.delegate.selectModel(e)}async selectModelStream(e){return this.recordApiCall("selectModelStream",e.model),this.delegate.selectModelStream(e)}async queryModels(e){return this.recordApiCall("queryModels"),this.delegate.queryModels(e)}async queryModelsStream(e,t){return this.recordApiCall("queryModelsStream"),this.delegate.queryModelsStream(e,t)}async exportModelSelectData(e){return this.recordApiCall("exportModelSelectData",e.model),this.delegate.exportModelSelectData(e)}async exportModelQueryData(e){return this.recordApiCall("exportModelQueryData"),this.delegate.exportModelQueryData(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 tv(r){return new _u(r)}$();qr();Bn();ft();Tr();tr();var dl=class extends Ut{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"&&ht(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=>ht(a)),remoteChanges:t?[]:o.filter(a=>Er(a)),conflicts:t?[]:o.filter(a=>a.type==="conflict"),...i.length>0?{warnings:i}:{}}}};var ek=E(require("fs"));J();D();_();F();$();ft();var Cn=E(require("fs")),Sn=E(require("path")),mm=require("node:util");$();Bn();Ie();F();Ge();J();ft();fn();Bn();F();J();tt();var ZD=T("sync.file-fetcher"),eA=3,tA=20,rA=300,ul=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 it(t),this.maxAttemptsPerFile=Math.max(1,e.maxAttemptsPerFile??eA),this.maxRetries=Math.max(0,e.maxRetries??tA),this.retryBaseDelayMs=Math.max(0,e.retryBaseDelayMs??rA)}runner;maxAttemptsPerFile;maxRetries;retryBaseDelayMs;retryCount=0;stoppedError;fetchToLocal(e,t){return Pt(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(Pt(this.options.signal),this.stoppedError)throw this.stoppedError;try{let i=await this.options.getContentStream(e);return Pt(this.options.signal),await It(t,i.stream),i}catch(i){if(i instanceof or)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}: ${vo(i)}`);throw this.stop(s),s}if(!this.consumeRetryBudget()){let s=new Error(`download file content retry budget exhausted after ${this.maxRetries} retries: ${e}: ${vo(i)}`);throw this.stop(s),s}let a=this.retryBaseDelayMs*o;ZD.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)),Pt(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 yy(e)}};var dm=E(require("fs")),ml=E(require("path"));$();Ge();J();fn();F();tr();No();function Jv(r){let e=new Map(r.serverProjects.map(a=>[a.remotePath,a])),t=nA(r.serverProjects),n=new Map(r.mirrorProjects.map(a=>[a.remotePath,a])),o=oA(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(Kv(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:Qv(a),remotePath:a,id:c},newProject:p});continue}i.unavailableProjects.push(Kv(a,s))}return i}function nA(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 oA(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 Kv(r,e){return e||{name:Qv(r),remotePath:r}}function Qv(r){let e=r.lastIndexOf("/");return e>=0?r.slice(e+1):r}var iA=8,Yv=100,aA=/^[0-9a-f]{64}$/,Dt=T("sync.detector.remote"),um=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=sA();scanScope=cA();visitorEvents={};api={total:0,byApi:{},byPath:{},droppedPathKeys:0,recentCallsDropped:0};describeForLog(){return`
|
|
60
|
+
`+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}}},Kr=class{constructor(e){this.options=e;this.serverRequestRunner=new it({maxConcurrency:iA,signal:e.task.getAbortSignal()})}diagnostics=Xv();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();Dt.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(Dt.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),Dt.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(),Dt.debug(`detect diagnostics ${this.describeDiagnosticsForLog()}`),Dt.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 Rt(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),Dt.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(wt(this.options.targets));await Promise.all(a.map(s=>this.collectServerTarget(s,e))),Dt.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))]),Dt.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=Jv({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(ze(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 dm.promises.readdir(this.workspaceState.mirror.toLocalPath(e),{withFileTypes:!0})).filter(a=>a.name!==X).map(a=>a.name).sort()}catch(i){if(x(i))return Dt.debug(`mirror folder baseline cannot be listed: ${e}`),!1;throw i}let n=await br(this.workspaceState.mirror.root,ml.posix.join(e,X));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 dm.promises.stat(this.workspaceState.mirror.toLocalPath(t));if(!i.isFile()||i.size!==o)return!1}catch(i){if(x(i))return Dt.debug(`mirror file content cannot be verified during remote detection: ${t}`),!1;throw i}return this.diagnostics.mirrorContentHashChecks++,await el(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(!aA.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(wt(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=ml.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=ze(e);if(!t)return!1;let n=await this.workspaceState.mirror.isCloneInProgress(t);return n&&Dt.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&&ze(e.remotePath)===e.remotePath&&ze(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&&re(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(re(e,n))return!0;return!1}isUnderExplicitMissingTarget(e,t){for(let n of e.explicitMissingTargets)if(re(t,n))return!0;return!1}isTargetChange(e){let t=this.options.targets;return!t||t.size===0?!0:[...t].some(n=>re(e.remotePath,n)||re(n,e.remotePath)||!!e.oldRemotePath&&(re(e.oldRemotePath,n)||re(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)){Dt.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:Wt(e),contentMeta:Wt(e,{writeContentInfo:!0}),serverInfo:e}}isRemoteMetaChanged(e,t){return!_o(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=>[ml.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(!Dt.isDebugEnabled()||!this.isTargetChange(e))return;let n=this.getChangeDetailLogKey(e);if(!this.loggedChangeDetailKeys.has(n)){if(this.loggedChangeDetailKeys.add(n),this.loggedChangeDetailCount>=Yv){this.changeDetailLimitLogged||(Dt.debug(`change detail ... displayed=${Yv} further changes omitted`),this.changeDetailLimitLogged=!0);return}this.loggedChangeDetailCount++,Dt.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=Xv()}createRemoteChange(e,t,n){return{path:De(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:De(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:De(e.remotePath),remotePath:e.remotePath,...e.meta.id!==void 0?{fileId:e.meta.id}:{},oldPath:De(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:De(e.remotePath),remotePath:e.remotePath,...e.meta.id!==void 0?{fileId:e.meta.id}:{},oldPath:t?De(t):void 0,oldRemotePath:t,type:"conflict",isFolder:e.isFolder,contentChanged:!e.isFolder,metaChanged:!0,modifier:e.meta.modifier,modifyTime:e.meta.modifyTime}}};function Xv(){return new um}function sA(){return{contentModified:0,metaOnlyModified:0,remoteDeleted:0,remoteProjectUnavailable:0,remoteAdded:0,remoteRenamed:0,conflict:0}}function cA(){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}}Tr();tr();var lA=4,ke=T("sync.fetch"),fm=class extends Wi{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}}},Zn=class extends Ve{mirror;fileFetcher;fetchResult;diagnostics=Zv();downloadTask;downloadTotal=0;constructor(e,t){super(e,t),this.mirror=this.createMirrorStore(),this.fileFetcher=new ul({maxConcurrency:lA,signal:this.task.getAbortSignal(),getContentStream:async n=>{Pt(this.task.getAbortSignal());let o=await this.getApiClient();return Pt(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;ke.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),ke.info("fetch prepare start"),this.task.throwIfAborted(),await Cn.promises.mkdir(this.mirrorRoot,{recursive:!0}),n.step(1),ke.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();ke.info("fetch prepare start"),this.task.throwIfAborted(),await Cn.promises.mkdir(this.mirrorRoot,{recursive:!0});let p=this.createWorkspaceStore(this.mirror).listProjectPaths(),[u,g,m]=await Promise.all([l,this.readMirrorChildMetas("/"),p]),h=new Set(m),y=new Set([...u.map(C=>"/"+C.name),...h]);await this.removeMissingMirrorChildren("/",y,g),s&&(a=await this.markNewFetchProjects(s)),n.step(1),ke.info("fetch prepare done: serverProjects={0}",u.length),this.downloadTask=i;try{if(s){this.diagnostics.projectTargets=s.length,ke.info("fetch count resources start: {0}",this.createFetchScopeLog());let S=await this.countFetchResources(o,()=>this.countRemoteFiles(s));return ke.info("fetch count resources done: resources={0}",S),this.startFetchProgress(S),s.length===0&&this.completeDownloadProgress(),ke.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),ke.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=wt(C);this.diagnostics.resourceTargets=S.length,ke.info("fetch count resources start: {0}",this.createFetchScopeLog());let k=await this.countFetchResources(o,()=>(this.diagnostics.mirrorResourceCountRequests++,this.mirror.countMetaResources(S)));return ke.info("fetch count resources done: resources={0}",k),this.startFetchProgress(k),S.length===0&&this.completeDownloadProgress(),ke.info("fetch mirror update start: targets={0}",S.length),await this.fetchWithRemoteChangeDetector({targets:new Set(S),forceRefresh:!1}),this.completeDownloadProgress(),ke.info("fetch mirror update done: targets={0}",S.length),this.captureApiDiagnostics(c),this.finishRunDiagnostics(e),t=!0,this.logFetchDone(),this.fetchResult}let v=u.filter(S=>h.has("/"+S.name)),w=v.map(S=>"/"+S.name);a=await this.markNewFetchProjects(w),this.diagnostics.projectTargets=w.length,ke.info("fetch count resources start: {0}",this.createFetchScopeLog());let f=await this.countFetchResources(o,()=>this.countRemoteFiles(w));return ke.info("fetch count resources done: resources={0}",f),this.startFetchProgress(f),v.length===0&&this.completeDownloadProgress(),ke.info("fetch mirror update start: targets={0}",v.length),await this.fetchWithRemoteChangeDetector({forceRefresh:!1}),this.completeDownloadProgress(),await this.clearNewFetchProjectMarkers(a),ke.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){ke.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(),ke.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),ke.debug(`fetch diagnostics ${this.diagnostics.describeForLog()}`)}resolveFetchProjectPaths(){if(!this.options.projectNames){H(!this.options.forceRefresh,"FetchOptions.forceRefresh can only be used with FetchOptions.projectNames");return}return H(!this.options.paths,"FetchOptions.projectNames and FetchOptions.paths cannot be used together"),wt(new Set(this.options.projectNames.map(e=>kt(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?Ni([...e.targets]):void 0,a=new Kr({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=wt(new Set(this.getKnownChangeTargetRemotePaths(t))).length,ke.info("fetch count resources start: {0}",this.createFetchScopeLog());let n=await this.countFetchResources(e,async()=>t.length);if(ke.info("fetch count resources done: resources={0}",n),this.startFetchProgress(n),t.length===0){this.completeDownloadProgress();return}ke.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),ke.info("fetch mirror update done: changes={0}",t.length)}getKnownFetchChanges(){return ns(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)){ke.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 Cn.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;H(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 Cn.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 Qa(this.mirror.root,Sn.posix.join(e,X),{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,Wt(t,{writeContentInfo:!0}))}async writeMirrorChildMetas(e,t,n,o){let i={};for(let[c,l]of t)(!o||o.has(Sn.posix.join(e,c)))&&(i[c]=l);for(let c of n)i[Sn.posix.basename(c.path)]=Wt(c,{writeContentInfo:!0});let a=Sn.posix.join(e,X),s=await br(this.mirror.root,a);return s.exists&&!s.damaged&&(0,mm.isDeepStrictEqual)(i,Object.fromEntries(t))?!1:(await Xc(this.mirror.root,a,i),!0)}async removeMissingMirrorChildren(e,t,n){let o={},i=[...n.keys()].map(a=>({name:a,path:Sn.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 Cn.promises.readdir(n,{withFileTypes:!0})}catch(a){if(x(a)){ke.debug(`mirror folder physical children cannot be listed: ${e}`);return}throw a}let i=o.filter(a=>a.name!==X).map(a=>Sn.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 Fi){ke.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 Cn.promises.mkdir(Sn.dirname(o),{recursive:!0}),await Cn.promises.rm(o,{force:!0,recursive:!0}),await Cn.promises.rename(n,o),this.diagnostics.mirrorFilesMoved++,!0}catch(i){if(x(i))return ke.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=Zv()}};function Zv(){return new fm}var hm=E(require("fs"));Ge();$();J();ft();Di();var Jr=T("sync.checkout"),fl=class extends Ve{mirror=this.createMirrorStore();workspace=this.createWorkspaceStore(this.mirror);async execute(){Jr.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(),Jr.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 Jr.info("checkout cleanup status start: {0}",n.join(", ")),this.clearSyncStatusTargets(n),Jr.info("checkout cleanup status done"),e.some(o=>!o.workspaceProjectExists)&&this.context.notifyLocalProjectsChanged?.(),this.task.finish(),Jr.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=>kt(n)))];for(let n of t){await this.assertMirrorProjectDirectory(n);let o=await Ku(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 hm.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 Rv(o);if(Jr.debug(`checkout project start: projectPath=${e} projectBlank=${i}`),!i){await this.workspace.checkoutFromMirror(e,t),Jr.debug(`checkout project done: projectPath=${e} elapsed=${Date.now()-n}ms`);return}try{await this.workspace.prepareCheckoutDirectory(e,t),await nl(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 ol(this.workspaceRoot,e)}Jr.debug(`checkout project done: projectPath=${e} elapsed=${Date.now()-n}ms`)}async rollbackNewProjectCheckout(e,t,n){try{await hm.promises.rm(t,{force:!0,recursive:!0}),Jr.info(`checkout failed, rolled back new workspace project: projectPath=${e}`)}catch(o){Jr.warn(`checkout failed, rollback new workspace project failed: projectPath=${e} cause=${String(n)}`,o)}}};Tr();var hl=T("sync.clone"),gl=class extends Ve{async execute(){hl.info("clone start: {0}",this.options.projectNames?.join(", ")??"<all>"),hl.info("clone prepare start"),this.task.throwIfAborted();let e=await this.resolveCloneProjects();this.task.start(100,{message:d("workspace.sync.progress.clone.running"),retainOnFinish:!0});let t=this.task.subTaskMonitor(5),n=this.task.subTaskMonitor(68),o=this.task.subTaskMonitor(17),i=this.task.subTaskMonitor(6),a=this.task.subTaskMonitor(4);t.start(1),await ek.promises.mkdir(this.mirrorRoot,{recursive:!0}),t.step(1);let s=e.map(p=>p.name),c=s.map(p=>kt(p));hl.info("clone prepare done: projects={0}",s.join(", ")),await new Zn(this.context,{task:n,projectNames:s,forceRefresh:!0}).execute(),e.length===0&&(n.start(1),n.step(1)),await new fl(this.context,{task:o,projectNames:s}).execute();let l=await cl(this.context,i,c);return a.finish(),hl.info("clone done: {0}",s.join(", ")),this.task.setMessage(d("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(s=>s.name),o=[...new Set(n.map(s=>kt(s)))],i=new Set(t.map(s=>kt(s.name))),a=o.filter(s=>!i.has(s));if(a.length>0)throw new ut("err.sync.projectUnavailable",{actionName:"clone",paths:a.join(", "),projectNames:a.map(s=>s.slice(1)).join(", ")},{hint:"err.sync.projectUnavailable.hint"});return Promise.all(o.map(s=>e.getFile(s)))}};var vn=E(require("fs")),jt=E(require("path"));ft();$();Ge();J();Ie();tr();var ji=E(require("fs")),ck=E(require("os")),Qr=E(require("path")),lk=require("node:util");var as=E(require("fs")),sk=E(require("os")),Cm=E(require("path"));$();Ge();nm();var is=E(require("fs"));function rk(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 u=s[p],g;for(g=c;g<o.length&&!(o[g].buffer2index<u&&(g===o.length-1||o[g+1].buffer2index>u));g++);if(g<o.length){let m={buffer1index:i,buffer2index:u,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 tk(r,e){let t=rk(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 nk(r,e){let t=rk(r,e),n=[],o=r.length,i=e.length;function a(s,c,l){let p=[];for(let u=0;u<l;u++)p.push(s[c+u]);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 pA(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]})}tk(e,r).forEach(c=>o(c,"a")),tk(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,u=[c];for(s(l);n.length;){let g=n[0],m=g.oStart;if(m>p)break;p=Math.max(p,m+g.oLength),u.push(n.shift())}if(u.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(;u.length;){c=u.shift();let w=c.oStart,f=w+c.oLength,S=c.abStart,k=S+c.abLength,b=g[c.ab];b[0]=Math.min(S,b[0]),b[1]=Math.max(k,b[1]),b[2]=Math.min(w,b[2]),b[3]=Math.max(f,b[3])}let m=g.a[0]+(l-g.a[2]),h=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:h-m,aContent:r.slice(m,h),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 ok(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=pA(r,e,t),p=[];function u(){p.length&&c.push({ok:p}),p=[]}function g(m,h){if(m.length!==h.length)return!1;for(let y=0;y<m.length;y++)if(m[y]!==h[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):(u(),c.push({conflict:{a:m.aContent,aIndex:m.aStart,o:m.oContent,oIndex:m.oStart,b:m.bContent,bIndex:m.bStart}}))}),u(),c}J();Si();var ak=T("sync.three-way-merge"),dA=/\n|\r\n|\r/;function gm(r){return r.split(dA)}function uA(r){return r.includes(`\r
|
|
68
61
|
`)?`\r
|
|
69
62
|
`:r.includes("\r")?"\r":`
|
|
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=
|
|
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
|
|
63
|
+
`}function mA(r,e){if(VC(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 ak.debug("skip JSON normalization because content is not valid JSON",e),r}}function ik(r){return r===void 0||r===""||r===!1||typeof r=="object"&&r!==null&&Object.keys(r).length===0}var yl=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([is.promises.readFile(e.workspaceFile,"utf-8"),is.promises.readFile(e.baseFile,"utf-8"),is.promises.readFile(e.remoteFile,"utf-8")])}catch(g){return ak.debug(`treat merge content as conflicted because inputs cannot be read: ${e.workspaceFile}`,g),{hasConflict:!0}}mA(e.workspaceFile,t)&&(t=ym(t),n=ym(n),o=ym(o));let i=gm(t),a=gm(n),s=gm(o),c=ok(i,a,s),l=uA(t),p=c.some(g=>"conflict"in g),u=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 is.promises.writeFile(e.workspaceFile,u,"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 u=p in o,g=p in i,m=p in a,h=u!==g||u&&g&&this.isMetaFieldDifferent(o[p],i[p]),y=u!==m||u&&m&&this.isMetaFieldDifferent(o[p],a[p]);if(!(!h&&!y)){if(h&&!y){g?s[p]=i[p]:delete s[p];continue}if(!h&&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=ik(e),o=ik(t);return n&&o?!1:e!==t}};var Cl=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 yl).merge(t);return e.workspaceFile!==this.input.workspaceFile&&await as.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 Uo)return{merged:!1,hasConflict:!0,conflictReason:t.conflictReason,metadataUpgradeReason:t.reason,errorInfo:t.errorInfo};throw t}finally{e?.tempDir&&await sr(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 as.promises.mkdtemp(Cm.join(sk.tmpdir(),"succapp-single-file-merge-"));try{let o=new _i({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 sr(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 Yc(t)}catch(n){throw new Uo("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 as.promises.readFile(n,"utf-8")}catch(a){throw new Uo("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 Uo("metadataVersionNewerThanServer",i.reason,`metadata ${t} version is newer than server target version`,i.errorInfo);if(i.reason&&i.reason!=="upToDate")throw new Uo("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 as.promises.writeFile(o,n,"utf-8"),o}},Uo=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}};ft();var jo=T("sync.apply-remote"),Sl=class extends Ve{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);jo.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);jo.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){jo.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)jo.info("apply remote change item: status=updated path={0}",t);for(let t of e.deleted)jo.info("apply remote change item: status=deleted path={0}",t);for(let t of e.conflicts)jo.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&&re(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 ji.promises.mkdir(Qr.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 ji.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 ji.promises.mkdtemp(Qr.join(ck.tmpdir(),"succapp-remote-rename-merge-"));let o=Qr.join(n,"workspace");this.task.throwIfAborted(),await ji.promises.copyFile(this.workspace.toLocalPath(e.oldRemotePath),o);let i=Qr.join(this.options.mergeBaseDir,De(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 ji.promises.copyFile(o,t)),s.merged}catch(o){return jo.debug(`merge remote rename content failed: ${e.remotePath}`,o),!1}finally{n&&await sr(n)}}async applyRemoteRenameMeta(e,t){let n=await je(this.mirror.root,e.remotePath);if(!n)return;let o=n;if(t.metaChanged&&e.oldRemotePath){let[i,a]=await Promise.all([je(this.workspaceRoot,e.oldRemotePath),this.options.mergeBaseDir?je(this.options.mergeBaseDir,e.oldRemotePath):Promise.resolve(void 0)]);o=this.mergeMetaWithLocalDelta(n,i,a)}await this.workspace.patchMeta(Qr.posix.dirname(e.remotePath),{[Qr.posix.basename(e.remotePath)]:o},this.getCurrentChangeTask())}mergeMetaWithLocalDelta(e,t,n){let o={...e},i=Lo(t),a=Lo(n),s=new Set([...Object.keys(i),...Object.keys(a)]);for(let c of s)(0,lk.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=>jn(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"?Br(n.remotePath)-Br(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 Br(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=Qr.join(this.options.mergeBaseDir,De(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 Cl({...e,versionInfo:t,client:n}).execute()}getCurrentChangeTask(){return H(this.currentChangeTask,"current apply remote change task is missing."),this.currentChangeTask}};tr();$();J();D();Ge();var pk="merge-base",Vo="merge-backup";Tr();var at=T("sync.pull"),vl=class extends Ve{async execute(){at.info("pull start: {0}",this.createPullScopeLog()),this.task.start(100,{message:d("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),at.info("pull prepare start");let c=e.subTaskMonitor(1),l=e.subTaskMonitor(1),p=e.subTaskMonitor(1),u=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),at.info("pull targets resolved: {0}",this.formatTargetsForLog(m)),!this.options.paths&&!g?(at.info("pull refresh status start"),await this.context.refreshSyncStatus(l),at.info("pull refresh status done")):l.finish();let h,y,C=[],v;if(g?(h=this.getTargetLocalChanges(m),y=g,C=this.options.force===!0?this.getTargetCachedPullChanges(m):[],p.finish()):this.options.paths?(h=this.getTargetLocalChanges(m),C=this.options.force===!0?this.getTargetCachedPullChanges(m):[],v=this.expandTargetsForRenameChanges(m,[...h,...C]),p.start(1),y=this.filterChangesByTargets(await this.detectRemoteChanges(v,p),v),p.step(1)):(h=this.getLocalSyncChanges().filter(b=>b.type!=="conflict"),y=this.getRemoteSyncChanges(),p.finish()),at.info("pull changes prepared: local={0} remote={1}",h.length,y.length),y.length===0&&this.options.force!==!0)return at.info("pull skipped: no applicable remote changes"),u.finish(),t.finish(),n.finish(),o.finish(),i.finish(),a.finish(),s.finish(),this.task.setMessage(d("workspace.sync.progress.pull.done",0,0,0)),this.task.finish(),{updated:[],deleted:[],conflicts:[],oldFiles:[]};u.start(1),at.info("pull merge base capture start");let w=await this.captureMergeBaseDir(h,y);u.step(1),at.info("pull merge base capture done");let f,S=!1,k;try{await new Zn(this.context,{task:t,...this.createFetchOptions(y,m,g)}).execute(),at.info("pull reconcile local changes start");let b=await this.reconcileLocalChangesAfterFetch(h,y,m,n);at.info("pull reconcile local changes done: local={0}",b.length);let P=this.options.force?await this.includeForceTargetChanges(y,b,m,C):y;f=await new Sl(this.context,{remoteChanges:P,localChanges:b,force:!!this.options.force,mergeBaseDir:w,task:o}).execute(),this.applyPullOperationResult(P,f),at.info("pull metadata version check start: paths={0}",f.updated.length);let Q=await this.detectOldFiles(i,f.updated);at.info("pull metadata version check done: oldFiles={0}",Q.length);let M={...f,oldFiles:Q};return S=!0,k=d("workspace.sync.progress.pull.done",M.updated.length,M.deleted.length,M.conflicts.length),at.info("pull done: updated={0} deleted={1} conflicts={2} oldFiles={3}",M.updated.length,M.deleted.length,M.conflicts.length,Q.length),M}finally{await this.cleanupPullState(a,w,f),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 ns(this.options.changes)}getTargetLocalChanges(e){return this.filterChangesByTargets(this.context.getSyncChanges().filter(t=>ht(t)&&t.type!=="conflict"),e)}getTargetCachedPullChanges(e){return this.filterChangesByTargets(ns(this.context.getSyncChanges()),e)}async detectRemoteChanges(e,t){return new Kr({targets:e,task:t,workspace:this.context}).detect()}async detectOldFiles(e,t){return t.length===0?(e.finish(),[]):cl(this.context,e,t.map(n=>ce(this.workspaceRoot,n)))}async cleanupPullState(e,t,n){if(!t){e.finish();return}let o=!n||n.conflicts.length===0;at.info("pull cleanup start"),e.start(o?2:1),await sr(t),e.step(1),o&&(await sr(jt.join(this.workspaceRoot,".succapp",Vo)),e.step(1)),at.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 jn(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??De(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(u=>u.type==="modified"&&u.contentChanged),o=e.filter(u=>u.type==="modified"&&(u.contentChanged||u.metaChanged));if(o.length===0)return;let i=t.filter(u=>u.type==="remoteModified"?!!u.contentChanged&&n.some(g=>this.isOverlappedChange(g,u)):u.type==="remoteRenamed"?o.some(g=>this.isOverlappedChange(g,u)):!1);if(i.length===0)return;let a=jt.join(this.workspaceRoot,".succapp"),s=jt.join(a,pk),c=jt.join(a,Vo);await Promise.all([sr(s),sr(c)]),this.task.throwIfAborted(),await Promise.all([vn.promises.mkdir(s,{recursive:!0}),vn.promises.mkdir(c,{recursive:!0})]);let l=this.createMirrorStore(),p=this.createWorkspaceStore(l);return await Promise.all(i.map(async u=>{let g=u.type==="remoteRenamed"&&u.oldRemotePath?u.oldRemotePath:u.remotePath,m=De(g),h=jt.join(s,m),y=jt.join(c,m);await Promise.all([(async()=>{try{this.task.throwIfAborted(),await vn.promises.mkdir(jt.dirname(h),{recursive:!0}),await vn.promises.copyFile(l.toLocalPath(g),h),await this.copyBaseMetaFile(l.root,s,m,g)}catch(C){at.debug(`capture merge base failed for ${g}`,C)}})(),(async()=>{try{this.task.throwIfAborted(),await vn.promises.mkdir(jt.dirname(y),{recursive:!0}),await vn.promises.copyFile(p.toLocalPath(g),y)}catch(C){at.debug(`backup workspace file failed for ${g}`,C)}})()])})),s}async copyBaseMetaFile(e,t,n,o){let i=jt.dirname(n),a=jt.join(e,i,X),s=jt.join(t,i,X);try{this.task.throwIfAborted(),await vn.promises.mkdir(jt.dirname(s),{recursive:!0}),await vn.promises.copyFile(a,s)}catch(c){at.debug(`capture merge base meta failed for ${o}`,c)}}};var El=E(require("fs")),wm=E(require("path"));F();Ie();_();_n();_();_n();function dk(r,e={}){return kl(r,e)!==void 0}function ss(r,e={}){let t=kl(r,e);if(!t||!r||typeof r!="object")return r;let n={...Lt(r),suggestedAction:t,retryable:!1},o=lt(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,gr(r)==null&&(r.errorType=hA(r)),r}function kl(r,e={}){let t=Lt(r)?.suggestedAction;if(gA(t))return t;let n=lt(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"&&yA(e.path)?"refresh":"contactAdmin"}function hA(r){let e=lt(r);return e==="err.permission.denied"||e==="err.meta.delete.project"?"error":"warn"}function gA(r){return r==="pull"||r==="rename"||r==="refresh"||r==="fixMeta"||r==="contactAdmin"}function yA(r){return typeof r=="string"&&/^\/[^/]+$/.test(r)}$();Ge();tr();var CA;function Sm(){return CA}J();D();xi();ft();Tr();var vm=E(require("path"));Ge();J();F();tr();var SA=T("sync.meta-repair"),uk="unreadableMeta",mk="blockedMetaPath",wl=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 Xc(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),u=this.getDotMetaKey(e.remotePath),g=c.dotMeta[p]??await this.readMirrorMeta(e.oldRemotePath);!l.dotMeta[u]&&g&&(l.dotMeta[u]=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 br(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:mk}),this.logRepairFailure(e,mk),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:uk}),this.logRepairFailure(e,uk)),t.set(e,s),s}isBlockedMetaPathError(e){let t=Ln(e);return t==="ENOTDIR"||t==="EISDIR"}logRepairFailure(e,t){SA.warn(["workspace meta repair failed",`workspaceRoot=${this.workspace.root}`,`mirrorRoot=${this.workspace.getMirrorRoot()}`,`path=${e}`,`errorInfo=${String(t)}`].join(`
|
|
64
|
+
`))}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 br(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==="/"?"/"+X:t+"/"+X}getDotMetaKey(e){return vm.posix.basename(e)}};No();es();em();var fk="10Mb";var vA=/^\s*(\d+(?:\.\d+)?)\s*(b|kb|mb|gb)?\s*$/i,kA={b:1,kb:1024,mb:1048576,gb:1073741824};function wA(r,e=10485760){let t=vA.exec(r);if(!t)return e;let n=Number(t[1]),o=(t[2]??"b").toLowerCase(),i=kA[o]??1;return Math.floor(n*i)}var km=class{reader;writer;autoPushValue=!1;autoPushDelayValue=2e3;autoPullValue=!1;autoPullIntervalValue=60;syncIgnoreValue=[];maxPushFileSizeValue=fk;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",fk))}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 wA(this.maxPushFileSizeValue,10485760)}async setAutoPush(e){this.autoPushValue=e,await this.writer?.("sync.autoPush",e),this.load()}},bt=new km;var xe=T("sync.push"),Pl=class extends Wi{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}},Rl=class extends Ve{constructor(e,t){super(e,t)}diagnostics=new Pl;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()},xe.info("push start: {0}",this.createPushScopeLog()),this.task.start(100,{message:d("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 Pl,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),xe.info("push done: pushed={0} rejected={1} failures={2}",this.pushResult.pushed.length,this.pushResult.rejected.length,this.pushResult.failures.length),xe.debug(`push diagnostics ${this.diagnostics.describeForLog()}`),this.task.setMessage(d("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 bm(this,e),new Em(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(d("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"?(H(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})}},cs=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 El.promises.stat(ce(e,t))).isDirectory()}catch(n){if(x(n))return xe.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 cs{constructor(e,t){super(e,t.subTaskMonitor(1))}doRun(){return this.collectLocalChanges()}async collectLocalChanges(){xe.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,xe.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(wt(o)):void 0;return t.step(1),await this.refreshTargetChangesForPush(i,n),{targets:i,localChanges:this.command.filterChangesByTargets(this.command.pushContext.getSyncChanges().filter(a=>ht(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:ce(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 El.promises.stat(ce(e,t))).isDirectory()}catch(n){return x(n)?(xe.debug(`push target is not a directory: ${e}:${t}`),!1):(xe.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)===X){t.add(wm.posix.dirname(n));continue}t.add(n)}return t}},Rm=class extends cs{constructor(e,t){super(e,t.subTaskMonitor(1))}doRun(){return this.repairWorkspaceMeta()}async repairWorkspaceMeta(){this.task.start(1),this.command.run.workspaceMetaRepairPaths=$v(this.command.run.localChanges),this.command.diagnostics.workspaceMetaRepairCandidates=this.command.run.workspaceMetaRepairPaths.length,xe.info("push workspace metadata repair start: candidates={0}",this.command.run.workspaceMetaRepairPaths.length);let e=await new wl(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),xe.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))}},Vi=class extends cs{shouldRun(){return this.command.canContinuePushPipeline()}},bm=class extends Vi{constructor(e,t){super(e,t.subTaskMonitor(1))}doRun(){return this.analyzeParentFolders()}async analyzeParentFolders(){if(this.task.start(1),xe.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),xe.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=Br(o)-Br(i);return a!==0?a:o.localeCompare(i)})}},Em=class extends Vi{constructor(e,t){super(e,t.subTaskMonitor(1))}doRun(){return this.checkRemoteChanges()}async checkRemoteChanges(){if(this.task.start(1),xe.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),xe.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)xe.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=>Er(o)),e);if(e.size===0)return[];let t=new Kr({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 Vi{constructor(e,t){super(e,t.subTaskMonitor(1))}doRun(){return this.buildPushRequests()}async buildPushRequests(){this.task.start(1),xe.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),xe.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(!re(n.oldRemotePath,i)||!re(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:Lo(await je(n,e,{strict:!0})),metaInfoChanged:!0};return t||(o.localContentPath=ce(n,e),o.contentChanged=!0),o}async createModifyRequest(e,t=e.remotePath,n=!1){let o=this.command.workspaceRootPath,i=await je(this.command.mirrorRootPath,t);if(!i)throw new Kt("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:Lo(await je(o,e.remotePath,{strict:!0})),metaInfoChanged:!!e.metaChanged};return a&&(s.localContentPath=ce(o,e.remotePath),s.contentChanged=!0),s}async createMoveRequest(e,t){if(!e.oldRemotePath)throw new Kt("err.sync.conflict",{remotePath:e.remotePath,reason:"remoteVersionChanged"});let n=this.command.workspaceRootPath,o=await je(this.command.mirrorRootPath,e.oldRemotePath);if(!o)throw new Kt("err.sync.conflict",{remotePath:e.oldRemotePath,reason:"remoteVersionChanged"});let i=Lo(await je(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=ce(n,e.remotePath),a.contentChanged=!0),a}getMovedFolderChildSource(e,t){for(let n of[...t].reverse())if(!(e===n.oldRemotePath||!re(e,n.oldRemotePath)))return n.newRemotePath+e.slice(n.oldRemotePath.length)}async createDeleteRequest(e,t){let n=await je(this.command.mirrorRootPath,e);if(!n)throw new Kt("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"?-Br(n.remotePath):n.type==="renamed"?10:n.type==="added"?20+Br(n.remotePath):30+Br(n.remotePath);return[...e].sort((n,o)=>{let i=t(n),a=t(o);return i!==a?i-a:n.remotePath.localeCompare(o.remotePath)})}},bl=class extends Vi{shouldRun(){return super.shouldRun()&&this.command.hasPushRequests()}async validatePushRequest(e){let t=bt.maxPushFileSizeBytes;if(e.localContentPath)try{let n=await El.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 Bv(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 bl{doRun(){return this.preflightPushRequests()}async preflightPushRequests(){xe.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),xe.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 bl{constructor(t,n,o,i){super(t,n);this.resultTask=o;this.doneTask=i}doRun(){return this.uploadPushRequests()}async uploadPushRequests(){xe.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]}:{}},xe.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),xe.info("push item done: status=failed path={0}",p.path),this.task.step(1);continue}try{let u=await this.command.uploadFileMutation(n,l);if(!u.success){let g={path:u.path,errorInfo:u.errorInfo};this.command.reportPushFailure(g,"push item failed")}o.push(u),xe.info("push item done: status={0} path={1}",u.success?"pushed":"failed",u.path)}catch(u){let g=this.createPushFailureFromMutationError(l,u);if(!g)throw u;i.push(g),this.command.reportPushFailure(g,"push item failed"),xe.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 nr))return;let o=n.remoteError?this.toMutationErrorInfo(ss(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:Lt(t)}}isMutationBlockedErrorInfo(t,n){return dk(t,{action:n.action,path:n.path,targetPath:n.targetPath})}getMutationFailurePath(t,n){let o=Lt(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 Rt(this.command.mirrorRootPath),o=new pr(this.command.workspaceRootPath,n);await new Ai({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 Yc(o),c=this.getMetadataVersionSuggestionKind(s,a);return c?{path:n,currentVersion:s,targetVersion:a,metaType:i.metaType,kind:c}:void 0}catch(o){xe.debug(`push metadata suggestion check failed: ${n}`,o);return}}getMetadataVersionSuggestionKind(t,n){return zc(t,n)?"newer":Hc(t,n)?"older":void 0}getRequestTargetPath(t){return t.targetPath??t.path}};im();ft();F();_();$();J();D();Tr();var At=T("sync.reset"),Tl=class extends Ve{mirror=this.createMirrorStore();workspace=this.createWorkspaceStore(this.mirror);async execute(){At.info("reset start: {0}",this.createResetScopeLog()),this.task.start(100,{message:d("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),At.info("reset prepare start");let{targets:i,localChanges:a}=await this.prepareResetScope();e.step(1),At.info("reset targets resolved: {0}",this.formatTargetsForLog(i)),At.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(wt(s)):this.sortRemotePathsForCheckout(await this.workspace.listProjectPaths());e.step(1),At.info("reset checkout target paths prepared: paths={0}",c.length),At.debug(`reset checkout target paths: ${c.join("|")}`);let l=await this.createCheckoutItems(c);e.step(1),At.info("reset checkout items prepared: items={0} resources={1}",l.length,l.reduce((g,m)=>g+m.total,0));for(let g of l)At.debug(`reset checkout item: remotePath=${g.remotePath} existsInMirror=${g.existsInMirror} total=${g.total}`);At.info("reset checkout start: items={0}",l.length);let p=await this.checkoutMirrorToWorkspace(l,t);At.info("reset checkout done: updated={0} deleted={1}",p.updated.length,p.deleted.length);let u=[...p.updated,...p.deleted];return n.start(1),At.info("reset cleanup status start"),await this.cleanupEmptyOrphanParents(p.deleted,this.mirror,this.workspace),u.length>0&&this.clearSyncStatusTargets(u),n.step(1),At.info("reset cleanup status done"),o.finish(),At.info("reset done: updated={0} deleted={1}",p.updated.length,p.deleted.length),this.task.setMessage(d("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(ht);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();At.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)),At.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 Kt("err.sync.conflict",{remotePath:n.remotePath,reason:t})}sortRemotePathsForCheckout(e){return e.sort((t,n)=>t.localeCompare(n))}};var Im=E(require("fs")),ls=E(require("path"));$();F();J();D();ft();var RA=T("sync.restore-local"),Ml=class extends Ui{constructor(e,t){super(e,t)}async execute(){this.task.start(1,{message:d("workspace.sync.progress.restore.running")});let e=this.options.change,t=ls.join(this.workspaceRoot,".succapp",Vo,De(e.remotePath)),n=ls.join(this.workspaceRoot,e.path);try{this.task.throwIfAborted(),await Im.promises.mkdir(ls.dirname(n),{recursive:!0}),await Im.promises.copyFile(t,n)}catch(o){if(x(o))return RA.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 Bo=E(require("fs")),Yr=E(require("path"));F();D();$();ft();var ps=class extends Ut{async execute(){this.task.start(1,{message:d("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 hk(this.workspaceRoot);return e.length===0?t:t.filter(n=>e.some(o=>re(n.path,o)))}resolveFilterTargets(){return(this.options.paths??[]).map(e=>bA(this.workspaceRoot,e))}},xl=class extends Ve{async execute(){this.task.start(1,{message:d("workspace.sync.progress.backupClear.running")});let e=await new ps(this.context,this.options).listEntries(),t=yk(this.workspaceRoot);if(!this.options.paths||this.options.paths.length===0)return await Bo.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 Bo.promises.rm(n.backupPath,{force:!0}),await EA(Yr.dirname(n.backupPath),t);return this.task.step(1),{workspaceRootPath:this.workspaceRoot,cleared:e,remaining:await hk(this.workspaceRoot)}}};async function hk(r){let e=yk(r);return(await gk(e,e)).sort((n,o)=>n.path.localeCompare(o.path))}async function gk(r,e){let t=await Bo.promises.readdir(e,{withFileTypes:!0}).catch(o=>{if(x(o))return[];throw o}),n=[];for(let o of t){let i=Yr.join(e,o.name);if(o.isDirectory()){n.push(...await gk(r,i));continue}if(!o.isFile())continue;let a=await Bo.promises.stat(i),s=Yr.relative(r,i).replace(/\\/g,"/");n.push({path:pe(s),backupPath:i,size:a.size,mtime:a.mtime.toISOString()})}return n}function bA(r,e){return pe(Vr(r,e)??e)}function yk(r){return Yr.join(r,".succapp",Vo)}async function EA(r,e){let t=r;for(;t!==e&&t.startsWith(e+Yr.sep);){if((await Bo.promises.readdir(t).catch(o=>{if(x(o))return[];throw o})).length>0)return;await Bo.promises.rmdir(t),t=Yr.dirname(t)}}J();D();_();F();$();ft();var eo=T("sync.remove-project"),Il=class extends Ve{mirror=this.createMirrorStore();workspace=this.createWorkspaceStore(this.mirror);async execute(){let e=[...new Set(this.options.projectNames.map(l=>kt(l)))];eo.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 ut("err.sync.projectNotFound",{projectNames:i.join(", ")});eo.info("remove local project resource count start: projects={0}",e.length);let a=await this.createRemoveItems(e);eo.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:d("workspace.sync.progress.removeProject.running"),retainOnFinish:!0}),a.length===0&&this.task.step(1),eo.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);eo.info("remove local project files done: projects={0}",a.length);let c=e.map(l=>l.slice(1));return eo.info("remove local project cleanup status start"),this.clearSyncStatusTargets(e),eo.info("remove local project cleanup status done"),c.length>0&&this.context.notifyLocalProjectsChanged?.(),eo.info("remove local project done: {0}",c.join(", ")),this.task.setMessage(d("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 Ck=E(require("fs")),Sk=E(require("path"));ft();D();var Fl=class extends Ut{async execute(){this.task.start(1,{message:d("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 Ck.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:Sk.basename(t),source:e,buffer:n}}};var Fm=E(require("fs"));ft();D();var Dl=3,TA=/\r\n|\n|\r/,Ol=class extends Ut{async execute(){let e=this.options.source??"server";this.task.start(Math.max(this.options.paths.length,1),{message:d("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),Fm.promises.readFile(a)]),l=MA({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"?Fm.promises.readFile(n.toLocalPath(e)):(await(await this.getApiClient()).getFileContent(e)).buffer}};function MA(r){if(r.sourceBuffer.equals(r.workspaceBuffer))return{changed:!1,binary:Al(r.sourceBuffer)||Al(r.workspaceBuffer),text:""};if(Al(r.sourceBuffer)||Al(r.workspaceBuffer))return{changed:!0,binary:!0,text:[`diff --succapp ${r.sourceLabel} ${r.workspaceLabel}`,`Binary files ${r.sourceLabel} and ${r.workspaceLabel} differ`,""].join(`
|
|
65
|
+
`)};let e=kk(r.sourceBuffer),t=kk(r.workspaceBuffer),n=nk(e,t);return{changed:n.length>0,binary:!1,text:n.length===0?"":xA(r,e,t,n)}}function xA(r,e,t,n){let o=[`diff --succapp ${r.sourceLabel} ${r.workspaceLabel}`,`--- ${r.sourceLabel}`,`+++ ${r.workspaceLabel}`];for(let i of IA(e,t,n))o.push(...DA(i,e));return o.push(""),o.join(`
|
|
66
|
+
`)}function IA(r,e,t){let n=[];for(let o of t){let i=FA(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 FA(r,e,t){let n=Math.max(0,t.buffer1.offset-Dl),o=Math.max(0,t.buffer2.offset-Dl);return{oldStart:n,oldEnd:Math.min(r.length,t.buffer1.offset+t.buffer1.length+Dl),newStart:o,newEnd:Math.min(e.length,t.buffer2.offset+t.buffer2.length+Dl),patches:[t]}}function DA(r,e){let t=[`@@ -${vk(r.oldStart,r.oldEnd-r.oldStart)} +${vk(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 vk(r,e){return e===0?`${r}`:e===1?`${r+1}`:`${r+1},${e}`}function kk(r){let e=r.toString("utf8");if(e.length===0)return[];let t=e.split(TA);return t.at(-1)===""&&t.pop(),t}function Al(r){return r.includes(0)}ft();D();var _l=class extends Ut{async execute(){this.task.start(1,{message:d("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}}};ft();var Ll=class extends Ut{async execute(){return(await this.getApiClient()).getProjects()}};var wk=["workspace-settings","workspace-gitignore","workspace-agent-files"],Pk=["typescript-support","json-schema-support"],Rk=["succapp-docs-skill"],Nl=[...wk,...Pk],AA=["workspace-config",...Nl,...Rk],bk=["workspace-config",...Nl,"sync-baseline"],Dm={base:["workspace-config",...wk],dev:Pk,"agent-docs":Rk,all:AA};function _m(r,e){return new Om(r,e)}var Am=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 _m(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 Et(r,e){return new Am(r,e)}var Om=class{constructor(e,t){this.context=e;this.agentSource=t?.agentSource??Fn().source}agentSource;get config(){return{root:this.context.root}}async status(e={}){let t=Et(this.context,await this.context.ensureActiveServerReady());return new dl(t,e).execute()}async clone(e={}){let t=Et(this.context,await this.context.ensureActiveServerReady());return this.withWriteLock("clone",e.task,n=>new gl(t,{...e,task:n}).execute())}async pull(e={}){let t=Et(this.context,await this.context.ensureActiveServerReady());return this.withWriteLock("pull",e.task,n=>new vl(t,{...e,task:n}).execute())}async push(e={}){let t=Et(this.context,await this.context.ensureActiveServerReady());return this.withWriteLock("push",e.task,n=>new Rl(t,{...e,task:n}).execute())}async upgradeMetadata(e={}){let t=Et(this.context,await this.context.ensureActiveServerReady());return this.withWriteLock("upgradeMetadata",e.task,n=>new ts(t,{...e,task:n}).execute())}async reset(e={}){let t=Et(this.context,await this.context.ensureActiveServerReady());return this.withWriteLock("reset",e.task,n=>new Tl(t,{...e,task:n}).execute())}async restoreLocalChange(e){await this.context.ensureConfigLoaded();let t=Et(this.context,this.context.activeServerUrl);return this.withWriteLock("restoreLocalChange",e.task,n=>new Ml(t,{...e,task:n}).execute())}async listMergeBackups(e={}){await this.context.ensureConfigLoaded();let t=Et(this.context,this.context.activeServerUrl);return new ps(t,e).execute()}async clearMergeBackups(e={}){await this.context.ensureConfigLoaded();let t=Et(this.context,this.context.activeServerUrl);return this.withWriteLock("merge-backup clear",e.task,n=>new xl(t,{...e,task:n}).execute())}async removeProject(e){let t=Et(this.context,await this.context.ensureActiveServerReady());return this.withWriteLock("removeProject",e.task,n=>new Il(t,{...e,task:n}).execute())}async repairWorkspace(e={}){return this.context.runMaintenance({taskIds:e.checks??bk,explicitTaskIds:e.checks,dryRun:e.dryRun===!0,task:e.task})}async listWorkspaceProjects(){return await this.context.ensureConfigLoaded(),Et(this.context,this.context.activeServerUrl).listWorkspaceProjects()}async listBaselineProjects(){await this.context.ensureConfigLoaded();let e=Et(this.context,this.context.activeServerUrl);return e.listBaselineProjects(e.activeServerUrl)}async lsRemote(){let e=Et(this.context,await this.context.ensureActiveServerReady());return new Ll(e,{}).execute()}async show(e){let t=Et(this.context,await this.context.ensureActiveServerReady());return new Fl(t,e).execute()}async history(e){let t=Et(this.context,await this.context.ensureActiveServerReady());return new _l(t,e).execute()}async diff(e){let t=Et(this.context,await this.context.ensureActiveServerReady());return new Ol(t,e).execute()}localToMetaPath(e){return Vr(this.context.root,e)}isTrackedFile(e){return this.localToMetaPath(e)!==void 0}async withWriteLock(e,t,n,o=["sync"]){let i=t&&t!==nt.INSTANCE?t:new qn;return this.context.lockManager.withLock({scopes:o,command:e,source:this.agentSource,wait:this.context.lockWait},async a=>(i.setAbortSignal(bc(i.getAbortSignal(),a)),n(i)))}};tm();var Nm=E(require("fs")),qo=E(require("path"));J();var to=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();_();Z();xi();var Lm=T("workspace.config"),OA=".succapp/config.json",Ek="reloadConfigAfterFileChange";function ds(){return{version:2,servers:[],activeServerUrl:""}}function _A(r,e,t){let n=Ce(e),o=Ce(t);if(o===n)throw new R("err.workspace.sameServerUrl",{server:o});let i=r.find(a=>!Je(a,n)&&Je(a,o));if(i)throw new R("err.workspace.serverAlreadyExists",{duplicatedServer:i,server:o});return o}var Wl=class{constructor(e,t,n){this.workspaceRoot=e;this.eventBus=t;if(this.configPath=qo.join(e,".succapp","config.json"),t&&n){let o=this.disposables.add(n.createFileWatcher(e,OA));this.disposables.add(o.onFileChanged(i=>{this.isConfigFilePath(i.filePath)&&ki(this,Ek,50,async()=>{await this.reloadAfterFileChange().catch(a=>{Lm.warn(`reload workspace config after file change failed: ${this.configPath}`,a)})})}))}}disposables=new to;data=null;loaded=!1;configPath;get path(){return this.configPath}get(){return this.data??void 0}async load(){return vr(this,"load",()=>this.doLoad())}async ensureLoaded(){this.loaded||await this.load()}async reloadIfChanged(){return await vr(this,"reload",()=>this.doReloadIfChanged())===!0}async doReloadIfChanged(e=!1){let t=this.data!==null,n=pi(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)||!on(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 wS(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?Lm.warn(".succapp/config.json is corrupted, ignoring",o):Lm.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=Ce(s);t.some(l=>Je(l,c))||t.push(c)}let n=e.activeServerUrl?Ce(e.activeServerUrl):"",o=n?t.find(s=>Je(s,n)):void 0,i={version:e.version??2,servers:t,activeServerUrl:o??t[0]??""},a=Xt(e.serverVersion);return a&&(i.serverVersion=a),i}return ds()}async save(){if(!this.data)return;let e=qo.dirname(this.configPath);await Nm.promises.mkdir(e,{recursive:!0}),await Nm.promises.writeFile(this.configPath,JSON.stringify(this.data,null,2),"utf-8"),this.loaded=!0}async mutateAndSave(e){let t=this.data!==null,n=pi(this.get()),o=this.data?pi(this.data):this.data;e();try{await this.save()}catch(i){throw this.data=o,i}(t!==(this.data!==null)||!on(n??null,this.get()??null))&&this.fireConfigChanged()}async initialize(e){let t=Ce(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=ds()}),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=Xt(e);!t||this.data?.serverVersion===t||await this.mutateAndSave(()=>{let n=this.data??ds();n.serverVersion=t,this.data=n})}hasServer(e){return!!this.resolveServerUrl(e)}resolveServerUrl(e){let t=Ce(e);return this.getServers().find(n=>Je(n,t))}validateServerUrlChange(e,t){return _A(this.getServers(),e,t)}async addServer(e){await this.ensureLoaded();let t=Ce(e);await this.mutateAndSave(()=>{let n=this.data??ds();n.servers=n.servers??[];let o=n.servers.find(i=>Je(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=Ce(e);await this.mutateAndSave(()=>{let n=this.data;n.servers=n.servers.filter(o=>!Je(o,t)),Je(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=>Je(a,o)?i:a),Je(n.activeServerUrl,o)&&(n.activeServerUrl=i),this.data=n}),i}async setActiveServerUrl(e){await this.ensureLoaded();let t=Ce(e);await this.mutateAndSave(()=>{let n=this.data??ds();n.servers=n.servers??[];let o=n.servers.find(i=>Je(i,t));o||n.servers.push(t),n.activeServerUrl=o??t,this.data=n})}get root(){return this.workspaceRoot}dispose(){wi(this,Ek),this.disposables.dispose()}fireConfigChanged(){this.eventBus?.fire(new et("workspace.config.changed",{root:this.workspaceRoot},this))}async reloadAfterFileChange(){await vr(this,"reload",()=>this.doReloadIfChanged(!0))===void 0&&await this.reloadIfChanged()}isConfigFilePath(e){return qo.resolve(e)===qo.resolve(this.configPath)}};F();J();D();No();es();J();var Tk=T("sync.auto"),Mk="autoPush",Ul=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&&bt.autoPush&&this.scheduleAutoPush()}))}autoPullTimer;disposables=[];scheduleAutoPush(){bt.autoPush&&ki(this,Mk,bt.autoPushDelay,async()=>{bt.autoPush&&await this.callbacks.onAutoPush().catch(e=>Tk.error("auto push failed",e))})}cancelPendingAutoPush(){wi(this,Mk)}refreshAutoSync(){bt.autoPush||this.cancelPendingAutoPush(),this.startAutoPull()}startAutoPull(){this.stopAutoPull(),bt.autoPull&&(this.autoPullTimer=setInterval(()=>{this.callbacks.onAutoPull().catch(e=>Tk.error("auto pull failed",e))},bt.autoPullInterval*1e3))}stopAutoPull(){this.autoPullTimer&&(clearInterval(this.autoPullTimer),this.autoPullTimer=void 0)}dispose(){this.stopAutoPull(),this.cancelPendingAutoPush(),this.disposables.forEach(e=>e.dispose())}};$();Ge();Tr();J();var jl=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 us=E(require("path"));Ge();$();Tr();var dr=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(ht).flatMap(o=>[o.remotePath,o.oldRemotePath])].filter(o=>!!o),n=dC(t);return n==="/"?void 0:n}resolveFileChangeStatusTarget(e,t){let n=Vr(e.root,t.filePath);if(!n)return;let o=us.posix.basename(n)===X,i=o?us.posix.dirname(n):n;return{filePath:o?us.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&&re(c.remotePath,i.remotePath)||i.remotePath!==l&&re(l,i.remotePath))||i.remotePath!==l&&re(i.remotePath,l))return!0;if(!(i.remotePath===c.remotePath||!re(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)&&!qc(s.remotePath.replace(/^\//,""),bt.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(/^\//,"")}};Tr();var Vl=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:rs(this.handledChange),changes:this.remainingChanges}}async run(){return this.toResult()}publish(e){return this.publishResult(e)}};var Bl=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)}};qr();J();D();F();_();var hs=E(require("fs")),zl=E(require("path"));Ge();$();F();J();fn();qr();No();es();tr();var ms=E(require("fs")),fs=E(require("path")),dw=require("crypto"),uw=E(iw()),mw=E(sw());Ge();tt();$();F();fn();J();function $l(r){return{dev:r.dev,ino:r.ino,size:r.size,mtimeMs:r.mtimeMs,ctimeMs:r.ctimeMs}}var Gm="sha256",cw=".succapp/cache/inode-index.json",yO=.6,lw=2,CO=1e4,SO=20,pw=5*1024*1024,vO=80,kO=200,wO=8,PO=4,RO=64,bO=2,EO=500,TO=1e4,Be=T("sync.detector.workspace"),Hl=class{constructor(e){this.options=e;this.workspaceCachePath=fs.join(e.workspaceRoot,cw),this.mirrorCachePath=fs.join(e.remoteMirrorRoot,cw)}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 u=await this.compareByStat(a,p,n);if(u==="different")continue;if(u==="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();Be.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,u=this.createSimilarityPairCursor(e,i),g=0,m=Array.from({length:Math.min(PO,Math.max(1,a.size))},async()=>{for(;;){let y=u();if(!y)return;let[C,v]=y;g++,n.fileComparedPairs++;let w=await this.compareSimilarityPair(C,v,o);w.score>=yO&&(this.addTopSimilarityCandidate(l,this.getEntryKey(w.left),w,lw),this.addTopSimilarityCandidate(p,this.getEntryKey(w.right),w,lw))}});await Promise.all(m),n.fileTopByLeft=l.size,n.fileTopByRight=p.size,Be.debug("collect file similarity compared elapsed=%dms comparedPairs=%d topByLeft=%d topByRight=%d",Date.now()-c,g,l.size,p.size);let h=new Set;for(let y of[l,p])for(let C of y.values())for(let v of C)h.add(v);return{candidates:[...h].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 ce(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 ms.promises.stat(this.getEntryLocalPath(e));return t.isFile()?$l(t):void 0}catch(t){if(!Ta(t))throw t;Be.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:Gm,value:a.sha256,size:t.size,mtimeMs:t.mtimeMs,ctimeMs:t.ctimeMs,updatedAt:Date.now()}}try{let i={algorithm:Gm,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(!Ta(i))throw i;Be.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:el(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>vO?{left:e,right:t,score:0}:{left:e,right:t,score:Math.max(0,1-l/kO)}}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;Be.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 mw.default().withHash(e).build();return t.calculateDifference(t,!0),{digest:t}}catch(t){Be.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>pw)return;let i=ze(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 u=this.getCachedTlsh(p);if(u){if(this.buildTlshProfile(u))return await this.withProjectCache(e,async g=>{g.similarity.set(n.value,{tlsh:u,size:n.size,updatedAt:Date.now()}),this.pruneState(g)}),u;Be.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,uw.default)(e.toString("latin1")),cacheUnsupported:!1}}catch(t){let n=t instanceof Error?t.message:String(t);return Be.debug("skip TLSH digest because hash library rejected buffer: %s",n),{cacheUnsupported:!1}}}async readTlshBuffer(e){try{return await ms.promises.readFile(this.getEntryLocalPath(e))}catch(t){if(!Ta(t))throw t;Be.debug("skip tlsh file read: %s",e.metaPath,t);return}}getSmallFileContent(e,t,n){if(!n.preferSmallFileBuffer||t.size>pw)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>RO;){let t=e.smallFiles.keys().next().value;if(t===void 0)return;e.smallFiles.delete(t)}}async readSmallFileContent(e){try{let t=await ms.promises.readFile(this.getEntryLocalPath(e));return{contentHash:(0,dw.createHash)(Gm).update(t).digest("hex"),similarity:this.computeTlshHashFromBuffer(t)}}catch(t){if(!Ta(t))throw t;Be.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 it(wO);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 fs.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>SO;)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,CO)}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){Be.debug("skip %s inode cache: %s",n,e,o)}}async readInodeCacheFile(e){let t=await dn(e);if(!(!t||t.version!==1))return t}async flush(){if(Be.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;Be.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(),Be.debug("flushed inode caches workspaceEntries=%d mirrorEntries=%d",this.workspaceInodeCache.size,this.mirrorInodeCache.size)):Be.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 Co||n instanceof sn?(Be.debug("skip inode cache flush because cache lock is unavailable",n),!1):(Be.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=ce(o,l);try{let u=await ms.promises.stat(p);if(!u.isFile()){i.push(a);continue}let g=this.getInodeKeyString(u.dev,u.ino);(!g||g!==s)&&i.push(a)}catch(u){if(x(u)){Be.debug("mark stale inode cache entry: %s",a),i.push(a);continue}throw u}}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),Be.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),Be.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*bO,t.size+EO,TO);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=ze(e.metaPath)??"/";await this.withProjectCache(o,async i=>{i.similarity.delete(n.value)&&Be.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 It(e,JSON.stringify(n))}catch(o){Be.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 MO=.6,xO=.15,IO=8,FO=8,DO=8,fw=4096,AO=8,OO=64,_O=20,we=T("sync.detector.workspace"),Gl=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`
|
|
67
|
+
`+JSON.stringify(this.createSnapshot(),null,2).replace(/^\{\n/,"").replace(/\n\}$/,"")}},Kl=class{constructor(e){this.options=e;let t=e.workspace;this.workspaceRoot=t.root,this.remoteMirrorRoot=t.getMirrorRoot(),this.task=e.task??nt.INSTANCE,this.mirror=new Rt(this.remoteMirrorRoot),this.workspaceStore=new pr(this.workspaceRoot,this.mirror),this.fingerprint=new Hl({workspaceRoot:this.workspaceRoot,remoteMirrorRoot:this.remoteMirrorRoot,lockManager:t.lockManager}),this.rootRemotePath=this.normalizeRootRemotePath(e.rootRemotePath)}task;fingerprint;rootRemotePath;mirror;workspaceStore;workspaceRoot;remoteMirrorRoot;diagnostics=new Gl;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();we.debug(`detect start workspace=${this.workspaceRoot} mirror=${this.remoteMirrorRoot}`),this.throwIfAborted();let n=Date.now();await this.fingerprint.load(),we.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,we.debug(`detect records done elapsed=${Date.now()-n}ms records=${i.length} suspectMeta=${o.size}`),this.throwIfAborted(),n=Date.now(),await this.fingerprint.flush(),we.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 qa(a.map((c,l)=>({change:c,index:l})),DO,async c=>{s[c.index]=await this.toSyncFileChange(c.change)}),this.diagnostics.resultChanges=s.length,we.debug(`create sync changes done elapsed=${Date.now()-n}ms filteredRecords=${a.length} changes=${s.length}`),this.finishRunDiagnostics(t),we.debug(`detect diagnostics ${this.diagnostics.describeForLog()}`),we.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 Gl}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()),we.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(),u=this.getPipelineStats();await this.withMatchPhase("matchById",()=>this.matchById(l,i)),this.logDetectPhase("matchById",p,u),this.throwIfAborted(),p=Date.now(),u=this.getPipelineStats(),await this.withMatchPhase("matchByPath",()=>this.matchByPath(l,i)),this.logDetectPhase("matchByPath",p,u),this.throwIfAborted(),p=Date.now(),u=this.getPipelineStats(),await this.withMatchPhase("matchRenamesByInode",()=>this.matchRenamesByInode(l,i)),this.logDetectPhase("matchRenamesByInode",p,u),this.throwIfAborted(),p=Date.now(),u=this.getPipelineStats(),await this.withMatchPhase("matchRenamesByHash",()=>this.matchRenamesByHash(l,i)),this.logDetectPhase("matchRenamesByHash",p,u),this.throwIfAborted(),p=Date.now(),u=this.getPipelineStats(),await this.withMatchPhase("matchRenamesBySimilarity",()=>this.matchRenamesBySimilarity(l,i)),this.logDetectPhase("matchRenamesBySimilarity",p,u),this.throwIfAborted(),p=Date.now(),u=this.getPipelineStats(),this.withMatchPhaseSync("flushPendingSamePathChanges",()=>this.flushPendingSamePathChanges(l,i)),this.logDetectPhase("flushPendingSamePathChanges",p,u),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 we.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,we.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=ce(e,t.metaPath);try{let o=await hs.promises.stat(n);return t.isFolder?o.isDirectory():o.isFile()}catch(o){if(x(o))return we.debug(`skip disappeared sync scan entry: ${n}`),!1;throw o}}async scan(e,t,n){let o=Date.now();we.debug(`scan start side=${t} root=${e} scope=${this.rootRemotePath||"/"}`);let i=new Map;if(!await this.shouldScanScopedProject(t))return we.warn(`skip sync scan scope because baseline project is missing: side=${t} scope=${this.rootRemotePath}`),i;let a=new it(IO),s=new it(FO),c=0,l=!1;return await new Promise((p,u)=>{let g=()=>{c--,c===0&&p()},m=y=>{l||(l=!0,a.cancel(y),s.cancel(y),u(y))},h=(y,C=!1,v=!1)=>{this.throwIfAborted(),c++,a.addTask(async()=>{await this.walk(e,t,y,i,n,h,s,C,v)}).then(g,m)};h(this.rootRemotePath)}),await Promise.all([a.waitAll(),s.waitAll()]),we.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],[u])=>p.localeCompare(u)))}async shouldScanScopedProject(e){if(this.rootRemotePath==="")return!0;let t=ze(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)?(we.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=ce(this.remoteMirrorRoot,e),o=!1;try{o=(await hs.promises.stat(n)).isDirectory()}catch(i){if(!x(i))throw i}return this.mirrorProjectPresence.set(e,o),o||this.reportProblemOnce(new Ea(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>=AO){we.warn(`skip workspace problem event because limit reached: ${e.message}`);return}this.reportedProblemKeys.add(t),this.reportedProblemEventCount++,this.baselineProblems.push(e),we.warn(`workspace problem reported code=${e.code} root=${e.root} projects=${e.projectPaths?.join(",")??""} count=${e.count??""}`),this.options.workspace.eventBus.fireAsync(new et("workspace.problem.reported",e,this)).catch(n=>we.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 hs.promises.readdir(ce(e,n||"/"),{withFileTypes:!0})}catch(h){if(x(h)){we.debug(`skip unreadable sync scan directory: ${e}:${n||"/"}`);return}throw h}let u=await this.readDirectoryDotMeta(e,n,i),g=new Set,m=[];for(let h of p){if(this.throwIfAborted(),n===""&&h.name.startsWith(".")||h.name===X)continue;g.add(h.name);let y=n+"/"+h.name,C=ce(e,y);if(!(n===""&&!h.isDirectory())){if(n===""&&h.isDirectory()&&await this.isCloneInProgressProject(y)){we.debug(`skip clone in-progress root project during workspace scan: side=${t} project=${y}`);continue}if(n===""&&h.isDirectory()&&u.dotMeta[h.name]&&!await this.shouldScanTopLevelProject(t,y)){we.warn(`skip sync scan project without opposite side baseline: side=${t} project=${y}`);continue}if(n===""&&!u.dotMeta[h.name]){a(y,!0,t==="mirror");continue}if(h.isDirectory()){let v=u.dotMeta[h.name];if(!v){if(c){a(y,!0,l||t==="mirror");continue}i.add(u.metaPath)}this.addSnapshotEntry(o,{metaPath:y,side:t,isFolder:!0,meta:v,hasMeta:!!v,underUnregisteredMirrorDirectory:l}),a(y,!1,l||t==="mirror"&&!v)}else h.isFile()&&m.push(s.addTask(async()=>{let v;try{v=await hs.promises.stat(C)}catch(w){if(x(w)){we.debug(`skip unreadable sync scan file stat: ${C}`);return}throw w}c&&!u.dotMeta[h.name]||(this.addSnapshotEntry(o,{metaPath:y,side:t,isFolder:!1,contentSize:v?.size,stat:v?$l(v):void 0,meta:u.dotMeta[h.name],hasMeta:!!u.dotMeta[h.name],underUnregisteredMirrorDirectory:l}),u.dotMeta[h.name]||i.add(u.metaPath))}))}}await Promise.all(m);for(let h of Object.keys(u.dotMeta))g.has(h)||i.add(u.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 br(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==="/"?"/"+X:e+"/"+X}getAvailableFiles(e,t){return[...e.values()].filter(n=>!n.isFolder&&!t.has(n.metaPath))}isIgnoredUntrackedLocal(e){if(e.hasMeta)return!1;let t=De(e.metaPath);return this.options.workspace.isGitIgnored(e.metaPath)||qc(t,this.options.ignore??bt.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));we.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,we.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);we.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++);we.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||!re(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>fw)){let c=n.length,l=o.length;n=n.filter(u=>!t.has(u.metaPath)),o=o.filter(u=>!t.has(u.metaPath)),this.diagnostics.similarity.skippedPendingSamePathLocalCandidates=c-n.length,this.diagnostics.similarity.skippedPendingSamePathRemoteCandidates=l-o.length;let p=t.size<2?"singlePendingSamePath":"pendingPairBudget";we.debug(`skip pending same-path similarity candidates pendingSamePath=${t.size} pendingPairs=${i} maxPairs=${fw} skippedLocal=${c-n.length} skippedRemote=${l-o.length}`);for(let u of t.values())this.logFileFlow("skip similarity",{path:u.localEntry.metaPath,remotePath:u.remoteEntry.metaPath,fileId:this.getEntryFileId(u.localEntry,u.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 zl.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>=MO&&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,u=await this.fingerprint.findEqualFileCandidates(i,a),g=new Map;for(let m of u){let h=g.get(m.localEntry.metaPath);h||(h=[],g.set(m.localEntry.metaPath,h)),h.push(m.remoteEntry.metaPath)}for(let m of i){let h=m.metaPath.slice(n.metaPath.length+1),y=c.get(h);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&&re(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>=xO:!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:!_o(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:!_o(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(" ");we.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)||!re(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)!re(s.localEntry.metaPath,t.metaPath)||!re(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(zl.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=ze(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=ze(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<OO)){for(let l of c)l.baselineMissing=!0,a.push(l);this.reportProblemOnce(new Ea(this.workspaceRoot,"sync.incompleteBaselineFiles",{projectPaths:[s],remotePaths:c.slice(0,_O).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(zl.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:De(e.localPath??e.remotePath??e.metaPath),remotePath:e.localPath??e.remotePath??e.metaPath,...e.fileId!==void 0?{fileId:e.fileId}:{},oldPath:e.oldMetaPath?De(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 LO=T("workspace.sync-status.refresh"),Xr=class{constructor(e,t={}){this.id=e;this.scope=t.scope??"both",this.source=t.source??"manual",this.task=t.task??nt.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:d("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 Kl({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 Kr({workspace:t,task:e,forceRefresh:this.forceRefresh,signal:this.remoteController.signal}).detect()}catch(n){return ky(n)?(this.refreshResult={warnings:[{errorCode:"err.login.notlogin",properties:{serverUrl:t.activeServerUrl}}]},[]):(LO.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 Jl=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 Xr&&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 Xr?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 dr?e.isCancelled():e instanceof Xr?!e.hasRunnableSubTask():!1}canStartScheduledTask(e){return e.task instanceof dr?!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 dr&&e.task.abort()}mergePendingFileWatchTask(e){if(!(e instanceof dr))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 dr&&!t.task.isCancelled())return t}}getRefreshTasks(){return this.taskQueue.map(e=>e.task).filter(e=>e instanceof Xr)}hasRunningFileWatchTask(){return this.taskQueue.some(e=>e.state==="running"&&e.task instanceof dr)}hasEarlierPendingFileWatchTask(e){for(let t of this.taskQueue){if(t===e)return!1;if(t.state==="pending"&&t.task instanceof dr)return!0}return!1}hasRunningLocalRefreshTask(){return this.taskQueue.some(e=>e.state==="running"&&e.task instanceof Xr&&e.task.canRunSubTask("local"))}};var Km=T("workspace.sync-status"),Ql=class{constructor(e){this.workspace=e;this.coordinator=new Jl}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()){Km.debug("background remote discovery skipped because sync lock is held");return}if(this.coordinator.hasRemoteRefreshTask()){Km.debug("background remote discovery skipped because remote refresh is already queued");return}this.refreshAll({scope:"remote",source:"background"}).catch(t=>{Km.warn("background remote discovery failed",t)})}async hasSyncLock(){let e=this.workspace?.lockManager;return e?await e.isHeldLock("sync"):!1}createRefreshTask(e={}){return new Xr(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=ht(s),l=Er(s);!e&&c&&!l||e&&n&&c&&!l&&!cm(s,[n])?o.push(s):!t&&l&&!c&&i.push(s)}let a=zv(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 dr(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 Vl(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 Bl(this.nextTaskId(),{source:e,targetRemotePaths:t,changes:n,mode:o,publish:i=>this.publishTaskResult(i)})}createClearTask(e){return new jl(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())ht(n)?e++:Er(n)&&t++;return{pushCount:e,pullCount:t}}getLocalChanges(){return this.getChanges().filter(e=>ht(e))}getRemoteChanges(){return this.getChanges().filter(e=>Er(e))}getFullRefreshCount(){return this.fullRefreshCount}replaceTargets(e,t){if(e.length===0)return;let n=Ni(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(sl).flatMap(i=>[i.remotePath,i.oldRemotePath]).filter(i=>!!i),o=new Set;for(let[i,a]of this.changes)if(Hv(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(pl(e),e);return}this.changes.set(pl(t),t)}createMoveChangeByExistingState(e){let t=this.findMoveCounterpart(e);if(t)return this.changes.delete(pl(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 Xl=E(require("path"));J();$();var NO=T("workspace.file-watch"),WO="**/*",UO=1e3,hw=5e3,jO=200,VO=50,gw="refreshAfterFileChange",Yl=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,WO));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 to;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??VO)||(this.pendingChanges.set(`${n}\0${t}`,e),this.scheduleRefresh())}scheduleRefresh(){ki(this,gw,this.options.refreshDelay??UO,()=>this.refreshPendingChanges(),{maxWaitMs:this.options.maxRefreshDelay??hw})}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){NO.debug(`refresh sync status after file change failed: ${this.workspace.root}`,n)}}}fireWorkspaceFileChanged(e){this.eventBus.fire(new et("workspace.file.changed",{root:this.workspace.root,filePath:e.filePath,type:e.type},this))}getBulkThreshold(){return Math.max(1,this.options.bulkThreshold??jO)}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??hw),this.deferredRecheckTimer.unref?.())}clearDeferredRecheckTimer(){this.deferredRecheckTimer&&(clearTimeout(this.deferredRecheckTimer),this.deferredRecheckTimer=void 0)}clearRefreshTimer(){wi(this,gw)}isWorkspaceSystemFile(e){let t=Xl.relative(this.workspace.root,e);return Xd.some(n=>t===n||t.startsWith(`${n}${Xl.sep}`))}dispose(){this.clearRefreshTimer(),this.clearDeferredRecheckTimer(),this.pendingChanges.clear(),this.disposables.dispose()}};J();var Mr=E(require("fs")),Ps=E(require("path"));tt();J();Z();$();_();F();function Tt(){return{status:"planned",dryRun:!0,applied:!1}}function gt(){return{status:"applied",dryRun:!1,applied:!0}}function Zr(r=!1){return{status:"blocked",dryRun:r,applied:!1}}function ro(r,e){return{status:"skipped",dryRun:r,applied:!1,properties:{skipCause:e}}}function gs(r=!1){return{status:"failed",dryRun:r,applied:!1}}var Ss=E(require("path"));tt();Ie();var ys=class r{constructor(e,t){this.filePath=e;this.content=t}content;changed=!1;static async read(e){return new r(e,await Re(e))}hasChanges(){return this.changed}getContent(){return this.content}upsertMarkedBlock(e){let t=BO(this.content,e);return this.updateContent(t)}removeMarkedBlock(e){let t=Cw(e),n=Sw(t);if(!n.test(this.content))return!1;let o=this.content.replace(n,"").replace(/\s*$/,"");return this.updateContent(o?`${o}
|
|
68
|
+
`:"")}async save(){return this.changed?(await vt(this.filePath,this.content),this.changed=!1,!0):!1}updateContent(e){return e===this.content?!1:(this.content=e,this.changed=!0,!0)}};function BO(r,e){let t=Cw(e),n=Sw(t);if(n.test(r))return r.replace(n,t.content);let o=r.replace(/\s*$/,"");return`${o}${o?`
|
|
76
69
|
|
|
77
70
|
`:""}${t.content}
|
|
78
|
-
`}function
|
|
79
|
-
`),n=t[0],o=t[t.length-1];return
|
|
80
|
-
`),{...
|
|
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
|
-
`)
|
|
84
|
-
|
|
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
|
-
|
|
89
|
-
|
|
90
|
-
|
|
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
|
-
|
|
94
|
-
`)}function
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
${
|
|
98
|
-
${
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
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(`
|
|
71
|
+
`}function Cw(r){let e=r.trimEnd(),t=e.split(`
|
|
72
|
+
`),n=t[0],o=t[t.length-1];return H(t.length>=2&&n.startsWith("# BEGIN ")&&o.startsWith("# END "),"Git ignore template must be a marked block."),{begin:n,end:o,content:e}}function Sw(r){return new RegExp(`${yw(r.begin)}[\\s\\S]*?${yw(r.end)}`)}function yw(r){return r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}J();$();var Jm=E(require("fs")),Vt=E(require("path"));Ie();$();var qO="resources",$O="workspace-templates",HO="succapp-workspace";async function $o(r){let e=await Zl(r),t=ot((await Jm.promises.readFile(e,"utf8")).replace(/\r\n/g,`
|
|
73
|
+
`),{...kr,filePath:e});return H(t,`Workspace template is not a JSON object: ${e}`),t}async function kn(r){return(await Jm.promises.readFile(await Zl(r),"utf8")).replace(/\r\n/g,`
|
|
74
|
+
`)}async function Zl(r){let e=await KO(),t=zO(r),n=Vt.join(e,...t.split("/"));if(await ie(n))return n;let o=GO(e,t);return o&&await ie(o)?o:n}function Cs(r,e){return Array.isArray(r[e])?r[e].filter(t=>typeof t=="string"):[]}function zO(r){let e=pn(r);return H(e,`Unsafe workspace template path: ${r}`),e}function GO(r,e){if(Vt.posix.basename(e)!==".gitignore")return;let t=Vt.posix.dirname(e),n=t==="."?"gitignore.template":Vt.posix.join(t,"gitignore.template");return Vt.join(r,...n.split("/"))}async function KO(){let r=[qO,$O,HO],e=[Vt.resolve(__dirname,"..",...r),Vt.resolve(__dirname,"..","..",...r),Vt.resolve(__dirname,"..","..","..",...r),Vt.resolve(__dirname,"..","..","..","..",...r),Vt.resolve(__dirname,"..","..","..","..","..",...r),Vt.resolve(process.cwd(),...r)];for(let t of e)if(await ie(t))return t;return e[e.length-1]}var JO=T("workspace.maintenance.support"),Ho=".gitignore",QO=Ho,YO=Ss.posix.join(ln,Ho);async function ep(r){try{let e=await r.requireClient();return{client:e,serverInfo:await e.getServerInfo()}}catch(e){JO.debug(`skip server workspace support without server client: ${r.root}`,e);return}}function Qm(r,e){return r.capabilities?.includes(e)===!0}function vw(r,e){return!r.capabilities||Qm(r,e)}function tp(r){return{refreshServerSupport:XO(r,"refreshServerSupport")===!0}}async function kw(r,e){let t=Ss.join(r.root,Ho),n=await ys.read(t);n.upsertMarkedBlock(await kn(QO));let o=Ss.join(Wr(r.root),Ho),i=await ys.read(o);if(i.upsertMarkedBlock(await kn(YO)),e.apply){let a=await n.save(),s=await i.save();return a||s}return n.hasChanges()||i.hasChanges()}function Ot(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 XO(r,e){let t=r?.[e];return typeof t=="boolean"?t:void 0}var ks=E(require("path"));$();var Bi=".agents/skills/succapp-docs",rp="indexes/md-index.json",np="indexes/assets-index.json",op="indexes/metadata-demo-index.json",vs="metadata-examples/DEMO",ZO="guide/dev/ai-building/task-driven.md",Ym=".sync-state.json",e_="SUCCAPP_DOCS_BASE_URL",t_="https://docs.succapp.com";function ww(r=process.env){let e=r_(r[e_]||t_);return new URL("md-index.json",`${e}/`).toString()}function Pw(r,e){return{schemaVersion:1,skill:"succapp-docs",docSet:r.docSet,product:r.product??"SuccApp",generatedAt:r.generatedAt,updatedAt:e,entrypoints:{skill:"SKILL.md",aiBuilding:"guide/dev/ai-building/README.md",workspace:"guide/dev/ai-building/basics/workspace.md",markdownIndex:rp,assetsIndex:np,metadataDemoIndex:op,metadataDemo:vs,taskRoutes:ZO}}}function r_(r){return new URL(r.trim()).toString().replace(/\/+$/,"")}var ip=Bi,ws="dev-types",zo="json-schemas",n_="state.json",Rw=".succapp/succ-types",Xm=".succapp/json-schemas";function ap(r){return jr(r,ip,"workspace dev support path")}function bw(r){return ks.join(ap(r),ws)}function Ew(r){return ks.join(ap(r),zo)}function sp(r){return ks.join(ap(r),n_)}function cp(r,e){return ks.join(ap(r),`${e}.tmp-${process.pid}-${Date.now()}`)}function Tw(r){return`./${ip}/${zo}/${r}`}tt();var Mw=require("crypto");function wn(r){return(0,Mw.createHash)("sha256").update(r).digest("hex")}J();Z();var o_=T("workspace.maintenance.dev-support-state");async function Go(r){let e=sp(r),t=await Re(e);if(!t.trim())return Zm();try{let n=JSON.parse(t);return a_(n)?n:Zm()}catch(n){return o_.debug(`skip workspace dev support state because it cannot be parsed: ${e}`,n),Zm()}}function qi(r,e,t){return r.servers?.[e]?.packages?.[t]}async function lp(r,e,t,n,o,i){let a=await Go(r),s=qi(a,e,n);if(a.materializedServer===e&&s?.updatedAt&&!$i(s,o))return!1;let c=new Date().toISOString(),l={};for(let[g,m]of Object.entries(a.servers??{})){if(g===e)continue;let h={...m.packages??{}};delete h[n],l[g]={...m,packages:Object.keys(h).length>0?h:void 0}}let p=a.servers?.[e];l[e]={...s_(t),packages:{...p?.packages,[n]:{...o,updatedAt:c}}};let u=$r({schemaVersion:1,materializedServer:e,servers:l});return u===await Re(sp(r))?!1:(i&&await vt(sp(r),u),!0)}function i_(r,e,t={}){return I({packageId:[r,e.version,e.productType,e.devToolApiVersion].filter(n=>typeof n=="string"&&n.length>0).join("|"),etag:t.etag,lastModified:t.lastModified})}function pp(r,e,t){let n=i_(r,e);return{...n,packageId:wn(JSON.stringify({fallback:n.packageId,files:t}))}}function Zm(){return{schemaVersion:1}}function a_(r){return typeof r=="object"&&r!==null&&(!("servers"in r)||typeof r.servers=="object"&&r.servers!==null&&!Array.isArray(r.servers))}function s_(r){return I({serverVersion:r.version,productType:r.productType,devToolApiVersion:r.devToolApiVersion})}function $i(r,e){return r?r.packageId!==e.packageId||e.etag!==void 0&&r.etag!==e.etag?!0:e.lastModified!==void 0&&r.lastModified!==e.lastModified:!1}var ef="json-schema-support",xw="err.workspace.issue.E405",c_="jsonSchemaSupport",tf=T("workspace.maintenance.json-schema-support"),Hi=class{capabilities={taskId:ef,writeScopes:["init"],serverRequirement:"optional"};async refreshOnServerVersionChange(e,t,n){if(!this.supportsJsonSchemaSupport(n))return;let o=await Go(e.root),i=qi(o,t.serverUrl,"jsonSchemas");if(!i&&!await this.hasSuccAppWorkspaceSetting(e.root))return;let a=await this.loadJsonSchemaSupportData(t,n);if(o.materializedServer===t.serverUrl&&i?.updatedAt&&!$i(i,a.packageSignature))return;let s=await this.materializeFiles(e.root,a.manifest,t,a.schemaContents);await this.updateWorkspaceSettings(e.root,s,!0),await this.updateState(e.root,t.serverUrl,n,a.packageSignature,!0)}async execute(e){return this.maintainJsonSchemaSupport(e,!e.dryRun)}async maintainJsonSchemaSupport(e,t){let n=this.getMaintenancePaths(e.workspace.root),o=await ep(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 tf.warn(`plan JSON Schema support failed: ${i.root}`,s),[this.createIssue(i.localPaths,gs(),["schema-files-outdated"])]}if(!i.apply)return a.causes.length>0?[this.createIssue(i.localPaths,Tt(),a.causes)]:[];if(a.causes.length===0)return[];try{let s=a.manifest??await i.client.getJsonSchemaSupport(),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,a.packageSignature,!0);return a.shouldDownloadSchemas||l||p?[this.createIssue(i.localPaths,gt(),a.causes)]:[]}catch(s){return tf.warn(`apply JSON Schema support failed: ${i.root}`,s),[this.createIssue(i.localPaths,gs(),a.causes)]}}async createMaintenancePlan(e){let t=await this.loadJsonSchemaSupportData(e.client,e.serverInfo),n=t.manifest,o=n.schemas,i=t.schemaContents,a=t.packageSignature,s=await Go(e.root),c=e.forceRefresh===!0||s.materializedServer!==void 0&&s.materializedServer!==e.client.serverUrl||await this.hasSchemaFileChanges(e.root,o,i),l=[];return c&&l.push("schema-files-outdated"),await this.updateWorkspaceSettings(e.root,o,!1)&&l.push("settings-outdated"),await this.updateState(e.root,e.client.serverUrl,e.serverInfo,a,!1)&&l.push("state-outdated"),{causes:l,shouldDownloadSchemas:c,manifest:n,schemaContents:i,packageSignature:a}}createMaintenanceRun(e,t,n,o){return{root:e.workspace.root,localPaths:t,apply:n,...this.createExecutionOptions(e,o)}}createExecutionOptions(e,t){let n=tp(e.taskOptions);return{...t,applyWorkspaceConfiguration:!0,forceRefresh:n.refreshServerSupport}}supportsJsonSchemaSupport(e){return Qm(e,c_)}getMaintenancePaths(e){return[this.getSupportRoot(e),l_(e),Ur(e)]}createIssue(e,t,n=[]){return Ot({code:xw,taskId:ef,repairable:!0,level:"info",localPaths:e,properties:{item:"json-schema-support",causes:n},execution:t})}createSkippedIssue(e,t,n){return Ot({code:xw,taskId:ef,repairable:!1,level:"warning",localPaths:e,properties:{item:"json-schema-support"},execution:ro(t,n)})}async materializeFiles(e,t,n,o){let i=this.getSupportRoot(e),a=cp(e,zo);await Mr.promises.rm(a,{recursive:!0,force:!0});try{await Mr.promises.mkdir(a,{recursive:!0});let s=this.normalizeSchemas(t),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),u=p!==void 0?p:await n.downloadJsonSchema(l.source),g=jr(a,l.path,"JSON Schema path");await Mr.promises.mkdir(Ps.dirname(g),{recursive:!0}),await Mr.promises.writeFile(g,u,"utf8")})),await Mr.promises.rm(i,{recursive:!0,force:!0}),await Mr.promises.rename(a,i),s}catch(s){throw await Mr.promises.rm(a,{recursive:!0,force:!0}).catch(c=>{tf.debug(`cleanup temporary JSON Schema support directory failed: ${a}`,c)}),s}}async loadJsonSchemaSupportData(e,t){let n=await e.getJsonSchemaSupport(),o=this.normalizeSchemas(n),i={schemas:o},a=await this.downloadSchemaContents(o,e);return{manifest:i,schemaContents:a,packageSignature:p_(t,o,a)}}normalizeSchemas(e){return e.schemas.map(t=>({...t,path:Un(t.path,"JSON Schema path"),source:Un(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 ie(o))return!0;let i=new Set(t.map(a=>a.path));for(let a of await this.listSupportFiles(o))if(!i.has(a))return!0;for(let a of t){let s=jr(o,a.path,"JSON Schema path");if(await this.readSupportTextIfFile(s)!==n.get(a.path))return!0}return!1}async readSupportTextIfFile(e){try{return(await Mr.promises.stat(e)).isFile()?await Mr.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?Ps.join(e,...t.split("/")):e,i=await Mr.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=Ur(e),i=await Re(o),a=ot(i,{...kr,filePath:o,ignoreParseError:!0});if(!a)return!1;let s=un(i);return s=this.upsertMissingJsonSchemas(s,a,t),s===un(i)?!1:(n&&await vt(o,s),!0)}async hasSuccAppWorkspaceSetting(e){let t=await Re(Ur(e)),n=ot(t,{...kr,filePath:Ur(e),ignoreParseError:!0});return n?(Array.isArray(n["json.schemas"])?n["json.schemas"]:[]).filter(i=>this.isJsonSchemaSetting(i)).some(i=>{let a=i.url.replace(/\\/g,"/");return this.isSuccAppJsonSchemaUrl(this.normalizeSettingUrl(a))}):!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:Tw(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 u=this.normalizeSettingUrl(p.url);if(!this.isSuccAppJsonSchemaUrl(u)){c.push(p);continue}if(s.has(u)){l=!0;continue}let g=a.get(u);if(!g){l=!0;continue}s.add(u),c.push(g),on(p,g)||(l=!0)}for(let p of i){let u=this.normalizeSettingUrl(p.url);s.has(u)||(c.push(p),l=!0)}return l?Qt(e,["json.schemas"],c):e}isJsonSchemaSetting(e){return W(e)&&typeof e.url=="string"}isSuccAppJsonSchemaUrl(e){return e.startsWith(`${Xm}/`)||e.startsWith(`${ip}/${zo}/`)}normalizeSettingUrl(e){return e.replace(/\\/g,"/").replace(/^\.\//,"")}async updateState(e,t,n,o,i){return lp(e,t,n,"jsonSchemas",o,i)}getSupportRoot(e){return Ew(e)}};function l_(r){return Ps.join(r,...Xm.split("/"))}function p_(r,e,t){return pp("jsonSchemas",r,[...e].sort((n,o)=>n.path<o.path?-1:n.path>o.path?1:0).map(n=>({path:n.path,fileMatch:n.fileMatch,content:t.get(n.path)??""})))}var xr=E(require("fs")),Ye=E(require("path"));Ie();F();tt();J();tt();var Rs=class r{constructor(e,t){this.filePath=e;this.content=t}content;changed=!1;static async read(e){return new r(e,await Re(e))}hasChanges(){return this.changed}getContent(){return this.content}upsertProjectReferences(e){let t=ot(this.content,{...kr,filePath:this.filePath,ignoreParseError:!0});if(!t)return{updated:!1,mergeRequired:!0};let n=d_(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 vt(this.filePath,un(this.content)),this.changed=!1,!0):!1}updateContent(e){return e===this.content?!1:(this.content=e,this.changed=!0,!0)}};function d_(r,e){let t=Array.isArray(r.references)?[...r.references]:[],n=!Array.isArray(r.references);for(let o of e)t.some(i=>u_(i,o))||(t.push({path:o}),n=!0);return n?{...r,references:t}:r}function u_(r,e){return m_(r)&&r.path===e}function m_(r){return typeof r=="object"&&r!==null&&"path"in r&&typeof r.path=="string"}$();_();var rf="typescript-support",Iw="err.workspace.issue.E404",f_="typescriptSupport",Es="tsconfig.json",nf="tsconfig.action.json",of="tsconfig.browser.json",h_=Ye.posix.join(".vscode","settings.typescript-support.jsonc"),bs=T("workspace.maintenance.typescript-support"),zi=class{capabilities={taskId:rf,writeScopes:["init"],serverRequirement:"optional"};async refreshOnServerVersionChange(e,t,n){if(!this.supportsTypeScriptSupport(n))return;let o=await Go(e.root),i=qi(o,t.serverUrl,"devTypes"),a=await this.downloadTypeScriptSupportPackage(t,n);o.materializedServer===t.serverUrl&&i?.updatedAt&&!$i(i,a.signature)||(await this.materializeTypeScriptSupportFiles(e.root,a.apiLibs),await this.updateTypeScriptTsConfigs(e.root,{},!0),await this.updateTypeScriptSupportState(e.root,t.serverUrl,n,a.signature,!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 ep(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,Tt(),a.causes)]:[];if(a.causes.length===0)return[];try{let s=await this.updateTypeScriptSyncIgnore(e.workspace.root,!0),c=a.signature;a.shouldDownloadTypes&&(H(a.apiLibs,"TypeScript support package content is required when type files are outdated."),await this.materializeTypeScriptSupportFiles(e.workspace.root,a.apiLibs));let l=await this.updateTypeScriptTsConfigs(e.workspace.root,i,!0),p=await this.updateTypeScriptSupportState(e.workspace.root,i.client.serverUrl,i.serverInfo,c,!0);return s||a.shouldDownloadTypes||l||p?[this.createIssue(n,gt(),a.causes)]:[]}catch(s){return bs.warn(`apply TypeScript support failed: ${e.workspace.root}`,s),[this.createIssue(n,gs(),a.causes)]}}async createMaintenancePlan(e,t){let n=[];await this.updateTypeScriptSyncIgnore(e,!1)&&n.push("sync-ignore-outdated");let o=await Go(e),i=qi(o,t.client.serverUrl,"devTypes"),a=await this.downloadTypeScriptSupportPackage(t.client,t.serverInfo),s=a.signature,c=$i(i,s),l=await this.hasAnyFile(dp(e)),p=await this.hasAnyFile(Fw(e)),u=t.forceRefresh===!0||c||o.materializedServer!==void 0&&o.materializedServer!==t.client.serverUrl||!l||p&&!l;return u&&n.push("type-files-outdated"),await this.updateTypeScriptTsConfigs(e,t,!1)&&n.push("tsconfig-outdated"),await this.updateTypeScriptSupportState(e,t.client.serverUrl,t.serverInfo,s,!1)&&n.push("state-outdated"),{causes:n,shouldDownloadTypes:u,signature:s,apiLibs:a.apiLibs}}createExecutionOptions(e,t){let n=tp(e.taskOptions);return{...t,forceRefresh:n.refreshServerSupport,overwriteGeneratedTsConfig:!0}}supportsTypeScriptSupport(e){return vw(e,f_)}async getMaintenancePaths(e){let t=await g_(e);return t.length>0?t:[dp(e)]}createIssue(e,t,n=[]){return Ot({code:Iw,taskId:rf,repairable:!0,level:"info",localPaths:e,properties:{item:"typescript-support",causes:n},execution:t})}createSkippedIssue(e,t,n){return Ot({code:Iw,taskId:rf,repairable:!1,level:"warning",localPaths:e,properties:{item:"typescript-support"},execution:ro(t,n)})}async hasAnyFile(e){let t=await xr.promises.readdir(e,{withFileTypes:!0}).catch(n=>{if(x(n))return bs.debug(`skip missing TypeScript support directory: ${e}`),[];throw n});for(let n of t)if(n.isFile()||n.isDirectory()&&await this.hasAnyFile(Ye.join(e,n.name)))return!0;return!1}async materializeTypeScriptSupportFiles(e,t){let n=dp(e),o=cp(e,ws);await xr.promises.rm(o,{recursive:!0,force:!0});try{await xr.promises.mkdir(o,{recursive:!0});let i=await Promise.all(Object.entries(t).map(async([a,s])=>{let c=y_(a);if(!c||typeof s!="string")return;let l=Ye.join(o,c);return await xr.promises.mkdir(Ye.dirname(l),{recursive:!0}),await xr.promises.writeFile(l,s,"utf8"),v_(c)}));await C_(o,i.filter(a=>a!==void 0)),await xr.promises.rm(n,{recursive:!0,force:!0}),await xr.promises.rename(o,n)}catch(i){throw await xr.promises.rm(o,{recursive:!0,force:!0}).catch(a=>{bs.debug(`cleanup temporary TypeScript support directory failed: ${o}`,a)}),i}}async updateTypeScriptTsConfigs(e,t,n){let o=Wr(e);n&&await xr.promises.mkdir(o,{recursive:!0});let i=await this.updateRootTsConfig(e,n),a=await this.updateGeneratedOrMissingTsConfig(Ye.join(o,nf),await kn(Ye.posix.join(ln,nf)),t,n),s=await this.updateGeneratedOrMissingTsConfig(Ye.join(o,of),await kn(Ye.posix.join(ln,of)),t,n);return i||a||s}async updateRootTsConfig(e,t){let n=Ye.join(e,Es),o=await kn(Es),i=await Rs.read(n);if(!i.getContent().trim())return i.replaceContent(o),t?i.save():!0;let a=i.upsertProjectReferences(await k_());return a.mergeRequired?(bs.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 Rs.read(e),a=i.upsertGeneratedContent(t,{overwrite:n.overwriteGeneratedTsConfig===!0});return a.overwriteRequired?(o&&bs.debug(`skip generated tsconfig overwrite without refresh permission: ${e}`),!1):a.updated?o?i.save():!0:!1}async updateTypeScriptSyncIgnore(e,t){let n=Ur(e),o=await Re(n),i=ot(o,{...kr,filePath:n,ignoreParseError:!0});if(!i)return!1;let a=await $o(h_),s=Cs(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 vt(n,Qt(o,["succapp.sync.ignore"],[...c,...l])),bt.load()),!0)}async updateTypeScriptSupportState(e,t,n,o,i){return lp(e,t,n,"devTypes",o,i)}async downloadTypeScriptSupportPackage(e,t){let n=await e.getTypeScriptSupportApiLibs();return{apiLibs:n,signature:P_(t,n)}}};async function g_(r){let e=[Ye.join(r,Es),Ye.join(Wr(r),nf),Ye.join(Wr(r),of),dp(r),Fw(r)],t=[];for(let n of e)await ie(n)&&t.push(n);return t}function y_(r){return pn(r)?.split("/").join(Ye.sep)}async function C_(r,e){if(e.includes("index.json"))return;let t=e.filter(n=>n.endsWith(".d.ts")).sort();await xr.promises.writeFile(Ye.join(r,"index.json"),$r({schemaVersion:1,entrypoints:S_(t),files:t}),"utf8")}function S_(r){let e=[["metadataFileTypes","types/meta/file-types/index.d.ts"],["succApi","types/api/succ.d.ts"]],t=new Set(r),n={};for(let[o,i]of e)t.has(i)&&(n[o]=i);return n}function v_(r){return r.split(Ye.sep).join("/")}async function k_(){let r=await $o(Es),e=Array.isArray(r.references)?r.references.map(t=>w_(t)?t.path:void 0).filter(t=>typeof t=="string"):[];return H(e.length>0,`Workspace template does not declare TypeScript references: ${await Zl(Es)}`),e}function w_(r){return typeof r=="object"&&r!==null&&"path"in r&&typeof r.path=="string"}function P_(r,e){return pp("devTypes",r,Object.keys(e).sort().map(t=>({path:t,content:e[t]})))}function dp(r){return bw(r)}function Fw(r){return Ye.join(r,...Rw.split("/"))}var Dw=T("workspace.maintenance.support-refresh");async function Aw(r,e,t){await r.lockManager.withLock({scopes:["init"],command:"workspace-support-refresh"},async()=>R_(r,e,t))}async function R_(r,e,t){try{await new zi().refreshOnServerVersionChange(r,e,t)}catch(n){Dw.warn(`refresh TypeScript support after server version change failed: ${r.root}`,n)}try{await new Hi().refreshOnServerVersionChange(r,e,t)}catch(n){Dw.warn(`refresh JSON Schema support after server version change failed: ${r.root}`,n)}}qr();Bn();qr();J();D();_();var _w=E(require("node:path"));Ge();_();J();$();No();var Ow="sync-baseline",af=50,Pn=T("workspace.maintenance.sync-baseline"),up=class{capabilities={taskId:Ow,writeScopes:["sync"],serverRequirement:"required"};async execute(e,t){let n=t!==void 0?[...t]:await this.detectBaselineIssues(e);if(Pn.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);Pn.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 Pn.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,gt())),...a.map(l=>this.withExecution(l,Zr())),...c.map(l=>this.withExecution(l,Zr()))]}async detectBaselineIssues(e){e.task.throwIfAborted(),Pn.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);Pn.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 Rt(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=kt(t),o=[];return await this.detectDirectoryBaselineIssues(e,t,n,o),o}async detectDirectoryBaselineIssues(e,t,n,o){let i=_w.posix.join(n,X),a=await br(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),u=a.dotMeta[l];if(!await e.exists(p)){o.push(this.createMissingBaselineResourceIssue(t,p));continue}let m=await e.isFolder(p),h=this.getExplicitFolderType(u);if(h!==void 0&&h!==m){o.push(this.createBaselineResourceTypeIssue(t,p,h,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(pe(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=>pe(t))}filterIssuesByTargets(e,t){return!t||t.length===0?e:e.filter(n=>n.remotePaths.some(o=>t.some(i=>jn(o,void 0,i,void 0))))}getProjectName(e){return ze(e)?.replace(/^\//,"")}createMissingBaselineProjectIssue(e){let t=kt(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:Ow,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 Pn.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){Pn.info("sync-baseline fetch skipped: no repairable project names");return}Pn.info("sync-baseline fetch start: projects={0}",this.formatProjectNames(n)),await new Zn(e.workspace,{projectNames:n,forceRefresh:!0,task:e.task}).execute(),Pn.info("sync-baseline fetch done: projects={0}",this.formatProjectNames(n))}createDryRunExecution(e){return e.repairable?Tt():Zr(!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 pn(e)===e&&!e.includes("/")&&e!==X}formatIssuePaths(e){return this.formatPaths(e.flatMap(t=>t.remotePaths))}formatProjectNames(e){return this.formatPaths(e.map(t=>kt(t)))}formatPaths(e){if(!e||e.length===0)return"<none>";let t=e.slice(0,af),n=e.length>af?` ...(+${e.length-af})`:"";return t.join(",")+n}};_();J();$();var Ki=E(require("fs")),Ir=E(require("path"));fn();tt();D();qr();J();Z();F();$();var Gi=T("workspace.maintenance.agent-docs-skill"),Lw=5e3,b_=1024*1024,E_=/\.gif$/i,T_=/\.mp4$/i,M_=/\.expected\.md$/i,x_=/\.(?:avif|bmp|jpe?g|png|svg|webp)$/i,jw=["README.md"],Nw=/!?\[[^\]]*]\(([^)\n]+)\)|^[ \t]{0,3}\[[^\]]+]:[ \t]*(\S+)|\b(?:href|src)=["']([^"']+)["']/gm,mp=class{constructor(e=D_,t=A_){this.fetchText=e;this.fetchFile=t}async sync(e,t){let n=t.indexUrl??ww(),o=t.task??nt.INSTANCE;o.start(100,{message:d("workspace.maintenance.agentDocs.progress.indexes")});let i=o.subTaskMonitor(8),a=o.subTaskMonitor(36),s=o.subTaskMonitor(50),c=o.subTaskMonitor(6);i.start(3,{message:d("workspace.maintenance.agentDocs.progress.indexes")});let l=H_(await this.fetchText(n));i.step();let p=await this.fetchAssetsIndex(n);i.step();let u=p?.index,g=p?.text,m=g===void 0?void 0:wn(g),h=await this.fetchMetadataDemoIndex(n);i.step();let y=h?.index,C=h?.text,v=C===void 0?void 0:wn(C),w=oL(e),f=Ir.join(w,Ym),S=await O_(f),k=$r(l),b=wn(k),P=await Re(_t(w,rp)),Q=await Re(_t(w,np)),M=await Re(_t(w,op)),z=g===void 0||Q===g,j=C===void 0||M===C,ee=j_(u,y);if(y||V_(ee,S),!t.force&&!U_(S)&&N_(l,S)&&W_(ee,S)&&P===k&&z&&j)return a.finish(),s.finish(),c.finish(),o.finish(),L_(l,S);let V={added:0,changed:0,removed:0,skipped:0,unavailable:0,resourcesAdded:0,resourcesChanged:0,resourcesRemoved:0,resourcesSkipped:0,resourcesUnavailable:0},q={},K={},oe=new Set(l.files.map(Te=>Te.path));a.start(Math.max(l.files.length,1),{message:d("workspace.maintenance.agentDocs.progress.markdown")}),await qa([...l.files],async Te=>{try{let le=_t(w,Te.path),Ze=await __(le),Ca=Ze===Te.sha256,Ht;if(Ca)V.skipped++,Ht=await Re(le);else{let go=await this.downloadMarkdown(n,Te);if(go===void 0){V.unavailable++;return}Ht=go,t.apply&&await It(le,Ht),Ze===void 0?V.added++:V.changed++}if(q[Te.path]={sha256:Te.sha256,bytes:Te.bytes},!u){let go=X_(Te.path,Ht);for(let bd of go)cf(bd)||ee.set(bd,{path:bd})}}finally{a.step()}}),l.files.length===0&&a.step(),s.start(Math.max(ee.size,1),{message:d("workspace.maintenance.agentDocs.progress.assets")}),await qa([...ee.values()],async Te=>{let le=await this.syncResource(w,n,Te,t.apply);V.resourcesAdded+=le.added,V.resourcesChanged+=le.changed,V.resourcesSkipped+=le.skipped,V.resourcesUnavailable+=le.unavailable,le.file&&(K[Te.path]=le.file),s.step()}),ee.size===0&&s.step();for(let Te of Object.keys(S.files))oe.has(Te)||(V.removed++,t.apply&&await Ki.promises.rm(_t(w,Te),{force:!0}));for(let Te of Object.keys(S.resources??{}))ee.has(Te)||(V.resourcesRemoved++,t.apply&&!lf(Te)&&await Ki.promises.rm(_t(w,Te),{force:!0}));let ae=V.added+V.changed+V.removed>0,A=V.resourcesAdded+V.resourcesChanged+V.resourcesRemoved>0,B=S.syncedAt||new Date().toISOString();c.start(1,{message:d("workspace.maintenance.agentDocs.progress.metadata")});let se=await Ww(this.fetchText,n,l,k,b,g,m,C,v,B,q,K),xn=await F_(w,se,oe),hr=ae||A||xn?new Date().toISOString():B;return hr!==B&&(se=await Ww(this.fetchText,n,l,k,b,g,m,C,v,hr,q,K),xn=!0),t.apply&&await this.writeGeneratedFiles(w,se,oe),c.step(),o.finish(),{docSet:l.docSet,generatedAt:l.generatedAt,updatedAt:hr,total:l.files.length,added:V.added,changed:V.changed,removed:V.removed,skipped:V.skipped,unavailable:V.unavailable,resourcesAdded:V.resourcesAdded,resourcesChanged:V.resourcesChanged,resourcesRemoved:V.resourcesRemoved,resourcesSkipped:V.resourcesSkipped,resourcesUnavailable:V.resourcesUnavailable,metadataChanged:xn}}async fetchAssetsIndex(e){let t=Ts(e,"assets-index.json");try{let n=await this.fetchText(t),o=B_(z_(n));return{index:o,text:$r(o)}}catch(n){Gi.warn(`skip SuccApp docs assets index: ${t}`,n);return}}async fetchMetadataDemoIndex(e){let t=Ts(e,"metadata-examples/DEMO/index.json");try{let n=await this.fetchText(t),o=q_(K_(n));return{index:o,text:$r(o)}}catch(n){Gi.warn(`skip SuccApp metadata demo index: ${t}`,n);return}}async downloadMarkdown(e,t){let n=Ts(e,t.path);try{let o=await this.fetchText(n);return Y_(t,o),o}catch(o){Gi.warn(`skip SuccApp docs markdown file: ${n}`,o);return}}async syncResource(e,t,n,o){let i=n.path,a=_t(e,i),s=await rL(a),c=nL(n);if(c&&s&&sf(s,c))return{added:0,changed:0,skipped:1,unavailable:0,file:s};let l=Ts(t,n.urlPath??i),p;try{p=await this.fetchFile(l)}catch(g){return Gi.warn(`skip SuccApp docs linked resource: ${l}`,g),{added:0,changed:0,skipped:0,unavailable:1}}let u=qw(p);return c&&!sf(u,c)?(Gi.warn(`skip SuccApp docs linked resource with mismatched checksum: ${l}`),{added:0,changed:0,skipped:0,unavailable:1}):!c&&s&&sf(s,u)?{added:0,changed:0,skipped:1,unavailable:0,file:s}:(o&&await It(a,p),{added:s?0:1,changed:s?1:0,skipped:0,unavailable:0,file:u})}async writeGeneratedFiles(e,t,n){for(let[o,i]of Object.entries(t))await It(_t(e,o),i);for(let o of jw)n.has(o)||await Ki.promises.rm(_t(e,o),{force:!0})}};async function Ww(r,e,t,n,o,i,a,s,c,l,p,u){let g=Pw(t,l),m={"SKILL.md":await I_(r,e),"manifest.json":$r(g),[rp]:n,[Ym]:$r({schemaVersion:1,source:e,syncedAt:l,indexSha256:o,assetsIndexSha256:a,metadataDemoIndexSha256:c,files:p,resources:u})};return i!==void 0&&(m[np]=i),s!==void 0&&(m[op]=s),m}function I_(r,e){return r(Ts(e,"SKILL.md"))}async function F_(r,e,t){for(let[n,o]of Object.entries(e))if(await Re(_t(r,n))!==o)return!0;for(let n of jw)if(!t.has(n)&&(await Re(_t(r,n))).trim())return!0;return!1}async function D_(r){let e=await $w(r,{headers:{Accept:"text/markdown, application/json, text/plain;q=0.9","Accept-Encoding":"gzip"}});if(!e.ok)throw new Error(`download failed: ${r} (${e.status})`);return e.text()}async function A_(r){let e=await $w(r,{headers:{Accept:"*/*","Accept-Encoding":"gzip"}});if(!e.ok)throw new Error(`download failed: ${r} (${e.status})`);return Buffer.from(await e.arrayBuffer())}async function O_(r){let e=await Re(r);if(!e.trim())return{schemaVersion:1,source:"",syncedAt:"",files:{}};try{let t=ot(e);return{schemaVersion:1,source:typeof t.source=="string"?t.source:"",syncedAt:typeof t.syncedAt=="string"?t.syncedAt:"",indexSha256:typeof t.indexSha256=="string"?t.indexSha256:void 0,assetsIndexSha256:typeof t.assetsIndexSha256=="string"?t.assetsIndexSha256:void 0,metadataDemoIndexSha256:typeof t.metadataDemoIndexSha256=="string"?t.metadataDemoIndexSha256:void 0,files:W(t.files)?Uw(t.files):{},resources:W(t.resources)?Uw(t.resources):{}}}catch(t){return Gi.warn(`ignore invalid SuccApp docs sync state: ${r}`,t),{schemaVersion:1,source:"",syncedAt:"",files:{},resources:{}}}}async function __(r){try{return wn(await Ki.promises.readFile(r))}catch(e){if(x(e))return;throw e}}function Uw(r){let e={};for(let[t,n]of Object.entries(r)){if(!W(n))continue;let o=n.sha256,i=n.bytes;typeof o=="string"&&typeof i=="number"&&(e[t]={sha256:o,bytes:i})}return e}function L_(r,e){return{docSet:r.docSet,generatedAt:r.generatedAt,updatedAt:e.syncedAt,total:r.files.length,added:0,changed:0,removed:0,skipped:r.files.length,unavailable:0,resourcesAdded:0,resourcesChanged:0,resourcesRemoved:0,resourcesSkipped:Object.keys(e.resources??{}).length,resourcesUnavailable:0,metadataChanged:!1}}function N_(r,e){return r.files.every(t=>e.files[t.path]?.sha256===t.sha256)}function W_(r,e){for(let t of r.values())if(e.resources?.[t.path]?.sha256!==t.sha256)return!1;return!0}function U_(r){return Object.keys(r.resources??{}).some(lf)}function j_(r,e){let t=new Map;if(r)for(let n of r.files)Vw(n)||t.set(n.path,n);if(e)for(let n of e.files){let o=tL(n.path);t.set(o,{path:o,urlPath:Bw(n.path),bytes:n.size,sha256:n.sha256})}return t}function V_(r,e){for(let[t,n]of Object.entries(e.resources??{}))t.startsWith(`${vs}/`)&&r.set(t,{path:t,urlPath:Bw(t.slice(vs.length+1)),bytes:n.bytes,sha256:n.sha256})}function B_(r){return{...r,files:r.files.filter(e=>!Vw(e))}}function q_(r){return{...r,files:r.files.filter(e=>!cf(e.path))}}function Vw(r){return cf(r.path)||$_(r)}function cf(r){return E_.test(r)||T_.test(r)||M_.test(r)||lf(r)}function lf(r){let e=Ir.posix.normalize(r.replace(/^\/+/,"").replace(/^\.\//,""));return e.startsWith(`${ws}/`)||e.startsWith(`${zo}/`)}function $_(r){return typeof r.bytes=="number"&&r.bytes>b_&&x_.test(r.path)}function H_(r){let e=ot(r);if(!e||e.schemaVersion!==2||typeof e.docSet!="string"||typeof e.generatedAt!="string"||typeof e.base!="string"||!Array.isArray(e.files))throw new Error("invalid markdown index shape");let t=e.files.map(Q_);return{schemaVersion:2,docSet:e.docSet,product:typeof e.product=="string"?e.product:void 0,generatedAt:e.generatedAt,base:e.base,files:t}}function z_(r){let e=ot(r);if(!e||e.schemaVersion!==1||typeof e.docSet!="string"||typeof e.base!="string"||!Array.isArray(e.files))throw new Error("invalid assets index shape");return{schemaVersion:1,docSet:e.docSet,product:typeof e.product=="string"?e.product:void 0,base:e.base,files:e.files.map(G_)}}function G_(r){if(!W(r)||typeof r.path!="string"||typeof r.bytes!="number"||typeof r.sha256!="string")throw new Error("invalid assets index file entry");return _t("/",r.path),{path:r.path,bytes:r.bytes,sha256:r.sha256}}function K_(r){let e=ot(r);if(!e||e.schemaVersion!==1||e.source!=="metadata-example"||typeof e.example!="string"||typeof e.root!="string"||typeof e.generatedAt!="string"||!Array.isArray(e.files))throw new Error("invalid metadata example index shape");return{schemaVersion:1,source:"metadata-example",example:e.example,root:e.root,generatedAt:e.generatedAt,files:e.files.map(J_)}}function J_(r){if(!W(r)||typeof r.path!="string"||typeof r.size!="number"||typeof r.sha256!="string")throw new Error("invalid metadata example index file entry");return _t("/",r.path),{path:r.path,size:r.size,sha256:r.sha256}}function Q_(r){if(!W(r)||typeof r.path!="string"||typeof r.htmlUrl!="string"||typeof r.title!="string"||typeof r.bytes!="number"||typeof r.sha256!="string")throw new Error("invalid markdown index file entry");return _t("/",r.path),{path:r.path,htmlUrl:r.htmlUrl,title:r.title,bytes:r.bytes,sha256:r.sha256}}function Y_(r,e){let t=Buffer.from(e,"utf8");if(t.byteLength!==r.bytes)throw new Error(`downloaded markdown bytes mismatch: ${r.path}`);if(wn(t)!==r.sha256)throw new Error(`downloaded markdown sha256 mismatch: ${r.path}`)}function X_(r,e){let t=Ir.posix.dirname(r),n=new Set;Nw.lastIndex=0;let o;for(;(o=Nw.exec(e))!==null;){let i=eL(t,Z_(o[1]||o[2]||o[3]||""));i&&n.add(i)}return[...n].sort()}function Z_(r){let e=r.trim();if(e.startsWith("<")){let t=e.indexOf(">");return t>0?e.slice(1,t):e}return e.split(/\s+/)[0]||""}function eL(r,e){if(!e||e.startsWith("#")||e.startsWith("//")||/^[a-z][a-z0-9+.-]*:/i.test(e))return;let t=e.split("#")[0].split("?")[0];if(!t||t.endsWith("/"))return;let n=t.startsWith("/")?Ir.posix.normalize(t.replace(/^\/+/,"")):Ir.posix.normalize(Ir.posix.join(r==="."?"":r,t));if(!n||n==="."||n.startsWith("../")||n==="..")return;let o=Ir.posix.extname(n).toLowerCase();if(!(!o||o===".md"))return _t("/",n),n}function tL(r){return Ir.posix.join(vs,r)}function Bw(r){return Ir.posix.join("metadata-examples/DEMO",r)}function Ts(r,e){let t=new URL(r);return t.pathname=t.pathname.replace(/[^/]*$/,""),new URL(e.replace(/^\/+/,""),t).toString()}async function rL(r){try{return qw(await Ki.promises.readFile(r))}catch(e){if(x(e))return;throw e}}function qw(r){return{sha256:wn(r),bytes:r.byteLength}}function nL(r){if(!(typeof r.bytes!="number"||typeof r.sha256!="string"))return{bytes:r.bytes,sha256:r.sha256}}function sf(r,e){return r.sha256===e.sha256&&r.bytes===e.bytes}async function $w(r,e){let t=new AbortController,n=setTimeout(()=>{t.abort(new Error(`download timeout after ${Lw}ms: ${r}`))},Lw);try{return await fetch(r,{...e,signal:t.signal})}finally{clearTimeout(n)}}function oL(r){return jr(r,Bi,"SuccApp docs skill path")}function _t(r,e){return jr(r,e,"SuccApp docs skill file path")}var pf="succapp-docs-skill",Hw="err.workspace.issue.E407",iL="agentDocsIndexUrl",aL="agentDocsForce",sL=T("workspace.maintenance.agent-docs-skill.task"),hp=class{constructor(e=new mp){this.syncer=e}capabilities={taskId:pf,writeScopes:["init"],serverRequirement:"none"};async execute(e){let t=[jr(e.workspace.root,Bi,"SuccApp docs skill path")];try{let n=await this.syncer.sync(e.workspace.root,{indexUrl:this.readIndexUrl(e),apply:!e.dryRun,force:this.readForce(e),task:e.task});return n.added+n.changed+n.removed+n.resourcesAdded+n.resourcesChanged+n.resourcesRemoved+(n.metadataChanged?1:0)>0?[this.createIssue(t,e.dryRun?Tt():gt(),n)]:[this.createSkippedIssue(t,e.dryRun,"up-to-date",n)]}catch(n){return sL.warn(`sync SuccApp docs skill failed: ${e.workspace.root}`,n),[this.createSkippedIssue(t,e.dryRun,"agent-docs-unavailable")]}}readIndexUrl(e){let t=e.taskOptions?.[iL];return typeof t=="string"&&t.trim()?t.trim():void 0}readForce(e){return e.taskOptions?.[aL]===!0}createIssue(e,t,n){return Ot({code:Hw,taskId:pf,repairable:!0,level:"info",localPaths:e,properties:{item:"succapp-docs-skill",...fp(n)},execution:{...t,properties:fp(n)}})}createSkippedIssue(e,t,n,o){return Ot({code:Hw,taskId:pf,repairable:!1,level:n==="up-to-date"?"info":"warning",localPaths:e,properties:{item:"succapp-docs-skill",...o?fp(o):{}},execution:{...ro(t,n),properties:{skipCause:n,...o?fp(o):{}}}})}};function fp(r){return{docSet:r.docSet,generatedAt:r.generatedAt,updatedAt:r.updatedAt,total:r.total,added:r.added,changed:r.changed,removed:r.removed,skipped:r.skipped,unavailable:r.unavailable,resourcesAdded:r.resourcesAdded,resourcesChanged:r.resourcesChanged,resourcesRemoved:r.resourcesRemoved,resourcesSkipped:r.resourcesSkipped,resourcesUnavailable:r.resourcesUnavailable}}$();_();var Ms="workspace-config",df="err.workspace.issue.E201",cL="err.workspace.issue.E202",zw="err.workspace.issue.E203",lL="err.workspace.issue.E204",gp=class{capabilities={taskId:Ms,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 ie(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||!Je(e.server,o)?[this.createServerMismatchIssue(e.workspace.config.path,e.server,o)]:[]}planIssue(e){return e.repairable?Tt():Zr(!0)}async applyIssue(e,t){return t.repairable?e.server&&(t.code===df||t.code===zw)?(await e.workspace.config.initialize(e.server),gt()):t.code===df?(await e.workspace.config.ensureFile(),gt()):Zr():Zr()}createMissingConfigIssue(e,t){return{code:df,taskId:Ms,repairable:!0,level:"warning",localPaths:[e],remotePaths:[],properties:this.removeUndefinedProperties({configPath:e,server:t})}}createInvalidJsonIssue(e){return{code:cL,taskId:Ms,repairable:!1,level:"error",localPaths:[e],remotePaths:[],properties:{configPath:e}}}createServerRequiredIssue(e,t){return{code:zw,taskId:Ms,repairable:!0,level:"warning",localPaths:[e],remotePaths:[],properties:{configPath:e,server:t}}}createServerMismatchIssue(e,t,n){return{code:lL,taskId:Ms,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 Kw=E(require("fs")),Jw=E(require("path"));Ie();tt();$();_();var Gw="workspace-agent-files",pL="err.workspace.issue.E403",dL="agent-workspace-template.jsonc",yp=class{capabilities={taskId:Gw,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?Tt():gt())]:[]}async maintainTemplateTargets(e,t){let n=await this.readTemplateTargets(e),o=[],i=!1;for(let a of n.files)await ie(a.targetPath)||(o.push(a.targetPath),t&&(await vt(a.targetPath,await kn(a.relativePath)),i=!0));for(let a of n.directories)await ie(a.targetPath)||(o.push(a.targetPath),t&&(await Kw.promises.mkdir(a.targetPath,{recursive:!0}),i=!0));return{missingPaths:o,updated:i}}async readManifest(){let e=await $o(dL);return{files:Cs(e,"files"),directories:Cs(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=uL(t);return{relativePath:n,targetPath:Jw.join(e,...n.split("/"))}}createIssue(e,t){return Ot({code:pL,taskId:Gw,repairable:!0,level:"info",localPaths:e,properties:{item:"agent-files"},execution:t})}};function uL(r){let e=pn(r);return H(e,`Unsafe workspace template path: ${r}`),e}var uf=E(require("path"));_();$();var Qw="workspace-gitignore",mL="err.workspace.issue.E402",Cp=class{capabilities={taskId:Qw,writeScopes:["init"],serverRequirement:"none"};async execute(e){return await kw(e.workspace,{apply:!e.dryRun})?[this.createIssue(e,e.dryRun?Tt():gt())]:[]}createIssue(e,t){return Ot({code:mL,taskId:Qw,repairable:!0,level:"info",localPaths:fL(e.workspace.root),properties:{item:"gitignore"},execution:t})}};function fL(r){return[uf.join(r,Ho),uf.join(Wr(r),Ho)]}var Xw=E(require("path"));tt();Z();$();_();var Yw="workspace-settings",hL="err.workspace.issue.E401",gL=Xw.posix.join(".vscode","settings.recommended.jsonc"),Sp=class{capabilities={taskId:Yw,writeScopes:["init"],serverRequirement:"none"};async execute(e){return await this.updateRecommendedSettings(e.workspace.root,!e.dryRun)?[this.createIssue(e,e.dryRun?Tt():gt())]:[]}async updateRecommendedSettings(e,t){let n=Ur(e),o=await Re(n),i=ot(o,{...kr,filePath:n,ignoreParseError:!0});if(!i)return!1;let a=await $o(gL),s=un(o);return s=yL(s,i,a),s===un(o)?!1:(t&&await vt(n,s),!0)}createIssue(e,t){return Ot({code:hL,taskId:Yw,repairable:!0,level:"info",localPaths:[Ur(e.workspace.root)],properties:{item:"workspace-settings"},execution:t})}};function yL(r,e,t){let n=r;for(let[o,i]of Object.entries(t)){if(W(i)){n=SL(n,e,o,i);continue}if(Array.isArray(i)){n=kL(n,e,o,i);continue}e[o]===void 0&&(n=Qt(n,[o],i))}return n}function CL(r,e){return Object.entries(e).filter(([t])=>r[t]===void 0)}function SL(r,e,t,n){let o=vL(e,t),i=CL(o,n);if(i.length===0)return r;let a=r;if(e[t]!==void 0&&!W(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 vL(r,e){return W(r[e])?r[e]:{}}function kL(r,e,t,n){let o=Array.isArray(e[t])?e[t]:[],i=n.filter(a=>!wL(o,a));return i.length===0?r:Qt(r,[t],[...o,...i])}function wL(r,e){return r.some(t=>on(t,e))}var Ji=class{tasks=new Map;constructor(){this.register(new gp),this.register(new Sp),this.register(new Cp),this.register(new yp),this.register(new zi),this.register(new Hi),this.register(new hp),this.register(new up)}getTask(e){return this.tasks.get(e)}register(e){this.tasks.set(e.capabilities.taskId,e)}};var Qi=T("workspace.maintenance"),vp=class{constructor(e,t,n){this.workspace=e;this.request=t;this.activeServerUrl=n}registry=new Ji;async run(){let e=[],t=this.request.taskIds,n=new Set(this.request.explicitTaskIds??[]);Qi.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??nt.INSTANCE;for(let a=0;a<t.length;a++){let s=t[a],c=d("workspace.maintenance.progress.checking",this.getTaskName(s),a+1,t.length);o.start(100,{message:c,retainOnFinish:!0});let l=new mf(o.subTaskMonitor(1),c),p=this.registry.getTask(s),u;if(!p)u=[this.createUnsupportedTaskIssue(s)],Qi.warn("workspace maintenance task skipped: task={0} reason=notImplemented",s);else if(p.capabilities.serverRequirement==="required"&&!this.activeServerUrl)u=[this.createMissingServerIssue(p,n.has(s))],Qi.info("workspace maintenance task skipped: task={0} reason=noActiveServer",s);else{Qi.info("workspace maintenance task start: task={0}",s);let g=this.request.issues?this.request.issues.filter(m=>m.taskId===s):void 0;u=await p.execute({workspace:this.workspace,dryRun:this.request.dryRun===!0,explicit:n.has(s),server:this.request.server,activeServerUrl:this.activeServerUrl,targetRemotePaths:this.request.targetRemotePaths,taskOptions:this.request.taskOptions,task:l},g),Qi.info("workspace maintenance task done: task={0} issues={1}",s,u.length)}e.push(...u),l.finish(),o.setMessage(this.renderProgressFinishMessage(s,u)),o.finish()}let i=this.createReport(e);return Qi.info("workspace maintenance run done: dryRun={0} issues={1} planned={2} applied={3} blocked={4} failed={5}",i.dryRun,i.summary.issues,i.summary.planned,i.summary.applied,i.summary.blocked,i.summary.failed),i}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?Zr(o):ro(o,i)}}renderProgressFinishMessage(e,t){let n=this.getTaskName(e);return t.length===0?d("workspace.maintenance.progress.upToDate",n):t.some(o=>o.execution?.status==="failed")?d("workspace.maintenance.progress.failed",n):t.some(o=>o.execution?.status==="blocked")?d("workspace.maintenance.progress.blocked",n):t.some(o=>o.execution?.status==="applied")?d("workspace.maintenance.progress.updated",n):t.every(o=>o.execution?.status==="skipped")?d("workspace.maintenance.progress.skipped",n,this.getSkipCause(t)):d("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 d("workspace.maintenance.progress.skipReason")}getTaskName(e){return d(`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}}},mf=class r extends Ec{constructor(t,n){super(t);this.prefix=n}start(t,n){this.delegate.start(t,{...n,message:this.withPrefix(n?.message)})}setMessage(t){this.delegate.setMessage(this.withPrefix(t))}subTaskMonitor(t){return new r(this.delegate.subTaskMonitor(t),this.prefix)}withPrefix(t){return t?`${this.prefix}: ${t}`:this.prefix}};var kp=class{constructor(e){this.workspace=e}registry=new Ji;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!==nt.INSTANCE?e.task:new qn;return this.workspace.lockManager.withLock({scopes:n,command:"workspace-maintenance",wait:this.workspace.lockWait},async i=>(o.setAbortSignal(bc(o.getAbortSignal(),i)),this.createRunner({...e,task:o},t).run()))}createRunner(e,t){return new vp(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();xi();var PL=/^\d+\.\d+\.\d+$/;async function eP(r,e){let t=Zw(e.version);if(!t)return{downgrades:[]};let n=Zw(r),o=Gn(t,n);if(o===-1&&n){let i=[{kind:"server",currentVersion:t,baselineVersion:n}];return{downgrades:i,warningMessage:RL(i)}}return!n||o===void 0||o>0?{downgrades:[],newBaselineVersion:t}:{downgrades:[]}}function Zw(r){let e=Xt(r);if(e)return PL.test(e)?e:void 0}function RL(r){if(r.length===0)return;let e=r.map(t=>d("workspace.compat.serverVersion",t.currentVersion,t.baselineVersion));return[d("workspace.compat.connectedServerAppears"),...e].join(`
|
|
75
|
+
`)}var vf=E(require("fs")),kf=E(require("path")),pP=E(lP());$();J();F();var HL=T("workspace.gitignore"),zL=".gitignore",GL=new Set(Cc),bp=class{constructor(e){this.workspaceRoot=e}matchers=[];async refresh(){let e=[];await this.collectIgnoreMatchers(this.workspaceRoot,"",e),this.matchers=e}matches(e){let t=De(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 vf.promises.readdir(e,{withFileTypes:!0})}catch(a){if(x(a)){HL.debug(`skip unreadable gitignore directory: ${e}`);return}throw a}await this.addDirectoryGitIgnore(e,t,n);let i=o.filter(a=>a.isDirectory()&&!GL.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(kf.join(e,a.name),s,n)}}async addDirectoryGitIgnore(e,t,n){let o=kf.join(e,zL),i;try{i=await vf.promises.readFile(o,"utf-8")}catch(a){if(x(a))return;throw a}n.push({baseRelativePath:t,matcher:(0,pP.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 Ke=E(require("fs")),gP=E(require("os")),Ep=E(require("path")),yP=E(Qd());J();Ie();F();function CP(r){return new wf(r)}var KL=10*6e4,JL=".lock.json",QL=".lock",dP=1,yt=T("workspace.lock"),wf=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??Fn(),this.staleMs=e.staleMs??KL,this.locksDir=Ep.join(this.root,".succapp","locks"),this.hostname=gP.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){H(!this.disposed,"WorkspaceLockManager has been disposed"),H(e.scopes&&e.scopes.length>0,"LockRequest.scopes must not be empty"),await Ke.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(fP(a))throw new sn(e.command);return c}catch(c){throw fP(a)&&!(c instanceof sn)?new sn(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 Ke.promises.readFile(t,"utf-8")}catch(i){if(x(i))return;yt.debug(`peekHolder failed for ${e}`,i);return}let o=this.parseHolderJson(n,e);if(o)try{let i=await Ke.promises.stat(t);return{...o,lastHeartbeat:new Date(i.mtimeMs).toISOString()}}catch(i){return x(i)||yt.debug(`peekHolder stat failed for ${e}`,i),o}}async peekHolders(e=bo){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=>{yt.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()+YL(e.request.wait),i;for(;;){let a=await this.findBlockingExistingLock(t);if(a.blocked){if(i=a.holder,!uP(o))throw new Co(e.request.command,n,t,hP(i));await mP(o);continue}try{let s=await yP.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(!rc(s))throw s;if(i=await this.peekHolder(t),uP(o)){await mP(o);continue}throw new Co(e.request.command,n,t,hP(i))}}}async findBlockingExistingLock(e){try{await Ke.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:(yt.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 Ke.promises.rename(t,n)}catch(o){if(x(o))return!1;throw o}return yt.info(`auto-clear orphan lock dir scope=${e}`),await Ke.promises.rm(n,{recursive:!0,force:!0}).catch(o=>{yt.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){yt.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:dP,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 Ke.promises.unlink(t.holderPath)}catch(n){if(x(n))continue;yt.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 Ke.promises.utimes(n.holderPath,t,t)}catch(o){if(x(o))continue;yt.debug(`heartbeat refresh failed for ${n.scope}`,o)}}onScopeCompromised(e,t,n){yt.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 sn(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 Ke.promises.writeFile(n,JSON.stringify(t,null,2),"utf-8");try{await Ke.promises.rename(n,e)}catch(o){throw await Ke.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"||!ZL(n.source)||typeof n.ownerId!="string"||n.ownerId.length===0||typeof n.startTime!="string"?void 0:{version:dP,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){yt.debug(`parse holder json for ${t} failed`,n);return}}async isLockDirStale(e){try{return(await Ke.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 Ke.promises.rename(n,i)}catch(s){if(x(s))return!1;throw s}let a=!1;try{let s=await this.peekHolder(e);return e0(s,t)?(await Ke.promises.unlink(o).catch(c=>{if(!x(c))throw c}),!0):(a=await this.restoreTombstoneLock(e,i),!1)}finally{a||await Ke.promises.rm(i,{recursive:!0,force:!0}).catch(s=>{yt.debug(`delete stale lock tombstone ${e} failed`,s)})}}async restoreTombstoneLock(e,t){let n=this.lockfilePathFor(e);try{return await Ke.promises.rename(t,n),!0}catch(o){return x(o)||yt.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){yt.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)&&Ke.promises.mkdir(this.locksDir,{recursive:!0}).then(()=>{this.disposed||!this.lockWatcherRequested||this.lockWatcher||(this.lockWatcher=Ke.watch(this.locksDir,()=>{this.scheduleLockStateRefresh()}),this.lockWatcher.on("error",e=>{yt.debug(`workspace lock watcher failed: ${this.root}`,e),this.closeLockWatcher(),this.scheduleLockWatcherRestart()}),this.scheduleLockStateRefresh(0))}).catch(e=>{yt.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 bo)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 Ke.promises.stat(this.lockfilePathFor(e)),!0}catch(t){return x(t)||yt.debug(`stat lock file failed for ${e}`,t),!1}}fireWorkspaceLockChanged(e,t,n){this.observedScopeHeld.set(e,t),this.eventBus?.fire(new et("workspace.lock.changed",{root:this.root,scope:e,held:t,holder:n},this))}lockfilePathFor(e){return Ep.join(this.locksDir,`${e}${QL}`)}holderPathFor(e){return Ep.join(this.locksDir,`${e}${JL}`)}};function YL(r){return!r||r<=0?0:r*1e3}function uP(r){return Date.now()<r}async function mP(r){let e=Math.max(0,Math.min(500,r-Date.now()));e>0&&await new Promise(t=>setTimeout(t,e))}var XL=new Set(Object.values(oi));function ZL(r){return XL.has(r)}function fP(r){return r.acquired.some(e=>e.compromised)}function e0(r,e){return r?.ownerId===e.ownerId}function hP(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 Tp=E(require("fs")),SP=E(require("path"));F();D();J();$();var Pf=T("workspace.connection"),Zi=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,()=>Bc(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 Io(n))throw new Ue({workspaceRoot:this.workspace.root,serverUrl:n});let i=this.createServerClient(n);await i.verify();let a=await i.getServerInfo();Pf.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(d("workspace.server.serverNotConfigured",e));let i=this.workspace.config.validateServerUrlChange(o,t),a=n?await this.withAuthContext(i,()=>Bc(i,n)):void 0,s=a?await this.withAuthContext(i,()=>this.createVerifiedCredentialConnection(i,a)):void 0,c=yr(o),l=yr(i),p=this.workspace.getMirrorRoot(o),u=this.workspace.getMirrorRoot(i),g=!1,m=!1,h="";try{if(c!==l&&await ie(p)){if(await ie(u))throw new Error(d("workspace.server.serverMirrorExists",u));await Tp.promises.mkdir(SP.dirname(u),{recursive:!0}),await Tp.promises.rename(p,u),g=!0}return h=await this.workspace.config.changeServerUrl(o,i),m=!0,a&&s&&await this.storeVerifiedConnectionCredential(h,a,s.client),{oldServerUrl:o,serverUrl:h,connection:s}}catch(y){throw await this.rollbackServerUrlChange({configChanged:m,changedServerUrl:h,oldConfiguredServerUrl:o,mirrorMoved:g,oldMirrorRoot:p,newMirrorRoot:u}),y}}async rollbackServerUrlChange(e){if(e.configChanged)try{await this.workspace.config.changeServerUrl(e.changedServerUrl,e.oldConfiguredServerUrl)}catch(t){Pf.warn(`rollback server config failed: ${e.changedServerUrl} -> ${e.oldConfiguredServerUrl}`,t)}if(e.mirrorMoved)try{await Tp.promises.rename(e.newMirrorRoot,e.oldMirrorRoot)}catch(t){Pf.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 Ue&&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 Iu(e,t)}createServerClient(e,t={}){return new zr(e,{workspaceRoot:this.workspace.root,...t})}};var Bt=T("workspace"),t0=6e4,Rf=class{constructor(e,t,n,o=Aa){this.root=e;this.eventBus=t;this.lockWait=o;this.connectedServerUrl=n?.connected?n.serverUrl:void 0,this.config=new Wl(e,t,Sm()),this.gitIgnore=new bp(e),this.lockManager=CP({root:e,eventBus:t}),this.disposables.add(this.lockManager),this.syncStatusTracker=new Ql(this),this.disposables.add(this.eventBus.on("workspace.config.changed",i=>{i.payload.root===this.root&&this.onConfigChanged()})),this.startAutoSyncScheduler()}disposables=new to;config;connectedServerUrl;syncStatusTracker;gitIgnore;lockManager;fileChangeRefresh;metadataVersionCatalog=Fo.empty();metadataVersionCatalogLoaded=!1;initialized=!1;connectionInitializing=!1;autoSyncScheduler=null;startAutoSyncScheduler(){if(Fn().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 Ul(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 St(e);return e}async requireClient(){return this.requireServerClient()}async requireServerClient(e){await this.ensureConfigLoaded();let t=e??this.config.getActiveServerUrl();if(!t)throw new St(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 vr(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 Rt(this.getMirrorRoot(t));return new Oi({workspaceRoot:this.root,mirror:o,workspace:new pr(this.root,o),getServerProjects:()=>n.getProjects()}).resolve(e,"server-backed")}disconnectServers(...e){let t=new Set(e.map(n=>yr(n)));this.connectedServerUrl&&t.has(yr(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 tv(e)}async createDetachedClient(e){if(await this.ensureConfigLoaded(),!this.config.hasServer(e))throw new St(e);let t=new zr(e,{workspaceRoot:this.root});if(await t.verify(),!this.config.hasServer(e))throw new St(e);return t}resolveConfiguredServerUrl(e){let t=this.config.resolveServerUrl(e);if(!t)throw new St(e);return t}async listWorkspaceProjects(){await this.ensureConfigLoaded();let e=new pr(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 Rt(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 pC(this.root,e)}async countWorkspaceFiles(e,t){return await this.ensureConfigLoaded(),new pr(this.root,this.createWorkspaceListingMirror()).countFiles(e,t)}async startIdeRuntime(){this.initialized||await vr(this,"startIdeRuntime",async()=>{await this.doStartIdeRuntime(),this.initialized=!0})}async waitInitialized(){this.initialized||await yu(this,"startIdeRuntime")?.catch(()=>{})}async doStartIdeRuntime(){let e=!1;this.connectionInitializing=!0;try{await this.config.load(),this.syncStatusTracker.startBackgroundRemoteDiscovery({intervalMs:t0}),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=>{Bt.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=!!yu(this,t),i=vr(this,t,()=>(Bt.info("refresh sync status start: {0}",this.root),this.onSyncStatusRefreshing(),this.syncStatusTracker.refreshAll(e)));o&&n&&n.start(1,{message:d("workspace.sync.progress.refresh.running")});let a=await i;return n&&o&&n.step(1),o||Bt.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(Fr.basename(o.filePath)!==".gitignore")return!1;let i=Fr.relative(this.root,Fr.resolve(o.filePath));return!!i&&!i.startsWith("..")&&!Fr.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 Yl(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=Ce(e);return await Oc(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 Zi(this).change(e,t,n);return this.disconnectServers(o.oldServerUrl,o.serverUrl),o.connection&&(this.applyServerConnection(o.connection),Bt.info(`login succeeded: ${o.serverUrl}`)),o.serverUrl}async switchActiveServer(e){await this.ensureConfigLoaded();let t=this.config.resolveServerUrl(e);if(!t)throw new Error(d("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}),je(this.root,e.remotePath),je(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 Bt.debug(`read target status snapshot failed: ${e.remotePath}`,t),this.unknownTargetStatusSnapshot(e.remotePath)}}async readTargetSideSnapshot(e,t,n={}){try{let o=await Mp.promises.stat(ce(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 Bt.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([Mp.promises.stat(ce(this.root,e)),Mp.promises.stat(ce(this.getMirrorRoot(),e))]);return this.compareFileContentStats(a,s)}catch(a){Bt.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:_o(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&&yr(this.connectedServerUrl)===yr(t)){this.updateConnectionStatus();return}try{let n=await new Zi(this).connect(t);this.applyServerConnection(n.connection,e)}catch(n){if(!(n instanceof Ue))throw n;Bt.debug(`stored credential invalid for ${t}`,n),this.updateConnectionStatus()}}}async connect(e,t){let n=await new Zi(this).connect(e,t);return this.applyServerConnection(n.connection),t&&Bt.info(`login succeeded: ${n.connection.client.serverUrl}`),!0}disconnect(){this.connectedServerUrl=void 0,this.updateMetadataVersions(),this.updateConnectionStatus(),Bt.info("disconnected")}updateConnectionStatus(){this.connectionInitializing||this.fireConnectionStateChanged()}onConfigChanged(){let e=this.connectedServerUrl;e&&yr(e)!==yr(this.config.getActiveServerUrl())&&(this.cancelPendingSyncStatusRefresh(),this.clearSyncStatus(),this.disconnectServers(e),this.updateMetadataVersions(),this.updateConnectionStatus())}refreshSyncStatusAfterConnection(e={}){e.refreshSyncStatus!==!1&&this.refreshSyncStatus().catch(t=>{Bt.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 Aw(this,o,i)}catch(n){Bt.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 eP(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 et("user.notification.requested",{level:"warning",message:n.warningMessage},this))}catch(t){Bt.warn(`check server compatibility baseline failed: ${this.root}`,t)}}fireConnectionStateChanged(e=!1){this.eventBus.fire(new et("workspace.connection.changed",{root:this.root,connected:this.isConnected,serverUrl:this.activeServerUrl,initializing:e},this))}notifySyncStatusRefreshing(e,t){this.eventBus.fire(new et("workspace.sync.status.refreshing",{root:this.root,refreshTask:e,progressVisible:t},this))}fireSyncStatusChanged(){this.eventBus.fire(new et("workspace.sync.status.changed",{root:this.root},this))}createSyncService(e){return _m(this,e)}runMaintenance(e){return new kp(this).run(e)}notifyLocalProjectsChanged(){this.eventBus.fire(new et("workspace.local.projects.changed",{root:this.root,serverUrl:this.activeServerUrl},this))}async getMetadataVersionCatalog(){return await this.ensureMetadataVersionCatalogLoaded(),this.metadataVersionCatalog}updateMetadataVersions(e){this.metadataVersionCatalog=Fo.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 Bt.info(`auto-sync yield to ${n.command}`),!0}return!1}getMirrorRoot(e=this.activeServerUrl){return Fr.join(this.root,".succapp","remote",yr(e))}createWorkspaceListingMirror(){let e=this.activeServerUrl?this.getMirrorRoot(this.activeServerUrl):Fr.join(this.root,".succapp","remote","__workspace__");return new Rt(e)}toProjectNames(e){return e.map(t=>t.replace(/^\//,"")).sort((t,n)=>t.localeCompare(n))}},r0=Rf;function ea(r){return new r0(r.root,r.eventBus,r.client,r.lockWait)}var Dr=T("cli.versionUpdate"),n0="version-check.json",o0="server-version-check.json",ta=1,i0="@succsoft/succapp",a0="https://registry.npmjs.org/",s0=24*60*60,c0=2e3;async function l0(r){let e=bP(r);if(TP(e))return;let t=g0(r,e);try{switch(r.trigger){case"version":return await RP(r.context,t)??await t.checkLatestFromRegistry()??await t.checkLatestFromAnyCache();case"auth-login":return await f0(r,t);case"command":return await m0(r,t)}}catch(n){Dr.debug("skip cli version update check: %s",n);return}}async function ra(r){let e=(r.includeCheckingProgress??p0(r))&&!TP(bP(r));e&&d0(r.output);let t;try{t=await l0(r)}finally{e&&u0(r.output)}let n=y0(t);if(n){r.output.warning(n);return}if(!(r.includeUpToDateInfo??r.trigger==="version"))return;let i=C0(t);i&&r.output.info(i)}function p0(r){return r.trigger==="version"||r.trigger==="auth-login"||!!r.command&&EP(r.command)}function d0(r){r.progress({task:"cli-version-check",status:"checking"},()=>d("cli.out.version.checking"))}function u0(r){r.progress({task:"cli-version-check",status:"done"},()=>"")}async function m0(r,e){let t=r.command;if(t){if(EP(t))return await RP(r.context,e)??await e.checkLatestFromRegistry()??await e.checkLatestFromAnyCache();if(t.serverTarget==="none")return await e.checkLatestFromCache()}}async function f0(r,e){if(!(!r.context||!r.serverUrl||!await e.hasPackageVersionCache()))try{let t=await za(r.context,r.serverUrl),n=await e.runWithTimeout(t.getServerInfo(),"auth login server info");return n.version?await e.checkServerCompatibilityFromCache({serverUrl:t.serverUrl,serverVersion:n.version,devToolApiVersion:n.devToolApiVersion}):void 0}catch(t){Dr.debug("skip auth login cli server compatibility check: %s",t);return}}async function RP(r,e){if(!r)return;let t,n=!1;try{r.workspace?t=r.workspace:(t=await h0(r),n=t!==void 0);let o={cwd:r.cwd,env:r.env,config:r.config,output:r.output,task:r.task,eventBus:r.eventBus,workspace:t,abortSignal:r.abortSignal},i=await Ei(o,{serverTarget:"optional"}),a=await za(o,i),s=await e.runWithTimeout(a.getServerInfo(),"current server info");return s.version?await e.checkServerCompatibility({serverUrl:a.serverUrl,serverVersion:s.version,devToolApiVersion:s.devToolApiVersion}):void 0}catch(o){Dr.debug("skip cli current server version check: %s",o);return}finally{n&&t?.dispose()}}async function h0(r){let e=await $c({cwd:r.cwd,workspace:r.config.workspace,env:r.env,required:!1});if(e)return ea({root:e,eventBus:r.eventBus,lockWait:r.config.lockTimeout})}function g0(r,e){return new Tf({env:e,cacheDir:r.cacheDir,currentVersion:r.currentVersion,packageName:r.packageName,fetch:r.fetch,now:r.now,timeoutMs:r.timeoutMs})}function bP(r){return r.env??r.context?.env??process.env}function EP(r){return r.path.length===2&&r.path[0]==="workspace"&&r.path[1]==="init"}function TP(r){return Ys(r[Gt.noUpdateCheck],!1)===!0}var Tf=class{env;cacheDir;currentVersion;packageName;fetchImpl;now;timeoutMs;constructor(e){this.env=e.env,this.cacheDir=e.cacheDir??kc(this.env),this.currentVersion=e.currentVersion??In,this.packageName=e.packageName??i0,this.fetchImpl=e.fetch??fetch,this.now=e.now??(()=>new Date),this.timeoutMs=e.timeoutMs??c0}async checkLatestFromRegistry(){try{let e=await this.fetchPackageVersionCacheData();return await this.writeCache(e),this.toLatestStatus(e)}catch(e){Dr.debug("skip cli latest version check: %s",e);return}}async checkLatestFromCache(){let e=await this.readCache();if(!(!e||!this.matchesCurrentSource(e)||this.isExpired(e)))return this.toLatestStatus(e)}async checkLatestFromAnyCache(){let e=await this.readCache();return e&&this.matchesCurrentSource(e)?this.toLatestStatus(e):void 0}async hasPackageVersionCache(){let e=await this.readCache();return!!e&&this.matchesCurrentSource(e)&&bf(e)}async runWithTimeout(e,t){let n,o=new Promise((i,a)=>{n=setTimeout(()=>a(new Error(`${t} timed out after ${this.timeoutMs}ms`)),this.timeoutMs)});try{return await Promise.race([e,o])}finally{n&&clearTimeout(n),e.catch(i=>Dr.debug("ignored late cli version check operation failure: %s",i))}}async checkServerCompatibility(e){try{let t=await this.readServerCacheEntry(e);if(t&&!this.isServerCacheExpired(t))return this.toServerStatus(e,t);let n=await this.fetchPackageVersionCacheData();await this.writeCache(n);let o=this.createServerCompatibilityCacheData(e,n);return o?(await this.writeServerCacheEntry(e,o),this.toServerStatus(e,o)):this.toServerNoCompatibleStatus(e,n.checkedAt)}catch(t){Dr.debug("skip cli server compatibility check: %s",t);let n=await this.readServerCacheEntry(e);return n?this.toServerStatus(e,n):this.toServerUnknownStatus(e)}}async checkServerCompatibilityFromCache(e){let t=await this.readServerCacheEntry(e);if(t)return this.toServerStatus(e,t);let n=await this.readCache();if(!n||!this.matchesCurrentSource(n)||!bf(n))return;let o=this.createServerCompatibilityCacheData(e,n);return o?(await this.writeServerCacheEntry(e,o),this.toServerStatus(e,o)):this.toServerNoCompatibleStatus(e,n.checkedAt)}async fetchPackageVersionCacheData(){let{registryUrl:e,packageUrl:t,metadata:n}=await this.fetchPackageMetadata(),o=Xt(n["dist-tags"]?.latest);if(!o)throw new Error(`npm registry response has no latest dist-tag: ${t}`);return{version:ta,packageName:this.packageName,registryUrl:e,latestVersion:o,packageVersions:P0(n),checkedAt:this.now().toISOString(),upgradeCommand:kP(this.packageName,"latest")}}createServerCompatibilityCacheData(e,t){if(!bf(t))return;let n=w0(e.serverVersion,t.packageVersions);if(n)return{serverVersion:e.serverVersion,devToolApiVersion:e.devToolApiVersion,recommendedVersion:n.version,checkedAt:t.checkedAt,upgradeCommand:kP(this.packageName,n.installTag)}}async fetchPackageMetadata(){let e=this.resolveRegistryUrl(),t=new URL(encodeURIComponent(this.packageName),e).toString(),n=await this.fetchWithTimeout(t);if(!n.ok)throw new Error(`npm registry responded with HTTP ${n.status}: ${t}`);return{registryUrl:e,packageUrl:t,metadata:await n.json()}}async fetchWithTimeout(e){let t=new AbortController,n=setTimeout(()=>t.abort(),this.timeoutMs);try{return await this.fetchImpl(e,{headers:{Accept:"application/json"},signal:t.signal})}finally{clearTimeout(n)}}resolveRegistryUrl(){let e=Pe(this.env[Gt.updateCheckRegistry])??Pe(this.env.npm_config_registry)??Pe(this.env.NPM_CONFIG_REGISTRY)??a0;return e.endsWith("/")?e:`${e}/`}async readCache(){try{return S0(await dn(this.getCachePath()))}catch(e){Dr.debug("skip cli version update cache read: %s",e);return}}async writeCache(e){try{await It(this.getCachePath(),`${JSON.stringify(e,void 0," ")}
|
|
76
|
+
`)}catch(t){Dr.debug("skip cli version update cache write: %s",t)}}getCachePath(){return Ef.join(this.cacheDir,n0)}getServerCachePath(){return Ef.join(this.cacheDir,o0)}isExpired(e){return this.isCheckedAtExpired(e.checkedAt)}isServerCacheExpired(e){return this.isCheckedAtExpired(e.checkedAt)}isCheckedAtExpired(e){let t=ci(this.env[Gt.updateCheckTtlSeconds])??s0,n=Date.parse(e);return!Number.isFinite(n)||this.now().getTime()-n>=t*1e3}matchesCurrentSource(e){return e.packageName===this.packageName&&e.registryUrl===this.resolveRegistryUrl()}matchesServerCacheFile(e){return!!e&&e.packageName===this.packageName&&e.registryUrl===this.resolveRegistryUrl()}toLatestStatus(e){let t=Gn(this.currentVersion,e.latestVersion);if(t===void 0){Dr.debug("skip cli version update status because versions are not comparable: current=%s latest=%s",this.currentVersion,e.latestVersion);return}return{currentVersion:this.currentVersion,latestVersion:e.latestVersion,source:"registry",outdated:t<0,upToDate:t>=0,upgradeCommand:e.upgradeCommand,checkedAt:e.checkedAt}}async readServerCacheEntry(e){try{let t=vP(await dn(this.getServerCachePath()));if(!t||!this.matchesServerCacheFile(t))return;let n=t.entries[wP(e.serverUrl)];return n&&k0(n,e)?n:void 0}catch(t){Dr.debug("skip cli server compatibility cache read: %s",t);return}}async writeServerCacheEntry(e,t){try{let n=vP(await dn(this.getServerCachePath())),o=this.matchesServerCacheFile(n)?n:{version:ta,packageName:this.packageName,registryUrl:this.resolveRegistryUrl(),entries:{}};await It(this.getServerCachePath(),`${JSON.stringify({...o,entries:{...o.entries,[wP(e.serverUrl)]:t}},void 0," ")}
|
|
77
|
+
`)}catch(n){Dr.debug("skip cli server compatibility cache write: %s",n)}}toServerStatus(e,t){let n=Ko(this.currentVersion),o=Ko(e.serverVersion),i=Gn(this.currentVersion,t.recommendedVersion);if(!n||!o||i===void 0)return;let a=n.major!==o.major;return{currentVersion:this.currentVersion,latestVersion:t.recommendedVersion,source:"server",outdated:a||i<0,upToDate:!a&&i>=0,upgradeCommand:t.upgradeCommand,checkedAt:t.checkedAt,serverVersion:e.serverVersion,devToolApiVersion:e.devToolApiVersion,incompatibleMajor:a}}toServerNoCompatibleStatus(e,t){let n=Ko(this.currentVersion),o=Ko(e.serverVersion);if(!(!n||!o))return{currentVersion:this.currentVersion,source:"server",outdated:!0,upToDate:!1,checkedAt:t,serverVersion:e.serverVersion,devToolApiVersion:e.devToolApiVersion,incompatibleMajor:n.major!==o.major,noCompatibleVersion:!0}}toServerUnknownStatus(e){return Xt(e.serverVersion)?{currentVersion:this.currentVersion,source:"server",outdated:!1,upToDate:!1,checkedAt:this.now().toISOString(),serverVersion:e.serverVersion,devToolApiVersion:e.devToolApiVersion}:void 0}};function y0(r){if(r?.outdated){if(r.noCompatibleVersion&&r.serverVersion)return d("cli.out.version.serverNoCompatible",r.serverVersion);if(r.incompatibleMajor&&r.serverVersion)return!r.latestVersion||!r.upgradeCommand?void 0:d("cli.out.version.serverIncompatible",r.currentVersion,r.serverVersion,r.latestVersion,r.upgradeCommand);if(r.source==="server"&&r.serverVersion)return!r.latestVersion||!r.upgradeCommand?void 0:d("cli.out.version.serverUpdateAvailable",r.serverVersion,r.latestVersion,r.upgradeCommand);if(!(!r.latestVersion||!r.upgradeCommand))return d("cli.out.version.updateAvailable",r.latestVersion,r.upgradeCommand)}}function C0(r){return r?.upToDate?d("cli.out.version.upToDate"):void 0}function S0(r){if(!r||r.version!==ta)return;let e=Ae(r.packageName),t=Ae(r.registryUrl),n=Xt(r.latestVersion),o=an(r.packageVersions)?.map(s=>Xt(s)).filter(s=>s!==void 0),i=Ae(r.checkedAt),a=Ae(r.upgradeCommand);if(!(!e||!t||!n||!i||!a))return{version:ta,packageName:e,registryUrl:t,latestVersion:n,packageVersions:o,checkedAt:i,upgradeCommand:a}}function vP(r){if(!r||r.version!==ta)return;let e=Ae(r.packageName),t=Ae(r.registryUrl),n=W(r.entries)?r.entries:void 0;if(!e||!t||!n)return;let o={};for(let[i,a]of Object.entries(n)){let s=v0(a);s&&(o[i]=s)}return{version:ta,packageName:e,registryUrl:t,entries:o}}function v0(r){if(!W(r))return;let e=Xt(r.serverVersion),t=Xt(r.recommendedVersion),n=Ae(r.checkedAt),o=Ae(r.upgradeCommand);if(!(!e||!t||!n||!o))return{serverVersion:e,devToolApiVersion:Ae(r.devToolApiVersion),recommendedVersion:t,checkedAt:n,upgradeCommand:o}}function kP(r,e){return`npm install -g ${r}@${e}`}function wP(r){return(0,PP.createHash)("sha256").update(r).digest("hex").slice(0,32)}function k0(r,e){return r.serverVersion===e.serverVersion&&(r.devToolApiVersion??"")===(e.devToolApiVersion??"")}function bf(r){return Array.isArray(r.packageVersions)&&r.packageVersions.length>0}function w0(r,e){let t=Ko(r);if(!t)return;let n=e.filter(s=>Ko(s)?.major===t.major),o=n.filter(s=>Ko(s)?.minor===t.minor),i=o.length>0?o:n,a=R0(i);if(a)return{version:a,installTag:o.length>0?`${t.major}.${t.minor}`:String(t.major)}}function P0(r){return Object.keys(r.versions??{}).map(e=>Xt(e)).filter(e=>e!==void 0)}function R0(r){return r.reduce((e,t)=>{if(!e)return t;let n=Gn(t,e);return n!==void 0&&n>0?t:e},void 0)}function Ko(r){let e=/^(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/.exec(r);if(e)return{major:Number(e[1]),minor:Number(e[2]),patch:Number(e[3])}}F();_();D();var Mf=class extends te{readStdin;constructor(e=Nt){super(),this.readStdin=e}toOptions(e){let t=e.has("oauth"),n=e.has("pat");return{serverUrl:e.value("url"),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 sS(n,{openExternal:c=>Mi(c,e.abortSignal),abortSignal:e.abortSignal,onProgress:c=>E0(e,c)}),s=await xu(n,a);return MP(e,n,s),await ra({trigger:"auth-login",context:e,serverUrl:n,output:e.output}),0}let o=await b0(this.readStdin),i=await xu(n,{type:"pat",token:o});return MP(e,n,i),await ra({trigger:"auth-login",context:e,serverUrl:n,output:e.output}),0}},xP={path:["auth","login"],domain:"auth",spec:{name:"auth login",flags:[{name:"oauth",takesValue:!1,param:{}},{name:"pat",takesValue:!1,param:{}}],positionals:[{name:"url",role:"server-url"}],inputGroups:[{name:"loginMode",mode:"atMostOne",inputId:"value",members:["--oauth","--pat"]}],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 Mf};async function b0(r){let e=!!process.stdin.isTTY,t=(e?await iC(d("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 MP(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?d("cli.cmd.auth.login.loggedInAs",e,o):d("cli.cmd.auth.login.loggedIn",e))}function E0(r,e){switch(e.stage){case"openingBrowser":r.output.progress({stage:e.stage},()=>d("cli.cmd.auth.login.openingBrowser"));return;case"manualAuthorizationUrl":r.output.info(d("cli.cmd.auth.login.oauthManualUrl",e.authorizationUrl??""));return;case"waitingForCallback":r.output.progress({stage:e.stage},()=>d("cli.cmd.auth.login.waitingForCallback"));return;case"exchangingToken":r.output.progress({stage:e.stage},()=>d("cli.cmd.auth.login.exchangingToken"));return}}D();F();_();var xf=class extends te{toOptions(e){return{serverUrl:e.value("url"),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 Fu();return e.output.result({all:a.all,removed:a.removed},()=>d("cli.cmd.auth.logout.removedAllAuth",a.removed)),0}let n=await this.resolveServerUrl(e,t.serverUrl),o=await Fu(n),i=o.removed>0;return e.output.result({server:o.serverUrl??n,removed:i},()=>i?d("cli.cmd.auth.logout.removedAuth",n):d("cli.cmd.auth.logout.storedAuth",n)),0}},IP={path:["auth","logout"],domain:"auth",spec:{name:"auth logout",flags:[{name:"all",takesValue:!1,param:{}}],positionals:[{name:"url",role:"server-url",param:{}}],inputGroups:[{name:"logoutTarget",mode:"atMostOne",inputId:"server",members:["<url>","--all"]}],usageArgs:"[<options>] [<url>]",examples:["succapp auth logout","succapp auth logout https://bi.example.com","succapp auth logout --all"]},workspaceTarget:"optional",serverTarget:"optional",createExecutor:()=>new xf};D();var If=class extends te{toOptions(e){return{serverUrl:e.value("url")}}async executeCommand(e,t){let n=await this.resolveServerUrl(e,t.serverUrl),o=await Io(n),i={server:n,...T0(o)};return e.output.result(i,()=>M0(i)),0}},FP={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 If};function T0(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 M0(r){return d(r.storedAuth===!1?"cli.cmd.auth.status.noStoredOutput":"cli.cmd.auth.status.output",x0(r))}function x0(r){let e={};for(let[t,n]of Object.entries(r))e[t]=n===void 0?"":String(n);return e}var DP=[xP,IP,FP];var I0=2,Ff=class{constructor(e,t={}){this.model=e;this.columnGap=F0(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(`
|
|
78
|
+
`))}calculateColumnWidths(){return this.model.columns.map((e,t)=>{let n=this.model.rows.map(o=>Lr(this.getCellText(o,t)));return Math.max(Lr(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 li(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 Ff(r,e).render()}function F0(r){return r===void 0||!Number.isFinite(r)?I0:Math.max(0,Math.floor(r))}_n();D();Z();function no(r){return I({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 xp(r){return I({name:r.name,id:r.id,desc:r.desc})}function bn(r){return I({remotePath:r.remotePath,localPath:r.localPath,currentVersion:r.currentVersion,targetVersion:r.targetVersion,changed:r.changed,reason:r.reason,...AP(r.errorInfo)})}function Ip(r){return I({path:r.path,...AP(r.errorInfo)})}function Fp(r){return I({path:r.path,currentVersion:r.currentVersion,targetVersion:r.targetVersion,metaType:r.metaType,kind:r.kind})}function Dp(r){switch(r){case"older":return d("cli.out.value.older");case"newer":return d("cli.out.value.newer");default:return r}}function Ar(r){return r==null?"":Array.isArray(r)?r.map(Ar).join(", "):typeof r=="object"?JSON.stringify(r):String(r)}function ur(r){return r==null?"":r?d("cli.out.value.yes"):d("cli.out.value.no")}function oo(r){return de({columns:[d("cli.out.header.type"),d("cli.out.header.path"),d("cli.out.header.remote")],rows:r.map(e=>[e.type,e.path,e.remotePath])})}function Is(r){return de({columns:[d("cli.out.header.remote"),d("cli.out.common.version"),d("cli.out.common.targetVersion")],rows:r.map(e=>[e.remotePath,e.currentVersion??"",e.targetVersion??""])})}function AP(r){if(r===void 0)return{};let e=D0(r);return e||(r instanceof Error?I({errorName:r.name||"Error",errorMessage:r.message}):typeof r=="object"&&r!==null?I({errorName:er(r,"name"),errorCode:er(r,"code")??er(r,"errorCode"),errorMessage:er(r,"message")??er(r,"reason")}):{errorMessage:String(r)})}function en(r){if(r===void 0)return"";let e=A0(r);if(e)return e;if(r instanceof Error)return r.message||r.name;if(typeof r=="object"&&r!==null){let t=er(r,"code")??er(r,"errorCode"),n=er(r,"message")??er(r,"reason");return[t,n].filter(o=>o&&o.length>0).join(": ")}return String(r)}function D0(r){let e=lt(r),t=gr(r),n=Lt(r);if(!(e===void 0&&t===void 0&&n===void 0))return I({errorName:O0(r),errorCode:e,errorType:t==null?void 0:String(t),errorMessage:OP(r),errorProperties:n})}function A0(r){let e=lt(r),t=OP(r);return[e,t].filter(n=>n&&n.length>0).join(": ")}function O0(r){if(r instanceof Error)return r.name||"Error";if(!(typeof r!="object"||r===null))return er(r,"name")??er(r,"className")}function OP(r){if(r instanceof Error)return r.message;if(!(typeof r!="object"||r===null))return er(r,"message")??er(r,"reason")}function er(r,e){if(!Object.hasOwn(r,e))return;let t=r[e];return typeof t=="string"?t:void 0}D();Z();$();F();_();var na="file",Af="input",Of="mode",_f="dry-run",Lf="output",qt="force",Df="config",oa="test",mr="timeout",Nf="catalog",$t="schema",Wf="table-name-contains",ia="max-rows",Jo="query",Qo="query-file",ao=30,_e=class extends te{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 zn(He(e.cwd,t))}readDbStdinText(){return Nt()}isDbStdinInteractive(){return process.stdin.isTTY}createDbParamInputReader(e){return{hasInteractiveStdin:()=>this.isDbStdinInteractive(),readFileText:t=>this.readDbInputTextFile(e,t),readStdin:()=>this.readDbStdinText()}}readDbParamText(e,t){return vc(e,t,this.createDbParamInputReader(e))}async readDbSqlText(e,t){let n=await this.readDbParamText(e,t);if(Pe(n))return n;let o=gi(e).resolveInput(t);throw new R("err.cli.missingInput",{inputId:o.inputId,sources:o.sources})}readDbImportContent(e){return this.readDbParamText(e,`--${Af}`)}},io=class extends _e{async readConfig(e){let t=gi(e).resolveInput(`--${Df}`),n=await this.readDbParamText(e,`--${Df}`);return _0(n,t.label,t.inputId)}};function aa(r){return[{name:Df,takesValue:!0,valueHint:"json-file|-",param:{source:"file-or-stdin",required:!0,inputId:"dataSourceConfig"}},...r]}function _0(r,e,t="dataSourceConfig"){let n;try{n=JSON.parse(r)}catch(o){throw new R("err.cli.invalidJsonObject",{inputId:t,source:e},{cause:o})}if(!W(n))throw new R("err.cli.invalidJsonObject",{inputId:t,source:e});return n}function _P(r){return I({name:r.name,desc:r.desc,defaultSchema:r.defaultSchema,defaultCatalog:r.defaultCatalog,readonly:r.readonly})}function Ap(r){return I({schema:r.schema,tableName:r.tableName,tableType:r.tableType,tableComment:r.tableComment})}function LP(r){return I({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 NP(r){return I({result:r.result})}function WP(r){return I({dataSource:r.dataSource,resultType:r.resultType,force:r.force,updateCount:r.updateCount,results:r.results,sqlInfos:r.sqlInfos?.map(L0),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 UP(r){return I({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 L0(r){return I({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 so(r){let e=r;return I({result:r.result,dataSource:r.dataSource,originalDataSource:e.originalDataSource,config:e.config?Op(e.config):void 0})}function Op(r){let e=I({...r});return delete e.password,e}function jP(r){return{columns:[d("cli.cmd.db.dataSource"),d("cli.out.header.description"),d("cli.cmd.db.defaultSchema"),d("cli.cmd.db.readonly")],rows:r.map(e=>[e.name??"",e.desc??"",e.defaultSchema??e.defaultCatalog??"",ur(e.readonly)])}}function VP(r){let e=Op(r);return{columns:[d("cli.out.header.field"),d("cli.out.header.value")],rows:Object.keys(e).sort().map(t=>[t,Ar(e[t])])}}function BP(r){return{columns:[d("cli.out.header.schema"),d("cli.out.header.table"),d("cli.out.header.type"),d("cli.out.header.comment")],rows:r.map(e=>[e.schema??"",e.tableName,e.tableType??"",e.tableComment??""])}}function qP(r){let e=r.table.columns??[],t=j0(r.table);return{columns:[d("cli.out.header.field"),d("cli.out.header.type"),d("cli.out.header.null"),d("cli.out.header.key"),d("cli.out.header.default"),d("cli.out.header.extra"),d("cli.out.header.comment")],rows:e.map(n=>[n.name,N0(n),W0(n),U0(n,t),q0(n),$0(n),n.comment??""])}}function N0(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 W0(r){return r.nullable===void 0?"":r.nullable?"YES":"NO"}function U0(r,e){return r.primaryKey?"PRI":r.unique?"UNI":e.get(Uf(r.name))??""}function j0(r){let e=new Map;for(let t of r.primaryKeys??[])e.set(Uf(t),"PRI");for(let t of r.indexes??[]){let n=t.primaryKey?"PRI":t.unique?"UNI":"MUL";for(let o of V0(t.parts))B0(e,o,n)}return e}function V0(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 B0(r,e,t){let n=Uf(e),o=r.get(n);o==="PRI"||o==="UNI"&&t==="MUL"||r.set(n,t)}function Uf(r){return r.toLowerCase()}function q0(r){return r.defaultValue===void 0?"":r.defaultValue??"NULL"}function $0(r){return r.autoInc?"auto_increment":""}function $P(r){return G0(r)?H0(r.fields,r.data):typeof r.updateCount=="number"?d("cli.cmd.db.sqlUpdateCount",String(r.updateCount)):d("cli.cmd.db.sqlExecutedSuccess")}function HP(r){return z0(r.result.fields.map(e=>e.name),r.result.rows)}function H0(r,e){return r.length?{columns:r,rows:e.map(t=>t.map(Ar))}:d("cli.cmd.db.sqlExecutedSuccess")}function z0(r,e){return r.length?{columns:r,rows:e.map(t=>r.map(n=>Ar(t[n])))}:d("cli.cmd.db.sqlExecutedSuccess")}function zP(r){let e=r.skippedRows===void 0?"":d("cli.cmd.db.skipped",String(r.skippedRows)),t=r.dryRun?d("cli.cmd.db.dryImport"):d("cli.cmd.db.imported");return d("cli.cmd.db.rowsModeDry",t,String(r.importedRows),r.tableName,e,r.mode,String(r.dryRun))}function G0(r){return Array.isArray(r.fields)&&Array.isArray(r.data)}function GP(r){let e=r.value("table"),t=r.value(Jo),n=r.value(Qo);if(t!==void 0&&n!==void 0)throw new R("err.cli.conflictingInputs",{inputs:[`--${Jo}=<sql>`,`--${Qo}=<sql-file>`]});if(e!==void 0&&(t!==void 0||n!==void 0))throw new R("err.cli.conflictingInputs",{inputs:["<table>",`--${Jo}`,`--${Qo}`]});if(t!==void 0)return{type:"query"};if(n!==void 0)return{type:"query"};if(e===void 0)throw new R("err.cli.missingInput",{inputId:"exportTarget",sources:["<table>",`--${Jo}=<sql>`,`--${Qo}=<sql-file>`]});let o=Fs(r,e);return{type:"table",schema:o.schema,tableName:o.tableName}}function K0(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 Fs(r,e){let t=r.value($t);return t!==void 0?{schema:t,tableName:e}:K0(e)}_();F();var jf=class extends _e{toOptions(e){return{dataSource:e.value("datasource"),schema:e.value($t),timeoutSeconds:e.integer(mr),maxRows:e.integer(ia),force:e.has(qt)}}async prepareDbCommand(e,t){return t.sql!==void 0?t:{...t,sql:await this.readDbSqlText(e,"sqlSource")}}async executeDbCommand(e,t,n,o){let i=await this.executeAnySql(n,{dataSource:o.dataSource,schema:o.schema,sql:o.sql,timeoutMs:o.timeoutSeconds*1e3,maxRows:o.maxRows,force:o.force});return e.output.result({...ne(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}:{},...WP(i)},()=>$P(i)),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 So(n,"err.sql.forceRequired")?new R("err.cli.confirmationRequired",{reason:"dbSqlMutation",flag:`--${qt}`,sqlInfos:n.properties.sqlInfos,context:{forceRequired:!0}},{cause:n}):n}}},KP={path:["db","exec"],domain:"db",spec:{name:"db exec",flags:[{name:na,takesValue:!0,valueHint:"sql-file",param:{source:"file",type:"string",nonEmpty:!0}},{name:$t,takesValue:!0,valueHint:"schema"},{name:mr,takesValue:!0,valueHint:"seconds",param:{type:"integer",min:1,defaultValue:ao}},{name:ia,takesValue:!0,valueHint:"n",param:{type:"integer",min:0}},{name:qt,takesValue:!1}],positionals:[{name:"datasource",param:{required:!0}},{name:"sql",param:{source:"value",type:"string",nonEmpty:!0}}],inputGroups:[{name:"sqlSource",mode:"atMostOne",inputId:"sql",defaultSource:"stdin",members:["<sql>",`--${na}`]}],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 jf};var co=E(require("fs")),JP=E(require("path")),QP=require("stream/promises");_();F();async function _p(r,e,t){await co.promises.mkdir(JP.dirname(r),{recursive:!0});let n=J0(r);try{await(0,QP.pipeline)(e,co.createWriteStream(n,{flags:"wx"})),t.force?await co.promises.rename(n,r):(await co.promises.link(n,r),await co.promises.unlink(n))}catch(o){throw await Q0(n,o),!t.force&&ec(o)?new R("err.cli.confirmationRequired",{reason:"outputOverwrite",flag:t.overwriteFlag,path:r},{cause:o}):o}}function J0(r){let e=[process.pid,Date.now().toString(36),Math.random().toString(36).slice(2)].join("-");return`${r}.tmp-${e}`}async function Q0(r,e){try{await co.promises.unlink(r)}catch(t){if(x(t))return;e instanceof Error&&(e.cleanupError=t)}}D();_();$();var YP=E(require("fs")),Vf=class extends _e{toOptions(e){return{dataSource:e.value("datasource"),schema:e.value($t),target:GP(e),timeoutSeconds:e.integer(mr),output:e.value(Lf),force:e.has(qt)}}async prepareDbCommand(e,t){return t.target.type!=="query"||t.target.sql!==void 0?t:{...t,target:{...t.target,sql:await this.readDbSqlText(e,"exportTarget")}}}async executeDbCommand(e,t,n,o){let i=o.target.type==="table"?{tableName:o.target.tableName}:{query:!0},a=He(e.cwd,o.output),s=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:o.target.sql,timeoutMs:o.timeoutSeconds*1e3});await _p(a,s,{force:o.force,overwriteFlag:`--${qt}`});let c=await YP.promises.stat(a),l={...ne(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:c.size,output:a};return e.output.result(l,()=>d("cli.cmd.db.export.exportedData",a)),0}},XP={path:["db","export"],domain:"db",spec:{name:"db export",flags:[{name:Jo,takesValue:!0,valueHint:"sql",param:{source:"value",type:"string",nonEmpty:!0}},{name:Qo,takesValue:!0,valueHint:"sql-file",param:{source:"file",type:"string",nonEmpty:!0}},{name:$t,takesValue:!0,valueHint:"schema"},{name:mr,takesValue:!0,valueHint:"seconds",param:{type:"integer",min:1,defaultValue:ao}},{name:Lf,takesValue:!0,valueHint:"csv-file",param:{required:!0,nonEmpty:!0,inputId:"outputFile"}},{name:qt,takesValue:!1}],positionals:[{name:"datasource",param:{required:!0}},{name:"table",param:{source:"value",type:"string",nonEmpty:!0}}],inputGroups:[{name:"exportTarget",mode:"exactlyOne",inputId:"exportTarget",members:["<table>",`--${Jo}`,`--${Qo}`]}],usageArgs:"[<options>] <datasource> [<table>]",examples:["succapp db export default orders --output=orders.csv","succapp db export default --query-file=./query.sql --output=orders.csv"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Vf};_();var Bf=class extends _e{toOptions(e){let t=Fs(e,e.value("table")),n=e.value(Of);return{dataSource:e.value("datasource"),schema:t.schema,tableName:t.tableName,mode:n??"append",dryRun:e.has(_f),timeoutSeconds:e.integer(mr)}}async prepareDbCommand(e,t){return t.content!==void 0?t:{...t,content:await this.readDbImportContent(e)}}async executeDbCommand(e,t,n,o){let i=await n.importDbTableData({dataSource:o.dataSource,...o.schema!==void 0?{schema:o.schema}:{},tableName:o.tableName,content:o.content,format:"csv",mode:o.mode,dryRun:o.dryRun,timeoutMs:o.timeoutSeconds*1e3}),a={...i,mode:i.mode??o.mode,dryRun:i.dryRun??o.dryRun};return e.output.result({...ne(e,t),...UP(a),timeoutSeconds:o.timeoutSeconds},()=>zP(a)),0}},ZP={path:["db","import"],domain:"db",spec:{name:"db import",flags:[{name:Af,takesValue:!0,valueHint:"csv-file|-",param:{source:"file-or-stdin",type:"string",required:!0,inputId:"inputFile"}},{name:Of,takesValue:!0,valueHint:"append|truncate|replace",param:{choices:["append","truncate","replace"]}},{name:_f,takesValue:!1},{name:$t,takesValue:!0,valueHint:"schema"},{name:mr,takesValue:!0,valueHint:"seconds",param:{type:"integer",min:1,defaultValue:ao}}],positionals:[{name:"datasource",param:{required:!0}},{name:"table",param:{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 Bf};_();F();var qf=class extends _e{toOptions(e){return{dataSource:e.value("datasource"),schema:e.value($t),timeoutSeconds:e.integer(mr),maxRows:e.integer(ia)}}async prepareDbCommand(e,t){return t.sql!==void 0?t:{...t,sql:await this.readDbSqlText(e,"sqlSource")}}async executeDbCommand(e,t,n,o){let i=await this.executeQuerySql(n,{dataSource:o.dataSource,...o.schema!==void 0?{schema:o.schema}:{},sql:o.sql,timeoutMs:o.timeoutSeconds*1e3,...o.maxRows!==void 0?{maxRows:o.maxRows}:{}});return e.output.result({...ne(e,t),dataSource:o.dataSource,...o.schema!==void 0?{schema:o.schema}:{},readOnly:!0,timeoutSeconds:o.timeoutSeconds,...o.maxRows!==void 0?{maxRows:o.maxRows}:{},...NP(i)},()=>HP(i)),0}async executeQuerySql(e,t){try{return await e.executeDbQuery(t)}catch(n){throw So(n,"err.db.nonReadOnlySql")?new R("err.cli.confirmationRequired",{reason:"dbQueryWriteSql",flag:`--${qt}`,context:{backendErrorCode:"err.db.nonReadOnlySql"}},{cause:n}):n}}},eR={path:["db","query"],domain:"db",spec:{name:"db query",flags:[{name:na,takesValue:!0,valueHint:"sql-file",param:{source:"file",type:"string",nonEmpty:!0}},{name:$t,takesValue:!0,valueHint:"schema"},{name:mr,takesValue:!0,valueHint:"seconds",param:{type:"integer",min:1,defaultValue:ao}},{name:ia,takesValue:!0,valueHint:"n",param:{type:"integer",min:0}}],positionals:[{name:"datasource",param:{required:!0}},{name:"sql",param:{source:"value",type:"string",nonEmpty:!0}}],inputGroups:[{name:"sqlSource",mode:"atMostOne",inputId:"sql",defaultSource:"stdin",members:["<sql>",`--${na}`]}],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 qf};D();Z();var $f=class extends _e{toOptions(e){return{dataSource:e.value("datasource"),catalog:e.value(Nf)}}async executeDbCommand(e,t,n,o){let i=await n.listDbSchemas(o.dataSource,{...o.catalog!==void 0?{catalog:o.catalog}:{}});return e.output.result({...ne(e,t),dataSource:o.dataSource,...o.catalog!==void 0?{catalog:o.catalog}:{},schemas:i.map(a=>I({...a}))},()=>({columns:[d("cli.out.header.schema"),d("cli.cmd.db.schema.list.catalog")],rows:i.map(a=>[a.name,a.catalog??""])})),0}},tR={path:["db","schema","list"],domain:"db",spec:{name:"db schema list",flags:[{name:Nf,takesValue:!0,valueHint:"catalog"}],positionals:[{name:"datasource",param:{required:!0}}],usageArgs:"[<options>] <datasource>",examples:["succapp db schema list default","succapp db schema list default --catalog=PUBLIC"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new $f};D();var Hf=class extends io{toOptions(e){return{testBeforeSave:e.has(oa)}}async prepareDbCommand(e,t){return t.config!==void 0?t:{...t,config:await this.readConfig(e)}}async executeDbCommand(e,t,n,o){let i=o.config,a=await n.createDataSource({config:i,testBeforeSave:o.testBeforeSave});return e.output.result({...ne(e,t),...so(a)},()=>d("cli.cmd.db.source.create.created",a.dataSource??i.name??"")),0}},rR={path:["db","source","create"],domain:"db",spec:{name:"db source create",flags:aa([{name:oa,takesValue:!1}]),positionals:[],usageArgs:"[<options>]",examples:["succapp db source create --config=./datasource.json --test"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Hf};var zf=class extends _e{async executeDbCommand(e,t,n){let o=await n.getDataSources();return e.output.result({...ne(e,t),dataSources:o.map(_P)},()=>jP(o)),0}},nR={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 zf};D();F();_();var Gf=class extends _e{toOptions(e){return{dataSource:e.value("datasource"),force:e.has(qt)}}validateOptions(e,t){if(!t.force)throw new R("err.cli.confirmationRequired",{reason:"dbSourceDelete",flag:`--${qt}`,inputId:"dataSourceConfig"})}async executeDbCommand(e,t,n,o){let i=await n.deleteDataSource({dataSource:o.dataSource});return e.output.result({...ne(e,t),...so(i)},()=>d("cli.cmd.db.source.remove.deleted",i.dataSource??o.dataSource)),0}},oR={path:["db","source","remove"],domain:"db",spec:{name:"db source remove",flags:[{name:qt,takesValue:!1}],positionals:[{name:"datasource",param:{required:!0}}],usageArgs:"[<options>] <datasource>",examples:["succapp db source remove oldDs --force"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Gf};var Kf=class extends _e{toOptions(e){return{dataSource:e.value("datasource")}}async executeDbCommand(e,t,n,o){let i=await n.getDataSourceConfig(o.dataSource);return e.output.result({...ne(e,t),dataSource:o.dataSource,config:Op(i)},()=>VP(i)),0}},iR={path:["db","source","show"],domain:"db",spec:{name:"db source show",flags:[],positionals:[{name:"datasource",param:{required:!0}}],usageArgs:"[<options>] <datasource>",examples:["succapp db source show default"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Kf};D();var Jf=class extends io{toOptions(e){return{}}async prepareDbCommand(e,t){return t.config!==void 0?t:{...t,config:await this.readConfig(e)}}async executeDbCommand(e,t,n,o){let i=o.config,a=await n.testDataSource({config:i});return e.output.result({...ne(e,t),...so(a)},()=>d("cli.cmd.db.source.test.testOk",a.dataSource??i.name??"")),0}},aR={path:["db","source","test"],domain:"db",spec:{name:"db source test",flags:aa([]),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 Jf};D();var Qf=class extends io{toOptions(e){return{dataSource:e.value("datasource"),testBeforeSave:e.has(oa)}}async prepareDbCommand(e,t){return t.config!==void 0?t:{...t,config:await this.readConfig(e)}}async executeDbCommand(e,t,n,o){let i=o.config,a=await n.updateDataSource({dataSource:o.dataSource,config:i,testBeforeSave:o.testBeforeSave});return e.output.result({...ne(e,t),...so(a)},()=>d("cli.cmd.db.source.update.updated",a.dataSource??i.name??o.dataSource)),0}},sR={path:["db","source","update"],domain:"db",spec:{name:"db source update",flags:aa([{name:oa,takesValue:!1}]),positionals:[{name:"datasource",param:{required:!0}}],usageArgs:"[<options>] <datasource>",examples:["succapp db source update oldDs --config=./datasource.json --test"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Qf};var Yf=class extends _e{toOptions(e){let t=Fs(e,e.value("table"));return{dataSource:e.value("datasource"),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({...ne(e,t),dataSource:o.dataSource,table:Ap(i.table),columns:i.table.columns?.map(LP)??[]},()=>qP(i)),0}},cR={path:["db","table","describe"],domain:"db",spec:{name:"db table describe",flags:[{name:$t,takesValue:!0,valueHint:"schema"}],positionals:[{name:"datasource",param:{required:!0}},{name:"table",param:{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 Yf};var Xf=class extends _e{toOptions(e){return{dataSource:e.value("datasource"),schema:e.value("schema"),tableNameContains:e.value(Wf)}}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({...ne(e,t),dataSource:o.dataSource,...o.schema!==void 0?{schema:o.schema}:{},...o.tableNameContains!==void 0?{tableNameContains:o.tableNameContains}:{},tables:i.map(Ap)},()=>BP(i)),0}},lR={path:["db","table","list"],domain:"db",spec:{name:"db table list",flags:[{name:Wf,takesValue:!0,valueHint:"text"}],positionals:[{name:"datasource",param:{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 Xf};var pR=[nR,iR,aR,rR,sR,oR,tR,lR,cR,eR,KP,ZP,XP];_();F();D();Z();$();var Zf="all",Ds="contains",eh="detail",th="dim",Lp="force",rh="limit",As="max-rows",nh="measure",Os="order",oh="output",ih="project",lo="query",po="query-file",_s="select",uo="stdin",ah="type",Ls="where",tn=class extends te{async executeCommand(e,t){let n=await this.prepareModelCommand(e,t),o=await this.resolveServerUrl(e),i=await this.createServerApiClient(e,o);return this.executeModelCommand(e,o,i,n)}prepareModelCommand(e,t){return Promise.resolve(t)}readModelInputTextFile(e,t){return zn(He(e.cwd,t))}readModelStdinText(){return Nt()}isModelStdinInteractive(){return process.stdin.isTTY}createModelParamInputReader(e){return{hasInteractiveStdin:()=>this.isModelStdinInteractive(),readFileText:t=>this.readModelInputTextFile(e,t),readStdin:()=>this.readModelStdinText()}}async readQueryRequest(e,t){let n=gi(e).resolveInput(t),o=await vc(e,t,this.createModelParamInputReader(e));return Y0(o,n.label,n.inputId)}};function Y0(r,e,t="value"){let n;try{n=JSON.parse(r)}catch(o){throw new R("err.cli.invalidJsonObject",{inputId:t,source:e},{cause:o})}if(!W(n))throw new R("err.cli.invalidJsonObject",{inputId:t,source:e});return n}function dR(r){let e=r.value("model"),t=r.value(lo)!==void 0||r.value(po)!==void 0||r.has(uo);if(e!==void 0&&t)throw new R("err.cli.conflictingInputs",{inputs:["<model>",`--${lo}`,`--${po}`,`--${uo}`]});if(e!==void 0)return{type:"select",model:e,fields:r.values(_s),where:r.value(Ls),order:r.value(Os)};if(!t)throw new R("err.cli.missingInput",{inputId:"value",sources:["<model>",`--${lo}=<json>`,`--${po}=<file>`,`--${uo}`]});return{type:"query"}}function uR(r){return{columns:[d("cli.out.file.id"),d("cli.out.model.type"),d("cli.out.model.extracted"),d("cli.out.model.fields"),d("cli.out.model.writable"),d("cli.out.file.path")],rows:r.map(e=>[e.id,e.modelType??"",ur(e.extracted),Ar(e.fieldCount),ur(e.writable),e.path])}}function mR(r){return{columns:[d("cli.out.header.field"),d("cli.out.header.value")],rows:[[d("cli.out.file.id"),r.id],[d("cli.out.file.path"),r.path],[d("cli.out.file.name"),r.name],[d("cli.out.file.project"),r.project??""],[d("cli.out.model.type"),r.modelType??""],[d("cli.out.model.fields"),Ar(r.fieldCount)],[d("cli.out.model.extracted"),ur(r.extracted)],[d("cli.out.model.writable"),ur(r.writable)],[d("cli.out.model.primaryKeys"),(r.primaryKeys??[]).join(", ")],[d("cli.out.model.businessKeys"),(r.businessKeys??[]).join(", ")],[d("cli.out.model.extractMode"),r.extractMode??""],[d("cli.out.model.targetTable"),r.targetTable??""]]}}function fR(r){return{columns:[d("cli.out.file.name"),d("cli.out.model.title"),d("cli.out.model.dataType"),d("cli.out.model.dim"),d("cli.out.file.hidden"),d("cli.out.model.primary"),d("cli.out.model.dbField")],rows:r.map(e=>[e.name??"",e.title??"",e.dataType??"",ur(e.dim),ur(e.hidden),ur(e.primary),e.field??""])}}function hR(r){return{columns:[d("cli.out.model.kind"),d("cli.out.file.name"),d("cli.out.model.fields"),d("cli.out.model.unique"),d("cli.out.model.enabled")],rows:r.map(e=>[e.kind??"",e.name??"",(e.fields??[]).join(", "),ur(e.unique),ur(e.enabled)])}}function sh(r){let e=W(r.result)?r.result:{},t=Z0(e.fields),n=Array.isArray(e.rows)?e.rows:[];return t.length?{columns:t,rows:n.map(o=>X0(o,t))}:d("cli.cmd.model.query.empty")}function X0(r,e){return Array.isArray(r)?r.map(Ar):W(r)?e.map(t=>Ar(r[t])):[Ar(r)]}function Z0(r){return Array.isArray(r)?r.map(e=>typeof e=="string"?e:W(e)?String(e.alias??e.name??e.field??""):String(e)):[]}_();D();$();var gR=E(require("fs")),ch=class extends tn{toOptions(e){return{project:e.value(ih),types:e.values(ah),contains:e.value(Ds),limit:e.integer(rh)}}async executeModelCommand(e,t,n,o){let i=await n.listModels({...o.project!==void 0?{project:o.project}:{},...o.types.length>0?{types:[...o.types]}:{},...o.contains!==void 0?{contains:o.contains}:{},...o.limit!==void 0?{limit:o.limit}:{}});return e.output.result({...ne(e,t),models:i},()=>uR(i)),0}},lh=class extends tn{toOptions(e){return{model:e.value("model"),detail:e.has(eh)}}async executeModelCommand(e,t,n,o){let i=await n.getModelSummary(o);return e.output.result({...ne(e,t),model:i},()=>mR(i)),0}},ph=class extends tn{toOptions(e){return{model:e.value("model"),all:e.has(Zf),contains:e.value(Ds),dim:e.has(th),measure:e.has(nh)}}async executeModelCommand(e,t,n,o){let i=await n.listModelFields({model:o.model,all:o.all,dim:o.dim,measure:o.measure,...o.contains!==void 0?{contains:o.contains}:{}});return e.output.result({...ne(e,t),model:o.model,fields:i},()=>fR(i)),0}},dh=class extends tn{toOptions(e){return{model:e.value("model")}}async executeModelCommand(e,t,n,o){let i=await n.listModelIndexes(o);return e.output.result({...ne(e,t),model:o.model,indexes:i},()=>hR(i)),0}},uh=class extends tn{toOptions(e){return{model:e.value("model"),fields:e.values(_s),where:e.value(Ls),order:e.value(Os),maxRows:e.integer(As)}}async executeModelCommand(e,t,n,o){let i=await n.selectModelStream({model:o.model,...o.fields.length>0?{fields:[...o.fields]}:{},...o.where!==void 0?{where:o.where}:{},...o.order!==void 0?{order:o.order}:{},...o.maxRows!==void 0?{maxRows:o.maxRows}:{}});return await e.output.resultStream({...ne(e,t),model:o.model},i,a=>sh(a)),0}},mh=class extends tn{toOptions(e){return{maxRows:e.integer(As)}}async prepareModelCommand(e,t){let n=t;return n.request!==void 0?n:{...t,request:await this.readQueryRequest(e,"querySource")}}async executeModelCommand(e,t,n,o){let i=await n.queryModelsStream(o.request,o.maxRows);return await e.output.resultStream({...ne(e,t)},i,a=>sh(a)),0}},fh=class extends tn{toOptions(e){return{target:dR(e),output:e.value(oh),force:e.has(Lp)}}async prepareModelCommand(e,t){if(t.target.type!=="query")return t;let n=t;return n.queryRequest!==void 0?n:{...t,queryRequest:await this.readQueryRequest(e,"exportTarget")}}async executeModelCommand(e,t,n,o){let i=He(e.cwd,o.output),a=o.target.type==="select"?await n.exportModelSelectData({model:o.target.model,...o.target.fields.length>0?{fields:[...o.target.fields]}:{},...o.target.where!==void 0?{where:o.target.where}:{},...o.target.order!==void 0?{order:o.target.order}:{}}):await n.exportModelQueryData(o.queryRequest);await _p(i,a,{force:o.force,overwriteFlag:`--${Lp}`});let s=await gR.promises.stat(i),c={...ne(e,t),...o.target.type==="select"?{model:o.target.model}:{query:!0},output:i,size:s.size};return e.output.result(c,()=>d("cli.cmd.model.export.exportedData",i)),0}},yR={path:["model","list"],domain:"model",spec:{name:"model list",flags:[{name:ih,takesValue:!0,valueHint:"project"},{name:ah,takesValue:!0,repeatable:!0,valueHint:"type",param:{list:{separator:","}}},{name:Ds,takesValue:!0,valueHint:"text"},{name:rh,takesValue:!0,valueHint:"n",param:{type:"integer",min:1}}],positionals:[],usageArgs:"[<options>]",examples:["succapp model list","succapp model list --project DEMO --type App --limit 20"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new ch},CR={path:["model","show"],domain:"model",spec:{name:"model show",flags:[{name:eh,takesValue:!1}],positionals:[{name:"model",param:{required:!0}}],usageArgs:"[<options>] <model>",examples:["succapp model show /DEMO/data/tables/APP/\u5BA2\u6237.tbl"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new lh},SR={path:["model","fields"],domain:"model",spec:{name:"model fields",flags:[{name:Zf,takesValue:!1},{name:Ds,takesValue:!0,valueHint:"text"},{name:th,takesValue:!1},{name:nh,takesValue:!1}],positionals:[{name:"model",param:{required:!0}}],usageArgs:"[<options>] <model>",examples:["succapp model fields /DEMO/data/tables/APP/\u5BA2\u6237.tbl --dim"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new ph},vR={path:["model","indexes"],domain:"model",spec:{name:"model indexes",flags:[],positionals:[{name:"model",param:{required:!0}}],usageArgs:"[<options>] <model>",examples:["succapp model indexes /DEMO/data/tables/APP/\u5BA2\u6237.tbl"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new dh},kR={path:["model","select"],domain:"model",spec:{name:"model select",flags:[{name:_s,takesValue:!0,repeatable:!0,valueHint:"fields",param:{list:{separator:","}}},{name:Ls,takesValue:!0,valueHint:"expression"},{name:Os,takesValue:!0,valueHint:"order"},{name:As,takesValue:!0,valueHint:"n",param:{type:"integer",min:1}}],positionals:[{name:"model",param:{required:!0}}],usageArgs:"[<options>] <model>",examples:[`succapp model select /DEMO/data/tables/APP/\u5BA2\u6237.tbl --where "STATUS='ACTIVE'" --max-rows 20`]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new uh},wR={path:["model","query"],domain:"model",spec:{name:"model query",flags:[{name:lo,takesValue:!0,valueHint:"json",param:{source:"value"}},{name:po,takesValue:!0,valueHint:"file",param:{source:"file"}},{name:uo,takesValue:!1,param:{source:"stdin"}},{name:As,takesValue:!0,valueHint:"n",param:{type:"integer",min:1}}],positionals:[],inputGroups:[{name:"querySource",mode:"exactlyOne",inputId:"value",members:[`--${lo}`,`--${po}`,`--${uo}`]}],usageArgs:"[<options>]",examples:[["succapp model query --query '{",' "sources": ["/DEMO/data/tables/APP/\u5BA2\u6237.tbl"],',' "fields": [{',' "alias": "NAME",',' "exp": "NAME"'," }],",' "options": {',' "enableLimit": true,',' "limit": 20'," }","}' --json"].join(`
|
|
79
|
+
`),"succapp model query --query-file ./query.json --max-rows 100 --json","cat query.json | succapp model query --stdin"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new mh},PR={path:["model","export"],domain:"model",spec:{name:"model export",flags:[{name:_s,takesValue:!0,repeatable:!0,valueHint:"fields",param:{list:{separator:","}}},{name:Ls,takesValue:!0,valueHint:"expression"},{name:Os,takesValue:!0,valueHint:"order"},{name:lo,takesValue:!0,valueHint:"json",param:{source:"value"}},{name:po,takesValue:!0,valueHint:"file",param:{source:"file"}},{name:uo,takesValue:!1,param:{source:"stdin"}},{name:oh,takesValue:!0,valueHint:"csv-file",param:{required:!0,nonEmpty:!0,inputId:"outputFile"}},{name:Lp,takesValue:!1}],positionals:[{name:"model",param:{source:"value",type:"string",nonEmpty:!0}}],inputGroups:[{name:"exportTarget",mode:"exactlyOne",inputId:"value",members:["<model>",`--${lo}`,`--${po}`,`--${uo}`]}],usageArgs:"[<options>] [<model>]",examples:["succapp model export /DEMO/data/tables/APP/\u5BA2\u6237.tbl --select ID,NAME --output=orders.csv","succapp model export --query-file ./query.json --output=result.csv"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new fh};var RR=[yR,CR,SR,vR,kR,wR,PR];D();Z();var gh=["product","sys","metadata","inspect","jvm","env"],eN=[...gh,"all"],tN=["product","metadata"],rN=["sys","inspect","jvm","env"],hh=class extends te{toOptions(e){let t=nN(e.values("scope"));return{url:e.value("url"),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=oN(t)?await o.getServerDetailInfo():await o.getServerInfo();return e.output.result({...e.workspace?{workspace:e.workspace.root}:{},server:n,info:iN(i,t)},()=>aN(n,i,t)),0}},bR={path:["server","info"],domain:"server",spec:{name:"server info",flags:[{name:"scope",takesValue:!0,repeatable:!0,valueHint:"name",param:{choices:eN,list:{separator:",",empty:"error",dedupe:!0}}},{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 hh};function nN(r){let e=[],t=!1;for(let n of r){if(n==="all"){t=!0;continue}if(gh.includes(n)){e.push(n);continue}}return{scopes:e,all:t}}function ER(r){return r.all?gh:r.scopes.length>0?r.scopes:tN}function oN(r){return r.raw||r.all||r.scopes.some(e=>rN.includes(e))}function iN(r,e){if(e.raw)return I(r);let t=ER(e);return I({productType:r.productType,version:r.version,devToolApiVersion:r.devToolApiVersion,scopes:t,productInfo:t.includes("product")?Ch(r):void 0,sysInfo:t.includes("sys")?TR(r):void 0,metadataVersions:t.includes("metadata")?r.metadataVersions:void 0,sysInspectInfo:t.includes("inspect")?sa(r,"sysInspectInfo"):void 0,jvmInfo:t.includes("jvm")?sa(r,"jvmInfo"):void 0,systemEnvirInfo:t.includes("env")?sa(r,"systemEnvirInfo"):void 0})}function aN(r,e,t){if(t.raw)return JSON.stringify(e,null,2);let n=[de(sN(r,e))];for(let o of ER(t)){let i=cN(o,e);i&&n.push("",i)}return n.join(`
|
|
80
|
+
`)}function sN(r,e){return{columns:[d("cli.out.header.field"),d("cli.out.header.value")],rows:[[d("cli.out.common.server"),r],[d("cli.out.common.product"),e.productType??""],[d("cli.out.header.version"),e.version??mN(Ch(e),"productVersion")??""],[d("cli.out.common.api"),e.devToolApiVersion??""]]}}function cN(r,e){switch(r){case"product":return Np(d("cli.out.common.productInfo"),Ch(e));case"sys":return lN(TR(e));case"metadata":return pN(e.metadataVersions);case"inspect":return Np(d("cli.out.common.sysInspectInfo"),sa(e,"sysInspectInfo"));case"jvm":return Np(d("cli.out.common.jvmInfo"),sa(e,"jvmInfo"));case"env":return Np(d("cli.out.common.systemEnvirInfo"),sa(e,"systemEnvirInfo"));default:return""}}function Np(r,e){return!e||Object.keys(e).length===0?"":[r,de({columns:[d("cli.out.header.field"),d("cli.out.header.value")],rows:Object.entries(e).sort(([t],[n])=>t.localeCompare(n)).map(([t,n])=>[t,yh(n)])})].join(`
|
|
81
|
+
`)}function lN(r){return!r||r.length===0?"":[d("cli.out.common.sysInfo"),de({columns:[d("cli.out.header.field"),d("cli.out.header.value")],rows:r.map(e=>[e.name,dN(e)])})].join(`
|
|
82
|
+
`)}function pN(r){return!r||Object.keys(r).length===0?"":[d("cli.out.common.metaVersions"),de({columns:[d("cli.out.header.metaType"),d("cli.out.header.latestVersion")],rows:Object.entries(r).sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>[e,t])})].join(`
|
|
83
|
+
`)}function dN(r){return r.name==="startTime"||r.name==="osTime"?uN(r.value):yh(r.value)}function uN(r){if(typeof r!="number")return yh(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 yh(r){return r==null?"":typeof r=="string"?r:typeof r=="number"||typeof r=="boolean"?String(r):JSON.stringify(r)}function mN(r,e){let t=r?.[e];return typeof t=="string"?t:void 0}function Ch(r){return"productInfo"in r?r.productInfo:{productVersion:r.version}}function TR(r){return"sysInfo"in r?r.sysInfo:void 0}function sa(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 Sh=class extends te{constructor(t=Oc){super();this.ping=t}toOptions(t){return{url:t.value("url")}}async executeCommand(t,n){let o=await this.resolveServerUrl(t,n.url);return await this.ping(o),t.output.result({server:o,reachable:!0},()=>d("cli.cmd.server.serverReachable",o)),0}},MR={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 Sh};D();var vh=class extends te{toOptions(e){return{url:e.value("url")}}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},()=>d("cli.cmd.server.cache.refresh.refreshed",n)),0}},xR={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 vh};D();Z();var IR=E(require("fs")),st=E(require("path"));F();$();var En=st.posix.join("sysdata","extensions");function FR(r){if(r.extensionName){let e=r.extensionName.trim();return hN(e)?{extensionRoot:Wp(r.workspaceRoot,e),extensionName:e}:void 0}if(r.path)return gN(r.workspaceRoot,r.path)}function Wp(r,e){return st.join(r,En,e)}async function kh(r){return ie(st.join(r,En))}async function fN(r){let e=st.join(r,En),t;try{t=await IR.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 DR(r){return fN(r)}function hN(r){return r.length>0&&r!=="."&&r!==".."&&!r.includes("/")&&!r.includes("\\")}function gN(r,e){let t=st.isAbsolute(e)?st.normalize(e):st.resolve(r,e),n=st.join(r,En),o=n+st.sep;if(t!==n&&!t.startsWith(o))return;let a=st.relative(n,t).split(st.sep)[0];if(!(!a||a===".."||a==="."))return{extensionRoot:st.join(n,a),extensionName:a}}function AR(r){return I({extensionPoint:r.extensionPoint,templateName:r.templateName,name:r.summary.name,desc:r.summary.desc,version:r.summary.version})}function OR(r,e){return{extensionName:r,extensionRoot:e.extensionRoot,packageJsonPath:e.packageJsonPath,extensionPoint:e.extensionPoint,templateName:e.templateName,template:yN(e.templateSummary)}}function _R(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(no),failures:r.failures.map(Ip),metadataVersionSuggestions:e.map(Fp)}}function LR(r){return r.length===0?d("cli.out.workspace.ext.extTemplates"):{columns:[d("cli.out.workspace.ext.extPoint"),d("cli.out.workspace.ext.template"),d("cli.out.header.version"),d("cli.out.header.description")],rows:r.map(e=>[e.extensionPoint,e.templateName,e.summary.version??"",e.summary.desc??""])}}function NR(r){return r.length===0?d("cli.out.workspace.ext.ext",En):{columns:[d("cli.out.header.extension")],rows:r.map(e=>[e])}}function WR(r,e){return d("cli.out.workspace.ext.createdExt",r,e.extensionRoot)}function UR(r,e){if(e.pushed.length===0&&e.rejected.length===0&&e.failures.length===0)return d("cli.out.workspace.ext.noLocalChanges",r);let t=[d("cli.out.workspace.ext.pushExtPushed",r,e.pushed.length,e.rejected.length,e.failures.length)];e.pushed.length>0&&(t.push(d("cli.out.workspace.ext.pushedFiles",e.pushed.length)),t.push(CN(e.pushed))),e.rejected.length>0&&(t.push(d("cli.out.workspace.ext.pushBlockedRemote",e.rejected.length)),t.push(oo(e.rejected))),e.failures.length>0&&(t.push(d("cli.out.workspace.ext.failed",e.failures.length)),t.push(SN(e.failures)));let n=e.metadataVersionSuggestions??[];return n.length>0&&(t.push(d("cli.out.workspace.ext.metaVersions",n.length)),t.push(vN(n))),t.join(`
|
|
84
|
+
`)}function yN(r){return I({name:r.name,desc:r.desc,version:r.version})}function CN(r){return de({columns:[d("cli.out.header.path")],rows:r.map(e=>[e])})}function SN(r){return de({columns:[d("cli.out.header.path"),d("cli.out.header.error")],rows:r.map(e=>[e.path,en(e.errorInfo)])})}function vN(r){return de({columns:[d("cli.out.header.path"),d("cli.out.workspace.ext.version"),d("cli.out.workspace.ext.targetVersion"),d("cli.out.workspace.ext.kind")],rows:r.map(e=>[e.path,e.currentVersion??"",e.targetVersion,Dp(e.kind)])})}Z();var qp=E(require("fs")),Or=E(require("path"));J();D();qr();F();_();$();var jR=E(require("path"));tt();J();var kN=T("workspace.extension-dev.package");async function VR(r,e){let t=jR.join(r,"package.json"),n=await Re(t);if(!n.trim())return kN.warn(`extension package.json is missing or empty: ${t}`),!1;let o=Qt(n,["name"],e);return o===n?!1:(await vt(t,o),!0)}var VN=vb(),BN=/^[a-z0-9]+(?:-[a-z0-9]+){2,}$/,qN=T("workspace.extension-dev.create"),$p=class{workspace;cachedClient;cachedOptions;constructor(e){this.workspace=e}async prepare(e=nt.INSTANCE){if(e.start(1,{message:d("workspace.extension.progress.templates")}),!await kh(this.workspace.root))throw new ut("err.extension.sysdataNotCloned",{extensionsDir:Or.join(this.workspace.root,En)});let n=await(await this.requireClient()).getExtensionTemplates(),o=Th(n);if(o.length===0)throw new ut("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(!BN.test(t))return{ok:!1,error:"invalidFormat"};let o=t.split("-")[1];return o!==e.extensionPoint?{ok:!1,error:"extensionPointMismatch",actualExtensionPoint:o}:await ie(Wp(this.workspace.root,t))?{ok:!1,error:"targetExists"}:{ok:!0}}async execute(e){let{extensionPoint:t,templateName:n,extensionName:o}=e,i=e.task??nt.INSTANCE;i.start(100,{message:d("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 kh(this.workspace.root))throw new ut("err.extension.sysdataNotCloned",{extensionsDir:Or.join(this.workspace.root,En)});let p=await this.requireOption(t,n),u=Wp(this.workspace.root,o);if(await ie(u))throw new Error(`target extension directory already exists: ${u}`);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 $N(m,u),await VR(u,o),c.step(1),await this.workspace.refreshSyncStatus(l),i.setMessage(d("workspace.extension.progress.create.done",o)),i.finish(),{extensionRoot:u,packageJsonPath:Or.join(u,"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 Th(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 $N(r,e){let n=new VN(r).getEntries();if(n.length===0)throw new Error("extension template zip is empty");await qp.promises.mkdir(e,{recursive:!0});try{let o=Or.resolve(e),i=o+Or.sep,a=[],s=new Set;for(let c of n){let l=c.entryName.replace(/\\/g,"/"),p=Un(l.endsWith("/")?l.slice(0,-1):l,"extension template entry"),u=Or.resolve(o,p);if(u!==o&&!u.startsWith(i))throw new Error(`extension template entry escapes target directory: ${l}`);if(l.endsWith("/")||c.isDirectory){s.add(u);continue}s.add(Or.dirname(u)),a.push({destination:u,entry:c})}await Promise.all(Array.from(s).map(c=>qp.promises.mkdir(c,{recursive:!0}))),await Promise.all(a.map(({destination:c,entry:l})=>qp.promises.writeFile(c,l.getData())))}catch(o){try{await sr(e)}catch(i){qN.debug(`cleanup partial extension directory failed: ${e}`,i)}throw o}}var Mh=class extends te{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=HN(Th(await o.getExtensionTemplates()),t.extensionPoint);return e.output.result(I({workspace:e.workspace?.root,server:n,extensionPoint:t.extensionPoint,templates:i.map(AR)}),()=>LR(i)),0}},kb={path:["server","extension","template","list"],domain:"server",spec:{name:"server extension template list",flags:[{name:"extension-point",takesValue:!0,valueHint:"point",param:{nonEmpty:!0}}],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 Mh};function HN(r,e){return e?r.filter(t=>t.extensionPoint===e):[...r]}F();_();_n();D();Z();$();var Hp=E(require("fs")),Xe=class extends te{async resolveServerFileTarget(e,t){return{serverUrl:await this.resolveServerUrl(e,t.url),remotePath:lC(t.path)}}createServerFileClient(e,t){return this.createServerApiClient(e,t.serverUrl)}};function dt(r,e={}){let[t,n]=r.positional,o=e.defaultPath;return t===void 0?(o===void 0&&wb(),{path:o}):n===void 0?Sr(t)?(o===void 0&&wb(),{url:t,path:o}):{path:t}:{url:t,path:n}}function wb(){throw new R("err.cli.missingInput",{inputId:"serverFilePath",sources:["<path>"]})}function zp(r){let e=Pe(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 Gp(r,e,t){if(e.kind==="stdin")return{source:"stdin",content:await t()};let n=He(r.cwd,e.file);if(!(await Ti(n)).isFile())throw new R("err.cli.invalidRegularFile",{inputId:"inputFile",source:n,path:n});return{source:"file",localFile:n,content:Hp.createReadStream(n)}}async function Pb(r,e){try{await Hp.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 Kp(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 Tn(r){return I({id:r.id,revision:r.revision,path:r.path,parentDir:r.parentDir,name:r.name,projectName:r.projectName,isFolder:r.isFolder,icon:r.icon,desc:r.desc,type:r.type,subFileType:r.subFileType,order:r.order,creator:r.creator,createTime:r.createTime,modifier:r.modifier,modifyTime:r.modifyTime,hidden:r.hidden,labels:r.labels,size:r.size,hash:r.hash,option:r.option,customOption:r.customOption})}function zN(r){return I({path:r.path,oldPath:r.oldPath,modifyTime:r.modifyTime,contentMutation:r.contentMutation,pathMutation:r.pathMutation,metaInfoChanged:r.metaInfoChanged,metaInfo:r.metaInfo?Tn(r.metaInfo):void 0,warnings:r.warnings})}function da(r,e,t,n){return I({workspace:r.workspace?.root,server:e,path:t.path,source:n?.source,localFile:n?.localFile,result:zN(t)})}async function ua(r,e,t){try{let n=await t();return GN(r,n),n}catch(n){let o=KN(n,r,e);if(!o)throw n;Rb(r,e,o)}}function GN(r,e){e.success||Rb(r,e.path,ss(e.errorInfo,{action:r,path:e.path}))}function Rb(r,e,t){let n=en(t)||d("cli.cmd.server.file.unknownServerFile"),o={action:r,remotePath:e,reason:n,errorInfo:t};throw JN(t)?new Kt("err.base.operationFailed",o,{cause:t}):new ut("err.base.operationFailed",o,{cause:t})}function KN(r,e,t){if(!(!(r instanceof nr)||!r.remoteError))return ss(On(r.remoteError),{action:e,path:t})}function JN(r){let e=kl(r);return e==="pull"||e==="rename"}function Jp(r){return r.length===0?d("cli.cmd.server.file.files"):de({columns:[d("cli.out.header.kind"),d("cli.out.header.type"),d("cli.out.header.revision"),d("cli.out.header.modified"),d("cli.out.file.size"),d("cli.out.header.path")],rows:r.map(e=>[e.isFolder?d("cli.out.file.folder"):d("cli.out.file.file"),rn(e.type),Ws(e.revision),xh(e.modifyTime),Ws(e.size),e.path])})}function Qp(r){return de({columns:[d("cli.out.header.field"),d("cli.out.header.value")],rows:QN(r)})}function ma(r,e){return d("cli.cmd.server.file.success",r,e.path)}function Ws(r){return r===void 0?"":String(r)}function rn(r){return r??""}function xh(r){return r===void 0?"":new Date(r).toISOString()}function QN(r){return[[d("cli.out.file.id"),r.id],[d("cli.out.file.revision"),Ws(r.revision)],[d("cli.out.file.path"),r.path],[d("cli.out.file.parentDir"),r.parentDir],[d("cli.out.file.name"),r.name],[d("cli.out.file.project"),rn(r.projectName)],[d("cli.out.file.kind"),r.isFolder?d("cli.out.file.folder"):d("cli.out.file.file")],[d("cli.out.file.icon"),rn(r.icon)],[d("cli.out.file.description"),rn(r.desc)],[d("cli.out.file.type"),rn(r.type)],[d("cli.out.file.subFileType"),rn(r.subFileType)],[d("cli.out.file.order"),Ws(r.order)],[d("cli.out.file.creator"),rn(r.creator)],[d("cli.out.file.createTime"),xh(r.createTime)],[d("cli.out.file.modifier"),rn(r.modifier)],[d("cli.out.file.modifyTime"),xh(r.modifyTime)],[d("cli.out.file.hidden"),YN(r.hidden)],[d("cli.out.file.labels"),rn(r.labels)],[d("cli.out.file.size"),Ws(r.size)],[d("cli.out.file.hash"),rn(r.hash)]].filter(([,e])=>e!=="")}function YN(r){return r===void 0?"":r?d("cli.out.value.yes"):d("cli.out.value.no")}_();var Ih=class extends Xe{constructor(t=Nt){super();this.readStdin=t}toOptions(t){return{...dt(t),source:zp(t)}}async executeCommand(t,n){let o=await this.resolveServerFileTarget(t,n),i=await this.createServerFileClient(t,o),a=await Gp(t,n.source,this.readStdin),s=await ua("Create",o.remotePath,()=>i.saveFile(o.remotePath,a.content,{expectedRevision:null}));return t.output.result(da(t,o.serverUrl,s,a),()=>ma("Create",s)),0}},bb={path:["server","file","create"],domain:"server",spec:{name:"server file create",flags:[{name:"file",takesValue:!0,valueHint:"local-file",param:{source:"file",type:"string",nonEmpty:!0,inputId:"inputFile"}},{name:"stdin",takesValue:!1,param:{source:"stdin",type:"string"}}],positionals:[{name:"url",role:"server-url"},{name:"path",param:{required:!0}}],inputGroups:[{name:"contentSource",mode:"exactlyOne",inputId:"contentSource",members:["--file","--stdin"]}],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 Ih};D();F();_();Z();$();var Eb=E(require("fs")),Tb=require("stream/promises"),Fh=class extends Xe{toOptions(e){return{...dt(e),revision:e.integer("revision"),upgradeContent:e.has("upgrade-content"),output:e.value("output"),force:e.has("force")}}async executeCommand(e,t){let n=await this.resolveServerFileTarget(e,t),o=He(e.cwd,t.output);await Pb(o,t.force);let a=await(await this.createServerFileClient(e,n)).getFileContentStream(n.remotePath,{revision:t.revision,upgradeContent:t.upgradeContent});try{await(0,Tb.pipeline)(a.stream,Eb.createWriteStream(o,{flags:t.force?"w":"wx"}))}catch(s){throw!t.force&&ec(s)?new R("err.cli.confirmationRequired",{reason:"outputOverwrite",flag:"--force",path:o},{cause:s}):s}return e.output.result(I({workspace:e.workspace?.root,server:n.serverUrl,path:n.remotePath,output:o,revision:a.revision,modifyTime:a.modifyTime}),()=>d("cli.cmd.server.file.download.downloaded",n.remotePath,o)),0}},Mb={path:["server","file","download"],domain:"server",spec:{name:"server file download",flags:[{name:"revision",takesValue:!0,valueHint:"n",param:{type:"integer",min:0}},{name:"upgrade-content",takesValue:!1},{name:"output",takesValue:!0,valueHint:"local-file",param:{required:!0,nonEmpty:!0,inputId:"outputFile"}},{name:"force",takesValue:!1}],positionals:[{name:"url",role:"server-url"},{name:"path",param:{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 Fh};D();Z();function Yp(r){return r.length===0?d("cli.out.workspace.file.hist.empty"):de({columns:[d("cli.out.header.revision"),d("cli.out.header.action"),d("cli.out.header.modified"),d("cli.out.header.modifier"),d("cli.out.header.path"),d("cli.out.header.message")],rows:r.map(e=>[XN(e.revision),e.action??"",ZN(e.modifyTime),e.modifierName??e.modifier??"",e.path,e.message??""])})}function Xp(r){return I({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 XN(r){return r===void 0?"":String(r)}function ZN(r){return r===void 0?"":new Date(r).toISOString()}Z();var Dh=class extends Xe{toOptions(e){return{...dt(e),limit:e.integer("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(I({workspace:e.workspace?.root,server:n.serverUrl,path:n.remotePath,summary:{histories:i.length},histories:i.map(Xp)}),()=>Yp(i)),0}},xb={path:["server","file","history"],domain:"server",spec:{name:"server file history",flags:[{name:"limit",takesValue:!0,valueHint:"n",param:{type:"integer",min:1}}],positionals:[{name:"url",role:"server-url"},{name:"path",param:{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 Dh};Z();var Ah=class extends Xe{toOptions(e){return dt(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(I({workspace:e.workspace?.root,server:n.serverUrl,path:n.remotePath,file:Tn(i)}),()=>Qp(i)),0}},Ib={path:["server","file","info"],domain:"server",spec:{name:"server file info",flags:[],positionals:[{name:"url",role:"server-url"},{name:"path",param:{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 Ah};Z();var Oh=class extends Xe{toOptions(e){return dt(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(I({workspace:e.workspace?.root,server:n.serverUrl,path:n.remotePath,summary:{files:i.length},files:i.map(Tn)}),()=>Jp(i)),0}},Fb={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 Oh};_();F();D();Ge();Z();var _h=class extends te{toOptions(e){return{...eW(e),outputUrl:e.value("url")}}async executeCommand(e,t){tW(t.id);let n=await this.resolveServerUrl(e,t.url),i=await(await this.createServerApiClient(e,n)).getFileById(t.id),a=hn(n,{path:i.path}),s=hn(n,{path:i.path,":edit":"true"});return e.output.result(rW(e,n,t.id,i,a,s),()=>nW(i,a,s,t.outputUrl)),0}},Db={path:["server","file","locate"],domain:"server",spec:{name:"server file locate",flags:[{name:"url",takesValue:!0,valueHint:"view|edit",description:"cli.cmd.server.file.locate.url",param:{choices:["view","edit"]}}],positionals:[{name:"url",role:"server-url"},{name:"id",param:{required:!0}}],usageArgs:"[<options>] [<url>] <id>",examples:["succapp --server=https://bi.example.com server file locate U5iZW6hsOXExZ9a8swkh3C","succapp server file locate https://bi.example.com U5iZW6hsOXExZ9a8swkh3C","succapp server file locate --url=view U5iZW6hsOXExZ9a8swkh3C"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new _h};function eW(r){let[e,t]=r.positional;if(e===void 0)throw new R("err.cli.missingArgument",{argument:"id"});if(t===void 0){if(Sr(e))throw new R("err.cli.missingArgument",{argument:"id"});return{id:e}}return{url:e,id:t}}function tW(r){if(!wv(r))throw new R("err.cli.invalidChoice",{input:"<id>",value:r,allowedValues:["metadata file id"]})}function rW(r,e,t,n,o,i){return I({workspace:r.workspace?.root,server:e,id:t,path:n.path,viewUrl:o,editUrl:i,file:Tn(n)})}function nW(r,e,t,n){return n==="view"?e:n==="edit"?t:[Qp(r),d("cli.cmd.server.file.locate.viewUrl",e),d("cli.cmd.server.file.locate.editUrl",t)].join(`
|
|
85
|
+
`)}D();Z();var Lh=class extends Xe{constructor(t=Mi){super();this.opener=t}toOptions(t){return{...dt(t),edit:t.has("edit")}}async executeCommand(t,n){let o=await this.resolveServerFileTarget(t,n),i=n.edit===!0,a=hn(o.serverUrl,{path:o.remotePath,...i?{":edit":"true"}:{}});return await this.opener(a,t.abortSignal),t.output.result(I({workspace:t.workspace?.root,server:o.serverUrl,path:o.remotePath,edit:i,url:a}),()=>oW(a,i)),0}},Ab={path:["server","file","open"],domain:"server",spec:{name:"server file open",flags:[{name:"edit",takesValue:!1}],positionals:[{name:"url",role:"server-url"},{name:"path",param:{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 Lh};function oW(r,e){return d(e?"cli.cmd.server.file.open.openedEdit":"cli.cmd.server.file.open.openedView",r)}_();var Nh=class extends Xe{toOptions(e){return{...dt(e),expectedRevision:e.integer("expected-revision"),force:e.has("force")}}async executeCommand(e,t){Kp(t.expectedRevision,t.force,"server file remove");let n=await this.resolveServerFileTarget(e,t),o=await this.createServerFileClient(e,n),i=await ua("Delete",n.remotePath,()=>o.deleteFile(n.remotePath,t.force?void 0:{expectedRevision:t.expectedRevision}));return e.output.result(da(e,n.serverUrl,i),()=>ma("Delete",i)),0}},Ob={path:["server","file","remove"],domain:"server",spec:{name:"server file remove",flags:[{name:"expected-revision",takesValue:!0,valueHint:"n",param:{type:"integer",min:0,inputId:"revisionOrForce"}},{name:"force",takesValue:!1,param:{inputId:"revisionOrForce"}}],positionals:[{name:"url",role:"server-url"},{name:"path",param:{required:!0}}],inputGroups:[{name:"revisionOrForce",mode:"exactlyOne",inputId:"revisionOrForce",members:["--expected-revision","--force"],sources:["--expected-revision=<revision>","--force"]}],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 Nh};_();F();Z();var Wh="path",Uh="name",jh="parent-dir",_b="project",Lb="type",Nb="sub-type",Wb="min-size",Zp="max-size",Ub="limit",jb="offset",Vb="include-folders",Vh=class extends te{toOptions(e){let t=iW(e),n=aW(e,t.query);return{url:t.url,request:n}}async executeCommand(e,t){let n=await this.resolveServerUrl(e,t.url),i=await(await this.createServerApiClient(e,n)).searchFiles(t.request);return e.output.result(I({workspace:e.workspace?.root,server:n,query:t.request,summary:I({files:i.length,limit:t.request.limit,offset:t.request.offset}),files:i.map(Tn)}),()=>Jp(i)),0}},Bb={path:["server","file","search"],domain:"server",spec:{name:"server file search",flags:[{name:Wh,takesValue:!0,valueHint:"glob"},{name:Uh,takesValue:!0,valueHint:"glob"},{name:jh,takesValue:!0,valueHint:"glob"},{name:_b,takesValue:!0,valueHint:"name"},{name:Lb,takesValue:!0,repeatable:!0,valueHint:"type",param:{list:{separator:","}}},{name:Nb,takesValue:!0,repeatable:!0,valueHint:"type",param:{list:{separator:","}}},{name:Wb,takesValue:!0,valueHint:"bytes",param:{type:"integer",min:0}},{name:Zp,takesValue:!0,valueHint:"bytes",param:{type:"integer",min:0}},{name:Ub,takesValue:!0,valueHint:"n",param:{type:"integer",min:0}},{name:jb,takesValue:!0,valueHint:"n",param:{type:"integer",min:0}},{name:Vb,takesValue:!1}],positionals:[{name:"url",role:"server-url"},{name:"query"}],usageArgs:"[<options>] [<url>] [<query>]",examples:["succapp --server=https://bi.example.com server file search sales","succapp server file search '/DEMO/data/**' --type=tbl --limit=20","succapp server file search --name='*.view'","succapp server file search https://bi.example.com '/DEMO/**' --json"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Vh};function iW(r){let[e,t]=r.positional;return e===void 0?{}:t===void 0?Sr(e)?{url:e}:{query:e}:{url:e,query:t}}function aW(r,e){let t={},n=Pe(r.value(Wh)),o=Pe(r.value(Uh)),i=Pe(r.value(jh));if(e!==void 0){if(n!==void 0||o!==void 0||i!==void 0)throw new R("err.cli.conflictingInputs",{inputs:["<query>",`--${Wh}`,`--${Uh}`,`--${jh}`]});t.query=e}t.path=n,t.name=o,t.parentDir=i,t.projectName=Pe(r.value(_b));let a=r.values(Lb),s=r.values(Nb);if(t.types=a.length===0?void 0:[...a],t.subTypes=s.length===0?void 0:[...s],t.minSize=r.integer(Wb),t.maxSize=r.integer(Zp),t.minSize!==void 0&&t.maxSize!==void 0&&t.maxSize<t.minSize)throw new R("err.cli.invalidNonNegativeIntegerRange",{input:`--${Zp}`,option:`--${Zp}`,value:String(t.maxSize),min:t.minSize,max:Number.MAX_SAFE_INTEGER});return t.limit=r.integer(Ub),t.offset=r.integer(jb),r.has(Vb)&&(t.includeFolders=!0),I(t)}Z();var Bh=class extends Xe{toOptions(e){return{...dt(e),revision:e.integer("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(I({workspace:e.workspace?.root,server:n.serverUrl,path:n.remotePath,revision:i.revision,modifyTime:i.modifyTime,size:i.buffer.length}),i.buffer),0}},qb={path:["server","file","show"],domain:"server",spec:{name:"server file show",flags:[{name:"revision",takesValue:!0,valueHint:"n",param:{type:"integer",min:0}},{name:"upgrade-content",takesValue:!1}],positionals:[{name:"url",role:"server-url"},{name:"path",param:{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 > a.view"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Bh};_();var qh=class extends Xe{constructor(t=Nt){super();this.readStdin=t}toOptions(t){return{...dt(t),source:zp(t),expectedRevision:t.integer("expected-revision"),force:t.has("force")}}async executeCommand(t,n){Kp(n.expectedRevision,n.force,"server file update");let o=await this.resolveServerFileTarget(t,n),i=await this.createServerFileClient(t,o),a=await Gp(t,n.source,this.readStdin),s=await ua("Put",o.remotePath,()=>i.saveFile(o.remotePath,a.content,n.force?void 0:{expectedRevision:n.expectedRevision}));return t.output.result(da(t,o.serverUrl,s,a),()=>ma("Put",s)),0}},$b={path:["server","file","update"],domain:"server",spec:{name:"server file update",flags:[{name:"file",takesValue:!0,valueHint:"local-file",param:{source:"file",type:"string",nonEmpty:!0,inputId:"inputFile"}},{name:"stdin",takesValue:!1,param:{source:"stdin",type:"string"}},{name:"expected-revision",takesValue:!0,valueHint:"n",param:{type:"integer",min:0,inputId:"revisionOrForce"}},{name:"force",takesValue:!1,param:{inputId:"revisionOrForce"}}],positionals:[{name:"url",role:"server-url"},{name:"path",param:{required:!0}}],inputGroups:[{name:"contentSource",mode:"exactlyOne",inputId:"contentSource",members:["--file","--stdin"]},{name:"revisionOrForce",mode:"exactlyOne",inputId:"revisionOrForce",members:["--expected-revision","--force"],sources:["--expected-revision=<revision>","--force"]}],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 qh};D();var $h=class extends te{toOptions(e){return{url:e.value("url")}}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(xp)},()=>sW(i)),0}},Hb={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 $h};function sW(r){return{columns:[d("cli.out.header.project"),d("cli.out.common.id"),d("cli.out.header.description")],rows:r.map(e=>[e.name,e.id??"",e.desc??""])}}_();F();D();var Hh=class extends te{toOptions(e){return{...cW(e),desc:Pe(e.value("desc"))}}validateOptions(e,t){!e.workspace&&!t.url&&!e.config.server&&Kb()}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:xp(i)},()=>lW(i)),0}},Gb={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 Hh};function cW(r){let[e,t]=r.positional;return e===void 0&&zb(),t===void 0?(Sr(e)&&zb(),{projectName:e}):(Sr(e)||Kb(),{url:e,projectName:t})}function zb(){throw new R("err.cli.missingInput",{inputId:"projectName",sources:["<project>"]})}function Kb(){throw new R("err.cli.missingInput",{inputId:"server",sources:["--server=<url>","<url> <project>"]})}function lW(r){return d("cli.cmd.server.proj.create.created",r.name)}D();F();_();Z();var zh="input",Gh="param",fa=class extends te{async executeCommand(e,t){let n=await this.resolveServerUrl(e),o=await this.createServerApiClient(e,n);return this.executeScriptCommand(e,n,o,t)}};function ed(r){return I({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 td(){return d("cli.cmd.server.script.done")}function Jb(r,e){let t=r.trim();if(!Xs(t))return r;try{return JSON.parse(t)}catch(n){throw new R("err.cli.invalidJsonObject",{inputId:"inputFile",source:e,context:{file:e}},{cause:n})}}_();$();var Kh=class extends fa{constructor(t=zn){super();this.readFileText=t}toOptions(t){return{scriptPath:t.value("file")}}async executeScriptCommand(t,n,o,i){let a=await this.readFileText(He(t.cwd,i.scriptPath)),s=await o.checkScript({script:a});return t.output.result({...ne(t,n),path:i.scriptPath,...ed(s)},()=>td()),0}},Qb={path:["server","script","check"],domain:"server",spec:{name:"server script check",flags:[],positionals:[{name:"file",param:{required:!0,source:"file",type:"string",nonEmpty:!0,inputId:"inputFile"}}],usageArgs:"[<options>] <file>",examples:["succapp server script check ./scripts/job.js"]},workspaceTarget:"optional",serverTarget:"required",createExecutor:()=>new Kh};_();Z();$();var Jh=class extends fa{constructor(t=zn){super();this.readFileText=t}toOptions(t){return{scriptPath:t.value("file"),inputFile:t.value(zh),params:uC(t.values(Gh))}}async executeScriptCommand(t,n,o,i){let a=await this.readFileText(He(t.cwd,i.scriptPath)),s=i.inputFile?Jb(await this.readFileText(He(t.cwd,i.inputFile)),i.inputFile):void 0,c=mC(i.params),l=await o.executeScript({script:a,args:I({input:s,params:c})});return t.output.result({...ne(t,n),path:i.scriptPath,params:c,...ed(l)},()=>td()),0}},Yb={path:["server","script","exec"],domain:"server",spec:{name:"server script exec",flags:[{name:zh,takesValue:!0,valueHint:"file",param:{source:"file",type:"string",nonEmpty:!0,inputId:"inputFile"}},{name:Gh,takesValue:!0,repeatable:!0,valueHint:"key=value"}],positionals:[{name:"file",param:{required:!0,source:"file",type:"string",nonEmpty:!0,inputId:"inputFile"}}],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 Jh};F();_();D();Z();$();var tE=E(require("fs")),ha="key",Xo="set",Zo="file",ei="stdin",rd="unset",Qh="expected-revision",pW="system";function nd(r,e={}){let[t,n]=r.positional,o=e.requireTarget===!0;return t===void 0?(o&&Zb(),{}):n===void 0?Sr(t)?(o&&Zb(t),{url:t}):{target:Xb(t)}:{url:t,target:Xb(n)}}function Xb(r){if(r!==pW)return r}function Zb(r){throw new R("err.cli.missingInput",{inputId:"settingsTarget",sources:["<target>"],...r!==void 0?{context:{server:r}}:{}})}function rE(r){let e=r.value(Xo),t=r.value(Zo),n=r.has(ei),o=[];if(e&&o.push(`--${Xo}=<json>`),t&&o.push(`--${Zo}=<local-file>`),n&&o.push(`--${ei}`),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 nE(r){return r.values(ha)}function oE(r){return r.value(ha)}function iE(r){return r.values(rd)}async function aE(r,e,t,n){if(!e&&t.length===0)throw new R("err.cli.missingInput",{inputId:"settingsPatch",sources:[`--${Xo}=<json>`,`--${Zo}=<local-file>`,`--${ei}`,`--${rd}=<key>`]});let i={...e?await dW(r,e,n):{}};for(let a of t)i[a]=null;return i}async function dW(r,e,t){if(e.kind==="inline"){let a=`--${Xo}`;return eE(e.json,a,a)}if(e.kind==="stdin"){let a=`--${ei}`;return eE(await t(),a,a)}let n=He(r.cwd,e.file);if(!(await Ti(n)).isFile())throw new R("err.cli.invalidRegularFile",{inputId:"inputFile",source:n,path:n});let i=await tE.promises.readFile(n,"utf-8");return uW(i,n)}function eE(r,e,t){let n=sE(r);if(n===void 0)throw new R("err.cli.invalidJsonObject",{input:e,source:t});return n}function uW(r,e){let t=sE(r);if(t===void 0)throw new R("err.cli.invalidJsonObject",{input:`--${Zo}`,source:e});return t}function sE(r){let e=r.trim();if(!e)return;let t;try{t=JSON.parse(e)}catch{return}return W(t)?t:void 0}function cE(r){return r??d("cli.cmd.server.settings.target.system")}function lE(r,e){return`${d("cli.cmd.server.settings.get.header",cE(r))}
|
|
86
|
+
${dE(e)}`}function pE(r,e){let t=Object.keys(e),n=t.length>0?t.join(", "):d("cli.cmd.server.settings.set.noKeys");return`${d("cli.cmd.server.settings.set.success",cE(r),n)}
|
|
87
|
+
${dE(e)}`}function dE(r){return JSON.stringify(r,null,2)}function uE(r,e,t,n){return{settings:t,...r!==void 0?{path:r}:{},...e!==void 0?{key:e}:{},...n!==void 0?{expectedRevision:n}:{}}}var mE=Nt;var Yh=class extends te{toOptions(e){return{...nd(e),keys:nE(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},()=>lE(t.target,a)),0}},fE={path:["server","settings","get"],domain:"server",spec:{name:"server settings get",flags:[{name:ha,takesValue:!0,repeatable:!0,valueHint:"key",param:{nonEmpty:!0}}],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 Yh};_();var Xh=class extends te{constructor(t=mE){super();this.readStdin=t}toOptions(t){return{...nd(t,{requireTarget:!0}),source:rE(t),unsetKeys:iE(t),key:oE(t),expectedRevision:t.integer(Qh)}}async executeCommand(t,n){let o=await aE(t,n.source,n.unsetKeys,this.readStdin),i=await this.resolveServerUrl(t,n.url),a=await this.createServerApiClient(t,i),s=uE(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},()=>pE(n.target,l)),0}},hE={path:["server","settings","set"],domain:"server",spec:{name:"server settings set",flags:[{name:Xo,takesValue:!0,valueHint:"json",param:{source:"value",nonEmpty:!0,inputId:"settingsPatch"}},{name:Zo,takesValue:!0,valueHint:"local-file",param:{source:"file",nonEmpty:!0,inputId:"inputFile"}},{name:ei,takesValue:!1,param:{source:"stdin",inputId:"settingsPatch"}},{name:rd,takesValue:!0,repeatable:!0,valueHint:"key",param:{nonEmpty:!0}},{name:ha,takesValue:!0,valueHint:"key",param:{nonEmpty:!0}},{name:Qh,takesValue:!0,valueHint:"n",param:{type:"integer",min:0}}],positionals:[{name:"url",role:"server-url"},{name:"target",param:{required:!0}}],inputGroups:[{name:"settingsSource",mode:"atMostOne",inputId:"settingsPatch",members:[`--${Xo}`,`--${Zo}`,`--${ei}`]}],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 Xh};var gE=[MR,bR,Hb,Gb,Fb,Bb,Db,Ib,qb,Mb,Ab,xb,bb,$b,Ob,Yb,Qb,xR,kb,fE,hE];D();F();_();$();var SE=E(require("path"));var Zh=class extends te{toOptions(e){return{scopes:gW(e.values("scope")),force:e.has("force")}}async executeCommand(e,t){let n=SE.resolve(e.cwd,e.config.workspace??".");await Sc(n);let o=Se("server"),i=e.config.server?wr(e.config.server,{input:o,option:o,flag:"server"}):void 0,a=e.workspace===void 0,s=e.workspace??ea({root:n,eventBus:e.eventBus,lockWait:e.config.lockTimeout});try{let c=await this.initializeWorkspace(s,e,i,t);return e.output.result({...c},()=>mW(c)),0}finally{a&&s.dispose()}}async initializeWorkspace(e,t,n,o){n&&(await this.validateExplicitServerAgainstExistingConfig(e,n),await this.verifyExplicitServer(t,e,n));let i=o.scopes,a=yW(i),s=await e.runMaintenance({taskIds:a,explicitTaskIds:a,dryRun:!1,server:n,taskOptions:{refreshServerSupport:!0,agentDocsForce:o.force},task:t.task});this.throwBlockedConfigIssue(s,e,n),await e.config.ensureLoaded();let c=s.issues.find(l=>l.taskId==="workspace-config");return{workspace:e.root,configPath:e.config.path,initialized:c?.execution?.status==="applied",activeServer:e.config.get()?.activeServerUrl||void 0,supportFiles:fW(s),scopes:i}}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 vW(o,t,n)}async validateExplicitServerAgainstExistingConfig(e,t){await e.config.ensureLoaded();let n=e.config.get()?.activeServerUrl||void 0;if(!n||Je(t,n))return;let o=Se("server");throw new R("err.cli.serverMismatch",{input:o,option:o,value:t,expected:n,context:{workspace:e.root,target:t,active:n}})}async verifyExplicitServer(e,t,n){let o=new zr(n,{workspaceRoot:t.root});await o.verify(),await o.getServerInfo()}},vE={path:["workspace","init"],domain:"workspace",spec:{name:"workspace init",flags:[{name:"server",takesValue:!0,valueHint:"url"},{name:"scope",takesValue:!0,repeatable:!0,valueHint:"scope",param:{choices:Object.keys(Dm),list:{separator:",",empty:"error",dedupe:!0}}},{name:"force",takesValue:!1}],positionals:[],usageArgs:"[<options>]",examples:["succapp workspace init","succapp -C /path/to/workspace workspace init --server=http://localhost:8180/bi","succapp workspace init --scope base,dev","succapp workspace init --scope agent-docs","succapp workspace init --scope agent-docs --force","succapp workspace init --server=https://bi.example.com --json"]},workspaceTarget:"optional",allowUninitializedWorkspaceTarget:!0,serverTarget:"none",lockUsage:"workspace-write",createExecutor:()=>new Zh};function mW(r){let e=r.initialized?d("cli.cmd.workspace.init.initWorkspace",r.workspace):d("cli.cmd.workspace.init.workspaceInit",r.workspace),t=r.activeServer?`
|
|
88
|
+
${d("cli.cmd.workspace.init.active",r.activeServer)}`:"",n=`
|
|
89
|
+
${d("cli.cmd.workspace.init.supportFiles",r.supportFiles.updatedCount,r.supportFiles.skipped.length)}`,o=r.supportFiles.agentDocs?`
|
|
90
|
+
${SW(r.supportFiles.agentDocs)}`:"",i=r.activeServer?"":`
|
|
91
|
+
${d("cli.cmd.workspace.init.noActiveServer")}
|
|
92
|
+
${d("cli.cmd.workspace.init.nextConfigureServer")}`;return`${e}${t}${n}${o}${i}`}function fW(r){let e=r.issues.filter(o=>o.taskId!=="workspace-config"&&o.taskId!=="succapp-docs-skill"),t=e.filter(o=>o.execution?.status==="applied").length,n=e.filter(o=>o.execution?.status==="skipped").map(o=>({item:o.taskId,reason:hW(o),localPaths:o.localPaths}));return{updated:t>0,updatedCount:t,skipped:n,agentDocs:CW(r)}}function hW(r){let e=r.execution?.properties?.skipCause??r.properties?.skipCause;return typeof e=="string"?e:"skipped"}function gW(r){if(r.length===0)return["all"];let e=r;return e.includes("all")?["all"]:e}function yW(r){let e=[];for(let t of r)for(let n of Dm[t])e.includes(n)||e.push(n);return e}function CW(r){let e=r.issues.find(o=>o.taskId==="succapp-docs-skill");if(!e)return;let t=e.execution?.properties??e.properties??{};return{status:(typeof t.skipCause=="string"?t.skipCause:void 0)==="agent-docs-unavailable"?"unavailable":e.execution?.status==="applied"?"updated":"up-to-date",docSet:CE(t,"docSet"),generatedAt:CE(t,"generatedAt"),total:ti(t,"total"),added:ti(t,"added"),changed:ti(t,"changed"),removed:ti(t,"removed"),skipped:ti(t,"skipped"),unavailable:ti(t,"unavailable"),resourcesUnavailable:ti(t,"resourcesUnavailable")}}function SW(r){if(r.status==="unavailable")return d("cli.cmd.workspace.init.agentDocsUnavailable");let e=d("cli.cmd.workspace.init.agentDocsSummary",r.total??0,r.added??0,r.changed??0,r.removed??0,r.skipped??0);return(r.resourcesUnavailable??0)>0?`${yE(e,r)}
|
|
93
|
+
${d("cli.cmd.workspace.init.agentDocsResourceSkipped",r.resourcesUnavailable??0)}`:yE(e,r)}function yE(r,e){return(e.unavailable??0)>0?`${r}
|
|
94
|
+
${d("cli.cmd.workspace.init.agentDocsFileSkipped",e.unavailable??0)}`:r}function CE(r,e){let t=r[e];return typeof t=="string"?t:void 0}function ti(r,e){let t=r[e];return typeof t=="number"?t:void 0}function vW(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=Se("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||d("cli.out.value.none"),context:{workspace:e.root,target:t??"",active:o}})}var Ee=class extends fe{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 Gr(t,e):await e.config.ensureLoaded()}};D();var eg=class extends Ee{toOptions(e){return{paths:e.values("path"),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(no),oldFiles:i.oldFiles.map(bn)},()=>kW(i)),i.conflicts.length>0?6:0}},wE={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 eg};function kW(r){if(r.updated.length===0&&r.deleted.length===0&&r.conflicts.length===0)return kE([d("cli.cmd.workspace.pull.upDate")],r.oldFiles);let e=[d("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(wW(r)),r.conflicts.length>0&&(e.push(d("cli.cmd.workspace.pull.conflicts",r.conflicts.length)),e.push(oo(r.conflicts))),kE(e,r.oldFiles)}function wW(r){return de({columns:[d("cli.out.header.type"),d("cli.out.header.remote")],rows:[...r.updated.map(e=>[d("cli.out.value.updated"),e]),...r.deleted.map(e=>[d("cli.out.value.deleted"),e])]})}function kE(r,e){return e.length>0&&(r.push(d("cli.cmd.workspace.pull.oldMeta",e.length)),r.push(Is(e))),r.join(`
|
|
95
|
+
`)}D();var tg=class extends Ee{toOptions(e){return{paths:e.values("path"),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=bW(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(no),failures:i.failures.map(Ip),metadataVersionSuggestions:(i.metadataVersionSuggestions??[]).map(Fp)},()=>RW(i,a)),PW(i)}},PE={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 tg};function PW(r){return r.rejected.length>0?6:r.failures.length>0?1:0}function RW(r,e){if(r.pushed.length===0&&r.rejected.length===0&&r.failures.length===0)return d("cli.cmd.workspace.push.noLocalChanges");let t=[d("cli.cmd.workspace.push.pushResultPushed",r.pushed.length,r.rejected.length,r.failures.length)];r.pushed.length>0&&(t.push(d("cli.cmd.workspace.push.pushedFiles",r.pushed.length)),t.push(EW(r.pushed))),r.rejected.length>0&&(t.push(d("cli.cmd.workspace.push.pushBlockedRemote",r.rejected.length)),t.push(oo(r.rejected))),r.failures.length>0&&(t.push(d("cli.cmd.workspace.push.failed",r.failures.length)),t.push(TW(r.failures)));let n=r.metadataVersionSuggestions??[];return n.length>0&&(t.push(d("cli.cmd.workspace.push.metaVersions",e.older,e.newer)),t.push(MW(n))),t.join(`
|
|
96
|
+
`)}function bW(r){let e=0,t=0;for(let n of r)n.kind==="newer"?t++:e++;return{older:e,newer:t}}function EW(r){return de({columns:[d("cli.out.header.path")],rows:r.map(e=>[e])})}function TW(r){return de({columns:[d("cli.out.header.path"),d("cli.out.header.error")],rows:r.map(e=>[e.path,en(e.errorInfo)])})}function MW(r){return de({columns:[d("cli.out.header.path"),d("cli.cmd.workspace.push.version"),d("cli.cmd.workspace.push.targetVersion"),d("cli.cmd.workspace.push.kind")],rows:r.map(e=>[e.path,e.currentVersion??"",e.targetVersion,Dp(e.kind)])})}_();F();D();var rg=class extends Ee{toOptions(e){return{paths:e.values("path"),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},()=>xW(i)),0}},bE={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 rg};function xW(r){if(r.updated.length===0&&r.deleted.length===0)return d("cli.cmd.workspace.discard.noLocalChanges");let e=[d("cli.cmd.workspace.discard.result",r.updated.length,r.deleted.length)];return r.updated.length>0&&(e.push(d("cli.cmd.workspace.discard.restoredFiles",r.updated.length)),e.push(RE(r.updated))),r.deleted.length>0&&(e.push(d("cli.cmd.workspace.discard.deletedFiles",r.deleted.length)),e.push(RE(r.deleted))),e.join(`
|
|
97
|
+
`)}function RE(r){return de({columns:[d("cli.out.header.path")],rows:r.map(e=>[e])})}D();F();_();Z();var EE=["sync-baseline","workspace-config","workspace-settings","workspace-gitignore","workspace-agent-files","typescript-support","json-schema-support"],IW=["workspace-support"],ig=[...EE,...IW];function TE(r){return r.flatMap(e=>{if(e==="workspace-support")return[...Nl];if(EE.includes(e))return[e];throw new R("err.cli.invalidChoice",{input:"--only",option:"--only",value:e,allowedValues:ig})})}function ME(r){return I({checks:r.checks.length>0?r.checks:void 0,dryRun:r.dryRun?!0:void 0})}function ri(r){let e=new Map;for(let t of r){let n=AE(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:FW(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 xE(r){let e=fo(r),t=e.filter(o=>o.repairable).length,n=ri(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:od(r).length,byCode:n},issues:ri(e).map(o=>({code:o.code,repairable:o.repairable,repairableCount:o.repairableCount,unrepairableCount:o.unrepairableCount,remotePaths:o.remotePaths,localPaths:o.localPaths})),skipped:od(r).map(_E)}}function IE(r){let e=fo(r),t=OE(r),n=id(r),o=ri(e),i=ri(t),a=ri(n);return{workspace:r.workspaceRootPath,server:r.serverUrl??"",dryRun:!1,summary:{issues:e.length,repaired:t.length,unresolved:n.length,skipped:od(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:od(r).map(_E)}}function FE(r){let e=fo(r);if(e.length===0)return d("cli.cmd.workspace.repair.dryRunClean");let t=e.filter(o=>o.repairable).length,n=[d("cli.cmd.workspace.repair.dryRunIssue",e.length,t,e.length-t)];return n.push(...ng(e)),n.push(...og(e)),n.join(`
|
|
98
|
+
`)}function DE(r){let e=fo(r),t=OE(r),n=id(r);if(e.length===0)return d("cli.cmd.workspace.repair.clean");let o=[d("cli.cmd.workspace.repair.repaired",t.length,n.length)];return t.length>0&&(o.push(""),o.push(d("cli.cmd.workspace.repair.repairedIssues")),o.push(...ng(t)),o.push(...og(t))),n.length>0&&(o.push(""),o.push(d("cli.cmd.workspace.repair.unresolved")),o.push(...ng(n)),o.push(...og(n))),o.join(`
|
|
99
|
+
`)}function ng(r){let e=ri(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 og(r){if(r.length===0)return[];let e=ri(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 FW(r){return d(r.code)}function AE(r){if(!r)return"-";let e=r.lastIndexOf(".");return e>=0?r.slice(e+1):r}function fo(r){return r.issues.filter(e=>e.execution?.status!=="skipped")}function od(r){return r.issues.filter(e=>e.execution?.status==="skipped")}function OE(r){return fo(r).filter(e=>e.execution?.status==="applied")}function id(r){return fo(r).filter(e=>e.execution?.status==="blocked"||e.execution?.status==="failed")}function _E(r){let e=r.execution?.properties?.skipCause??r.properties?.skipCause;return I({check:r.taskId,code:AE(r.code),reason:typeof e=="string"?e:void 0,remotePaths:r.remotePaths,localPaths:r.localPaths})}var ag=class extends fe{toOptions(e){return{checks:TE(e.values("only")),dryRun:e.has("dry-run")}}async executeWorkspaceCommand(e,t,n){let o=await e.createSyncService().repairWorkspace({...ME(n),task:t.task});return n.dryRun?(t.output.result(xE(o),()=>FE(o)),fo(o).length>0?1:0):(t.output.result(IE(o),()=>DE(o)),id(o).length>0?1:0)}},LE={path:["workspace","repair"],domain:"workspace",spec:{name:"workspace repair",flags:[{name:"only",takesValue:!0,repeatable:!0,valueHint:"item",param:{choices:ig}},{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 ag};D();_();var sg=class extends Ee{toOptions(e){return{paths:e.values("path"),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=DW(i);for(let s of i.warnings??[])n.output.warning(s.errorCode==="err.login.notlogin"?d("cli.cmd.workspace.status.remoteAuthRequired"):s.errorCode);return n.output.result({workspace:e.root,server:e.activeServerUrl,summary:a,changes:i.changes.map(no),...i.warnings?.length?{warnings:i.warnings.map(s=>({errorCode:s.errorCode,...s.properties?{properties:s.properties}:{}}))}:{}},()=>AW(a,i.changes)),0}},NE={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 sg};function DW(r){return{changes:r.changes.length,local:r.localChanges.length,remote:r.remoteChanges.length,conflicts:r.conflicts.length}}function AW(r,e){let t=OW(r);return e.length===0?`${t}
|
|
100
|
+
${d("cli.out.common.changes")}`:`${t}
|
|
101
|
+
${oo(e)}`}function OW(r){return d("cli.out.common.changesLocalRemote",r.changes,r.local,r.remote,r.conflicts)}D();var WE="1";function UE(r,e={}){let t=e.targetVersion??WE;return{workspaceRootPath:r.root,currentVersion:WE,targetVersion:t,dryRun:e.dryRun===!0,hasActions:!1,actions:[],reason:"no-workspace-migrations"}}var cg=class extends fe{toOptions(e){return{targetVersion:e.value("target-version"),dryRun:e.has("dry-run")}}async executeWorkspaceCommand(e,t,n){let o=UE(e,n);return t.output.result(_W(o),()=>LW(o)),0}},jE={path:["workspace","upgrade"],domain:"workspace",spec:{name:"workspace upgrade",flags:[{name:"target-version",takesValue:!0,valueHint:"version",param:{nonEmpty:!0}},{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 cg};function _W(r){return{workspace:r.workspaceRootPath,currentVersion:r.currentVersion,targetVersion:r.targetVersion,dryRun:r.dryRun,hasActions:r.hasActions,actions:r.actions,reason:r.reason}}function LW(r){return r.hasActions?d("cli.cmd.workspace.upgrade.actions",r.actions.length,r.currentVersion,r.targetVersion):d("cli.cmd.workspace.upgrade.noActions",r.currentVersion,r.targetVersion)}D();Z();function VE(r){return{workspace:r.workspaceRootPath,summary:{entries:r.entries.length},entries:r.entries.map(lg)}}function BE(r){return{workspace:r.workspaceRootPath,summary:{cleared:r.cleared.length,remaining:r.remaining.length},cleared:r.cleared.map(lg),remaining:r.remaining.map(lg)}}function qE(r){return{columns:[d("cli.out.header.path"),d("cli.out.file.size"),d("cli.out.header.modified"),d("cli.cmd.workspace.backup.backupPath")],rows:r.map(e=>[e.path,e.size===void 0?"":String(e.size),e.mtime??"",e.backupPath])}}function $E(r){return d("cli.cmd.workspace.backup.cleared",r.cleared.length,r.remaining.length)}function lg(r){return I({path:r.path,backupPath:r.backupPath,size:r.size,mtime:r.mtime})}var pg=class extends fe{toOptions(e){return{paths:e.values("path")}}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(BE(o),()=>$E(o)),0}},HE={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 pg};var dg=class extends fe{toOptions(e){return{paths:e.values("path")}}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(VE(o),()=>qE(o.entries)),0}},zE={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 dg};F();_();function GE(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 KE(r){return r.rejected.length>0?6:r.failures.length>0?1:0}F();_();var ug=class extends fe{toOptions(e){return{extensionPoint:e.value("extension-point"),templateName:e.value("template"),extensionName:e.value("name")}}async executeWorkspaceCommand(e,t,n){await Gr(t,e);let o=new $p(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 GE(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,...OR(n.extensionName,s)},()=>WR(n.extensionName,s)),0}},JE={path:["workspace","extension","create"],domain:"workspace",spec:{name:"workspace extension create",flags:[],positionals:[{name:"extension-point",param:{required:!0}},{name:"template",param:{required:!0}},{name:"name",param:{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 ug};var mg=class extends fe{async executeWorkspaceCommand(e,t){let n=await DR(e.root);return t.output.result({workspace:e.root,extensions:n},()=>NR(n)),0}},QE={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 mg};F();_();F();_();$();var ad=class{workspace;cachedService;constructor(e){this.workspace=e}async resolveTarget(e){let t=FR({workspaceRoot:this.workspace.root,path:e.path,extensionName:e.extensionName});if(!t)throw new R("err.extension.rootUnresolved",{reason:NW(e)});if(!await ie(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 NW(r){return r.extensionName!==void 0?"invalidName":r.path!==void 0?"invalidPath":"missingInput"}var fg=class extends fe{toOptions(e){return{extensionName:e.value("name"),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 Gr(t,e);let o=new ad(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,..._R(a)},()=>UR(i.extensionName,a)),KE(a)}},YE={path:["workspace","extension","push"],domain:"workspace",spec:{name:"workspace extension push",flags:[{name:"path",takesValue:!0,valueHint:"path",param:{nonEmpty:!0,inputId:"extensionNameOrPath"}},{name:"force",alias:"f",takesValue:!1}],positionals:[{name:"name",param:{nonEmpty:!0,inputId:"extensionNameOrPath"}}],inputGroups:[{name:"extensionTarget",mode:"exactlyOne",inputId:"extensionNameOrPath",members:["<name>","--path"],sources:["<extension>","--path=<path>"]}],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 fg};var XE=E(require("fs"));async function ga(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:hn(t.serverUrl,{path:t.remotePath}),editUrl:hn(t.serverUrl,{path:t.remotePath,":edit":"true"})}}D();var hg=class extends fe{toOptions(e){return{paths:e.values("path")}}async executeWorkspaceCommand(e,t,n){await Gr(t,e);let o=[];for(let a of n.paths)o.push(await WW(e,a));let i=o.filter(a=>!a.success);return t.output.result({workspace:e.root,server:e.activeServerUrl,summary:{files:o.length,passed:o.length-i.length,failed:i.length},items:o},()=>jW(o)),i.length>0?1:0}},ZE={path:["workspace","file","compile"],domain:"workspace",spec:{name:"workspace file compile",flags:[],positionals:[{name:"path",param:{required:!0},repeatable:!0}],usageArgs:"[<options>] [--] <path>...",examples:["succapp workspace file compile demo/views/sales.dash","succapp workspace file compile /DEMO/views/sales.dash --json","succapp workspace file compile demo/views/sales.dash demo/data/sales.tbl"]},workspaceTarget:"required",serverTarget:"required",createExecutor:()=>new hg};async function WW(r,e){let t,n;try{let o=await ga(r,{path:e});t=o.remotePath,n=o.localPath;let i=await XE.promises.readFile(n,"utf-8"),s=await(await r.requireServerClient(o.serverUrl)).compileFileContent({path:t,content:i});return UW(e,n,s)}catch(o){return{path:e,remotePath:t,localPath:n,success:!1,errorInfo:o}}}function UW(r,e,t){return{path:r,remotePath:t.path,localPath:e,type:t.type,success:t.success,changed:t.changed,originalVersion:t.originalVersion,upgradedVersion:t.upgradedVersion,compiler:t.compiler,errorInfo:t.errorInfo}}function jW(r){let e=r.filter(n=>!n.success),t=[d("cli.cmd.workspace.file.compile.result",r.length,r.length-e.length,e.length)];return e.length>0&&(t.push(d("cli.cmd.workspace.file.compile.failed",e.length)),t.push(VW(e))),t.join(`
|
|
102
|
+
`)}function VW(r){return de({columns:[d("cli.out.header.remote"),d("cli.cmd.workspace.file.compile.compiler"),d("cli.out.header.error")],rows:r.map(e=>[e.remotePath??e.path,e.compiler??"",en(e.errorInfo)])})}var gg=class extends Ee{toOptions(e){let t=e.value("source");return{paths:e.values("path"),source:t??"server"}}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(qW)},()=>BW(i)),0}},eT={path:["workspace","file","diff"],domain:"workspace",spec:{name:"workspace file diff",flags:[{name:"source",takesValue:!0,valueHint:"server",param:{choices:["server"]}}],positionals:[{name:"path",param:{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 gg};function BW(r){return r.items.map(e=>e.patch).filter(Boolean).join(`
|
|
103
|
+
`)}function qW(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 yg=class extends Ee{toOptions(e){return{path:e.value("path"),limit:e.integer("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(Xp)},()=>Yp(i.histories)),0}},tT={path:["workspace","file","history"],domain:"workspace",spec:{name:"workspace file history",flags:[{name:"limit",takesValue:!0,valueHint:"n",param:{type:"integer",min:1}}],positionals:[{name:"path",param:{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 yg};_();F();D();var Cg=class extends Ee{constructor(t=Mi){super();this.opener=t}toOptions(t){return{path:t.value("path"),edit:t.has("edit"),force:t.has("force")}}async executeSyncCommand(t,n,o,i){let a=await ga(t,{path:i.path});await HW(a.localPath);let s=await zW(n,o,a.remotePath);if(s&&!i.force)throw new R("err.cli.confirmationRequired",{reason:"openLocalChanged",flag:"--force",path:a.remotePath});s&&o.output.warning(d("cli.cmd.workspace.file.open.localChangedForce",a.remotePath));let c=i.edit===!0,l=c?a.editUrl:a.viewUrl;return await this.opener(l,o.abortSignal),o.output.result({workspace:t.root,server:a.serverUrl,path:a.path,remotePath:a.remotePath,edit:c,force:i.force,localChanged:!!s,...s?{warnings:[{code:"localChanged",remotePath:s.remotePath,type:s.type}]}:{},url:l},()=>$W(l,c)),0}},rT={path:["workspace","file","open"],domain:"workspace",spec:{name:"workspace file open",flags:[{name:"edit",takesValue:!1},{name:"force",takesValue:!1}],positionals:[{name:"path",param:{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 --force demo/views/sales.view","succapp workspace file open demo/views/sales.view --json"]},workspaceTarget:"required",serverTarget:"required",createExecutor:()=>new Cg};function $W(r,e){return d(e?"cli.cmd.workspace.file.open.openedEdit":"cli.cmd.workspace.file.open.openedView",r)}async function HW(r){if(!(await Ti(r)).isFile())throw new R("err.cli.invalidRegularFile",{inputId:"inputFile",source:r,path:r})}async function zW(r,e,t){return(await r.status({refreshAll:!0,scope:"local",paths:[t],task:e.task})).localChanges.find(o=>o.remotePath===t)}D();var Sg=class extends fe{toOptions(e){return{path:e.value("path"),url:e.value("url")}}async executeWorkspaceCommand(e,t,n){await Gr(t,e);let o=await ga(e,{path:n.path});return t.output.result(GW(e,o),()=>KW(o,n.url)),0}},nT={path:["workspace","file","resolve"],domain:"workspace",spec:{name:"workspace file resolve",flags:[{name:"url",takesValue:!0,valueHint:"view|edit",param:{choices:["view","edit"]}}],positionals:[{name:"path",param:{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 Sg};function GW(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 KW(r,e){return e==="view"?r.viewUrl:e==="edit"?r.editUrl:[d("cli.cmd.workspace.file.resolve.path",r.path),d("cli.cmd.workspace.file.resolve.localPath",r.localPath),d("cli.cmd.workspace.file.resolve.remote",r.remotePath),d("cli.cmd.workspace.file.resolve.viewUrl",r.viewUrl),d("cli.cmd.workspace.file.resolve.editUrl",r.editUrl)].join(`
|
|
104
|
+
`)}F();_();var vg=class extends Ee{toOptions(e){let t=e.value("source");return{path:e.value("path"),source:t??"server",revision:e.integer("revision")}}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}},oT={path:["workspace","file","show"],domain:"workspace",spec:{name:"workspace file show",flags:[{name:"source",takesValue:!0,valueHint:"mirror|server",param:{choices:["mirror","server"]}},{name:"revision",takesValue:!0,valueHint:"n",param:{type:"integer",min:0}}],positionals:[{name:"path",param:{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 vg};D();var kg=class extends Ee{toOptions(e){return{paths:e.values("path"),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(bn),changed:i.changed.map(bn),skipped:i.skipped.map(bn),failures:i.failures.map(bn)},()=>JW(i,o.dryRun,n.config.verbose)),i.failures.length>0?1:0}},iT={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 kg};function JW(r,e,t){let n=[d(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(d("cli.cmd.workspace.file.upgrade.cands",r.candidates.length)),n.push(Is(r.candidates))),!e&&r.changed.length>0&&(n.push(d("cli.cmd.workspace.file.upgrade.upgraded",r.changed.length)),n.push(Is(r.changed))),r.failures.length>0&&(n.push(d("cli.cmd.workspace.file.upgrade.failed",r.failures.length)),n.push(QW(r.failures))),t&&r.skipped.length>0&&(n.push(d("cli.cmd.workspace.file.upgrade.skipped",r.skipped.length)),n.push(YW(r.skipped))),n.join(`
|
|
105
|
+
`)}function QW(r){return de({columns:[d("cli.out.header.remote"),d("cli.cmd.workspace.file.upgrade.reason"),d("cli.out.header.error")],rows:r.map(e=>[e.remotePath,e.reason??"",en(e.errorInfo)])})}function YW(r){return de({columns:[d("cli.out.header.remote"),d("cli.out.common.version"),d("cli.out.common.targetVersion"),d("cli.cmd.workspace.file.upgrade.reason")],rows:r.map(e=>[e.remotePath,e.currentVersion??"",e.targetVersion??"",e.reason??""])})}D();var wg=class extends fe{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:[d("cli.cmd.workspace.lock.list.scope")],rows:i.map(a=>[a.scope])})),0}},aT={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 wg};D();_();var Pg=class extends fe{toOptions(e){return{scopes:e.values("scope")}}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:[d("cli.cmd.workspace.lock.status.scope"),d("cli.out.header.status"),d("cli.out.header.source"),d("cli.cmd.workspace.lock.status.pid"),d("cli.out.header.command"),d("cli.out.header.started"),d("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,d(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??""]}},sT={path:["workspace","lock","status"],domain:"workspace",spec:{name:"workspace lock status",flags:[],positionals:[{name:"scope",repeatable:!0,param:{choices:bo,inputId:"lockScope"}}],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 Pg};Bn();D();_();var lT=100,XW=["config","sync"],Rg=class extends fe{toOptions(e){return{scopes:e.values("scope"),timeoutSeconds:e.integer("timeout")}}async executeWorkspaceCommand(e,t,n){let o=n.scopes.length>0?n.scopes:XW,i=Date.now(),a=n.timeoutSeconds===void 0?void 0:n.timeoutSeconds*1e3;for(;;){Pt(t.abortSignal);let s=await ZW(e,o),c=s.filter(p=>p.status==="busy"),l=Date.now()-i;if(c.length===0)return t.output.result(cT(e.root,s,"free",l),()=>d("cli.cmd.workspace.lock.wait.locksFree",o.join(", "))),0;if(a!==void 0&&l>=a)return t.output.result(cT(e.root,s,"timeout",l),()=>d("cli.cmd.workspace.lock.wait.locksBusy",n.timeoutSeconds??0,c.map(p=>p.scope).join(", "))),124;await tU(Math.min(lT,eU(a,l)))}}},pT={path:["workspace","lock","wait"],domain:"workspace",spec:{name:"workspace lock wait",flags:[{name:"timeout",takesValue:!0,valueHint:"seconds",param:{type:"integer",min:0,max:Eo}}],positionals:[{name:"scope",repeatable:!0,param:{choices:bo,inputId:"lockScope"}}],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 Rg};async function ZW(r,e){let t=await r.lockManager.peekHolders(e);return e.map(n=>({scope:n,status:t.get(n)?"busy":"free"}))}function cT(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 eU(r,e){return r===void 0?lT:Math.max(0,r-e)}function tU(r){return new Promise(e=>setTimeout(e,r))}D();_();F();$();var bg=class extends Ee{configuredActiveServer;toOptions(e){return{projectNames:e.values("project"),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=Se("server"),i=wr(t.config.server,{input:o,option:o,flag:"server"});this.configuredActiveServer=await e.addServer(i)}async executeSyncCommand(e,t,n,o){await nU(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(bn)},()=>this.renderCloneResultText(i)),0}renderCloneResultText(e){let t=e.projectNames.length>0?e.projectNames.join(", "):d("cli.out.value.none"),n=[];return this.configuredActiveServer&&n.push(d("cli.cmd.workspace.proj.clone.configuredActive",this.configuredActiveServer)),n.push(d("cli.cmd.workspace.proj.clone.cloned",t)),e.oldFiles.length>0&&n.push(d("cli.cmd.workspace.proj.clone.oldMetaNotice",{count:e.oldFiles.length,command:rU(e.projectNames)})),n.join(`
|
|
106
|
+
`)}},uT={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 bg};function rU(r){return`succapp workspace file upgrade${r.length>0?` ${r.join(" ")}`:""}`}async function nU(r,e){if(e.force)return;let[t,n]=await Promise.all([r.listWorkspaceProjects(),r.listBaselineProjects()]),o=new Set([...t,...n].map(dT)),a=(e.projectNames.length>0?[...new Set(e.projectNames.map(dT))]:[...o]).filter(s=>o.has(s));if(a.length!==0)throw new R("err.cli.confirmationRequired",{reason:"cloneOverwrite",flag:"--force",projectNames:a.join(", ")})}function dT(r){return kt(r).slice(1)}D();var Eg=class extends Ee{async executeSyncCommand(e,t,n,o){let[i,a]=await Promise.all([t.listWorkspaceProjects(),t.listBaselineProjects()]),s=oU(i,a);return n.output.result({workspace:e.root,server:e.activeServerUrl,projects:s},()=>iU(s)),0}},mT={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 Eg};function oU(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 iU(r){return{columns:[d("cli.out.header.project"),d("cli.out.common.workspace"),d("cli.out.common.baseline")],rows:r.map(e=>[e.name,d(e.workspace?"cli.out.value.yes":"cli.out.value.no"),d(e.baseline?"cli.out.value.yes":"cli.out.value.no")])}}_();F();D();var Tg=class extends Ee{toOptions(e){return{projectNames:e.values("project"),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},()=>d("cli.cmd.workspace.proj.remove.removed",i.projectNames.join(", ")||d("cli.out.value.none"))),0}},fT={path:["workspace","project","remove"],domain:"workspace",spec:{name:"workspace project remove",flags:[{name:"force",alias:"f",takesValue:!1}],positionals:[{name:"project",param:{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 Tg};F();_();var fr=class extends fe{async executeWorkspaceCommand(e,t,n){return await e.config.ensureLoaded(),this.executeServerCommand(e,t,n)}async requireConfiguredServerUrl(e,t,n){let o=await Ei(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 Mg=class extends fr{toOptions(e){return{url:e.value("url")}}async executeServerCommand(e,t,n){let o=wr(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},()=>d("cli.cmd.workspace.remote.add.active",a)),0}},hT={path:["workspace","remote","add"],domain:"workspace",spec:{name:"workspace remote add",flags:[],positionals:[{name:"url",param:{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 Mg};D();var xg=class extends fr{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(aU)},()=>sU(i)),0}},gT={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 xg};function aU(r){return{url:r.url,active:r.active}}function sU(r){return r.length===0?d("cli.out.common.noServers"):{columns:[d("cli.out.common.server"),d("cli.out.common.active")],rows:r.map(e=>[e.url,d(e.active?"cli.out.value.yes":"cli.out.value.no")])}}D();var Ig=class extends fr{toOptions(e){return{url:e.value("url")}}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?d("cli.cmd.workspace.remote.remove.active",o,e.activeServerUrl):d("cli.cmd.workspace.remote.remove.removed",o)),0}},yT={path:["workspace","remote","remove"],domain:"workspace",spec:{name:"workspace remote remove",flags:[],positionals:[{name:"url",param:{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 Ig};D();var Fg=class extends fr{toOptions(e){return{oldUrl:e.value("old-url"),newUrl:e.value("new-url")}}async executeServerCommand(e,t,n){let o=await this.requireConfiguredServerUrl(e,t,n.oldUrl),i=wr(n.newUrl),a=await e.changeServerUrl(o,i);return t.output.result({workspace:e.root,oldServer:o,server:a,activeServer:e.activeServerUrl||void 0},()=>d("cli.cmd.workspace.remote.setUrl.changed",o,a)),0}},CT={path:["workspace","remote","set-url"],domain:"workspace",spec:{name:"workspace remote set-url",flags:[],positionals:[{name:"old-url",param:{required:!0},role:"server-url"},{name:"new-url",param:{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 Fg};D();var Dg=class extends fr{toOptions(e){return{url:e.value("url")}}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},()=>d("cli.cmd.workspace.remote.use.active",i)),0}},ST={path:["workspace","remote","use"],domain:"workspace",spec:{name:"workspace remote use",flags:[],positionals:[{name:"url",param:{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 Dg};var vT=[vE,NE,wE,PE,bE,ZE,eT,oT,tT,rT,nT,iT,uT,mT,fT,LE,hT,gT,ST,CT,yT,JE,QE,YE,sT,aT,pT,zE,HE,jE];var kT=[...vT,...gE,...DP,...pR,...RR];var sd=[{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:["model"]},{path:["workspace","project"]},{path:["workspace","file"]},{path:["workspace","remote"]},{path:["workspace","lock"]},{path:["workspace","backup"]},{path:["workspace","extension"]}];Ie();Ie();var cU="cli.out.help.commands",lU={extension:"ext",project:"proj"};function wT(r){return r.spec.summary??pU(r.path)}function PT(r){return r.spec.description??dU(r.path)}function cd(r){return r.help?.section??cU}function RT(r){return r.title??ld(r.path)}function bT(r){return r.summary??Us(r.path)}function ET(r){return r.description??pd(r.path)}function TT(r,e){return r.description?r.description:(H(e,`flag --${r.name} description requires command context`),uU(e.path,r.name))}function pU(r){return Us(r)}function dU(r){return pd(r)}function ld(r){return`cli.cmd.${dd(r)}.title`}function Us(r){return`cli.cmd.${dd(r)}.summary`}function pd(r){return`cli.cmd.${dd(r)}.desc`}function uU(r,e){return`cli.cmd.${dd(r)}.${MT(e)}`}function dd(r){return r.map(mU).join(".")}function mU(r){return lU[r]??MT(r)}function MT(r){return r.replace(/-([a-z0-9])/g,(e,t)=>t.toUpperCase())}function xT(r){let e=new Map;for(let t of r){let n=t.path.join(" ");H(!e.has(n),`Duplicate CLI command path: ${n}`),e.set(n,t),fU(t,n),hU(t,n),gU(t,n)}}function fU(r,e){H(r.path.length>0,"CLI command path must not be empty."),r.domain!=="common"&&H(r.path[0]===r.domain,`CLI command domain/path mismatch: ${e}`)}function hU(r,e){H(cd(r).trim(),`CLI command help section must not be empty: ${e}`),H(r.spec.name.trim(),`CLI command spec name must not be empty: ${e}`)}function gU(r,e){H(typeof r.createExecutor=="function",`CLI command createExecutor must be a function: ${e}`)}var IT=["workspace","server","model","db","auth"];function FT(){return IT.map(r=>{let e=[r];return{title:ld(e),commands:[{name:r,summary:Us(e)}]}})}function ud(r,e=[]){let t=IT.map(o=>{let i=[o],a=r.filter(s=>s.domain===o);return{path:i,title:ld(i),summary:Us(i),description:pd(i),sections:yU(a)}}),n=e.flatMap(o=>{let i=r.filter(a=>SU(a,o.path));return i.length===0?[]:[{path:o.path,title:RT(o),summary:bT(o),description:ET(o),sections:CU(o.path,i)}]});return kU([...t,...n])}function yU(r){return DT(r,e=>e.help?.entry??e.path.slice(1).join(" "))}function CU(r,e){return DT(e,t=>t.help?.entry??t.path.slice(r.length).join(" "))}function DT(r,e){let t=new Map;for(let n of r){let o=cd(n),i=t.get(o)??[];i.push({name:e(n),summary:wT(n)}),t.set(o,i)}return Array.from(t,([n,o])=>({title:n,commands:vU(o)}))}function SU(r,e){return r.path.length>e.length&&e.every((t,n)=>r.path[n]===t)}function vU(r){let e=[],t=new Set;for(let n of r)t.has(n.name)||(t.add(n.name),e.push(n));return e}function kU(r){let e=[],t=new Set;for(let n of r){let o=n.path.join(" ");t.has(o)||(t.add(o),e.push(n))}return e}var Ag=class{commands;namespaces;topLevelHelpGroups;commandsByPath=new Map;namespacesByPath=new Map;constructor(e){xT(e),this.commands=[...e],this.namespaces=ud(this.commands,sd),this.topLevelHelpGroups=FT();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(" "))}},Og=new Ag(kT),AT=Og.commands,OT=Og.topLevelHelpGroups,Rie=Og.namespaces;D();function NT(r){return Lg.renderCommandHelp(r)}function WT(r){return Lg.renderTopLevelHelp(r)}function UT(r){return Lg.renderNamespaceHelp(r)}var wU=4,_T=3,PU="[<options>]",LT="value",RU=100,_g=class{renderCommandHelp(e){let t=e.spec,n=this.mergeGlobalFlags(e),o=t.usageArgs??PU,i=[d("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,Dd),this.appendCommandGroups(t,e),t.push("",d("cli.out.help.commandHelpSee")),this.renderLines(t)}renderNamespaceHelp(e){let t=e.path.join(" "),n=[`${d("cli.out.help.usageHeader")} succapp ${t} <command> [<args>]`,"",d(e.description)];for(let o of e.sections){if(o.commands.length===0)continue;n.push("",d(o.title));let i=Math.max(...o.commands.map(a=>Lr(a.name)));for(let a of o.commands)n.push(js(`${li(a.name,i)} ${d(a.summary)}`,_T))}return n.push("",d("cli.out.help.commandHelpRead",t)),this.renderLines(n)}renderTopLevelUsage(){let e=`${d("cli.out.help.usageHeader")} succapp `,t=" ".repeat(Lr(e)),n=[...Dd.map(a=>{let s=a.takesValue?` <${a.valueHint??LT}>`:"";return`[--${a.name}${s}]`}),"<command>","[<args>]"],o=[],i=e;for(let a of n){let c=`${i}${i===e?"":" "}${a}`;if(i!==e&&Lr(c)>RU){o.push(i),i=`${t}${a}`;continue}i=c}return o.push(i),o}appendCommandDescription(e,t){e.push("",js(d(PT(t))))}appendFlags(e,t,n){t.length!==0&&(e.push("",d("cli.out.help.options")),e.push(...this.renderFlags(t,n)))}appendExamples(e,t){if(!(!t||t.length===0)){e.push("",d("cli.out.help.examples"));for(let n of t)e.push(js(n))}}appendCommandGroups(e,t){for(let n of t)this.appendCommandGroup(e,n)}appendCommandGroup(e,t){if(t.commands.length===0)return;e.push("",d(t.title));let n=Math.max(...t.commands.map(o=>Lr(o.name)));for(let o of t.commands)e.push(js(`${li(o.name,n)} ${d(o.summary)}`,_T))}renderFlags(e,t){let n=e.map(i=>({left:this.renderFlagLeft(i),description:d(TT(i,t))})),o=Math.max(...n.map(i=>Lr(i.left)));return n.map(i=>js(`${li(i.left,o)} ${i.description}`))}renderFlagLeft(e){let t=e.takesValue?` <${e.valueHint??LT}>`:"",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,...Nr.filter(n=>!t.has(n.name)&&nn(e,n.name))]}renderLines(e){return`${e.join(`
|
|
103
107
|
`)}
|
|
104
|
-
`}},
|
|
108
|
+
`}},Lg=new _g;function js(r,e=wU){let t=" ".repeat(e);return r.split(`
|
|
109
|
+
`).map(n=>n.length===0?n:`${t}${n}`).join(`
|
|
110
|
+
`)}function jT(r,e){let t=WT(e);r.result({help:t},()=>t)}function VT(r,e){let t=NT(e);r.result({help:t},()=>t)}function BT(r,e){let t=UT(e);r.result({help:t},()=>t)}function qT(r){r.result({version:In},()=>`succapp ${In}`)}F();_();function HT(r){return new Ng(r).parse()}var Ng=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&&si(e.logLevel)===void 0&&t.push(new R("err.cli.invalidChoice",$T(e.logLevel))),this.args.kind==="unknown"||this.validateGlobalOptionsWithoutCommand(e,t),t;if(e.lockTimeout!==void 0&&nn(n,"lock-timeout")&&ci(e.lockTimeout,Eo)===void 0){let o=Se("lock-timeout");t.push(new R("err.cli.invalidNonNegativeIntegerRange",{input:o,option:o,value:e.lockTimeout,max:Eo}))}return e.logLevel!==void 0&&si(e.logLevel)===void 0&&t.push(new R("err.cli.invalidChoice",$T(e.logLevel))),e.workspace!==void 0&&!nn(n,"workspace")&&t.push(new R("err.cli.unknownOption",{option:Se("workspace")})),e.server!==void 0&&!nn(n,"server")&&t.push(new R("err.cli.unknownOption",{option:Se("server")})),e.lockTimeout!==void 0&&!nn(n,"lock-timeout")&&t.push(new R("err.cli.unknownOption",{option:Se("lock-timeout")})),t}validateGlobalOptionsWithoutCommand(e,t){e.workspace!==void 0&&this.args.kind!=="top-help"&&t.push(new R("err.cli.unknownOption",{option:Se("workspace")})),e.server!==void 0&&t.push(new R("err.cli.unknownOption",{option:Se("server")})),e.lockTimeout!==void 0&&t.push(new R("err.cli.unknownOption",{option:Se("lock-timeout")}))}checkCliInvocationUsage(e){if(this.args.helpOrVersionRequested)return;if(this.args.kind==="unknown")throw bU(this.args);let t=[...this.args.issues,...this.validateGlobalOptions(e)];if(t.length>0)throw EU(t)}};function bU(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 EU(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 $T(r){let e=Se("log-level");return{input:e,option:e,value:r,allowedValues:wa}}var md=class{async run(e,t){let n=HT(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 jT(t.output,OT),0;case"command-help":return VT(t.output,zT(e)),0;case"namespace-help":return BT(t.output,TU(e)),0;case"version":return qT(t.output),await ra({trigger:"version",context:t,output:t.output}),0;case"unknown":ii("Unknown command invocation should be rejected before runner.");case"run":{let o=zT(e),i=o.createExecutor(),a={cwd:t.cwd,env:t.env,config:t.config,output:new Ug(t.output,o,n),task:t.task,eventBus:t.eventBus,workspace:n,parsed:e.parsed,command:o,abortSignal:t.abortSignal},s=await i.execute(a,i.toOptions(e.parsed));return await ra({trigger:"command",context:t,command:o,output:t.output}),s}}}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 $c({cwd:t.cwd,workspace:t.config.workspace,env:t.env,required:n!=="optional"||!!t.config.workspace&&!o});if(i)return ea({root:i,eventBus:t.eventBus,lockWait:t.config.lockTimeout})}},Ug=class{constructor(e,t,n){this.delegate=e;this.command=t;this.workspace=n}result(e,t){this.delegate.result(this.withCommandInfo(e),t)}resultStream(e,t,n){return this.delegate.resultStream(this.withCommandInfo(e),t,n)}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};return Object.hasOwn(t,"command")||(t.command=this.command.spec.name),t}};function zT(r){return H(r.command,`Missing command for CLI invocation kind: ${r.kind}`),r.command}function TU(r){return H(r.namespace,`Missing namespace for CLI invocation kind: ${r.kind}`),r.namespace}D();function GT(r){MU(r),gC()}function MU(r){let e=r.localizer.unresolvedLocale;!e||!r.args.parsed.has("locale")||r.formatter.warning(d("cli.host.localeFallback",e))}D();function KT(r){return{yellow:e=>Vs(e,33,r),green:e=>Vs(e,32,r),red:e=>Vs(e,31,r),dim:e=>Vs(e,2,r),bold:e=>Vs(e,1,r)}}function Vs(r,e,t){return t?`\x1B[${e}m${r}\x1B[0m`:r}var jg="\r\x1B[2K",fd=class{constructor(e,t,n){this.env=e;this.logFile=t;this.errorDisplayContext=n;this.colors=KT(e.color)}colors;progressActive=!1;lastProgressText="";result(e,t){this.finishProgressLine();let n=t?xU(t()):JSON.stringify(e,null,2);n&&this.env.writeOut(Bs(n))}async resultStream(e,t,n){let o=await IU(t);this.result({...e,...o},n?()=>n(o):void 0)}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(Bs(n))}info(e){this.finishProgressLine(),this.env.writeErr(Bs(d("cli.out.human.info",e)))}warning(e){this.finishProgressLine(),this.env.writeErr(Bs(this.colors.yellow(d("cli.out.human.warning",e))))}error(e){this.finishProgressLine();let t=xc(e,this.errorDisplayContext),n=[this.colors.red(d("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(d("cli.out.human.hint",t.hint))),t.internal&&this.logFile&&n.push(this.colors.dim(d("cli.out.human.seeLogs",this.logFile))),this.env.writeErr(`${n.join(`
|
|
105
111
|
`)}
|
|
106
|
-
`)}writeProgressLine(e){e!==this.lastProgressText&&(this.env.writeErr(`${
|
|
107
|
-
`),this.progressActive=!1,this.lastProgressText="")}clearProgressLine(){this.progressActive&&(this.env.writeErr(
|
|
112
|
+
`)}writeProgressLine(e){e!==this.lastProgressText&&(this.env.writeErr(`${jg}${this.colors.dim(e)}`),this.progressActive=!0,this.lastProgressText=e)}writeRetainedProgressLine(e){if(e){this.env.writeErr(`${jg}${Bs(this.colors.dim(e))}`),this.progressActive=!1,this.lastProgressText="";return}this.finishProgressLine()}finishProgressLine(){this.progressActive&&(this.env.writeErr(`
|
|
113
|
+
`),this.progressActive=!1,this.lastProgressText="")}clearProgressLine(){this.progressActive&&(this.env.writeErr(jg),this.progressActive=!1,this.lastProgressText="")}};function xU(r){return typeof r=="string"?r:de(r)}function Bs(r){return r.endsWith(`
|
|
108
114
|
`)?r:`${r}
|
|
109
|
-
`}
|
|
110
|
-
`)}writeErrJson(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});
|
|
115
|
+
`}async function IU(r){let e=[];for await(let n of r)e.push(Buffer.isBuffer(n)?n:Buffer.from(n));let t=JSON.parse(Buffer.concat(e).toString("utf-8"));return t&&typeof t=="object"&&!Array.isArray(t)?t:{result:t}}Ie();Z();var gd=class{constructor(e){this.env=e}result(e,t){this.writeJson("result",e)}async resultStream(e,t,n){Vg(e);let o=JSON.stringify({kind:"result",...e});await this.writeOut(o.slice(0,-1)),await this.writeMergedObjectBody(t),await this.writeOut(`
|
|
116
|
+
`)}content(e,t,n){this.writeJson("result",{...e,encoding:"base64",content:t.toString("base64")})}progress(e,t){}detail(e,t){this.writeErrJson("log",I({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=xc(e);this.writeJson("error",I({code:t.code,name:t.name,message:t.message,hint:t.hint,details:hd(t.details),errorType:t.errorType,errorDialogStyle:t.errorDialogStyle,hintMessage:t.hintMessage,locationPath:hd(t.locationPath),internal:t.internal,category:t.category,style:t.style,properties:hd(t.properties),stack:t.stack,cause:hd(t.cause)}))}writeJson(e,t){Vg(t),this.env.writeOut(`${JSON.stringify({kind:e,...t})}
|
|
117
|
+
`)}writeErrJson(e,t){Vg(t),this.env.writeErr(`${JSON.stringify({kind:e,...t})}
|
|
118
|
+
`)}async writeMergedObjectBody(e){let t=!1;for await(let n of e){let o=FU(n);if(t){await this.writeOut(o);continue}let i=DU(o);i<0||(await this.writeOut(","),i+1<o.length&&await this.writeOut(o.subarray(i+1)),t=!0)}H(t,"Streaming JSON result body is empty")}async writeOut(e){await this.env.writeOut(e)}};function Vg(r){H(!Object.hasOwn(r,"kind"),"Output data cannot contain reserved field: kind")}function FU(r){return Buffer.isBuffer(r)?r:typeof r=="string"?Buffer.from(r,"utf-8"):Buffer.from(r)}function DU(r){for(let e=0;e<r.length;e++){let t=r[e];if(t===123)return e;AU(t)||H(!1,"Streaming JSON result body must be an object")}return-1}function AU(r){return r===32||r===10||r===13||r===9}function hd(r){return yd(r,new WeakSet)}function yd(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 OU(r,e);if(Array.isArray(r))return e.has(r)?"[Circular]":(e.add(r),r.map(t=>yd(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]=yd(o,e);return t}return String(r)}function OU(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=yd(n,e)),t}var Cd=class{constructor(e){this.delegate=e}result(e,t){this.delegate.result(e,t)}resultStream(e,t,n){return this.delegate.resultStream(e,t,n)}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 JT={cat:["show"],delete:["remove"],desc:["describe"],ls:["list"],read:["show"],rm:["remove"],run:["exec"],view:["open","show"]},Sd=class{constructor(e){this.commands=e}resolve(e){let t=KU(e.argv),n=this.commands.filter(i=>!e.namespacePath||zU(i.path,e.namespacePath)).map(i=>({command:i,score:LU(i,e.inputPath,t)})).filter(i=>i.score>=18).sort(_U)[0];if(!n)return;let o=NU(n.command,e.inputPath,t);return o.length>0?o:void 0}};function _U(r,e){return r.score!==e.score?e.score-r.score:r.command.path.length-e.command.path.length}function LU(r,e,t){let n=r.path,o=qU(n,e),i=$U(n,e),a=JU(n,e),s=HU(r.spec,t),c=e.some(l=>QT(l,n[n.length-1]));return 10+o*8+i*3+s*4+(c?8:0)-a*3}function NU(r,e,t){let n=WU(r,e),o=VU(r.spec,t),a=[BU(r.path,n,o),...r.spec.examples??[]];return XT(a).slice(0,2)}function WU(r,e){let t=r.path[r.path.length-1],n=e.findIndex(c=>ho(c,t));if(r.spec.positionals.length===0)return[];let o=jU(r.spec),i=n>=0?n+1:UU(r.path,e),s=e.slice(i).filter(c=>!r.path.some(l=>ho(l,c)));return o===void 0?s:s.slice(0,o)}function UU(r,e){let t=0;for(;t<r.length&&t<e.length&&ho(r[t],e[t]);)t++;return t<e.length?t+1:e.length}function jU(r){if(!r.positionals.some(t=>t.repeatable))return r.positionals.length}function VU(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 XT(o.map(i=>i.display))}function BU(r,e,t){return["succapp",...r,...e,...t].join(" ")}function qU(r,e){return r.filter(t=>e.some(n=>ho(t,n))).length}function $U(r,e){let t=0;for(let n of r)e.some(o=>!ho(n,o)&&QT(n,o))&&t++;return t}function HU(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 zU(r,e){return e.every((t,n)=>ho(r[n],t))}function ho(r,e){return r!==void 0&&e!==void 0&&r.toLowerCase()===e.toLowerCase()}function QT(r,e){if(ho(r,e))return!0;if(r===void 0||e===void 0)return!1;let t=r.toLowerCase(),n=e.toLowerCase();return GU(t,n)||t.length>=2&&n.length>=2&&(t.startsWith(n)||n.startsWith(t))?!0:QU(t,n)<=2}function GU(r,e){return(JT[r]??[]).includes(e)?!0:(JT[e]??[]).includes(r)}function KU(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 JU(r,e){return YT(r,e,(t,n)=>ho(t,n)?0:1)}function QU(r,e){return YT([...r.toLowerCase()],[...e.toLowerCase()],(t,n)=>t===n?0:1)}function YT(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 XT(r){let e=[],t=new Set;for(let n of r)t.has(n)||(t.add(n),e.push(n));return e}Ie();var vd=class{constructor(e,t){this.argv=e;this.commands=[...t].sort((n,o)=>o.path.length-n.path.length),this.namespaces=[...ud(t,sd)].sort((n,o)=>o.path.length-n.path.length);for(let n of Nr)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:Mn(this.argv,e.commandIndexes)};if(e.namespace&&this.shouldShowNamespaceHelp(e))return{kind:"namespace-help",namespace:e.namespace,commandArgv:Mn(this.argv,e.namespaceIndexes)};if(e.namespace){let t=this.createNamespaceUnknownCommand(e);return{kind:"unknown",token:t.path[0],unknownCommand:t,commandArgv:Mn(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:Mn(this.argv,[e.firstToken.index])}}return{kind:"top-help",commandArgv:this.argv}}resolveHelpCommand(e){let t=Mn(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:Mn(t,n.commandIndexes),fromHelpToken:!0};if(n.namespace&&this.shouldShowNamespaceHelp(n))return{kind:"namespace-help",namespace:n.namespace,commandArgv:Mn(t,n.namespaceIndexes),fromHelpToken:!0};if(n.namespace){let i=this.createNamespaceUnknownCommand(n);return{kind:"unknown",token:i.path[0],unknownCommand:i,commandArgv:Mn(t,n.tokens.map(a=>a.index))}}let o=this.createTopLevelUnknownCommand(n);return{kind:"unknown",token:n.firstToken.value,unknownCommand:o,commandArgv:Mn(t,[n.firstToken.index])}}shouldShowNamespaceHelp(e){return!e.stoppedAtDoubleDash&&e.tokens.length===e.namespaceIndexes.length}createNamespaceUnknownCommand(e){let t=YU(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 Sd(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(!eM(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&&ZT(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:ZT(e[n+1])?n+1:n}return n}};function Mn(r,e){if(e.length===0)return r;let t=new Set(e);return r.filter((n,o)=>!t.has(o))}function YU(r){return H(r.namespace,"Missing namespace for located command path."),r.namespace}function ZT(r){return r!==void 0&&r!=="--"&&!eM(r)}function eM(r){return r.startsWith("-")&&r!=="-"}D();Ie();F();_();function nM(r,e=AT){return new Bg(r,e).read()}var XU={name:"succapp",flags:Nr,positionals:[],summary:"cli.cmd.root.summary"},ZU={name:"succapp",flags:Nr,positionals:[{name:"arg",repeatable:!0}],summary:"cli.cmd.root.summary"},Bg=class{constructor(e,t){this.argv=e;this.commands=t}commands;read(){let e=new vd(this.argv,this.commands).resolve(),t=rj(ej(e),e.commandArgv),n=py(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 ej(r){return(r.kind==="run"||r.kind==="command-help")&&r.command?tj(r.command.spec):r.kind==="unknown"?ZU:XU}function tj(r){let e=new Set(r.flags.map(t=>t.name));return{...r,flags:[...r.flags,...Nr.filter(t=>!e.has(t.name))]}}function rj(r,e){return new qg(r).parse(e)}var qg=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 $g(this.spec);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),this.issues.push(...ij(t)),{parsed:t,issues:this.issues.slice()}}addFlag(e){H(!this.longFlags.has(e.name),`duplicate flag name: ${e.name}`),this.longFlags.set(e.name,e),e.alias&&(H(e.alias.length===1,`flag alias must be a single character: ${e.name}`),H(!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==="--"||tM(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 u=l.startsWith("=")?l.slice(1):l;return o.addFlagValue(c,u),n}let p=t[n+1];return p===void 0||p==="--"||tM(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(qs).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)=>qs(s)&&c>=t);if(a){let s=this.spec.usageArgs?` ${this.spec.usageArgs}`:"";this.issues.push(new R("err.cli.missingArgument",{argument:_r("<{name}>{repeatable}",{name:a.name,repeatable:a.repeatable===!0?"...":""}),usage:_r("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))}};function qs(r){return r.param?.required===!0}var $g=class{constructor(e){this.spec=e}positionalValues=[];flags=new Map;get positional(){return this.positionalValues.slice()}has(e){let t=iM(this.spec,e);return t?t.kind==="flag"?this.flags.has(t.flag.name):ni(this,t).length>0:!1}value(e){return oM(this,e)}values(e){return nj(this,e)}integer(e){return oj(this,e)}resolveInput(e){return aj(this,e)}rawValue(e){let t=this.flags.get(e);return t&&t.length>0?t[t.length-1]:void 0}rawValues(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)}};function tM(r){return r.startsWith("-")&&r!=="-"}function oM(r,e){let t=wd(r.spec,e),o=ni(r,t).at(-1);if(o!==void 0)return kd(r.spec,t,o);let i=Pd(t.param);if(i!==void 0)return kd(r.spec,t,i);zg(t)&&!Rd(r,t)&&lM(r.spec,t)}function nj(r,e){let t=wd(r.spec,e),n=ni(r,t);if(n.length===0){let o=Pd(t.param);return o!==void 0?[kd(r.spec,t,o)]:(zg(t)&&!Rd(r,t)&&lM(r.spec,t),[])}return n.map(o=>kd(r.spec,t,o))}function oj(r,e){let t=wd(r.spec,e),n=t.param;if(!n||n.type!=="integer")throw new Error(`CLI parameter is not declared as integer: ${ya(t)}`);let o=oM(r,e);return o===void 0?void 0:Kg(r.spec,t,n,o)}function ij(r){let e=[];for(let t of r.spec.flags){if(!t.param)continue;let n={kind:"flag",ref:`--${t.name}`,flag:t,param:t.param},o;try{o=r.values(t.name)}catch(i){if(i instanceof R){e.push(i);continue}throw i}t.param.required===!0&&!Rd(r,n)&&!Gg(r,n)&&e.push(new R("err.cli.missingInput",{inputId:t.param.inputId??"value",sources:Jg(n)}));for(let i of o)rM(n,i,e)}r.spec.positionals.forEach((t,n)=>{if(!t.param)return;let o={kind:"positional",ref:`<${t.name}>`,positional:t,index:n,param:t.param};for(let i of ni(r,o))rM(o,i,e)});for(let t of r.spec.inputGroups??[]){let n=aM(r,t);n.issue&&e.push(n.issue)}return e}function wd(r,e){let t=iM(r,e);if(!t)throw new Error(`Unknown CLI parameter: ${e}`);return t}function iM(r,e){if(e.startsWith("--")){let i=r.flags.find(a=>a.name===e.slice(2));return i?{kind:"flag",ref:`--${i.name}`,flag:i,param:i.param}:null}let t;if(e.startsWith("<")&&e.endsWith(">"))t=e.slice(1,-1);else{let i=r.flags.find(a=>a.name===e);if(i)return{kind:"flag",ref:`--${i.name}`,flag:i,param:i.param};t=e}let n=r.positionals.findIndex(i=>i.name===t);if(n<0)return null;let o=r.positionals[n];return{kind:"positional",ref:`<${o.name}>`,positional:o,index:n,param:o.param}}function aj(r,e){let t=r.spec.inputGroups?.find(o=>o.name===e);if(t)return sj(r,t);let n=wd(r.spec,e);return cj(r,n)}function sj(r,e){let t=aM(r,e);if(t.issue)throw t.issue;if(!t.input)throw new R("err.cli.missingInput",{inputId:e.inputId,sources:cM(r.spec,e)});return t.input}function cj(r,e){let t=e.param,n=t?.inputId??"value",o=Jg(e);if(!Gg(r,e))throw new R("err.cli.missingInput",{inputId:n,sources:o});if(t?.source==="stdin")return Hg(e,"",n,o);let i=ni(r,e).at(-1)??Pd(t)??"";return Hg(e,i,n,o)}function aM(r,e){let t=cM(r.spec,e),n=e.members.map(s=>{let c=uM(r.spec,s);return{resolved:c,present:Gg(r,c),missingExplicitValue:Rd(r,c)}}),o=n.filter(s=>s.present);if(o.length===0)return e.defaultSource==="stdin"?{input:sM(e.members[0],e.inputId,t),issue:null}:e.mode==="atMostOne"||n.some(s=>s.missingExplicitValue)?{input:null,issue:null}:{input:null,issue:new R("err.cli.missingInput",{inputId:e.inputId,sources:t})};if((e.mode==="exactlyOne"||e.mode==="atMostOne")&&o.length>1)return{input:null,issue:new R("err.cli.conflictingInputs",{inputs:o.map(s=>ya(s.resolved))})};let i=o[0],a=ni(r,i.resolved).at(-1)??Pd(i.resolved.param)??"";return{input:Hg(i.resolved,a,e.inputId,t),issue:null}}function Hg(r,e,t,n){let o=r.param?.source,i=r.ref;return o==="stdin"||o==="file-or-stdin"&&e==="-"?sM(i,t,n):o==="file"||o==="file-or-stdin"?{kind:"file",ref:i,filePath:e,label:e,inputId:t,sources:n}:{kind:"value",ref:i,value:e,label:i,inputId:t,sources:n}}function sM(r,e,t){return{kind:"stdin",ref:r,label:"stdin",inputId:e,sources:t}}function cM(r,e){if(e.sources)return e.defaultSource==="stdin"?[...e.sources,"stdin"]:e.sources;let t=e.members.map(n=>ya(uM(r,n)));return e.defaultSource==="stdin"?[...t,"stdin"]:t}function ni(r,e){if(e.kind==="flag"){let t=e.param?.list,n=r.rawValues(e.flag.name);if(!t)return n.slice();if(t.separator.length===0)throw new Error(`CLI list separator must not be empty: --${e.flag.name}`);let o=[],i=new Set;for(let a of n)for(let s of a.split(t.separator)){let c=s.trim();if(!c){t.empty==="error"&&pj(e.flag,c);continue}if(t.dedupe===!0){if(i.has(c))continue;i.add(c)}o.push(c)}return o}return lj(r.spec.positionals,r.positional)[e.index]??[]}function lj(r,e){let t=r.map(()=>[]),n=0;for(let o=0;o<r.length;o++){let i=r[o],a=e.length-n;if(a<=0)break;let s=r.slice(o+1).filter(qs).length;if(i.repeatable===!0){let c=Math.max(0,a-s);t[o].push(...e.slice(n,n+c)),n+=c;continue}(qs(i)||a>s)&&(t[o].push(e[n]),n++)}return t}function kd(r,e,t){let n=e.param;return n&&(n.type==="integer"&&Kg(r,e,n,t),pM(e,t),dM(e,t)),t}function zg(r){return r.kind==="positional"?qs(r.positional):r.param?.required===!0}function lM(r,e){if(e.kind==="positional"&&zg(e)){let t=r.usageArgs?` ${r.usageArgs}`:"";throw new R("err.cli.missingArgument",{argument:_r("<{name}>{repeatable}",{name:e.positional.name,repeatable:e.positional.repeatable===!0?"...":""}),usage:_r("succapp {name}{usageArgs}",{name:r.name,usageArgs:t})})}throw new R("err.cli.missingInput",{inputId:e.param?.inputId??"value",sources:Jg(e)})}function pj(r,e){let t=r.param?.choices,n=Se(r.name);throw t?new R("err.cli.invalidChoice",{input:n,option:n,flag:r.name,value:e,allowedValues:t}):new R("err.cli.missingOptionValue",{option:n})}function rM(r,e,t){try{r.param.type==="integer"&&Kg(void 0,r,r.param,e),pM(r,e),dM(r,e)}catch(n){if(n instanceof R){t.push(n);return}throw n}}function pM(r,e){let t=r.param?.choices;if(!(!t||t.includes(e)))throw new R("err.cli.invalidChoice",{input:mM(r),...r.kind==="flag"?{option:Se(r.flag.name),flag:r.flag.name}:{},value:e,allowedValues:t})}function dM(r,e){let t=r.param;if(!(t?.nonEmpty!==!0||Pe(e)))throw new R("err.cli.missingInput",{inputId:t.inputId??"value",sources:[ya(r)]})}function Pd(r){return r?.defaultValue===void 0?void 0:String(r.defaultValue)}function Gg(r,e){if(e.kind==="positional")return ni(r,e).length>0;let t=e.param;return t?.source==="stdin"||!e.flag.takesValue?r.has(e.flag.name):r.rawValue(e.flag.name)!==void 0||t?.defaultValue!==void 0}function Rd(r,e){return e.kind==="flag"&&e.flag.takesValue&&r.has(e.flag.name)&&r.rawValue(e.flag.name)===void 0}function Kg(r,e,t,n){let o=dj(n);if(o===void 0||typeof n=="string"&&(t.min??Number.NEGATIVE_INFINITY)>=0&&n.trim().startsWith("-")||t.min!==void 0&&o<t.min||t.max!==void 0&&o>t.max){let i=mM(e);throw new R(uj(t),{inputId:t.inputId??"value",input:i,...e.kind==="flag"?{option:i,flag:e.flag.name}:{},...e.kind==="positional"&&r?{argument:ya(e)}:{},value:String(n),...t.max!==void 0?{...t.min!==void 0?{min:t.min}:{},max:t.max}:{}})}return o}function dj(r){if(typeof r=="number")return Number.isSafeInteger(r)?r:void 0;let e=r.trim();if(!/^-?\d+$/.test(e))return;let t=Number(e);return Number.isSafeInteger(t)?t:void 0}function uj(r){return r.max!==void 0?"err.cli.invalidNonNegativeIntegerRange":r.min===0?"err.cli.invalidNonNegativeInteger":"err.cli.invalidPositiveInteger"}function uM(r,e){if(e.startsWith("--")){let i=mj(r,e.slice(2));if(!i.param)throw new Error(`Missing CLI parameter contract: ${e}`);return{kind:"flag",ref:e,flag:i,param:i.param}}let t=e.slice(1,-1),n=r.positionals.findIndex(i=>i.name===t);if(n<0)throw new Error(`Unknown CLI positional parameter: ${e}`);let o=r.positionals[n];if(!o.param)throw new Error(`Missing CLI parameter contract: ${e}`);return{kind:"positional",ref:e,positional:o,index:n,param:o.param}}function mj(r,e){let t=r.flags.find(n=>n.name===e);if(!t)throw new Error(`Unknown CLI flag: --${e}`);return t}function Jg(r){if(r.kind!=="flag"||r.param?.source!=="file-or-stdin")return[ya(r)];let e=Se(r.flag.name),t=r.flag.valueHint?.split("|")[0]??r.flag.valueHint??"value";return[`${e}=<${t}>`,`${e}=-`]}function ya(r){if(r.kind==="positional")return`<${r.positional.name}>`;let e=Se(r.flag.name);return r.flag.takesValue?`${e}=<${r.flag.valueHint??"value"}>`:e}function mM(r){return r.kind==="positional"?`<${r.positional.name}>`:Se(r.flag.name)}async function gM(r,e={}){let t=e.env??process.env,n=e.cwd??process.cwd(),o=e.signal??new AbortController().signal;gj();let i=yj(t,e.stdio),a=nM(r),s=hC({args:a,env:t}),c,l,p;try{l=await fj(s,t,n),c=fM(s,i,l.logFile,a);let u=await hj(s.locale);return GT({args:a,localizer:u,formatter:c}),p=new Sa,await new md().run(a,{cwd:n,config:s,output:c,task:new Tc(c,o),eventBus:p,abortSignal:o,env:t})}catch(u){return l?.error(u instanceof Error?u:String(u)),(c??fM(s,i,l?.logFile,a)).error(u),AC(u)}finally{p?.dispose(),await l?.close()}}async function fj(r,e,t){let n=await bC({level:r.logLevel,cwd:t,env:e});return ry(n),n}async function hj(r){let e=await Pc.create({locale:r,bundleDir:Sj()});return oy(e),e}function gj(){Zg(Td("cli"))}function yj(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 fM(r,e,t,n){let o=r.outputMode==="json"?new gd(e):new fd(e,t,Cj(n));return r.quiet?new Cd(o):o}function Cj(r){if(r.command)return{commandArgv:r.commandArgv,commandSpec:r.command.spec}}function Sj(){return Id(__dirname)??hM.join(__dirname,"l10n")}async function vj(){let r=new AbortController,e=kj(r);try{process.exitCode=await gM(process.argv.slice(2),{cwd:process.cwd(),env:process.env,signal:r.signal})}finally{e()}}function kj(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&&vj();0&&(module.exports={runCli});
|