@director.run/cli 0.0.42 → 0.0.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/cli.js +2 -2
  2. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -544,7 +544,7 @@ Please see the 3.x to 4.x migration guide for details on how to update your app.
544
544
  `)+w,p=J+1,J=D.indexOf(`
545
545
  `,p)}while(J!==-1);return B+=D.slice(p),B}var{stdout:tP,stderr:rP}=nP,Eu=Symbol("GENERATOR"),zD=Symbol("STYLER"),BJ=Symbol("IS_EMPTY"),eP=["ansi","ansi","ansi256","ansi16m"],UD=Object.create(null),XH1=(D,F={})=>{if(F.level&&!(Number.isInteger(F.level)&&F.level>=0&&F.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let w=tP?tP.level:0;D.level=F.level===void 0?w:F.level};var EH1=(D)=>{let F=(...w)=>w.join(" ");return XH1(F,D),Object.setPrototypeOf(F,YJ.prototype),F};function YJ(D){return EH1(D)}Object.setPrototypeOf(YJ.prototype,Function.prototype);for(let[D,F]of Object.entries(a4))UD[D]={get(){let w=vQ(this,Ku(F.open,F.close,this[zD]),this[BJ]);return Object.defineProperty(this,D,{value:w}),w}};UD.visible={get(){let D=vQ(this,this[zD],!0);return Object.defineProperty(this,"visible",{value:D}),D}};var Wu=(D,F,w,...J)=>{if(D==="rgb"){if(F==="ansi16m")return a4[w].ansi16m(...J);if(F==="ansi256")return a4[w].ansi256(a4.rgbToAnsi256(...J));return a4[w].ansi(a4.rgbToAnsi(...J))}if(D==="hex")return Wu("rgb",F,w,...a4.hexToRgb(...J));return a4[w][D](...J)},WH1=["rgb","hex","ansi256"];for(let D of WH1){UD[D]={get(){let{level:w}=this;return function(...J){let p=Ku(Wu(D,eP[w],"color",...J),a4.color.close,this[zD]);return vQ(this,p,this[BJ])}}};let F="bg"+D[0].toUpperCase()+D.slice(1);UD[F]={get(){let{level:w}=this;return function(...J){let p=Ku(Wu(D,eP[w],"bgColor",...J),a4.bgColor.close,this[zD]);return vQ(this,p,this[BJ])}}}}var KH1=Object.defineProperties(()=>{},{...UD,level:{enumerable:!0,get(){return this[Eu].level},set(D){this[Eu].level=D}}}),Ku=(D,F,w)=>{let J,p;if(w===void 0)J=D,p=F;else J=w.openAll+D,p=F+w.closeAll;return{open:D,close:F,openAll:J,closeAll:p,parent:w}},vQ=(D,F,w)=>{let J=(...p)=>VH1(J,p.length===1?""+p[0]:p.join(" "));return Object.setPrototypeOf(J,KH1),J[Eu]=D,J[zD]=F,J[BJ]=w,J},VH1=(D,F)=>{if(D.level<=0||!F)return D[BJ]?"":F;let w=D[zD];if(w===void 0)return F;let{openAll:J,closeAll:p}=w;if(F.includes("\x1B"))while(w!==void 0)F=oP(F,w.close,w.open),w=w.parent;let B=F.indexOf(`
