@membranehq/cli 1.1.4 → 1.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +13 -13
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var yc=Object.defineProperty;var c=(s,e)=>yc(s,"name",{value:e,configurable:!0});import{jsx as g,jsxs as O,Fragment as Rs}from"react/jsx-runtime";import*as q from"node:path";import{join as Ps,resolve as wc,dirname as bc}from"node:path";import{useInput as st,Box as v,Text as C,Newline as Sc,render as wn}from"ink";import vc from"minimist";import{SWRConfig as Cc}from"swr";import rt,{createContext as ui,useState as H,useEffect as Ve,useContext as di,useMemo as kc,useRef as _c}from"react";import fi from"swr/immutable";import{MembraneConfigLoader as Tc,WorkspaceElementType as K,WorkspaceElementSpecs as De,MembraneAxiosInstance as Ec,MembraneClient as hi,WorkspaceSyncEventType as Oc,ConnectorFileUpdateType as Ms,setValueAtLocator as Ls,extractMembraneErrorData as ke,getDataCollectionCreateFields as Ds,excludeWriteOnlyFieldsFromSchema as pi,valueToSchema as bn,getRequiredFieldsFromSchema as Ac,getValueAtLocator as Ic,walkSchema as mi,makeDataLocationPath as gi,getDataCollectionUpdateFields as js}from"@membranehq/sdk";import $c from"lodash/isEqual.js";import*as M from"node:fs";import{mkdirSync as Nc,writeFileSync as xc,readFileSync as Rc}from"node:fs";import yi from"os";import{EventEmitter as Pc}from"events";import B from"path";import Mc from"conf";import Fs from"jsonwebtoken";import Dt from"js-yaml";import*as Lc from"node:crypto";import{createHash as Dc}from"node:crypto";import jc from"chokidar";import{EventSource as Fc}from"eventsource";import j from"fs";import qc from"archiver";import Kc from"form-data";import Bc from"unzipper";import*as Uc from"node:os";import{exec as Wc}from"node:child_process";import{Spinner as Jc,TextInput as Hc,Select as Vc}from"@inkjs/ui";import Sn from"ink-spinner";import Gc from"ink-text-input";import{fileURLToPath as zc}from"node:url";import _ from"chalk";import{Command as Yc}from"commander";import wi from"lodash/camelCase.js";import bi from"lodash/upperFirst.js";import Xc from"code-block-writer";import qs from"axios";import{FastMCP as Qc}from"fastmcp";import{z as U}from"zod";import Ks from"lodash/merge.js";import{faker as jt}from"@faker-js/faker";import Zc from"lodash/template.js";import el from"lodash/templateSettings.js";class Rt{static{c(this,"ConfigLoader")}static instance=null;sdkLoader;constructor(){this.sdkLoader=new Tc}static getInstance(){return Rt.instance||(Rt.instance=new Rt),Rt.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 Ft=Rt.getInstance();var F={},vn={},Si;function vi(){if(Si)return vn;Si=1,Object.defineProperty(vn,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/[^A-Za-z0-9]+/g,"$").replace(/([a-z])([A-Z])/g,function(t,n,r){return n+"$"+r}).toLowerCase().replace(/(\$)(\w)/g,function(t,n,r){return r.toUpperCase()}):""}return c(s,"toCamelCase"),vn.default=s,vn}c(vi,"requireJsCamelcase");var Cn={},Ci;function ki(){if(Ci)return Cn;Ci=1,Object.defineProperty(Cn,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/([a-z])([A-Z])/g,function(t,n,r){return n+"_"+r.toLowerCase()}).replace(/[^A-Za-z0-9]+|_+/g,"_").toLowerCase():""}return c(s,"toSnakeCase"),Cn.default=s,Cn}c(ki,"requireJsSnakecase");var kn={},_i;function Ti(){if(_i)return kn;_i=1,Object.defineProperty(kn,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"$").replace(/[^A-Za-z0-9]+/g,"$").replace(/([a-z])([A-Z])/g,function(t,n,r){return n+"$"+r}).toLowerCase().replace(/(\$)(\w?)/g,function(t,n,r){return r.toUpperCase()}):""}return c(s,"toPascalCase"),kn.default=s,kn}c(Ti,"requireJsPascalcase");var _n={},Ei;function tl(){if(Ei)return _n;Ei=1,Object.defineProperty(_n,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/([a-z])([A-Z])/g,function(t,n,r){return n+"_"+r.toLowerCase()}).replace(/[^A-Za-z0-9]+|_+/g,".").toLowerCase():""}return c(s,"toDotCase"),_n.default=s,_n}c(tl,"requireJsDotcase");var Tn={},Oi;function nl(){if(Oi)return Tn;Oi=1,Object.defineProperty(Tn,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/([a-z])([A-Z])/g,function(t,n,r){return n+"_"+r.toLowerCase()}).replace(/[^A-Za-z0-9]+|_+/g,"/").toLowerCase():""}return c(s,"toPathCase"),Tn.default=s,Tn}c(nl,"requireJsPathcase");var En={},Ai;function sl(){if(Ai)return En;Ai=1,Object.defineProperty(En,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/([a-z])([A-Z])/g,function(t,n,r){return n+"_"+r.toLowerCase()}).replace(/[^A-Za-z0-9]+|_+/g," ").toLowerCase():""}return c(s,"toTextCase"),En.default=s,En}c(sl,"requireJsTextcase");var On={},Ii;function rl(){if(Ii)return On;Ii=1,Object.defineProperty(On,"__esModule",{value:!0});function s(e){if(e===void 0&&(e=""),!e)return"";var t=String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/([a-z])([A-Z])/g,function(n,r,i){return r+"_"+i.toLowerCase()}).replace(/[^A-Za-z0-9]+|_+/g," ").toLowerCase();return t.charAt(0).toUpperCase()+t.slice(1)}return c(s,"toSentenceCase"),On.default=s,On}c(rl,"requireJsSentencecase");var An={},$i;function il(){if($i)return An;$i=1,Object.defineProperty(An,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/([a-z])([A-Z])/g,function(t,n,r){return n+"_"+r.toLowerCase()}).replace(/[^A-Za-z0-9]+|_+/g," ").toLowerCase().replace(/( ?)(\w+)( ?)/g,function(t,n,r,i){return n+r.charAt(0).toUpperCase()+r.slice(1)+i}):""}return c(s,"toHeaderCase"),An.default=s,An}c(il,"requireJsHeadercase");var In={},Ni;function xi(){if(Ni)return In;Ni=1,Object.defineProperty(In,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/([a-z])([A-Z])/g,function(t,n,r){return n+"_"+r.toLowerCase()}).replace(/[^A-Za-z0-9]+|_+/g,"-").toLowerCase():""}return c(s,"toKebabCase"),In.default=s,In}c(xi,"requireJsKebabcase");var it={},Bs={},Ri;function ot(){return Ri||(Ri=1,function(s){Object.defineProperty(s,"__esModule",{value:!0}),s.belongToTypes=s.isValidObject=s.isArrayObject=s.validateOptions=s.DefaultOption=void 0,s.DefaultOption={recursive:!1,recursiveInArray:!1,keepTypesOnRecursion:[]},s.validateOptions=function(e){return e===void 0&&(e=s.DefaultOption),e.recursive==null?e=s.DefaultOption:e.recursiveInArray==null&&(e.recursiveInArray=!1),e},s.isArrayObject=function(e){return e!=null&&Array.isArray(e)},s.isValidObject=function(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)},s.belongToTypes=function(e,t){return(t||[]).some(function(n){return e instanceof n})}}(Bs)),Bs}c(ot,"requireUtils");var Pi;function ol(){if(Pi)return it;Pi=1;var s=it&&it.__spreadArrays||function(){for(var n=0,r=0,i=arguments.length;r<i;r++)n+=arguments[r].length;for(var o=Array(n),a=0,r=0;r<i;r++)for(var l=arguments[r],u=0,d=l.length;u<d;u++,a++)o[a]=l[u];return o};Object.defineProperty(it,"__esModule",{value:!0});var e=ot();function t(n,r){if(r===void 0&&(r=e.DefaultOption),!e.isValidObject(n))return null;r=e.validateOptions(r);var i={};return Object.keys(n).forEach(function(o){var a=n[o],l=o.toLowerCase();r.recursive&&(e.isValidObject(a)?e.belongToTypes(a,r.keepTypesOnRecursion)||(a=t(a,r)):r.recursiveInArray&&e.isArrayObject(a)&&(a=s(a).map(function(u){var d=u;if(e.isValidObject(u))e.belongToTypes(d,r.keepTypesOnRecursion)||(d=t(u,r));else if(e.isArrayObject(u)){var f=t({key:u},r);d=f.key}return d}))),i[l]=a}),i}return c(t,"lowerKeys"),it.default=t,it}c(ol,"requireLowercaseKeysObject");var at={},Mi;function al(){if(Mi)return at;Mi=1;var s=at&&at.__spreadArrays||function(){for(var n=0,r=0,i=arguments.length;r<i;r++)n+=arguments[r].length;for(var o=Array(n),a=0,r=0;r<i;r++)for(var l=arguments[r],u=0,d=l.length;u<d;u++,a++)o[a]=l[u];return o};Object.defineProperty(at,"__esModule",{value:!0});var e=ot();function t(n,r){if(r===void 0&&(r=e.DefaultOption),!e.isValidObject(n))return null;r=e.validateOptions(r);var i={};return Object.keys(n).forEach(function(o){var a=n[o],l=o.toUpperCase();r.recursive&&(e.isValidObject(a)?e.belongToTypes(a,r.keepTypesOnRecursion)||(a=t(a,r)):r.recursiveInArray&&e.isArrayObject(a)&&(a=s(a).map(function(u){var d=u;if(e.isValidObject(u))e.belongToTypes(d,r.keepTypesOnRecursion)||(d=t(u,r));else if(e.isArrayObject(u)){var f=t({key:u},r);d=f.key}return d}))),i[l]=a}),i}return c(t,"upperKeys"),at.default=t,at}c(al,"requireUppercaseKeysObject");var ct={},Li;function cl(){if(Li)return ct;Li=1;var s=ct&&ct.__spreadArrays||function(){for(var r=0,i=0,o=arguments.length;i<o;i++)r+=arguments[i].length;for(var a=Array(r),l=0,i=0;i<o;i++)for(var u=arguments[i],d=0,f=u.length;d<f;d++,l++)a[l]=u[d];return a};Object.defineProperty(ct,"__esModule",{value:!0});var e=ot(),t=vi();function n(r,i){if(i===void 0&&(i=e.DefaultOption),!e.isValidObject(r))return null;i=e.validateOptions(i);var o={};return Object.keys(r).forEach(function(a){var l=r[a],u=t.default(a);i.recursive&&(e.isValidObject(l)?e.belongToTypes(l,i.keepTypesOnRecursion)||(l=n(l,i)):i.recursiveInArray&&e.isArrayObject(l)&&(l=s(l).map(function(d){var f=d;if(e.isValidObject(d))e.belongToTypes(f,i.keepTypesOnRecursion)||(f=n(d,i));else if(e.isArrayObject(d)){var p=n({key:d},i);f=p.key}return f}))),o[u]=l}),o}return c(n,"camelKeys"),ct.default=n,ct}c(cl,"requireCamelcaseKeysObject");var lt={},Di;function ll(){if(Di)return lt;Di=1;var s=lt&<.__spreadArrays||function(){for(var r=0,i=0,o=arguments.length;i<o;i++)r+=arguments[i].length;for(var a=Array(r),l=0,i=0;i<o;i++)for(var u=arguments[i],d=0,f=u.length;d<f;d++,l++)a[l]=u[d];return a};Object.defineProperty(lt,"__esModule",{value:!0});var e=ot(),t=ki();function n(r,i){if(i===void 0&&(i=e.DefaultOption),!e.isValidObject(r))return null;i=e.validateOptions(i);var o={};return Object.keys(r).forEach(function(a){var l=r[a],u=t.default(a);i.recursive&&(e.isValidObject(l)?e.belongToTypes(l,i.keepTypesOnRecursion)||(l=n(l,i)):i.recursiveInArray&&e.isArrayObject(l)&&(l=s(l).map(function(d){var f=d;if(e.isValidObject(d))e.belongToTypes(f,i.keepTypesOnRecursion)||(f=n(d,i));else if(e.isArrayObject(d)){var p=n({key:d},i);f=p.key}return f}))),o[u]=l}),o}return c(n,"snakeKeys"),lt.default=n,lt}c(ll,"requireSnakecaseKeysObject");var ut={},ji;function ul(){if(ji)return ut;ji=1;var s=ut&&ut.__spreadArrays||function(){for(var r=0,i=0,o=arguments.length;i<o;i++)r+=arguments[i].length;for(var a=Array(r),l=0,i=0;i<o;i++)for(var u=arguments[i],d=0,f=u.length;d<f;d++,l++)a[l]=u[d];return a};Object.defineProperty(ut,"__esModule",{value:!0});var e=ot(),t=Ti();function n(r,i){if(i===void 0&&(i=e.DefaultOption),!e.isValidObject(r))return null;i=e.validateOptions(i);var o={};return Object.keys(r).forEach(function(a){var l=r[a],u=t.default(a);i.recursive&&(e.isValidObject(l)?e.belongToTypes(l,i.keepTypesOnRecursion)||(l=n(l,i)):i.recursiveInArray&&e.isArrayObject(l)&&(l=s(l).map(function(d){var f=d;if(e.isValidObject(d))e.belongToTypes(f,i.keepTypesOnRecursion)||(f=n(d,i));else if(e.isArrayObject(d)){var p=n({key:d},i);f=p.key}return f}))),o[u]=l}),o}return c(n,"pascalKeys"),ut.default=n,ut}c(ul,"requirePascalcaseKeysObject");var dt={},Fi;function dl(){if(Fi)return dt;Fi=1;var s=dt&&dt.__spreadArrays||function(){for(var r=0,i=0,o=arguments.length;i<o;i++)r+=arguments[i].length;for(var a=Array(r),l=0,i=0;i<o;i++)for(var u=arguments[i],d=0,f=u.length;d<f;d++,l++)a[l]=u[d];return a};Object.defineProperty(dt,"__esModule",{value:!0});var e=ot(),t=xi();function n(r,i){if(i===void 0&&(i=e.DefaultOption),!e.isValidObject(r))return null;i=e.validateOptions(i);var o={};return Object.keys(r).forEach(function(a){var l=r[a],u=t.default(a);i.recursive&&(e.isValidObject(l)?e.belongToTypes(l,i.keepTypesOnRecursion)||(l=n(l,i)):i.recursiveInArray&&e.isArrayObject(l)&&(l=s(l).map(function(d){var f=d;if(e.isValidObject(d))e.belongToTypes(f,i.keepTypesOnRecursion)||(f=n(d,i));else if(e.isArrayObject(d)){var p=n({key:d},i);f=p.key}return f}))),o[u]=l}),o}return c(n,"kebabKeys"),dt.default=n,dt}c(dl,"requireKebabcaseKeysObject");var qi;function fl(){if(qi)return F;qi=1,Object.defineProperty(F,"__esModule",{value:!0}),F.kebabKeys=F.pascalKeys=F.snakeKeys=F.camelKeys=F.upperKeys=F.lowerKeys=F.toLowerCase=F.toUpperCase=F.toKebabCase=F.toHeaderCase=F.toSentenceCase=F.toTextCase=F.toPathCase=F.toDotCase=F.toPascalCase=F.toSnakeCase=F.toCamelCase=void 0;var s=vi();F.toCamelCase=s.default;var e=ki();F.toSnakeCase=e.default;var t=Ti();F.toPascalCase=t.default;var n=tl();F.toDotCase=n.default;var r=nl();F.toPathCase=r.default;var i=sl();F.toTextCase=i.default;var o=rl();F.toSentenceCase=o.default;var a=il();F.toHeaderCase=a.default;var l=xi();F.toKebabCase=l.default;var u=ol();F.lowerKeys=u.default;var d=al();F.upperKeys=d.default;var f=cl();F.camelKeys=f.default;var p=ll();F.snakeKeys=p.default;var m=ul();F.pascalKeys=m.default;var y=dl();F.kebabKeys=y.default;var h=c(function(T){return String(T||"").toLowerCase()},"toLowerCase");F.toLowerCase=h;var w=c(function(T){return String(T||"").toUpperCase()},"toUpperCase");F.toUpperCase=w;var k={toCamelCase:s.default,toSnakeCase:e.default,toPascalCase:t.default,toDotCase:n.default,toPathCase:r.default,toTextCase:i.default,toSentenceCase:o.default,toHeaderCase:a.default,toKebabCase:l.default,toUpperCase:w,toLowerCase:h,lowerKeys:u.default,upperKeys:d.default,camelKeys:f.default,snakeKeys:p.default,pascalKeys:m.default,kebabKeys:y.default};return F.default=k,F}c(fl,"requireLib");var Us,Ki;function hl(){return Ki||(Ki=1,Us=fl()),Us}c(hl,"requireJsConvertCase");var pl=hl();const Oe={UPDATE:"update",DELETE:"delete",CREATE:"create"},ae={INCOMING:"incoming",OUTGOING:"outgoing"},le={[K.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")},[K.Connector]:{element:"connector",elements:"connectors",exportable:!1},[K.Action]:{element:"action",elements:"actions",integrationSpecific:!0,exportCleanup:c(s=>(delete s.integration,s),"exportCleanup")},[K.AppDataSchema]:{element:"appDataSchema",elements:"appDataSchemas"},[K.AppEventType]:{element:"appEventType",elements:"appEventTypes"},[K.DataLinkTable]:{element:"dataLinkTable",elements:"dataLinkTables"},[K.DataSource]:{element:"dataSource",elements:"dataSources",parentKey:"universalDataSourceId",integrationSpecific:!0},[K.FieldMapping]:{element:"fieldMapping",elements:"fieldMappings",integrationSpecific:!0,parentKey:"universalFieldMappingId",exportCleanup:c(s=>(delete s.dataSourceId,s),"exportCleanup")},[K.Flow]:{element:"flow",elements:"flows",integrationSpecific:!0,parentKey:"universalFlowId"}};function ml(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(ml,"baseExportCleanup");const gl="membrane",yl=["**/node_modules/**","**/.git/**","**/.DS_Store","**/Thumbs.db","**/*.tmp","**/*.swp","**/*.swo","**/*.log","**/*.lock","**/.cache/**","**/.next/**","**/.vscode/**","**/.idea/**","**/.logs/**"];function ft(s){return q.join(s,gl)}c(ft,"getMembraneDir");const wl=["id","workspaceId","integrationId","createdAt","updatedAt","revision","archivedAt","baseUri","state","appliedToIntegrations","dependencies"],Bi=[K.Action,K.FieldMapping,K.Flow,K.DataSource];class Z{static{c(this,"Element")}type;key;integrationKey;data;constructor(e,t,n,r){if(!r)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=r,this.integrationKey=n||Z.extractIntegrationKey(r)}get id(){return Z.makeId(this.type,this.key,this.integrationKey)}get dirPath(){const e=De[this.type].apiPath;if(this.integrationKey){const t=De[K.Integration].apiPath;return q.join(t,this.integrationKey,e,this.key)}return q.join(e,this.key)}get path(){return q.join(this.dirPath,"spec.yaml")}get relativePath(){return q.relative(ft(process.cwd()),this.path)}get absolutePath(){return q.resolve(q.join(ft(process.cwd()),this.path))}isEqual(e){if(this.id!==e.id)return!1;const t=this.clean(),n=e.clean();return $c(t,n)}hasParent(){const e=this.getParentKey();return!!e&&!!this.data?.[e]}clean(){const e={...this.data};return wl.forEach(t=>{delete e[t]}),Object.keys(e).forEach(t=>{t.match(/universal.*Revision/)&&delete e[t]}),e}getParentKey(){let e="parentId";return le?.[this.type]?.parentKey&&(e=le?.[this.type]?.parentKey),e}static new(e,t,n,r){return new Z(e,t,n,r)}static fromData(e,t){if(!t?.key)throw new Error(`Element missing key: ${JSON.stringify(t)}`);const n=this.extractIntegrationKey(t);return new Z(e,t.key,n,t)}static fromPathAndData(e,t){const n=Z.parsePath(e);if(!t)return;const r=t?.key||n?.key;return n?Z.new(n.type,r,n.integrationKey,t):void 0}static fromElement(e){return new Z(e.type,e.key,e.integrationKey,{...e.data})}static idFromPath(e){const t=Z.parsePath(e);if(t)return Z.makeId(t.type,t.key,t.integrationKey)}static makeId(e,t,n){return e===K.Integration?`${e}:${t}`:Z.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(De).map(l=>l.apiPath).join("|"),r=new RegExp(`^(?<elementType>${n})/(?<elementKey>[^/]+)/spec\\.ya?ml$`),i=t.match(r);if(i?.groups){const{elementType:l,elementKey:u}=i.groups,d=this.getElementTypeFromPath(l);if(d)return{type:d,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:d}=a.groups,f=this.getElementTypeFromPath(u);if(f)return{type:f,key:d,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(K).find(t=>De[t].apiPath===e)}static getRelativePath(e){return q.relative(ft(process.cwd()),e)}static isIntegrationSpecific(e){return Bi.includes(e)}static canBeIntegrationSpecific(e){return Bi.includes(e)}}const X={LogAdded:"logAdded",StateChanged:"stateChanged",StatsChanged:"statsChanged",ConflictsChanged:"conflictsChanged",McpStatusChanged:"mcpStatusChanged",McpServersChanged:"mcpServersChanged",ConfigChanged:"configChanged"};class Ws extends Pc{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 bl="membrane",Sl="membrane.config.yml",Js="https://api.integration.app";function Hs(){const s=process.cwd(),e=q.join(s,bl),t=q.join(s,Sl),n=e,r=q.join(n,"workspace.yaml");return{membraneDirPath:e,configPath:t,payloadDirPath:n,workspaceDataFilePath:r}}c(Hs,"getPaths");function Ui(){return Hs().membraneDirPath}c(Ui,"getBasePath");const vl={pat:{type:"string"},workspace:{type:"object"}},Wi=new Mc({schema:vl,configName:"config",cwd:B.join(yi.homedir(),".membrane")}),Cl=c(s=>{Wi.set("pat",s)},"setPat"),Ji=c(()=>Wi.get("pat"),"getPat");class Hi{static{c(this,"AccountApiClient")}constructor(e=Js){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=Ji();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 r=await fetch(`${this.apiBaseUrl}${e}`,{...t,headers:n});if(!r.ok){const o=await r.text();throw new Error(`API request failed: ${r.status} ${r.statusText} - ${o}`)}if(r.status===204)return{};const i=await r.text();return JSON.parse(i)}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 kl=c(s=>{const e=new Hi(Js);return t=>e.get(t)},"createAccountApiFetcher");function $n(s){return Ft.loadConfig(s)}c($n,"readProjectConfig");class _l{static{c(this,"RequestLogger")}constructor(e=Ec){this.axiosInstance=e}interceptorsConfigured=!1;setup(){if(this.interceptorsConfigured)return;const e=c(t=>(this.logError(t),Promise.reject(t)),"errorHandler");this.axiosInstance.interceptors.request.use(t=>{t.metadata={startTime:Date.now()};const{method:n,url:r}=this.getRequestDetails(t);return b.debug(`[Request]: ${n} ${r}`),t},e),this.axiosInstance.interceptors.response.use(t=>{const{method:n,url:r}=this.getRequestDetails(t.config),i=this.getDuration(t.config),{status:o,statusText:a}=t;return b.debug(`[Response]: ${n} ${r} - ${o} ${a} (${i}ms)`),t},e),this.interceptorsConfigured=!0}getRequestDetails(e){const t=e?.method?.toUpperCase()??"UNKNOWN";if(!e?.url)return{method:t,url:"unknown"};if(e.url.startsWith("http"))return{method:t,url:e.url};const r=`${e.baseURL??""}/${e.url}`.replace(/\/+/g,"/").replace(/:\//,"://");return{method:t,url:r}}getDuration(e){return Date.now()-(e?.metadata?.startTime??Date.now())}logError(e){const{method:t,url:n}=this.getRequestDetails(e.config),r=this.getDuration(e.config);if(e.response){const{status:i,statusText:o}=e.response;b.error(`[Response]: ${t} ${n} - ${i} ${o} (${r}ms)`),e.response.data&&b.error(`[Response Data]: ${JSON.stringify(e.response.data,null,2)}`)}}}class Tl{static{c(this,"MembraneAPIManager")}client=null;currentConfig=null;tokenExpiry=0;requestTimes=[];maxRequestsPerSecond=80;windowSizeMs=1e3;semaphore=0;maxConcurrentRequests;maxRetries;retryDelay;requestTimeout;enableJitter;semaphoreQueue=[];rateLimitMutex=Promise.resolve();requestLogger=null;constructor(e={}){this.init(e)}init(e={}){this.windowSizeMs=e.windowSizeMs??1e3,this.maxRequestsPerSecond=e.maxRequestsPerSecond??80,this.maxConcurrentRequests=e.maxConcurrentRequests??Math.min(this.maxRequestsPerSecond/4,20),this.maxRetries=e.maxRetries??3,this.retryDelay=e.retryDelay??1e3,this.requestTimeout=e.requestTimeout??12e4,this.enableJitter=e.enableJitter!==!1,this.requestLogger=new _l,this.requestLogger.setup()}async withClient(e,t=process.cwd()){return this.withRetry(async()=>{const n=await this.getClient(t);await this.acquireSemaphore();try{return await this.waitIfNeeded(),this.recordRequest(),await this.withTimeout(e(n),this.requestTimeout)}finally{this.releaseSemaphore()}},"API request")}async generateAccessToken(e,t){return Fs.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=$n(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 hi({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,r=!this.isTokenValid()||this.tokenExpiry-Date.now()<3e5;return(!this.client||n||r)&&(this.client=await this.createClient(t)),this.client}clearClient(){this.client=null,this.currentConfig=null,this.tokenExpiry=0,this.requestTimes=[],this.semaphore=0,this.semaphoreQueue=[],this.rateLimitMutex=Promise.resolve()}getCurrentConfigInfo(){return this.currentConfig}async waitIfNeeded(){this.rateLimitMutex=this.rateLimitMutex.then(async()=>{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}}),await this.rateLimitMutex}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(){if(this.semaphore<this.maxConcurrentRequests){this.semaphore++;return}return new Promise(e=>{this.semaphoreQueue.push(e)})}releaseSemaphore(){if(this.semaphore--,this.semaphoreQueue.length>0){const e=this.semaphoreQueue.shift();this.semaphore++,e()}}async withRetry(e,t="operation"){let n;for(let r=0;r<=this.maxRetries;r++)try{return await e()}catch(i){if(n=i,!this.isRetryableError(i)||r===this.maxRetries)throw i;const o=new Date().toISOString(),a=r+2;b.debug(`[${o}] Retrying ${t} (attempt ${a}/${this.maxRetries+1})`);let l=this.retryDelay*Math.pow(2,r);if(this.enableJitter){const u=l*.25*(Math.random()*2-1);l=Math.max(0,l+u)}await new Promise(u=>setTimeout(u,l))}throw n||new Error("Unknown error occurred during retry attempts")}isRetryableError(e){if(!e)return!1;const t=(e.message||e.toString()||"").toLowerCase(),n=e.code;return n&&["econnrefused","enotfound","econnreset","etimedout","ehostunreach","enetunreach"].includes(n.toLowerCase())?!0:["econnrefused","connection refused","network error","timeout","socket hang up","request timeout","dns lookup failed"].some(o=>t.includes(o))}async withTimeout(e,t){let n;const r=new Promise((i,o)=>{n=setTimeout(()=>o(new Error(`Request timeout after ${t}ms`)),t)});try{const i=await Promise.race([e,r]);return n&&clearTimeout(n),i}catch(i){throw n&&clearTimeout(n),i}}}const W=new Tl;async function Vi(s){const{id:e}=await W.withClient(t=>t.get("org-workspace-id"),s);return e}c(Vi,"getWorkspaceId");class El extends Ws{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(X.StateChanged,{state:e}),await this.emitRemote({status:e})}setConflicts(e){this.emit(X.ConflictsChanged,{conflicts:e})}setConfig(e){this.emit(X.ConfigChanged,{config:e})}setStats(e){this.emit(X.StatsChanged,{stats:e})}addLog(e){this.emit(X.LogAdded,{log:e})}setMcpStatus(e){this.emit(X.McpStatusChanged,{status:e})}async setMcpServers(e){this.emit(X.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 W.withClient(e=>e.delete(`/local-clients/${this.clientId}`))}),this.clientId=void 0)}async registerWithRemoteServer(){if(this.clientId)return;const e=await this.withErrorHandling(async()=>await W.withClient(t=>t.post("/local-clients",{hostname:yi.hostname(),workingDirectory:process.cwd()})));e?.id?this.clientId=e.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 W.withClient(e=>e.post(`/local-clients/${this.clientId}/keep-alive`,{}))})}async emitRemote(e){this.clientId&&await this.withErrorHandling(async()=>{await W.withClient(t=>t.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 Ae=new El({heartbeatIntervalMs:15e3}),Gi=Ps(ft(process.cwd()),".logs");class Ol{static{c(this,"WorkspaceLogger")}_logs;workspaceNotifications;verboseMode=!1;constructor(){this._logs=[],this.workspaceNotifications=Ae}setVerboseMode(e){this.verboseMode=e}getVerboseMode(){return this.verboseMode}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),(t!=="debug"||this.verboseMode)&&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")}debug(e){this.log(e,"debug")}clear(){this._logs=[]}saveLogsToFile(e){if(this._logs.length===0)return null;try{const t=new Date().toISOString().replace(/[:.]/g,"_"),n=e?`-${e}`:"",r=`${t}${n}.txt`;Nc(Gi,{recursive:!0});const i=Ps(Gi,r),o=this._logs.map(a=>`[${a.timestamp}] ${a.type?.toUpperCase()||"INFO"}: ${a.message}`).join(`
|
|
3
|
-
`);return xc(i,o,"utf-8"),i}catch(t){return console.error("Failed to save logs:",t),null}}}const b=new Ol;class zi{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=[K.Integration,K.Connector],r=Object.keys(le),i=await Promise.all(r.filter(o=>!n.includes(o)).map(async o=>this.getElementsByType(o,t)));for(const o of i)e.push(...o)}catch(t){throw b.error(`Failed to get elements: ${t}`),t}return e}async putElement(e){let t=this.cache.get(e.id);return t&&!e.data.id&&t.data.id&&(e.data.id=t.data.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}),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){}}function Vs(s,e=!0){if(M.existsSync(s))try{const t=M.readFileSync(s,"utf8");return Dt.load(t)||void 0}catch(t){if(!e)return;if(t instanceof Error){const n=q.relative(process.cwd(),s);throw new Error(`Failed to parse YAML file "${n}": ${t.message}`)}throw t}}c(Vs,"readYaml");function Al(s,e,t){try{const n=Dt.dump(e,t);M.writeFileSync(s,n,"utf8")}catch(n){if(n instanceof Error){const r=q.relative(process.cwd(),s);throw new Error(`Failed to write YAML file "${r}": ${n.message}`)}throw n}}c(Al,"writeYaml");class Il extends zi{static{c(this,"LocalWorkspaceElementsRepository")}basePath;constructor(e){super(e),this.basePath=ft(process.cwd())}async getElementsByType(e,t){const n=[],r=q.join(this.basePath,De[e].apiPath),i=await this.readElementsInDir(r);n.push(...i);for(const o of t){const a=q.join(this.basePath,De[K.Integration].apiPath,o.key,De[e].apiPath),l=await this.readElementsInDir(a);n.push(...l)}return n.length>0&&b.debug(`[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=q.join(this.basePath,t.dirPath),r=q.join(this.basePath,t.path);return M.existsSync(n)||M.mkdirSync(n,{recursive:!0}),Al(r,e.data),b.debug(`[local] Written ${t.relativePath}`),t}async deleteElement(e){const t=q.join(this.basePath,e.path),n=q.join(this.basePath,e.dirPath);M.existsSync(t)&&M.rmSync(t,{force:!0}),this.pruneEmptyDir(n),b.debug(`[local] Deleted ${e.relativePath}`)}async getIntegrations(){const e=q.join(this.basePath,De[K.Integration].apiPath);return this.readElementsInDir(e)}async readElement(e){const t=Vs(e);if(t)return Z.fromPathAndData(e,t)}async readElementsInDir(e){const t=[];if(!M.existsSync(e))return t;const n=M.readdirSync(e);if(n.length===0)return t;const r=n.map(async o=>{const a=q.join(e,o,"spec.yaml");return this.readElement(a)});return(await Promise.all(r)).filter(o=>o!=null)}pruneEmptyDir(e){try{if(!e.startsWith(this.basePath)||e===this.basePath||!M.existsSync(e)||M.readdirSync(e).length>0)return;M.rmdirSync(e),this.pruneEmptyDir(q.dirname(e))}catch(t){console.warn(`Failed to prune empty directory ${e}:`,t)}}}class $l extends zi{static{c(this,"RemoteWorkspaceElementsRepository")}async getElementsByType(e,t){const n=await this.findAll(e);if(!Z.canBeIntegrationSpecific(e))return n;for(const r of t){const i=r.key,o=r.data.id,a=await this.findAll(e,o?{integrationId:o}:{integrationKey:i});n.push(...a)}return n.length>0&&b.debug(`[remote] Fetched ${n.length} ${e}${n.length!==1?"s":""}`),n}async getElement(e){const t=await W.withClient(n=>n[le[e.type].element](e.data.id).get(),process.cwd());return Z.fromData(e.type,t)}async createElement(e,t){const n=e.clean();this.transformElementForCreate(e,n,t);const r=await W.withClient(o=>o[le[e.type].elements].create(n),process.cwd()),i=Z.fromData(e.type,r);return b.debug(`[remote] Created ${i.id}`),i}async updateElement(e,t,n){if(!e.data.id)throw new Error("Element must have an id to update");const r=e.clean();this.transformElementForUpdate(e,r,n);const i=await W.withClient(a=>a[le[e.type].element](t.data.id).put(r),process.cwd()),o=Z.fromData(t.type,i);return b.debug(`[remote] Updated ${t.id}`),o}async deleteElement(e){if(!e.data.id)throw new Error("Element must have an id to delete");await W.withClient(t=>t[le[e.type].element](e.data.id).archive(),process.cwd()),b.debug(`[remote] Deleted ${e.id}`)}async getIntegrations(){const t=(await W.withClient(n=>n.integrations.findAll(),process.cwd())).map(n=>Z.fromData(K.Integration,n));return t.length>0&&b.debug(`[remote] Fetched ${t.length} integrations`),t}async getByInternalId(e,t){let n;try{n=await W.withClient(r=>r[le[t].element](e).get())}catch{return}return Z.fromData(t,n)}transformElementForCreate(e,t,n){if(e.integrationKey){const r=n.elements.find(i=>i.type===K.Integration&&i.key===e.integrationKey);if(r)t.integrationId=r.data.id;else throw new Error(`Dependency integration ${e.integrationKey} not found for ${e.id}`)}if(e.type===K.Integration){const r=n.connectorsMapping?.[t.connectorId];r&&(t.connectorId=r)}this.transformParentDependency(e,t,n)}transformElementForUpdate(e,t,n){if(e.type===K.Integration){const r=n.connectorsMapping?.[t.connectorId];r&&(t.connectorId=r)}if(e.integrationKey){t.integrationKey=e.integrationKey;const r=n.elements.find(i=>i.type===K.Integration&&i.key===e.integrationKey);if(r)t.integrationId=r.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 r=e.getParentKey();if(!r)return;const i=n.elements.find(o=>o.type===e.type&&o.key===e.key&&!o.hasParent());if(i)t[r]=i.data.id;else throw new Error(`Parent ${e.getParentKey()} not found for ${e.id}`)}async findAll(e,t={}){return(await W.withClient(r=>r[le[e].elements].findAll(t),process.cwd())).filter(r=>r.key).map(r=>Z.fromData(e,r))}}const Gs=Symbol.for("yaml.alias"),zs=Symbol.for("yaml.document"),je=Symbol.for("yaml.map"),Yi=Symbol.for("yaml.pair"),_e=Symbol.for("yaml.scalar"),ht=Symbol.for("yaml.seq"),pe=Symbol.for("yaml.node.type"),Fe=c(s=>!!s&&typeof s=="object"&&s[pe]===Gs,"isAlias"),Ge=c(s=>!!s&&typeof s=="object"&&s[pe]===zs,"isDocument"),pt=c(s=>!!s&&typeof s=="object"&&s[pe]===je,"isMap"),V=c(s=>!!s&&typeof s=="object"&&s[pe]===Yi,"isPair"),J=c(s=>!!s&&typeof s=="object"&&s[pe]===_e,"isScalar$1"),mt=c(s=>!!s&&typeof s=="object"&&s[pe]===ht,"isSeq");function z(s){if(s&&typeof s=="object")switch(s[pe]){case je:case ht:return!0}return!1}c(z,"isCollection$1");function Y(s){if(s&&typeof s=="object")switch(s[pe]){case Gs:case je:case _e:case ht:return!0}return!1}c(Y,"isNode");const Xi=c(s=>(J(s)||z(s))&&!!s.anchor,"hasAnchor"),ce=Symbol("break visit"),Qi=Symbol("skip children"),Te=Symbol("remove node");function ze(s,e){const t=Zi(e);Ge(s)?gt(null,s.contents,t,Object.freeze([s]))===Te&&(s.contents=null):gt(null,s,t,Object.freeze([]))}c(ze,"visit$1"),ze.BREAK=ce,ze.SKIP=Qi,ze.REMOVE=Te;function gt(s,e,t,n){const r=eo(s,e,t,n);if(Y(r)||V(r))return to(s,n,r),gt(s,r,t,n);if(typeof r!="symbol"){if(z(e)){n=Object.freeze(n.concat(e));for(let i=0;i<e.items.length;++i){const o=gt(i,e.items[i],t,n);if(typeof o=="number")i=o-1;else{if(o===ce)return ce;o===Te&&(e.items.splice(i,1),i-=1)}}}else if(V(e)){n=Object.freeze(n.concat(e));const i=gt("key",e.key,t,n);if(i===ce)return ce;i===Te&&(e.key=null);const o=gt("value",e.value,t,n);if(o===ce)return ce;o===Te&&(e.value=null)}}return r}c(gt,"visit_");async function Nn(s,e){const t=Zi(e);Ge(s)?await yt(null,s.contents,t,Object.freeze([s]))===Te&&(s.contents=null):await yt(null,s,t,Object.freeze([]))}c(Nn,"visitAsync"),Nn.BREAK=ce,Nn.SKIP=Qi,Nn.REMOVE=Te;async function yt(s,e,t,n){const r=await eo(s,e,t,n);if(Y(r)||V(r))return to(s,n,r),yt(s,r,t,n);if(typeof r!="symbol"){if(z(e)){n=Object.freeze(n.concat(e));for(let i=0;i<e.items.length;++i){const o=await yt(i,e.items[i],t,n);if(typeof o=="number")i=o-1;else{if(o===ce)return ce;o===Te&&(e.items.splice(i,1),i-=1)}}}else if(V(e)){n=Object.freeze(n.concat(e));const i=await yt("key",e.key,t,n);if(i===ce)return ce;i===Te&&(e.key=null);const o=await yt("value",e.value,t,n);if(o===ce)return ce;o===Te&&(e.value=null)}}return r}c(yt,"visitAsync_");function Zi(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(Zi,"initVisitor");function eo(s,e,t,n){if(typeof t=="function")return t(s,e,n);if(pt(e))return t.Map?.(s,e,n);if(mt(e))return t.Seq?.(s,e,n);if(V(e))return t.Pair?.(s,e,n);if(J(e))return t.Scalar?.(s,e,n);if(Fe(e))return t.Alias?.(s,e,n)}c(eo,"callVisitor");function to(s,e,t){const n=e[e.length-1];if(z(n))n.items[s]=t;else if(V(n))s==="key"?n.key=t:n.value=t;else if(Ge(n))n.contents=t;else{const r=Fe(n)?"alias":"scalar";throw new Error(`Cannot replace node with ${r} parent`)}}c(to,"replaceNode");const Nl={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},xl=c(s=>s.replace(/[!,[\]{}]/g,e=>Nl[e]),"escapeTagName");class oe{static{c(this,"Directives")}constructor(e,t){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},oe.defaultYaml,e),this.tags=Object.assign({},oe.defaultTags,t)}clone(){const e=new oe(this.yaml,this.tags);return e.docStart=this.docStart,e}atDocument(){const e=new oe(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:oe.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},oe.defaultTags);break}return e}add(e,t){this.atNextDocument&&(this.yaml={explicit:oe.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},oe.defaultTags),this.atNextDocument=!1);const n=e.trim().split(/[ \t]+/),r=n.shift();switch(r){case"%TAG":{if(n.length!==2&&(t(0,"%TAG directive should contain exactly two parts"),n.length<2))return!1;const[i,o]=n;return this.tags[i]=o,!0}case"%YAML":{if(this.yaml.explicit=!0,n.length!==1)return t(0,"%YAML directive should contain exactly one part"),!1;const[i]=n;if(i==="1.1"||i==="1.2")return this.yaml.version=i,!0;{const o=/^\d+\.\d+$/.test(i);return t(6,`Unsupported YAML version ${i}`,o),!1}}default:return t(0,`Unknown directive ${r}`,!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,r]=e.match(/^(.*!)([^!]*)$/s);r||t(`The ${e} tag has no suffix`);const i=this.tags[n];if(i)try{return i+decodeURIComponent(r)}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+xl(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 r;if(e&&n.length>0&&Y(e.contents)){const i={};ze(e.contents,(o,a)=>{Y(a)&&a.tag&&(i[a.tag]=!0)}),r=Object.keys(i)}else r=[];for(const[i,o]of n)i==="!!"&&o==="tag:yaml.org,2002:"||(!e||r.some(a=>a.startsWith(o)))&&t.push(`%TAG ${i} ${o}`);return t.join(`
|
|
2
|
+
var yc=Object.defineProperty;var c=(s,e)=>yc(s,"name",{value:e,configurable:!0});import{jsx as g,jsxs as O,Fragment as Rs}from"react/jsx-runtime";import*as K from"node:path";import{join as Ps,resolve as wc,dirname as bc}from"node:path";import{useInput as st,Box as v,Text as C,Newline as Sc,render as wn}from"ink";import vc from"minimist";import{SWRConfig as Cc}from"swr";import rt,{createContext as ui,useState as H,useEffect as Ve,useContext as di,useMemo as kc,useRef as _c}from"react";import fi from"swr/immutable";import{MembraneConfigLoader as Tc,WorkspaceElementType as D,WorkspaceElementSpecs as De,MembraneAxiosInstance as Ec,MembraneClient as hi,WorkspaceSyncEventType as Oc,ConnectorFileUpdateType as Ms,setValueAtLocator as Ls,extractMembraneErrorData as ke,getDataCollectionCreateFields as Ds,excludeWriteOnlyFieldsFromSchema as pi,valueToSchema as bn,getRequiredFieldsFromSchema as Ac,getValueAtLocator as Ic,walkSchema as mi,makeDataLocationPath as gi,getDataCollectionUpdateFields as js}from"@membranehq/sdk";import $c from"lodash/isEqual.js";import*as M from"node:fs";import{mkdirSync as Nc,writeFileSync as xc,readFileSync as Rc}from"node:fs";import yi from"os";import{EventEmitter as Pc}from"events";import B from"path";import Mc from"conf";import Fs from"jsonwebtoken";import Dt from"js-yaml";import*as Lc from"node:crypto";import{createHash as Dc}from"node:crypto";import jc from"chokidar";import{EventSource as Fc}from"eventsource";import F from"fs";import qc from"archiver";import Kc from"form-data";import Bc from"unzipper";import*as Uc from"node:os";import{exec as Wc}from"node:child_process";import{Spinner as Jc,TextInput as Hc,Select as Vc}from"@inkjs/ui";import Sn from"ink-spinner";import Gc from"ink-text-input";import{fileURLToPath as zc}from"node:url";import _ from"chalk";import{Command as Yc}from"commander";import wi from"lodash/camelCase.js";import bi from"lodash/upperFirst.js";import Xc from"code-block-writer";import qs from"axios";import{FastMCP as Qc}from"fastmcp";import{z as U}from"zod";import Ks from"lodash/merge.js";import{faker as jt}from"@faker-js/faker";import Zc from"lodash/template.js";import el from"lodash/templateSettings.js";class Rt{static{c(this,"ConfigLoader")}static instance=null;sdkLoader;constructor(){this.sdkLoader=new Tc}static getInstance(){return Rt.instance||(Rt.instance=new Rt),Rt.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 Ft=Rt.getInstance();var q={},vn={},Si;function vi(){if(Si)return vn;Si=1,Object.defineProperty(vn,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/[^A-Za-z0-9]+/g,"$").replace(/([a-z])([A-Z])/g,function(t,n,r){return n+"$"+r}).toLowerCase().replace(/(\$)(\w)/g,function(t,n,r){return r.toUpperCase()}):""}return c(s,"toCamelCase"),vn.default=s,vn}c(vi,"requireJsCamelcase");var Cn={},Ci;function ki(){if(Ci)return Cn;Ci=1,Object.defineProperty(Cn,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/([a-z])([A-Z])/g,function(t,n,r){return n+"_"+r.toLowerCase()}).replace(/[^A-Za-z0-9]+|_+/g,"_").toLowerCase():""}return c(s,"toSnakeCase"),Cn.default=s,Cn}c(ki,"requireJsSnakecase");var kn={},_i;function Ti(){if(_i)return kn;_i=1,Object.defineProperty(kn,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"$").replace(/[^A-Za-z0-9]+/g,"$").replace(/([a-z])([A-Z])/g,function(t,n,r){return n+"$"+r}).toLowerCase().replace(/(\$)(\w?)/g,function(t,n,r){return r.toUpperCase()}):""}return c(s,"toPascalCase"),kn.default=s,kn}c(Ti,"requireJsPascalcase");var _n={},Ei;function tl(){if(Ei)return _n;Ei=1,Object.defineProperty(_n,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/([a-z])([A-Z])/g,function(t,n,r){return n+"_"+r.toLowerCase()}).replace(/[^A-Za-z0-9]+|_+/g,".").toLowerCase():""}return c(s,"toDotCase"),_n.default=s,_n}c(tl,"requireJsDotcase");var Tn={},Oi;function nl(){if(Oi)return Tn;Oi=1,Object.defineProperty(Tn,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/([a-z])([A-Z])/g,function(t,n,r){return n+"_"+r.toLowerCase()}).replace(/[^A-Za-z0-9]+|_+/g,"/").toLowerCase():""}return c(s,"toPathCase"),Tn.default=s,Tn}c(nl,"requireJsPathcase");var En={},Ai;function sl(){if(Ai)return En;Ai=1,Object.defineProperty(En,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/([a-z])([A-Z])/g,function(t,n,r){return n+"_"+r.toLowerCase()}).replace(/[^A-Za-z0-9]+|_+/g," ").toLowerCase():""}return c(s,"toTextCase"),En.default=s,En}c(sl,"requireJsTextcase");var On={},Ii;function rl(){if(Ii)return On;Ii=1,Object.defineProperty(On,"__esModule",{value:!0});function s(e){if(e===void 0&&(e=""),!e)return"";var t=String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/([a-z])([A-Z])/g,function(n,r,i){return r+"_"+i.toLowerCase()}).replace(/[^A-Za-z0-9]+|_+/g," ").toLowerCase();return t.charAt(0).toUpperCase()+t.slice(1)}return c(s,"toSentenceCase"),On.default=s,On}c(rl,"requireJsSentencecase");var An={},$i;function il(){if($i)return An;$i=1,Object.defineProperty(An,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/([a-z])([A-Z])/g,function(t,n,r){return n+"_"+r.toLowerCase()}).replace(/[^A-Za-z0-9]+|_+/g," ").toLowerCase().replace(/( ?)(\w+)( ?)/g,function(t,n,r,i){return n+r.charAt(0).toUpperCase()+r.slice(1)+i}):""}return c(s,"toHeaderCase"),An.default=s,An}c(il,"requireJsHeadercase");var In={},Ni;function xi(){if(Ni)return In;Ni=1,Object.defineProperty(In,"__esModule",{value:!0});function s(e){return e===void 0&&(e=""),e?String(e).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g,"").replace(/([a-z])([A-Z])/g,function(t,n,r){return n+"_"+r.toLowerCase()}).replace(/[^A-Za-z0-9]+|_+/g,"-").toLowerCase():""}return c(s,"toKebabCase"),In.default=s,In}c(xi,"requireJsKebabcase");var it={},Bs={},Ri;function ot(){return Ri||(Ri=1,function(s){Object.defineProperty(s,"__esModule",{value:!0}),s.belongToTypes=s.isValidObject=s.isArrayObject=s.validateOptions=s.DefaultOption=void 0,s.DefaultOption={recursive:!1,recursiveInArray:!1,keepTypesOnRecursion:[]},s.validateOptions=function(e){return e===void 0&&(e=s.DefaultOption),e.recursive==null?e=s.DefaultOption:e.recursiveInArray==null&&(e.recursiveInArray=!1),e},s.isArrayObject=function(e){return e!=null&&Array.isArray(e)},s.isValidObject=function(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)},s.belongToTypes=function(e,t){return(t||[]).some(function(n){return e instanceof n})}}(Bs)),Bs}c(ot,"requireUtils");var Pi;function ol(){if(Pi)return it;Pi=1;var s=it&&it.__spreadArrays||function(){for(var n=0,r=0,i=arguments.length;r<i;r++)n+=arguments[r].length;for(var o=Array(n),a=0,r=0;r<i;r++)for(var l=arguments[r],u=0,d=l.length;u<d;u++,a++)o[a]=l[u];return o};Object.defineProperty(it,"__esModule",{value:!0});var e=ot();function t(n,r){if(r===void 0&&(r=e.DefaultOption),!e.isValidObject(n))return null;r=e.validateOptions(r);var i={};return Object.keys(n).forEach(function(o){var a=n[o],l=o.toLowerCase();r.recursive&&(e.isValidObject(a)?e.belongToTypes(a,r.keepTypesOnRecursion)||(a=t(a,r)):r.recursiveInArray&&e.isArrayObject(a)&&(a=s(a).map(function(u){var d=u;if(e.isValidObject(u))e.belongToTypes(d,r.keepTypesOnRecursion)||(d=t(u,r));else if(e.isArrayObject(u)){var f=t({key:u},r);d=f.key}return d}))),i[l]=a}),i}return c(t,"lowerKeys"),it.default=t,it}c(ol,"requireLowercaseKeysObject");var at={},Mi;function al(){if(Mi)return at;Mi=1;var s=at&&at.__spreadArrays||function(){for(var n=0,r=0,i=arguments.length;r<i;r++)n+=arguments[r].length;for(var o=Array(n),a=0,r=0;r<i;r++)for(var l=arguments[r],u=0,d=l.length;u<d;u++,a++)o[a]=l[u];return o};Object.defineProperty(at,"__esModule",{value:!0});var e=ot();function t(n,r){if(r===void 0&&(r=e.DefaultOption),!e.isValidObject(n))return null;r=e.validateOptions(r);var i={};return Object.keys(n).forEach(function(o){var a=n[o],l=o.toUpperCase();r.recursive&&(e.isValidObject(a)?e.belongToTypes(a,r.keepTypesOnRecursion)||(a=t(a,r)):r.recursiveInArray&&e.isArrayObject(a)&&(a=s(a).map(function(u){var d=u;if(e.isValidObject(u))e.belongToTypes(d,r.keepTypesOnRecursion)||(d=t(u,r));else if(e.isArrayObject(u)){var f=t({key:u},r);d=f.key}return d}))),i[l]=a}),i}return c(t,"upperKeys"),at.default=t,at}c(al,"requireUppercaseKeysObject");var ct={},Li;function cl(){if(Li)return ct;Li=1;var s=ct&&ct.__spreadArrays||function(){for(var r=0,i=0,o=arguments.length;i<o;i++)r+=arguments[i].length;for(var a=Array(r),l=0,i=0;i<o;i++)for(var u=arguments[i],d=0,f=u.length;d<f;d++,l++)a[l]=u[d];return a};Object.defineProperty(ct,"__esModule",{value:!0});var e=ot(),t=vi();function n(r,i){if(i===void 0&&(i=e.DefaultOption),!e.isValidObject(r))return null;i=e.validateOptions(i);var o={};return Object.keys(r).forEach(function(a){var l=r[a],u=t.default(a);i.recursive&&(e.isValidObject(l)?e.belongToTypes(l,i.keepTypesOnRecursion)||(l=n(l,i)):i.recursiveInArray&&e.isArrayObject(l)&&(l=s(l).map(function(d){var f=d;if(e.isValidObject(d))e.belongToTypes(f,i.keepTypesOnRecursion)||(f=n(d,i));else if(e.isArrayObject(d)){var p=n({key:d},i);f=p.key}return f}))),o[u]=l}),o}return c(n,"camelKeys"),ct.default=n,ct}c(cl,"requireCamelcaseKeysObject");var lt={},Di;function ll(){if(Di)return lt;Di=1;var s=lt&<.__spreadArrays||function(){for(var r=0,i=0,o=arguments.length;i<o;i++)r+=arguments[i].length;for(var a=Array(r),l=0,i=0;i<o;i++)for(var u=arguments[i],d=0,f=u.length;d<f;d++,l++)a[l]=u[d];return a};Object.defineProperty(lt,"__esModule",{value:!0});var e=ot(),t=ki();function n(r,i){if(i===void 0&&(i=e.DefaultOption),!e.isValidObject(r))return null;i=e.validateOptions(i);var o={};return Object.keys(r).forEach(function(a){var l=r[a],u=t.default(a);i.recursive&&(e.isValidObject(l)?e.belongToTypes(l,i.keepTypesOnRecursion)||(l=n(l,i)):i.recursiveInArray&&e.isArrayObject(l)&&(l=s(l).map(function(d){var f=d;if(e.isValidObject(d))e.belongToTypes(f,i.keepTypesOnRecursion)||(f=n(d,i));else if(e.isArrayObject(d)){var p=n({key:d},i);f=p.key}return f}))),o[u]=l}),o}return c(n,"snakeKeys"),lt.default=n,lt}c(ll,"requireSnakecaseKeysObject");var ut={},ji;function ul(){if(ji)return ut;ji=1;var s=ut&&ut.__spreadArrays||function(){for(var r=0,i=0,o=arguments.length;i<o;i++)r+=arguments[i].length;for(var a=Array(r),l=0,i=0;i<o;i++)for(var u=arguments[i],d=0,f=u.length;d<f;d++,l++)a[l]=u[d];return a};Object.defineProperty(ut,"__esModule",{value:!0});var e=ot(),t=Ti();function n(r,i){if(i===void 0&&(i=e.DefaultOption),!e.isValidObject(r))return null;i=e.validateOptions(i);var o={};return Object.keys(r).forEach(function(a){var l=r[a],u=t.default(a);i.recursive&&(e.isValidObject(l)?e.belongToTypes(l,i.keepTypesOnRecursion)||(l=n(l,i)):i.recursiveInArray&&e.isArrayObject(l)&&(l=s(l).map(function(d){var f=d;if(e.isValidObject(d))e.belongToTypes(f,i.keepTypesOnRecursion)||(f=n(d,i));else if(e.isArrayObject(d)){var p=n({key:d},i);f=p.key}return f}))),o[u]=l}),o}return c(n,"pascalKeys"),ut.default=n,ut}c(ul,"requirePascalcaseKeysObject");var dt={},Fi;function dl(){if(Fi)return dt;Fi=1;var s=dt&&dt.__spreadArrays||function(){for(var r=0,i=0,o=arguments.length;i<o;i++)r+=arguments[i].length;for(var a=Array(r),l=0,i=0;i<o;i++)for(var u=arguments[i],d=0,f=u.length;d<f;d++,l++)a[l]=u[d];return a};Object.defineProperty(dt,"__esModule",{value:!0});var e=ot(),t=xi();function n(r,i){if(i===void 0&&(i=e.DefaultOption),!e.isValidObject(r))return null;i=e.validateOptions(i);var o={};return Object.keys(r).forEach(function(a){var l=r[a],u=t.default(a);i.recursive&&(e.isValidObject(l)?e.belongToTypes(l,i.keepTypesOnRecursion)||(l=n(l,i)):i.recursiveInArray&&e.isArrayObject(l)&&(l=s(l).map(function(d){var f=d;if(e.isValidObject(d))e.belongToTypes(f,i.keepTypesOnRecursion)||(f=n(d,i));else if(e.isArrayObject(d)){var p=n({key:d},i);f=p.key}return f}))),o[u]=l}),o}return c(n,"kebabKeys"),dt.default=n,dt}c(dl,"requireKebabcaseKeysObject");var qi;function fl(){if(qi)return q;qi=1,Object.defineProperty(q,"__esModule",{value:!0}),q.kebabKeys=q.pascalKeys=q.snakeKeys=q.camelKeys=q.upperKeys=q.lowerKeys=q.toLowerCase=q.toUpperCase=q.toKebabCase=q.toHeaderCase=q.toSentenceCase=q.toTextCase=q.toPathCase=q.toDotCase=q.toPascalCase=q.toSnakeCase=q.toCamelCase=void 0;var s=vi();q.toCamelCase=s.default;var e=ki();q.toSnakeCase=e.default;var t=Ti();q.toPascalCase=t.default;var n=tl();q.toDotCase=n.default;var r=nl();q.toPathCase=r.default;var i=sl();q.toTextCase=i.default;var o=rl();q.toSentenceCase=o.default;var a=il();q.toHeaderCase=a.default;var l=xi();q.toKebabCase=l.default;var u=ol();q.lowerKeys=u.default;var d=al();q.upperKeys=d.default;var f=cl();q.camelKeys=f.default;var p=ll();q.snakeKeys=p.default;var m=ul();q.pascalKeys=m.default;var y=dl();q.kebabKeys=y.default;var h=c(function(T){return String(T||"").toLowerCase()},"toLowerCase");q.toLowerCase=h;var w=c(function(T){return String(T||"").toUpperCase()},"toUpperCase");q.toUpperCase=w;var k={toCamelCase:s.default,toSnakeCase:e.default,toPascalCase:t.default,toDotCase:n.default,toPathCase:r.default,toTextCase:i.default,toSentenceCase:o.default,toHeaderCase:a.default,toKebabCase:l.default,toUpperCase:w,toLowerCase:h,lowerKeys:u.default,upperKeys:d.default,camelKeys:f.default,snakeKeys:p.default,pascalKeys:m.default,kebabKeys:y.default};return q.default=k,q}c(fl,"requireLib");var Us,Ki;function hl(){return Ki||(Ki=1,Us=fl()),Us}c(hl,"requireJsConvertCase");var pl=hl();const Oe={UPDATE:"update",DELETE:"delete",CREATE:"create"},ae={INCOMING:"incoming",OUTGOING:"outgoing"},le={[D.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")},[D.Connector]:{element:"connector",elements:"connectors",exportable:!1},[D.Action]:{element:"action",elements:"actions",integrationSpecific:!0,exportCleanup:c(s=>(delete s.integration,s),"exportCleanup")},[D.AppDataSchema]:{element:"appDataSchema",elements:"appDataSchemas"},[D.AppEventType]:{element:"appEventType",elements:"appEventTypes"},[D.DataLinkTable]:{element:"dataLinkTable",elements:"dataLinkTables"},[D.DataSource]:{element:"dataSource",elements:"dataSources",parentKey:"universalDataSourceId",integrationSpecific:!0},[D.FieldMapping]:{element:"fieldMapping",elements:"fieldMappings",integrationSpecific:!0,parentKey:"universalFieldMappingId",exportCleanup:c(s=>(delete s.dataSourceId,s),"exportCleanup")},[D.Flow]:{element:"flow",elements:"flows",integrationSpecific:!0,parentKey:"universalFlowId"},[D.Package]:{element:"package",elements:"packages",integrationSpecific:!0}};function ml(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(ml,"baseExportCleanup");const gl="membrane",yl=["**/node_modules/**","**/.git/**","**/.DS_Store","**/Thumbs.db","**/*.tmp","**/*.swp","**/*.swo","**/*.log","**/*.lock","**/.cache/**","**/.next/**","**/.vscode/**","**/.idea/**","**/.logs/**"];function ft(s){return K.join(s,gl)}c(ft,"getMembraneDir");const wl=["id","workspaceId","integrationId","createdAt","updatedAt","revision","archivedAt","baseUri","state","appliedToIntegrations","dependencies"],Bi=[D.Action,D.FieldMapping,D.Flow,D.DataSource,D.Package];class Z{static{c(this,"Element")}type;key;integrationKey;data;constructor(e,t,n,r){if(!r)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=r,this.integrationKey=n||Z.extractIntegrationKey(r)}get id(){return Z.makeId(this.type,this.key,this.integrationKey)}get dirPath(){const e=De[this.type].apiPath;if(this.integrationKey){const t=De[D.Integration].apiPath;return K.join(t,this.integrationKey,e,this.key)}return K.join(e,this.key)}get path(){return K.join(this.dirPath,"spec.yaml")}get relativePath(){return K.relative(ft(process.cwd()),this.path)}get absolutePath(){return K.resolve(K.join(ft(process.cwd()),this.path))}isEqual(e){if(this.id!==e.id)return!1;const t=this.clean(),n=e.clean();return $c(t,n)}hasParent(){const e=this.getParentKey();return!!e&&!!this.data?.[e]}clean(){const e={...this.data};return wl.forEach(t=>{delete e[t]}),Object.keys(e).forEach(t=>{t.match(/universal.*Revision/)&&delete e[t]}),e}getParentKey(){let e="parentId";return le?.[this.type]?.parentKey&&(e=le?.[this.type]?.parentKey),e}static new(e,t,n,r){return new Z(e,t,n,r)}static fromData(e,t){if(!t?.key)throw new Error(`Element missing key: ${JSON.stringify(t)}`);const n=this.extractIntegrationKey(t);return new Z(e,t.key,n,t)}static fromPathAndData(e,t){const n=Z.parsePath(e);if(!t)return;const r=t?.key||n?.key;return n?Z.new(n.type,r,n.integrationKey,t):void 0}static fromElement(e){return new Z(e.type,e.key,e.integrationKey,{...e.data})}static idFromPath(e){const t=Z.parsePath(e);if(t)return Z.makeId(t.type,t.key,t.integrationKey)}static makeId(e,t,n){return e===D.Integration?`${e}:${t}`:Z.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(De).map(l=>l.apiPath).join("|"),r=new RegExp(`^(?<elementType>${n})/(?<elementKey>[^/]+)/spec\\.ya?ml$`),i=t.match(r);if(i?.groups){const{elementType:l,elementKey:u}=i.groups,d=this.getElementTypeFromPath(l);if(d)return{type:d,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:d}=a.groups,f=this.getElementTypeFromPath(u);if(f)return{type:f,key:d,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(D).find(t=>De[t].apiPath===e)}static getRelativePath(e){return K.relative(ft(process.cwd()),e)}static isIntegrationSpecific(e){return Bi.includes(e)}static canBeIntegrationSpecific(e){return Bi.includes(e)}}const X={LogAdded:"logAdded",StateChanged:"stateChanged",StatsChanged:"statsChanged",ConflictsChanged:"conflictsChanged",McpStatusChanged:"mcpStatusChanged",McpServersChanged:"mcpServersChanged",ConfigChanged:"configChanged"};class Ws extends Pc{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 bl="membrane",Sl="membrane.config.yml",Js="https://api.integration.app";function Hs(){const s=process.cwd(),e=K.join(s,bl),t=K.join(s,Sl),n=e,r=K.join(n,"workspace.yaml");return{membraneDirPath:e,configPath:t,payloadDirPath:n,workspaceDataFilePath:r}}c(Hs,"getPaths");function Ui(){return Hs().membraneDirPath}c(Ui,"getBasePath");const vl={pat:{type:"string"},workspace:{type:"object"}},Wi=new Mc({schema:vl,configName:"config",cwd:B.join(yi.homedir(),".membrane")}),Cl=c(s=>{Wi.set("pat",s)},"setPat"),Ji=c(()=>Wi.get("pat"),"getPat");class Hi{static{c(this,"AccountApiClient")}constructor(e=Js){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=Ji();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 r=await fetch(`${this.apiBaseUrl}${e}`,{...t,headers:n});if(!r.ok){const o=await r.text();throw new Error(`API request failed: ${r.status} ${r.statusText} - ${o}`)}if(r.status===204)return{};const i=await r.text();return JSON.parse(i)}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 kl=c(s=>{const e=new Hi(Js);return t=>e.get(t)},"createAccountApiFetcher");function $n(s){return Ft.loadConfig(s)}c($n,"readProjectConfig");class _l{static{c(this,"RequestLogger")}constructor(e=Ec){this.axiosInstance=e}interceptorsConfigured=!1;setup(){if(this.interceptorsConfigured)return;const e=c(t=>(this.logError(t),Promise.reject(t)),"errorHandler");this.axiosInstance.interceptors.request.use(t=>{t.metadata={startTime:Date.now()};const{method:n,url:r}=this.getRequestDetails(t);return b.debug(`[Request]: ${n} ${r}`),t},e),this.axiosInstance.interceptors.response.use(t=>{const{method:n,url:r}=this.getRequestDetails(t.config),i=this.getDuration(t.config),{status:o,statusText:a}=t;return b.debug(`[Response]: ${n} ${r} - ${o} ${a} (${i}ms)`),t},e),this.interceptorsConfigured=!0}getRequestDetails(e){const t=e?.method?.toUpperCase()??"UNKNOWN";if(!e?.url)return{method:t,url:"unknown"};if(e.url.startsWith("http"))return{method:t,url:e.url};const r=`${e.baseURL??""}/${e.url}`.replace(/\/+/g,"/").replace(/:\//,"://");return{method:t,url:r}}getDuration(e){return Date.now()-(e?.metadata?.startTime??Date.now())}logError(e){const{method:t,url:n}=this.getRequestDetails(e.config),r=this.getDuration(e.config);if(e.response){const{status:i,statusText:o}=e.response;b.error(`[Response]: ${t} ${n} - ${i} ${o} (${r}ms)`),e.response.data&&b.error(`[Response Data]: ${JSON.stringify(e.response.data,null,2)}`)}}}class Tl{static{c(this,"MembraneAPIManager")}client=null;currentConfig=null;tokenExpiry=0;requestTimes=[];maxRequestsPerSecond=80;windowSizeMs=1e3;semaphore=0;maxConcurrentRequests;maxRetries;retryDelay;requestTimeout;enableJitter;semaphoreQueue=[];rateLimitMutex=Promise.resolve();requestLogger=null;constructor(e={}){this.init(e)}init(e={}){this.windowSizeMs=e.windowSizeMs??1e3,this.maxRequestsPerSecond=e.maxRequestsPerSecond??80,this.maxConcurrentRequests=e.maxConcurrentRequests??Math.min(this.maxRequestsPerSecond/4,20),this.maxRetries=e.maxRetries??3,this.retryDelay=e.retryDelay??1e3,this.requestTimeout=e.requestTimeout??12e4,this.enableJitter=e.enableJitter!==!1,this.requestLogger=new _l,this.requestLogger.setup()}async withClient(e,t=process.cwd()){return this.withRetry(async()=>{const n=await this.getClient(t);await this.acquireSemaphore();try{return await this.waitIfNeeded(),this.recordRequest(),await this.withTimeout(e(n),this.requestTimeout)}finally{this.releaseSemaphore()}},"API request")}async generateAccessToken(e,t){return Fs.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=$n(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 hi({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,r=!this.isTokenValid()||this.tokenExpiry-Date.now()<3e5;return(!this.client||n||r)&&(this.client=await this.createClient(t)),this.client}clearClient(){this.client=null,this.currentConfig=null,this.tokenExpiry=0,this.requestTimes=[],this.semaphore=0,this.semaphoreQueue=[],this.rateLimitMutex=Promise.resolve()}getCurrentConfigInfo(){return this.currentConfig}async waitIfNeeded(){this.rateLimitMutex=this.rateLimitMutex.then(async()=>{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}}),await this.rateLimitMutex}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(){if(this.semaphore<this.maxConcurrentRequests){this.semaphore++;return}return new Promise(e=>{this.semaphoreQueue.push(e)})}releaseSemaphore(){if(this.semaphore--,this.semaphoreQueue.length>0){const e=this.semaphoreQueue.shift();this.semaphore++,e()}}async withRetry(e,t="operation"){let n;for(let r=0;r<=this.maxRetries;r++)try{return await e()}catch(i){if(n=i,!this.isRetryableError(i)||r===this.maxRetries)throw i;const o=new Date().toISOString(),a=r+2;b.debug(`[${o}] Retrying ${t} (attempt ${a}/${this.maxRetries+1})`);let l=this.retryDelay*Math.pow(2,r);if(this.enableJitter){const u=l*.25*(Math.random()*2-1);l=Math.max(0,l+u)}await new Promise(u=>setTimeout(u,l))}throw n||new Error("Unknown error occurred during retry attempts")}isRetryableError(e){if(!e)return!1;const t=(e.message||e.toString()||"").toLowerCase(),n=e.code;return n&&["econnrefused","enotfound","econnreset","etimedout","ehostunreach","enetunreach"].includes(n.toLowerCase())?!0:["econnrefused","connection refused","network error","timeout","socket hang up","request timeout","dns lookup failed"].some(o=>t.includes(o))}async withTimeout(e,t){let n;const r=new Promise((i,o)=>{n=setTimeout(()=>o(new Error(`Request timeout after ${t}ms`)),t)});try{const i=await Promise.race([e,r]);return n&&clearTimeout(n),i}catch(i){throw n&&clearTimeout(n),i}}}const W=new Tl;async function Vi(s){const{id:e}=await W.withClient(t=>t.get("org-workspace-id"),s);return e}c(Vi,"getWorkspaceId");class El extends Ws{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(X.StateChanged,{state:e}),await this.emitRemote({status:e})}setConflicts(e){this.emit(X.ConflictsChanged,{conflicts:e})}setConfig(e){this.emit(X.ConfigChanged,{config:e})}setStats(e){this.emit(X.StatsChanged,{stats:e})}addLog(e){this.emit(X.LogAdded,{log:e})}setMcpStatus(e){this.emit(X.McpStatusChanged,{status:e})}async setMcpServers(e){this.emit(X.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 W.withClient(e=>e.delete(`/local-clients/${this.clientId}`))}),this.clientId=void 0)}async registerWithRemoteServer(){if(this.clientId)return;const e=await this.withErrorHandling(async()=>await W.withClient(t=>t.post("/local-clients",{hostname:yi.hostname(),workingDirectory:process.cwd()})));e?.id?this.clientId=e.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 W.withClient(e=>e.post(`/local-clients/${this.clientId}/keep-alive`,{}))})}async emitRemote(e){this.clientId&&await this.withErrorHandling(async()=>{await W.withClient(t=>t.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 Ae=new El({heartbeatIntervalMs:15e3}),Gi=Ps(ft(process.cwd()),".logs");class Ol{static{c(this,"WorkspaceLogger")}_logs;workspaceNotifications;verboseMode=!1;constructor(){this._logs=[],this.workspaceNotifications=Ae}setVerboseMode(e){this.verboseMode=e}getVerboseMode(){return this.verboseMode}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),(t!=="debug"||this.verboseMode)&&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")}debug(e){this.log(e,"debug")}clear(){this._logs=[]}saveLogsToFile(e){if(this._logs.length===0)return null;try{const t=new Date().toISOString().replace(/[:.]/g,"_"),n=e?`-${e}`:"",r=`${t}${n}.txt`;Nc(Gi,{recursive:!0});const i=Ps(Gi,r),o=this._logs.map(a=>`[${a.timestamp}] ${a.type?.toUpperCase()||"INFO"}: ${a.message}`).join(`
|
|
3
|
+
`);return xc(i,o,"utf-8"),i}catch(t){return console.error("Failed to save logs:",t),null}}}const b=new Ol;class zi{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=[D.Integration,D.Connector],r=Object.keys(le),i=await Promise.all(r.filter(o=>!n.includes(o)).map(async o=>this.getElementsByType(o,t)));for(const o of i)e.push(...o)}catch(t){throw b.error(`Failed to get elements: ${t}`),t}return e}async putElement(e){let t=this.cache.get(e.id);return t&&!e.data.id&&t.data.id&&(e.data.id=t.data.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}),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){}}function Vs(s,e=!0){if(M.existsSync(s))try{const t=M.readFileSync(s,"utf8");return Dt.load(t)||void 0}catch(t){if(!e)return;if(t instanceof Error){const n=K.relative(process.cwd(),s);throw new Error(`Failed to parse YAML file "${n}": ${t.message}`)}throw t}}c(Vs,"readYaml");function Al(s,e,t){try{const n=Dt.dump(e,t);M.writeFileSync(s,n,"utf8")}catch(n){if(n instanceof Error){const r=K.relative(process.cwd(),s);throw new Error(`Failed to write YAML file "${r}": ${n.message}`)}throw n}}c(Al,"writeYaml");class Il extends zi{static{c(this,"LocalWorkspaceElementsRepository")}basePath;constructor(e){super(e),this.basePath=ft(process.cwd())}async getElementsByType(e,t){const n=[],r=K.join(this.basePath,De[e].apiPath),i=await this.readElementsInDir(r);n.push(...i);for(const o of t){const a=K.join(this.basePath,De[D.Integration].apiPath,o.key,De[e].apiPath),l=await this.readElementsInDir(a);n.push(...l)}return n.length>0&&b.debug(`[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=K.join(this.basePath,t.dirPath),r=K.join(this.basePath,t.path);return M.existsSync(n)||M.mkdirSync(n,{recursive:!0}),Al(r,e.data),b.debug(`[local] Written ${t.relativePath}`),t}async deleteElement(e){const t=K.join(this.basePath,e.path),n=K.join(this.basePath,e.dirPath);M.existsSync(t)&&M.rmSync(t,{force:!0}),this.pruneEmptyDir(n),b.debug(`[local] Deleted ${e.relativePath}`)}async getIntegrations(){const e=K.join(this.basePath,De[D.Integration].apiPath);return this.readElementsInDir(e)}async readElement(e){const t=Vs(e);if(t)return Z.fromPathAndData(e,t)}async readElementsInDir(e){const t=[];if(!M.existsSync(e))return t;const n=M.readdirSync(e);if(n.length===0)return t;const r=n.map(async o=>{const a=K.join(e,o,"spec.yaml");return this.readElement(a)});return(await Promise.all(r)).filter(o=>o!=null)}pruneEmptyDir(e){try{if(!e.startsWith(this.basePath)||e===this.basePath||!M.existsSync(e)||M.readdirSync(e).length>0)return;M.rmdirSync(e),this.pruneEmptyDir(K.dirname(e))}catch(t){console.warn(`Failed to prune empty directory ${e}:`,t)}}}class $l extends zi{static{c(this,"RemoteWorkspaceElementsRepository")}async getElementsByType(e,t){const n=await this.findAll(e);if(!Z.canBeIntegrationSpecific(e))return n;for(const r of t){const i=r.key,o=r.data.id,a=await this.findAll(e,o?{integrationId:o}:{integrationKey:i});n.push(...a)}return n.length>0&&b.debug(`[remote] Fetched ${n.length} ${e}${n.length!==1?"s":""}`),n}async getElement(e){const t=await W.withClient(n=>n[le[e.type].element](e.data.id).get(),process.cwd());return Z.fromData(e.type,t)}async createElement(e,t){const n=e.clean();this.transformElementForCreate(e,n,t);const r=await W.withClient(o=>o[le[e.type].elements].create(n),process.cwd()),i=Z.fromData(e.type,r);return b.debug(`[remote] Created ${i.id}`),i}async updateElement(e,t,n){if(!e.data.id)throw new Error("Element must have an id to update");const r=e.clean();this.transformElementForUpdate(e,r,n);const i=await W.withClient(a=>a[le[e.type].element](t.data.id).put(r),process.cwd()),o=Z.fromData(t.type,i);return b.debug(`[remote] Updated ${t.id}`),o}async deleteElement(e){if(!e.data.id)throw new Error("Element must have an id to delete");await W.withClient(t=>t[le[e.type].element](e.data.id).archive(),process.cwd()),b.debug(`[remote] Deleted ${e.id}`)}async getIntegrations(){const t=(await W.withClient(n=>n.integrations.findAll(),process.cwd())).map(n=>Z.fromData(D.Integration,n));return t.length>0&&b.debug(`[remote] Fetched ${t.length} integrations`),t}async getByInternalId(e,t){let n;try{n=await W.withClient(r=>r[le[t].element](e).get())}catch{return}return Z.fromData(t,n)}transformElementForCreate(e,t,n){if(e.integrationKey){const r=n.elements.find(i=>i.type===D.Integration&&i.key===e.integrationKey);if(r)t.integrationId=r.data.id;else throw new Error(`Dependency integration ${e.integrationKey} not found for ${e.id}`)}if(e.type===D.Integration){const r=n.connectorsMapping?.[t.connectorId];r&&(t.connectorId=r)}this.transformParentDependency(e,t,n)}transformElementForUpdate(e,t,n){if(e.type===D.Integration){const r=n.connectorsMapping?.[t.connectorId];r&&(t.connectorId=r)}if(e.integrationKey){t.integrationKey=e.integrationKey;const r=n.elements.find(i=>i.type===D.Integration&&i.key===e.integrationKey);if(r)t.integrationId=r.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 r=e.getParentKey();if(!r)return;const i=n.elements.find(o=>o.type===e.type&&o.key===e.key&&!o.hasParent());if(i)t[r]=i.data.id;else throw new Error(`Parent ${e.getParentKey()} not found for ${e.id}`)}async findAll(e,t={}){return(await W.withClient(r=>r[le[e].elements].findAll(t),process.cwd())).filter(r=>r.key).map(r=>Z.fromData(e,r))}}const Gs=Symbol.for("yaml.alias"),zs=Symbol.for("yaml.document"),je=Symbol.for("yaml.map"),Yi=Symbol.for("yaml.pair"),_e=Symbol.for("yaml.scalar"),ht=Symbol.for("yaml.seq"),pe=Symbol.for("yaml.node.type"),Fe=c(s=>!!s&&typeof s=="object"&&s[pe]===Gs,"isAlias"),Ge=c(s=>!!s&&typeof s=="object"&&s[pe]===zs,"isDocument"),pt=c(s=>!!s&&typeof s=="object"&&s[pe]===je,"isMap"),V=c(s=>!!s&&typeof s=="object"&&s[pe]===Yi,"isPair"),J=c(s=>!!s&&typeof s=="object"&&s[pe]===_e,"isScalar$1"),mt=c(s=>!!s&&typeof s=="object"&&s[pe]===ht,"isSeq");function z(s){if(s&&typeof s=="object")switch(s[pe]){case je:case ht:return!0}return!1}c(z,"isCollection$1");function Y(s){if(s&&typeof s=="object")switch(s[pe]){case Gs:case je:case _e:case ht:return!0}return!1}c(Y,"isNode");const Xi=c(s=>(J(s)||z(s))&&!!s.anchor,"hasAnchor"),ce=Symbol("break visit"),Qi=Symbol("skip children"),Te=Symbol("remove node");function ze(s,e){const t=Zi(e);Ge(s)?gt(null,s.contents,t,Object.freeze([s]))===Te&&(s.contents=null):gt(null,s,t,Object.freeze([]))}c(ze,"visit$1"),ze.BREAK=ce,ze.SKIP=Qi,ze.REMOVE=Te;function gt(s,e,t,n){const r=eo(s,e,t,n);if(Y(r)||V(r))return to(s,n,r),gt(s,r,t,n);if(typeof r!="symbol"){if(z(e)){n=Object.freeze(n.concat(e));for(let i=0;i<e.items.length;++i){const o=gt(i,e.items[i],t,n);if(typeof o=="number")i=o-1;else{if(o===ce)return ce;o===Te&&(e.items.splice(i,1),i-=1)}}}else if(V(e)){n=Object.freeze(n.concat(e));const i=gt("key",e.key,t,n);if(i===ce)return ce;i===Te&&(e.key=null);const o=gt("value",e.value,t,n);if(o===ce)return ce;o===Te&&(e.value=null)}}return r}c(gt,"visit_");async function Nn(s,e){const t=Zi(e);Ge(s)?await yt(null,s.contents,t,Object.freeze([s]))===Te&&(s.contents=null):await yt(null,s,t,Object.freeze([]))}c(Nn,"visitAsync"),Nn.BREAK=ce,Nn.SKIP=Qi,Nn.REMOVE=Te;async function yt(s,e,t,n){const r=await eo(s,e,t,n);if(Y(r)||V(r))return to(s,n,r),yt(s,r,t,n);if(typeof r!="symbol"){if(z(e)){n=Object.freeze(n.concat(e));for(let i=0;i<e.items.length;++i){const o=await yt(i,e.items[i],t,n);if(typeof o=="number")i=o-1;else{if(o===ce)return ce;o===Te&&(e.items.splice(i,1),i-=1)}}}else if(V(e)){n=Object.freeze(n.concat(e));const i=await yt("key",e.key,t,n);if(i===ce)return ce;i===Te&&(e.key=null);const o=await yt("value",e.value,t,n);if(o===ce)return ce;o===Te&&(e.value=null)}}return r}c(yt,"visitAsync_");function Zi(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(Zi,"initVisitor");function eo(s,e,t,n){if(typeof t=="function")return t(s,e,n);if(pt(e))return t.Map?.(s,e,n);if(mt(e))return t.Seq?.(s,e,n);if(V(e))return t.Pair?.(s,e,n);if(J(e))return t.Scalar?.(s,e,n);if(Fe(e))return t.Alias?.(s,e,n)}c(eo,"callVisitor");function to(s,e,t){const n=e[e.length-1];if(z(n))n.items[s]=t;else if(V(n))s==="key"?n.key=t:n.value=t;else if(Ge(n))n.contents=t;else{const r=Fe(n)?"alias":"scalar";throw new Error(`Cannot replace node with ${r} parent`)}}c(to,"replaceNode");const Nl={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},xl=c(s=>s.replace(/[!,[\]{}]/g,e=>Nl[e]),"escapeTagName");class oe{static{c(this,"Directives")}constructor(e,t){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},oe.defaultYaml,e),this.tags=Object.assign({},oe.defaultTags,t)}clone(){const e=new oe(this.yaml,this.tags);return e.docStart=this.docStart,e}atDocument(){const e=new oe(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:oe.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},oe.defaultTags);break}return e}add(e,t){this.atNextDocument&&(this.yaml={explicit:oe.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},oe.defaultTags),this.atNextDocument=!1);const n=e.trim().split(/[ \t]+/),r=n.shift();switch(r){case"%TAG":{if(n.length!==2&&(t(0,"%TAG directive should contain exactly two parts"),n.length<2))return!1;const[i,o]=n;return this.tags[i]=o,!0}case"%YAML":{if(this.yaml.explicit=!0,n.length!==1)return t(0,"%YAML directive should contain exactly one part"),!1;const[i]=n;if(i==="1.1"||i==="1.2")return this.yaml.version=i,!0;{const o=/^\d+\.\d+$/.test(i);return t(6,`Unsupported YAML version ${i}`,o),!1}}default:return t(0,`Unknown directive ${r}`,!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,r]=e.match(/^(.*!)([^!]*)$/s);r||t(`The ${e} tag has no suffix`);const i=this.tags[n];if(i)try{return i+decodeURIComponent(r)}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+xl(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 r;if(e&&n.length>0&&Y(e.contents)){const i={};ze(e.contents,(o,a)=>{Y(a)&&a.tag&&(i[a.tag]=!0)}),r=Object.keys(i)}else r=[];for(const[i,o]of n)i==="!!"&&o==="tag:yaml.org,2002:"||(!e||r.some(a=>a.startsWith(o)))&&t.push(`%TAG ${i} ${o}`);return t.join(`
|
|
4
4
|
`)}}oe.defaultYaml={explicit:!1,version:"1.2"},oe.defaultTags={"!!":"tag:yaml.org,2002:"};function no(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(no,"anchorIsValid");function so(s){const e=new Set;return ze(s,{Value(t,n){n.anchor&&e.add(n.anchor)}}),e}c(so,"anchorNames");function ro(s,e){for(let t=1;;++t){const n=`${s}${t}`;if(!e.has(n))return n}}c(ro,"findNewAnchor");function Rl(s,e){const t=[],n=new Map;let r=null;return{onAnchor:c(i=>{t.push(i),r??(r=so(s));const o=ro(e,r);return r.add(o),o},"onAnchor"),setAnchors:c(()=>{for(const i of t){const o=n.get(i);if(typeof o=="object"&&o.anchor&&(J(o.node)||z(o.node)))o.node.anchor=o.anchor;else{const a=new Error("Failed to resolve repeated object (this should not happen)");throw a.source=i,a}}},"setAnchors"),sourceObjects:n}}c(Rl,"createNodeAnchors");function wt(s,e,t,n){if(n&&typeof n=="object")if(Array.isArray(n))for(let r=0,i=n.length;r<i;++r){const o=n[r],a=wt(s,n,String(r),o);a===void 0?delete n[r]:a!==o&&(n[r]=a)}else if(n instanceof Map)for(const r of Array.from(n.keys())){const i=n.get(r),o=wt(s,n,r,i);o===void 0?n.delete(r):o!==i&&n.set(r,o)}else if(n instanceof Set)for(const r of Array.from(n)){const i=wt(s,n,r,r);i===void 0?n.delete(r):i!==r&&(n.delete(r),n.add(i))}else for(const[r,i]of Object.entries(n)){const o=wt(s,n,r,i);o===void 0?delete n[r]:o!==i&&(n[r]=o)}return s.call(e,t,n)}c(wt,"applyReviver");function me(s,e,t){if(Array.isArray(s))return s.map((n,r)=>me(n,String(r),t));if(s&&typeof s.toJSON=="function"){if(!t||!Xi(s))return s.toJSON(e,t);const n={aliasCount:0,count:1,res:void 0};t.anchors.set(s,n),t.onCreate=i=>{n.res=i,delete t.onCreate};const r=s.toJSON(e,t);return t.onCreate&&t.onCreate(r),r}return typeof s=="bigint"&&!t?.keep?Number(s):s}c(me,"toJS");class Ys{static{c(this,"NodeBase")}constructor(e){Object.defineProperty(this,pe,{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:r,reviver:i}={}){if(!Ge(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=me(this,"",o);if(typeof r=="function")for(const{count:l,res:u}of o.anchors.values())r(u,l);return typeof i=="function"?wt(i,{"":a},"",a):a}}class xn extends Ys{static{c(this,"Alias")}constructor(e){super(Gs),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=[],ze(e,{Node:c((i,o)=>{(Fe(o)||Xi(o))&&n.push(o)},"Node")}),t&&(t.aliasResolveCache=n));let r;for(const i of n){if(i===this)break;i.anchor===this.source&&(r=i)}return r}toJSON(e,t){if(!t)return{source:this.source};const{anchors:n,doc:r,maxAliasCount:i}=t,o=this.resolve(r,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||(me(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(i>=0&&(a.count+=1,a.aliasCount===0&&(a.aliasCount=Rn(r,o,n)),a.count*a.aliasCount>i)){const l="Excessive alias count indicates a resource exhaustion attack";throw new ReferenceError(l)}return a.res}toString(e,t,n){const r=`*${this.source}`;if(e){if(no(this.source),e.options.verifyAliasOrder&&!e.anchors.has(this.source)){const i=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new Error(i)}if(e.implicitKey)return`${r} `}return r}}function Rn(s,e,t){if(Fe(e)){const n=e.resolve(s),r=t&&n&&t.get(n);return r?r.count*r.aliasCount:0}else if(z(e)){let n=0;for(const r of e.items){const i=Rn(s,r,t);i>n&&(n=i)}return n}else if(V(e)){const n=Rn(s,e.key,t),r=Rn(s,e.value,t);return Math.max(n,r)}return 1}c(Rn,"getAliasCount");const io=c(s=>!s||typeof s!="function"&&typeof s!="object","isScalarValue");class R extends Ys{static{c(this,"Scalar")}constructor(e){super(_e),this.value=e}toJSON(e,t){return t?.keep?this.value:me(this.value,e,t)}toString(){return String(this.value)}}R.BLOCK_FOLDED="BLOCK_FOLDED",R.BLOCK_LITERAL="BLOCK_LITERAL",R.PLAIN="PLAIN",R.QUOTE_DOUBLE="QUOTE_DOUBLE",R.QUOTE_SINGLE="QUOTE_SINGLE";const Pl="tag:yaml.org,2002:";function Ml(s,e,t){if(e){const n=t.filter(i=>i.tag===e),r=n.find(i=>!i.format)??n[0];if(!r)throw new Error(`Tag ${e} not found`);return r}return t.find(n=>n.identify?.(s)&&!n.format)}c(Ml,"findTagObject");function qt(s,e,t){if(Ge(s)&&(s=s.contents),Y(s))return s;if(V(s)){const f=t.schema[je].createNode?.(t.schema,null,t);return f.items.push(s),f}(s instanceof String||s instanceof Number||s instanceof Boolean||typeof BigInt<"u"&&s instanceof BigInt)&&(s=s.valueOf());const{aliasDuplicateObjects:n,onAnchor:r,onTagObj:i,schema:o,sourceObjects:a}=t;let l;if(n&&s&&typeof s=="object"){if(l=a.get(s),l)return l.anchor??(l.anchor=r(s)),new xn(l.anchor);l={anchor:null,node:null},a.set(s,l)}e?.startsWith("!!")&&(e=Pl+e.slice(2));let u=Ml(s,e,o.tags);if(!u){if(s&&typeof s.toJSON=="function"&&(s=s.toJSON()),!s||typeof s!="object"){const f=new R(s);return l&&(l.node=f),f}u=s instanceof Map?o[je]:Symbol.iterator in Object(s)?o[ht]:o[je]}i&&(i(u),delete t.onTagObj);const d=u?.createNode?u.createNode(t.schema,s,t):typeof u?.nodeClass?.from=="function"?u.nodeClass.from(t.schema,s,t):new R(s);return e?d.tag=e:u.default||(d.tag=u.tag),l&&(l.node=d),d}c(qt,"createNode");function Pn(s,e,t){let n=t;for(let r=e.length-1;r>=0;--r){const i=e[r];if(typeof i=="number"&&Number.isInteger(i)&&i>=0){const o=[];o[i]=n,n=o}else n=new Map([[i,n]])}return qt(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(Pn,"collectionFromPath");const Kt=c(s=>s==null||typeof s=="object"&&!!s[Symbol.iterator]().next().done,"isEmptyPath");class oo extends Ys{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=>Y(n)||V(n)?n.clone(e):n),this.range&&(t.range=this.range.slice()),t}addIn(e,t){if(Kt(e))this.add(t);else{const[n,...r]=e,i=this.get(n,!0);if(z(i))i.addIn(r,t);else if(i===void 0&&this.schema)this.set(n,Pn(this.schema,r,t));else throw new Error(`Expected YAML collection at ${n}. Remaining path: ${r}`)}}deleteIn(e){const[t,...n]=e;if(n.length===0)return this.delete(t);const r=this.get(t,!0);if(z(r))return r.deleteIn(n);throw new Error(`Expected YAML collection at ${t}. Remaining path: ${n}`)}getIn(e,t){const[n,...r]=e,i=this.get(n,!0);return r.length===0?!t&&J(i)?i.value:i:z(i)?i.getIn(r,t):void 0}hasAllNullValues(e){return this.items.every(t=>{if(!V(t))return!1;const n=t.value;return n==null||e&&J(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 r=this.get(t,!0);return z(r)?r.hasIn(n):!1}setIn(e,t){const[n,...r]=e;if(r.length===0)this.set(n,t);else{const i=this.get(n,!0);if(z(i))i.setIn(r,t);else if(i===void 0&&this.schema)this.set(n,Pn(this.schema,r,t));else throw new Error(`Expected YAML collection at ${n}. Remaining path: ${r}`)}}}const Ll=c(s=>s.replace(/^(?!$)(?: $)?/gm,"#"),"stringifyComment");function Ie(s,e){return/^\n+$/.test(s)?s.substring(1):e?s.replace(/^(?! *$)/gm,e):s}c(Ie,"indentComment");const Ye=c((s,e,t)=>s.endsWith(`
|
|
5
5
|
`)?Ie(t,e):t.includes(`
|
|
6
6
|
`)?`
|
|
@@ -138,10 +138,10 @@ ${t.comment}`:t.comment}this.doc.range[2]=t.offset;break}default:this.errors.pus
|
|
|
138
138
|
`)+1;for(;t!==0;)this.onNewLine(this.offset+t),t=this.source.indexOf(`
|
|
139
139
|
`,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 r=e.items[e.items.length-2]?.value?.end;if(Array.isArray(r)){Array.prototype.push.apply(r,t.start),r.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,r=n&&(t.sep||t.explicitKey)&&this.type!=="seq-item-ind";let i=[];if(r&&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&&(i=t.sep.splice(o[1]))}switch(this.type){case"anchor":case"tag":r||t.value?(i.push(this.sourceToken),e.items.push({start:i}),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):r||t.value?(i.push(this.sourceToken),e.items.push({start:i,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:i,key:null,sep:[this.sourceToken]}]});else if(Xo(t.key)&&!Ke(t.sep,"newline")){const o=Tt(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 i.length>0?t.sep=t.sep.concat(i,this.sourceToken):t.sep.push(this.sourceToken);else if(Ke(t.start,"newline"))Object.assign(t,{key:null,sep:[this.sourceToken]});else{const o=Tt(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||r?e.items.push({start:i,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);r||t.value?(e.items.push({start:i,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:i});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 r=e.items[e.items.length-2]?.value?.end;if(Array.isArray(r)){Array.prototype.push.apply(r,t.start),r.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 r=this.flowScalar(this.type);!t||t.value?e.items.push({start:[],key:r,sep:[]}):t.sep?this.stack.push(r):Object.assign(t,{key:r,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 r=ns(n),i=Tt(r);Qo(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:i,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(`
|
|
140
140
|
`)+1;for(;t!==0;)this.onNewLine(this.offset+t),t=this.source.indexOf(`
|
|
141
|
-
`,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=ns(e),n=Tt(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=ns(e),n=Tt(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 Zo(s){const e=s.prettyErrors!==!1;return{lineCounter:s.lineCounter||e&&new zo||null,prettyErrors:e}}c(Zo,"parseOptions");function Lu(s,e={}){const{lineCounter:t,prettyErrors:n}=Zo(e),r=new vr(t?.addNewLine),i=new yr(e),o=Array.from(i.compose(r.parse(s)));if(n&&t)for(const a of o)a.errors.forEach(zn(s,t)),a.warnings.forEach(zn(s,t));return o.length>0?o:Object.assign([],{empty:!0},i.streamInfo())}c(Lu,"parseAllDocuments");function ea(s,e={}){const{lineCounter:t,prettyErrors:n}=Zo(e),r=new vr(t?.addNewLine),i=new yr(e);let o=null;for(const a of i.compose(r.parse(s),!0,s.length))if(!o)o=a;else if(o.options.logLevel!=="silent"){o.errors.push(new Qe(a.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}return n&&t&&(o.errors.forEach(zn(s,t)),o.warnings.forEach(zn(s,t))),o}c(ea,"parseDocument");function Du(s,e,t){let n;typeof e=="function"?n=e:t===void 0&&e&&typeof e=="object"&&(t=e);const r=ea(s,t);if(!r)return null;if(r.warnings.forEach(i=>uo(r.options.logLevel,i)),r.errors.length>0){if(r.options.logLevel!=="silent")throw r.errors[0];r.errors=[]}return r.toJS(Object.assign({reviver:n},t))}c(Du,"parse");function ju(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 r=Math.round(t);t=r<1?void 0:r>8?{indent:8}:{indent:r}}if(s===void 0){const{keepUndefined:r}=t??e??{};if(!r)return}return Ge(s)&&!n?s.toString(t):new Lt(s,n,t).toString(t)}c(ju,"stringify");var Fu=Object.freeze({__proto__:null,Alias:xn,CST:Ru,Composer:yr,Document:Lt,Lexer:Go,LineCounter:zo,Pair:se,Parser:vr,Scalar:R,Schema:As,YAMLError:dr,YAMLMap:ue,YAMLParseError:Qe,YAMLSeq:qe,YAMLWarning:Po,isAlias:Fe,isCollection:z,isDocument:Ge,isMap:pt,isNode:Y,isPair:V,isScalar:J,isSeq:mt,parse:Du,parseAllDocuments:Lu,parseDocument:ea,stringify:ju,visit:ze,visitAsync:Nn});const de={Updated:"updated",Deleted:"deleted",Stopped:"stopped"},qu={ignored:yl,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 Ku extends Ws{static{c(this,"LocalElementWatcher")}constructor(e){super(),this.options=e,this.membraneDir=ft(this.options.cwd),this.lockTimeoutMs=this.options.lockTimeoutMs??1e3}isWatching=!1;watcher;membraneDir;contentCache={};ignoredPaths=new Set;lockTimeoutMs;async start(){this.isWatching||(M.existsSync(this.membraneDir)||M.mkdirSync(this.membraneDir,{recursive:!0}),this.initializeContentCache(),this.watcher=jc.watch(this.membraneDir,qu),this.watcher.on("add",e=>this.handleFileSystemEvent(de.Updated,e)).on("change",e=>this.handleFileSystemEvent(de.Updated,e)).on("unlink",e=>this.handleFileSystemEvent(de.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.clearAllLocks(),this.emit(de.Stopped))}getCwd(){return this.options.cwd}async executeWithPathLock(e,t){const n=q.resolve(e);this.ignoredPaths.add(n);try{await t()}finally{setTimeout(()=>{this.ignoredPaths.delete(n)},this.lockTimeoutMs)}}isPathLocked(e){const t=q.resolve(e);if(this.ignoredPaths.has(t))return!0;for(const n of this.ignoredPaths)if(t.startsWith(n+q.sep))return!0;return!1}clearAllLocks(){this.ignoredPaths.clear()}handleFileSystemEvent(e,t){const n=q.relative(this.membraneDir,t);if(this.isPathLocked(t))return;if(e===de.Deleted){this.removeFromCache(n);const a={filePath:t,relativePath:n,data:void 0};b.info(`[local] ${e}: ${a.relativePath}`),this.emit(e,a);return}const r=this.readFileContent(t);if(!this.hasContentChanged(n,r))return;const o=this.processFileEvent(t,r);this.updateCache(n,r),o&&(b.info(`[local] ${e}: ${o.relativePath}`),this.emit(e,o))}readFileContent(e){return M.readFileSync(e,"utf8")}processFileEvent(e,t){const n=q.relative(this.membraneDir,e);let r;try{r=t?Fu.parse(t):void 0}catch{r=void 0}return{filePath:e,relativePath:n,data:r}}hasContentChanged(e,t){if(!t)return this.contentCache[e]!==void 0;const n=this.getContentHash(t);return this.contentCache[e]!==n}getContentHash(e){return Lc.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(){M.existsSync(this.membraneDir)&&this.scanDirectoryForCache(this.membraneDir)}scanDirectoryForCache(e){const t=M.readdirSync(e,{withFileTypes:!0});for(const n of t){const r=q.join(e,n.name);if(n.isDirectory())this.scanDirectoryForCache(r);else if(n.isFile())try{const i=M.readFileSync(r,"utf8"),o=q.relative(this.membraneDir,r);this.updateCache(o,i)}catch{}}}}var Cr=(s=>(s.Updated="updated",s.ConnectorFileUpdated="connector-file-updated",s.Connected="connected",s.Disconnected="disconnected",s.Error="error",s))(Cr||{});const Bu={debounceMs:2e3,reconnectIntervalMs:5e3,maxReconnectAttempts:5};class Uu extends Ws{static{c(this,"RemoteElementWatcher")}constructor(e=Bu){super(),this.config=e}eventSource;debounceTimeouts=new Map;reconnectAttempts=0;reconnectTimeout;isStarted=!1;async start(){this.isStarted||(this.isStarted=!0,await this.connect())}async stop(){this.isStarted&&(this.isStarted=!1,this.clearReconnectTimeout(),this.clearAllDebounceTimeouts(),this.eventSource&&(this.eventSource.close(),this.eventSource=void 0))}async connect(){try{b.debug("[remote-events] Connecting to server");const e=await W.getClient(process.cwd()),t=await e.getToken();if(!t)throw new Error("No auth token available");const n=`${e.apiUri}/sse/workspace?token=${encodeURIComponent(t)}`;b.debug("[remote-events] Subscribing to workspace events"),this.eventSource=new Fc(n),this.setupEventSourceHandlers()}catch(e){b.error(`[remote-events] Failed to subscribe to workspace events: ${e}`),this.emit("error",{error:e}),this.scheduleReconnect()}}setupEventSourceHandlers(){this.eventSource&&(this.eventSource.onopen=()=>{b.debug("[remote-events] Connected to server"),this.reconnectAttempts=0,this.emit("connected",{})},this.eventSource.onmessage=e=>{try{const t=JSON.parse(e.data);this.handleElementUpdate(t)}catch(t){b.error(`[remote-events] Failed to parse workspace event: ${t}`)}},this.eventSource.onerror=e=>{b.error(`[remote-events] Connection error: ${JSON.stringify(e,null,2)}`),this.emit("disconnected",{}),this.isStarted&&this.scheduleReconnect()})}handleElementUpdate(e){if(e.type!==Oc.ElementUpdate)return;const{elementId:t,elementType:n,data:r={}}=e;if(!(!t||!n)){if(n===K.Connector){const{filePath:i,eventType:o,newPath:a}=r;return b.debug(`[remote-watcher] Received connector event - elementId: ${t}, filePath: ${i}, eventType: ${o}`),this.scheduleConnectorFileUpdate(t,i,o,a)}return this.scheduleElementUpdate(t,n)}}scheduleElementUpdate(e,t){const n=this.debounceTimeouts.get(e);n&&clearTimeout(n);const r=setTimeout(()=>{this.debounceTimeouts.delete(e),this.emit("updated",{elementId:e,elementType:t})},this.config.debounceMs);this.debounceTimeouts.set(e,r)}scheduleConnectorFileUpdate(e,t,n,r){const i=JSON.stringify({connectorId:e,filePath:t}),o=this.debounceTimeouts.get(i);o&&clearTimeout(o);const a=setTimeout(()=>{this.debounceTimeouts.delete(i),this.emit("connector-file-updated",{connectorId:e,filePath:t,eventType:n,newPath:r})},this.config.debounceMs);this.debounceTimeouts.set(i,a)}scheduleReconnect(){if(!this.isStarted||this.reconnectAttempts>=this.config.maxReconnectAttempts){if(this.reconnectAttempts>=this.config.maxReconnectAttempts)throw new Error("Unable to re-connect to the server");return}this.reconnectAttempts++;const e=Math.min(this.config.reconnectIntervalMs*Math.pow(2,this.reconnectAttempts-1),3e4);b.debug(`[remote-watcher] Reconnecting in ${e}ms (attempt ${this.reconnectAttempts})`),this.reconnectTimeout=setTimeout(()=>{this.connect()},e)}clearReconnectTimeout(){this.reconnectTimeout&&(clearTimeout(this.reconnectTimeout),this.reconnectTimeout=void 0)}clearAllDebounceTimeouts(){this.debounceTimeouts.forEach(e=>clearTimeout(e)),this.debounceTimeouts.clear()}}class ta{static{c(this,"ElementsCache")}elements=new Map;typeIndex=new Map;internalIdIndex=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),e.data?.id&&this.internalIdIndex.set(e.data.id,t)}remove(e){const t=e.id,n=this.elements.delete(t);if(n){const r=this.typeIndex.get(e.type);r&&(r.delete(t),r.size===0&&this.typeIndex.delete(e.type)),e.data?.id&&this.internalIdIndex.delete(e.data.id)}return n}put(e){this.elements.has(e.id)&&this.remove(e),this.add(e)}get(e){return this.elements.get(e)}getByInternalId(e){const t=this.internalIdIndex.get(e);if(t)return this.elements.get(t)}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(),this.internalIdIndex.clear()}getAllIds(){return new Set(this.elements.keys())}}async function Wu(s="full"){const e={};b.info("[connectors] Getting remote workspace data");const t=await W.withClient(n=>n.integrations.findAll());e.integration=t.map(n=>kr("integration",n));for(const n of Object.keys(le)){const r=le[n];if(r.exportable===!1)continue;const i=[];b.info(`[connectors] Reading ${r.elements} from remote workspace`);const o=await W.withClient(a=>a[r.elements].findAll());if(i.push(...o.map(a=>kr(n,a))),r.integrationSpecific)for(const a of t){const l=await W.withClient(u=>u[r.elements].findAll({integrationId:a.id}));i.push(...l.map(u=>(u.integrationKey=a.key,kr(n,u))))}i.length>0&&s=="full"&&(console.table(i.map(a=>({key:a.key,integrationKey:a.integrationKey,universal:!a.integrationKey})).reduce((a,l)=>(a||(a={}),a[l.key]||(a[l.key]={}),l.universal&&(a[l.key].universal=!0),l.integrationKey&&(a[l.key].integration?a[l.key].integration+=` ${l.integrationKey}`:a[l.key].integration=l.integrationKey),a),{})),console.groupEnd()),e[n]=i}return b.success("[connectors] Remote workspace data retrieved successfully"),e}c(Wu,"getWorkspaceData");function kr(s,e){return e=ml(e),le[s].exportCleanup?le[s].exportCleanup(e):e}c(kr,"cleanUpForExport");const Et="connectors",Ne="development",_r={};async function Ju(){const s=await Wu("minified"),t=(await W.withClient(l=>l.get("org-workspace-id"))).id,n={};b.info("[connectors] Loading custom connectors");const r=await W.withClient(l=>l.get(`/connectors?workspaceId=${t}`));b.info("[connectors] Loading public connectors"),s.connector=r;const i=Be(),a=(j.existsSync(i)?j.readdirSync(i):[]).filter(l=>{if(l.startsWith("."))return!1;const u=B.join(i,l);try{return j.statSync(u).isDirectory()}catch{return!1}});for(const l of a){b.info(`[connectors] Loading connector from: ${l}`);const u=j.readdirSync(B.join(i,l)),d=await Tr(l);if(!d)continue;if("baseUri"in d&&delete d.baseUri,d.uuid&&s.connector?.find(p=>p.uuid==d.uuid))n[d.id]=s.connector.find(p=>p.uuid==d.uuid).id,b.info(`[connectors] Matched ${d.name} uuid: ${d.uuid}`);else if(!n[d.id]){let p=!1;try{const m=await Er({connectorId:d.id});m&&!m.workspaceId&&(p=!0)}catch{}if(!p){b.info(`[connectors] Creating custom connector ${d.name} (${d.key})`);const m=await W.withClient(y=>y.post("connectors",{...d,workspaceId:t}));n[d.id]=m.id}}const f=u.filter(p=>j.statSync(B.join(i,l,p)).isDirectory());for(const p of f)await Gu({connector:d,version:p,connectorId:n[d.id]})}return n}c(Ju,"pushConnectors");async function na({connectorId:s,connectorVersion:e,allConnectors:t,pulledConnectors:n,pulledConnectorVersions:r}){if(!s||r[s]?.has(e))return;const i=Ui(),o=await Er({connectorId:s});if(o.workspaceId||t){if(!o?.key){b.error(`[connectors] Connector ${s} has no key. Skipping..`);return}n.has(s)||(await zu({basePath:i,connector:o}),n.add(s)),r[s]||(r[s]=new Set),r[s].has(e)||(await Yu({connector:o,connectorVersion:e,basePath:i}),r[s].add(e))}}c(na,"pullRemoteConnector");function Be(){const s=Hs();return B.join(s.membraneDirPath,Et)}c(Be,"getConnectorsPath");async function Tr(s){const e=B.join(Be(),s,`${s}.yml`);return Vs(e,!1)}c(Tr,"readConnector");async function Hu(s,e){return b.info(`[connectors] Zipping ${s} into ${e}`),new Promise((t,n)=>{const r=j.createWriteStream(e),i=qc("zip",{zlib:{level:9}});r.on("close",()=>{b.success(`[connectors] Successfully created ${e}`),t()}),r.on("end",()=>{b.info("[connectors] Data has been drained")}),i.on("warning",a=>{a.code==="ENOENT"?console.warn(a):n(a)}),i.on("error",a=>{n(a)}),i.pipe(r);const o=j.readdirSync(s);for(const a of o){const l=B.join(s,a),u=j.statSync(l);u.isFile()?i.file(l,{name:a}):u.isDirectory()&&i.directory(l,a)}i.finalize()})}c(Hu,"createZipArchive");async function Vu(s,e){return b.info(`[connectors] Unzipping into ${e}`),new Promise((t,n)=>{const r=Bc.Parse();r.on("entry",i=>{const o=i.path;if(i.type==="Directory"){const l=B.join(e,o);j.mkdirSync(l,{recursive:!0}),i.autodrain()}else{const l=B.join(e,o),u=B.dirname(l);j.mkdirSync(u,{recursive:!0});const d=j.createWriteStream(l);i.pipe(d),d.on("finish",()=>{})}}),r.on("end",()=>{b.success(`[connectors] Successfully extracted to ${e}`),t()}),r.on("error",i=>{n(i)}),r.write(s),r.end()})}c(Vu,"extractZipArchive");async function Gu({connector:s,version:e,connectorId:t}){const n=B.join(Be(),xe(s),sa(e)),r=B.join(n,"src"),i=B.join(n,"src.zip"),o=j.existsSync(i);if(j.existsSync(r)&&(b.info(`[connectors] Archiving source code for ${s.name} version ${e}`),await Hu(r,i)),!j.existsSync(i)){b.warning(`[connectors] No source code found for ${s.name} version ${e}`);return}try{const a=new Kc;if(a.append("file",j.createReadStream(i),"file.zip"),b.info(`[connectors] Pushing connector version ${e} for ${s.name}`),e==Ne)b.info(`[connectors] Uploading connector ${t}`),await W.withClient(l=>l.post(`connectors/${t}/upload`,a,{headers:{...a.getHeaders()}}));else{if(a.append("version",e),a.append("changelog","Imported Version"),(await W.withClient(u=>u.get(`/connectors/${t}/versions`))).find(u=>u.version==e)){b.info(`[connectors] Version ${e} already published`);return}b.info(`[connectors] Publishing version ${e} of connector ${t}`),await W.withClient(u=>u.post(`connectors/${t}/publish-version`,a,{headers:{...a.getHeaders()}}))}b.success(`Successfully pushed connector version ${e} for ${s.name}`)}catch(a){b.error(`Error pushing connector version ${e} for ${s.name}: ${a}`)}finally{!o&&j.existsSync(i)&&(b.info(`[connectors] Cleaning up temporary zip file for ${s.name} version ${e}`),j.unlinkSync(i))}}c(Gu,"pushConnectorVersion");async function Er({connectorId:s}){if(s){if(_r[s])return _r[s];try{const e=await W.withClient(t=>t.get(`connectors/${s}`));return _r[s]=e,e}catch(e){return b.error(`[connectors] Failed to get connector ${s}: ${e}`),null}}}c(Er,"getConnector");async function zu({basePath:s,connector:e}){const t=xe(e),n=B.join(s,Et,t);j.mkdirSync(n,{recursive:!0});const r=B.join(n,`${xe(e)}.yml`);j.writeFileSync(r,Dt.dump(e)),b.info(`[connectors] Pulled connector ${e.name}`)}c(zu,"pullConnector");async function Yu({connector:s,connectorVersion:e,basePath:t}){const n=xe(s),r=sa(e),i=B.join(t,"connectors",n,r),o=await W.withClient(l=>l.get(`connectors/${s.id}/download`,{version:e},{responseType:"arraybuffer",headers:{Accept:"application/zip"},timeout:1e6}));j.mkdirSync(i,{recursive:!0});const a=B.join(i,"src.zip");if(j.writeFileSync(a,o),!e){const l=B.join(i,"src");j.mkdirSync(l,{recursive:!0}),await Vu(o,l)}b.info(`[connectors] Pulled connector version: ${s.name} (${r})`)}c(Yu,"pullConnectorVersion");function xe(s){return s.key}c(xe,"getConnectorDirName");function sa(s){return s??Ne}c(sa,"getConnectorVersionDirName");function Xu(s){const e=Ui(),t=xe(s);return B.join(e,Et,t)}c(Xu,"getConnectorDirPath");function Qu(s){return s.match(`${Et}/[^/]+/${Ne}/src/.*`)!==null}c(Qu,"isConnectorSourceFile");async function Zu(s){const e=s.match(`${Et}/([^/]+)/${Ne}/src/(.*)`);if(!e)return;const t=e[1],n=e[2],r=await Tr(t);if(!r){b.warning(`[connectors] Connector ${t} not found. Ignoring file change`);return}const i=r.id,o=j.readFileSync(s,"utf-8");await W.withClient(a=>a.put(`connectors/${i}/files/${n}`,o,{headers:{"Content-Type":"text/plain"}})),b.info(`[connectors] Pushed file ${n} for connector ${r.name}`)}c(Zu,"putConnectorFile");async function ed(s){const e=s.match(`${Et}/([^/]+)/${Ne}/src/(.*)`);if(!e)return;const t=e[1],n=e[2],r=await Tr(t);if(!r){b.warning(`[connectors] Connector ${t} not found. Ignoring file change`);return}const i=r.id;await W.withClient(o=>o.delete(`connectors/${i}/files/${n}`)),b.info(`[connectors] Deleted file ${n} for connector ${r.name}`)}c(ed,"deleteConnectorFile");async function td(s,e){try{const t=await W.withClient(o=>o.get(`connectors/${s}`));if(!t){b.warning(`[connectors] Connector ${s} not found`);return}const n=await W.withClient(o=>o.get(`connectors/${s}/files/${e}`)),r=xe(t),i=B.join(Be(),r,Ne,"src",e);j.mkdirSync(B.dirname(i),{recursive:!0}),n!=null?(j.writeFileSync(i,n),b.info(`[connectors] Pulled file ${e} for connector ${t.name}`)):j.existsSync(i)&&(j.unlinkSync(i),b.info(`[connectors] Deleted file ${e} for connector ${t.name}`))}catch(t){b.error(`[connectors] Failed to pull connector file ${e} for connector ${s}: ${t}`)}}c(td,"pullConnectorFile");async function nd(s,e){const t=await W.withClient(i=>i.get(`connectors/${s}`));if(!t){b.warning(`[connectors] Connector ${s} not found`);return}const n=xe(t),r=B.join(Be(),n,Ne,"src",e);j.existsSync(r)&&(j.unlinkSync(r),b.info(`[connectors] Deleted file ${e} for connector ${n}`))}c(nd,"deleteLocalConnectorFile");async function sd(s,e,t){if(t&&e!==t)try{const n=await W.withClient(l=>l.get(`connectors/${s}`));if(!n){b.warning(`[connectors] Connector ${s} not found`);return}const r=xe(n),i=B.join(Be(),r,Ne,"src"),o=B.join(i,e),a=B.join(i,t);j.existsSync(o)&&(j.mkdirSync(B.dirname(a),{recursive:!0}),j.renameSync(o,a),b.info(`[connectors] Renamed directory from ${e} to ${t} for connector ${r}`))}catch(n){b.error(`[connectors] Failed to rename directory ${e} to ${t} for connector ${s}: ${n}`)}}c(sd,"renameLocalConnectorDirectory");async function rd(s,e){try{const t=await W.withClient(i=>i.get(`connectors/${s}`));if(!t){b.warning(`[connectors] Connector ${s} not found`);return}const n=xe(t),r=B.join(Be(),n,Ne,"src",e);if(j.existsSync(r)){const i=B.resolve(Be());if(!B.resolve(r).startsWith(i))return;j.rmSync(r,{recursive:!0,force:!0}),b.info(`[connectors] Deleted directory ${e} for connector ${n}`)}}catch(t){b.error(`[connectors] Failed to delete directory ${e} for connector ${s}: ${t}`)}}c(rd,"deleteLocalConnectorDirectory");const ra=[K.DataSource,K.FieldMapping,K.Action,K.Flow];class yn{static{c(this,"ElementSyncService")}localWatcher=void 0;remoteWatcher=void 0;notifier;changes=[];localCache;remoteCache;localRepo;remoteRepo;pulledConnectors=new Set;pulledConnectorVersions={};constructor(){this.notifier=Ae,this.localCache=new ta,this.remoteCache=new ta,this.localRepo=new Il(this.localCache),this.remoteRepo=new $l(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),r=this.getCache(t);try{const i=await n.putElement(e);r.put(i)}catch(i){throw b.error(`Failed to update element ${e.id}: ${i}`),i}}async deleteElement(e,t){const n=this.getHandler(t),r=this.getCache(t);try{await n.deleteElement(e,{elements:n.cache.getAll(),connectorsMapping:n.connectorsMapping}),r.remove(e)}catch(i){throw b.error(`Failed to delete element ${e.id}: ${i}`),i}}async pullConnectors(e=!1){const t=this.remoteCache.getElementsByType(K.Integration).map(n=>n.data);for(const n of t){const r=n.connectorId,i=n.connectorVersion;r&&await na({connectorId:r,connectorVersion:i,allConnectors:e,pulledConnectors:this.pulledConnectors,pulledConnectorVersions:this.pulledConnectorVersions})}}async pushConnectors(){const e=await Ju();this.remoteRepo.setConnectorsMapping(e)}getHandler(e){return e===ae.INCOMING?this.localRepo:this.remoteRepo}getCache(e){return e===ae.INCOMING?this.localCache:this.remoteCache}async startWatching(){this.localWatcher=new Ku({cwd:process.cwd(),lockTimeoutMs:1e3}),this.localWatcher.on(de.Updated,e=>this.handleLocalEvent(e,de.Updated)),this.localWatcher.on(de.Deleted,e=>this.handleLocalEvent(e,de.Deleted)),await this.localWatcher.start(),b.success("[local] Tracking changes.."),this.remoteWatcher=new Uu,this.remoteWatcher.on(Cr.Updated,({elementId:e,elementType:t})=>this.handleRemoteElementEvent(e,t)),this.remoteWatcher.on(Cr.ConnectorFileUpdated,({connectorId:e,filePath:t,eventType:n,newPath:r})=>this.handleRemoteConnectorFileEvent(e,t,n,r)),await this.remoteWatcher.start(),b.success("[remote] Tracking changes..")}async stopWatching(){this.localWatcher&&(await this.localWatcher.stop(),this.localWatcher=void 0),this.remoteWatcher&&(await this.remoteWatcher.stop(),this.remoteWatcher=void 0)}async handleRemoteElementEvent(e,t){try{const n=await this.remoteRepo.getByInternalId(e,t),r=!!n?.data.archivedAt||!!n?.data.isDeactivated;if(!n||r){const o=n||this.remoteCache.getByInternalId(e);return o?(b.info(`[${this.getDirectionLabel(ae.INCOMING)}] Deleted: ${o.id}`),this.localWatcher?.executeWithPathLock(o.absolutePath,()=>this.deleteElement(o,ae.INCOMING))):void 0}if(b.info(`[${this.getDirectionLabel(ae.INCOMING)}] Updated: ${n.id}`),await this.localWatcher?.executeWithPathLock(n.absolutePath,async()=>this.updateElement(n,ae.INCOMING)),t===K.Integration){const o=n.data.connectorId,a=n.data.connectorVersion,l=await Er({connectorId:o});if(!l?.key)return;const u=Xu(l);await this.localWatcher?.executeWithPathLock(u,async()=>na({connectorId:o,connectorVersion:a,allConnectors:!1,pulledConnectors:this.pulledConnectors,pulledConnectorVersions:this.pulledConnectorVersions}))}}catch(n){b.error(`[sync] Error handling remote event: ${n}`)}}async handleRemoteConnectorFileEvent(e,t,n,r){try{switch(n){case Ms.ConnectorFileDeleted:await nd(e,t);break;case Ms.ConnectorDirectoryRenamed:await sd(e,t,r);break;case Ms.ConnectorDirectoryDeleted:await rd(e,t);break;default:await td(e,t);break}}catch(i){b.error(`[sync] Error handling remote connector file event: ${i}`)}}async handleLocalEvent(e,t){try{if(Qu(e.filePath))switch(t){case de.Updated:await Zu(e.filePath);break;case de.Deleted:await ed(e.filePath);break}else{let n=Z.fromPathAndData(e.filePath,e.data);if(!n){const r=Z.idFromPath(e.filePath);if(!r||(n=this.remoteCache.get(r),!n))return}switch(b.info(`[${this.getDirectionLabel(ae.OUTGOING)}] ${pl.toSentenceCase(t)}: ${n.id}`),t){case de.Updated:await this.updateElement(n,ae.OUTGOING);break;case de.Deleted:await this.deleteElement(n,ae.OUTGOING);break}}}catch(n){b.error(`[sync] Error handling local event: ${n}`)}}detectIncomingChanges(){this.clearChanges();const e=yn.getChanges(ae.INCOMING,this.remoteCache,this.localCache);return this.updateChanges(e),e}detectOutgoingChanges(){this.clearChanges();const e=yn.getChanges(ae.OUTGOING,this.localCache,this.remoteCache);return this.updateChanges(e),e}async resolveChanges(){if(!this.needsSync())return;b.info("[resolver] Resolving changes.."),b.info("[resolver] Resolving integration elements");const e=this.changes.filter(r=>r.element.type===K.Integration);await Promise.all(e.map(async r=>this.resolveChange(r))),e.length>0&&(await this.fetchElements(),this.changes=this.changes.length>0&&this.changes[0]?.direction===ae.INCOMING?this.detectIncomingChanges():this.detectOutgoingChanges(),this.changes=this.changes.filter(r=>r.element.type!==K.Integration)),b.info("[resolver] Resolving universal elements");const t=this.changes.filter(r=>!r.element.hasParent());for(const r of ra){const i=t.filter(o=>o.element.type===r);b.info(`[resolver] Resolving ${r} elements`),await Promise.all(i.map(async o=>this.resolveChange(o)))}b.info("[resolver] Resolving integration level elements");const n=this.changes.filter(r=>r.element.hasParent());for(const r of ra){const i=n.filter(o=>o.element.type===r);b.info(`[resolver] Resolving ${r} elements`),await Promise.all(i.map(async o=>this.resolveChange(o)))}b.success("[resolver] Resolved changes")}async resolveChange(e){switch(e.type){case Oe.DELETE:return this.deleteElement(e.element,e.direction);case Oe.CREATE:return this.updateElement(e.element,e.direction);case Oe.UPDATE:return this.updateElement(e.element,e.direction)}}static getChanges(e,t,n){const r=t.getAllIds(),i=n.getAllIds(),o=new Set([...r,...i]),a=[];for(const l of o){const u=t.get(l),d=n.get(l),f=yn.detectChangeForElement(u,d,e);f&&a.push(f)}return a}updateChanges(e){if(this.changes=e,this.needsForcedSync()){const t=e.filter(n=>n.isConflict);b.warning("[resolver] Conflicts detected"),this.notifier.setConflicts(t)}}clearChanges(){this.changes=[]}getDirectionLabel(e){switch(e){case ae.INCOMING:return"local\u2190remote";case ae.OUTGOING:return"local\u2192remote"}}static detectChangeForElement(e,t,n){return e&&!t?{type:Oe.CREATE,element:e,direction:n,isConflict:!1}:!e&&t?{type:Oe.DELETE,element:t,direction:n,isConflict:!0}:e&&t&&!e.isEqual(t)?{type:Oe.UPDATE,element:e,direction:n,isConflict:!1}:null}}const Ue=q.join(Uc.tmpdir(),"membrane-mcp-status"),ia=3e4;class id{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=ss(void 0,e),n=oa(e);t&&Ae.setMcpStatus(t),await Ae.setMcpServers(n)}catch{b.error("Failed to check MCP status")}}}function ss(s,e){try{const t=e||process.cwd();if(!s){const r=oa(t);return r.length===0?null:r[0]}const n=Ir(s,t);if(M.existsSync(n)){const r=M.statSync(n),i=new Date;if(i.getTime()-r.mtime.getTime()>ia)return zt(s,t),null;const a=M.readFileSync(n,"utf8"),l=JSON.parse(a);if(l.isRunning){const u=new Date(l.lastActivity).getTime();if(i.getTime()-u>ia)return zt(s,t),null}return l}}catch{s&&e&&zt(s,e)}return null}c(ss,"getMcpStatus");function oa(s){try{const e=s||process.cwd(),t=Ar(e);if(!M.existsSync(Ue))return[];const n=M.readdirSync(Ue),r=[];for(const i of n){const o=i.match(new RegExp(`^mcp-${t}-(\\d+)\\.json$`));if(o){const a=parseInt(o[1],10),l=ss(a,e);l&&r.push(l)}}return r.sort((i,o)=>new Date(o.startTime).getTime()-new Date(i.startTime).getTime())}catch{return[]}}c(oa,"getAllMcpStatusFiles");function Or(s){try{const t={...ss(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};M.existsSync(Ue)||M.mkdirSync(Ue,{recursive:!0});const n=Ir(s.processId,s.cwd);M.writeFileSync(n,JSON.stringify(t,null,2))}catch{}}c(Or,"updateMcpStatus");function zt(s,e){try{const t=e||process.cwd();if(s){const n=Ir(s,t);M.existsSync(n)&&M.unlinkSync(n)}else{const n=Ar(t);if(M.existsSync(Ue)){const r=M.readdirSync(Ue);for(const i of r)i.match(new RegExp(`^mcp-${n}-\\d+\\.json$`))&&M.unlinkSync(q.join(Ue,i))}}}catch{}}c(zt,"clearMcpStatus");function od(s,e){const t=ss(s,e);t&&Or({processId:s,cwd:e,totalRequests:t.totalRequests+1,lastRequestTime:new Date().toISOString(),lastActivity:new Date().toISOString()})}c(od,"trackToolExecution");function Ar(s){return Dc("md5").update(s).digest("hex").slice(0,8)}c(Ar,"getCwdHash");function Ir(s,e){const t=Ar(e);return q.join(Ue,`mcp-${t}-${s}.json`)}c(Ir,"getStatusFilePath");const Yt={Agent:"agent",Cli:"cli"},x={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 aa{static{c(this,"MembraneCLIService")}constructor(e,t,n=()=>process.exit(0)){this.mode=e,this.cwd=t,this.onShutdown=n,this.notifier=Ae,this.mcpStatusService=new id,this.syncService=new yn,this.setupProcessCleanup()}initialized=!1;notifier;mcpStatusService;syncService;isShuttingDown=!1;currentConfig=null;get config(){return this.currentConfig}getSyncedElements(){return this.syncService.localCache.getAll()}getSyncedElementsByType(e){return this.syncService.localCache.getElementsByType(e)}async fetchElements(){await this.syncService.fetchElements()}async pullWorkspace(e={}){try{if(b.setVerboseMode(!!e.verbose),await this.notifier.setState(x.PULLING),await this.syncService.fetchElements(),this.syncService.detectIncomingChanges(),this.syncService.needsForcedSync()&&!e.force)return this.notifier.setState(x.CONFLICTS);await this.syncService.pullConnectors(e.allConnectors),await this.syncWorkspaces(e)}catch(t){b.error(`Failed to pull workspace: ${t}`),await this.notifier.setState(x.ERROR),b.saveLogsToFile("error")}finally{return e.saveLogs&&b.saveLogsToFile(),e?.onComplete?.()}}async pushWorkspace(e={}){try{if(b.setVerboseMode(!!e.verbose),await this.notifier.setState(x.PUSHING),await this.syncService.fetchElements(),this.syncService.detectOutgoingChanges(),this.syncService.needsForcedSync()&&!e.force)return await this.notifier.setState(x.CONFLICTS);await this.syncService.pushConnectors(),await this.syncWorkspaces(e)}catch(t){b.error(`Failed to push workspace: ${t}`),await this.notifier.setState(x.ERROR),b.saveLogsToFile("error")}finally{return e.saveLogs&&b.saveLogsToFile(),e?.onComplete?.()}}async syncWorkspaces(e={}){try{e.verbose!==void 0&&b.setVerboseMode(!!e.verbose),await this.notifier.setState(x.RESOLVING),this.syncService.needsSync()&&await this.syncService.resolveChanges();const t=await this.syncService.getStats();this.notifier.setStats(t),await this.notifier.setState(x.SYNCED),e.watch&&(await this.notifier.setState(x.WATCHING),await this.syncService.startWatching())}catch(t){b.error(`Failed to sync local and remote workspaces: ${t}`),await this.notifier.setState(x.ERROR),b.saveLogsToFile("error")}}async init({force:e=!1}={}){if(!(this.initialized&&!e)){await this.notifier.setState(x.NOT_INITIALIZED);try{await this.loadConfig(),Ft.isCacheDefined()?(await this.initServices(),this.initialized=!0,await this.notifier.setState(x.INITIALIZED)):(this.initialized=!1,await this.notifier.setState(x.SETTING_UP))}catch(t){b.error(`Failed to initialize services: ${t}`),await this.notifier.setState(x.ERROR),b.saveLogsToFile("error"),this.onShutdown()}}}async loadConfig(){this.currentConfig=Ft.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 r=Ft.updateConfig(t);this.currentConfig=r,await this.init({force:!0})}async shutdown(){!this.initialized||this.isShuttingDown||(this.isShuttingDown=!0,this.mode===Yt.Agent&&(await this.notifier.cleanup(),await this.mcpStatusService.stop()),this.initialized=!1,this.onShutdown())}async initServices(){this.mode===Yt.Agent&&(await this.notifier.connectToRemote(),await this.mcpStatusService.start()),this.syncService.clear()}async stopServices(){this.mode===Yt.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 ca=ui(null);function ad({children:s,membraneCLIService:e}){const{data:t}=fi("/account"),[n,r]=H(x.NOT_INITIALIZED),[i,o]=H([]),[a,l]=H({}),[u,d]=H([]),[f,p]=H(null),y=t?.workspaces?.find(h=>h.workspaceKey===f?.workspaceKey)||null;return Ve(()=>{const h=c(({state:E})=>r(E),"handleStateChanged"),w=c(({stats:E})=>l(E),"handleStatsChanged"),k=c(({log:E})=>d($=>[...$,E]),"handleLogAdded"),T=c(({conflicts:E})=>o(E),"handleConflictsUpdated"),I=c(({config:E})=>p(E),"handleConfigChanged");return e.notifier.on(X.StateChanged,h),e.notifier.on(X.StatsChanged,w),e.notifier.on(X.LogAdded,k),e.notifier.on(X.ConflictsChanged,T),e.notifier.on(X.ConfigChanged,I),e.init(),()=>{e.notifier.off(X.StateChanged,h),e.notifier.off(X.StatsChanged,w),e.notifier.off(X.LogAdded,k),e.notifier.off(X.ConflictsChanged,T),e.notifier.off(X.ConfigChanged,I)}},[]),g(ca.Provider,{value:{state:n,stats:a,logs:u,currentWorkspace:y,conflicts:i,config:f,updateConfig:c(h=>e.updateConfig(h),"updateConfig"),resolveConflicts:c(h=>e.syncWorkspaces(h),"resolveConflicts"),pull:c(h=>e.pullWorkspace(h),"pull"),push:c(h=>e.pushWorkspace(h),"push"),exit:c(()=>e.shutdown(),"exit")},children:s})}c(ad,"MembraneCLIServiceProvider");function Se(){const s=di(ca);if(!s)throw new Error("useMembraneCLIService must be used within MembraneCLIServiceProvider");return s}c(Se,"useMembraneCLIService");const la=ui(process.cwd());function cd({cwd:s,children:e}){return g(la.Provider,{value:s,children:e})}c(cd,"CwdProvider");function ld(){return di(la)}c(ld,"useCwd");function rs({cwd:s,children:e,membraneCLIService:t}){const n=s||process.cwd();return g(cd,{cwd:n,children:g(Cc,{value:{fetcher:kl()},children:g(ad,{membraneCLIService:t,children:e})})})}c(rs,"Layout");const $r=[{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=q.join(process.cwd(),".mcp.json"),e={mcpServers:{membrane:{command:"membrane",args:["mcp"],env:{AGENT_NAME:"Claude Code"}}}};let t={};if(M.existsSync(s))try{t=JSON.parse(M.readFileSync(s,"utf8"))}catch{t={}}const n={...t,mcpServers:{...t.mcpServers,...e.mcpServers}};return M.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=q.join(process.cwd(),".cursor"),e=q.join(s,"mcp.json");M.existsSync(s)||M.mkdirSync(s);const t={mcpServers:{membrane:{command:"membrane",args:["mcp"],env:{AGENT_NAME:"Cursor"}}}};let n={};if(M.existsSync(e))try{n=JSON.parse(M.readFileSync(e,"utf8"))}catch{n={}}const r={...n,mcpServers:{...n.mcpServers,...t.mcpServers}};return M.writeFileSync(e,JSON.stringify(r,null,2)),`MCP server configuration added to ${e}`},"addConfig")}];function ud({onExit:s,onComplete:e}){const[t,n]=H(0),[r,i]=H(!1),[o,a]=H(null),[l,u]=H(""),[d,f]=H("");st((y,h)=>{if(l||d){(h.escape||y==="q"||h.return)&&e();return}if(r)h.return||y===" "?p(o):h.escape&&(i(!1),a(null));else if(h.escape)s();else if(h.upArrow||y==="k")n(Math.max(0,t-1));else if(h.downArrow||y==="j")n(Math.min($r.length-1,t+1));else if(h.return||y===" "){const w=$r[t];a(w),i(!0)}});const p=c(y=>{try{const h=y.addConfig();u(h)}catch(h){f(`Failed to write configuration: ${h.message||h}`)}},"addMcpConfiguration"),m=Math.min(80,process.stdout.columns||80);return l?O(v,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:m,children:[g(v,{marginTop:-1,marginBottom:1,children:O(C,{bold:!0,children:["\u{1F517} Connect Agent \u2014 ",g(C,{color:"green",children:"Success"})]})}),O(v,{flexDirection:"column",paddingLeft:2,children:[g(C,{color:"green",children:l}),g(v,{marginTop:1,children:g(C,{color:"grey",children:"The agent will now be able to use Membrane's integration capabilities."})})]}),g(v,{marginTop:1,paddingLeft:2,children:g(C,{color:"white",children:"[esc/q/enter: exit]"})})]}):d?O(v,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:m,children:[g(v,{marginTop:-1,marginBottom:1,children:O(C,{bold:!0,children:["\u{1F517} Connect Agent \u2014 ",g(C,{color:"red",children:"Error"})]})}),g(v,{flexDirection:"column",paddingLeft:2,children:g(C,{color:"red",children:d})}),g(v,{marginTop:1,children:g(C,{color:"grey",children:"[esc/q/enter: exit]"})})]}):r&&o?O(v,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:m,children:[g(v,{marginTop:-1,marginBottom:1,children:O(C,{bold:!0,children:["\u{1F517} Connect Agent \u2014 ",g(C,{color:"cyan",children:"Confirmation"})]})}),O(v,{flexDirection:"column",paddingLeft:2,children:[O(C,{children:["Connect ",g(C,{bold:!0,children:o.name})," to Membrane via MCP?"]}),g(v,{marginTop:1,children:g(C,{color:"grey",children:"This will add an MCP server configuration that allows the agent to use Membrane's integration capabilities."})}),g(v,{marginTop:1,children:g(C,{color:"yellow",bold:!0,children:o.actionDescription})}),g(v,{marginTop:2,marginBottom:1,children:O(C,{children:[g(C,{color:"white",bold:!0,children:"[Enter] Confirm"})," ",g(C,{color:"gray",children:"[Esc] Cancel"})]})})]})]}):O(v,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:m,children:[g(v,{marginTop:-1,marginBottom:1,children:O(C,{bold:!0,children:["\u{1F517} Connect Agent \u2014 ",g(C,{color:"cyan",children:"Select Agent"})]})}),O(v,{flexDirection:"column",paddingLeft:2,children:[g(C,{color:"grey",children:"Choose an agent to connect to Membrane via MCP:"}),g(v,{marginTop:1,children:g(C,{color:"grey",children:"This will add an MCP server configuration that allows the agent to use Membrane's integration capabilities."})}),g(v,{marginTop:1,flexDirection:"column",children:$r.map((y,h)=>O(v,{children:[O(C,{color:t===h?"cyan":"white",children:[t===h?"\u25B6 ":" ",y.name]}),O(C,{color:"grey",children:[" \u2014 ",y.description]})]},y.id))})]}),g(v,{marginTop:1,children:g(C,{color:"grey",children:"[\u2191\u2193: select] [enter: choose] [esc: exit]"})})]})}c(ud,"AddMcpServerScreen");function dd(){const[s,e]=H(null),[t,n]=H([]),[r,i]=H(null);return Ve(()=>{const o=c(({status:l})=>{e(l),i(null)},"handleMcpStatusChanged"),a=c(({servers:l})=>{n(l),i(null)},"handleMcpServersChanged");return Ae.on(X.McpStatusChanged,o),Ae.on(X.McpServersChanged,a),()=>{Ae.off(X.McpStatusChanged,o),Ae.off(X.McpServersChanged,a)}},[]),{mcpStatus:s,allMcpServers:t,error:r,isRunning:s?.isRunning||!1,toolsCount:s?.toolsCount||0,totalRequests:s?.totalRequests||0,lastActivity:s?.lastActivity,processId:s?.processId,serverCount:t.length}}c(dd,"useMcpStatus");function fd(){const{error:s,serverCount:e,allMcpServers:t}=dd(),n=Math.min(100,process.stdout.columns||100);return O(v,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:n,children:[g(v,{marginTop:-1,marginBottom:0,flexDirection:"column",children:O(C,{bold:!0,children:["\u{1F916} Connected AI Agents:"," ",s?g(C,{color:"red",children:"error reading status"}):e===0?g(C,{color:"yellow",children:"none"}):g(C,{color:"green",children:e})]})}),!s&&e===0&&g(v,{marginTop:1,children:O(C,{color:"grey",children:["Connect your AI agents to Membrane.",g(Sc,{}),"It will give them tools and context to build integrations."]})}),t.length>0&&g(v,{flexDirection:"column",paddingLeft:2,marginTop:1,children:t.map((r,i)=>g(v,{children:O(C,{color:"grey",children:["#",i+1," ",r.agentName,": ",r.totalRequests," calls"]})},r.processId))}),g(v,{marginTop:1,children:g(C,{color:"grey",children:"[a: connect an agent]"})})]})}c(fd,"Agent");const is=c(s=>{switch(s){case"error":return"red";case"success":return"green";case"warning":return"yellow";default:return}},"getLogColor");function ua(s,e){return e<3?s.slice(0,Math.max(0,e)):s.length<=e?s:`${s.slice(0,e-3)}...`}c(ua,"truncateText");function Nr({children:s}){const{state:e,logs:t}=Se();return!e||e===x.NOT_INITIALIZED?O(v,{gap:1,flexDirection:"row",children:[g(Jc,{type:"dots"}),g(C,{children:"Initializing..."})]}):e===x.SETTING_UP?g(v,{gap:1,flexDirection:"row",children:g(C,{children:"No workspace selected. Please run `membrane init` to select a workspace."})}):e===x.ERROR?g(v,{flexDirection:"column",children:t.slice().map((n,r)=>g(C,{color:is(n.type),children:n.message},n.timestamp+r))}):s}c(Nr,"EnsureInitialized");function da({onExit:s,showEscOption:e=!0}){const[t,n]=H(""),{data:r,error:i,isLoading:o}=fi("/account"),{updateConfig:a}=Se(),l=r?.workspaces,u=o;if(st((h,w)=>{w.escape&&s?.()}),u)return O(v,{children:[g(Sn,{}),g(C,{children:" Fetching workspaces..."})]});if(i)return O(v,{flexDirection:"column",children:[O(C,{color:"red",children:["Error: ",i.message]}),g(v,{marginTop:1,children:g(C,{color:"grey",children:"Press ESC to go back"})})]});const d=l?.filter(h=>h.name.toLowerCase().includes(t.toLowerCase()))??[],f=d.map(h=>({label:h.name,value:h.id})),p=f.length,m=l?.length??0;async function y(h){const w=d.find(I=>I.id===h);if(!w)return;const{key:k,secret:T}=w;!k||!T||(await a({workspaceKey:k,workspaceSecret:T}),s?.())}return c(y,"handleSelect"),O(v,{flexDirection:"column",borderStyle:"round",borderTop:!0,width:70,paddingX:1,children:[g(v,{marginTop:-1,children:g(C,{bold:!0,children:"\u{1F4C1} Select your workspace"})}),O(v,{marginTop:1,children:[g(C,{children:"Search: "}),g(Hc,{placeholder:"Enter a search query...",onChange:n})]}),m>5&&O(C,{children:["Showing ",p," of ",m," workspaces."]}),g(v,{marginTop:1,children:g(Vc,{options:f,onChange:c(h=>{h&&y(h)},"onChange")})}),e&&g(v,{marginTop:1,children:g(C,{color:"grey",children:"Press ESC to go back"})})]})}c(da,"SelectWorkspace");function hd({currentPat:s,onSubmit:e}){const[t,n]=H(""),[r,i]=H(!1),[o,a]=H(null);return O(v,{flexDirection:"column",borderStyle:"round",borderTop:!0,width:70,paddingX:1,children:[g(v,{marginTop:-1,marginBottom:1,children:g(C,{bold:!0,children:"\u{1F511} Enter your Personal Access Token"})}),g(C,{children:"Please provide your Personal Access Token. You can find it here:"}),g(v,{marginTop:1,marginBottom:1,children:g(C,{color:"yellow",children:"https://console.integration.app/w/0/manage-account/api-token"})}),s&&g(C,{dimColor:!0,children:"Press Enter to keep your current token or type a new one."}),g(Gc,{mask:"*",placeholder:`${s?"******":"Enter your token here..."}`,value:t,onChange:n,onSubmit:c(async u=>{a(null),i(!0);try{await e(u),n("")}catch{a("Invalid token. Please try again.")}finally{i(!1)}},"handleSubmit")}),r&&g(v,{marginTop:1,children:O(C,{children:[g(Sn,{type:"dots"})," Validating token..."]})}),o&&g(C,{color:"red",children:o})]})}c(hd,"PersonalAccessTokenInput");var Xt=(s=>(s[s.Authenticate=0]="Authenticate",s[s.ConnectWorkspace=1]="ConnectWorkspace",s))(Xt||{});const pd={0:"Authenticate in Membrane",1:"Connect a Membrane Workspace"},xr=[Xt.Authenticate,Xt.ConnectWorkspace];function fa({onComplete:s}){const{config:e}=Se(),[t,n]=H(!1),[r,i]=H(0),o=!!(e?.workspaceKey&&e?.workspaceSecret),a=Ji(),l=xr[r],u=r+1,d=xr.length,f=xr.map((y,h)=>{let w="pending";return h<r?w="done":h===r&&(w="current"),{id:y,label:pd[y],status:w}});async function p(y){const h=a&&y===""?a:y,w=new Hi;try{await w.request("/account",{headers:{Authorization:`Bearer ${h}`}}),Cl(h),i(k=>k+1)}catch(k){console.error(k)}}c(p,"handlePatSubmit");function m(){n(!0),s&&s()}return c(m,"handleWorkspaceSelected"),st((y,h)=>{o&&h.escape&&s&&s()}),t?g(v,{children:g(C,{children:"\u2705 Setup complete. You are ready to go!"})}):O(v,{flexDirection:"column",alignSelf:"flex-start",gap:1,children:[O(v,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:70,children:[g(v,{marginTop:-1,marginBottom:1,children:O(C,{bold:!0,children:["\u{1F6E0}\uFE0F Setup \u2014"," ",O(C,{color:"cyan",children:["Step ",u," of ",d]}),o&&g(C,{color:"grey",children:" [esc: go back]"})]})}),g(v,{flexDirection:"column",paddingLeft:2,children:f.map(y=>g(md,{status:y.status,label:y.label},y.id))})]}),l===Xt.Authenticate&&g(hd,{currentPat:a,onSubmit:p}),l===Xt.ConnectWorkspace&&g(da,{onExit:m,showEscOption:!1})]})}c(fa,"Setup");function md({status:s,label:e}){return O(v,{children:[O(v,{width:2,children:[s==="current"&&g(Sn,{type:"dots"}),s==="done"&&g(C,{children:"\u2705"})]}),g(C,{dimColor:s!=="current",children:e})]})}c(md,"StepDisplay");function Rr(){const{stats:s}=Se(),e=Object.entries(s).filter(([t,n])=>n>0);return e.length===0?null:O(v,{flexDirection:"column",children:[g(v,{children:g(v,{width:12,children:g(C,{color:"grey",children:"Elements:"})})}),g(v,{flexDirection:"column",marginLeft:1,children:e.map(([t,n])=>O(v,{children:[g(v,{width:20,children:O(C,{children:[t,":"]})}),g(C,{color:"green",children:n})]},t))})]})}c(Rr,"ElementStats");const Pr=5,gd=6;function yd(){const{logs:s}=Se(),[e,t]=H(0),n=Math.min(100,process.stdout.columns||100),r=Pr,i=Math.max(0,s.length-r-e),o=s.length-e,a=s.slice(i,o),l=n-gd,u=e<s.length-r,d=e>0;return st((f,p)=>{if(s.length!==0)if(p.upArrow){const m=Math.max(0,s.length-r);t(y=>Math.min(m,y+1))}else p.downArrow?t(m=>Math.max(0,m-1)):(f==="G"||f==="g")&&t(0)}),O(v,{flexDirection:"column",paddingTop:1,children:[O(C,{color:"grey",children:["Recent Activity (",i+1,"-",o," of ",s.length,"):",s.length>Pr&&g(C,{color:"grey",children:" [arrows: scroll] [g: end]"})]}),a.map((f,p)=>g(v,{marginLeft:1,children:g(C,{color:is(f.type),children:ua(f.message,l)})},f.timestamp+p)),s.length>Pr&&O(v,{marginLeft:1,flexDirection:"row",children:[u&&g(C,{color:"grey",children:"\u2191 "}),d&&g(C,{color:"grey",children:"\u2193 "})]})]})}c(yd,"Logs");const os=[{value:"sync",label:"Continue (overwrite/delete)",key:""},{value:"exit",label:"Cancel",key:""}];function wd(){const{state:s,resolveConflicts:e,exit:t}=Se(),[n,r]=H(0),[i,o]=H(!1),[a,l]=H(!1);return st((u,d)=>{if(!i){if(d.ctrl&&u.toLowerCase()==="r"){l(!a);return}d.upArrow?r(f=>f>0?f-1:os.length-1):d.downArrow?r(f=>f<os.length-1?f+1:0):u.toLowerCase()==="y"?r(0):u.toLowerCase()==="n"?r(1):(d.return||u===" ")&&(o(!0),os[n].value==="sync"?e({watch:!0}):t())}}),Ve(()=>{s!==x.CONFLICTS&&i&&o(!1)},[s,i]),O(v,{flexDirection:"column",paddingTop:1,children:[g(v,{children:g(v,{flexDirection:"row",gap:2,children:g(C,{bold:!0,color:"white",children:"Conflicts with remote"})})}),g(v,{children:g(C,{color:"grey",children:"The remote workspace has changes that aren't in your local workspace:"})}),g(v,{marginTop:1,marginLeft:2,children:g(Mr,{isExpanded:a})}),O(v,{marginTop:2,flexDirection:"row",gap:1,children:[g(C,{color:"white",bold:!0,children:"What would you like to do?"}),g(C,{color:"grey",children:"[up/down, enter]"})]}),g(v,{children:i?O(v,{flexDirection:"row",gap:1,children:[g(Sn,{type:"dots"}),g(C,{color:"blue",bold:!0,children:"Syncing with remote..."})]}):g(v,{flexDirection:"column",children:os.map((u,d)=>g(v,{flexDirection:"column",children:O(v,{flexDirection:"row",gap:1,children:[g(C,{color:n===d?"cyan":"grey",children:n===d?"\u25B6":" "}),g(C,{color:n===d?"cyan":"grey",bold:n===d,children:u.label})]})},u.value))})})]})}c(wd,"ResolveChangesUI");const bd={[Oe.UPDATE]:{incoming:{label:"Elements updated in remote",description:"(to be overwritten from remote)"},outgoing:{label:"Elements updated locally",description:"(to be pushed to remote)"}},[Oe.DELETE]:{incoming:{label:"Elements not existing in remote",description:"(to be deleted locally)"},outgoing:{label:"Elements deleted locally",description:"(to be deleted from remote)"}},[Oe.CREATE]:{incoming:{label:"Elements created in remote",description:"(to be created locally)"},outgoing:{label:"Elements created locally",description:"(to be created in remote)"}}};function Mr({isExpanded:s,showControls:e=!0}){const{conflicts:t}=Se(),n=5,r=kc(()=>{const i={};return t.forEach(o=>{const a=`${o.type}-${o.direction}`;i[a]||(i[a]=[]),i[a].push(o)}),i},[t]);return g(v,{flexDirection:"column",children:Object.entries(r).map(([i,o])=>{if(o.length===0)return null;const[a,l]=i.split("-"),u=bd[a][l];return O(v,{flexDirection:"column",children:[O(v,{flexDirection:"row",gap:1,children:[O(C,{color:"yellow",children:[u.label," (",o.length,")"]}),g(C,{color:"white",children:u.description})]}),(s?o:o.slice(0,n)).map(d=>g(v,{marginLeft:2,children:O(C,{color:"grey",children:["\u2022 ",d.element.id," (",d.element.relativePath,")"]})},d.element.id)),!s&&o.length>n&&g(v,{marginLeft:2,children:O(C,{color:"cyan",children:["... and ",o.length-n," more",e?" (press Ctrl+R to show all)":""]})}),s&&o.length>n&&e&&g(v,{marginLeft:2,children:g(C,{color:"cyan",children:"(press Ctrl+R to collapse)"})})]},i)})})}c(Mr,"Conflicts");function Sd(){const{config:s,state:e,logs:t,currentWorkspace:n,pull:r}=Se(),i=n?.name,o=i?ua(i,30):s?.workspaceKey,a=Math.min(100,process.stdout.columns||100);return Ve(()=>{r({watch:!0})},[]),O(v,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:a,children:[g(v,{marginTop:-1,marginBottom:1,children:O(v,{flexDirection:"row",gap:1,children:[g(C,{bold:!0,children:"\u{1F504} Workspace"}),O(C,{color:Cd(e),children:[" [",vd(e),"] "]})]})}),O(v,{children:[g(v,{width:12,children:g(C,{color:"grey",children:"Local:"})}),g(C,{color:"grey",children:process.cwd()})]}),O(v,{children:[g(v,{width:12,children:g(C,{color:"grey",children:"Remote:"})}),s?.workspaceKey?O(C,{color:"grey",children:[o," [o: open in console] [w: change]"]}):O(C,{children:[g(C,{color:"yellow",children:"not selected"})," [w: select]"]})]}),e===x.CONFLICTS?g(wd,{}):O(Rs,{children:[g(v,{paddingTop:1,children:g(Rr,{})}),t.length>0&&g(yd,{})]})]})}c(Sd,"Workspace");function vd(s){switch(s){case x.PULLING:return"pulling";case x.PUSHING:return"pushing";case x.CONFLICTS:return"conflicts";case x.SYNCED:return"synced";case x.ERROR:return"error";case x.WATCHING:return"tracking changes";case x.RESOLVING:return"resolving";case x.NOT_SYNCED:return"not synced";case x.INITIALIZED:return"initialized";case x.SETTING_UP:return"setup required";default:return"unknown"}}c(vd,"getStatusDisplay");function Cd(s){switch(s){case x.PULLING:return"yellow";case x.PUSHING:return"yellow";case x.CONFLICTS:return"red";case x.SYNCED:return"green";case x.ERROR:return"red";case x.WATCHING:return"green";case x.RESOLVING:return"yellow";case x.NOT_SYNCED:return"grey";case x.SETTING_UP:return"yellow";default:return"grey"}}c(Cd,"getStatusColor");const kd="https://console.integration.app/w";function _d(){const s=ld(),e=_c(!0),{exit:t,state:n}=Se(),[r,i]=H(null),o=r??(n===x.SETTING_UP?"setup":"main");st(l=>{o==="main"&&(l==="w"&&i("workspace-selection"),l==="a"&&i("add-mcp-server"),l==="o"&&n===x.INITIALIZED&&a(),l==="s"&&i("setup"))});async function a(){try{const l=await Vi(s),u=`${kd}/${l}`,d=process.platform==="darwin"?"open":process.platform==="win32"?"start":"xdg-open";Wc(`${d} "${u}"`)}catch(l){console.error("Failed to open workspace:",l),t()}}return c(a,"handleOpenWorkspace"),Ve(()=>(e.current=!0,()=>{e.current=!1}),[]),o==="workspace-selection"?g(da,{onExit:c(()=>i(null),"onExit")}):o==="add-mcp-server"?g(ud,{onExit:c(()=>i(null),"onExit"),onComplete:c(()=>i(null),"onComplete")}):o==="setup"?g(fa,{onComplete:c(()=>i(null),"onComplete")},Date.now()):g(Nr,{children:O(v,{flexDirection:"column",children:[g(v,{flexGrow:1,children:g(fd,{})}),g(Sd,{}),g(v,{paddingLeft:2,children:g(C,{color:"grey",children:"[s: (re-)setup]"})})]})})}c(_d,"Main");const Lr=vc(process.argv.slice(2)),ha=Lr.cwd?wc(Lr.cwd):process.cwd(),Td=new aa(Yt.Agent,ha);Lr.verbose&&b.setVerboseMode(!0);const Ed=c(()=>g(rs,{cwd:ha,membraneCLIService:Td,children:g(_d,{})}),"App");function Od(){wn(g(Ed,{}))}c(Od,"runAgent");function et(s){if(s.type){if(Array.isArray(s.type))return{anyOf:s.type.map(t=>et({...s,type:t}))};if(s.type==="array"){const t={type:"array",items:s.items?et(s.items):{type:"object"}};return s.title&&(t.title=s.title),s.description&&(t.description=s.description),s.minItems!==void 0&&(t.minItems=s.minItems),s.maxItems!==void 0&&(t.maxItems=s.maxItems),s.uniqueItems!==void 0&&(t.uniqueItems=s.uniqueItems),t}}const e={};if(s.type&&!Array.isArray(s.type)&&(e.type=s.type),s.title&&(e.title=s.title),s.description&&(e.description=s.description),s.format&&(e.format=s.format),s.enum&&(e.enum=s.enum),s.default!==void 0&&(e.default=s.default),s.minimum!==void 0&&(e.minimum=s.minimum),s.maximum!==void 0&&(e.maximum=s.maximum),s.minLength!==void 0&&(e.minLength=s.minLength),s.maxLength!==void 0&&(e.maxLength=s.maxLength),s.maxItems!==void 0&&(e.maxItems=s.maxItems),s.readOnly!==void 0&&(e.readOnly=s.readOnly),s.writeOnly!==void 0&&(e.writeOnly=s.writeOnly),s.examples&&s.examples.length>0&&(e.example=s.examples[0]),s.properties){e.properties={};for(const[t,n]of Object.entries(s.properties))e.properties[t]=et(n)}return s.anyOf&&(e.anyOf=s.anyOf.map(et)),s.additionalProperties!==void 0&&(typeof s.additionalProperties=="boolean"?e.additionalProperties=s.additionalProperties:e.additionalProperties=et(s.additionalProperties)),s.required&&(e.required=s.required),e}c(et,"convertDataSchemaToOpenAPI");function Ad(s){const{membraneInterfaces:{actions:e}}=s,t=Id(e);return JSON.stringify({openapi:"3.0.0",info:{title:"Membrane Actions API",version:"1.0.0",description:"Generated OpenAPI specification for Membrane actions"},paths:{},components:{schemas:t}},null,2)}c(Ad,"generateOpenAPIContent");function Id(s){const e={};return s.forEach(t=>{const n=bi(wi(t.key)),r={type:"object",properties:{id:{type:"string",description:"Request ID"},action:{type:"string",enum:[t.key]}},required:["id","action"]};if(t?.inputSchema){const a=et(t.inputSchema);a.properties&&(r.properties={...r.properties,...a.properties}),a.required&&(r.required=[...r.required||[],...a.required])}e[`${n}Request`]=r;const i={type:"object",properties:{id:{type:"string",description:"Response ID"},success:{type:"boolean"},data:{type:"object"}},required:["id","success"]},o=t?.customOutputSchema||t?.outputSchema;if(o){const a=et(o);i.properties={...i.properties,data:a}}e[`${n}Response`]=i}),e}c(Id,"generateOpenAPISchemas");function $d(s){const{membraneInterfaces:{actions:e}}=s,t=new Xc({indentNumberOfSpaces:2,newLine:`
|
|
142
|
-
`});return t.writeLine("// Generated TypeScript definitions for Membrane actions"),t.writeLine(`// Actions: ${e.map(n=>n.key).join(", ")}`),t.newLine(),Nd(t,e),t.newLine(),t.toString()}c($d,"generateTypeScriptContent");function Nd(s,e){e.forEach((t,n)=>{const r=bi(wi(t.key));s.writeLine(`export interface ${r}Request {`),s.indent(()=>{s.writeLine("readonly id: string"),s.writeLine(`readonly action: '${t.key}'`),t?.inputSchema?.properties&&pa(s,t.inputSchema.properties,t.inputSchema.required||[])}),s.writeLine("}"),s.writeLine(`export interface ${r}Response {`),s.indent(()=>{s.writeLine("readonly id: string"),s.writeLine("readonly success: boolean");const i=t?.customOutputSchema||t?.outputSchema;if(i){const o=i.properties;o&&Object.keys(o).length>0?(s.writeLine("readonly data: {"),s.indent(()=>{pa(s,o,i?.required||[])}),s.writeLine("}")):s.writeLine("readonly data?: Record<string, unknown>")}else s.writeLine("readonly data?: Record<string, unknown>")}),s.writeLine("}"),n<e.length-1&&s.newLine()})}c(Nd,"generateTypeScriptInterfaces");function pa(s,e,t){Object.entries(e).forEach(([n,r])=>{const o=t.includes(n)?"":"?",a=Dr(r);s.writeLine(`readonly ${n}${o}: ${a}`)})}c(pa,"generateTypeScriptProperties");function Dr(s){return s.type==="string"?s.enum?s.enum.map(e=>`'${e}'`).join(" | "):"string":s.type==="number"||s.type==="integer"?"number":s.type==="boolean"?"boolean":s.type==="array"?`${s.items?Dr(s.items):"unknown"}[]`:s.type==="object"?s.properties?`{ ${Object.entries(s.properties).map(([t,n])=>{const i=(s.required||[]).includes(t)?"":"?",o=Dr(n);return`readonly ${t}${i}: ${o}`}).join("; ")} }`:"Record<string, unknown>":"unknown"}c(Dr,"convertJsonSchemaToTypeScript");async function xd(s){const{out:e,target:t}=s;await M.promises.mkdir(e,{recursive:!0});const n=Rd(s),r=`${t}.${Pd(t)}`,i=
|
|
141
|
+
`,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=ns(e),n=Tt(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=ns(e),n=Tt(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 Zo(s){const e=s.prettyErrors!==!1;return{lineCounter:s.lineCounter||e&&new zo||null,prettyErrors:e}}c(Zo,"parseOptions");function Lu(s,e={}){const{lineCounter:t,prettyErrors:n}=Zo(e),r=new vr(t?.addNewLine),i=new yr(e),o=Array.from(i.compose(r.parse(s)));if(n&&t)for(const a of o)a.errors.forEach(zn(s,t)),a.warnings.forEach(zn(s,t));return o.length>0?o:Object.assign([],{empty:!0},i.streamInfo())}c(Lu,"parseAllDocuments");function ea(s,e={}){const{lineCounter:t,prettyErrors:n}=Zo(e),r=new vr(t?.addNewLine),i=new yr(e);let o=null;for(const a of i.compose(r.parse(s),!0,s.length))if(!o)o=a;else if(o.options.logLevel!=="silent"){o.errors.push(new Qe(a.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}return n&&t&&(o.errors.forEach(zn(s,t)),o.warnings.forEach(zn(s,t))),o}c(ea,"parseDocument");function Du(s,e,t){let n;typeof e=="function"?n=e:t===void 0&&e&&typeof e=="object"&&(t=e);const r=ea(s,t);if(!r)return null;if(r.warnings.forEach(i=>uo(r.options.logLevel,i)),r.errors.length>0){if(r.options.logLevel!=="silent")throw r.errors[0];r.errors=[]}return r.toJS(Object.assign({reviver:n},t))}c(Du,"parse");function ju(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 r=Math.round(t);t=r<1?void 0:r>8?{indent:8}:{indent:r}}if(s===void 0){const{keepUndefined:r}=t??e??{};if(!r)return}return Ge(s)&&!n?s.toString(t):new Lt(s,n,t).toString(t)}c(ju,"stringify");var Fu=Object.freeze({__proto__:null,Alias:xn,CST:Ru,Composer:yr,Document:Lt,Lexer:Go,LineCounter:zo,Pair:se,Parser:vr,Scalar:R,Schema:As,YAMLError:dr,YAMLMap:ue,YAMLParseError:Qe,YAMLSeq:qe,YAMLWarning:Po,isAlias:Fe,isCollection:z,isDocument:Ge,isMap:pt,isNode:Y,isPair:V,isScalar:J,isSeq:mt,parse:Du,parseAllDocuments:Lu,parseDocument:ea,stringify:ju,visit:ze,visitAsync:Nn});const de={Updated:"updated",Deleted:"deleted",Stopped:"stopped"},qu={ignored:yl,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 Ku extends Ws{static{c(this,"LocalElementWatcher")}constructor(e){super(),this.options=e,this.membraneDir=ft(this.options.cwd),this.lockTimeoutMs=this.options.lockTimeoutMs??1e3}isWatching=!1;watcher;membraneDir;contentCache={};ignoredPaths=new Set;lockTimeoutMs;async start(){this.isWatching||(M.existsSync(this.membraneDir)||M.mkdirSync(this.membraneDir,{recursive:!0}),this.initializeContentCache(),this.watcher=jc.watch(this.membraneDir,qu),this.watcher.on("add",e=>this.handleFileSystemEvent(de.Updated,e)).on("change",e=>this.handleFileSystemEvent(de.Updated,e)).on("unlink",e=>this.handleFileSystemEvent(de.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.clearAllLocks(),this.emit(de.Stopped))}getCwd(){return this.options.cwd}async executeWithPathLock(e,t){const n=K.resolve(e);this.ignoredPaths.add(n);try{await t()}finally{setTimeout(()=>{this.ignoredPaths.delete(n)},this.lockTimeoutMs)}}isPathLocked(e){const t=K.resolve(e);if(this.ignoredPaths.has(t))return!0;for(const n of this.ignoredPaths)if(t.startsWith(n+K.sep))return!0;return!1}clearAllLocks(){this.ignoredPaths.clear()}handleFileSystemEvent(e,t){const n=K.relative(this.membraneDir,t);if(this.isPathLocked(t))return;if(e===de.Deleted){this.removeFromCache(n);const a={filePath:t,relativePath:n,data:void 0};b.info(`[local] ${e}: ${a.relativePath}`),this.emit(e,a);return}const r=this.readFileContent(t);if(!this.hasContentChanged(n,r))return;const o=this.processFileEvent(t,r);this.updateCache(n,r),o&&(b.info(`[local] ${e}: ${o.relativePath}`),this.emit(e,o))}readFileContent(e){return M.readFileSync(e,"utf8")}processFileEvent(e,t){const n=K.relative(this.membraneDir,e);let r;try{r=t?Fu.parse(t):void 0}catch{r=void 0}return{filePath:e,relativePath:n,data:r}}hasContentChanged(e,t){if(!t)return this.contentCache[e]!==void 0;const n=this.getContentHash(t);return this.contentCache[e]!==n}getContentHash(e){return Lc.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(){M.existsSync(this.membraneDir)&&this.scanDirectoryForCache(this.membraneDir)}scanDirectoryForCache(e){const t=M.readdirSync(e,{withFileTypes:!0});for(const n of t){const r=K.join(e,n.name);if(n.isDirectory())this.scanDirectoryForCache(r);else if(n.isFile())try{const i=M.readFileSync(r,"utf8"),o=K.relative(this.membraneDir,r);this.updateCache(o,i)}catch{}}}}var Cr=(s=>(s.Updated="updated",s.ConnectorFileUpdated="connector-file-updated",s.Connected="connected",s.Disconnected="disconnected",s.Error="error",s))(Cr||{});const Bu={debounceMs:2e3,reconnectIntervalMs:5e3,maxReconnectAttempts:5};class Uu extends Ws{static{c(this,"RemoteElementWatcher")}constructor(e=Bu){super(),this.config=e}eventSource;debounceTimeouts=new Map;reconnectAttempts=0;reconnectTimeout;isStarted=!1;async start(){this.isStarted||(this.isStarted=!0,await this.connect())}async stop(){this.isStarted&&(this.isStarted=!1,this.clearReconnectTimeout(),this.clearAllDebounceTimeouts(),this.eventSource&&(this.eventSource.close(),this.eventSource=void 0))}async connect(){try{b.debug("[remote-events] Connecting to server");const e=await W.getClient(process.cwd()),t=await e.getToken();if(!t)throw new Error("No auth token available");const n=`${e.apiUri}/sse/workspace?token=${encodeURIComponent(t)}`;b.debug("[remote-events] Subscribing to workspace events"),this.eventSource=new Fc(n),this.setupEventSourceHandlers()}catch(e){b.error(`[remote-events] Failed to subscribe to workspace events: ${e}`),this.emit("error",{error:e}),this.scheduleReconnect()}}setupEventSourceHandlers(){this.eventSource&&(this.eventSource.onopen=()=>{b.debug("[remote-events] Connected to server"),this.reconnectAttempts=0,this.emit("connected",{})},this.eventSource.onmessage=e=>{try{const t=JSON.parse(e.data);this.handleElementUpdate(t)}catch(t){b.error(`[remote-events] Failed to parse workspace event: ${t}`)}},this.eventSource.onerror=e=>{b.error(`[remote-events] Connection error: ${JSON.stringify(e,null,2)}`),this.emit("disconnected",{}),this.isStarted&&this.scheduleReconnect()})}handleElementUpdate(e){if(e.type!==Oc.ElementUpdate)return;const{elementId:t,elementType:n,data:r={}}=e;if(!(!t||!n)){if(n===D.Connector){const{filePath:i,eventType:o,newPath:a}=r;return b.debug(`[remote-watcher] Received connector event - elementId: ${t}, filePath: ${i}, eventType: ${o}`),this.scheduleConnectorFileUpdate(t,i,o,a)}return this.scheduleElementUpdate(t,n)}}scheduleElementUpdate(e,t){const n=this.debounceTimeouts.get(e);n&&clearTimeout(n);const r=setTimeout(()=>{this.debounceTimeouts.delete(e),this.emit("updated",{elementId:e,elementType:t})},this.config.debounceMs);this.debounceTimeouts.set(e,r)}scheduleConnectorFileUpdate(e,t,n,r){const i=JSON.stringify({connectorId:e,filePath:t}),o=this.debounceTimeouts.get(i);o&&clearTimeout(o);const a=setTimeout(()=>{this.debounceTimeouts.delete(i),this.emit("connector-file-updated",{connectorId:e,filePath:t,eventType:n,newPath:r})},this.config.debounceMs);this.debounceTimeouts.set(i,a)}scheduleReconnect(){if(!this.isStarted||this.reconnectAttempts>=this.config.maxReconnectAttempts){if(this.reconnectAttempts>=this.config.maxReconnectAttempts)throw new Error("Unable to re-connect to the server");return}this.reconnectAttempts++;const e=Math.min(this.config.reconnectIntervalMs*Math.pow(2,this.reconnectAttempts-1),3e4);b.debug(`[remote-watcher] Reconnecting in ${e}ms (attempt ${this.reconnectAttempts})`),this.reconnectTimeout=setTimeout(()=>{this.connect()},e)}clearReconnectTimeout(){this.reconnectTimeout&&(clearTimeout(this.reconnectTimeout),this.reconnectTimeout=void 0)}clearAllDebounceTimeouts(){this.debounceTimeouts.forEach(e=>clearTimeout(e)),this.debounceTimeouts.clear()}}class ta{static{c(this,"ElementsCache")}elements=new Map;typeIndex=new Map;internalIdIndex=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),e.data?.id&&this.internalIdIndex.set(e.data.id,t)}remove(e){const t=e.id,n=this.elements.delete(t);if(n){const r=this.typeIndex.get(e.type);r&&(r.delete(t),r.size===0&&this.typeIndex.delete(e.type)),e.data?.id&&this.internalIdIndex.delete(e.data.id)}return n}put(e){this.elements.has(e.id)&&this.remove(e),this.add(e)}get(e){return this.elements.get(e)}getByInternalId(e){const t=this.internalIdIndex.get(e);if(t)return this.elements.get(t)}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(),this.internalIdIndex.clear()}getAllIds(){return new Set(this.elements.keys())}}async function Wu(s="full"){const e={};b.info("[connectors] Getting remote workspace data");const t=await W.withClient(n=>n.integrations.findAll());e.integration=t.map(n=>kr("integration",n));for(const n of Object.keys(le)){const r=le[n];if(r.exportable===!1)continue;const i=[];b.info(`[connectors] Reading ${r.elements} from remote workspace`);const o=await W.withClient(a=>a[r.elements].findAll());if(i.push(...o.map(a=>kr(n,a))),r.integrationSpecific)for(const a of t){const l=await W.withClient(u=>u[r.elements].findAll({integrationId:a.id}));i.push(...l.map(u=>(u.integrationKey=a.key,kr(n,u))))}i.length>0&&s=="full"&&(console.table(i.map(a=>({key:a.key,integrationKey:a.integrationKey,universal:!a.integrationKey})).reduce((a,l)=>(a||(a={}),a[l.key]||(a[l.key]={}),l.universal&&(a[l.key].universal=!0),l.integrationKey&&(a[l.key].integration?a[l.key].integration+=` ${l.integrationKey}`:a[l.key].integration=l.integrationKey),a),{})),console.groupEnd()),e[n]=i}return b.success("[connectors] Remote workspace data retrieved successfully"),e}c(Wu,"getWorkspaceData");function kr(s,e){return e=ml(e),le[s].exportCleanup?le[s].exportCleanup(e):e}c(kr,"cleanUpForExport");const Et="connectors",Ne="development",_r={};async function Ju(){const s=await Wu("minified"),t=(await W.withClient(l=>l.get("org-workspace-id"))).id,n={};b.info("[connectors] Loading custom connectors");const r=await W.withClient(l=>l.get(`/connectors?workspaceId=${t}`));b.info("[connectors] Loading public connectors"),s.connector=r;const i=Be(),a=(F.existsSync(i)?F.readdirSync(i):[]).filter(l=>{if(l.startsWith("."))return!1;const u=B.join(i,l);try{return F.statSync(u).isDirectory()}catch{return!1}});for(const l of a){b.info(`[connectors] Loading connector from: ${l}`);const u=F.readdirSync(B.join(i,l)),d=await Tr(l);if(!d)continue;if("baseUri"in d&&delete d.baseUri,d.uuid&&s.connector?.find(p=>p.uuid==d.uuid))n[d.id]=s.connector.find(p=>p.uuid==d.uuid).id,b.info(`[connectors] Matched ${d.name} uuid: ${d.uuid}`);else if(!n[d.id]){let p=!1;try{const m=await Er({connectorId:d.id});m&&!m.workspaceId&&(p=!0)}catch{}if(!p){b.info(`[connectors] Creating custom connector ${d.name} (${d.key})`);const m=await W.withClient(y=>y.post("connectors",{...d,workspaceId:t}));n[d.id]=m.id}}const f=u.filter(p=>F.statSync(B.join(i,l,p)).isDirectory());for(const p of f)await Gu({connector:d,version:p,connectorId:n[d.id]})}return n}c(Ju,"pushConnectors");async function na({connectorId:s,connectorVersion:e,allConnectors:t,pulledConnectors:n,pulledConnectorVersions:r}){if(!s||r[s]?.has(e))return;const i=Ui(),o=await Er({connectorId:s});if(o.workspaceId||t){if(!o?.key){b.error(`[connectors] Connector ${s} has no key. Skipping..`);return}n.has(s)||(await zu({basePath:i,connector:o}),n.add(s)),r[s]||(r[s]=new Set),r[s].has(e)||(await Yu({connector:o,connectorVersion:e,basePath:i}),r[s].add(e))}}c(na,"pullRemoteConnector");function Be(){const s=Hs();return B.join(s.membraneDirPath,Et)}c(Be,"getConnectorsPath");async function Tr(s){const e=B.join(Be(),s,`${s}.yml`);return Vs(e,!1)}c(Tr,"readConnector");async function Hu(s,e){return b.info(`[connectors] Zipping ${s} into ${e}`),new Promise((t,n)=>{const r=F.createWriteStream(e),i=qc("zip",{zlib:{level:9}});r.on("close",()=>{b.success(`[connectors] Successfully created ${e}`),t()}),r.on("end",()=>{b.info("[connectors] Data has been drained")}),i.on("warning",a=>{a.code==="ENOENT"?console.warn(a):n(a)}),i.on("error",a=>{n(a)}),i.pipe(r);const o=F.readdirSync(s);for(const a of o){const l=B.join(s,a),u=F.statSync(l);u.isFile()?i.file(l,{name:a}):u.isDirectory()&&i.directory(l,a)}i.finalize()})}c(Hu,"createZipArchive");async function Vu(s,e){return b.info(`[connectors] Unzipping into ${e}`),new Promise((t,n)=>{const r=Bc.Parse();r.on("entry",i=>{const o=i.path;if(i.type==="Directory"){const l=B.join(e,o);F.mkdirSync(l,{recursive:!0}),i.autodrain()}else{const l=B.join(e,o),u=B.dirname(l);F.mkdirSync(u,{recursive:!0});const d=F.createWriteStream(l);i.pipe(d),d.on("finish",()=>{})}}),r.on("end",()=>{b.success(`[connectors] Successfully extracted to ${e}`),t()}),r.on("error",i=>{n(i)}),r.write(s),r.end()})}c(Vu,"extractZipArchive");async function Gu({connector:s,version:e,connectorId:t}){const n=B.join(Be(),xe(s),sa(e)),r=B.join(n,"src"),i=B.join(n,"src.zip"),o=F.existsSync(i);if(F.existsSync(r)&&(b.info(`[connectors] Archiving source code for ${s.name} version ${e}`),await Hu(r,i)),!F.existsSync(i)){b.warning(`[connectors] No source code found for ${s.name} version ${e}`);return}try{const a=new Kc;if(a.append("file",F.createReadStream(i),"file.zip"),b.info(`[connectors] Pushing connector version ${e} for ${s.name}`),e==Ne)b.info(`[connectors] Uploading connector ${t}`),await W.withClient(l=>l.post(`connectors/${t}/upload`,a,{headers:{...a.getHeaders()}}));else{if(a.append("version",e),a.append("changelog","Imported Version"),(await W.withClient(u=>u.get(`/connectors/${t}/versions`))).find(u=>u.version==e)){b.info(`[connectors] Version ${e} already published`);return}b.info(`[connectors] Publishing version ${e} of connector ${t}`),await W.withClient(u=>u.post(`connectors/${t}/publish-version`,a,{headers:{...a.getHeaders()}}))}b.success(`Successfully pushed connector version ${e} for ${s.name}`)}catch(a){b.error(`Error pushing connector version ${e} for ${s.name}: ${a}`)}finally{!o&&F.existsSync(i)&&(b.info(`[connectors] Cleaning up temporary zip file for ${s.name} version ${e}`),F.unlinkSync(i))}}c(Gu,"pushConnectorVersion");async function Er({connectorId:s}){if(s){if(_r[s])return _r[s];try{const e=await W.withClient(t=>t.get(`connectors/${s}`));return _r[s]=e,e}catch(e){return b.error(`[connectors] Failed to get connector ${s}: ${e}`),null}}}c(Er,"getConnector");async function zu({basePath:s,connector:e}){const t=xe(e),n=B.join(s,Et,t);F.mkdirSync(n,{recursive:!0});const r=B.join(n,`${xe(e)}.yml`);F.writeFileSync(r,Dt.dump(e)),b.info(`[connectors] Pulled connector ${e.name}`)}c(zu,"pullConnector");async function Yu({connector:s,connectorVersion:e,basePath:t}){const n=xe(s),r=sa(e),i=B.join(t,"connectors",n,r),o=await W.withClient(l=>l.get(`connectors/${s.id}/download`,{version:e},{responseType:"arraybuffer",headers:{Accept:"application/zip"},timeout:1e6}));F.mkdirSync(i,{recursive:!0});const a=B.join(i,"src.zip");if(F.writeFileSync(a,o),!e){const l=B.join(i,"src");F.mkdirSync(l,{recursive:!0}),await Vu(o,l)}b.info(`[connectors] Pulled connector version: ${s.name} (${r})`)}c(Yu,"pullConnectorVersion");function xe(s){return s.key}c(xe,"getConnectorDirName");function sa(s){return s??Ne}c(sa,"getConnectorVersionDirName");function Xu(s){const e=Ui(),t=xe(s);return B.join(e,Et,t)}c(Xu,"getConnectorDirPath");function Qu(s){return s.match(`${Et}/[^/]+/${Ne}/src/.*`)!==null}c(Qu,"isConnectorSourceFile");async function Zu(s){const e=s.match(`${Et}/([^/]+)/${Ne}/src/(.*)`);if(!e)return;const t=e[1],n=e[2],r=await Tr(t);if(!r){b.warning(`[connectors] Connector ${t} not found. Ignoring file change`);return}const i=r.id,o=F.readFileSync(s,"utf-8");await W.withClient(a=>a.put(`connectors/${i}/files/${n}`,o,{headers:{"Content-Type":"text/plain"}})),b.info(`[connectors] Pushed file ${n} for connector ${r.name}`)}c(Zu,"putConnectorFile");async function ed(s){const e=s.match(`${Et}/([^/]+)/${Ne}/src/(.*)`);if(!e)return;const t=e[1],n=e[2],r=await Tr(t);if(!r){b.warning(`[connectors] Connector ${t} not found. Ignoring file change`);return}const i=r.id;await W.withClient(o=>o.delete(`connectors/${i}/files/${n}`)),b.info(`[connectors] Deleted file ${n} for connector ${r.name}`)}c(ed,"deleteConnectorFile");async function td(s,e){try{const t=await W.withClient(o=>o.get(`connectors/${s}`));if(!t){b.warning(`[connectors] Connector ${s} not found`);return}const n=await W.withClient(o=>o.get(`connectors/${s}/files/${e}`)),r=xe(t),i=B.join(Be(),r,Ne,"src",e);F.mkdirSync(B.dirname(i),{recursive:!0}),n!=null?(F.writeFileSync(i,n),b.info(`[connectors] Pulled file ${e} for connector ${t.name}`)):F.existsSync(i)&&(F.unlinkSync(i),b.info(`[connectors] Deleted file ${e} for connector ${t.name}`))}catch(t){b.error(`[connectors] Failed to pull connector file ${e} for connector ${s}: ${t}`)}}c(td,"pullConnectorFile");async function nd(s,e){const t=await W.withClient(i=>i.get(`connectors/${s}`));if(!t){b.warning(`[connectors] Connector ${s} not found`);return}const n=xe(t),r=B.join(Be(),n,Ne,"src",e);F.existsSync(r)&&(F.unlinkSync(r),b.info(`[connectors] Deleted file ${e} for connector ${n}`))}c(nd,"deleteLocalConnectorFile");async function sd(s,e,t){if(t&&e!==t)try{const n=await W.withClient(l=>l.get(`connectors/${s}`));if(!n){b.warning(`[connectors] Connector ${s} not found`);return}const r=xe(n),i=B.join(Be(),r,Ne,"src"),o=B.join(i,e),a=B.join(i,t);F.existsSync(o)&&(F.mkdirSync(B.dirname(a),{recursive:!0}),F.renameSync(o,a),b.info(`[connectors] Renamed directory from ${e} to ${t} for connector ${r}`))}catch(n){b.error(`[connectors] Failed to rename directory ${e} to ${t} for connector ${s}: ${n}`)}}c(sd,"renameLocalConnectorDirectory");async function rd(s,e){try{const t=await W.withClient(i=>i.get(`connectors/${s}`));if(!t){b.warning(`[connectors] Connector ${s} not found`);return}const n=xe(t),r=B.join(Be(),n,Ne,"src",e);if(F.existsSync(r)){const i=B.resolve(Be());if(!B.resolve(r).startsWith(i))return;F.rmSync(r,{recursive:!0,force:!0}),b.info(`[connectors] Deleted directory ${e} for connector ${n}`)}}catch(t){b.error(`[connectors] Failed to delete directory ${e} for connector ${s}: ${t}`)}}c(rd,"deleteLocalConnectorDirectory");const ra=[D.DataSource,D.FieldMapping,D.Action,D.Flow,D.Package,D.AppDataSchema];class yn{static{c(this,"ElementSyncService")}localWatcher=void 0;remoteWatcher=void 0;notifier;changes=[];localCache;remoteCache;localRepo;remoteRepo;pulledConnectors=new Set;pulledConnectorVersions={};constructor(){this.notifier=Ae,this.localCache=new ta,this.remoteCache=new ta,this.localRepo=new Il(this.localCache),this.remoteRepo=new $l(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),r=this.getCache(t);try{const i=await n.putElement(e);r.put(i)}catch(i){throw b.error(`Failed to update element ${e.id}: ${i}`),i}}async deleteElement(e,t){const n=this.getHandler(t),r=this.getCache(t);try{await n.deleteElement(e,{elements:n.cache.getAll(),connectorsMapping:n.connectorsMapping}),r.remove(e)}catch(i){throw b.error(`Failed to delete element ${e.id}: ${i}`),i}}async pullConnectors(e=!1){const t=this.remoteCache.getElementsByType(D.Integration).map(n=>n.data);for(const n of t){const r=n.connectorId,i=n.connectorVersion;r&&await na({connectorId:r,connectorVersion:i,allConnectors:e,pulledConnectors:this.pulledConnectors,pulledConnectorVersions:this.pulledConnectorVersions})}}async pushConnectors(){const e=await Ju();this.remoteRepo.setConnectorsMapping(e)}getHandler(e){return e===ae.INCOMING?this.localRepo:this.remoteRepo}getCache(e){return e===ae.INCOMING?this.localCache:this.remoteCache}async startWatching(){this.localWatcher=new Ku({cwd:process.cwd(),lockTimeoutMs:1e3}),this.localWatcher.on(de.Updated,e=>this.handleLocalEvent(e,de.Updated)),this.localWatcher.on(de.Deleted,e=>this.handleLocalEvent(e,de.Deleted)),await this.localWatcher.start(),b.success("[local] Tracking changes.."),this.remoteWatcher=new Uu,this.remoteWatcher.on(Cr.Updated,({elementId:e,elementType:t})=>this.handleRemoteElementEvent(e,t)),this.remoteWatcher.on(Cr.ConnectorFileUpdated,({connectorId:e,filePath:t,eventType:n,newPath:r})=>this.handleRemoteConnectorFileEvent(e,t,n,r)),await this.remoteWatcher.start(),b.success("[remote] Tracking changes..")}async stopWatching(){this.localWatcher&&(await this.localWatcher.stop(),this.localWatcher=void 0),this.remoteWatcher&&(await this.remoteWatcher.stop(),this.remoteWatcher=void 0)}async handleRemoteElementEvent(e,t){try{const n=await this.remoteRepo.getByInternalId(e,t),r=!!n?.data.archivedAt||!!n?.data.isDeactivated;if(!n||r){const o=n||this.remoteCache.getByInternalId(e);return o?(b.info(`[${this.getDirectionLabel(ae.INCOMING)}] Deleted: ${o.id}`),this.localWatcher?.executeWithPathLock(o.absolutePath,()=>this.deleteElement(o,ae.INCOMING))):void 0}if(b.info(`[${this.getDirectionLabel(ae.INCOMING)}] Updated: ${n.id}`),await this.localWatcher?.executeWithPathLock(n.absolutePath,async()=>this.updateElement(n,ae.INCOMING)),t===D.Integration){const o=n.data.connectorId,a=n.data.connectorVersion,l=await Er({connectorId:o});if(!l?.key)return;const u=Xu(l);await this.localWatcher?.executeWithPathLock(u,async()=>na({connectorId:o,connectorVersion:a,allConnectors:!1,pulledConnectors:this.pulledConnectors,pulledConnectorVersions:this.pulledConnectorVersions}))}}catch(n){b.error(`[sync] Error handling remote event: ${n}`)}}async handleRemoteConnectorFileEvent(e,t,n,r){try{switch(n){case Ms.ConnectorFileDeleted:await nd(e,t);break;case Ms.ConnectorDirectoryRenamed:await sd(e,t,r);break;case Ms.ConnectorDirectoryDeleted:await rd(e,t);break;default:await td(e,t);break}}catch(i){b.error(`[sync] Error handling remote connector file event: ${i}`)}}async handleLocalEvent(e,t){try{if(Qu(e.filePath))switch(t){case de.Updated:await Zu(e.filePath);break;case de.Deleted:await ed(e.filePath);break}else{let n=Z.fromPathAndData(e.filePath,e.data);if(!n){const r=Z.idFromPath(e.filePath);if(!r||(n=this.remoteCache.get(r),!n))return}switch(b.info(`[${this.getDirectionLabel(ae.OUTGOING)}] ${pl.toSentenceCase(t)}: ${n.id}`),t){case de.Updated:await this.updateElement(n,ae.OUTGOING);break;case de.Deleted:await this.deleteElement(n,ae.OUTGOING);break}}}catch(n){b.error(`[sync] Error handling local event: ${n}`)}}detectIncomingChanges(){this.clearChanges();const e=yn.getChanges(ae.INCOMING,this.remoteCache,this.localCache);return this.updateChanges(e),e}detectOutgoingChanges(){this.clearChanges();const e=yn.getChanges(ae.OUTGOING,this.localCache,this.remoteCache);return this.updateChanges(e),e}async resolveChanges(){if(!this.needsSync())return;b.info("[resolver] Resolving changes.."),b.info("[resolver] Resolving integration elements");const e=this.changes.filter(r=>r.element.type===D.Integration);await Promise.all(e.map(async r=>this.resolveChange(r))),e.length>0&&(await this.fetchElements(),this.changes=this.changes.length>0&&this.changes[0]?.direction===ae.INCOMING?this.detectIncomingChanges():this.detectOutgoingChanges(),this.changes=this.changes.filter(r=>r.element.type!==D.Integration)),b.info("[resolver] Resolving universal elements");const t=this.changes.filter(r=>!r.element.hasParent());for(const r of ra){const i=t.filter(o=>o.element.type===r);b.info(`[resolver] Resolving ${r} elements`),await Promise.all(i.map(async o=>this.resolveChange(o)))}b.info("[resolver] Resolving integration level elements");const n=this.changes.filter(r=>r.element.hasParent());for(const r of ra){const i=n.filter(o=>o.element.type===r);b.info(`[resolver] Resolving ${r} elements`),await Promise.all(i.map(async o=>this.resolveChange(o)))}b.success("[resolver] Resolved changes")}async resolveChange(e){switch(e.type){case Oe.DELETE:return this.deleteElement(e.element,e.direction);case Oe.CREATE:return this.updateElement(e.element,e.direction);case Oe.UPDATE:return this.updateElement(e.element,e.direction)}}static getChanges(e,t,n){const r=t.getAllIds(),i=n.getAllIds(),o=new Set([...r,...i]),a=[];for(const l of o){const u=t.get(l),d=n.get(l),f=yn.detectChangeForElement(u,d,e);f&&a.push(f)}return a}updateChanges(e){if(this.changes=e,this.needsForcedSync()){const t=e.filter(n=>n.isConflict);b.warning("[resolver] Conflicts detected"),this.notifier.setConflicts(t)}}clearChanges(){this.changes=[]}getDirectionLabel(e){switch(e){case ae.INCOMING:return"local\u2190remote";case ae.OUTGOING:return"local\u2192remote"}}static detectChangeForElement(e,t,n){return e&&!t?{type:Oe.CREATE,element:e,direction:n,isConflict:!1}:!e&&t?{type:Oe.DELETE,element:t,direction:n,isConflict:!0}:e&&t&&!e.isEqual(t)?{type:Oe.UPDATE,element:e,direction:n,isConflict:!1}:null}}const Ue=K.join(Uc.tmpdir(),"membrane-mcp-status"),ia=3e4;class id{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=ss(void 0,e),n=oa(e);t&&Ae.setMcpStatus(t),await Ae.setMcpServers(n)}catch{b.error("Failed to check MCP status")}}}function ss(s,e){try{const t=e||process.cwd();if(!s){const r=oa(t);return r.length===0?null:r[0]}const n=Ir(s,t);if(M.existsSync(n)){const r=M.statSync(n),i=new Date;if(i.getTime()-r.mtime.getTime()>ia)return zt(s,t),null;const a=M.readFileSync(n,"utf8"),l=JSON.parse(a);if(l.isRunning){const u=new Date(l.lastActivity).getTime();if(i.getTime()-u>ia)return zt(s,t),null}return l}}catch{s&&e&&zt(s,e)}return null}c(ss,"getMcpStatus");function oa(s){try{const e=s||process.cwd(),t=Ar(e);if(!M.existsSync(Ue))return[];const n=M.readdirSync(Ue),r=[];for(const i of n){const o=i.match(new RegExp(`^mcp-${t}-(\\d+)\\.json$`));if(o){const a=parseInt(o[1],10),l=ss(a,e);l&&r.push(l)}}return r.sort((i,o)=>new Date(o.startTime).getTime()-new Date(i.startTime).getTime())}catch{return[]}}c(oa,"getAllMcpStatusFiles");function Or(s){try{const t={...ss(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};M.existsSync(Ue)||M.mkdirSync(Ue,{recursive:!0});const n=Ir(s.processId,s.cwd);M.writeFileSync(n,JSON.stringify(t,null,2))}catch{}}c(Or,"updateMcpStatus");function zt(s,e){try{const t=e||process.cwd();if(s){const n=Ir(s,t);M.existsSync(n)&&M.unlinkSync(n)}else{const n=Ar(t);if(M.existsSync(Ue)){const r=M.readdirSync(Ue);for(const i of r)i.match(new RegExp(`^mcp-${n}-\\d+\\.json$`))&&M.unlinkSync(K.join(Ue,i))}}}catch{}}c(zt,"clearMcpStatus");function od(s,e){const t=ss(s,e);t&&Or({processId:s,cwd:e,totalRequests:t.totalRequests+1,lastRequestTime:new Date().toISOString(),lastActivity:new Date().toISOString()})}c(od,"trackToolExecution");function Ar(s){return Dc("md5").update(s).digest("hex").slice(0,8)}c(Ar,"getCwdHash");function Ir(s,e){const t=Ar(e);return K.join(Ue,`mcp-${t}-${s}.json`)}c(Ir,"getStatusFilePath");const Yt={Agent:"agent",Cli:"cli"},x={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 aa{static{c(this,"MembraneCLIService")}constructor(e,t,n=()=>process.exit(0)){this.mode=e,this.cwd=t,this.onShutdown=n,this.notifier=Ae,this.mcpStatusService=new id,this.syncService=new yn,this.setupProcessCleanup()}initialized=!1;notifier;mcpStatusService;syncService;isShuttingDown=!1;currentConfig=null;get config(){return this.currentConfig}getSyncedElements(){return this.syncService.localCache.getAll()}getSyncedElementsByType(e){return this.syncService.localCache.getElementsByType(e)}async fetchElements(){await this.syncService.fetchElements()}async pullWorkspace(e={}){try{if(b.setVerboseMode(!!e.verbose),await this.notifier.setState(x.PULLING),await this.syncService.fetchElements(),this.syncService.detectIncomingChanges(),this.syncService.needsForcedSync()&&!e.force)return this.notifier.setState(x.CONFLICTS);await this.syncService.pullConnectors(e.allConnectors),await this.syncWorkspaces(e)}catch(t){b.error(`Failed to pull workspace: ${t}`),await this.notifier.setState(x.ERROR),b.saveLogsToFile("error")}finally{return e.saveLogs&&b.saveLogsToFile(),e?.onComplete?.()}}async pushWorkspace(e={}){try{if(b.setVerboseMode(!!e.verbose),await this.notifier.setState(x.PUSHING),await this.syncService.fetchElements(),this.syncService.detectOutgoingChanges(),this.syncService.needsForcedSync()&&!e.force)return await this.notifier.setState(x.CONFLICTS);await this.syncService.pushConnectors(),await this.syncWorkspaces(e)}catch(t){b.error(`Failed to push workspace: ${t}`),await this.notifier.setState(x.ERROR),b.saveLogsToFile("error")}finally{return e.saveLogs&&b.saveLogsToFile(),e?.onComplete?.()}}async syncWorkspaces(e={}){try{e.verbose!==void 0&&b.setVerboseMode(!!e.verbose),await this.notifier.setState(x.RESOLVING),this.syncService.needsSync()&&await this.syncService.resolveChanges();const t=await this.syncService.getStats();this.notifier.setStats(t),await this.notifier.setState(x.SYNCED),e.watch&&(await this.notifier.setState(x.WATCHING),await this.syncService.startWatching())}catch(t){b.error(`Failed to sync local and remote workspaces: ${t}`),await this.notifier.setState(x.ERROR),b.saveLogsToFile("error")}}async init({force:e=!1}={}){if(!(this.initialized&&!e)){await this.notifier.setState(x.NOT_INITIALIZED);try{await this.loadConfig(),Ft.isCacheDefined()?(await this.initServices(),this.initialized=!0,await this.notifier.setState(x.INITIALIZED)):(this.initialized=!1,await this.notifier.setState(x.SETTING_UP))}catch(t){b.error(`Failed to initialize services: ${t}`),await this.notifier.setState(x.ERROR),b.saveLogsToFile("error"),this.onShutdown()}}}async loadConfig(){this.currentConfig=Ft.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 r=Ft.updateConfig(t);this.currentConfig=r,await this.init({force:!0})}async shutdown(){!this.initialized||this.isShuttingDown||(this.isShuttingDown=!0,this.mode===Yt.Agent&&(await this.notifier.cleanup(),await this.mcpStatusService.stop()),this.initialized=!1,this.onShutdown())}async initServices(){this.mode===Yt.Agent&&(await this.notifier.connectToRemote(),await this.mcpStatusService.start()),this.syncService.clear()}async stopServices(){this.mode===Yt.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 ca=ui(null);function ad({children:s,membraneCLIService:e}){const{data:t}=fi("/account"),[n,r]=H(x.NOT_INITIALIZED),[i,o]=H([]),[a,l]=H({}),[u,d]=H([]),[f,p]=H(null),y=t?.workspaces?.find(h=>h.workspaceKey===f?.workspaceKey)||null;return Ve(()=>{const h=c(({state:E})=>r(E),"handleStateChanged"),w=c(({stats:E})=>l(E),"handleStatsChanged"),k=c(({log:E})=>d($=>[...$,E]),"handleLogAdded"),T=c(({conflicts:E})=>o(E),"handleConflictsUpdated"),I=c(({config:E})=>p(E),"handleConfigChanged");return e.notifier.on(X.StateChanged,h),e.notifier.on(X.StatsChanged,w),e.notifier.on(X.LogAdded,k),e.notifier.on(X.ConflictsChanged,T),e.notifier.on(X.ConfigChanged,I),e.init(),()=>{e.notifier.off(X.StateChanged,h),e.notifier.off(X.StatsChanged,w),e.notifier.off(X.LogAdded,k),e.notifier.off(X.ConflictsChanged,T),e.notifier.off(X.ConfigChanged,I)}},[]),g(ca.Provider,{value:{state:n,stats:a,logs:u,currentWorkspace:y,conflicts:i,config:f,updateConfig:c(h=>e.updateConfig(h),"updateConfig"),resolveConflicts:c(h=>e.syncWorkspaces(h),"resolveConflicts"),pull:c(h=>e.pullWorkspace(h),"pull"),push:c(h=>e.pushWorkspace(h),"push"),exit:c(()=>e.shutdown(),"exit")},children:s})}c(ad,"MembraneCLIServiceProvider");function Se(){const s=di(ca);if(!s)throw new Error("useMembraneCLIService must be used within MembraneCLIServiceProvider");return s}c(Se,"useMembraneCLIService");const la=ui(process.cwd());function cd({cwd:s,children:e}){return g(la.Provider,{value:s,children:e})}c(cd,"CwdProvider");function ld(){return di(la)}c(ld,"useCwd");function rs({cwd:s,children:e,membraneCLIService:t}){const n=s||process.cwd();return g(cd,{cwd:n,children:g(Cc,{value:{fetcher:kl()},children:g(ad,{membraneCLIService:t,children:e})})})}c(rs,"Layout");const $r=[{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=K.join(process.cwd(),".mcp.json"),e={mcpServers:{membrane:{command:"membrane",args:["mcp"],env:{AGENT_NAME:"Claude Code"}}}};let t={};if(M.existsSync(s))try{t=JSON.parse(M.readFileSync(s,"utf8"))}catch{t={}}const n={...t,mcpServers:{...t.mcpServers,...e.mcpServers}};return M.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=K.join(process.cwd(),".cursor"),e=K.join(s,"mcp.json");M.existsSync(s)||M.mkdirSync(s);const t={mcpServers:{membrane:{command:"membrane",args:["mcp"],env:{AGENT_NAME:"Cursor"}}}};let n={};if(M.existsSync(e))try{n=JSON.parse(M.readFileSync(e,"utf8"))}catch{n={}}const r={...n,mcpServers:{...n.mcpServers,...t.mcpServers}};return M.writeFileSync(e,JSON.stringify(r,null,2)),`MCP server configuration added to ${e}`},"addConfig")}];function ud({onExit:s,onComplete:e}){const[t,n]=H(0),[r,i]=H(!1),[o,a]=H(null),[l,u]=H(""),[d,f]=H("");st((y,h)=>{if(l||d){(h.escape||y==="q"||h.return)&&e();return}if(r)h.return||y===" "?p(o):h.escape&&(i(!1),a(null));else if(h.escape)s();else if(h.upArrow||y==="k")n(Math.max(0,t-1));else if(h.downArrow||y==="j")n(Math.min($r.length-1,t+1));else if(h.return||y===" "){const w=$r[t];a(w),i(!0)}});const p=c(y=>{try{const h=y.addConfig();u(h)}catch(h){f(`Failed to write configuration: ${h.message||h}`)}},"addMcpConfiguration"),m=Math.min(80,process.stdout.columns||80);return l?O(v,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:m,children:[g(v,{marginTop:-1,marginBottom:1,children:O(C,{bold:!0,children:["\u{1F517} Connect Agent \u2014 ",g(C,{color:"green",children:"Success"})]})}),O(v,{flexDirection:"column",paddingLeft:2,children:[g(C,{color:"green",children:l}),g(v,{marginTop:1,children:g(C,{color:"grey",children:"The agent will now be able to use Membrane's integration capabilities."})})]}),g(v,{marginTop:1,paddingLeft:2,children:g(C,{color:"white",children:"[esc/q/enter: exit]"})})]}):d?O(v,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:m,children:[g(v,{marginTop:-1,marginBottom:1,children:O(C,{bold:!0,children:["\u{1F517} Connect Agent \u2014 ",g(C,{color:"red",children:"Error"})]})}),g(v,{flexDirection:"column",paddingLeft:2,children:g(C,{color:"red",children:d})}),g(v,{marginTop:1,children:g(C,{color:"grey",children:"[esc/q/enter: exit]"})})]}):r&&o?O(v,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:m,children:[g(v,{marginTop:-1,marginBottom:1,children:O(C,{bold:!0,children:["\u{1F517} Connect Agent \u2014 ",g(C,{color:"cyan",children:"Confirmation"})]})}),O(v,{flexDirection:"column",paddingLeft:2,children:[O(C,{children:["Connect ",g(C,{bold:!0,children:o.name})," to Membrane via MCP?"]}),g(v,{marginTop:1,children:g(C,{color:"grey",children:"This will add an MCP server configuration that allows the agent to use Membrane's integration capabilities."})}),g(v,{marginTop:1,children:g(C,{color:"yellow",bold:!0,children:o.actionDescription})}),g(v,{marginTop:2,marginBottom:1,children:O(C,{children:[g(C,{color:"white",bold:!0,children:"[Enter] Confirm"})," ",g(C,{color:"gray",children:"[Esc] Cancel"})]})})]})]}):O(v,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:m,children:[g(v,{marginTop:-1,marginBottom:1,children:O(C,{bold:!0,children:["\u{1F517} Connect Agent \u2014 ",g(C,{color:"cyan",children:"Select Agent"})]})}),O(v,{flexDirection:"column",paddingLeft:2,children:[g(C,{color:"grey",children:"Choose an agent to connect to Membrane via MCP:"}),g(v,{marginTop:1,children:g(C,{color:"grey",children:"This will add an MCP server configuration that allows the agent to use Membrane's integration capabilities."})}),g(v,{marginTop:1,flexDirection:"column",children:$r.map((y,h)=>O(v,{children:[O(C,{color:t===h?"cyan":"white",children:[t===h?"\u25B6 ":" ",y.name]}),O(C,{color:"grey",children:[" \u2014 ",y.description]})]},y.id))})]}),g(v,{marginTop:1,children:g(C,{color:"grey",children:"[\u2191\u2193: select] [enter: choose] [esc: exit]"})})]})}c(ud,"AddMcpServerScreen");function dd(){const[s,e]=H(null),[t,n]=H([]),[r,i]=H(null);return Ve(()=>{const o=c(({status:l})=>{e(l),i(null)},"handleMcpStatusChanged"),a=c(({servers:l})=>{n(l),i(null)},"handleMcpServersChanged");return Ae.on(X.McpStatusChanged,o),Ae.on(X.McpServersChanged,a),()=>{Ae.off(X.McpStatusChanged,o),Ae.off(X.McpServersChanged,a)}},[]),{mcpStatus:s,allMcpServers:t,error:r,isRunning:s?.isRunning||!1,toolsCount:s?.toolsCount||0,totalRequests:s?.totalRequests||0,lastActivity:s?.lastActivity,processId:s?.processId,serverCount:t.length}}c(dd,"useMcpStatus");function fd(){const{error:s,serverCount:e,allMcpServers:t}=dd(),n=Math.min(100,process.stdout.columns||100);return O(v,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:n,children:[g(v,{marginTop:-1,marginBottom:0,flexDirection:"column",children:O(C,{bold:!0,children:["\u{1F916} Connected AI Agents:"," ",s?g(C,{color:"red",children:"error reading status"}):e===0?g(C,{color:"yellow",children:"none"}):g(C,{color:"green",children:e})]})}),!s&&e===0&&g(v,{marginTop:1,children:O(C,{color:"grey",children:["Connect your AI agents to Membrane.",g(Sc,{}),"It will give them tools and context to build integrations."]})}),t.length>0&&g(v,{flexDirection:"column",paddingLeft:2,marginTop:1,children:t.map((r,i)=>g(v,{children:O(C,{color:"grey",children:["#",i+1," ",r.agentName,": ",r.totalRequests," calls"]})},r.processId))}),g(v,{marginTop:1,children:g(C,{color:"grey",children:"[a: connect an agent]"})})]})}c(fd,"Agent");const is=c(s=>{switch(s){case"error":return"red";case"success":return"green";case"warning":return"yellow";default:return}},"getLogColor");function ua(s,e){return e<3?s.slice(0,Math.max(0,e)):s.length<=e?s:`${s.slice(0,e-3)}...`}c(ua,"truncateText");function Nr({children:s}){const{state:e,logs:t}=Se();return!e||e===x.NOT_INITIALIZED?O(v,{gap:1,flexDirection:"row",children:[g(Jc,{type:"dots"}),g(C,{children:"Initializing..."})]}):e===x.SETTING_UP?g(v,{gap:1,flexDirection:"row",children:g(C,{children:"No workspace selected. Please run `membrane init` to select a workspace."})}):e===x.ERROR?g(v,{flexDirection:"column",children:t.slice().map((n,r)=>g(C,{color:is(n.type),children:n.message},n.timestamp+r))}):s}c(Nr,"EnsureInitialized");function da({onExit:s,showEscOption:e=!0}){const[t,n]=H(""),{data:r,error:i,isLoading:o}=fi("/account"),{updateConfig:a}=Se(),l=r?.workspaces,u=o;if(st((h,w)=>{w.escape&&s?.()}),u)return O(v,{children:[g(Sn,{}),g(C,{children:" Fetching workspaces..."})]});if(i)return O(v,{flexDirection:"column",children:[O(C,{color:"red",children:["Error: ",i.message]}),g(v,{marginTop:1,children:g(C,{color:"grey",children:"Press ESC to go back"})})]});const d=l?.filter(h=>h.name.toLowerCase().includes(t.toLowerCase()))??[],f=d.map(h=>({label:h.name,value:h.id})),p=f.length,m=l?.length??0;async function y(h){const w=d.find(I=>I.id===h);if(!w)return;const{key:k,secret:T}=w;!k||!T||(await a({workspaceKey:k,workspaceSecret:T}),s?.())}return c(y,"handleSelect"),O(v,{flexDirection:"column",borderStyle:"round",borderTop:!0,width:70,paddingX:1,children:[g(v,{marginTop:-1,children:g(C,{bold:!0,children:"\u{1F4C1} Select your workspace"})}),O(v,{marginTop:1,children:[g(C,{children:"Search: "}),g(Hc,{placeholder:"Enter a search query...",onChange:n})]}),m>5&&O(C,{children:["Showing ",p," of ",m," workspaces."]}),g(v,{marginTop:1,children:g(Vc,{options:f,onChange:c(h=>{h&&y(h)},"onChange")})}),e&&g(v,{marginTop:1,children:g(C,{color:"grey",children:"Press ESC to go back"})})]})}c(da,"SelectWorkspace");function hd({currentPat:s,onSubmit:e}){const[t,n]=H(""),[r,i]=H(!1),[o,a]=H(null);return O(v,{flexDirection:"column",borderStyle:"round",borderTop:!0,width:70,paddingX:1,children:[g(v,{marginTop:-1,marginBottom:1,children:g(C,{bold:!0,children:"\u{1F511} Enter your Personal Access Token"})}),g(C,{children:"Please provide your Personal Access Token. You can find it here:"}),g(v,{marginTop:1,marginBottom:1,children:g(C,{color:"yellow",children:"https://console.integration.app/w/0/manage-account/api-token"})}),s&&g(C,{dimColor:!0,children:"Press Enter to keep your current token or type a new one."}),g(Gc,{mask:"*",placeholder:`${s?"******":"Enter your token here..."}`,value:t,onChange:n,onSubmit:c(async u=>{a(null),i(!0);try{await e(u),n("")}catch{a("Invalid token. Please try again.")}finally{i(!1)}},"handleSubmit")}),r&&g(v,{marginTop:1,children:O(C,{children:[g(Sn,{type:"dots"})," Validating token..."]})}),o&&g(C,{color:"red",children:o})]})}c(hd,"PersonalAccessTokenInput");var Xt=(s=>(s[s.Authenticate=0]="Authenticate",s[s.ConnectWorkspace=1]="ConnectWorkspace",s))(Xt||{});const pd={0:"Authenticate in Membrane",1:"Connect a Membrane Workspace"},xr=[Xt.Authenticate,Xt.ConnectWorkspace];function fa({onComplete:s}){const{config:e}=Se(),[t,n]=H(!1),[r,i]=H(0),o=!!(e?.workspaceKey&&e?.workspaceSecret),a=Ji(),l=xr[r],u=r+1,d=xr.length,f=xr.map((y,h)=>{let w="pending";return h<r?w="done":h===r&&(w="current"),{id:y,label:pd[y],status:w}});async function p(y){const h=a&&y===""?a:y,w=new Hi;try{await w.request("/account",{headers:{Authorization:`Bearer ${h}`}}),Cl(h),i(k=>k+1)}catch(k){console.error(k)}}c(p,"handlePatSubmit");function m(){n(!0),s&&s()}return c(m,"handleWorkspaceSelected"),st((y,h)=>{o&&h.escape&&s&&s()}),t?g(v,{children:g(C,{children:"\u2705 Setup complete. You are ready to go!"})}):O(v,{flexDirection:"column",alignSelf:"flex-start",gap:1,children:[O(v,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:70,children:[g(v,{marginTop:-1,marginBottom:1,children:O(C,{bold:!0,children:["\u{1F6E0}\uFE0F Setup \u2014"," ",O(C,{color:"cyan",children:["Step ",u," of ",d]}),o&&g(C,{color:"grey",children:" [esc: go back]"})]})}),g(v,{flexDirection:"column",paddingLeft:2,children:f.map(y=>g(md,{status:y.status,label:y.label},y.id))})]}),l===Xt.Authenticate&&g(hd,{currentPat:a,onSubmit:p}),l===Xt.ConnectWorkspace&&g(da,{onExit:m,showEscOption:!1})]})}c(fa,"Setup");function md({status:s,label:e}){return O(v,{children:[O(v,{width:2,children:[s==="current"&&g(Sn,{type:"dots"}),s==="done"&&g(C,{children:"\u2705"})]}),g(C,{dimColor:s!=="current",children:e})]})}c(md,"StepDisplay");function Rr(){const{stats:s}=Se(),e=Object.entries(s).filter(([t,n])=>n>0);return e.length===0?null:O(v,{flexDirection:"column",children:[g(v,{children:g(v,{width:12,children:g(C,{color:"grey",children:"Elements:"})})}),g(v,{flexDirection:"column",marginLeft:1,children:e.map(([t,n])=>O(v,{children:[g(v,{width:20,children:O(C,{children:[t,":"]})}),g(C,{color:"green",children:n})]},t))})]})}c(Rr,"ElementStats");const Pr=5,gd=6;function yd(){const{logs:s}=Se(),[e,t]=H(0),n=Math.min(100,process.stdout.columns||100),r=Pr,i=Math.max(0,s.length-r-e),o=s.length-e,a=s.slice(i,o),l=n-gd,u=e<s.length-r,d=e>0;return st((f,p)=>{if(s.length!==0)if(p.upArrow){const m=Math.max(0,s.length-r);t(y=>Math.min(m,y+1))}else p.downArrow?t(m=>Math.max(0,m-1)):(f==="G"||f==="g")&&t(0)}),O(v,{flexDirection:"column",paddingTop:1,children:[O(C,{color:"grey",children:["Recent Activity (",i+1,"-",o," of ",s.length,"):",s.length>Pr&&g(C,{color:"grey",children:" [arrows: scroll] [g: end]"})]}),a.map((f,p)=>g(v,{marginLeft:1,children:g(C,{color:is(f.type),children:ua(f.message,l)})},f.timestamp+p)),s.length>Pr&&O(v,{marginLeft:1,flexDirection:"row",children:[u&&g(C,{color:"grey",children:"\u2191 "}),d&&g(C,{color:"grey",children:"\u2193 "})]})]})}c(yd,"Logs");const os=[{value:"sync",label:"Continue (overwrite/delete)",key:""},{value:"exit",label:"Cancel",key:""}];function wd(){const{state:s,resolveConflicts:e,exit:t}=Se(),[n,r]=H(0),[i,o]=H(!1),[a,l]=H(!1);return st((u,d)=>{if(!i){if(d.ctrl&&u.toLowerCase()==="r"){l(!a);return}d.upArrow?r(f=>f>0?f-1:os.length-1):d.downArrow?r(f=>f<os.length-1?f+1:0):u.toLowerCase()==="y"?r(0):u.toLowerCase()==="n"?r(1):(d.return||u===" ")&&(o(!0),os[n].value==="sync"?e({watch:!0}):t())}}),Ve(()=>{s!==x.CONFLICTS&&i&&o(!1)},[s,i]),O(v,{flexDirection:"column",paddingTop:1,children:[g(v,{children:g(v,{flexDirection:"row",gap:2,children:g(C,{bold:!0,color:"white",children:"Conflicts with remote"})})}),g(v,{children:g(C,{color:"grey",children:"The remote workspace has changes that aren't in your local workspace:"})}),g(v,{marginTop:1,marginLeft:2,children:g(Mr,{isExpanded:a})}),O(v,{marginTop:2,flexDirection:"row",gap:1,children:[g(C,{color:"white",bold:!0,children:"What would you like to do?"}),g(C,{color:"grey",children:"[up/down, enter]"})]}),g(v,{children:i?O(v,{flexDirection:"row",gap:1,children:[g(Sn,{type:"dots"}),g(C,{color:"blue",bold:!0,children:"Syncing with remote..."})]}):g(v,{flexDirection:"column",children:os.map((u,d)=>g(v,{flexDirection:"column",children:O(v,{flexDirection:"row",gap:1,children:[g(C,{color:n===d?"cyan":"grey",children:n===d?"\u25B6":" "}),g(C,{color:n===d?"cyan":"grey",bold:n===d,children:u.label})]})},u.value))})})]})}c(wd,"ResolveChangesUI");const bd={[Oe.UPDATE]:{incoming:{label:"Elements updated in remote",description:"(to be overwritten from remote)"},outgoing:{label:"Elements updated locally",description:"(to be pushed to remote)"}},[Oe.DELETE]:{incoming:{label:"Elements not existing in remote",description:"(to be deleted locally)"},outgoing:{label:"Elements deleted locally",description:"(to be deleted from remote)"}},[Oe.CREATE]:{incoming:{label:"Elements created in remote",description:"(to be created locally)"},outgoing:{label:"Elements created locally",description:"(to be created in remote)"}}};function Mr({isExpanded:s,showControls:e=!0}){const{conflicts:t}=Se(),n=5,r=kc(()=>{const i={};return t.forEach(o=>{const a=`${o.type}-${o.direction}`;i[a]||(i[a]=[]),i[a].push(o)}),i},[t]);return g(v,{flexDirection:"column",children:Object.entries(r).map(([i,o])=>{if(o.length===0)return null;const[a,l]=i.split("-"),u=bd[a][l];return O(v,{flexDirection:"column",children:[O(v,{flexDirection:"row",gap:1,children:[O(C,{color:"yellow",children:[u.label," (",o.length,")"]}),g(C,{color:"white",children:u.description})]}),(s?o:o.slice(0,n)).map(d=>g(v,{marginLeft:2,children:O(C,{color:"grey",children:["\u2022 ",d.element.id," (",d.element.relativePath,")"]})},d.element.id)),!s&&o.length>n&&g(v,{marginLeft:2,children:O(C,{color:"cyan",children:["... and ",o.length-n," more",e?" (press Ctrl+R to show all)":""]})}),s&&o.length>n&&e&&g(v,{marginLeft:2,children:g(C,{color:"cyan",children:"(press Ctrl+R to collapse)"})})]},i)})})}c(Mr,"Conflicts");function Sd(){const{config:s,state:e,logs:t,currentWorkspace:n,pull:r}=Se(),i=n?.name,o=i?ua(i,30):s?.workspaceKey,a=Math.min(100,process.stdout.columns||100);return Ve(()=>{r({watch:!0})},[]),O(v,{flexDirection:"column",paddingX:1,borderStyle:"round",borderTop:!0,width:a,children:[g(v,{marginTop:-1,marginBottom:1,children:O(v,{flexDirection:"row",gap:1,children:[g(C,{bold:!0,children:"\u{1F504} Workspace"}),O(C,{color:Cd(e),children:[" [",vd(e),"] "]})]})}),O(v,{children:[g(v,{width:12,children:g(C,{color:"grey",children:"Local:"})}),g(C,{color:"grey",children:process.cwd()})]}),O(v,{children:[g(v,{width:12,children:g(C,{color:"grey",children:"Remote:"})}),s?.workspaceKey?O(C,{color:"grey",children:[o," [o: open in console] [w: change]"]}):O(C,{children:[g(C,{color:"yellow",children:"not selected"})," [w: select]"]})]}),e===x.CONFLICTS?g(wd,{}):O(Rs,{children:[g(v,{paddingTop:1,children:g(Rr,{})}),t.length>0&&g(yd,{})]})]})}c(Sd,"Workspace");function vd(s){switch(s){case x.PULLING:return"pulling";case x.PUSHING:return"pushing";case x.CONFLICTS:return"conflicts";case x.SYNCED:return"synced";case x.ERROR:return"error";case x.WATCHING:return"tracking changes";case x.RESOLVING:return"resolving";case x.NOT_SYNCED:return"not synced";case x.INITIALIZED:return"initialized";case x.SETTING_UP:return"setup required";default:return"unknown"}}c(vd,"getStatusDisplay");function Cd(s){switch(s){case x.PULLING:return"yellow";case x.PUSHING:return"yellow";case x.CONFLICTS:return"red";case x.SYNCED:return"green";case x.ERROR:return"red";case x.WATCHING:return"green";case x.RESOLVING:return"yellow";case x.NOT_SYNCED:return"grey";case x.SETTING_UP:return"yellow";default:return"grey"}}c(Cd,"getStatusColor");const kd="https://console.integration.app/w";function _d(){const s=ld(),e=_c(!0),{exit:t,state:n}=Se(),[r,i]=H(null),o=r??(n===x.SETTING_UP?"setup":"main");st(l=>{o==="main"&&(l==="w"&&i("workspace-selection"),l==="a"&&i("add-mcp-server"),l==="o"&&n===x.INITIALIZED&&a(),l==="s"&&i("setup"))});async function a(){try{const l=await Vi(s),u=`${kd}/${l}`,d=process.platform==="darwin"?"open":process.platform==="win32"?"start":"xdg-open";Wc(`${d} "${u}"`)}catch(l){console.error("Failed to open workspace:",l),t()}}return c(a,"handleOpenWorkspace"),Ve(()=>(e.current=!0,()=>{e.current=!1}),[]),o==="workspace-selection"?g(da,{onExit:c(()=>i(null),"onExit")}):o==="add-mcp-server"?g(ud,{onExit:c(()=>i(null),"onExit"),onComplete:c(()=>i(null),"onComplete")}):o==="setup"?g(fa,{onComplete:c(()=>i(null),"onComplete")},Date.now()):g(Nr,{children:O(v,{flexDirection:"column",children:[g(v,{flexGrow:1,children:g(fd,{})}),g(Sd,{}),g(v,{paddingLeft:2,children:g(C,{color:"grey",children:"[s: (re-)setup]"})})]})})}c(_d,"Main");const Lr=vc(process.argv.slice(2)),ha=Lr.cwd?wc(Lr.cwd):process.cwd(),Td=new aa(Yt.Agent,ha);Lr.verbose&&b.setVerboseMode(!0);const Ed=c(()=>g(rs,{cwd:ha,membraneCLIService:Td,children:g(_d,{})}),"App");function Od(){wn(g(Ed,{}))}c(Od,"runAgent");function et(s){if(s.type){if(Array.isArray(s.type))return{anyOf:s.type.map(t=>et({...s,type:t}))};if(s.type==="array"){const t={type:"array",items:s.items?et(s.items):{type:"object"}};return s.title&&(t.title=s.title),s.description&&(t.description=s.description),s.minItems!==void 0&&(t.minItems=s.minItems),s.maxItems!==void 0&&(t.maxItems=s.maxItems),s.uniqueItems!==void 0&&(t.uniqueItems=s.uniqueItems),t}}const e={};if(s.type&&!Array.isArray(s.type)&&(e.type=s.type),s.title&&(e.title=s.title),s.description&&(e.description=s.description),s.format&&(e.format=s.format),s.enum&&(e.enum=s.enum),s.default!==void 0&&(e.default=s.default),s.minimum!==void 0&&(e.minimum=s.minimum),s.maximum!==void 0&&(e.maximum=s.maximum),s.minLength!==void 0&&(e.minLength=s.minLength),s.maxLength!==void 0&&(e.maxLength=s.maxLength),s.maxItems!==void 0&&(e.maxItems=s.maxItems),s.readOnly!==void 0&&(e.readOnly=s.readOnly),s.writeOnly!==void 0&&(e.writeOnly=s.writeOnly),s.examples&&s.examples.length>0&&(e.example=s.examples[0]),s.properties){e.properties={};for(const[t,n]of Object.entries(s.properties))e.properties[t]=et(n)}return s.anyOf&&(e.anyOf=s.anyOf.map(et)),s.additionalProperties!==void 0&&(typeof s.additionalProperties=="boolean"?e.additionalProperties=s.additionalProperties:e.additionalProperties=et(s.additionalProperties)),s.required&&(e.required=s.required),e}c(et,"convertDataSchemaToOpenAPI");function Ad(s){const{membraneInterfaces:{actions:e}}=s,t=Id(e);return JSON.stringify({openapi:"3.0.0",info:{title:"Membrane Actions API",version:"1.0.0",description:"Generated OpenAPI specification for Membrane actions"},paths:{},components:{schemas:t}},null,2)}c(Ad,"generateOpenAPIContent");function Id(s){const e={};return s.forEach(t=>{const n=bi(wi(t.key)),r={type:"object",properties:{id:{type:"string",description:"Request ID"},action:{type:"string",enum:[t.key]}},required:["id","action"]};if(t?.inputSchema){const a=et(t.inputSchema);a.properties&&(r.properties={...r.properties,...a.properties}),a.required&&(r.required=[...r.required||[],...a.required])}e[`${n}Request`]=r;const i={type:"object",properties:{id:{type:"string",description:"Response ID"},success:{type:"boolean"},data:{type:"object"}},required:["id","success"]},o=t?.customOutputSchema||t?.outputSchema;if(o){const a=et(o);i.properties={...i.properties,data:a}}e[`${n}Response`]=i}),e}c(Id,"generateOpenAPISchemas");function $d(s){const{membraneInterfaces:{actions:e}}=s,t=new Xc({indentNumberOfSpaces:2,newLine:`
|
|
142
|
+
`});return t.writeLine("// Generated TypeScript definitions for Membrane actions"),t.writeLine(`// Actions: ${e.map(n=>n.key).join(", ")}`),t.newLine(),Nd(t,e),t.newLine(),t.toString()}c($d,"generateTypeScriptContent");function Nd(s,e){e.forEach((t,n)=>{const r=bi(wi(t.key));s.writeLine(`export interface ${r}Request {`),s.indent(()=>{s.writeLine("readonly id: string"),s.writeLine(`readonly action: '${t.key}'`),t?.inputSchema?.properties&&pa(s,t.inputSchema.properties,t.inputSchema.required||[])}),s.writeLine("}"),s.writeLine(`export interface ${r}Response {`),s.indent(()=>{s.writeLine("readonly id: string"),s.writeLine("readonly success: boolean");const i=t?.customOutputSchema||t?.outputSchema;if(i){const o=i.properties;o&&Object.keys(o).length>0?(s.writeLine("readonly data: {"),s.indent(()=>{pa(s,o,i?.required||[])}),s.writeLine("}")):s.writeLine("readonly data?: Record<string, unknown>")}else s.writeLine("readonly data?: Record<string, unknown>")}),s.writeLine("}"),n<e.length-1&&s.newLine()})}c(Nd,"generateTypeScriptInterfaces");function pa(s,e,t){Object.entries(e).forEach(([n,r])=>{const o=t.includes(n)?"":"?",a=Dr(r);s.writeLine(`readonly ${n}${o}: ${a}`)})}c(pa,"generateTypeScriptProperties");function Dr(s){return s.type==="string"?s.enum?s.enum.map(e=>`'${e}'`).join(" | "):"string":s.type==="number"||s.type==="integer"?"number":s.type==="boolean"?"boolean":s.type==="array"?`${s.items?Dr(s.items):"unknown"}[]`:s.type==="object"?s.properties?`{ ${Object.entries(s.properties).map(([t,n])=>{const i=(s.required||[]).includes(t)?"":"?",o=Dr(n);return`readonly ${t}${i}: ${o}`}).join("; ")} }`:"Record<string, unknown>":"unknown"}c(Dr,"convertJsonSchemaToTypeScript");async function xd(s){const{out:e,target:t}=s;await M.promises.mkdir(e,{recursive:!0});const n=Rd(s),r=`${t}.${Pd(t)}`,i=K.join(e,r);await M.promises.writeFile(i,n,"utf-8")}c(xd,"generateCode");function Rd(s){switch(s.target){case"openapi":return Ad(s);case"typescript":return $d(s);default:throw new Error(`Unsupported target: ${s.target}`)}}c(Rd,"generateContent");function Pd(s){switch(s){case"openapi":return"json";case"typescript":return"ts";default:throw new Error(`Unsupported target: ${s}`)}}c(Pd,"getFileExtension");const jr=c(()=>[_.yellow("\u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510"),_.yellow("\u2502 \u26A0\uFE0F EXPERIMENTAL FEATURE WARNING \u2502"),_.yellow("\u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524"),_.yellow("\u2502 The codegen command is experimental and subject to rapid changes.\u2502"),_.yellow("\u2502 Features, APIs, and file structures may change without notice. \u2502"),_.yellow("\u2502 Use in production environments is not recommended. \u2502"),_.yellow("\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518"),""].join(`
|
|
143
143
|
`),"createExperimentalWarning$1");function Md(s,e){s.command("codegen").alias("install").description("\u26A0\uFE0F EXPERIMENTAL: Generate code for easy integration within projects - This feature is experimental and will be changing rapidly. Use at your own risk. (Alias: install)").requiredOption("--actions <actions>",'Comma-separated list of action names (e.g., "list-files,get-file-by-id")').requiredOption("--out <path>","Output directory for generated files").requiredOption("--target <type>","Target format: openapi or typescript").requiredOption("--schemasOnly","Generate only schemas without implementation").addHelpText("after",jr()).addHelpText("after",["",_.bold("Examples:"),` ${_.gray("\u25B8")} ${_.cyan("membrane codegen --actions list-files,get-file-by-id --out src/generated --target openapi --schemasOnly")}`,` ${_.gray("\u25B8")} ${_.cyan("membrane install --actions delete-file --out src/generated --target typescript --schemasOnly")}`,"",jr()].join(`
|
|
144
|
-
`)).action(async t=>{try{console.warn(jr()),console.error(_.cyan("\u{1F527} Membrane Codegen")),console.error("Status: Loading membrane interfaces...");const n=await Ld(e,t),r={out:t.out,target:t.target,schemasOnly:t.schemasOnly,membraneInterfaces:n};console.error(`Output: ${r.out}`),console.error(`Target: ${r.target}`),console.error(`Schemas Only: ${r.schemasOnly?"Yes":"No"}`),console.error(`Loaded ${n.actions.length} membrane interfaces`),console.error("Status: Generating code..."),await xd(r),console.error(_.green("\u2705 Code generation completed successfully!")),process.exit(0)}catch(n){console.error(_.red("\u274C Code generation failed:")),console.error(n instanceof Error?n.message:"Unknown error occurred"),process.exit(1)}})}c(Md,"setupCodegenCommand");async function Ld(s,e){return await s.fetchElements(),{actions:[...s.getSyncedElementsByType(
|
|
144
|
+
`)).action(async t=>{try{console.warn(jr()),console.error(_.cyan("\u{1F527} Membrane Codegen")),console.error("Status: Loading membrane interfaces...");const n=await Ld(e,t),r={out:t.out,target:t.target,schemasOnly:t.schemasOnly,membraneInterfaces:n};console.error(`Output: ${r.out}`),console.error(`Target: ${r.target}`),console.error(`Schemas Only: ${r.schemasOnly?"Yes":"No"}`),console.error(`Loaded ${n.actions.length} membrane interfaces`),console.error("Status: Generating code..."),await xd(r),console.error(_.green("\u2705 Code generation completed successfully!")),process.exit(0)}catch(n){console.error(_.red("\u274C Code generation failed:")),console.error(n instanceof Error?n.message:"Unknown error occurred"),process.exit(1)}})}c(Md,"setupCodegenCommand");async function Ld(s,e){return await s.fetchElements(),{actions:[...s.getSyncedElementsByType(D.Action).map(t=>t.data)].filter(t=>e.actions.includes(t.key||""))}}c(Ld,"loadMembraneInterfaces");function Dd(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(`
|
|
145
145
|
`)).action(t=>{t.key&&t.secret?Ft.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)):wn(rt.createElement(rs,{membraneCLIService:e,children:rt.createElement(fa,{onComplete:c(()=>process.exit(0),"onComplete")})}))})}c(Dd,"setupInitCommand");async function ma(s,e,t){const n={iss:s,exp:Math.floor(Date.now()/1e3)+600,isAdmin:!0};return t&&(n.id=t),Fs.sign(n,e)}c(ma,"generateAdminAccessToken");async function jd(s,e){return(await qs.get(`${s}/docs-json`,{headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json"}})).data}c(jd,"fetchOpenApiSchema");function Ot(s,e=!0,t,n=new Set){if(!s)return e?U.string():U.string().optional();if(s.$ref){const i=s.$ref.replace("#/components/schemas/","");if(n.has(i))return U.any();if(n.add(i),t?.schemas?.[i]){const o=t.schemas[i];return Ot(o,e,t,n)}return U.any()}let r;if(s.type==="object"||s.properties){const i={};if(s.properties)for(const[o,a]of Object.entries(s.properties)){const l=s.required?.includes(o)??!1;i[o]=Ot(a,l,t,n)}r=Object.keys(i).length>0?U.object(i):U.record(U.string(),U.any()),s.additionalProperties&&typeof s.additionalProperties=="object"&&(r=U.record(U.string(),U.any()))}else if(s.type==="array"){const i=s.items?Ot(s.items,!0,t,n):U.any();r=U.array(i)}else if(s.anyOf)r=U.any();else{switch(s.type){case"integer":r=U.coerce.number().int();break;case"number":r=U.coerce.number();break;case"boolean":r=U.coerce.boolean();break;case"string":default:r=U.string();break}s.format==="uuid"?r=U.string().uuid():s.format==="email"?r=U.string().email():s.format==="date"?r=U.string().regex(/^\d{4}-\d{2}-\d{2}$/):s.format==="date-time"&&(r=U.string().datetime()),s.enum&&(r=U.enum(s.enum)),(s.type==="integer"||s.type==="number")&&(s.minimum!==void 0&&(r=r.min(s.minimum)),s.maximum!==void 0&&(r=r.max(s.maximum))),s.type==="string"&&(s.minLength!==void 0&&(r=r.min(s.minLength)),s.maxLength!==void 0&&(r=r.max(s.maxLength)))}return e?r:r.optional()}c(Ot,"convertOpenApiSchemaToZod");function ga(s){const e=s.match(/\{([^}]+)\}/g);return e?e.map(t=>t.slice(1,-1)):[]}c(ga,"extractPathParameters");function Fd(s,e,t,n,r,i,o,a){const l=s.operationId||`${t}_${e.replace(/[^a-zA-Z0-9]/g,"_")}`,u=s.description||s.summary||`${t.toUpperCase()} ${e}`,d={},f={},p={};if(s.parameters){for(const y of s.parameters)if(y.in==="path")f[y.name]=Ot(y.schema,!0,o).describe(y.description||`Path parameter: ${y.name}`);else if(y.in==="query"){const h=y.required===!0;p[y.name]=Ot(y.schema,h,o).describe(y.description||`Query parameter: ${y.name}`)}}if(Object.keys(f).length>0&&(d.params=U.object(f).describe("Path parameters")),Object.keys(p).length>0&&(d.query=U.object(p).describe("Query parameters")),s.requestBody&&s.requestBody.content){const y=s.requestBody.required===!0;if(s.requestBody.content["application/json"]){const h=s.requestBody.content["application/json"].schema;h?d.body=Ot(h,y,o).describe("Request body (JSON)"):d.body=U.any().describe("Request body (JSON)")}else s.requestBody.content["application/octet-stream"]||s.requestBody.content["text/plain"]?d.body=y?U.string().describe("Request body (binary/text)"):U.string().optional().describe("Request body (binary/text)"):d.body=U.any().describe("Request body")}const m=Object.keys(d).length>0?U.object(d):U.object({});return{name:l,description:u,parameters:m,async execute(y){try{const h=ga(e);if(h.length>0){if(!y.params)throw new Error(`Missing required path parameters: ${h.join(", ")}`);const N=h.filter(L=>!(L in y.params));if(N.length>0)throw new Error(`Missing required path parameters: ${N.join(", ")}`)}let w=`${n}${e}`;if(y.params)for(const[N,L]of Object.entries(y.params)){const A=`{${N}}`;w.includes(A)&&(w=w.replace(A,String(L)))}const k=ga(w);if(k.length>0)throw new Error(`Unresolved path parameters: ${k.join(", ")}`);const T=new URLSearchParams;if(y.query)for(const[N,L]of Object.entries(y.query))L!=null&&T.append(N,String(L));T.toString()&&(w+=`?${T.toString()}`);const I=await ma(r,i,a),E={method:t.toUpperCase(),headers:{Authorization:`Bearer ${I}`}};y.body&&t.toLowerCase()!=="get"&&(s.requestBody?.content?.["application/json"]?(E.headers["Content-Type"]="application/json",E.data=y.body):s.requestBody?.content?.["application/octet-stream"]?(E.headers["Content-Type"]="application/octet-stream",E.data=y.body):s.requestBody?.content?.["text/plain"]?(E.headers["Content-Type"]="text/plain",E.data=y.body):(E.headers["Content-Type"]="application/json",E.data=y.body));const $=await qs.request({url:w,...E});return{content:[{type:"text",text:JSON.stringify($.data,null,2)}]}}catch(h){return qs.isAxiosError(h)?{content:[{type:"text",text:`Error: ${h.response?.data?`HTTP ${h.response.status}: ${h.response.statusText} - ${JSON.stringify(h.response.data)}`:`HTTP ${h.response?.status||"unknown"}: ${h.message}`}`}],isError:!0}:h instanceof Error?{content:[{type:"text",text:`Error: API call failed: ${h.message}`}],isError:!0}:{content:[{type:"text",text:"Error: API call failed with unknown error"}],isError:!0}}}}}c(Fd,"createApiTool");function qd(s,e,t,n,r){const i=[];if(!s.paths)return i;const o=s.components||{};for(const[a,l]of Object.entries(s.paths))if(typeof l=="object"&&l!==null){for(const[u,d]of Object.entries(l))if(["get","post","put","delete","patch"].includes(u)&&d&&typeof d=="object"){const f=Fd(d,a,u,e,t,n,o,r);i.push(f)}}return i}c(qd,"convertOpenApiToTools");function Kd(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(`
|
|
146
146
|
`)).action(async()=>{try{process.env.FASTMCP_SUPPRESS_WARNINGS="true";const e=$n();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||Js,n=await ma(e.workspaceKey,e.workspaceSecret,e.testCustomerId),r=await jd(t,n),i=qd(r,t,e.workspaceKey,e.workspaceSecret,e.testCustomerId),o=new Qc({name:"Membrane API",instructions:`This MCP server lets you interact with Membrane to configure, run, and troubleshoot integrations.
|
|
147
147
|
Use it for anything related to Membrane or integrations.
|
|
@@ -150,24 +150,24 @@ ${_.red(t.error)}`:""):console.debug(_.gray(e),t?.error?`
|
|
|
150
150
|
${_.red(t.error)}`:"")}static step(e,t){}static header(e){console.debug(),console.debug(_.bold.cyan(`\u25B6 ${e}`)),console.debug()}static table(e,t){if(e.length===0)return;const n=t||Object.keys(e[0]),r=e.map(i=>{const o={};return n.forEach(a=>{o[a]=i[a]}),o});console.table(r,n)}static divider(){}}function Wd(s){s.command("open").description("Open the workspace in the browser").addHelpText("after",["","Examples:"," membrane open # Open workspace in browser",""].join(`
|
|
151
151
|
`)).action(async()=>{try{Q.header("Opening Workspace in Browser"),Q.info("Loading configuration...");const e=$n();if(!e)throw new Error("No configuration found. Please set MEMBRANE_WORKSPACE_KEY and MEMBRANE_WORKSPACE_SECRET environment variables, or run `membrane init` first.");if(!e.workspaceKey||!e.workspaceSecret)throw new Error("Missing workspace credentials");Q.info("Retrieving workspace ID...");const n=`https://console.integration.app/w/${await Vi(process.cwd())}`;Q.info(`Opening ${n}...`);const{default:r}=await import("open");await r(n),Q.success("Browser opened successfully")}catch(e){e instanceof Error&&(Q.error(e.message),process.exit(1)),Q.error("An unknown error occurred"),process.exit(1)}})}c(Wd,"setupOpenCommand");function Jd(s){return g(Nr,{children:g(Hd,{options:s})})}c(Jd,"Pull");function Hd({options:s}){const{logs:e,state:t,conflicts:n,pull:r}=Se();Ve(()=>{r(s)},[]);const i=t===x.CONFLICTS;return O(v,{flexDirection:"column",children:[e.slice().map((o,a)=>g(C,{color:is(o.type),children:o.message},o.timestamp+a)),i&&O(Rs,{children:[O(C,{color:"yellow",bold:!0,children:["Found ",n.length," conflicts with remote:"]}),g(Mr,{isExpanded:!s.watch,showControls:!1}),g(C,{color:"red",children:"Out of sync with remote, use --force to overwrite conflict changes"})]}),t===x.SYNCED&&g(Rr,{})]})}c(Hd,"PullActivity");function ya(){const s=setInterval(()=>{},3e4),e=c(()=>{clearInterval(s)},"cleanup");return process.on("SIGINT",()=>{e(),process.exit(0)}),process.on("SIGTERM",()=>{e(),process.exit(0)}),process.on("exit",e),()=>{}}c(ya,"getWatchModeCallback");function Vd(s,e){s.command("pull").description("Pull workspace data from specified workspace").option("--force","Overwrite conflicts with remote data",!1).option("--watch","Watch for changes and pull automatically",!1).option("--all-connectors","Include public connectors in export - to push to the self-hosted instance",!1).option("--save-logs","Save logs to a file",!1).option("--verbose","Show verbose debug logs",!1).addHelpText("after",["","Examples:"," membrane pull # Pull from default workspace"," membrane pull --force # Overwrite conflicts with remote data"," membrane pull --all-connectors # Pull all connectors"," membrane pull --watch # Watch for changes and pull automatically",""].join(`
|
|
152
152
|
`)).action(async t=>{const n=t.watch?ya():()=>process.exit(0);wn(rt.createElement(rs,{membraneCLIService:e,children:rt.createElement(Jd,{...t,onComplete:n})}))})}c(Vd,"setupPullCommand");function Gd(s){return g(Nr,{children:g(zd,{options:s})})}c(Gd,"Push");function zd({options:s}){const{logs:e,state:t,conflicts:n,push:r}=Se();Ve(()=>{r(s)},[]);const i=t===x.CONFLICTS;return O(v,{flexDirection:"column",children:[e.slice().map((o,a)=>g(C,{color:is(o.type),children:o.message},o.timestamp+a)),i&&O(Rs,{children:[O(C,{color:"yellow",bold:!0,children:["Found ",n.length," conflicts with remote:"]}),g(Mr,{isExpanded:!s.watch,showControls:!1}),g(C,{color:"red",children:"Out of sync with remote, use --force to overwrite conflict changes"})]}),t===x.SYNCED&&g(Rr,{})]})}c(zd,"PushActivity");function Yd(s,e){s.command("push").description("Push workspace data to specified workspace").option("--force","Overwrite conflicts with local data",!1).option("--watch","Watch for changes and push automatically",!1).option("--save-logs","Save logs to a file",!1).option("--verbose","Show verbose debug logs",!1).addHelpText("after",["","Examples:"," membrane push # Push to default workspace"," membrane push --force # Overwrite conflicts with local data",""].join(`
|
|
153
|
-
`)).action(async t=>{const n=t.watch?ya():()=>process.exit(0);wn(rt.createElement(rs,{membraneCLIService:e,children:rt.createElement(Gd,{...t,onComplete:n})}))})}c(Yd,"setupPushCommand");class Xd{static{c(this,"BaseRunner")}constructor(e={}){if(this.options=e,this.fsPaths=Hs(),e&&typeof e=="object"){const t=e;"client"in t&&t.client&&(this.client=t.client),"workspace"in t&&(this.workspace=t.workspace)}}client;workspace;fsPaths}function P(s,e,t,n,r){if(typeof e=="function"?s!==e||!0:!e.has(s))throw new TypeError("Cannot write private member to an object whose class did not declare it");return e.set(s,t),t}c(P,"__classPrivateFieldSet");function S(s,e,t,n){if(t==="a"&&!n)throw new TypeError("Private accessor was defined without a getter");if(typeof e=="function"?s!==e||!n:!e.has(s))throw new TypeError("Cannot read private member from an object whose class did not declare it");return t==="m"?n:t==="a"?n.call(s):n?n.value:e.get(s)}c(S,"__classPrivateFieldGet");let wa=c(function(){const{crypto:s}=globalThis;if(s?.randomUUID)return wa=s.randomUUID.bind(s),s.randomUUID();const e=new Uint8Array(1),t=s?()=>s.getRandomValues(e)[0]:()=>Math.random()*255&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,n=>(+n^t()&15>>+n/4).toString(16))},"uuid4");function Qt(s){return typeof s=="object"&&s!==null&&("name"in s&&s.name==="AbortError"||"message"in s&&String(s.message).includes("FetchRequestCanceledException"))}c(Qt,"isAbortError");const Fr=c(s=>{if(s instanceof Error)return s;if(typeof s=="object"&&s!==null){try{if(Object.prototype.toString.call(s)==="[object Error]"){const e=new Error(s.message,s.cause?{cause:s.cause}:{});return s.stack&&(e.stack=s.stack),s.cause&&!e.cause&&(e.cause=s.cause),s.name&&(e.name=s.name),e}}catch{}try{return new Error(JSON.stringify(s))}catch{}}return new Error(s)},"castToError");class
|
|
153
|
+
`)).action(async t=>{const n=t.watch?ya():()=>process.exit(0);wn(rt.createElement(rs,{membraneCLIService:e,children:rt.createElement(Gd,{...t,onComplete:n})}))})}c(Yd,"setupPushCommand");class Xd{static{c(this,"BaseRunner")}constructor(e={}){if(this.options=e,this.fsPaths=Hs(),e&&typeof e=="object"){const t=e;"client"in t&&t.client&&(this.client=t.client),"workspace"in t&&(this.workspace=t.workspace)}}client;workspace;fsPaths}function P(s,e,t,n,r){if(typeof e=="function"?s!==e||!0:!e.has(s))throw new TypeError("Cannot write private member to an object whose class did not declare it");return e.set(s,t),t}c(P,"__classPrivateFieldSet");function S(s,e,t,n){if(t==="a"&&!n)throw new TypeError("Private accessor was defined without a getter");if(typeof e=="function"?s!==e||!n:!e.has(s))throw new TypeError("Cannot read private member from an object whose class did not declare it");return t==="m"?n:t==="a"?n.call(s):n?n.value:e.get(s)}c(S,"__classPrivateFieldGet");let wa=c(function(){const{crypto:s}=globalThis;if(s?.randomUUID)return wa=s.randomUUID.bind(s),s.randomUUID();const e=new Uint8Array(1),t=s?()=>s.getRandomValues(e)[0]:()=>Math.random()*255&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,n=>(+n^t()&15>>+n/4).toString(16))},"uuid4");function Qt(s){return typeof s=="object"&&s!==null&&("name"in s&&s.name==="AbortError"||"message"in s&&String(s.message).includes("FetchRequestCanceledException"))}c(Qt,"isAbortError");const Fr=c(s=>{if(s instanceof Error)return s;if(typeof s=="object"&&s!==null){try{if(Object.prototype.toString.call(s)==="[object Error]"){const e=new Error(s.message,s.cause?{cause:s.cause}:{});return s.stack&&(e.stack=s.stack),s.cause&&!e.cause&&(e.cause=s.cause),s.name&&(e.name=s.name),e}}catch{}try{return new Error(JSON.stringify(s))}catch{}}return new Error(s)},"castToError");class j extends Error{static{c(this,"AnthropicError")}}class re extends j{static{c(this,"APIError")}constructor(e,t,n,r){super(`${re.makeMessage(e,t,n)}`),this.status=e,this.headers=r,this.requestID=r?.get("request-id"),this.error=t}static makeMessage(e,t,n){const r=t?.message?typeof t.message=="string"?t.message:JSON.stringify(t.message):t?JSON.stringify(t):n;return e&&r?`${e} ${r}`:e?`${e} status code (no body)`:r||"(no status code or body)"}static generate(e,t,n,r){if(!e||!r)return new as({message:n,cause:Fr(t)});const i=t;return e===400?new Sa(e,i,n,r):e===401?new va(e,i,n,r):e===403?new Ca(e,i,n,r):e===404?new ka(e,i,n,r):e===409?new _a(e,i,n,r):e===422?new Ta(e,i,n,r):e===429?new Ea(e,i,n,r):e>=500?new Oa(e,i,n,r):new re(e,i,n,r)}}class ve extends re{static{c(this,"APIUserAbortError")}constructor({message:e}={}){super(void 0,void 0,e||"Request was aborted.",void 0)}}class as extends re{static{c(this,"APIConnectionError")}constructor({message:e,cause:t}){super(void 0,void 0,e||"Connection error.",void 0),t&&(this.cause=t)}}class ba extends as{static{c(this,"APIConnectionTimeoutError")}constructor({message:e}={}){super({message:e??"Request timed out."})}}class Sa extends re{static{c(this,"BadRequestError")}}class va extends re{static{c(this,"AuthenticationError")}}class Ca extends re{static{c(this,"PermissionDeniedError")}}class ka extends re{static{c(this,"NotFoundError")}}class _a extends re{static{c(this,"ConflictError")}}class Ta extends re{static{c(this,"UnprocessableEntityError")}}class Ea extends re{static{c(this,"RateLimitError")}}class Oa extends re{static{c(this,"InternalServerError")}}const Qd=/^[a-z][a-z0-9+.-]*:/i,Zd=c(s=>Qd.test(s),"isAbsoluteURL");let qr=c(s=>(qr=Array.isArray,qr(s)),"isArray"),Aa=qr;function Ia(s){return typeof s!="object"?{}:s??{}}c(Ia,"maybeObj");function ef(s){if(!s)return!0;for(const e in s)return!1;return!0}c(ef,"isEmptyObj");function tf(s,e){return Object.prototype.hasOwnProperty.call(s,e)}c(tf,"hasOwn");const nf=c((s,e)=>{if(typeof e!="number"||!Number.isInteger(e))throw new j(`${s} must be an integer`);if(e<0)throw new j(`${s} must be a positive integer`);return e},"validatePositiveInteger"),$a=c(s=>{try{return JSON.parse(s)}catch{return}},"safeJSON"),sf=c(s=>new Promise(e=>setTimeout(e,s)),"sleep"),At="0.62.0",rf=c(()=>typeof window<"u"&&typeof window.document<"u"&&typeof navigator<"u","isRunningInBrowser");function of(){return typeof Deno<"u"&&Deno.build!=null?"deno":typeof EdgeRuntime<"u"?"edge":Object.prototype.toString.call(typeof globalThis.process<"u"?globalThis.process:0)==="[object process]"?"node":"unknown"}c(of,"getDetectedPlatform");const af=c(()=>{const s=of();if(s==="deno")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":At,"X-Stainless-OS":xa(Deno.build.os),"X-Stainless-Arch":Na(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":typeof Deno.version=="string"?Deno.version:Deno.version?.deno??"unknown"};if(typeof EdgeRuntime<"u")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":At,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if(s==="node")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":At,"X-Stainless-OS":xa(globalThis.process.platform??"unknown"),"X-Stainless-Arch":Na(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};const e=cf();return e?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":At,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${e.browser}`,"X-Stainless-Runtime-Version":e.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":At,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}},"getPlatformProperties");function cf(){if(typeof navigator>"u"||!navigator)return null;const s=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(const{key:e,pattern:t}of s){const n=t.exec(navigator.userAgent);if(n){const r=n[1]||0,i=n[2]||0,o=n[3]||0;return{browser:e,version:`${r}.${i}.${o}`}}}return null}c(cf,"getBrowserInfo");const Na=c(s=>s==="x32"?"x32":s==="x86_64"||s==="x64"?"x64":s==="arm"?"arm":s==="aarch64"||s==="arm64"?"arm64":s?`other:${s}`:"unknown","normalizeArch"),xa=c(s=>(s=s.toLowerCase(),s.includes("ios")?"iOS":s==="android"?"Android":s==="darwin"?"MacOS":s==="win32"?"Windows":s==="freebsd"?"FreeBSD":s==="openbsd"?"OpenBSD":s==="linux"?"Linux":s?`Other:${s}`:"Unknown"),"normalizePlatform");let Ra;const lf=c(()=>Ra??(Ra=af()),"getPlatformHeaders");function uf(){if(typeof fetch<"u")return fetch;throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new Anthropic({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}c(uf,"getDefaultFetch");function Pa(...s){const e=globalThis.ReadableStream;if(typeof e>"u")throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new e(...s)}c(Pa,"makeReadableStream");function Ma(s){let e=Symbol.asyncIterator in s?s[Symbol.asyncIterator]():s[Symbol.iterator]();return Pa({start(){},async pull(t){const{done:n,value:r}=await e.next();n?t.close():t.enqueue(r)},async cancel(){await e.return?.()}})}c(Ma,"ReadableStreamFrom");function Kr(s){if(s[Symbol.asyncIterator])return s;const e=s.getReader();return{async next(){try{const t=await e.read();return t?.done&&e.releaseLock(),t}catch(t){throw e.releaseLock(),t}},async return(){const t=e.cancel();return e.releaseLock(),await t,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}c(Kr,"ReadableStreamToAsyncIterable");async function df(s){if(s===null||typeof s!="object")return;if(s[Symbol.asyncIterator]){await s[Symbol.asyncIterator]().return?.();return}const e=s.getReader(),t=e.cancel();e.releaseLock(),await t}c(df,"CancelReadableStream");const ff=c(({headers:s,body:e})=>({bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(e)}),"FallbackEncoder");function hf(s){let e=0;for(const r of s)e+=r.length;const t=new Uint8Array(e);let n=0;for(const r of s)t.set(r,n),n+=r.length;return t}c(hf,"concatBytes");let La;function Br(s){let e;return(La??(e=new globalThis.TextEncoder,La=e.encode.bind(e)))(s)}c(Br,"encodeUTF8");let Da;function ja(s){let e;return(Da??(e=new globalThis.TextDecoder,Da=e.decode.bind(e)))(s)}c(ja,"decodeUTF8");var fe,he;class Zt{static{c(this,"LineDecoder")}constructor(){fe.set(this,void 0),he.set(this,void 0),P(this,fe,new Uint8Array),P(this,he,null)}decode(e){if(e==null)return[];const t=e instanceof ArrayBuffer?new Uint8Array(e):typeof e=="string"?Br(e):e;P(this,fe,hf([S(this,fe,"f"),t]));const n=[];let r;for(;(r=pf(S(this,fe,"f"),S(this,he,"f")))!=null;){if(r.carriage&&S(this,he,"f")==null){P(this,he,r.index);continue}if(S(this,he,"f")!=null&&(r.index!==S(this,he,"f")+1||r.carriage)){n.push(ja(S(this,fe,"f").subarray(0,S(this,he,"f")-1))),P(this,fe,S(this,fe,"f").subarray(S(this,he,"f"))),P(this,he,null);continue}const i=S(this,he,"f")!==null?r.preceding-1:r.preceding,o=ja(S(this,fe,"f").subarray(0,i));n.push(o),P(this,fe,S(this,fe,"f").subarray(r.index)),P(this,he,null)}return n}flush(){return S(this,fe,"f").length?this.decode(`
|
|
154
154
|
`):[]}}fe=new WeakMap,he=new WeakMap,Zt.NEWLINE_CHARS=new Set([`
|
|
155
|
-
`,"\r"]),Zt.NEWLINE_REGEXP=/\r\n|[\n\r]/g;function pf(s,e){for(let r=e??0;r<s.length;r++){if(s[r]===10)return{preceding:r,index:r+1,carriage:!1};if(s[r]===13)return{preceding:r,index:r+1,carriage:!0}}return null}c(pf,"findNewlineIndex");function mf(s){for(let n=0;n<s.length-1;n++){if(s[n]===10&&s[n+1]===10||s[n]===13&&s[n+1]===13)return n+2;if(s[n]===13&&s[n+1]===10&&n+3<s.length&&s[n+2]===13&&s[n+3]===10)return n+4}return-1}c(mf,"findDoubleNewlineIndex");const cs={off:0,error:200,warn:300,info:400,debug:500},Fa=c((s,e,t)=>{if(s){if(tf(cs,s))return s;ie(t).warn(`${e} was set to ${JSON.stringify(s)}, expected one of ${JSON.stringify(Object.keys(cs))}`)}},"parseLogLevel");function en(){}c(en,"noop");function ls(s,e,t){return!e||cs[s]>cs[t]?en:e[s].bind(e)}c(ls,"makeLogFn");const gf={error:en,warn:en,info:en,debug:en};let qa=new WeakMap;function ie(s){const e=s.logger,t=s.logLevel??"off";if(!e)return gf;const n=qa.get(e);if(n&&n[0]===t)return n[1];const r={error:ls("error",e,t),warn:ls("warn",e,t),info:ls("info",e,t),debug:ls("debug",e,t)};return qa.set(e,[t,r]),r}c(ie,"loggerFor");const tt=c(s=>(s.options&&(s.options={...s.options},delete s.options.headers),s.headers&&(s.headers=Object.fromEntries((s.headers instanceof Headers?[...s.headers]:Object.entries(s.headers)).map(([e,t])=>[e,e.toLowerCase()==="x-api-key"||e.toLowerCase()==="authorization"||e.toLowerCase()==="cookie"||e.toLowerCase()==="set-cookie"?"***":t]))),"retryOfRequestLogID"in s&&(s.retryOfRequestLogID&&(s.retryOf=s.retryOfRequestLogID),delete s.retryOfRequestLogID),s),"formatRequestDetails");var tn;class Ee{static{c(this,"Stream")}constructor(e,t,n){this.iterator=e,tn.set(this,void 0),this.controller=t,P(this,tn,n)}static fromSSEResponse(e,t,n){let r=!1;const i=n?ie(n):console;async function*o(){if(r)throw new
|
|
156
|
-
`);n.enqueue(o)}catch(r){n.error(r)}},async cancel(){await t.return?.()}})}}async function*yf(s,e){if(!s.body)throw e.abort(),typeof globalThis.navigator<"u"&&globalThis.navigator.product==="ReactNative"?new
|
|
157
|
-
`),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],i}if(this.chunks.push(e),e.startsWith(":"))return null;let[t,n,r]=Sf(e,":");return r.startsWith(" ")&&(r=r.substring(1)),t==="event"?this.event=r:t==="data"&&this.data.push(r),null}}function Sf(s,e){const t=s.indexOf(e);return t!==-1?[s.substring(0,t),e,s.substring(t+e.length)]:[s,"",""]}c(Sf,"partition");async function Ka(s,e){const{response:t,requestLogID:n,retryOfRequestLogID:r,startTime:i}=e,o=await(async()=>{if(e.options.stream)return ie(s).debug("response",t.status,t.url,t.headers,t.body),e.options.__streamClass?e.options.__streamClass.fromSSEResponse(t,e.controller):Ee.fromSSEResponse(t,e.controller);if(t.status===204)return null;if(e.options.__binaryResponse)return t;const l=t.headers.get("content-type")?.split(";")[0]?.trim();if(l?.includes("application/json")||l?.endsWith("+json")){const f=await t.json();return Ba(f,t)}return await t.text()})();return ie(s).debug(`[${n}] response parsed`,tt({retryOfRequestLogID:r,url:t.url,status:t.status,body:o,durationMs:Date.now()-i})),o}c(Ka,"defaultParseResponse");function Ba(s,e){return!s||typeof s!="object"||Array.isArray(s)?s:Object.defineProperty(s,"_request_id",{value:e.headers.get("request-id"),enumerable:!1})}c(Ba,"addRequestID");var nn;class Is extends Promise{static{c(this,"APIPromise")}constructor(e,t,n=Ka){super(r=>{r(null)}),this.responsePromise=t,this.parseResponse=n,nn.set(this,void 0),P(this,nn,e)}_thenUnwrap(e){return new Is(S(this,nn,"f"),this.responsePromise,async(t,n)=>Ba(e(await this.parseResponse(t,n),n),n.response))}asResponse(){return this.responsePromise.then(e=>e.response)}async withResponse(){const[e,t]=await Promise.all([this.parse(),this.asResponse()]);return{data:e,response:t,request_id:t.headers.get("request-id")}}parse(){return this.parsedPromise||(this.parsedPromise=this.responsePromise.then(e=>this.parseResponse(S(this,nn,"f"),e))),this.parsedPromise}then(e,t){return this.parse().then(e,t)}catch(e){return this.parse().catch(e)}finally(e){return this.parse().finally(e)}}nn=new WeakMap;var us;class vf{static{c(this,"AbstractPage")}constructor(e,t,n,r){us.set(this,void 0),P(this,us,e),this.options=r,this.response=t,this.body=n}hasNextPage(){return this.getPaginatedItems().length?this.nextPageRequestOptions()!=null:!1}async getNextPage(){const e=this.nextPageRequestOptions();if(!e)throw new
|
|
155
|
+
`,"\r"]),Zt.NEWLINE_REGEXP=/\r\n|[\n\r]/g;function pf(s,e){for(let r=e??0;r<s.length;r++){if(s[r]===10)return{preceding:r,index:r+1,carriage:!1};if(s[r]===13)return{preceding:r,index:r+1,carriage:!0}}return null}c(pf,"findNewlineIndex");function mf(s){for(let n=0;n<s.length-1;n++){if(s[n]===10&&s[n+1]===10||s[n]===13&&s[n+1]===13)return n+2;if(s[n]===13&&s[n+1]===10&&n+3<s.length&&s[n+2]===13&&s[n+3]===10)return n+4}return-1}c(mf,"findDoubleNewlineIndex");const cs={off:0,error:200,warn:300,info:400,debug:500},Fa=c((s,e,t)=>{if(s){if(tf(cs,s))return s;ie(t).warn(`${e} was set to ${JSON.stringify(s)}, expected one of ${JSON.stringify(Object.keys(cs))}`)}},"parseLogLevel");function en(){}c(en,"noop");function ls(s,e,t){return!e||cs[s]>cs[t]?en:e[s].bind(e)}c(ls,"makeLogFn");const gf={error:en,warn:en,info:en,debug:en};let qa=new WeakMap;function ie(s){const e=s.logger,t=s.logLevel??"off";if(!e)return gf;const n=qa.get(e);if(n&&n[0]===t)return n[1];const r={error:ls("error",e,t),warn:ls("warn",e,t),info:ls("info",e,t),debug:ls("debug",e,t)};return qa.set(e,[t,r]),r}c(ie,"loggerFor");const tt=c(s=>(s.options&&(s.options={...s.options},delete s.options.headers),s.headers&&(s.headers=Object.fromEntries((s.headers instanceof Headers?[...s.headers]:Object.entries(s.headers)).map(([e,t])=>[e,e.toLowerCase()==="x-api-key"||e.toLowerCase()==="authorization"||e.toLowerCase()==="cookie"||e.toLowerCase()==="set-cookie"?"***":t]))),"retryOfRequestLogID"in s&&(s.retryOfRequestLogID&&(s.retryOf=s.retryOfRequestLogID),delete s.retryOfRequestLogID),s),"formatRequestDetails");var tn;class Ee{static{c(this,"Stream")}constructor(e,t,n){this.iterator=e,tn.set(this,void 0),this.controller=t,P(this,tn,n)}static fromSSEResponse(e,t,n){let r=!1;const i=n?ie(n):console;async function*o(){if(r)throw new j("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");r=!0;let a=!1;try{for await(const l of yf(e,t)){if(l.event==="completion")try{yield JSON.parse(l.data)}catch(u){throw i.error("Could not parse message into JSON:",l.data),i.error("From chunk:",l.raw),u}if(l.event==="message_start"||l.event==="message_delta"||l.event==="message_stop"||l.event==="content_block_start"||l.event==="content_block_delta"||l.event==="content_block_stop")try{yield JSON.parse(l.data)}catch(u){throw i.error("Could not parse message into JSON:",l.data),i.error("From chunk:",l.raw),u}if(l.event!=="ping"&&l.event==="error")throw new re(void 0,$a(l.data)??l.data,void 0,e.headers)}a=!0}catch(l){if(Qt(l))return;throw l}finally{a||t.abort()}}return c(o,"iterator"),new Ee(o,t,n)}static fromReadableStream(e,t,n){let r=!1;async function*i(){const a=new Zt,l=Kr(e);for await(const u of l)for(const d of a.decode(u))yield d;for(const u of a.flush())yield u}c(i,"iterLines");async function*o(){if(r)throw new j("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");r=!0;let a=!1;try{for await(const l of i())a||l&&(yield JSON.parse(l));a=!0}catch(l){if(Qt(l))return;throw l}finally{a||t.abort()}}return c(o,"iterator"),new Ee(o,t,n)}[(tn=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){const e=[],t=[],n=this.iterator(),r=c(i=>({next:c(()=>{if(i.length===0){const o=n.next();e.push(o),t.push(o)}return i.shift()},"next")}),"teeIterator");return[new Ee(()=>r(e),this.controller,S(this,tn,"f")),new Ee(()=>r(t),this.controller,S(this,tn,"f"))]}toReadableStream(){const e=this;let t;return Pa({async start(){t=e[Symbol.asyncIterator]()},async pull(n){try{const{value:r,done:i}=await t.next();if(i)return n.close();const o=Br(JSON.stringify(r)+`
|
|
156
|
+
`);n.enqueue(o)}catch(r){n.error(r)}},async cancel(){await t.return?.()}})}}async function*yf(s,e){if(!s.body)throw e.abort(),typeof globalThis.navigator<"u"&&globalThis.navigator.product==="ReactNative"?new j("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api"):new j("Attempted to iterate over a response with no body");const t=new bf,n=new Zt,r=Kr(s.body);for await(const i of wf(r))for(const o of n.decode(i)){const a=t.decode(o);a&&(yield a)}for(const i of n.flush()){const o=t.decode(i);o&&(yield o)}}c(yf,"_iterSSEMessages");async function*wf(s){let e=new Uint8Array;for await(const t of s){if(t==null)continue;const n=t instanceof ArrayBuffer?new Uint8Array(t):typeof t=="string"?Br(t):t;let r=new Uint8Array(e.length+n.length);r.set(e),r.set(n,e.length),e=r;let i;for(;(i=mf(e))!==-1;)yield e.slice(0,i),e=e.slice(i)}e.length>0&&(yield e)}c(wf,"iterSSEChunks");class bf{static{c(this,"SSEDecoder")}constructor(){this.event=null,this.data=[],this.chunks=[]}decode(e){if(e.endsWith("\r")&&(e=e.substring(0,e.length-1)),!e){if(!this.event&&!this.data.length)return null;const i={event:this.event,data:this.data.join(`
|
|
157
|
+
`),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],i}if(this.chunks.push(e),e.startsWith(":"))return null;let[t,n,r]=Sf(e,":");return r.startsWith(" ")&&(r=r.substring(1)),t==="event"?this.event=r:t==="data"&&this.data.push(r),null}}function Sf(s,e){const t=s.indexOf(e);return t!==-1?[s.substring(0,t),e,s.substring(t+e.length)]:[s,"",""]}c(Sf,"partition");async function Ka(s,e){const{response:t,requestLogID:n,retryOfRequestLogID:r,startTime:i}=e,o=await(async()=>{if(e.options.stream)return ie(s).debug("response",t.status,t.url,t.headers,t.body),e.options.__streamClass?e.options.__streamClass.fromSSEResponse(t,e.controller):Ee.fromSSEResponse(t,e.controller);if(t.status===204)return null;if(e.options.__binaryResponse)return t;const l=t.headers.get("content-type")?.split(";")[0]?.trim();if(l?.includes("application/json")||l?.endsWith("+json")){const f=await t.json();return Ba(f,t)}return await t.text()})();return ie(s).debug(`[${n}] response parsed`,tt({retryOfRequestLogID:r,url:t.url,status:t.status,body:o,durationMs:Date.now()-i})),o}c(Ka,"defaultParseResponse");function Ba(s,e){return!s||typeof s!="object"||Array.isArray(s)?s:Object.defineProperty(s,"_request_id",{value:e.headers.get("request-id"),enumerable:!1})}c(Ba,"addRequestID");var nn;class Is extends Promise{static{c(this,"APIPromise")}constructor(e,t,n=Ka){super(r=>{r(null)}),this.responsePromise=t,this.parseResponse=n,nn.set(this,void 0),P(this,nn,e)}_thenUnwrap(e){return new Is(S(this,nn,"f"),this.responsePromise,async(t,n)=>Ba(e(await this.parseResponse(t,n),n),n.response))}asResponse(){return this.responsePromise.then(e=>e.response)}async withResponse(){const[e,t]=await Promise.all([this.parse(),this.asResponse()]);return{data:e,response:t,request_id:t.headers.get("request-id")}}parse(){return this.parsedPromise||(this.parsedPromise=this.responsePromise.then(e=>this.parseResponse(S(this,nn,"f"),e))),this.parsedPromise}then(e,t){return this.parse().then(e,t)}catch(e){return this.parse().catch(e)}finally(e){return this.parse().finally(e)}}nn=new WeakMap;var us;class vf{static{c(this,"AbstractPage")}constructor(e,t,n,r){us.set(this,void 0),P(this,us,e),this.options=r,this.response=t,this.body=n}hasNextPage(){return this.getPaginatedItems().length?this.nextPageRequestOptions()!=null:!1}async getNextPage(){const e=this.nextPageRequestOptions();if(!e)throw new j("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");return await S(this,us,"f").requestAPIList(this.constructor,e)}async*iterPages(){let e=this;for(yield e;e.hasNextPage();)e=await e.getNextPage(),yield e}async*[(us=new WeakMap,Symbol.asyncIterator)](){for await(const e of this.iterPages())for(const t of e.getPaginatedItems())yield t}}class Cf extends Is{static{c(this,"PagePromise")}constructor(e,t,n){super(e,t,async(r,i)=>new n(r,i.response,await Ka(r,i),i.options))}async*[Symbol.asyncIterator](){const e=await this;for await(const t of e)yield t}}class sn extends vf{static{c(this,"Page")}constructor(e,t,n,r){super(e,t,n,r),this.data=n.data||[],this.has_more=n.has_more||!1,this.first_id=n.first_id||null,this.last_id=n.last_id||null}getPaginatedItems(){return this.data??[]}hasNextPage(){return this.has_more===!1?!1:super.hasNextPage()}nextPageRequestOptions(){if(this.options.query?.before_id){const t=this.first_id;return t?{...this.options,query:{...Ia(this.options.query),before_id:t}}:null}const e=this.last_id;return e?{...this.options,query:{...Ia(this.options.query),after_id:e}}:null}}const Ua=c(()=>{if(typeof File>"u"){const{process:s}=globalThis,e=typeof s?.versions?.node=="string"&&parseInt(s.versions.node.split("."))<20;throw new Error("`File` is not defined as a global, which is required for file uploads."+(e?" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.":""))}},"checkFileSupport");function It(s,e,t){return Ua(),new File(s,e??"unknown_file",t)}c(It,"makeFile");function ds(s){return(typeof s=="object"&&s!==null&&("name"in s&&s.name&&String(s.name)||"url"in s&&s.url&&String(s.url)||"filename"in s&&s.filename&&String(s.filename)||"path"in s&&s.path&&String(s.path))||"").split(/[\\/]/).pop()||void 0}c(ds,"getName");const Wa=c(s=>s!=null&&typeof s=="object"&&typeof s[Symbol.asyncIterator]=="function","isAsyncIterable"),kf=c(async(s,e)=>({...s,body:await Tf(s.body,e)}),"multipartFormRequestOptions"),Ja=new WeakMap;function _f(s){const e=typeof s=="function"?s:s.fetch,t=Ja.get(e);if(t)return t;const n=(async()=>{try{const r="Response"in e?e.Response:(await e("data:,")).constructor,i=new FormData;return i.toString()!==await new r(i).text()}catch{return!0}})();return Ja.set(e,n),n}c(_f,"supportsFormData");const Tf=c(async(s,e)=>{if(!await _f(e))throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class.");const t=new FormData;return await Promise.all(Object.entries(s||{}).map(([n,r])=>Ur(t,n,r))),t},"createForm"),Ef=c(s=>s instanceof Blob&&"name"in s,"isNamedBlob"),Ur=c(async(s,e,t)=>{if(t!==void 0){if(t==null)throw new TypeError(`Received null for "${e}"; to pass null in FormData, you must use the string 'null'`);if(typeof t=="string"||typeof t=="number"||typeof t=="boolean")s.append(e,String(t));else if(t instanceof Response){let n={};const r=t.headers.get("Content-Type");r&&(n={type:r}),s.append(e,It([await t.blob()],ds(t),n))}else if(Wa(t))s.append(e,It([await new Response(Ma(t)).blob()],ds(t)));else if(Ef(t))s.append(e,It([t],ds(t),{type:t.type}));else if(Array.isArray(t))await Promise.all(t.map(n=>Ur(s,e+"[]",n)));else if(typeof t=="object")await Promise.all(Object.entries(t).map(([n,r])=>Ur(s,`${e}[${n}]`,r)));else throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${t} instead`)}},"addFormValue"),Ha=c(s=>s!=null&&typeof s=="object"&&typeof s.size=="number"&&typeof s.type=="string"&&typeof s.text=="function"&&typeof s.slice=="function"&&typeof s.arrayBuffer=="function","isBlobLike"),Of=c(s=>s!=null&&typeof s=="object"&&typeof s.name=="string"&&typeof s.lastModified=="number"&&Ha(s),"isFileLike"),Af=c(s=>s!=null&&typeof s=="object"&&typeof s.url=="string"&&typeof s.blob=="function","isResponseLike");async function If(s,e,t){if(Ua(),s=await s,e||(e=ds(s)),Of(s))return s instanceof File&&e==null&&t==null?s:It([await s.arrayBuffer()],e??s.name,{type:s.type,lastModified:s.lastModified,...t});if(Af(s)){const r=await s.blob();return e||(e=new URL(s.url).pathname.split(/[\\/]/).pop()),It(await Wr(r),e,t)}const n=await Wr(s);if(!t?.type){const r=n.find(i=>typeof i=="object"&&"type"in i&&i.type);typeof r=="string"&&(t={...t,type:r})}return It(n,e,t)}c(If,"toFile");async function Wr(s){let e=[];if(typeof s=="string"||ArrayBuffer.isView(s)||s instanceof ArrayBuffer)e.push(s);else if(Ha(s))e.push(s instanceof Blob?s:await s.arrayBuffer());else if(Wa(s))for await(const t of s)e.push(...await Wr(t));else{const t=s?.constructor?.name;throw new Error(`Unexpected data type: ${typeof s}${t?`; constructor: ${t}`:""}${$f(s)}`)}return e}c(Wr,"getBytes");function $f(s){return typeof s!="object"||s===null?"":`; props: [${Object.getOwnPropertyNames(s).map(t=>`"${t}"`).join(", ")}]`}c($f,"propsForError");class Re{static{c(this,"APIResource")}constructor(e){this._client=e}}const Va=Symbol.for("brand.privateNullableHeaders");function*Nf(s){if(!s)return;if(Va in s){const{values:n,nulls:r}=s;yield*n.entries();for(const i of r)yield[i,null];return}let e=!1,t;s instanceof Headers?t=s.entries():Aa(s)?t=s:(e=!0,t=Object.entries(s??{}));for(let n of t){const r=n[0];if(typeof r!="string")throw new TypeError("expected header name to be a string");const i=Aa(n[1])?n[1]:[n[1]];let o=!1;for(const a of i)a!==void 0&&(e&&!o&&(o=!0,yield[r,null]),yield[r,a])}}c(Nf,"iterateHeaders");const G=c(s=>{const e=new Headers,t=new Set;for(const n of s){const r=new Set;for(const[i,o]of Nf(n)){const a=i.toLowerCase();r.has(a)||(e.delete(i),r.add(a)),o===null?(e.delete(i),t.add(a)):(e.append(i,o),t.delete(a))}}return{[Va]:!0,values:e,nulls:t}},"buildHeaders");function Ga(s){return s.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}c(Ga,"encodeURIPath");const za=Object.freeze(Object.create(null)),xf=c((s=Ga)=>c(function(t,...n){if(t.length===1)return t[0];let r=!1;const i=[],o=t.reduce((d,f,p)=>{/[?#]/.test(f)&&(r=!0);const m=n[p];let y=(r?encodeURIComponent:s)(""+m);return p!==n.length&&(m==null||typeof m=="object"&&m.toString===Object.getPrototypeOf(Object.getPrototypeOf(m.hasOwnProperty??za)??za)?.toString)&&(y=m+"",i.push({start:d.length+f.length,length:y.length,error:`Value of type ${Object.prototype.toString.call(m).slice(8,-1)} is not a valid path parameter`})),d+f+(p===n.length?"":y)},""),a=o.split(/[?#]/,1)[0],l=/(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi;let u;for(;(u=l.exec(a))!==null;)i.push({start:u.index,length:u[0].length,error:`Value "${u[0]}" can't be safely passed as a path parameter`});if(i.sort((d,f)=>d.start-f.start),i.length>0){let d=0;const f=i.reduce((p,m)=>{const y=" ".repeat(m.start-d),h="^".repeat(m.length);return d=m.start+m.length,p+y+h},"");throw new j(`Path parameters result in path with invalid segments:
|
|
158
158
|
${i.map(p=>p.error).join(`
|
|
159
159
|
`)}
|
|
160
160
|
${o}
|
|
161
|
-
${f}`)}return o},"path2"),"createPathTagFunction"),Ce=xf(Ga);class Ya extends Re{static{c(this,"Files")}list(e={},t){const{betas:n,...r}=e??{};return this._client.getAPIList("/v1/files",sn,{query:r,...t,headers:G([{"anthropic-beta":[...n??[],"files-api-2025-04-14"].toString()},t?.headers])})}delete(e,t={},n){const{betas:r}=t??{};return this._client.delete(Ce`/v1/files/${e}`,{...n,headers:G([{"anthropic-beta":[...r??[],"files-api-2025-04-14"].toString()},n?.headers])})}download(e,t={},n){const{betas:r}=t??{};return this._client.get(Ce`/v1/files/${e}/content`,{...n,headers:G([{"anthropic-beta":[...r??[],"files-api-2025-04-14"].toString(),Accept:"application/binary"},n?.headers]),__binaryResponse:!0})}retrieveMetadata(e,t={},n){const{betas:r}=t??{};return this._client.get(Ce`/v1/files/${e}`,{...n,headers:G([{"anthropic-beta":[...r??[],"files-api-2025-04-14"].toString()},n?.headers])})}upload(e,t){const{betas:n,...r}=e;return this._client.post("/v1/files",kf({body:r,...t,headers:G([{"anthropic-beta":[...n??[],"files-api-2025-04-14"].toString()},t?.headers])},this._client))}}let Xa=class extends Re{static{c(this,"Models")}retrieve(e,t={},n){const{betas:r}=t??{};return this._client.get(Ce`/v1/models/${e}?beta=true`,{...n,headers:G([{...r?.toString()!=null?{"anthropic-beta":r?.toString()}:void 0},n?.headers])})}list(e={},t){const{betas:n,...r}=e??{};return this._client.getAPIList("/v1/models?beta=true",sn,{query:r,...t,headers:G([{...n?.toString()!=null?{"anthropic-beta":n?.toString()}:void 0},t?.headers])})}};class $s{static{c(this,"JSONLDecoder")}constructor(e,t){this.iterator=e,this.controller=t}async*decoder(){const e=new Zt;for await(const t of this.iterator)for(const n of e.decode(t))yield JSON.parse(n);for(const t of e.flush())yield JSON.parse(t)}[Symbol.asyncIterator](){return this.decoder()}static fromResponse(e,t){if(!e.body)throw t.abort(),typeof globalThis.navigator<"u"&&globalThis.navigator.product==="ReactNative"?new D("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api"):new D("Attempted to iterate over a response with no body");return new $s(Kr(e.body),t)}}let Qa=class extends Re{static{c(this,"Batches")}create(e,t){const{betas:n,...r}=e;return this._client.post("/v1/messages/batches?beta=true",{body:r,...t,headers:G([{"anthropic-beta":[...n??[],"message-batches-2024-09-24"].toString()},t?.headers])})}retrieve(e,t={},n){const{betas:r}=t??{};return this._client.get(Ce`/v1/messages/batches/${e}?beta=true`,{...n,headers:G([{"anthropic-beta":[...r??[],"message-batches-2024-09-24"].toString()},n?.headers])})}list(e={},t){const{betas:n,...r}=e??{};return this._client.getAPIList("/v1/messages/batches?beta=true",sn,{query:r,...t,headers:G([{"anthropic-beta":[...n??[],"message-batches-2024-09-24"].toString()},t?.headers])})}delete(e,t={},n){const{betas:r}=t??{};return this._client.delete(Ce`/v1/messages/batches/${e}?beta=true`,{...n,headers:G([{"anthropic-beta":[...r??[],"message-batches-2024-09-24"].toString()},n?.headers])})}cancel(e,t={},n){const{betas:r}=t??{};return this._client.post(Ce`/v1/messages/batches/${e}/cancel?beta=true`,{...n,headers:G([{"anthropic-beta":[...r??[],"message-batches-2024-09-24"].toString()},n?.headers])})}async results(e,t={},n){const r=await this.retrieve(e);if(!r.results_url)throw new D(`No batch \`results_url\`; Has it finished processing? ${r.processing_status} - ${r.id}`);const{betas:i}=t??{};return this._client.get(r.results_url,{...n,headers:G([{"anthropic-beta":[...i??[],"message-batches-2024-09-24"].toString(),Accept:"application/binary"},n?.headers]),stream:!0,__binaryResponse:!0})._thenUnwrap((o,a)=>$s.fromResponse(a.response,a.controller))}};const Rf=c(s=>{let e=0,t=[];for(;e<s.length;){let n=s[e];if(n==="\\"){e++;continue}if(n==="{"){t.push({type:"brace",value:"{"}),e++;continue}if(n==="}"){t.push({type:"brace",value:"}"}),e++;continue}if(n==="["){t.push({type:"paren",value:"["}),e++;continue}if(n==="]"){t.push({type:"paren",value:"]"}),e++;continue}if(n===":"){t.push({type:"separator",value:":"}),e++;continue}if(n===","){t.push({type:"delimiter",value:","}),e++;continue}if(n==='"'){let a="",l=!1;for(n=s[++e];n!=='"';){if(e===s.length){l=!0;break}if(n==="\\"){if(e++,e===s.length){l=!0;break}a+=n+s[e],n=s[++e]}else a+=n,n=s[++e]}n=s[++e],l||t.push({type:"string",value:a});continue}if(n&&/\s/.test(n)){e++;continue}let i=/[0-9]/;if(n&&i.test(n)||n==="-"||n==="."){let a="";for(n==="-"&&(a+=n,n=s[++e]);n&&i.test(n)||n===".";)a+=n,n=s[++e];t.push({type:"number",value:a});continue}let o=/[a-z]/i;if(n&&o.test(n)){let a="";for(;n&&o.test(n)&&e!==s.length;)a+=n,n=s[++e];if(a=="true"||a=="false"||a==="null")t.push({type:"name",value:a});else{e++;continue}continue}e++}return t},"tokenize"),$t=c(s=>{if(s.length===0)return s;let e=s[s.length-1];switch(e.type){case"separator":return s=s.slice(0,s.length-1),$t(s);case"number":let t=e.value[e.value.length-1];if(t==="."||t==="-")return s=s.slice(0,s.length-1),$t(s);case"string":let n=s[s.length-2];if(n?.type==="delimiter")return s=s.slice(0,s.length-1),$t(s);if(n?.type==="brace"&&n.value==="{")return s=s.slice(0,s.length-1),$t(s);break;case"delimiter":return s=s.slice(0,s.length-1),$t(s)}return s},"strip"),Pf=c(s=>{let e=[];return s.map(t=>{t.type==="brace"&&(t.value==="{"?e.push("}"):e.splice(e.lastIndexOf("}"),1)),t.type==="paren"&&(t.value==="["?e.push("]"):e.splice(e.lastIndexOf("]"),1))}),e.length>0&&e.reverse().map(t=>{t==="}"?s.push({type:"brace",value:"}"}):t==="]"&&s.push({type:"paren",value:"]"})}),s},"unstrip"),Mf=c(s=>{let e="";return s.map(t=>{switch(t.type){case"string":e+='"'+t.value+'"';break;default:e+=t.value;break}}),e},"generate"),Za=c(s=>JSON.parse(Mf(Pf($t(Rf(s))))),"partialParse");var ge,We,rn,fs,on,an,hs,cn,Pe,ln,ps,ms,Nt,gs,ys,Jr,ec,ws,Hr,Vr,Gr,tc;const nc="__json_buf";function sc(s){return s.type==="tool_use"||s.type==="server_tool_use"||s.type==="mcp_tool_use"}c(sc,"tracksToolInput$1");class Ns{static{c(this,"BetaMessageStream")}constructor(){ge.add(this),this.messages=[],this.receivedMessages=[],We.set(this,void 0),this.controller=new AbortController,rn.set(this,void 0),fs.set(this,()=>{}),on.set(this,()=>{}),an.set(this,void 0),hs.set(this,()=>{}),cn.set(this,()=>{}),Pe.set(this,{}),ln.set(this,!1),ps.set(this,!1),ms.set(this,!1),Nt.set(this,!1),gs.set(this,void 0),ys.set(this,void 0),ws.set(this,e=>{if(P(this,ps,!0),Qt(e)&&(e=new ve),e instanceof ve)return P(this,ms,!0),this._emit("abort",e);if(e instanceof D)return this._emit("error",e);if(e instanceof Error){const t=new D(e.message);return t.cause=e,this._emit("error",t)}return this._emit("error",new D(String(e)))}),P(this,rn,new Promise((e,t)=>{P(this,fs,e,"f"),P(this,on,t,"f")})),P(this,an,new Promise((e,t)=>{P(this,hs,e,"f"),P(this,cn,t,"f")})),S(this,rn,"f").catch(()=>{}),S(this,an,"f").catch(()=>{})}get response(){return S(this,gs,"f")}get request_id(){return S(this,ys,"f")}async withResponse(){const e=await S(this,rn,"f");if(!e)throw new Error("Could not resolve a `Response` object");return{data:this,response:e,request_id:e.headers.get("request-id")}}static fromReadableStream(e){const t=new Ns;return t._run(()=>t._fromReadableStream(e)),t}static createMessage(e,t,n){const r=new Ns;for(const i of t.messages)r._addMessageParam(i);return r._run(()=>r._createMessage(e,{...t,stream:!0},{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}})),r}_run(e){e().then(()=>{this._emitFinal(),this._emit("end")},S(this,ws,"f"))}_addMessageParam(e){this.messages.push(e)}_addMessage(e,t=!0){this.receivedMessages.push(e),t&&this._emit("message",e)}async _createMessage(e,t,n){const r=n?.signal;let i;r&&(r.aborted&&this.controller.abort(),i=this.controller.abort.bind(this.controller),r.addEventListener("abort",i));try{S(this,ge,"m",Hr).call(this);const{response:o,data:a}=await e.create({...t,stream:!0},{...n,signal:this.controller.signal}).withResponse();this._connected(o);for await(const l of a)S(this,ge,"m",Vr).call(this,l);if(a.controller.signal?.aborted)throw new ve;S(this,ge,"m",Gr).call(this)}finally{r&&i&&r.removeEventListener("abort",i)}}_connected(e){this.ended||(P(this,gs,e),P(this,ys,e?.headers.get("request-id")),S(this,fs,"f").call(this,e),this._emit("connect"))}get ended(){return S(this,ln,"f")}get errored(){return S(this,ps,"f")}get aborted(){return S(this,ms,"f")}abort(){this.controller.abort()}on(e,t){return(S(this,Pe,"f")[e]||(S(this,Pe,"f")[e]=[])).push({listener:t}),this}off(e,t){const n=S(this,Pe,"f")[e];if(!n)return this;const r=n.findIndex(i=>i.listener===t);return r>=0&&n.splice(r,1),this}once(e,t){return(S(this,Pe,"f")[e]||(S(this,Pe,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise((t,n)=>{P(this,Nt,!0),e!=="error"&&this.once("error",n),this.once(e,t)})}async done(){P(this,Nt,!0),await S(this,an,"f")}get currentMessage(){return S(this,We,"f")}async finalMessage(){return await this.done(),S(this,ge,"m",Jr).call(this)}async finalText(){return await this.done(),S(this,ge,"m",ec).call(this)}_emit(e,...t){if(S(this,ln,"f"))return;e==="end"&&(P(this,ln,!0),S(this,hs,"f").call(this));const n=S(this,Pe,"f")[e];if(n&&(S(this,Pe,"f")[e]=n.filter(r=>!r.once),n.forEach(({listener:r})=>r(...t))),e==="abort"){const r=t[0];!S(this,Nt,"f")&&!n?.length&&Promise.reject(r),S(this,on,"f").call(this,r),S(this,cn,"f").call(this,r),this._emit("end");return}if(e==="error"){const r=t[0];!S(this,Nt,"f")&&!n?.length&&Promise.reject(r),S(this,on,"f").call(this,r),S(this,cn,"f").call(this,r),this._emit("end")}}_emitFinal(){this.receivedMessages.at(-1)&&this._emit("finalMessage",S(this,ge,"m",Jr).call(this))}async _fromReadableStream(e,t){const n=t?.signal;let r;n&&(n.aborted&&this.controller.abort(),r=this.controller.abort.bind(this.controller),n.addEventListener("abort",r));try{S(this,ge,"m",Hr).call(this),this._connected(null);const i=Ee.fromReadableStream(e,this.controller);for await(const o of i)S(this,ge,"m",Vr).call(this,o);if(i.controller.signal?.aborted)throw new ve;S(this,ge,"m",Gr).call(this)}finally{n&&r&&n.removeEventListener("abort",r)}}[(We=new WeakMap,rn=new WeakMap,fs=new WeakMap,on=new WeakMap,an=new WeakMap,hs=new WeakMap,cn=new WeakMap,Pe=new WeakMap,ln=new WeakMap,ps=new WeakMap,ms=new WeakMap,Nt=new WeakMap,gs=new WeakMap,ys=new WeakMap,ws=new WeakMap,ge=new WeakSet,Jr=c(function(){if(this.receivedMessages.length===0)throw new D("stream ended without producing a Message with role=assistant");return this.receivedMessages.at(-1)},"_BetaMessageStream_getFinalMessage2"),ec=c(function(){if(this.receivedMessages.length===0)throw new D("stream ended without producing a Message with role=assistant");const t=this.receivedMessages.at(-1).content.filter(n=>n.type==="text").map(n=>n.text);if(t.length===0)throw new D("stream ended without producing a content block with type=text");return t.join(" ")},"_BetaMessageStream_getFinalText2"),Hr=c(function(){this.ended||P(this,We,void 0)},"_BetaMessageStream_beginRequest2"),Vr=c(function(t){if(this.ended)return;const n=S(this,ge,"m",tc).call(this,t);switch(this._emit("streamEvent",t,n),t.type){case"content_block_delta":{const r=n.content.at(-1);switch(t.delta.type){case"text_delta":{r.type==="text"&&this._emit("text",t.delta.text,r.text||"");break}case"citations_delta":{r.type==="text"&&this._emit("citation",t.delta.citation,r.citations??[]);break}case"input_json_delta":{sc(r)&&r.input&&this._emit("inputJson",t.delta.partial_json,r.input);break}case"thinking_delta":{r.type==="thinking"&&this._emit("thinking",t.delta.thinking,r.thinking);break}case"signature_delta":{r.type==="thinking"&&this._emit("signature",r.signature);break}default:t.delta}break}case"message_stop":{this._addMessageParam(n),this._addMessage(n,!0);break}case"content_block_stop":{this._emit("contentBlock",n.content.at(-1));break}case"message_start":{P(this,We,n);break}}},"_BetaMessageStream_addStreamEvent2"),Gr=c(function(){if(this.ended)throw new D("stream has ended, this shouldn't happen");const t=S(this,We,"f");if(!t)throw new D("request ended without sending any chunks");return P(this,We,void 0),t},"_BetaMessageStream_endRequest2"),tc=c(function(t){let n=S(this,We,"f");if(t.type==="message_start"){if(n)throw new D(`Unexpected event order, got ${t.type} before receiving "message_stop"`);return t.message}if(!n)throw new D(`Unexpected event order, got ${t.type} before "message_start"`);switch(t.type){case"message_stop":return n;case"message_delta":return n.container=t.delta.container,n.stop_reason=t.delta.stop_reason,n.stop_sequence=t.delta.stop_sequence,n.usage.output_tokens=t.usage.output_tokens,t.usage.input_tokens!=null&&(n.usage.input_tokens=t.usage.input_tokens),t.usage.cache_creation_input_tokens!=null&&(n.usage.cache_creation_input_tokens=t.usage.cache_creation_input_tokens),t.usage.cache_read_input_tokens!=null&&(n.usage.cache_read_input_tokens=t.usage.cache_read_input_tokens),t.usage.server_tool_use!=null&&(n.usage.server_tool_use=t.usage.server_tool_use),n;case"content_block_start":return n.content.push(t.content_block),n;case"content_block_delta":{const r=n.content.at(t.index);switch(t.delta.type){case"text_delta":{r?.type==="text"&&(n.content[t.index]={...r,text:(r.text||"")+t.delta.text});break}case"citations_delta":{r?.type==="text"&&(n.content[t.index]={...r,citations:[...r.citations??[],t.delta.citation]});break}case"input_json_delta":{if(r&&sc(r)){let i=r[nc]||"";i+=t.delta.partial_json;const o={...r};if(Object.defineProperty(o,nc,{value:i,enumerable:!1,writable:!0}),i)try{o.input=Za(i)}catch(a){const l=new D(`Unable to parse tool parameter JSON from model. Please retry your request or adjust your prompt. Error: ${a}. JSON: ${i}`);S(this,ws,"f").call(this,l)}n.content[t.index]=o}break}case"thinking_delta":{r?.type==="thinking"&&(n.content[t.index]={...r,thinking:r.thinking+t.delta.thinking});break}case"signature_delta":{r?.type==="thinking"&&(n.content[t.index]={...r,signature:t.delta.signature});break}default:t.delta}return n}case"content_block_stop":return n}},"_BetaMessageStream_accumulateMessage2"),Symbol.asyncIterator)](){const e=[],t=[];let n=!1;return this.on("streamEvent",r=>{const i=t.shift();i?i.resolve(r):e.push(r)}),this.on("end",()=>{n=!0;for(const r of t)r.resolve(void 0);t.length=0}),this.on("abort",r=>{n=!0;for(const i of t)i.reject(r);t.length=0}),this.on("error",r=>{n=!0;for(const i of t)i.reject(r);t.length=0}),{next:c(async()=>e.length?{value:e.shift(),done:!1}:n?{value:void 0,done:!0}:new Promise((i,o)=>t.push({resolve:i,reject:o})).then(i=>i?{value:i,done:!1}:{value:void 0,done:!0}),"next"),return:c(async()=>(this.abort(),{value:void 0,done:!0}),"return")}}toReadableStream(){return new Ee(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function Wh(s){}c(Wh,"checkNever$1");const rc={"claude-opus-4-20250514":8192,"claude-opus-4-0":8192,"claude-4-opus-20250514":8192,"anthropic.claude-opus-4-20250514-v1:0":8192,"claude-opus-4@20250514":8192,"claude-opus-4-1-20250805":8192,"anthropic.claude-opus-4-1-20250805-v1:0":8192,"claude-opus-4-1@20250805":8192},ic={"claude-1.3":"November 6th, 2024","claude-1.3-100k":"November 6th, 2024","claude-instant-1.1":"November 6th, 2024","claude-instant-1.1-100k":"November 6th, 2024","claude-instant-1.2":"November 6th, 2024","claude-3-sonnet-20240229":"July 21st, 2025","claude-3-opus-20240229":"January 5th, 2026","claude-2.1":"July 21st, 2025","claude-2.0":"July 21st, 2025","claude-3-5-sonnet-20241022":"October 22, 2025","claude-3-5-sonnet-20240620":"October 22, 2025"};let zr=class extends Re{static{c(this,"Messages")}constructor(){super(...arguments),this.batches=new Qa(this._client)}create(e,t){const{betas:n,...r}=e;r.model in ic&&console.warn(`The model '${r.model}' is deprecated and will reach end-of-life on ${ic[r.model]}
|
|
162
|
-
Please migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`);let i=this._client._options.timeout;if(!r.stream&&i==null){const o=rc[r.model]??void 0;i=this._client.calculateNonstreamingTimeout(r.max_tokens,o)}return this._client.post("/v1/messages?beta=true",{body:r,timeout:i??6e5,...t,headers:G([{...n?.toString()!=null?{"anthropic-beta":n?.toString()}:void 0},t?.headers]),stream:e.stream??!1})}stream(e,t){return Ns.createMessage(this,e,t)}countTokens(e,t){const{betas:n,...r}=e;return this._client.post("/v1/messages/count_tokens?beta=true",{body:r,...t,headers:G([{"anthropic-beta":[...n??[],"token-counting-2024-11-01"].toString()},t?.headers])})}};zr.Batches=Qa;class un extends Re{static{c(this,"Beta")}constructor(){super(...arguments),this.models=new Xa(this._client),this.messages=new zr(this._client),this.files=new Ya(this._client)}}un.Models=Xa,un.Messages=zr,un.Files=Ya;class oc extends Re{static{c(this,"Completions")}create(e,t){const{betas:n,...r}=e;return this._client.post("/v1/complete",{body:r,timeout:this._client._options.timeout??6e5,...t,headers:G([{...n?.toString()!=null?{"anthropic-beta":n?.toString()}:void 0},t?.headers]),stream:e.stream??!1})}}var ye,Je,dn,bs,fn,hn,Ss,pn,Me,mn,vs,Cs,xt,ks,_s,Yr,ac,Xr,Qr,Zr,ei,cc;const lc="__json_buf";function uc(s){return s.type==="tool_use"||s.type==="server_tool_use"}c(uc,"tracksToolInput");class xs{static{c(this,"MessageStream")}constructor(){ye.add(this),this.messages=[],this.receivedMessages=[],Je.set(this,void 0),this.controller=new AbortController,dn.set(this,void 0),bs.set(this,()=>{}),fn.set(this,()=>{}),hn.set(this,void 0),Ss.set(this,()=>{}),pn.set(this,()=>{}),Me.set(this,{}),mn.set(this,!1),vs.set(this,!1),Cs.set(this,!1),xt.set(this,!1),ks.set(this,void 0),_s.set(this,void 0),Xr.set(this,e=>{if(P(this,vs,!0),Qt(e)&&(e=new ve),e instanceof ve)return P(this,Cs,!0),this._emit("abort",e);if(e instanceof D)return this._emit("error",e);if(e instanceof Error){const t=new D(e.message);return t.cause=e,this._emit("error",t)}return this._emit("error",new D(String(e)))}),P(this,dn,new Promise((e,t)=>{P(this,bs,e,"f"),P(this,fn,t,"f")})),P(this,hn,new Promise((e,t)=>{P(this,Ss,e,"f"),P(this,pn,t,"f")})),S(this,dn,"f").catch(()=>{}),S(this,hn,"f").catch(()=>{})}get response(){return S(this,ks,"f")}get request_id(){return S(this,_s,"f")}async withResponse(){const e=await S(this,dn,"f");if(!e)throw new Error("Could not resolve a `Response` object");return{data:this,response:e,request_id:e.headers.get("request-id")}}static fromReadableStream(e){const t=new xs;return t._run(()=>t._fromReadableStream(e)),t}static createMessage(e,t,n){const r=new xs;for(const i of t.messages)r._addMessageParam(i);return r._run(()=>r._createMessage(e,{...t,stream:!0},{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}})),r}_run(e){e().then(()=>{this._emitFinal(),this._emit("end")},S(this,Xr,"f"))}_addMessageParam(e){this.messages.push(e)}_addMessage(e,t=!0){this.receivedMessages.push(e),t&&this._emit("message",e)}async _createMessage(e,t,n){const r=n?.signal;let i;r&&(r.aborted&&this.controller.abort(),i=this.controller.abort.bind(this.controller),r.addEventListener("abort",i));try{S(this,ye,"m",Qr).call(this);const{response:o,data:a}=await e.create({...t,stream:!0},{...n,signal:this.controller.signal}).withResponse();this._connected(o);for await(const l of a)S(this,ye,"m",Zr).call(this,l);if(a.controller.signal?.aborted)throw new ve;S(this,ye,"m",ei).call(this)}finally{r&&i&&r.removeEventListener("abort",i)}}_connected(e){this.ended||(P(this,ks,e),P(this,_s,e?.headers.get("request-id")),S(this,bs,"f").call(this,e),this._emit("connect"))}get ended(){return S(this,mn,"f")}get errored(){return S(this,vs,"f")}get aborted(){return S(this,Cs,"f")}abort(){this.controller.abort()}on(e,t){return(S(this,Me,"f")[e]||(S(this,Me,"f")[e]=[])).push({listener:t}),this}off(e,t){const n=S(this,Me,"f")[e];if(!n)return this;const r=n.findIndex(i=>i.listener===t);return r>=0&&n.splice(r,1),this}once(e,t){return(S(this,Me,"f")[e]||(S(this,Me,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise((t,n)=>{P(this,xt,!0),e!=="error"&&this.once("error",n),this.once(e,t)})}async done(){P(this,xt,!0),await S(this,hn,"f")}get currentMessage(){return S(this,Je,"f")}async finalMessage(){return await this.done(),S(this,ye,"m",Yr).call(this)}async finalText(){return await this.done(),S(this,ye,"m",ac).call(this)}_emit(e,...t){if(S(this,mn,"f"))return;e==="end"&&(P(this,mn,!0),S(this,Ss,"f").call(this));const n=S(this,Me,"f")[e];if(n&&(S(this,Me,"f")[e]=n.filter(r=>!r.once),n.forEach(({listener:r})=>r(...t))),e==="abort"){const r=t[0];!S(this,xt,"f")&&!n?.length&&Promise.reject(r),S(this,fn,"f").call(this,r),S(this,pn,"f").call(this,r),this._emit("end");return}if(e==="error"){const r=t[0];!S(this,xt,"f")&&!n?.length&&Promise.reject(r),S(this,fn,"f").call(this,r),S(this,pn,"f").call(this,r),this._emit("end")}}_emitFinal(){this.receivedMessages.at(-1)&&this._emit("finalMessage",S(this,ye,"m",Yr).call(this))}async _fromReadableStream(e,t){const n=t?.signal;let r;n&&(n.aborted&&this.controller.abort(),r=this.controller.abort.bind(this.controller),n.addEventListener("abort",r));try{S(this,ye,"m",Qr).call(this),this._connected(null);const i=Ee.fromReadableStream(e,this.controller);for await(const o of i)S(this,ye,"m",Zr).call(this,o);if(i.controller.signal?.aborted)throw new ve;S(this,ye,"m",ei).call(this)}finally{n&&r&&n.removeEventListener("abort",r)}}[(Je=new WeakMap,dn=new WeakMap,bs=new WeakMap,fn=new WeakMap,hn=new WeakMap,Ss=new WeakMap,pn=new WeakMap,Me=new WeakMap,mn=new WeakMap,vs=new WeakMap,Cs=new WeakMap,xt=new WeakMap,ks=new WeakMap,_s=new WeakMap,Xr=new WeakMap,ye=new WeakSet,Yr=c(function(){if(this.receivedMessages.length===0)throw new D("stream ended without producing a Message with role=assistant");return this.receivedMessages.at(-1)},"_MessageStream_getFinalMessage2"),ac=c(function(){if(this.receivedMessages.length===0)throw new D("stream ended without producing a Message with role=assistant");const t=this.receivedMessages.at(-1).content.filter(n=>n.type==="text").map(n=>n.text);if(t.length===0)throw new D("stream ended without producing a content block with type=text");return t.join(" ")},"_MessageStream_getFinalText2"),Qr=c(function(){this.ended||P(this,Je,void 0)},"_MessageStream_beginRequest2"),Zr=c(function(t){if(this.ended)return;const n=S(this,ye,"m",cc).call(this,t);switch(this._emit("streamEvent",t,n),t.type){case"content_block_delta":{const r=n.content.at(-1);switch(t.delta.type){case"text_delta":{r.type==="text"&&this._emit("text",t.delta.text,r.text||"");break}case"citations_delta":{r.type==="text"&&this._emit("citation",t.delta.citation,r.citations??[]);break}case"input_json_delta":{uc(r)&&r.input&&this._emit("inputJson",t.delta.partial_json,r.input);break}case"thinking_delta":{r.type==="thinking"&&this._emit("thinking",t.delta.thinking,r.thinking);break}case"signature_delta":{r.type==="thinking"&&this._emit("signature",r.signature);break}default:t.delta}break}case"message_stop":{this._addMessageParam(n),this._addMessage(n,!0);break}case"content_block_stop":{this._emit("contentBlock",n.content.at(-1));break}case"message_start":{P(this,Je,n);break}}},"_MessageStream_addStreamEvent2"),ei=c(function(){if(this.ended)throw new D("stream has ended, this shouldn't happen");const t=S(this,Je,"f");if(!t)throw new D("request ended without sending any chunks");return P(this,Je,void 0),t},"_MessageStream_endRequest2"),cc=c(function(t){let n=S(this,Je,"f");if(t.type==="message_start"){if(n)throw new D(`Unexpected event order, got ${t.type} before receiving "message_stop"`);return t.message}if(!n)throw new D(`Unexpected event order, got ${t.type} before "message_start"`);switch(t.type){case"message_stop":return n;case"message_delta":return n.stop_reason=t.delta.stop_reason,n.stop_sequence=t.delta.stop_sequence,n.usage.output_tokens=t.usage.output_tokens,t.usage.input_tokens!=null&&(n.usage.input_tokens=t.usage.input_tokens),t.usage.cache_creation_input_tokens!=null&&(n.usage.cache_creation_input_tokens=t.usage.cache_creation_input_tokens),t.usage.cache_read_input_tokens!=null&&(n.usage.cache_read_input_tokens=t.usage.cache_read_input_tokens),t.usage.server_tool_use!=null&&(n.usage.server_tool_use=t.usage.server_tool_use),n;case"content_block_start":return n.content.push({...t.content_block}),n;case"content_block_delta":{const r=n.content.at(t.index);switch(t.delta.type){case"text_delta":{r?.type==="text"&&(n.content[t.index]={...r,text:(r.text||"")+t.delta.text});break}case"citations_delta":{r?.type==="text"&&(n.content[t.index]={...r,citations:[...r.citations??[],t.delta.citation]});break}case"input_json_delta":{if(r&&uc(r)){let i=r[lc]||"";i+=t.delta.partial_json;const o={...r};Object.defineProperty(o,lc,{value:i,enumerable:!1,writable:!0}),i&&(o.input=Za(i)),n.content[t.index]=o}break}case"thinking_delta":{r?.type==="thinking"&&(n.content[t.index]={...r,thinking:r.thinking+t.delta.thinking});break}case"signature_delta":{r?.type==="thinking"&&(n.content[t.index]={...r,signature:t.delta.signature});break}default:t.delta}return n}case"content_block_stop":return n}},"_MessageStream_accumulateMessage2"),Symbol.asyncIterator)](){const e=[],t=[];let n=!1;return this.on("streamEvent",r=>{const i=t.shift();i?i.resolve(r):e.push(r)}),this.on("end",()=>{n=!0;for(const r of t)r.resolve(void 0);t.length=0}),this.on("abort",r=>{n=!0;for(const i of t)i.reject(r);t.length=0}),this.on("error",r=>{n=!0;for(const i of t)i.reject(r);t.length=0}),{next:c(async()=>e.length?{value:e.shift(),done:!1}:n?{value:void 0,done:!0}:new Promise((i,o)=>t.push({resolve:i,reject:o})).then(i=>i?{value:i,done:!1}:{value:void 0,done:!0}),"next"),return:c(async()=>(this.abort(),{value:void 0,done:!0}),"return")}}toReadableStream(){return new Ee(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function Hh(s){}c(Hh,"checkNever");class dc extends Re{static{c(this,"Batches")}create(e,t){return this._client.post("/v1/messages/batches",{body:e,...t})}retrieve(e,t){return this._client.get(Ce`/v1/messages/batches/${e}`,t)}list(e={},t){return this._client.getAPIList("/v1/messages/batches",sn,{query:e,...t})}delete(e,t){return this._client.delete(Ce`/v1/messages/batches/${e}`,t)}cancel(e,t){return this._client.post(Ce`/v1/messages/batches/${e}/cancel`,t)}async results(e,t){const n=await this.retrieve(e);if(!n.results_url)throw new D(`No batch \`results_url\`; Has it finished processing? ${n.processing_status} - ${n.id}`);return this._client.get(n.results_url,{...t,headers:G([{Accept:"application/binary"},t?.headers]),stream:!0,__binaryResponse:!0})._thenUnwrap((r,i)=>$s.fromResponse(i.response,i.controller))}}class ti extends Re{static{c(this,"Messages")}constructor(){super(...arguments),this.batches=new dc(this._client)}create(e,t){e.model in fc&&console.warn(`The model '${e.model}' is deprecated and will reach end-of-life on ${fc[e.model]}
|
|
163
|
-
Please migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`);let n=this._client._options.timeout;if(!e.stream&&n==null){const r=rc[e.model]??void 0;n=this._client.calculateNonstreamingTimeout(e.max_tokens,r)}return this._client.post("/v1/messages",{body:e,timeout:n??6e5,...t,stream:e.stream??!1})}stream(e,t){return xs.createMessage(this,e,t)}countTokens(e,t){return this._client.post("/v1/messages/count_tokens",{body:e,...t})}}const fc={"claude-1.3":"November 6th, 2024","claude-1.3-100k":"November 6th, 2024","claude-instant-1.1":"November 6th, 2024","claude-instant-1.1-100k":"November 6th, 2024","claude-instant-1.2":"November 6th, 2024","claude-3-sonnet-20240229":"July 21st, 2025","claude-3-opus-20240229":"January 5th, 2026","claude-2.1":"July 21st, 2025","claude-2.0":"July 21st, 2025","claude-3-5-sonnet-20241022":"October 22, 2025","claude-3-5-sonnet-20240620":"October 22, 2025"};ti.Batches=dc;class hc extends Re{static{c(this,"Models")}retrieve(e,t={},n){const{betas:r}=t??{};return this._client.get(Ce`/v1/models/${e}`,{...n,headers:G([{...r?.toString()!=null?{"anthropic-beta":r?.toString()}:void 0},n?.headers])})}list(e={},t){const{betas:n,...r}=e??{};return this._client.getAPIList("/v1/models",sn,{query:r,...t,headers:G([{...n?.toString()!=null?{"anthropic-beta":n?.toString()}:void 0},t?.headers])})}}const Ts=c(s=>{if(typeof globalThis.process<"u")return globalThis.process.env?.[s]?.trim()??void 0;if(typeof globalThis.Deno<"u")return globalThis.Deno.env?.get?.(s)?.trim()},"readEnv");var ni,si,Es,pc;const Lf="\\n\\nHuman:",Df="\\n\\nAssistant:";class ee{static{c(this,"BaseAnthropic")}constructor({baseURL:e=Ts("ANTHROPIC_BASE_URL"),apiKey:t=Ts("ANTHROPIC_API_KEY")??null,authToken:n=Ts("ANTHROPIC_AUTH_TOKEN")??null,...r}={}){ni.add(this),Es.set(this,void 0);const i={apiKey:t,authToken:n,...r,baseURL:e||"https://api.anthropic.com"};if(!i.dangerouslyAllowBrowser&&rf())throw new
|
|
161
|
+
${f}`)}return o},"path2"),"createPathTagFunction"),Ce=xf(Ga);class Ya extends Re{static{c(this,"Files")}list(e={},t){const{betas:n,...r}=e??{};return this._client.getAPIList("/v1/files",sn,{query:r,...t,headers:G([{"anthropic-beta":[...n??[],"files-api-2025-04-14"].toString()},t?.headers])})}delete(e,t={},n){const{betas:r}=t??{};return this._client.delete(Ce`/v1/files/${e}`,{...n,headers:G([{"anthropic-beta":[...r??[],"files-api-2025-04-14"].toString()},n?.headers])})}download(e,t={},n){const{betas:r}=t??{};return this._client.get(Ce`/v1/files/${e}/content`,{...n,headers:G([{"anthropic-beta":[...r??[],"files-api-2025-04-14"].toString(),Accept:"application/binary"},n?.headers]),__binaryResponse:!0})}retrieveMetadata(e,t={},n){const{betas:r}=t??{};return this._client.get(Ce`/v1/files/${e}`,{...n,headers:G([{"anthropic-beta":[...r??[],"files-api-2025-04-14"].toString()},n?.headers])})}upload(e,t){const{betas:n,...r}=e;return this._client.post("/v1/files",kf({body:r,...t,headers:G([{"anthropic-beta":[...n??[],"files-api-2025-04-14"].toString()},t?.headers])},this._client))}}let Xa=class extends Re{static{c(this,"Models")}retrieve(e,t={},n){const{betas:r}=t??{};return this._client.get(Ce`/v1/models/${e}?beta=true`,{...n,headers:G([{...r?.toString()!=null?{"anthropic-beta":r?.toString()}:void 0},n?.headers])})}list(e={},t){const{betas:n,...r}=e??{};return this._client.getAPIList("/v1/models?beta=true",sn,{query:r,...t,headers:G([{...n?.toString()!=null?{"anthropic-beta":n?.toString()}:void 0},t?.headers])})}};class $s{static{c(this,"JSONLDecoder")}constructor(e,t){this.iterator=e,this.controller=t}async*decoder(){const e=new Zt;for await(const t of this.iterator)for(const n of e.decode(t))yield JSON.parse(n);for(const t of e.flush())yield JSON.parse(t)}[Symbol.asyncIterator](){return this.decoder()}static fromResponse(e,t){if(!e.body)throw t.abort(),typeof globalThis.navigator<"u"&&globalThis.navigator.product==="ReactNative"?new j("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api"):new j("Attempted to iterate over a response with no body");return new $s(Kr(e.body),t)}}let Qa=class extends Re{static{c(this,"Batches")}create(e,t){const{betas:n,...r}=e;return this._client.post("/v1/messages/batches?beta=true",{body:r,...t,headers:G([{"anthropic-beta":[...n??[],"message-batches-2024-09-24"].toString()},t?.headers])})}retrieve(e,t={},n){const{betas:r}=t??{};return this._client.get(Ce`/v1/messages/batches/${e}?beta=true`,{...n,headers:G([{"anthropic-beta":[...r??[],"message-batches-2024-09-24"].toString()},n?.headers])})}list(e={},t){const{betas:n,...r}=e??{};return this._client.getAPIList("/v1/messages/batches?beta=true",sn,{query:r,...t,headers:G([{"anthropic-beta":[...n??[],"message-batches-2024-09-24"].toString()},t?.headers])})}delete(e,t={},n){const{betas:r}=t??{};return this._client.delete(Ce`/v1/messages/batches/${e}?beta=true`,{...n,headers:G([{"anthropic-beta":[...r??[],"message-batches-2024-09-24"].toString()},n?.headers])})}cancel(e,t={},n){const{betas:r}=t??{};return this._client.post(Ce`/v1/messages/batches/${e}/cancel?beta=true`,{...n,headers:G([{"anthropic-beta":[...r??[],"message-batches-2024-09-24"].toString()},n?.headers])})}async results(e,t={},n){const r=await this.retrieve(e);if(!r.results_url)throw new j(`No batch \`results_url\`; Has it finished processing? ${r.processing_status} - ${r.id}`);const{betas:i}=t??{};return this._client.get(r.results_url,{...n,headers:G([{"anthropic-beta":[...i??[],"message-batches-2024-09-24"].toString(),Accept:"application/binary"},n?.headers]),stream:!0,__binaryResponse:!0})._thenUnwrap((o,a)=>$s.fromResponse(a.response,a.controller))}};const Rf=c(s=>{let e=0,t=[];for(;e<s.length;){let n=s[e];if(n==="\\"){e++;continue}if(n==="{"){t.push({type:"brace",value:"{"}),e++;continue}if(n==="}"){t.push({type:"brace",value:"}"}),e++;continue}if(n==="["){t.push({type:"paren",value:"["}),e++;continue}if(n==="]"){t.push({type:"paren",value:"]"}),e++;continue}if(n===":"){t.push({type:"separator",value:":"}),e++;continue}if(n===","){t.push({type:"delimiter",value:","}),e++;continue}if(n==='"'){let a="",l=!1;for(n=s[++e];n!=='"';){if(e===s.length){l=!0;break}if(n==="\\"){if(e++,e===s.length){l=!0;break}a+=n+s[e],n=s[++e]}else a+=n,n=s[++e]}n=s[++e],l||t.push({type:"string",value:a});continue}if(n&&/\s/.test(n)){e++;continue}let i=/[0-9]/;if(n&&i.test(n)||n==="-"||n==="."){let a="";for(n==="-"&&(a+=n,n=s[++e]);n&&i.test(n)||n===".";)a+=n,n=s[++e];t.push({type:"number",value:a});continue}let o=/[a-z]/i;if(n&&o.test(n)){let a="";for(;n&&o.test(n)&&e!==s.length;)a+=n,n=s[++e];if(a=="true"||a=="false"||a==="null")t.push({type:"name",value:a});else{e++;continue}continue}e++}return t},"tokenize"),$t=c(s=>{if(s.length===0)return s;let e=s[s.length-1];switch(e.type){case"separator":return s=s.slice(0,s.length-1),$t(s);case"number":let t=e.value[e.value.length-1];if(t==="."||t==="-")return s=s.slice(0,s.length-1),$t(s);case"string":let n=s[s.length-2];if(n?.type==="delimiter")return s=s.slice(0,s.length-1),$t(s);if(n?.type==="brace"&&n.value==="{")return s=s.slice(0,s.length-1),$t(s);break;case"delimiter":return s=s.slice(0,s.length-1),$t(s)}return s},"strip"),Pf=c(s=>{let e=[];return s.map(t=>{t.type==="brace"&&(t.value==="{"?e.push("}"):e.splice(e.lastIndexOf("}"),1)),t.type==="paren"&&(t.value==="["?e.push("]"):e.splice(e.lastIndexOf("]"),1))}),e.length>0&&e.reverse().map(t=>{t==="}"?s.push({type:"brace",value:"}"}):t==="]"&&s.push({type:"paren",value:"]"})}),s},"unstrip"),Mf=c(s=>{let e="";return s.map(t=>{switch(t.type){case"string":e+='"'+t.value+'"';break;default:e+=t.value;break}}),e},"generate"),Za=c(s=>JSON.parse(Mf(Pf($t(Rf(s))))),"partialParse");var ge,We,rn,fs,on,an,hs,cn,Pe,ln,ps,ms,Nt,gs,ys,Jr,ec,ws,Hr,Vr,Gr,tc;const nc="__json_buf";function sc(s){return s.type==="tool_use"||s.type==="server_tool_use"||s.type==="mcp_tool_use"}c(sc,"tracksToolInput$1");class Ns{static{c(this,"BetaMessageStream")}constructor(){ge.add(this),this.messages=[],this.receivedMessages=[],We.set(this,void 0),this.controller=new AbortController,rn.set(this,void 0),fs.set(this,()=>{}),on.set(this,()=>{}),an.set(this,void 0),hs.set(this,()=>{}),cn.set(this,()=>{}),Pe.set(this,{}),ln.set(this,!1),ps.set(this,!1),ms.set(this,!1),Nt.set(this,!1),gs.set(this,void 0),ys.set(this,void 0),ws.set(this,e=>{if(P(this,ps,!0),Qt(e)&&(e=new ve),e instanceof ve)return P(this,ms,!0),this._emit("abort",e);if(e instanceof j)return this._emit("error",e);if(e instanceof Error){const t=new j(e.message);return t.cause=e,this._emit("error",t)}return this._emit("error",new j(String(e)))}),P(this,rn,new Promise((e,t)=>{P(this,fs,e,"f"),P(this,on,t,"f")})),P(this,an,new Promise((e,t)=>{P(this,hs,e,"f"),P(this,cn,t,"f")})),S(this,rn,"f").catch(()=>{}),S(this,an,"f").catch(()=>{})}get response(){return S(this,gs,"f")}get request_id(){return S(this,ys,"f")}async withResponse(){const e=await S(this,rn,"f");if(!e)throw new Error("Could not resolve a `Response` object");return{data:this,response:e,request_id:e.headers.get("request-id")}}static fromReadableStream(e){const t=new Ns;return t._run(()=>t._fromReadableStream(e)),t}static createMessage(e,t,n){const r=new Ns;for(const i of t.messages)r._addMessageParam(i);return r._run(()=>r._createMessage(e,{...t,stream:!0},{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}})),r}_run(e){e().then(()=>{this._emitFinal(),this._emit("end")},S(this,ws,"f"))}_addMessageParam(e){this.messages.push(e)}_addMessage(e,t=!0){this.receivedMessages.push(e),t&&this._emit("message",e)}async _createMessage(e,t,n){const r=n?.signal;let i;r&&(r.aborted&&this.controller.abort(),i=this.controller.abort.bind(this.controller),r.addEventListener("abort",i));try{S(this,ge,"m",Hr).call(this);const{response:o,data:a}=await e.create({...t,stream:!0},{...n,signal:this.controller.signal}).withResponse();this._connected(o);for await(const l of a)S(this,ge,"m",Vr).call(this,l);if(a.controller.signal?.aborted)throw new ve;S(this,ge,"m",Gr).call(this)}finally{r&&i&&r.removeEventListener("abort",i)}}_connected(e){this.ended||(P(this,gs,e),P(this,ys,e?.headers.get("request-id")),S(this,fs,"f").call(this,e),this._emit("connect"))}get ended(){return S(this,ln,"f")}get errored(){return S(this,ps,"f")}get aborted(){return S(this,ms,"f")}abort(){this.controller.abort()}on(e,t){return(S(this,Pe,"f")[e]||(S(this,Pe,"f")[e]=[])).push({listener:t}),this}off(e,t){const n=S(this,Pe,"f")[e];if(!n)return this;const r=n.findIndex(i=>i.listener===t);return r>=0&&n.splice(r,1),this}once(e,t){return(S(this,Pe,"f")[e]||(S(this,Pe,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise((t,n)=>{P(this,Nt,!0),e!=="error"&&this.once("error",n),this.once(e,t)})}async done(){P(this,Nt,!0),await S(this,an,"f")}get currentMessage(){return S(this,We,"f")}async finalMessage(){return await this.done(),S(this,ge,"m",Jr).call(this)}async finalText(){return await this.done(),S(this,ge,"m",ec).call(this)}_emit(e,...t){if(S(this,ln,"f"))return;e==="end"&&(P(this,ln,!0),S(this,hs,"f").call(this));const n=S(this,Pe,"f")[e];if(n&&(S(this,Pe,"f")[e]=n.filter(r=>!r.once),n.forEach(({listener:r})=>r(...t))),e==="abort"){const r=t[0];!S(this,Nt,"f")&&!n?.length&&Promise.reject(r),S(this,on,"f").call(this,r),S(this,cn,"f").call(this,r),this._emit("end");return}if(e==="error"){const r=t[0];!S(this,Nt,"f")&&!n?.length&&Promise.reject(r),S(this,on,"f").call(this,r),S(this,cn,"f").call(this,r),this._emit("end")}}_emitFinal(){this.receivedMessages.at(-1)&&this._emit("finalMessage",S(this,ge,"m",Jr).call(this))}async _fromReadableStream(e,t){const n=t?.signal;let r;n&&(n.aborted&&this.controller.abort(),r=this.controller.abort.bind(this.controller),n.addEventListener("abort",r));try{S(this,ge,"m",Hr).call(this),this._connected(null);const i=Ee.fromReadableStream(e,this.controller);for await(const o of i)S(this,ge,"m",Vr).call(this,o);if(i.controller.signal?.aborted)throw new ve;S(this,ge,"m",Gr).call(this)}finally{n&&r&&n.removeEventListener("abort",r)}}[(We=new WeakMap,rn=new WeakMap,fs=new WeakMap,on=new WeakMap,an=new WeakMap,hs=new WeakMap,cn=new WeakMap,Pe=new WeakMap,ln=new WeakMap,ps=new WeakMap,ms=new WeakMap,Nt=new WeakMap,gs=new WeakMap,ys=new WeakMap,ws=new WeakMap,ge=new WeakSet,Jr=c(function(){if(this.receivedMessages.length===0)throw new j("stream ended without producing a Message with role=assistant");return this.receivedMessages.at(-1)},"_BetaMessageStream_getFinalMessage2"),ec=c(function(){if(this.receivedMessages.length===0)throw new j("stream ended without producing a Message with role=assistant");const t=this.receivedMessages.at(-1).content.filter(n=>n.type==="text").map(n=>n.text);if(t.length===0)throw new j("stream ended without producing a content block with type=text");return t.join(" ")},"_BetaMessageStream_getFinalText2"),Hr=c(function(){this.ended||P(this,We,void 0)},"_BetaMessageStream_beginRequest2"),Vr=c(function(t){if(this.ended)return;const n=S(this,ge,"m",tc).call(this,t);switch(this._emit("streamEvent",t,n),t.type){case"content_block_delta":{const r=n.content.at(-1);switch(t.delta.type){case"text_delta":{r.type==="text"&&this._emit("text",t.delta.text,r.text||"");break}case"citations_delta":{r.type==="text"&&this._emit("citation",t.delta.citation,r.citations??[]);break}case"input_json_delta":{sc(r)&&r.input&&this._emit("inputJson",t.delta.partial_json,r.input);break}case"thinking_delta":{r.type==="thinking"&&this._emit("thinking",t.delta.thinking,r.thinking);break}case"signature_delta":{r.type==="thinking"&&this._emit("signature",r.signature);break}default:t.delta}break}case"message_stop":{this._addMessageParam(n),this._addMessage(n,!0);break}case"content_block_stop":{this._emit("contentBlock",n.content.at(-1));break}case"message_start":{P(this,We,n);break}}},"_BetaMessageStream_addStreamEvent2"),Gr=c(function(){if(this.ended)throw new j("stream has ended, this shouldn't happen");const t=S(this,We,"f");if(!t)throw new j("request ended without sending any chunks");return P(this,We,void 0),t},"_BetaMessageStream_endRequest2"),tc=c(function(t){let n=S(this,We,"f");if(t.type==="message_start"){if(n)throw new j(`Unexpected event order, got ${t.type} before receiving "message_stop"`);return t.message}if(!n)throw new j(`Unexpected event order, got ${t.type} before "message_start"`);switch(t.type){case"message_stop":return n;case"message_delta":return n.container=t.delta.container,n.stop_reason=t.delta.stop_reason,n.stop_sequence=t.delta.stop_sequence,n.usage.output_tokens=t.usage.output_tokens,t.usage.input_tokens!=null&&(n.usage.input_tokens=t.usage.input_tokens),t.usage.cache_creation_input_tokens!=null&&(n.usage.cache_creation_input_tokens=t.usage.cache_creation_input_tokens),t.usage.cache_read_input_tokens!=null&&(n.usage.cache_read_input_tokens=t.usage.cache_read_input_tokens),t.usage.server_tool_use!=null&&(n.usage.server_tool_use=t.usage.server_tool_use),n;case"content_block_start":return n.content.push(t.content_block),n;case"content_block_delta":{const r=n.content.at(t.index);switch(t.delta.type){case"text_delta":{r?.type==="text"&&(n.content[t.index]={...r,text:(r.text||"")+t.delta.text});break}case"citations_delta":{r?.type==="text"&&(n.content[t.index]={...r,citations:[...r.citations??[],t.delta.citation]});break}case"input_json_delta":{if(r&&sc(r)){let i=r[nc]||"";i+=t.delta.partial_json;const o={...r};if(Object.defineProperty(o,nc,{value:i,enumerable:!1,writable:!0}),i)try{o.input=Za(i)}catch(a){const l=new j(`Unable to parse tool parameter JSON from model. Please retry your request or adjust your prompt. Error: ${a}. JSON: ${i}`);S(this,ws,"f").call(this,l)}n.content[t.index]=o}break}case"thinking_delta":{r?.type==="thinking"&&(n.content[t.index]={...r,thinking:r.thinking+t.delta.thinking});break}case"signature_delta":{r?.type==="thinking"&&(n.content[t.index]={...r,signature:t.delta.signature});break}default:t.delta}return n}case"content_block_stop":return n}},"_BetaMessageStream_accumulateMessage2"),Symbol.asyncIterator)](){const e=[],t=[];let n=!1;return this.on("streamEvent",r=>{const i=t.shift();i?i.resolve(r):e.push(r)}),this.on("end",()=>{n=!0;for(const r of t)r.resolve(void 0);t.length=0}),this.on("abort",r=>{n=!0;for(const i of t)i.reject(r);t.length=0}),this.on("error",r=>{n=!0;for(const i of t)i.reject(r);t.length=0}),{next:c(async()=>e.length?{value:e.shift(),done:!1}:n?{value:void 0,done:!0}:new Promise((i,o)=>t.push({resolve:i,reject:o})).then(i=>i?{value:i,done:!1}:{value:void 0,done:!0}),"next"),return:c(async()=>(this.abort(),{value:void 0,done:!0}),"return")}}toReadableStream(){return new Ee(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function Wh(s){}c(Wh,"checkNever$1");const rc={"claude-opus-4-20250514":8192,"claude-opus-4-0":8192,"claude-4-opus-20250514":8192,"anthropic.claude-opus-4-20250514-v1:0":8192,"claude-opus-4@20250514":8192,"claude-opus-4-1-20250805":8192,"anthropic.claude-opus-4-1-20250805-v1:0":8192,"claude-opus-4-1@20250805":8192},ic={"claude-1.3":"November 6th, 2024","claude-1.3-100k":"November 6th, 2024","claude-instant-1.1":"November 6th, 2024","claude-instant-1.1-100k":"November 6th, 2024","claude-instant-1.2":"November 6th, 2024","claude-3-sonnet-20240229":"July 21st, 2025","claude-3-opus-20240229":"January 5th, 2026","claude-2.1":"July 21st, 2025","claude-2.0":"July 21st, 2025","claude-3-5-sonnet-20241022":"October 22, 2025","claude-3-5-sonnet-20240620":"October 22, 2025"};let zr=class extends Re{static{c(this,"Messages")}constructor(){super(...arguments),this.batches=new Qa(this._client)}create(e,t){const{betas:n,...r}=e;r.model in ic&&console.warn(`The model '${r.model}' is deprecated and will reach end-of-life on ${ic[r.model]}
|
|
162
|
+
Please migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`);let i=this._client._options.timeout;if(!r.stream&&i==null){const o=rc[r.model]??void 0;i=this._client.calculateNonstreamingTimeout(r.max_tokens,o)}return this._client.post("/v1/messages?beta=true",{body:r,timeout:i??6e5,...t,headers:G([{...n?.toString()!=null?{"anthropic-beta":n?.toString()}:void 0},t?.headers]),stream:e.stream??!1})}stream(e,t){return Ns.createMessage(this,e,t)}countTokens(e,t){const{betas:n,...r}=e;return this._client.post("/v1/messages/count_tokens?beta=true",{body:r,...t,headers:G([{"anthropic-beta":[...n??[],"token-counting-2024-11-01"].toString()},t?.headers])})}};zr.Batches=Qa;class un extends Re{static{c(this,"Beta")}constructor(){super(...arguments),this.models=new Xa(this._client),this.messages=new zr(this._client),this.files=new Ya(this._client)}}un.Models=Xa,un.Messages=zr,un.Files=Ya;class oc extends Re{static{c(this,"Completions")}create(e,t){const{betas:n,...r}=e;return this._client.post("/v1/complete",{body:r,timeout:this._client._options.timeout??6e5,...t,headers:G([{...n?.toString()!=null?{"anthropic-beta":n?.toString()}:void 0},t?.headers]),stream:e.stream??!1})}}var ye,Je,dn,bs,fn,hn,Ss,pn,Me,mn,vs,Cs,xt,ks,_s,Yr,ac,Xr,Qr,Zr,ei,cc;const lc="__json_buf";function uc(s){return s.type==="tool_use"||s.type==="server_tool_use"}c(uc,"tracksToolInput");class xs{static{c(this,"MessageStream")}constructor(){ye.add(this),this.messages=[],this.receivedMessages=[],Je.set(this,void 0),this.controller=new AbortController,dn.set(this,void 0),bs.set(this,()=>{}),fn.set(this,()=>{}),hn.set(this,void 0),Ss.set(this,()=>{}),pn.set(this,()=>{}),Me.set(this,{}),mn.set(this,!1),vs.set(this,!1),Cs.set(this,!1),xt.set(this,!1),ks.set(this,void 0),_s.set(this,void 0),Xr.set(this,e=>{if(P(this,vs,!0),Qt(e)&&(e=new ve),e instanceof ve)return P(this,Cs,!0),this._emit("abort",e);if(e instanceof j)return this._emit("error",e);if(e instanceof Error){const t=new j(e.message);return t.cause=e,this._emit("error",t)}return this._emit("error",new j(String(e)))}),P(this,dn,new Promise((e,t)=>{P(this,bs,e,"f"),P(this,fn,t,"f")})),P(this,hn,new Promise((e,t)=>{P(this,Ss,e,"f"),P(this,pn,t,"f")})),S(this,dn,"f").catch(()=>{}),S(this,hn,"f").catch(()=>{})}get response(){return S(this,ks,"f")}get request_id(){return S(this,_s,"f")}async withResponse(){const e=await S(this,dn,"f");if(!e)throw new Error("Could not resolve a `Response` object");return{data:this,response:e,request_id:e.headers.get("request-id")}}static fromReadableStream(e){const t=new xs;return t._run(()=>t._fromReadableStream(e)),t}static createMessage(e,t,n){const r=new xs;for(const i of t.messages)r._addMessageParam(i);return r._run(()=>r._createMessage(e,{...t,stream:!0},{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}})),r}_run(e){e().then(()=>{this._emitFinal(),this._emit("end")},S(this,Xr,"f"))}_addMessageParam(e){this.messages.push(e)}_addMessage(e,t=!0){this.receivedMessages.push(e),t&&this._emit("message",e)}async _createMessage(e,t,n){const r=n?.signal;let i;r&&(r.aborted&&this.controller.abort(),i=this.controller.abort.bind(this.controller),r.addEventListener("abort",i));try{S(this,ye,"m",Qr).call(this);const{response:o,data:a}=await e.create({...t,stream:!0},{...n,signal:this.controller.signal}).withResponse();this._connected(o);for await(const l of a)S(this,ye,"m",Zr).call(this,l);if(a.controller.signal?.aborted)throw new ve;S(this,ye,"m",ei).call(this)}finally{r&&i&&r.removeEventListener("abort",i)}}_connected(e){this.ended||(P(this,ks,e),P(this,_s,e?.headers.get("request-id")),S(this,bs,"f").call(this,e),this._emit("connect"))}get ended(){return S(this,mn,"f")}get errored(){return S(this,vs,"f")}get aborted(){return S(this,Cs,"f")}abort(){this.controller.abort()}on(e,t){return(S(this,Me,"f")[e]||(S(this,Me,"f")[e]=[])).push({listener:t}),this}off(e,t){const n=S(this,Me,"f")[e];if(!n)return this;const r=n.findIndex(i=>i.listener===t);return r>=0&&n.splice(r,1),this}once(e,t){return(S(this,Me,"f")[e]||(S(this,Me,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise((t,n)=>{P(this,xt,!0),e!=="error"&&this.once("error",n),this.once(e,t)})}async done(){P(this,xt,!0),await S(this,hn,"f")}get currentMessage(){return S(this,Je,"f")}async finalMessage(){return await this.done(),S(this,ye,"m",Yr).call(this)}async finalText(){return await this.done(),S(this,ye,"m",ac).call(this)}_emit(e,...t){if(S(this,mn,"f"))return;e==="end"&&(P(this,mn,!0),S(this,Ss,"f").call(this));const n=S(this,Me,"f")[e];if(n&&(S(this,Me,"f")[e]=n.filter(r=>!r.once),n.forEach(({listener:r})=>r(...t))),e==="abort"){const r=t[0];!S(this,xt,"f")&&!n?.length&&Promise.reject(r),S(this,fn,"f").call(this,r),S(this,pn,"f").call(this,r),this._emit("end");return}if(e==="error"){const r=t[0];!S(this,xt,"f")&&!n?.length&&Promise.reject(r),S(this,fn,"f").call(this,r),S(this,pn,"f").call(this,r),this._emit("end")}}_emitFinal(){this.receivedMessages.at(-1)&&this._emit("finalMessage",S(this,ye,"m",Yr).call(this))}async _fromReadableStream(e,t){const n=t?.signal;let r;n&&(n.aborted&&this.controller.abort(),r=this.controller.abort.bind(this.controller),n.addEventListener("abort",r));try{S(this,ye,"m",Qr).call(this),this._connected(null);const i=Ee.fromReadableStream(e,this.controller);for await(const o of i)S(this,ye,"m",Zr).call(this,o);if(i.controller.signal?.aborted)throw new ve;S(this,ye,"m",ei).call(this)}finally{n&&r&&n.removeEventListener("abort",r)}}[(Je=new WeakMap,dn=new WeakMap,bs=new WeakMap,fn=new WeakMap,hn=new WeakMap,Ss=new WeakMap,pn=new WeakMap,Me=new WeakMap,mn=new WeakMap,vs=new WeakMap,Cs=new WeakMap,xt=new WeakMap,ks=new WeakMap,_s=new WeakMap,Xr=new WeakMap,ye=new WeakSet,Yr=c(function(){if(this.receivedMessages.length===0)throw new j("stream ended without producing a Message with role=assistant");return this.receivedMessages.at(-1)},"_MessageStream_getFinalMessage2"),ac=c(function(){if(this.receivedMessages.length===0)throw new j("stream ended without producing a Message with role=assistant");const t=this.receivedMessages.at(-1).content.filter(n=>n.type==="text").map(n=>n.text);if(t.length===0)throw new j("stream ended without producing a content block with type=text");return t.join(" ")},"_MessageStream_getFinalText2"),Qr=c(function(){this.ended||P(this,Je,void 0)},"_MessageStream_beginRequest2"),Zr=c(function(t){if(this.ended)return;const n=S(this,ye,"m",cc).call(this,t);switch(this._emit("streamEvent",t,n),t.type){case"content_block_delta":{const r=n.content.at(-1);switch(t.delta.type){case"text_delta":{r.type==="text"&&this._emit("text",t.delta.text,r.text||"");break}case"citations_delta":{r.type==="text"&&this._emit("citation",t.delta.citation,r.citations??[]);break}case"input_json_delta":{uc(r)&&r.input&&this._emit("inputJson",t.delta.partial_json,r.input);break}case"thinking_delta":{r.type==="thinking"&&this._emit("thinking",t.delta.thinking,r.thinking);break}case"signature_delta":{r.type==="thinking"&&this._emit("signature",r.signature);break}default:t.delta}break}case"message_stop":{this._addMessageParam(n),this._addMessage(n,!0);break}case"content_block_stop":{this._emit("contentBlock",n.content.at(-1));break}case"message_start":{P(this,Je,n);break}}},"_MessageStream_addStreamEvent2"),ei=c(function(){if(this.ended)throw new j("stream has ended, this shouldn't happen");const t=S(this,Je,"f");if(!t)throw new j("request ended without sending any chunks");return P(this,Je,void 0),t},"_MessageStream_endRequest2"),cc=c(function(t){let n=S(this,Je,"f");if(t.type==="message_start"){if(n)throw new j(`Unexpected event order, got ${t.type} before receiving "message_stop"`);return t.message}if(!n)throw new j(`Unexpected event order, got ${t.type} before "message_start"`);switch(t.type){case"message_stop":return n;case"message_delta":return n.stop_reason=t.delta.stop_reason,n.stop_sequence=t.delta.stop_sequence,n.usage.output_tokens=t.usage.output_tokens,t.usage.input_tokens!=null&&(n.usage.input_tokens=t.usage.input_tokens),t.usage.cache_creation_input_tokens!=null&&(n.usage.cache_creation_input_tokens=t.usage.cache_creation_input_tokens),t.usage.cache_read_input_tokens!=null&&(n.usage.cache_read_input_tokens=t.usage.cache_read_input_tokens),t.usage.server_tool_use!=null&&(n.usage.server_tool_use=t.usage.server_tool_use),n;case"content_block_start":return n.content.push({...t.content_block}),n;case"content_block_delta":{const r=n.content.at(t.index);switch(t.delta.type){case"text_delta":{r?.type==="text"&&(n.content[t.index]={...r,text:(r.text||"")+t.delta.text});break}case"citations_delta":{r?.type==="text"&&(n.content[t.index]={...r,citations:[...r.citations??[],t.delta.citation]});break}case"input_json_delta":{if(r&&uc(r)){let i=r[lc]||"";i+=t.delta.partial_json;const o={...r};Object.defineProperty(o,lc,{value:i,enumerable:!1,writable:!0}),i&&(o.input=Za(i)),n.content[t.index]=o}break}case"thinking_delta":{r?.type==="thinking"&&(n.content[t.index]={...r,thinking:r.thinking+t.delta.thinking});break}case"signature_delta":{r?.type==="thinking"&&(n.content[t.index]={...r,signature:t.delta.signature});break}default:t.delta}return n}case"content_block_stop":return n}},"_MessageStream_accumulateMessage2"),Symbol.asyncIterator)](){const e=[],t=[];let n=!1;return this.on("streamEvent",r=>{const i=t.shift();i?i.resolve(r):e.push(r)}),this.on("end",()=>{n=!0;for(const r of t)r.resolve(void 0);t.length=0}),this.on("abort",r=>{n=!0;for(const i of t)i.reject(r);t.length=0}),this.on("error",r=>{n=!0;for(const i of t)i.reject(r);t.length=0}),{next:c(async()=>e.length?{value:e.shift(),done:!1}:n?{value:void 0,done:!0}:new Promise((i,o)=>t.push({resolve:i,reject:o})).then(i=>i?{value:i,done:!1}:{value:void 0,done:!0}),"next"),return:c(async()=>(this.abort(),{value:void 0,done:!0}),"return")}}toReadableStream(){return new Ee(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function Hh(s){}c(Hh,"checkNever");class dc extends Re{static{c(this,"Batches")}create(e,t){return this._client.post("/v1/messages/batches",{body:e,...t})}retrieve(e,t){return this._client.get(Ce`/v1/messages/batches/${e}`,t)}list(e={},t){return this._client.getAPIList("/v1/messages/batches",sn,{query:e,...t})}delete(e,t){return this._client.delete(Ce`/v1/messages/batches/${e}`,t)}cancel(e,t){return this._client.post(Ce`/v1/messages/batches/${e}/cancel`,t)}async results(e,t){const n=await this.retrieve(e);if(!n.results_url)throw new j(`No batch \`results_url\`; Has it finished processing? ${n.processing_status} - ${n.id}`);return this._client.get(n.results_url,{...t,headers:G([{Accept:"application/binary"},t?.headers]),stream:!0,__binaryResponse:!0})._thenUnwrap((r,i)=>$s.fromResponse(i.response,i.controller))}}class ti extends Re{static{c(this,"Messages")}constructor(){super(...arguments),this.batches=new dc(this._client)}create(e,t){e.model in fc&&console.warn(`The model '${e.model}' is deprecated and will reach end-of-life on ${fc[e.model]}
|
|
163
|
+
Please migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`);let n=this._client._options.timeout;if(!e.stream&&n==null){const r=rc[e.model]??void 0;n=this._client.calculateNonstreamingTimeout(e.max_tokens,r)}return this._client.post("/v1/messages",{body:e,timeout:n??6e5,...t,stream:e.stream??!1})}stream(e,t){return xs.createMessage(this,e,t)}countTokens(e,t){return this._client.post("/v1/messages/count_tokens",{body:e,...t})}}const fc={"claude-1.3":"November 6th, 2024","claude-1.3-100k":"November 6th, 2024","claude-instant-1.1":"November 6th, 2024","claude-instant-1.1-100k":"November 6th, 2024","claude-instant-1.2":"November 6th, 2024","claude-3-sonnet-20240229":"July 21st, 2025","claude-3-opus-20240229":"January 5th, 2026","claude-2.1":"July 21st, 2025","claude-2.0":"July 21st, 2025","claude-3-5-sonnet-20241022":"October 22, 2025","claude-3-5-sonnet-20240620":"October 22, 2025"};ti.Batches=dc;class hc extends Re{static{c(this,"Models")}retrieve(e,t={},n){const{betas:r}=t??{};return this._client.get(Ce`/v1/models/${e}`,{...n,headers:G([{...r?.toString()!=null?{"anthropic-beta":r?.toString()}:void 0},n?.headers])})}list(e={},t){const{betas:n,...r}=e??{};return this._client.getAPIList("/v1/models",sn,{query:r,...t,headers:G([{...n?.toString()!=null?{"anthropic-beta":n?.toString()}:void 0},t?.headers])})}}const Ts=c(s=>{if(typeof globalThis.process<"u")return globalThis.process.env?.[s]?.trim()??void 0;if(typeof globalThis.Deno<"u")return globalThis.Deno.env?.get?.(s)?.trim()},"readEnv");var ni,si,Es,pc;const Lf="\\n\\nHuman:",Df="\\n\\nAssistant:";class ee{static{c(this,"BaseAnthropic")}constructor({baseURL:e=Ts("ANTHROPIC_BASE_URL"),apiKey:t=Ts("ANTHROPIC_API_KEY")??null,authToken:n=Ts("ANTHROPIC_AUTH_TOKEN")??null,...r}={}){ni.add(this),Es.set(this,void 0);const i={apiKey:t,authToken:n,...r,baseURL:e||"https://api.anthropic.com"};if(!i.dangerouslyAllowBrowser&&rf())throw new j(`It looks like you're running in a browser-like environment.
|
|
164
164
|
|
|
165
165
|
This is disabled by default, as it risks exposing your secret API credentials to attackers.
|
|
166
166
|
If you understand the risks and have appropriate mitigations in place,
|
|
167
167
|
you can set the \`dangerouslyAllowBrowser\` option to \`true\`, e.g.,
|
|
168
168
|
|
|
169
169
|
new Anthropic({ apiKey, dangerouslyAllowBrowser: true });
|
|
170
|
-
`);this.baseURL=i.baseURL,this.timeout=i.timeout??si.DEFAULT_TIMEOUT,this.logger=i.logger??console;const o="warn";this.logLevel=o,this.logLevel=Fa(i.logLevel,"ClientOptions.logLevel",this)??Fa(Ts("ANTHROPIC_LOG"),"process.env['ANTHROPIC_LOG']",this)??o,this.fetchOptions=i.fetchOptions,this.maxRetries=i.maxRetries??2,this.fetch=i.fetch??uf(),P(this,Es,ff),this._options=i,this.apiKey=t,this.authToken=n}withOptions(e){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,authToken:this.authToken,...e})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:e,nulls:t}){if(!(this.apiKey&&e.get("x-api-key"))&&!t.has("x-api-key")&&!(this.authToken&&e.get("authorization"))&&!t.has("authorization"))throw new Error('Could not resolve authentication method. Expected either apiKey or authToken to be set. Or for one of the "X-Api-Key" or "Authorization" headers to be explicitly omitted')}async authHeaders(e){return G([await this.apiKeyAuth(e),await this.bearerAuth(e)])}async apiKeyAuth(e){if(this.apiKey!=null)return G([{"X-Api-Key":this.apiKey}])}async bearerAuth(e){if(this.authToken!=null)return G([{Authorization:`Bearer ${this.authToken}`}])}stringifyQuery(e){return Object.entries(e).filter(([t,n])=>typeof n<"u").map(([t,n])=>{if(typeof n=="string"||typeof n=="number"||typeof n=="boolean")return`${encodeURIComponent(t)}=${encodeURIComponent(n)}`;if(n===null)return`${encodeURIComponent(t)}=`;throw new D(`Cannot stringify type ${typeof n}; Expected string, number, boolean, or null. If you need to pass nested query parameters, you can manually encode them, e.g. { query: { 'foo[key1]': value1, 'foo[key2]': value2 } }, and please open a GitHub issue requesting better support for your use case.`)}).join("&")}getUserAgent(){return`${this.constructor.name}/JS ${At}`}defaultIdempotencyKey(){return`stainless-node-retry-${wa()}`}makeStatusError(e,t,n,r){return re.generate(e,t,n,r)}buildURL(e,t,n){const r=!S(this,ni,"m",pc).call(this)&&n||this.baseURL,i=Zd(e)?new URL(e):new URL(r+(r.endsWith("/")&&e.startsWith("/")?e.slice(1):e)),o=this.defaultQuery();return ef(o)||(t={...o,...t}),typeof t=="object"&&t&&!Array.isArray(t)&&(i.search=this.stringifyQuery(t)),i.toString()}_calculateNonstreamingTimeout(e){if(3600*e/128e3>600)throw new D("Streaming is required for operations that may take longer than 10 minutes. See https://github.com/anthropics/anthropic-sdk-typescript#streaming-responses for more details");return 600*1e3}async prepareOptions(e){}async prepareRequest(e,{url:t,options:n}){}get(e,t){return this.methodRequest("get",e,t)}post(e,t){return this.methodRequest("post",e,t)}patch(e,t){return this.methodRequest("patch",e,t)}put(e,t){return this.methodRequest("put",e,t)}delete(e,t){return this.methodRequest("delete",e,t)}methodRequest(e,t,n){return this.request(Promise.resolve(n).then(r=>({method:e,path:t,...r})))}request(e,t=null){return new Is(this,this.makeRequest(e,t,void 0))}async makeRequest(e,t,n){const r=await e,i=r.maxRetries??this.maxRetries;t==null&&(t=i),await this.prepareOptions(r);const{req:o,url:a,timeout:l}=await this.buildRequest(r,{retryCount:i-t});await this.prepareRequest(o,{url:a,options:r});const u="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),d=n===void 0?"":`, retryOf: ${n}`,f=Date.now();if(ie(this).debug(`[${u}] sending request`,tt({retryOfRequestLogID:n,method:r.method,url:a,options:r,headers:o.headers})),r.signal?.aborted)throw new ve;const p=new AbortController,m=await this.fetchWithTimeout(a,o,l,p).catch(Fr),y=Date.now();if(m instanceof globalThis.Error){const k=`retrying, ${t} attempts remaining`;if(r.signal?.aborted)throw new ve;const T=Qt(m)||/timed? ?out/i.test(String(m)+("cause"in m?String(m.cause):""));if(t)return ie(this).info(`[${u}] connection ${T?"timed out":"failed"} - ${k}`),ie(this).debug(`[${u}] connection ${T?"timed out":"failed"} (${k})`,tt({retryOfRequestLogID:n,url:a,durationMs:y-f,message:m.message})),this.retryRequest(r,t,n??u);throw ie(this).info(`[${u}] connection ${T?"timed out":"failed"} - error; no more retries left`),ie(this).debug(`[${u}] connection ${T?"timed out":"failed"} (error; no more retries left)`,tt({retryOfRequestLogID:n,url:a,durationMs:y-f,message:m.message})),T?new ba:new as({cause:m})}const h=[...m.headers.entries()].filter(([k])=>k==="request-id").map(([k,T])=>", "+k+": "+JSON.stringify(T)).join(""),w=`[${u}${d}${h}] ${o.method} ${a} ${m.ok?"succeeded":"failed"} with status ${m.status} in ${y-f}ms`;if(!m.ok){const k=await this.shouldRetry(m);if(t&&k){const L=`retrying, ${t} attempts remaining`;return await df(m.body),ie(this).info(`${w} - ${L}`),ie(this).debug(`[${u}] response error (${L})`,tt({retryOfRequestLogID:n,url:m.url,status:m.status,headers:m.headers,durationMs:y-f})),this.retryRequest(r,t,n??u,m.headers)}const T=k?"error; no more retries left":"error; not retryable";ie(this).info(`${w} - ${T}`);const I=await m.text().catch(L=>Fr(L).message),E=$a(I),$=E?void 0:I;throw ie(this).debug(`[${u}] response error (${T})`,tt({retryOfRequestLogID:n,url:m.url,status:m.status,headers:m.headers,message:$,durationMs:Date.now()-f})),this.makeStatusError(m.status,E,$,m.headers)}return ie(this).info(w),ie(this).debug(`[${u}] response start`,tt({retryOfRequestLogID:n,url:m.url,status:m.status,headers:m.headers,durationMs:y-f})),{response:m,options:r,controller:p,requestLogID:u,retryOfRequestLogID:n,startTime:f}}getAPIList(e,t,n){return this.requestAPIList(t,{method:"get",path:e,...n})}requestAPIList(e,t){const n=this.makeRequest(t,null,void 0);return new Cf(this,n,e)}async fetchWithTimeout(e,t,n,r){const{signal:i,method:o,...a}=t||{};i&&i.addEventListener("abort",()=>r.abort());const l=setTimeout(()=>r.abort(),n),u=globalThis.ReadableStream&&a.body instanceof globalThis.ReadableStream||typeof a.body=="object"&&a.body!==null&&Symbol.asyncIterator in a.body,d={signal:r.signal,...u?{duplex:"half"}:{},method:"GET",...a};o&&(d.method=o.toUpperCase());try{return await this.fetch.call(void 0,e,d)}finally{clearTimeout(l)}}async shouldRetry(e){const t=e.headers.get("x-should-retry");return t==="true"?!0:t==="false"?!1:e.status===408||e.status===409||e.status===429||e.status>=500}async retryRequest(e,t,n,r){let i;const o=r?.get("retry-after-ms");if(o){const l=parseFloat(o);Number.isNaN(l)||(i=l)}const a=r?.get("retry-after");if(a&&!i){const l=parseFloat(a);Number.isNaN(l)?i=Date.parse(a)-Date.now():i=l*1e3}if(!(i&&0<=i&&i<60*1e3)){const l=e.maxRetries??this.maxRetries;i=this.calculateDefaultRetryTimeoutMillis(t,l)}return await sf(i),this.makeRequest(e,t-1,n)}calculateDefaultRetryTimeoutMillis(e,t){const i=t-e,o=Math.min(.5*Math.pow(2,i),8),a=1-Math.random()*.25;return o*a*1e3}calculateNonstreamingTimeout(e,t){if(36e5*e/128e3>6e5||t!=null&&e>t)throw new D("Streaming is required for operations that may take longer than 10 minutes. See https://github.com/anthropics/anthropic-sdk-typescript#long-requests for more details");return 6e5}async buildRequest(e,{retryCount:t=0}={}){const n={...e},{method:r,path:i,query:o,defaultBaseURL:a}=n,l=this.buildURL(i,o,a);"timeout"in n&&nf("timeout",n.timeout),n.timeout=n.timeout??this.timeout;const{bodyHeaders:u,body:d}=this.buildBody({options:n}),f=await this.buildHeaders({options:e,method:r,bodyHeaders:u,retryCount:t});return{req:{method:r,headers:f,...n.signal&&{signal:n.signal},...globalThis.ReadableStream&&d instanceof globalThis.ReadableStream&&{duplex:"half"},...d&&{body:d},...this.fetchOptions??{},...n.fetchOptions??{}},url:l,timeout:n.timeout}}async buildHeaders({options:e,method:t,bodyHeaders:n,retryCount:r}){let i={};this.idempotencyHeader&&t!=="get"&&(e.idempotencyKey||(e.idempotencyKey=this.defaultIdempotencyKey()),i[this.idempotencyHeader]=e.idempotencyKey);const o=G([i,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(r),...e.timeout?{"X-Stainless-Timeout":String(Math.trunc(e.timeout/1e3))}:{},...lf(),...this._options.dangerouslyAllowBrowser?{"anthropic-dangerous-direct-browser-access":"true"}:void 0,"anthropic-version":"2023-06-01"},await this.authHeaders(e),this._options.defaultHeaders,n,e.headers]);return this.validateHeaders(o),o.values}buildBody({options:{body:e,headers:t}}){if(!e)return{bodyHeaders:void 0,body:void 0};const n=G([t]);return ArrayBuffer.isView(e)||e instanceof ArrayBuffer||e instanceof DataView||typeof e=="string"&&n.values.has("content-type")||globalThis.Blob&&e instanceof globalThis.Blob||e instanceof FormData||e instanceof URLSearchParams||globalThis.ReadableStream&&e instanceof globalThis.ReadableStream?{bodyHeaders:void 0,body:e}:typeof e=="object"&&(Symbol.asyncIterator in e||Symbol.iterator in e&&"next"in e&&typeof e.next=="function")?{bodyHeaders:void 0,body:Ma(e)}:S(this,Es,"f").call(this,{body:e,headers:n})}}si=ee,Es=new WeakMap,ni=new WeakSet,pc=c(function(){return this.baseURL!=="https://api.anthropic.com"},"_BaseAnthropic_baseURLOverridden2"),ee.Anthropic=si,ee.HUMAN_PROMPT=Lf,ee.AI_PROMPT=Df,ee.DEFAULT_TIMEOUT=6e5,ee.AnthropicError=D,ee.APIError=re,ee.APIConnectionError=as,ee.APIConnectionTimeoutError=ba,ee.APIUserAbortError=ve,ee.NotFoundError=ka,ee.ConflictError=_a,ee.RateLimitError=Ea,ee.BadRequestError=Sa,ee.AuthenticationError=va,ee.InternalServerError=Oa,ee.PermissionDeniedError=Ca,ee.UnprocessableEntityError=Ta,ee.toFile=If;class gn extends ee{static{c(this,"Anthropic")}constructor(){super(...arguments),this.completions=new oc(this),this.messages=new ti(this),this.models=new hc(this),this.beta=new un(this)}}gn.Completions=oc,gn.Messages=ti,gn.Models=hc,gn.Beta=un;const jf="claude-sonnet-4-20250514";class ci{static{c(this,"TestEnvironment")}client;connectionId;testsDir;testBasePath;options;llm;state={};constructor({connectionId:e,testsDir:t,testBasePath:n,client:r,options:i,llm:o}){this.client=r,this.connectionId=e,this.testsDir=t,this.testBasePath=n,this.llm=o,this.options=i}static async create({connectionId:e,testBasePath:t,options:n}){const r=$n();if(!r)throw new Error("No configuration found. Please set MEMBRANE_WORKSPACE_KEY and MEMBRANE_WORKSPACE_SECRET environment variables, or run `membrane init` first.");if(!r.workspaceKey||!r.workspaceSecret)throw new Error("Missing workspace credentials");if(!r.anthropicApiKey)throw new Error("Anthropic API key not configured. Run `membrane init` to set up testing.");const i=new hi({token:await this.createMembraneToken(r),apiUri:r.apiUri}),o=new gn({apiKey:r.anthropicApiKey}),a={complete:c(async({prompt:l,maxTokens:u})=>{const d=await o.messages.create({model:jf,max_tokens:u,messages:[{role:"user",content:l}]});return d.content[0].type==="text"?d.content[0].text:""},"complete")};return new ci({client:i,options:n,connectionId:e,testsDir:"src/testing/tests",testBasePath:t,llm:a})}async run(e){this.state={};const t={};for(const n of e)await n.run(),Ks(t,n.getResult());this.writeResults(t)}async readYaml(e){const t=B.join(this.testsDir,this.testBasePath,this.connectionId,e);return Vs(t)}async writeYaml(e,t){const n=B.join(this.testsDir,this.testBasePath,this.connectionId,e);j.mkdirSync(B.dirname(n),{recursive:!0}),j.writeFileSync(n,Dt.dump(t,{noRefs:!0}))}writeResults(e){const t=B.join(this.testsDir,this.testBasePath,this.connectionId);j.mkdirSync(t,{recursive:!0});const n=B.join(t,"test-results.yaml");j.writeFileSync(n,Dt.dump(e,{noRefs:!0})),console.debug(`[TestRunner] Results written to: ${n}`)}static async createMembraneToken(e){const t=e.testCustomerId||"test-customer",n={id:t,name:t},r={issuer:e.workspaceKey,expiresIn:7200,algorithm:"HS512"};return Fs.sign(n,e.workspaceSecret,r)}}el.interpolate=/{{([\s\S]+?)}}/g;function ri(s,e){if(typeof s=="string"){const t=Zc(s),n={state:e,random:{number:c(()=>jt.number.int(),"number"),alphaNumeric:c(i=>jt.string.alphanumeric(i),"alphaNumeric")},faker:{company:{name:c(()=>jt.company.name(),"name"),catchPhrase:c(()=>jt.company.catchPhrase(),"catchPhrase")},internet:{email:c(()=>jt.internet.email(),"email")}},entries:e["journal-entries"],orders:e["purchase-orders"]||e["sales-orders"],bills:e["vendor-bills"]},r=t(n);return s.includes("{{")&&s.includes("}}")&&(console.debug(`[TEMPLATE] Input: ${s}`),console.debug(`[TEMPLATE] Output: ${r}`)),r}return Array.isArray(s)?s.map(t=>ri(t,e)):typeof s=="object"&&s!==null?Object.fromEntries(Object.entries(s).map(([t,n])=>[t,ri(n,e)])):s}c(ri,"processNode");function Ff(s,e){return ri(s,e)}c(Ff,"handleTemplate");class qf{static{c(this,"BaseTestSuite")}result;environment;constructor({environment:e}){this.environment=e,this.result={}}async run(){}getResult(){return this.result}async runTest(e){console.debug(`${_.bold.cyan("[start]")} ${_.yellow(e.path)}`);let t=!1,n=!1,r={},i={},o;for(;!t;)try{i=await e.readTestCase(),i||(i=await e.generateConfig(),await this.environment.writeYaml(e.getTestCasePath(),i),console.debug(`${_.bold.yellow("[initialized]")} ${_.yellow(e.path)}`)),o=Ff(i,this.environment.state),await e.run(o),console.debug(`${_.bold.green("[success]")} ${_.yellow(e.path)}`),t=!0,r=e.getResult(),Ls(this.result,e.path,r)}catch(l){if(console.error(`${_.bold.red("[error]")} ${_.yellow(e.path)}: ${l}`),this.environment.options.fix&&!n){n=!0;try{await e.fix(l);continue}catch(u){console.error(`${_.bold.red("[fix fail]")} ${_.yellow(e.path)}: ${u}`)}}Ls(this.result,e.path,{error:ke(l)}),t=!0,r={error:ke(l)}}const a={...o,result:r};await this.environment.writeYaml(e.getTestCasePath(),a)}async runTestSuite(e){await e.run(),Ks(this.result,e.getResult())}}class He{static{c(this,"BaseTester")}environment;level;logs;assertions;resultsLocator;path;constructor({environment:e,path:t}){this.environment=e,this.logs=[],this.assertions=[],this.path=t,this.level=0,this.resultsLocator=""}async fix(e){const t=await this.readTestCase();if(!t)throw new Error(`No config found for test ${this.path}`);const n=await this.fixTestCase({config:t,error:e});console.debug(_.bold.yellow("[auto-fix]"),this.path),await this.environment.writeYaml(this.getTestCasePath(),n)}async readTestCase(){const e=this.getTestCasePath();return this.environment.readYaml(e)}async generateConfig(){return{}}async fixTestCase(e){throw new Error(`Auto-fix is not implemented for test ${this.path}`)}getResult(){return{logs:this.logs,assertions:this.assertions}}async assert(e,t,n){try{const r=await e();r?(this.logMsg(`\u2705 ${t}`),this.assertions.push({message:t,result:r})):(this.logMsg(`\u274C ${t}`),this.assertions.push({message:t,result:!1,details:n}))}catch(r){this.assertions.push({message:t,result:!1,details:ke(r)}),this.logMsg(`\u274C ${t}: ${r.message}`)}}logMsg(e){console.debug(`${" ".repeat(this.level*2)}${e}`)}getTestCasePath(){return`${this.path}.test.yml`}}function ii(s,e){const t={};for(const n in e){if(!(n in s)){t[n]=e[n];continue}const r=s[n],i=e[n];if(r&&i&&typeof r=="object"&&typeof i=="object"){if(Array.isArray(r)&&Array.isArray(i)){const o=i.filter(a=>!r.some(l=>{if(typeof l=="object"&&typeof a=="object"&&l!==null&&a!==null&&!Array.isArray(l)&&!Array.isArray(a)){for(const u in a)if(!(u in l)||!oi(l[u],a[u]))return!1;return!0}else return JSON.stringify(l)===JSON.stringify(a)}));o.length>0&&(t[n]=o)}else if(!Array.isArray(r)&&!Array.isArray(i)){const o=ii(r,i);o!==null&&(t[n]=o)}else t[n]=i;continue}oi(r,i)||(t[n]=i)}return Object.keys(t).length===0?null:t}c(ii,"getNotMatchingSubFields");function oi(s,e){if(s==e||s?.toString?.()===e?.toString?.())return!0;const t=new Date(s),n=new Date(e);return!isNaN(t.getTime())&&!isNaN(n.getTime())?t.getTime()===n.getTime():!1}c(oi,"softCompare");class Kf extends He{static{c(this,"DataCollectionCreateTester")}dataCollectionKey;dataCollection;constructor({environment:e,dataCollectionKey:t,dataCollection:n}){super({environment:e,path:`data/${t}/create`}),this.dataCollectionKey=t,this.dataCollection=n}async run(e){const t=await this.environment.client.connection(this.environment.connectionId).dataCollection(this.dataCollectionKey).create(e.input);await this.assert(()=>!!t.id,"Returned ID of a created record"),t.id&&(this.environment.state[this.dataCollectionKey]={createdRecordId:t.id});const n=Ds(this.dataCollection);if(this.dataCollection.findById){const i=await this.environment.client.connection(this.environment.connectionId).dataCollection(this.dataCollectionKey).findById({id:t.id});await this.assert(()=>!!i.record,"Record is returned from findById"),i.record&&(this.environment.state[this.dataCollectionKey]={createdRecordId:t.id,createdRecord:i.record.fields});const o=pi(n),a=bn(e.input.fields,o,{skipUnknownFields:!0}),l=bn(i.record.fields,o),u=ii(l,a);await this.assert(()=>!u,"Returned fields match created fields",{difference:u,sentFields:a,receivedFields:l})}const r=Ac(n??{});if(r.length>0){const i={};r.forEach(a=>{const l=Ic(e.input.fields,a);typeof l<"u"&&Ls(i,a,l)});const o=await this.environment.client.connection(this.environment.connectionId).dataCollection(this.dataCollectionKey).create({fields:i});await this.assert(()=>!!o.id,"Record can be created with schema-defined required fields only")}}async generateConfig(){const e=Ds(this.dataCollection);if(!e?.properties)throw new Error("No fields schema found for data collection");return{input:{fields:await this.generateFieldsWithLLM(e)}}}async fixTestCase({config:e,error:t}){const n=ke(t),r=Ds(this.dataCollection),i=await this.getExampleRecordsForSchema(r),o=`I'm trying to create a data record in a data collection with the following fields schema:
|
|
170
|
+
`);this.baseURL=i.baseURL,this.timeout=i.timeout??si.DEFAULT_TIMEOUT,this.logger=i.logger??console;const o="warn";this.logLevel=o,this.logLevel=Fa(i.logLevel,"ClientOptions.logLevel",this)??Fa(Ts("ANTHROPIC_LOG"),"process.env['ANTHROPIC_LOG']",this)??o,this.fetchOptions=i.fetchOptions,this.maxRetries=i.maxRetries??2,this.fetch=i.fetch??uf(),P(this,Es,ff),this._options=i,this.apiKey=t,this.authToken=n}withOptions(e){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,authToken:this.authToken,...e})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:e,nulls:t}){if(!(this.apiKey&&e.get("x-api-key"))&&!t.has("x-api-key")&&!(this.authToken&&e.get("authorization"))&&!t.has("authorization"))throw new Error('Could not resolve authentication method. Expected either apiKey or authToken to be set. Or for one of the "X-Api-Key" or "Authorization" headers to be explicitly omitted')}async authHeaders(e){return G([await this.apiKeyAuth(e),await this.bearerAuth(e)])}async apiKeyAuth(e){if(this.apiKey!=null)return G([{"X-Api-Key":this.apiKey}])}async bearerAuth(e){if(this.authToken!=null)return G([{Authorization:`Bearer ${this.authToken}`}])}stringifyQuery(e){return Object.entries(e).filter(([t,n])=>typeof n<"u").map(([t,n])=>{if(typeof n=="string"||typeof n=="number"||typeof n=="boolean")return`${encodeURIComponent(t)}=${encodeURIComponent(n)}`;if(n===null)return`${encodeURIComponent(t)}=`;throw new j(`Cannot stringify type ${typeof n}; Expected string, number, boolean, or null. If you need to pass nested query parameters, you can manually encode them, e.g. { query: { 'foo[key1]': value1, 'foo[key2]': value2 } }, and please open a GitHub issue requesting better support for your use case.`)}).join("&")}getUserAgent(){return`${this.constructor.name}/JS ${At}`}defaultIdempotencyKey(){return`stainless-node-retry-${wa()}`}makeStatusError(e,t,n,r){return re.generate(e,t,n,r)}buildURL(e,t,n){const r=!S(this,ni,"m",pc).call(this)&&n||this.baseURL,i=Zd(e)?new URL(e):new URL(r+(r.endsWith("/")&&e.startsWith("/")?e.slice(1):e)),o=this.defaultQuery();return ef(o)||(t={...o,...t}),typeof t=="object"&&t&&!Array.isArray(t)&&(i.search=this.stringifyQuery(t)),i.toString()}_calculateNonstreamingTimeout(e){if(3600*e/128e3>600)throw new j("Streaming is required for operations that may take longer than 10 minutes. See https://github.com/anthropics/anthropic-sdk-typescript#streaming-responses for more details");return 600*1e3}async prepareOptions(e){}async prepareRequest(e,{url:t,options:n}){}get(e,t){return this.methodRequest("get",e,t)}post(e,t){return this.methodRequest("post",e,t)}patch(e,t){return this.methodRequest("patch",e,t)}put(e,t){return this.methodRequest("put",e,t)}delete(e,t){return this.methodRequest("delete",e,t)}methodRequest(e,t,n){return this.request(Promise.resolve(n).then(r=>({method:e,path:t,...r})))}request(e,t=null){return new Is(this,this.makeRequest(e,t,void 0))}async makeRequest(e,t,n){const r=await e,i=r.maxRetries??this.maxRetries;t==null&&(t=i),await this.prepareOptions(r);const{req:o,url:a,timeout:l}=await this.buildRequest(r,{retryCount:i-t});await this.prepareRequest(o,{url:a,options:r});const u="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),d=n===void 0?"":`, retryOf: ${n}`,f=Date.now();if(ie(this).debug(`[${u}] sending request`,tt({retryOfRequestLogID:n,method:r.method,url:a,options:r,headers:o.headers})),r.signal?.aborted)throw new ve;const p=new AbortController,m=await this.fetchWithTimeout(a,o,l,p).catch(Fr),y=Date.now();if(m instanceof globalThis.Error){const k=`retrying, ${t} attempts remaining`;if(r.signal?.aborted)throw new ve;const T=Qt(m)||/timed? ?out/i.test(String(m)+("cause"in m?String(m.cause):""));if(t)return ie(this).info(`[${u}] connection ${T?"timed out":"failed"} - ${k}`),ie(this).debug(`[${u}] connection ${T?"timed out":"failed"} (${k})`,tt({retryOfRequestLogID:n,url:a,durationMs:y-f,message:m.message})),this.retryRequest(r,t,n??u);throw ie(this).info(`[${u}] connection ${T?"timed out":"failed"} - error; no more retries left`),ie(this).debug(`[${u}] connection ${T?"timed out":"failed"} (error; no more retries left)`,tt({retryOfRequestLogID:n,url:a,durationMs:y-f,message:m.message})),T?new ba:new as({cause:m})}const h=[...m.headers.entries()].filter(([k])=>k==="request-id").map(([k,T])=>", "+k+": "+JSON.stringify(T)).join(""),w=`[${u}${d}${h}] ${o.method} ${a} ${m.ok?"succeeded":"failed"} with status ${m.status} in ${y-f}ms`;if(!m.ok){const k=await this.shouldRetry(m);if(t&&k){const L=`retrying, ${t} attempts remaining`;return await df(m.body),ie(this).info(`${w} - ${L}`),ie(this).debug(`[${u}] response error (${L})`,tt({retryOfRequestLogID:n,url:m.url,status:m.status,headers:m.headers,durationMs:y-f})),this.retryRequest(r,t,n??u,m.headers)}const T=k?"error; no more retries left":"error; not retryable";ie(this).info(`${w} - ${T}`);const I=await m.text().catch(L=>Fr(L).message),E=$a(I),$=E?void 0:I;throw ie(this).debug(`[${u}] response error (${T})`,tt({retryOfRequestLogID:n,url:m.url,status:m.status,headers:m.headers,message:$,durationMs:Date.now()-f})),this.makeStatusError(m.status,E,$,m.headers)}return ie(this).info(w),ie(this).debug(`[${u}] response start`,tt({retryOfRequestLogID:n,url:m.url,status:m.status,headers:m.headers,durationMs:y-f})),{response:m,options:r,controller:p,requestLogID:u,retryOfRequestLogID:n,startTime:f}}getAPIList(e,t,n){return this.requestAPIList(t,{method:"get",path:e,...n})}requestAPIList(e,t){const n=this.makeRequest(t,null,void 0);return new Cf(this,n,e)}async fetchWithTimeout(e,t,n,r){const{signal:i,method:o,...a}=t||{};i&&i.addEventListener("abort",()=>r.abort());const l=setTimeout(()=>r.abort(),n),u=globalThis.ReadableStream&&a.body instanceof globalThis.ReadableStream||typeof a.body=="object"&&a.body!==null&&Symbol.asyncIterator in a.body,d={signal:r.signal,...u?{duplex:"half"}:{},method:"GET",...a};o&&(d.method=o.toUpperCase());try{return await this.fetch.call(void 0,e,d)}finally{clearTimeout(l)}}async shouldRetry(e){const t=e.headers.get("x-should-retry");return t==="true"?!0:t==="false"?!1:e.status===408||e.status===409||e.status===429||e.status>=500}async retryRequest(e,t,n,r){let i;const o=r?.get("retry-after-ms");if(o){const l=parseFloat(o);Number.isNaN(l)||(i=l)}const a=r?.get("retry-after");if(a&&!i){const l=parseFloat(a);Number.isNaN(l)?i=Date.parse(a)-Date.now():i=l*1e3}if(!(i&&0<=i&&i<60*1e3)){const l=e.maxRetries??this.maxRetries;i=this.calculateDefaultRetryTimeoutMillis(t,l)}return await sf(i),this.makeRequest(e,t-1,n)}calculateDefaultRetryTimeoutMillis(e,t){const i=t-e,o=Math.min(.5*Math.pow(2,i),8),a=1-Math.random()*.25;return o*a*1e3}calculateNonstreamingTimeout(e,t){if(36e5*e/128e3>6e5||t!=null&&e>t)throw new j("Streaming is required for operations that may take longer than 10 minutes. See https://github.com/anthropics/anthropic-sdk-typescript#long-requests for more details");return 6e5}async buildRequest(e,{retryCount:t=0}={}){const n={...e},{method:r,path:i,query:o,defaultBaseURL:a}=n,l=this.buildURL(i,o,a);"timeout"in n&&nf("timeout",n.timeout),n.timeout=n.timeout??this.timeout;const{bodyHeaders:u,body:d}=this.buildBody({options:n}),f=await this.buildHeaders({options:e,method:r,bodyHeaders:u,retryCount:t});return{req:{method:r,headers:f,...n.signal&&{signal:n.signal},...globalThis.ReadableStream&&d instanceof globalThis.ReadableStream&&{duplex:"half"},...d&&{body:d},...this.fetchOptions??{},...n.fetchOptions??{}},url:l,timeout:n.timeout}}async buildHeaders({options:e,method:t,bodyHeaders:n,retryCount:r}){let i={};this.idempotencyHeader&&t!=="get"&&(e.idempotencyKey||(e.idempotencyKey=this.defaultIdempotencyKey()),i[this.idempotencyHeader]=e.idempotencyKey);const o=G([i,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(r),...e.timeout?{"X-Stainless-Timeout":String(Math.trunc(e.timeout/1e3))}:{},...lf(),...this._options.dangerouslyAllowBrowser?{"anthropic-dangerous-direct-browser-access":"true"}:void 0,"anthropic-version":"2023-06-01"},await this.authHeaders(e),this._options.defaultHeaders,n,e.headers]);return this.validateHeaders(o),o.values}buildBody({options:{body:e,headers:t}}){if(!e)return{bodyHeaders:void 0,body:void 0};const n=G([t]);return ArrayBuffer.isView(e)||e instanceof ArrayBuffer||e instanceof DataView||typeof e=="string"&&n.values.has("content-type")||globalThis.Blob&&e instanceof globalThis.Blob||e instanceof FormData||e instanceof URLSearchParams||globalThis.ReadableStream&&e instanceof globalThis.ReadableStream?{bodyHeaders:void 0,body:e}:typeof e=="object"&&(Symbol.asyncIterator in e||Symbol.iterator in e&&"next"in e&&typeof e.next=="function")?{bodyHeaders:void 0,body:Ma(e)}:S(this,Es,"f").call(this,{body:e,headers:n})}}si=ee,Es=new WeakMap,ni=new WeakSet,pc=c(function(){return this.baseURL!=="https://api.anthropic.com"},"_BaseAnthropic_baseURLOverridden2"),ee.Anthropic=si,ee.HUMAN_PROMPT=Lf,ee.AI_PROMPT=Df,ee.DEFAULT_TIMEOUT=6e5,ee.AnthropicError=j,ee.APIError=re,ee.APIConnectionError=as,ee.APIConnectionTimeoutError=ba,ee.APIUserAbortError=ve,ee.NotFoundError=ka,ee.ConflictError=_a,ee.RateLimitError=Ea,ee.BadRequestError=Sa,ee.AuthenticationError=va,ee.InternalServerError=Oa,ee.PermissionDeniedError=Ca,ee.UnprocessableEntityError=Ta,ee.toFile=If;class gn extends ee{static{c(this,"Anthropic")}constructor(){super(...arguments),this.completions=new oc(this),this.messages=new ti(this),this.models=new hc(this),this.beta=new un(this)}}gn.Completions=oc,gn.Messages=ti,gn.Models=hc,gn.Beta=un;const jf="claude-sonnet-4-20250514";class ci{static{c(this,"TestEnvironment")}client;connectionId;testsDir;testBasePath;options;llm;state={};constructor({connectionId:e,testsDir:t,testBasePath:n,client:r,options:i,llm:o}){this.client=r,this.connectionId=e,this.testsDir=t,this.testBasePath=n,this.llm=o,this.options=i}static async create({connectionId:e,testBasePath:t,options:n}){const r=$n();if(!r)throw new Error("No configuration found. Please set MEMBRANE_WORKSPACE_KEY and MEMBRANE_WORKSPACE_SECRET environment variables, or run `membrane init` first.");if(!r.workspaceKey||!r.workspaceSecret)throw new Error("Missing workspace credentials");if(!r.anthropicApiKey)throw new Error("Anthropic API key not configured. Run `membrane init` to set up testing.");const i=new hi({token:await this.createMembraneToken(r),apiUri:r.apiUri}),o=new gn({apiKey:r.anthropicApiKey}),a={complete:c(async({prompt:l,maxTokens:u})=>{const d=await o.messages.create({model:jf,max_tokens:u,messages:[{role:"user",content:l}]});return d.content[0].type==="text"?d.content[0].text:""},"complete")};return new ci({client:i,options:n,connectionId:e,testsDir:"src/testing/tests",testBasePath:t,llm:a})}async run(e){this.state={};const t={};for(const n of e)await n.run(),Ks(t,n.getResult());this.writeResults(t)}async readYaml(e){const t=B.join(this.testsDir,this.testBasePath,this.connectionId,e);return Vs(t)}async writeYaml(e,t){const n=B.join(this.testsDir,this.testBasePath,this.connectionId,e);F.mkdirSync(B.dirname(n),{recursive:!0}),F.writeFileSync(n,Dt.dump(t,{noRefs:!0}))}writeResults(e){const t=B.join(this.testsDir,this.testBasePath,this.connectionId);F.mkdirSync(t,{recursive:!0});const n=B.join(t,"test-results.yaml");F.writeFileSync(n,Dt.dump(e,{noRefs:!0})),console.debug(`[TestRunner] Results written to: ${n}`)}static async createMembraneToken(e){const t=e.testCustomerId||"test-customer",n={id:t,name:t},r={issuer:e.workspaceKey,expiresIn:7200,algorithm:"HS512"};return Fs.sign(n,e.workspaceSecret,r)}}el.interpolate=/{{([\s\S]+?)}}/g;function ri(s,e){if(typeof s=="string"){const t=Zc(s),n={state:e,random:{number:c(()=>jt.number.int(),"number"),alphaNumeric:c(i=>jt.string.alphanumeric(i),"alphaNumeric")},faker:{company:{name:c(()=>jt.company.name(),"name"),catchPhrase:c(()=>jt.company.catchPhrase(),"catchPhrase")},internet:{email:c(()=>jt.internet.email(),"email")}},entries:e["journal-entries"],orders:e["purchase-orders"]||e["sales-orders"],bills:e["vendor-bills"]},r=t(n);return s.includes("{{")&&s.includes("}}")&&(console.debug(`[TEMPLATE] Input: ${s}`),console.debug(`[TEMPLATE] Output: ${r}`)),r}return Array.isArray(s)?s.map(t=>ri(t,e)):typeof s=="object"&&s!==null?Object.fromEntries(Object.entries(s).map(([t,n])=>[t,ri(n,e)])):s}c(ri,"processNode");function Ff(s,e){return ri(s,e)}c(Ff,"handleTemplate");class qf{static{c(this,"BaseTestSuite")}result;environment;constructor({environment:e}){this.environment=e,this.result={}}async run(){}getResult(){return this.result}async runTest(e){console.debug(`${_.bold.cyan("[start]")} ${_.yellow(e.path)}`);let t=!1,n=!1,r={},i={},o;for(;!t;)try{i=await e.readTestCase(),i||(i=await e.generateConfig(),await this.environment.writeYaml(e.getTestCasePath(),i),console.debug(`${_.bold.yellow("[initialized]")} ${_.yellow(e.path)}`)),o=Ff(i,this.environment.state),await e.run(o),console.debug(`${_.bold.green("[success]")} ${_.yellow(e.path)}`),t=!0,r=e.getResult(),Ls(this.result,e.path,r)}catch(l){if(console.error(`${_.bold.red("[error]")} ${_.yellow(e.path)}: ${l}`),this.environment.options.fix&&!n){n=!0;try{await e.fix(l);continue}catch(u){console.error(`${_.bold.red("[fix fail]")} ${_.yellow(e.path)}: ${u}`)}}Ls(this.result,e.path,{error:ke(l)}),t=!0,r={error:ke(l)}}const a={...o,result:r};await this.environment.writeYaml(e.getTestCasePath(),a)}async runTestSuite(e){await e.run(),Ks(this.result,e.getResult())}}class He{static{c(this,"BaseTester")}environment;level;logs;assertions;resultsLocator;path;constructor({environment:e,path:t}){this.environment=e,this.logs=[],this.assertions=[],this.path=t,this.level=0,this.resultsLocator=""}async fix(e){const t=await this.readTestCase();if(!t)throw new Error(`No config found for test ${this.path}`);const n=await this.fixTestCase({config:t,error:e});console.debug(_.bold.yellow("[auto-fix]"),this.path),await this.environment.writeYaml(this.getTestCasePath(),n)}async readTestCase(){const e=this.getTestCasePath();return this.environment.readYaml(e)}async generateConfig(){return{}}async fixTestCase(e){throw new Error(`Auto-fix is not implemented for test ${this.path}`)}getResult(){return{logs:this.logs,assertions:this.assertions}}async assert(e,t,n){try{const r=await e();r?(this.logMsg(`\u2705 ${t}`),this.assertions.push({message:t,result:r})):(this.logMsg(`\u274C ${t}`),this.assertions.push({message:t,result:!1,details:n}))}catch(r){this.assertions.push({message:t,result:!1,details:ke(r)}),this.logMsg(`\u274C ${t}: ${r.message}`)}}logMsg(e){console.debug(`${" ".repeat(this.level*2)}${e}`)}getTestCasePath(){return`${this.path}.test.yml`}}function ii(s,e){const t={};for(const n in e){if(!(n in s)){t[n]=e[n];continue}const r=s[n],i=e[n];if(r&&i&&typeof r=="object"&&typeof i=="object"){if(Array.isArray(r)&&Array.isArray(i)){const o=i.filter(a=>!r.some(l=>{if(typeof l=="object"&&typeof a=="object"&&l!==null&&a!==null&&!Array.isArray(l)&&!Array.isArray(a)){for(const u in a)if(!(u in l)||!oi(l[u],a[u]))return!1;return!0}else return JSON.stringify(l)===JSON.stringify(a)}));o.length>0&&(t[n]=o)}else if(!Array.isArray(r)&&!Array.isArray(i)){const o=ii(r,i);o!==null&&(t[n]=o)}else t[n]=i;continue}oi(r,i)||(t[n]=i)}return Object.keys(t).length===0?null:t}c(ii,"getNotMatchingSubFields");function oi(s,e){if(s==e||s?.toString?.()===e?.toString?.())return!0;const t=new Date(s),n=new Date(e);return!isNaN(t.getTime())&&!isNaN(n.getTime())?t.getTime()===n.getTime():!1}c(oi,"softCompare");class Kf extends He{static{c(this,"DataCollectionCreateTester")}dataCollectionKey;dataCollection;constructor({environment:e,dataCollectionKey:t,dataCollection:n}){super({environment:e,path:`data/${t}/create`}),this.dataCollectionKey=t,this.dataCollection=n}async run(e){const t=await this.environment.client.connection(this.environment.connectionId).dataCollection(this.dataCollectionKey).create(e.input);await this.assert(()=>!!t.id,"Returned ID of a created record"),t.id&&(this.environment.state[this.dataCollectionKey]={createdRecordId:t.id});const n=Ds(this.dataCollection);if(this.dataCollection.findById){const i=await this.environment.client.connection(this.environment.connectionId).dataCollection(this.dataCollectionKey).findById({id:t.id});await this.assert(()=>!!i.record,"Record is returned from findById"),i.record&&(this.environment.state[this.dataCollectionKey]={createdRecordId:t.id,createdRecord:i.record.fields});const o=pi(n),a=bn(e.input.fields,o,{skipUnknownFields:!0}),l=bn(i.record.fields,o),u=ii(l,a);await this.assert(()=>!u,"Returned fields match created fields",{difference:u,sentFields:a,receivedFields:l})}const r=Ac(n??{});if(r.length>0){const i={};r.forEach(a=>{const l=Ic(e.input.fields,a);typeof l<"u"&&Ls(i,a,l)});const o=await this.environment.client.connection(this.environment.connectionId).dataCollection(this.dataCollectionKey).create({fields:i});await this.assert(()=>!!o.id,"Record can be created with schema-defined required fields only")}}async generateConfig(){const e=Ds(this.dataCollection);if(!e?.properties)throw new Error("No fields schema found for data collection");return{input:{fields:await this.generateFieldsWithLLM(e)}}}async fixTestCase({config:e,error:t}){const n=ke(t),r=Ds(this.dataCollection),i=await this.getExampleRecordsForSchema(r),o=`I'm trying to create a data record in a data collection with the following fields schema:
|
|
171
171
|
|
|
172
172
|
${JSON.stringify(r,null,2)}
|
|
173
173
|
|