@membranehq/cli 0.10.13 → 0.10.15

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.
Files changed (2) hide show
  1. package/dist/index.js +7 -7
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
- var Bi=Object.defineProperty;var c=(s,e)=>Bi(s,"name",{value:e,configurable:!0});import{jsx as m,jsxs as v,Fragment as en}from"react/jsx-runtime";import*as R from"node:path";import{resolve as qi,dirname as Ui,join as Ji}from"node:path";import{useInput as Pe,Box as b,Text as S,Newline as Wi,render as gt}from"ink";import Gi from"minimist";import{SWRConfig as Vi}from"swr";import Re,{createContext as ss,useState as j,useEffect as Ie,useContext as is,useMemo as Hi,useRef as Yi}from"react";import rs from"swr/immutable";import{MembraneConfigLoader as zi,WorkspaceElementType as M,WorkspaceElementSpecs as we,MembraneClient as os,setValueAtLocator as tn,extractMembraneErrorData as le,getDataCollectionCreateFields as nn,excludeWriteOnlyFieldsFromSchema as as,valueToSchema as yt,getRequiredFieldsFromSchema as Qi,getValueAtLocator as Xi,walkSchema as cs,makeDataLocationPath as ls,getDataCollectionUpdateFields as sn}from"@membranehq/sdk";import*as x from"node:fs";import{readFileSync as Zi}from"node:fs";import Te from"js-yaml";import er from"lodash/isEqual.js";import us from"os";import{EventEmitter as tr}from"events";import B from"path";import nr from"conf";import rn from"jsonwebtoken";import*as sr from"node:crypto";import{createHash as ir}from"node:crypto";import rr from"chokidar";import P from"fs";import or from"archiver";import ar from"form-data";import cr from"unzipper";import*as lr from"node:os";import{exec as ur}from"node:child_process";import{Spinner as fr,TextInput as hr,Select as dr}from"@inkjs/ui";import wt from"ink-spinner";import pr from"ink-text-input";import{fileURLToPath as mr}from"node:url";import k from"chalk";import{Command as gr}from"commander";import on from"axios";import{FastMCP as yr}from"fastmcp";import{z}from"zod";import an from"lodash/merge.js";import wr from"@anthropic-ai/sdk";import{faker as Ze}from"@faker-js/faker";import br from"lodash/template.js";import Sr from"lodash/templateSettings.js";class Ye{static{c(this,"ConfigLoader")}static instance=null;sdkLoader;constructor(){this.sdkLoader=new zi}static getInstance(){return Ye.instance||(Ye.instance=new Ye),Ye.instance}loadConfig(e){e&&e!==this.sdkLoader.getCwd()&&this.sdkLoader.setCwd(e);try{return this.sdkLoader.loadConfig({validate:!0})}catch(t){if(t.message?.includes("Failed to parse"))throw t;return null}}clearCache(){this.sdkLoader.clearCache()}updateConfig(e){return this.sdkLoader.updateConfig(e)}saveToFile(e){return this.sdkLoader.saveToFile(e)}isCacheDefined(){return this.sdkLoader.hasValidConfig()}}const et=Ye.getInstance(),ne={[M.Integration]:{element:"integration",elements:"integrations",exportable:!1,exportCleanup:c(s=>({id:s.id,key:s.key,name:s.name,connectorId:s.connectorId,baseUri:s.baseUri,connectorVersion:s.connectorVersion}),"exportCleanup")},[M.Connector]:{element:"connector",elements:"connectors",exportable:!1},[M.Action]:{element:"action",elements:"actions",integrationSpecific:!0,exportCleanup:c(s=>(delete s.integration,s),"exportCleanup")},[M.AppDataSchema]:{element:"appDataSchema",elements:"appDataSchemas"},[M.AppEventType]:{element:"appEventType",elements:"appEventTypes"},[M.DataLinkTable]:{element:"dataLinkTable",elements:"dataLinkTables"},[M.DataSource]:{element:"dataSource",elements:"dataSources",parentKey:"universalDataSourceId",integrationSpecific:!0},[M.FieldMapping]:{element:"fieldMapping",elements:"fieldMappings",integrationSpecific:!0,parentKey:"universalFieldMappingId",exportCleanup:c(s=>(delete s.dataSourceId,s),"exportCleanup")},[M.Flow]:{element:"flow",elements:"flows",integrationSpecific:!0,parentKey:"universalFlowId"}};function Cr(s){return delete s.workspaceId,delete s.createdAt,delete s.updatedAt,delete s.revision,Object.keys(s).map(e=>{e.match(/universal.*Revision/g)&&delete s[e]}),s}c(Cr,"baseExportCleanup");const kr="membrane",Er=["**/node_modules/**","**/.git/**","**/.DS_Store","**/Thumbs.db","**/*.tmp","**/*.swp","**/*.swo","**/*.log","**/*.lock","**/.cache/**","**/.next/**","**/.vscode/**","**/.idea/**"];function bt(s){return R.join(s,kr)}c(bt,"getMembraneDir");const vr=["id","workspaceId","integrationId","createdAt","updatedAt","revision","archivedAt","baseUri","state"],fs=[M.Action,M.FieldMapping,M.Flow,M.DataSource];class G{static{c(this,"Element")}type;key;integrationKey;data;constructor(e,t,n,i){if(!i)throw new Error("Element must always contain data");if(!t)throw new Error("Element must have a key");this.type=e,this.key=t,this.data=i,this.integrationKey=n||G.extractIntegrationKey(i)}get id(){return G.makeId(this.type,this.key,this.integrationKey)}get dirPath(){const e=we[this.type].apiPath;if(this.integrationKey){const t=we[M.Integration].apiPath;return R.join(t,this.integrationKey,e,this.key)}return R.join(e,this.key)}get path(){return R.join(this.dirPath,"spec.yaml")}get relativePath(){return R.relative(bt(process.cwd()),this.path)}isEqual(e){if(this.id!==e.id)return!1;const t=this.clean(),n=e.clean();return er(t,n)}hasParent(){const e=this.getParentKey();return!!e&&!!this.data?.[e]}clean(){const e={...this.data};return vr.forEach(t=>{delete e[t]}),Object.keys(e).forEach(t=>{t.match(/universal.*Revision/)&&delete e[t]}),e}getParentKey(){let e="parentId";return ne?.[this.type]?.parentKey&&(e=ne?.[this.type]?.parentKey),e}static new(e,t,n,i){return new G(e,t,n,i)}static fromData(e,t){if(!t?.key)throw new Error(`Element missing key: ${JSON.stringify(t)}`);const n=this.extractIntegrationKey(t);return new G(e,t.key,n,t)}static fromPathAndData(e,t){const n=G.parsePath(e);if(!t)return;const i=t?.key||n?.key;return n?G.new(n.type,i,n.integrationKey,t):void 0}static fromElement(e){return new G(e.type,e.key,e.integrationKey,{...e.data})}static idFromPath(e){const t=G.parsePath(e);if(t)return G.makeId(t.type,t.key,t.integrationKey)}static makeId(e,t,n){return e===M.Integration?`${e}:${t}`:G.isIntegrationSpecific(e)?`${n||"universal"}:${e}:${t}`:`${e}:${t}`}static parsePath(e){const t=this.getRelativePath(e);if(!this.isElementFile(t))return;const n=Object.values(we).map(l=>l.apiPath).join("|"),i=new RegExp(`^(?<elementType>${n})/(?<elementKey>[^/]+)/spec\\.ya?ml$`),r=t.match(i);if(r?.groups){const{elementType:l,elementKey:u}=r.groups,p=this.getElementTypeFromPath(l);if(p)return{type:p,key:u}}const o=new RegExp(`^integrations/(?<integrationKey>[^/]+)/(?<elementType>${n})/(?<elementKey>[^/]+)/spec\\.ya?ml$`),a=t.match(o);if(a?.groups){const{integrationKey:l,elementType:u,elementKey:p}=a.groups,d=this.getElementTypeFromPath(u);if(d)return{type:d,key:p,integrationKey:l}}}static extractIntegrationKey(e){return e?.integrationKey||e?.integration?.key||e?.integration_key||void 0}static isElementFile(e){return e.endsWith(".yml")||e.endsWith(".yaml")}static getElementTypeFromPath(e){return Object.values(M).find(t=>we[t].apiPath===e)}static getRelativePath(e){return R.relative(bt(process.cwd()),e)}static isIntegrationSpecific(e){return fs.includes(e)}static canBeIntegrationSpecific(e){return fs.includes(e)}}const J={LogAdded:"logAdded",StateChanged:"stateChanged",StatsChanged:"statsChanged",ConflictsChanged:"conflictsChanged",McpStatusChanged:"mcpStatusChanged",McpServersChanged:"mcpServersChanged",ConfigChanged:"configChanged"};class hs extends tr{static{c(this,"TypedEventEmitter")}on(e,t){return super.on(e,t)}emit(e,...t){return super.emit(e,...t)}off(e,t){return super.off(e,t)}once(e,t){return super.once(e,t)}}const Ir="membrane",Tr="membrane.config.yml",cn="https://api.integration.app";function ln(){const s=process.cwd(),e=R.join(s,Ir),t=R.join(s,Tr),n=e,i=R.join(n,"workspace.yaml");return{membraneDirPath:e,configPath:t,payloadDirPath:n,workspaceDataFilePath:i}}c(ln,"getPaths");function Nr(){return ln().membraneDirPath}c(Nr,"getBasePath");const Ar={pat:{type:"string"},workspace:{type:"object"}},ds=new nr({schema:Ar,configName:"config",cwd:B.join(us.homedir(),".membrane")}),Or=c(s=>{ds.set("pat",s)},"setPat"),ps=c(()=>ds.get("pat"),"getPat");class ms{static{c(this,"AccountApiClient")}constructor(e=cn){this.apiBaseUrl=e}async request(e,t={}){const n=t.headers?t.headers instanceof Headers?new Headers(t.headers):new Headers(t.headers):new Headers;if(!n.has("Authorization")){const o=ps();if(!o)throw new Error("Personal Access Token not found.");n.set("Authorization",`Bearer ${o}`)}t.body&&!n.has("Content-Type")&&n.set("Content-Type","application/json");const i=await fetch(`${this.apiBaseUrl}${e}`,{...t,headers:n});if(!i.ok){const o=await i.text();throw new Error(`API request failed: ${i.status} ${i.statusText} - ${o}`)}if(i.status===204)return{};const r=await i.text();return JSON.parse(r)}get(e){return this.request(e,{method:"GET"})}post(e,t){return this.request(e,{method:"POST",body:JSON.stringify(t)})}put(e,t){return this.request(e,{method:"PUT",body:JSON.stringify(t)})}patch(e,t){return this.request(e,{method:"PATCH",body:JSON.stringify(t)})}delete(e){return this.request(e,{method:"DELETE"})}}const $r=c(s=>{const e=new ms(cn);return t=>e.get(t)},"createAccountApiFetcher");function St(s){return et.loadConfig(s)}c(St,"readProjectConfig");class Lr{static{c(this,"MembraneClientManager")}client=null;currentConfig=null;tokenExpiry=0;async generateAccessToken(e,t){return rn.sign({name:"Membrane Agent",isAdmin:!0,exp:Math.floor(Date.now()/1e3)+3600,iss:e},t,{algorithm:"HS512"})}isTokenValid(){return Date.now()<this.tokenExpiry}getCurrentConfig(e){const t=St(e);return!t?.workspaceKey||!t?.workspaceSecret?null:{workspaceKey:t.workspaceKey,workspaceSecret:t.workspaceSecret,apiUri:t.apiUri}}async createClient(e){const t=await this.generateAccessToken(e.workspaceKey,e.workspaceSecret);return this.tokenExpiry=Date.now()+36e5,this.currentConfig=e,new os({token:t,apiUri:e.apiUri})}async getClient(e=process.cwd()){const t=this.getCurrentConfig(e);if(!t)throw new Error("Unable to create MembraneClient: No workspace configuration found.");const n=!this.currentConfig||this.currentConfig.workspaceKey!==t.workspaceKey||this.currentConfig.workspaceSecret!==t.workspaceSecret||this.currentConfig.apiUri!==t.apiUri,i=!this.isTokenValid()||this.tokenExpiry-Date.now()<3e5;return(!this.client||n||i)&&(this.client=await this.createClient(t)),this.client}clearClient(){this.client=null,this.currentConfig=null,this.tokenExpiry=0}getCurrentConfigInfo(){return this.currentConfig}}const ue=new Lr;async function gs(s){const e=await ue.getClient(s);if(!e)throw new Error("No workspace configuration found");return(await e.get("org-workspace-id")).id}c(gs,"getWorkspaceId");class Dr extends hs{static{c(this,"WorkspaceNotifications")}constructor(e){super(),this.config=e}clientId;heartbeatInterval;isCleaningUp=!1;async connectToRemote(){await this.registerWithRemoteServer(),await this.startHeartbeatLoop()}async setState(e){this.emit(J.StateChanged,{state:e}),await this.emitRemote({status:e})}setConflicts(e){this.emit(J.ConflictsChanged,{conflicts:e})}setConfig(e){this.emit(J.ConfigChanged,{config:e})}setStats(e){this.emit(J.StatsChanged,{stats:e})}addLog(e){this.emit(J.LogAdded,{log:e})}setMcpStatus(e){this.emit(J.McpStatusChanged,{status:e})}async setMcpServers(e){this.emit(J.McpServersChanged,{servers:e}),await this.emitRemote({mcpServers:e.map(t=>({name:t.agentName,totalRequests:t.totalRequests}))})}async cleanup(){!this.clientId||this.isCleaningUp||(this.isCleaningUp=!0,this.heartbeatInterval&&(clearInterval(this.heartbeatInterval),this.heartbeatInterval=void 0),await this.withErrorHandling(async()=>{await(await ue.getClient(process.cwd())).delete(`/local-clients/${this.clientId}`)}),this.clientId=void 0)}async registerWithRemoteServer(){if(this.clientId)return;const e=await ue.getClient(process.cwd()),t=await this.withErrorHandling(async()=>await e.post("/local-clients",{hostname:us.hostname(),workingDirectory:process.cwd()}));t?.id?this.clientId=t.id:this.addLog({timestamp:new Date().toISOString(),message:"Failed to register with remote server",type:"error"})}async startHeartbeatLoop(){this.heartbeatInterval=setInterval(async()=>{this.clientId&&await this.sendHeartbeat()},this.config.heartbeatIntervalMs)}async sendHeartbeat(){this.clientId&&await this.withErrorHandling(async()=>{await(await ue.getClient(process.cwd())).post(`/local-clients/${this.clientId}/keep-alive`,{})})}async emitRemote(e){this.clientId&&await this.withErrorHandling(async()=>{await(await ue.getClient(process.cwd())).patch(`/local-clients/${this.clientId}`,e)})}async withErrorHandling(e){try{return await e()}catch(t){const n=t instanceof Error?t.message:String(t);return this.addLog({timestamp:new Date().toISOString(),message:`Failed to connect to remote: ${n}`,type:"error"}),null}}}const de=new Dr({heartbeatIntervalMs:15e3});class xr{static{c(this,"WorkspaceLogger")}_logs;workspaceNotifications;constructor(){this._logs=[],this.workspaceNotifications=de}get logs(){return[...this._logs]}get latestLogs(){return this._logs.slice(this._logs.length-5)}log(e,t="info"){const n={timestamp:new Date().toISOString(),message:e,type:t};this._logs.push(n),this._logs=this._logs.slice(0,1e3),this.workspaceNotifications.addLog(n)}info(e){this.log(e,"info")}success(e){this.log(e,"success")}warning(e){this.log(e,"warning")}error(e){this.log(e,"error")}clear(){this._logs=[]}}const N=new xr;class ys{static{c(this,"BaseWorkspaceElementsRepository")}constructor(e){this.cache=e}connectorsMapping;setConnectorsMapping(e){this.connectorsMapping=e}async getElements(){const e=[];try{const t=await this.getIntegrations();e.push(...t);const n=[M.Integration,M.Connector],i=Object.keys(ne),r=await Promise.all(i.filter(o=>!n.includes(o)).map(async o=>this.getElementsByType(o,t)));for(const o of r)e.push(...o)}catch(t){throw N.error(`Failed to get elements: ${t}`),t}return e}async putElement(e){let t=this.cache.get(e.id);e.data.id&&t?t=await this.updateElement(e,t,{elements:this.cache.getAll(),connectorsMapping:this.connectorsMapping}):t=await this.createElement(e,{elements:this.cache.getAll(),connectorsMapping:this.connectorsMapping})}async getElementsByType(e,t){return[]}async createElement(e,t){return e}async updateElement(e,t,n){return t}async getElement(e){}async getIntegrations(){return[]}async deleteElement(e,t){}}class Pr extends ys{static{c(this,"LocalWorkspaceElementsRepository")}basePath;constructor(e){super(e),this.basePath=bt(process.cwd())}async getElementsByType(e,t){const n=[],i=R.join(this.basePath,we[e].apiPath),r=await this.readElementsInDir(i);n.push(...r);for(const o of t){const a=R.join(this.basePath,we[M.Integration].apiPath,o.key,we[e].apiPath),l=await this.readElementsInDir(a);n.push(...l)}return n.length>0&&N.success(`[local] Fetched ${n.length} ${e}${n.length!==1?"s":""}`),n}async getElement(e){return this.readElement(e.path)}async createElement(e){return this.updateElement(e,e)}async updateElement(e,t){if(!e.data)throw new Error("Element must have data to write");const n=R.join(this.basePath,t.dirPath),i=R.join(this.basePath,t.path);return x.existsSync(n)||x.mkdirSync(n,{recursive:!0}),x.writeFileSync(i,Te.dump(e.data)),N.info(`[local] Written ${t.relativePath}`),t}async deleteElement(e){const t=R.join(this.basePath,e.path),n=R.join(this.basePath,e.dirPath);x.existsSync(t)&&x.rmSync(t,{force:!0}),this.pruneEmptyDir(n),N.info(`[local] Deleted ${e.relativePath}`)}async getIntegrations(){const e=R.join(this.basePath,we[M.Integration].apiPath);return this.readElementsInDir(e)}async readElement(e){if(!x.existsSync(e))return;const t=x.readFileSync(e,"utf8"),n=Te.load(t);if(n)return G.fromPathAndData(e,n)}async readElementsInDir(e){const t=[];if(!x.existsSync(e))return t;const n=x.readdirSync(e);if(n.length===0)return t;const i=n.map(async o=>{const a=R.join(e,o,"spec.yaml");return this.readElement(a)});return(await Promise.all(i)).filter(o=>o!=null)}pruneEmptyDir(e){try{if(!e.startsWith(this.basePath)||e===this.basePath||!x.existsSync(e)||x.readdirSync(e).length>0)return;x.rmdirSync(e),this.pruneEmptyDir(R.dirname(e))}catch(t){console.warn(`Failed to prune empty directory ${e}:`,t)}}}class Rr{static{c(this,"RequestThrottler")}requestTimes=[];maxRequestsPerSecond;windowSizeMs;semaphore=0;maxConcurrentRequests;constructor(e=80){this.maxRequestsPerSecond=e,this.windowSizeMs=1e3,this.maxConcurrentRequests=Math.min(e/4,20)}async withThrottle(e){await this.acquireSemaphore();try{return await this.waitIfNeeded(),this.recordRequest(),await e()}finally{this.releaseSemaphore()}}async waitIfNeeded(){for(this.cleanOldRequests();this.requestTimes.length>=this.maxRequestsPerSecond;){const t=this.requestTimes[0]+this.windowSizeMs-Date.now()+10;if(t>0)await new Promise(n=>setTimeout(n,t)),this.cleanOldRequests();else break}}recordRequest(){this.requestTimes.push(Date.now())}cleanOldRequests(){const e=Date.now()-this.windowSizeMs;this.requestTimes=this.requestTimes.filter(t=>t>e)}getRequestCount(){return this.cleanOldRequests(),this.requestTimes.length}async acquireSemaphore(){for(;this.semaphore>=this.maxConcurrentRequests;)await new Promise(e=>setTimeout(e,10));this.semaphore++}releaseSemaphore(){this.semaphore--}}const pe=new Rr;class Mr extends ys{static{c(this,"RemoteWorkspaceElementsRepository")}client;async getElementsByType(e,t){const n=await this.findAll(e);if(!G.canBeIntegrationSpecific(e))return n;for(const i of t){const r=i.key,o=i.data.id,a=await this.findAll(e,o?{integrationId:o}:{integrationKey:r});n.push(...a)}return n.length>0&&N.success(`[remote] Fetched ${n.length} ${e}${n.length!==1?"s":""}`),n}async getElement(e){const t=await this.getClient(),n=await pe.withThrottle(()=>t[ne[e.type].element](e.data.id).get());return G.fromData(e.type,n)}async createElement(e,t){const n=e.clean(),i=await this.getClient();this.transformElementForCreate(e,n,t);const r=await pe.withThrottle(()=>i[ne[e.type].elements].create(n)),o=G.fromData(e.type,r);return N.info(`[remote] Created ${o.id}`),o}async updateElement(e,t,n){if(!e.data.id)throw new Error("Element must have an id to update");const i=e.clean(),r=await this.getClient();this.transformElementForUpdate(e,i,n);const o=await pe.withThrottle(()=>r[ne[e.type].element](t.data.id).put(i)),a=G.fromData(t.type,o);return N.info(`[remote] Updated ${t.id}`),a}async deleteElement(e){if(!e.data.id)throw new Error("Element must have an id to delete");const t=await this.getClient();await pe.withThrottle(()=>t[ne[e.type].element](e.data.id).archive()),N.info(`[remote] Deleted ${e.id}`)}async getIntegrations(){const e=await this.getClient(),n=(await pe.withThrottle(()=>e.integrations.findAll())).map(i=>G.fromData(M.Integration,i));return n.length>0&&N.success(`[remote] Fetched ${n.length} integrations`),n}transformElementForCreate(e,t,n){if(e.integrationKey){const i=n.elements.find(r=>r.type===M.Integration&&r.key===e.integrationKey);if(i)t.integrationId=i.data.id;else throw new Error(`Dependency integration ${e.integrationKey} not found for ${e.id}`)}if(e.type===M.Integration){const i=n.connectorsMapping?.[t.connectorId];i&&(t.connectorId=i)}this.transformParentDependency(e,t,n)}transformElementForUpdate(e,t,n){if(e.type===M.Integration){const i=n.connectorsMapping?.[t.connectorId];i&&(t.connectorId=i)}if(e.integrationKey){t.integrationKey=e.integrationKey;const i=n.elements.find(r=>r.type===M.Integration&&r.key===e.integrationKey);if(i)t.integrationId=i.data.id;else throw new Error(`Dependency integration ${e.integrationKey} not found for ${e.id}`)}this.transformParentDependency(e,t,n)}transformParentDependency(e,t,n){if(!e.hasParent())return;const i=e.getParentKey();if(!i)return;const r=n.elements.find(o=>o.type===e.type&&o.key===e.key&&!o.hasParent());if(r)t[i]=r.data.id;else throw new Error(`Parent ${e.getParentKey()} not found for ${e.id}`)}async findAll(e,t={}){const n=await this.getClient();return(await pe.withThrottle(()=>n[ne[e].elements].findAll(t))).filter(r=>r.key).map(r=>G.fromData(e,r))}async getClient(){return this.client||(this.client=await ue.getClient(process.cwd())),this.client}}class ws{static{c(this,"ElementsCache")}elements=new Map;typeIndex=new Map;constructor(e){e&&this.addAll(e)}add(e){const t=e.id;this.elements.set(t,e),this.typeIndex.has(e.type)||this.typeIndex.set(e.type,new Set),this.typeIndex.get(e.type).add(t)}remove(e){const t=e.id,n=this.elements.delete(t);if(n){const i=this.typeIndex.get(e.type);i&&(i.delete(t),i.size===0&&this.typeIndex.delete(e.type))}return n}put(e){this.elements.has(e.id)&&this.remove(e),this.add(e)}get(e){return this.elements.get(e)}getElementsByType(e){const t=this.typeIndex.get(e);return t?Array.from(t).map(n=>this.elements.get(n)).filter(n=>n!==void 0):[]}getAll(){return Array.from(this.elements.values())??[]}getTypes(){return Array.from(this.typeIndex.keys())}addAll(e){for(const t of e)t&&this.add(t)}removeAll(e){for(const t of e)this.remove(t)}getElementIdsByType(e){return this.typeIndex.get(e)}clear(){this.elements.clear(),this.typeIndex.clear()}getAllIds(){return new Set(this.elements.keys())}}const un=Symbol.for("yaml.alias"),fn=Symbol.for("yaml.document"),be=Symbol.for("yaml.map"),bs=Symbol.for("yaml.pair"),fe=Symbol.for("yaml.scalar"),Me=Symbol.for("yaml.seq"),se=Symbol.for("yaml.node.type"),Se=c(s=>!!s&&typeof s=="object"&&s[se]===un,"isAlias"),Ne=c(s=>!!s&&typeof s=="object"&&s[se]===fn,"isDocument"),_e=c(s=>!!s&&typeof s=="object"&&s[se]===be,"isMap"),F=c(s=>!!s&&typeof s=="object"&&s[se]===bs,"isPair"),_=c(s=>!!s&&typeof s=="object"&&s[se]===fe,"isScalar$1"),Ke=c(s=>!!s&&typeof s=="object"&&s[se]===Me,"isSeq");function q(s){if(s&&typeof s=="object")switch(s[se]){case be:case Me:return!0}return!1}c(q,"isCollection$1");function U(s){if(s&&typeof s=="object")switch(s[se]){case un:case be:case fe:case Me:return!0}return!1}c(U,"isNode");const Ss=c(s=>(_(s)||q(s))&&!!s.anchor,"hasAnchor"),ee=Symbol("break visit"),Cs=Symbol("skip children"),he=Symbol("remove node");function Ae(s,e){const t=ks(e);Ne(s)?je(null,s.contents,t,Object.freeze([s]))===he&&(s.contents=null):je(null,s,t,Object.freeze([]))}c(Ae,"visit$1"),Ae.BREAK=ee,Ae.SKIP=Cs,Ae.REMOVE=he;function je(s,e,t,n){const i=Es(s,e,t,n);if(U(i)||F(i))return vs(s,n,i),je(s,i,t,n);if(typeof i!="symbol"){if(q(e)){n=Object.freeze(n.concat(e));for(let r=0;r<e.items.length;++r){const o=je(r,e.items[r],t,n);if(typeof o=="number")r=o-1;else{if(o===ee)return ee;o===he&&(e.items.splice(r,1),r-=1)}}}else if(F(e)){n=Object.freeze(n.concat(e));const r=je("key",e.key,t,n);if(r===ee)return ee;r===he&&(e.key=null);const o=je("value",e.value,t,n);if(o===ee)return ee;o===he&&(e.value=null)}}return i}c(je,"visit_");async function Ct(s,e){const t=ks(e);Ne(s)?await Fe(null,s.contents,t,Object.freeze([s]))===he&&(s.contents=null):await Fe(null,s,t,Object.freeze([]))}c(Ct,"visitAsync"),Ct.BREAK=ee,Ct.SKIP=Cs,Ct.REMOVE=he;async function Fe(s,e,t,n){const i=await Es(s,e,t,n);if(U(i)||F(i))return vs(s,n,i),Fe(s,i,t,n);if(typeof i!="symbol"){if(q(e)){n=Object.freeze(n.concat(e));for(let r=0;r<e.items.length;++r){const o=await Fe(r,e.items[r],t,n);if(typeof o=="number")r=o-1;else{if(o===ee)return ee;o===he&&(e.items.splice(r,1),r-=1)}}}else if(F(e)){n=Object.freeze(n.concat(e));const r=await Fe("key",e.key,t,n);if(r===ee)return ee;r===he&&(e.key=null);const o=await Fe("value",e.value,t,n);if(o===ee)return ee;o===he&&(e.value=null)}}return i}c(Fe,"visitAsync_");function ks(s){return typeof s=="object"&&(s.Collection||s.Node||s.Value)?Object.assign({Alias:s.Node,Map:s.Node,Scalar:s.Node,Seq:s.Node},s.Value&&{Map:s.Value,Scalar:s.Value,Seq:s.Value},s.Collection&&{Map:s.Collection,Seq:s.Collection},s):s}c(ks,"initVisitor");function Es(s,e,t,n){if(typeof t=="function")return t(s,e,n);if(_e(e))return t.Map?.(s,e,n);if(Ke(e))return t.Seq?.(s,e,n);if(F(e))return t.Pair?.(s,e,n);if(_(e))return t.Scalar?.(s,e,n);if(Se(e))return t.Alias?.(s,e,n)}c(Es,"callVisitor");function vs(s,e,t){const n=e[e.length-1];if(q(n))n.items[s]=t;else if(F(n))s==="key"?n.key=t:n.value=t;else if(Ne(n))n.contents=t;else{const i=Se(n)?"alias":"scalar";throw new Error(`Cannot replace node with ${i} parent`)}}c(vs,"replaceNode");const _r={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},Kr=c(s=>s.replace(/[!,[\]{}]/g,e=>_r[e]),"escapeTagName");class Z{static{c(this,"Directives")}constructor(e,t){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},Z.defaultYaml,e),this.tags=Object.assign({},Z.defaultTags,t)}clone(){const e=new Z(this.yaml,this.tags);return e.docStart=this.docStart,e}atDocument(){const e=new Z(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:Z.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},Z.defaultTags);break}return e}add(e,t){this.atNextDocument&&(this.yaml={explicit:Z.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},Z.defaultTags),this.atNextDocument=!1);const n=e.trim().split(/[ \t]+/),i=n.shift();switch(i){case"%TAG":{if(n.length!==2&&(t(0,"%TAG directive should contain exactly two parts"),n.length<2))return!1;const[r,o]=n;return this.tags[r]=o,!0}case"%YAML":{if(this.yaml.explicit=!0,n.length!==1)return t(0,"%YAML directive should contain exactly one part"),!1;const[r]=n;if(r==="1.1"||r==="1.2")return this.yaml.version=r,!0;{const o=/^\d+\.\d+$/.test(r);return t(6,`Unsupported YAML version ${r}`,o),!1}}default:return t(0,`Unknown directive ${i}`,!0),!1}}tagName(e,t){if(e==="!")return"!";if(e[0]!=="!")return t(`Not a valid tag: ${e}`),null;if(e[1]==="<"){const o=e.slice(2,-1);return o==="!"||o==="!!"?(t(`Verbatim tags aren't resolved, so ${e} is invalid.`),null):(e[e.length-1]!==">"&&t("Verbatim tags must end with a >"),o)}const[,n,i]=e.match(/^(.*!)([^!]*)$/s);i||t(`The ${e} tag has no suffix`);const r=this.tags[n];if(r)try{return r+decodeURIComponent(i)}catch(o){return t(String(o)),null}return n==="!"?e:(t(`Could not resolve tag: ${e}`),null)}tagString(e){for(const[t,n]of Object.entries(this.tags))if(e.startsWith(n))return t+Kr(e.substring(n.length));return e[0]==="!"?e:`!<${e}>`}toString(e){const t=this.yaml.explicit?[`%YAML ${this.yaml.version||"1.2"}`]:[],n=Object.entries(this.tags);let i;if(e&&n.length>0&&U(e.contents)){const r={};Ae(e.contents,(o,a)=>{U(a)&&a.tag&&(r[a.tag]=!0)}),i=Object.keys(r)}else i=[];for(const[r,o]of n)r==="!!"&&o==="tag:yaml.org,2002:"||(!e||i.some(a=>a.startsWith(o)))&&t.push(`%TAG ${r} ${o}`);return t.join(`
3
- `)}}Z.defaultYaml={explicit:!1,version:"1.2"},Z.defaultTags={"!!":"tag:yaml.org,2002:"};function Is(s){if(/[\x00-\x19\s,[\]{}]/.test(s)){const t=`Anchor must not contain whitespace or control characters: ${JSON.stringify(s)}`;throw new Error(t)}return!0}c(Is,"anchorIsValid");function Ts(s){const e=new Set;return Ae(s,{Value(t,n){n.anchor&&e.add(n.anchor)}}),e}c(Ts,"anchorNames");function Ns(s,e){for(let t=1;;++t){const n=`${s}${t}`;if(!e.has(n))return n}}c(Ns,"findNewAnchor");function jr(s,e){const t=[],n=new Map;let i=null;return{onAnchor:c(r=>{t.push(r),i??(i=Ts(s));const o=Ns(e,i);return i.add(o),o},"onAnchor"),setAnchors:c(()=>{for(const r of t){const o=n.get(r);if(typeof o=="object"&&o.anchor&&(_(o.node)||q(o.node)))o.node.anchor=o.anchor;else{const a=new Error("Failed to resolve repeated object (this should not happen)");throw a.source=r,a}}},"setAnchors"),sourceObjects:n}}c(jr,"createNodeAnchors");function Be(s,e,t,n){if(n&&typeof n=="object")if(Array.isArray(n))for(let i=0,r=n.length;i<r;++i){const o=n[i],a=Be(s,n,String(i),o);a===void 0?delete n[i]:a!==o&&(n[i]=a)}else if(n instanceof Map)for(const i of Array.from(n.keys())){const r=n.get(i),o=Be(s,n,i,r);o===void 0?n.delete(i):o!==r&&n.set(i,o)}else if(n instanceof Set)for(const i of Array.from(n)){const r=Be(s,n,i,i);r===void 0?n.delete(i):r!==i&&(n.delete(i),n.add(r))}else for(const[i,r]of Object.entries(n)){const o=Be(s,n,i,r);o===void 0?delete n[i]:o!==r&&(n[i]=o)}return s.call(e,t,n)}c(Be,"applyReviver");function ie(s,e,t){if(Array.isArray(s))return s.map((n,i)=>ie(n,String(i),t));if(s&&typeof s.toJSON=="function"){if(!t||!Ss(s))return s.toJSON(e,t);const n={aliasCount:0,count:1,res:void 0};t.anchors.set(s,n),t.onCreate=r=>{n.res=r,delete t.onCreate};const i=s.toJSON(e,t);return t.onCreate&&t.onCreate(i),i}return typeof s=="bigint"&&!t?.keep?Number(s):s}c(ie,"toJS");class hn{static{c(this,"NodeBase")}constructor(e){Object.defineProperty(this,se,{value:e})}clone(){const e=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return this.range&&(e.range=this.range.slice()),e}toJS(e,{mapAsMap:t,maxAliasCount:n,onAnchor:i,reviver:r}={}){if(!Ne(e))throw new TypeError("A document argument is required");const o={anchors:new Map,doc:e,keep:!0,mapAsMap:t===!0,mapKeyWarned:!1,maxAliasCount:typeof n=="number"?n:100},a=ie(this,"",o);if(typeof i=="function")for(const{count:l,res:u}of o.anchors.values())i(u,l);return typeof r=="function"?Be(r,{"":a},"",a):a}}class kt extends hn{static{c(this,"Alias")}constructor(e){super(un),this.source=e,Object.defineProperty(this,"tag",{set(){throw new Error("Alias nodes cannot have tags")}})}resolve(e,t){let n;t?.aliasResolveCache?n=t.aliasResolveCache:(n=[],Ae(e,{Node:c((r,o)=>{(Se(o)||Ss(o))&&n.push(o)},"Node")}),t&&(t.aliasResolveCache=n));let i;for(const r of n){if(r===this)break;r.anchor===this.source&&(i=r)}return i}toJSON(e,t){if(!t)return{source:this.source};const{anchors:n,doc:i,maxAliasCount:r}=t,o=this.resolve(i,t);if(!o){const l=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new ReferenceError(l)}let a=n.get(o);if(a||(ie(o,null,t),a=n.get(o)),!a||a.res===void 0){const l="This should not happen: Alias anchor was not resolved?";throw new ReferenceError(l)}if(r>=0&&(a.count+=1,a.aliasCount===0&&(a.aliasCount=Et(i,o,n)),a.count*a.aliasCount>r)){const l="Excessive alias count indicates a resource exhaustion attack";throw new ReferenceError(l)}return a.res}toString(e,t,n){const i=`*${this.source}`;if(e){if(Is(this.source),e.options.verifyAliasOrder&&!e.anchors.has(this.source)){const r=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new Error(r)}if(e.implicitKey)return`${i} `}return i}}function Et(s,e,t){if(Se(e)){const n=e.resolve(s),i=t&&n&&t.get(n);return i?i.count*i.aliasCount:0}else if(q(e)){let n=0;for(const i of e.items){const r=Et(s,i,t);r>n&&(n=r)}return n}else if(F(e)){const n=Et(s,e.key,t),i=Et(s,e.value,t);return Math.max(n,i)}return 1}c(Et,"getAliasCount");const As=c(s=>!s||typeof s!="function"&&typeof s!="object","isScalarValue");class D extends hn{static{c(this,"Scalar")}constructor(e){super(fe),this.value=e}toJSON(e,t){return t?.keep?this.value:ie(this.value,e,t)}toString(){return String(this.value)}}D.BLOCK_FOLDED="BLOCK_FOLDED",D.BLOCK_LITERAL="BLOCK_LITERAL",D.PLAIN="PLAIN",D.QUOTE_DOUBLE="QUOTE_DOUBLE",D.QUOTE_SINGLE="QUOTE_SINGLE";const Fr="tag:yaml.org,2002:";function Br(s,e,t){if(e){const n=t.filter(r=>r.tag===e),i=n.find(r=>!r.format)??n[0];if(!i)throw new Error(`Tag ${e} not found`);return i}return t.find(n=>n.identify?.(s)&&!n.format)}c(Br,"findTagObject");function tt(s,e,t){if(Ne(s)&&(s=s.contents),U(s))return s;if(F(s)){const d=t.schema[be].createNode?.(t.schema,null,t);return d.items.push(s),d}(s instanceof String||s instanceof Number||s instanceof Boolean||typeof BigInt<"u"&&s instanceof BigInt)&&(s=s.valueOf());const{aliasDuplicateObjects:n,onAnchor:i,onTagObj:r,schema:o,sourceObjects:a}=t;let l;if(n&&s&&typeof s=="object"){if(l=a.get(s),l)return l.anchor??(l.anchor=i(s)),new kt(l.anchor);l={anchor:null,node:null},a.set(s,l)}e?.startsWith("!!")&&(e=Fr+e.slice(2));let u=Br(s,e,o.tags);if(!u){if(s&&typeof s.toJSON=="function"&&(s=s.toJSON()),!s||typeof s!="object"){const d=new D(s);return l&&(l.node=d),d}u=s instanceof Map?o[be]:Symbol.iterator in Object(s)?o[Me]:o[be]}r&&(r(u),delete t.onTagObj);const p=u?.createNode?u.createNode(t.schema,s,t):typeof u?.nodeClass?.from=="function"?u.nodeClass.from(t.schema,s,t):new D(s);return e?p.tag=e:u.default||(p.tag=u.tag),l&&(l.node=p),p}c(tt,"createNode");function vt(s,e,t){let n=t;for(let i=e.length-1;i>=0;--i){const r=e[i];if(typeof r=="number"&&Number.isInteger(r)&&r>=0){const o=[];o[r]=n,n=o}else n=new Map([[r,n]])}return tt(n,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:c(()=>{throw new Error("This should not happen, please report a bug.")},"onAnchor"),schema:s,sourceObjects:new Map})}c(vt,"collectionFromPath");const nt=c(s=>s==null||typeof s=="object"&&!!s[Symbol.iterator]().next().done,"isEmptyPath");class Os extends hn{static{c(this,"Collection")}constructor(e,t){super(e),Object.defineProperty(this,"schema",{value:t,configurable:!0,enumerable:!1,writable:!0})}clone(e){const t=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return e&&(t.schema=e),t.items=t.items.map(n=>U(n)||F(n)?n.clone(e):n),this.range&&(t.range=this.range.slice()),t}addIn(e,t){if(nt(e))this.add(t);else{const[n,...i]=e,r=this.get(n,!0);if(q(r))r.addIn(i,t);else if(r===void 0&&this.schema)this.set(n,vt(this.schema,i,t));else throw new Error(`Expected YAML collection at ${n}. Remaining path: ${i}`)}}deleteIn(e){const[t,...n]=e;if(n.length===0)return this.delete(t);const i=this.get(t,!0);if(q(i))return i.deleteIn(n);throw new Error(`Expected YAML collection at ${t}. Remaining path: ${n}`)}getIn(e,t){const[n,...i]=e,r=this.get(n,!0);return i.length===0?!t&&_(r)?r.value:r:q(r)?r.getIn(i,t):void 0}hasAllNullValues(e){return this.items.every(t=>{if(!F(t))return!1;const n=t.value;return n==null||e&&_(n)&&n.value==null&&!n.commentBefore&&!n.comment&&!n.tag})}hasIn(e){const[t,...n]=e;if(n.length===0)return this.has(t);const i=this.get(t,!0);return q(i)?i.hasIn(n):!1}setIn(e,t){const[n,...i]=e;if(i.length===0)this.set(n,t);else{const r=this.get(n,!0);if(q(r))r.setIn(i,t);else if(r===void 0&&this.schema)this.set(n,vt(this.schema,i,t));else throw new Error(`Expected YAML collection at ${n}. Remaining path: ${i}`)}}}const qr=c(s=>s.replace(/^(?!$)(?: $)?/gm,"#"),"stringifyComment");function me(s,e){return/^\n+$/.test(s)?s.substring(1):e?s.replace(/^(?! *$)/gm,e):s}c(me,"indentComment");const Oe=c((s,e,t)=>s.endsWith(`
2
+ var Bi=Object.defineProperty;var c=(s,e)=>Bi(s,"name",{value:e,configurable:!0});import{jsx as m,jsxs as v,Fragment as en}from"react/jsx-runtime";import*as R from"node:path";import{resolve as qi,dirname as Ui,join as Ji}from"node:path";import{useInput as Pe,Box as b,Text as S,Newline as Wi,render as gt}from"ink";import Gi from"minimist";import{SWRConfig as Vi}from"swr";import Re,{createContext as ss,useState as j,useEffect as Ie,useContext as is,useMemo as Hi,useRef as Yi}from"react";import rs from"swr/immutable";import{MembraneConfigLoader as zi,WorkspaceElementType as M,WorkspaceElementSpecs as we,MembraneClient as os,setValueAtLocator as tn,extractMembraneErrorData as le,getDataCollectionCreateFields as nn,excludeWriteOnlyFieldsFromSchema as as,valueToSchema as yt,getRequiredFieldsFromSchema as Qi,getValueAtLocator as Xi,walkSchema as cs,makeDataLocationPath as ls,getDataCollectionUpdateFields as sn}from"@membranehq/sdk";import*as x from"node:fs";import{readFileSync as Zi}from"node:fs";import Te from"js-yaml";import er from"lodash/isEqual.js";import us from"os";import{EventEmitter as tr}from"events";import B from"path";import nr from"conf";import rn from"jsonwebtoken";import*as sr from"node:crypto";import{createHash as ir}from"node:crypto";import rr from"chokidar";import P from"fs";import or from"archiver";import ar from"form-data";import cr from"unzipper";import*as lr from"node:os";import{exec as ur}from"node:child_process";import{Spinner as fr,TextInput as hr,Select as dr}from"@inkjs/ui";import wt from"ink-spinner";import pr from"ink-text-input";import{fileURLToPath as mr}from"node:url";import k from"chalk";import{Command as gr}from"commander";import on from"axios";import{FastMCP as yr}from"fastmcp";import{z}from"zod";import an from"lodash/merge.js";import wr from"@anthropic-ai/sdk";import{faker as Ze}from"@faker-js/faker";import br from"lodash/template.js";import Sr from"lodash/templateSettings.js";class Ye{static{c(this,"ConfigLoader")}static instance=null;sdkLoader;constructor(){this.sdkLoader=new zi}static getInstance(){return Ye.instance||(Ye.instance=new Ye),Ye.instance}loadConfig(e){e&&e!==this.sdkLoader.getCwd()&&this.sdkLoader.setCwd(e);try{return this.sdkLoader.loadConfig({validate:!0})}catch(t){if(t.message?.includes("Failed to parse"))throw t;return null}}clearCache(){this.sdkLoader.clearCache()}updateConfig(e){return this.sdkLoader.updateConfig(e)}saveToFile(e){return this.sdkLoader.saveToFile(e)}isCacheDefined(){return this.sdkLoader.hasValidConfig()}}const et=Ye.getInstance(),se={[M.Integration]:{element:"integration",elements:"integrations",exportable:!1,exportCleanup:c(s=>({id:s.id,key:s.key,name:s.name,connectorId:s.connectorId,baseUri:s.baseUri,connectorVersion:s.connectorVersion}),"exportCleanup")},[M.Connector]:{element:"connector",elements:"connectors",exportable:!1},[M.Action]:{element:"action",elements:"actions",integrationSpecific:!0,exportCleanup:c(s=>(delete s.integration,s),"exportCleanup")},[M.AppDataSchema]:{element:"appDataSchema",elements:"appDataSchemas"},[M.AppEventType]:{element:"appEventType",elements:"appEventTypes"},[M.DataLinkTable]:{element:"dataLinkTable",elements:"dataLinkTables"},[M.DataSource]:{element:"dataSource",elements:"dataSources",parentKey:"universalDataSourceId",integrationSpecific:!0},[M.FieldMapping]:{element:"fieldMapping",elements:"fieldMappings",integrationSpecific:!0,parentKey:"universalFieldMappingId",exportCleanup:c(s=>(delete s.dataSourceId,s),"exportCleanup")},[M.Flow]:{element:"flow",elements:"flows",integrationSpecific:!0,parentKey:"universalFlowId"}};function Cr(s){return delete s.workspaceId,delete s.createdAt,delete s.updatedAt,delete s.revision,Object.keys(s).map(e=>{e.match(/universal.*Revision/g)&&delete s[e]}),s}c(Cr,"baseExportCleanup");const kr="membrane",Er=["**/node_modules/**","**/.git/**","**/.DS_Store","**/Thumbs.db","**/*.tmp","**/*.swp","**/*.swo","**/*.log","**/*.lock","**/.cache/**","**/.next/**","**/.vscode/**","**/.idea/**"];function bt(s){return R.join(s,kr)}c(bt,"getMembraneDir");const vr=["id","workspaceId","integrationId","createdAt","updatedAt","revision","archivedAt","baseUri","state"],fs=[M.Action,M.FieldMapping,M.Flow,M.DataSource];class G{static{c(this,"Element")}type;key;integrationKey;data;constructor(e,t,n,i){if(!i)throw new Error("Element must always contain data");if(!t)throw new Error("Element must have a key");this.type=e,this.key=t,this.data=i,this.integrationKey=n||G.extractIntegrationKey(i)}get id(){return G.makeId(this.type,this.key,this.integrationKey)}get dirPath(){const e=we[this.type].apiPath;if(this.integrationKey){const t=we[M.Integration].apiPath;return R.join(t,this.integrationKey,e,this.key)}return R.join(e,this.key)}get path(){return R.join(this.dirPath,"spec.yaml")}get relativePath(){return R.relative(bt(process.cwd()),this.path)}isEqual(e){if(this.id!==e.id)return!1;const t=this.clean(),n=e.clean();return er(t,n)}hasParent(){const e=this.getParentKey();return!!e&&!!this.data?.[e]}clean(){const e={...this.data};return vr.forEach(t=>{delete e[t]}),Object.keys(e).forEach(t=>{t.match(/universal.*Revision/)&&delete e[t]}),e}getParentKey(){let e="parentId";return se?.[this.type]?.parentKey&&(e=se?.[this.type]?.parentKey),e}static new(e,t,n,i){return new G(e,t,n,i)}static fromData(e,t){if(!t?.key)throw new Error(`Element missing key: ${JSON.stringify(t)}`);const n=this.extractIntegrationKey(t);return new G(e,t.key,n,t)}static fromPathAndData(e,t){const n=G.parsePath(e);if(!t)return;const i=t?.key||n?.key;return n?G.new(n.type,i,n.integrationKey,t):void 0}static fromElement(e){return new G(e.type,e.key,e.integrationKey,{...e.data})}static idFromPath(e){const t=G.parsePath(e);if(t)return G.makeId(t.type,t.key,t.integrationKey)}static makeId(e,t,n){return e===M.Integration?`${e}:${t}`:G.isIntegrationSpecific(e)?`${n||"universal"}:${e}:${t}`:`${e}:${t}`}static parsePath(e){const t=this.getRelativePath(e);if(!this.isElementFile(t))return;const n=Object.values(we).map(l=>l.apiPath).join("|"),i=new RegExp(`^(?<elementType>${n})/(?<elementKey>[^/]+)/spec\\.ya?ml$`),r=t.match(i);if(r?.groups){const{elementType:l,elementKey:u}=r.groups,p=this.getElementTypeFromPath(l);if(p)return{type:p,key:u}}const o=new RegExp(`^integrations/(?<integrationKey>[^/]+)/(?<elementType>${n})/(?<elementKey>[^/]+)/spec\\.ya?ml$`),a=t.match(o);if(a?.groups){const{integrationKey:l,elementType:u,elementKey:p}=a.groups,d=this.getElementTypeFromPath(u);if(d)return{type:d,key:p,integrationKey:l}}}static extractIntegrationKey(e){return e?.integrationKey||e?.integration?.key||e?.integration_key||void 0}static isElementFile(e){return e.endsWith(".yml")||e.endsWith(".yaml")}static getElementTypeFromPath(e){return Object.values(M).find(t=>we[t].apiPath===e)}static getRelativePath(e){return R.relative(bt(process.cwd()),e)}static isIntegrationSpecific(e){return fs.includes(e)}static canBeIntegrationSpecific(e){return fs.includes(e)}}const J={LogAdded:"logAdded",StateChanged:"stateChanged",StatsChanged:"statsChanged",ConflictsChanged:"conflictsChanged",McpStatusChanged:"mcpStatusChanged",McpServersChanged:"mcpServersChanged",ConfigChanged:"configChanged"};class hs extends tr{static{c(this,"TypedEventEmitter")}on(e,t){return super.on(e,t)}emit(e,...t){return super.emit(e,...t)}off(e,t){return super.off(e,t)}once(e,t){return super.once(e,t)}}const Ir="membrane",Tr="membrane.config.yml",cn="https://api.integration.app";function ln(){const s=process.cwd(),e=R.join(s,Ir),t=R.join(s,Tr),n=e,i=R.join(n,"workspace.yaml");return{membraneDirPath:e,configPath:t,payloadDirPath:n,workspaceDataFilePath:i}}c(ln,"getPaths");function Nr(){return ln().membraneDirPath}c(Nr,"getBasePath");const Ar={pat:{type:"string"},workspace:{type:"object"}},ds=new nr({schema:Ar,configName:"config",cwd:B.join(us.homedir(),".membrane")}),Or=c(s=>{ds.set("pat",s)},"setPat"),ps=c(()=>ds.get("pat"),"getPat");class ms{static{c(this,"AccountApiClient")}constructor(e=cn){this.apiBaseUrl=e}async request(e,t={}){const n=t.headers?t.headers instanceof Headers?new Headers(t.headers):new Headers(t.headers):new Headers;if(!n.has("Authorization")){const o=ps();if(!o)throw new Error("Personal Access Token not found.");n.set("Authorization",`Bearer ${o}`)}t.body&&!n.has("Content-Type")&&n.set("Content-Type","application/json");const i=await fetch(`${this.apiBaseUrl}${e}`,{...t,headers:n});if(!i.ok){const o=await i.text();throw new Error(`API request failed: ${i.status} ${i.statusText} - ${o}`)}if(i.status===204)return{};const r=await i.text();return JSON.parse(r)}get(e){return this.request(e,{method:"GET"})}post(e,t){return this.request(e,{method:"POST",body:JSON.stringify(t)})}put(e,t){return this.request(e,{method:"PUT",body:JSON.stringify(t)})}patch(e,t){return this.request(e,{method:"PATCH",body:JSON.stringify(t)})}delete(e){return this.request(e,{method:"DELETE"})}}const $r=c(s=>{const e=new ms(cn);return t=>e.get(t)},"createAccountApiFetcher");function St(s){return et.loadConfig(s)}c(St,"readProjectConfig");class Lr{static{c(this,"MembraneClientManager")}client=null;currentConfig=null;tokenExpiry=0;async generateAccessToken(e,t){return rn.sign({name:"Membrane Agent",isAdmin:!0,exp:Math.floor(Date.now()/1e3)+3600,iss:e},t,{algorithm:"HS512"})}isTokenValid(){return Date.now()<this.tokenExpiry}getCurrentConfig(e){const t=St(e);return!t?.workspaceKey||!t?.workspaceSecret?null:{workspaceKey:t.workspaceKey,workspaceSecret:t.workspaceSecret,apiUri:t.apiUri}}async createClient(e){const t=await this.generateAccessToken(e.workspaceKey,e.workspaceSecret);return this.tokenExpiry=Date.now()+36e5,this.currentConfig=e,new os({token:t,apiUri:e.apiUri})}async getClient(e=process.cwd()){const t=this.getCurrentConfig(e);if(!t)throw new Error("Unable to create MembraneClient: No workspace configuration found.");const n=!this.currentConfig||this.currentConfig.workspaceKey!==t.workspaceKey||this.currentConfig.workspaceSecret!==t.workspaceSecret||this.currentConfig.apiUri!==t.apiUri,i=!this.isTokenValid()||this.tokenExpiry-Date.now()<3e5;return(!this.client||n||i)&&(this.client=await this.createClient(t)),this.client}clearClient(){this.client=null,this.currentConfig=null,this.tokenExpiry=0}getCurrentConfigInfo(){return this.currentConfig}}const ue=new Lr;async function gs(s){const e=await ue.getClient(s);if(!e)throw new Error("No workspace configuration found");return(await e.get("org-workspace-id")).id}c(gs,"getWorkspaceId");class Dr extends hs{static{c(this,"WorkspaceNotifications")}constructor(e){super(),this.config=e}clientId;heartbeatInterval;isCleaningUp=!1;async connectToRemote(){await this.registerWithRemoteServer(),await this.startHeartbeatLoop()}async setState(e){this.emit(J.StateChanged,{state:e}),await this.emitRemote({status:e})}setConflicts(e){this.emit(J.ConflictsChanged,{conflicts:e})}setConfig(e){this.emit(J.ConfigChanged,{config:e})}setStats(e){this.emit(J.StatsChanged,{stats:e})}addLog(e){this.emit(J.LogAdded,{log:e})}setMcpStatus(e){this.emit(J.McpStatusChanged,{status:e})}async setMcpServers(e){this.emit(J.McpServersChanged,{servers:e}),await this.emitRemote({mcpServers:e.map(t=>({name:t.agentName,totalRequests:t.totalRequests}))})}async cleanup(){!this.clientId||this.isCleaningUp||(this.isCleaningUp=!0,this.heartbeatInterval&&(clearInterval(this.heartbeatInterval),this.heartbeatInterval=void 0),await this.withErrorHandling(async()=>{await(await ue.getClient(process.cwd())).delete(`/local-clients/${this.clientId}`)}),this.clientId=void 0)}async registerWithRemoteServer(){if(this.clientId)return;const e=await ue.getClient(process.cwd()),t=await this.withErrorHandling(async()=>await e.post("/local-clients",{hostname:us.hostname(),workingDirectory:process.cwd()}));t?.id?this.clientId=t.id:this.addLog({timestamp:new Date().toISOString(),message:"Failed to register with remote server",type:"error"})}async startHeartbeatLoop(){this.heartbeatInterval=setInterval(async()=>{this.clientId&&await this.sendHeartbeat()},this.config.heartbeatIntervalMs)}async sendHeartbeat(){this.clientId&&await this.withErrorHandling(async()=>{await(await ue.getClient(process.cwd())).post(`/local-clients/${this.clientId}/keep-alive`,{})})}async emitRemote(e){this.clientId&&await this.withErrorHandling(async()=>{await(await ue.getClient(process.cwd())).patch(`/local-clients/${this.clientId}`,e)})}async withErrorHandling(e){try{return await e()}catch(t){const n=t instanceof Error?t.message:String(t);return this.addLog({timestamp:new Date().toISOString(),message:`Failed to connect to remote: ${n}`,type:"error"}),null}}}const de=new Dr({heartbeatIntervalMs:15e3});class xr{static{c(this,"WorkspaceLogger")}_logs;workspaceNotifications;constructor(){this._logs=[],this.workspaceNotifications=de}get logs(){return[...this._logs]}get latestLogs(){return this._logs.slice(this._logs.length-5)}log(e,t="info"){const n={timestamp:new Date().toISOString(),message:e,type:t};this._logs.push(n),this._logs=this._logs.slice(0,1e3),this.workspaceNotifications.addLog(n)}info(e){this.log(e,"info")}success(e){this.log(e,"success")}warning(e){this.log(e,"warning")}error(e){this.log(e,"error")}clear(){this._logs=[]}}const N=new xr;class ys{static{c(this,"BaseWorkspaceElementsRepository")}constructor(e){this.cache=e}connectorsMapping;setConnectorsMapping(e){this.connectorsMapping=e}async getElements(){const e=[];try{const t=await this.getIntegrations();e.push(...t);const n=[M.Integration,M.Connector],i=Object.keys(se),r=await Promise.all(i.filter(o=>!n.includes(o)).map(async o=>this.getElementsByType(o,t)));for(const o of r)e.push(...o)}catch(t){throw N.error(`Failed to get elements: ${t}`),t}return e}async putElement(e){let t=this.cache.get(e.id);return e.data.id&&t?t=await this.updateElement(e,t,{elements:this.cache.getAll(),connectorsMapping:this.connectorsMapping}):t=await this.createElement(e,{elements:this.cache.getAll(),connectorsMapping:this.connectorsMapping}),t}async getElementsByType(e,t){return[]}async createElement(e,t){return e}async updateElement(e,t,n){return t}async getElement(e){}async getIntegrations(){return[]}async deleteElement(e,t){}}class Pr extends ys{static{c(this,"LocalWorkspaceElementsRepository")}basePath;constructor(e){super(e),this.basePath=bt(process.cwd())}async getElementsByType(e,t){const n=[],i=R.join(this.basePath,we[e].apiPath),r=await this.readElementsInDir(i);n.push(...r);for(const o of t){const a=R.join(this.basePath,we[M.Integration].apiPath,o.key,we[e].apiPath),l=await this.readElementsInDir(a);n.push(...l)}return n.length>0&&N.success(`[local] Fetched ${n.length} ${e}${n.length!==1?"s":""}`),n}async getElement(e){return this.readElement(e.path)}async createElement(e){return this.updateElement(e,e)}async updateElement(e,t){if(!e.data)throw new Error("Element must have data to write");const n=R.join(this.basePath,t.dirPath),i=R.join(this.basePath,t.path);return x.existsSync(n)||x.mkdirSync(n,{recursive:!0}),x.writeFileSync(i,Te.dump(e.data)),N.info(`[local] Written ${t.relativePath}`),t}async deleteElement(e){const t=R.join(this.basePath,e.path),n=R.join(this.basePath,e.dirPath);x.existsSync(t)&&x.rmSync(t,{force:!0}),this.pruneEmptyDir(n),N.info(`[local] Deleted ${e.relativePath}`)}async getIntegrations(){const e=R.join(this.basePath,we[M.Integration].apiPath);return this.readElementsInDir(e)}async readElement(e){if(!x.existsSync(e))return;const t=x.readFileSync(e,"utf8"),n=Te.load(t);if(n)return G.fromPathAndData(e,n)}async readElementsInDir(e){const t=[];if(!x.existsSync(e))return t;const n=x.readdirSync(e);if(n.length===0)return t;const i=n.map(async o=>{const a=R.join(e,o,"spec.yaml");return this.readElement(a)});return(await Promise.all(i)).filter(o=>o!=null)}pruneEmptyDir(e){try{if(!e.startsWith(this.basePath)||e===this.basePath||!x.existsSync(e)||x.readdirSync(e).length>0)return;x.rmdirSync(e),this.pruneEmptyDir(R.dirname(e))}catch(t){console.warn(`Failed to prune empty directory ${e}:`,t)}}}class Rr{static{c(this,"RequestThrottler")}requestTimes=[];maxRequestsPerSecond;windowSizeMs;semaphore=0;maxConcurrentRequests;constructor(e=80){this.maxRequestsPerSecond=e,this.windowSizeMs=1e3,this.maxConcurrentRequests=Math.min(e/4,20)}async withThrottle(e){await this.acquireSemaphore();try{return await this.waitIfNeeded(),this.recordRequest(),await e()}finally{this.releaseSemaphore()}}async waitIfNeeded(){for(this.cleanOldRequests();this.requestTimes.length>=this.maxRequestsPerSecond;){const t=this.requestTimes[0]+this.windowSizeMs-Date.now()+10;if(t>0)await new Promise(n=>setTimeout(n,t)),this.cleanOldRequests();else break}}recordRequest(){this.requestTimes.push(Date.now())}cleanOldRequests(){const e=Date.now()-this.windowSizeMs;this.requestTimes=this.requestTimes.filter(t=>t>e)}getRequestCount(){return this.cleanOldRequests(),this.requestTimes.length}async acquireSemaphore(){for(;this.semaphore>=this.maxConcurrentRequests;)await new Promise(e=>setTimeout(e,10));this.semaphore++}releaseSemaphore(){this.semaphore--}}const pe=new Rr;class Mr extends ys{static{c(this,"RemoteWorkspaceElementsRepository")}client;async getElementsByType(e,t){const n=await this.findAll(e);if(!G.canBeIntegrationSpecific(e))return n;for(const i of t){const r=i.key,o=i.data.id,a=await this.findAll(e,o?{integrationId:o}:{integrationKey:r});n.push(...a)}return n.length>0&&N.success(`[remote] Fetched ${n.length} ${e}${n.length!==1?"s":""}`),n}async getElement(e){const t=await this.getClient(),n=await pe.withThrottle(()=>t[se[e.type].element](e.data.id).get());return G.fromData(e.type,n)}async createElement(e,t){const n=e.clean(),i=await this.getClient();this.transformElementForCreate(e,n,t);const r=await pe.withThrottle(()=>i[se[e.type].elements].create(n)),o=G.fromData(e.type,r);return N.info(`[remote] Created ${o.id}`),o}async updateElement(e,t,n){if(!e.data.id)throw new Error("Element must have an id to update");const i=e.clean(),r=await this.getClient();this.transformElementForUpdate(e,i,n);const o=await pe.withThrottle(()=>r[se[e.type].element](t.data.id).put(i)),a=G.fromData(t.type,o);return N.info(`[remote] Updated ${t.id}`),a}async deleteElement(e){if(!e.data.id)throw new Error("Element must have an id to delete");const t=await this.getClient();await pe.withThrottle(()=>t[se[e.type].element](e.data.id).archive()),N.info(`[remote] Deleted ${e.id}`)}async getIntegrations(){const e=await this.getClient(),n=(await pe.withThrottle(()=>e.integrations.findAll())).map(i=>G.fromData(M.Integration,i));return n.length>0&&N.success(`[remote] Fetched ${n.length} integrations`),n}transformElementForCreate(e,t,n){if(e.integrationKey){const i=n.elements.find(r=>r.type===M.Integration&&r.key===e.integrationKey);if(i)t.integrationId=i.data.id;else throw new Error(`Dependency integration ${e.integrationKey} not found for ${e.id}`)}if(e.type===M.Integration){const i=n.connectorsMapping?.[t.connectorId];i&&(t.connectorId=i)}this.transformParentDependency(e,t,n)}transformElementForUpdate(e,t,n){if(e.type===M.Integration){const i=n.connectorsMapping?.[t.connectorId];i&&(t.connectorId=i)}if(e.integrationKey){t.integrationKey=e.integrationKey;const i=n.elements.find(r=>r.type===M.Integration&&r.key===e.integrationKey);if(i)t.integrationId=i.data.id;else throw new Error(`Dependency integration ${e.integrationKey} not found for ${e.id}`)}this.transformParentDependency(e,t,n)}transformParentDependency(e,t,n){if(!e.hasParent())return;const i=e.getParentKey();if(!i)return;const r=n.elements.find(o=>o.type===e.type&&o.key===e.key&&!o.hasParent());if(r)t[i]=r.data.id;else throw new Error(`Parent ${e.getParentKey()} not found for ${e.id}`)}async findAll(e,t={}){const n=await this.getClient();return(await pe.withThrottle(()=>n[se[e].elements].findAll(t))).filter(r=>r.key).map(r=>G.fromData(e,r))}async getClient(){return this.client||(this.client=await ue.getClient(process.cwd())),this.client}}class ws{static{c(this,"ElementsCache")}elements=new Map;typeIndex=new Map;constructor(e){e&&this.addAll(e)}add(e){const t=e.id;this.elements.set(t,e),this.typeIndex.has(e.type)||this.typeIndex.set(e.type,new Set),this.typeIndex.get(e.type).add(t)}remove(e){const t=e.id,n=this.elements.delete(t);if(n){const i=this.typeIndex.get(e.type);i&&(i.delete(t),i.size===0&&this.typeIndex.delete(e.type))}return n}put(e){this.elements.has(e.id)&&this.remove(e),this.add(e)}get(e){return this.elements.get(e)}getElementsByType(e){const t=this.typeIndex.get(e);return t?Array.from(t).map(n=>this.elements.get(n)).filter(n=>n!==void 0):[]}getAll(){return Array.from(this.elements.values())??[]}getTypes(){return Array.from(this.typeIndex.keys())}addAll(e){for(const t of e)t&&this.add(t)}removeAll(e){for(const t of e)this.remove(t)}getElementIdsByType(e){return this.typeIndex.get(e)}clear(){this.elements.clear(),this.typeIndex.clear()}getAllIds(){return new Set(this.elements.keys())}}const un=Symbol.for("yaml.alias"),fn=Symbol.for("yaml.document"),be=Symbol.for("yaml.map"),bs=Symbol.for("yaml.pair"),fe=Symbol.for("yaml.scalar"),Me=Symbol.for("yaml.seq"),ie=Symbol.for("yaml.node.type"),Se=c(s=>!!s&&typeof s=="object"&&s[ie]===un,"isAlias"),Ne=c(s=>!!s&&typeof s=="object"&&s[ie]===fn,"isDocument"),_e=c(s=>!!s&&typeof s=="object"&&s[ie]===be,"isMap"),F=c(s=>!!s&&typeof s=="object"&&s[ie]===bs,"isPair"),_=c(s=>!!s&&typeof s=="object"&&s[ie]===fe,"isScalar$1"),Ke=c(s=>!!s&&typeof s=="object"&&s[ie]===Me,"isSeq");function q(s){if(s&&typeof s=="object")switch(s[ie]){case be:case Me:return!0}return!1}c(q,"isCollection$1");function U(s){if(s&&typeof s=="object")switch(s[ie]){case un:case be:case fe:case Me:return!0}return!1}c(U,"isNode");const Ss=c(s=>(_(s)||q(s))&&!!s.anchor,"hasAnchor"),ee=Symbol("break visit"),Cs=Symbol("skip children"),he=Symbol("remove node");function Ae(s,e){const t=ks(e);Ne(s)?je(null,s.contents,t,Object.freeze([s]))===he&&(s.contents=null):je(null,s,t,Object.freeze([]))}c(Ae,"visit$1"),Ae.BREAK=ee,Ae.SKIP=Cs,Ae.REMOVE=he;function je(s,e,t,n){const i=Es(s,e,t,n);if(U(i)||F(i))return vs(s,n,i),je(s,i,t,n);if(typeof i!="symbol"){if(q(e)){n=Object.freeze(n.concat(e));for(let r=0;r<e.items.length;++r){const o=je(r,e.items[r],t,n);if(typeof o=="number")r=o-1;else{if(o===ee)return ee;o===he&&(e.items.splice(r,1),r-=1)}}}else if(F(e)){n=Object.freeze(n.concat(e));const r=je("key",e.key,t,n);if(r===ee)return ee;r===he&&(e.key=null);const o=je("value",e.value,t,n);if(o===ee)return ee;o===he&&(e.value=null)}}return i}c(je,"visit_");async function Ct(s,e){const t=ks(e);Ne(s)?await Fe(null,s.contents,t,Object.freeze([s]))===he&&(s.contents=null):await Fe(null,s,t,Object.freeze([]))}c(Ct,"visitAsync"),Ct.BREAK=ee,Ct.SKIP=Cs,Ct.REMOVE=he;async function Fe(s,e,t,n){const i=await Es(s,e,t,n);if(U(i)||F(i))return vs(s,n,i),Fe(s,i,t,n);if(typeof i!="symbol"){if(q(e)){n=Object.freeze(n.concat(e));for(let r=0;r<e.items.length;++r){const o=await Fe(r,e.items[r],t,n);if(typeof o=="number")r=o-1;else{if(o===ee)return ee;o===he&&(e.items.splice(r,1),r-=1)}}}else if(F(e)){n=Object.freeze(n.concat(e));const r=await Fe("key",e.key,t,n);if(r===ee)return ee;r===he&&(e.key=null);const o=await Fe("value",e.value,t,n);if(o===ee)return ee;o===he&&(e.value=null)}}return i}c(Fe,"visitAsync_");function ks(s){return typeof s=="object"&&(s.Collection||s.Node||s.Value)?Object.assign({Alias:s.Node,Map:s.Node,Scalar:s.Node,Seq:s.Node},s.Value&&{Map:s.Value,Scalar:s.Value,Seq:s.Value},s.Collection&&{Map:s.Collection,Seq:s.Collection},s):s}c(ks,"initVisitor");function Es(s,e,t,n){if(typeof t=="function")return t(s,e,n);if(_e(e))return t.Map?.(s,e,n);if(Ke(e))return t.Seq?.(s,e,n);if(F(e))return t.Pair?.(s,e,n);if(_(e))return t.Scalar?.(s,e,n);if(Se(e))return t.Alias?.(s,e,n)}c(Es,"callVisitor");function vs(s,e,t){const n=e[e.length-1];if(q(n))n.items[s]=t;else if(F(n))s==="key"?n.key=t:n.value=t;else if(Ne(n))n.contents=t;else{const i=Se(n)?"alias":"scalar";throw new Error(`Cannot replace node with ${i} parent`)}}c(vs,"replaceNode");const _r={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},Kr=c(s=>s.replace(/[!,[\]{}]/g,e=>_r[e]),"escapeTagName");class Z{static{c(this,"Directives")}constructor(e,t){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},Z.defaultYaml,e),this.tags=Object.assign({},Z.defaultTags,t)}clone(){const e=new Z(this.yaml,this.tags);return e.docStart=this.docStart,e}atDocument(){const e=new Z(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:Z.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},Z.defaultTags);break}return e}add(e,t){this.atNextDocument&&(this.yaml={explicit:Z.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},Z.defaultTags),this.atNextDocument=!1);const n=e.trim().split(/[ \t]+/),i=n.shift();switch(i){case"%TAG":{if(n.length!==2&&(t(0,"%TAG directive should contain exactly two parts"),n.length<2))return!1;const[r,o]=n;return this.tags[r]=o,!0}case"%YAML":{if(this.yaml.explicit=!0,n.length!==1)return t(0,"%YAML directive should contain exactly one part"),!1;const[r]=n;if(r==="1.1"||r==="1.2")return this.yaml.version=r,!0;{const o=/^\d+\.\d+$/.test(r);return t(6,`Unsupported YAML version ${r}`,o),!1}}default:return t(0,`Unknown directive ${i}`,!0),!1}}tagName(e,t){if(e==="!")return"!";if(e[0]!=="!")return t(`Not a valid tag: ${e}`),null;if(e[1]==="<"){const o=e.slice(2,-1);return o==="!"||o==="!!"?(t(`Verbatim tags aren't resolved, so ${e} is invalid.`),null):(e[e.length-1]!==">"&&t("Verbatim tags must end with a >"),o)}const[,n,i]=e.match(/^(.*!)([^!]*)$/s);i||t(`The ${e} tag has no suffix`);const r=this.tags[n];if(r)try{return r+decodeURIComponent(i)}catch(o){return t(String(o)),null}return n==="!"?e:(t(`Could not resolve tag: ${e}`),null)}tagString(e){for(const[t,n]of Object.entries(this.tags))if(e.startsWith(n))return t+Kr(e.substring(n.length));return e[0]==="!"?e:`!<${e}>`}toString(e){const t=this.yaml.explicit?[`%YAML ${this.yaml.version||"1.2"}`]:[],n=Object.entries(this.tags);let i;if(e&&n.length>0&&U(e.contents)){const r={};Ae(e.contents,(o,a)=>{U(a)&&a.tag&&(r[a.tag]=!0)}),i=Object.keys(r)}else i=[];for(const[r,o]of n)r==="!!"&&o==="tag:yaml.org,2002:"||(!e||i.some(a=>a.startsWith(o)))&&t.push(`%TAG ${r} ${o}`);return t.join(`
3
+ `)}}Z.defaultYaml={explicit:!1,version:"1.2"},Z.defaultTags={"!!":"tag:yaml.org,2002:"};function Is(s){if(/[\x00-\x19\s,[\]{}]/.test(s)){const t=`Anchor must not contain whitespace or control characters: ${JSON.stringify(s)}`;throw new Error(t)}return!0}c(Is,"anchorIsValid");function Ts(s){const e=new Set;return Ae(s,{Value(t,n){n.anchor&&e.add(n.anchor)}}),e}c(Ts,"anchorNames");function Ns(s,e){for(let t=1;;++t){const n=`${s}${t}`;if(!e.has(n))return n}}c(Ns,"findNewAnchor");function jr(s,e){const t=[],n=new Map;let i=null;return{onAnchor:c(r=>{t.push(r),i??(i=Ts(s));const o=Ns(e,i);return i.add(o),o},"onAnchor"),setAnchors:c(()=>{for(const r of t){const o=n.get(r);if(typeof o=="object"&&o.anchor&&(_(o.node)||q(o.node)))o.node.anchor=o.anchor;else{const a=new Error("Failed to resolve repeated object (this should not happen)");throw a.source=r,a}}},"setAnchors"),sourceObjects:n}}c(jr,"createNodeAnchors");function Be(s,e,t,n){if(n&&typeof n=="object")if(Array.isArray(n))for(let i=0,r=n.length;i<r;++i){const o=n[i],a=Be(s,n,String(i),o);a===void 0?delete n[i]:a!==o&&(n[i]=a)}else if(n instanceof Map)for(const i of Array.from(n.keys())){const r=n.get(i),o=Be(s,n,i,r);o===void 0?n.delete(i):o!==r&&n.set(i,o)}else if(n instanceof Set)for(const i of Array.from(n)){const r=Be(s,n,i,i);r===void 0?n.delete(i):r!==i&&(n.delete(i),n.add(r))}else for(const[i,r]of Object.entries(n)){const o=Be(s,n,i,r);o===void 0?delete n[i]:o!==r&&(n[i]=o)}return s.call(e,t,n)}c(Be,"applyReviver");function re(s,e,t){if(Array.isArray(s))return s.map((n,i)=>re(n,String(i),t));if(s&&typeof s.toJSON=="function"){if(!t||!Ss(s))return s.toJSON(e,t);const n={aliasCount:0,count:1,res:void 0};t.anchors.set(s,n),t.onCreate=r=>{n.res=r,delete t.onCreate};const i=s.toJSON(e,t);return t.onCreate&&t.onCreate(i),i}return typeof s=="bigint"&&!t?.keep?Number(s):s}c(re,"toJS");class hn{static{c(this,"NodeBase")}constructor(e){Object.defineProperty(this,ie,{value:e})}clone(){const e=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return this.range&&(e.range=this.range.slice()),e}toJS(e,{mapAsMap:t,maxAliasCount:n,onAnchor:i,reviver:r}={}){if(!Ne(e))throw new TypeError("A document argument is required");const o={anchors:new Map,doc:e,keep:!0,mapAsMap:t===!0,mapKeyWarned:!1,maxAliasCount:typeof n=="number"?n:100},a=re(this,"",o);if(typeof i=="function")for(const{count:l,res:u}of o.anchors.values())i(u,l);return typeof r=="function"?Be(r,{"":a},"",a):a}}class kt extends hn{static{c(this,"Alias")}constructor(e){super(un),this.source=e,Object.defineProperty(this,"tag",{set(){throw new Error("Alias nodes cannot have tags")}})}resolve(e,t){let n;t?.aliasResolveCache?n=t.aliasResolveCache:(n=[],Ae(e,{Node:c((r,o)=>{(Se(o)||Ss(o))&&n.push(o)},"Node")}),t&&(t.aliasResolveCache=n));let i;for(const r of n){if(r===this)break;r.anchor===this.source&&(i=r)}return i}toJSON(e,t){if(!t)return{source:this.source};const{anchors:n,doc:i,maxAliasCount:r}=t,o=this.resolve(i,t);if(!o){const l=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new ReferenceError(l)}let a=n.get(o);if(a||(re(o,null,t),a=n.get(o)),!a||a.res===void 0){const l="This should not happen: Alias anchor was not resolved?";throw new ReferenceError(l)}if(r>=0&&(a.count+=1,a.aliasCount===0&&(a.aliasCount=Et(i,o,n)),a.count*a.aliasCount>r)){const l="Excessive alias count indicates a resource exhaustion attack";throw new ReferenceError(l)}return a.res}toString(e,t,n){const i=`*${this.source}`;if(e){if(Is(this.source),e.options.verifyAliasOrder&&!e.anchors.has(this.source)){const r=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new Error(r)}if(e.implicitKey)return`${i} `}return i}}function Et(s,e,t){if(Se(e)){const n=e.resolve(s),i=t&&n&&t.get(n);return i?i.count*i.aliasCount:0}else if(q(e)){let n=0;for(const i of e.items){const r=Et(s,i,t);r>n&&(n=r)}return n}else if(F(e)){const n=Et(s,e.key,t),i=Et(s,e.value,t);return Math.max(n,i)}return 1}c(Et,"getAliasCount");const As=c(s=>!s||typeof s!="function"&&typeof s!="object","isScalarValue");class D extends hn{static{c(this,"Scalar")}constructor(e){super(fe),this.value=e}toJSON(e,t){return t?.keep?this.value:re(this.value,e,t)}toString(){return String(this.value)}}D.BLOCK_FOLDED="BLOCK_FOLDED",D.BLOCK_LITERAL="BLOCK_LITERAL",D.PLAIN="PLAIN",D.QUOTE_DOUBLE="QUOTE_DOUBLE",D.QUOTE_SINGLE="QUOTE_SINGLE";const Fr="tag:yaml.org,2002:";function Br(s,e,t){if(e){const n=t.filter(r=>r.tag===e),i=n.find(r=>!r.format)??n[0];if(!i)throw new Error(`Tag ${e} not found`);return i}return t.find(n=>n.identify?.(s)&&!n.format)}c(Br,"findTagObject");function tt(s,e,t){if(Ne(s)&&(s=s.contents),U(s))return s;if(F(s)){const d=t.schema[be].createNode?.(t.schema,null,t);return d.items.push(s),d}(s instanceof String||s instanceof Number||s instanceof Boolean||typeof BigInt<"u"&&s instanceof BigInt)&&(s=s.valueOf());const{aliasDuplicateObjects:n,onAnchor:i,onTagObj:r,schema:o,sourceObjects:a}=t;let l;if(n&&s&&typeof s=="object"){if(l=a.get(s),l)return l.anchor??(l.anchor=i(s)),new kt(l.anchor);l={anchor:null,node:null},a.set(s,l)}e?.startsWith("!!")&&(e=Fr+e.slice(2));let u=Br(s,e,o.tags);if(!u){if(s&&typeof s.toJSON=="function"&&(s=s.toJSON()),!s||typeof s!="object"){const d=new D(s);return l&&(l.node=d),d}u=s instanceof Map?o[be]:Symbol.iterator in Object(s)?o[Me]:o[be]}r&&(r(u),delete t.onTagObj);const p=u?.createNode?u.createNode(t.schema,s,t):typeof u?.nodeClass?.from=="function"?u.nodeClass.from(t.schema,s,t):new D(s);return e?p.tag=e:u.default||(p.tag=u.tag),l&&(l.node=p),p}c(tt,"createNode");function vt(s,e,t){let n=t;for(let i=e.length-1;i>=0;--i){const r=e[i];if(typeof r=="number"&&Number.isInteger(r)&&r>=0){const o=[];o[r]=n,n=o}else n=new Map([[r,n]])}return tt(n,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:c(()=>{throw new Error("This should not happen, please report a bug.")},"onAnchor"),schema:s,sourceObjects:new Map})}c(vt,"collectionFromPath");const nt=c(s=>s==null||typeof s=="object"&&!!s[Symbol.iterator]().next().done,"isEmptyPath");class Os extends hn{static{c(this,"Collection")}constructor(e,t){super(e),Object.defineProperty(this,"schema",{value:t,configurable:!0,enumerable:!1,writable:!0})}clone(e){const t=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return e&&(t.schema=e),t.items=t.items.map(n=>U(n)||F(n)?n.clone(e):n),this.range&&(t.range=this.range.slice()),t}addIn(e,t){if(nt(e))this.add(t);else{const[n,...i]=e,r=this.get(n,!0);if(q(r))r.addIn(i,t);else if(r===void 0&&this.schema)this.set(n,vt(this.schema,i,t));else throw new Error(`Expected YAML collection at ${n}. Remaining path: ${i}`)}}deleteIn(e){const[t,...n]=e;if(n.length===0)return this.delete(t);const i=this.get(t,!0);if(q(i))return i.deleteIn(n);throw new Error(`Expected YAML collection at ${t}. Remaining path: ${n}`)}getIn(e,t){const[n,...i]=e,r=this.get(n,!0);return i.length===0?!t&&_(r)?r.value:r:q(r)?r.getIn(i,t):void 0}hasAllNullValues(e){return this.items.every(t=>{if(!F(t))return!1;const n=t.value;return n==null||e&&_(n)&&n.value==null&&!n.commentBefore&&!n.comment&&!n.tag})}hasIn(e){const[t,...n]=e;if(n.length===0)return this.has(t);const i=this.get(t,!0);return q(i)?i.hasIn(n):!1}setIn(e,t){const[n,...i]=e;if(i.length===0)this.set(n,t);else{const r=this.get(n,!0);if(q(r))r.setIn(i,t);else if(r===void 0&&this.schema)this.set(n,vt(this.schema,i,t));else throw new Error(`Expected YAML collection at ${n}. Remaining path: ${i}`)}}}const qr=c(s=>s.replace(/^(?!$)(?: $)?/gm,"#"),"stringifyComment");function me(s,e){return/^\n+$/.test(s)?s.substring(1):e?s.replace(/^(?! *$)/gm,e):s}c(me,"indentComment");const Oe=c((s,e,t)=>s.endsWith(`
4
4
  `)?me(t,e):t.includes(`
5
5
  `)?`
6
6
  `+me(t,e):(s.endsWith(" ")?"":" ")+t,"lineComment"),$s="flow",dn="block",It="quoted";function Tt(s,e,t="flow",{indentAtStart:n,lineWidth:i=80,minContentWidth:r=20,onFold:o,onOverflow:a}={}){if(!i||i<0)return s;i<r&&(r=0);const l=Math.max(1+r,1+i-e.length);if(s.length<=l)return s;const u=[],p={};let d=i-e.length;typeof n=="number"&&(n>i-Math.max(2,r)?u.push(0):d=i-n);let h,g,w=!1,f=-1,y=-1,C=-1;t===dn&&(f=Ls(s,f,e.length),f!==-1&&(d=f+l));for(let A;A=s[f+=1];){if(t===It&&A==="\\"){switch(y=f,s[f+1]){case"x":f+=3;break;case"u":f+=5;break;case"U":f+=9;break;default:f+=1}C=f}if(A===`
@@ -42,20 +42,20 @@ ${me(K,t.indent)}`}O===""&&!t.inFlow?$===`
42
42
  ${t.indent}`}else if(!g&&q(e)){const K=O[0],T=O.indexOf(`
43
43
  `),V=T!==-1,ye=t.inFlow??e.flow??e.items.length===0;if(V||!ye){let xe=!1;if(V&&(K==="&"||K==="!")){let H=O.indexOf(" ");K==="&"&&H!==-1&&H<T&&O[H+1]==="!"&&(H=O.indexOf(" ",H+1)),(H===-1||T<H)&&(xe=!0)}xe||($=`
44
44
  ${t.indent}`)}}else(O===""||O[0]===`
45
- `)&&($="");return y+=$+O,t.inFlow?I&&n&&n():A&&!I?y+=Oe(y,t.indent,u(A)):f&&i&&i(),y}c(Vr,"stringifyPair");function xs(s,e){(s==="debug"||s==="warn")&&console.warn(e)}c(xs,"warn");const $t="<<",ge={identify:c(s=>s===$t||typeof s=="symbol"&&s.description===$t,"identify"),default:"key",tag:"tag:yaml.org,2002:merge",test:/^<<$/,resolve:c(()=>Object.assign(new D(Symbol($t)),{addToJSMap:Ps}),"resolve"),stringify:c(()=>$t,"stringify")},Hr=c((s,e)=>(ge.identify(e)||_(e)&&(!e.type||e.type===D.PLAIN)&&ge.identify(e.value))&&s?.doc.schema.tags.some(t=>t.tag===ge.tag&&t.default),"isMergeKey");function Ps(s,e,t){if(t=s&&Se(t)?t.resolve(s.doc):t,Ke(t))for(const n of t.items)gn(s,e,n);else if(Array.isArray(t))for(const n of t)gn(s,e,n);else gn(s,e,t)}c(Ps,"addMergeToJSMap");function gn(s,e,t){const n=s&&Se(t)?t.resolve(s.doc):t;if(!_e(n))throw new Error("Merge sources must be maps or map aliases");const i=n.toJSON(null,s,Map);for(const[r,o]of i)e instanceof Map?e.has(r)||e.set(r,o):e instanceof Set?e.add(r):Object.prototype.hasOwnProperty.call(e,r)||Object.defineProperty(e,r,{value:o,writable:!0,enumerable:!0,configurable:!0});return e}c(gn,"mergeValue");function Rs(s,e,{key:t,value:n}){if(U(t)&&t.addToJSMap)t.addToJSMap(s,e,n);else if(Hr(s,t))Ps(s,e,n);else{const i=ie(t,"",s);if(e instanceof Map)e.set(i,ie(n,i,s));else if(e instanceof Set)e.add(i);else{const r=Yr(t,i,s),o=ie(n,r,s);r in e?Object.defineProperty(e,r,{value:o,writable:!0,enumerable:!0,configurable:!0}):e[r]=o}}return e}c(Rs,"addPairToJSMap");function Yr(s,e,t){if(e===null)return"";if(typeof e!="object")return String(e);if(U(s)&&t?.doc){const n=Ds(t.doc,{});n.anchors=new Set;for(const r of t.anchors.keys())n.anchors.add(r.anchor);n.inFlow=!0,n.inStringifyKey=!0;const i=s.toString(n);if(!t.mapKeyWarned){let r=JSON.stringify(i);r.length>40&&(r=r.substring(0,36)+'..."'),xs(t.doc.options.logLevel,`Keys with collection values will be stringified due to JS Object restrictions: ${r}. Set mapAsMap: true to use object keys.`),t.mapKeyWarned=!0}return i}return JSON.stringify(e)}c(Yr,"stringifyKey");function yn(s,e,t){const n=tt(s,void 0,t),i=tt(e,void 0,t);return new Q(n,i)}c(yn,"createPair");class Q{static{c(this,"Pair")}constructor(e,t=null){Object.defineProperty(this,se,{value:bs}),this.key=e,this.value=t}clone(e){let{key:t,value:n}=this;return U(t)&&(t=t.clone(e)),U(n)&&(n=n.clone(e)),new Q(t,n)}toJSON(e,t){const n=t?.mapAsMap?new Map:{};return Rs(t,n,this)}toString(e,t,n){return e?.doc?Vr(this,e,t,n):JSON.stringify(this)}}function Ms(s,e,t){return(e.inFlow??s.flow?Qr:zr)(s,e,t)}c(Ms,"stringifyCollection");function zr({comment:s,items:e},t,{blockItemPrefix:n,flowChars:i,itemIndent:r,onChompKeep:o,onComment:a}){const{indent:l,options:{commentString:u}}=t,p=Object.assign({},t,{indent:r,type:null});let d=!1;const h=[];for(let w=0;w<e.length;++w){const f=e[w];let y=null;if(U(f))!d&&f.spaceBefore&&h.push(""),Lt(t,h,f.commentBefore,d),f.comment&&(y=f.comment);else if(F(f)){const E=U(f.key)?f.key:null;E&&(!d&&E.spaceBefore&&h.push(""),Lt(t,h,E.commentBefore,d))}d=!1;let C=Ue(f,p,()=>y=null,()=>d=!0);y&&(C+=Oe(C,r,u(y))),d&&y&&(d=!1),h.push(n+C)}let g;if(h.length===0)g=i.start+i.end;else{g=h[0];for(let w=1;w<h.length;++w){const f=h[w];g+=f?`
45
+ `)&&($="");return y+=$+O,t.inFlow?I&&n&&n():A&&!I?y+=Oe(y,t.indent,u(A)):f&&i&&i(),y}c(Vr,"stringifyPair");function xs(s,e){(s==="debug"||s==="warn")&&console.warn(e)}c(xs,"warn");const $t="<<",ge={identify:c(s=>s===$t||typeof s=="symbol"&&s.description===$t,"identify"),default:"key",tag:"tag:yaml.org,2002:merge",test:/^<<$/,resolve:c(()=>Object.assign(new D(Symbol($t)),{addToJSMap:Ps}),"resolve"),stringify:c(()=>$t,"stringify")},Hr=c((s,e)=>(ge.identify(e)||_(e)&&(!e.type||e.type===D.PLAIN)&&ge.identify(e.value))&&s?.doc.schema.tags.some(t=>t.tag===ge.tag&&t.default),"isMergeKey");function Ps(s,e,t){if(t=s&&Se(t)?t.resolve(s.doc):t,Ke(t))for(const n of t.items)gn(s,e,n);else if(Array.isArray(t))for(const n of t)gn(s,e,n);else gn(s,e,t)}c(Ps,"addMergeToJSMap");function gn(s,e,t){const n=s&&Se(t)?t.resolve(s.doc):t;if(!_e(n))throw new Error("Merge sources must be maps or map aliases");const i=n.toJSON(null,s,Map);for(const[r,o]of i)e instanceof Map?e.has(r)||e.set(r,o):e instanceof Set?e.add(r):Object.prototype.hasOwnProperty.call(e,r)||Object.defineProperty(e,r,{value:o,writable:!0,enumerable:!0,configurable:!0});return e}c(gn,"mergeValue");function Rs(s,e,{key:t,value:n}){if(U(t)&&t.addToJSMap)t.addToJSMap(s,e,n);else if(Hr(s,t))Ps(s,e,n);else{const i=re(t,"",s);if(e instanceof Map)e.set(i,re(n,i,s));else if(e instanceof Set)e.add(i);else{const r=Yr(t,i,s),o=re(n,r,s);r in e?Object.defineProperty(e,r,{value:o,writable:!0,enumerable:!0,configurable:!0}):e[r]=o}}return e}c(Rs,"addPairToJSMap");function Yr(s,e,t){if(e===null)return"";if(typeof e!="object")return String(e);if(U(s)&&t?.doc){const n=Ds(t.doc,{});n.anchors=new Set;for(const r of t.anchors.keys())n.anchors.add(r.anchor);n.inFlow=!0,n.inStringifyKey=!0;const i=s.toString(n);if(!t.mapKeyWarned){let r=JSON.stringify(i);r.length>40&&(r=r.substring(0,36)+'..."'),xs(t.doc.options.logLevel,`Keys with collection values will be stringified due to JS Object restrictions: ${r}. Set mapAsMap: true to use object keys.`),t.mapKeyWarned=!0}return i}return JSON.stringify(e)}c(Yr,"stringifyKey");function yn(s,e,t){const n=tt(s,void 0,t),i=tt(e,void 0,t);return new Q(n,i)}c(yn,"createPair");class Q{static{c(this,"Pair")}constructor(e,t=null){Object.defineProperty(this,ie,{value:bs}),this.key=e,this.value=t}clone(e){let{key:t,value:n}=this;return U(t)&&(t=t.clone(e)),U(n)&&(n=n.clone(e)),new Q(t,n)}toJSON(e,t){const n=t?.mapAsMap?new Map:{};return Rs(t,n,this)}toString(e,t,n){return e?.doc?Vr(this,e,t,n):JSON.stringify(this)}}function Ms(s,e,t){return(e.inFlow??s.flow?Qr:zr)(s,e,t)}c(Ms,"stringifyCollection");function zr({comment:s,items:e},t,{blockItemPrefix:n,flowChars:i,itemIndent:r,onChompKeep:o,onComment:a}){const{indent:l,options:{commentString:u}}=t,p=Object.assign({},t,{indent:r,type:null});let d=!1;const h=[];for(let w=0;w<e.length;++w){const f=e[w];let y=null;if(U(f))!d&&f.spaceBefore&&h.push(""),Lt(t,h,f.commentBefore,d),f.comment&&(y=f.comment);else if(F(f)){const E=U(f.key)?f.key:null;E&&(!d&&E.spaceBefore&&h.push(""),Lt(t,h,E.commentBefore,d))}d=!1;let C=Ue(f,p,()=>y=null,()=>d=!0);y&&(C+=Oe(C,r,u(y))),d&&y&&(d=!1),h.push(n+C)}let g;if(h.length===0)g=i.start+i.end;else{g=h[0];for(let w=1;w<h.length;++w){const f=h[w];g+=f?`
46
46
  ${l}${f}`:`
47
47
  `}}return s?(g+=`
48
48
  `+me(u(s),l),a&&a()):d&&o&&o(),g}c(zr,"stringifyBlockCollection");function Qr({items:s},e,{flowChars:t,itemIndent:n}){const{indent:i,indentStep:r,flowCollectionPadding:o,options:{commentString:a}}=e;n+=r;const l=Object.assign({},e,{indent:n,inFlow:!0,type:null});let u=!1,p=0;const d=[];for(let w=0;w<s.length;++w){const f=s[w];let y=null;if(U(f))f.spaceBefore&&d.push(""),Lt(e,d,f.commentBefore,!1),f.comment&&(y=f.comment);else if(F(f)){const E=U(f.key)?f.key:null;E&&(E.spaceBefore&&d.push(""),Lt(e,d,E.commentBefore,!1),E.comment&&(u=!0));const A=U(f.value)?f.value:null;A?(A.comment&&(y=A.comment),A.commentBefore&&(u=!0)):f.value==null&&E?.comment&&(y=E.comment)}y&&(u=!0);let C=Ue(f,l,()=>y=null);w<s.length-1&&(C+=","),y&&(C+=Oe(C,n,a(y))),!u&&(d.length>p||C.includes(`
49
49
  `))&&(u=!0),d.push(C),p=d.length}const{start:h,end:g}=t;if(d.length===0)return h+g;if(!u){const w=d.reduce((f,y)=>f+y.length+2,2);u=e.options.lineWidth>0&&w>e.options.lineWidth}if(u){let w=h;for(const f of d)w+=f?`
50
50
  ${r}${i}${f}`:`
51
51
  `;return`${w}
52
- ${i}${g}`}else return`${h}${o}${d.join(" ")}${o}${g}`}c(Qr,"stringifyFlowCollection");function Lt({indent:s,options:{commentString:e}},t,n,i){if(n&&i&&(n=n.replace(/^\n+/,"")),n){const r=me(e(n),s);t.push(r.trimStart())}}c(Lt,"addCommentBefore");function $e(s,e){const t=_(e)?e.value:e;for(const n of s)if(F(n)&&(n.key===e||n.key===t||_(n.key)&&n.key.value===t))return n}c($e,"findPair");class te extends Os{static{c(this,"YAMLMap")}static get tagName(){return"tag:yaml.org,2002:map"}constructor(e){super(be,e),this.items=[]}static from(e,t,n){const{keepUndefined:i,replacer:r}=n,o=new this(e),a=c((l,u)=>{if(typeof r=="function")u=r.call(t,l,u);else if(Array.isArray(r)&&!r.includes(l))return;(u!==void 0||i)&&o.items.push(yn(l,u,n))},"add");if(t instanceof Map)for(const[l,u]of t)a(l,u);else if(t&&typeof t=="object")for(const l of Object.keys(t))a(l,t[l]);return typeof e.sortMapEntries=="function"&&o.items.sort(e.sortMapEntries),o}add(e,t){let n;F(e)?n=e:!e||typeof e!="object"||!("key"in e)?n=new Q(e,e?.value):n=new Q(e.key,e.value);const i=$e(this.items,n.key),r=this.schema?.sortMapEntries;if(i){if(!t)throw new Error(`Key ${n.key} already set`);_(i.value)&&As(n.value)?i.value.value=n.value:i.value=n.value}else if(r){const o=this.items.findIndex(a=>r(n,a)<0);o===-1?this.items.push(n):this.items.splice(o,0,n)}else this.items.push(n)}delete(e){const t=$e(this.items,e);return t?this.items.splice(this.items.indexOf(t),1).length>0:!1}get(e,t){const i=$e(this.items,e)?.value;return(!t&&_(i)?i.value:i)??void 0}has(e){return!!$e(this.items,e)}set(e,t){this.add(new Q(e,t),!0)}toJSON(e,t,n){const i=n?new n:t?.mapAsMap?new Map:{};t?.onCreate&&t.onCreate(i);for(const r of this.items)Rs(t,i,r);return i}toString(e,t,n){if(!e)return JSON.stringify(this);for(const i of this.items)if(!F(i))throw new Error(`Map items must all be pairs; found ${JSON.stringify(i)} instead`);return!e.allNullValues&&this.hasAllNullValues(!1)&&(e=Object.assign({},e,{allNullValues:!0})),Ms(this,e,{blockItemPrefix:"",flowChars:{start:"{",end:"}"},itemIndent:e.indent||"",onChompKeep:n,onComment:t})}}const Je={collection:"map",default:!0,nodeClass:te,tag:"tag:yaml.org,2002:map",resolve(s,e){return _e(s)||e("Expected a mapping for this tag"),s},createNode:c((s,e,t)=>te.from(s,e,t),"createNode")};class Ce extends Os{static{c(this,"YAMLSeq")}static get tagName(){return"tag:yaml.org,2002:seq"}constructor(e){super(Me,e),this.items=[]}add(e){this.items.push(e)}delete(e){const t=Dt(e);return typeof t!="number"?!1:this.items.splice(t,1).length>0}get(e,t){const n=Dt(e);if(typeof n!="number")return;const i=this.items[n];return!t&&_(i)?i.value:i}has(e){const t=Dt(e);return typeof t=="number"&&t<this.items.length}set(e,t){const n=Dt(e);if(typeof n!="number")throw new Error(`Expected a valid index, not ${e}.`);const i=this.items[n];_(i)&&As(t)?i.value=t:this.items[n]=t}toJSON(e,t){const n=[];t?.onCreate&&t.onCreate(n);let i=0;for(const r of this.items)n.push(ie(r,String(i++),t));return n}toString(e,t,n){return e?Ms(this,e,{blockItemPrefix:"- ",flowChars:{start:"[",end:"]"},itemIndent:(e.indent||"")+" ",onChompKeep:n,onComment:t}):JSON.stringify(this)}static from(e,t,n){const{replacer:i}=n,r=new this(e);if(t&&Symbol.iterator in Object(t)){let o=0;for(let a of t){if(typeof i=="function"){const l=t instanceof Set?a:String(o++);a=i.call(t,l,a)}r.items.push(tt(a,void 0,n))}}return r}}function Dt(s){let e=_(s)?s.value:s;return e&&typeof e=="string"&&(e=Number(e)),typeof e=="number"&&Number.isInteger(e)&&e>=0?e:null}c(Dt,"asItemIndex");const We={collection:"seq",default:!0,nodeClass:Ce,tag:"tag:yaml.org,2002:seq",resolve(s,e){return Ke(s)||e("Expected a sequence for this tag"),s},createNode:c((s,e,t)=>Ce.from(s,e,t),"createNode")},xt={identify:c(s=>typeof s=="string","identify"),default:!0,tag:"tag:yaml.org,2002:str",resolve:c(s=>s,"resolve"),stringify(s,e,t,n){return e=Object.assign({actualString:!0},e),it(s,e,t,n)}},Pt={identify:c(s=>s==null,"identify"),createNode:c(()=>new D(null),"createNode"),default:!0,tag:"tag:yaml.org,2002:null",test:/^(?:~|[Nn]ull|NULL)?$/,resolve:c(()=>new D(null),"resolve"),stringify:c(({source:s},e)=>typeof s=="string"&&Pt.test.test(s)?s:e.options.nullStr,"stringify")},wn={identify:c(s=>typeof s=="boolean","identify"),default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,resolve:c(s=>new D(s[0]==="t"||s[0]==="T"),"resolve"),stringify({source:s,value:e},t){if(s&&wn.test.test(s)){const n=s[0]==="t"||s[0]==="T";if(e===n)return s}return e?t.options.trueStr:t.options.falseStr}};function oe({format:s,minFractionDigits:e,tag:t,value:n}){if(typeof n=="bigint")return String(n);const i=typeof n=="number"?n:Number(n);if(!isFinite(i))return isNaN(i)?".nan":i<0?"-.inf":".inf";let r=JSON.stringify(n);if(!s&&e&&(!t||t==="tag:yaml.org,2002:float")&&/^\d/.test(r)){let o=r.indexOf(".");o<0&&(o=r.length,r+=".");let a=e-(r.length-o-1);for(;a-- >0;)r+="0"}return r}c(oe,"stringifyNumber");const _s={identify:c(s=>typeof s=="number","identify"),default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:c(s=>s.slice(-3).toLowerCase()==="nan"?NaN:s[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,"resolve"),stringify:oe},Ks={identify:c(s=>typeof s=="number","identify"),default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)[eE][-+]?[0-9]+$/,resolve:c(s=>parseFloat(s),"resolve"),stringify(s){const e=Number(s.value);return isFinite(e)?e.toExponential():oe(s)}},js={identify:c(s=>typeof s=="number","identify"),default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:\.[0-9]+|[0-9]+\.[0-9]*)$/,resolve(s){const e=new D(parseFloat(s)),t=s.indexOf(".");return t!==-1&&s[s.length-1]==="0"&&(e.minFractionDigits=s.length-t-1),e},stringify:oe},Rt=c(s=>typeof s=="bigint"||Number.isInteger(s),"intIdentify$2"),bn=c((s,e,t,{intAsBigInt:n})=>n?BigInt(s):parseInt(s.substring(e),t),"intResolve$1");function Fs(s,e,t){const{value:n}=s;return Rt(n)&&n>=0?t+n.toString(e):oe(s)}c(Fs,"intStringify$1");const Bs={identify:c(s=>Rt(s)&&s>=0,"identify"),default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^0o[0-7]+$/,resolve:c((s,e,t)=>bn(s,2,8,t),"resolve"),stringify:c(s=>Fs(s,8,"0o"),"stringify")},qs={identify:Rt,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9]+$/,resolve:c((s,e,t)=>bn(s,0,10,t),"resolve"),stringify:oe},Us={identify:c(s=>Rt(s)&&s>=0,"identify"),default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^0x[0-9a-fA-F]+$/,resolve:c((s,e,t)=>bn(s,2,16,t),"resolve"),stringify:c(s=>Fs(s,16,"0x"),"stringify")},Xr=[Je,We,xt,Pt,wn,Bs,qs,Us,_s,Ks,js];function Js(s){return typeof s=="bigint"||Number.isInteger(s)}c(Js,"intIdentify$1");const Mt=c(({value:s})=>JSON.stringify(s),"stringifyJSON"),Zr=[{identify:c(s=>typeof s=="string","identify"),default:!0,tag:"tag:yaml.org,2002:str",resolve:c(s=>s,"resolve"),stringify:Mt},{identify:c(s=>s==null,"identify"),createNode:c(()=>new D(null),"createNode"),default:!0,tag:"tag:yaml.org,2002:null",test:/^null$/,resolve:c(()=>null,"resolve"),stringify:Mt},{identify:c(s=>typeof s=="boolean","identify"),default:!0,tag:"tag:yaml.org,2002:bool",test:/^true$|^false$/,resolve:c(s=>s==="true","resolve"),stringify:Mt},{identify:Js,default:!0,tag:"tag:yaml.org,2002:int",test:/^-?(?:0|[1-9][0-9]*)$/,resolve:c((s,e,{intAsBigInt:t})=>t?BigInt(s):parseInt(s,10),"resolve"),stringify:c(({value:s})=>Js(s)?s.toString():JSON.stringify(s),"stringify")},{identify:c(s=>typeof s=="number","identify"),default:!0,tag:"tag:yaml.org,2002:float",test:/^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,resolve:c(s=>parseFloat(s),"resolve"),stringify:Mt}],eo={default:!0,tag:"",test:/^/,resolve(s,e){return e(`Unresolved plain scalar ${JSON.stringify(s)}`),s}},to=[Je,We].concat(Zr,eo),Sn={identify:c(s=>s instanceof Uint8Array,"identify"),default:!1,tag:"tag:yaml.org,2002:binary",resolve(s,e){if(typeof atob=="function"){const t=atob(s.replace(/[\n\r]/g,"")),n=new Uint8Array(t.length);for(let i=0;i<t.length;++i)n[i]=t.charCodeAt(i);return n}else return e("This environment does not support reading binary tags; either Buffer or atob is required"),s},stringify({comment:s,type:e,value:t},n,i,r){if(!t)return"";const o=t;let a;if(typeof btoa=="function"){let l="";for(let u=0;u<o.length;++u)l+=String.fromCharCode(o[u]);a=btoa(l)}else throw new Error("This environment does not support writing binary tags; either Buffer or btoa is required");if(e??(e=D.BLOCK_LITERAL),e!==D.QUOTE_DOUBLE){const l=Math.max(n.options.lineWidth-n.indent.length,n.options.minContentWidth),u=Math.ceil(a.length/l),p=new Array(u);for(let d=0,h=0;d<u;++d,h+=l)p[d]=a.substr(h,l);a=p.join(e===D.BLOCK_LITERAL?`
52
+ ${i}${g}`}else return`${h}${o}${d.join(" ")}${o}${g}`}c(Qr,"stringifyFlowCollection");function Lt({indent:s,options:{commentString:e}},t,n,i){if(n&&i&&(n=n.replace(/^\n+/,"")),n){const r=me(e(n),s);t.push(r.trimStart())}}c(Lt,"addCommentBefore");function $e(s,e){const t=_(e)?e.value:e;for(const n of s)if(F(n)&&(n.key===e||n.key===t||_(n.key)&&n.key.value===t))return n}c($e,"findPair");class te extends Os{static{c(this,"YAMLMap")}static get tagName(){return"tag:yaml.org,2002:map"}constructor(e){super(be,e),this.items=[]}static from(e,t,n){const{keepUndefined:i,replacer:r}=n,o=new this(e),a=c((l,u)=>{if(typeof r=="function")u=r.call(t,l,u);else if(Array.isArray(r)&&!r.includes(l))return;(u!==void 0||i)&&o.items.push(yn(l,u,n))},"add");if(t instanceof Map)for(const[l,u]of t)a(l,u);else if(t&&typeof t=="object")for(const l of Object.keys(t))a(l,t[l]);return typeof e.sortMapEntries=="function"&&o.items.sort(e.sortMapEntries),o}add(e,t){let n;F(e)?n=e:!e||typeof e!="object"||!("key"in e)?n=new Q(e,e?.value):n=new Q(e.key,e.value);const i=$e(this.items,n.key),r=this.schema?.sortMapEntries;if(i){if(!t)throw new Error(`Key ${n.key} already set`);_(i.value)&&As(n.value)?i.value.value=n.value:i.value=n.value}else if(r){const o=this.items.findIndex(a=>r(n,a)<0);o===-1?this.items.push(n):this.items.splice(o,0,n)}else this.items.push(n)}delete(e){const t=$e(this.items,e);return t?this.items.splice(this.items.indexOf(t),1).length>0:!1}get(e,t){const i=$e(this.items,e)?.value;return(!t&&_(i)?i.value:i)??void 0}has(e){return!!$e(this.items,e)}set(e,t){this.add(new Q(e,t),!0)}toJSON(e,t,n){const i=n?new n:t?.mapAsMap?new Map:{};t?.onCreate&&t.onCreate(i);for(const r of this.items)Rs(t,i,r);return i}toString(e,t,n){if(!e)return JSON.stringify(this);for(const i of this.items)if(!F(i))throw new Error(`Map items must all be pairs; found ${JSON.stringify(i)} instead`);return!e.allNullValues&&this.hasAllNullValues(!1)&&(e=Object.assign({},e,{allNullValues:!0})),Ms(this,e,{blockItemPrefix:"",flowChars:{start:"{",end:"}"},itemIndent:e.indent||"",onChompKeep:n,onComment:t})}}const Je={collection:"map",default:!0,nodeClass:te,tag:"tag:yaml.org,2002:map",resolve(s,e){return _e(s)||e("Expected a mapping for this tag"),s},createNode:c((s,e,t)=>te.from(s,e,t),"createNode")};class Ce extends Os{static{c(this,"YAMLSeq")}static get tagName(){return"tag:yaml.org,2002:seq"}constructor(e){super(Me,e),this.items=[]}add(e){this.items.push(e)}delete(e){const t=Dt(e);return typeof t!="number"?!1:this.items.splice(t,1).length>0}get(e,t){const n=Dt(e);if(typeof n!="number")return;const i=this.items[n];return!t&&_(i)?i.value:i}has(e){const t=Dt(e);return typeof t=="number"&&t<this.items.length}set(e,t){const n=Dt(e);if(typeof n!="number")throw new Error(`Expected a valid index, not ${e}.`);const i=this.items[n];_(i)&&As(t)?i.value=t:this.items[n]=t}toJSON(e,t){const n=[];t?.onCreate&&t.onCreate(n);let i=0;for(const r of this.items)n.push(re(r,String(i++),t));return n}toString(e,t,n){return e?Ms(this,e,{blockItemPrefix:"- ",flowChars:{start:"[",end:"]"},itemIndent:(e.indent||"")+" ",onChompKeep:n,onComment:t}):JSON.stringify(this)}static from(e,t,n){const{replacer:i}=n,r=new this(e);if(t&&Symbol.iterator in Object(t)){let o=0;for(let a of t){if(typeof i=="function"){const l=t instanceof Set?a:String(o++);a=i.call(t,l,a)}r.items.push(tt(a,void 0,n))}}return r}}function Dt(s){let e=_(s)?s.value:s;return e&&typeof e=="string"&&(e=Number(e)),typeof e=="number"&&Number.isInteger(e)&&e>=0?e:null}c(Dt,"asItemIndex");const We={collection:"seq",default:!0,nodeClass:Ce,tag:"tag:yaml.org,2002:seq",resolve(s,e){return Ke(s)||e("Expected a sequence for this tag"),s},createNode:c((s,e,t)=>Ce.from(s,e,t),"createNode")},xt={identify:c(s=>typeof s=="string","identify"),default:!0,tag:"tag:yaml.org,2002:str",resolve:c(s=>s,"resolve"),stringify(s,e,t,n){return e=Object.assign({actualString:!0},e),it(s,e,t,n)}},Pt={identify:c(s=>s==null,"identify"),createNode:c(()=>new D(null),"createNode"),default:!0,tag:"tag:yaml.org,2002:null",test:/^(?:~|[Nn]ull|NULL)?$/,resolve:c(()=>new D(null),"resolve"),stringify:c(({source:s},e)=>typeof s=="string"&&Pt.test.test(s)?s:e.options.nullStr,"stringify")},wn={identify:c(s=>typeof s=="boolean","identify"),default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,resolve:c(s=>new D(s[0]==="t"||s[0]==="T"),"resolve"),stringify({source:s,value:e},t){if(s&&wn.test.test(s)){const n=s[0]==="t"||s[0]==="T";if(e===n)return s}return e?t.options.trueStr:t.options.falseStr}};function oe({format:s,minFractionDigits:e,tag:t,value:n}){if(typeof n=="bigint")return String(n);const i=typeof n=="number"?n:Number(n);if(!isFinite(i))return isNaN(i)?".nan":i<0?"-.inf":".inf";let r=JSON.stringify(n);if(!s&&e&&(!t||t==="tag:yaml.org,2002:float")&&/^\d/.test(r)){let o=r.indexOf(".");o<0&&(o=r.length,r+=".");let a=e-(r.length-o-1);for(;a-- >0;)r+="0"}return r}c(oe,"stringifyNumber");const _s={identify:c(s=>typeof s=="number","identify"),default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:c(s=>s.slice(-3).toLowerCase()==="nan"?NaN:s[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,"resolve"),stringify:oe},Ks={identify:c(s=>typeof s=="number","identify"),default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)[eE][-+]?[0-9]+$/,resolve:c(s=>parseFloat(s),"resolve"),stringify(s){const e=Number(s.value);return isFinite(e)?e.toExponential():oe(s)}},js={identify:c(s=>typeof s=="number","identify"),default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:\.[0-9]+|[0-9]+\.[0-9]*)$/,resolve(s){const e=new D(parseFloat(s)),t=s.indexOf(".");return t!==-1&&s[s.length-1]==="0"&&(e.minFractionDigits=s.length-t-1),e},stringify:oe},Rt=c(s=>typeof s=="bigint"||Number.isInteger(s),"intIdentify$2"),bn=c((s,e,t,{intAsBigInt:n})=>n?BigInt(s):parseInt(s.substring(e),t),"intResolve$1");function Fs(s,e,t){const{value:n}=s;return Rt(n)&&n>=0?t+n.toString(e):oe(s)}c(Fs,"intStringify$1");const Bs={identify:c(s=>Rt(s)&&s>=0,"identify"),default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^0o[0-7]+$/,resolve:c((s,e,t)=>bn(s,2,8,t),"resolve"),stringify:c(s=>Fs(s,8,"0o"),"stringify")},qs={identify:Rt,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9]+$/,resolve:c((s,e,t)=>bn(s,0,10,t),"resolve"),stringify:oe},Us={identify:c(s=>Rt(s)&&s>=0,"identify"),default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^0x[0-9a-fA-F]+$/,resolve:c((s,e,t)=>bn(s,2,16,t),"resolve"),stringify:c(s=>Fs(s,16,"0x"),"stringify")},Xr=[Je,We,xt,Pt,wn,Bs,qs,Us,_s,Ks,js];function Js(s){return typeof s=="bigint"||Number.isInteger(s)}c(Js,"intIdentify$1");const Mt=c(({value:s})=>JSON.stringify(s),"stringifyJSON"),Zr=[{identify:c(s=>typeof s=="string","identify"),default:!0,tag:"tag:yaml.org,2002:str",resolve:c(s=>s,"resolve"),stringify:Mt},{identify:c(s=>s==null,"identify"),createNode:c(()=>new D(null),"createNode"),default:!0,tag:"tag:yaml.org,2002:null",test:/^null$/,resolve:c(()=>null,"resolve"),stringify:Mt},{identify:c(s=>typeof s=="boolean","identify"),default:!0,tag:"tag:yaml.org,2002:bool",test:/^true$|^false$/,resolve:c(s=>s==="true","resolve"),stringify:Mt},{identify:Js,default:!0,tag:"tag:yaml.org,2002:int",test:/^-?(?:0|[1-9][0-9]*)$/,resolve:c((s,e,{intAsBigInt:t})=>t?BigInt(s):parseInt(s,10),"resolve"),stringify:c(({value:s})=>Js(s)?s.toString():JSON.stringify(s),"stringify")},{identify:c(s=>typeof s=="number","identify"),default:!0,tag:"tag:yaml.org,2002:float",test:/^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,resolve:c(s=>parseFloat(s),"resolve"),stringify:Mt}],eo={default:!0,tag:"",test:/^/,resolve(s,e){return e(`Unresolved plain scalar ${JSON.stringify(s)}`),s}},to=[Je,We].concat(Zr,eo),Sn={identify:c(s=>s instanceof Uint8Array,"identify"),default:!1,tag:"tag:yaml.org,2002:binary",resolve(s,e){if(typeof atob=="function"){const t=atob(s.replace(/[\n\r]/g,"")),n=new Uint8Array(t.length);for(let i=0;i<t.length;++i)n[i]=t.charCodeAt(i);return n}else return e("This environment does not support reading binary tags; either Buffer or atob is required"),s},stringify({comment:s,type:e,value:t},n,i,r){if(!t)return"";const o=t;let a;if(typeof btoa=="function"){let l="";for(let u=0;u<o.length;++u)l+=String.fromCharCode(o[u]);a=btoa(l)}else throw new Error("This environment does not support writing binary tags; either Buffer or btoa is required");if(e??(e=D.BLOCK_LITERAL),e!==D.QUOTE_DOUBLE){const l=Math.max(n.options.lineWidth-n.indent.length,n.options.minContentWidth),u=Math.ceil(a.length/l),p=new Array(u);for(let d=0,h=0;d<u;++d,h+=l)p[d]=a.substr(h,l);a=p.join(e===D.BLOCK_LITERAL?`
53
53
  `:" ")}return it({comment:s,type:e,value:a},n,i,r)}};function Ws(s,e){if(Ke(s))for(let t=0;t<s.items.length;++t){let n=s.items[t];if(!F(n)){if(_e(n)){n.items.length>1&&e("Each pair must have its own sequence indicator");const i=n.items[0]||new Q(new D(null));if(n.commentBefore&&(i.key.commentBefore=i.key.commentBefore?`${n.commentBefore}
54
54
  ${i.key.commentBefore}`:n.commentBefore),n.comment){const r=i.value??i.key;r.comment=r.comment?`${n.comment}
55
- ${r.comment}`:n.comment}n=i}s.items[t]=F(n)?n:new Q(n)}}else e("Expected a sequence for this tag");return s}c(Ws,"resolvePairs");function Gs(s,e,t){const{replacer:n}=t,i=new Ce(s);i.tag="tag:yaml.org,2002:pairs";let r=0;if(e&&Symbol.iterator in Object(e))for(let o of e){typeof n=="function"&&(o=n.call(e,String(r++),o));let a,l;if(Array.isArray(o))if(o.length===2)a=o[0],l=o[1];else throw new TypeError(`Expected [key, value] tuple: ${o}`);else if(o&&o instanceof Object){const u=Object.keys(o);if(u.length===1)a=u[0],l=o[a];else throw new TypeError(`Expected tuple with one key, not ${u.length} keys`)}else a=o;i.items.push(yn(a,l,t))}return i}c(Gs,"createPairs");const Cn={collection:"seq",default:!1,tag:"tag:yaml.org,2002:pairs",resolve:Ws,createNode:Gs};class ze extends Ce{static{c(this,"YAMLOMap")}constructor(){super(),this.add=te.prototype.add.bind(this),this.delete=te.prototype.delete.bind(this),this.get=te.prototype.get.bind(this),this.has=te.prototype.has.bind(this),this.set=te.prototype.set.bind(this),this.tag=ze.tag}toJSON(e,t){if(!t)return super.toJSON(e);const n=new Map;t?.onCreate&&t.onCreate(n);for(const i of this.items){let r,o;if(F(i)?(r=ie(i.key,"",t),o=ie(i.value,r,t)):r=ie(i,"",t),n.has(r))throw new Error("Ordered maps must not include duplicate keys");n.set(r,o)}return n}static from(e,t,n){const i=Gs(e,t,n),r=new this;return r.items=i.items,r}}ze.tag="tag:yaml.org,2002:omap";const kn={collection:"seq",identify:c(s=>s instanceof Map,"identify"),nodeClass:ze,default:!1,tag:"tag:yaml.org,2002:omap",resolve(s,e){const t=Ws(s,e),n=[];for(const{key:i}of t.items)_(i)&&(n.includes(i.value)?e(`Ordered maps must not include duplicate keys: ${i.value}`):n.push(i.value));return Object.assign(new ze,t)},createNode:c((s,e,t)=>ze.from(s,e,t),"createNode")};function Vs({value:s,source:e},t){return e&&(s?Hs:Ys).test.test(e)?e:s?t.options.trueStr:t.options.falseStr}c(Vs,"boolStringify");const Hs={identify:c(s=>s===!0,"identify"),default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,resolve:c(()=>new D(!0),"resolve"),stringify:Vs},Ys={identify:c(s=>s===!1,"identify"),default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,resolve:c(()=>new D(!1),"resolve"),stringify:Vs},no={identify:c(s=>typeof s=="number","identify"),default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:c(s=>s.slice(-3).toLowerCase()==="nan"?NaN:s[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,"resolve"),stringify:oe},so={identify:c(s=>typeof s=="number","identify"),default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:[0-9][0-9_]*)?(?:\.[0-9_]*)?[eE][-+]?[0-9]+$/,resolve:c(s=>parseFloat(s.replace(/_/g,"")),"resolve"),stringify(s){const e=Number(s.value);return isFinite(e)?e.toExponential():oe(s)}},io={identify:c(s=>typeof s=="number","identify"),default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:[0-9][0-9_]*)?\.[0-9_]*$/,resolve(s){const e=new D(parseFloat(s.replace(/_/g,""))),t=s.indexOf(".");if(t!==-1){const n=s.substring(t+1).replace(/_/g,"");n[n.length-1]==="0"&&(e.minFractionDigits=n.length)}return e},stringify:oe},rt=c(s=>typeof s=="bigint"||Number.isInteger(s),"intIdentify");function _t(s,e,t,{intAsBigInt:n}){const i=s[0];if((i==="-"||i==="+")&&(e+=1),s=s.substring(e).replace(/_/g,""),n){switch(t){case 2:s=`0b${s}`;break;case 8:s=`0o${s}`;break;case 16:s=`0x${s}`;break}const o=BigInt(s);return i==="-"?BigInt(-1)*o:o}const r=parseInt(s,t);return i==="-"?-1*r:r}c(_t,"intResolve");function En(s,e,t){const{value:n}=s;if(rt(n)){const i=n.toString(e);return n<0?"-"+t+i.substr(1):t+i}return oe(s)}c(En,"intStringify");const ro={identify:rt,default:!0,tag:"tag:yaml.org,2002:int",format:"BIN",test:/^[-+]?0b[0-1_]+$/,resolve:c((s,e,t)=>_t(s,2,2,t),"resolve"),stringify:c(s=>En(s,2,"0b"),"stringify")},oo={identify:rt,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^[-+]?0[0-7_]+$/,resolve:c((s,e,t)=>_t(s,1,8,t),"resolve"),stringify:c(s=>En(s,8,"0"),"stringify")},ao={identify:rt,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9][0-9_]*$/,resolve:c((s,e,t)=>_t(s,0,10,t),"resolve"),stringify:oe},co={identify:rt,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^[-+]?0x[0-9a-fA-F_]+$/,resolve:c((s,e,t)=>_t(s,2,16,t),"resolve"),stringify:c(s=>En(s,16,"0x"),"stringify")};class Qe extends te{static{c(this,"YAMLSet")}constructor(e){super(e),this.tag=Qe.tag}add(e){let t;F(e)?t=e:e&&typeof e=="object"&&"key"in e&&"value"in e&&e.value===null?t=new Q(e.key,null):t=new Q(e,null),$e(this.items,t.key)||this.items.push(t)}get(e,t){const n=$e(this.items,e);return!t&&F(n)?_(n.key)?n.key.value:n.key:n}set(e,t){if(typeof t!="boolean")throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof t}`);const n=$e(this.items,e);n&&!t?this.items.splice(this.items.indexOf(n),1):!n&&t&&this.items.push(new Q(e))}toJSON(e,t){return super.toJSON(e,t,Set)}toString(e,t,n){if(!e)return JSON.stringify(this);if(this.hasAllNullValues(!0))return super.toString(Object.assign({},e,{allNullValues:!0}),t,n);throw new Error("Set items must all have null values")}static from(e,t,n){const{replacer:i}=n,r=new this(e);if(t&&Symbol.iterator in Object(t))for(let o of t)typeof i=="function"&&(o=i.call(t,o,o)),r.items.push(yn(o,null,n));return r}}Qe.tag="tag:yaml.org,2002:set";const vn={collection:"map",identify:c(s=>s instanceof Set,"identify"),nodeClass:Qe,default:!1,tag:"tag:yaml.org,2002:set",createNode:c((s,e,t)=>Qe.from(s,e,t),"createNode"),resolve(s,e){if(_e(s)){if(s.hasAllNullValues(!0))return Object.assign(new Qe,s);e("Set items must all have null values")}else e("Expected a mapping for this tag");return s}};function In(s,e){const t=s[0],n=t==="-"||t==="+"?s.substring(1):s,i=c(o=>e?BigInt(o):Number(o),"num"),r=n.replace(/_/g,"").split(":").reduce((o,a)=>o*i(60)+i(a),i(0));return t==="-"?i(-1)*r:r}c(In,"parseSexagesimal");function zs(s){let{value:e}=s,t=c(o=>o,"num");if(typeof e=="bigint")t=c(o=>BigInt(o),"num");else if(isNaN(e)||!isFinite(e))return oe(s);let n="";e<0&&(n="-",e*=t(-1));const i=t(60),r=[e%i];return e<60?r.unshift(0):(e=(e-r[0])/i,r.unshift(e%i),e>=60&&(e=(e-r[0])/i,r.unshift(e))),n+r.map(o=>String(o).padStart(2,"0")).join(":").replace(/000000\d*$/,"")}c(zs,"stringifySexagesimal");const Qs={identify:c(s=>typeof s=="bigint"||Number.isInteger(s),"identify"),default:!0,tag:"tag:yaml.org,2002:int",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,resolve:c((s,e,{intAsBigInt:t})=>In(s,t),"resolve"),stringify:zs},Xs={identify:c(s=>typeof s=="number","identify"),default:!0,tag:"tag:yaml.org,2002:float",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*$/,resolve:c(s=>In(s,!1),"resolve"),stringify:zs},Kt={identify:c(s=>s instanceof Date,"identify"),default:!0,tag:"tag:yaml.org,2002:timestamp",test:RegExp("^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})(?:(?:t|T|[ \\t]+)([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\.[0-9]+)?)(?:[ \\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?)?$"),resolve(s){const e=s.match(Kt.test);if(!e)throw new Error("!!timestamp expects a date, starting with yyyy-mm-dd");const[,t,n,i,r,o,a]=e.map(Number),l=e[7]?Number((e[7]+"00").substr(1,3)):0;let u=Date.UTC(t,n-1,i,r||0,o||0,a||0,l);const p=e[8];if(p&&p!=="Z"){let d=In(p,!1);Math.abs(d)<30&&(d*=60),u-=6e4*d}return new Date(u)},stringify:c(({value:s})=>s?.toISOString().replace(/(T00:00:00)?\.000Z$/,"")??"","stringify")},Zs=[Je,We,xt,Pt,Hs,Ys,ro,oo,ao,co,no,so,io,Sn,ge,kn,Cn,vn,Qs,Xs,Kt],ei=new Map([["core",Xr],["failsafe",[Je,We,xt]],["json",to],["yaml11",Zs],["yaml-1.1",Zs]]),ti={binary:Sn,bool:wn,float:js,floatExp:Ks,floatNaN:_s,floatTime:Xs,int:qs,intHex:Us,intOct:Bs,intTime:Qs,map:Je,merge:ge,null:Pt,omap:kn,pairs:Cn,seq:We,set:vn,timestamp:Kt},lo={"tag:yaml.org,2002:binary":Sn,"tag:yaml.org,2002:merge":ge,"tag:yaml.org,2002:omap":kn,"tag:yaml.org,2002:pairs":Cn,"tag:yaml.org,2002:set":vn,"tag:yaml.org,2002:timestamp":Kt};function Tn(s,e,t){const n=ei.get(e);if(n&&!s)return t&&!n.includes(ge)?n.concat(ge):n.slice();let i=n;if(!i)if(Array.isArray(s))i=[];else{const r=Array.from(ei.keys()).filter(o=>o!=="yaml11").map(o=>JSON.stringify(o)).join(", ");throw new Error(`Unknown schema "${e}"; use one of ${r} or define customTags array`)}if(Array.isArray(s))for(const r of s)i=i.concat(r);else typeof s=="function"&&(i=s(i.slice()));return t&&(i=i.concat(ge)),i.reduce((r,o)=>{const a=typeof o=="string"?ti[o]:o;if(!a){const l=JSON.stringify(o),u=Object.keys(ti).map(p=>JSON.stringify(p)).join(", ");throw new Error(`Unknown custom tag ${l}; use one of ${u}`)}return r.includes(a)||r.push(a),r},[])}c(Tn,"getTags");const uo=c((s,e)=>s.key<e.key?-1:s.key>e.key?1:0,"sortMapEntriesByKey");class Zt{static{c(this,"Schema")}constructor({compat:e,customTags:t,merge:n,resolveKnownTags:i,schema:r,sortMapEntries:o,toStringDefaults:a}){this.compat=Array.isArray(e)?Tn(e,"compat"):e?Tn(null,e):null,this.name=typeof r=="string"&&r||"core",this.knownTags=i?lo:{},this.tags=Tn(t,this.name,n),this.toStringOptions=a??null,Object.defineProperty(this,be,{value:Je}),Object.defineProperty(this,fe,{value:xt}),Object.defineProperty(this,Me,{value:We}),this.sortMapEntries=typeof o=="function"?o:o===!0?uo:null}clone(){const e=Object.create(Zt.prototype,Object.getOwnPropertyDescriptors(this));return e.tags=this.tags.slice(),e}}function fo(s,e){const t=[];let n=e.directives===!0;if(e.directives!==!1&&s.directives){const l=s.directives.toString(s);l?(t.push(l),n=!0):s.directives.docStart&&(n=!0)}n&&t.push("---");const i=Ds(s,e),{commentString:r}=i.options;if(s.commentBefore){t.length!==1&&t.unshift("");const l=r(s.commentBefore);t.unshift(me(l,""))}let o=!1,a=null;if(s.contents){if(U(s.contents)){if(s.contents.spaceBefore&&n&&t.push(""),s.contents.commentBefore){const p=r(s.contents.commentBefore);t.push(me(p,""))}i.forceBlockIndent=!!s.comment,a=s.contents.comment}const l=a?void 0:()=>o=!0;let u=Ue(s.contents,i,()=>a=null,l);a&&(u+=Oe(u,"",r(a))),(u[0]==="|"||u[0]===">")&&t[t.length-1]==="---"?t[t.length-1]=`--- ${u}`:t.push(u)}else t.push(Ue(s.contents,i));if(s.directives?.docEnd)if(s.comment){const l=r(s.comment);l.includes(`
55
+ ${r.comment}`:n.comment}n=i}s.items[t]=F(n)?n:new Q(n)}}else e("Expected a sequence for this tag");return s}c(Ws,"resolvePairs");function Gs(s,e,t){const{replacer:n}=t,i=new Ce(s);i.tag="tag:yaml.org,2002:pairs";let r=0;if(e&&Symbol.iterator in Object(e))for(let o of e){typeof n=="function"&&(o=n.call(e,String(r++),o));let a,l;if(Array.isArray(o))if(o.length===2)a=o[0],l=o[1];else throw new TypeError(`Expected [key, value] tuple: ${o}`);else if(o&&o instanceof Object){const u=Object.keys(o);if(u.length===1)a=u[0],l=o[a];else throw new TypeError(`Expected tuple with one key, not ${u.length} keys`)}else a=o;i.items.push(yn(a,l,t))}return i}c(Gs,"createPairs");const Cn={collection:"seq",default:!1,tag:"tag:yaml.org,2002:pairs",resolve:Ws,createNode:Gs};class ze extends Ce{static{c(this,"YAMLOMap")}constructor(){super(),this.add=te.prototype.add.bind(this),this.delete=te.prototype.delete.bind(this),this.get=te.prototype.get.bind(this),this.has=te.prototype.has.bind(this),this.set=te.prototype.set.bind(this),this.tag=ze.tag}toJSON(e,t){if(!t)return super.toJSON(e);const n=new Map;t?.onCreate&&t.onCreate(n);for(const i of this.items){let r,o;if(F(i)?(r=re(i.key,"",t),o=re(i.value,r,t)):r=re(i,"",t),n.has(r))throw new Error("Ordered maps must not include duplicate keys");n.set(r,o)}return n}static from(e,t,n){const i=Gs(e,t,n),r=new this;return r.items=i.items,r}}ze.tag="tag:yaml.org,2002:omap";const kn={collection:"seq",identify:c(s=>s instanceof Map,"identify"),nodeClass:ze,default:!1,tag:"tag:yaml.org,2002:omap",resolve(s,e){const t=Ws(s,e),n=[];for(const{key:i}of t.items)_(i)&&(n.includes(i.value)?e(`Ordered maps must not include duplicate keys: ${i.value}`):n.push(i.value));return Object.assign(new ze,t)},createNode:c((s,e,t)=>ze.from(s,e,t),"createNode")};function Vs({value:s,source:e},t){return e&&(s?Hs:Ys).test.test(e)?e:s?t.options.trueStr:t.options.falseStr}c(Vs,"boolStringify");const Hs={identify:c(s=>s===!0,"identify"),default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,resolve:c(()=>new D(!0),"resolve"),stringify:Vs},Ys={identify:c(s=>s===!1,"identify"),default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,resolve:c(()=>new D(!1),"resolve"),stringify:Vs},no={identify:c(s=>typeof s=="number","identify"),default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:c(s=>s.slice(-3).toLowerCase()==="nan"?NaN:s[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,"resolve"),stringify:oe},so={identify:c(s=>typeof s=="number","identify"),default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:[0-9][0-9_]*)?(?:\.[0-9_]*)?[eE][-+]?[0-9]+$/,resolve:c(s=>parseFloat(s.replace(/_/g,"")),"resolve"),stringify(s){const e=Number(s.value);return isFinite(e)?e.toExponential():oe(s)}},io={identify:c(s=>typeof s=="number","identify"),default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:[0-9][0-9_]*)?\.[0-9_]*$/,resolve(s){const e=new D(parseFloat(s.replace(/_/g,""))),t=s.indexOf(".");if(t!==-1){const n=s.substring(t+1).replace(/_/g,"");n[n.length-1]==="0"&&(e.minFractionDigits=n.length)}return e},stringify:oe},rt=c(s=>typeof s=="bigint"||Number.isInteger(s),"intIdentify");function _t(s,e,t,{intAsBigInt:n}){const i=s[0];if((i==="-"||i==="+")&&(e+=1),s=s.substring(e).replace(/_/g,""),n){switch(t){case 2:s=`0b${s}`;break;case 8:s=`0o${s}`;break;case 16:s=`0x${s}`;break}const o=BigInt(s);return i==="-"?BigInt(-1)*o:o}const r=parseInt(s,t);return i==="-"?-1*r:r}c(_t,"intResolve");function En(s,e,t){const{value:n}=s;if(rt(n)){const i=n.toString(e);return n<0?"-"+t+i.substr(1):t+i}return oe(s)}c(En,"intStringify");const ro={identify:rt,default:!0,tag:"tag:yaml.org,2002:int",format:"BIN",test:/^[-+]?0b[0-1_]+$/,resolve:c((s,e,t)=>_t(s,2,2,t),"resolve"),stringify:c(s=>En(s,2,"0b"),"stringify")},oo={identify:rt,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^[-+]?0[0-7_]+$/,resolve:c((s,e,t)=>_t(s,1,8,t),"resolve"),stringify:c(s=>En(s,8,"0"),"stringify")},ao={identify:rt,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9][0-9_]*$/,resolve:c((s,e,t)=>_t(s,0,10,t),"resolve"),stringify:oe},co={identify:rt,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^[-+]?0x[0-9a-fA-F_]+$/,resolve:c((s,e,t)=>_t(s,2,16,t),"resolve"),stringify:c(s=>En(s,16,"0x"),"stringify")};class Qe extends te{static{c(this,"YAMLSet")}constructor(e){super(e),this.tag=Qe.tag}add(e){let t;F(e)?t=e:e&&typeof e=="object"&&"key"in e&&"value"in e&&e.value===null?t=new Q(e.key,null):t=new Q(e,null),$e(this.items,t.key)||this.items.push(t)}get(e,t){const n=$e(this.items,e);return!t&&F(n)?_(n.key)?n.key.value:n.key:n}set(e,t){if(typeof t!="boolean")throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof t}`);const n=$e(this.items,e);n&&!t?this.items.splice(this.items.indexOf(n),1):!n&&t&&this.items.push(new Q(e))}toJSON(e,t){return super.toJSON(e,t,Set)}toString(e,t,n){if(!e)return JSON.stringify(this);if(this.hasAllNullValues(!0))return super.toString(Object.assign({},e,{allNullValues:!0}),t,n);throw new Error("Set items must all have null values")}static from(e,t,n){const{replacer:i}=n,r=new this(e);if(t&&Symbol.iterator in Object(t))for(let o of t)typeof i=="function"&&(o=i.call(t,o,o)),r.items.push(yn(o,null,n));return r}}Qe.tag="tag:yaml.org,2002:set";const vn={collection:"map",identify:c(s=>s instanceof Set,"identify"),nodeClass:Qe,default:!1,tag:"tag:yaml.org,2002:set",createNode:c((s,e,t)=>Qe.from(s,e,t),"createNode"),resolve(s,e){if(_e(s)){if(s.hasAllNullValues(!0))return Object.assign(new Qe,s);e("Set items must all have null values")}else e("Expected a mapping for this tag");return s}};function In(s,e){const t=s[0],n=t==="-"||t==="+"?s.substring(1):s,i=c(o=>e?BigInt(o):Number(o),"num"),r=n.replace(/_/g,"").split(":").reduce((o,a)=>o*i(60)+i(a),i(0));return t==="-"?i(-1)*r:r}c(In,"parseSexagesimal");function zs(s){let{value:e}=s,t=c(o=>o,"num");if(typeof e=="bigint")t=c(o=>BigInt(o),"num");else if(isNaN(e)||!isFinite(e))return oe(s);let n="";e<0&&(n="-",e*=t(-1));const i=t(60),r=[e%i];return e<60?r.unshift(0):(e=(e-r[0])/i,r.unshift(e%i),e>=60&&(e=(e-r[0])/i,r.unshift(e))),n+r.map(o=>String(o).padStart(2,"0")).join(":").replace(/000000\d*$/,"")}c(zs,"stringifySexagesimal");const Qs={identify:c(s=>typeof s=="bigint"||Number.isInteger(s),"identify"),default:!0,tag:"tag:yaml.org,2002:int",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,resolve:c((s,e,{intAsBigInt:t})=>In(s,t),"resolve"),stringify:zs},Xs={identify:c(s=>typeof s=="number","identify"),default:!0,tag:"tag:yaml.org,2002:float",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*$/,resolve:c(s=>In(s,!1),"resolve"),stringify:zs},Kt={identify:c(s=>s instanceof Date,"identify"),default:!0,tag:"tag:yaml.org,2002:timestamp",test:RegExp("^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})(?:(?:t|T|[ \\t]+)([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\.[0-9]+)?)(?:[ \\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?)?$"),resolve(s){const e=s.match(Kt.test);if(!e)throw new Error("!!timestamp expects a date, starting with yyyy-mm-dd");const[,t,n,i,r,o,a]=e.map(Number),l=e[7]?Number((e[7]+"00").substr(1,3)):0;let u=Date.UTC(t,n-1,i,r||0,o||0,a||0,l);const p=e[8];if(p&&p!=="Z"){let d=In(p,!1);Math.abs(d)<30&&(d*=60),u-=6e4*d}return new Date(u)},stringify:c(({value:s})=>s?.toISOString().replace(/(T00:00:00)?\.000Z$/,"")??"","stringify")},Zs=[Je,We,xt,Pt,Hs,Ys,ro,oo,ao,co,no,so,io,Sn,ge,kn,Cn,vn,Qs,Xs,Kt],ei=new Map([["core",Xr],["failsafe",[Je,We,xt]],["json",to],["yaml11",Zs],["yaml-1.1",Zs]]),ti={binary:Sn,bool:wn,float:js,floatExp:Ks,floatNaN:_s,floatTime:Xs,int:qs,intHex:Us,intOct:Bs,intTime:Qs,map:Je,merge:ge,null:Pt,omap:kn,pairs:Cn,seq:We,set:vn,timestamp:Kt},lo={"tag:yaml.org,2002:binary":Sn,"tag:yaml.org,2002:merge":ge,"tag:yaml.org,2002:omap":kn,"tag:yaml.org,2002:pairs":Cn,"tag:yaml.org,2002:set":vn,"tag:yaml.org,2002:timestamp":Kt};function Tn(s,e,t){const n=ei.get(e);if(n&&!s)return t&&!n.includes(ge)?n.concat(ge):n.slice();let i=n;if(!i)if(Array.isArray(s))i=[];else{const r=Array.from(ei.keys()).filter(o=>o!=="yaml11").map(o=>JSON.stringify(o)).join(", ");throw new Error(`Unknown schema "${e}"; use one of ${r} or define customTags array`)}if(Array.isArray(s))for(const r of s)i=i.concat(r);else typeof s=="function"&&(i=s(i.slice()));return t&&(i=i.concat(ge)),i.reduce((r,o)=>{const a=typeof o=="string"?ti[o]:o;if(!a){const l=JSON.stringify(o),u=Object.keys(ti).map(p=>JSON.stringify(p)).join(", ");throw new Error(`Unknown custom tag ${l}; use one of ${u}`)}return r.includes(a)||r.push(a),r},[])}c(Tn,"getTags");const uo=c((s,e)=>s.key<e.key?-1:s.key>e.key?1:0,"sortMapEntriesByKey");class Zt{static{c(this,"Schema")}constructor({compat:e,customTags:t,merge:n,resolveKnownTags:i,schema:r,sortMapEntries:o,toStringDefaults:a}){this.compat=Array.isArray(e)?Tn(e,"compat"):e?Tn(null,e):null,this.name=typeof r=="string"&&r||"core",this.knownTags=i?lo:{},this.tags=Tn(t,this.name,n),this.toStringOptions=a??null,Object.defineProperty(this,be,{value:Je}),Object.defineProperty(this,fe,{value:xt}),Object.defineProperty(this,Me,{value:We}),this.sortMapEntries=typeof o=="function"?o:o===!0?uo:null}clone(){const e=Object.create(Zt.prototype,Object.getOwnPropertyDescriptors(this));return e.tags=this.tags.slice(),e}}function fo(s,e){const t=[];let n=e.directives===!0;if(e.directives!==!1&&s.directives){const l=s.directives.toString(s);l?(t.push(l),n=!0):s.directives.docStart&&(n=!0)}n&&t.push("---");const i=Ds(s,e),{commentString:r}=i.options;if(s.commentBefore){t.length!==1&&t.unshift("");const l=r(s.commentBefore);t.unshift(me(l,""))}let o=!1,a=null;if(s.contents){if(U(s.contents)){if(s.contents.spaceBefore&&n&&t.push(""),s.contents.commentBefore){const p=r(s.contents.commentBefore);t.push(me(p,""))}i.forceBlockIndent=!!s.comment,a=s.contents.comment}const l=a?void 0:()=>o=!0;let u=Ue(s.contents,i,()=>a=null,l);a&&(u+=Oe(u,"",r(a))),(u[0]==="|"||u[0]===">")&&t[t.length-1]==="---"?t[t.length-1]=`--- ${u}`:t.push(u)}else t.push(Ue(s.contents,i));if(s.directives?.docEnd)if(s.comment){const l=r(s.comment);l.includes(`
56
56
  `)?(t.push("..."),t.push(me(l,""))):t.push(`... ${l}`)}else t.push("...");else{let l=s.comment;l&&o&&(l=l.replace(/^\n+/,"")),l&&((!o||a)&&t[t.length-1]!==""&&t.push(""),t.push(me(r(l),"")))}return t.join(`
57
57
  `)+`
58
- `}c(fo,"stringifyDocument");class Xe{static{c(this,"Document")}constructor(e,t,n){this.commentBefore=null,this.comment=null,this.errors=[],this.warnings=[],Object.defineProperty(this,se,{value:fn});let i=null;typeof t=="function"||Array.isArray(t)?i=t:n===void 0&&t&&(n=t,t=void 0);const r=Object.assign({intAsBigInt:!1,keepSourceTokens:!1,logLevel:"warn",prettyErrors:!0,strict:!0,stringKeys:!1,uniqueKeys:!0,version:"1.2"},n);this.options=r;let{version:o}=r;n?._directives?(this.directives=n._directives.atDocument(),this.directives.yaml.explicit&&(o=this.directives.yaml.version)):this.directives=new Z({version:o}),this.setSchema(o,n),this.contents=e===void 0?null:this.createNode(e,i,n)}clone(){const e=Object.create(Xe.prototype,{[se]:{value:fn}});return e.commentBefore=this.commentBefore,e.comment=this.comment,e.errors=this.errors.slice(),e.warnings=this.warnings.slice(),e.options=Object.assign({},this.options),this.directives&&(e.directives=this.directives.clone()),e.schema=this.schema.clone(),e.contents=U(this.contents)?this.contents.clone(e.schema):this.contents,this.range&&(e.range=this.range.slice()),e}add(e){Ge(this.contents)&&this.contents.add(e)}addIn(e,t){Ge(this.contents)&&this.contents.addIn(e,t)}createAlias(e,t){if(!e.anchor){const n=Ts(this);e.anchor=!t||n.has(t)?Ns(t||"a",n):t}return new kt(e.anchor)}createNode(e,t,n){let i;if(typeof t=="function")e=t.call({"":e},"",e),i=t;else if(Array.isArray(t)){const y=c(E=>typeof E=="number"||E instanceof String||E instanceof Number,"keyToStr"),C=t.filter(y).map(String);C.length>0&&(t=t.concat(C)),i=t}else n===void 0&&t&&(n=t,t=void 0);const{aliasDuplicateObjects:r,anchorPrefix:o,flow:a,keepUndefined:l,onTagObj:u,tag:p}=n??{},{onAnchor:d,setAnchors:h,sourceObjects:g}=jr(this,o||"a"),w={aliasDuplicateObjects:r??!0,keepUndefined:l??!1,onAnchor:d,onTagObj:u,replacer:i,schema:this.schema,sourceObjects:g},f=tt(e,p,w);return a&&q(f)&&(f.flow=!0),h(),f}createPair(e,t,n={}){const i=this.createNode(e,null,n),r=this.createNode(t,null,n);return new Q(i,r)}delete(e){return Ge(this.contents)?this.contents.delete(e):!1}deleteIn(e){return nt(e)?this.contents==null?!1:(this.contents=null,!0):Ge(this.contents)?this.contents.deleteIn(e):!1}get(e,t){return q(this.contents)?this.contents.get(e,t):void 0}getIn(e,t){return nt(e)?!t&&_(this.contents)?this.contents.value:this.contents:q(this.contents)?this.contents.getIn(e,t):void 0}has(e){return q(this.contents)?this.contents.has(e):!1}hasIn(e){return nt(e)?this.contents!==void 0:q(this.contents)?this.contents.hasIn(e):!1}set(e,t){this.contents==null?this.contents=vt(this.schema,[e],t):Ge(this.contents)&&this.contents.set(e,t)}setIn(e,t){nt(e)?this.contents=t:this.contents==null?this.contents=vt(this.schema,Array.from(e),t):Ge(this.contents)&&this.contents.setIn(e,t)}setSchema(e,t={}){typeof e=="number"&&(e=String(e));let n;switch(e){case"1.1":this.directives?this.directives.yaml.version="1.1":this.directives=new Z({version:"1.1"}),n={resolveKnownTags:!1,schema:"yaml-1.1"};break;case"1.2":case"next":this.directives?this.directives.yaml.version=e:this.directives=new Z({version:e}),n={resolveKnownTags:!0,schema:"core"};break;case null:this.directives&&delete this.directives,n=null;break;default:{const i=JSON.stringify(e);throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${i}`)}}if(t.schema instanceof Object)this.schema=t.schema;else if(n)this.schema=new Zt(Object.assign(n,t));else throw new Error("With a null YAML version, the { schema: Schema } option is required")}toJS({json:e,jsonArg:t,mapAsMap:n,maxAliasCount:i,onAnchor:r,reviver:o}={}){const a={anchors:new Map,doc:this,keep:!e,mapAsMap:n===!0,mapKeyWarned:!1,maxAliasCount:typeof i=="number"?i:100},l=ie(this.contents,t??"",a);if(typeof r=="function")for(const{count:u,res:p}of a.anchors.values())r(p,u);return typeof o=="function"?Be(o,{"":l},"",l):l}toJSON(e,t){return this.toJS({json:!0,jsonArg:e,mapAsMap:!1,onAnchor:t})}toString(e={}){if(this.errors.length>0)throw new Error("Document with errors cannot be stringified");if("indent"in e&&(!Number.isInteger(e.indent)||Number(e.indent)<=0)){const t=JSON.stringify(e.indent);throw new Error(`"indent" option must be a positive integer, not ${t}`)}return fo(this,e)}}function Ge(s){if(q(s))return!0;throw new Error("Expected a YAML collection as document contents")}c(Ge,"assertCollection");class Nn extends Error{static{c(this,"YAMLError")}constructor(e,t,n,i){super(),this.name=e,this.code=n,this.message=i,this.pos=t}}class Le extends Nn{static{c(this,"YAMLParseError")}constructor(e,t,n){super("YAMLParseError",e,t,n)}}class ni extends Nn{static{c(this,"YAMLWarning")}constructor(e,t,n){super("YAMLWarning",e,t,n)}}const jt=c((s,e)=>t=>{if(t.pos[0]===-1)return;t.linePos=t.pos.map(a=>e.linePos(a));const{line:n,col:i}=t.linePos[0];t.message+=` at line ${n}, column ${i}`;let r=i-1,o=s.substring(e.lineStarts[n-1],e.lineStarts[n]).replace(/[\n\r]+$/,"");if(r>=60&&o.length>80){const a=Math.min(r-39,o.length-79);o="\u2026"+o.substring(a),r-=a-1}if(o.length>80&&(o=o.substring(0,79)+"\u2026"),n>1&&/^ *$/.test(o.substring(0,r))){let a=s.substring(e.lineStarts[n-2],e.lineStarts[n-1]);a.length>80&&(a=a.substring(0,79)+`\u2026
58
+ `}c(fo,"stringifyDocument");class Xe{static{c(this,"Document")}constructor(e,t,n){this.commentBefore=null,this.comment=null,this.errors=[],this.warnings=[],Object.defineProperty(this,ie,{value:fn});let i=null;typeof t=="function"||Array.isArray(t)?i=t:n===void 0&&t&&(n=t,t=void 0);const r=Object.assign({intAsBigInt:!1,keepSourceTokens:!1,logLevel:"warn",prettyErrors:!0,strict:!0,stringKeys:!1,uniqueKeys:!0,version:"1.2"},n);this.options=r;let{version:o}=r;n?._directives?(this.directives=n._directives.atDocument(),this.directives.yaml.explicit&&(o=this.directives.yaml.version)):this.directives=new Z({version:o}),this.setSchema(o,n),this.contents=e===void 0?null:this.createNode(e,i,n)}clone(){const e=Object.create(Xe.prototype,{[ie]:{value:fn}});return e.commentBefore=this.commentBefore,e.comment=this.comment,e.errors=this.errors.slice(),e.warnings=this.warnings.slice(),e.options=Object.assign({},this.options),this.directives&&(e.directives=this.directives.clone()),e.schema=this.schema.clone(),e.contents=U(this.contents)?this.contents.clone(e.schema):this.contents,this.range&&(e.range=this.range.slice()),e}add(e){Ge(this.contents)&&this.contents.add(e)}addIn(e,t){Ge(this.contents)&&this.contents.addIn(e,t)}createAlias(e,t){if(!e.anchor){const n=Ts(this);e.anchor=!t||n.has(t)?Ns(t||"a",n):t}return new kt(e.anchor)}createNode(e,t,n){let i;if(typeof t=="function")e=t.call({"":e},"",e),i=t;else if(Array.isArray(t)){const y=c(E=>typeof E=="number"||E instanceof String||E instanceof Number,"keyToStr"),C=t.filter(y).map(String);C.length>0&&(t=t.concat(C)),i=t}else n===void 0&&t&&(n=t,t=void 0);const{aliasDuplicateObjects:r,anchorPrefix:o,flow:a,keepUndefined:l,onTagObj:u,tag:p}=n??{},{onAnchor:d,setAnchors:h,sourceObjects:g}=jr(this,o||"a"),w={aliasDuplicateObjects:r??!0,keepUndefined:l??!1,onAnchor:d,onTagObj:u,replacer:i,schema:this.schema,sourceObjects:g},f=tt(e,p,w);return a&&q(f)&&(f.flow=!0),h(),f}createPair(e,t,n={}){const i=this.createNode(e,null,n),r=this.createNode(t,null,n);return new Q(i,r)}delete(e){return Ge(this.contents)?this.contents.delete(e):!1}deleteIn(e){return nt(e)?this.contents==null?!1:(this.contents=null,!0):Ge(this.contents)?this.contents.deleteIn(e):!1}get(e,t){return q(this.contents)?this.contents.get(e,t):void 0}getIn(e,t){return nt(e)?!t&&_(this.contents)?this.contents.value:this.contents:q(this.contents)?this.contents.getIn(e,t):void 0}has(e){return q(this.contents)?this.contents.has(e):!1}hasIn(e){return nt(e)?this.contents!==void 0:q(this.contents)?this.contents.hasIn(e):!1}set(e,t){this.contents==null?this.contents=vt(this.schema,[e],t):Ge(this.contents)&&this.contents.set(e,t)}setIn(e,t){nt(e)?this.contents=t:this.contents==null?this.contents=vt(this.schema,Array.from(e),t):Ge(this.contents)&&this.contents.setIn(e,t)}setSchema(e,t={}){typeof e=="number"&&(e=String(e));let n;switch(e){case"1.1":this.directives?this.directives.yaml.version="1.1":this.directives=new Z({version:"1.1"}),n={resolveKnownTags:!1,schema:"yaml-1.1"};break;case"1.2":case"next":this.directives?this.directives.yaml.version=e:this.directives=new Z({version:e}),n={resolveKnownTags:!0,schema:"core"};break;case null:this.directives&&delete this.directives,n=null;break;default:{const i=JSON.stringify(e);throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${i}`)}}if(t.schema instanceof Object)this.schema=t.schema;else if(n)this.schema=new Zt(Object.assign(n,t));else throw new Error("With a null YAML version, the { schema: Schema } option is required")}toJS({json:e,jsonArg:t,mapAsMap:n,maxAliasCount:i,onAnchor:r,reviver:o}={}){const a={anchors:new Map,doc:this,keep:!e,mapAsMap:n===!0,mapKeyWarned:!1,maxAliasCount:typeof i=="number"?i:100},l=re(this.contents,t??"",a);if(typeof r=="function")for(const{count:u,res:p}of a.anchors.values())r(p,u);return typeof o=="function"?Be(o,{"":l},"",l):l}toJSON(e,t){return this.toJS({json:!0,jsonArg:e,mapAsMap:!1,onAnchor:t})}toString(e={}){if(this.errors.length>0)throw new Error("Document with errors cannot be stringified");if("indent"in e&&(!Number.isInteger(e.indent)||Number(e.indent)<=0)){const t=JSON.stringify(e.indent);throw new Error(`"indent" option must be a positive integer, not ${t}`)}return fo(this,e)}}function Ge(s){if(q(s))return!0;throw new Error("Expected a YAML collection as document contents")}c(Ge,"assertCollection");class Nn extends Error{static{c(this,"YAMLError")}constructor(e,t,n,i){super(),this.name=e,this.code=n,this.message=i,this.pos=t}}class Le extends Nn{static{c(this,"YAMLParseError")}constructor(e,t,n){super("YAMLParseError",e,t,n)}}class ni extends Nn{static{c(this,"YAMLWarning")}constructor(e,t,n){super("YAMLWarning",e,t,n)}}const jt=c((s,e)=>t=>{if(t.pos[0]===-1)return;t.linePos=t.pos.map(a=>e.linePos(a));const{line:n,col:i}=t.linePos[0];t.message+=` at line ${n}, column ${i}`;let r=i-1,o=s.substring(e.lineStarts[n-1],e.lineStarts[n]).replace(/[\n\r]+$/,"");if(r>=60&&o.length>80){const a=Math.min(r-39,o.length-79);o="\u2026"+o.substring(a),r-=a-1}if(o.length>80&&(o=o.substring(0,79)+"\u2026"),n>1&&/^ *$/.test(o.substring(0,r))){let a=s.substring(e.lineStarts[n-2],e.lineStarts[n-1]);a.length>80&&(a=a.substring(0,79)+`\u2026
59
59
  `),o=a+o}if(/[^ ]/.test(o)){let a=1;const l=t.linePos[1];l&&l.line===n&&l.col>i&&(a=Math.max(1,Math.min(l.col-i,80-r)));const u=" ".repeat(r)+"^".repeat(a);t.message+=`:
60
60
 
61
61
  ${o}
@@ -137,7 +137,7 @@ ${t.comment}`:t.comment}this.doc.range[2]=t.offset;break}default:this.errors.pus
137
137
  `)+1;for(;t!==0;)this.onNewLine(this.offset+t),t=this.source.indexOf(`
138
138
  `,t)+1}yield*this.pop();break;default:yield*this.pop(),yield*this.step()}}*blockMap(e){const t=e.items[e.items.length-1];switch(this.type){case"newline":if(this.onKeyLine=!1,t.value){const n="end"in t.value?t.value.end:void 0;(Array.isArray(n)?n[n.length-1]:void 0)?.type==="comment"?n?.push(this.sourceToken):e.items.push({start:[this.sourceToken]})}else t.sep?t.sep.push(this.sourceToken):t.start.push(this.sourceToken);return;case"space":case"comment":if(t.value)e.items.push({start:[this.sourceToken]});else if(t.sep)t.sep.push(this.sourceToken);else{if(this.atIndentedComment(t.start,e.indent)){const i=e.items[e.items.length-2]?.value?.end;if(Array.isArray(i)){Array.prototype.push.apply(i,t.start),i.push(this.sourceToken),e.items.pop();return}}t.start.push(this.sourceToken)}return}if(this.indent>=e.indent){const n=!this.onKeyLine&&this.indent===e.indent,i=n&&(t.sep||t.explicitKey)&&this.type!=="seq-item-ind";let r=[];if(i&&t.sep&&!t.value){const o=[];for(let a=0;a<t.sep.length;++a){const l=t.sep[a];switch(l.type){case"newline":o.push(a);break;case"space":break;case"comment":l.indent>e.indent&&(o.length=0);break;default:o.length=0}}o.length>=2&&(r=t.sep.splice(o[1]))}switch(this.type){case"anchor":case"tag":i||t.value?(r.push(this.sourceToken),e.items.push({start:r}),this.onKeyLine=!0):t.sep?t.sep.push(this.sourceToken):t.start.push(this.sourceToken);return;case"explicit-key-ind":!t.sep&&!t.explicitKey?(t.start.push(this.sourceToken),t.explicitKey=!0):i||t.value?(r.push(this.sourceToken),e.items.push({start:r,explicitKey:!0})):this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken],explicitKey:!0}]}),this.onKeyLine=!0;return;case"map-value-ind":if(t.explicitKey)if(t.sep)if(t.value)e.items.push({start:[],key:null,sep:[this.sourceToken]});else if(ke(t.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:r,key:null,sep:[this.sourceToken]}]});else if(bi(t.key)&&!ke(t.sep,"newline")){const o=He(t.start),a=t.key,l=t.sep;l.push(this.sourceToken),delete t.key,delete t.sep,this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:o,key:a,sep:l}]})}else r.length>0?t.sep=t.sep.concat(r,this.sourceToken):t.sep.push(this.sourceToken);else if(ke(t.start,"newline"))Object.assign(t,{key:null,sep:[this.sourceToken]});else{const o=He(t.start);this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:o,key:null,sep:[this.sourceToken]}]})}else t.sep?t.value||i?e.items.push({start:r,key:null,sep:[this.sourceToken]}):ke(t.sep,"map-value-ind")?this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[],key:null,sep:[this.sourceToken]}]}):t.sep.push(this.sourceToken):Object.assign(t,{key:null,sep:[this.sourceToken]});this.onKeyLine=!0;return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{const o=this.flowScalar(this.type);i||t.value?(e.items.push({start:r,key:o,sep:[]}),this.onKeyLine=!0):t.sep?this.stack.push(o):(Object.assign(t,{key:o,sep:[]}),this.onKeyLine=!0);return}default:{const o=this.startBlockValue(e);if(o){if(o.type==="block-seq"){if(!t.explicitKey&&t.sep&&!ke(t.sep,"newline")){yield*this.pop({type:"error",offset:this.offset,message:"Unexpected block-seq-ind on same line with key",source:this.source});return}}else n&&e.items.push({start:r});this.stack.push(o);return}}}}yield*this.pop(),yield*this.step()}*blockSequence(e){const t=e.items[e.items.length-1];switch(this.type){case"newline":if(t.value){const n="end"in t.value?t.value.end:void 0;(Array.isArray(n)?n[n.length-1]:void 0)?.type==="comment"?n?.push(this.sourceToken):e.items.push({start:[this.sourceToken]})}else t.start.push(this.sourceToken);return;case"space":case"comment":if(t.value)e.items.push({start:[this.sourceToken]});else{if(this.atIndentedComment(t.start,e.indent)){const i=e.items[e.items.length-2]?.value?.end;if(Array.isArray(i)){Array.prototype.push.apply(i,t.start),i.push(this.sourceToken),e.items.pop();return}}t.start.push(this.sourceToken)}return;case"anchor":case"tag":if(t.value||this.indent<=e.indent)break;t.start.push(this.sourceToken);return;case"seq-item-ind":if(this.indent!==e.indent)break;t.value||ke(t.start,"seq-item-ind")?e.items.push({start:[this.sourceToken]}):t.start.push(this.sourceToken);return}if(this.indent>e.indent){const n=this.startBlockValue(e);if(n){this.stack.push(n);return}}yield*this.pop(),yield*this.step()}*flowCollection(e){const t=e.items[e.items.length-1];if(this.type==="flow-error-end"){let n;do yield*this.pop(),n=this.peek(1);while(n&&n.type==="flow-collection")}else if(e.end.length===0){switch(this.type){case"comma":case"explicit-key-ind":!t||t.sep?e.items.push({start:[this.sourceToken]}):t.start.push(this.sourceToken);return;case"map-value-ind":!t||t.value?e.items.push({start:[],key:null,sep:[this.sourceToken]}):t.sep?t.sep.push(this.sourceToken):Object.assign(t,{key:null,sep:[this.sourceToken]});return;case"space":case"comment":case"newline":case"anchor":case"tag":!t||t.value?e.items.push({start:[this.sourceToken]}):t.sep?t.sep.push(this.sourceToken):t.start.push(this.sourceToken);return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{const i=this.flowScalar(this.type);!t||t.value?e.items.push({start:[],key:i,sep:[]}):t.sep?this.stack.push(i):Object.assign(t,{key:i,sep:[]});return}case"flow-map-end":case"flow-seq-end":e.end.push(this.sourceToken);return}const n=this.startBlockValue(e);n?this.stack.push(n):(yield*this.pop(),yield*this.step())}else{const n=this.peek(2);if(n.type==="block-map"&&(this.type==="map-value-ind"&&n.indent===e.indent||this.type==="newline"&&!n.items[n.items.length-1].sep))yield*this.pop(),yield*this.step();else if(this.type==="map-value-ind"&&n.type!=="flow-collection"){const i=Gt(n),r=He(i);Si(e);const o=e.end.splice(1,e.end.length);o.push(this.sourceToken);const a={type:"block-map",offset:e.offset,indent:e.indent,items:[{start:r,key:e,sep:o}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=a}else yield*this.lineEnd(e)}}flowScalar(e){if(this.onNewLine){let t=this.source.indexOf(`
139
139
  `)+1;for(;t!==0;)this.onNewLine(this.offset+t),t=this.source.indexOf(`
140
- `,t)+1}return{type:e,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue(e){switch(this.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return this.flowScalar(this.type);case"block-scalar-header":return{type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken],source:""};case"flow-map-start":case"flow-seq-start":return{type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case"seq-item-ind":return{type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case"explicit-key-ind":{this.onKeyLine=!0;const t=Gt(e),n=He(t);return n.push(this.sourceToken),{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:n,explicitKey:!0}]}}case"map-value-ind":{this.onKeyLine=!0;const t=Gt(e),n=He(t);return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:n,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment(e,t){return this.type!=="comment"||this.indent<=t?!1:e.every(n=>n.type==="newline"||n.type==="space")}*documentEnd(e){this.type!=="doc-mode"&&(e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],this.type==="newline"&&(yield*this.pop()))}*lineEnd(e){switch(this.type){case"comma":case"doc-start":case"doc-end":case"flow-seq-end":case"flow-map-end":case"map-value-ind":yield*this.pop(),yield*this.step();break;case"newline":this.onKeyLine=!1;case"space":case"comment":default:e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],this.type==="newline"&&(yield*this.pop())}}}function Ci(s){const e=s.prettyErrors!==!1;return{lineCounter:s.lineCounter||e&&new yi||null,prettyErrors:e}}c(Ci,"parseOptions");function Uo(s,e={}){const{lineCounter:t,prettyErrors:n}=Ci(e),i=new _n(t?.addNewLine),r=new xn(e),o=Array.from(r.compose(i.parse(s)));if(n&&t)for(const a of o)a.errors.forEach(jt(s,t)),a.warnings.forEach(jt(s,t));return o.length>0?o:Object.assign([],{empty:!0},r.streamInfo())}c(Uo,"parseAllDocuments");function ki(s,e={}){const{lineCounter:t,prettyErrors:n}=Ci(e),i=new _n(t?.addNewLine),r=new xn(e);let o=null;for(const a of r.compose(i.parse(s),!0,s.length))if(!o)o=a;else if(o.options.logLevel!=="silent"){o.errors.push(new Le(a.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}return n&&t&&(o.errors.forEach(jt(s,t)),o.warnings.forEach(jt(s,t))),o}c(ki,"parseDocument");function Jo(s,e,t){let n;typeof e=="function"?n=e:t===void 0&&e&&typeof e=="object"&&(t=e);const i=ki(s,t);if(!i)return null;if(i.warnings.forEach(r=>xs(i.options.logLevel,r)),i.errors.length>0){if(i.options.logLevel!=="silent")throw i.errors[0];i.errors=[]}return i.toJS(Object.assign({reviver:n},t))}c(Jo,"parse");function Wo(s,e,t){let n=null;if(typeof e=="function"||Array.isArray(e)?n=e:t===void 0&&e&&(t=e),typeof t=="string"&&(t=t.length),typeof t=="number"){const i=Math.round(t);t=i<1?void 0:i>8?{indent:8}:{indent:i}}if(s===void 0){const{keepUndefined:i}=t??e??{};if(!i)return}return Ne(s)&&!n?s.toString(t):new Xe(s,n,t).toString(t)}c(Wo,"stringify");var Go=Object.freeze({__proto__:null,Alias:kt,CST:Fo,Composer:xn,Document:Xe,Lexer:gi,LineCounter:yi,Pair:Q,Parser:_n,Scalar:D,Schema:Zt,YAMLError:Nn,YAMLMap:te,YAMLParseError:Le,YAMLSeq:Ce,YAMLWarning:ni,isAlias:Se,isCollection:q,isDocument:Ne,isMap:_e,isNode:U,isPair:F,isScalar:_,isSeq:Ke,parse:Jo,parseAllDocuments:Uo,parseDocument:ki,stringify:Wo,visit:Ae,visitAsync:Ct});const Y={Added:"added",Changed:"changed",Deleted:"deleted",Stopped:"stopped"},Vo={ignored:Er,persistent:!0,ignoreInitial:!0,followSymlinks:!1,depth:20,awaitWriteFinish:{stabilityThreshold:500,pollInterval:100},ignorePermissionErrors:!0,atomic:!0,usePolling:!1,alwaysStat:!1,interval:1e3,binaryInterval:300};class Ho extends hs{static{c(this,"FileWatcher")}constructor(e){super(),this.options=e,this.membraneDir=bt(this.options.cwd)}isWatching=!1;watcher;membraneDir;contentCache={};async start(){this.isWatching||(x.existsSync(this.membraneDir)||x.mkdirSync(this.membraneDir,{recursive:!0}),this.initializeContentCache(),this.watcher=rr.watch(this.membraneDir,Vo),this.watcher.on("add",e=>this.handleFileSystemEvent(Y.Added,e)).on("change",e=>this.handleFileSystemEvent(Y.Changed,e)).on("unlink",e=>this.handleFileSystemEvent(Y.Deleted,e)).on("ready",()=>this.isWatching=!0))}async stop(){!this.isWatching||!this.watcher||(await this.watcher.close(),this.isWatching=!1,this.watcher=void 0,this.clearCache(),this.emit(Y.Stopped))}getCwd(){return this.options.cwd}handleFileSystemEvent(e,t){const n=R.relative(this.membraneDir,t);if(e===Y.Deleted){this.removeFromCache(n);const a={filePath:t,relativePath:n,data:void 0};N.info(`[local] ${e}: ${a.relativePath}`),this.emit(e,a);return}const i=this.readFileContent(t);if(!this.hasContentChanged(n,i,e))return;const o=this.processFileEvent(t,i);this.updateCache(n,i),o&&(N.info(`[local] ${e}: ${o.relativePath}`),this.emit(e,o))}readFileContent(e){return x.readFileSync(e,"utf8")}processFileEvent(e,t){const n=R.relative(this.membraneDir,e);let i;try{i=t?Go.parse(t):void 0}catch{i=void 0}return{filePath:e,relativePath:n,data:i}}hasContentChanged(e,t,n){if(n==="added")return!0;if(!t)return this.contentCache[e]!==void 0;const i=this.getContentHash(t);return this.contentCache[e]!==i}getContentHash(e){return sr.createHash("sha256").update(e).digest("hex")}updateCache(e,t){if(!t){delete this.contentCache[e];return}this.contentCache[e]=this.getContentHash(t)}removeFromCache(e){delete this.contentCache[e]}clearCache(){Object.keys(this.contentCache).forEach(e=>{delete this.contentCache[e]})}initializeContentCache(){x.existsSync(this.membraneDir)&&this.scanDirectoryForCache(this.membraneDir)}scanDirectoryForCache(e){const t=x.readdirSync(e,{withFileTypes:!0});for(const n of t){const i=R.join(e,n.name);if(n.isDirectory())this.scanDirectoryForCache(i);else if(n.isFile())try{const r=x.readFileSync(i,"utf8"),o=R.relative(this.membraneDir,i);this.updateCache(o,r)}catch{}}}}const X={UPDATE:"update",DELETE:"delete",CREATE:"create"},re={INCOMING:"incoming",OUTGOING:"outgoing"};async function Yo(s,e="full"){const t={};N.info("[connectors] Getting remote workspace data");const n=await pe.withThrottle(()=>s.integrations.findAll());t.integration=n.map(i=>Kn("integration",i));for(const i of Object.keys(ne)){const r=ne[i];if(r.exportable===!1)continue;const o=[];N.info(`[connectors] Reading ${r.elements} from remote workspace`);const a=await pe.withThrottle(()=>s[r.elements].findAll());if(o.push(...a.map(l=>Kn(i,l))),r.integrationSpecific)for(const l of n){const u=await pe.withThrottle(()=>s[r.elements].findAll({integrationId:l.id}));o.push(...u.map(p=>(p.integrationKey=l.key,Kn(i,p))))}o.length>0&&e=="full"&&(console.table(o.map(l=>({key:l.key,integrationKey:l.integrationKey,universal:!l.integrationKey})).reduce((l,u)=>(l||(l={}),l[u.key]||(l[u.key]={}),u.universal&&(l[u.key].universal=!0),u.integrationKey&&(l[u.key].integration?l[u.key].integration+=` ${u.integrationKey}`:l[u.key].integration=u.integrationKey),l),{})),console.groupEnd()),t[i]=o}return N.success("[connectors] Remote workspace data retrieved successfully"),t}c(Yo,"getWorkspaceData");function Kn(s,e){return e=Cr(e),ne[s].exportCleanup?ne[s].exportCleanup(e):e}c(Kn,"cleanUpForExport");const ut="connectors",ft="development",jn={};async function zo({integrations:s,allConnectors:e=!1}){const t=Nr(),n=await ue.getClient(process.cwd()),i=new Set,r={};for(const o of s){const a=o.connectorId,l=o.connectorVersion;if(!r[a]?.has(o.connectorVersion)){const u=await Ei({client:n,connectorId:a}),d=!!u.workspaceId||e;if(!u?.key){N.error(`[connectors] Connector ${a} has no key. Skipping..`);continue}d&&(i.has(a)||(await ta({basePath:t,connector:u}),i.add(a)),r[a]||(r[a]=new Set),r[a].has(l)||(await na({client:n,connector:u,connectorVersion:l,basePath:t}),r[a].add(l)))}}}c(zo,"pullConnectors");async function Qo(){const s=await ue.getClient(process.cwd()),e=await Yo(s,"minified"),n=(await s.get("org-workspace-id")).id,i={};N.info("[connectors] Loading custom connectors");const r=s,o=await r.get(`/connectors?workspaceId=${n}`);N.info("[connectors] Loading public connectors"),e.connector=o;const a=Fn(),u=(P.existsSync(a)?P.readdirSync(a):[]).filter(p=>{if(p.startsWith("."))return!1;const d=B.join(a,p);try{return P.statSync(d).isDirectory()}catch{return!1}});for(const p of u){N.info(`[connectors] Loading connector from: ${p}`);const d=P.readdirSync(B.join(a,p)),h=await Bn(p);if("baseUri"in h&&delete h.baseUri,h.uuid&&e.connector?.find(w=>w.uuid==h.uuid))i[h.id]=e.connector.find(w=>w.uuid==h.uuid).id,N.info(`[connectors] Matched ${h.name} uuid: ${h.uuid}`);else if(!i[h.id]){let w=!1;try{const f=await Ei({client:s,connectorId:h.id});f&&!f.workspaceId&&(w=!0)}catch{}if(!w){N.info(`[connectors] Creating custom connector ${h.name} (${h.key})`);const f=await r.post("connectors",{...h,workspaceId:n});i[h.id]=f.id}}const g=d.filter(w=>P.statSync(B.join(a,p,w)).isDirectory());for(const w of g)await ea({client:s,connector:h,version:w,connectorId:i[h.id]})}return i}c(Qo,"pushConnectors");function Fn(){const s=ln();return B.join(s.membraneDirPath,ut)}c(Fn,"getConnectorsPath");async function Bn(s){return Te.load(P.readFileSync(B.join(Fn(),s,`${s}.yml`),"utf8"))}c(Bn,"readConnector");async function Xo(s,e){return N.info(`[connectors] Zipping ${s} into ${e}`),new Promise((t,n)=>{const i=P.createWriteStream(e),r=or("zip",{zlib:{level:9}});i.on("close",()=>{N.success(`[connectors] Successfully created ${e}`),t()}),i.on("end",()=>{N.info("[connectors] Data has been drained")}),r.on("warning",a=>{a.code==="ENOENT"?console.warn(a):n(a)}),r.on("error",a=>{n(a)}),r.pipe(i);const o=P.readdirSync(s);for(const a of o){const l=B.join(s,a),u=P.statSync(l);u.isFile()?r.file(l,{name:a}):u.isDirectory()&&r.directory(l,a)}r.finalize()})}c(Xo,"createZipArchive");async function Zo(s,e){return N.info(`[connectors] Unzipping into ${e}`),new Promise((t,n)=>{const i=cr.Parse();i.on("entry",r=>{const o=r.path;if(r.type==="Directory"){const l=B.join(e,o);P.mkdirSync(l,{recursive:!0}),r.autodrain()}else{const l=B.join(e,o),u=B.dirname(l);P.mkdirSync(u,{recursive:!0});const p=P.createWriteStream(l);r.pipe(p),p.on("finish",()=>{})}}),i.on("end",()=>{N.success(`[connectors] Successfully extracted to ${e}`),t()}),i.on("error",r=>{n(r)}),i.write(s),i.end()})}c(Zo,"extractZipArchive");async function ea({client:s,connector:e,version:t,connectorId:n}){const i=B.join(Fn(),Vt(e),vi(t)),r=B.join(i,"src"),o=B.join(i,"src.zip"),a=P.existsSync(o);if(P.existsSync(r)&&(N.info(`[connectors] Archiving source code for ${e.name} version ${t}`),await Xo(r,o)),!P.existsSync(o)){N.warning(`[connectors] No source code found for ${e.name} version ${t}`);return}try{const l=new ar;if(l.append("file",P.createReadStream(o),"file.zip"),N.info(`[connectors] Pushing connector version ${t} for ${e.name}`),t==ft)N.info(`[connectors] Uploading connector ${n}`),await s.post(`connectors/${n}/upload`,l,{headers:{...l.getHeaders()}});else{if(l.append("version",t),l.append("changelog","Imported Version"),(await s.get(`/connectors/${n}/versions`)).find(p=>p.version==t)){N.info(`[connectors] Version ${t} already published`);return}N.info(`[connectors] Publishing version ${t} of connector ${n}`),await s.post(`connectors/${n}/publish-version`,l,{headers:{...l.getHeaders()}})}N.success(`Successfully pushed connector version ${t} for ${e.name}`)}catch(l){N.error(`Error pushing connector version ${t} for ${e.name}: ${l}`)}finally{!a&&P.existsSync(o)&&(N.info(`[connectors] Cleaning up temporary zip file for ${e.name} version ${t}`),P.unlinkSync(o))}}c(ea,"pushConnectorVersion");async function Ei({client:s,connectorId:e}){if(jn[e])return jn[e];const t=await s.get(`connectors/${e}`);return jn[e]=t,t}c(Ei,"getConnector");async function ta({basePath:s,connector:e}){const t=Vt(e),n=B.join(s,ut,t);P.mkdirSync(n,{recursive:!0});const i=B.join(n,`${Vt(e)}.yml`);P.writeFileSync(i,Te.dump(e)),N.info(`[connectors] Pulled connector ${e.name}`)}c(ta,"pullConnector");async function na({client:s,connector:e,connectorVersion:t,basePath:n}){const i=Vt(e),r=vi(t),o=B.join(n,"connectors",i,r),a=await s.get(`connectors/${e.id}/download`,{version:t},{responseType:"arraybuffer",headers:{Accept:"application/zip"},timeout:1e6});P.mkdirSync(o,{recursive:!0});const l=B.join(o,"src.zip");if(P.writeFileSync(l,a),!t){const u=B.join(o,"src");P.mkdirSync(u,{recursive:!0}),await Zo(a,u)}N.info(`[connectors] Pulled connector version: ${e.name} (${r})`)}c(na,"pullConnectorVersion");function Vt(s){return s.key}c(Vt,"getConnectorDirName");function vi(s){return s??ft}c(vi,"getConnectorVersionDirName");function sa(s){return s.match(`${ut}/[^/]+/${ft}/src/.*`)!==null}c(sa,"isConnectorSourceFile");async function ia(s){const e=s.match(`${ut}/([^/]+)/${ft}/src/(.*)`);if(!e)return;const t=e[1],n=e[2],i=await Bn(t);if(!i){N.warning(`[connectors] Connector ${t} not found. Ignoring file change`);return}const r=i.id,o=P.readFileSync(s,"utf-8");await(await ue.getClient()).put(`connectors/${r}/files/${n}`,o,{headers:{"Content-Type":"text/plain"}}),N.info(`[connectors] Pushed file ${n} for connector ${i.name}`)}c(ia,"putConnectorFile");async function ra(s){const e=s.match(`${ut}/([^/]+)/${ft}/src/(.*)`);if(!e)return;const t=e[1],n=e[2],i=await Bn(t);if(!i){N.warning(`[connectors] Connector ${t} not found. Ignoring file change`);return}const r=i.id;await(await ue.getClient()).delete(`connectors/${r}/files/${n}`),N.info(`[connectors] Deleted file ${n} for connector ${i.name}`)}c(ra,"deleteConnectorFile");class mt{static{c(this,"ElementSyncService")}fileWatcher=void 0;notifier;changes=[];localCache;remoteCache;localRepo;remoteRepo;constructor(){this.notifier=de,this.localCache=new ws,this.remoteCache=new ws,this.localRepo=new Pr(this.localCache),this.remoteRepo=new Mr(this.remoteCache)}clear(){this.changes=[]}needsForcedSync(){return this.changes.some(e=>e.isConflict)}needsSync(){return this.changes.length>0}async getStats(){const e=this.localCache.getAll(),t={};return e.forEach(n=>{t[n.type]=(t[n.type]||0)+1}),t}async fetchElements(){const e=await this.localRepo.getElements(),t=await this.remoteRepo.getElements();this.localCache.addAll(e),this.remoteCache.addAll(t)}async updateElement(e,t){const n=this.getHandler(t),i=this.getCache(t);try{await n.putElement(e),i.put(e)}catch(r){throw N.error(`Failed to update element ${e.id}: ${r}`),r}}async deleteElement(e,t){const n=this.getHandler(t),i=this.getCache(t);try{await n.deleteElement(e,{elements:n.cache.getAll(),connectorsMapping:n.connectorsMapping}),i.remove(e)}catch(r){throw N.error(`Failed to delete element ${e.id}: ${r}`),r}}async pullConnectors(e=!1){await zo({integrations:this.remoteCache.getElementsByType(M.Integration).map(t=>t.data),allConnectors:e})}async pushConnectors(){const e=await Qo();this.remoteRepo.setConnectorsMapping(e)}getHandler(e){return e===re.INCOMING?this.localRepo:this.remoteRepo}getCache(e){return e===re.INCOMING?this.localCache:this.remoteCache}async startWatching(){this.fileWatcher=new Ho({cwd:process.cwd()}),this.fileWatcher.on(Y.Added,e=>this.handleLocalEvent(e,Y.Added)),this.fileWatcher.on(Y.Changed,e=>this.handleLocalEvent(e,Y.Changed)),this.fileWatcher.on(Y.Deleted,e=>this.handleLocalEvent(e,Y.Deleted)),await this.fileWatcher.start(),N.success("[local] Tracking changes..")}async stopWatching(){await this.fileWatcher?.stop(),this.fileWatcher=void 0}async handleLocalEvent(e,t){try{if(sa(e.filePath))switch(t){case Y.Added:case Y.Changed:await ia(e.filePath);break;case Y.Deleted:await ra(e.filePath);break}else{let n=G.fromPathAndData(e.filePath,e.data);if(!n){const i=G.idFromPath(e.filePath);if(!i||(n=this.remoteCache.get(i),!n))return}switch(N.info(`[resolver][${this.getDirectionLabel(re.OUTGOING)}] ${t}: ${n.id}`),t){case Y.Added:case Y.Changed:await this.updateElement(n,re.OUTGOING);break;case Y.Deleted:await this.deleteElement(n,re.OUTGOING);break}}}catch(n){N.error(`[sync] Error handling local event: ${n}`)}}detectIncomingChanges(){this.clearChanges();const e=mt.getChanges(re.INCOMING,this.remoteCache,this.localCache);return this.updateChanges(e),e}detectOutgoingChanges(){this.clearChanges();const e=mt.getChanges(re.OUTGOING,this.localCache,this.remoteCache);return this.updateChanges(e),e}getChange(e){const t=this.localCache.get(e.id),n=this.remoteCache.get(e.id);return!t&&n?{type:X.CREATE,element:n,direction:re.INCOMING,isConflict:!1}:t&&!n?{type:X.DELETE,element:t,direction:re.OUTGOING,isConflict:!0}:t&&n&&!t.isEqual(n)?{type:X.UPDATE,element:t,direction:re.OUTGOING,isConflict:!0}:null}async resolveChanges(){if(!this.needsSync())return;N.info("[resolver] Resolving changes..");const e=this.changes.filter(r=>r.element.type===M.Integration),t=this.changes.filter(r=>r.element.type!==M.Integration),n=t.filter(r=>r.element.hasParent()),i=t.filter(r=>!r.element.hasParent());await Promise.all(e.map(async r=>this.resolveChange(r))),await Promise.all(i.map(async r=>this.resolveChange(r))),await Promise.all(n.map(async r=>this.resolveChange(r))),N.success(`[resolver] Resolved ${this.changes.length} changes`)}async resolveChange(e){switch(e.type){case X.DELETE:return N.info(`[resolver][${this.getDirectionLabel(e.direction)}] Deleting ${e.element.id}`),this.deleteElement(e.element,e.direction);case X.CREATE:return N.info(`[resolver][${this.getDirectionLabel(e.direction)}] Creating ${e.element.id}`),this.updateElement(e.element,e.direction);case X.UPDATE:return N.info(`[resolver][${this.getDirectionLabel(e.direction)}] Updating ${e.element.id}`),this.updateElement(e.element,e.direction)}}static getChanges(e,t,n){const i=t.getAllIds(),r=n.getAllIds(),o=new Set([...i,...r]),a=[];for(const l of o){const u=t.get(l),p=n.get(l),d=mt.detectChangeForElement(u,p,e);d&&a.push(d)}return a}updateChanges(e){this.changes=e;for(const t of e)N.info(`[resolver][${this.getDirectionLabel(t.direction)}] ${this.getTypeLabel(t.type)} ${t.element.id}`);if(this.needsForcedSync()){const t=e.filter(n=>n.isConflict);N.warning("[resolver] Conflicts detected"),this.notifier.setConflicts(t)}}clearChanges(){this.changes=[]}getDirectionLabel(e){switch(e){case re.INCOMING:return"local\u2190remote";case re.OUTGOING:return"local\u2192remote"}}getTypeLabel(e){switch(e){case X.CREATE:return"ADD";case X.UPDATE:return"UPD";case X.DELETE:return"DEL"}}static detectChangeForElement(e,t,n){return e&&!t?{type:X.CREATE,element:e,direction:n,isConflict:!1}:!e&&t?{type:X.DELETE,element:t,direction:n,isConflict:!0}:e&&t&&!e.isEqual(t)?{type:X.UPDATE,element:e,direction:n,isConflict:!0}:null}}const Ee=R.join(lr.tmpdir(),"membrane-mcp-status"),Ii=3e4;class oa{static{c(this,"McpStatusService")}constructor(e=2e3){this.pollIntervalMs=e}isRunning=!1;pollInterval;async start(){this.isRunning||(this.isRunning=!0,this.pollInterval=setInterval(async()=>await this.checkStatus(),this.pollIntervalMs),await this.checkStatus())}async stop(){this.pollInterval&&(clearInterval(this.pollInterval),this.pollInterval=void 0,this.isRunning=!1)}async checkStatus(){try{const e=process.cwd(),t=Ht(void 0,e),n=Ti(e);t&&de.setMcpStatus(t),await de.setMcpServers(n)}catch{N.error("Failed to check MCP status")}}}function Ht(s,e){try{const t=e||process.cwd();if(!s){const i=Ti(t);return i.length===0?null:i[0]}const n=Jn(s,t);if(x.existsSync(n)){const i=x.statSync(n),r=new Date;if(r.getTime()-i.mtime.getTime()>Ii)return ht(s,t),null;const a=x.readFileSync(n,"utf8"),l=JSON.parse(a);if(l.isRunning){const u=new Date(l.lastActivity).getTime();if(r.getTime()-u>Ii)return ht(s,t),null}return l}}catch{s&&e&&ht(s,e)}return null}c(Ht,"getMcpStatus");function Ti(s){try{const e=s||process.cwd(),t=Un(e);if(!x.existsSync(Ee))return[];const n=x.readdirSync(Ee),i=[];for(const r of n){const o=r.match(new RegExp(`^mcp-${t}-(\\d+)\\.json$`));if(o){const a=parseInt(o[1],10),l=Ht(a,e);l&&i.push(l)}}return i.sort((r,o)=>new Date(o.startTime).getTime()-new Date(r.startTime).getTime())}catch{return[]}}c(Ti,"getAllMcpStatusFiles");function qn(s){try{const t={...Ht(s.processId,s.cwd)||{isRunning:!1,startTime:new Date().toISOString(),lastActivity:new Date().toISOString(),toolsCount:0,totalRequests:0,processId:s.processId,cwd:s.cwd,agentName:process.env.AGENT_NAME||"Unnamed Agent"},...s};x.existsSync(Ee)||x.mkdirSync(Ee,{recursive:!0});const n=Jn(s.processId,s.cwd);x.writeFileSync(n,JSON.stringify(t,null,2))}catch{}}c(qn,"updateMcpStatus");function ht(s,e){try{const t=e||process.cwd();if(s){const n=Jn(s,t);x.existsSync(n)&&x.unlinkSync(n)}else{const n=Un(t);if(x.existsSync(Ee)){const i=x.readdirSync(Ee);for(const r of i)r.match(new RegExp(`^mcp-${n}-\\d+\\.json$`))&&x.unlinkSync(R.join(Ee,r))}}}catch{}}c(ht,"clearMcpStatus");function aa(s,e){const t=Ht(s,e);t&&qn({processId:s,cwd:e,totalRequests:t.totalRequests+1,lastRequestTime:new Date().toISOString(),lastActivity:new Date().toISOString()})}c(aa,"trackToolExecution");function Un(s){return ir("md5").update(s).digest("hex").slice(0,8)}c(Un,"getCwdHash");function Jn(s,e){const t=Un(e);return R.join(Ee,`mcp-${t}-${s}.json`)}c(Jn,"getStatusFilePath");const dt={Agent:"agent",Cli:"cli"},L={NOT_INITIALIZED:"not_initialized",SETTING_UP:"setting_up",INITIALIZED:"initialized",NOT_SYNCED:"not_synced",PULLING:"pulling",PUSHING:"pushing",RESOLVING:"resolving",CONFLICTS:"conflicts",SYNCED:"synced",WATCHING:"watching",ERROR:"error"};class Ni{static{c(this,"MembraneCLIService")}constructor(e,t,n=()=>process.exit(0)){this.mode=e,this.cwd=t,this.onShutdown=n,this.notifier=de,this.mcpStatusService=new oa,this.syncService=new mt,this.setupProcessCleanup()}initialized=!1;notifier;mcpStatusService;syncService;isShuttingDown=!1;currentConfig=null;get config(){return this.currentConfig}async pullWorkspace(e={}){try{if(await this.notifier.setState(L.PULLING),await this.syncService.fetchElements(),this.syncService.detectIncomingChanges(),this.syncService.needsForcedSync()&&!e.force)return this.notifier.setState(L.CONFLICTS);await this.syncService.pullConnectors(e.allConnectors),await this.syncWorkspaces(e)}catch(t){N.error(`Failed to pull workspace: ${t}`),await this.notifier.setState(L.ERROR),e?.onComplete?.()}}async pushWorkspace(e={}){try{if(await this.notifier.setState(L.PUSHING),await this.syncService.fetchElements(),this.syncService.detectOutgoingChanges(),this.syncService.needsForcedSync()&&!e.force)return await this.notifier.setState(L.CONFLICTS);await this.syncService.pushConnectors(),await this.syncWorkspaces(e)}catch(t){N.error(`Failed to push workspace: ${t}`),await this.notifier.setState(L.ERROR),e?.onComplete?.()}}async syncWorkspaces(e={}){try{await this.notifier.setState(L.RESOLVING),this.syncService.needsSync()&&await this.syncService.resolveChanges();const t=await this.syncService.getStats();this.notifier.setStats(t),await this.notifier.setState(L.SYNCED),e.watch&&(await this.notifier.setState(L.WATCHING),await this.syncService.startWatching()),e.onComplete?.()}catch(t){N.error(`Failed to sync local and remote workspaces: ${t}`),await this.notifier.setState(L.ERROR),e?.onComplete?.()}}async init({force:e=!1}={}){if(!(this.initialized&&!e)){await this.notifier.setState(L.NOT_INITIALIZED);try{await this.loadConfig(),et.isCacheDefined()?(await this.initServices(),this.initialized=!0,await this.notifier.setState(L.INITIALIZED)):(this.initialized=!1,await this.notifier.setState(L.SETTING_UP))}catch(t){N.error(`Failed to initialize services: ${t}`),await this.notifier.setState(L.ERROR),this.onShutdown()}}}async loadConfig(){this.currentConfig=et.loadConfig(this.cwd),this.notifier.setConfig(this.currentConfig)}async updateConfig(e){const t={...this.currentConfig,...e};if(!(JSON.stringify(t)!==JSON.stringify(this.currentConfig)))return;await this.stopServices();const i=et.updateConfig(t);this.currentConfig=i,await this.init({force:!0})}async shutdown(){!this.initialized||this.isShuttingDown||(this.isShuttingDown=!0,this.mode===dt.Agent&&(await this.notifier.cleanup(),await this.mcpStatusService.stop()),this.initialized=!1,this.onShutdown())}async initServices(){this.mode===dt.Agent&&(await this.notifier.connectToRemote(),await this.mcpStatusService.start()),this.syncService.clear()}async stopServices(){this.mode===dt.Agent&&(await this.notifier.cleanup(),await this.mcpStatusService.stop())}setupProcessCleanup(){["SIGINT","SIGTERM","uncaughtException","unhandledRejection"].forEach(t=>process.on(t,()=>this.shutdown())),process.on("beforeExit",t=>{t===0&&this.shutdown()})}}const Ai=ss(null);function ca({children:s,membraneCLIService:e}){const{data:t}=rs("/account"),[n,i]=j(L.NOT_INITIALIZED),[r,o]=j([]),[a,l]=j({}),[u,p]=j([]),[d,h]=j(null),w=t?.workspaces?.find(f=>f.workspaceKey===d?.workspaceKey)||null;return Ie(()=>{const f=c(({state:I})=>i(I),"handleStateChanged"),y=c(({stats:I})=>l(I),"handleStatsChanged"),C=c(({log:I})=>p(O=>[...O,I]),"handleLogAdded"),E=c(({conflicts:I})=>o(I),"handleConflictsUpdated"),A=c(({config:I})=>h(I),"handleConfigChanged");return e.notifier.on(J.StateChanged,f),e.notifier.on(J.StatsChanged,y),e.notifier.on(J.LogAdded,C),e.notifier.on(J.ConflictsChanged,E),e.notifier.on(J.ConfigChanged,A),e.init(),()=>{e.notifier.off(J.StateChanged,f),e.notifier.off(J.StatsChanged,y),e.notifier.off(J.LogAdded,C),e.notifier.off(J.ConflictsChanged,E),e.notifier.off(J.ConfigChanged,A)}},[]),m(Ai.Provider,{value:{state:n,stats:a,logs:u,currentWorkspace:w,conflicts:r,config:d,updateConfig:c(f=>e.updateConfig(f),"updateConfig"),resolveConflicts:c(f=>e.syncWorkspaces(f),"resolveConflicts"),pull:c(f=>e.pullWorkspace(f),"pull"),push:c(f=>e.pushWorkspace(f),"push"),exit:c(()=>e.shutdown(),"exit")},children:s})}c(ca,"MembraneCLIServiceProvider");function ce(){const s=is(Ai);if(!s)throw new Error("useMembraneCLIService must be used within MembraneCLIServiceProvider");return s}c(ce,"useMembraneCLIService");const Oi=ss(process.cwd());function la({cwd:s,children:e}){return m(Oi.Provider,{value:s,children:e})}c(la,"CwdProvider");function ua(){return is(Oi)}c(ua,"useCwd");function Yt({cwd:s,children:e,membraneCLIService:t}){const n=s||process.cwd();return m(la,{cwd:n,children:m(Vi,{value:{fetcher:$r()},children:m(ca,{membraneCLIService:t,children:e})})})}c(Yt,"Layout");const Wn=[{id:"claude-code",name:"Claude Code",description:"Anthropic Claude Code agent",actionDescription:"Adding membrane MCP to .mcp.json in the current directory",addConfig:c(()=>{const s=R.join(process.cwd(),".mcp.json"),e={mcpServers:{membrane:{command:"membrane",args:["mcp"],env:{AGENT_NAME:"Claude Code"}}}};let t={};if(x.existsSync(s))try{t=JSON.parse(x.readFileSync(s,"utf8"))}catch{t={}}const n={...t,mcpServers:{...t.mcpServers,...e.mcpServers}};return x.writeFileSync(s,JSON.stringify(n,null,2)),`MCP server configuration added to ${s}`},"addConfig")},{id:"cursor",name:"Cursor",description:"Cursor AI editor",actionDescription:"Adding membrane MCP to .cursor/mcp.json in the current directory",addConfig:c(()=>{const s=R.join(process.cwd(),".cursor"),e=R.join(s,"mcp.json");x.existsSync(s)||x.mkdirSync(s);const t={mcpServers:{membrane:{command:"membrane",args:["mcp"],env:{AGENT_NAME:"Cursor"}}}};let n={};if(x.existsSync(e))try{n=JSON.parse(x.readFileSync(e,"utf8"))}catch{n={}}const i={...n,mcpServers:{...n.mcpServers,...t.mcpServers}};return x.writeFileSync(e,JSON.stringify(i,null,2)),`MCP server configuration added to ${e}`},"addConfig")}];function fa({onExit:s,onComplete:e}){const[t,n]=j(0),[i,r]=j(!1),[o,a]=j(null),[l,u]=j(""),[p,d]=j("");Pe((w,f)=>{if(l||p){(f.escape||w==="q"||f.return)&&e();return}if(i)f.return||w===" "?h(o):f.escape&&(r(!1),a(null));else if(f.escape)s();else if(f.upArrow||w==="k")n(Math.max(0,t-1));else if(f.downArrow||w==="j")n(Math.min(Wn.length-1,t+1));else if(f.return||w===" "){const y=Wn[t];a(y),r(!0)}});const h=c(w=>{try{const f=w.addConfig();u(f)}catch(f){d(`Failed to write configuration: ${f.message||f}`)}},"addMcpConfiguration"),g=Math.min(80,process.stdout.columns||80);return l?v(b,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:g,children:[m(b,{marginTop:-1,marginBottom:1,children:v(S,{bold:!0,children:["\u{1F517} Connect Agent \u2014 ",m(S,{color:"green",children:"Success"})]})}),v(b,{flexDirection:"column",paddingLeft:2,children:[m(S,{color:"green",children:l}),m(b,{marginTop:1,children:m(S,{color:"grey",children:"The agent will now be able to use Membrane's integration capabilities."})})]}),m(b,{marginTop:1,paddingLeft:2,children:m(S,{color:"white",children:"[esc/q/enter: exit]"})})]}):p?v(b,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:g,children:[m(b,{marginTop:-1,marginBottom:1,children:v(S,{bold:!0,children:["\u{1F517} Connect Agent \u2014 ",m(S,{color:"red",children:"Error"})]})}),m(b,{flexDirection:"column",paddingLeft:2,children:m(S,{color:"red",children:p})}),m(b,{marginTop:1,children:m(S,{color:"grey",children:"[esc/q/enter: exit]"})})]}):i&&o?v(b,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:g,children:[m(b,{marginTop:-1,marginBottom:1,children:v(S,{bold:!0,children:["\u{1F517} Connect Agent \u2014 ",m(S,{color:"cyan",children:"Confirmation"})]})}),v(b,{flexDirection:"column",paddingLeft:2,children:[v(S,{children:["Connect ",m(S,{bold:!0,children:o.name})," to Membrane via MCP?"]}),m(b,{marginTop:1,children:m(S,{color:"grey",children:"This will add an MCP server configuration that allows the agent to use Membrane's integration capabilities."})}),m(b,{marginTop:1,children:m(S,{color:"yellow",bold:!0,children:o.actionDescription})}),m(b,{marginTop:2,marginBottom:1,children:v(S,{children:[m(S,{color:"white",bold:!0,children:"[Enter] Confirm"})," ",m(S,{color:"gray",children:"[Esc] Cancel"})]})})]})]}):v(b,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:g,children:[m(b,{marginTop:-1,marginBottom:1,children:v(S,{bold:!0,children:["\u{1F517} Connect Agent \u2014 ",m(S,{color:"cyan",children:"Select Agent"})]})}),v(b,{flexDirection:"column",paddingLeft:2,children:[m(S,{color:"grey",children:"Choose an agent to connect to Membrane via MCP:"}),m(b,{marginTop:1,children:m(S,{color:"grey",children:"This will add an MCP server configuration that allows the agent to use Membrane's integration capabilities."})}),m(b,{marginTop:1,flexDirection:"column",children:Wn.map((w,f)=>v(b,{children:[v(S,{color:t===f?"cyan":"white",children:[t===f?"\u25B6 ":" ",w.name]}),v(S,{color:"grey",children:[" \u2014 ",w.description]})]},w.id))})]}),m(b,{marginTop:1,children:m(S,{color:"grey",children:"[\u2191\u2193: select] [enter: choose] [esc: exit]"})})]})}c(fa,"AddMcpServerScreen");function ha(){const[s,e]=j(null),[t,n]=j([]),[i,r]=j(null);return Ie(()=>{const o=c(({status:l})=>{e(l),r(null)},"handleMcpStatusChanged"),a=c(({servers:l})=>{n(l),r(null)},"handleMcpServersChanged");return de.on(J.McpStatusChanged,o),de.on(J.McpServersChanged,a),()=>{de.off(J.McpStatusChanged,o),de.off(J.McpServersChanged,a)}},[]),{mcpStatus:s,allMcpServers:t,error:i,isRunning:s?.isRunning||!1,toolsCount:s?.toolsCount||0,totalRequests:s?.totalRequests||0,lastActivity:s?.lastActivity,processId:s?.processId,serverCount:t.length}}c(ha,"useMcpStatus");function da(){const{error:s,serverCount:e,allMcpServers:t}=ha(),n=Math.min(100,process.stdout.columns||100);return v(b,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:n,children:[m(b,{marginTop:-1,marginBottom:0,flexDirection:"column",children:v(S,{bold:!0,children:["\u{1F916} Connected AI Agents:"," ",s?m(S,{color:"red",children:"error reading status"}):e===0?m(S,{color:"yellow",children:"none"}):m(S,{color:"green",children:e})]})}),!s&&e===0&&m(b,{marginTop:1,children:v(S,{color:"grey",children:["Connect your AI agents to Membrane.",m(Wi,{}),"It will give them tools and context to build integrations."]})}),t.length>0&&m(b,{flexDirection:"column",paddingLeft:2,marginTop:1,children:t.map((i,r)=>m(b,{children:v(S,{color:"grey",children:["#",r+1," ",i.agentName,": ",i.totalRequests," calls"]})},i.processId))}),m(b,{marginTop:1,children:m(S,{color:"grey",children:"[a: connect an agent]"})})]})}c(da,"Agent");const zt=c(s=>{switch(s){case"error":return"red";case"success":return"green";case"warning":return"yellow";default:return}},"getLogColor");function $i(s,e){return e<3?s.slice(0,Math.max(0,e)):s.length<=e?s:`${s.slice(0,e-3)}...`}c($i,"truncateText");function Gn({children:s}){const{state:e,logs:t}=ce();if(!e||e===L.NOT_INITIALIZED)return v(b,{gap:1,flexDirection:"row",children:[m(fr,{type:"dots"}),m(S,{children:"Initializing..."})]});if(e===L.SETTING_UP)return m(b,{gap:1,flexDirection:"row",children:m(S,{children:"No workspace selected. Please run `membrane init` to select a workspace."})});if(e===L.ERROR){const n=t.filter(i=>i.type==="error");return m(b,{gap:1,flexDirection:"row",children:n.slice().map((i,r)=>m(S,{color:zt(i.type),children:i.message},i.timestamp+r))})}return s}c(Gn,"EnsureInitialized");function Li({onExit:s,showEscOption:e=!0}){const[t,n]=j(""),{data:i,error:r,isLoading:o}=rs("/account"),{updateConfig:a}=ce(),l=i?.workspaces,u=o;if(Pe((f,y)=>{y.escape&&s?.()}),u)return v(b,{children:[m(wt,{}),m(S,{children:" Fetching workspaces..."})]});if(r)return v(b,{flexDirection:"column",children:[v(S,{color:"red",children:["Error: ",r.message]}),m(b,{marginTop:1,children:m(S,{color:"grey",children:"Press ESC to go back"})})]});const p=l?.filter(f=>f.name.toLowerCase().includes(t.toLowerCase()))??[],d=p.map(f=>({label:f.name,value:f.id})),h=d.length,g=l?.length??0;async function w(f){const y=p.find(A=>A.id===f);if(!y)return;const{key:C,secret:E}=y;!C||!E||(await a({workspaceKey:C,workspaceSecret:E}),s?.())}return c(w,"handleSelect"),v(b,{flexDirection:"column",borderStyle:"round",borderTop:!0,width:70,paddingX:1,children:[m(b,{marginTop:-1,children:m(S,{bold:!0,children:"\u{1F4C1} Select your workspace"})}),v(b,{marginTop:1,children:[m(S,{children:"Search: "}),m(hr,{placeholder:"Enter a search query...",onChange:n})]}),g>5&&v(S,{children:["Showing ",h," of ",g," workspaces."]}),m(b,{marginTop:1,children:m(dr,{options:d,onChange:c(f=>{f&&w(f)},"onChange")})}),e&&m(b,{marginTop:1,children:m(S,{color:"grey",children:"Press ESC to go back"})})]})}c(Li,"SelectWorkspace");function pa({currentPat:s,onSubmit:e}){const[t,n]=j(""),[i,r]=j(!1),[o,a]=j(null);return v(b,{flexDirection:"column",borderStyle:"round",borderTop:!0,width:70,paddingX:1,children:[m(b,{marginTop:-1,marginBottom:1,children:m(S,{bold:!0,children:"\u{1F511} Enter your Personal Access Token"})}),m(S,{children:"Please provide your Personal Access Token. You can find it here:"}),m(b,{marginTop:1,marginBottom:1,children:m(S,{color:"yellow",children:"https://console.integration.app/w/0/manage-account/api-token"})}),s&&m(S,{dimColor:!0,children:"Press Enter to keep your current token or type a new one."}),m(pr,{mask:"*",placeholder:`${s?"******":"Enter your token here..."}`,value:t,onChange:n,onSubmit:c(async u=>{a(null),r(!0);try{await e(u),n("")}catch{a("Invalid token. Please try again.")}finally{r(!1)}},"handleSubmit")}),i&&m(b,{marginTop:1,children:v(S,{children:[m(wt,{type:"dots"})," Validating token..."]})}),o&&m(S,{color:"red",children:o})]})}c(pa,"PersonalAccessTokenInput");var pt=(s=>(s[s.Authenticate=0]="Authenticate",s[s.ConnectWorkspace=1]="ConnectWorkspace",s))(pt||{});const ma={0:"Authenticate in Membrane",1:"Connect a Membrane Workspace"},Vn=[pt.Authenticate,pt.ConnectWorkspace];function Di({onComplete:s}){const{config:e}=ce(),[t,n]=j(!1),[i,r]=j(0),o=!!(e?.workspaceKey&&e?.workspaceSecret),a=ps(),l=Vn[i],u=i+1,p=Vn.length,d=Vn.map((w,f)=>{let y="pending";return f<i?y="done":f===i&&(y="current"),{id:w,label:ma[w],status:y}});async function h(w){const f=a&&w===""?a:w,y=new ms;try{await y.request("/account",{headers:{Authorization:`Bearer ${f}`}}),Or(f),r(C=>C+1)}catch(C){console.error(C)}}c(h,"handlePatSubmit");function g(){n(!0),s&&s()}return c(g,"handleWorkspaceSelected"),Pe((w,f)=>{o&&f.escape&&s&&s()}),t?m(b,{children:m(S,{children:"\u2705 Setup complete. You are ready to go!"})}):v(b,{flexDirection:"column",alignSelf:"flex-start",gap:1,children:[v(b,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:70,children:[m(b,{marginTop:-1,marginBottom:1,children:v(S,{bold:!0,children:["\u{1F6E0}\uFE0F Setup \u2014"," ",v(S,{color:"cyan",children:["Step ",u," of ",p]}),o&&m(S,{color:"grey",children:" [esc: go back]"})]})}),m(b,{flexDirection:"column",paddingLeft:2,children:d.map(w=>m(ga,{status:w.status,label:w.label},w.id))})]}),l===pt.Authenticate&&m(pa,{currentPat:a,onSubmit:h}),l===pt.ConnectWorkspace&&m(Li,{onExit:g,showEscOption:!1})]})}c(Di,"Setup");function ga({status:s,label:e}){return v(b,{children:[v(b,{width:2,children:[s==="current"&&m(wt,{type:"dots"}),s==="done"&&m(S,{children:"\u2705"})]}),m(S,{dimColor:s!=="current",children:e})]})}c(ga,"StepDisplay");function Hn(){const{stats:s}=ce(),e=Object.entries(s).filter(([t,n])=>n>0);return e.length===0?null:v(b,{flexDirection:"column",children:[m(b,{children:m(b,{width:12,children:m(S,{color:"grey",children:"Elements:"})})}),m(b,{flexDirection:"column",marginLeft:1,children:e.map(([t,n])=>v(b,{children:[m(b,{width:20,children:v(S,{children:[t,":"]})}),m(S,{color:"green",children:n})]},t))})]})}c(Hn,"ElementStats");const Yn=5,ya=6;function wa(){const{logs:s}=ce(),[e,t]=j(0),n=Math.min(100,process.stdout.columns||100),i=Yn,r=Math.max(0,s.length-i-e),o=s.length-e,a=s.slice(r,o),l=n-ya,u=e<s.length-i,p=e>0;return Pe((d,h)=>{if(s.length!==0)if(h.upArrow){const g=Math.max(0,s.length-i);t(w=>Math.min(g,w+1))}else h.downArrow?t(g=>Math.max(0,g-1)):(d==="G"||d==="g")&&t(0)}),v(b,{flexDirection:"column",paddingTop:1,children:[v(S,{color:"grey",children:["Recent Activity (",r+1,"-",o," of ",s.length,"):",s.length>Yn&&m(S,{color:"grey",children:" [arrows: scroll] [g: end]"})]}),a.map((d,h)=>m(b,{marginLeft:1,children:m(S,{color:zt(d.type),children:$i(d.message,l)})},d.timestamp+h)),s.length>Yn&&v(b,{marginLeft:1,flexDirection:"row",children:[u&&m(S,{color:"grey",children:"\u2191 "}),p&&m(S,{color:"grey",children:"\u2193 "})]})]})}c(wa,"Logs");const Qt=[{value:"sync",label:"Continue (overwrite/delete)",key:""},{value:"exit",label:"Cancel",key:""}];function ba(){const{state:s,resolveConflicts:e,exit:t}=ce(),[n,i]=j(0),[r,o]=j(!1),[a,l]=j(!1);return Pe((u,p)=>{if(!r){if(p.ctrl&&u.toLowerCase()==="r"){l(!a);return}p.upArrow?i(d=>d>0?d-1:Qt.length-1):p.downArrow?i(d=>d<Qt.length-1?d+1:0):u.toLowerCase()==="y"?i(0):u.toLowerCase()==="n"?i(1):(p.return||u===" ")&&(o(!0),Qt[n].value==="sync"?e({watch:!0}):t())}}),Ie(()=>{s!==L.CONFLICTS&&r&&o(!1)},[s,r]),v(b,{flexDirection:"column",paddingTop:1,children:[m(b,{children:m(b,{flexDirection:"row",gap:2,children:m(S,{bold:!0,color:"white",children:"Conflicts with remote"})})}),m(b,{children:m(S,{color:"grey",children:"The remote workspace has changes that aren't in your local workspace:"})}),m(b,{marginTop:1,marginLeft:2,children:m(zn,{isExpanded:a})}),v(b,{marginTop:2,flexDirection:"row",gap:1,children:[m(S,{color:"white",bold:!0,children:"What would you like to do?"}),m(S,{color:"grey",children:"[up/down, enter]"})]}),m(b,{children:r?v(b,{flexDirection:"row",gap:1,children:[m(wt,{type:"dots"}),m(S,{color:"blue",bold:!0,children:"Syncing with remote..."})]}):m(b,{flexDirection:"column",children:Qt.map((u,p)=>m(b,{flexDirection:"column",children:v(b,{flexDirection:"row",gap:1,children:[m(S,{color:n===p?"cyan":"grey",children:n===p?"\u25B6":" "}),m(S,{color:n===p?"cyan":"grey",bold:n===p,children:u.label})]})},u.value))})})]})}c(ba,"ResolveChangesUI");const Sa={[X.UPDATE]:{incoming:{label:"Elements updated in remote",description:"(to be overwritten from remote)"},outgoing:{label:"Elements updated locally",description:"(to be pushed to remote)"}},[X.DELETE]:{incoming:{label:"Elements not existing in remote",description:"(to be deleted locally)"},outgoing:{label:"Elements deleted locally",description:"(to be deleted from remote)"}},[X.CREATE]:{incoming:{label:"Elements created in remote",description:"(to be created locally)"},outgoing:{label:"Elements created locally",description:"(to be created in remote)"}}};function zn({isExpanded:s}){const{conflicts:e}=ce(),t=5,n=Hi(()=>{const i={};return e.forEach(r=>{const o=`${r.type}-${r.direction}`;i[o]||(i[o]=[]),i[o].push(r)}),i},[e]);return m(b,{flexDirection:"column",children:Object.entries(n).map(([i,r])=>{if(r.length===0)return null;const[o,a]=i.split("-"),l=Sa[o][a];return v(b,{flexDirection:"column",children:[v(b,{flexDirection:"row",gap:1,children:[v(S,{color:"yellow",children:[l.label," (",r.length,")"]}),m(S,{color:"white",children:l.description})]}),(s?r:r.slice(0,t)).map(u=>m(b,{marginLeft:2,children:v(S,{color:"grey",children:["\u2022 ",u.element.id," (",u.element.relativePath,")"]})},u.element.id)),!s&&r.length>t&&m(b,{marginLeft:2,children:v(S,{color:"cyan",children:["... and ",r.length-t," more (press Ctrl+R to show all)"]})}),s&&r.length>t&&m(b,{marginLeft:2,children:m(S,{color:"cyan",children:"(press Ctrl+R to collapse)"})})]},i)})})}c(zn,"Conflicts");function Ca(){const{config:s,state:e,logs:t,currentWorkspace:n,pull:i}=ce(),r=n?.name,o=r?$i(r,30):s?.workspaceKey,a=Math.min(100,process.stdout.columns||100);return Ie(()=>{i({watch:!0})},[]),v(b,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:a,children:[m(b,{marginTop:-1,marginBottom:1,children:v(b,{flexDirection:"row",gap:1,children:[m(S,{bold:!0,children:"\u{1F504} Workspace"}),v(S,{color:Ea(e),children:[" [",ka(e),"] "]})]})}),v(b,{children:[m(b,{width:12,children:m(S,{color:"grey",children:"Local:"})}),m(S,{color:"grey",children:process.cwd()})]}),v(b,{children:[m(b,{width:12,children:m(S,{color:"grey",children:"Remote:"})}),s?.workspaceKey?v(S,{color:"grey",children:[o," [o: open in console] [w: change]"]}):v(S,{children:[m(S,{color:"yellow",children:"not selected"})," [w: select]"]})]}),e===L.CONFLICTS?m(ba,{}):v(en,{children:[m(b,{paddingTop:1,children:m(Hn,{})}),t.length>0&&m(wa,{})]})]})}c(Ca,"Workspace");function ka(s){switch(s){case L.PULLING:return"pulling";case L.PUSHING:return"pushing";case L.CONFLICTS:return"conflicts";case L.SYNCED:return"synced";case L.ERROR:return"error";case L.WATCHING:return"tracking changes";case L.RESOLVING:return"resolving";case L.NOT_SYNCED:return"not synced";case L.INITIALIZED:return"initialized";case L.SETTING_UP:return"setup required";default:return"unknown"}}c(ka,"getStatusDisplay");function Ea(s){switch(s){case L.PULLING:return"yellow";case L.PUSHING:return"yellow";case L.CONFLICTS:return"red";case L.SYNCED:return"green";case L.ERROR:return"red";case L.WATCHING:return"green";case L.RESOLVING:return"yellow";case L.NOT_SYNCED:return"grey";case L.SETTING_UP:return"yellow";default:return"grey"}}c(Ea,"getStatusColor");const va="https://console.integration.app/w";function Ia(){const s=ua(),e=Yi(!0),{exit:t,state:n}=ce(),[i,r]=j(null),o=i??(n===L.SETTING_UP?"setup":"main");Pe(l=>{o==="main"&&(l==="w"&&r("workspace-selection"),l==="a"&&r("add-mcp-server"),l==="o"&&n===L.INITIALIZED&&a(),l==="s"&&r("setup"))});async function a(){try{const l=await gs(s),u=`${va}/${l}`,p=process.platform==="darwin"?"open":process.platform==="win32"?"start":"xdg-open";ur(`${p} "${u}"`)}catch(l){console.error("Failed to open workspace:",l),t()}}return c(a,"handleOpenWorkspace"),Ie(()=>(e.current=!0,()=>{e.current=!1}),[]),o==="workspace-selection"?m(Li,{onExit:c(()=>r(null),"onExit")}):o==="add-mcp-server"?m(fa,{onExit:c(()=>r(null),"onExit"),onComplete:c(()=>r(null),"onComplete")}):o==="setup"?m(Di,{onComplete:c(()=>r(null),"onComplete")},Date.now()):m(Gn,{children:v(b,{flexDirection:"column",children:[m(b,{flexGrow:1,children:m(da,{})}),m(Ca,{}),m(b,{paddingLeft:2,children:m(S,{color:"grey",children:"[s: (re-)setup]"})})]})})}c(Ia,"Main");const xi=Gi(process.argv.slice(2)),Pi=xi.cwd?qi(xi.cwd):process.cwd(),Ta=new Ni(dt.Agent,Pi),Na=c(()=>m(Yt,{cwd:Pi,membraneCLIService:Ta,children:m(Ia,{})}),"App");function Aa(){gt(m(Na,{}))}c(Aa,"runAgent");function Oa(s,e){s.command("init").description("Run interactive setup for Membrane project").option("--key <key>","Workspace key for non-interactive setup").option("--secret <secret>","Workspace secret for non-interactive setup").addHelpText("after",["","Examples:"," membrane init # Run interactive setup"," membrane init --key KEY --secret SEC # Non-interactive setup with key and secret",""].join(`
140
+ `,t)+1}return{type:e,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue(e){switch(this.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return this.flowScalar(this.type);case"block-scalar-header":return{type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken],source:""};case"flow-map-start":case"flow-seq-start":return{type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case"seq-item-ind":return{type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case"explicit-key-ind":{this.onKeyLine=!0;const t=Gt(e),n=He(t);return n.push(this.sourceToken),{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:n,explicitKey:!0}]}}case"map-value-ind":{this.onKeyLine=!0;const t=Gt(e),n=He(t);return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:n,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment(e,t){return this.type!=="comment"||this.indent<=t?!1:e.every(n=>n.type==="newline"||n.type==="space")}*documentEnd(e){this.type!=="doc-mode"&&(e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],this.type==="newline"&&(yield*this.pop()))}*lineEnd(e){switch(this.type){case"comma":case"doc-start":case"doc-end":case"flow-seq-end":case"flow-map-end":case"map-value-ind":yield*this.pop(),yield*this.step();break;case"newline":this.onKeyLine=!1;case"space":case"comment":default:e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],this.type==="newline"&&(yield*this.pop())}}}function Ci(s){const e=s.prettyErrors!==!1;return{lineCounter:s.lineCounter||e&&new yi||null,prettyErrors:e}}c(Ci,"parseOptions");function Uo(s,e={}){const{lineCounter:t,prettyErrors:n}=Ci(e),i=new _n(t?.addNewLine),r=new xn(e),o=Array.from(r.compose(i.parse(s)));if(n&&t)for(const a of o)a.errors.forEach(jt(s,t)),a.warnings.forEach(jt(s,t));return o.length>0?o:Object.assign([],{empty:!0},r.streamInfo())}c(Uo,"parseAllDocuments");function ki(s,e={}){const{lineCounter:t,prettyErrors:n}=Ci(e),i=new _n(t?.addNewLine),r=new xn(e);let o=null;for(const a of r.compose(i.parse(s),!0,s.length))if(!o)o=a;else if(o.options.logLevel!=="silent"){o.errors.push(new Le(a.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}return n&&t&&(o.errors.forEach(jt(s,t)),o.warnings.forEach(jt(s,t))),o}c(ki,"parseDocument");function Jo(s,e,t){let n;typeof e=="function"?n=e:t===void 0&&e&&typeof e=="object"&&(t=e);const i=ki(s,t);if(!i)return null;if(i.warnings.forEach(r=>xs(i.options.logLevel,r)),i.errors.length>0){if(i.options.logLevel!=="silent")throw i.errors[0];i.errors=[]}return i.toJS(Object.assign({reviver:n},t))}c(Jo,"parse");function Wo(s,e,t){let n=null;if(typeof e=="function"||Array.isArray(e)?n=e:t===void 0&&e&&(t=e),typeof t=="string"&&(t=t.length),typeof t=="number"){const i=Math.round(t);t=i<1?void 0:i>8?{indent:8}:{indent:i}}if(s===void 0){const{keepUndefined:i}=t??e??{};if(!i)return}return Ne(s)&&!n?s.toString(t):new Xe(s,n,t).toString(t)}c(Wo,"stringify");var Go=Object.freeze({__proto__:null,Alias:kt,CST:Fo,Composer:xn,Document:Xe,Lexer:gi,LineCounter:yi,Pair:Q,Parser:_n,Scalar:D,Schema:Zt,YAMLError:Nn,YAMLMap:te,YAMLParseError:Le,YAMLSeq:Ce,YAMLWarning:ni,isAlias:Se,isCollection:q,isDocument:Ne,isMap:_e,isNode:U,isPair:F,isScalar:_,isSeq:Ke,parse:Jo,parseAllDocuments:Uo,parseDocument:ki,stringify:Wo,visit:Ae,visitAsync:Ct});const Y={Added:"added",Changed:"changed",Deleted:"deleted",Stopped:"stopped"},Vo={ignored:Er,persistent:!0,ignoreInitial:!0,followSymlinks:!1,depth:20,awaitWriteFinish:{stabilityThreshold:500,pollInterval:100},ignorePermissionErrors:!0,atomic:!0,usePolling:!1,alwaysStat:!1,interval:1e3,binaryInterval:300};class Ho extends hs{static{c(this,"FileWatcher")}constructor(e){super(),this.options=e,this.membraneDir=bt(this.options.cwd)}isWatching=!1;watcher;membraneDir;contentCache={};async start(){this.isWatching||(x.existsSync(this.membraneDir)||x.mkdirSync(this.membraneDir,{recursive:!0}),this.initializeContentCache(),this.watcher=rr.watch(this.membraneDir,Vo),this.watcher.on("add",e=>this.handleFileSystemEvent(Y.Added,e)).on("change",e=>this.handleFileSystemEvent(Y.Changed,e)).on("unlink",e=>this.handleFileSystemEvent(Y.Deleted,e)).on("ready",()=>this.isWatching=!0))}async stop(){!this.isWatching||!this.watcher||(await this.watcher.close(),this.isWatching=!1,this.watcher=void 0,this.clearCache(),this.emit(Y.Stopped))}getCwd(){return this.options.cwd}handleFileSystemEvent(e,t){const n=R.relative(this.membraneDir,t);if(e===Y.Deleted){this.removeFromCache(n);const a={filePath:t,relativePath:n,data:void 0};N.info(`[local] ${e}: ${a.relativePath}`),this.emit(e,a);return}const i=this.readFileContent(t);if(!this.hasContentChanged(n,i,e))return;const o=this.processFileEvent(t,i);this.updateCache(n,i),o&&(N.info(`[local] ${e}: ${o.relativePath}`),this.emit(e,o))}readFileContent(e){return x.readFileSync(e,"utf8")}processFileEvent(e,t){const n=R.relative(this.membraneDir,e);let i;try{i=t?Go.parse(t):void 0}catch{i=void 0}return{filePath:e,relativePath:n,data:i}}hasContentChanged(e,t,n){if(n==="added")return!0;if(!t)return this.contentCache[e]!==void 0;const i=this.getContentHash(t);return this.contentCache[e]!==i}getContentHash(e){return sr.createHash("sha256").update(e).digest("hex")}updateCache(e,t){if(!t){delete this.contentCache[e];return}this.contentCache[e]=this.getContentHash(t)}removeFromCache(e){delete this.contentCache[e]}clearCache(){Object.keys(this.contentCache).forEach(e=>{delete this.contentCache[e]})}initializeContentCache(){x.existsSync(this.membraneDir)&&this.scanDirectoryForCache(this.membraneDir)}scanDirectoryForCache(e){const t=x.readdirSync(e,{withFileTypes:!0});for(const n of t){const i=R.join(e,n.name);if(n.isDirectory())this.scanDirectoryForCache(i);else if(n.isFile())try{const r=x.readFileSync(i,"utf8"),o=R.relative(this.membraneDir,i);this.updateCache(o,r)}catch{}}}}const X={UPDATE:"update",DELETE:"delete",CREATE:"create"},ne={INCOMING:"incoming",OUTGOING:"outgoing"};async function Yo(s,e="full"){const t={};N.info("[connectors] Getting remote workspace data");const n=await pe.withThrottle(()=>s.integrations.findAll());t.integration=n.map(i=>Kn("integration",i));for(const i of Object.keys(se)){const r=se[i];if(r.exportable===!1)continue;const o=[];N.info(`[connectors] Reading ${r.elements} from remote workspace`);const a=await pe.withThrottle(()=>s[r.elements].findAll());if(o.push(...a.map(l=>Kn(i,l))),r.integrationSpecific)for(const l of n){const u=await pe.withThrottle(()=>s[r.elements].findAll({integrationId:l.id}));o.push(...u.map(p=>(p.integrationKey=l.key,Kn(i,p))))}o.length>0&&e=="full"&&(console.table(o.map(l=>({key:l.key,integrationKey:l.integrationKey,universal:!l.integrationKey})).reduce((l,u)=>(l||(l={}),l[u.key]||(l[u.key]={}),u.universal&&(l[u.key].universal=!0),u.integrationKey&&(l[u.key].integration?l[u.key].integration+=` ${u.integrationKey}`:l[u.key].integration=u.integrationKey),l),{})),console.groupEnd()),t[i]=o}return N.success("[connectors] Remote workspace data retrieved successfully"),t}c(Yo,"getWorkspaceData");function Kn(s,e){return e=Cr(e),se[s].exportCleanup?se[s].exportCleanup(e):e}c(Kn,"cleanUpForExport");const ut="connectors",ft="development",jn={};async function zo({integrations:s,allConnectors:e=!1}){const t=Nr(),n=await ue.getClient(process.cwd()),i=new Set,r={};for(const o of s){const a=o.connectorId,l=o.connectorVersion;if(!r[a]?.has(o.connectorVersion)){const u=await Ei({client:n,connectorId:a}),d=!!u.workspaceId||e;if(!u?.key){N.error(`[connectors] Connector ${a} has no key. Skipping..`);continue}d&&(i.has(a)||(await ta({basePath:t,connector:u}),i.add(a)),r[a]||(r[a]=new Set),r[a].has(l)||(await na({client:n,connector:u,connectorVersion:l,basePath:t}),r[a].add(l)))}}}c(zo,"pullConnectors");async function Qo(){const s=await ue.getClient(process.cwd()),e=await Yo(s,"minified"),n=(await s.get("org-workspace-id")).id,i={};N.info("[connectors] Loading custom connectors");const r=s,o=await r.get(`/connectors?workspaceId=${n}`);N.info("[connectors] Loading public connectors"),e.connector=o;const a=Fn(),u=(P.existsSync(a)?P.readdirSync(a):[]).filter(p=>{if(p.startsWith("."))return!1;const d=B.join(a,p);try{return P.statSync(d).isDirectory()}catch{return!1}});for(const p of u){N.info(`[connectors] Loading connector from: ${p}`);const d=P.readdirSync(B.join(a,p)),h=await Bn(p);if("baseUri"in h&&delete h.baseUri,h.uuid&&e.connector?.find(w=>w.uuid==h.uuid))i[h.id]=e.connector.find(w=>w.uuid==h.uuid).id,N.info(`[connectors] Matched ${h.name} uuid: ${h.uuid}`);else if(!i[h.id]){let w=!1;try{const f=await Ei({client:s,connectorId:h.id});f&&!f.workspaceId&&(w=!0)}catch{}if(!w){N.info(`[connectors] Creating custom connector ${h.name} (${h.key})`);const f=await r.post("connectors",{...h,workspaceId:n});i[h.id]=f.id}}const g=d.filter(w=>P.statSync(B.join(a,p,w)).isDirectory());for(const w of g)await ea({client:s,connector:h,version:w,connectorId:i[h.id]})}return i}c(Qo,"pushConnectors");function Fn(){const s=ln();return B.join(s.membraneDirPath,ut)}c(Fn,"getConnectorsPath");async function Bn(s){return Te.load(P.readFileSync(B.join(Fn(),s,`${s}.yml`),"utf8"))}c(Bn,"readConnector");async function Xo(s,e){return N.info(`[connectors] Zipping ${s} into ${e}`),new Promise((t,n)=>{const i=P.createWriteStream(e),r=or("zip",{zlib:{level:9}});i.on("close",()=>{N.success(`[connectors] Successfully created ${e}`),t()}),i.on("end",()=>{N.info("[connectors] Data has been drained")}),r.on("warning",a=>{a.code==="ENOENT"?console.warn(a):n(a)}),r.on("error",a=>{n(a)}),r.pipe(i);const o=P.readdirSync(s);for(const a of o){const l=B.join(s,a),u=P.statSync(l);u.isFile()?r.file(l,{name:a}):u.isDirectory()&&r.directory(l,a)}r.finalize()})}c(Xo,"createZipArchive");async function Zo(s,e){return N.info(`[connectors] Unzipping into ${e}`),new Promise((t,n)=>{const i=cr.Parse();i.on("entry",r=>{const o=r.path;if(r.type==="Directory"){const l=B.join(e,o);P.mkdirSync(l,{recursive:!0}),r.autodrain()}else{const l=B.join(e,o),u=B.dirname(l);P.mkdirSync(u,{recursive:!0});const p=P.createWriteStream(l);r.pipe(p),p.on("finish",()=>{})}}),i.on("end",()=>{N.success(`[connectors] Successfully extracted to ${e}`),t()}),i.on("error",r=>{n(r)}),i.write(s),i.end()})}c(Zo,"extractZipArchive");async function ea({client:s,connector:e,version:t,connectorId:n}){const i=B.join(Fn(),Vt(e),vi(t)),r=B.join(i,"src"),o=B.join(i,"src.zip"),a=P.existsSync(o);if(P.existsSync(r)&&(N.info(`[connectors] Archiving source code for ${e.name} version ${t}`),await Xo(r,o)),!P.existsSync(o)){N.warning(`[connectors] No source code found for ${e.name} version ${t}`);return}try{const l=new ar;if(l.append("file",P.createReadStream(o),"file.zip"),N.info(`[connectors] Pushing connector version ${t} for ${e.name}`),t==ft)N.info(`[connectors] Uploading connector ${n}`),await s.post(`connectors/${n}/upload`,l,{headers:{...l.getHeaders()}});else{if(l.append("version",t),l.append("changelog","Imported Version"),(await s.get(`/connectors/${n}/versions`)).find(p=>p.version==t)){N.info(`[connectors] Version ${t} already published`);return}N.info(`[connectors] Publishing version ${t} of connector ${n}`),await s.post(`connectors/${n}/publish-version`,l,{headers:{...l.getHeaders()}})}N.success(`Successfully pushed connector version ${t} for ${e.name}`)}catch(l){N.error(`Error pushing connector version ${t} for ${e.name}: ${l}`)}finally{!a&&P.existsSync(o)&&(N.info(`[connectors] Cleaning up temporary zip file for ${e.name} version ${t}`),P.unlinkSync(o))}}c(ea,"pushConnectorVersion");async function Ei({client:s,connectorId:e}){if(jn[e])return jn[e];const t=await s.get(`connectors/${e}`);return jn[e]=t,t}c(Ei,"getConnector");async function ta({basePath:s,connector:e}){const t=Vt(e),n=B.join(s,ut,t);P.mkdirSync(n,{recursive:!0});const i=B.join(n,`${Vt(e)}.yml`);P.writeFileSync(i,Te.dump(e)),N.info(`[connectors] Pulled connector ${e.name}`)}c(ta,"pullConnector");async function na({client:s,connector:e,connectorVersion:t,basePath:n}){const i=Vt(e),r=vi(t),o=B.join(n,"connectors",i,r),a=await s.get(`connectors/${e.id}/download`,{version:t},{responseType:"arraybuffer",headers:{Accept:"application/zip"},timeout:1e6});P.mkdirSync(o,{recursive:!0});const l=B.join(o,"src.zip");if(P.writeFileSync(l,a),!t){const u=B.join(o,"src");P.mkdirSync(u,{recursive:!0}),await Zo(a,u)}N.info(`[connectors] Pulled connector version: ${e.name} (${r})`)}c(na,"pullConnectorVersion");function Vt(s){return s.key}c(Vt,"getConnectorDirName");function vi(s){return s??ft}c(vi,"getConnectorVersionDirName");function sa(s){return s.match(`${ut}/[^/]+/${ft}/src/.*`)!==null}c(sa,"isConnectorSourceFile");async function ia(s){const e=s.match(`${ut}/([^/]+)/${ft}/src/(.*)`);if(!e)return;const t=e[1],n=e[2],i=await Bn(t);if(!i){N.warning(`[connectors] Connector ${t} not found. Ignoring file change`);return}const r=i.id,o=P.readFileSync(s,"utf-8");await(await ue.getClient()).put(`connectors/${r}/files/${n}`,o,{headers:{"Content-Type":"text/plain"}}),N.info(`[connectors] Pushed file ${n} for connector ${i.name}`)}c(ia,"putConnectorFile");async function ra(s){const e=s.match(`${ut}/([^/]+)/${ft}/src/(.*)`);if(!e)return;const t=e[1],n=e[2],i=await Bn(t);if(!i){N.warning(`[connectors] Connector ${t} not found. Ignoring file change`);return}const r=i.id;await(await ue.getClient()).delete(`connectors/${r}/files/${n}`),N.info(`[connectors] Deleted file ${n} for connector ${i.name}`)}c(ra,"deleteConnectorFile");class mt{static{c(this,"ElementSyncService")}fileWatcher=void 0;notifier;changes=[];localCache;remoteCache;localRepo;remoteRepo;constructor(){this.notifier=de,this.localCache=new ws,this.remoteCache=new ws,this.localRepo=new Pr(this.localCache),this.remoteRepo=new Mr(this.remoteCache)}clear(){this.changes=[]}needsForcedSync(){return this.changes.some(e=>e.isConflict)}needsSync(){return this.changes.length>0}async getStats(){const e=this.localCache.getAll(),t={};return e.forEach(n=>{t[n.type]=(t[n.type]||0)+1}),t}async fetchElements(){const e=await this.localRepo.getElements(),t=await this.remoteRepo.getElements();this.localCache.addAll(e),this.remoteCache.addAll(t)}async updateElement(e,t){const n=this.getHandler(t),i=this.getCache(t);try{const r=await n.putElement(e);i.put(r)}catch(r){throw N.error(`Failed to update element ${e.id}: ${r}`),r}}async deleteElement(e,t){const n=this.getHandler(t),i=this.getCache(t);try{await n.deleteElement(e,{elements:n.cache.getAll(),connectorsMapping:n.connectorsMapping}),i.remove(e)}catch(r){throw N.error(`Failed to delete element ${e.id}: ${r}`),r}}async pullConnectors(e=!1){await zo({integrations:this.remoteCache.getElementsByType(M.Integration).map(t=>t.data),allConnectors:e})}async pushConnectors(){const e=await Qo();this.remoteRepo.setConnectorsMapping(e)}getHandler(e){return e===ne.INCOMING?this.localRepo:this.remoteRepo}getCache(e){return e===ne.INCOMING?this.localCache:this.remoteCache}async startWatching(){this.fileWatcher=new Ho({cwd:process.cwd()}),this.fileWatcher.on(Y.Added,e=>this.handleLocalEvent(e,Y.Added)),this.fileWatcher.on(Y.Changed,e=>this.handleLocalEvent(e,Y.Changed)),this.fileWatcher.on(Y.Deleted,e=>this.handleLocalEvent(e,Y.Deleted)),await this.fileWatcher.start(),N.success("[local] Tracking changes..")}async stopWatching(){await this.fileWatcher?.stop(),this.fileWatcher=void 0}async handleLocalEvent(e,t){try{if(sa(e.filePath))switch(t){case Y.Added:case Y.Changed:await ia(e.filePath);break;case Y.Deleted:await ra(e.filePath);break}else{let n=G.fromPathAndData(e.filePath,e.data);if(!n){const i=G.idFromPath(e.filePath);if(!i||(n=this.remoteCache.get(i),!n))return}switch(N.info(`[resolver][${this.getDirectionLabel(ne.OUTGOING)}] ${t}: ${n.id}`),t){case Y.Added:case Y.Changed:await this.updateElement(n,ne.OUTGOING);break;case Y.Deleted:await this.deleteElement(n,ne.OUTGOING);break}}}catch(n){N.error(`[sync] Error handling local event: ${n}`)}}detectIncomingChanges(){this.clearChanges();const e=mt.getChanges(ne.INCOMING,this.remoteCache,this.localCache);return this.updateChanges(e),e}detectOutgoingChanges(){this.clearChanges();const e=mt.getChanges(ne.OUTGOING,this.localCache,this.remoteCache);return this.updateChanges(e),e}getChange(e){const t=this.localCache.get(e.id),n=this.remoteCache.get(e.id);return!t&&n?{type:X.CREATE,element:n,direction:ne.INCOMING,isConflict:!1}:t&&!n?{type:X.DELETE,element:t,direction:ne.OUTGOING,isConflict:!0}:t&&n&&!t.isEqual(n)?{type:X.UPDATE,element:t,direction:ne.OUTGOING,isConflict:!0}:null}async resolveChanges(){if(!this.needsSync())return;N.info("[resolver] Resolving changes..");const e=this.changes.filter(i=>i.element.type===M.Integration);await Promise.all(e.map(async i=>this.resolveChange(i))),e.length>0&&(await this.fetchElements(),this.changes=this.changes.length>0&&this.changes[0]?.direction===ne.INCOMING?this.detectIncomingChanges():this.detectOutgoingChanges(),this.changes=this.changes.filter(i=>i.element.type!==M.Integration));const t=this.changes.filter(i=>!i.element.hasParent()),n=this.changes.filter(i=>i.element.hasParent());await Promise.all(t.map(async i=>this.resolveChange(i))),await Promise.all(n.map(async i=>this.resolveChange(i))),N.success("[resolver] Resolved changes")}async resolveChange(e){switch(e.type){case X.DELETE:return N.info(`[resolver][${this.getDirectionLabel(e.direction)}] Deleting ${e.element.id}`),this.deleteElement(e.element,e.direction);case X.CREATE:return N.info(`[resolver][${this.getDirectionLabel(e.direction)}] Creating ${e.element.id}`),this.updateElement(e.element,e.direction);case X.UPDATE:return N.info(`[resolver][${this.getDirectionLabel(e.direction)}] Updating ${e.element.id}`),this.updateElement(e.element,e.direction)}}static getChanges(e,t,n){const i=t.getAllIds(),r=n.getAllIds(),o=new Set([...i,...r]),a=[];for(const l of o){const u=t.get(l),p=n.get(l),d=mt.detectChangeForElement(u,p,e);d&&a.push(d)}return a}updateChanges(e){this.changes=e;for(const t of e)N.info(`[resolver][${this.getDirectionLabel(t.direction)}] ${this.getTypeLabel(t.type)} ${t.element.id}`);if(this.needsForcedSync()){const t=e.filter(n=>n.isConflict);N.warning("[resolver] Conflicts detected"),this.notifier.setConflicts(t)}}clearChanges(){this.changes=[]}getDirectionLabel(e){switch(e){case ne.INCOMING:return"local\u2190remote";case ne.OUTGOING:return"local\u2192remote"}}getTypeLabel(e){switch(e){case X.CREATE:return"ADD";case X.UPDATE:return"UPD";case X.DELETE:return"DEL"}}static detectChangeForElement(e,t,n){return e&&!t?{type:X.CREATE,element:e,direction:n,isConflict:!1}:!e&&t?{type:X.DELETE,element:t,direction:n,isConflict:!0}:e&&t&&!e.isEqual(t)?{type:X.UPDATE,element:e,direction:n,isConflict:!0}:null}}const Ee=R.join(lr.tmpdir(),"membrane-mcp-status"),Ii=3e4;class oa{static{c(this,"McpStatusService")}constructor(e=2e3){this.pollIntervalMs=e}isRunning=!1;pollInterval;async start(){this.isRunning||(this.isRunning=!0,this.pollInterval=setInterval(async()=>await this.checkStatus(),this.pollIntervalMs),await this.checkStatus())}async stop(){this.pollInterval&&(clearInterval(this.pollInterval),this.pollInterval=void 0,this.isRunning=!1)}async checkStatus(){try{const e=process.cwd(),t=Ht(void 0,e),n=Ti(e);t&&de.setMcpStatus(t),await de.setMcpServers(n)}catch{N.error("Failed to check MCP status")}}}function Ht(s,e){try{const t=e||process.cwd();if(!s){const i=Ti(t);return i.length===0?null:i[0]}const n=Jn(s,t);if(x.existsSync(n)){const i=x.statSync(n),r=new Date;if(r.getTime()-i.mtime.getTime()>Ii)return ht(s,t),null;const a=x.readFileSync(n,"utf8"),l=JSON.parse(a);if(l.isRunning){const u=new Date(l.lastActivity).getTime();if(r.getTime()-u>Ii)return ht(s,t),null}return l}}catch{s&&e&&ht(s,e)}return null}c(Ht,"getMcpStatus");function Ti(s){try{const e=s||process.cwd(),t=Un(e);if(!x.existsSync(Ee))return[];const n=x.readdirSync(Ee),i=[];for(const r of n){const o=r.match(new RegExp(`^mcp-${t}-(\\d+)\\.json$`));if(o){const a=parseInt(o[1],10),l=Ht(a,e);l&&i.push(l)}}return i.sort((r,o)=>new Date(o.startTime).getTime()-new Date(r.startTime).getTime())}catch{return[]}}c(Ti,"getAllMcpStatusFiles");function qn(s){try{const t={...Ht(s.processId,s.cwd)||{isRunning:!1,startTime:new Date().toISOString(),lastActivity:new Date().toISOString(),toolsCount:0,totalRequests:0,processId:s.processId,cwd:s.cwd,agentName:process.env.AGENT_NAME||"Unnamed Agent"},...s};x.existsSync(Ee)||x.mkdirSync(Ee,{recursive:!0});const n=Jn(s.processId,s.cwd);x.writeFileSync(n,JSON.stringify(t,null,2))}catch{}}c(qn,"updateMcpStatus");function ht(s,e){try{const t=e||process.cwd();if(s){const n=Jn(s,t);x.existsSync(n)&&x.unlinkSync(n)}else{const n=Un(t);if(x.existsSync(Ee)){const i=x.readdirSync(Ee);for(const r of i)r.match(new RegExp(`^mcp-${n}-\\d+\\.json$`))&&x.unlinkSync(R.join(Ee,r))}}}catch{}}c(ht,"clearMcpStatus");function aa(s,e){const t=Ht(s,e);t&&qn({processId:s,cwd:e,totalRequests:t.totalRequests+1,lastRequestTime:new Date().toISOString(),lastActivity:new Date().toISOString()})}c(aa,"trackToolExecution");function Un(s){return ir("md5").update(s).digest("hex").slice(0,8)}c(Un,"getCwdHash");function Jn(s,e){const t=Un(e);return R.join(Ee,`mcp-${t}-${s}.json`)}c(Jn,"getStatusFilePath");const dt={Agent:"agent",Cli:"cli"},L={NOT_INITIALIZED:"not_initialized",SETTING_UP:"setting_up",INITIALIZED:"initialized",NOT_SYNCED:"not_synced",PULLING:"pulling",PUSHING:"pushing",RESOLVING:"resolving",CONFLICTS:"conflicts",SYNCED:"synced",WATCHING:"watching",ERROR:"error"};class Ni{static{c(this,"MembraneCLIService")}constructor(e,t,n=()=>process.exit(0)){this.mode=e,this.cwd=t,this.onShutdown=n,this.notifier=de,this.mcpStatusService=new oa,this.syncService=new mt,this.setupProcessCleanup()}initialized=!1;notifier;mcpStatusService;syncService;isShuttingDown=!1;currentConfig=null;get config(){return this.currentConfig}async pullWorkspace(e={}){try{if(await this.notifier.setState(L.PULLING),await this.syncService.fetchElements(),this.syncService.detectIncomingChanges(),this.syncService.needsForcedSync()&&!e.force)return this.notifier.setState(L.CONFLICTS);await this.syncService.pullConnectors(e.allConnectors),await this.syncWorkspaces(e)}catch(t){N.error(`Failed to pull workspace: ${t}`),await this.notifier.setState(L.ERROR),e?.onComplete?.()}}async pushWorkspace(e={}){try{if(await this.notifier.setState(L.PUSHING),await this.syncService.fetchElements(),this.syncService.detectOutgoingChanges(),this.syncService.needsForcedSync()&&!e.force)return await this.notifier.setState(L.CONFLICTS);await this.syncService.pushConnectors(),await this.syncWorkspaces(e)}catch(t){N.error(`Failed to push workspace: ${t}`),await this.notifier.setState(L.ERROR),e?.onComplete?.()}}async syncWorkspaces(e={}){try{await this.notifier.setState(L.RESOLVING),this.syncService.needsSync()&&await this.syncService.resolveChanges();const t=await this.syncService.getStats();this.notifier.setStats(t),await this.notifier.setState(L.SYNCED),e.watch&&(await this.notifier.setState(L.WATCHING),await this.syncService.startWatching()),e.onComplete?.()}catch(t){N.error(`Failed to sync local and remote workspaces: ${t}`),await this.notifier.setState(L.ERROR),e?.onComplete?.()}}async init({force:e=!1}={}){if(!(this.initialized&&!e)){await this.notifier.setState(L.NOT_INITIALIZED);try{await this.loadConfig(),et.isCacheDefined()?(await this.initServices(),this.initialized=!0,await this.notifier.setState(L.INITIALIZED)):(this.initialized=!1,await this.notifier.setState(L.SETTING_UP))}catch(t){N.error(`Failed to initialize services: ${t}`),await this.notifier.setState(L.ERROR),this.onShutdown()}}}async loadConfig(){this.currentConfig=et.loadConfig(this.cwd),this.notifier.setConfig(this.currentConfig)}async updateConfig(e){const t={...this.currentConfig,...e};if(!(JSON.stringify(t)!==JSON.stringify(this.currentConfig)))return;await this.stopServices();const i=et.updateConfig(t);this.currentConfig=i,await this.init({force:!0})}async shutdown(){!this.initialized||this.isShuttingDown||(this.isShuttingDown=!0,this.mode===dt.Agent&&(await this.notifier.cleanup(),await this.mcpStatusService.stop()),this.initialized=!1,this.onShutdown())}async initServices(){this.mode===dt.Agent&&(await this.notifier.connectToRemote(),await this.mcpStatusService.start()),this.syncService.clear()}async stopServices(){this.mode===dt.Agent&&(await this.notifier.cleanup(),await this.mcpStatusService.stop())}setupProcessCleanup(){["SIGINT","SIGTERM","uncaughtException","unhandledRejection"].forEach(t=>process.on(t,()=>this.shutdown())),process.on("beforeExit",t=>{t===0&&this.shutdown()})}}const Ai=ss(null);function ca({children:s,membraneCLIService:e}){const{data:t}=rs("/account"),[n,i]=j(L.NOT_INITIALIZED),[r,o]=j([]),[a,l]=j({}),[u,p]=j([]),[d,h]=j(null),w=t?.workspaces?.find(f=>f.workspaceKey===d?.workspaceKey)||null;return Ie(()=>{const f=c(({state:I})=>i(I),"handleStateChanged"),y=c(({stats:I})=>l(I),"handleStatsChanged"),C=c(({log:I})=>p(O=>[...O,I]),"handleLogAdded"),E=c(({conflicts:I})=>o(I),"handleConflictsUpdated"),A=c(({config:I})=>h(I),"handleConfigChanged");return e.notifier.on(J.StateChanged,f),e.notifier.on(J.StatsChanged,y),e.notifier.on(J.LogAdded,C),e.notifier.on(J.ConflictsChanged,E),e.notifier.on(J.ConfigChanged,A),e.init(),()=>{e.notifier.off(J.StateChanged,f),e.notifier.off(J.StatsChanged,y),e.notifier.off(J.LogAdded,C),e.notifier.off(J.ConflictsChanged,E),e.notifier.off(J.ConfigChanged,A)}},[]),m(Ai.Provider,{value:{state:n,stats:a,logs:u,currentWorkspace:w,conflicts:r,config:d,updateConfig:c(f=>e.updateConfig(f),"updateConfig"),resolveConflicts:c(f=>e.syncWorkspaces(f),"resolveConflicts"),pull:c(f=>e.pullWorkspace(f),"pull"),push:c(f=>e.pushWorkspace(f),"push"),exit:c(()=>e.shutdown(),"exit")},children:s})}c(ca,"MembraneCLIServiceProvider");function ce(){const s=is(Ai);if(!s)throw new Error("useMembraneCLIService must be used within MembraneCLIServiceProvider");return s}c(ce,"useMembraneCLIService");const Oi=ss(process.cwd());function la({cwd:s,children:e}){return m(Oi.Provider,{value:s,children:e})}c(la,"CwdProvider");function ua(){return is(Oi)}c(ua,"useCwd");function Yt({cwd:s,children:e,membraneCLIService:t}){const n=s||process.cwd();return m(la,{cwd:n,children:m(Vi,{value:{fetcher:$r()},children:m(ca,{membraneCLIService:t,children:e})})})}c(Yt,"Layout");const Wn=[{id:"claude-code",name:"Claude Code",description:"Anthropic Claude Code agent",actionDescription:"Adding membrane MCP to .mcp.json in the current directory",addConfig:c(()=>{const s=R.join(process.cwd(),".mcp.json"),e={mcpServers:{membrane:{command:"membrane",args:["mcp"],env:{AGENT_NAME:"Claude Code"}}}};let t={};if(x.existsSync(s))try{t=JSON.parse(x.readFileSync(s,"utf8"))}catch{t={}}const n={...t,mcpServers:{...t.mcpServers,...e.mcpServers}};return x.writeFileSync(s,JSON.stringify(n,null,2)),`MCP server configuration added to ${s}`},"addConfig")},{id:"cursor",name:"Cursor",description:"Cursor AI editor",actionDescription:"Adding membrane MCP to .cursor/mcp.json in the current directory",addConfig:c(()=>{const s=R.join(process.cwd(),".cursor"),e=R.join(s,"mcp.json");x.existsSync(s)||x.mkdirSync(s);const t={mcpServers:{membrane:{command:"membrane",args:["mcp"],env:{AGENT_NAME:"Cursor"}}}};let n={};if(x.existsSync(e))try{n=JSON.parse(x.readFileSync(e,"utf8"))}catch{n={}}const i={...n,mcpServers:{...n.mcpServers,...t.mcpServers}};return x.writeFileSync(e,JSON.stringify(i,null,2)),`MCP server configuration added to ${e}`},"addConfig")}];function fa({onExit:s,onComplete:e}){const[t,n]=j(0),[i,r]=j(!1),[o,a]=j(null),[l,u]=j(""),[p,d]=j("");Pe((w,f)=>{if(l||p){(f.escape||w==="q"||f.return)&&e();return}if(i)f.return||w===" "?h(o):f.escape&&(r(!1),a(null));else if(f.escape)s();else if(f.upArrow||w==="k")n(Math.max(0,t-1));else if(f.downArrow||w==="j")n(Math.min(Wn.length-1,t+1));else if(f.return||w===" "){const y=Wn[t];a(y),r(!0)}});const h=c(w=>{try{const f=w.addConfig();u(f)}catch(f){d(`Failed to write configuration: ${f.message||f}`)}},"addMcpConfiguration"),g=Math.min(80,process.stdout.columns||80);return l?v(b,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:g,children:[m(b,{marginTop:-1,marginBottom:1,children:v(S,{bold:!0,children:["\u{1F517} Connect Agent \u2014 ",m(S,{color:"green",children:"Success"})]})}),v(b,{flexDirection:"column",paddingLeft:2,children:[m(S,{color:"green",children:l}),m(b,{marginTop:1,children:m(S,{color:"grey",children:"The agent will now be able to use Membrane's integration capabilities."})})]}),m(b,{marginTop:1,paddingLeft:2,children:m(S,{color:"white",children:"[esc/q/enter: exit]"})})]}):p?v(b,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:g,children:[m(b,{marginTop:-1,marginBottom:1,children:v(S,{bold:!0,children:["\u{1F517} Connect Agent \u2014 ",m(S,{color:"red",children:"Error"})]})}),m(b,{flexDirection:"column",paddingLeft:2,children:m(S,{color:"red",children:p})}),m(b,{marginTop:1,children:m(S,{color:"grey",children:"[esc/q/enter: exit]"})})]}):i&&o?v(b,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:g,children:[m(b,{marginTop:-1,marginBottom:1,children:v(S,{bold:!0,children:["\u{1F517} Connect Agent \u2014 ",m(S,{color:"cyan",children:"Confirmation"})]})}),v(b,{flexDirection:"column",paddingLeft:2,children:[v(S,{children:["Connect ",m(S,{bold:!0,children:o.name})," to Membrane via MCP?"]}),m(b,{marginTop:1,children:m(S,{color:"grey",children:"This will add an MCP server configuration that allows the agent to use Membrane's integration capabilities."})}),m(b,{marginTop:1,children:m(S,{color:"yellow",bold:!0,children:o.actionDescription})}),m(b,{marginTop:2,marginBottom:1,children:v(S,{children:[m(S,{color:"white",bold:!0,children:"[Enter] Confirm"})," ",m(S,{color:"gray",children:"[Esc] Cancel"})]})})]})]}):v(b,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:g,children:[m(b,{marginTop:-1,marginBottom:1,children:v(S,{bold:!0,children:["\u{1F517} Connect Agent \u2014 ",m(S,{color:"cyan",children:"Select Agent"})]})}),v(b,{flexDirection:"column",paddingLeft:2,children:[m(S,{color:"grey",children:"Choose an agent to connect to Membrane via MCP:"}),m(b,{marginTop:1,children:m(S,{color:"grey",children:"This will add an MCP server configuration that allows the agent to use Membrane's integration capabilities."})}),m(b,{marginTop:1,flexDirection:"column",children:Wn.map((w,f)=>v(b,{children:[v(S,{color:t===f?"cyan":"white",children:[t===f?"\u25B6 ":" ",w.name]}),v(S,{color:"grey",children:[" \u2014 ",w.description]})]},w.id))})]}),m(b,{marginTop:1,children:m(S,{color:"grey",children:"[\u2191\u2193: select] [enter: choose] [esc: exit]"})})]})}c(fa,"AddMcpServerScreen");function ha(){const[s,e]=j(null),[t,n]=j([]),[i,r]=j(null);return Ie(()=>{const o=c(({status:l})=>{e(l),r(null)},"handleMcpStatusChanged"),a=c(({servers:l})=>{n(l),r(null)},"handleMcpServersChanged");return de.on(J.McpStatusChanged,o),de.on(J.McpServersChanged,a),()=>{de.off(J.McpStatusChanged,o),de.off(J.McpServersChanged,a)}},[]),{mcpStatus:s,allMcpServers:t,error:i,isRunning:s?.isRunning||!1,toolsCount:s?.toolsCount||0,totalRequests:s?.totalRequests||0,lastActivity:s?.lastActivity,processId:s?.processId,serverCount:t.length}}c(ha,"useMcpStatus");function da(){const{error:s,serverCount:e,allMcpServers:t}=ha(),n=Math.min(100,process.stdout.columns||100);return v(b,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:n,children:[m(b,{marginTop:-1,marginBottom:0,flexDirection:"column",children:v(S,{bold:!0,children:["\u{1F916} Connected AI Agents:"," ",s?m(S,{color:"red",children:"error reading status"}):e===0?m(S,{color:"yellow",children:"none"}):m(S,{color:"green",children:e})]})}),!s&&e===0&&m(b,{marginTop:1,children:v(S,{color:"grey",children:["Connect your AI agents to Membrane.",m(Wi,{}),"It will give them tools and context to build integrations."]})}),t.length>0&&m(b,{flexDirection:"column",paddingLeft:2,marginTop:1,children:t.map((i,r)=>m(b,{children:v(S,{color:"grey",children:["#",r+1," ",i.agentName,": ",i.totalRequests," calls"]})},i.processId))}),m(b,{marginTop:1,children:m(S,{color:"grey",children:"[a: connect an agent]"})})]})}c(da,"Agent");const zt=c(s=>{switch(s){case"error":return"red";case"success":return"green";case"warning":return"yellow";default:return}},"getLogColor");function $i(s,e){return e<3?s.slice(0,Math.max(0,e)):s.length<=e?s:`${s.slice(0,e-3)}...`}c($i,"truncateText");function Gn({children:s}){const{state:e,logs:t}=ce();if(!e||e===L.NOT_INITIALIZED)return v(b,{gap:1,flexDirection:"row",children:[m(fr,{type:"dots"}),m(S,{children:"Initializing..."})]});if(e===L.SETTING_UP)return m(b,{gap:1,flexDirection:"row",children:m(S,{children:"No workspace selected. Please run `membrane init` to select a workspace."})});if(e===L.ERROR){const n=t.filter(i=>i.type==="error");return m(b,{gap:1,flexDirection:"row",children:n.slice().map((i,r)=>m(S,{color:zt(i.type),children:i.message},i.timestamp+r))})}return s}c(Gn,"EnsureInitialized");function Li({onExit:s,showEscOption:e=!0}){const[t,n]=j(""),{data:i,error:r,isLoading:o}=rs("/account"),{updateConfig:a}=ce(),l=i?.workspaces,u=o;if(Pe((f,y)=>{y.escape&&s?.()}),u)return v(b,{children:[m(wt,{}),m(S,{children:" Fetching workspaces..."})]});if(r)return v(b,{flexDirection:"column",children:[v(S,{color:"red",children:["Error: ",r.message]}),m(b,{marginTop:1,children:m(S,{color:"grey",children:"Press ESC to go back"})})]});const p=l?.filter(f=>f.name.toLowerCase().includes(t.toLowerCase()))??[],d=p.map(f=>({label:f.name,value:f.id})),h=d.length,g=l?.length??0;async function w(f){const y=p.find(A=>A.id===f);if(!y)return;const{key:C,secret:E}=y;!C||!E||(await a({workspaceKey:C,workspaceSecret:E}),s?.())}return c(w,"handleSelect"),v(b,{flexDirection:"column",borderStyle:"round",borderTop:!0,width:70,paddingX:1,children:[m(b,{marginTop:-1,children:m(S,{bold:!0,children:"\u{1F4C1} Select your workspace"})}),v(b,{marginTop:1,children:[m(S,{children:"Search: "}),m(hr,{placeholder:"Enter a search query...",onChange:n})]}),g>5&&v(S,{children:["Showing ",h," of ",g," workspaces."]}),m(b,{marginTop:1,children:m(dr,{options:d,onChange:c(f=>{f&&w(f)},"onChange")})}),e&&m(b,{marginTop:1,children:m(S,{color:"grey",children:"Press ESC to go back"})})]})}c(Li,"SelectWorkspace");function pa({currentPat:s,onSubmit:e}){const[t,n]=j(""),[i,r]=j(!1),[o,a]=j(null);return v(b,{flexDirection:"column",borderStyle:"round",borderTop:!0,width:70,paddingX:1,children:[m(b,{marginTop:-1,marginBottom:1,children:m(S,{bold:!0,children:"\u{1F511} Enter your Personal Access Token"})}),m(S,{children:"Please provide your Personal Access Token. You can find it here:"}),m(b,{marginTop:1,marginBottom:1,children:m(S,{color:"yellow",children:"https://console.integration.app/w/0/manage-account/api-token"})}),s&&m(S,{dimColor:!0,children:"Press Enter to keep your current token or type a new one."}),m(pr,{mask:"*",placeholder:`${s?"******":"Enter your token here..."}`,value:t,onChange:n,onSubmit:c(async u=>{a(null),r(!0);try{await e(u),n("")}catch{a("Invalid token. Please try again.")}finally{r(!1)}},"handleSubmit")}),i&&m(b,{marginTop:1,children:v(S,{children:[m(wt,{type:"dots"})," Validating token..."]})}),o&&m(S,{color:"red",children:o})]})}c(pa,"PersonalAccessTokenInput");var pt=(s=>(s[s.Authenticate=0]="Authenticate",s[s.ConnectWorkspace=1]="ConnectWorkspace",s))(pt||{});const ma={0:"Authenticate in Membrane",1:"Connect a Membrane Workspace"},Vn=[pt.Authenticate,pt.ConnectWorkspace];function Di({onComplete:s}){const{config:e}=ce(),[t,n]=j(!1),[i,r]=j(0),o=!!(e?.workspaceKey&&e?.workspaceSecret),a=ps(),l=Vn[i],u=i+1,p=Vn.length,d=Vn.map((w,f)=>{let y="pending";return f<i?y="done":f===i&&(y="current"),{id:w,label:ma[w],status:y}});async function h(w){const f=a&&w===""?a:w,y=new ms;try{await y.request("/account",{headers:{Authorization:`Bearer ${f}`}}),Or(f),r(C=>C+1)}catch(C){console.error(C)}}c(h,"handlePatSubmit");function g(){n(!0),s&&s()}return c(g,"handleWorkspaceSelected"),Pe((w,f)=>{o&&f.escape&&s&&s()}),t?m(b,{children:m(S,{children:"\u2705 Setup complete. You are ready to go!"})}):v(b,{flexDirection:"column",alignSelf:"flex-start",gap:1,children:[v(b,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:70,children:[m(b,{marginTop:-1,marginBottom:1,children:v(S,{bold:!0,children:["\u{1F6E0}\uFE0F Setup \u2014"," ",v(S,{color:"cyan",children:["Step ",u," of ",p]}),o&&m(S,{color:"grey",children:" [esc: go back]"})]})}),m(b,{flexDirection:"column",paddingLeft:2,children:d.map(w=>m(ga,{status:w.status,label:w.label},w.id))})]}),l===pt.Authenticate&&m(pa,{currentPat:a,onSubmit:h}),l===pt.ConnectWorkspace&&m(Li,{onExit:g,showEscOption:!1})]})}c(Di,"Setup");function ga({status:s,label:e}){return v(b,{children:[v(b,{width:2,children:[s==="current"&&m(wt,{type:"dots"}),s==="done"&&m(S,{children:"\u2705"})]}),m(S,{dimColor:s!=="current",children:e})]})}c(ga,"StepDisplay");function Hn(){const{stats:s}=ce(),e=Object.entries(s).filter(([t,n])=>n>0);return e.length===0?null:v(b,{flexDirection:"column",children:[m(b,{children:m(b,{width:12,children:m(S,{color:"grey",children:"Elements:"})})}),m(b,{flexDirection:"column",marginLeft:1,children:e.map(([t,n])=>v(b,{children:[m(b,{width:20,children:v(S,{children:[t,":"]})}),m(S,{color:"green",children:n})]},t))})]})}c(Hn,"ElementStats");const Yn=5,ya=6;function wa(){const{logs:s}=ce(),[e,t]=j(0),n=Math.min(100,process.stdout.columns||100),i=Yn,r=Math.max(0,s.length-i-e),o=s.length-e,a=s.slice(r,o),l=n-ya,u=e<s.length-i,p=e>0;return Pe((d,h)=>{if(s.length!==0)if(h.upArrow){const g=Math.max(0,s.length-i);t(w=>Math.min(g,w+1))}else h.downArrow?t(g=>Math.max(0,g-1)):(d==="G"||d==="g")&&t(0)}),v(b,{flexDirection:"column",paddingTop:1,children:[v(S,{color:"grey",children:["Recent Activity (",r+1,"-",o," of ",s.length,"):",s.length>Yn&&m(S,{color:"grey",children:" [arrows: scroll] [g: end]"})]}),a.map((d,h)=>m(b,{marginLeft:1,children:m(S,{color:zt(d.type),children:$i(d.message,l)})},d.timestamp+h)),s.length>Yn&&v(b,{marginLeft:1,flexDirection:"row",children:[u&&m(S,{color:"grey",children:"\u2191 "}),p&&m(S,{color:"grey",children:"\u2193 "})]})]})}c(wa,"Logs");const Qt=[{value:"sync",label:"Continue (overwrite/delete)",key:""},{value:"exit",label:"Cancel",key:""}];function ba(){const{state:s,resolveConflicts:e,exit:t}=ce(),[n,i]=j(0),[r,o]=j(!1),[a,l]=j(!1);return Pe((u,p)=>{if(!r){if(p.ctrl&&u.toLowerCase()==="r"){l(!a);return}p.upArrow?i(d=>d>0?d-1:Qt.length-1):p.downArrow?i(d=>d<Qt.length-1?d+1:0):u.toLowerCase()==="y"?i(0):u.toLowerCase()==="n"?i(1):(p.return||u===" ")&&(o(!0),Qt[n].value==="sync"?e({watch:!0}):t())}}),Ie(()=>{s!==L.CONFLICTS&&r&&o(!1)},[s,r]),v(b,{flexDirection:"column",paddingTop:1,children:[m(b,{children:m(b,{flexDirection:"row",gap:2,children:m(S,{bold:!0,color:"white",children:"Conflicts with remote"})})}),m(b,{children:m(S,{color:"grey",children:"The remote workspace has changes that aren't in your local workspace:"})}),m(b,{marginTop:1,marginLeft:2,children:m(zn,{isExpanded:a})}),v(b,{marginTop:2,flexDirection:"row",gap:1,children:[m(S,{color:"white",bold:!0,children:"What would you like to do?"}),m(S,{color:"grey",children:"[up/down, enter]"})]}),m(b,{children:r?v(b,{flexDirection:"row",gap:1,children:[m(wt,{type:"dots"}),m(S,{color:"blue",bold:!0,children:"Syncing with remote..."})]}):m(b,{flexDirection:"column",children:Qt.map((u,p)=>m(b,{flexDirection:"column",children:v(b,{flexDirection:"row",gap:1,children:[m(S,{color:n===p?"cyan":"grey",children:n===p?"\u25B6":" "}),m(S,{color:n===p?"cyan":"grey",bold:n===p,children:u.label})]})},u.value))})})]})}c(ba,"ResolveChangesUI");const Sa={[X.UPDATE]:{incoming:{label:"Elements updated in remote",description:"(to be overwritten from remote)"},outgoing:{label:"Elements updated locally",description:"(to be pushed to remote)"}},[X.DELETE]:{incoming:{label:"Elements not existing in remote",description:"(to be deleted locally)"},outgoing:{label:"Elements deleted locally",description:"(to be deleted from remote)"}},[X.CREATE]:{incoming:{label:"Elements created in remote",description:"(to be created locally)"},outgoing:{label:"Elements created locally",description:"(to be created in remote)"}}};function zn({isExpanded:s}){const{conflicts:e}=ce(),t=5,n=Hi(()=>{const i={};return e.forEach(r=>{const o=`${r.type}-${r.direction}`;i[o]||(i[o]=[]),i[o].push(r)}),i},[e]);return m(b,{flexDirection:"column",children:Object.entries(n).map(([i,r])=>{if(r.length===0)return null;const[o,a]=i.split("-"),l=Sa[o][a];return v(b,{flexDirection:"column",children:[v(b,{flexDirection:"row",gap:1,children:[v(S,{color:"yellow",children:[l.label," (",r.length,")"]}),m(S,{color:"white",children:l.description})]}),(s?r:r.slice(0,t)).map(u=>m(b,{marginLeft:2,children:v(S,{color:"grey",children:["\u2022 ",u.element.id," (",u.element.relativePath,")"]})},u.element.id)),!s&&r.length>t&&m(b,{marginLeft:2,children:v(S,{color:"cyan",children:["... and ",r.length-t," more (press Ctrl+R to show all)"]})}),s&&r.length>t&&m(b,{marginLeft:2,children:m(S,{color:"cyan",children:"(press Ctrl+R to collapse)"})})]},i)})})}c(zn,"Conflicts");function Ca(){const{config:s,state:e,logs:t,currentWorkspace:n,pull:i}=ce(),r=n?.name,o=r?$i(r,30):s?.workspaceKey,a=Math.min(100,process.stdout.columns||100);return Ie(()=>{i({watch:!0})},[]),v(b,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:a,children:[m(b,{marginTop:-1,marginBottom:1,children:v(b,{flexDirection:"row",gap:1,children:[m(S,{bold:!0,children:"\u{1F504} Workspace"}),v(S,{color:Ea(e),children:[" [",ka(e),"] "]})]})}),v(b,{children:[m(b,{width:12,children:m(S,{color:"grey",children:"Local:"})}),m(S,{color:"grey",children:process.cwd()})]}),v(b,{children:[m(b,{width:12,children:m(S,{color:"grey",children:"Remote:"})}),s?.workspaceKey?v(S,{color:"grey",children:[o," [o: open in console] [w: change]"]}):v(S,{children:[m(S,{color:"yellow",children:"not selected"})," [w: select]"]})]}),e===L.CONFLICTS?m(ba,{}):v(en,{children:[m(b,{paddingTop:1,children:m(Hn,{})}),t.length>0&&m(wa,{})]})]})}c(Ca,"Workspace");function ka(s){switch(s){case L.PULLING:return"pulling";case L.PUSHING:return"pushing";case L.CONFLICTS:return"conflicts";case L.SYNCED:return"synced";case L.ERROR:return"error";case L.WATCHING:return"tracking changes";case L.RESOLVING:return"resolving";case L.NOT_SYNCED:return"not synced";case L.INITIALIZED:return"initialized";case L.SETTING_UP:return"setup required";default:return"unknown"}}c(ka,"getStatusDisplay");function Ea(s){switch(s){case L.PULLING:return"yellow";case L.PUSHING:return"yellow";case L.CONFLICTS:return"red";case L.SYNCED:return"green";case L.ERROR:return"red";case L.WATCHING:return"green";case L.RESOLVING:return"yellow";case L.NOT_SYNCED:return"grey";case L.SETTING_UP:return"yellow";default:return"grey"}}c(Ea,"getStatusColor");const va="https://console.integration.app/w";function Ia(){const s=ua(),e=Yi(!0),{exit:t,state:n}=ce(),[i,r]=j(null),o=i??(n===L.SETTING_UP?"setup":"main");Pe(l=>{o==="main"&&(l==="w"&&r("workspace-selection"),l==="a"&&r("add-mcp-server"),l==="o"&&n===L.INITIALIZED&&a(),l==="s"&&r("setup"))});async function a(){try{const l=await gs(s),u=`${va}/${l}`,p=process.platform==="darwin"?"open":process.platform==="win32"?"start":"xdg-open";ur(`${p} "${u}"`)}catch(l){console.error("Failed to open workspace:",l),t()}}return c(a,"handleOpenWorkspace"),Ie(()=>(e.current=!0,()=>{e.current=!1}),[]),o==="workspace-selection"?m(Li,{onExit:c(()=>r(null),"onExit")}):o==="add-mcp-server"?m(fa,{onExit:c(()=>r(null),"onExit"),onComplete:c(()=>r(null),"onComplete")}):o==="setup"?m(Di,{onComplete:c(()=>r(null),"onComplete")},Date.now()):m(Gn,{children:v(b,{flexDirection:"column",children:[m(b,{flexGrow:1,children:m(da,{})}),m(Ca,{}),m(b,{paddingLeft:2,children:m(S,{color:"grey",children:"[s: (re-)setup]"})})]})})}c(Ia,"Main");const xi=Gi(process.argv.slice(2)),Pi=xi.cwd?qi(xi.cwd):process.cwd(),Ta=new Ni(dt.Agent,Pi),Na=c(()=>m(Yt,{cwd:Pi,membraneCLIService:Ta,children:m(Ia,{})}),"App");function Aa(){gt(m(Na,{}))}c(Aa,"runAgent");function Oa(s,e){s.command("init").description("Run interactive setup for Membrane project").option("--key <key>","Workspace key for non-interactive setup").option("--secret <secret>","Workspace secret for non-interactive setup").addHelpText("after",["","Examples:"," membrane init # Run interactive setup"," membrane init --key KEY --secret SEC # Non-interactive setup with key and secret",""].join(`
141
141
  `)).action(t=>{t.key&&t.secret?et.saveToFile({workspaceKey:t.key,workspaceSecret:t.secret})?(console.error("\u2705 Configuration saved to membrane.config.yml"),process.exit(0)):(console.error("Error writing configuration file"),process.exit(1)):t.key||t.secret?(console.error("Error: Both --key and --secret must be provided for non-interactive mode"),process.exit(1)):gt(Re.createElement(Yt,{membraneCLIService:e,children:Re.createElement(Di,{onComplete:c(()=>process.exit(0),"onComplete")})}))})}c(Oa,"setupInitCommand");async function Ri(s,e){const t={iss:s,exp:Math.floor(Date.now()/1e3)+600,isAdmin:!0};return rn.sign(t,e)}c(Ri,"generateAdminAccessToken");async function $a(s,e){return(await on.get(`${s}/docs-json`,{headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json"}})).data}c($a,"fetchOpenApiSchema");function Mi(s,e=!0){if(!s)return e?z.string():z.string().optional();let t;switch(s.type){case"integer":t=z.coerce.number().int();break;case"number":t=z.coerce.number();break;case"boolean":t=z.coerce.boolean();break;case"string":default:t=z.string();break}return s.format==="uuid"?t=z.string().uuid():s.format==="email"?t=z.string().email():s.format==="date"?t=z.string().regex(/^\d{4}-\d{2}-\d{2}$/):s.format==="date-time"&&(t=z.string().datetime()),s.enum&&(t=z.enum(s.enum)),(s.type==="integer"||s.type==="number")&&(s.minimum!==void 0&&(t=t.min(s.minimum)),s.maximum!==void 0&&(t=t.max(s.maximum))),s.type==="string"&&(s.minLength!==void 0&&(t=t.min(s.minLength)),s.maxLength!==void 0&&(t=t.max(s.maxLength))),e?t:t.optional()}c(Mi,"convertOpenApiSchemaToZod");function _i(s){const e=s.match(/\{([^}]+)\}/g);return e?e.map(t=>t.slice(1,-1)):[]}c(_i,"extractPathParameters");function La(s,e,t,n,i,r){const o=s.operationId||`${t}_${e.replace(/[^a-zA-Z0-9]/g,"_")}`,a=s.description||s.summary||`${t.toUpperCase()} ${e}`,l={},u={},p={};if(s.parameters){for(const h of s.parameters)if(h.in==="path")u[h.name]=Mi(h.schema,!0).describe(h.description||`Path parameter: ${h.name}`);else if(h.in==="query"){const g=h.required===!0;p[h.name]=Mi(h.schema,g).describe(h.description||`Query parameter: ${h.name}`)}}Object.keys(u).length>0&&(l.params=z.object(u).describe("Path parameters")),Object.keys(p).length>0&&(l.query=z.object(p).describe("Query parameters")),s.requestBody&&s.requestBody.content&&s.requestBody.content["application/json"]&&(l.body=z.any().describe("Request body"));const d=Object.keys(l).length>0?z.object(l):z.object({});return{name:o,description:a,parameters:d,async execute(h){try{const g=_i(e);if(g.length>0){if(!h.params)throw new Error(`Missing required path parameters: ${g.join(", ")}`);const I=g.filter(O=>!(O in h.params));if(I.length>0)throw new Error(`Missing required path parameters: ${I.join(", ")}`)}let w=`${n}${e}`;if(h.params)for(const[I,O]of Object.entries(h.params)){const $=`{${I}}`;w.includes($)&&(w=w.replace($,String(O)))}const f=_i(w);if(f.length>0)throw new Error(`Unresolved path parameters: ${f.join(", ")}`);const y=new URLSearchParams;if(h.query)for(const[I,O]of Object.entries(h.query))O!=null&&y.append(I,String(O));y.toString()&&(w+=`?${y.toString()}`);const C=await Ri(i,r),E={method:t.toUpperCase(),headers:{Authorization:`Bearer ${C}`,"Content-Type":"application/json"}};h.body&&t.toLowerCase()!=="get"&&(E.data=h.body);const A=await on.request({url:w,...E});return{content:[{type:"text",text:JSON.stringify(A.data,null,2)}]}}catch(g){return on.isAxiosError(g)?{content:[{type:"text",text:`Error: ${g.response?.data?`HTTP ${g.response.status}: ${g.response.statusText} - ${JSON.stringify(g.response.data)}`:`HTTP ${g.response?.status||"unknown"}: ${g.message}`}`}],isError:!0}:g instanceof Error?{content:[{type:"text",text:`Error: API call failed: ${g.message}`}],isError:!0}:{content:[{type:"text",text:"Error: API call failed with unknown error"}],isError:!0}}}}}c(La,"createApiTool");function Da(s,e,t,n){const i=[];if(!s.paths)return i;for(const[r,o]of Object.entries(s.paths))if(typeof o=="object"&&o!==null){for(const[a,l]of Object.entries(o))if(["get","post","put","delete","patch"].includes(a)&&l&&typeof l=="object"){const u=La(l,r,a,e,t,n);i.push(u)}}return i}c(Da,"convertOpenApiToTools");function xa(s){s.command("mcp").description("Launch MCP server with OpenAPI endpoints as tools (API URI is read from environment variables or membrane.config.yml)").addHelpText("after",["","Examples:"," membrane mcp # Launch MCP server using API URI from env vars or membrane.config.yml",""].join(`
142
142
  `)).action(async()=>{try{process.env.FASTMCP_SUPPRESS_WARNINGS="true";const e=St();e||(console.error("No configuration found. Please set MEMBRANE_WORKSPACE_KEY and MEMBRANE_WORKSPACE_SECRET environment variables, or run `membrane init` first."),process.exit(1)),(!e.workspaceKey||!e.workspaceSecret)&&(console.error("Missing workspace credentials"),process.exit(1));const t=e.apiUri||cn,n=await Ri(e.workspaceKey,e.workspaceSecret),i=await $a(t,n),r=Da(i,t,e.workspaceKey,e.workspaceSecret),o=new yr({name:"Membrane API",instructions:`This MCP server lets you interact with Membrane to configure, run, and troubleshoot integrations.
143
143
  Use it for anything related to Membrane or integrations.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@membranehq/cli",
3
- "version": "0.10.13",
3
+ "version": "0.10.15",
4
4
  "keywords": [
5
5
  "cli",
6
6
  "integration",