emceepee 0.2.7 → 0.2.8
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/emceepee-http.js +5 -5
- package/dist/emceepee.js +1 -1
- package/package.json +1 -1
package/dist/emceepee.js
CHANGED
|
@@ -46,7 +46,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
46
46
|
`:`[${W[B]}\r
|
|
47
47
|
]`;continue}if($+=W[B],W[B]==="\\")J=!0;else if(G&&W[B]==="]")G=!1;else if(!G&&W[B]==="[")G=!0}try{new RegExp($)}catch{return console.warn(`Could not convert regex pattern at ${X.currentPath.join("/")} to a flag-independent form! Falling back to the flag-ignorant source`),Q.source}return $}function pQ(Q,X){if(X.target==="openAi")console.warn("Warning: OpenAI may not support records in schemas! Try an array of key-value pairs instead.");if(X.target==="openApi3"&&Q.keyType?._def.typeName===P.ZodEnum)return{type:"object",required:Q.keyType._def.values,properties:Q.keyType._def.values.reduce((W,$)=>({...W,[$]:h(Q.valueType._def,{...X,currentPath:[...X.currentPath,"properties",$]})??w0(X)}),{}),additionalProperties:X.rejectedAdditionalProperties};let Y={type:"object",additionalProperties:h(Q.valueType._def,{...X,currentPath:[...X.currentPath,"additionalProperties"]})??X.allowedAdditionalProperties};if(X.target==="openApi3")return Y;if(Q.keyType?._def.typeName===P.ZodString&&Q.keyType._def.checks?.length){let{type:W,...$}=cQ(Q.keyType._def,X);return{...Y,propertyNames:$}}else if(Q.keyType?._def.typeName===P.ZodEnum)return{...Y,propertyNames:{enum:Q.keyType._def.values}};else if(Q.keyType?._def.typeName===P.ZodBranded&&Q.keyType._def.type._def.typeName===P.ZodString&&Q.keyType._def.type._def.checks?.length){let{type:W,...$}=mQ(Q.keyType._def,X);return{...Y,propertyNames:$}}return Y}function k3(Q,X){if(X.mapStrategy==="record")return pQ(Q,X);let Y=h(Q.keyType._def,{...X,currentPath:[...X.currentPath,"items","items","0"]})||w0(X),W=h(Q.valueType._def,{...X,currentPath:[...X.currentPath,"items","items","1"]})||w0(X);return{type:"array",maxItems:125,items:{type:"array",items:[Y,W],minItems:2,maxItems:2}}}function v3(Q){let X=Q.values,W=Object.keys(Q.values).filter((J)=>{return typeof X[X[J]]!=="number"}).map((J)=>X[J]),$=Array.from(new Set(W.map((J)=>typeof J)));return{type:$.length===1?$[0]==="string"?"string":"number":["string","number"],enum:W}}function _3(Q){return Q.target==="openAi"?void 0:{not:w0({...Q,currentPath:[...Q.currentPath,"not"]})}}function x3(Q){return Q.target==="openApi3"?{enum:["null"],nullable:!0}:{type:"null"}}var n4={ZodString:"string",ZodNumber:"number",ZodBigInt:"integer",ZodBoolean:"boolean",ZodNull:"null"};function g3(Q,X){if(X.target==="openApi3")return y3(Q,X);let Y=Q.options instanceof Map?Array.from(Q.options.values()):Q.options;if(Y.every((W)=>(W._def.typeName in n4)&&(!W._def.checks||!W._def.checks.length))){let W=Y.reduce(($,J)=>{let G=n4[J._def.typeName];return G&&!$.includes(G)?[...$,G]:$},[]);return{type:W.length>1?W:W[0]}}else if(Y.every((W)=>W._def.typeName==="ZodLiteral"&&!W.description)){let W=Y.reduce(($,J)=>{let G=typeof J._def.value;switch(G){case"string":case"number":case"boolean":return[...$,G];case"bigint":return[...$,"integer"];case"object":if(J._def.value===null)return[...$,"null"];case"symbol":case"undefined":case"function":default:return $}},[]);if(W.length===Y.length){let $=W.filter((J,G,H)=>H.indexOf(J)===G);return{type:$.length>1?$:$[0],enum:Y.reduce((J,G)=>{return J.includes(G._def.value)?J:[...J,G._def.value]},[])}}}else if(Y.every((W)=>W._def.typeName==="ZodEnum"))return{type:"string",enum:Y.reduce((W,$)=>[...W,...$._def.values.filter((J)=>!W.includes(J))],[])};return y3(Q,X)}var y3=(Q,X)=>{let Y=(Q.options instanceof Map?Array.from(Q.options.values()):Q.options).map((W,$)=>h(W._def,{...X,currentPath:[...X.currentPath,"anyOf",`${$}`]})).filter((W)=>!!W&&(!X.strictUnions||typeof W==="object"&&Object.keys(W).length>0));return Y.length?{anyOf:Y}:void 0};function f3(Q,X){if(["ZodString","ZodNumber","ZodBigInt","ZodBoolean","ZodNull"].includes(Q.innerType._def.typeName)&&(!Q.innerType._def.checks||!Q.innerType._def.checks.length)){if(X.target==="openApi3")return{type:n4[Q.innerType._def.typeName],nullable:!0};return{type:[n4[Q.innerType._def.typeName],"null"]}}if(X.target==="openApi3"){let W=h(Q.innerType._def,{...X,currentPath:[...X.currentPath]});if(W&&"$ref"in W)return{allOf:[W],nullable:!0};return W&&{...W,nullable:!0}}let Y=h(Q.innerType._def,{...X,currentPath:[...X.currentPath,"anyOf","0"]});return Y&&{anyOf:[Y,{type:"null"}]}}function h3(Q,X){let Y={type:"number"};if(!Q.checks)return Y;for(let W of Q.checks)switch(W.kind){case"int":Y.type="integer",D5(Y,"type",W.message,X);break;case"min":if(X.target==="jsonSchema7")if(W.inclusive)s(Y,"minimum",W.value,W.message,X);else s(Y,"exclusiveMinimum",W.value,W.message,X);else{if(!W.inclusive)Y.exclusiveMinimum=!0;s(Y,"minimum",W.value,W.message,X)}break;case"max":if(X.target==="jsonSchema7")if(W.inclusive)s(Y,"maximum",W.value,W.message,X);else s(Y,"exclusiveMaximum",W.value,W.message,X);else{if(!W.inclusive)Y.exclusiveMaximum=!0;s(Y,"maximum",W.value,W.message,X)}break;case"multipleOf":s(Y,"multipleOf",W.value,W.message,X);break}return Y}function u3(Q,X){let Y=X.target==="openAi",W={type:"object",properties:{}},$=[],J=Q.shape();for(let H in J){let B=J[H];if(B===void 0||B._def===void 0)continue;let z=pM(B);if(z&&Y){if(B._def.typeName==="ZodOptional")B=B._def.innerType;if(!B.isNullable())B=B.nullable();z=!1}let K=h(B._def,{...X,currentPath:[...X.currentPath,"properties",H],propertyPath:[...X.currentPath,"properties",H]});if(K===void 0)continue;if(W.properties[H]=K,!z)$.push(H)}if($.length)W.required=$;let G=cM(Q,X);if(G!==void 0)W.additionalProperties=G;return W}function cM(Q,X){if(Q.catchall._def.typeName!=="ZodNever")return h(Q.catchall._def,{...X,currentPath:[...X.currentPath,"additionalProperties"]});switch(Q.unknownKeys){case"passthrough":return X.allowedAdditionalProperties;case"strict":return X.rejectedAdditionalProperties;case"strip":return X.removeAdditionalStrategy==="strict"?X.allowedAdditionalProperties:X.rejectedAdditionalProperties}}function pM(Q){try{return Q.isOptional()}catch{return!0}}var l3=(Q,X)=>{if(X.currentPath.toString()===X.propertyPath?.toString())return h(Q.innerType._def,X);let Y=h(Q.innerType._def,{...X,currentPath:[...X.currentPath,"anyOf","1"]});return Y?{anyOf:[{not:w0(X)},Y]}:w0(X)};var m3=(Q,X)=>{if(X.pipeStrategy==="input")return h(Q.in._def,X);else if(X.pipeStrategy==="output")return h(Q.out._def,X);let Y=h(Q.in._def,{...X,currentPath:[...X.currentPath,"allOf","0"]}),W=h(Q.out._def,{...X,currentPath:[...X.currentPath,"allOf",Y?"1":"0"]});return{allOf:[Y,W].filter(($)=>$!==void 0)}};function c3(Q,X){return h(Q.type._def,X)}function p3(Q,X){let W={type:"array",uniqueItems:!0,items:h(Q.valueType._def,{...X,currentPath:[...X.currentPath,"items"]})};if(Q.minSize)s(W,"minItems",Q.minSize.value,Q.minSize.message,X);if(Q.maxSize)s(W,"maxItems",Q.maxSize.value,Q.maxSize.message,X);return W}function d3(Q,X){if(Q.rest)return{type:"array",minItems:Q.items.length,items:Q.items.map((Y,W)=>h(Y._def,{...X,currentPath:[...X.currentPath,"items",`${W}`]})).reduce((Y,W)=>W===void 0?Y:[...Y,W],[]),additionalItems:h(Q.rest._def,{...X,currentPath:[...X.currentPath,"additionalItems"]})};else return{type:"array",minItems:Q.items.length,maxItems:Q.items.length,items:Q.items.map((Y,W)=>h(Y._def,{...X,currentPath:[...X.currentPath,"items",`${W}`]})).reduce((Y,W)=>W===void 0?Y:[...Y,W],[])}}function i3(Q){return{not:w0(Q)}}function n3(Q){return w0(Q)}var o3=(Q,X)=>{return h(Q.innerType._def,X)};var r3=(Q,X,Y)=>{switch(X){case P.ZodString:return cQ(Q,Y);case P.ZodNumber:return h3(Q,Y);case P.ZodObject:return u3(Q,Y);case P.ZodBigInt:return b3(Q,Y);case P.ZodBoolean:return P3();case P.ZodDate:return L5(Q,Y);case P.ZodUndefined:return i3(Y);case P.ZodNull:return x3(Y);case P.ZodArray:return N3(Q,Y);case P.ZodUnion:case P.ZodDiscriminatedUnion:return g3(Q,Y);case P.ZodIntersection:return I3(Q,Y);case P.ZodTuple:return d3(Q,Y);case P.ZodRecord:return pQ(Q,Y);case P.ZodLiteral:return T3(Q,Y);case P.ZodEnum:return S3(Q);case P.ZodNativeEnum:return v3(Q);case P.ZodNullable:return f3(Q,Y);case P.ZodOptional:return l3(Q,Y);case P.ZodMap:return k3(Q,Y);case P.ZodSet:return p3(Q,Y);case P.ZodLazy:return()=>Q.getter()._def;case P.ZodPromise:return c3(Q,Y);case P.ZodNaN:case P.ZodNever:return _3(Y);case P.ZodEffects:return E3(Q,Y);case P.ZodAny:return w0(Y);case P.ZodUnknown:return n3(Y);case P.ZodDefault:return R3(Q,Y);case P.ZodBranded:return mQ(Q,Y);case P.ZodReadonly:return o3(Q,Y);case P.ZodCatch:return Z3(Q,Y);case P.ZodPipeline:return m3(Q,Y);case P.ZodFunction:case P.ZodVoid:case P.ZodSymbol:return;default:return((W)=>{return})(X)}};function h(Q,X,Y=!1){let W=X.seen.get(Q);if(X.override){let H=X.override?.(Q,X,W,Y);if(H!==j3)return H}if(W&&!Y){let H=dM(W,X);if(H!==void 0)return H}let $={def:Q,path:X.currentPath,jsonSchema:void 0};X.seen.set(Q,$);let J=r3(Q,Q.typeName,X),G=typeof J==="function"?h(J(),X):J;if(G)iM(Q,X,G);if(X.postProcess){let H=X.postProcess(G,Q,X);return $.jsonSchema=G,H}return $.jsonSchema=G,G}var dM=(Q,X)=>{switch(X.$refStrategy){case"root":return{$ref:Q.path.join("/")};case"relative":return{$ref:lQ(X.currentPath,Q.path)};case"none":case"seen":{if(Q.path.length<X.currentPath.length&&Q.path.every((Y,W)=>X.currentPath[W]===Y))return console.warn(`Recursive reference detected at ${X.currentPath.join("/")}! Defaulting to any`),w0(X);return X.$refStrategy==="seen"?w0(X):void 0}}},iM=(Q,X,Y)=>{if(Q.description){if(Y.description=Q.description,X.markdownDescription)Y.markdownDescription=Q.description}return Y};var j5=(Q,X)=>{let Y=M3(X),W=typeof X==="object"&&X.definitions?Object.entries(X.definitions).reduce((B,[z,K])=>({...B,[z]:h(K._def,{...Y,currentPath:[...Y.basePath,Y.definitionPath,z]},!0)??w0(Y)}),{}):void 0,$=typeof X==="string"?X:X?.nameStrategy==="title"?void 0:X?.name,J=h(Q._def,$===void 0?Y:{...Y,currentPath:[...Y.basePath,Y.definitionPath,$]},!1)??w0(Y),G=typeof X==="object"&&X.name!==void 0&&X.nameStrategy==="title"?X.name:void 0;if(G!==void 0)J.title=G;if(Y.flags.hasReferencedOpenAiAnyType){if(!W)W={};if(!W[Y.openAiAnyTypeName])W[Y.openAiAnyTypeName]={type:["string","number","integer","boolean","array","null"],items:{$ref:Y.$refStrategy==="relative"?"1":[...Y.basePath,Y.definitionPath,Y.openAiAnyTypeName].join("/")}}}let H=$===void 0?W?{...J,[Y.definitionPath]:W}:J:{$ref:[...Y.$refStrategy==="relative"?[]:Y.basePath,Y.definitionPath,$].join("/"),[Y.definitionPath]:{...W,[$]:J}};if(Y.target==="jsonSchema7")H.$schema="http://json-schema.org/draft-07/schema#";else if(Y.target==="jsonSchema2019-09"||Y.target==="openAi")H.$schema="https://json-schema.org/draft/2019-09/schema#";if(Y.target==="openAi"&&(("anyOf"in H)||("oneOf"in H)||("allOf"in H)||("type"in H)&&Array.isArray(H.type)))console.warn("Warning: OpenAI may not support schemas with unions as roots! Try wrapping it in an object property.");return H};function nM(Q){if(!Q)return"draft-7";if(Q==="jsonSchema7"||Q==="draft-7")return"draft-7";if(Q==="jsonSchema2019-09"||Q==="draft-2020-12")return"draft-2020-12";return"draft-7"}function w5(Q,X){if(s0(Q))return VQ(Q,{target:nM(X?.target),io:X?.pipeStrategy??"input"});return j5(Q,{strictUnions:X?.strictUnions??!0,pipeStrategy:X?.pipeStrategy??"input"})}function M5(Q){let Y=m1(Q)?.method;if(!Y)throw Error("Schema is missing a method literal");let W=DQ(Y);if(typeof W!=="string")throw Error("Schema method literal must be a string");return W}function N5(Q,X){let Y=c0(Q,X);if(!Y.success)throw Y.error;return Y.data}var oM=60000;class o4{constructor(Q){if(this._options=Q,this._requestMessageId=0,this._requestHandlers=new Map,this._requestHandlerAbortControllers=new Map,this._notificationHandlers=new Map,this._responseHandlers=new Map,this._progressHandlers=new Map,this._timeoutInfo=new Map,this._pendingDebouncedNotifications=new Set,this._taskProgressTokens=new Map,this._requestResolvers=new Map,this.setNotificationHandler(PQ,(X)=>{this._oncancel(X)}),this.setNotificationHandler(EQ,(X)=>{this._onprogress(X)}),this.setRequestHandler(RQ,(X)=>({})),this._taskStore=Q?.taskStore,this._taskMessageQueue=Q?.taskMessageQueue,this._taskStore)this.setRequestHandler(SQ,async(X,Y)=>{let W=await this._taskStore.getTask(X.params.taskId,Y.sessionId);if(!W)throw new S(k.InvalidParams,"Failed to retrieve task: Task not found");return{...W}}),this.setRequestHandler(TQ,async(X,Y)=>{let W=async()=>{let $=X.params.taskId;if(this._taskMessageQueue){let G;while(G=await this._taskMessageQueue.dequeue($,Y.sessionId)){if(G.type==="response"||G.type==="error"){let H=G.message,B=H.id,z=this._requestResolvers.get(B);if(z)if(this._requestResolvers.delete(B),G.type==="response")z(H);else{let K=H,V=new S(K.error.code,K.error.message,K.error.data);z(V)}else{let K=G.type==="response"?"Response":"Error";this._onerror(Error(`${K} handler missing for request ${B}`))}continue}await this._transport?.send(G.message,{relatedRequestId:Y.requestId})}}let J=await this._taskStore.getTask($,Y.sessionId);if(!J)throw new S(k.InvalidParams,`Task not found: ${$}`);if(!w6(J.status))return await this._waitForTaskUpdate($,Y.signal),await W();if(w6(J.status)){let G=await this._taskStore.getTaskResult($,Y.sessionId);return this._clearTaskQueue($),{...G,_meta:{...G._meta,[U6]:{taskId:$}}}}return await W()};return await W()}),this.setRequestHandler(CQ,async(X,Y)=>{try{let{tasks:W,nextCursor:$}=await this._taskStore.listTasks(X.params?.cursor,Y.sessionId);return{tasks:W,nextCursor:$,_meta:{}}}catch(W){throw new S(k.InvalidParams,`Failed to list tasks: ${W instanceof Error?W.message:String(W)}`)}}),this.setRequestHandler(vQ,async(X,Y)=>{try{let W=await this._taskStore.getTask(X.params.taskId,Y.sessionId);if(!W)throw new S(k.InvalidParams,`Task not found: ${X.params.taskId}`);if(w6(W.status))throw new S(k.InvalidParams,`Cannot cancel task in terminal status: ${W.status}`);await this._taskStore.updateTaskStatus(X.params.taskId,"cancelled","Client cancelled task execution.",Y.sessionId),this._clearTaskQueue(X.params.taskId);let $=await this._taskStore.getTask(X.params.taskId,Y.sessionId);if(!$)throw new S(k.InvalidParams,`Task not found after cancellation: ${X.params.taskId}`);return{_meta:{},...$}}catch(W){if(W instanceof S)throw W;throw new S(k.InvalidRequest,`Failed to cancel task: ${W instanceof Error?W.message:String(W)}`)}})}async _oncancel(Q){if(!Q.params.requestId)return;this._requestHandlerAbortControllers.get(Q.params.requestId)?.abort(Q.params.reason)}_setupTimeout(Q,X,Y,W,$=!1){this._timeoutInfo.set(Q,{timeoutId:setTimeout(W,X),startTime:Date.now(),timeout:X,maxTotalTimeout:Y,resetTimeoutOnProgress:$,onTimeout:W})}_resetTimeout(Q){let X=this._timeoutInfo.get(Q);if(!X)return!1;let Y=Date.now()-X.startTime;if(X.maxTotalTimeout&&Y>=X.maxTotalTimeout)throw this._timeoutInfo.delete(Q),S.fromError(k.RequestTimeout,"Maximum total timeout exceeded",{maxTotalTimeout:X.maxTotalTimeout,totalElapsed:Y});return clearTimeout(X.timeoutId),X.timeoutId=setTimeout(X.onTimeout,X.timeout),!0}_cleanupTimeout(Q){let X=this._timeoutInfo.get(Q);if(X)clearTimeout(X.timeoutId),this._timeoutInfo.delete(Q)}async connect(Q){this._transport=Q;let X=this.transport?.onclose;this._transport.onclose=()=>{X?.(),this._onclose()};let Y=this.transport?.onerror;this._transport.onerror=($)=>{Y?.($),this._onerror($)};let W=this._transport?.onmessage;this._transport.onmessage=($,J)=>{if(W?.($,J),t6($)||J3($))this._onresponse($);else if(v4($))this._onrequest($,J);else if($3($))this._onnotification($);else this._onerror(Error(`Unknown message type: ${JSON.stringify($)}`))},await this._transport.start()}_onclose(){let Q=this._responseHandlers;this._responseHandlers=new Map,this._progressHandlers.clear(),this._taskProgressTokens.clear(),this._pendingDebouncedNotifications.clear();let X=S.fromError(k.ConnectionClosed,"Connection closed");this._transport=void 0,this.onclose?.();for(let Y of Q.values())Y(X)}_onerror(Q){this.onerror?.(Q)}_onnotification(Q){let X=this._notificationHandlers.get(Q.method)??this.fallbackNotificationHandler;if(X===void 0)return;Promise.resolve().then(()=>X(Q)).catch((Y)=>this._onerror(Error(`Uncaught error in notification handler: ${Y}`)))}_onrequest(Q,X){let Y=this._requestHandlers.get(Q.method)??this.fallbackRequestHandler,W=this._transport,$=Q.params?._meta?.[U6]?.taskId;if(Y===void 0){let z={jsonrpc:"2.0",id:Q.id,error:{code:k.MethodNotFound,message:"Method not found"}};if($&&this._taskMessageQueue)this._enqueueTaskMessage($,{type:"error",message:z,timestamp:Date.now()},W?.sessionId).catch((K)=>this._onerror(Error(`Failed to enqueue error response: ${K}`)));else W?.send(z).catch((K)=>this._onerror(Error(`Failed to send an error response: ${K}`)));return}let J=new AbortController;this._requestHandlerAbortControllers.set(Q.id,J);let G=X3(Q.params)?Q.params.task:void 0,H=this._taskStore?this.requestTaskStore(Q,W?.sessionId):void 0,B={signal:J.signal,sessionId:W?.sessionId,_meta:Q.params?._meta,sendNotification:async(z)=>{let K={relatedRequestId:Q.id};if($)K.relatedTask={taskId:$};await this.notification(z,K)},sendRequest:async(z,K,V)=>{let D={...V,relatedRequestId:Q.id};if($&&!D.relatedTask)D.relatedTask={taskId:$};let F=D.relatedTask?.taskId??$;if(F&&H)await H.updateTaskStatus(F,"input_required");return await this.request(z,K,D)},authInfo:X?.authInfo,requestId:Q.id,requestInfo:X?.requestInfo,taskId:$,taskStore:H,taskRequestedTtl:G?.ttl,closeSSEStream:X?.closeSSEStream,closeStandaloneSSEStream:X?.closeStandaloneSSEStream};Promise.resolve().then(()=>{if(G)this.assertTaskHandlerCapability(Q.method)}).then(()=>Y(Q,B)).then(async(z)=>{if(J.signal.aborted)return;let K={result:z,jsonrpc:"2.0",id:Q.id};if($&&this._taskMessageQueue)await this._enqueueTaskMessage($,{type:"response",message:K,timestamp:Date.now()},W?.sessionId);else await W?.send(K)},async(z)=>{if(J.signal.aborted)return;let K={jsonrpc:"2.0",id:Q.id,error:{code:Number.isSafeInteger(z.code)?z.code:k.InternalError,message:z.message??"Internal error",...z.data!==void 0&&{data:z.data}}};if($&&this._taskMessageQueue)await this._enqueueTaskMessage($,{type:"error",message:K,timestamp:Date.now()},W?.sessionId);else await W?.send(K)}).catch((z)=>this._onerror(Error(`Failed to send response: ${z}`))).finally(()=>{this._requestHandlerAbortControllers.delete(Q.id)})}_onprogress(Q){let{progressToken:X,...Y}=Q.params,W=Number(X),$=this._progressHandlers.get(W);if(!$){this._onerror(Error(`Received a progress notification for an unknown token: ${JSON.stringify(Q)}`));return}let J=this._responseHandlers.get(W),G=this._timeoutInfo.get(W);if(G&&J&&G.resetTimeoutOnProgress)try{this._resetTimeout(W)}catch(H){this._responseHandlers.delete(W),this._progressHandlers.delete(W),this._cleanupTimeout(W),J(H);return}$(Y)}_onresponse(Q){let X=Number(Q.id),Y=this._requestResolvers.get(X);if(Y){if(this._requestResolvers.delete(X),t6(Q))Y(Q);else{let J=new S(Q.error.code,Q.error.message,Q.error.data);Y(J)}return}let W=this._responseHandlers.get(X);if(W===void 0){this._onerror(Error(`Received a response for an unknown message ID: ${JSON.stringify(Q)}`));return}this._responseHandlers.delete(X),this._cleanupTimeout(X);let $=!1;if(t6(Q)&&Q.result&&typeof Q.result==="object"){let J=Q.result;if(J.task&&typeof J.task==="object"){let G=J.task;if(typeof G.taskId==="string")$=!0,this._taskProgressTokens.set(G.taskId,X)}}if(!$)this._progressHandlers.delete(X);if(t6(Q))W(Q);else{let J=S.fromError(Q.error.code,Q.error.message,Q.error.data);W(J)}}get transport(){return this._transport}async close(){await this._transport?.close()}async*requestStream(Q,X,Y){let{task:W}=Y??{};if(!W){try{yield{type:"result",result:await this.request(Q,X,Y)}}catch(J){yield{type:"error",error:J instanceof S?J:new S(k.InternalError,String(J))}}return}let $;try{let J=await this.request(Q,e1,Y);if(J.task)$=J.task.taskId,yield{type:"taskCreated",task:J.task};else throw new S(k.InternalError,"Task creation did not return a task");while(!0){let G=await this.getTask({taskId:$},Y);if(yield{type:"taskStatus",task:G},w6(G.status)){if(G.status==="completed")yield{type:"result",result:await this.getTaskResult({taskId:$},X,Y)};else if(G.status==="failed")yield{type:"error",error:new S(k.InternalError,`Task ${$} failed`)};else if(G.status==="cancelled")yield{type:"error",error:new S(k.InternalError,`Task ${$} was cancelled`)};return}if(G.status==="input_required"){yield{type:"result",result:await this.getTaskResult({taskId:$},X,Y)};return}let H=G.pollInterval??this._options?.defaultTaskPollInterval??1000;await new Promise((B)=>setTimeout(B,H)),Y?.signal?.throwIfAborted()}}catch(J){yield{type:"error",error:J instanceof S?J:new S(k.InternalError,String(J))}}}request(Q,X,Y){let{relatedRequestId:W,resumptionToken:$,onresumptiontoken:J,task:G,relatedTask:H}=Y??{};return new Promise((B,z)=>{let K=(O)=>{z(O)};if(!this._transport){K(Error("Not connected"));return}if(this._options?.enforceStrictCapabilities===!0)try{if(this.assertCapabilityForMethod(Q.method),G)this.assertTaskCapability(Q.method)}catch(O){K(O);return}Y?.signal?.throwIfAborted();let V=this._requestMessageId++,D={...Q,jsonrpc:"2.0",id:V};if(Y?.onprogress)this._progressHandlers.set(V,Y.onprogress),D.params={...Q.params,_meta:{...Q.params?._meta||{},progressToken:V}};if(G)D.params={...D.params,task:G};if(H)D.params={...D.params,_meta:{...D.params?._meta||{},[U6]:H}};let F=(O)=>{this._responseHandlers.delete(V),this._progressHandlers.delete(V),this._cleanupTimeout(V),this._transport?.send({jsonrpc:"2.0",method:"notifications/cancelled",params:{requestId:V,reason:String(O)}},{relatedRequestId:W,resumptionToken:$,onresumptiontoken:J}).catch((N)=>this._onerror(Error(`Failed to send cancellation: ${N}`)));let M=O instanceof S?O:new S(k.RequestTimeout,String(O));z(M)};this._responseHandlers.set(V,(O)=>{if(Y?.signal?.aborted)return;if(O instanceof Error)return z(O);try{let M=c0(X,O.result);if(!M.success)z(M.error);else B(M.data)}catch(M){z(M)}}),Y?.signal?.addEventListener("abort",()=>{F(Y?.signal?.reason)});let q=Y?.timeout??oM,A=()=>F(S.fromError(k.RequestTimeout,"Request timed out",{timeout:q}));this._setupTimeout(V,q,Y?.maxTotalTimeout,A,Y?.resetTimeoutOnProgress??!1);let L=H?.taskId;if(L){let O=(M)=>{let N=this._responseHandlers.get(V);if(N)N(M);else this._onerror(Error(`Response handler missing for side-channeled request ${V}`))};this._requestResolvers.set(V,O),this._enqueueTaskMessage(L,{type:"request",message:D,timestamp:Date.now()}).catch((M)=>{this._cleanupTimeout(V),z(M)})}else this._transport.send(D,{relatedRequestId:W,resumptionToken:$,onresumptiontoken:J}).catch((O)=>{this._cleanupTimeout(V),z(O)})})}async getTask(Q,X){return this.request({method:"tasks/get",params:Q},IQ,X)}async getTaskResult(Q,X,Y){return this.request({method:"tasks/result",params:Q},X,Y)}async listTasks(Q,X){return this.request({method:"tasks/list",params:Q},kQ,X)}async cancelTask(Q,X){return this.request({method:"tasks/cancel",params:Q},B3,X)}async notification(Q,X){if(!this._transport)throw Error("Not connected");this.assertNotificationCapability(Q.method);let Y=X?.relatedTask?.taskId;if(Y){let G={...Q,jsonrpc:"2.0",params:{...Q.params,_meta:{...Q.params?._meta||{},[U6]:X.relatedTask}}};await this._enqueueTaskMessage(Y,{type:"notification",message:G,timestamp:Date.now()});return}if((this._options?.debouncedNotificationMethods??[]).includes(Q.method)&&!Q.params&&!X?.relatedRequestId&&!X?.relatedTask){if(this._pendingDebouncedNotifications.has(Q.method))return;this._pendingDebouncedNotifications.add(Q.method),Promise.resolve().then(()=>{if(this._pendingDebouncedNotifications.delete(Q.method),!this._transport)return;let G={...Q,jsonrpc:"2.0"};if(X?.relatedTask)G={...G,params:{...G.params,_meta:{...G.params?._meta||{},[U6]:X.relatedTask}}};this._transport?.send(G,X).catch((H)=>this._onerror(H))});return}let J={...Q,jsonrpc:"2.0"};if(X?.relatedTask)J={...J,params:{...J.params,_meta:{...J.params?._meta||{},[U6]:X.relatedTask}}};await this._transport.send(J,X)}setRequestHandler(Q,X){let Y=M5(Q);this.assertRequestHandlerCapability(Y),this._requestHandlers.set(Y,(W,$)=>{let J=N5(Q,W);return Promise.resolve(X(J,$))})}removeRequestHandler(Q){this._requestHandlers.delete(Q)}assertCanSetRequestHandler(Q){if(this._requestHandlers.has(Q))throw Error(`A request handler for ${Q} already exists, which would be overridden`)}setNotificationHandler(Q,X){let Y=M5(Q);this._notificationHandlers.set(Y,(W)=>{let $=N5(Q,W);return Promise.resolve(X($))})}removeNotificationHandler(Q){this._notificationHandlers.delete(Q)}_cleanupTaskProgressHandler(Q){let X=this._taskProgressTokens.get(Q);if(X!==void 0)this._progressHandlers.delete(X),this._taskProgressTokens.delete(Q)}async _enqueueTaskMessage(Q,X,Y){if(!this._taskStore||!this._taskMessageQueue)throw Error("Cannot enqueue task message: taskStore and taskMessageQueue are not configured");let W=this._options?.maxTaskQueueSize;await this._taskMessageQueue.enqueue(Q,X,Y,W)}async _clearTaskQueue(Q,X){if(this._taskMessageQueue){let Y=await this._taskMessageQueue.dequeueAll(Q,X);for(let W of Y)if(W.type==="request"&&v4(W.message)){let $=W.message.id,J=this._requestResolvers.get($);if(J)J(new S(k.InternalError,"Task cancelled or completed")),this._requestResolvers.delete($);else this._onerror(Error(`Resolver missing for request ${$} during task ${Q} cleanup`))}}}async _waitForTaskUpdate(Q,X){let Y=this._options?.defaultTaskPollInterval??1000;try{let W=await this._taskStore?.getTask(Q);if(W?.pollInterval)Y=W.pollInterval}catch{}return new Promise((W,$)=>{if(X.aborted){$(new S(k.InvalidRequest,"Request cancelled"));return}let J=setTimeout(W,Y);X.addEventListener("abort",()=>{clearTimeout(J),$(new S(k.InvalidRequest,"Request cancelled"))},{once:!0})})}requestTaskStore(Q,X){let Y=this._taskStore;if(!Y)throw Error("No task store configured");return{createTask:async(W)=>{if(!Q)throw Error("No request provided");return await Y.createTask(W,Q.id,{method:Q.method,params:Q.params},X)},getTask:async(W)=>{let $=await Y.getTask(W,X);if(!$)throw new S(k.InvalidParams,"Failed to retrieve task: Task not found");return $},storeTaskResult:async(W,$,J)=>{await Y.storeTaskResult(W,$,J,X);let G=await Y.getTask(W,X);if(G){let H=f4.parse({method:"notifications/tasks/status",params:G});if(await this.notification(H),w6(G.status))this._cleanupTaskProgressHandler(W)}},getTaskResult:(W)=>{return Y.getTaskResult(W,X)},updateTaskStatus:async(W,$,J)=>{let G=await Y.getTask(W,X);if(!G)throw new S(k.InvalidParams,`Task "${W}" not found - it may have been cleaned up`);if(w6(G.status))throw new S(k.InvalidParams,`Cannot update task "${W}" from terminal status "${G.status}" to "${$}". Terminal states (completed, failed, cancelled) cannot transition to other states.`);await Y.updateTaskStatus(W,$,J,X);let H=await Y.getTask(W,X);if(H){let B=f4.parse({method:"notifications/tasks/status",params:H});if(await this.notification(B),w6(H.status))this._cleanupTaskProgressHandler(W)}},listTasks:(W)=>{return Y.listTasks(W,X)}}}}function t3(Q){return Q!==null&&typeof Q==="object"&&!Array.isArray(Q)}function dQ(Q,X){let Y={...Q};for(let W in X){let $=W,J=X[$];if(J===void 0)continue;let G=Y[$];if(t3(G)&&t3(J))Y[$]={...G,...J};else Y[$]=J}return Y}var IL=F4(KV(),1),TL=F4(SL(),1);function Ay(){let Q=new IL.default({strict:!1,validateFormats:!0,validateSchema:!1,allErrors:!0});return TL.default(Q),Q}class u8{constructor(Q){this._ajv=Q??Ay()}getValidator(Q){let X="$id"in Q&&typeof Q.$id==="string"?this._ajv.getSchema(Q.$id)??this._ajv.compile(Q):this._ajv.compile(Q);return(Y)=>{if(X(Y))return{valid:!0,data:Y,errorMessage:void 0};else return{valid:!1,data:void 0,errorMessage:this._ajv.errorsText(X.errors)}}}}class VJ{constructor(Q){this._server=Q}requestStream(Q,X,Y){return this._server.requestStream(Q,X,Y)}async getTask(Q,X){return this._server.getTask({taskId:Q},X)}async getTaskResult(Q,X,Y){return this._server.getTaskResult({taskId:Q},X,Y)}async listTasks(Q,X){return this._server.listTasks(Q?{cursor:Q}:void 0,X)}async cancelTask(Q,X){return this._server.cancelTask({taskId:Q},X)}}function zY(Q,X,Y){if(!Q)throw Error(`${Y} does not support task creation (required for ${X})`);switch(X){case"tools/call":if(!Q.tools?.call)throw Error(`${Y} does not support task creation for tools/call (required for ${X})`);break;default:break}}function KY(Q,X,Y){if(!Q)throw Error(`${Y} does not support task creation (required for ${X})`);switch(X){case"sampling/createMessage":if(!Q.sampling?.createMessage)throw Error(`${Y} does not support task creation for sampling/createMessage (required for ${X})`);break;case"elicitation/create":if(!Q.elicitation?.create)throw Error(`${Y} does not support task creation for elicitation/create (required for ${X})`);break;default:break}}class qJ extends o4{constructor(Q,X){super(X);if(this._serverInfo=Q,this._loggingLevels=new Map,this.LOG_LEVEL_SEVERITY=new Map(c4.options.map((Y,W)=>[Y,W])),this.isMessageIgnored=(Y,W)=>{let $=this._loggingLevels.get(W);return $?this.LOG_LEVEL_SEVERITY.get(Y)<this.LOG_LEVEL_SEVERITY.get($):!1},this._capabilities=X?.capabilities??{},this._instructions=X?.instructions,this._jsonSchemaValidator=X?.jsonSchemaValidator??new u8,this.setRequestHandler(r7,(Y)=>this._oninitialize(Y)),this.setNotificationHandler(ZQ,()=>this.oninitialized?.()),this._capabilities.logging)this.setRequestHandler(K5,async(Y,W)=>{let $=W.sessionId||W.requestInfo?.headers["mcp-session-id"]||void 0,{level:J}=Y.params,G=c4.safeParse(J);if(G.success)this._loggingLevels.set($,G.data);return{}})}get experimental(){if(!this._experimental)this._experimental={tasks:new VJ(this)};return this._experimental}registerCapabilities(Q){if(this.transport)throw Error("Cannot register capabilities after connecting to transport");this._capabilities=dQ(this._capabilities,Q)}setRequestHandler(Q,X){let W=m1(Q)?.method;if(!W)throw Error("Schema is missing a method literal");let $;if(s0(W)){let G=W;$=G._zod?.def?.value??G.value}else{let G=W;$=G._def?.value??G.value}if(typeof $!=="string")throw Error("Schema method literal must be a string");if($==="tools/call"){let G=async(H,B)=>{let z=c0(x9,H);if(!z.success){let F=z.error instanceof Error?z.error.message:String(z.error);throw new S(k.InvalidParams,`Invalid tools/call request: ${F}`)}let{params:K}=z.data,V=await Promise.resolve(X(H,B));if(K.task){let F=c0(e1,V);if(!F.success){let q=F.error instanceof Error?F.error.message:String(F.error);throw new S(k.InvalidParams,`Invalid task creation result: ${q}`)}return F.data}let D=c0(j6,V);if(!D.success){let F=D.error instanceof Error?D.error.message:String(D.error);throw new S(k.InvalidParams,`Invalid tools/call result: ${F}`)}return D.data};return super.setRequestHandler(Q,G)}return super.setRequestHandler(Q,X)}assertCapabilityForMethod(Q){switch(Q){case"sampling/createMessage":if(!this._clientCapabilities?.sampling)throw Error(`Client does not support sampling (required for ${Q})`);break;case"elicitation/create":if(!this._clientCapabilities?.elicitation)throw Error(`Client does not support elicitation (required for ${Q})`);break;case"roots/list":if(!this._clientCapabilities?.roots)throw Error(`Client does not support listing roots (required for ${Q})`);break;case"ping":break}}assertNotificationCapability(Q){switch(Q){case"notifications/message":if(!this._capabilities.logging)throw Error(`Server does not support logging (required for ${Q})`);break;case"notifications/resources/updated":case"notifications/resources/list_changed":if(!this._capabilities.resources)throw Error(`Server does not support notifying about resources (required for ${Q})`);break;case"notifications/tools/list_changed":if(!this._capabilities.tools)throw Error(`Server does not support notifying of tool list changes (required for ${Q})`);break;case"notifications/prompts/list_changed":if(!this._capabilities.prompts)throw Error(`Server does not support notifying of prompt list changes (required for ${Q})`);break;case"notifications/elicitation/complete":if(!this._clientCapabilities?.elicitation?.url)throw Error(`Client does not support URL elicitation (required for ${Q})`);break;case"notifications/cancelled":break;case"notifications/progress":break}}assertRequestHandlerCapability(Q){if(!this._capabilities)return;switch(Q){case"completion/complete":if(!this._capabilities.completions)throw Error(`Server does not support completions (required for ${Q})`);break;case"logging/setLevel":if(!this._capabilities.logging)throw Error(`Server does not support logging (required for ${Q})`);break;case"prompts/get":case"prompts/list":if(!this._capabilities.prompts)throw Error(`Server does not support prompts (required for ${Q})`);break;case"resources/list":case"resources/templates/list":case"resources/read":if(!this._capabilities.resources)throw Error(`Server does not support resources (required for ${Q})`);break;case"tools/call":case"tools/list":if(!this._capabilities.tools)throw Error(`Server does not support tools (required for ${Q})`);break;case"tasks/get":case"tasks/list":case"tasks/result":case"tasks/cancel":if(!this._capabilities.tasks)throw Error(`Server does not support tasks capability (required for ${Q})`);break;case"ping":case"initialize":break}}assertTaskCapability(Q){KY(this._clientCapabilities?.tasks?.requests,Q,"Client")}assertTaskHandlerCapability(Q){if(!this._capabilities)return;zY(this._capabilities.tasks?.requests,Q,"Server")}async _oninitialize(Q){let X=Q.params.protocolVersion;return this._clientCapabilities=Q.params.capabilities,this._clientVersion=Q.params.clientInfo,{protocolVersion:MQ.includes(X)?X:O6,capabilities:this.getCapabilities(),serverInfo:this._serverInfo,...this._instructions&&{instructions:this._instructions}}}getClientCapabilities(){return this._clientCapabilities}getClientVersion(){return this._clientVersion}getCapabilities(){return this._capabilities}async ping(){return this.request({method:"ping"},s1)}async createMessage(Q,X){if(Q.tools||Q.toolChoice){if(!this._clientCapabilities?.sampling?.tools)throw Error("Client does not support sampling tools capability.")}if(Q.messages.length>0){let Y=Q.messages[Q.messages.length-1],W=Array.isArray(Y.content)?Y.content:[Y.content],$=W.some((B)=>B.type==="tool_result"),J=Q.messages.length>1?Q.messages[Q.messages.length-2]:void 0,G=J?Array.isArray(J.content)?J.content:[J.content]:[],H=G.some((B)=>B.type==="tool_use");if($){if(W.some((B)=>B.type!=="tool_result"))throw Error("The last message must contain only tool_result content if any is present");if(!H)throw Error("tool_result blocks are not matching any tool_use from the previous message")}if(H){let B=new Set(G.filter((K)=>K.type==="tool_use").map((K)=>K.id)),z=new Set(W.filter((K)=>K.type==="tool_result").map((K)=>K.toolUseId));if(B.size!==z.size||![...B].every((K)=>z.has(K)))throw Error("ids of tool_result blocks and tool_use blocks from previous message do not match")}}if(Q.tools)return this.request({method:"sampling/createMessage",params:Q},V5,X);return this.request({method:"sampling/createMessage",params:Q},d4,X)}async elicitInput(Q,X){switch(Q.mode??"form"){case"url":{if(!this._clientCapabilities?.elicitation?.url)throw Error("Client does not support url elicitation.");let W=Q;return this.request({method:"elicitation/create",params:W},y9,X)}case"form":{if(!this._clientCapabilities?.elicitation?.form)throw Error("Client does not support form elicitation.");let W=Q.mode==="form"?Q:{...Q,mode:"form"},$=await this.request({method:"elicitation/create",params:W},y9,X);if($.action==="accept"&&$.content&&W.requestedSchema)try{let G=this._jsonSchemaValidator.getValidator(W.requestedSchema)($.content);if(!G.valid)throw new S(k.InvalidParams,`Elicitation response content does not match requested schema: ${G.errorMessage}`)}catch(J){if(J instanceof S)throw J;throw new S(k.InternalError,`Error validating elicitation response: ${J instanceof Error?J.message:String(J)}`)}return $}}}createElicitationCompletionNotifier(Q,X){if(!this._clientCapabilities?.elicitation?.url)throw Error("Client does not support URL elicitation (required for notifications/elicitation/complete)");return()=>this.notification({method:"notifications/elicitation/complete",params:{elicitationId:Q}},X)}async listRoots(Q,X){return this.request({method:"roots/list",params:Q},A5,X)}async sendLoggingMessage(Q,X){if(this._capabilities.logging){if(!this.isMessageIgnored(Q.level,X))return this.notification({method:"notifications/message",params:Q})}}async sendResourceUpdated(Q){return this.notification({method:"notifications/resources/updated",params:Q})}async sendResourceListChanged(){return this.notification({method:"notifications/resources/list_changed"})}async sendToolListChanged(){return this.notification({method:"notifications/tools/list_changed"})}async sendPromptListChanged(){return this.notification({method:"notifications/prompts/list_changed"})}}var kL=Symbol.for("mcp.completable");function AJ(Q){return!!Q&&typeof Q==="object"&&kL in Q}function vL(Q){return Q[kL]?.complete}var CL;(function(Q){Q.Completable="McpCompletable"})(CL||(CL={}));var Dy=/^[A-Za-z0-9._-]{1,128}$/;function Ly(Q){let X=[];if(Q.length===0)return{isValid:!1,warnings:["Tool name cannot be empty"]};if(Q.length>128)return{isValid:!1,warnings:[`Tool name exceeds maximum length of 128 characters (current: ${Q.length})`]};if(Q.includes(" "))X.push("Tool name contains spaces, which may cause parsing issues");if(Q.includes(","))X.push("Tool name contains commas, which may cause parsing issues");if(Q.startsWith("-")||Q.endsWith("-"))X.push("Tool name starts or ends with a dash, which may cause parsing issues in some contexts");if(Q.startsWith(".")||Q.endsWith("."))X.push("Tool name starts or ends with a dot, which may cause parsing issues in some contexts");if(!Dy.test(Q)){let Y=Q.split("").filter((W)=>!/[A-Za-z0-9._-]/.test(W)).filter((W,$,J)=>J.indexOf(W)===$);return X.push(`Tool name contains invalid characters: ${Y.map((W)=>`"${W}"`).join(", ")}`,"Allowed characters are: A-Z, a-z, 0-9, underscore (_), dash (-), and dot (.)"),{isValid:!1,warnings:X}}return{isValid:!0,warnings:X}}function Oy(Q,X){if(X.length>0){console.warn(`Tool name validation warning for "${Q}":`);for(let Y of X)console.warn(` - ${Y}`);console.warn("Tool registration will proceed, but this may cause compatibility issues."),console.warn("Consider updating the tool name to conform to the MCP tool naming standard."),console.warn("See SEP: Specify Format for Tool Names (https://github.com/modelcontextprotocol/modelcontextprotocol/issues/986) for more details.")}}function DJ(Q){let X=Ly(Q);return Oy(Q,X.warnings),X.isValid}class LJ{constructor(Q){this._mcpServer=Q}registerToolTask(Q,X,Y){let W={taskSupport:"required",...X.execution};if(W.taskSupport==="forbidden")throw Error(`Cannot register task-based tool '${Q}' with taskSupport 'forbidden'. Use registerTool() instead.`);return this._mcpServer._createRegisteredTool(Q,X.title,X.description,X.inputSchema,X.outputSchema,X.annotations,W,X._meta,Y)}}class UJ{constructor(Q,X){this._registeredResources={},this._registeredResourceTemplates={},this._registeredTools={},this._registeredPrompts={},this._toolHandlersInitialized=!1,this._completionHandlerInitialized=!1,this._resourceHandlersInitialized=!1,this._promptHandlersInitialized=!1,this.server=new qJ(Q,X)}get experimental(){if(!this._experimental)this._experimental={tasks:new LJ(this)};return this._experimental}async connect(Q){return await this.server.connect(Q)}async close(){await this.server.close()}setToolRequestHandlers(){if(this._toolHandlersInitialized)return;this.server.assertCanSetRequestHandler(_6(hQ)),this.server.assertCanSetRequestHandler(_6(x9)),this.server.registerCapabilities({tools:{listChanged:!0}}),this.server.setRequestHandler(hQ,()=>({tools:Object.entries(this._registeredTools).filter(([,Q])=>Q.enabled).map(([Q,X])=>{let Y={name:Q,title:X.title,description:X.description,inputSchema:(()=>{let W=C9(X.inputSchema);return W?w5(W,{strictUnions:!0,pipeStrategy:"input"}):Uy})(),annotations:X.annotations,execution:X.execution,_meta:X._meta};if(X.outputSchema){let W=C9(X.outputSchema);if(W)Y.outputSchema=w5(W,{strictUnions:!0,pipeStrategy:"output"})}return Y})})),this.server.setRequestHandler(x9,async(Q,X)=>{try{let Y=this._registeredTools[Q.params.name];if(!Y)throw new S(k.InvalidParams,`Tool ${Q.params.name} not found`);if(!Y.enabled)throw new S(k.InvalidParams,`Tool ${Q.params.name} disabled`);let W=!!Q.params.task,$=Y.execution?.taskSupport,J="createTask"in Y.handler;if(($==="required"||$==="optional")&&!J)throw new S(k.InternalError,`Tool ${Q.params.name} has taskSupport '${$}' but was not registered with registerToolTask`);if($==="required"&&!W)throw new S(k.MethodNotFound,`Tool ${Q.params.name} requires task augmentation (taskSupport: 'required')`);if($==="optional"&&!W&&J)return await this.handleAutomaticTaskPolling(Y,Q,X);let G=await this.validateToolInput(Y,Q.params.arguments,Q.params.name),H=await this.executeToolHandler(Y,G,X);if(W)return H;return await this.validateToolOutput(Y,H,Q.params.name),H}catch(Y){if(Y instanceof S){if(Y.code===k.UrlElicitationRequired)throw Y}return this.createToolError(Y instanceof Error?Y.message:String(Y))}}),this._toolHandlersInitialized=!0}createToolError(Q){return{content:[{type:"text",text:Q}],isError:!0}}async validateToolInput(Q,X,Y){if(!Q.inputSchema)return;let $=C9(Q.inputSchema)??Q.inputSchema,J=await qQ($,X);if(!J.success){let G="error"in J?J.error:"Unknown error",H=AQ(G);throw new S(k.InvalidParams,`Input validation error: Invalid arguments for tool ${Y}: ${H}`)}return J.data}async validateToolOutput(Q,X,Y){if(!Q.outputSchema)return;if(!("content"in X))return;if(X.isError)return;if(!X.structuredContent)throw new S(k.InvalidParams,`Output validation error: Tool ${Y} has an output schema but no structured content was provided`);let W=C9(Q.outputSchema),$=await qQ(W,X.structuredContent);if(!$.success){let J="error"in $?$.error:"Unknown error",G=AQ(J);throw new S(k.InvalidParams,`Output validation error: Invalid structured content for tool ${Y}: ${G}`)}}async executeToolHandler(Q,X,Y){let W=Q.handler;if("createTask"in W){if(!Y.taskStore)throw Error("No task store provided.");let J={...Y,taskStore:Y.taskStore};if(Q.inputSchema)return await Promise.resolve(W.createTask(X,J));else return await Promise.resolve(W.createTask(J))}if(Q.inputSchema)return await Promise.resolve(W(X,Y));else return await Promise.resolve(W(Y))}async handleAutomaticTaskPolling(Q,X,Y){if(!Y.taskStore)throw Error("No task store provided for task-capable tool.");let W=await this.validateToolInput(Q,X.params.arguments,X.params.name),$=Q.handler,J={...Y,taskStore:Y.taskStore},G=W?await Promise.resolve($.createTask(W,J)):await Promise.resolve($.createTask(J)),H=G.task.taskId,B=G.task,z=B.pollInterval??5000;while(B.status!=="completed"&&B.status!=="failed"&&B.status!=="cancelled"){await new Promise((V)=>setTimeout(V,z));let K=await Y.taskStore.getTask(H);if(!K)throw new S(k.InternalError,`Task ${H} not found during polling`);B=K}return await Y.taskStore.getTaskResult(H)}setCompletionRequestHandler(){if(this._completionHandlerInitialized)return;this.server.assertCanSetRequestHandler(_6(uQ)),this.server.registerCapabilities({completions:{}}),this.server.setRequestHandler(uQ,async(Q)=>{switch(Q.params.ref.type){case"ref/prompt":return D3(Q),this.handlePromptCompletion(Q,Q.params.ref);case"ref/resource":return L3(Q),this.handleResourceCompletion(Q,Q.params.ref);default:throw new S(k.InvalidParams,`Invalid completion reference: ${Q.params.ref}`)}}),this._completionHandlerInitialized=!0}async handlePromptCompletion(Q,X){let Y=this._registeredPrompts[X.name];if(!Y)throw new S(k.InvalidParams,`Prompt ${X.name} not found`);if(!Y.enabled)throw new S(k.InvalidParams,`Prompt ${X.name} disabled`);if(!Y.argsSchema)return l8;let $=m1(Y.argsSchema)?.[Q.params.argument.name];if(!AJ($))return l8;let J=vL($);if(!J)return l8;let G=await J(Q.params.argument.value,Q.params.context);return xL(G)}async handleResourceCompletion(Q,X){let Y=Object.values(this._registeredResourceTemplates).find((J)=>J.resourceTemplate.uriTemplate.toString()===X.uri);if(!Y){if(this._registeredResources[X.uri])return l8;throw new S(k.InvalidParams,`Resource template ${Q.params.ref.uri} not found`)}let W=Y.resourceTemplate.completeCallback(Q.params.argument.name);if(!W)return l8;let $=await W(Q.params.argument.value,Q.params.context);return xL($)}setResourceRequestHandlers(){if(this._resourceHandlersInitialized)return;this.server.assertCanSetRequestHandler(_6(_Q)),this.server.assertCanSetRequestHandler(_6(xQ)),this.server.assertCanSetRequestHandler(_6(yQ)),this.server.registerCapabilities({resources:{listChanged:!0}}),this.server.setRequestHandler(_Q,async(Q,X)=>{let Y=Object.entries(this._registeredResources).filter(([$,J])=>J.enabled).map(([$,J])=>({uri:$,name:J.name,...J.metadata})),W=[];for(let $ of Object.values(this._registeredResourceTemplates)){if(!$.resourceTemplate.listCallback)continue;let J=await $.resourceTemplate.listCallback(X);for(let G of J.resources)W.push({...$.metadata,...G})}return{resources:[...Y,...W]}}),this.server.setRequestHandler(xQ,async()=>{return{resourceTemplates:Object.entries(this._registeredResourceTemplates).map(([X,Y])=>({name:X,uriTemplate:Y.resourceTemplate.uriTemplate.toString(),...Y.metadata}))}}),this.server.setRequestHandler(yQ,async(Q,X)=>{let Y=new URL(Q.params.uri),W=this._registeredResources[Y.toString()];if(W){if(!W.enabled)throw new S(k.InvalidParams,`Resource ${Y} disabled`);return W.readCallback(Y,X)}for(let $ of Object.values(this._registeredResourceTemplates)){let J=$.resourceTemplate.uriTemplate.match(Y.toString());if(J)return $.readCallback(Y,J,X)}throw new S(k.InvalidParams,`Resource ${Y} not found`)}),this._resourceHandlersInitialized=!0}setPromptRequestHandlers(){if(this._promptHandlersInitialized)return;this.server.assertCanSetRequestHandler(_6(gQ)),this.server.assertCanSetRequestHandler(_6(fQ)),this.server.registerCapabilities({prompts:{listChanged:!0}}),this.server.setRequestHandler(gQ,()=>({prompts:Object.entries(this._registeredPrompts).filter(([,Q])=>Q.enabled).map(([Q,X])=>{return{name:Q,title:X.title,description:X.description,arguments:X.argsSchema?wy(X.argsSchema):void 0}})})),this.server.setRequestHandler(fQ,async(Q,X)=>{let Y=this._registeredPrompts[Q.params.name];if(!Y)throw new S(k.InvalidParams,`Prompt ${Q.params.name} not found`);if(!Y.enabled)throw new S(k.InvalidParams,`Prompt ${Q.params.name} disabled`);if(Y.argsSchema){let W=C9(Y.argsSchema),$=await qQ(W,Q.params.arguments);if(!$.success){let H="error"in $?$.error:"Unknown error",B=AQ(H);throw new S(k.InvalidParams,`Invalid arguments for prompt ${Q.params.name}: ${B}`)}let J=$.data,G=Y.callback;return await Promise.resolve(G(J,X))}else{let W=Y.callback;return await Promise.resolve(W(X))}}),this._promptHandlersInitialized=!0}resource(Q,X,...Y){let W;if(typeof Y[0]==="object")W=Y.shift();let $=Y[0];if(typeof X==="string"){if(this._registeredResources[X])throw Error(`Resource ${X} is already registered`);let J=this._createRegisteredResource(Q,void 0,X,W,$);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),J}else{if(this._registeredResourceTemplates[Q])throw Error(`Resource template ${Q} is already registered`);let J=this._createRegisteredResourceTemplate(Q,void 0,X,W,$);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),J}}registerResource(Q,X,Y,W){if(typeof X==="string"){if(this._registeredResources[X])throw Error(`Resource ${X} is already registered`);let $=this._createRegisteredResource(Q,Y.title,X,Y,W);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),$}else{if(this._registeredResourceTemplates[Q])throw Error(`Resource template ${Q} is already registered`);let $=this._createRegisteredResourceTemplate(Q,Y.title,X,Y,W);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),$}}_createRegisteredResource(Q,X,Y,W,$){let J={name:Q,title:X,metadata:W,readCallback:$,enabled:!0,disable:()=>J.update({enabled:!1}),enable:()=>J.update({enabled:!0}),remove:()=>J.update({uri:null}),update:(G)=>{if(typeof G.uri<"u"&&G.uri!==Y){if(delete this._registeredResources[Y],G.uri)this._registeredResources[G.uri]=J}if(typeof G.name<"u")J.name=G.name;if(typeof G.title<"u")J.title=G.title;if(typeof G.metadata<"u")J.metadata=G.metadata;if(typeof G.callback<"u")J.readCallback=G.callback;if(typeof G.enabled<"u")J.enabled=G.enabled;this.sendResourceListChanged()}};return this._registeredResources[Y]=J,J}_createRegisteredResourceTemplate(Q,X,Y,W,$){let J={resourceTemplate:Y,title:X,metadata:W,readCallback:$,enabled:!0,disable:()=>J.update({enabled:!1}),enable:()=>J.update({enabled:!0}),remove:()=>J.update({name:null}),update:(B)=>{if(typeof B.name<"u"&&B.name!==Q){if(delete this._registeredResourceTemplates[Q],B.name)this._registeredResourceTemplates[B.name]=J}if(typeof B.title<"u")J.title=B.title;if(typeof B.template<"u")J.resourceTemplate=B.template;if(typeof B.metadata<"u")J.metadata=B.metadata;if(typeof B.callback<"u")J.readCallback=B.callback;if(typeof B.enabled<"u")J.enabled=B.enabled;this.sendResourceListChanged()}};this._registeredResourceTemplates[Q]=J;let G=Y.uriTemplate.variableNames;if(Array.isArray(G)&&G.some((B)=>!!Y.completeCallback(B)))this.setCompletionRequestHandler();return J}_createRegisteredPrompt(Q,X,Y,W,$){let J={title:X,description:Y,argsSchema:W===void 0?void 0:r6(W),callback:$,enabled:!0,disable:()=>J.update({enabled:!1}),enable:()=>J.update({enabled:!0}),remove:()=>J.update({name:null}),update:(G)=>{if(typeof G.name<"u"&&G.name!==Q){if(delete this._registeredPrompts[Q],G.name)this._registeredPrompts[G.name]=J}if(typeof G.title<"u")J.title=G.title;if(typeof G.description<"u")J.description=G.description;if(typeof G.argsSchema<"u")J.argsSchema=r6(G.argsSchema);if(typeof G.callback<"u")J.callback=G.callback;if(typeof G.enabled<"u")J.enabled=G.enabled;this.sendPromptListChanged()}};if(this._registeredPrompts[Q]=J,W){if(Object.values(W).some((H)=>{let B=H instanceof B1?H._def?.innerType:H;return AJ(B)}))this.setCompletionRequestHandler()}return J}_createRegisteredTool(Q,X,Y,W,$,J,G,H,B){DJ(Q);let z={title:X,description:Y,inputSchema:_L(W),outputSchema:_L($),annotations:J,execution:G,_meta:H,handler:B,enabled:!0,disable:()=>z.update({enabled:!1}),enable:()=>z.update({enabled:!0}),remove:()=>z.update({name:null}),update:(K)=>{if(typeof K.name<"u"&&K.name!==Q){if(typeof K.name==="string")DJ(K.name);if(delete this._registeredTools[Q],K.name)this._registeredTools[K.name]=z}if(typeof K.title<"u")z.title=K.title;if(typeof K.description<"u")z.description=K.description;if(typeof K.paramsSchema<"u")z.inputSchema=r6(K.paramsSchema);if(typeof K.outputSchema<"u")z.outputSchema=r6(K.outputSchema);if(typeof K.callback<"u")z.handler=K.callback;if(typeof K.annotations<"u")z.annotations=K.annotations;if(typeof K._meta<"u")z._meta=K._meta;if(typeof K.enabled<"u")z.enabled=K.enabled;this.sendToolListChanged()}};return this._registeredTools[Q]=z,this.setToolRequestHandlers(),this.sendToolListChanged(),z}tool(Q,...X){if(this._registeredTools[Q])throw Error(`Tool ${Q} is already registered`);let Y,W,$,J;if(typeof X[0]==="string")Y=X.shift();if(X.length>1){let H=X[0];if(OJ(H)){if(W=X.shift(),X.length>1&&typeof X[0]==="object"&&X[0]!==null&&!OJ(X[0]))J=X.shift()}else if(typeof H==="object"&&H!==null)J=X.shift()}let G=X[0];return this._createRegisteredTool(Q,void 0,Y,W,$,J,{taskSupport:"forbidden"},void 0,G)}registerTool(Q,X,Y){if(this._registeredTools[Q])throw Error(`Tool ${Q} is already registered`);let{title:W,description:$,inputSchema:J,outputSchema:G,annotations:H,_meta:B}=X;return this._createRegisteredTool(Q,W,$,J,G,H,{taskSupport:"forbidden"},B,Y)}prompt(Q,...X){if(this._registeredPrompts[Q])throw Error(`Prompt ${Q} is already registered`);let Y;if(typeof X[0]==="string")Y=X.shift();let W;if(X.length>1)W=X.shift();let $=X[0],J=this._createRegisteredPrompt(Q,void 0,Y,W,$);return this.setPromptRequestHandlers(),this.sendPromptListChanged(),J}registerPrompt(Q,X,Y){if(this._registeredPrompts[Q])throw Error(`Prompt ${Q} is already registered`);let{title:W,description:$,argsSchema:J}=X,G=this._createRegisteredPrompt(Q,W,$,J,Y);return this.setPromptRequestHandlers(),this.sendPromptListChanged(),G}isConnected(){return this.server.transport!==void 0}async sendLoggingMessage(Q,X){return this.server.sendLoggingMessage(Q,X)}sendResourceListChanged(){if(this.isConnected())this.server.sendResourceListChanged()}sendToolListChanged(){if(this.isConnected())this.server.sendToolListChanged()}sendPromptListChanged(){if(this.isConnected())this.server.sendPromptListChanged()}}var Uy={type:"object",properties:{}};function yL(Q){return Q!==null&&typeof Q==="object"&&"parse"in Q&&typeof Q.parse==="function"&&"safeParse"in Q&&typeof Q.safeParse==="function"}function jy(Q){return"_def"in Q||"_zod"in Q||yL(Q)}function OJ(Q){if(typeof Q!=="object"||Q===null)return!1;if(jy(Q))return!1;if(Object.keys(Q).length===0)return!0;return Object.values(Q).some(yL)}function _L(Q){if(!Q)return;if(OJ(Q))return r6(Q);return Q}function wy(Q){let X=m1(Q);if(!X)return[];return Object.entries(X).map(([Y,W])=>{let $=PH(W),J=ZH(W);return{name:Y,description:$,required:!J}})}function _6(Q){let Y=m1(Q)?.method;if(!Y)throw Error("Schema is missing a method literal");let W=DQ(Y);if(typeof W==="string")return W;throw Error("Schema method literal must be a string")}function xL(Q){return{completion:{values:Q.slice(0,100),total:Q.length,hasMore:Q.length>100}}}var l8={completion:{values:[],hasMore:!1}};import fL from"node:process";class jJ{append(Q){this._buffer=this._buffer?Buffer.concat([this._buffer,Q]):Q}readMessage(){if(!this._buffer)return null;let Q=this._buffer.indexOf(`
|
|
48
48
|
`);if(Q===-1)return null;let X=this._buffer.toString("utf8",0,Q).replace(/\r$/,"");return this._buffer=this._buffer.subarray(Q+1),My(X)}clear(){this._buffer=void 0}}function My(Q){return v9.parse(JSON.parse(Q))}function gL(Q){return JSON.stringify(Q)+`
|
|
49
|
-
`}class wJ{constructor(Q=fL.stdin,X=fL.stdout){this._stdin=Q,this._stdout=X,this._readBuffer=new jJ,this._started=!1,this._ondata=(Y)=>{this._readBuffer.append(Y),this.processReadBuffer()},this._onerror=(Y)=>{this.onerror?.(Y)}}async start(){if(this._started)throw Error("StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.");this._started=!0,this._stdin.on("data",this._ondata),this._stdin.on("error",this._onerror)}processReadBuffer(){while(!0)try{let Q=this._readBuffer.readMessage();if(Q===null)break;this.onmessage?.(Q)}catch(Q){this.onerror?.(Q)}}async close(){if(this._stdin.off("data",this._ondata),this._stdin.off("error",this._onerror),this._stdin.listenerCount("data")===0)this._stdin.pause();this._readBuffer.clear(),this.onclose?.()}send(Q){return new Promise((X)=>{let Y=gL(Q);if(this._stdout.write(Y))X();else this._stdout.once("drain",X)})}}import{readFileSync as Og}from"fs";import FY from"node:crypto";var uL="0123456789ABCDEFGHJKMNPQRSTVWXYZ",VY=32;var Ny=16,lL=10,hL=281474976710655;var z9;(function(Q){Q.Base32IncorrectEncoding="B32_ENC_INVALID",Q.DecodeTimeInvalidCharacter="DEC_TIME_CHAR",Q.DecodeTimeValueMalformed="DEC_TIME_MALFORMED",Q.EncodeTimeNegative="ENC_TIME_NEG",Q.EncodeTimeSizeExceeded="ENC_TIME_SIZE_EXCEED",Q.EncodeTimeValueMalformed="ENC_TIME_MALFORMED",Q.PRNGDetectFailure="PRNG_DETECT",Q.ULIDInvalid="ULID_INVALID",Q.Unexpected="UNEXPECTED",Q.UUIDInvalid="UUID_INVALID"})(z9||(z9={}));class $4 extends Error{constructor(Q,X){super(`${X} (${Q})`);this.name="ULIDError",this.code=Q}}function by(Q){let X=Math.floor(Q()*VY)%VY;return uL.charAt(X)}function Py(Q){let X=Zy(),Y=X&&(X.crypto||X.msCrypto)||(typeof FY<"u"?FY:null);if(typeof Y?.getRandomValues==="function")return()=>{let W=new Uint8Array(1);return Y.getRandomValues(W),W[0]/256};else if(typeof Y?.randomBytes==="function")return()=>Y.randomBytes(1).readUInt8()/256;else if(FY?.randomBytes)return()=>FY.randomBytes(1).readUInt8()/256;throw new $4(z9.PRNGDetectFailure,"Failed to find a reliable PRNG")}function Zy(){if(Sy())return self;if(typeof window<"u")return window;if(typeof global<"u")return global;if(typeof globalThis<"u")return globalThis;return null}function Ry(Q,X){let Y="";for(;Q>0;Q--)Y=by(X)+Y;return Y}function Ey(Q,X=lL){if(isNaN(Q))throw new $4(z9.EncodeTimeValueMalformed,`Time must be a number: ${Q}`);else if(Q>hL)throw new $4(z9.EncodeTimeSizeExceeded,`Cannot encode a time larger than ${hL}: ${Q}`);else if(Q<0)throw new $4(z9.EncodeTimeNegative,`Time must be positive: ${Q}`);else if(Number.isInteger(Q)===!1)throw new $4(z9.EncodeTimeValueMalformed,`Time must be an integer: ${Q}`);let Y,W="";for(let $=X;$>0;$--)Y=Q%VY,W=uL.charAt(Y)+W,Q=(Q-Y)/VY;return W}function Sy(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}function y1(Q,X){let Y=X||Py(),W=!Q||isNaN(Q)?Date.now():Q;return Ey(W,lL)+Ry(Ny,Y)}class MJ{configs=new Map;logger;constructor(Q={}){this.logger=Q.logger}addConfig(Q,X,Y){let W=this.configs.has(Q);return this.configs.set(Q,{name:Q,url:X,addedAt:new Date,addedBy:Y}),this.logger?.info(W?"server_config_updated":"server_config_added",{server:Q,url:X,addedBy:Y}),!W}getConfig(Q){return this.configs.get(Q)}listConfigs(){return Array.from(this.configs.values())}removeConfig(Q){let X=this.configs.delete(Q);if(X)this.logger?.info("server_config_removed",{server:Q});return X}hasConfig(Q){return this.configs.has(Q)}get size(){return this.configs.size}clear(){this.configs.clear(),this.logger?.info("server_configs_cleared",{})}}var Iy={maxEvents:1000,retentionMs:1800000,cleanupIntervalMs:300000};class NJ{events=[];config;logger;lastDeliveredId=null;waiters=[];cleanupIntervalHandle=null;constructor(Q={},X){this.config={...Iy,...Q},this.logger=X,this.startCleanupInterval()}addEvent(Q,X,Y){let W=y1(),$={id:W,type:Q,server:X,data:Y,createdAt:new Date,sentViaSSE:!1};this.events.push($);while(this.events.length>this.config.maxEvents)this.events.shift();return this.logger?.debug("event_added",{id:W,type:Q,server:X}),this.wakeWaiters($),W}hasNewEvents(){if(this.lastDeliveredId===null)return this.events.length>0;let Q=this.events.findIndex((X)=>X.id===this.lastDeliveredId);if(Q===-1)return this.events.length>0;return Q<this.events.length-1}getNewEvents(){if(this.events.length===0)return[];let Q=0;if(this.lastDeliveredId!==null){let Y=this.events.findIndex((W)=>W.id===this.lastDeliveredId);if(Y!==-1)Q=Y+1}let X=this.events.slice(Q);if(X.length>0){let Y=X[X.length-1];if(Y)this.lastDeliveredId=Y.id}return X}getEventsAfter(Q){if(Q===null)return[...this.events];let X=this.events.findIndex((Y)=>Y.id===Q);if(X===-1)return[...this.events];return this.events.slice(X+1)}markSent(Q){let X=this.events.find((Y)=>Y.id===Q);if(X)X.sentViaSSE=!0}waitForActivity(Q){return new Promise((X)=>{let Y=setTimeout(()=>{let W=this.waiters.findIndex(($)=>$.timeoutHandle===Y);if(W!==-1)this.waiters.splice(W,1);X(null)},Q);this.waiters.push({resolve:X,timeoutHandle:Y})})}wakeWaiters(Q){let X=this.waiters;this.waiters=[];for(let Y of X)clearTimeout(Y.timeoutHandle),Y.resolve(Q)}startCleanupInterval(){this.cleanupIntervalHandle=setInterval(()=>{this.runCleanup()},this.config.cleanupIntervalMs)}runCleanup(){let Q=Date.now()-this.config.retentionMs,X=0;while(this.events.length>0){let Y=this.events[0];if(Y&&Y.createdAt.getTime()<Q)this.events.shift(),X++;else break}if(X>0)this.logger?.debug("events_cleaned",{removed:X,remaining:this.events.length})}shutdown(){if(this.cleanupIntervalHandle)clearInterval(this.cleanupIntervalHandle),this.cleanupIntervalHandle=null;for(let Q of this.waiters)clearTimeout(Q.timeoutHandle),Q.resolve(null);this.waiters=[]}}var Ty={defaultTtlMs:600000,completedRetentionMs:300000,cleanupIntervalMs:60000};class bJ{tasks=new Map;eventSystem;config;cleanupIntervalHandle=null;constructor(Q,X={}){this.eventSystem=Q,this.config={...Ty,...X},this.startCleanupInterval()}createTask(Q,X,Y,W){let $=y1(),J=new Date,G={taskId:$,server:Q,toolName:X,args:Y,status:"working",createdAt:J,lastUpdatedAt:J,ttl:W??this.config.defaultTtlMs};return this.tasks.set($,G),this.eventSystem.addEvent("task_created",Q,{taskId:$,toolName:X,args:Y}),G}completeTask(Q,X){let Y=this.tasks.get(Q);if(Y?.status!=="working")return;Y.status="completed",Y.result=X,Y.lastUpdatedAt=new Date,this.scheduleTaskCleanup(Y),this.eventSystem.addEvent("task_completed",Y.server,{taskId:Q,toolName:Y.toolName,result:X})}failTask(Q,X){let Y=this.tasks.get(Q);if(Y?.status!=="working")return;Y.status="failed",Y.error=X,Y.lastUpdatedAt=new Date,this.scheduleTaskCleanup(Y),this.eventSystem.addEvent("task_failed",Y.server,{taskId:Q,toolName:Y.toolName,error:X})}cancelTask(Q){let X=this.tasks.get(Q);if(X?.status!=="working")return!1;return X.status="cancelled",X.lastUpdatedAt=new Date,this.scheduleTaskCleanup(X),this.eventSystem.addEvent("task_cancelled",X.server,{taskId:Q,toolName:X.toolName}),!0}getTask(Q){let X=this.tasks.get(Q);if(!X)return;let{_cleanupTimeoutHandle:Y,...W}=X;return W}getTasksForServer(Q){return Array.from(this.tasks.values()).filter((X)=>X.server===Q).map((X)=>({taskId:X.taskId,server:X.server,toolName:X.toolName,args:X.args,status:X.status,result:X.result,error:X.error,createdAt:X.createdAt,lastUpdatedAt:X.lastUpdatedAt,ttl:X.ttl}))}getAllTasks(Q=!1){let X=["completed","failed","cancelled","expired"];return Array.from(this.tasks.values()).filter((Y)=>Q||!X.includes(Y.status)).map((Y)=>({taskId:Y.taskId,server:Y.server,toolName:Y.toolName,args:Y.args,status:Y.status,result:Y.result,error:Y.error,createdAt:Y.createdAt,lastUpdatedAt:Y.lastUpdatedAt,ttl:Y.ttl}))}getWorkingTasksForServer(Q){return Array.from(this.tasks.values()).filter((X)=>X.server===Q&&X.status==="working").map((X)=>({taskId:X.taskId,toolName:X.toolName,status:X.status}))}scheduleTaskCleanup(Q){if(Q._cleanupTimeoutHandle)clearTimeout(Q._cleanupTimeoutHandle);Q._cleanupTimeoutHandle=setTimeout(()=>{this.tasks.delete(Q.taskId)},this.config.completedRetentionMs)}startCleanupInterval(){this.cleanupIntervalHandle=setInterval(()=>{this.runCleanup()},this.config.cleanupIntervalMs)}runCleanup(){let Q=Date.now();for(let X of this.tasks.values()){if(X.status!=="working")continue;if(Q-X.createdAt.getTime()>=X.ttl)X.status="expired",X.error=`Task expired after ${String(X.ttl)}ms TTL`,X.lastUpdatedAt=new Date,this.eventSystem.addEvent("task_expired",X.server,{taskId:X.taskId,toolName:X.toolName,ttl:X.ttl}),this.scheduleTaskCleanup(X)}}shutdown(){if(this.cleanupIntervalHandle)clearInterval(this.cleanupIntervalHandle),this.cleanupIntervalHandle=null;for(let Q of this.tasks.values())if(Q._cleanupTimeoutHandle)clearTimeout(Q._cleanupTimeoutHandle)}}var Cy={maxNotificationsPerServer:100,maxLogsPerServer:500};class PJ{buffers=new Map;eventSystem;config;constructor(Q,X={}){this.eventSystem=Q,this.config={...Cy,...X}}addNotification(Q){let X=this.getOrCreateBuffers(Q.server);if(X.notifications.length>=this.config.maxNotificationsPerServer)X.notifications.shift();X.notifications.push(Q),this.eventSystem.addEvent("notification",Q.server,{method:Q.method,params:Q.params,timestamp:Q.timestamp.toISOString()})}addLog(Q){let X=this.getOrCreateBuffers(Q.server);if(X.logs.length>=this.config.maxLogsPerServer)X.logs.shift();X.logs.push(Q)}getAndClearNotifications(){let Q=[];for(let X of this.buffers.values())Q.push(...X.notifications),X.notifications=[];return Q}getAndClearLogs(){let Q=[];for(let X of this.buffers.values())Q.push(...X.logs),X.logs=[];return Q}getNotificationsForServer(Q){let X=this.buffers.get(Q);return X?[...X.notifications]:[]}getLogsForServer(Q){let X=this.buffers.get(Q);return X?[...X.logs]:[]}getNotificationCount(){let Q=0;for(let X of this.buffers.values())Q+=X.notifications.length;return Q}getLogCount(){let Q=0;for(let X of this.buffers.values())Q+=X.logs.length;return Q}clearServer(Q){this.buffers.delete(Q)}getOrCreateBuffers(Q){let X=this.buffers.get(Q);if(!X)X={notifications:[],logs:[]},this.buffers.set(Q,X);return X}}var ky={defaultTimeoutMs:600000};class ZJ{samplingRequests=new Map;elicitationRequests=new Map;eventSystem;config;constructor(Q,X={}){this.eventSystem=Q,this.config={...ky,...X}}addSamplingRequest(Q,X,Y,W){let $=y1(),J=setTimeout(()=>{let H=this.samplingRequests.get($);if(H)this.samplingRequests.delete($),this.eventSystem.addEvent("sampling_expired",Q,{requestId:$,reason:`Timed out after ${String(this.config.defaultTimeoutMs)}ms`}),H.reject(Error(`Sampling request timed out after ${String(this.config.defaultTimeoutMs)}ms`))},this.config.defaultTimeoutMs),G={requestId:$,server:Q,timestamp:new Date,params:X,resolve:Y,reject:W,timeoutHandle:J};return this.samplingRequests.set($,G),this.eventSystem.addEvent("sampling_request",Q,{requestId:$,params:X}),$}addElicitationRequest(Q,X,Y,W){let $=y1(),J=setTimeout(()=>{let H=this.elicitationRequests.get($);if(H)this.elicitationRequests.delete($),this.eventSystem.addEvent("elicitation_expired",Q,{requestId:$,reason:`Timed out after ${String(this.config.defaultTimeoutMs)}ms`}),H.reject(Error(`Elicitation request timed out after ${String(this.config.defaultTimeoutMs)}ms`))},this.config.defaultTimeoutMs),G={requestId:$,server:Q,timestamp:new Date,params:X,resolve:Y,reject:W,timeoutHandle:J};return this.elicitationRequests.set($,G),this.eventSystem.addEvent("elicitation_request",Q,{requestId:$,params:X}),$}respondToSampling(Q,X){let Y=this.samplingRequests.get(Q);if(!Y)throw Error(`Sampling request '${Q}' not found or already completed`);clearTimeout(Y.timeoutHandle),this.samplingRequests.delete(Q),Y.resolve(X)}cancelSampling(Q,X="User cancelled"){let Y=this.samplingRequests.get(Q);if(!Y)throw Error(`Sampling request '${Q}' not found or already completed`);clearTimeout(Y.timeoutHandle),this.samplingRequests.delete(Q),this.eventSystem.addEvent("sampling_expired",Y.server,{requestId:Q,reason:X}),Y.reject(Error(X))}respondToElicitation(Q,X){let Y=this.elicitationRequests.get(Q);if(!Y)throw Error(`Elicitation request '${Q}' not found or already completed`);clearTimeout(Y.timeoutHandle),this.elicitationRequests.delete(Q),Y.resolve(X)}cancelElicitation(Q,X="User cancelled"){let Y=this.elicitationRequests.get(Q);if(!Y)throw Error(`Elicitation request '${Q}' not found or already completed`);clearTimeout(Y.timeoutHandle),this.elicitationRequests.delete(Q),this.eventSystem.addEvent("elicitation_expired",Y.server,{requestId:Q,reason:X}),Y.reject(Error(X))}getPendingSamplingRequests(){return Array.from(this.samplingRequests.values()).map((Q)=>({requestId:Q.requestId,server:Q.server,timestamp:Q.timestamp,params:Q.params}))}getPendingElicitationRequests(){return Array.from(this.elicitationRequests.values()).map((Q)=>({requestId:Q.requestId,server:Q.server,timestamp:Q.timestamp,params:Q.params}))}getRequestsForServer(Q){return{sampling:this.getPendingSamplingRequests().filter((X)=>X.server===Q),elicitation:this.getPendingElicitationRequests().filter((X)=>X.server===Q)}}hasPendingRequests(){return this.samplingRequests.size>0||this.elicitationRequests.size>0}rejectRequestsForServer(Q,X){for(let[Y,W]of this.samplingRequests)if(W.server===Q)clearTimeout(W.timeoutHandle),this.samplingRequests.delete(Y),this.eventSystem.addEvent("sampling_expired",Q,{requestId:Y,reason:X}),W.reject(Error(X));for(let[Y,W]of this.elicitationRequests)if(W.server===Q)clearTimeout(W.timeoutHandle),this.elicitationRequests.delete(Y),this.eventSystem.addEvent("elicitation_expired",Q,{requestId:Y,reason:X}),W.reject(Error(X))}shutdown(){for(let Q of this.samplingRequests.values())clearTimeout(Q.timeoutHandle),Q.reject(Error("PendingRequestsManager shutting down"));this.samplingRequests.clear();for(let Q of this.elicitationRequests.values())clearTimeout(Q.timeoutHandle),Q.reject(Error("PendingRequestsManager shutting down"));this.elicitationRequests.clear()}}var vy={maxActiveTimers:100,maxDurationMs:86400000,retentionMs:300000};class RJ{timers=new Map;expiredBuffer=[];eventSystem;config;constructor(Q,X={}){this.eventSystem=Q,this.config={...vy,...X}}createTimer(Q,X){if(this.getActiveTimers().length>=this.config.maxActiveTimers)throw Error(`Maximum active timers (${String(this.config.maxActiveTimers)}) exceeded`);if(Q<=0)throw Error("Duration must be positive");if(Q>this.config.maxDurationMs)throw Error(`Duration exceeds maximum (${String(this.config.maxDurationMs)}ms)`);let W=y1(),$=new Date,J=new Date($.getTime()+Q),G={id:W,durationMs:Q,message:X,createdAt:$,expiresAt:J,status:"active"};return G._timeoutHandle=setTimeout(()=>{this.expireTimer(W)},Q),this.timers.set(W,G),this.toPublicTimer(G)}getTimer(Q){let X=this.timers.get(Q);if(!X)return;return this.toPublicTimer(X)}deleteTimer(Q){let X=this.timers.get(Q);if(!X)return;if(X._timeoutHandle)clearTimeout(X._timeoutHandle),X._timeoutHandle=void 0;return X.status="deleted",this.scheduleCleanup(X),this.toPublicTimer(X)}getAllTimers(Q=!1){let X=Array.from(this.timers.values());return(Q?X:X.filter((W)=>W.status==="active")).map((W)=>this.toPublicTimer(W))}getActiveTimers(){return Array.from(this.timers.values()).filter((Q)=>Q.status==="active").map((Q)=>this.toPublicTimer(Q))}getAndClearExpired(){let Q=[...this.expiredBuffer];return this.expiredBuffer.length=0,Q}hasExpired(){return this.expiredBuffer.length>0}shutdown(){for(let Q of this.timers.values())if(Q._timeoutHandle)clearTimeout(Q._timeoutHandle);this.timers.clear(),this.expiredBuffer.length=0}expireTimer(Q){let X=this.timers.get(Q);if(!X?.status||X.status!=="active")return;X.status="expired",X._timeoutHandle=void 0,this.expiredBuffer.push({id:X.id,message:X.message,expiredAt:new Date().toISOString()}),this.eventSystem.addEvent("timer_expired","emceepee",{timerId:X.id,message:X.message}),this.scheduleCleanup(X)}scheduleCleanup(Q){setTimeout(()=>{this.timers.delete(Q.id)},this.config.retentionMs)}toPublicTimer(Q){return{id:Q.id,durationMs:Q.durationMs,message:Q.message,createdAt:Q.createdAt,expiresAt:Q.expiresAt,status:Q.status}}}class EJ{sessionId;createdAt;lastActivityAt;backendConnections=new Map;eventSystem;taskManager;pendingRequests;bufferManager;timerManager;logger;constructor(Q,X={},Y){this.sessionId=Q,this.createdAt=new Date,this.lastActivityAt=new Date,this.logger=Y,this.eventSystem=new NJ(X.eventSystemConfig,Y),this.taskManager=new bJ(this.eventSystem,X.taskConfig),this.pendingRequests=new ZJ(this.eventSystem,X.requestConfig),this.bufferManager=new PJ(this.eventSystem,X.bufferConfig),this.timerManager=new RJ(this.eventSystem,X.timerConfig)}touch(){this.lastActivityAt=new Date}getConnection(Q){return this.backendConnections.get(Q)}isConnectedTo(Q){return this.backendConnections.get(Q)?.status==="connected"}listConnectedServers(){return Array.from(this.backendConnections.entries()).filter(([,Q])=>Q.status==="connected").map(([Q])=>Q)}listConnections(){return Array.from(this.backendConnections.entries()).map(([Q,X])=>({name:Q,status:X.status,connectedAt:X.connectedAt,lastError:X.lastError}))}setConnectionStatus(Q,X,Y){let W=this.backendConnections.get(Q);if(W){if(W.status=X,X==="connected")W.connectedAt=new Date,W.lastError=void 0;else if(X==="error"&&Y)W.lastError=Y}}addConnection(Q,X){this.backendConnections.set(Q,{client:X,status:"connecting"})}removeConnection(Q){return this.backendConnections.delete(Q)}async cleanup(){this.logger?.info("session_cleanup_start",{sessionId:this.sessionId}),this.pendingRequests.shutdown(),this.taskManager.shutdown(),this.timerManager.shutdown(),this.eventSystem.shutdown();for(let[Q,X]of this.backendConnections)try{await X.client.disconnect(),this.logger?.debug("session_backend_disconnected",{sessionId:this.sessionId,server:Q})}catch(Y){this.logger?.debug("session_backend_disconnect_error",{sessionId:this.sessionId,server:Q,error:Y instanceof Error?Y.message:String(Y)})}this.backendConnections.clear(),this.logger?.info("session_cleanup_complete",{sessionId:this.sessionId})}}class SJ{constructor(Q){this._client=Q}async*callToolStream(Q,X=j6,Y){let W=this._client,$={...Y,task:Y?.task??(W.isToolTask(Q.name)?{}:void 0)},J=W.requestStream({method:"tools/call",params:Q},X,$),G=W.getToolOutputValidator(Q.name);for await(let H of J){if(H.type==="result"&&G){let B=H.result;if(!B.structuredContent&&!B.isError){yield{type:"error",error:new S(k.InvalidRequest,`Tool ${Q.name} has an output schema but did not return structured content`)};return}if(B.structuredContent)try{let z=G(B.structuredContent);if(!z.valid){yield{type:"error",error:new S(k.InvalidParams,`Structured content does not match the tool's output schema: ${z.errorMessage}`)};return}}catch(z){if(z instanceof S){yield{type:"error",error:z};return}yield{type:"error",error:new S(k.InvalidParams,`Failed to validate structured content: ${z instanceof Error?z.message:String(z)}`)};return}}yield H}}async getTask(Q,X){return this._client.getTask({taskId:Q},X)}async getTaskResult(Q,X,Y){return this._client.getTaskResult({taskId:Q},X,Y)}async listTasks(Q,X){return this._client.listTasks(Q?{cursor:Q}:void 0,X)}async cancelTask(Q,X){return this._client.cancelTask({taskId:Q},X)}requestStream(Q,X,Y){return this._client.requestStream(Q,X,Y)}}function qY(Q,X){if(!Q||X===null||typeof X!=="object")return;if(Q.type==="object"&&Q.properties&&typeof Q.properties==="object"){let Y=X,W=Q.properties;for(let $ of Object.keys(W)){let J=W[$];if(Y[$]===void 0&&Object.prototype.hasOwnProperty.call(J,"default"))Y[$]=J.default;if(Y[$]!==void 0)qY(J,Y[$])}}if(Array.isArray(Q.anyOf)){for(let Y of Q.anyOf)if(typeof Y!=="boolean")qY(Y,X)}if(Array.isArray(Q.oneOf)){for(let Y of Q.oneOf)if(typeof Y!=="boolean")qY(Y,X)}}function _y(Q){if(!Q)return{supportsFormMode:!1,supportsUrlMode:!1};let X=Q.form!==void 0,Y=Q.url!==void 0;return{supportsFormMode:X||!X&&!Y,supportsUrlMode:Y}}class AY extends o4{constructor(Q,X){super(X);if(this._clientInfo=Q,this._cachedToolOutputValidators=new Map,this._cachedKnownTaskTools=new Set,this._cachedRequiredTaskTools=new Set,this._listChangedDebounceTimers=new Map,this._capabilities=X?.capabilities??{},this._jsonSchemaValidator=X?.jsonSchemaValidator??new u8,X?.listChanged)this._pendingListChangedConfig=X.listChanged}_setupListChangedHandlers(Q){if(Q.tools&&this._serverCapabilities?.tools?.listChanged)this._setupListChangedHandler("tools",m4,Q.tools,async()=>{return(await this.listTools()).tools});if(Q.prompts&&this._serverCapabilities?.prompts?.listChanged)this._setupListChangedHandler("prompts",l4,Q.prompts,async()=>{return(await this.listPrompts()).prompts});if(Q.resources&&this._serverCapabilities?.resources?.listChanged)this._setupListChangedHandler("resources",u4,Q.resources,async()=>{return(await this.listResources()).resources})}get experimental(){if(!this._experimental)this._experimental={tasks:new SJ(this)};return this._experimental}registerCapabilities(Q){if(this.transport)throw Error("Cannot register capabilities after connecting to transport");this._capabilities=dQ(this._capabilities,Q)}setRequestHandler(Q,X){let W=m1(Q)?.method;if(!W)throw Error("Schema is missing a method literal");let $;if(s0(W)){let G=W;$=G._zod?.def?.value??G.value}else{let G=W;$=G._def?.value??G.value}if(typeof $!=="string")throw Error("Schema method literal must be a string");let J=$;if(J==="elicitation/create"){let G=async(H,B)=>{let z=c0(i4,H);if(!z.success){let O=z.error instanceof Error?z.error.message:String(z.error);throw new S(k.InvalidParams,`Invalid elicitation request: ${O}`)}let{params:K}=z.data;K.mode=K.mode??"form";let{supportsFormMode:V,supportsUrlMode:D}=_y(this._capabilities.elicitation);if(K.mode==="form"&&!V)throw new S(k.InvalidParams,"Client does not support form-mode elicitation requests");if(K.mode==="url"&&!D)throw new S(k.InvalidParams,"Client does not support URL-mode elicitation requests");let F=await Promise.resolve(X(H,B));if(K.task){let O=c0(e1,F);if(!O.success){let M=O.error instanceof Error?O.error.message:String(O.error);throw new S(k.InvalidParams,`Invalid task creation result: ${M}`)}return O.data}let q=c0(y9,F);if(!q.success){let O=q.error instanceof Error?q.error.message:String(q.error);throw new S(k.InvalidParams,`Invalid elicitation result: ${O}`)}let A=q.data,L=K.mode==="form"?K.requestedSchema:void 0;if(K.mode==="form"&&A.action==="accept"&&A.content&&L){if(this._capabilities.elicitation?.form?.applyDefaults)try{qY(L,A.content)}catch{}}return A};return super.setRequestHandler(Q,G)}if(J==="sampling/createMessage"){let G=async(H,B)=>{let z=c0(p4,H);if(!z.success){let F=z.error instanceof Error?z.error.message:String(z.error);throw new S(k.InvalidParams,`Invalid sampling request: ${F}`)}let{params:K}=z.data,V=await Promise.resolve(X(H,B));if(K.task){let F=c0(e1,V);if(!F.success){let q=F.error instanceof Error?F.error.message:String(F.error);throw new S(k.InvalidParams,`Invalid task creation result: ${q}`)}return F.data}let D=c0(d4,V);if(!D.success){let F=D.error instanceof Error?D.error.message:String(D.error);throw new S(k.InvalidParams,`Invalid sampling result: ${F}`)}return D.data};return super.setRequestHandler(Q,G)}return super.setRequestHandler(Q,X)}assertCapability(Q,X){if(!this._serverCapabilities?.[Q])throw Error(`Server does not support ${Q} (required for ${X})`)}async connect(Q,X){if(await super.connect(Q),Q.sessionId!==void 0)return;try{let Y=await this.request({method:"initialize",params:{protocolVersion:O6,capabilities:this._capabilities,clientInfo:this._clientInfo}},t7,X);if(Y===void 0)throw Error(`Server sent invalid initialize result: ${Y}`);if(!MQ.includes(Y.protocolVersion))throw Error(`Server's protocol version is not supported: ${Y.protocolVersion}`);if(this._serverCapabilities=Y.capabilities,this._serverVersion=Y.serverInfo,Q.setProtocolVersion)Q.setProtocolVersion(Y.protocolVersion);if(this._instructions=Y.instructions,await this.notification({method:"notifications/initialized"}),this._pendingListChangedConfig)this._setupListChangedHandlers(this._pendingListChangedConfig),this._pendingListChangedConfig=void 0}catch(Y){throw this.close(),Y}}getServerCapabilities(){return this._serverCapabilities}getServerVersion(){return this._serverVersion}getInstructions(){return this._instructions}assertCapabilityForMethod(Q){switch(Q){case"logging/setLevel":if(!this._serverCapabilities?.logging)throw Error(`Server does not support logging (required for ${Q})`);break;case"prompts/get":case"prompts/list":if(!this._serverCapabilities?.prompts)throw Error(`Server does not support prompts (required for ${Q})`);break;case"resources/list":case"resources/templates/list":case"resources/read":case"resources/subscribe":case"resources/unsubscribe":if(!this._serverCapabilities?.resources)throw Error(`Server does not support resources (required for ${Q})`);if(Q==="resources/subscribe"&&!this._serverCapabilities.resources.subscribe)throw Error(`Server does not support resource subscriptions (required for ${Q})`);break;case"tools/call":case"tools/list":if(!this._serverCapabilities?.tools)throw Error(`Server does not support tools (required for ${Q})`);break;case"completion/complete":if(!this._serverCapabilities?.completions)throw Error(`Server does not support completions (required for ${Q})`);break;case"initialize":break;case"ping":break}}assertNotificationCapability(Q){switch(Q){case"notifications/roots/list_changed":if(!this._capabilities.roots?.listChanged)throw Error(`Client does not support roots list changed notifications (required for ${Q})`);break;case"notifications/initialized":break;case"notifications/cancelled":break;case"notifications/progress":break}}assertRequestHandlerCapability(Q){if(!this._capabilities)return;switch(Q){case"sampling/createMessage":if(!this._capabilities.sampling)throw Error(`Client does not support sampling capability (required for ${Q})`);break;case"elicitation/create":if(!this._capabilities.elicitation)throw Error(`Client does not support elicitation capability (required for ${Q})`);break;case"roots/list":if(!this._capabilities.roots)throw Error(`Client does not support roots capability (required for ${Q})`);break;case"tasks/get":case"tasks/list":case"tasks/result":case"tasks/cancel":if(!this._capabilities.tasks)throw Error(`Client does not support tasks capability (required for ${Q})`);break;case"ping":break}}assertTaskCapability(Q){zY(this._serverCapabilities?.tasks?.requests,Q,"Server")}assertTaskHandlerCapability(Q){if(!this._capabilities)return;KY(this._capabilities.tasks?.requests,Q,"Client")}async ping(Q){return this.request({method:"ping"},s1,Q)}async complete(Q,X){return this.request({method:"completion/complete",params:Q},q5,X)}async setLoggingLevel(Q,X){return this.request({method:"logging/setLevel",params:{level:Q}},s1,X)}async getPrompt(Q,X){return this.request({method:"prompts/get",params:Q},B5,X)}async listPrompts(Q,X){return this.request({method:"prompts/list",params:Q},W5,X)}async listResources(Q,X){return this.request({method:"resources/list",params:Q},s7,X)}async listResourceTemplates(Q,X){return this.request({method:"resources/templates/list",params:Q},e7,X)}async readResource(Q,X){return this.request({method:"resources/read",params:Q},X5,X)}async subscribeResource(Q,X){return this.request({method:"resources/subscribe",params:Q},s1,X)}async unsubscribeResource(Q,X){return this.request({method:"resources/unsubscribe",params:Q},s1,X)}async callTool(Q,X=j6,Y){if(this.isToolTaskRequired(Q.name))throw new S(k.InvalidRequest,`Tool "${Q.name}" requires task-based execution. Use client.experimental.tasks.callToolStream() instead.`);let W=await this.request({method:"tools/call",params:Q},X,Y),$=this.getToolOutputValidator(Q.name);if($){if(!W.structuredContent&&!W.isError)throw new S(k.InvalidRequest,`Tool ${Q.name} has an output schema but did not return structured content`);if(W.structuredContent)try{let J=$(W.structuredContent);if(!J.valid)throw new S(k.InvalidParams,`Structured content does not match the tool's output schema: ${J.errorMessage}`)}catch(J){if(J instanceof S)throw J;throw new S(k.InvalidParams,`Failed to validate structured content: ${J instanceof Error?J.message:String(J)}`)}}return W}isToolTask(Q){if(!this._serverCapabilities?.tasks?.requests?.tools?.call)return!1;return this._cachedKnownTaskTools.has(Q)}isToolTaskRequired(Q){return this._cachedRequiredTaskTools.has(Q)}cacheToolMetadata(Q){this._cachedToolOutputValidators.clear(),this._cachedKnownTaskTools.clear(),this._cachedRequiredTaskTools.clear();for(let X of Q){if(X.outputSchema){let W=this._jsonSchemaValidator.getValidator(X.outputSchema);this._cachedToolOutputValidators.set(X.name,W)}let Y=X.execution?.taskSupport;if(Y==="required"||Y==="optional")this._cachedKnownTaskTools.add(X.name);if(Y==="required")this._cachedRequiredTaskTools.add(X.name)}}getToolOutputValidator(Q){return this._cachedToolOutputValidators.get(Q)}async listTools(Q,X){let Y=await this.request({method:"tools/list",params:Q},z5,X);return this.cacheToolMetadata(Y.tools),Y}_setupListChangedHandler(Q,X,Y,W){let $=A3.safeParse(Y);if(!$.success)throw Error(`Invalid ${Q} listChanged options: ${$.error.message}`);if(typeof Y.onChanged!=="function")throw Error(`Invalid ${Q} listChanged options: onChanged must be a function`);let{autoRefresh:J,debounceMs:G}=$.data,{onChanged:H}=Y,B=async()=>{if(!J){H(null,null);return}try{let K=await W();H(null,K)}catch(K){let V=K instanceof Error?K:Error(String(K));H(V,null)}},z=()=>{if(G){let K=this._listChangedDebounceTimers.get(Q);if(K)clearTimeout(K);let V=setTimeout(B,G);this._listChangedDebounceTimers.set(Q,V)}else B()};this.setNotificationHandler(X,z)}async sendRootsListChanged(){return this.notification({method:"notifications/roots/list_changed"})}}function DY(Q){if(!Q)return{};if(Q instanceof Headers)return Object.fromEntries(Q.entries());if(Array.isArray(Q))return Object.fromEntries(Q);return{...Q}}function mL(Q=fetch,X){if(!X)return Q;return async(Y,W)=>{let $={...X,...W,headers:W?.headers?{...DY(X.headers),...DY(W.headers)}:X.headers};return Q(Y,$)}}var IJ;IJ=globalThis.crypto?.webcrypto??globalThis.crypto??import("node:crypto").then((Q)=>Q.webcrypto);async function xy(Q){return(await IJ).getRandomValues(new Uint8Array(Q))}async function yy(Q){let Y=Math.pow(2,8)-Math.pow(2,8)%66,W="";while(W.length<Q){let $=await xy(Q-W.length);for(let J of $)if(J<Y)W+="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~"[J%66]}return W}async function gy(Q){return await yy(Q)}async function fy(Q){let X=await(await IJ).subtle.digest("SHA-256",new TextEncoder().encode(Q));return btoa(String.fromCharCode(...new Uint8Array(X))).replace(/\//g,"_").replace(/\+/g,"-").replace(/=/g,"")}async function TJ(Q){if(!Q)Q=43;if(Q<43||Q>128)throw`Expected a length between 43 and 128. Received ${Q}.`;let X=await gy(Q),Y=await fy(X);return{code_verifier:X,code_challenge:Y}}var f0=lH().superRefine((Q,X)=>{if(!URL.canParse(Q))return X.addIssue({code:sH.custom,message:"URL must be parseable",fatal:!0}),t8}).refine((Q)=>{let X=new URL(Q);return X.protocol!=="javascript:"&&X.protocol!=="data:"&&X.protocol!=="vbscript:"},{message:"URL cannot use javascript:, data:, or vbscript: scheme"}),pL=T0({resource:U().url(),authorization_servers:E(f0).optional(),jwks_uri:U().url().optional(),scopes_supported:E(U()).optional(),bearer_methods_supported:E(U()).optional(),resource_signing_alg_values_supported:E(U()).optional(),resource_name:U().optional(),resource_documentation:U().optional(),resource_policy_uri:U().url().optional(),resource_tos_uri:U().url().optional(),tls_client_certificate_bound_access_tokens:H0().optional(),authorization_details_types_supported:E(U()).optional(),dpop_signing_alg_values_supported:E(U()).optional(),dpop_bound_access_tokens_required:H0().optional()}),CJ=T0({issuer:U(),authorization_endpoint:f0,token_endpoint:f0,registration_endpoint:f0.optional(),scopes_supported:E(U()).optional(),response_types_supported:E(U()),response_modes_supported:E(U()).optional(),grant_types_supported:E(U()).optional(),token_endpoint_auth_methods_supported:E(U()).optional(),token_endpoint_auth_signing_alg_values_supported:E(U()).optional(),service_documentation:f0.optional(),revocation_endpoint:f0.optional(),revocation_endpoint_auth_methods_supported:E(U()).optional(),revocation_endpoint_auth_signing_alg_values_supported:E(U()).optional(),introspection_endpoint:U().optional(),introspection_endpoint_auth_methods_supported:E(U()).optional(),introspection_endpoint_auth_signing_alg_values_supported:E(U()).optional(),code_challenge_methods_supported:E(U()).optional(),client_id_metadata_document_supported:H0().optional()}),hy=T0({issuer:U(),authorization_endpoint:f0,token_endpoint:f0,userinfo_endpoint:f0.optional(),jwks_uri:f0,registration_endpoint:f0.optional(),scopes_supported:E(U()).optional(),response_types_supported:E(U()),response_modes_supported:E(U()).optional(),grant_types_supported:E(U()).optional(),acr_values_supported:E(U()).optional(),subject_types_supported:E(U()),id_token_signing_alg_values_supported:E(U()),id_token_encryption_alg_values_supported:E(U()).optional(),id_token_encryption_enc_values_supported:E(U()).optional(),userinfo_signing_alg_values_supported:E(U()).optional(),userinfo_encryption_alg_values_supported:E(U()).optional(),userinfo_encryption_enc_values_supported:E(U()).optional(),request_object_signing_alg_values_supported:E(U()).optional(),request_object_encryption_alg_values_supported:E(U()).optional(),request_object_encryption_enc_values_supported:E(U()).optional(),token_endpoint_auth_methods_supported:E(U()).optional(),token_endpoint_auth_signing_alg_values_supported:E(U()).optional(),display_values_supported:E(U()).optional(),claim_types_supported:E(U()).optional(),claims_supported:E(U()).optional(),service_documentation:U().optional(),claims_locales_supported:E(U()).optional(),ui_locales_supported:E(U()).optional(),claims_parameter_supported:H0().optional(),request_parameter_supported:H0().optional(),request_uri_parameter_supported:H0().optional(),require_request_uri_registration:H0().optional(),op_policy_uri:f0.optional(),op_tos_uri:f0.optional(),client_id_metadata_document_supported:H0().optional()}),dL=I({...hy.shape,...CJ.pick({code_challenge_methods_supported:!0}).shape}),iL=I({access_token:U(),id_token:U().optional(),token_type:U(),expires_in:jQ.number().optional(),scope:U().optional(),refresh_token:U().optional()}).strip(),nL=I({error:U(),error_description:U().optional(),error_uri:U().optional()}),cL=f0.optional().or(_("").transform(()=>{return})),uy=I({redirect_uris:E(f0),token_endpoint_auth_method:U().optional(),grant_types:E(U()).optional(),response_types:E(U()).optional(),client_name:U().optional(),client_uri:f0.optional(),logo_uri:cL,scope:U().optional(),contacts:E(U()).optional(),tos_uri:cL,policy_uri:U().optional(),jwks_uri:f0.optional(),jwks:cH().optional(),software_id:U().optional(),software_version:U().optional(),software_statement:U().optional()}).strip(),ly=I({client_id:U(),client_secret:U().optional(),client_id_issued_at:J0().optional(),client_secret_expires_at:J0().optional()}).strip(),oL=uy.merge(ly),ti=I({error:U(),error_description:U().optional()}).strip(),ai=I({token:U(),token_type_hint:U().optional()}).strip();function rL(Q){let X=typeof Q==="string"?new URL(Q):new URL(Q.href);return X.hash="",X}function tL({requestedResource:Q,configuredResource:X}){let Y=typeof Q==="string"?new URL(Q):new URL(Q.href),W=typeof X==="string"?new URL(X):new URL(X.href);if(Y.origin!==W.origin)return!1;if(Y.pathname.length<W.pathname.length)return!1;let $=Y.pathname.endsWith("/")?Y.pathname:Y.pathname+"/",J=W.pathname.endsWith("/")?W.pathname:W.pathname+"/";return $.startsWith(J)}class E0 extends Error{constructor(Q,X){super(Q);this.errorUri=X,this.name=this.constructor.name}toResponseObject(){let Q={error:this.errorCode,error_description:this.message};if(this.errorUri)Q.error_uri=this.errorUri;return Q}get errorCode(){return this.constructor.errorCode}}class LY extends E0{}LY.errorCode="invalid_request";class J4 extends E0{}J4.errorCode="invalid_client";class G4 extends E0{}G4.errorCode="invalid_grant";class H4 extends E0{}H4.errorCode="unauthorized_client";class OY extends E0{}OY.errorCode="unsupported_grant_type";class UY extends E0{}UY.errorCode="invalid_scope";class jY extends E0{}jY.errorCode="access_denied";class x6 extends E0{}x6.errorCode="server_error";class wY extends E0{}wY.errorCode="temporarily_unavailable";class MY extends E0{}MY.errorCode="unsupported_response_type";class NY extends E0{}NY.errorCode="unsupported_token_type";class bY extends E0{}bY.errorCode="invalid_token";class PY extends E0{}PY.errorCode="method_not_allowed";class ZY extends E0{}ZY.errorCode="too_many_requests";class B4 extends E0{}B4.errorCode="invalid_client_metadata";class RY extends E0{}RY.errorCode="insufficient_scope";class EY extends E0{}EY.errorCode="invalid_target";var aL={[LY.errorCode]:LY,[J4.errorCode]:J4,[G4.errorCode]:G4,[H4.errorCode]:H4,[OY.errorCode]:OY,[UY.errorCode]:UY,[jY.errorCode]:jY,[x6.errorCode]:x6,[wY.errorCode]:wY,[MY.errorCode]:MY,[NY.errorCode]:NY,[bY.errorCode]:bY,[PY.errorCode]:PY,[ZY.errorCode]:ZY,[B4.errorCode]:B4,[RY.errorCode]:RY,[EY.errorCode]:EY};class y6 extends Error{constructor(Q){super(Q??"Unauthorized")}}function my(Q){return["client_secret_basic","client_secret_post","none"].includes(Q)}var kJ="code",vJ="S256";function cy(Q,X){let Y=Q.client_secret!==void 0;if(X.length===0)return Y?"client_secret_post":"none";if("token_endpoint_auth_method"in Q&&Q.token_endpoint_auth_method&&my(Q.token_endpoint_auth_method)&&X.includes(Q.token_endpoint_auth_method))return Q.token_endpoint_auth_method;if(Y&&X.includes("client_secret_basic"))return"client_secret_basic";if(Y&&X.includes("client_secret_post"))return"client_secret_post";if(X.includes("none"))return"none";return Y?"client_secret_post":"none"}function py(Q,X,Y,W){let{client_id:$,client_secret:J}=X;switch(Q){case"client_secret_basic":dy($,J,Y);return;case"client_secret_post":iy($,J,W);return;case"none":ny($,W);return;default:throw Error(`Unsupported client authentication method: ${Q}`)}}function dy(Q,X,Y){if(!X)throw Error("client_secret_basic authentication requires a client_secret");let W=btoa(`${Q}:${X}`);Y.set("Authorization",`Basic ${W}`)}function iy(Q,X,Y){if(Y.set("client_id",Q),X)Y.set("client_secret",X)}function ny(Q,X){X.set("client_id",Q)}async function eL(Q){let X=Q instanceof Response?Q.status:void 0,Y=Q instanceof Response?await Q.text():Q;try{let W=nL.parse(JSON.parse(Y)),{error:$,error_description:J,error_uri:G}=W;return new(aL[$]||x6)(J||"",G)}catch(W){let $=`${X?`HTTP ${X}: `:""}Invalid OAuth error response: ${W}. Raw body: ${Y}`;return new x6($)}}async function m8(Q,X){try{return await _J(Q,X)}catch(Y){if(Y instanceof J4||Y instanceof H4)return await Q.invalidateCredentials?.("all"),await _J(Q,X);else if(Y instanceof G4)return await Q.invalidateCredentials?.("tokens"),await _J(Q,X);throw Y}}async function _J(Q,{serverUrl:X,authorizationCode:Y,scope:W,resourceMetadataUrl:$,fetchFn:J}){let G,H;try{if(G=await ty(X,{resourceMetadataUrl:$},J),G.authorization_servers&&G.authorization_servers.length>0)H=G.authorization_servers[0]}catch{}if(!H)H=new URL("/",X);let B=await ry(X,Q,G),z=await Xg(H,{fetchFn:J}),K=await Promise.resolve(Q.clientInformation());if(!K){if(Y!==void 0)throw Error("Existing OAuth client information is required when exchanging an authorization code");let L=z?.client_id_metadata_document_supported===!0,O=Q.clientMetadataUrl;if(O&&!oy(O))throw new B4(`clientMetadataUrl must be a valid HTTPS URL with a non-root pathname, got: ${O}`);if(L&&O)K={client_id:O},await Q.saveClientInformation?.(K);else{if(!Q.saveClientInformation)throw Error("OAuth client information must be saveable for dynamic registration");let N=await Gg(H,{metadata:z,clientMetadata:Q.clientMetadata,fetchFn:J});await Q.saveClientInformation(N),K=N}}let V=!Q.redirectUrl;if(Y!==void 0||V){let L=await Jg(Q,H,{metadata:z,resource:B,authorizationCode:Y,fetchFn:J});return await Q.saveTokens(L),"AUTHORIZED"}let D=await Q.tokens();if(D?.refresh_token)try{let L=await $g(H,{metadata:z,clientInformation:K,refreshToken:D.refresh_token,resource:B,addClientAuthentication:Q.addClientAuthentication,fetchFn:J});return await Q.saveTokens(L),"AUTHORIZED"}catch(L){if(!(L instanceof E0)||L instanceof x6);else throw L}let F=Q.state?await Q.state():void 0,{authorizationUrl:q,codeVerifier:A}=await Yg(H,{metadata:z,clientInformation:K,state:F,redirectUrl:Q.redirectUrl,scope:W||G?.scopes_supported?.join(" ")||Q.clientMetadata.scope,resource:B});return await Q.saveCodeVerifier(A),await Q.redirectToAuthorization(q),"REDIRECT"}function oy(Q){if(!Q)return!1;try{let X=new URL(Q);return X.protocol==="https:"&&X.pathname!=="/"}catch{return!1}}async function ry(Q,X,Y){let W=rL(Q);if(X.validateResourceURL)return await X.validateResourceURL(W,Y?.resource);if(!Y)return;if(!tL({requestedResource:W,configuredResource:Y.resource}))throw Error(`Protected resource ${Y.resource} does not match expected ${W} (or origin)`);return new URL(Y.resource)}function yJ(Q){let X=Q.headers.get("WWW-Authenticate");if(!X)return{};let[Y,W]=X.split(" ");if(Y.toLowerCase()!=="bearer"||!W)return{};let $=xJ(Q,"resource_metadata")||void 0,J;if($)try{J=new URL($)}catch{}let G=xJ(Q,"scope")||void 0,H=xJ(Q,"error")||void 0;return{resourceMetadataUrl:J,scope:G,error:H}}function xJ(Q,X){let Y=Q.headers.get("WWW-Authenticate");if(!Y)return null;let W=new RegExp(`${X}=(?:"([^"]+)"|([^\\s,]+))`),$=Y.match(W);if($)return $[1]||$[2];return null}async function ty(Q,X,Y=fetch){let W=await ey(Q,"oauth-protected-resource",Y,{protocolVersion:X?.protocolVersion,metadataUrl:X?.resourceMetadataUrl});if(!W||W.status===404)throw await W?.body?.cancel(),Error("Resource server does not implement OAuth 2.0 Protected Resource Metadata.");if(!W.ok)throw await W.body?.cancel(),Error(`HTTP ${W.status} trying to load well-known OAuth protected resource metadata.`);return pL.parse(await W.json())}async function gJ(Q,X,Y=fetch){try{return await Y(Q,{headers:X})}catch(W){if(W instanceof TypeError)if(X)return gJ(Q,void 0,Y);else return;throw W}}function ay(Q,X="",Y={}){if(X.endsWith("/"))X=X.slice(0,-1);return Y.prependPathname?`${X}/.well-known/${Q}`:`/.well-known/${Q}${X}`}async function sL(Q,X,Y=fetch){return await gJ(Q,{"MCP-Protocol-Version":X},Y)}function sy(Q,X){return!Q||Q.status>=400&&Q.status<500&&X!=="/"}async function ey(Q,X,Y,W){let $=new URL(Q),J=W?.protocolVersion??O6,G;if(W?.metadataUrl)G=new URL(W.metadataUrl);else{let B=ay(X,$.pathname);G=new URL(B,W?.metadataServerUrl??$),G.search=$.search}let H=await sL(G,J,Y);if(!W?.metadataUrl&&sy(H,$.pathname)){let B=new URL(`/.well-known/${X}`,$);H=await sL(B,J,Y)}return H}function Qg(Q){let X=typeof Q==="string"?new URL(Q):Q,Y=X.pathname!=="/",W=[];if(!Y)return W.push({url:new URL("/.well-known/oauth-authorization-server",X.origin),type:"oauth"}),W.push({url:new URL("/.well-known/openid-configuration",X.origin),type:"oidc"}),W;let $=X.pathname;if($.endsWith("/"))$=$.slice(0,-1);return W.push({url:new URL(`/.well-known/oauth-authorization-server${$}`,X.origin),type:"oauth"}),W.push({url:new URL(`/.well-known/openid-configuration${$}`,X.origin),type:"oidc"}),W.push({url:new URL(`${$}/.well-known/openid-configuration`,X.origin),type:"oidc"}),W}async function Xg(Q,{fetchFn:X=fetch,protocolVersion:Y=O6}={}){let W={"MCP-Protocol-Version":Y,Accept:"application/json"},$=Qg(Q);for(let{url:J,type:G}of $){let H=await gJ(J,W,X);if(!H)continue;if(!H.ok){if(await H.body?.cancel(),H.status>=400&&H.status<500)continue;throw Error(`HTTP ${H.status} trying to load ${G==="oauth"?"OAuth":"OpenID provider"} metadata from ${J}`)}if(G==="oauth")return CJ.parse(await H.json());else return dL.parse(await H.json())}return}async function Yg(Q,{metadata:X,clientInformation:Y,redirectUrl:W,scope:$,state:J,resource:G}){let H;if(X){if(H=new URL(X.authorization_endpoint),!X.response_types_supported.includes(kJ))throw Error(`Incompatible auth server: does not support response type ${kJ}`);if(X.code_challenge_methods_supported&&!X.code_challenge_methods_supported.includes(vJ))throw Error(`Incompatible auth server: does not support code challenge method ${vJ}`)}else H=new URL("/authorize",Q);let B=await TJ(),z=B.code_verifier,K=B.code_challenge;if(H.searchParams.set("response_type",kJ),H.searchParams.set("client_id",Y.client_id),H.searchParams.set("code_challenge",K),H.searchParams.set("code_challenge_method",vJ),H.searchParams.set("redirect_uri",String(W)),J)H.searchParams.set("state",J);if($)H.searchParams.set("scope",$);if($?.includes("offline_access"))H.searchParams.append("prompt","consent");if(G)H.searchParams.set("resource",G.href);return{authorizationUrl:H,codeVerifier:z}}function Wg(Q,X,Y){return new URLSearchParams({grant_type:"authorization_code",code:Q,code_verifier:X,redirect_uri:String(Y)})}async function QO(Q,{metadata:X,tokenRequestParams:Y,clientInformation:W,addClientAuthentication:$,resource:J,fetchFn:G}){let H=X?.token_endpoint?new URL(X.token_endpoint):new URL("/token",Q),B=new Headers({"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"});if(J)Y.set("resource",J.href);if($)await $(B,Y,H,X);else if(W){let K=X?.token_endpoint_auth_methods_supported??[],V=cy(W,K);py(V,W,B,Y)}let z=await(G??fetch)(H,{method:"POST",headers:B,body:Y});if(!z.ok)throw await eL(z);return iL.parse(await z.json())}async function $g(Q,{metadata:X,clientInformation:Y,refreshToken:W,resource:$,addClientAuthentication:J,fetchFn:G}){let H=new URLSearchParams({grant_type:"refresh_token",refresh_token:W}),B=await QO(Q,{metadata:X,tokenRequestParams:H,clientInformation:Y,addClientAuthentication:J,resource:$,fetchFn:G});return{refresh_token:W,...B}}async function Jg(Q,X,{metadata:Y,resource:W,authorizationCode:$,fetchFn:J}={}){let G=Q.clientMetadata.scope,H;if(Q.prepareTokenRequest)H=await Q.prepareTokenRequest(G);if(!H){if(!$)throw Error("Either provider.prepareTokenRequest() or authorizationCode is required");if(!Q.redirectUrl)throw Error("redirectUrl is required for authorization_code flow");let z=await Q.codeVerifier();H=Wg($,z,Q.redirectUrl)}let B=await Q.clientInformation();return QO(X,{metadata:Y,tokenRequestParams:H,clientInformation:B??void 0,addClientAuthentication:Q.addClientAuthentication,resource:W,fetchFn:J})}async function Gg(Q,{metadata:X,clientMetadata:Y,fetchFn:W}){let $;if(X){if(!X.registration_endpoint)throw Error("Incompatible auth server: does not support dynamic client registration");$=new URL(X.registration_endpoint)}else $=new URL("/register",Q);let J=await(W??fetch)($,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(Y)});if(!J.ok)throw await eL(J);return oL.parse(await J.json())}class hJ extends Error{constructor(Q,X){super(Q),this.name="ParseError",this.type=X.type,this.field=X.field,this.value=X.value,this.line=X.line}}function fJ(Q){}function XO(Q){if(typeof Q=="function")throw TypeError("`callbacks` must be an object, got a function instead. Did you mean `{onEvent: fn}`?");let{onEvent:X=fJ,onError:Y=fJ,onRetry:W=fJ,onComment:$}=Q,J="",G=!0,H,B="",z="";function K(A){let L=G?A.replace(/^\xEF\xBB\xBF/,""):A,[O,M]=Hg(`${J}${L}`);for(let N of O)V(N);J=M,G=!1}function V(A){if(A===""){F();return}if(A.startsWith(":")){$&&$(A.slice(A.startsWith(": ")?2:1));return}let L=A.indexOf(":");if(L!==-1){let O=A.slice(0,L),M=A[L+1]===" "?2:1,N=A.slice(L+M);D(O,N,A);return}D(A,"",A)}function D(A,L,O){switch(A){case"event":z=L;break;case"data":B=`${B}${L}
|
|
49
|
+
`}class wJ{constructor(Q=fL.stdin,X=fL.stdout){this._stdin=Q,this._stdout=X,this._readBuffer=new jJ,this._started=!1,this._ondata=(Y)=>{this._readBuffer.append(Y),this.processReadBuffer()},this._onerror=(Y)=>{this.onerror?.(Y)}}async start(){if(this._started)throw Error("StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.");this._started=!0,this._stdin.on("data",this._ondata),this._stdin.on("error",this._onerror)}processReadBuffer(){while(!0)try{let Q=this._readBuffer.readMessage();if(Q===null)break;this.onmessage?.(Q)}catch(Q){this.onerror?.(Q)}}async close(){if(this._stdin.off("data",this._ondata),this._stdin.off("error",this._onerror),this._stdin.listenerCount("data")===0)this._stdin.pause();this._readBuffer.clear(),this.onclose?.()}send(Q){return new Promise((X)=>{let Y=gL(Q);if(this._stdout.write(Y))X();else this._stdout.once("drain",X)})}}import{readFileSync as Og}from"fs";import FY from"node:crypto";var uL="0123456789ABCDEFGHJKMNPQRSTVWXYZ",VY=32;var Ny=16,lL=10,hL=281474976710655;var z9;(function(Q){Q.Base32IncorrectEncoding="B32_ENC_INVALID",Q.DecodeTimeInvalidCharacter="DEC_TIME_CHAR",Q.DecodeTimeValueMalformed="DEC_TIME_MALFORMED",Q.EncodeTimeNegative="ENC_TIME_NEG",Q.EncodeTimeSizeExceeded="ENC_TIME_SIZE_EXCEED",Q.EncodeTimeValueMalformed="ENC_TIME_MALFORMED",Q.PRNGDetectFailure="PRNG_DETECT",Q.ULIDInvalid="ULID_INVALID",Q.Unexpected="UNEXPECTED",Q.UUIDInvalid="UUID_INVALID"})(z9||(z9={}));class $4 extends Error{constructor(Q,X){super(`${X} (${Q})`);this.name="ULIDError",this.code=Q}}function by(Q){let X=Math.floor(Q()*VY)%VY;return uL.charAt(X)}function Py(Q){let X=Zy(),Y=X&&(X.crypto||X.msCrypto)||(typeof FY<"u"?FY:null);if(typeof Y?.getRandomValues==="function")return()=>{let W=new Uint8Array(1);return Y.getRandomValues(W),W[0]/256};else if(typeof Y?.randomBytes==="function")return()=>Y.randomBytes(1).readUInt8()/256;else if(FY?.randomBytes)return()=>FY.randomBytes(1).readUInt8()/256;throw new $4(z9.PRNGDetectFailure,"Failed to find a reliable PRNG")}function Zy(){if(Sy())return self;if(typeof window<"u")return window;if(typeof global<"u")return global;if(typeof globalThis<"u")return globalThis;return null}function Ry(Q,X){let Y="";for(;Q>0;Q--)Y=by(X)+Y;return Y}function Ey(Q,X=lL){if(isNaN(Q))throw new $4(z9.EncodeTimeValueMalformed,`Time must be a number: ${Q}`);else if(Q>hL)throw new $4(z9.EncodeTimeSizeExceeded,`Cannot encode a time larger than ${hL}: ${Q}`);else if(Q<0)throw new $4(z9.EncodeTimeNegative,`Time must be positive: ${Q}`);else if(Number.isInteger(Q)===!1)throw new $4(z9.EncodeTimeValueMalformed,`Time must be an integer: ${Q}`);let Y,W="";for(let $=X;$>0;$--)Y=Q%VY,W=uL.charAt(Y)+W,Q=(Q-Y)/VY;return W}function Sy(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}function y1(Q,X){let Y=X||Py(),W=!Q||isNaN(Q)?Date.now():Q;return Ey(W,lL)+Ry(Ny,Y)}class MJ{configs=new Map;logger;constructor(Q={}){this.logger=Q.logger}addConfig(Q,X,Y){let W=this.configs.has(Q);return this.configs.set(Q,{name:Q,url:X,addedAt:new Date,addedBy:Y}),this.logger?.info(W?"server_config_updated":"server_config_added",{server:Q,url:X,addedBy:Y}),!W}getConfig(Q){return this.configs.get(Q)}listConfigs(){return Array.from(this.configs.values())}removeConfig(Q){let X=this.configs.delete(Q);if(X)this.logger?.info("server_config_removed",{server:Q});return X}hasConfig(Q){return this.configs.has(Q)}get size(){return this.configs.size}clear(){this.configs.clear(),this.logger?.info("server_configs_cleared",{})}}var Iy={maxEvents:1000,retentionMs:1800000,cleanupIntervalMs:300000};class NJ{events=[];config;logger;lastDeliveredId=null;waiters=[];cleanupIntervalHandle=null;constructor(Q={},X){this.config={...Iy,...Q},this.logger=X,this.startCleanupInterval()}addEvent(Q,X,Y){let W=y1(),$={id:W,type:Q,server:X,data:Y,createdAt:new Date,sentViaSSE:!1};this.events.push($);while(this.events.length>this.config.maxEvents)this.events.shift();return this.logger?.debug("event_added",{id:W,type:Q,server:X}),this.wakeWaiters($),W}hasNewEvents(){if(this.lastDeliveredId===null)return this.events.length>0;let Q=this.events.findIndex((X)=>X.id===this.lastDeliveredId);if(Q===-1)return this.events.length>0;return Q<this.events.length-1}getNewEvents(){if(this.events.length===0)return[];let Q=0;if(this.lastDeliveredId!==null){let Y=this.events.findIndex((W)=>W.id===this.lastDeliveredId);if(Y!==-1)Q=Y+1}let X=this.events.slice(Q);if(X.length>0){let Y=X[X.length-1];if(Y)this.lastDeliveredId=Y.id}return X}getEventsAfter(Q){if(Q===null)return[...this.events];let X=this.events.findIndex((Y)=>Y.id===Q);if(X===-1)return[...this.events];return this.events.slice(X+1)}markSent(Q){let X=this.events.find((Y)=>Y.id===Q);if(X)X.sentViaSSE=!0}waitForActivity(Q){return new Promise((X)=>{let Y=setTimeout(()=>{let W=this.waiters.findIndex(($)=>$.timeoutHandle===Y);if(W!==-1)this.waiters.splice(W,1);X(null)},Q);this.waiters.push({resolve:X,timeoutHandle:Y})})}wakeWaiters(Q){let X=this.waiters;this.waiters=[];for(let Y of X)clearTimeout(Y.timeoutHandle),Y.resolve(Q)}startCleanupInterval(){this.cleanupIntervalHandle=setInterval(()=>{this.runCleanup()},this.config.cleanupIntervalMs)}runCleanup(){let Q=Date.now()-this.config.retentionMs,X=0;while(this.events.length>0){let Y=this.events[0];if(Y&&Y.createdAt.getTime()<Q)this.events.shift(),X++;else break}if(X>0)this.logger?.debug("events_cleaned",{removed:X,remaining:this.events.length})}shutdown(){if(this.cleanupIntervalHandle)clearInterval(this.cleanupIntervalHandle),this.cleanupIntervalHandle=null;for(let Q of this.waiters)clearTimeout(Q.timeoutHandle),Q.resolve(null);this.waiters=[]}}var Ty={defaultTtlMs:600000,completedRetentionMs:300000,cleanupIntervalMs:60000};class bJ{tasks=new Map;eventSystem;config;cleanupIntervalHandle=null;constructor(Q,X={}){this.eventSystem=Q,this.config={...Ty,...X},this.startCleanupInterval()}createTask(Q,X,Y,W){let $=y1(),J=new Date,G={taskId:$,server:Q,toolName:X,args:Y,status:"working",createdAt:J,lastUpdatedAt:J,ttl:W??this.config.defaultTtlMs};return this.tasks.set($,G),this.eventSystem.addEvent("task_created",Q,{taskId:$,toolName:X,args:Y}),G}completeTask(Q,X){let Y=this.tasks.get(Q);if(Y?.status!=="working")return;Y.status="completed",Y.result=X,Y.lastUpdatedAt=new Date,this.scheduleTaskCleanup(Y),this.eventSystem.addEvent("task_completed",Y.server,{taskId:Q,toolName:Y.toolName,result:X})}failTask(Q,X){let Y=this.tasks.get(Q);if(Y?.status!=="working")return;Y.status="failed",Y.error=X,Y.lastUpdatedAt=new Date,this.scheduleTaskCleanup(Y),this.eventSystem.addEvent("task_failed",Y.server,{taskId:Q,toolName:Y.toolName,error:X})}cancelTask(Q){let X=this.tasks.get(Q);if(X?.status!=="working")return!1;return X.status="cancelled",X.lastUpdatedAt=new Date,this.scheduleTaskCleanup(X),this.eventSystem.addEvent("task_cancelled",X.server,{taskId:Q,toolName:X.toolName}),!0}getTask(Q){let X=this.tasks.get(Q);if(!X)return;let{_cleanupTimeoutHandle:Y,...W}=X;return W}getTasksForServer(Q){return Array.from(this.tasks.values()).filter((X)=>X.server===Q).map((X)=>({taskId:X.taskId,server:X.server,toolName:X.toolName,args:X.args,status:X.status,result:X.result,error:X.error,createdAt:X.createdAt,lastUpdatedAt:X.lastUpdatedAt,ttl:X.ttl}))}getAllTasks(Q=!1){let X=["completed","failed","cancelled","expired"];return Array.from(this.tasks.values()).filter((Y)=>Q||!X.includes(Y.status)).map((Y)=>({taskId:Y.taskId,server:Y.server,toolName:Y.toolName,args:Y.args,status:Y.status,result:Y.result,error:Y.error,createdAt:Y.createdAt,lastUpdatedAt:Y.lastUpdatedAt,ttl:Y.ttl}))}getWorkingTasksForServer(Q){return Array.from(this.tasks.values()).filter((X)=>X.server===Q&&X.status==="working").map((X)=>({taskId:X.taskId,toolName:X.toolName,status:X.status}))}scheduleTaskCleanup(Q){if(Q._cleanupTimeoutHandle)clearTimeout(Q._cleanupTimeoutHandle);Q._cleanupTimeoutHandle=setTimeout(()=>{this.tasks.delete(Q.taskId)},this.config.completedRetentionMs)}startCleanupInterval(){this.cleanupIntervalHandle=setInterval(()=>{this.runCleanup()},this.config.cleanupIntervalMs)}runCleanup(){let Q=Date.now();for(let X of this.tasks.values()){if(X.status!=="working")continue;if(Q-X.createdAt.getTime()>=X.ttl)X.status="expired",X.error=`Task expired after ${String(X.ttl)}ms TTL`,X.lastUpdatedAt=new Date,this.eventSystem.addEvent("task_expired",X.server,{taskId:X.taskId,toolName:X.toolName,ttl:X.ttl}),this.scheduleTaskCleanup(X)}}shutdown(){if(this.cleanupIntervalHandle)clearInterval(this.cleanupIntervalHandle),this.cleanupIntervalHandle=null;for(let Q of this.tasks.values())if(Q._cleanupTimeoutHandle)clearTimeout(Q._cleanupTimeoutHandle)}}var Cy={maxNotificationsPerServer:100,maxLogsPerServer:500};class PJ{buffers=new Map;eventSystem;config;constructor(Q,X={}){this.eventSystem=Q,this.config={...Cy,...X}}addNotification(Q){let X=this.getOrCreateBuffers(Q.server);if(X.notifications.length>=this.config.maxNotificationsPerServer)X.notifications.shift();X.notifications.push(Q),this.eventSystem.addEvent("notification",Q.server,{method:Q.method,params:Q.params,timestamp:Q.timestamp.toISOString()})}addLog(Q){let X=this.getOrCreateBuffers(Q.server);if(X.logs.length>=this.config.maxLogsPerServer)X.logs.shift();X.logs.push(Q)}getAndClearNotifications(){let Q=[];for(let X of this.buffers.values())Q.push(...X.notifications),X.notifications=[];return Q}getAndClearLogs(){let Q=[];for(let X of this.buffers.values())Q.push(...X.logs),X.logs=[];return Q}getNotificationsForServer(Q){let X=this.buffers.get(Q);return X?[...X.notifications]:[]}getLogsForServer(Q){let X=this.buffers.get(Q);return X?[...X.logs]:[]}getNotificationCount(){let Q=0;for(let X of this.buffers.values())Q+=X.notifications.length;return Q}getLogCount(){let Q=0;for(let X of this.buffers.values())Q+=X.logs.length;return Q}clearServer(Q){this.buffers.delete(Q)}getOrCreateBuffers(Q){let X=this.buffers.get(Q);if(!X)X={notifications:[],logs:[]},this.buffers.set(Q,X);return X}}var ky={defaultTimeoutMs:600000};class ZJ{samplingRequests=new Map;elicitationRequests=new Map;eventSystem;config;constructor(Q,X={}){this.eventSystem=Q,this.config={...ky,...X}}addSamplingRequest(Q,X,Y,W){let $=y1(),J=setTimeout(()=>{let H=this.samplingRequests.get($);if(H)this.samplingRequests.delete($),this.eventSystem.addEvent("sampling_expired",Q,{requestId:$,reason:`Timed out after ${String(this.config.defaultTimeoutMs)}ms`}),H.reject(Error(`Sampling request timed out after ${String(this.config.defaultTimeoutMs)}ms`))},this.config.defaultTimeoutMs),G={requestId:$,server:Q,timestamp:new Date,params:X,resolve:Y,reject:W,timeoutHandle:J};return this.samplingRequests.set($,G),this.eventSystem.addEvent("sampling_request",Q,{requestId:$,params:X}),$}addElicitationRequest(Q,X,Y,W){let $=y1(),J=setTimeout(()=>{let H=this.elicitationRequests.get($);if(H)this.elicitationRequests.delete($),this.eventSystem.addEvent("elicitation_expired",Q,{requestId:$,reason:`Timed out after ${String(this.config.defaultTimeoutMs)}ms`}),H.reject(Error(`Elicitation request timed out after ${String(this.config.defaultTimeoutMs)}ms`))},this.config.defaultTimeoutMs),G={requestId:$,server:Q,timestamp:new Date,params:X,resolve:Y,reject:W,timeoutHandle:J};return this.elicitationRequests.set($,G),this.eventSystem.addEvent("elicitation_request",Q,{requestId:$,params:X}),$}respondToSampling(Q,X){let Y=this.samplingRequests.get(Q);if(!Y)throw Error(`Sampling request '${Q}' not found or already completed`);clearTimeout(Y.timeoutHandle),this.samplingRequests.delete(Q),Y.resolve(X)}cancelSampling(Q,X="User cancelled"){let Y=this.samplingRequests.get(Q);if(!Y)throw Error(`Sampling request '${Q}' not found or already completed`);clearTimeout(Y.timeoutHandle),this.samplingRequests.delete(Q),this.eventSystem.addEvent("sampling_expired",Y.server,{requestId:Q,reason:X}),Y.reject(Error(X))}respondToElicitation(Q,X){let Y=this.elicitationRequests.get(Q);if(!Y)throw Error(`Elicitation request '${Q}' not found or already completed`);clearTimeout(Y.timeoutHandle),this.elicitationRequests.delete(Q),Y.resolve(X)}cancelElicitation(Q,X="User cancelled"){let Y=this.elicitationRequests.get(Q);if(!Y)throw Error(`Elicitation request '${Q}' not found or already completed`);clearTimeout(Y.timeoutHandle),this.elicitationRequests.delete(Q),this.eventSystem.addEvent("elicitation_expired",Y.server,{requestId:Q,reason:X}),Y.reject(Error(X))}getPendingSamplingRequests(){return Array.from(this.samplingRequests.values()).map((Q)=>({requestId:Q.requestId,server:Q.server,timestamp:Q.timestamp,params:Q.params}))}getPendingElicitationRequests(){return Array.from(this.elicitationRequests.values()).map((Q)=>({requestId:Q.requestId,server:Q.server,timestamp:Q.timestamp,params:Q.params}))}getRequestsForServer(Q){return{sampling:this.getPendingSamplingRequests().filter((X)=>X.server===Q),elicitation:this.getPendingElicitationRequests().filter((X)=>X.server===Q)}}hasPendingRequests(){return this.samplingRequests.size>0||this.elicitationRequests.size>0}rejectRequestsForServer(Q,X){for(let[Y,W]of this.samplingRequests)if(W.server===Q)clearTimeout(W.timeoutHandle),this.samplingRequests.delete(Y),this.eventSystem.addEvent("sampling_expired",Q,{requestId:Y,reason:X}),W.reject(Error(X));for(let[Y,W]of this.elicitationRequests)if(W.server===Q)clearTimeout(W.timeoutHandle),this.elicitationRequests.delete(Y),this.eventSystem.addEvent("elicitation_expired",Q,{requestId:Y,reason:X}),W.reject(Error(X))}shutdown(){for(let Q of this.samplingRequests.values())clearTimeout(Q.timeoutHandle),Q.reject(Error("PendingRequestsManager shutting down"));this.samplingRequests.clear();for(let Q of this.elicitationRequests.values())clearTimeout(Q.timeoutHandle),Q.reject(Error("PendingRequestsManager shutting down"));this.elicitationRequests.clear()}}var vy={maxActiveTimers:100,maxDurationMs:86400000,retentionMs:300000};class RJ{timers=new Map;expiredBuffer=[];eventSystem;config;constructor(Q,X={}){this.eventSystem=Q,this.config={...vy,...X}}createTimer(Q,X,Y=!1){if(this.getActiveTimers().length>=this.config.maxActiveTimers)throw Error(`Maximum active timers (${String(this.config.maxActiveTimers)}) exceeded`);if(Q<=0)throw Error("Duration must be positive");if(Q>this.config.maxDurationMs)throw Error(`Duration exceeds maximum (${String(this.config.maxDurationMs)}ms)`);let $=y1(),J=new Date,G=new Date(J.getTime()+Q),H={id:$,durationMs:Q,message:X,createdAt:J,expiresAt:G,status:"active",interval:Y,fireCount:0};if(Y)H._intervalHandle=setInterval(()=>{this.fireIntervalTimer($)},Q);else H._timeoutHandle=setTimeout(()=>{this.expireTimer($)},Q);return this.timers.set($,H),this.toPublicTimer(H)}getTimer(Q){let X=this.timers.get(Q);if(!X)return;return this.toPublicTimer(X)}deleteTimer(Q){let X=this.timers.get(Q);if(!X)return;if(X._timeoutHandle)clearTimeout(X._timeoutHandle),X._timeoutHandle=void 0;if(X._intervalHandle)clearInterval(X._intervalHandle),X._intervalHandle=void 0;return X.status="deleted",this.scheduleCleanup(X),this.toPublicTimer(X)}getAllTimers(Q=!1){let X=Array.from(this.timers.values());return(Q?X:X.filter((W)=>W.status==="active")).map((W)=>this.toPublicTimer(W))}getActiveTimers(){return Array.from(this.timers.values()).filter((Q)=>Q.status==="active").map((Q)=>this.toPublicTimer(Q))}getAndClearExpired(){let Q=[...this.expiredBuffer];return this.expiredBuffer.length=0,Q}hasExpired(){return this.expiredBuffer.length>0}shutdown(){for(let Q of this.timers.values()){if(Q._timeoutHandle)clearTimeout(Q._timeoutHandle);if(Q._intervalHandle)clearInterval(Q._intervalHandle)}this.timers.clear(),this.expiredBuffer.length=0}expireTimer(Q){let X=this.timers.get(Q);if(!X?.status||X.status!=="active")return;X.status="expired",X._timeoutHandle=void 0,X.fireCount++,this.expiredBuffer.push({id:X.id,message:X.message,expiredAt:new Date().toISOString()}),this.eventSystem.addEvent("timer_expired","emceepee",{timerId:X.id,message:X.message}),this.scheduleCleanup(X)}fireIntervalTimer(Q){let X=this.timers.get(Q);if(!X?.status||X.status!=="active")return;X.fireCount++,X.expiresAt=new Date(Date.now()+X.durationMs),this.expiredBuffer.push({id:X.id,message:X.message,expiredAt:new Date().toISOString()}),this.eventSystem.addEvent("timer_expired","emceepee",{timerId:X.id,message:X.message,fireCount:X.fireCount,interval:!0})}scheduleCleanup(Q){setTimeout(()=>{this.timers.delete(Q.id)},this.config.retentionMs)}toPublicTimer(Q){return{id:Q.id,durationMs:Q.durationMs,message:Q.message,createdAt:Q.createdAt,expiresAt:Q.expiresAt,status:Q.status,interval:Q.interval,fireCount:Q.fireCount}}}class EJ{sessionId;createdAt;lastActivityAt;backendConnections=new Map;eventSystem;taskManager;pendingRequests;bufferManager;timerManager;logger;constructor(Q,X={},Y){this.sessionId=Q,this.createdAt=new Date,this.lastActivityAt=new Date,this.logger=Y,this.eventSystem=new NJ(X.eventSystemConfig,Y),this.taskManager=new bJ(this.eventSystem,X.taskConfig),this.pendingRequests=new ZJ(this.eventSystem,X.requestConfig),this.bufferManager=new PJ(this.eventSystem,X.bufferConfig),this.timerManager=new RJ(this.eventSystem,X.timerConfig)}touch(){this.lastActivityAt=new Date}getConnection(Q){return this.backendConnections.get(Q)}isConnectedTo(Q){return this.backendConnections.get(Q)?.status==="connected"}listConnectedServers(){return Array.from(this.backendConnections.entries()).filter(([,Q])=>Q.status==="connected").map(([Q])=>Q)}listConnections(){return Array.from(this.backendConnections.entries()).map(([Q,X])=>({name:Q,status:X.status,connectedAt:X.connectedAt,lastError:X.lastError}))}setConnectionStatus(Q,X,Y){let W=this.backendConnections.get(Q);if(W){if(W.status=X,X==="connected")W.connectedAt=new Date,W.lastError=void 0;else if(X==="error"&&Y)W.lastError=Y}}addConnection(Q,X){this.backendConnections.set(Q,{client:X,status:"connecting"})}removeConnection(Q){return this.backendConnections.delete(Q)}async cleanup(){this.logger?.info("session_cleanup_start",{sessionId:this.sessionId}),this.pendingRequests.shutdown(),this.taskManager.shutdown(),this.timerManager.shutdown(),this.eventSystem.shutdown();for(let[Q,X]of this.backendConnections)try{await X.client.disconnect(),this.logger?.debug("session_backend_disconnected",{sessionId:this.sessionId,server:Q})}catch(Y){this.logger?.debug("session_backend_disconnect_error",{sessionId:this.sessionId,server:Q,error:Y instanceof Error?Y.message:String(Y)})}this.backendConnections.clear(),this.logger?.info("session_cleanup_complete",{sessionId:this.sessionId})}}class SJ{constructor(Q){this._client=Q}async*callToolStream(Q,X=j6,Y){let W=this._client,$={...Y,task:Y?.task??(W.isToolTask(Q.name)?{}:void 0)},J=W.requestStream({method:"tools/call",params:Q},X,$),G=W.getToolOutputValidator(Q.name);for await(let H of J){if(H.type==="result"&&G){let B=H.result;if(!B.structuredContent&&!B.isError){yield{type:"error",error:new S(k.InvalidRequest,`Tool ${Q.name} has an output schema but did not return structured content`)};return}if(B.structuredContent)try{let z=G(B.structuredContent);if(!z.valid){yield{type:"error",error:new S(k.InvalidParams,`Structured content does not match the tool's output schema: ${z.errorMessage}`)};return}}catch(z){if(z instanceof S){yield{type:"error",error:z};return}yield{type:"error",error:new S(k.InvalidParams,`Failed to validate structured content: ${z instanceof Error?z.message:String(z)}`)};return}}yield H}}async getTask(Q,X){return this._client.getTask({taskId:Q},X)}async getTaskResult(Q,X,Y){return this._client.getTaskResult({taskId:Q},X,Y)}async listTasks(Q,X){return this._client.listTasks(Q?{cursor:Q}:void 0,X)}async cancelTask(Q,X){return this._client.cancelTask({taskId:Q},X)}requestStream(Q,X,Y){return this._client.requestStream(Q,X,Y)}}function qY(Q,X){if(!Q||X===null||typeof X!=="object")return;if(Q.type==="object"&&Q.properties&&typeof Q.properties==="object"){let Y=X,W=Q.properties;for(let $ of Object.keys(W)){let J=W[$];if(Y[$]===void 0&&Object.prototype.hasOwnProperty.call(J,"default"))Y[$]=J.default;if(Y[$]!==void 0)qY(J,Y[$])}}if(Array.isArray(Q.anyOf)){for(let Y of Q.anyOf)if(typeof Y!=="boolean")qY(Y,X)}if(Array.isArray(Q.oneOf)){for(let Y of Q.oneOf)if(typeof Y!=="boolean")qY(Y,X)}}function _y(Q){if(!Q)return{supportsFormMode:!1,supportsUrlMode:!1};let X=Q.form!==void 0,Y=Q.url!==void 0;return{supportsFormMode:X||!X&&!Y,supportsUrlMode:Y}}class AY extends o4{constructor(Q,X){super(X);if(this._clientInfo=Q,this._cachedToolOutputValidators=new Map,this._cachedKnownTaskTools=new Set,this._cachedRequiredTaskTools=new Set,this._listChangedDebounceTimers=new Map,this._capabilities=X?.capabilities??{},this._jsonSchemaValidator=X?.jsonSchemaValidator??new u8,X?.listChanged)this._pendingListChangedConfig=X.listChanged}_setupListChangedHandlers(Q){if(Q.tools&&this._serverCapabilities?.tools?.listChanged)this._setupListChangedHandler("tools",m4,Q.tools,async()=>{return(await this.listTools()).tools});if(Q.prompts&&this._serverCapabilities?.prompts?.listChanged)this._setupListChangedHandler("prompts",l4,Q.prompts,async()=>{return(await this.listPrompts()).prompts});if(Q.resources&&this._serverCapabilities?.resources?.listChanged)this._setupListChangedHandler("resources",u4,Q.resources,async()=>{return(await this.listResources()).resources})}get experimental(){if(!this._experimental)this._experimental={tasks:new SJ(this)};return this._experimental}registerCapabilities(Q){if(this.transport)throw Error("Cannot register capabilities after connecting to transport");this._capabilities=dQ(this._capabilities,Q)}setRequestHandler(Q,X){let W=m1(Q)?.method;if(!W)throw Error("Schema is missing a method literal");let $;if(s0(W)){let G=W;$=G._zod?.def?.value??G.value}else{let G=W;$=G._def?.value??G.value}if(typeof $!=="string")throw Error("Schema method literal must be a string");let J=$;if(J==="elicitation/create"){let G=async(H,B)=>{let z=c0(i4,H);if(!z.success){let O=z.error instanceof Error?z.error.message:String(z.error);throw new S(k.InvalidParams,`Invalid elicitation request: ${O}`)}let{params:K}=z.data;K.mode=K.mode??"form";let{supportsFormMode:V,supportsUrlMode:D}=_y(this._capabilities.elicitation);if(K.mode==="form"&&!V)throw new S(k.InvalidParams,"Client does not support form-mode elicitation requests");if(K.mode==="url"&&!D)throw new S(k.InvalidParams,"Client does not support URL-mode elicitation requests");let F=await Promise.resolve(X(H,B));if(K.task){let O=c0(e1,F);if(!O.success){let M=O.error instanceof Error?O.error.message:String(O.error);throw new S(k.InvalidParams,`Invalid task creation result: ${M}`)}return O.data}let q=c0(y9,F);if(!q.success){let O=q.error instanceof Error?q.error.message:String(q.error);throw new S(k.InvalidParams,`Invalid elicitation result: ${O}`)}let A=q.data,L=K.mode==="form"?K.requestedSchema:void 0;if(K.mode==="form"&&A.action==="accept"&&A.content&&L){if(this._capabilities.elicitation?.form?.applyDefaults)try{qY(L,A.content)}catch{}}return A};return super.setRequestHandler(Q,G)}if(J==="sampling/createMessage"){let G=async(H,B)=>{let z=c0(p4,H);if(!z.success){let F=z.error instanceof Error?z.error.message:String(z.error);throw new S(k.InvalidParams,`Invalid sampling request: ${F}`)}let{params:K}=z.data,V=await Promise.resolve(X(H,B));if(K.task){let F=c0(e1,V);if(!F.success){let q=F.error instanceof Error?F.error.message:String(F.error);throw new S(k.InvalidParams,`Invalid task creation result: ${q}`)}return F.data}let D=c0(d4,V);if(!D.success){let F=D.error instanceof Error?D.error.message:String(D.error);throw new S(k.InvalidParams,`Invalid sampling result: ${F}`)}return D.data};return super.setRequestHandler(Q,G)}return super.setRequestHandler(Q,X)}assertCapability(Q,X){if(!this._serverCapabilities?.[Q])throw Error(`Server does not support ${Q} (required for ${X})`)}async connect(Q,X){if(await super.connect(Q),Q.sessionId!==void 0)return;try{let Y=await this.request({method:"initialize",params:{protocolVersion:O6,capabilities:this._capabilities,clientInfo:this._clientInfo}},t7,X);if(Y===void 0)throw Error(`Server sent invalid initialize result: ${Y}`);if(!MQ.includes(Y.protocolVersion))throw Error(`Server's protocol version is not supported: ${Y.protocolVersion}`);if(this._serverCapabilities=Y.capabilities,this._serverVersion=Y.serverInfo,Q.setProtocolVersion)Q.setProtocolVersion(Y.protocolVersion);if(this._instructions=Y.instructions,await this.notification({method:"notifications/initialized"}),this._pendingListChangedConfig)this._setupListChangedHandlers(this._pendingListChangedConfig),this._pendingListChangedConfig=void 0}catch(Y){throw this.close(),Y}}getServerCapabilities(){return this._serverCapabilities}getServerVersion(){return this._serverVersion}getInstructions(){return this._instructions}assertCapabilityForMethod(Q){switch(Q){case"logging/setLevel":if(!this._serverCapabilities?.logging)throw Error(`Server does not support logging (required for ${Q})`);break;case"prompts/get":case"prompts/list":if(!this._serverCapabilities?.prompts)throw Error(`Server does not support prompts (required for ${Q})`);break;case"resources/list":case"resources/templates/list":case"resources/read":case"resources/subscribe":case"resources/unsubscribe":if(!this._serverCapabilities?.resources)throw Error(`Server does not support resources (required for ${Q})`);if(Q==="resources/subscribe"&&!this._serverCapabilities.resources.subscribe)throw Error(`Server does not support resource subscriptions (required for ${Q})`);break;case"tools/call":case"tools/list":if(!this._serverCapabilities?.tools)throw Error(`Server does not support tools (required for ${Q})`);break;case"completion/complete":if(!this._serverCapabilities?.completions)throw Error(`Server does not support completions (required for ${Q})`);break;case"initialize":break;case"ping":break}}assertNotificationCapability(Q){switch(Q){case"notifications/roots/list_changed":if(!this._capabilities.roots?.listChanged)throw Error(`Client does not support roots list changed notifications (required for ${Q})`);break;case"notifications/initialized":break;case"notifications/cancelled":break;case"notifications/progress":break}}assertRequestHandlerCapability(Q){if(!this._capabilities)return;switch(Q){case"sampling/createMessage":if(!this._capabilities.sampling)throw Error(`Client does not support sampling capability (required for ${Q})`);break;case"elicitation/create":if(!this._capabilities.elicitation)throw Error(`Client does not support elicitation capability (required for ${Q})`);break;case"roots/list":if(!this._capabilities.roots)throw Error(`Client does not support roots capability (required for ${Q})`);break;case"tasks/get":case"tasks/list":case"tasks/result":case"tasks/cancel":if(!this._capabilities.tasks)throw Error(`Client does not support tasks capability (required for ${Q})`);break;case"ping":break}}assertTaskCapability(Q){zY(this._serverCapabilities?.tasks?.requests,Q,"Server")}assertTaskHandlerCapability(Q){if(!this._capabilities)return;KY(this._capabilities.tasks?.requests,Q,"Client")}async ping(Q){return this.request({method:"ping"},s1,Q)}async complete(Q,X){return this.request({method:"completion/complete",params:Q},q5,X)}async setLoggingLevel(Q,X){return this.request({method:"logging/setLevel",params:{level:Q}},s1,X)}async getPrompt(Q,X){return this.request({method:"prompts/get",params:Q},B5,X)}async listPrompts(Q,X){return this.request({method:"prompts/list",params:Q},W5,X)}async listResources(Q,X){return this.request({method:"resources/list",params:Q},s7,X)}async listResourceTemplates(Q,X){return this.request({method:"resources/templates/list",params:Q},e7,X)}async readResource(Q,X){return this.request({method:"resources/read",params:Q},X5,X)}async subscribeResource(Q,X){return this.request({method:"resources/subscribe",params:Q},s1,X)}async unsubscribeResource(Q,X){return this.request({method:"resources/unsubscribe",params:Q},s1,X)}async callTool(Q,X=j6,Y){if(this.isToolTaskRequired(Q.name))throw new S(k.InvalidRequest,`Tool "${Q.name}" requires task-based execution. Use client.experimental.tasks.callToolStream() instead.`);let W=await this.request({method:"tools/call",params:Q},X,Y),$=this.getToolOutputValidator(Q.name);if($){if(!W.structuredContent&&!W.isError)throw new S(k.InvalidRequest,`Tool ${Q.name} has an output schema but did not return structured content`);if(W.structuredContent)try{let J=$(W.structuredContent);if(!J.valid)throw new S(k.InvalidParams,`Structured content does not match the tool's output schema: ${J.errorMessage}`)}catch(J){if(J instanceof S)throw J;throw new S(k.InvalidParams,`Failed to validate structured content: ${J instanceof Error?J.message:String(J)}`)}}return W}isToolTask(Q){if(!this._serverCapabilities?.tasks?.requests?.tools?.call)return!1;return this._cachedKnownTaskTools.has(Q)}isToolTaskRequired(Q){return this._cachedRequiredTaskTools.has(Q)}cacheToolMetadata(Q){this._cachedToolOutputValidators.clear(),this._cachedKnownTaskTools.clear(),this._cachedRequiredTaskTools.clear();for(let X of Q){if(X.outputSchema){let W=this._jsonSchemaValidator.getValidator(X.outputSchema);this._cachedToolOutputValidators.set(X.name,W)}let Y=X.execution?.taskSupport;if(Y==="required"||Y==="optional")this._cachedKnownTaskTools.add(X.name);if(Y==="required")this._cachedRequiredTaskTools.add(X.name)}}getToolOutputValidator(Q){return this._cachedToolOutputValidators.get(Q)}async listTools(Q,X){let Y=await this.request({method:"tools/list",params:Q},z5,X);return this.cacheToolMetadata(Y.tools),Y}_setupListChangedHandler(Q,X,Y,W){let $=A3.safeParse(Y);if(!$.success)throw Error(`Invalid ${Q} listChanged options: ${$.error.message}`);if(typeof Y.onChanged!=="function")throw Error(`Invalid ${Q} listChanged options: onChanged must be a function`);let{autoRefresh:J,debounceMs:G}=$.data,{onChanged:H}=Y,B=async()=>{if(!J){H(null,null);return}try{let K=await W();H(null,K)}catch(K){let V=K instanceof Error?K:Error(String(K));H(V,null)}},z=()=>{if(G){let K=this._listChangedDebounceTimers.get(Q);if(K)clearTimeout(K);let V=setTimeout(B,G);this._listChangedDebounceTimers.set(Q,V)}else B()};this.setNotificationHandler(X,z)}async sendRootsListChanged(){return this.notification({method:"notifications/roots/list_changed"})}}function DY(Q){if(!Q)return{};if(Q instanceof Headers)return Object.fromEntries(Q.entries());if(Array.isArray(Q))return Object.fromEntries(Q);return{...Q}}function mL(Q=fetch,X){if(!X)return Q;return async(Y,W)=>{let $={...X,...W,headers:W?.headers?{...DY(X.headers),...DY(W.headers)}:X.headers};return Q(Y,$)}}var IJ;IJ=globalThis.crypto?.webcrypto??globalThis.crypto??import("node:crypto").then((Q)=>Q.webcrypto);async function xy(Q){return(await IJ).getRandomValues(new Uint8Array(Q))}async function yy(Q){let Y=Math.pow(2,8)-Math.pow(2,8)%66,W="";while(W.length<Q){let $=await xy(Q-W.length);for(let J of $)if(J<Y)W+="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~"[J%66]}return W}async function gy(Q){return await yy(Q)}async function fy(Q){let X=await(await IJ).subtle.digest("SHA-256",new TextEncoder().encode(Q));return btoa(String.fromCharCode(...new Uint8Array(X))).replace(/\//g,"_").replace(/\+/g,"-").replace(/=/g,"")}async function TJ(Q){if(!Q)Q=43;if(Q<43||Q>128)throw`Expected a length between 43 and 128. Received ${Q}.`;let X=await gy(Q),Y=await fy(X);return{code_verifier:X,code_challenge:Y}}var f0=lH().superRefine((Q,X)=>{if(!URL.canParse(Q))return X.addIssue({code:sH.custom,message:"URL must be parseable",fatal:!0}),t8}).refine((Q)=>{let X=new URL(Q);return X.protocol!=="javascript:"&&X.protocol!=="data:"&&X.protocol!=="vbscript:"},{message:"URL cannot use javascript:, data:, or vbscript: scheme"}),pL=T0({resource:U().url(),authorization_servers:E(f0).optional(),jwks_uri:U().url().optional(),scopes_supported:E(U()).optional(),bearer_methods_supported:E(U()).optional(),resource_signing_alg_values_supported:E(U()).optional(),resource_name:U().optional(),resource_documentation:U().optional(),resource_policy_uri:U().url().optional(),resource_tos_uri:U().url().optional(),tls_client_certificate_bound_access_tokens:H0().optional(),authorization_details_types_supported:E(U()).optional(),dpop_signing_alg_values_supported:E(U()).optional(),dpop_bound_access_tokens_required:H0().optional()}),CJ=T0({issuer:U(),authorization_endpoint:f0,token_endpoint:f0,registration_endpoint:f0.optional(),scopes_supported:E(U()).optional(),response_types_supported:E(U()),response_modes_supported:E(U()).optional(),grant_types_supported:E(U()).optional(),token_endpoint_auth_methods_supported:E(U()).optional(),token_endpoint_auth_signing_alg_values_supported:E(U()).optional(),service_documentation:f0.optional(),revocation_endpoint:f0.optional(),revocation_endpoint_auth_methods_supported:E(U()).optional(),revocation_endpoint_auth_signing_alg_values_supported:E(U()).optional(),introspection_endpoint:U().optional(),introspection_endpoint_auth_methods_supported:E(U()).optional(),introspection_endpoint_auth_signing_alg_values_supported:E(U()).optional(),code_challenge_methods_supported:E(U()).optional(),client_id_metadata_document_supported:H0().optional()}),hy=T0({issuer:U(),authorization_endpoint:f0,token_endpoint:f0,userinfo_endpoint:f0.optional(),jwks_uri:f0,registration_endpoint:f0.optional(),scopes_supported:E(U()).optional(),response_types_supported:E(U()),response_modes_supported:E(U()).optional(),grant_types_supported:E(U()).optional(),acr_values_supported:E(U()).optional(),subject_types_supported:E(U()),id_token_signing_alg_values_supported:E(U()),id_token_encryption_alg_values_supported:E(U()).optional(),id_token_encryption_enc_values_supported:E(U()).optional(),userinfo_signing_alg_values_supported:E(U()).optional(),userinfo_encryption_alg_values_supported:E(U()).optional(),userinfo_encryption_enc_values_supported:E(U()).optional(),request_object_signing_alg_values_supported:E(U()).optional(),request_object_encryption_alg_values_supported:E(U()).optional(),request_object_encryption_enc_values_supported:E(U()).optional(),token_endpoint_auth_methods_supported:E(U()).optional(),token_endpoint_auth_signing_alg_values_supported:E(U()).optional(),display_values_supported:E(U()).optional(),claim_types_supported:E(U()).optional(),claims_supported:E(U()).optional(),service_documentation:U().optional(),claims_locales_supported:E(U()).optional(),ui_locales_supported:E(U()).optional(),claims_parameter_supported:H0().optional(),request_parameter_supported:H0().optional(),request_uri_parameter_supported:H0().optional(),require_request_uri_registration:H0().optional(),op_policy_uri:f0.optional(),op_tos_uri:f0.optional(),client_id_metadata_document_supported:H0().optional()}),dL=I({...hy.shape,...CJ.pick({code_challenge_methods_supported:!0}).shape}),iL=I({access_token:U(),id_token:U().optional(),token_type:U(),expires_in:jQ.number().optional(),scope:U().optional(),refresh_token:U().optional()}).strip(),nL=I({error:U(),error_description:U().optional(),error_uri:U().optional()}),cL=f0.optional().or(_("").transform(()=>{return})),uy=I({redirect_uris:E(f0),token_endpoint_auth_method:U().optional(),grant_types:E(U()).optional(),response_types:E(U()).optional(),client_name:U().optional(),client_uri:f0.optional(),logo_uri:cL,scope:U().optional(),contacts:E(U()).optional(),tos_uri:cL,policy_uri:U().optional(),jwks_uri:f0.optional(),jwks:cH().optional(),software_id:U().optional(),software_version:U().optional(),software_statement:U().optional()}).strip(),ly=I({client_id:U(),client_secret:U().optional(),client_id_issued_at:J0().optional(),client_secret_expires_at:J0().optional()}).strip(),oL=uy.merge(ly),ti=I({error:U(),error_description:U().optional()}).strip(),ai=I({token:U(),token_type_hint:U().optional()}).strip();function rL(Q){let X=typeof Q==="string"?new URL(Q):new URL(Q.href);return X.hash="",X}function tL({requestedResource:Q,configuredResource:X}){let Y=typeof Q==="string"?new URL(Q):new URL(Q.href),W=typeof X==="string"?new URL(X):new URL(X.href);if(Y.origin!==W.origin)return!1;if(Y.pathname.length<W.pathname.length)return!1;let $=Y.pathname.endsWith("/")?Y.pathname:Y.pathname+"/",J=W.pathname.endsWith("/")?W.pathname:W.pathname+"/";return $.startsWith(J)}class E0 extends Error{constructor(Q,X){super(Q);this.errorUri=X,this.name=this.constructor.name}toResponseObject(){let Q={error:this.errorCode,error_description:this.message};if(this.errorUri)Q.error_uri=this.errorUri;return Q}get errorCode(){return this.constructor.errorCode}}class LY extends E0{}LY.errorCode="invalid_request";class J4 extends E0{}J4.errorCode="invalid_client";class G4 extends E0{}G4.errorCode="invalid_grant";class H4 extends E0{}H4.errorCode="unauthorized_client";class OY extends E0{}OY.errorCode="unsupported_grant_type";class UY extends E0{}UY.errorCode="invalid_scope";class jY extends E0{}jY.errorCode="access_denied";class x6 extends E0{}x6.errorCode="server_error";class wY extends E0{}wY.errorCode="temporarily_unavailable";class MY extends E0{}MY.errorCode="unsupported_response_type";class NY extends E0{}NY.errorCode="unsupported_token_type";class bY extends E0{}bY.errorCode="invalid_token";class PY extends E0{}PY.errorCode="method_not_allowed";class ZY extends E0{}ZY.errorCode="too_many_requests";class B4 extends E0{}B4.errorCode="invalid_client_metadata";class RY extends E0{}RY.errorCode="insufficient_scope";class EY extends E0{}EY.errorCode="invalid_target";var aL={[LY.errorCode]:LY,[J4.errorCode]:J4,[G4.errorCode]:G4,[H4.errorCode]:H4,[OY.errorCode]:OY,[UY.errorCode]:UY,[jY.errorCode]:jY,[x6.errorCode]:x6,[wY.errorCode]:wY,[MY.errorCode]:MY,[NY.errorCode]:NY,[bY.errorCode]:bY,[PY.errorCode]:PY,[ZY.errorCode]:ZY,[B4.errorCode]:B4,[RY.errorCode]:RY,[EY.errorCode]:EY};class y6 extends Error{constructor(Q){super(Q??"Unauthorized")}}function my(Q){return["client_secret_basic","client_secret_post","none"].includes(Q)}var kJ="code",vJ="S256";function cy(Q,X){let Y=Q.client_secret!==void 0;if(X.length===0)return Y?"client_secret_post":"none";if("token_endpoint_auth_method"in Q&&Q.token_endpoint_auth_method&&my(Q.token_endpoint_auth_method)&&X.includes(Q.token_endpoint_auth_method))return Q.token_endpoint_auth_method;if(Y&&X.includes("client_secret_basic"))return"client_secret_basic";if(Y&&X.includes("client_secret_post"))return"client_secret_post";if(X.includes("none"))return"none";return Y?"client_secret_post":"none"}function py(Q,X,Y,W){let{client_id:$,client_secret:J}=X;switch(Q){case"client_secret_basic":dy($,J,Y);return;case"client_secret_post":iy($,J,W);return;case"none":ny($,W);return;default:throw Error(`Unsupported client authentication method: ${Q}`)}}function dy(Q,X,Y){if(!X)throw Error("client_secret_basic authentication requires a client_secret");let W=btoa(`${Q}:${X}`);Y.set("Authorization",`Basic ${W}`)}function iy(Q,X,Y){if(Y.set("client_id",Q),X)Y.set("client_secret",X)}function ny(Q,X){X.set("client_id",Q)}async function eL(Q){let X=Q instanceof Response?Q.status:void 0,Y=Q instanceof Response?await Q.text():Q;try{let W=nL.parse(JSON.parse(Y)),{error:$,error_description:J,error_uri:G}=W;return new(aL[$]||x6)(J||"",G)}catch(W){let $=`${X?`HTTP ${X}: `:""}Invalid OAuth error response: ${W}. Raw body: ${Y}`;return new x6($)}}async function m8(Q,X){try{return await _J(Q,X)}catch(Y){if(Y instanceof J4||Y instanceof H4)return await Q.invalidateCredentials?.("all"),await _J(Q,X);else if(Y instanceof G4)return await Q.invalidateCredentials?.("tokens"),await _J(Q,X);throw Y}}async function _J(Q,{serverUrl:X,authorizationCode:Y,scope:W,resourceMetadataUrl:$,fetchFn:J}){let G,H;try{if(G=await ty(X,{resourceMetadataUrl:$},J),G.authorization_servers&&G.authorization_servers.length>0)H=G.authorization_servers[0]}catch{}if(!H)H=new URL("/",X);let B=await ry(X,Q,G),z=await Xg(H,{fetchFn:J}),K=await Promise.resolve(Q.clientInformation());if(!K){if(Y!==void 0)throw Error("Existing OAuth client information is required when exchanging an authorization code");let L=z?.client_id_metadata_document_supported===!0,O=Q.clientMetadataUrl;if(O&&!oy(O))throw new B4(`clientMetadataUrl must be a valid HTTPS URL with a non-root pathname, got: ${O}`);if(L&&O)K={client_id:O},await Q.saveClientInformation?.(K);else{if(!Q.saveClientInformation)throw Error("OAuth client information must be saveable for dynamic registration");let N=await Gg(H,{metadata:z,clientMetadata:Q.clientMetadata,fetchFn:J});await Q.saveClientInformation(N),K=N}}let V=!Q.redirectUrl;if(Y!==void 0||V){let L=await Jg(Q,H,{metadata:z,resource:B,authorizationCode:Y,fetchFn:J});return await Q.saveTokens(L),"AUTHORIZED"}let D=await Q.tokens();if(D?.refresh_token)try{let L=await $g(H,{metadata:z,clientInformation:K,refreshToken:D.refresh_token,resource:B,addClientAuthentication:Q.addClientAuthentication,fetchFn:J});return await Q.saveTokens(L),"AUTHORIZED"}catch(L){if(!(L instanceof E0)||L instanceof x6);else throw L}let F=Q.state?await Q.state():void 0,{authorizationUrl:q,codeVerifier:A}=await Yg(H,{metadata:z,clientInformation:K,state:F,redirectUrl:Q.redirectUrl,scope:W||G?.scopes_supported?.join(" ")||Q.clientMetadata.scope,resource:B});return await Q.saveCodeVerifier(A),await Q.redirectToAuthorization(q),"REDIRECT"}function oy(Q){if(!Q)return!1;try{let X=new URL(Q);return X.protocol==="https:"&&X.pathname!=="/"}catch{return!1}}async function ry(Q,X,Y){let W=rL(Q);if(X.validateResourceURL)return await X.validateResourceURL(W,Y?.resource);if(!Y)return;if(!tL({requestedResource:W,configuredResource:Y.resource}))throw Error(`Protected resource ${Y.resource} does not match expected ${W} (or origin)`);return new URL(Y.resource)}function yJ(Q){let X=Q.headers.get("WWW-Authenticate");if(!X)return{};let[Y,W]=X.split(" ");if(Y.toLowerCase()!=="bearer"||!W)return{};let $=xJ(Q,"resource_metadata")||void 0,J;if($)try{J=new URL($)}catch{}let G=xJ(Q,"scope")||void 0,H=xJ(Q,"error")||void 0;return{resourceMetadataUrl:J,scope:G,error:H}}function xJ(Q,X){let Y=Q.headers.get("WWW-Authenticate");if(!Y)return null;let W=new RegExp(`${X}=(?:"([^"]+)"|([^\\s,]+))`),$=Y.match(W);if($)return $[1]||$[2];return null}async function ty(Q,X,Y=fetch){let W=await ey(Q,"oauth-protected-resource",Y,{protocolVersion:X?.protocolVersion,metadataUrl:X?.resourceMetadataUrl});if(!W||W.status===404)throw await W?.body?.cancel(),Error("Resource server does not implement OAuth 2.0 Protected Resource Metadata.");if(!W.ok)throw await W.body?.cancel(),Error(`HTTP ${W.status} trying to load well-known OAuth protected resource metadata.`);return pL.parse(await W.json())}async function gJ(Q,X,Y=fetch){try{return await Y(Q,{headers:X})}catch(W){if(W instanceof TypeError)if(X)return gJ(Q,void 0,Y);else return;throw W}}function ay(Q,X="",Y={}){if(X.endsWith("/"))X=X.slice(0,-1);return Y.prependPathname?`${X}/.well-known/${Q}`:`/.well-known/${Q}${X}`}async function sL(Q,X,Y=fetch){return await gJ(Q,{"MCP-Protocol-Version":X},Y)}function sy(Q,X){return!Q||Q.status>=400&&Q.status<500&&X!=="/"}async function ey(Q,X,Y,W){let $=new URL(Q),J=W?.protocolVersion??O6,G;if(W?.metadataUrl)G=new URL(W.metadataUrl);else{let B=ay(X,$.pathname);G=new URL(B,W?.metadataServerUrl??$),G.search=$.search}let H=await sL(G,J,Y);if(!W?.metadataUrl&&sy(H,$.pathname)){let B=new URL(`/.well-known/${X}`,$);H=await sL(B,J,Y)}return H}function Qg(Q){let X=typeof Q==="string"?new URL(Q):Q,Y=X.pathname!=="/",W=[];if(!Y)return W.push({url:new URL("/.well-known/oauth-authorization-server",X.origin),type:"oauth"}),W.push({url:new URL("/.well-known/openid-configuration",X.origin),type:"oidc"}),W;let $=X.pathname;if($.endsWith("/"))$=$.slice(0,-1);return W.push({url:new URL(`/.well-known/oauth-authorization-server${$}`,X.origin),type:"oauth"}),W.push({url:new URL(`/.well-known/openid-configuration${$}`,X.origin),type:"oidc"}),W.push({url:new URL(`${$}/.well-known/openid-configuration`,X.origin),type:"oidc"}),W}async function Xg(Q,{fetchFn:X=fetch,protocolVersion:Y=O6}={}){let W={"MCP-Protocol-Version":Y,Accept:"application/json"},$=Qg(Q);for(let{url:J,type:G}of $){let H=await gJ(J,W,X);if(!H)continue;if(!H.ok){if(await H.body?.cancel(),H.status>=400&&H.status<500)continue;throw Error(`HTTP ${H.status} trying to load ${G==="oauth"?"OAuth":"OpenID provider"} metadata from ${J}`)}if(G==="oauth")return CJ.parse(await H.json());else return dL.parse(await H.json())}return}async function Yg(Q,{metadata:X,clientInformation:Y,redirectUrl:W,scope:$,state:J,resource:G}){let H;if(X){if(H=new URL(X.authorization_endpoint),!X.response_types_supported.includes(kJ))throw Error(`Incompatible auth server: does not support response type ${kJ}`);if(X.code_challenge_methods_supported&&!X.code_challenge_methods_supported.includes(vJ))throw Error(`Incompatible auth server: does not support code challenge method ${vJ}`)}else H=new URL("/authorize",Q);let B=await TJ(),z=B.code_verifier,K=B.code_challenge;if(H.searchParams.set("response_type",kJ),H.searchParams.set("client_id",Y.client_id),H.searchParams.set("code_challenge",K),H.searchParams.set("code_challenge_method",vJ),H.searchParams.set("redirect_uri",String(W)),J)H.searchParams.set("state",J);if($)H.searchParams.set("scope",$);if($?.includes("offline_access"))H.searchParams.append("prompt","consent");if(G)H.searchParams.set("resource",G.href);return{authorizationUrl:H,codeVerifier:z}}function Wg(Q,X,Y){return new URLSearchParams({grant_type:"authorization_code",code:Q,code_verifier:X,redirect_uri:String(Y)})}async function QO(Q,{metadata:X,tokenRequestParams:Y,clientInformation:W,addClientAuthentication:$,resource:J,fetchFn:G}){let H=X?.token_endpoint?new URL(X.token_endpoint):new URL("/token",Q),B=new Headers({"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"});if(J)Y.set("resource",J.href);if($)await $(B,Y,H,X);else if(W){let K=X?.token_endpoint_auth_methods_supported??[],V=cy(W,K);py(V,W,B,Y)}let z=await(G??fetch)(H,{method:"POST",headers:B,body:Y});if(!z.ok)throw await eL(z);return iL.parse(await z.json())}async function $g(Q,{metadata:X,clientInformation:Y,refreshToken:W,resource:$,addClientAuthentication:J,fetchFn:G}){let H=new URLSearchParams({grant_type:"refresh_token",refresh_token:W}),B=await QO(Q,{metadata:X,tokenRequestParams:H,clientInformation:Y,addClientAuthentication:J,resource:$,fetchFn:G});return{refresh_token:W,...B}}async function Jg(Q,X,{metadata:Y,resource:W,authorizationCode:$,fetchFn:J}={}){let G=Q.clientMetadata.scope,H;if(Q.prepareTokenRequest)H=await Q.prepareTokenRequest(G);if(!H){if(!$)throw Error("Either provider.prepareTokenRequest() or authorizationCode is required");if(!Q.redirectUrl)throw Error("redirectUrl is required for authorization_code flow");let z=await Q.codeVerifier();H=Wg($,z,Q.redirectUrl)}let B=await Q.clientInformation();return QO(X,{metadata:Y,tokenRequestParams:H,clientInformation:B??void 0,addClientAuthentication:Q.addClientAuthentication,resource:W,fetchFn:J})}async function Gg(Q,{metadata:X,clientMetadata:Y,fetchFn:W}){let $;if(X){if(!X.registration_endpoint)throw Error("Incompatible auth server: does not support dynamic client registration");$=new URL(X.registration_endpoint)}else $=new URL("/register",Q);let J=await(W??fetch)($,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(Y)});if(!J.ok)throw await eL(J);return oL.parse(await J.json())}class hJ extends Error{constructor(Q,X){super(Q),this.name="ParseError",this.type=X.type,this.field=X.field,this.value=X.value,this.line=X.line}}function fJ(Q){}function XO(Q){if(typeof Q=="function")throw TypeError("`callbacks` must be an object, got a function instead. Did you mean `{onEvent: fn}`?");let{onEvent:X=fJ,onError:Y=fJ,onRetry:W=fJ,onComment:$}=Q,J="",G=!0,H,B="",z="";function K(A){let L=G?A.replace(/^\xEF\xBB\xBF/,""):A,[O,M]=Hg(`${J}${L}`);for(let N of O)V(N);J=M,G=!1}function V(A){if(A===""){F();return}if(A.startsWith(":")){$&&$(A.slice(A.startsWith(": ")?2:1));return}let L=A.indexOf(":");if(L!==-1){let O=A.slice(0,L),M=A[L+1]===" "?2:1,N=A.slice(L+M);D(O,N,A);return}D(A,"",A)}function D(A,L,O){switch(A){case"event":z=L;break;case"data":B=`${B}${L}
|
|
50
50
|
`;break;case"id":H=L.includes("\x00")?void 0:L;break;case"retry":/^\d+$/.test(L)?W(parseInt(L,10)):Y(new hJ(`Invalid \`retry\` value: "${L}"`,{type:"invalid-retry",value:L,line:O}));break;default:Y(new hJ(`Unknown field "${A.length>20?`${A.slice(0,20)}…`:A}"`,{type:"unknown-field",field:A,value:L,line:O}));break}}function F(){B.length>0&&X({id:H,event:z||void 0,data:B.endsWith(`
|
|
51
51
|
`)?B.slice(0,-1):B}),H=void 0,B="",z=""}function q(A={}){J&&A.consume&&V(J),G=!0,H=void 0,B="",z="",J=""}return{feed:K,reset:q}}function Hg(Q){let X=[],Y="",W=0;for(;W<Q.length;){let $=Q.indexOf("\r",W),J=Q.indexOf(`
|
|
52
52
|
`,W),G=-1;if($!==-1&&J!==-1?G=Math.min($,J):$!==-1?$===Q.length-1?G=-1:G=$:J!==-1&&(G=J),G===-1){Y=Q.slice(W);break}else{let H=Q.slice(W,G);X.push(H),W=G+1,Q[W-1]==="\r"&&Q[W]===`
|