546
546
  `);if(B!==-1)F=sP(F,p,J,B);return J+F+p};Object.defineProperties(YJ.prototype,UD);var HH1=YJ(),GB0=YJ({level:rP?rP.level:0});var x1=HH1;var Jx=z1(wx(),1),O8=Gu("#0099F7"),z5=Gu("#F11712"),QJ=Gu("#00FF00"),Hu=(D)=>x1.yellow(D);function Gu(D){let F=zH1(D);return(w)=>`\x1B[38;5;${F}m${w}${Jx.default.reset("")}`}function zH1(D){let F=parseInt(D.slice(1),16),w=Math.floor(F/65536)%256,J=Math.floor(F/256)%256,p=F%256;return 16+36*Math.round(w/255*5)+6*Math.round(J/255*5)+Math.round(p/255*5)}function G2(D){return x1.white.bold(D)}var uu=" ".repeat(2);function Yx(D){let F=[];if(D._enableDebugCommands)F.push(Hu("\uD83D\uDEA7 debug commands appear in yellow \uD83D\uDEA7")),F.push("");if(F.push(D.description().trim()),F.push(""),F.push(ZD("usage")),F.push(uu+XJ([D.parent?D.parent.name():"",D.name(),Xx("command"),"[subcommand]","[flags]"])),F.push(""),D.parent)F.push(ZD(`${D.name()} commands`));else F.push(ZD("core commands"));D.commands.toSorted((J,p)=>Number(!!J.commands.length)-Number(!!p.commands.length)).forEach((J)=>{if(J.commands.length)F.push(""),F.push(ZD(J.name())),J.commands.forEach((p)=>{F.push(px(p))});else F.push(px(J))}),F.push("");let w=[D._helpOption,...D.options].filter((J)=>J!==void 0);if(w.length)F.push(ZD("flags")),w.forEach((J)=>{F.push(XJ([uu,J.flags,Qx(J.description,J.flags.length)]))}),F.push("");if(D.examples)F.push(ZD("examples")),F.push(" "+D.examples.trim()),F.push("");return F.push(""),F.join(`
547
- `)}var ZD=(D)=>{return G2(D.toLocaleUpperCase())},px=(D)=>{let F=D.registeredArguments.map((B)=>B.required?Xx(B.name()):Bx(B.name())).filter((B)=>B!=="").join(" "),w=XJ([XJ([D.parent&&D.parent.parent?D.parent?.name():void 0,D.name()]),F,D.options.length?Bx("options"):""]),J=D.description()||z5("TODO"),p=XJ([uu,w,Qx(J,w.length)]);return D._debug?Hu(p):p},Qx=(D,F)=>{return" ".repeat(Math.max(0,45-F))+D},Xx=(D)=>["<",D,">"].join(""),Bx=(D)=>["[",D,"]"].join(""),XJ=(D)=>D.filter(Boolean).join(" ");class U5 extends Qu{debug=!0;examples="";constructor(D){super(D);this.helpCommand(!1)}showDebugCommands(D){return this._enableDebugCommands=D,this}debugCommand(D,F){if(this._enableDebugCommands){let w=super.command(D,F);return w._enableDebugCommands=!0,w._debug=!0,w}else return new Qu(D)}helpInformation(D){return Yx(this)}addExamples(D){this.examples=D}addCommand(D,F){return D._enableDebugCommands=this._enableDebugCommands,D._debug=this._debug,super.addCommand(D,F)}}function L8({flags:D,description:F,defaultValue:w,choices:J,mandatory:p}){let B=new yP(D,F);return p&&B.makeOptionMandatory(),w&&B.default(w),J&&B.choices(J),B}var K9={name:"@director.run/cli",type:"module",version:"0.0.42",files:["dist","README.md"],bin:{director:"./dist/cli.js"},license:"MIT",repository:{type:"git",url:"https://github.com/director-run/director"},description:"The easiest way to manage and deploy MCP servers",author:"The Working Company <hello@director.run>",homepage:"https://director.run",scripts:{lint:"biome check .",format:"biome format --write .",clean:"rm -rf .turbo dist/*",test:"bun run vitest --fileParallelism=false",cli:"NODE_ENV=development bun run bin/cli.ts",typecheck:"tsc --noEmit",build:"bun build --production --target=node bin/cli.ts --outdir dist",release:"bun publish --access public --omit=peer",prepare:"bun run build",dev:"bun --watch bin/cli.ts"},peerDependencies:{typescript:"^5"},devDependencies:{"@director.run/gateway":"workspace:*","@director.run/mcp":"workspace:*","@director.run/utilities":"workspace:*","@inquirer/prompts":"^7.5.2","@types/update-notifier":"^6.0.8",boxen:"^8.0.1",chalk:"^5.4.1","cli-table3":"^0.6.5",commander:"^13.1.0",semver:"^7.7.2",superjson:"^2.2.2","type-fest":"^4.40.0","update-notifier":"^7.3.1","@segment/analytics-node":"^2.3.0","node-machine-id":"^1.1.12"}};import kQ from"node:process";function Nu({onlyFirst:D=!1}={}){let w=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(w,D?void 0:"g")}var ZH1=Nu();function Z5(D){if(typeof D!=="string")throw new TypeError(`Expected a \`string\`, got \`${typeof D}\``);return D.replace(ZH1,"")}function Ex(D){return D===161||D===164||D===167||D===168||D===170||D===173||D===174||D>=176&&D<=180||D>=182&&D<=186||D>=188&&D<=191||D===198||D===208||D===215||D===216||D>=222&&D<=225||D===230||D>=232&&D<=234||D===236||D===237||D===240||D===242||D===243||D>=247&&D<=250||D===252||D===254||D===257||D===273||D===275||D===283||D===294||D===295||D===299||D>=305&&D<=307||D===312||D>=319&&D<=322||D===324||D>=328&&D<=331||D===333||D===338||D===339||D===358||D===359||D===363||D===462||D===464||D===466||D===468||D===470||D===472||D===474||D===476||D===593||D===609||D===708||D===711||D>=713&&D<=715||D===717||D===720||D>=728&&D<=731||D===733||D===735||D>=768&&D<=879||D>=913&&D<=929||D>=931&&D<=937||D>=945&&D<=961||D>=963&&D<=969||D===1025||D>=1040&&D<=1103||D===1105||D===8208||D>=8211&&D<=8214||D===8216||D===8217||D===8220||D===8221||D>=8224&&D<=8226||D>=8228&&D<=8231||D===8240||D===8242||D===8243||D===8245||D===8251||D===8254||D===8308||D===8319||D>=8321&&D<=8324||D===8364||D===8451||D===8453||D===8457||D===8467||D===8470||D===8481||D===8482||D===8486||D===8491||D===8531||D===8532||D>=8539&&D<=8542||D>=8544&&D<=8555||D>=8560&&D<=8569||D===8585||D>=8592&&D<=8601||D===8632||D===8633||D===8658||D===8660||D===8679||D===8704||D===8706||D===8707||D===8711||D===8712||D===8715||D===8719||D===8721||D===8725||D===8730||D>=8733&&D<=8736||D===8739||D===8741||D>=8743&&D<=8748||D===8750||D>=8756&&D<=8759||D===8764||D===8765||D===8776||D===8780||D===8786||D===8800||D===8801||D>=8804&&D<=8807||D===8810||D===8811||D===8814||D===8815||D===8834||D===8835||D===8838||D===8839||D===8853||D===8857||D===8869||D===8895||D===8978||D>=9312&&D<=9449||D>=9451&&D<=9547||D>=9552&&D<=9587||D>=9600&&D<=9615||D>=9618&&D<=9621||D===9632||D===9633||D>=9635&&D<=9641||D===9650||D===9651||D===9654||D===9655||D===9660||D===9661||D===9664||D===9665||D>=9670&&D<=9672||D===9675||D>=9678&&D<=9681||D>=9698&&D<=9701||D===9711||D===9733||D===9734||D===9737||D===9742||D===9743||D===9756||D===9758||D===9792||D===9794||D===9824||D===9825||D>=9827&&D<=9829||D>=9831&&D<=9834||D===9836||D===9837||D===9839||D===9886||D===9887||D===9919||D>=9926&&D<=9933||D>=9935&&D<=9939||D>=9941&&D<=9953||D===9955||D===9960||D===9961||D>=9963&&D<=9969||D===9972||D>=9974&&D<=9977||D===9979||D===9980||D===9982||D===9983||D===10045||D>=10102&&D<=10111||D>=11094&&D<=11097||D>=12872&&D<=12879||D>=57344&&D<=63743||D>=65024&&D<=65039||D===65533||D>=127232&&D<=127242||D>=127248&&D<=127277||D>=127280&&D<=127337||D>=127344&&D<=127373||D===127375||D===127376||D>=127387&&D<=127404||D>=917760&&D<=917999||D>=983040&&D<=1048573||D>=1048576&&D<=1114109}function Wx(D){return D===12288||D>=65281&&D<=65376||D>=65504&&D<=65510}function Kx(D){return D>=4352&&D<=4447||D===8986||D===8987||D===9001||D===9002||D>=9193&&D<=9196||D===9200||D===9203||D===9725||D===9726||D===9748||D===9749||D>=9776&&D<=9783||D>=9800&&D<=9811||D===9855||D>=9866&&D<=9871||D===9875||D===9889||D===9898||D===9899||D===9917||D===9918||D===9924||D===9925||D===9934||D===9940||D===9962||D===9970||D===9971||D===9973||D===9978||D===9981||D===9989||D===9994||D===9995||D===10024||D===10060||D===10062||D>=10067&&D<=10069||D===10071||D>=10133&&D<=10135||D===10160||D===10175||D===11035||D===11036||D===11088||D===11093||D>=11904&&D<=11929||D>=11931&&D<=12019||D>=12032&&D<=12245||D>=12272&&D<=12287||D>=12289&&D<=12350||D>=12353&&D<=12438||D>=12441&&D<=12543||D>=12549&&D<=12591||D>=12593&&D<=12686||D>=12688&&D<=12773||D>=12783&&D<=12830||D>=12832&&D<=12871||D>=12880&&D<=42124||D>=42128&&D<=42182||D>=43360&&D<=43388||D>=44032&&D<=55203||D>=63744&&D<=64255||D>=65040&&D<=65049||D>=65072&&D<=65106||D>=65108&&D<=65126||D>=65128&&D<=65131||D>=94176&&D<=94180||D===94192||D===94193||D>=94208&&D<=100343||D>=100352&&D<=101589||D>=101631&&D<=101640||D>=110576&&D<=110579||D>=110581&&D<=110587||D===110589||D===110590||D>=110592&&D<=110882||D===110898||D>=110928&&D<=110930||D===110933||D>=110948&&D<=110951||D>=110960&&D<=111355||D>=119552&&D<=119638||D>=119648&&D<=119670||D===126980||D===127183||D===127374||D>=127377&&D<=127386||D>=127488&&D<=127490||D>=127504&&D<=127547||D>=127552&&D<=127560||D===127568||D===127569||D>=127584&&D<=127589||D>=127744&&D<=127776||D>=127789&&D<=127797||D>=127799&&D<=127868||D>=127870&&D<=127891||D>=127904&&D<=127946||D>=127951&&D<=127955||D>=127968&&D<=127984||D===127988||D>=127992&&D<=128062||D===128064||D>=128066&&D<=128252||D>=128255&&D<=128317||D>=128331&&D<=128334||D>=128336&&D<=128359||D===128378||D===128405||D===128406||D===128420||D>=128507&&D<=128591||D>=128640&&D<=128709||D===128716||D>=128720&&D<=128722||D>=128725&&D<=128727||D>=128732&&D<=128735||D===128747||D===128748||D>=128756&&D<=128764||D>=128992&&D<=129003||D===129008||D>=129292&&D<=129338||D>=129340&&D<=129349||D>=129351&&D<=129535||D>=129648&&D<=129660||D>=129664&&D<=129673||D>=129679&&D<=129734||D>=129742&&D<=129756||D>=129759&&D<=129769||D>=129776&&D<=129784||D>=131072&&D<=196605||D>=196608&&D<=262141}function $H1(D){if(!Number.isSafeInteger(D))throw new TypeError(`Expected a code point, got \`${typeof D}\`.`)}function Vx(D,{ambiguousAsWide:F=!1}={}){if($H1(D),Wx(D)||Kx(D)||F&&Ex(D))return 2;return 1}var ux=z1(Gx(),1),MH1=new Intl.Segmenter,qH1=/^\p{Default_Ignorable_Code_Point}$/u;function k2(D,F={}){if(typeof D!=="string"||D.length===0)return 0;let{ambiguousIsNarrow:w=!0,countAnsiEscapeCodes:J=!1}=F;if(!J)D=Z5(D);if(D.length===0)return 0;let p=0,B={ambiguousAsWide:!w};for(let{segment:Y}of MH1.segment(D)){let Q=Y.codePointAt(0);if(Q<=31||Q>=127&&Q<=159)continue;if(Q>=8203&&Q<=8207||Q===65279)continue;if(Q>=768&&Q<=879||Q>=6832&&Q<=6911||Q>=7616&&Q<=7679||Q>=8400&&Q<=8447||Q>=65056&&Q<=65071)continue;if(Q>=55296&&Q<=57343)continue;if(Q>=65024&&Q<=65039)continue;if(qH1.test(Y))continue;if(ux.default().test(Y)){p+=2;continue}p+=Vx(Q,B)}return p}function dQ(D){let F=0;for(let w of D.split(`
547
+ `)}var ZD=(D)=>{return G2(D.toLocaleUpperCase())},px=(D)=>{let F=D.registeredArguments.map((B)=>B.required?Xx(B.name()):Bx(B.name())).filter((B)=>B!=="").join(" "),w=XJ([XJ([D.parent&&D.parent.parent?D.parent?.name():void 0,D.name()]),F,D.options.length?Bx("options"):""]),J=D.description()||z5("TODO"),p=XJ([uu,w,Qx(J,w.length)]);return D._debug?Hu(p):p},Qx=(D,F)=>{return" ".repeat(Math.max(0,45-F))+D},Xx=(D)=>["<",D,">"].join(""),Bx=(D)=>["[",D,"]"].join(""),XJ=(D)=>D.filter(Boolean).join(" ");class U5 extends Qu{debug=!0;examples="";constructor(D){super(D);this.helpCommand(!1)}showDebugCommands(D){return this._enableDebugCommands=D,this}debugCommand(D,F){if(this._enableDebugCommands){let w=super.command(D,F);return w._enableDebugCommands=!0,w._debug=!0,w}else return new Qu(D)}helpInformation(D){return Yx(this)}addExamples(D){this.examples=D}addCommand(D,F){return D._enableDebugCommands=this._enableDebugCommands,D._debug=this._debug,super.addCommand(D,F)}}function L8({flags:D,description:F,defaultValue:w,choices:J,mandatory:p}){let B=new yP(D,F);return p&&B.makeOptionMandatory(),w&&B.default(w),J&&B.choices(J),B}var K9={name:"@director.run/cli",type:"module",version:"0.0.43",files:["dist","README.md"],bin:{director:"./dist/cli.js"},license:"MIT",repository:{type:"git",url:"https://github.com/director-run/director"},description:"The easiest way to manage and deploy MCP servers",author:"The Working Company <hello@director.run>",homepage:"https://director.run",scripts:{lint:"biome check .",format:"biome format --write .",clean:"rm -rf .turbo dist/*",test:"bun run vitest --fileParallelism=false",cli:"NODE_ENV=development bun run bin/cli.ts",typecheck:"tsc --noEmit",build:"bun build --production --target=node bin/cli.ts --outdir dist",release:"bun publish --access public --omit=peer",prepare:"bun run build",dev:"bun --watch bin/cli.ts"},peerDependencies:{typescript:"^5"},devDependencies:{"@director.run/gateway":"workspace:*","@director.run/mcp":"workspace:*","@director.run/utilities":"workspace:*","@inquirer/prompts":"^7.5.2","@types/update-notifier":"^6.0.8",boxen:"^8.0.1",chalk:"^5.4.1","cli-table3":"^0.6.5",commander:"^13.1.0",semver:"^7.7.2",superjson:"^2.2.2","type-fest":"^4.40.0","update-notifier":"^7.3.1","@segment/analytics-node":"^2.3.0","node-machine-id":"^1.1.12"}};import kQ from"node:process";function Nu({onlyFirst:D=!1}={}){let w=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(w,D?void 0:"g")}var ZH1=Nu();function Z5(D){if(typeof D!=="string")throw new TypeError(`Expected a \`string\`, got \`${typeof D}\``);return D.replace(ZH1,"")}function Ex(D){return D===161||D===164||D===167||D===168||D===170||D===173||D===174||D>=176&&D<=180||D>=182&&D<=186||D>=188&&D<=191||D===198||D===208||D===215||D===216||D>=222&&D<=225||D===230||D>=232&&D<=234||D===236||D===237||D===240||D===242||D===243||D>=247&&D<=250||D===252||D===254||D===257||D===273||D===275||D===283||D===294||D===295||D===299||D>=305&&D<=307||D===312||D>=319&&D<=322||D===324||D>=328&&D<=331||D===333||D===338||D===339||D===358||D===359||D===363||D===462||D===464||D===466||D===468||D===470||D===472||D===474||D===476||D===593||D===609||D===708||D===711||D>=713&&D<=715||D===717||D===720||D>=728&&D<=731||D===733||D===735||D>=768&&D<=879||D>=913&&D<=929||D>=931&&D<=937||D>=945&&D<=961||D>=963&&D<=969||D===1025||D>=1040&&D<=1103||D===1105||D===8208||D>=8211&&D<=8214||D===8216||D===8217||D===8220||D===8221||D>=8224&&D<=8226||D>=8228&&D<=8231||D===8240||D===8242||D===8243||D===8245||D===8251||D===8254||D===8308||D===8319||D>=8321&&D<=8324||D===8364||D===8451||D===8453||D===8457||D===8467||D===8470||D===8481||D===8482||D===8486||D===8491||D===8531||D===8532||D>=8539&&D<=8542||D>=8544&&D<=8555||D>=8560&&D<=8569||D===8585||D>=8592&&D<=8601||D===8632||D===8633||D===8658||D===8660||D===8679||D===8704||D===8706||D===8707||D===8711||D===8712||D===8715||D===8719||D===8721||D===8725||D===8730||D>=8733&&D<=8736||D===8739||D===8741||D>=8743&&D<=8748||D===8750||D>=8756&&D<=8759||D===8764||D===8765||D===8776||D===8780||D===8786||D===8800||D===8801||D>=8804&&D<=8807||D===8810||D===8811||D===8814||D===8815||D===8834||D===8835||D===8838||D===8839||D===8853||D===8857||D===8869||D===8895||D===8978||D>=9312&&D<=9449||D>=9451&&D<=9547||D>=9552&&D<=9587||D>=9600&&D<=9615||D>=9618&&D<=9621||D===9632||D===9633||D>=9635&&D<=9641||D===9650||D===9651||D===9654||D===9655||D===9660||D===9661||D===9664||D===9665||D>=9670&&D<=9672||D===9675||D>=9678&&D<=9681||D>=9698&&D<=9701||D===9711||D===9733||D===9734||D===9737||D===9742||D===9743||D===9756||D===9758||D===9792||D===9794||D===9824||D===9825||D>=9827&&D<=9829||D>=9831&&D<=9834||D===9836||D===9837||D===9839||D===9886||D===9887||D===9919||D>=9926&&D<=9933||D>=9935&&D<=9939||D>=9941&&D<=9953||D===9955||D===9960||D===9961||D>=9963&&D<=9969||D===9972||D>=9974&&D<=9977||D===9979||D===9980||D===9982||D===9983||D===10045||D>=10102&&D<=10111||D>=11094&&D<=11097||D>=12872&&D<=12879||D>=57344&&D<=63743||D>=65024&&D<=65039||D===65533||D>=127232&&D<=127242||D>=127248&&D<=127277||D>=127280&&D<=127337||D>=127344&&D<=127373||D===127375||D===127376||D>=127387&&D<=127404||D>=917760&&D<=917999||D>=983040&&D<=1048573||D>=1048576&&D<=1114109}function Wx(D){return D===12288||D>=65281&&D<=65376||D>=65504&&D<=65510}function Kx(D){return D>=4352&&D<=4447||D===8986||D===8987||D===9001||D===9002||D>=9193&&D<=9196||D===9200||D===9203||D===9725||D===9726||D===9748||D===9749||D>=9776&&D<=9783||D>=9800&&D<=9811||D===9855||D>=9866&&D<=9871||D===9875||D===9889||D===9898||D===9899||D===9917||D===9918||D===9924||D===9925||D===9934||D===9940||D===9962||D===9970||D===9971||D===9973||D===9978||D===9981||D===9989||D===9994||D===9995||D===10024||D===10060||D===10062||D>=10067&&D<=10069||D===10071||D>=10133&&D<=10135||D===10160||D===10175||D===11035||D===11036||D===11088||D===11093||D>=11904&&D<=11929||D>=11931&&D<=12019||D>=12032&&D<=12245||D>=12272&&D<=12287||D>=12289&&D<=12350||D>=12353&&D<=12438||D>=12441&&D<=12543||D>=12549&&D<=12591||D>=12593&&D<=12686||D>=12688&&D<=12773||D>=12783&&D<=12830||D>=12832&&D<=12871||D>=12880&&D<=42124||D>=42128&&D<=42182||D>=43360&&D<=43388||D>=44032&&D<=55203||D>=63744&&D<=64255||D>=65040&&D<=65049||D>=65072&&D<=65106||D>=65108&&D<=65126||D>=65128&&D<=65131||D>=94176&&D<=94180||D===94192||D===94193||D>=94208&&D<=100343||D>=100352&&D<=101589||D>=101631&&D<=101640||D>=110576&&D<=110579||D>=110581&&D<=110587||D===110589||D===110590||D>=110592&&D<=110882||D===110898||D>=110928&&D<=110930||D===110933||D>=110948&&D<=110951||D>=110960&&D<=111355||D>=119552&&D<=119638||D>=119648&&D<=119670||D===126980||D===127183||D===127374||D>=127377&&D<=127386||D>=127488&&D<=127490||D>=127504&&D<=127547||D>=127552&&D<=127560||D===127568||D===127569||D>=127584&&D<=127589||D>=127744&&D<=127776||D>=127789&&D<=127797||D>=127799&&D<=127868||D>=127870&&D<=127891||D>=127904&&D<=127946||D>=127951&&D<=127955||D>=127968&&D<=127984||D===127988||D>=127992&&D<=128062||D===128064||D>=128066&&D<=128252||D>=128255&&D<=128317||D>=128331&&D<=128334||D>=128336&&D<=128359||D===128378||D===128405||D===128406||D===128420||D>=128507&&D<=128591||D>=128640&&D<=128709||D===128716||D>=128720&&D<=128722||D>=128725&&D<=128727||D>=128732&&D<=128735||D===128747||D===128748||D>=128756&&D<=128764||D>=128992&&D<=129003||D===129008||D>=129292&&D<=129338||D>=129340&&D<=129349||D>=129351&&D<=129535||D>=129648&&D<=129660||D>=129664&&D<=129673||D>=129679&&D<=129734||D>=129742&&D<=129756||D>=129759&&D<=129769||D>=129776&&D<=129784||D>=131072&&D<=196605||D>=196608&&D<=262141}function $H1(D){if(!Number.isSafeInteger(D))throw new TypeError(`Expected a code point, got \`${typeof D}\`.`)}function Vx(D,{ambiguousAsWide:F=!1}={}){if($H1(D),Wx(D)||Kx(D)||F&&Ex(D))return 2;return 1}var ux=z1(Gx(),1),MH1=new Intl.Segmenter,qH1=/^\p{Default_Ignorable_Code_Point}$/u;function k2(D,F={}){if(typeof D!=="string"||D.length===0)return 0;let{ambiguousIsNarrow:w=!0,countAnsiEscapeCodes:J=!1}=F;if(!J)D=Z5(D);if(D.length===0)return 0;let p=0,B={ambiguousAsWide:!w};for(let{segment:Y}of MH1.segment(D)){let Q=Y.codePointAt(0);if(Q<=31||Q>=127&&Q<=159)continue;if(Q>=8203&&Q<=8207||Q===65279)continue;if(Q>=768&&Q<=879||Q>=6832&&Q<=6911||Q>=7616&&Q<=7679||Q>=8400&&Q<=8447||Q>=65056&&Q<=65071)continue;if(Q>=55296&&Q<=57343)continue;if(Q>=65024&&Q<=65039)continue;if(qH1.test(Y))continue;if(ux.default().test(Y)){p+=2;continue}p+=Vx(Q,B)}return p}function dQ(D){let F=0;for(let w of D.split(`
548
548
  `))F=Math.max(F,k2(w));return F}var cx=z1(Uu(),1);var CH1=/[\p{Lu}]/u,OH1=/[\p{Ll}]/u,Ux=/^[\p{Lu}](?![\p{Lu}])/gu,Mx=/([\p{Alpha}\p{N}_]|$)/u,Zu=/[_.\- ]+/,LH1=new RegExp("^"+Zu.source),Zx=new RegExp(Zu.source+Mx.source,"gu"),$x=new RegExp("\\d+"+Mx.source,"gu"),TH1=(D,F,w,J)=>{let p=!1,B=!1,Y=!1,Q=!1;for(let X=0;X<D.length;X++){let W=D[X];if(Q=X>2?D[X-3]==="-":!0,p&&CH1.test(W))D=D.slice(0,X)+"-"+D.slice(X),p=!1,Y=B,B=!0,X++;else if(B&&Y&&OH1.test(W)&&(!Q||J))D=D.slice(0,X-1)+"-"+D.slice(X-1),Y=B,B=!1,p=!0;else p=F(W)===W&&w(W)!==W,Y=B,B=w(W)===W&&F(W)!==W}return D},RH1=(D,F)=>{return Ux.lastIndex=0,D.replaceAll(Ux,(w)=>F(w))},PH1=(D,F)=>{return Zx.lastIndex=0,$x.lastIndex=0,D.replaceAll($x,(w,J,p)=>["_","-"].includes(D.charAt(p+w.length))?w:F(w)).replaceAll(Zx,(w,J)=>F(J))};function $u(D,F){if(!(typeof D==="string"||Array.isArray(D)))throw new TypeError("Expected the input to be `string | string[]`");if(F={pascalCase:!1,preserveConsecutiveUppercase:!1,...F},Array.isArray(D))D=D.map((B)=>B.trim()).filter((B)=>B.length).join("-");else D=D.trim();if(D.length===0)return"";let w=F.locale===!1?(B)=>B.toLowerCase():(B)=>B.toLocaleLowerCase(F.locale),J=F.locale===!1?(B)=>B.toUpperCase():(B)=>B.toLocaleUpperCase(F.locale);if(D.length===1){if(Zu.test(D))return"";return F.pascalCase?J(D):w(D)}if(D!==w(D))D=TH1(D,w,J,F.preserveConsecutiveUppercase);if(D=D.replace(LH1,""),D=F.preserveConsecutiveUppercase?RH1(D,w):w(D),F.pascalCase)D=J(D.charAt(0))+D.slice(1);return PH1(D,J)}var Ou=z1(Ix(),1);var Sx=(D=0)=>(F)=>`\x1B[${F+D}m`,dx=(D=0)=>(F)=>`\x1B[${38+D};5;${F}m`,_x=(D=0)=>(F,w,J)=>`\x1B[${38+D};2;${F};${w};${J}m`,j0={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},nB0=Object.keys(j0.modifier),fH1=Object.keys(j0.color),mH1=Object.keys(j0.bgColor),oB0=[...fH1,...mH1];function kH1(){let D=new Map;for(let[F,w]of Object.entries(j0)){for(let[J,p]of Object.entries(w))j0[J]={open:`\x1B[${p[0]}m`,close:`\x1B[${p[1]}m`},w[J]=j0[J],D.set(p[0],p[1]);Object.defineProperty(j0,F,{value:w,enumerable:!1})}return Object.defineProperty(j0,"codes",{value:D,enumerable:!1}),j0.color.close="\x1B[39m",j0.bgColor.close="\x1B[49m",j0.color.ansi=Sx(),j0.color.ansi256=dx(),j0.color.ansi16m=_x(),j0.bgColor.ansi=Sx(10),j0.bgColor.ansi256=dx(10),j0.bgColor.ansi16m=_x(10),Object.defineProperties(j0,{rgbToAnsi256:{value:(F,w,J)=>{if(F===w&&w===J){if(F<8)return 16;if(F>248)return 231;return Math.round((F-8)/247*24)+232}return 16+36*Math.round(F/255*5)+6*Math.round(w/255*5)+Math.round(J/255*5)},enumerable:!1},hexToRgb:{value:(F)=>{let w=/[a-f\d]{6}|[a-f\d]{3}/i.exec(F.toString(16));if(!w)return[0,0,0];let[J]=w;if(J.length===3)J=[...J].map((B)=>B+B).join("");let p=Number.parseInt(J,16);return[p>>16&255,p>>8&255,p&255]},enumerable:!1},hexToAnsi256:{value:(F)=>j0.rgbToAnsi256(...j0.hexToRgb(F)),enumerable:!1},ansi256ToAnsi:{value:(F)=>{if(F<8)return 30+F;if(F<16)return 90+(F-8);let w,J,p;if(F>=232)w=((F-232)*10+8)/255,J=w,p=w;else{F-=16;let Q=F%36;w=Math.floor(F/36)/5,J=Math.floor(Q/6)/5,p=Q%6/5}let B=Math.max(w,J,p)*2;if(B===0)return 30;let Y=30+(Math.round(p)<<2|Math.round(J)<<1|Math.round(w));if(B===2)Y+=60;return Y},enumerable:!1},rgbToAnsi:{value:(F,w,J)=>j0.ansi256ToAnsi(j0.rgbToAnsi256(F,w,J)),enumerable:!1},hexToAnsi:{value:(F)=>j0.ansi256ToAnsi(j0.hexToAnsi256(F)),enumerable:!1}}),j0}var bH1=kH1(),jx=bH1;var fQ=new Set(["\x1B","›"]),hH1=39,Cu="\x07",kx="[",yH1="]",bx="m",jQ=`${yH1}8;;`,fx=(D)=>`${fQ.values().next().value}${kx}${D}${bx}`,mx=(D)=>`${fQ.values().next().value}${jQ}${D}${Cu}`,iH1=(D)=>D.split(" ").map((F)=>k2(F)),Au=(D,F,w)=>{let J=[...F],p=!1,B=!1,Y=k2(Z5(D.at(-1)));for(let[Q,X]of J.entries()){let W=k2(X);if(Y+W<=w)D[D.length-1]+=X;else D.push(X),Y=0;if(fQ.has(X))p=!0,B=J.slice(Q+1,Q+1+jQ.length).join("")===jQ;if(p){if(B){if(X===Cu)p=!1,B=!1}else if(X===bx)p=!1;continue}if(Y+=W,Y===w&&Q<J.length-1)D.push(""),Y=0}if(!Y&&D.at(-1).length>0&&D.length>1)D[D.length-2]+=D.pop()},cH1=(D)=>{let F=D.split(" "),w=F.length;while(w>0){if(k2(F[w-1])>0)break;w--}if(w===F.length)return D;return F.slice(0,w).join(" ")+F.slice(w).join("")},lH1=(D,F,w={})=>{if(w.trim!==!1&&D.trim()==="")return"";let J="",p,B,Y=iH1(D),Q=[""];for(let[H,N]of D.split(" ").entries()){if(w.trim!==!1)Q[Q.length-1]=Q.at(-1).trimStart();let u=k2(Q.at(-1));if(H!==0){if(u>=F&&(w.wordWrap===!1||w.trim===!1))Q.push(""),u=0;if(u>0||w.trim===!1)Q[Q.length-1]+=" ",u++}if(w.hard&&Y[H]>F){let G=F-u,U=1+Math.floor((Y[H]-G-1)/F);if(Math.floor((Y[H]-1)/F)<U)Q.push("");Au(Q,N,F);continue}if(u+Y[H]>F&&u>0&&Y[H]>0){if(w.wordWrap===!1&&u<F){Au(Q,N,F);continue}Q.push("")}if(u+Y[H]>F&&w.wordWrap===!1){Au(Q,N,F);continue}Q[Q.length-1]+=N}if(w.trim!==!1)Q=Q.map((H)=>cH1(H));let X=Q.join(`
549
549
  `),W=[...X],K=0;for(let[H,N]of W.entries()){if(J+=N,fQ.has(N)){let{groups:G}=new RegExp(`(?:\\${kx}(?<code>\\d+)m|\\${jQ}(?<uri>.*)${Cu})`).exec(X.slice(K))||{groups:{}};if(G.code!==void 0){let U=Number.parseFloat(G.code);p=U===hH1?void 0:U}else if(G.uri!==void 0)B=G.uri.length===0?void 0:G.uri}let u=jx.codes.get(Number(p));if(W[H+1]===`
550
550
  `){if(B)J+=mx("");if(p&&u)J+=fx(u)}else if(N===`
@@ -620,7 +620,7 @@ ${B.style.help(`(${D.instructions?.pager??"Use arrow keys to reveal more choices
620
620
  ${B.style.description(U.description)}`:"";return`${[X,Z,C].filter(Boolean).join(" ")}
621
621
  ${L}${q}${P}${M61.default.cursorHide}`});function q61(D){return D.command("add <proxyId>").description("Add a server to a proxy.").addOption(L8({flags:"-e,--entry <entryName>",description:"add a server from the registry by specifying the entry name"})).addOption(L8({flags:"-u,--url <url>",description:"add a streamable or sse server by specifying the url"})).addOption(L8({flags:"-n,--name <serverName>",description:"the name of the server as it'll appear in the config file"})).action(_1(async(F,w)=>{if(w.entry)console.log(`adding ${w.entry} to ${F}`),await Q00(F,w.entry);else if(w.url){if(!w.name)throw new Error("No server name provided. use --name to specify the name of the server");console.log(`adding ${w.url} to ${F}`),await Y00(F,w.url,w.name)}else console.warn("No entry name or url provided. You must speciy --entry or --url and --name, alternatively update the config file directly and restart the gateway:"),console.log(),console.log(`${G2("CONFIG_FILE_PATH:")} ${Q0.CONFIG_FILE_PATH}`),console.log()}))}async function Y00(D,F,w){await l6(async()=>{await I2.store.addServer.mutate({proxyId:D,server:{name:w,transport:{type:"http",url:F}}})}).start("installing server...").succeed(`HTTP server ${F} added to ${D}`).run()}async function Q00(D,F){let w=await l6(()=>T4.entries.getEntryByName.query({name:F})).start("fetching entry...").succeed("Entry fetched.").run(),J=await X00(w);await l6(async()=>{let p=await T4.entries.getTransportForEntry.query({entryName:F,parameters:J});await I2.store.addServer.mutate({proxyId:D,server:{name:F,transport:p,source:{name:"registry",entryId:w.id,entryData:w}}})}).start("installing server...").succeed(`Registry entry ${F} added to ${D}`).run()}async function X00(D){let F={};if(!D.parameters)return{};for(let w of D.parameters)if(w.required)F[w.name]=await UC({message:w.name,mask:"*"});else F[w.name]=await zC({message:w.name});return F}var A61=q1("gateway/helpers");function BY(D){return`/${D}/mcp`}function YY(D){return`/${D}/sse`}async function MC(D){A61.info(`restarting connected clients for ${D.id}`);for(let F of lJ()){let w=y2(F);if(await w.isInstalled(D.id))A61.info(`${D.id} is intalled in ${F}, restarting...`),await w.restart()}}function C61(D){D.command("connect <proxyId>").description("Connect a proxy to a MCP client").addOption(L8({flags:"-t,--target <target>",description:"target client",choices:["claude","cursor","vscode"]})).action(_1(async(F,w)=>{if(w.target){let J=await I2.store.get.query({proxyId:F}),B=await(await y2(w.target)).install({name:J.id,url:c6(Q0.GATEWAY_URL,YY(J.id))});console.log(B)}else{console.log(),console.log(O8("--------------------------------")),console.log(O8(`Connection Details for '${F}'`)),console.log(O8("--------------------------------")),console.log(),console.log("Note: if you'd like to connect to a client automatically, run:"),console.log("director connect "+F+" --target <target>"),console.log();let J=await I2.store.get.query({proxyId:F}),p=Q0.GATEWAY_URL,B=c6(p,YY(J.id)),Y=c6(p,BY(J.id)),Q={command:"npx",args:["-y","@director.run/cli@latest","http2stdio",Y],env:{LOG_LEVEL:"silent"}};console.log(G2("HTTP Streamable:")+" "+Y),console.log(G2("HTTP SSE:")+" "+B),console.log(G2("Stdio:"),JSON.stringify(Q,null,2)),console.log()}}))}function O61(D){D.debugCommand("test-proxy <proxyId>").description("Run a high level test of a proxy").action(_1(async(F)=>{let w=new s8("proxy-test-client");await w.connectToHTTP(c6(Q0.GATEWAY_URL,`${F}/mcp`));let{tools:J}=await w.listTools();console.log(),console.log(G2("TOOLS")),console.log(),console.log(J.map((p)=>p.name).join(`
622
622
  `)),console.log(),await w.close()})),D.debugCommand("reset").description("Delete proxies, clear the config file, and reset all clients").action(_1(async({target:F})=>{console.log("resetting service"),await I2.store.purge.mutate(),console.log("resetting clients"),await zE()}))}import E00 from"node:fs";function L61(D){D.command("env").description("Print environment variables").option("--write","Write the environment variables to .env.local in current working directory").action(_1((F)=>{if(F.write){console.log(`writing env vars to '${JJ}'`);let w=Object.entries(Q0).map(([J,p])=>`${J}=${p}`).join(`
623
- `);E00.writeFileSync(JJ,w)}else AP()&&console.log(O8(`using env file: ${TQ()}`)),console.log(),console.log("env",Q0)}))}import{exec as W00,execSync as K00}from"node:child_process";import{promisify as V00}from"node:util";var H00=V00(W00),aL0=q1("restartApp");function qC(D){if(process.platform==="win32")return!1;try{return K00(`which ${D}`,{stdio:"pipe"}).toString().trim().length>0}catch(w){return!1}}async function T61(D){if(!D||typeof D!=="string")throw new Error("Invalid URL provided");let F=D.startsWith("http://")||D.startsWith("https://")?D:`https://${D}`,w=process.platform,J;switch(w){case"darwin":J=`open "${F}"`;break;case"win32":J=`start "" "${F}"`;break;case"linux":J=`xdg-open "${F}"`;break;default:throw new Error(`Unsupported platform: ${w}`)}try{await H00(J)}catch(p){throw new Error(`Failed to open URL: ${p instanceof Error?p.message:"Unknown error"}`)}}async function Yw(){return{platform:process.platform,dependencies:[{name:"npx",installed:qC("npx")},{name:"uvx",installed:qC("uvx")}],clients:await yD()}}var I61=z1(v61(),1),S61=q1("http/middleware"),d61=(D,F,w,J)=>{let{status:p,message:B,code:Y}=C00(D);S61.error({message:`${F.method} ${F.originalUrl} failed: ${B}`,code:Y}),w.status(p).json({message:B,code:Y})};function C00(D){if(vX(D))return O00(D);if(C_(D))return{status:D.statusCode,message:D.message};else return{status:500,message:"Something unexpected happened :("}}function O00(D){let F;switch(D.code){case"NOT_FOUND":F=404;break;case"BAD_REQUEST":F=400;break;default:F=500}return{status:F,message:D.message,code:D.code}}function _61(){throw new O1("NOT_FOUND","there's nothing here")}function Ew(D){return(F,w,J)=>{Promise.resolve(D(F,w,J)).catch(J)}}function j61(){return I61.default({logger:S61,useLevel:"trace",autoLogging:{ignore:(D)=>D.originalUrl?.startsWith("/trpc")},serializers:{req:(D)=>({id:D.id,ip:D.ip||D.connection?.remoteAddress,userAgent:D.headers["user-agent"]}),res:(D)=>({status:D.statusCode})},customReceivedMessage:(D)=>`→ ${D.method} ${D.originalUrl}`,customSuccessMessage:(D,F)=>{let w=F.statusCode,J=w>=500?"\uD83D\uDD34":w>=400?"\uD83D\uDFE1":"\uD83D\uDFE2";return`← ${D.method} ${D.originalUrl} ${J} ${w}`},customErrorMessage:(D,F)=>`← ${D.method} ${D.originalUrl} \uD83D\uDD34 ${F.statusCode}`})}var pw1=z1(ww1(),1),Bw1=z1(Jw1(),1);import zL from"os";class F5{analytics;machineId;enabled;traits;constructor(D){this.analytics=new pw1.Analytics({writeKey:D.writeKey}),this.enabled=D.enabled,this.traits=D.traits||{}}async initialize(){if(this.machineId)return;if(this.machineId=await Bw1.machineId(),this.enabled)this.analytics.identify({userId:this.machineId,traits:{...this.traits,os:zL.platform(),osVersion:zL.release(),arch:zL.arch()}})}static noTelemetry(){return new F5({writeKey:"--",enabled:!1})}async trackEvent(D,F={}){if(await this.initialize(),this.enabled)this.analytics.track({userId:this.machineId,event:D,properties:F})}}var Tw1=z1(Ww1(),1),Rw1=z1(ZB(),1);import{existsSync as _J0}from"node:fs";var M2=A.string().trim().min(1,"Required"),UH=M2.nullish(),TJ0=A.string().trim().min(1,"Required").regex(/^[a-z0-9._-]+$/,"Only lowercase ASCII letters, digits, and characters ., -, _ are allowed"),RJ0=A.object({type:A.literal("http"),url:M2.url(),headers:A.record(M2,A.string()).optional()}),PJ0=A.object({type:A.literal("stdio"),command:M2,args:A.array(A.string()).default([]),env:A.record(M2,A.string()).optional()}),Kw1=A.discriminatedUnion("type",[RJ0,PJ0]),xJ0=A.object({name:M2,description:M2,required:A.boolean(),type:A.enum(["string"]),password:A.boolean().optional()}),vJ0=A.object({name:M2,description:M2,inputSchema:A.object({type:M2,required:A.array(A.string()).optional(),properties:A.record(M2,A.object({type:A.string().optional(),description:A.string().optional(),default:A.unknown().optional(),title:A.string().optional(),anyOf:A.unknown().optional()})).optional()})}),IJ0=A.object({id:M2,name:M2,title:M2,description:M2,icon:UH,createdAt:A.coerce.date().nullable().default(null),isOfficial:A.boolean().nullable().default(null),isEnriched:A.boolean().nullable().default(null),isConnectable:A.boolean().nullable().default(null),lastConnectionAttemptedAt:A.coerce.date().nullable().default(null),lastConnectionError:UH,homepage:M2,transport:Kw1,source_registry:A.any(),categories:A.array(A.string()).nullable().default(null),tools:A.array(vJ0).nullable().default(null),parameters:A.array(xJ0),readme:UH}),SJ0=A.object({name:A.literal("registry"),entryId:M2,entryData:IJ0}),ZH=A.object({name:TJ0,transport:Kw1,source:SJ0.optional()}),dJ0=A.object({id:M2,name:M2,description:UH,servers:A.array(ZH)}),Vw1=A.object({proxies:A.array(dJ0)});var $H=z1(Hw1(),1);async function PY(D){let F=await HE(D);return Vw1.parse(F)}async function xY(D,F){return await t4(D,F)}class MH{filePath;constructor(D){this.filePath=D}static async connect(D){let F=new MH(D);if(!_J0(D))await xY(D,{proxies:[]});return F}async addProxy(D){let F=await PY(this.filePath);if(F.proxies.find((p)=>p.name===D.name))throw new Error("Proxy already exists");let J={...D,servers:(D.servers||[]).map((p)=>({...p,name:$H.default(p.name,{lower:!0,strict:!0,trim:!0})})),id:$H.default(D.name,{lower:!0,strict:!0,trim:!0})};return F.proxies.push(J),await xY(this.filePath,F),J}async getProxy(D){let w=(await PY(this.filePath)).proxies.find((J)=>J.id===D);if(!w)throw new Error("Proxy not found");return w}async deleteProxy(D){let F=await PY(this.filePath);if(!F.proxies.find((J)=>J.id===D))throw new Error("Proxy not found");F.proxies=F.proxies.filter((J)=>J.id!==D),await xY(this.filePath,F)}async updateProxy(D,F){let w=await PY(this.filePath),J=w.proxies.find((p)=>p.id===D);if(!J)throw new Error("Proxy not found");return Object.assign(J,{...F,servers:(F.servers||J.servers||[]).map((p)=>({...p,name:$H.default(p.name,{lower:!0,trim:!0})}))}),await xY(this.filePath,w),J}async getAll(){return(await PY(this.filePath)).proxies}async purge(){await xY(this.filePath,{proxies:[]})}}var b7=q1("ProxyServerStore");class qH{proxyServers=new Map;db;telemetry;constructor(D){this.db=D.db,this.telemetry=D.telemetry}static async create(D,F){b7.debug("initializing ProxyServerStore");let w=new qH({db:D,telemetry:F||F5.noTelemetry()});return await w.initialize(),b7.debug("initialization complete"),w}async initialize(){let D=await this.db.getAll();for(let F of D){let w=F.id;b7.debug({message:`initializing ${w}`,proxyId:w});let J=new nF({id:w,name:F.name,description:F.description??void 0,servers:F.servers});await J.connectTargets(),this.proxyServers.set(w,J)}}get(D){let F=this.proxyServers.get(D);if(!F)throw new O1("NOT_FOUND",`proxy server '${D}' not found or failed to initialize.`);return F}async delete(D){await this.get(D).close(),await this.db.deleteProxy(D),this.proxyServers.delete(D),b7.info(`successfully deleted proxy server configuration: ${D}`)}async purge(){await this.closeAll(),await this.db.purge(),this.proxyServers.clear()}async closeAll(){b7.info("cleaning up all proxy servers..."),await Promise.all(Array.from(this.proxyServers.values()).map((D)=>D.close())),b7.info("finished cleaning up all proxy servers.")}getAll(){return Array.from(this.proxyServers.values())}async create({name:D,description:F,servers:w,source:J}){let p=await this.db.addProxy({name:D,description:F,servers:w??[]}),B=new nF({name:D,id:p.id,servers:p.servers,description:p.description??void 0});return await B.connectTargets(),this.proxyServers.set(p.id,B),b7.info({message:"Created new proxy",proxyId:p.id}),B}async addServer(D,F){let w=this.get(D);return await w.addTarget(F,{throwOnError:!0}),await this.db.updateProxy(D,{servers:w.attributes.servers}),w}async removeServer(D,F){let w=this.get(D);return await w.removeTarget(F),await this.db.updateProxy(D,{servers:w.attributes.servers}),w}async update(D,F){let w=this.get(D);return await w.update(F),await this.db.updateProxy(D,F),w}}var Gw1=z1(A9(),1),uw1=z1(uW(),1),jJ0="4mb";async function Nw1(D){let F=Gw1.default.parse(D.headers["content-type"]??"");if(F.type!=="application/json")throw new Error(`Unsupported content-type: ${F}`);let w=await uw1.default(D,{limit:jJ0,encoding:F.parameters.charset??"utf-8"});return JSON.parse(w)}var zw1=z1(ZB(),1),AH=q1("mcp/sse"),Uw1=({proxyStore:D})=>{let F=zw1.default.Router(),w=new Map;return F.get("/:proxy_id/sse",Ew(async(J,p)=>{let B=J.params.proxy_id,Y=D.get(B),Q=new NW(`/${Y.id}/message`,p);w.set(Q.sessionId,Q),AH.info({message:"SSE connection started",sessionId:Q.sessionId,proxyId:Y.id,userAgent:J.headers["user-agent"],host:J.headers.host}),J.socket.on("close",()=>{AH.info({message:"SSE connection closed",sessionId:Q.sessionId,proxyId:Y.id}),w.delete(Q.sessionId)}),await Y.connect(Q)})),F.post("/:proxy_id/message",Ew(async(J,p)=>{let B=J.params.proxy_id,Y=D.get(B),Q=J.query.sessionId?.toString();if(!Q)throw new O1("BAD_REQUEST","No sessionId provided");let X=await Nw1(J);AH.info({message:"Message received",proxyId:Y.id,sessionId:Q,method:X.method,params:X.params});let W=w.get(Q);if(!W)throw AH.warn({message:"Transport not found",sessionId:Q,proxyId:Y.id}),new O1("NOT_FOUND","Transport not found");await W.handlePostMessage(J,p,X)})),F};var $L=z1(ZB(),1),vY=q1("mcp/streamable"),Zw1=({proxyStore:D})=>{let F=$L.default.Router(),w=new Map;F.use($L.default.json()),F.post("/:proxy_id/mcp",Ew(async(p,B)=>{let Y=p.params.proxy_id,Q=await D.get(Y),X=p.headers["mcp-session-id"],W;if(X&&w.has(X)){let K=w.get(X);if(!K)throw new O1("NOT_FOUND","Transport not found");W=K}else if(!X&&Ep(p.body))vY.info(`[${Q.id}] new initialization request`),W=new UW({sessionIdGenerator:()=>crypto.randomUUID(),onsessioninitialized:(K)=>{w.set(K,W)}}),W.onclose=()=>{if(vY.info(`[${Q.id}] transport closed`,{proxyId:Q.id,sessionId:W.sessionId}),W.sessionId)w.delete(W.sessionId)},p.socket.on("close",()=>{vY.info(`[${Q.id}] socket closed'`,{proxyId:Q.id,sessionId:W.sessionId})}),await Q.connect(W);else throw new O1("BAD_REQUEST","No valid session ID provided");vY.info({message:`[${Q.id}] '${p.body.method}' called`,proxyId:Q.id,sessionId:W.sessionId,method:p.body.method,body:p.body}),await W.handleRequest(p,B,p.body)}));let J=Ew(async(p,B)=>{let Y=p.params.proxy_id,Q=D.get(Y),X=p.headers["mcp-session-id"];if(!X||!w.has(X))throw new O1("BAD_REQUEST","Invalid or missing session ID");let W=w.get(X);if(!W)throw new O1("NOT_FOUND","Transport not found");let K=W;vY.info({message:"MCP handleSessionRequest",proxyId:Q.id,sessionId:K.sessionId,body:p.body}),await K.handleRequest(p,B)});return F.get("/:proxy_id/mcp",J),F.delete("/:proxy_id/mcp",J),F};function fJ0(D,F){if("body"in D){if(D.body===void 0)return;if(typeof D.body==="string")return D.body;return JSON.stringify(D.body)}let w=0,J=!1;return new ReadableStream({start(p){let B=(Q)=>{if(w+=Q.length,!F.maxBodySize||w<=F.maxBodySize){p.enqueue(new Uint8Array(Q.buffer,Q.byteOffset,Q.byteLength));return}p.error(new K0({code:"PAYLOAD_TOO_LARGE"})),J=!0,D.off("data",B),D.off("end",Y)},Y=()=>{if(J)return;J=!0,D.off("data",B),D.off("end",Y),p.close()};D.on("data",B),D.on("end",Y)},cancel(){D.destroy()}})}function mJ0(D){try{var F,w;let J=D.headers[":scheme"]&&D.headers[":scheme"]==="https"||D.socket&&"encrypted"in D.socket&&D.socket.encrypted?"https:":"http:",p=(F=(w=D.headers.host)!==null&&w!==void 0?w:D.headers[":authority"])!==null&&F!==void 0?F:"localhost";return new URL(D.url,`${J}//${p}`)}catch(J){throw new K0({code:"BAD_REQUEST",message:"Invalid URL",cause:J})}}function kJ0(D){let F=new Headers;for(let w in D){let J=D[w];if(typeof w==="string"&&w.startsWith(":"))continue;if(Array.isArray(J))for(let p of J)F.append(w,p);else if(J!=null)F.append(w,J)}return F}function bJ0(D,F,w){let J=new AbortController,p=()=>{F.off("close",p),D.off("aborted",p),J.abort()};F.once("close",p),D.once("aborted",p);let B=mJ0(D),Y={headers:kJ0(D.headers),method:D.method,signal:J.signal};if(D.method!=="GET"&&D.method!=="HEAD")Y.body=fJ0(D,w),Y.duplex="half";return new Request(B,Y)}async function hJ0(D,F){if(D.write(F)===!1)await new Promise((w,J)=>{let p=(Q)=>{J(Q),Y()},B=()=>{w(),Y()},Y=()=>{D.off("error",p),D.off("drain",B)};D.once("error",p),D.once("drain",B)})}async function yJ0(D){let{res:F}=D;try{let w=new WritableStream({async write(J){var p;await hJ0(F,J),(p=F.flush)===null||p===void 0||p.call(F)}});await D.body.pipeTo(w,{signal:D.signal})}catch(w){if(LE(w))return;throw w}}async function iJ0(D){let{response:F,rawResponse:w}=D;if(w.statusCode===200)w.statusCode=F.status;for(let[J,p]of F.headers)w.setHeader(J,p);try{if(F.body)await yJ0({res:w,signal:D.request.signal,body:F.body})}catch(J){if(!w.headersSent)w.statusCode=500;throw J}finally{w.end()}}var Rw=y1(G6(),1);function ML(D){return(F)=>{var w;let{res:J,req:p}=D,B=D6(F),Y=_8({config:D.router._def._config,error:B,type:"unknown",path:void 0,input:void 0,ctx:void 0});(w=D.onError)===null||w===void 0||w.call(D,{req:p,error:B,type:"unknown",path:void 0,input:void 0,ctx:void 0});let Q=a5(D.router._def._config,{error:Y});J.statusCode=Y.data.httpStatus,J.end(JSON.stringify(Q))}}async function $w1(D){return new Promise((F)=>{var w;let J=(w=D.middleware)!==null&&w!==void 0?w:(p,B,Y)=>Y();return D.res.once("finish",()=>{F()}),J(D.req,D.res,(p)=>{e4(async()=>{var B;let Y=bJ0(D.req,D.res,{maxBodySize:(B=D.maxBodySize)!==null&&B!==void 0?B:null}),Q=async(W)=>{var K;return await((K=D.createContext)===null||K===void 0?void 0:K.call(D,Rw.default(Rw.default({},D),W)))},X=await Eb(Rw.default(Rw.default({},D),{},{req:Y,error:p?D6(p):null,createContext:Q,onError(W){var K;D===null||D===void 0||(K=D.onError)===null||K===void 0||K.call(D,Rw.default(Rw.default({},W),{},{req:D.req}))}}));await iJ0({request:Y,response:X,rawResponse:D.res})}).catch(ML(D))})})}var qL=y1(G6(),1);function Mw1(D){return(F,w)=>{let J="";e4(async()=>{J=F.path.slice(F.path.lastIndexOf("/")+1),await $w1(qL.default(qL.default({},D),{},{req:F,res:w,path:J}))}).catch(ML(qL.default({req:F,res:w,path:J},D)))}}function qw1({proxyStore:D}){return v0.router({allClients:v0.procedure.query(()=>yD()),byProxy:v0.router({list:v0.procedure.input(A.object({proxyId:A.string()})).query(async({input:F})=>{return await Mk(F.proxyId)}),install:v0.procedure.input(A.object({client:A.nativeEnum(cJ),proxyId:A.string(),baseUrl:A.string()})).mutation(async({input:F})=>{let w=D.get(F.proxyId);await(await y2(F.client)).install({name:w.id,url:c6(F.baseUrl,YY(w.id))})}),uninstall:v0.procedure.input(A.object({client:A.nativeEnum(cJ),proxyId:A.string()})).mutation(async({input:F})=>{let w=D.get(F.proxyId);await(await y2(F.client)).uninstall(w.id)})})})}function Aw1({registryURL:D,proxyStore:F}){let w=NV(D);return v0.router({getEntries:v0.procedure.input(A.object({pageIndex:A.number().min(0),pageSize:A.number().min(1)})).query(({input:J})=>w.entries.getEntries.query(J)),getEntryByName:v0.procedure.input(A.object({name:A.string()})).query(({input:J})=>w.entries.getEntryByName.query(J)),getTransportForEntry:v0.procedure.input(A.object({entryName:A.string(),parameters:A.record(A.string(),A.string()).optional()})).mutation(async({input:J})=>{return await w.entries.getTransportForEntry.query({entryName:J.entryName,parameters:J.parameters})})})}var Cw1=A.object({name:A.string(),description:A.string().optional(),servers:A.array(ZH).optional()}),lJ0=Cw1.omit({servers:!0}).partial();function Ow1({proxyStore:D}){return v0.router({getAll:v0.procedure.query(async()=>{return(await D.getAll()).map((F)=>({...F.toPlainObject(),path:BY(F.id)}))}),get:v0.procedure.input(A.object({proxyId:A.string()})).query(({input:F})=>{return{...D.get(F.proxyId).toPlainObject(),path:BY(F.proxyId)}}),create:v0.procedure.input(Cw1).mutation(async({input:F})=>{return(await D.create({name:F.name,description:F.description??void 0,servers:F.servers})).toPlainObject()}),update:v0.procedure.input(A.object({proxyId:A.string(),attributes:lJ0})).mutation(async({input:F})=>{return(await D.update(F.proxyId,{name:F.attributes.name,description:F.attributes.description??void 0})).toPlainObject()}),delete:v0.procedure.input(A.object({proxyId:A.string()})).mutation(async({input:F})=>{return await D.delete(F.proxyId),{success:!0}}),addServer:v0.procedure.input(A.object({proxyId:A.string(),server:ZH})).mutation(async({input:F})=>{let w=await D.addServer(F.proxyId,F.server);return await MC(w),w.toPlainObject()}),purge:v0.procedure.mutation(()=>D.purge()),removeServer:v0.procedure.input(A.object({proxyId:A.string(),serverName:A.string()})).mutation(async({input:F})=>{let w=await D.removeServer(F.proxyId,F.serverName);return await MC(w),w.toPlainObject()})})}function gJ0({proxyStore:D,registryURL:F}){return v0.router({health:v0.procedure.query(()=>Yw()),store:Ow1({proxyStore:D}),installer:qw1({proxyStore:D}),registry:Aw1({registryURL:F,proxyStore:D})})}function Lw1({proxyStore:D,registryURL:F}){return Mw1({router:gJ0({proxyStore:D,registryURL:F})})}var AL=q1("Gateway");class CH{proxyStore;port;server;constructor(D){this.port=D.port,this.proxyStore=D.proxyStore,this.server=D.server}static async start(D,F){AL.info("starting director gateway");let w=await MH.connect(D.databaseFilePath),J=D.telemetry||F5.noTelemetry(),p=await qH.create(w,J),B=Rw1.default(),Y=D.registryURL;B.use(Tw1.default({origin:D.allowedOrigins})),B.use(j61()),B.use("/",Uw1({proxyStore:p})),B.use("/",Zw1({proxyStore:p})),B.use("/trpc",Lw1({proxyStore:p,registryURL:Y})),B.all("*",_61),B.use(d61),J.trackEvent("gateway_start");let Q=B.listen(D.port,()=>{AL.info(`director gateway running on port ${D.port}`),F?.()}),X=new CH({port:D.port,db:w,proxyStore:p,server:Q});return process.on("SIGINT",async()=>{AL.info("received SIGINT, cleaning up proxy servers..."),await X.stop(),process.exit(0)}),X}async stop(){await this.proxyStore.closeAll(),await new Promise((D)=>{this.server.closeAllConnections(),this.server.close(()=>D())})}}function Pw1(D){D.command("serve").description("Start the web service").action(_1(async()=>{try{await CL()}catch(F){console.error("Fatal error starting gateway",F),process.exit(1)}}))}async function CL(D){console.log(`v${K9.version}`),Oh(),await CH.start({port:Q0.GATEWAY_PORT,databaseFilePath:Q0.CONFIG_FILE_PATH,registryURL:Q0.REGISTRY_API_URL,allowedOrigins:[Q0.STUDIO_URL,/^https?:\/\/localhost(:\d+)?$/],telemetry:new F5({writeKey:Q0.SEGMENT_WRITE_KEY,enabled:Q0.SEND_TELEMETRY,traits:{cliVersion:K9.version}})},D)}function xw1(D){D.command("studio").description("Open the UI in your browser").action(_1(async()=>{let F=tB();F.start("opening studio...");try{await I2.health.query()}catch(w){F.fail("Failed to connect to gateway. Have you ran `director serve`?"),process.exit(1)}try{OL()}catch(w){F.fail(`failed to open ${Q0.STUDIO_URL}, try manually`)}F.stop()}))}async function OL(){await T61(Q0.STUDIO_URL)}var aJ0=q1("quickstart");function Iw1(D){D.command("quickstart").description("Start the gateway and open the studio in your browser").action(_1(async()=>{await nJ0(),await CL(async()=>{aJ0.info(`gateway started, opening ${Q0.STUDIO_URL} in your browser...`),await OL()})}))}async function nJ0(){let D=tB();D.start("checking prerequisites...");let F=await Yw();D.stop();let w=[],J=[];w.push(""),w.push(G2("Dependency Check")),w.push("The following dependencies are required by some MCP servers that use Stdout. It's best to have them all installed."),w.push("");for(let Y of F.dependencies)w.push(vw1({name:Y.name,installed:Y.installed,successText:`${Y.name} is installed`,failureText:`${Y.name} is not available in $PATH. ${oJ0(Y)}`}));if(F.dependencies.filter((Y)=>Y.installed).length<F.dependencies.length)J.push("Some dependencies are not available in $PATH, MCP servers that depend on them will not work.");w.push(""),w.push(G2("MCP Clients Check")),w.push("Director can automatically configure the following MCP clients for you. It's best to have at least one installed."),w.push("");for(let Y of F.clients)w.push(vw1({name:Y.name,installed:Y.installed}));if(F.clients.filter((Y)=>Y.installed).length===0)J.push("No MCP clients found. It's best to have at least one MCP client installed in order to use the automatic client configuration.");if(w.push(""),w.push(G2("Summary")),w.push(""),console.log(w.join(`
623
+ `);E00.writeFileSync(JJ,w)}else AP()&&console.log(O8(`using env file: ${TQ()}`)),console.log(),console.log("env",Q0)}))}import{exec as W00,execSync as K00}from"node:child_process";import{promisify as V00}from"node:util";var H00=V00(W00),aL0=q1("restartApp");function qC(D){if(process.platform==="win32")return!1;try{return K00(`which ${D}`,{stdio:"pipe"}).toString().trim().length>0}catch(w){return!1}}async function T61(D){if(!D||typeof D!=="string")throw new Error("Invalid URL provided");let F=D.startsWith("http://")||D.startsWith("https://")?D:`https://${D}`,w=process.platform,J;switch(w){case"darwin":J=`open "${F}"`;break;case"win32":J=`start "" "${F}"`;break;case"linux":J=`xdg-open "${F}"`;break;default:throw new Error(`Unsupported platform: ${w}`)}try{await H00(J)}catch(p){throw new Error(`Failed to open URL: ${p instanceof Error?p.message:"Unknown error"}`)}}async function Yw(){return{platform:process.platform,dependencies:[{name:"npx",installed:qC("npx")},{name:"uvx",installed:qC("uvx")}],clients:await yD()}}var I61=z1(v61(),1),S61=q1("http/middleware"),d61=(D,F,w,J)=>{let{status:p,message:B,code:Y}=C00(D);S61.error({message:`${F.method} ${F.originalUrl} failed: ${B}`,code:Y}),w.status(p).json({message:B,code:Y})};function C00(D){if(vX(D))return O00(D);if(C_(D))return{status:D.statusCode,message:D.message};else return{status:500,message:"Something unexpected happened :("}}function O00(D){let F;switch(D.code){case"NOT_FOUND":F=404;break;case"BAD_REQUEST":F=400;break;default:F=500}return{status:F,message:D.message,code:D.code}}function _61(){throw new O1("NOT_FOUND","there's nothing here")}function Ew(D){return(F,w,J)=>{Promise.resolve(D(F,w,J)).catch(J)}}function j61(){return I61.default({logger:S61,useLevel:"trace",autoLogging:{ignore:(D)=>D.originalUrl?.startsWith("/trpc")},serializers:{req:(D)=>({id:D.id,ip:D.ip||D.connection?.remoteAddress,userAgent:D.headers["user-agent"]}),res:(D)=>({status:D.statusCode})},customReceivedMessage:(D)=>`→ ${D.method} ${D.originalUrl}`,customSuccessMessage:(D,F)=>{let w=F.statusCode,J=w>=500?"\uD83D\uDD34":w>=400?"\uD83D\uDFE1":"\uD83D\uDFE2";return`← ${D.method} ${D.originalUrl} ${J} ${w}`},customErrorMessage:(D,F)=>`← ${D.method} ${D.originalUrl} \uD83D\uDD34 ${F.statusCode}`})}var pw1=z1(ww1(),1),Bw1=z1(Jw1(),1);import zL from"os";class F5{analytics;machineId;enabled;traits;constructor(D){this.analytics=new pw1.Analytics({writeKey:D.writeKey}),this.enabled=D.enabled,this.traits=D.traits||{}}async initialize(){if(this.machineId)return;if(this.machineId=await Bw1.machineId(),this.enabled)this.analytics.identify({userId:this.machineId,traits:{...this.traits,os:zL.platform(),osVersion:zL.release(),arch:zL.arch()}})}static noTelemetry(){return new F5({writeKey:"--",enabled:!1})}async trackEvent(D,F={}){if(await this.initialize(),this.enabled)this.analytics.track({userId:this.machineId,event:D,properties:F})}}var Tw1=z1(Ww1(),1),Rw1=z1(ZB(),1);import{existsSync as _J0}from"node:fs";var M2=A.string().trim().min(1,"Required"),UH=M2.nullish(),TJ0=A.string().trim().min(1,"Required").regex(/^[a-z0-9._-]+$/,"Only lowercase ASCII letters, digits, and characters ., -, _ are allowed"),RJ0=A.object({type:A.literal("http"),url:M2.url(),headers:A.record(M2,A.string()).optional()}),PJ0=A.object({type:A.literal("stdio"),command:M2,args:A.array(A.string()).default([]),env:A.record(M2,A.string()).optional()}),Kw1=A.discriminatedUnion("type",[RJ0,PJ0]),xJ0=A.object({name:M2,description:M2,required:A.boolean(),type:A.enum(["string"]),password:A.boolean().optional()}),vJ0=A.object({name:M2,description:M2,inputSchema:A.object({type:M2,required:A.array(A.string()).optional(),properties:A.record(M2,A.object({type:A.string().optional(),description:A.string().optional(),default:A.unknown().optional(),title:A.string().optional(),anyOf:A.unknown().optional()})).optional()})}),IJ0=A.object({id:M2,name:M2,title:M2,description:M2,icon:UH,createdAt:A.coerce.date().nullable().default(null),isOfficial:A.boolean().nullable().default(null),isEnriched:A.boolean().nullable().default(null),isConnectable:A.boolean().nullable().default(null),lastConnectionAttemptedAt:A.coerce.date().nullable().default(null),lastConnectionError:UH,homepage:M2,transport:Kw1,source_registry:A.any(),categories:A.array(A.string()).nullable().default(null),tools:A.array(vJ0).nullable().default(null),parameters:A.array(xJ0),readme:UH}),SJ0=A.object({name:A.literal("registry"),entryId:M2,entryData:IJ0}),ZH=A.object({name:TJ0,transport:Kw1,source:SJ0.optional()}),dJ0=A.object({id:M2,name:M2,description:UH,servers:A.array(ZH)}),Vw1=A.object({proxies:A.array(dJ0)});var $H=z1(Hw1(),1);async function PY(D){let F=await HE(D);return Vw1.parse(F)}async function xY(D,F){return await t4(D,F)}class MH{filePath;constructor(D){this.filePath=D}static async connect(D){let F=new MH(D);if(!_J0(D))await xY(D,{proxies:[]});return F}async addProxy(D){let F=await PY(this.filePath);if(F.proxies.find((p)=>p.name===D.name))throw new Error("Proxy already exists");let J={...D,servers:(D.servers||[]).map((p)=>({...p,name:$H.default(p.name,{lower:!0,strict:!0,trim:!0})})),id:$H.default(D.name,{lower:!0,strict:!0,trim:!0})};return F.proxies.push(J),await xY(this.filePath,F),J}async getProxy(D){let w=(await PY(this.filePath)).proxies.find((J)=>J.id===D);if(!w)throw new Error("Proxy not found");return w}async deleteProxy(D){let F=await PY(this.filePath);if(!F.proxies.find((J)=>J.id===D))throw new Error("Proxy not found");F.proxies=F.proxies.filter((J)=>J.id!==D),await xY(this.filePath,F)}async updateProxy(D,F){let w=await PY(this.filePath),J=w.proxies.find((p)=>p.id===D);if(!J)throw new Error("Proxy not found");return Object.assign(J,{...F,servers:(F.servers||J.servers||[]).map((p)=>({...p,name:$H.default(p.name,{lower:!0,trim:!0})}))}),await xY(this.filePath,w),J}async getAll(){return(await PY(this.filePath)).proxies}async purge(){await xY(this.filePath,{proxies:[]})}}var b7=q1("ProxyServerStore");class qH{proxyServers=new Map;db;telemetry;constructor(D){this.db=D.db,this.telemetry=D.telemetry||F5.noTelemetry()}static async create(D,F){b7.debug("initializing ProxyServerStore");let w=new qH({db:D,telemetry:F});return await w.initialize(),b7.debug("initialization complete"),w}async initialize(){let D=await this.db.getAll();for(let F of D){let w=F.id;b7.debug({message:`initializing ${w}`,proxyId:w});let J=new nF({id:w,name:F.name,description:F.description??void 0,servers:F.servers});await J.connectTargets(),this.proxyServers.set(w,J)}}get(D){let F=this.proxyServers.get(D);if(!F)throw new O1("NOT_FOUND",`proxy server '${D}' not found or failed to initialize.`);return F}async delete(D){this.telemetry.trackEvent("proxy_deleted"),await this.get(D).close(),await this.db.deleteProxy(D),this.proxyServers.delete(D),b7.info(`successfully deleted proxy server configuration: ${D}`)}async purge(){await this.closeAll(),await this.db.purge(),this.proxyServers.clear()}async closeAll(){b7.info("cleaning up all proxy servers..."),await Promise.all(Array.from(this.proxyServers.values()).map((D)=>D.close())),b7.info("finished cleaning up all proxy servers.")}getAll(){return Array.from(this.proxyServers.values())}async create({name:D,description:F,servers:w,source:J}){this.telemetry.trackEvent("proxy_created");let p=await this.db.addProxy({name:D,description:F,servers:w??[]}),B=new nF({name:D,id:p.id,servers:p.servers,description:p.description??void 0});return await B.connectTargets(),this.proxyServers.set(p.id,B),b7.info({message:"Created new proxy",proxyId:p.id}),B}async addServer(D,F){this.telemetry.trackEvent("server_added");let w=this.get(D);return await w.addTarget(F,{throwOnError:!0}),await this.db.updateProxy(D,{servers:w.attributes.servers}),w}async removeServer(D,F){this.telemetry.trackEvent("server_removed");let w=this.get(D);return await w.removeTarget(F),await this.db.updateProxy(D,{servers:w.attributes.servers}),w}async update(D,F){this.telemetry.trackEvent("proxy_updated");let w=this.get(D);return await w.update(F),await this.db.updateProxy(D,F),w}}var Gw1=z1(A9(),1),uw1=z1(uW(),1),jJ0="4mb";async function Nw1(D){let F=Gw1.default.parse(D.headers["content-type"]??"");if(F.type!=="application/json")throw new Error(`Unsupported content-type: ${F}`);let w=await uw1.default(D,{limit:jJ0,encoding:F.parameters.charset??"utf-8"});return JSON.parse(w)}var zw1=z1(ZB(),1),AH=q1("mcp/sse"),Uw1=({proxyStore:D,telemetry:F})=>{let w=zw1.default.Router(),J=new Map;return w.get("/:proxy_id/sse",Ew(async(p,B)=>{let Y=p.params.proxy_id,Q=D.get(Y),X=new NW(`/${Q.id}/message`,B);J.set(X.sessionId,X),AH.info({message:"SSE connection started",sessionId:X.sessionId,proxyId:Q.id,userAgent:p.headers["user-agent"],host:p.headers.host}),F.trackEvent("connection_started",{transport:"sse"}),p.socket.on("close",()=>{AH.info({message:"SSE connection closed",sessionId:X.sessionId,proxyId:Q.id}),J.delete(X.sessionId)}),await Q.connect(X)})),w.post("/:proxy_id/message",Ew(async(p,B)=>{let Y=p.params.proxy_id,Q=D.get(Y),X=p.query.sessionId?.toString();if(!X)throw new O1("BAD_REQUEST","No sessionId provided");let W=await Nw1(p);AH.info({message:"Message received",proxyId:Q.id,sessionId:X,method:W.method,params:W.params});let K=J.get(X);if(!K)throw AH.warn({message:"Transport not found",sessionId:X,proxyId:Q.id}),new O1("NOT_FOUND","Transport not found");F.trackEvent("method_called",{method:W.method,transport:"sse"}),await K.handlePostMessage(p,B,W)})),w};var $L=z1(ZB(),1),vY=q1("mcp/streamable"),Zw1=({proxyStore:D,telemetry:F})=>{let w=$L.default.Router(),J=new Map;w.use($L.default.json()),w.post("/:proxy_id/mcp",Ew(async(B,Y)=>{let Q=B.params.proxy_id,X=await D.get(Q),W=B.headers["mcp-session-id"],K;if(W&&J.has(W)){let H=J.get(W);if(!H)throw new O1("NOT_FOUND","Transport not found");K=H}else if(!W&&Ep(B.body))vY.info(`[${X.id}] new initialization request`),F.trackEvent("connection_started",{transport:"streamable"}),K=new UW({sessionIdGenerator:()=>crypto.randomUUID(),onsessioninitialized:(H)=>{J.set(H,K)}}),K.onclose=()=>{if(vY.info(`[${X.id}] transport closed`,{proxyId:X.id,sessionId:K.sessionId}),K.sessionId)J.delete(K.sessionId)},B.socket.on("close",()=>{vY.info(`[${X.id}] socket closed'`,{proxyId:X.id,sessionId:K.sessionId})}),await X.connect(K);else throw new O1("BAD_REQUEST","No valid session ID provided");vY.info({message:`[${X.id}] '${B.body.method}' called`,proxyId:X.id,sessionId:K.sessionId,method:B.body.method,body:B.body}),F.trackEvent("method_called",{method:B.body.method,transport:"streamable"}),await K.handleRequest(B,Y,B.body)}));let p=Ew(async(B,Y)=>{let Q=B.params.proxy_id,X=D.get(Q),W=B.headers["mcp-session-id"];if(!W||!J.has(W))throw new O1("BAD_REQUEST","Invalid or missing session ID");let K=J.get(W);if(!K)throw new O1("NOT_FOUND","Transport not found");let H=K;vY.info({message:"MCP handleSessionRequest",proxyId:X.id,sessionId:H.sessionId,body:B.body}),await H.handleRequest(B,Y)});return w.get("/:proxy_id/mcp",p),w.delete("/:proxy_id/mcp",p),w};function fJ0(D,F){if("body"in D){if(D.body===void 0)return;if(typeof D.body==="string")return D.body;return JSON.stringify(D.body)}let w=0,J=!1;return new ReadableStream({start(p){let B=(Q)=>{if(w+=Q.length,!F.maxBodySize||w<=F.maxBodySize){p.enqueue(new Uint8Array(Q.buffer,Q.byteOffset,Q.byteLength));return}p.error(new K0({code:"PAYLOAD_TOO_LARGE"})),J=!0,D.off("data",B),D.off("end",Y)},Y=()=>{if(J)return;J=!0,D.off("data",B),D.off("end",Y),p.close()};D.on("data",B),D.on("end",Y)},cancel(){D.destroy()}})}function mJ0(D){try{var F,w;let J=D.headers[":scheme"]&&D.headers[":scheme"]==="https"||D.socket&&"encrypted"in D.socket&&D.socket.encrypted?"https:":"http:",p=(F=(w=D.headers.host)!==null&&w!==void 0?w:D.headers[":authority"])!==null&&F!==void 0?F:"localhost";return new URL(D.url,`${J}//${p}`)}catch(J){throw new K0({code:"BAD_REQUEST",message:"Invalid URL",cause:J})}}function kJ0(D){let F=new Headers;for(let w in D){let J=D[w];if(typeof w==="string"&&w.startsWith(":"))continue;if(Array.isArray(J))for(let p of J)F.append(w,p);else if(J!=null)F.append(w,J)}return F}function bJ0(D,F,w){let J=new AbortController,p=()=>{F.off("close",p),D.off("aborted",p),J.abort()};F.once("close",p),D.once("aborted",p);let B=mJ0(D),Y={headers:kJ0(D.headers),method:D.method,signal:J.signal};if(D.method!=="GET"&&D.method!=="HEAD")Y.body=fJ0(D,w),Y.duplex="half";return new Request(B,Y)}async function hJ0(D,F){if(D.write(F)===!1)await new Promise((w,J)=>{let p=(Q)=>{J(Q),Y()},B=()=>{w(),Y()},Y=()=>{D.off("error",p),D.off("drain",B)};D.once("error",p),D.once("drain",B)})}async function yJ0(D){let{res:F}=D;try{let w=new WritableStream({async write(J){var p;await hJ0(F,J),(p=F.flush)===null||p===void 0||p.call(F)}});await D.body.pipeTo(w,{signal:D.signal})}catch(w){if(LE(w))return;throw w}}async function iJ0(D){let{response:F,rawResponse:w}=D;if(w.statusCode===200)w.statusCode=F.status;for(let[J,p]of F.headers)w.setHeader(J,p);try{if(F.body)await yJ0({res:w,signal:D.request.signal,body:F.body})}catch(J){if(!w.headersSent)w.statusCode=500;throw J}finally{w.end()}}var Rw=y1(G6(),1);function ML(D){return(F)=>{var w;let{res:J,req:p}=D,B=D6(F),Y=_8({config:D.router._def._config,error:B,type:"unknown",path:void 0,input:void 0,ctx:void 0});(w=D.onError)===null||w===void 0||w.call(D,{req:p,error:B,type:"unknown",path:void 0,input:void 0,ctx:void 0});let Q=a5(D.router._def._config,{error:Y});J.statusCode=Y.data.httpStatus,J.end(JSON.stringify(Q))}}async function $w1(D){return new Promise((F)=>{var w;let J=(w=D.middleware)!==null&&w!==void 0?w:(p,B,Y)=>Y();return D.res.once("finish",()=>{F()}),J(D.req,D.res,(p)=>{e4(async()=>{var B;let Y=bJ0(D.req,D.res,{maxBodySize:(B=D.maxBodySize)!==null&&B!==void 0?B:null}),Q=async(W)=>{var K;return await((K=D.createContext)===null||K===void 0?void 0:K.call(D,Rw.default(Rw.default({},D),W)))},X=await Eb(Rw.default(Rw.default({},D),{},{req:Y,error:p?D6(p):null,createContext:Q,onError(W){var K;D===null||D===void 0||(K=D.onError)===null||K===void 0||K.call(D,Rw.default(Rw.default({},W),{},{req:D.req}))}}));await iJ0({request:Y,response:X,rawResponse:D.res})}).catch(ML(D))})})}var qL=y1(G6(),1);function Mw1(D){return(F,w)=>{let J="";e4(async()=>{J=F.path.slice(F.path.lastIndexOf("/")+1),await $w1(qL.default(qL.default({},D),{},{req:F,res:w,path:J}))}).catch(ML(qL.default({req:F,res:w,path:J},D)))}}function qw1({proxyStore:D}){return v0.router({allClients:v0.procedure.query(()=>yD()),byProxy:v0.router({list:v0.procedure.input(A.object({proxyId:A.string()})).query(async({input:F})=>{return await Mk(F.proxyId)}),install:v0.procedure.input(A.object({client:A.nativeEnum(cJ),proxyId:A.string(),baseUrl:A.string()})).mutation(async({input:F})=>{let w=D.get(F.proxyId);await(await y2(F.client)).install({name:w.id,url:c6(F.baseUrl,YY(w.id))})}),uninstall:v0.procedure.input(A.object({client:A.nativeEnum(cJ),proxyId:A.string()})).mutation(async({input:F})=>{let w=D.get(F.proxyId);await(await y2(F.client)).uninstall(w.id)})})})}function Aw1({registryURL:D,proxyStore:F}){let w=NV(D);return v0.router({getEntries:v0.procedure.input(A.object({pageIndex:A.number().min(0),pageSize:A.number().min(1)})).query(({input:J})=>w.entries.getEntries.query(J)),getEntryByName:v0.procedure.input(A.object({name:A.string()})).query(({input:J})=>w.entries.getEntryByName.query(J)),getTransportForEntry:v0.procedure.input(A.object({entryName:A.string(),parameters:A.record(A.string(),A.string()).optional()})).mutation(async({input:J})=>{return await w.entries.getTransportForEntry.query({entryName:J.entryName,parameters:J.parameters})})})}var Cw1=A.object({name:A.string(),description:A.string().optional(),servers:A.array(ZH).optional()}),lJ0=Cw1.omit({servers:!0}).partial();function Ow1({proxyStore:D}){return v0.router({getAll:v0.procedure.query(async()=>{return(await D.getAll()).map((F)=>({...F.toPlainObject(),path:BY(F.id)}))}),get:v0.procedure.input(A.object({proxyId:A.string()})).query(({input:F})=>{return{...D.get(F.proxyId).toPlainObject(),path:BY(F.proxyId)}}),create:v0.procedure.input(Cw1).mutation(async({input:F})=>{return(await D.create({name:F.name,description:F.description??void 0,servers:F.servers})).toPlainObject()}),update:v0.procedure.input(A.object({proxyId:A.string(),attributes:lJ0})).mutation(async({input:F})=>{return(await D.update(F.proxyId,{name:F.attributes.name,description:F.attributes.description??void 0})).toPlainObject()}),delete:v0.procedure.input(A.object({proxyId:A.string()})).mutation(async({input:F})=>{return await D.delete(F.proxyId),{success:!0}}),addServer:v0.procedure.input(A.object({proxyId:A.string(),server:ZH})).mutation(async({input:F})=>{let w=await D.addServer(F.proxyId,F.server);return await MC(w),w.toPlainObject()}),purge:v0.procedure.mutation(()=>D.purge()),removeServer:v0.procedure.input(A.object({proxyId:A.string(),serverName:A.string()})).mutation(async({input:F})=>{let w=await D.removeServer(F.proxyId,F.serverName);return await MC(w),w.toPlainObject()})})}function gJ0({proxyStore:D,registryURL:F}){return v0.router({health:v0.procedure.query(()=>Yw()),store:Ow1({proxyStore:D}),installer:qw1({proxyStore:D}),registry:Aw1({registryURL:F,proxyStore:D})})}function Lw1({proxyStore:D,registryURL:F}){return Mw1({router:gJ0({proxyStore:D,registryURL:F})})}var AL=q1("Gateway");class CH{proxyStore;port;server;constructor(D){this.port=D.port,this.proxyStore=D.proxyStore,this.server=D.server}static async start(D,F){AL.info("starting director gateway");let w=await MH.connect(D.databaseFilePath),J=D.telemetry||F5.noTelemetry(),p=await qH.create(w,J),B=Rw1.default(),Y=D.registryURL;B.use(Tw1.default({origin:D.allowedOrigins})),B.use(j61()),B.use("/",Uw1({proxyStore:p,telemetry:J})),B.use("/",Zw1({proxyStore:p,telemetry:J})),B.use("/trpc",Lw1({proxyStore:p,registryURL:Y})),B.all("*",_61),B.use(d61),J.trackEvent("gateway_start");let Q=B.listen(D.port,()=>{AL.info(`director gateway running on port ${D.port}`),F?.()}),X=new CH({port:D.port,db:w,proxyStore:p,server:Q});return process.on("SIGINT",async()=>{AL.info("received SIGINT, cleaning up proxy servers..."),await X.stop(),process.exit(0)}),X}async stop(){await this.proxyStore.closeAll(),await new Promise((D)=>{this.server.closeAllConnections(),this.server.close(()=>D())})}}function Pw1(D){D.command("serve").description("Start the web service").action(_1(async()=>{try{await CL()}catch(F){console.error("Fatal error starting gateway",F),process.exit(1)}}))}async function CL(D){console.log(`v${K9.version}`),Oh(),await CH.start({port:Q0.GATEWAY_PORT,databaseFilePath:Q0.CONFIG_FILE_PATH,registryURL:Q0.REGISTRY_API_URL,allowedOrigins:[Q0.STUDIO_URL,/^https?:\/\/localhost(:\d+)?$/],telemetry:new F5({writeKey:Q0.SEGMENT_WRITE_KEY,enabled:Q0.SEND_TELEMETRY,traits:{cliVersion:K9.version}})},D)}function xw1(D){D.command("studio").description("Open the UI in your browser").action(_1(async()=>{let F=tB();F.start("opening studio...");try{await I2.health.query()}catch(w){F.fail("Failed to connect to gateway. Have you ran `director serve`?"),process.exit(1)}try{OL()}catch(w){F.fail(`failed to open ${Q0.STUDIO_URL}, try manually`)}F.stop()}))}async function OL(){await T61(Q0.STUDIO_URL)}var aJ0=q1("quickstart");function Iw1(D){D.command("quickstart").description("Start the gateway and open the studio in your browser").action(_1(async()=>{await nJ0(),await CL(async()=>{aJ0.info(`gateway started, opening ${Q0.STUDIO_URL} in your browser...`),await OL()})}))}async function nJ0(){let D=tB();D.start("checking prerequisites...");let F=await Yw();D.stop();let w=[],J=[];w.push(""),w.push(G2("Dependency Check")),w.push("The following dependencies are required by some MCP servers that use Stdout. It's best to have them all installed."),w.push("");for(let Y of F.dependencies)w.push(vw1({name:Y.name,installed:Y.installed,successText:`${Y.name} is installed`,failureText:`${Y.name} is not available in $PATH. ${oJ0(Y)}`}));if(F.dependencies.filter((Y)=>Y.installed).length<F.dependencies.length)J.push("Some dependencies are not available in $PATH, MCP servers that depend on them will not work.");w.push(""),w.push(G2("MCP Clients Check")),w.push("Director can automatically configure the following MCP clients for you. It's best to have at least one installed."),w.push("");for(let Y of F.clients)w.push(vw1({name:Y.name,installed:Y.installed}));if(F.clients.filter((Y)=>Y.installed).length===0)J.push("No MCP clients found. It's best to have at least one MCP client installed in order to use the automatic client configuration.");if(w.push(""),w.push(G2("Summary")),w.push(""),console.log(w.join(`
624
624
  `)),J.length>0)if(console.log(J.map((Q)=>`${z5("✗")} ${z5(Q)}`).join(`
625
625
  `)),console.log(""),await $C({message:"Would you like to continue with a degraded experience?",choices:["No","Yes"]})==="Yes")console.log(QJ("Continuing with a degraded experience..."));else console.log("Exiting..."),process.exit(1);else console.log(QJ("All systems go!")),console.log("")}function vw1(D){let F=`[${D.installed?QJ("✓"):z5("✗")}]`,w=D.successText??`${D.name} is installed`,J=D.failureText??`${D.name} is not installed`;return`${F} ${D.installed?w:J}`}function oJ0(D){switch(D.name){case"npx":return"Follow the installation instructions here: https://docs.npmjs.com/downloading-and-installing-node-js-and-npm.";case"uvx":return"Follow the installation instructions here: https://docs.astral.sh/uv/getting-started/installation/.";default:return}}function Sw1(D){return D.command("remove <proxyId> <serverName>").description("Remove a server from a proxy").action(_1(async(F,w)=>{let J=await l6(()=>I2.store.removeServer.mutate({proxyId:F,serverName:w})).start("removing server...").succeed(`Server ${w} removed from ${F}`).run()}))}function dw1(D){D.command("status").description("Get the status of the director").action(_1(async()=>{let F=await Yw();console.log(F)}))}function _w1(D){Iw1(D),Pw1(D),xw1(D),D.command("ls").alias("list").description("List proxies").action(_1(async()=>{let F=await I2.store.getAll.query();if(F.length===0)console.log("no proxies configured yet.");else{let w=L3(["id","name","path"]);w.push(...F.map((J)=>[J.id,J.name,c6(Q0.GATEWAY_URL,J.path)])),console.log(w.toString())}})),D.command("get <proxyId>").description("Show proxy details").action(_1(async(F)=>{let w=await I2.store.get.query({proxyId:F});if(!w){console.error(`proxy ${F} not found`);return}console.log(`id=${w.id}`),console.log(`name=${w.name}`);let J=L3(["name","transport","url/command"]);J.push(...w.servers.map((p)=>[p.name,p.transport.type,p.transport.type==="http"?p.transport.url:[p.transport.command,...p.transport.args??[]].join(" ")])),console.log(J.toString())})),D.command("create <name>").description("Create a new proxy").action(_1(async(F)=>{let w=await I2.store.create.mutate({name:F,servers:[]});console.log(`proxy ${w.id} created`)})),D.command("destroy <proxyId>").description("Delete a proxy").action(_1(async(F)=>{await I2.store.delete.mutate({proxyId:F}),console.log(`proxy ${F} deleted`)})),C61(D),D.command("disconnect <proxyId>").description("Disconnect a proxy from an MCP client").addOption(L8({flags:"-t,--target <target>",description:"target client",choices:["claude","cursor","vscode"]}).makeOptionMandatory()).action(_1(async(F,w)=>{let J=await I2.store.get.query({proxyId:F}),B=await(await y2(w.target)).uninstall(J.id);console.log(B)})),q61(D),Sw1(D),D.command("http2stdio <url>").description("Proxy an HTTP connection (sse or streamable) to a stdio stream").action(async(F)=>{await k01(F)}),L61(D),dw1(D),O61(D)}var OH=q1("enrich/tools");async function jw1(D){let F=await D.entries.getEntries.query({pageIndex:0,pageSize:100});for(let w of F.entries){if(w.lastConnectionAttemptedAt){OH.info(`skipping ${w.name}, already processed`);continue}let J;try{J=await sJ0(w)}catch(p){let B=p instanceof Error?p.message:String(p);OH.error(`error enriching ${w.name}: ${B}`),await D.entries.updateEntry.mutate({id:w.id,isConnectable:!1,lastConnectionAttemptedAt:new Date,lastConnectionError:B});continue}await D.entries.updateEntry.mutate({id:w.id,isConnectable:!0,lastConnectionAttemptedAt:new Date,lastConnectionError:void 0,tools:J})}}async function sJ0(D){let F=D.transport,w=new s8(`${D.name}-client`);if(F.type==="stdio")await w.connectToStdio(F.command,F.args,{...process.env,...F.env});else if(F.type==="http")await w.connectToHTTP(F.url);else return[];OH.info(`connected to ${D.name}, fetching tools...`);let J=(await w.listTools()).tools.map(({name:p,description:B,inputSchema:Y})=>({name:p,description:B??"",inputSchema:{type:"object",properties:Y?.properties??{},required:Y?.required}}));return OH.info(`closing client ${D.name}`),await w.close(),J}function fw1(D){console.log(`
626
626
  ${G2(D.name.toUpperCase())}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@director.run/cli",
3
3
  "type": "module",
4
- "version": "0.0.42",
4
+ "version": "0.0.43",
5
5
  "files": ["dist", "README.md"],
6
6
  "bin": {
7
7
  "director": "./dist/cli.js"