@muxcodecli/cli 1.15.18 → 1.15.19

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.
@@ -0,0 +1,212 @@
1
+ // @bun
2
+ import{Ul as B2}from"./chunk-fk9bmtwr.js";import{jm as a7,lm as s7,mm as v3,om as G2}from"./chunk-an9wvc2n.js";import{$o as mZ,Ap as $$,Ar as g$,Br as n1,Cp as r1,Cr as T$,Dp as RZ,Ep as s3,Ip as Z$,Kp as X6,Kr as v,Lr as Y$,Op as XZ,Pp as R$,Qr as MZ,Sr as p3,Tp as Q6,Tr as l3,Up as t,Vp as Y6,Vr as E3,Wr as PZ,dp as W2,gq as y2,hq as I3,iq as d3,jq as dZ,kq as i3,oq as _$,sp as i1,tp as U$,wp as B$,xp as VZ,yp as $1}from"./chunk-a0srn4ak.js";import{$r as W6}from"./chunk-ygpen625.js";import{as as RX}from"./chunk-jfz77m78.js";import{ts as a3,vs as $6,xs as A2}from"./chunk-8jy0dvcn.js";import{Ct as S3,pt as _3}from"./chunk-1pv2317e.js";import{bu as P3,cu as z3}from"./chunk-21x3anp4.js";import{Au as J0,Bu as Y3,Cu as W3,du as $3,eu as Q0,gu as U2,iu as W,ju as X3,ku as h,lu as m,mu as Y0,nu as Q3,ou as ZZ,pu as F,qu as O,ru as WZ,su as n,tu as W0,uu as B0,vu as a,wu as OZ,xu as N,yu as $Z,zu as R2}from"./chunk-ntvr3177.js";import{AF as G,Dw as W1,Fx as LZ,Hz as Z6,Yz as p,eC as B,pE as _Z,tz as T3}from"./chunk-1mqsg5s7.js";import{QF as _0,SF as SZ}from"./chunk-8j3aw4qg.js";var $0={};SZ($0,{Service:()=>b2,InstanceBootstrap:()=>$0});class b2 extends LZ.Service()("@muxcode/InstanceBootstrap"){}var J$={};SZ(J$,{use:()=>y6,layer:()=>M2,defaultLayer:()=>L6,Tokens:()=>P2,Service:()=>f$,McpAuth:()=>J$,Entry:()=>j2,ClientInfo:()=>N2});import H6 from"path";var P2=G.Struct({accessToken:G.mutableKey(G.String),refreshToken:G.mutableKey(G.optional(G.String)),expiresAt:G.mutableKey(G.optional(G.Number)),scope:G.mutableKey(G.optional(G.String))}),N2=G.Struct({clientId:G.mutableKey(G.String),clientSecret:G.mutableKey(G.optional(G.String)),clientIdIssuedAt:G.mutableKey(G.optional(G.Number)),clientSecretExpiresAt:G.mutableKey(G.optional(G.Number))}),j2=G.Struct({tokens:G.mutableKey(G.optional(P2)),clientInfo:G.mutableKey(G.optional(N2)),codeVerifier:G.mutableKey(G.optional(G.String)),oauthState:G.mutableKey(G.optional(G.String)),serverUrl:G.mutableKey(G.optional(G.String))}),V6=G.decodeUnknownOption(G.Record(G.String,j2)),X0=H6.join(A2.Path.data,"mcp-auth.json");class f$ extends LZ.Service()("@muxcode/McpAuth"){}var y6=B$(f$),M2=p.effect(f$,B.gen(function*(){let Z=yield*VZ.Service,$=B.fn("McpAuth.all")(function*(){return yield*Z.readJson(X0).pipe(B.map((f)=>W1.getOrElse(V6(f),()=>({}))),B.catch(()=>B.succeed({})))}),X=B.fn("McpAuth.get")(function*(f){return(yield*$())[f]}),Q=B.fn("McpAuth.getForUrl")(function*(f,q){let g=yield*X(f);if(!g)return;if(!g.serverUrl)return;if(g.serverUrl!==q)return;return g}),Y=B.fn("McpAuth.set")(function*(f,q,g){let r=yield*$();if(g)q.serverUrl=g;yield*Z.writeJson(X0,{...r,[f]:q},384).pipe(B.orDie)}),J=B.fn("McpAuth.remove")(function*(f){let q=yield*$();delete q[f],yield*Z.writeJson(X0,q,384).pipe(B.orDie)}),D=(f,q)=>B.fn(`McpAuth.${q}`)(function*(g,r,W$){let qZ=(yield*X(g))??{};qZ[f]=r,yield*Y(g,qZ,W$)}),K=(f,q)=>B.fn(`McpAuth.${q}`)(function*(g){let r=yield*X(g);if(r)delete r[f],yield*Y(g,r)}),w=D("tokens","updateTokens"),V=D("clientInfo","updateClientInfo"),y=D("codeVerifier","updateCodeVerifier"),L=D("oauthState","updateOAuthState"),z=K("codeVerifier","clearCodeVerifier"),I=K("oauthState","clearOAuthState"),C=B.fn("McpAuth.getOAuthState")(function*(f){return(yield*X(f))?.oauthState}),l=B.fn("McpAuth.isTokenExpired")(function*(f){let q=yield*X(f);if(!q?.tokens)return null;if(!q.tokens.expiresAt)return!1;return q.tokens.expiresAt<Date.now()/1000});return f$.of({all:$,get:X,getForUrl:Q,set:Y,remove:J,updateTokens:w,updateClientInfo:V,updateCodeVerifier:y,clearCodeVerifier:z,updateOAuthState:L,getOAuthState:C,clearOAuthState:I,isTokenExpired:l})})),L6=M2.pipe(p.provide(VZ.defaultLayer));var k$={};SZ(k$,{use:()=>$9,layer:()=>h3,defaultLayer:()=>X9,ToolsChanged:()=>f3,Status:()=>sX,Service:()=>X1,Resource:()=>mX,NotFoundError:()=>D2,MCP:()=>k$,Failed:()=>dX,BrowserOpenFailed:()=>u3});function D$(Z){return!!Z._zod}function NZ(Z,$){if(D$(Z))return Q0(Z,$);return Z.safeParse($)}function B1(Z){if(!Z)return;let $;if(D$(Z))$=Z._zod?.def?.shape;else $=Z.shape;if(!$)return;if(typeof $==="function")try{return $()}catch{return}return $}function q2(Z){if(D$(Z)){let J=Z._zod?.def;if(J){if(J.value!==void 0)return J.value;if(Array.isArray(J.values)&&J.values.length>0)return J.values[0]}}let X=Z._def;if(X){if(X.value!==void 0)return X.value;if(Array.isArray(X.values)&&X.values.length>0)return X.values[0]}let Q=Z.value;if(Q!==void 0)return Q;return}var x$="2025-11-25";var g2=[x$,"2025-06-18","2025-03-26","2024-11-05","2024-10-07"],EZ="io.modelcontextprotocol/related-task",D1="2.0",JZ=R2((Z)=>Z!==null&&(typeof Z==="object"||typeof Z==="function")),k2=n([W(),h().int()]),C2=W(),m9=WZ({ttl:n([h(),Y0()]).optional(),pollInterval:h().optional()}),O6=O({ttl:h().optional()}),z6=O({taskId:W()}),D0=WZ({progressToken:k2.optional(),[EZ]:z6.optional()}),zZ=O({_meta:D0.optional()}),u$=zZ.extend({task:O6.optional()}),T2=(Z)=>u$.safeParse(Z).success,DZ=O({method:W(),params:zZ.loose().optional()}),bZ=O({_meta:D0.optional()}),AZ=O({method:W(),params:bZ.loose().optional()}),KZ=WZ({_meta:D0.optional()}),K1=n([W(),h().int()]),I2=O({jsonrpc:N(D1),id:K1,...DZ.shape}).strict(),h$=(Z)=>I2.safeParse(Z).success,_2=O({jsonrpc:N(D1),...AZ.shape}).strict(),S2=(Z)=>_2.safeParse(Z).success,K0=O({jsonrpc:N(D1),id:K1,result:KZ}).strict(),nZ=(Z)=>K0.safeParse(Z).success;var R;(function(Z){Z[Z.ConnectionClosed=-32000]="ConnectionClosed",Z[Z.RequestTimeout=-32001]="RequestTimeout",Z[Z.ParseError=-32700]="ParseError",Z[Z.InvalidRequest=-32600]="InvalidRequest",Z[Z.MethodNotFound=-32601]="MethodNotFound",Z[Z.InvalidParams=-32602]="InvalidParams",Z[Z.InternalError=-32603]="InternalError",Z[Z.UrlElicitationRequired=-32042]="UrlElicitationRequired"})(R||(R={}));var x0=O({jsonrpc:N(D1),id:K1.optional(),error:O({code:h().int(),message:W(),data:ZZ().optional()})}).strict();var E2=(Z)=>x0.safeParse(Z).success;var vZ=n([I2,_2,K0,x0]),d9=n([K0,x0]),cZ=KZ.strict(),b6=bZ.extend({requestId:K1.optional(),reason:W().optional()}),x1=AZ.extend({method:N("notifications/cancelled"),params:b6}),A6=O({src:W(),mimeType:W().optional(),sizes:F(W()).optional(),theme:OZ(["light","dark"]).optional()}),p$=O({icons:F(A6).optional()}),K$=O({name:W(),title:W().optional()}),v2=K$.extend({...K$.shape,...p$.shape,version:W(),websiteUrl:W().optional(),description:W().optional()}),P6=B0(O({applyDefaults:m().optional()}),a(W(),ZZ())),N6=J0((Z)=>{if(Z&&typeof Z==="object"&&!Array.isArray(Z)){if(Object.keys(Z).length===0)return{form:{}}}return Z},B0(O({form:P6.optional(),url:JZ.optional()}),a(W(),ZZ()).optional())),j6=WZ({list:JZ.optional(),cancel:JZ.optional(),requests:WZ({sampling:WZ({createMessage:JZ.optional()}).optional(),elicitation:WZ({create:JZ.optional()}).optional()}).optional()}),M6=WZ({list:JZ.optional(),cancel:JZ.optional(),requests:WZ({tools:WZ({call:JZ.optional()}).optional()}).optional()}),q6=O({experimental:a(W(),JZ).optional(),sampling:O({context:JZ.optional(),tools:JZ.optional()}).optional(),elicitation:N6.optional(),roots:O({listChanged:m().optional()}).optional(),tasks:j6.optional()}),U6=zZ.extend({protocolVersion:W(),capabilities:q6,clientInfo:v2}),R6=DZ.extend({method:N("initialize"),params:U6});var g6=O({experimental:a(W(),JZ).optional(),logging:JZ.optional(),completions:JZ.optional(),prompts:O({listChanged:m().optional()}).optional(),resources:O({subscribe:m().optional(),listChanged:m().optional()}).optional(),tools:O({listChanged:m().optional()}).optional(),tasks:M6.optional()}),G0=KZ.extend({protocolVersion:W(),capabilities:g6,serverInfo:v2,instructions:W().optional()}),f2=AZ.extend({method:N("notifications/initialized"),params:bZ.optional()}),u2=(Z)=>f2.safeParse(Z).success,G1=DZ.extend({method:N("ping"),params:zZ.optional()}),k6=O({progress:h(),total:$Z(h()),message:$Z(W())}),C6=O({...bZ.shape,...k6.shape,progressToken:k2}),H1=AZ.extend({method:N("notifications/progress"),params:C6}),T6=zZ.extend({cursor:C2.optional()}),l$=DZ.extend({params:T6.optional()}),m$=KZ.extend({nextCursor:C2.optional()}),I6=OZ(["working","input_required","completed","failed","cancelled"]),d$=O({taskId:W(),status:I6,ttl:n([h(),Y0()]),createdAt:W(),lastUpdatedAt:W(),pollInterval:$Z(h()),statusMessage:$Z(W())}),oZ=KZ.extend({task:d$}),_6=bZ.merge(d$),i$=AZ.extend({method:N("notifications/tasks/status"),params:_6}),V1=DZ.extend({method:N("tasks/get"),params:zZ.extend({taskId:W()})}),y1=KZ.merge(d$),L1=DZ.extend({method:N("tasks/result"),params:zZ.extend({taskId:W()})}),i9=KZ.loose(),w1=l$.extend({method:N("tasks/list")}),F1=m$.extend({tasks:F(d$)}),O1=DZ.extend({method:N("tasks/cancel"),params:zZ.extend({taskId:W()})}),h2=KZ.merge(d$),p2=O({uri:W(),mimeType:$Z(W()),_meta:a(W(),ZZ()).optional()}),l2=p2.extend({text:W()}),H0=W().refine((Z)=>{try{return atob(Z),!0}catch{return!1}},{message:"Invalid Base64 string"}),m2=p2.extend({blob:H0}),n$=OZ(["user","assistant"]),G$=O({audience:F(n$).optional(),priority:h().min(0).max(1).optional(),lastModified:U2.datetime({offset:!0}).optional()}),d2=O({...K$.shape,...p$.shape,uri:W(),description:$Z(W()),mimeType:$Z(W()),annotations:G$.optional(),_meta:$Z(WZ({}))}),S6=O({...K$.shape,...p$.shape,uriTemplate:W(),description:$Z(W()),mimeType:$Z(W()),annotations:G$.optional(),_meta:$Z(WZ({}))}),E6=l$.extend({method:N("resources/list")}),V0=m$.extend({resources:F(d2)}),v6=l$.extend({method:N("resources/templates/list")}),y0=m$.extend({resourceTemplates:F(S6)}),L0=zZ.extend({uri:W()}),f6=L0,u6=DZ.extend({method:N("resources/read"),params:f6}),w0=KZ.extend({contents:F(n([l2,m2]))}),F0=AZ.extend({method:N("notifications/resources/list_changed"),params:bZ.optional()}),h6=L0,p6=DZ.extend({method:N("resources/subscribe"),params:h6}),l6=L0,m6=DZ.extend({method:N("resources/unsubscribe"),params:l6}),d6=bZ.extend({uri:W()}),i6=AZ.extend({method:N("notifications/resources/updated"),params:d6}),n6=O({name:W(),description:$Z(W()),required:$Z(m())}),c6=O({...K$.shape,...p$.shape,description:$Z(W()),arguments:$Z(F(n6)),_meta:$Z(WZ({}))}),o6=l$.extend({method:N("prompts/list")}),O0=m$.extend({prompts:F(c6)}),a6=zZ.extend({name:W(),arguments:a(W(),W()).optional()}),s6=DZ.extend({method:N("prompts/get"),params:a6}),z0=O({type:N("text"),text:W(),annotations:G$.optional(),_meta:a(W(),ZZ()).optional()}),b0=O({type:N("image"),data:H0,mimeType:W(),annotations:G$.optional(),_meta:a(W(),ZZ()).optional()}),A0=O({type:N("audio"),data:H0,mimeType:W(),annotations:G$.optional(),_meta:a(W(),ZZ()).optional()}),t6=O({type:N("tool_use"),name:W(),id:W(),input:a(W(),ZZ()),_meta:a(W(),ZZ()).optional()}),r6=O({type:N("resource"),resource:n([l2,m2]),annotations:G$.optional(),_meta:a(W(),ZZ()).optional()}),e6=d2.extend({type:N("resource_link")}),P0=n([z0,b0,A0,e6,r6]),Z7=O({role:n$,content:P0}),N0=KZ.extend({description:W().optional(),messages:F(Z7)}),j0=AZ.extend({method:N("notifications/prompts/list_changed"),params:bZ.optional()}),$7=O({title:W().optional(),readOnlyHint:m().optional(),destructiveHint:m().optional(),idempotentHint:m().optional(),openWorldHint:m().optional()}),X7=O({taskSupport:OZ(["required","optional","forbidden"]).optional()}),z1=O({...K$.shape,...p$.shape,description:W().optional(),inputSchema:O({type:N("object"),properties:a(W(),JZ).optional(),required:F(W()).optional()}).catchall(ZZ()),outputSchema:O({type:N("object"),properties:a(W(),JZ).optional(),required:F(W()).optional()}).catchall(ZZ()).optional(),annotations:$7.optional(),execution:X7.optional(),_meta:a(W(),ZZ()).optional()}),Q7=l$.extend({method:N("tools/list")}),c$=m$.extend({tools:F(z1)}),fZ=KZ.extend({content:F(P0).default([]),structuredContent:a(W(),ZZ()).optional(),isError:m().optional()}),n9=fZ.or(KZ.extend({toolResult:ZZ()})),Y7=u$.extend({name:W(),arguments:a(W(),ZZ()).optional()}),W7=DZ.extend({method:N("tools/call"),params:Y7}),o$=AZ.extend({method:N("notifications/tools/list_changed"),params:bZ.optional()}),i2=O({autoRefresh:m().default(!0),debounceMs:h().int().nonnegative().default(300)}),n2=OZ(["debug","info","notice","warning","error","critical","alert","emergency"]),B7=zZ.extend({level:n2}),J7=DZ.extend({method:N("logging/setLevel"),params:B7}),D7=bZ.extend({level:n2,logger:W().optional(),data:ZZ()}),K7=AZ.extend({method:N("notifications/message"),params:D7}),x7=O({name:W().optional()}),G7=O({hints:F(x7).optional(),costPriority:h().min(0).max(1).optional(),speedPriority:h().min(0).max(1).optional(),intelligencePriority:h().min(0).max(1).optional()}),H7=O({mode:OZ(["auto","required","none"]).optional()}),V7=O({type:N("tool_result"),toolUseId:W().describe("The unique identifier for the corresponding tool call."),content:F(P0).default([]),structuredContent:O({}).loose().optional(),isError:m().optional(),_meta:a(W(),ZZ()).optional()}),y7=W0("type",[z0,b0,A0]),J1=W0("type",[z0,b0,A0,t6,V7]),L7=O({role:n$,content:n([J1,F(J1)]),_meta:a(W(),ZZ()).optional()}),w7=u$.extend({messages:F(L7),modelPreferences:G7.optional(),systemPrompt:W().optional(),includeContext:OZ(["none","thisServer","allServers"]).optional(),temperature:h().optional(),maxTokens:h().int(),stopSequences:F(W()).optional(),metadata:JZ.optional(),tools:F(z1).optional(),toolChoice:H7.optional()}),M0=DZ.extend({method:N("sampling/createMessage"),params:w7}),q0=KZ.extend({model:W(),stopReason:$Z(OZ(["endTurn","stopSequence","maxTokens"]).or(W())),role:n$,content:y7}),U0=KZ.extend({model:W(),stopReason:$Z(OZ(["endTurn","stopSequence","maxTokens","toolUse"]).or(W())),role:n$,content:n([J1,F(J1)])}),F7=O({type:N("boolean"),title:W().optional(),description:W().optional(),default:m().optional()}),O7=O({type:N("string"),title:W().optional(),description:W().optional(),minLength:h().optional(),maxLength:h().optional(),format:OZ(["email","uri","date","date-time"]).optional(),default:W().optional()}),z7=O({type:OZ(["number","integer"]),title:W().optional(),description:W().optional(),minimum:h().optional(),maximum:h().optional(),default:h().optional()}),b7=O({type:N("string"),title:W().optional(),description:W().optional(),enum:F(W()),default:W().optional()}),A7=O({type:N("string"),title:W().optional(),description:W().optional(),oneOf:F(O({const:W(),title:W()})),default:W().optional()}),P7=O({type:N("string"),title:W().optional(),description:W().optional(),enum:F(W()),enumNames:F(W()).optional(),default:W().optional()}),N7=n([b7,A7]),j7=O({type:N("array"),title:W().optional(),description:W().optional(),minItems:h().optional(),maxItems:h().optional(),items:O({type:N("string"),enum:F(W())}),default:F(W()).optional()}),M7=O({type:N("array"),title:W().optional(),description:W().optional(),minItems:h().optional(),maxItems:h().optional(),items:O({anyOf:F(O({const:W(),title:W()}))}),default:F(W()).optional()}),q7=n([j7,M7]),U7=n([P7,N7,q7]),R7=n([U7,F7,O7,z7]),g7=u$.extend({mode:N("form").optional(),message:W(),requestedSchema:O({type:N("object"),properties:a(W(),R7),required:F(W()).optional()})}),k7=u$.extend({mode:N("url"),message:W(),elicitationId:W(),url:W().url()}),C7=n([g7,k7]),R0=DZ.extend({method:N("elicitation/create"),params:C7}),T7=bZ.extend({elicitationId:W()}),I7=AZ.extend({method:N("notifications/elicitation/complete"),params:T7}),g0=KZ.extend({action:OZ(["accept","decline","cancel"]),content:J0((Z)=>Z===null?void 0:Z,a(W(),n([W(),h(),m(),F(W())])).optional())}),_7=O({type:N("ref/resource"),uri:W()});var S7=O({type:N("ref/prompt"),name:W()}),E7=zZ.extend({ref:n([S7,_7]),argument:O({name:W(),value:W()}),context:O({arguments:a(W(),W()).optional()}).optional()}),v7=DZ.extend({method:N("completion/complete"),params:E7});var k0=KZ.extend({completion:WZ({values:F(W()).max(100),total:$Z(h().int()),hasMore:$Z(m())})}),f7=O({uri:W().startsWith("file://"),name:W().optional(),_meta:a(W(),ZZ()).optional()}),u7=DZ.extend({method:N("roots/list"),params:zZ.optional()}),h7=KZ.extend({roots:F(f7)}),p7=AZ.extend({method:N("notifications/roots/list_changed"),params:bZ.optional()}),c9=n([G1,R6,v7,J7,s6,o6,E6,v6,u6,p6,m6,W7,Q7,V1,L1,w1,O1]),o9=n([x1,H1,f2,p7,i$]),a9=n([cZ,q0,U0,g0,h7,y1,F1,oZ]),s9=n([G1,M0,R0,u7,V1,L1,w1,O1]),t9=n([x1,H1,K7,i6,F0,o$,j0,i$,I7]),r9=n([cZ,G0,k0,N0,O0,V0,y0,w0,fZ,c$,y1,F1,oZ]);class M extends Error{constructor(Z,$,X){super(`MCP error ${Z}: ${$}`);this.code=Z,this.data=X,this.name="McpError"}static fromError(Z,$,X){if(Z===R.UrlElicitationRequired&&X){let Q=X;if(Q.elicitations)return new c2(Q.elicitations,$)}return new M(Z,$,X)}}class c2 extends M{constructor(Z,$=`URL elicitation${Z.length>1?"s":""} required`){super(R.UrlElicitationRequired,$,{elicitations:Z})}get elicitations(){return this.data?.elicitations??[]}}function uZ(Z){return Z==="completed"||Z==="failed"||Z==="cancelled"}var l7=Symbol("Let zodToJsonSchema decide on which parser to use");var CQ=new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");function C0(Z){let X=B1(Z)?.method;if(!X)throw Error("Schema is missing a method literal");let Q=q2(X);if(typeof Q!=="string")throw Error("Schema method literal must be a string");return Q}function T0(Z,$){let X=NZ(Z,$);if(!X.success)throw X.error;return X.data}var o7=60000;class I0{constructor(Z){if(this._options=Z,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(x1,($)=>{this._oncancel($)}),this.setNotificationHandler(H1,($)=>{this._onprogress($)}),this.setRequestHandler(G1,($)=>({})),this._taskStore=Z?.taskStore,this._taskMessageQueue=Z?.taskMessageQueue,this._taskStore)this.setRequestHandler(V1,async($,X)=>{let Q=await this._taskStore.getTask($.params.taskId,X.sessionId);if(!Q)throw new M(R.InvalidParams,"Failed to retrieve task: Task not found");return{...Q}}),this.setRequestHandler(L1,async($,X)=>{let Q=async()=>{let Y=$.params.taskId;if(this._taskMessageQueue){let D;while(D=await this._taskMessageQueue.dequeue(Y,X.sessionId)){if(D.type==="response"||D.type==="error"){let K=D.message,w=K.id,V=this._requestResolvers.get(w);if(V)if(this._requestResolvers.delete(w),D.type==="response")V(K);else{let y=K,L=new M(y.error.code,y.error.message,y.error.data);V(L)}else{let y=D.type==="response"?"Response":"Error";this._onerror(Error(`${y} handler missing for request ${w}`))}continue}await this._transport?.send(D.message,{relatedRequestId:X.requestId})}}let J=await this._taskStore.getTask(Y,X.sessionId);if(!J)throw new M(R.InvalidParams,`Task not found: ${Y}`);if(!uZ(J.status))return await this._waitForTaskUpdate(Y,X.signal),await Q();if(uZ(J.status)){let D=await this._taskStore.getTaskResult(Y,X.sessionId);return this._clearTaskQueue(Y),{...D,_meta:{...D._meta,[EZ]:{taskId:Y}}}}return await Q()};return await Q()}),this.setRequestHandler(w1,async($,X)=>{try{let{tasks:Q,nextCursor:Y}=await this._taskStore.listTasks($.params?.cursor,X.sessionId);return{tasks:Q,nextCursor:Y,_meta:{}}}catch(Q){throw new M(R.InvalidParams,`Failed to list tasks: ${Q instanceof Error?Q.message:String(Q)}`)}}),this.setRequestHandler(O1,async($,X)=>{try{let Q=await this._taskStore.getTask($.params.taskId,X.sessionId);if(!Q)throw new M(R.InvalidParams,`Task not found: ${$.params.taskId}`);if(uZ(Q.status))throw new M(R.InvalidParams,`Cannot cancel task in terminal status: ${Q.status}`);await this._taskStore.updateTaskStatus($.params.taskId,"cancelled","Client cancelled task execution.",X.sessionId),this._clearTaskQueue($.params.taskId);let Y=await this._taskStore.getTask($.params.taskId,X.sessionId);if(!Y)throw new M(R.InvalidParams,`Task not found after cancellation: ${$.params.taskId}`);return{_meta:{},...Y}}catch(Q){if(Q instanceof M)throw Q;throw new M(R.InvalidRequest,`Failed to cancel task: ${Q instanceof Error?Q.message:String(Q)}`)}})}async _oncancel(Z){if(!Z.params.requestId)return;this._requestHandlerAbortControllers.get(Z.params.requestId)?.abort(Z.params.reason)}_setupTimeout(Z,$,X,Q,Y=!1){this._timeoutInfo.set(Z,{timeoutId:setTimeout(Q,$),startTime:Date.now(),timeout:$,maxTotalTimeout:X,resetTimeoutOnProgress:Y,onTimeout:Q})}_resetTimeout(Z){let $=this._timeoutInfo.get(Z);if(!$)return!1;let X=Date.now()-$.startTime;if($.maxTotalTimeout&&X>=$.maxTotalTimeout)throw this._timeoutInfo.delete(Z),M.fromError(R.RequestTimeout,"Maximum total timeout exceeded",{maxTotalTimeout:$.maxTotalTimeout,totalElapsed:X});return clearTimeout($.timeoutId),$.timeoutId=setTimeout($.onTimeout,$.timeout),!0}_cleanupTimeout(Z){let $=this._timeoutInfo.get(Z);if($)clearTimeout($.timeoutId),this._timeoutInfo.delete(Z)}async connect(Z){if(this._transport)throw Error("Already connected to a transport. Call close() before connecting to a new transport, or use a separate Protocol instance per connection.");this._transport=Z;let $=this.transport?.onclose;this._transport.onclose=()=>{$?.(),this._onclose()};let X=this.transport?.onerror;this._transport.onerror=(Y)=>{X?.(Y),this._onerror(Y)};let Q=this._transport?.onmessage;this._transport.onmessage=(Y,J)=>{if(Q?.(Y,J),nZ(Y)||E2(Y))this._onresponse(Y);else if(h$(Y))this._onrequest(Y,J);else if(S2(Y))this._onnotification(Y);else this._onerror(Error(`Unknown message type: ${JSON.stringify(Y)}`))},await this._transport.start()}_onclose(){let Z=this._responseHandlers;this._responseHandlers=new Map,this._progressHandlers.clear(),this._taskProgressTokens.clear(),this._pendingDebouncedNotifications.clear();for(let X of this._requestHandlerAbortControllers.values())X.abort();this._requestHandlerAbortControllers.clear();let $=M.fromError(R.ConnectionClosed,"Connection closed");this._transport=void 0,this.onclose?.();for(let X of Z.values())X($)}_onerror(Z){this.onerror?.(Z)}_onnotification(Z){let $=this._notificationHandlers.get(Z.method)??this.fallbackNotificationHandler;if($===void 0)return;Promise.resolve().then(()=>$(Z)).catch((X)=>this._onerror(Error(`Uncaught error in notification handler: ${X}`)))}_onrequest(Z,$){let X=this._requestHandlers.get(Z.method)??this.fallbackRequestHandler,Q=this._transport,Y=Z.params?._meta?.[EZ]?.taskId;if(X===void 0){let V={jsonrpc:"2.0",id:Z.id,error:{code:R.MethodNotFound,message:"Method not found"}};if(Y&&this._taskMessageQueue)this._enqueueTaskMessage(Y,{type:"error",message:V,timestamp:Date.now()},Q?.sessionId).catch((y)=>this._onerror(Error(`Failed to enqueue error response: ${y}`)));else Q?.send(V).catch((y)=>this._onerror(Error(`Failed to send an error response: ${y}`)));return}let J=new AbortController;this._requestHandlerAbortControllers.set(Z.id,J);let D=T2(Z.params)?Z.params.task:void 0,K=this._taskStore?this.requestTaskStore(Z,Q?.sessionId):void 0,w={signal:J.signal,sessionId:Q?.sessionId,_meta:Z.params?._meta,sendNotification:async(V)=>{if(J.signal.aborted)return;let y={relatedRequestId:Z.id};if(Y)y.relatedTask={taskId:Y};await this.notification(V,y)},sendRequest:async(V,y,L)=>{if(J.signal.aborted)throw new M(R.ConnectionClosed,"Request was cancelled");let z={...L,relatedRequestId:Z.id};if(Y&&!z.relatedTask)z.relatedTask={taskId:Y};let I=z.relatedTask?.taskId??Y;if(I&&K)await K.updateTaskStatus(I,"input_required");return await this.request(V,y,z)},authInfo:$?.authInfo,requestId:Z.id,requestInfo:$?.requestInfo,taskId:Y,taskStore:K,taskRequestedTtl:D?.ttl,closeSSEStream:$?.closeSSEStream,closeStandaloneSSEStream:$?.closeStandaloneSSEStream};Promise.resolve().then(()=>{if(D)this.assertTaskHandlerCapability(Z.method)}).then(()=>X(Z,w)).then(async(V)=>{if(J.signal.aborted)return;let y={result:V,jsonrpc:"2.0",id:Z.id};if(Y&&this._taskMessageQueue)await this._enqueueTaskMessage(Y,{type:"response",message:y,timestamp:Date.now()},Q?.sessionId);else await Q?.send(y)},async(V)=>{if(J.signal.aborted)return;let y={jsonrpc:"2.0",id:Z.id,error:{code:Number.isSafeInteger(V.code)?V.code:R.InternalError,message:V.message??"Internal error",...V.data!==void 0&&{data:V.data}}};if(Y&&this._taskMessageQueue)await this._enqueueTaskMessage(Y,{type:"error",message:y,timestamp:Date.now()},Q?.sessionId);else await Q?.send(y)}).catch((V)=>this._onerror(Error(`Failed to send response: ${V}`))).finally(()=>{this._requestHandlerAbortControllers.delete(Z.id)})}_onprogress(Z){let{progressToken:$,...X}=Z.params,Q=Number($),Y=this._progressHandlers.get(Q);if(!Y){this._onerror(Error(`Received a progress notification for an unknown token: ${JSON.stringify(Z)}`));return}let J=this._responseHandlers.get(Q),D=this._timeoutInfo.get(Q);if(D&&J&&D.resetTimeoutOnProgress)try{this._resetTimeout(Q)}catch(K){this._responseHandlers.delete(Q),this._progressHandlers.delete(Q),this._cleanupTimeout(Q),J(K);return}Y(X)}_onresponse(Z){let $=Number(Z.id),X=this._requestResolvers.get($);if(X){if(this._requestResolvers.delete($),nZ(Z))X(Z);else{let J=new M(Z.error.code,Z.error.message,Z.error.data);X(J)}return}let Q=this._responseHandlers.get($);if(Q===void 0){this._onerror(Error(`Received a response for an unknown message ID: ${JSON.stringify(Z)}`));return}this._responseHandlers.delete($),this._cleanupTimeout($);let Y=!1;if(nZ(Z)&&Z.result&&typeof Z.result==="object"){let J=Z.result;if(J.task&&typeof J.task==="object"){let D=J.task;if(typeof D.taskId==="string")Y=!0,this._taskProgressTokens.set(D.taskId,$)}}if(!Y)this._progressHandlers.delete($);if(nZ(Z))Q(Z);else{let J=M.fromError(Z.error.code,Z.error.message,Z.error.data);Q(J)}}get transport(){return this._transport}async close(){await this._transport?.close()}async*requestStream(Z,$,X){let{task:Q}=X??{};if(!Q){try{yield{type:"result",result:await this.request(Z,$,X)}}catch(J){yield{type:"error",error:J instanceof M?J:new M(R.InternalError,String(J))}}return}let Y;try{let J=await this.request(Z,oZ,X);if(J.task)Y=J.task.taskId,yield{type:"taskCreated",task:J.task};else throw new M(R.InternalError,"Task creation did not return a task");while(!0){let D=await this.getTask({taskId:Y},X);if(yield{type:"taskStatus",task:D},uZ(D.status)){if(D.status==="completed")yield{type:"result",result:await this.getTaskResult({taskId:Y},$,X)};else if(D.status==="failed")yield{type:"error",error:new M(R.InternalError,`Task ${Y} failed`)};else if(D.status==="cancelled")yield{type:"error",error:new M(R.InternalError,`Task ${Y} was cancelled`)};return}if(D.status==="input_required"){yield{type:"result",result:await this.getTaskResult({taskId:Y},$,X)};return}let K=D.pollInterval??this._options?.defaultTaskPollInterval??1000;await new Promise((w)=>setTimeout(w,K)),X?.signal?.throwIfAborted()}}catch(J){yield{type:"error",error:J instanceof M?J:new M(R.InternalError,String(J))}}}request(Z,$,X){let{relatedRequestId:Q,resumptionToken:Y,onresumptiontoken:J,task:D,relatedTask:K}=X??{};return new Promise((w,V)=>{let y=(q)=>{V(q)};if(!this._transport){y(Error("Not connected"));return}if(this._options?.enforceStrictCapabilities===!0)try{if(this.assertCapabilityForMethod(Z.method),D)this.assertTaskCapability(Z.method)}catch(q){y(q);return}X?.signal?.throwIfAborted();let L=this._requestMessageId++,z={...Z,jsonrpc:"2.0",id:L};if(X?.onprogress)this._progressHandlers.set(L,X.onprogress),z.params={...Z.params,_meta:{...Z.params?._meta||{},progressToken:L}};if(D)z.params={...z.params,task:D};if(K)z.params={...z.params,_meta:{...z.params?._meta||{},[EZ]:K}};let I=(q)=>{this._responseHandlers.delete(L),this._progressHandlers.delete(L),this._cleanupTimeout(L),this._transport?.send({jsonrpc:"2.0",method:"notifications/cancelled",params:{requestId:L,reason:String(q)}},{relatedRequestId:Q,resumptionToken:Y,onresumptiontoken:J}).catch((r)=>this._onerror(Error(`Failed to send cancellation: ${r}`)));let g=q instanceof M?q:new M(R.RequestTimeout,String(q));V(g)};this._responseHandlers.set(L,(q)=>{if(X?.signal?.aborted)return;if(q instanceof Error)return V(q);try{let g=NZ($,q.result);if(!g.success)V(g.error);else w(g.data)}catch(g){V(g)}}),X?.signal?.addEventListener("abort",()=>{I(X?.signal?.reason)});let C=X?.timeout??o7,l=()=>I(M.fromError(R.RequestTimeout,"Request timed out",{timeout:C}));this._setupTimeout(L,C,X?.maxTotalTimeout,l,X?.resetTimeoutOnProgress??!1);let f=K?.taskId;if(f){let q=(g)=>{let r=this._responseHandlers.get(L);if(r)r(g);else this._onerror(Error(`Response handler missing for side-channeled request ${L}`))};this._requestResolvers.set(L,q),this._enqueueTaskMessage(f,{type:"request",message:z,timestamp:Date.now()}).catch((g)=>{this._cleanupTimeout(L),V(g)})}else this._transport.send(z,{relatedRequestId:Q,resumptionToken:Y,onresumptiontoken:J}).catch((q)=>{this._cleanupTimeout(L),V(q)})})}async getTask(Z,$){return this.request({method:"tasks/get",params:Z},y1,$)}async getTaskResult(Z,$,X){return this.request({method:"tasks/result",params:Z},$,X)}async listTasks(Z,$){return this.request({method:"tasks/list",params:Z},F1,$)}async cancelTask(Z,$){return this.request({method:"tasks/cancel",params:Z},h2,$)}async notification(Z,$){if(!this._transport)throw Error("Not connected");this.assertNotificationCapability(Z.method);let X=$?.relatedTask?.taskId;if(X){let D={...Z,jsonrpc:"2.0",params:{...Z.params,_meta:{...Z.params?._meta||{},[EZ]:$.relatedTask}}};await this._enqueueTaskMessage(X,{type:"notification",message:D,timestamp:Date.now()});return}if((this._options?.debouncedNotificationMethods??[]).includes(Z.method)&&!Z.params&&!$?.relatedRequestId&&!$?.relatedTask){if(this._pendingDebouncedNotifications.has(Z.method))return;this._pendingDebouncedNotifications.add(Z.method),Promise.resolve().then(()=>{if(this._pendingDebouncedNotifications.delete(Z.method),!this._transport)return;let D={...Z,jsonrpc:"2.0"};if($?.relatedTask)D={...D,params:{...D.params,_meta:{...D.params?._meta||{},[EZ]:$.relatedTask}}};this._transport?.send(D,$).catch((K)=>this._onerror(K))});return}let J={...Z,jsonrpc:"2.0"};if($?.relatedTask)J={...J,params:{...J.params,_meta:{...J.params?._meta||{},[EZ]:$.relatedTask}}};await this._transport.send(J,$)}setRequestHandler(Z,$){let X=C0(Z);this.assertRequestHandlerCapability(X),this._requestHandlers.set(X,(Q,Y)=>{let J=T0(Z,Q);return Promise.resolve($(J,Y))})}removeRequestHandler(Z){this._requestHandlers.delete(Z)}assertCanSetRequestHandler(Z){if(this._requestHandlers.has(Z))throw Error(`A request handler for ${Z} already exists, which would be overridden`)}setNotificationHandler(Z,$){let X=C0(Z);this._notificationHandlers.set(X,(Q)=>{let Y=T0(Z,Q);return Promise.resolve($(Y))})}removeNotificationHandler(Z){this._notificationHandlers.delete(Z)}_cleanupTaskProgressHandler(Z){let $=this._taskProgressTokens.get(Z);if($!==void 0)this._progressHandlers.delete($),this._taskProgressTokens.delete(Z)}async _enqueueTaskMessage(Z,$,X){if(!this._taskStore||!this._taskMessageQueue)throw Error("Cannot enqueue task message: taskStore and taskMessageQueue are not configured");let Q=this._options?.maxTaskQueueSize;await this._taskMessageQueue.enqueue(Z,$,X,Q)}async _clearTaskQueue(Z,$){if(this._taskMessageQueue){let X=await this._taskMessageQueue.dequeueAll(Z,$);for(let Q of X)if(Q.type==="request"&&h$(Q.message)){let Y=Q.message.id,J=this._requestResolvers.get(Y);if(J)J(new M(R.InternalError,"Task cancelled or completed")),this._requestResolvers.delete(Y);else this._onerror(Error(`Resolver missing for request ${Y} during task ${Z} cleanup`))}}}async _waitForTaskUpdate(Z,$){let X=this._options?.defaultTaskPollInterval??1000;try{let Q=await this._taskStore?.getTask(Z);if(Q?.pollInterval)X=Q.pollInterval}catch{}return new Promise((Q,Y)=>{if($.aborted){Y(new M(R.InvalidRequest,"Request cancelled"));return}let J=setTimeout(Q,X);$.addEventListener("abort",()=>{clearTimeout(J),Y(new M(R.InvalidRequest,"Request cancelled"))},{once:!0})})}requestTaskStore(Z,$){let X=this._taskStore;if(!X)throw Error("No task store configured");return{createTask:async(Q)=>{if(!Z)throw Error("No request provided");return await X.createTask(Q,Z.id,{method:Z.method,params:Z.params},$)},getTask:async(Q)=>{let Y=await X.getTask(Q,$);if(!Y)throw new M(R.InvalidParams,"Failed to retrieve task: Task not found");return Y},storeTaskResult:async(Q,Y,J)=>{await X.storeTaskResult(Q,Y,J,$);let D=await X.getTask(Q,$);if(D){let K=i$.parse({method:"notifications/tasks/status",params:D});if(await this.notification(K),uZ(D.status))this._cleanupTaskProgressHandler(Q)}},getTaskResult:(Q)=>{return X.getTaskResult(Q,$)},updateTaskStatus:async(Q,Y,J)=>{let D=await X.getTask(Q,$);if(!D)throw new M(R.InvalidParams,`Task "${Q}" not found - it may have been cleaned up`);if(uZ(D.status))throw new M(R.InvalidParams,`Cannot update task "${Q}" from terminal status "${D.status}" to "${Y}". Terminal states (completed, failed, cancelled) cannot transition to other states.`);await X.updateTaskStatus(Q,Y,J,$);let K=await X.getTask(Q,$);if(K){let w=i$.parse({method:"notifications/tasks/status",params:K});if(await this.notification(w),uZ(K.status))this._cleanupTaskProgressHandler(Q)}},listTasks:(Q)=>{return X.listTasks(Q,$)}}}}function o2(Z){return Z!==null&&typeof Z==="object"&&!Array.isArray(Z)}function a2(Z,$){let X={...Z};for(let Q in $){let Y=Q,J=$[Y];if(J===void 0)continue;let D=X[Y];if(o2(D)&&o2(J))X[Y]={...D,...J};else X[Y]=J}return X}var s2=_0(a7(),1),t2=_0(s7(),1);function t7(){let Z=new s2.default({strict:!1,validateFormats:!0,validateSchema:!1,allErrors:!0});return t2.default(Z),Z}class S0{constructor(Z){this._ajv=Z??t7()}getValidator(Z){let $="$id"in Z&&typeof Z.$id==="string"?this._ajv.getSchema(Z.$id)??this._ajv.compile(Z):this._ajv.compile(Z);return(X)=>{if($(X))return{valid:!0,data:X,errorMessage:void 0};else return{valid:!1,data:void 0,errorMessage:this._ajv.errorsText($.errors)}}}}class E0{constructor(Z){this._client=Z}async*callToolStream(Z,$=fZ,X){let Q=this._client,Y={...X,task:X?.task??(Q.isToolTask(Z.name)?{}:void 0)},J=Q.requestStream({method:"tools/call",params:Z},$,Y),D=Q.getToolOutputValidator(Z.name);for await(let K of J){if(K.type==="result"&&D){let w=K.result;if(!w.structuredContent&&!w.isError){yield{type:"error",error:new M(R.InvalidRequest,`Tool ${Z.name} has an output schema but did not return structured content`)};return}if(w.structuredContent)try{let V=D(w.structuredContent);if(!V.valid){yield{type:"error",error:new M(R.InvalidParams,`Structured content does not match the tool's output schema: ${V.errorMessage}`)};return}}catch(V){if(V instanceof M){yield{type:"error",error:V};return}yield{type:"error",error:new M(R.InvalidParams,`Failed to validate structured content: ${V instanceof Error?V.message:String(V)}`)};return}}yield K}}async getTask(Z,$){return this._client.getTask({taskId:Z},$)}async getTaskResult(Z,$,X){return this._client.getTaskResult({taskId:Z},$,X)}async listTasks(Z,$){return this._client.listTasks(Z?{cursor:Z}:void 0,$)}async cancelTask(Z,$){return this._client.cancelTask({taskId:Z},$)}requestStream(Z,$,X){return this._client.requestStream(Z,$,X)}}function r2(Z,$,X){if(!Z)throw Error(`${X} does not support task creation (required for ${$})`);switch($){case"tools/call":if(!Z.tools?.call)throw Error(`${X} does not support task creation for tools/call (required for ${$})`);break;default:break}}function e2(Z,$,X){if(!Z)throw Error(`${X} does not support task creation (required for ${$})`);switch($){case"sampling/createMessage":if(!Z.sampling?.createMessage)throw Error(`${X} does not support task creation for sampling/createMessage (required for ${$})`);break;case"elicitation/create":if(!Z.elicitation?.create)throw Error(`${X} does not support task creation for elicitation/create (required for ${$})`);break;default:break}}function b1(Z,$){if(!Z||$===null||typeof $!=="object")return;if(Z.type==="object"&&Z.properties&&typeof Z.properties==="object"){let X=$,Q=Z.properties;for(let Y of Object.keys(Q)){let J=Q[Y];if(X[Y]===void 0&&Object.prototype.hasOwnProperty.call(J,"default"))X[Y]=J.default;if(X[Y]!==void 0)b1(J,X[Y])}}if(Array.isArray(Z.anyOf)){for(let X of Z.anyOf)if(typeof X!=="boolean")b1(X,$)}if(Array.isArray(Z.oneOf)){for(let X of Z.oneOf)if(typeof X!=="boolean")b1(X,$)}}function r7(Z){if(!Z)return{supportsFormMode:!1,supportsUrlMode:!1};let $=Z.form!==void 0,X=Z.url!==void 0;return{supportsFormMode:$||!$&&!X,supportsUrlMode:X}}class A1 extends I0{constructor(Z,$){super($);if(this._clientInfo=Z,this._cachedToolOutputValidators=new Map,this._cachedKnownTaskTools=new Set,this._cachedRequiredTaskTools=new Set,this._listChangedDebounceTimers=new Map,this._capabilities=$?.capabilities??{},this._jsonSchemaValidator=$?.jsonSchemaValidator??new S0,$?.listChanged)this._pendingListChangedConfig=$.listChanged}_setupListChangedHandlers(Z){if(Z.tools&&this._serverCapabilities?.tools?.listChanged)this._setupListChangedHandler("tools",o$,Z.tools,async()=>{return(await this.listTools()).tools});if(Z.prompts&&this._serverCapabilities?.prompts?.listChanged)this._setupListChangedHandler("prompts",j0,Z.prompts,async()=>{return(await this.listPrompts()).prompts});if(Z.resources&&this._serverCapabilities?.resources?.listChanged)this._setupListChangedHandler("resources",F0,Z.resources,async()=>{return(await this.listResources()).resources})}get experimental(){if(!this._experimental)this._experimental={tasks:new E0(this)};return this._experimental}registerCapabilities(Z){if(this.transport)throw Error("Cannot register capabilities after connecting to transport");this._capabilities=a2(this._capabilities,Z)}setRequestHandler(Z,$){let Q=B1(Z)?.method;if(!Q)throw Error("Schema is missing a method literal");let Y;if(D$(Q)){let D=Q;Y=D._zod?.def?.value??D.value}else{let D=Q;Y=D._def?.value??D.value}if(typeof Y!=="string")throw Error("Schema method literal must be a string");let J=Y;if(J==="elicitation/create"){let D=async(K,w)=>{let V=NZ(R0,K);if(!V.success){let q=V.error instanceof Error?V.error.message:String(V.error);throw new M(R.InvalidParams,`Invalid elicitation request: ${q}`)}let{params:y}=V.data;y.mode=y.mode??"form";let{supportsFormMode:L,supportsUrlMode:z}=r7(this._capabilities.elicitation);if(y.mode==="form"&&!L)throw new M(R.InvalidParams,"Client does not support form-mode elicitation requests");if(y.mode==="url"&&!z)throw new M(R.InvalidParams,"Client does not support URL-mode elicitation requests");let I=await Promise.resolve($(K,w));if(y.task){let q=NZ(oZ,I);if(!q.success){let g=q.error instanceof Error?q.error.message:String(q.error);throw new M(R.InvalidParams,`Invalid task creation result: ${g}`)}return q.data}let C=NZ(g0,I);if(!C.success){let q=C.error instanceof Error?C.error.message:String(C.error);throw new M(R.InvalidParams,`Invalid elicitation result: ${q}`)}let l=C.data,f=y.mode==="form"?y.requestedSchema:void 0;if(y.mode==="form"&&l.action==="accept"&&l.content&&f){if(this._capabilities.elicitation?.form?.applyDefaults)try{b1(f,l.content)}catch{}}return l};return super.setRequestHandler(Z,D)}if(J==="sampling/createMessage"){let D=async(K,w)=>{let V=NZ(M0,K);if(!V.success){let l=V.error instanceof Error?V.error.message:String(V.error);throw new M(R.InvalidParams,`Invalid sampling request: ${l}`)}let{params:y}=V.data,L=await Promise.resolve($(K,w));if(y.task){let l=NZ(oZ,L);if(!l.success){let f=l.error instanceof Error?l.error.message:String(l.error);throw new M(R.InvalidParams,`Invalid task creation result: ${f}`)}return l.data}let I=y.tools||y.toolChoice?U0:q0,C=NZ(I,L);if(!C.success){let l=C.error instanceof Error?C.error.message:String(C.error);throw new M(R.InvalidParams,`Invalid sampling result: ${l}`)}return C.data};return super.setRequestHandler(Z,D)}return super.setRequestHandler(Z,$)}assertCapability(Z,$){if(!this._serverCapabilities?.[Z])throw Error(`Server does not support ${Z} (required for ${$})`)}async connect(Z,$){if(await super.connect(Z),Z.sessionId!==void 0)return;try{let X=await this.request({method:"initialize",params:{protocolVersion:x$,capabilities:this._capabilities,clientInfo:this._clientInfo}},G0,$);if(X===void 0)throw Error(`Server sent invalid initialize result: ${X}`);if(!g2.includes(X.protocolVersion))throw Error(`Server's protocol version is not supported: ${X.protocolVersion}`);if(this._serverCapabilities=X.capabilities,this._serverVersion=X.serverInfo,Z.setProtocolVersion)Z.setProtocolVersion(X.protocolVersion);if(this._instructions=X.instructions,await this.notification({method:"notifications/initialized"}),this._pendingListChangedConfig)this._setupListChangedHandlers(this._pendingListChangedConfig),this._pendingListChangedConfig=void 0}catch(X){throw this.close(),X}}getServerCapabilities(){return this._serverCapabilities}getServerVersion(){return this._serverVersion}getInstructions(){return this._instructions}assertCapabilityForMethod(Z){switch(Z){case"logging/setLevel":if(!this._serverCapabilities?.logging)throw Error(`Server does not support logging (required for ${Z})`);break;case"prompts/get":case"prompts/list":if(!this._serverCapabilities?.prompts)throw Error(`Server does not support prompts (required for ${Z})`);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 ${Z})`);if(Z==="resources/subscribe"&&!this._serverCapabilities.resources.subscribe)throw Error(`Server does not support resource subscriptions (required for ${Z})`);break;case"tools/call":case"tools/list":if(!this._serverCapabilities?.tools)throw Error(`Server does not support tools (required for ${Z})`);break;case"completion/complete":if(!this._serverCapabilities?.completions)throw Error(`Server does not support completions (required for ${Z})`);break;case"initialize":break;case"ping":break}}assertNotificationCapability(Z){switch(Z){case"notifications/roots/list_changed":if(!this._capabilities.roots?.listChanged)throw Error(`Client does not support roots list changed notifications (required for ${Z})`);break;case"notifications/initialized":break;case"notifications/cancelled":break;case"notifications/progress":break}}assertRequestHandlerCapability(Z){if(!this._capabilities)return;switch(Z){case"sampling/createMessage":if(!this._capabilities.sampling)throw Error(`Client does not support sampling capability (required for ${Z})`);break;case"elicitation/create":if(!this._capabilities.elicitation)throw Error(`Client does not support elicitation capability (required for ${Z})`);break;case"roots/list":if(!this._capabilities.roots)throw Error(`Client does not support roots capability (required for ${Z})`);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 ${Z})`);break;case"ping":break}}assertTaskCapability(Z){r2(this._serverCapabilities?.tasks?.requests,Z,"Server")}assertTaskHandlerCapability(Z){if(!this._capabilities)return;e2(this._capabilities.tasks?.requests,Z,"Client")}async ping(Z){return this.request({method:"ping"},cZ,Z)}async complete(Z,$){return this.request({method:"completion/complete",params:Z},k0,$)}async setLoggingLevel(Z,$){return this.request({method:"logging/setLevel",params:{level:Z}},cZ,$)}async getPrompt(Z,$){return this.request({method:"prompts/get",params:Z},N0,$)}async listPrompts(Z,$){return this.request({method:"prompts/list",params:Z},O0,$)}async listResources(Z,$){return this.request({method:"resources/list",params:Z},V0,$)}async listResourceTemplates(Z,$){return this.request({method:"resources/templates/list",params:Z},y0,$)}async readResource(Z,$){return this.request({method:"resources/read",params:Z},w0,$)}async subscribeResource(Z,$){return this.request({method:"resources/subscribe",params:Z},cZ,$)}async unsubscribeResource(Z,$){return this.request({method:"resources/unsubscribe",params:Z},cZ,$)}async callTool(Z,$=fZ,X){if(this.isToolTaskRequired(Z.name))throw new M(R.InvalidRequest,`Tool "${Z.name}" requires task-based execution. Use client.experimental.tasks.callToolStream() instead.`);let Q=await this.request({method:"tools/call",params:Z},$,X),Y=this.getToolOutputValidator(Z.name);if(Y){if(!Q.structuredContent&&!Q.isError)throw new M(R.InvalidRequest,`Tool ${Z.name} has an output schema but did not return structured content`);if(Q.structuredContent)try{let J=Y(Q.structuredContent);if(!J.valid)throw new M(R.InvalidParams,`Structured content does not match the tool's output schema: ${J.errorMessage}`)}catch(J){if(J instanceof M)throw J;throw new M(R.InvalidParams,`Failed to validate structured content: ${J instanceof Error?J.message:String(J)}`)}}return Q}isToolTask(Z){if(!this._serverCapabilities?.tasks?.requests?.tools?.call)return!1;return this._cachedKnownTaskTools.has(Z)}isToolTaskRequired(Z){return this._cachedRequiredTaskTools.has(Z)}cacheToolMetadata(Z){this._cachedToolOutputValidators.clear(),this._cachedKnownTaskTools.clear(),this._cachedRequiredTaskTools.clear();for(let $ of Z){if($.outputSchema){let Q=this._jsonSchemaValidator.getValidator($.outputSchema);this._cachedToolOutputValidators.set($.name,Q)}let X=$.execution?.taskSupport;if(X==="required"||X==="optional")this._cachedKnownTaskTools.add($.name);if(X==="required")this._cachedRequiredTaskTools.add($.name)}}getToolOutputValidator(Z){return this._cachedToolOutputValidators.get(Z)}async listTools(Z,$){let X=await this.request({method:"tools/list",params:Z},c$,$);return this.cacheToolMetadata(X.tools),X}_setupListChangedHandler(Z,$,X,Q){let Y=i2.safeParse(X);if(!Y.success)throw Error(`Invalid ${Z} listChanged options: ${Y.error.message}`);if(typeof X.onChanged!=="function")throw Error(`Invalid ${Z} listChanged options: onChanged must be a function`);let{autoRefresh:J,debounceMs:D}=Y.data,{onChanged:K}=X,w=async()=>{if(!J){K(null,null);return}try{let y=await Q();K(null,y)}catch(y){let L=y instanceof Error?y:Error(String(y));K(L,null)}},V=()=>{if(D){let y=this._listChangedDebounceTimers.get(Z);if(y)clearTimeout(y);let L=setTimeout(w,D);this._listChangedDebounceTimers.set(Z,L)}else w()};this.setNotificationHandler($,V)}async sendRootsListChanged(){return this.notification({method:"notifications/roots/list_changed"})}}function H$(Z){if(!Z)return{};if(Z instanceof Headers)return Object.fromEntries(Z.entries());if(Array.isArray(Z))return Object.fromEntries(Z);return{...Z}}function P1(Z=fetch,$){if(!$)return Z;return async(X,Q)=>{let Y={...$,...Q,headers:Q?.headers?{...H$($.headers),...H$(Q.headers)}:$.headers};return Z(X,Y)}}var v0;v0=globalThis.crypto;async function e7(Z){return(await v0).getRandomValues(new Uint8Array(Z))}async function ZX(Z){let X=Math.pow(2,8)-Math.pow(2,8)%66,Q="";while(Q.length<Z){let Y=await e7(Z-Q.length);for(let J of Y)if(J<X)Q+="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~"[J%66]}return Q}async function $X(Z){return await ZX(Z)}async function XX(Z){let $=await(await v0).subtle.digest("SHA-256",new TextEncoder().encode(Z));return btoa(String.fromCharCode(...new Uint8Array($))).replace(/\//g,"_").replace(/\+/g,"-").replace(/=/g,"")}async function f0(Z){if(!Z)Z=43;if(Z<43||Z>128)throw`Expected a length between 43 and 128. Received ${Z}.`;let $=await $X(Z),X=await XX($);return{code_verifier:$,code_challenge:X}}var GZ=X3().superRefine((Z,$)=>{if(!URL.canParse(Z))return $.addIssue({code:Y3.custom,message:"URL must be parseable",fatal:!0}),$3}).refine((Z)=>{let $=new URL(Z);return $.protocol!=="javascript:"&&$.protocol!=="data:"&&$.protocol!=="vbscript:"},{message:"URL cannot use javascript:, data:, or vbscript: scheme"}),B3=WZ({resource:W().url(),authorization_servers:F(GZ).optional(),jwks_uri:W().url().optional(),scopes_supported:F(W()).optional(),bearer_methods_supported:F(W()).optional(),resource_signing_alg_values_supported:F(W()).optional(),resource_name:W().optional(),resource_documentation:W().optional(),resource_policy_uri:W().url().optional(),resource_tos_uri:W().url().optional(),tls_client_certificate_bound_access_tokens:m().optional(),authorization_details_types_supported:F(W()).optional(),dpop_signing_alg_values_supported:F(W()).optional(),dpop_bound_access_tokens_required:m().optional()}),u0=WZ({issuer:W(),authorization_endpoint:GZ,token_endpoint:GZ,registration_endpoint:GZ.optional(),scopes_supported:F(W()).optional(),response_types_supported:F(W()),response_modes_supported:F(W()).optional(),grant_types_supported:F(W()).optional(),token_endpoint_auth_methods_supported:F(W()).optional(),token_endpoint_auth_signing_alg_values_supported:F(W()).optional(),service_documentation:GZ.optional(),revocation_endpoint:GZ.optional(),revocation_endpoint_auth_methods_supported:F(W()).optional(),revocation_endpoint_auth_signing_alg_values_supported:F(W()).optional(),introspection_endpoint:W().optional(),introspection_endpoint_auth_methods_supported:F(W()).optional(),introspection_endpoint_auth_signing_alg_values_supported:F(W()).optional(),code_challenge_methods_supported:F(W()).optional(),client_id_metadata_document_supported:m().optional()}),QX=WZ({issuer:W(),authorization_endpoint:GZ,token_endpoint:GZ,userinfo_endpoint:GZ.optional(),jwks_uri:GZ,registration_endpoint:GZ.optional(),scopes_supported:F(W()).optional(),response_types_supported:F(W()),response_modes_supported:F(W()).optional(),grant_types_supported:F(W()).optional(),acr_values_supported:F(W()).optional(),subject_types_supported:F(W()),id_token_signing_alg_values_supported:F(W()),id_token_encryption_alg_values_supported:F(W()).optional(),id_token_encryption_enc_values_supported:F(W()).optional(),userinfo_signing_alg_values_supported:F(W()).optional(),userinfo_encryption_alg_values_supported:F(W()).optional(),userinfo_encryption_enc_values_supported:F(W()).optional(),request_object_signing_alg_values_supported:F(W()).optional(),request_object_encryption_alg_values_supported:F(W()).optional(),request_object_encryption_enc_values_supported:F(W()).optional(),token_endpoint_auth_methods_supported:F(W()).optional(),token_endpoint_auth_signing_alg_values_supported:F(W()).optional(),display_values_supported:F(W()).optional(),claim_types_supported:F(W()).optional(),claims_supported:F(W()).optional(),service_documentation:W().optional(),claims_locales_supported:F(W()).optional(),ui_locales_supported:F(W()).optional(),claims_parameter_supported:m().optional(),request_parameter_supported:m().optional(),request_uri_parameter_supported:m().optional(),require_request_uri_registration:m().optional(),op_policy_uri:GZ.optional(),op_tos_uri:GZ.optional(),client_id_metadata_document_supported:m().optional()}),J3=O({...QX.shape,...u0.pick({code_challenge_methods_supported:!0}).shape}),D3=O({access_token:W(),id_token:W().optional(),token_type:W(),expires_in:W3.number().optional(),scope:W().optional(),refresh_token:W().optional()}).strip(),K3=O({error:W(),error_description:W().optional(),error_uri:W().optional()}),Z3=GZ.optional().or(N("").transform(()=>{return})),YX=O({redirect_uris:F(GZ),token_endpoint_auth_method:W().optional(),grant_types:F(W()).optional(),response_types:F(W()).optional(),client_name:W().optional(),client_uri:GZ.optional(),logo_uri:Z3,scope:W().optional(),contacts:F(W()).optional(),tos_uri:Z3,policy_uri:W().optional(),jwks_uri:GZ.optional(),jwks:Q3().optional(),software_id:W().optional(),software_version:W().optional(),software_statement:W().optional()}).strip(),WX=O({client_id:W(),client_secret:W().optional(),client_id_issued_at:h().optional(),client_secret_expires_at:h().optional()}).strip(),x3=YX.merge(WX),l4=O({error:W(),error_description:W().optional()}).strip(),m4=O({token:W(),token_type_hint:W().optional()}).strip();function G3(Z){let $=typeof Z==="string"?new URL(Z):new URL(Z.href);return $.hash="",$}function H3({requestedResource:Z,configuredResource:$}){let X=typeof Z==="string"?new URL(Z):new URL(Z.href),Q=typeof $==="string"?new URL($):new URL($.href);if(X.origin!==Q.origin)return!1;if(X.pathname.length<Q.pathname.length)return!1;let Y=X.pathname.endsWith("/")?X.pathname:X.pathname+"/",J=Q.pathname.endsWith("/")?Q.pathname:Q.pathname+"/";return Y.startsWith(J)}class QZ extends Error{constructor(Z,$){super(Z);this.errorUri=$,this.name=this.constructor.name}toResponseObject(){let Z={error:this.errorCode,error_description:this.message};if(this.errorUri)Z.error_uri=this.errorUri;return Z}get errorCode(){return this.constructor.errorCode}}class N1 extends QZ{}N1.errorCode="invalid_request";class V$ extends QZ{}V$.errorCode="invalid_client";class y$ extends QZ{}y$.errorCode="invalid_grant";class L$ extends QZ{}L$.errorCode="unauthorized_client";class j1 extends QZ{}j1.errorCode="unsupported_grant_type";class M1 extends QZ{}M1.errorCode="invalid_scope";class q1 extends QZ{}q1.errorCode="access_denied";class hZ extends QZ{}hZ.errorCode="server_error";class U1 extends QZ{}U1.errorCode="temporarily_unavailable";class R1 extends QZ{}R1.errorCode="unsupported_response_type";class g1 extends QZ{}g1.errorCode="unsupported_token_type";class k1 extends QZ{}k1.errorCode="invalid_token";class C1 extends QZ{}C1.errorCode="method_not_allowed";class T1 extends QZ{}T1.errorCode="too_many_requests";class w$ extends QZ{}w$.errorCode="invalid_client_metadata";class I1 extends QZ{}I1.errorCode="insufficient_scope";class _1 extends QZ{}_1.errorCode="invalid_target";var V3={[N1.errorCode]:N1,[V$.errorCode]:V$,[y$.errorCode]:y$,[L$.errorCode]:L$,[j1.errorCode]:j1,[M1.errorCode]:M1,[q1.errorCode]:q1,[hZ.errorCode]:hZ,[U1.errorCode]:U1,[R1.errorCode]:R1,[g1.errorCode]:g1,[k1.errorCode]:k1,[C1.errorCode]:C1,[T1.errorCode]:T1,[w$.errorCode]:w$,[I1.errorCode]:I1,[_1.errorCode]:_1};class HZ extends Error{constructor(Z){super(Z??"Unauthorized")}}function BX(Z){return["client_secret_basic","client_secret_post","none"].includes(Z)}var h0="code",p0="S256";function JX(Z,$){let X=Z.client_secret!==void 0;if($.length===0)return X?"client_secret_post":"none";if("token_endpoint_auth_method"in Z&&Z.token_endpoint_auth_method&&BX(Z.token_endpoint_auth_method)&&$.includes(Z.token_endpoint_auth_method))return Z.token_endpoint_auth_method;if(X&&$.includes("client_secret_basic"))return"client_secret_basic";if(X&&$.includes("client_secret_post"))return"client_secret_post";if($.includes("none"))return"none";return X?"client_secret_post":"none"}function DX(Z,$,X,Q){let{client_id:Y,client_secret:J}=$;switch(Z){case"client_secret_basic":KX(Y,J,X);return;case"client_secret_post":xX(Y,J,Q);return;case"none":GX(Y,Q);return;default:throw Error(`Unsupported client authentication method: ${Z}`)}}function KX(Z,$,X){if(!$)throw Error("client_secret_basic authentication requires a client_secret");let Q=btoa(`${Z}:${$}`);X.set("Authorization",`Basic ${Q}`)}function xX(Z,$,X){if(X.set("client_id",Z),$)X.set("client_secret",$)}function GX(Z,$){$.set("client_id",Z)}async function L3(Z){let $=Z instanceof Response?Z.status:void 0,X=Z instanceof Response?await Z.text():Z;try{let Q=K3.parse(JSON.parse(X)),{error:Y,error_description:J,error_uri:D}=Q;return new(V3[Y]||hZ)(J||"",D)}catch(Q){let Y=`${$?`HTTP ${$}: `:""}Invalid OAuth error response: ${Q}. Raw body: ${X}`;return new hZ(Y)}}async function CZ(Z,$){try{return await l0(Z,$)}catch(X){if(X instanceof V$||X instanceof L$)return await Z.invalidateCredentials?.("all"),await l0(Z,$);else if(X instanceof y$)return await Z.invalidateCredentials?.("tokens"),await l0(Z,$);throw X}}async function l0(Z,{serverUrl:$,authorizationCode:X,scope:Q,resourceMetadataUrl:Y,fetchFn:J}){let D=await Z.discoveryState?.(),K,w,V,y=Y;if(!y&&D?.resourceMetadataUrl)y=new URL(D.resourceMetadataUrl);if(D?.authorizationServerUrl){if(w=D.authorizationServerUrl,K=D.resourceMetadata,V=D.authorizationServerMetadata??await F3(w,{fetchFn:J}),!K)try{K=await w3($,{resourceMetadataUrl:y},J)}catch{}if(V!==D.authorizationServerMetadata||K!==D.resourceMetadata)await Z.saveDiscoveryState?.({authorizationServerUrl:String(w),resourceMetadataUrl:y?.toString(),resourceMetadata:K,authorizationServerMetadata:V})}else{let g=await OX($,{resourceMetadataUrl:y,fetchFn:J});w=g.authorizationServerUrl,V=g.authorizationServerMetadata,K=g.resourceMetadata,await Z.saveDiscoveryState?.({authorizationServerUrl:String(w),resourceMetadataUrl:y?.toString(),resourceMetadata:K,authorizationServerMetadata:V})}let L=await VX($,Z,K),z=await Promise.resolve(Z.clientInformation());if(!z){if(X!==void 0)throw Error("Existing OAuth client information is required when exchanging an authorization code");let g=V?.client_id_metadata_document_supported===!0,r=Z.clientMetadataUrl;if(r&&!HX(r))throw new w$(`clientMetadataUrl must be a valid HTTPS URL with a non-root pathname, got: ${r}`);if(g&&r)z={client_id:r},await Z.saveClientInformation?.(z);else{if(!Z.saveClientInformation)throw Error("OAuth client information must be saveable for dynamic registration");let qZ=await NX(w,{metadata:V,clientMetadata:Z.clientMetadata,fetchFn:J});await Z.saveClientInformation(qZ),z=qZ}}let I=!Z.redirectUrl;if(X!==void 0||I){let g=await PX(Z,w,{metadata:V,resource:L,authorizationCode:X,fetchFn:J});return await Z.saveTokens(g),"AUTHORIZED"}let C=await Z.tokens();if(C?.refresh_token)try{let g=await AX(w,{metadata:V,clientInformation:z,refreshToken:C.refresh_token,resource:L,addClientAuthentication:Z.addClientAuthentication,fetchFn:J});return await Z.saveTokens(g),"AUTHORIZED"}catch(g){if(!(g instanceof QZ)||g instanceof hZ);else throw g}let l=Z.state?await Z.state():void 0,{authorizationUrl:f,codeVerifier:q}=await zX(w,{metadata:V,clientInformation:z,state:l,redirectUrl:Z.redirectUrl,scope:Q||K?.scopes_supported?.join(" ")||Z.clientMetadata.scope,resource:L});return await Z.saveCodeVerifier(q),await Z.redirectToAuthorization(f),"REDIRECT"}function HX(Z){if(!Z)return!1;try{let $=new URL(Z);return $.protocol==="https:"&&$.pathname!=="/"}catch{return!1}}async function VX(Z,$,X){let Q=G3(Z);if($.validateResourceURL)return await $.validateResourceURL(Q,X?.resource);if(!X)return;if(!H3({requestedResource:Q,configuredResource:X.resource}))throw Error(`Protected resource ${X.resource} does not match expected ${Q} (or origin)`);return new URL(X.resource)}function F$(Z){let $=Z.headers.get("WWW-Authenticate");if(!$)return{};let[X,Q]=$.split(" ");if(X.toLowerCase()!=="bearer"||!Q)return{};let Y=m0(Z,"resource_metadata")||void 0,J;if(Y)try{J=new URL(Y)}catch{}let D=m0(Z,"scope")||void 0,K=m0(Z,"error")||void 0;return{resourceMetadataUrl:J,scope:D,error:K}}function m0(Z,$){let X=Z.headers.get("WWW-Authenticate");if(!X)return null;let Q=new RegExp(`${$}=(?:"([^"]+)"|([^\\s,]+))`),Y=X.match(Q);if(Y)return Y[1]||Y[2];return null}async function w3(Z,$,X=fetch){let Q=await wX(Z,"oauth-protected-resource",X,{protocolVersion:$?.protocolVersion,metadataUrl:$?.resourceMetadataUrl});if(!Q||Q.status===404)throw await Q?.body?.cancel(),Error("Resource server does not implement OAuth 2.0 Protected Resource Metadata.");if(!Q.ok)throw await Q.body?.cancel(),Error(`HTTP ${Q.status} trying to load well-known OAuth protected resource metadata.`);return B3.parse(await Q.json())}async function d0(Z,$,X=fetch){try{return await X(Z,{headers:$})}catch(Q){if(Q instanceof TypeError)if($)return d0(Z,void 0,X);else return;throw Q}}function yX(Z,$="",X={}){if($.endsWith("/"))$=$.slice(0,-1);return X.prependPathname?`${$}/.well-known/${Z}`:`/.well-known/${Z}${$}`}async function y3(Z,$,X=fetch){return await d0(Z,{"MCP-Protocol-Version":$},X)}function LX(Z,$){return!Z||Z.status>=400&&Z.status<500&&$!=="/"}async function wX(Z,$,X,Q){let Y=new URL(Z),J=Q?.protocolVersion??x$,D;if(Q?.metadataUrl)D=new URL(Q.metadataUrl);else{let w=yX($,Y.pathname);D=new URL(w,Q?.metadataServerUrl??Y),D.search=Y.search}let K=await y3(D,J,X);if(!Q?.metadataUrl&&LX(K,Y.pathname)){let w=new URL(`/.well-known/${$}`,Y);K=await y3(w,J,X)}return K}function FX(Z){let $=typeof Z==="string"?new URL(Z):Z,X=$.pathname!=="/",Q=[];if(!X)return Q.push({url:new URL("/.well-known/oauth-authorization-server",$.origin),type:"oauth"}),Q.push({url:new URL("/.well-known/openid-configuration",$.origin),type:"oidc"}),Q;let Y=$.pathname;if(Y.endsWith("/"))Y=Y.slice(0,-1);return Q.push({url:new URL(`/.well-known/oauth-authorization-server${Y}`,$.origin),type:"oauth"}),Q.push({url:new URL(`/.well-known/openid-configuration${Y}`,$.origin),type:"oidc"}),Q.push({url:new URL(`${Y}/.well-known/openid-configuration`,$.origin),type:"oidc"}),Q}async function F3(Z,{fetchFn:$=fetch,protocolVersion:X=x$}={}){let Q={"MCP-Protocol-Version":X,Accept:"application/json"},Y=FX(Z);for(let{url:J,type:D}of Y){let K=await d0(J,Q,$);if(!K)continue;if(!K.ok){if(await K.body?.cancel(),K.status>=400&&K.status<500)continue;throw Error(`HTTP ${K.status} trying to load ${D==="oauth"?"OAuth":"OpenID provider"} metadata from ${J}`)}if(D==="oauth")return u0.parse(await K.json());else return J3.parse(await K.json())}return}async function OX(Z,$){let X,Q;try{if(X=await w3(Z,{resourceMetadataUrl:$?.resourceMetadataUrl},$?.fetchFn),X.authorization_servers&&X.authorization_servers.length>0)Q=X.authorization_servers[0]}catch{}if(!Q)Q=String(new URL("/",Z));let Y=await F3(Q,{fetchFn:$?.fetchFn});return{authorizationServerUrl:Q,authorizationServerMetadata:Y,resourceMetadata:X}}async function zX(Z,{metadata:$,clientInformation:X,redirectUrl:Q,scope:Y,state:J,resource:D}){let K;if($){if(K=new URL($.authorization_endpoint),!$.response_types_supported.includes(h0))throw Error(`Incompatible auth server: does not support response type ${h0}`);if($.code_challenge_methods_supported&&!$.code_challenge_methods_supported.includes(p0))throw Error(`Incompatible auth server: does not support code challenge method ${p0}`)}else K=new URL("/authorize",Z);let w=await f0(),V=w.code_verifier,y=w.code_challenge;if(K.searchParams.set("response_type",h0),K.searchParams.set("client_id",X.client_id),K.searchParams.set("code_challenge",y),K.searchParams.set("code_challenge_method",p0),K.searchParams.set("redirect_uri",String(Q)),J)K.searchParams.set("state",J);if(Y)K.searchParams.set("scope",Y);if(Y?.includes("offline_access"))K.searchParams.append("prompt","consent");if(D)K.searchParams.set("resource",D.href);return{authorizationUrl:K,codeVerifier:V}}function bX(Z,$,X){return new URLSearchParams({grant_type:"authorization_code",code:Z,code_verifier:$,redirect_uri:String(X)})}async function O3(Z,{metadata:$,tokenRequestParams:X,clientInformation:Q,addClientAuthentication:Y,resource:J,fetchFn:D}){let K=$?.token_endpoint?new URL($.token_endpoint):new URL("/token",Z),w=new Headers({"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"});if(J)X.set("resource",J.href);if(Y)await Y(w,X,K,$);else if(Q){let y=$?.token_endpoint_auth_methods_supported??[],L=JX(Q,y);DX(L,Q,w,X)}let V=await(D??fetch)(K,{method:"POST",headers:w,body:X});if(!V.ok)throw await L3(V);return D3.parse(await V.json())}async function AX(Z,{metadata:$,clientInformation:X,refreshToken:Q,resource:Y,addClientAuthentication:J,fetchFn:D}){let K=new URLSearchParams({grant_type:"refresh_token",refresh_token:Q}),w=await O3(Z,{metadata:$,tokenRequestParams:K,clientInformation:X,addClientAuthentication:J,resource:Y,fetchFn:D});return{refresh_token:Q,...w}}async function PX(Z,$,{metadata:X,resource:Q,authorizationCode:Y,fetchFn:J}={}){let D=Z.clientMetadata.scope,K;if(Z.prepareTokenRequest)K=await Z.prepareTokenRequest(D);if(!K){if(!Y)throw Error("Either provider.prepareTokenRequest() or authorizationCode is required");if(!Z.redirectUrl)throw Error("redirectUrl is required for authorization_code flow");let V=await Z.codeVerifier();K=bX(Y,V,Z.redirectUrl)}let w=await Z.clientInformation();return O3($,{metadata:X,tokenRequestParams:K,clientInformation:w??void 0,addClientAuthentication:Z.addClientAuthentication,resource:Q,fetchFn:J})}async function NX(Z,{metadata:$,clientMetadata:X,fetchFn:Q}){let Y;if($){if(!$.registration_endpoint)throw Error("Incompatible auth server: does not support dynamic client registration");Y=new URL($.registration_endpoint)}else Y=new URL("/register",Z);let J=await(Q??fetch)(Y,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(X)});if(!J.ok)throw await L3(J);return x3.parse(await J.json())}var jX={initialReconnectionDelay:1000,maxReconnectionDelay:30000,reconnectionDelayGrowFactor:1.5,maxRetries:2};class aZ extends Error{constructor(Z,$){super(`Streamable HTTP error: ${$}`);this.code=Z}}class S1{constructor(Z,$){this._hasCompletedAuthFlow=!1,this._url=Z,this._resourceMetadataUrl=void 0,this._scope=void 0,this._requestInit=$?.requestInit,this._authProvider=$?.authProvider,this._fetch=$?.fetch,this._fetchWithInit=P1($?.fetch,$?.requestInit),this._sessionId=$?.sessionId,this._reconnectionOptions=$?.reconnectionOptions??jX}async _authThenStart(){if(!this._authProvider)throw new HZ("No auth provider");let Z;try{Z=await CZ(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})}catch($){throw this.onerror?.($),$}if(Z!=="AUTHORIZED")throw new HZ;return await this._startOrAuthSse({resumptionToken:void 0})}async _commonHeaders(){let Z={};if(this._authProvider){let X=await this._authProvider.tokens();if(X)Z.Authorization=`Bearer ${X.access_token}`}if(this._sessionId)Z["mcp-session-id"]=this._sessionId;if(this._protocolVersion)Z["mcp-protocol-version"]=this._protocolVersion;let $=H$(this._requestInit?.headers);return new Headers({...Z,...$})}async _startOrAuthSse(Z){let{resumptionToken:$}=Z;try{let X=await this._commonHeaders();if(X.set("Accept","text/event-stream"),$)X.set("last-event-id",$);let Q=await(this._fetch??fetch)(this._url,{method:"GET",headers:X,signal:this._abortController?.signal});if(!Q.ok){if(await Q.body?.cancel(),Q.status===401&&this._authProvider)return await this._authThenStart();if(Q.status===405)return;throw new aZ(Q.status,`Failed to open SSE stream: ${Q.statusText}`)}this._handleSseStream(Q.body,Z,!0)}catch(X){throw this.onerror?.(X),X}}_getNextReconnectionDelay(Z){if(this._serverRetryMs!==void 0)return this._serverRetryMs;let $=this._reconnectionOptions.initialReconnectionDelay,X=this._reconnectionOptions.reconnectionDelayGrowFactor,Q=this._reconnectionOptions.maxReconnectionDelay;return Math.min($*Math.pow(X,Z),Q)}_scheduleReconnection(Z,$=0){let X=this._reconnectionOptions.maxRetries;if($>=X){this.onerror?.(Error(`Maximum reconnection attempts (${X}) exceeded.`));return}let Q=this._getNextReconnectionDelay($);this._reconnectionTimeout=setTimeout(()=>{this._startOrAuthSse(Z).catch((Y)=>{this.onerror?.(Error(`Failed to reconnect SSE stream: ${Y instanceof Error?Y.message:String(Y)}`)),this._scheduleReconnection(Z,$+1)})},Q)}_handleSseStream(Z,$,X){if(!Z)return;let{onresumptiontoken:Q,replayMessageId:Y}=$,J,D=!1,K=!1;(async()=>{try{let V=Z.pipeThrough(new TextDecoderStream).pipeThrough(new z3({onRetry:(z)=>{this._serverRetryMs=z}})).getReader();while(!0){let{value:z,done:I}=await V.read();if(I)break;if(z.id)J=z.id,D=!0,Q?.(z.id);if(!z.data)continue;if(!z.event||z.event==="message")try{let C=vZ.parse(JSON.parse(z.data));if(nZ(C)){if(K=!0,Y!==void 0)C.id=Y}this.onmessage?.(C)}catch(C){this.onerror?.(C)}}if((X||D)&&!K&&this._abortController&&!this._abortController.signal.aborted)this._scheduleReconnection({resumptionToken:J,onresumptiontoken:Q,replayMessageId:Y},0)}catch(V){if(this.onerror?.(Error(`SSE stream disconnected: ${V}`)),(X||D)&&!K&&this._abortController&&!this._abortController.signal.aborted)try{this._scheduleReconnection({resumptionToken:J,onresumptiontoken:Q,replayMessageId:Y},0)}catch(z){this.onerror?.(Error(`Failed to reconnect: ${z instanceof Error?z.message:String(z)}`))}}})()}async start(){if(this._abortController)throw Error("StreamableHTTPClientTransport already started! If using Client class, note that connect() calls start() automatically.");this._abortController=new AbortController}async finishAuth(Z){if(!this._authProvider)throw new HZ("No auth provider");if(await CZ(this._authProvider,{serverUrl:this._url,authorizationCode:Z,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})!=="AUTHORIZED")throw new HZ("Failed to authorize")}async close(){if(this._reconnectionTimeout)clearTimeout(this._reconnectionTimeout),this._reconnectionTimeout=void 0;this._abortController?.abort(),this.onclose?.()}async send(Z,$){try{let{resumptionToken:X,onresumptiontoken:Q}=$||{};if(X){this._startOrAuthSse({resumptionToken:X,replayMessageId:h$(Z)?Z.id:void 0}).catch((L)=>this.onerror?.(L));return}let Y=await this._commonHeaders();Y.set("content-type","application/json"),Y.set("accept","application/json, text/event-stream");let J={...this._requestInit,method:"POST",headers:Y,body:JSON.stringify(Z),signal:this._abortController?.signal},D=await(this._fetch??fetch)(this._url,J),K=D.headers.get("mcp-session-id");if(K)this._sessionId=K;if(!D.ok){let L=await D.text().catch(()=>null);if(D.status===401&&this._authProvider){if(this._hasCompletedAuthFlow)throw new aZ(401,"Server returned 401 after successful authentication");let{resourceMetadataUrl:z,scope:I}=F$(D);if(this._resourceMetadataUrl=z,this._scope=I,await CZ(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})!=="AUTHORIZED")throw new HZ;return this._hasCompletedAuthFlow=!0,this.send(Z)}if(D.status===403&&this._authProvider){let{resourceMetadataUrl:z,scope:I,error:C}=F$(D);if(C==="insufficient_scope"){let l=D.headers.get("WWW-Authenticate");if(this._lastUpscopingHeader===l)throw new aZ(403,"Server returned 403 after trying upscoping");if(I)this._scope=I;if(z)this._resourceMetadataUrl=z;if(this._lastUpscopingHeader=l??void 0,await CZ(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetch})!=="AUTHORIZED")throw new HZ;return this.send(Z)}}throw new aZ(D.status,`Error POSTing to endpoint: ${L}`)}if(this._hasCompletedAuthFlow=!1,this._lastUpscopingHeader=void 0,D.status===202){if(await D.body?.cancel(),u2(Z))this._startOrAuthSse({resumptionToken:void 0}).catch((L)=>this.onerror?.(L));return}let V=(Array.isArray(Z)?Z:[Z]).filter((L)=>("method"in L)&&("id"in L)&&L.id!==void 0).length>0,y=D.headers.get("content-type");if(V)if(y?.includes("text/event-stream"))this._handleSseStream(D.body,{onresumptiontoken:Q},!1);else if(y?.includes("application/json")){let L=await D.json(),z=Array.isArray(L)?L.map((I)=>vZ.parse(I)):[vZ.parse(L)];for(let I of z)this.onmessage?.(I)}else throw await D.body?.cancel(),new aZ(-1,`Unexpected content type: ${y}`);else await D.body?.cancel()}catch(X){throw this.onerror?.(X),X}}get sessionId(){return this._sessionId}async terminateSession(){if(!this._sessionId)return;try{let Z=await this._commonHeaders(),$={...this._requestInit,method:"DELETE",headers:Z,signal:this._abortController?.signal},X=await(this._fetch??fetch)(this._url,$);if(await X.body?.cancel(),!X.ok&&X.status!==405)throw new aZ(X.status,`Failed to terminate session: ${X.statusText}`);this._sessionId=void 0}catch(Z){throw this.onerror?.(Z),Z}}setProtocolVersion(Z){this._protocolVersion=Z}get protocolVersion(){return this._protocolVersion}async resumeStream(Z,$){await this._startOrAuthSse({resumptionToken:Z,onresumptiontoken:$?.onresumptiontoken})}}class i0 extends Event{constructor(Z,$){var X,Q;super(Z),this.code=(X=$==null?void 0:$.code)!=null?X:void 0,this.message=(Q=$==null?void 0:$.message)!=null?Q:void 0}[Symbol.for("nodejs.util.inspect.custom")](Z,$,X){return X(b3(this),$)}[Symbol.for("Deno.customInspect")](Z,$){return Z(b3(this),$)}}function MX(Z){let $=globalThis.DOMException;return typeof $=="function"?new $(Z,"SyntaxError"):SyntaxError(Z)}function n0(Z){return Z instanceof Error?"errors"in Z&&Array.isArray(Z.errors)?Z.errors.map(n0).join(", "):("cause"in Z)&&Z.cause instanceof Error?`${Z}: ${n0(Z.cause)}`:Z.message:`${Z}`}function b3(Z){return{type:Z.type,message:Z.message,code:Z.code,defaultPrevented:Z.defaultPrevented,cancelable:Z.cancelable,timeStamp:Z.timeStamp}}var N3=(Z)=>{throw TypeError(Z)},Z2=(Z,$,X)=>$.has(Z)||N3("Cannot "+X),S=(Z,$,X)=>(Z2(Z,$,"read from private field"),X?X.call(Z):$.get(Z)),BZ=(Z,$,X)=>$.has(Z)?N3("Cannot add the same private member more than once"):$ instanceof WeakSet?$.add(Z):$.set(Z,X),s=(Z,$,X,Q)=>(Z2(Z,$,"write to private field"),$.set(Z,X),X),TZ=(Z,$,X)=>(Z2(Z,$,"access private method"),X),wZ,sZ,O$,E1,v1,r$,A$,e$,pZ,z$,P$,b$,s$,jZ,c0,o0,a0,A3,s0,t0,t$,r0,e0;class N$ extends EventTarget{constructor(Z,$){var X,Q;super(),BZ(this,jZ),this.CONNECTING=0,this.OPEN=1,this.CLOSED=2,BZ(this,wZ),BZ(this,sZ),BZ(this,O$),BZ(this,E1),BZ(this,v1),BZ(this,r$),BZ(this,A$),BZ(this,e$,null),BZ(this,pZ),BZ(this,z$),BZ(this,P$,null),BZ(this,b$,null),BZ(this,s$,null),BZ(this,o0,async(Y)=>{var J;S(this,z$).reset();let{body:D,redirected:K,status:w,headers:V}=Y;if(w===204){TZ(this,jZ,t$).call(this,"Server sent HTTP 204, not reconnecting",204),this.close();return}if(K?s(this,O$,new URL(Y.url)):s(this,O$,void 0),w!==200){TZ(this,jZ,t$).call(this,`Non-200 status code (${w})`,w);return}if(!(V.get("content-type")||"").startsWith("text/event-stream")){TZ(this,jZ,t$).call(this,'Invalid content type, expected "text/event-stream"',w);return}if(S(this,wZ)===this.CLOSED)return;s(this,wZ,this.OPEN);let y=new Event("open");if((J=S(this,s$))==null||J.call(this,y),this.dispatchEvent(y),typeof D!="object"||!D||!("getReader"in D)){TZ(this,jZ,t$).call(this,"Invalid response body, expected a web ReadableStream",w),this.close();return}let L=new TextDecoder,z=D.getReader(),I=!0;do{let{done:C,value:l}=await z.read();l&&S(this,z$).feed(L.decode(l,{stream:!C})),C&&(I=!1,S(this,z$).reset(),TZ(this,jZ,r0).call(this))}while(I)}),BZ(this,a0,(Y)=>{s(this,pZ,void 0),!(Y.name==="AbortError"||Y.type==="aborted")&&TZ(this,jZ,r0).call(this,n0(Y))}),BZ(this,s0,(Y)=>{typeof Y.id=="string"&&s(this,e$,Y.id);let J=new MessageEvent(Y.event||"message",{data:Y.data,origin:S(this,O$)?S(this,O$).origin:S(this,sZ).origin,lastEventId:Y.id||""});S(this,b$)&&(!Y.event||Y.event==="message")&&S(this,b$).call(this,J),this.dispatchEvent(J)}),BZ(this,t0,(Y)=>{s(this,r$,Y)}),BZ(this,e0,()=>{s(this,A$,void 0),S(this,wZ)===this.CONNECTING&&TZ(this,jZ,c0).call(this)});try{if(Z instanceof URL)s(this,sZ,Z);else if(typeof Z=="string")s(this,sZ,new URL(Z,qX()));else throw Error("Invalid URL")}catch{throw MX("An invalid or illegal string was specified")}s(this,z$,P3({onEvent:S(this,s0),onRetry:S(this,t0)})),s(this,wZ,this.CONNECTING),s(this,r$,3000),s(this,v1,(X=$==null?void 0:$.fetch)!=null?X:globalThis.fetch),s(this,E1,(Q=$==null?void 0:$.withCredentials)!=null?Q:!1),TZ(this,jZ,c0).call(this)}get readyState(){return S(this,wZ)}get url(){return S(this,sZ).href}get withCredentials(){return S(this,E1)}get onerror(){return S(this,P$)}set onerror(Z){s(this,P$,Z)}get onmessage(){return S(this,b$)}set onmessage(Z){s(this,b$,Z)}get onopen(){return S(this,s$)}set onopen(Z){s(this,s$,Z)}addEventListener(Z,$,X){let Q=$;super.addEventListener(Z,Q,X)}removeEventListener(Z,$,X){let Q=$;super.removeEventListener(Z,Q,X)}close(){S(this,A$)&&clearTimeout(S(this,A$)),S(this,wZ)!==this.CLOSED&&(S(this,pZ)&&S(this,pZ).abort(),s(this,wZ,this.CLOSED),s(this,pZ,void 0))}}wZ=new WeakMap,sZ=new WeakMap,O$=new WeakMap,E1=new WeakMap,v1=new WeakMap,r$=new WeakMap,A$=new WeakMap,e$=new WeakMap,pZ=new WeakMap,z$=new WeakMap,P$=new WeakMap,b$=new WeakMap,s$=new WeakMap,jZ=new WeakSet,c0=function(){s(this,wZ,this.CONNECTING),s(this,pZ,new AbortController),S(this,v1)(S(this,sZ),TZ(this,jZ,A3).call(this)).then(S(this,o0)).catch(S(this,a0))},o0=new WeakMap,a0=new WeakMap,A3=function(){var Z;let $={mode:"cors",redirect:"follow",headers:{Accept:"text/event-stream",...S(this,e$)?{"Last-Event-ID":S(this,e$)}:void 0},cache:"no-store",signal:(Z=S(this,pZ))==null?void 0:Z.signal};return"window"in globalThis&&($.credentials=this.withCredentials?"include":"same-origin"),$},s0=new WeakMap,t0=new WeakMap,t$=function(Z,$){var X;S(this,wZ)!==this.CLOSED&&s(this,wZ,this.CLOSED);let Q=new i0("error",{code:$,message:Z});(X=S(this,P$))==null||X.call(this,Q),this.dispatchEvent(Q)},r0=function(Z,$){var X;if(S(this,wZ)===this.CLOSED)return;s(this,wZ,this.CONNECTING);let Q=new i0("error",{code:$,message:Z});(X=S(this,P$))==null||X.call(this,Q),this.dispatchEvent(Q),s(this,A$,setTimeout(S(this,e0),S(this,r$)))},e0=new WeakMap,N$.CONNECTING=0,N$.OPEN=1,N$.CLOSED=2;function qX(){let Z="document"in globalThis?globalThis.document:void 0;return Z&&typeof Z=="object"&&"baseURI"in Z&&typeof Z.baseURI=="string"?Z.baseURI:void 0}class j3 extends Error{constructor(Z,$,X){super(`SSE error: ${$}`);this.code=Z,this.event=X}}class $2{constructor(Z,$){this._url=Z,this._resourceMetadataUrl=void 0,this._scope=void 0,this._eventSourceInit=$?.eventSourceInit,this._requestInit=$?.requestInit,this._authProvider=$?.authProvider,this._fetch=$?.fetch,this._fetchWithInit=P1($?.fetch,$?.requestInit)}async _authThenStart(){if(!this._authProvider)throw new HZ("No auth provider");let Z;try{Z=await CZ(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})}catch($){throw this.onerror?.($),$}if(Z!=="AUTHORIZED")throw new HZ;return await this._startOrAuth()}async _commonHeaders(){let Z={};if(this._authProvider){let X=await this._authProvider.tokens();if(X)Z.Authorization=`Bearer ${X.access_token}`}if(this._protocolVersion)Z["mcp-protocol-version"]=this._protocolVersion;let $=H$(this._requestInit?.headers);return new Headers({...Z,...$})}_startOrAuth(){let Z=this?._eventSourceInit?.fetch??this._fetch??fetch;return new Promise(($,X)=>{this._eventSource=new N$(this._url.href,{...this._eventSourceInit,fetch:async(Q,Y)=>{let J=await this._commonHeaders();J.set("Accept","text/event-stream");let D=await Z(Q,{...Y,headers:J});if(D.status===401&&D.headers.has("www-authenticate")){let{resourceMetadataUrl:K,scope:w}=F$(D);this._resourceMetadataUrl=K,this._scope=w}return D}}),this._abortController=new AbortController,this._eventSource.onerror=(Q)=>{if(Q.code===401&&this._authProvider){this._authThenStart().then($,X);return}let Y=new j3(Q.code,Q.message,Q);X(Y),this.onerror?.(Y)},this._eventSource.onopen=()=>{},this._eventSource.addEventListener("endpoint",(Q)=>{let Y=Q;try{if(this._endpoint=new URL(Y.data,this._url),this._endpoint.origin!==this._url.origin)throw Error(`Endpoint origin does not match connection origin: ${this._endpoint.origin}`)}catch(J){X(J),this.onerror?.(J),this.close();return}$()}),this._eventSource.onmessage=(Q)=>{let Y=Q,J;try{J=vZ.parse(JSON.parse(Y.data))}catch(D){this.onerror?.(D);return}this.onmessage?.(J)}})}async start(){if(this._eventSource)throw Error("SSEClientTransport already started! If using Client class, note that connect() calls start() automatically.");return await this._startOrAuth()}async finishAuth(Z){if(!this._authProvider)throw new HZ("No auth provider");if(await CZ(this._authProvider,{serverUrl:this._url,authorizationCode:Z,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})!=="AUTHORIZED")throw new HZ("Failed to authorize")}async close(){this._abortController?.abort(),this._eventSource?.close(),this.onclose?.()}async send(Z){if(!this._endpoint)throw Error("Not connected");try{let $=await this._commonHeaders();$.set("content-type","application/json");let X={...this._requestInit,method:"POST",headers:$,body:JSON.stringify(Z),signal:this._abortController?.signal},Q=await(this._fetch??fetch)(this._endpoint,X);if(!Q.ok){let Y=await Q.text().catch(()=>null);if(Q.status===401&&this._authProvider){let{resourceMetadataUrl:J,scope:D}=F$(Q);if(this._resourceMetadataUrl=J,this._scope=D,await CZ(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})!=="AUTHORIZED")throw new HZ;return this.send(Z)}throw Error(`Error POSTing to endpoint (HTTP ${Q.status}): ${Y}`)}await Q.body?.cancel()}catch($){throw this.onerror?.($),$}}setProtocolVersion(Z){this._protocolVersion=Z}}var q3=_0(RX(),1);import f1 from"process";import{PassThrough as gX}from"stream";class X2{append(Z){this._buffer=this._buffer?Buffer.concat([this._buffer,Z]):Z}readMessage(){if(!this._buffer)return null;let Z=this._buffer.indexOf(`
3
+ `);if(Z===-1)return null;let $=this._buffer.toString("utf8",0,Z).replace(/\r$/,"");return this._buffer=this._buffer.subarray(Z+1),UX($)}clear(){this._buffer=void 0}}function UX(Z){return vZ.parse(JSON.parse(Z))}function M3(Z){return JSON.stringify(Z)+`
4
+ `}var kX=f1.platform==="win32"?["APPDATA","HOMEDRIVE","HOMEPATH","LOCALAPPDATA","PATH","PROCESSOR_ARCHITECTURE","SYSTEMDRIVE","SYSTEMROOT","TEMP","USERNAME","USERPROFILE","PROGRAMFILES"]:["HOME","LOGNAME","PATH","SHELL","TERM","USER"];function CX(){let Z={};for(let $ of kX){let X=f1.env[$];if(X===void 0)continue;if(X.startsWith("()"))continue;Z[$]=X}return Z}class u1{constructor(Z){if(this._readBuffer=new X2,this._stderrStream=null,this._serverParams=Z,Z.stderr==="pipe"||Z.stderr==="overlapped")this._stderrStream=new gX}async start(){if(this._process)throw Error("StdioClientTransport already started! If using Client class, note that connect() calls start() automatically.");return new Promise((Z,$)=>{if(this._process=q3.default(this._serverParams.command,this._serverParams.args??[],{env:{...CX(),...this._serverParams.env},stdio:["pipe","pipe",this._serverParams.stderr??"inherit"],shell:!1,windowsHide:f1.platform==="win32"&&TX(),cwd:this._serverParams.cwd}),this._process.on("error",(X)=>{$(X),this.onerror?.(X)}),this._process.on("spawn",()=>{Z()}),this._process.on("close",(X)=>{this._process=void 0,this.onclose?.()}),this._process.stdin?.on("error",(X)=>{this.onerror?.(X)}),this._process.stdout?.on("data",(X)=>{this._readBuffer.append(X),this.processReadBuffer()}),this._process.stdout?.on("error",(X)=>{this.onerror?.(X)}),this._stderrStream&&this._process.stderr)this._process.stderr.pipe(this._stderrStream)})}get stderr(){if(this._stderrStream)return this._stderrStream;return this._process?.stderr??null}get pid(){return this._process?.pid??null}processReadBuffer(){while(!0)try{let Z=this._readBuffer.readMessage();if(Z===null)break;this.onmessage?.(Z)}catch(Z){this.onerror?.(Z)}}async close(){if(this._process){let Z=this._process;this._process=void 0;let $=new Promise((X)=>{Z.once("close",()=>{X()})});try{Z.stdin?.end()}catch{}if(await Promise.race([$,new Promise((X)=>setTimeout(X,2000).unref())]),Z.exitCode===null){try{Z.kill("SIGTERM")}catch{}await Promise.race([$,new Promise((X)=>setTimeout(X,2000).unref())])}if(Z.exitCode===null)try{Z.kill("SIGKILL")}catch{}}this._readBuffer.clear()}send(Z){return new Promise(($)=>{if(!this._process?.stdin)throw Error("Not connected");let X=M3(Z);if(this._process.stdin.write(X))$();else this._process.stdin.once("drain",$)})}}function TX(){return"type"in f1}var Z1=mZ({service:"mcp.oauth"}),j$=19876,lZ="/mcp/oauth/callback";class h1{mcpName;serverUrl;config;callbacks;auth;constructor(Z,$,X,Q,Y){this.mcpName=Z;this.serverUrl=$;this.config=X;this.callbacks=Q;this.auth=Y}get redirectUrl(){if(this.config.redirectUri)return this.config.redirectUri;return`http://127.0.0.1:${this.config.callbackPort??j$}${lZ}`}get clientMetadata(){return{redirect_uris:[this.redirectUrl],client_name:"MuxCode",client_uri:"https://muxcode.ai",grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:this.config.clientSecret?"client_secret_post":"none",...this.config.scope?{scope:this.config.scope}:{}}}async clientInformation(){if(this.config.clientId)return{client_id:this.config.clientId,client_secret:this.config.clientSecret};let Z=await B.runPromise(this.auth.getForUrl(this.mcpName,this.serverUrl));if(Z?.clientInfo){if(Z.clientInfo.clientSecretExpiresAt&&Z.clientInfo.clientSecretExpiresAt<Date.now()/1000){Z1.info("client secret expired, need to re-register",{mcpName:this.mcpName});return}return{client_id:Z.clientInfo.clientId,client_secret:Z.clientInfo.clientSecret}}return}async saveClientInformation(Z){await B.runPromise(this.auth.updateClientInfo(this.mcpName,{clientId:Z.client_id,clientSecret:Z.client_secret,clientIdIssuedAt:Z.client_id_issued_at,clientSecretExpiresAt:Z.client_secret_expires_at},this.serverUrl)),Z1.info("saved dynamically registered client",{mcpName:this.mcpName,clientId:Z.client_id})}async tokens(){let Z=await B.runPromise(this.auth.getForUrl(this.mcpName,this.serverUrl));if(!Z?.tokens)return;return{access_token:Z.tokens.accessToken,token_type:"Bearer",refresh_token:Z.tokens.refreshToken,expires_in:Z.tokens.expiresAt?Math.max(0,Math.floor(Z.tokens.expiresAt-Date.now()/1000)):void 0,scope:Z.tokens.scope}}async saveTokens(Z){await B.runPromise(this.auth.updateTokens(this.mcpName,{accessToken:Z.access_token,refreshToken:Z.refresh_token,expiresAt:Z.expires_in?Date.now()/1000+Z.expires_in:void 0,scope:Z.scope},this.serverUrl)),Z1.info("saved oauth tokens",{mcpName:this.mcpName})}async redirectToAuthorization(Z){Z1.info("redirecting to authorization",{mcpName:this.mcpName,url:Z.toString()}),await this.callbacks.onRedirect(Z)}async saveCodeVerifier(Z){await B.runPromise(this.auth.updateCodeVerifier(this.mcpName,Z))}async codeVerifier(){let Z=await B.runPromise(this.auth.get(this.mcpName));if(!Z?.codeVerifier)throw Error(`No code verifier saved for MCP server: ${this.mcpName}`);return Z.codeVerifier}async saveState(Z){await B.runPromise(this.auth.updateOAuthState(this.mcpName,Z))}async state(){let Z=await B.runPromise(this.auth.get(this.mcpName));if(Z?.oauthState)return Z.oauthState;let $=Array.from(crypto.getRandomValues(new Uint8Array(32))).map((X)=>X.toString(16).padStart(2,"0")).join("");return await B.runPromise(this.auth.updateOAuthState(this.mcpName,$)),$}async invalidateCredentials(Z){Z1.info("invalidating credentials",{mcpName:this.mcpName,type:Z});let $=await B.runPromise(this.auth.get(this.mcpName));if(!$)return;switch(Z){case"all":await B.runPromise(this.auth.remove(this.mcpName));break;case"client":delete $.clientInfo,await B.runPromise(this.auth.set(this.mcpName,$));break;case"tokens":delete $.tokens,await B.runPromise(this.auth.set(this.mcpName,$));break}}}function U3(Z){if(!Z)return{port:j$,path:lZ};try{let $=new URL(Z),X=$.port?parseInt($.port,10):$.protocol==="https:"?443:80,Q=$.pathname||lZ;return{port:X,path:Q}}catch{return{port:j$,path:lZ}}}var eZ={};SZ(eZ,{waitForCallback:()=>uX,stop:()=>k3,isRunning:()=>pX,isPortInUse:()=>g3,ensureRunning:()=>fX,cancelPending:()=>hX,McpOAuthCallback:()=>eZ});import{createConnection as IX}from"net";import{createServer as _X}from"http";var tZ=mZ({service:"mcp.oauth-callback"}),M$=j$,l1=lZ,SX=`<!DOCTYPE html>
5
+ <html>
6
+ <head>
7
+ <title>MuxCode - Authorization Successful</title>
8
+ <style>
9
+ body { font-family: system-ui, -apple-system, sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; background: #1a1a2e; color: #eee; }
10
+ .container { text-align: center; padding: 2rem; }
11
+ h1 { color: #4ade80; margin-bottom: 1rem; }
12
+ p { color: #aaa; }
13
+ </style>
14
+ </head>
15
+ <body>
16
+ <div class="container">
17
+ <h1>Authorization Successful</h1>
18
+ <p>You can close this window and return to MuxCode.</p>
19
+ </div>
20
+ <script>setTimeout(() => window.close(), 2000);</script>
21
+ </body>
22
+ </html>`,p1=(Z)=>`<!DOCTYPE html>
23
+ <html>
24
+ <head>
25
+ <title>MuxCode - Authorization Failed</title>
26
+ <style>
27
+ body { font-family: system-ui, -apple-system, sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; background: #1a1a2e; color: #eee; }
28
+ .container { text-align: center; padding: 2rem; }
29
+ h1 { color: #f87171; margin-bottom: 1rem; }
30
+ p { color: #aaa; }
31
+ .error { color: #fca5a5; font-family: monospace; margin-top: 1rem; padding: 1rem; background: rgba(248,113,113,0.1); border-radius: 0.5rem; }
32
+ </style>
33
+ </head>
34
+ <body>
35
+ <div class="container">
36
+ <h1>Authorization Failed</h1>
37
+ <p>An error occurred during authorization.</p>
38
+ <div class="error">${Z}</div>
39
+ </div>
40
+ </body>
41
+ </html>`,IZ,FZ=new Map,rZ=new Map,EX=300000;function R3(Z){for(let[$,X]of rZ)if(X===Z){rZ.delete($);break}}function vX(Z,$){let X=new URL(Z.url||"/",`http://localhost:${M$}`);if(X.pathname!==l1){$.writeHead(404),$.end("Not found");return}let Q=X.searchParams.get("code"),Y=X.searchParams.get("state"),J=X.searchParams.get("error"),D=X.searchParams.get("error_description");if(tZ.info("received oauth callback",{hasCode:!!Q,state:Y,error:J}),!Y){tZ.error("oauth callback missing state parameter",{url:X.toString()}),$.writeHead(400,{"Content-Type":"text/html"}),$.end(p1("Missing required state parameter - potential CSRF attack"));return}if(J){let w=D||J;if(FZ.has(Y)){let V=FZ.get(Y);clearTimeout(V.timeout),FZ.delete(Y),R3(Y),V.reject(Error(w))}$.writeHead(200,{"Content-Type":"text/html"}),$.end(p1(w));return}if(!Q){$.writeHead(400,{"Content-Type":"text/html"}),$.end(p1("No authorization code provided"));return}if(!FZ.has(Y)){tZ.error("oauth callback with invalid state",{state:Y,pendingStates:Array.from(FZ.keys())}),$.writeHead(400,{"Content-Type":"text/html"}),$.end(p1("Invalid or expired state parameter - potential CSRF attack"));return}let K=FZ.get(Y);clearTimeout(K.timeout),FZ.delete(Y),R3(Y),K.resolve(Q),$.writeHead(200,{"Content-Type":"text/html"}),$.end(SX)}async function fX(Z){let{port:$,path:X}=U3(Z);if(IZ&&(M$!==$||l1!==X))tZ.info("stopping oauth callback server to reconfigure",{oldPort:M$,newPort:$}),await k3();if(IZ)return;if(await g3($)){tZ.info("oauth callback server already running on another instance",{port:$});return}M$=$,l1=X,IZ=_X(vX),await new Promise((Y,J)=>{IZ.listen(M$,()=>{tZ.info("oauth callback server started",{port:M$,path:l1}),Y()}),IZ.on("error",J)})}function uX(Z,$){if($)rZ.set($,Z);return new Promise((X,Q)=>{let Y=setTimeout(()=>{if(FZ.has(Z)){if(FZ.delete(Z),$)rZ.delete($);Q(Error("OAuth callback timeout - authorization took too long"))}},EX);FZ.set(Z,{resolve:X,reject:Q,timeout:Y})})}function hX(Z){let X=rZ.get(Z)??Z,Q=FZ.get(X);if(Q)clearTimeout(Q.timeout),FZ.delete(X),rZ.delete(Z),Q.reject(Error("Authorization cancelled"))}async function g3(Z=j$){return new Promise(($)=>{let X=IX(Z,"127.0.0.1");X.on("connect",()=>{X.destroy(),$(!0)}),X.on("error",()=>{$(!1)})})}async function k3(){if(IZ)await new Promise((Z)=>IZ.close(()=>Z())),IZ=void 0,tZ.info("oauth callback server stopped");for(let[Z,$]of FZ)clearTimeout($.timeout),$.reject(Error("OAuth callback server stopped"));FZ.clear(),rZ.clear()}function pX(){return IZ!==void 0}var e=mZ({service:"mcp"}),J2=30000,lX=c$.extend({tools:z1.omit({outputSchema:!0}).array()}),mX=G.Struct({name:G.String,uri:G.String,description:G.optional(G.String),mimeType:G.optional(G.String),client:G.String}).annotate({identifier:"McpResource"}),f3=Z$.define("mcp.tools.changed",G.Struct({server:G.String})),u3=Z$.define("mcp.browser.open.failed",G.Struct({mcpName:G.String,url:G.String})),dX=I3.create("MCPFailed",{name:G.String});class D2 extends G.TaggedErrorClass()("MCP.NotFoundError",{name:G.String}){}var iX=G.Struct({status:G.Literal("connected")}).annotate({identifier:"MCPStatusConnected"}),nX=G.Struct({status:G.Literal("disabled")}).annotate({identifier:"MCPStatusDisabled"}),cX=G.Struct({status:G.Literal("failed"),error:G.String}).annotate({identifier:"MCPStatusFailed"}),oX=G.Struct({status:G.Literal("needs_auth")}).annotate({identifier:"MCPStatusNeedsAuth"}),aX=G.Struct({status:G.Literal("needs_client_registration"),error:G.String}).annotate({identifier:"MCPStatusNeedsClientRegistration"}),sX=G.Union([iX,nX,cX,oX,aX]).annotate({identifier:"MCPStatus",discriminator:"status"}),q$=new Map;function m1(Z){return typeof Z==="object"&&Z!==null&&"type"in Z}var d1=(Z)=>Z.replace(/[^a-zA-Z0-9_-]/g,"_");function C3(Z,$){if(URL.canParse($))return new URL($);e.warn("invalid remote mcp url",{key:Z})}function tX(Z){return/can't resolve reference|resolves to more than one schema|outputSchema|schema.*reference|reference.*schema/i.test(Z.message)}function rX(Z,$,X){return B.tryPromise({try:()=>$.listTools(void 0,{timeout:X}),catch:(Q)=>Q instanceof Error?Q:Error(String(Q))}).pipe(B.map((Q)=>Q.tools),B.catch((Q)=>{if(!tX(Q))return B.fail(Q);return e.warn("failed to validate MCP tool output schemas, retrying without output schema validation",{key:Z,error:Q}),B.tryPromise({try:()=>$.request({method:"tools/list"},lX,{timeout:X}),catch:(Y)=>Y instanceof Error?Y:Error(String(Y))}).pipe(B.map((Y)=>Y.tools.map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema}))))}))}function eX(Z,$,X){let Q=Z.inputSchema,Y={...Q,type:"object",properties:Q.properties??{},additionalProperties:!1};return S3({description:Z.description??"",inputSchema:_3(Y),execute:async(J)=>{return $.callTool({name:Z.name,arguments:J||{}},fZ,{resetTimeoutOnProgress:!0,timeout:X})}})}function Y2(Z,$,X){return rX(Z,$,X??J2).pipe(B.catch((Q)=>{return e.error("failed to get tools from client",{key:Z,error:Q}),B.succeed(void 0)}))}function Z9(Z,$,X,Q){return B.tryPromise({try:()=>X($),catch:(Y)=>{return e.error(`failed to get ${Q}`,{clientName:Z,error:Y.message}),Y}}).pipe(B.map((Y)=>{let J={},D=d1(Z);for(let K of Y)J[D+":"+d1(K.name)]={...K,client:Z};return J}),B.orElseSucceed(()=>{return}))}class X1 extends LZ.Service()("@muxcode/MCP"){}var $9=B$(X1),h3=p.effect(X1,B.gen(function*(){let Z=yield*i1.ChildProcessSpawner,$=yield*J$.Service,X=yield*R$.Service,Q=(x,H)=>B.acquireUseRelease(B.succeed(x),(A)=>B.tryPromise({try:()=>{let b=new A1({name:"muxcode",version:W2});return E3(b.connect(A),H).then(()=>b)},catch:(b)=>b instanceof Error?b:Error(String(b))}),(A,b)=>T3.isFailure(b)?B.tryPromise(()=>A.close()).pipe(B.ignore):B.void),Y={status:{status:"disabled"}},J=B.fn("MCP.connectRemote")(function*(x,H){let A=H.oauth===!1,b=typeof H.oauth==="object"?H.oauth:void 0,k=C3(x,H.url);if(!k)return{client:void 0,status:{status:"failed",error:`Invalid MCP URL for "${x}"`}};let U;if(!A)U=new h1(x,H.url,{clientId:b?.clientId,clientSecret:b?.clientSecret,scope:b?.scope,callbackPort:b?.callbackPort,redirectUri:b?.redirectUri},{onRedirect:async(YZ)=>{e.info("oauth redirect requested",{key:x,url:YZ.toString()})}},$);let E=[{name:"StreamableHTTP",transport:new S1(k,{authProvider:U,requestInit:H.headers?{headers:H.headers}:void 0})},{name:"SSE",transport:new $2(k,{authProvider:U,requestInit:H.headers?{headers:H.headers}:void 0})}],i=H.timeout??J2,o;for(let{name:YZ,transport:S$}of E){let E$=yield*Q(S$,i).pipe(B.map((gZ)=>({client:gZ,transportName:YZ})),B.catch((gZ)=>{let v$=gZ instanceof Error?gZ:Error(String(gZ));if(gZ instanceof HZ||U&&v$.message.includes("OAuth"))if(e.info("mcp server requires authentication",{key:x,transport:YZ}),v$.message.includes("registration")||v$.message.includes("client_id"))return o={status:"needs_client_registration",error:"Server does not support dynamic client registration. Please provide clientId in config."},X.publish(B2.ToastShow,{title:"MCP Authentication Required",message:`Server "${x}" requires a pre-registered client ID. Add clientId to your config.`,variant:"warning",duration:8000}).pipe(B.ignore,B.as(void 0));else return q$.set(x,S$),o={status:"needs_auth"},X.publish(B2.ToastShow,{title:"MCP Authentication Required",message:`Server "${x}" requires authentication. Run: muxcode mcp auth ${x}`,variant:"warning",duration:8000}).pipe(B.ignore,B.as(void 0));return e.debug("transport connection failed",{key:x,transport:YZ,url:H.url,error:v$.message}),o={status:"failed",error:v$.message},B.succeed(void 0)}));if(E$)return e.info("connected",{key:x,transport:E$.transportName}),{client:E$.client,status:{status:"connected"}};if(o?.status==="needs_auth"||o?.status==="needs_client_registration")break}return{client:void 0,status:o??{status:"failed",error:"Unknown error"}}}),D=B.fn("MCP.connectLocal")(function*(x,H){let[A,...b]=H.command,k=yield*XZ.directory,U=new u1({stderr:"pipe",command:A,args:b,cwd:k,env:{...process.env,...A==="muxcode"?{BUN_BE_BUN:"1"}:{},...H.environment}});U.stderr?.on("data",(i)=>{e.info(`mcp stderr: ${i.toString()}`,{key:x})});let E=H.timeout??J2;return yield*Q(U,E).pipe(B.map((i)=>({client:i,status:{status:"connected"}})),B.catch((i)=>{let o=i instanceof Error?i.message:String(i);return e.error("local mcp startup failed",{key:x,command:H.command,cwd:k,error:o}),B.succeed({client:void 0,status:{status:"failed",error:o}})}))}),K=B.fn("MCP.create")(function*(x,H){if(H.enabled===!1)return e.info("mcp server disabled",{key:x}),Y;e.info("found",{key:x,type:H.type});let{client:A,status:b}=H.type==="remote"?yield*J(x,H):yield*D(x,H);if(!A)return{status:b};let k=yield*Y2(x,A,H.timeout);if(!k)return yield*B.tryPromise(()=>A.close()).pipe(B.ignore),{status:{status:"failed",error:"Failed to get tools"}};return e.info("create() successfully created client",{key:x,toolCount:k.length}),{mcpClient:A,status:b,defs:k}}),w=yield*g$.Service,V=B.fnUntraced(function*(x){if(process.platform==="win32")return[];let H=[],A=[x];while(A.length>0){let b=A.shift(),k=yield*Z.spawn(U$.make("pgrep",["-P",String(b)],{stdin:"ignore"})),U=yield*_Z.mkString(_Z.decodeText(k.stdout));yield*k.exitCode;for(let E of U.split(`
42
+ `)){let i=parseInt(E,10);if(!isNaN(i)&&!H.includes(i))H.push(i),A.push(i)}}return H},B.scoped,B.catch(()=>B.succeed([])));function y(x,H,A,b,k){A.setNotificationHandler(o$,async()=>{if(e.info("tools list changed notification received",{server:H}),x.clients[H]!==A||x.status[H]?.status!=="connected")return;let U=await b.promise(Y2(H,A,k));if(!U)return;if(x.clients[H]!==A||x.status[H]?.status!=="connected")return;x.defs[H]=U,await b.promise(X.publish(f3,{server:H}).pipe(B.ignore))})}let L=yield*XZ.make(B.fn("MCP.state")(function*(){let x=yield*w.get(),H=yield*$1.make(),A=x.mcp??{},b={config:{},status:{},clients:{},defs:{}};return yield*B.forEach(Object.entries(A),([k,U])=>B.gen(function*(){if(!m1(U)){e.error("Ignoring MCP config entry without type",{key:k});return}if(U.enabled===!1){b.status[k]={status:"disabled"};return}let E=yield*K(k,U).pipe(B.catch(()=>B.void));if(!E)return;if(b.status[k]=E.status,E.mcpClient)b.clients[k]=E.mcpClient,b.defs[k]=E.defs,y(b,k,E.mcpClient,H,U.timeout)}),{concurrency:"unbounded"}),yield*B.addFinalizer(()=>B.gen(function*(){yield*B.forEach(Object.values(b.clients),(k)=>B.gen(function*(){let U=k.transport instanceof u1?k.transport.pid:null;if(typeof U==="number"){let E=yield*V(U);for(let i of E)try{process.kill(i,"SIGTERM")}catch{}}yield*B.tryPromise(()=>k.close()).pipe(B.ignore)}),{concurrency:"unbounded"}),q$.clear()})),b}));function z(x,H){let A=x.clients[H];if(delete x.defs[H],!A)return B.void;return B.tryPromise(()=>A.close()).pipe(B.ignore)}let I=B.fnUntraced(function*(x,H,A,b,k){let U=yield*$1.make();return yield*z(x,H),x.status[H]={status:"connected"},x.clients[H]=A,x.defs[H]=b,y(x,H,A,U,k),x.status[H]}),C=B.fn("MCP.status")(function*(){let x=yield*XZ.get(L),A=(yield*w.get()).mcp??{},b={};for(let[k,U]of Object.entries(A)){if(!m1(U))continue;b[k]=x.status[k]??{status:"disabled"}}for(let k of Object.keys(x.config))b[k]=x.status[k]??{status:"disabled"};return b}),l=B.fn("MCP.clients")(function*(){return(yield*XZ.get(L)).clients}),f=B.fn("MCP.createAndStore")(function*(x,H){let A=yield*XZ.get(L),b=yield*K(x,H);if(A.status[x]=b.status,!b.mcpClient)return yield*z(A,x),delete A.clients[x],b.status;return yield*I(A,x,b.mcpClient,b.defs,H.timeout)}),q=B.fn("MCP.add")(function*(x,H){let A=yield*XZ.get(L);return A.config[x]=H,yield*f(x,H),{status:A.status}}),g=B.fn("MCP.connect")(function*(x){let H=yield*d(x);yield*f(x,{...H,enabled:!0})}),r=B.fn("MCP.disconnect")(function*(x){yield*d(x);let H=yield*XZ.get(L);yield*z(H,x),delete H.clients[x],H.status[x]={status:"disabled"}}),W$=B.fn("MCP.tools")(function*(){let x={},H=yield*XZ.get(L),A=yield*w.get(),b=A.mcp??{},k=A.experimental?.mcp_timeout,U=Object.entries(H.clients).filter(([E])=>H.status[E]?.status==="connected");return yield*B.forEach(U,([E,i])=>B.gen(function*(){let o=b[E],YZ=o&&m1(o)?o:H.config[E],S$=H.defs[E];if(!S$){e.warn("missing cached tools for connected server",{clientName:E});return}let E$=YZ?.timeout??k;for(let gZ of S$)x[d1(E)+"_"+d1(gZ.name)]=eX(gZ,i,E$)}),{concurrency:"unbounded"}),x});function qZ(x,H,A){return B.forEach(Object.entries(x.clients).filter(([b])=>x.status[b]?.status==="connected"),([b,k])=>Z9(b,k,H,A).pipe(B.map((U)=>Object.entries(U??{}))),{concurrency:"unbounded"}).pipe(B.map((b)=>Object.fromEntries(b.flat())))}let e1=B.fn("MCP.prompts")(function*(){let x=yield*XZ.get(L);return yield*qZ(x,(H)=>H.listPrompts().then((A)=>A.prompts),"prompts")}),Z0=B.fn("MCP.resources")(function*(){let x=yield*XZ.get(L);return yield*qZ(x,(H)=>H.listResources().then((A)=>A.resources),"resources")}),P=B.fnUntraced(function*(x,H,A,b){let U=(yield*XZ.get(L)).clients[x];if(!U){e.warn(`client not found for ${A}`,{clientName:x});return}return yield*B.tryPromise({try:()=>H(U),catch:(E)=>{return e.error(`failed to ${A}`,{clientName:x,...b,error:E?.message}),E}}).pipe(B.orElseSucceed(()=>{return}))}),j=B.fn("MCP.getPrompt")(function*(x,H,A){return yield*P(x,(b)=>b.getPrompt({name:H,arguments:A}),"getPrompt",{promptName:H})}),T=B.fn("MCP.readResource")(function*(x,H){return yield*P(x,(A)=>A.readResource({uri:H}),"readResource",{resourceUri:H})}),u=B.fnUntraced(function*(x){let H=yield*XZ.get(L);if(H.config[x])return H.config[x];let b=(yield*w.get()).mcp?.[x];if(!b||!m1(b))return;return b}),d=B.fnUntraced(function*(x){let H=yield*u(x);if(!H)return yield*new D2({name:x});return H}),c=B.fn("MCP.startAuth")(function*(x){let H=yield*d(x);if(H.type!=="remote")throw Error(`MCP server ${x} is not a remote server`);if(H.oauth===!1)throw Error(`MCP server ${x} has OAuth explicitly disabled`);let A=C3(x,H.url);if(!A)throw Error(`Invalid MCP URL for "${x}"`);let b=typeof H.oauth==="object"?H.oauth:void 0,k=b?.redirectUri??(b?.callbackPort?`http://127.0.0.1:${b.callbackPort}${lZ}`:void 0);yield*B.promise(()=>eZ.ensureRunning(k));let U=Array.from(crypto.getRandomValues(new Uint8Array(32))).map((YZ)=>YZ.toString(16).padStart(2,"0")).join("");yield*$.updateOAuthState(x,U);let E,i=new h1(x,H.url,{clientId:b?.clientId,clientSecret:b?.clientSecret,scope:b?.scope,redirectUri:k},{onRedirect:async(YZ)=>{E=YZ}},$),o=new S1(A,{authProvider:i});return yield*B.tryPromise({try:()=>{let YZ=new A1({name:"muxcode",version:W2});return YZ.connect(o).then(()=>({authorizationUrl:"",oauthState:U,client:YZ}))},catch:(YZ)=>YZ}).pipe(B.catch((YZ)=>{if(YZ instanceof HZ&&E)return q$.set(x,o),B.succeed({authorizationUrl:E.toString(),oauthState:U});return B.die(YZ)}))}),_=B.fn("MCP.authenticate")(function*(x){let H=yield*c(x);if(!H.authorizationUrl){let U="client"in H?H.client:void 0,E=yield*d(x).pipe(B.tapError(()=>B.tryPromise(()=>U?.close()??Promise.resolve()).pipe(B.ignore))),i=U?yield*Y2(x,U,E.timeout):void 0;if(!U||!i)return yield*B.tryPromise(()=>U?.close()??Promise.resolve()).pipe(B.ignore),{status:"failed",error:"Failed to get tools"};let o=yield*XZ.get(L);return yield*$.clearOAuthState(x),yield*I(o,x,U,i,E.timeout)}e.info("opening browser for oauth",{mcpName:x,url:H.authorizationUrl,state:H.oauthState});let A=eZ.waitForCallback(H.oauthState,x);yield*B.tryPromise(()=>v3(H.authorizationUrl)).pipe(B.flatMap((U)=>B.callback((E)=>{let i=setTimeout(()=>E(B.void),500);U.on("error",(o)=>{clearTimeout(i),E(B.fail(o))}),U.on("exit",(o)=>{if(o!==null&&o!==0)clearTimeout(i),E(B.fail(Error(`Browser open failed with exit code ${o}`)))})})),B.catch(()=>{return e.warn("failed to open browser, user must open URL manually",{mcpName:x}),X.publish(u3,{mcpName:x,url:H.authorizationUrl}).pipe(B.ignore)}));let b=yield*B.promise(()=>A);if((yield*$.getOAuthState(x))!==H.oauthState)throw yield*$.clearOAuthState(x),Error("OAuth state mismatch - potential CSRF attack");return yield*$.clearOAuthState(x),yield*yZ(x,b)}),yZ=B.fn("MCP.finishAuth")(function*(x,H){yield*d(x);let A=q$.get(x);if(!A)throw Error(`No pending OAuth flow for MCP server: ${x}`);let b=yield*B.tryPromise({try:()=>A.finishAuth(H).then(()=>!0),catch:(U)=>{return e.error("failed to finish oauth",{mcpName:x,error:U}),U}}).pipe(B.option);if(W1.isNone(b))return{status:"failed",error:"OAuth completion failed"};yield*$.clearCodeVerifier(x),q$.delete(x);let k=yield*d(x);return yield*f(x,k)}),iZ=B.fn("MCP.removeAuth")(function*(x){yield*$.remove(x),eZ.cancelPending(x),q$.delete(x),e.info("removed oauth credentials",{mcpName:x})}),K6=B.fn("MCP.supportsOAuth")(function*(x){let H=yield*d(x);return H.type==="remote"&&H.oauth!==!1}),x6=B.fn("MCP.hasStoredTokens")(function*(x){return!!(yield*$.get(x))?.tokens}),G6=B.fn("MCP.getAuthStatus")(function*(x){if(!(yield*$.get(x))?.tokens)return"not_authenticated";return(yield*$.isTokenExpired(x))?"expired":"authenticated"});return X1.of({status:C,clients:l,tools:W$,prompts:e1,resources:Z0,add:q,connect:g,disconnect:r,getPrompt:j,readResource:T,startAuth:c,authenticate:_,finishAuth:yZ,removeAuth:iZ,supportsOAuth:K6,hasStoredTokens:x6,getAuthStatus:G6})})),X9=h3.pipe(p.provide(J$.layer),p.provide(R$.layer),p.provide(g$.defaultLayer),p.provide(n1.defaultLayer),p.provide(VZ.defaultLayer));var C$={};SZ(C$,{layer:()=>m3,hints:()=>c1,defaultLayer:()=>J9,Service:()=>o1,Info:()=>B9,Event:()=>W9,Default:()=>Q1,Command:()=>C$});var K2=`Create or update \`AGENTS.md\` for this repository.
43
+
44
+ The goal is a compact instruction file that helps future OpenCode sessions avoid mistakes and ramp up quickly. Every line should answer: "Would an agent likely miss this without help?" If not, leave it out.
45
+
46
+ User-provided focus or constraints (honor these):
47
+ $ARGUMENTS
48
+
49
+ ## How to investigate
50
+
51
+ Read the highest-value sources first:
52
+ - \`README*\`, root manifests, workspace config, lockfiles
53
+ - build, test, lint, formatter, typecheck, and codegen config
54
+ - CI workflows and pre-commit / task runner config
55
+ - existing instruction files (\`AGENTS.md\`, \`CLAUDE.md\`, \`.cursor/rules/\`, \`.cursorrules\`, \`.github/copilot-instructions.md\`)
56
+ - repo-local OpenCode config such as \`opencode.json\`
57
+
58
+ If architecture is still unclear after reading config and docs, inspect a small number of representative code files to find the real entrypoints, package boundaries, and execution flow. Prefer reading the files that explain how the system is wired together over random leaf files.
59
+
60
+ Prefer executable sources of truth over prose. If docs conflict with config or scripts, trust the executable source and only keep what you can verify.
61
+
62
+ ## What to extract
63
+
64
+ Look for the highest-signal facts for an agent working in this repo:
65
+ - exact developer commands, especially non-obvious ones
66
+ - how to run a single test, a single package, or a focused verification step
67
+ - required command order when it matters, such as \`lint -> typecheck -> test\`
68
+ - monorepo or multi-package boundaries, ownership of major directories, and the real app/library entrypoints
69
+ - framework or toolchain quirks: generated code, migrations, codegen, build artifacts, special env loading, dev servers, infra deploy flow
70
+ - repo-specific style or workflow conventions that differ from defaults
71
+ - testing quirks: fixtures, integration test prerequisites, snapshot workflows, required services, flaky or expensive suites
72
+ - important constraints from existing instruction files worth preserving
73
+
74
+ Good \`AGENTS.md\` content is usually hard-earned context that took reading multiple files to infer.
75
+
76
+ ## Questions
77
+
78
+ Only ask the user questions if the repo cannot answer something important. Use the \`question\` tool for one short batch at most.
79
+
80
+ Good questions:
81
+ - undocumented team conventions
82
+ - branch / PR / release expectations
83
+ - missing setup or test prerequisites that are known but not written down
84
+
85
+ Do not ask about anything the repo already makes clear.
86
+
87
+ ## Writing rules
88
+
89
+ Include only high-signal, repo-specific guidance such as:
90
+ - exact commands and shortcuts the agent would otherwise guess wrong
91
+ - architecture notes that are not obvious from filenames
92
+ - conventions that differ from language or framework defaults
93
+ - setup requirements, environment quirks, and operational gotchas
94
+ - references to existing instruction sources that matter
95
+
96
+ Exclude:
97
+ - generic software advice
98
+ - long tutorials or exhaustive file trees
99
+ - obvious language conventions
100
+ - speculative claims or anything you could not verify
101
+ - content better stored in another file referenced via \`opencode.json\` \`instructions\`
102
+
103
+ When in doubt, omit.
104
+
105
+ Prefer short sections and bullets. If the repo is simple, keep the file simple. If the repo is large, summarize the few structural facts that actually change how an agent should work.
106
+
107
+ If \`AGENTS.md\` already exists at \`\${path}\`, improve it in place rather than rewriting blindly. Preserve verified useful guidance, delete fluff or stale claims, and reconcile it with the current codebase.
108
+ `;var x2=`You are a code reviewer. Your job is to review code changes and provide actionable feedback.
109
+
110
+ ---
111
+
112
+ Input: $ARGUMENTS
113
+
114
+ ---
115
+
116
+ ## Determining What to Review
117
+
118
+ Based on the input provided, determine which type of review to perform:
119
+
120
+ 1. **No arguments (default)**: Review all uncommitted changes
121
+ - Run: \`git diff\` for unstaged changes
122
+ - Run: \`git diff --cached\` for staged changes
123
+ - Run: \`git status --short\` to identify untracked (net new) files
124
+
125
+ 2. **Commit hash** (40-char SHA or short hash): Review that specific commit
126
+ - Run: \`git show $ARGUMENTS\`
127
+
128
+ 3. **Branch name**: Compare current branch to the specified branch
129
+ - Run: \`git diff $ARGUMENTS...HEAD\`
130
+
131
+ 4. **PR URL or number** (contains "github.com" or "pull" or looks like a PR number): Review the pull request
132
+ - Run: \`gh pr view $ARGUMENTS\` to get PR context
133
+ - Run: \`gh pr diff $ARGUMENTS\` to get the diff
134
+
135
+ Use best judgement when processing input.
136
+
137
+ ---
138
+
139
+ ## Gathering Context
140
+
141
+ **Diffs alone are not enough.** After getting the diff, read the entire file(s) being modified to understand the full context. Code that looks wrong in isolation may be correct given surrounding logic\u2014and vice versa.
142
+
143
+ - Use the diff to identify which files changed
144
+ - Use \`git status --short\` to identify untracked files, then read their full contents
145
+ - Read the full file to understand existing patterns, control flow, and error handling
146
+ - Check for existing style guide or conventions files (CONVENTIONS.md, AGENTS.md, .editorconfig, etc.)
147
+
148
+ ---
149
+
150
+ ## What to Look For
151
+
152
+ **Bugs** - Your primary focus.
153
+ - Logic errors, off-by-one mistakes, incorrect conditionals
154
+ - If-else guards: missing guards, incorrect branching, unreachable code paths
155
+ - Edge cases: null/empty/undefined inputs, error conditions, race conditions
156
+ - Security issues: injection, auth bypass, data exposure
157
+ - Broken error handling that swallows failures, throws unexpectedly or returns error types that are not caught.
158
+
159
+ **Structure** - Does the code fit the codebase?
160
+ - Does it follow existing patterns and conventions?
161
+ - Are there established abstractions it should use but doesn't?
162
+ - Excessive nesting that could be flattened with early returns or extraction
163
+
164
+ **Performance** - Only flag if obviously problematic.
165
+ - O(n\xB2) on unbounded data, N+1 queries, blocking I/O on hot paths
166
+
167
+ **Behavior Changes** - If a behavioral change is introduced, raise it (especially if it's possibly unintentional).
168
+
169
+ ---
170
+
171
+ ## Before You Flag Something
172
+
173
+ **Be certain.** If you're going to call something a bug, you need to be confident it actually is one.
174
+
175
+ - Only review the changes - do not review pre-existing code that wasn't modified
176
+ - Don't flag something as a bug if you're unsure - investigate first
177
+ - Don't invent hypothetical problems - if an edge case matters, explain the realistic scenario where it breaks
178
+ - If you need more context to be sure, use the tools below to get it
179
+
180
+ **Don't be a zealot about style.** When checking code against conventions:
181
+
182
+ - Verify the code is *actually* in violation. Don't complain about else statements if early returns are already being used correctly.
183
+ - Some "violations" are acceptable when they're the simplest option. A \`let\` statement is fine if the alternative is convoluted.
184
+ - Excessive nesting is a legitimate concern regardless of other style choices.
185
+ - Don't flag style preferences as issues unless they clearly violate established project conventions.
186
+
187
+ ---
188
+
189
+ ## Tools
190
+
191
+ Use these to inform your review:
192
+
193
+ - **Explore agent** - Find how existing code handles similar problems. Check patterns, conventions, and prior art before claiming something doesn't fit.
194
+ - **Exa Code Context** - Verify correct usage of libraries/APIs before flagging something as wrong.
195
+ - **Web Search** - Research best practices if you're unsure about a pattern.
196
+
197
+ If you're uncertain about something and can't verify it with these tools, say "I'm not sure about X" rather than flagging it as a definite issue.
198
+
199
+ ---
200
+
201
+ ## Output
202
+
203
+ 1. If there is a bug, be direct and clear about why it is a bug.
204
+ 2. Clearly communicate severity of issues. Do not overstate severity.
205
+ 3. Critiques should clearly and explicitly communicate the scenarios, environments, or inputs that are necessary for the bug to arise. The comment should immediately indicate that the issue's severity depends on these factors.
206
+ 4. Your tone should be matter-of-fact and not accusatory or overly positive. It should read as a helpful AI assistant suggestion without sounding too much like a human reviewer.
207
+ 5. Write so the reader can quickly understand the issue without reading too closely.
208
+ 6. AVOID flattery, do not give any comments that are not helpful to the reader. Avoid phrasing like "Great job ...", "Thanks for ...".
209
+ `;var W9={Executed:Z$.define("command.executed",G.Struct({name:G.String,sessionID:p3,arguments:G.String,messageID:l3}))},B9=G.Struct({name:G.String,description:G.optional(G.String),agent:G.optional(G.String),model:G.optional(G.String),source:G.optional(G.Literals(["command","mcp","skill"])),template:G.Unknown,subtask:G.optional(G.Boolean),hints:G.Array(G.String)}).annotate({identifier:"Command"});function c1(Z){let $=[],X=Z.match(/\$\d+/g);if(X)for(let Q of[...new Set(X)].sort())$.push(Q);if(Z.includes("$ARGUMENTS"))$.push("$ARGUMENTS");return $}var Q1={INIT:"init",REVIEW:"review"};class o1 extends LZ.Service()("@muxcode/Command"){}var m3=p.effect(o1,B.gen(function*(){let Z=yield*g$.Service,$=yield*k$.Service,X=yield*G2.Service,Q=B.fn("Command.state")(function*(K){let w=yield*Z.get(),V=yield*$1.make(),y={};y[Q1.INIT]={name:Q1.INIT,description:"guided AGENTS.md setup",source:"command",get template(){return K2.replace("${path}",K.worktree)},hints:c1(K2)},y[Q1.REVIEW]={name:Q1.REVIEW,description:"review changes [commit|branch|pr], defaults to uncommitted",source:"command",get template(){return x2.replace("${path}",K.worktree)},subtask:!0,hints:c1(x2)};for(let[L,z]of Object.entries(w.command??{}))y[L]={name:L,agent:z.agent,model:z.model,description:z.description,source:"command",get template(){return z.template},subtask:z.subtask,hints:c1(z.template)};for(let[L,z]of Object.entries(yield*$.prompts()))y[L]={name:L,source:"mcp",description:z.description,get template(){return V.promise($.getPrompt(z.client,z.name,z.arguments?Object.fromEntries(z.arguments.map((I,C)=>[I.name,`$${C+1}`])):{}).pipe(B.map((I)=>I?.messages.map((C)=>C.content.type==="text"?C.content.text:"").join(`
210
+ `)||"")))},hints:z.arguments?.map((I,C)=>`$${C+1}`)??[]};for(let L of yield*X.all()){if(y[L.name])continue;y[L.name]={name:L.name,description:L.description,source:"skill",get template(){return L.content},hints:[]}}return{commands:y}}),Y=yield*XZ.make((K)=>Q(K)),J=B.fn("Command.get")(function*(K){return(yield*XZ.get(Y)).commands[K]}),D=B.fn("Command.list")(function*(){let K=yield*XZ.get(Y);return Object.values(K.commands)});return o1.of({get:J,list:D})})),J9=m3.pipe(p.provide(g$.defaultLayer),p.provide(k$.defaultLayer),p.provide(G2.defaultLayer));var z2={};SZ(z2,{use:()=>w9,setInitialized:()=>z9,list:()=>F9,layer:()=>D6,get:()=>O9,fromRow:()=>UZ,defaultLayer:()=>L9,UpdatePayload:()=>y9,UpdateInput:()=>V9,Service:()=>Y1,Project:()=>z2,NotFoundError:()=>O2,Info:()=>B6,Event:()=>J6});var H2=i3("workspace",{id:dZ().$type().primaryKey(),type:dZ().notNull(),name:dZ().notNull().default(""),branch:dZ(),directory:dZ(),extra:dZ({mode:"json"}),project_id:dZ().$type().notNull().references(()=>v.id,{onDelete:"cascade"}),time_used:d3().notNull().$default(()=>Date.now())});var Q$={};SZ(Q$,{layer:()=>e3,defaultLayer:()=>K9,Vcs:()=>t3,Service:()=>t1,Project:()=>Q$,Info:()=>r3,ID:()=>X$});import o3 from"path";var I$={};SZ(I$,{layer:()=>c3,defaultLayer:()=>D9,Service:()=>s1,Git:()=>I$});import a1 from"path";class s1 extends LZ.Service()("@muxcode/GitV2"){}var c3=p.effect(s1,B.gen(function*(){let Z=yield*VZ.Service,$=yield*T$.Service,X=B.fn("Git.find")(function*(J){let D=yield*Z.up({targets:[".git"],start:J}).pipe(B.map((L)=>L[0]),B.catch(()=>B.succeed(void 0)));if(!D)return;let K=a1.dirname(D),w=V2(K,$),V=yield*w(["rev-parse","--show-toplevel"]),y=yield*w(["rev-parse","--git-common-dir"]);if(y.exitCode!==0)return;return{directory:$$.make(V.exitCode===0?n3(K,V.text):K),store:$$.make(n3(K,y.text))}}),Q=B.fn("Git.remote")(function*(J,D="origin"){let K=yield*V2(J.directory,$)(["remote","get-url",D]);if(K.exitCode!==0)return;return K.text.trim()||void 0}),Y=B.fn("Git.roots")(function*(J){let D=yield*V2(J.directory,$)(["rev-list","--max-parents=0","HEAD"]);if(D.exitCode!==0)return[];return D.text.split(`
211
+ `).map((K)=>K.trim()).filter(Boolean).toSorted()});return s1.of({find:X,remote:Q,roots:Y})})),D9=c3.pipe(p.provide(VZ.defaultLayer),p.provide(T$.defaultLayer));function V2(Z,$){return(X)=>$.run(U$.make("git",X,{cwd:Z,extendEnv:!0,stdin:"ignore"})).pipe(B.map((Q)=>({exitCode:Q.exitCode,text:Q.stdout.toString("utf8")})),B.catch(()=>B.succeed({exitCode:1,text:""})))}function n3(Z,$){let X=$.replace(/[\r\n]+$/,"");if(!X)return Z;let Q=VZ.windowsPath(X);if(a1.isAbsolute(Q))return a1.normalize(Q);return a1.resolve(Z,Q)}var X$=G.String.pipe(G.brand("Project.ID"),s3((Z)=>({global:Z.make("global")}))),t3=G.Union([G.Struct({type:G.Literal("git"),store:$$})]);class r3 extends G.Class("Project.Info")({id:X$,vcs:G.optional(t3)}){}class t1 extends LZ.Service()("@muxcode/ProjectV2"){}var e3=p.effect(t1,B.gen(function*(){let Z=yield*VZ.Service,$=yield*I$.Service,X=B.fnUntraced(function*(V){return yield*Z.readFileString(o3.join(V,"muxcode")).pipe(B.map((y)=>y.trim()),B.map((y)=>y?X$.make(y):void 0),B.catch(()=>B.succeed(void 0)))}),Q=B.fnUntraced(function*(V){let y=yield*$.remote(V);if(!y)return;let L=Y(y);if(!L)return;return X$.make(a3.fast(`git-remote:${L}`))});function Y(V){let y=V.trim();if(!y)return;try{let L=new URL(y);if(L.protocol==="file:")return;return J(L.hostname,L.pathname)}catch{let L=y.match(/^([^@/:]+@)?([^/:]+):(.+)$/);if(L)return J(L[2],L[3]);return}}function J(V,y){let L=y.replace(/^\/+/,"").replace(/\.git\/?$/,"").replace(/\/+$/,"");if(!V||!L)return;return`${V.toLowerCase()}/${L}`}let D=B.fnUntraced(function*(V){let y=(yield*$.roots(V))[0];return y?X$.make(y):void 0}),K=B.fn("Project.resolve")(function*(V){let y=yield*$.find(V);if(!y)return{id:X$.global,directory:V,vcs:void 0};let L=yield*X(y.store),z=(yield*Q(y))??L??(yield*D(y));return{previous:L,id:z??X$.global,directory:y.directory,vcs:{type:"git",store:y.store}}}),w=B.fn("Project.commit")(function*(V){yield*Z.writeFileString(o3.join(V.store,"muxcode"),V.id).pipe(B.ignore)});return t1.of({resolve:K,commit:w})})),K9=e3.pipe(p.provide(VZ.defaultLayer),p.provide(I$.defaultLayer));var x9=mZ({service:"project"}),L2=G.Literal("git"),w2=G.Struct({url:RZ(G.String),override:RZ(G.String),color:RZ(G.String)}),F2=G.Struct({start:RZ(G.String.annotate({description:"Startup script to run when creating a new workspace (worktree)"}))}),G9=G.Struct({created:r1,updated:r1,initialized:RZ(r1)}),B6=G.Struct({id:PZ,worktree:G.String,vcs:RZ(L2),name:RZ(G.String),icon:RZ(w2),commands:RZ(F2),time:G9,sandboxes:G.Array(G.String)}).annotate({identifier:"Project"}),J6={Updated:Z$.define("project.updated",B6)};function UZ(Z){let $=Z.icon_url||Z.icon_url_override||Z.icon_color?{url:Z.icon_url??void 0,override:Z.icon_url_override??void 0,color:Z.icon_color??void 0}:void 0;return{id:Z.id,worktree:Z.worktree,vcs:Z.vcs?G.decodeUnknownSync(L2)(Z.vcs):void 0,name:Z.name??void 0,icon:$,time:{created:Z.time_created,updated:Z.time_updated,initialized:Z.time_initialized??void 0},sandboxes:Z.sandboxes,commands:Z.commands??void 0}}function H9(Z,$){return[...new Map([...Z,...$].map((X)=>[JSON.stringify(X),X])).values()]}var V9=G.Struct({projectID:PZ,name:G.optional(G.String),icon:G.optional(w2),commands:G.optional(F2)}),y9=G.Struct({name:G.optional(G.String),icon:G.optional(w2),commands:G.optional(F2)}).annotate({identifier:"ProjectUpdateInput"});class O2 extends G.TaggedErrorClass()("Project.NotFoundError",{projectID:PZ}){}class Y1 extends LZ.Service()("@muxcode/Project"){}var D6=p.effect(Y1,B.gen(function*(){let Z=yield*VZ.Service,$=yield*T$.Service,X=yield*i1.ChildProcessSpawner,Q=yield*Q$.Service,Y=yield*R$.Service,J=yield*y2.Service,D=B.fnUntraced(function*(P,j){let T=yield*X.spawn(U$.make("git",P,{cwd:j?.cwd,extendEnv:!0,stdin:"ignore"})),[u,d]=yield*B.all([_Z.mkString(_Z.decodeText(T.stdout)),_Z.mkString(_Z.decodeText(T.stderr))],{concurrency:2});return{code:yield*T.exitCode,text:u,stderr:d}},B.scoped,B.catch(()=>B.succeed({code:1,text:"",stderr:""}))),K=(P)=>B.sync(()=>_$.use(P)),w=(P)=>B.sync(()=>X6.emit("event",{directory:"global",project:P.id,payload:{type:J6.Updated.type,properties:P}})),V=G.decodeUnknownSync(G.optional(L2))($6.MUXCODE_FAKE_VCS),y=yield*Z6.Scope,L=B.fn("Project.migrateProjectId")(function*(P,j){if(!P)return;if(P===PZ.global)return;if(P===j)return;yield*B.sync(()=>_$.transaction((T)=>{let u=T.select().from(v).where(t(v.id,P)).get(),d=T.select().from(v).where(t(v.id,j)).get();if(u&&!d)T.insert(v).values({...u,id:j,time_updated:Date.now()}).run();let c=T.select().from(MZ).where(t(MZ.project_id,P)).get(),_=T.select().from(MZ).where(t(MZ.project_id,j)).get();if(c&&_)T.update(MZ).set({data:H9(c.data,_.data),time_created:Math.min(c.time_created,_.time_created),time_updated:Date.now()}).where(t(MZ.project_id,j)).run(),T.delete(MZ).where(t(MZ.project_id,P)).run();if(c&&!_)T.update(MZ).set({project_id:j}).where(t(MZ.project_id,P)).run();if(T.update(Y$).set({project_id:j,time_updated:Q6`${Y$.time_updated}`}).where(t(Y$.project_id,P)).run(),T.update(H2).set({project_id:j}).where(t(H2.project_id,P)).run(),u)T.delete(v).where(t(v.id,P)).run()},{behavior:"immediate"}))}),z=B.fn("Project.fromDirectory")(function*(P){x9.info("fromDirectory",{directory:P});let j=yield*Q.resolve($$.make(P)),T=j.id===Q$.ID.make("global")&&!j.vcs?"/":j.directory,u=PZ.make(j.id);yield*L(j.previous?PZ.make(j.previous):void 0,u);let d=yield*K((yZ)=>yZ.select().from(v).where(t(v.id,u)).get()),c=d?UZ(d):{id:u,worktree:T,vcs:j.vcs?.type??V,sandboxes:[],time:{created:Date.now(),updated:Date.now()}};if(J.experimentalIconDiscovery)yield*I(c).pipe(B.ignore,B.forkIn(y));let _={...c,worktree:u===PZ.global?T:c.worktree,vcs:j.vcs?.type??V,time:{...c.time,updated:Date.now()}};if(u!==PZ.global&&j.directory!==_.worktree&&!_.sandboxes.includes(j.directory))_.sandboxes.push(j.directory);if(_.sandboxes=yield*B.forEach(_.sandboxes,(yZ)=>Z.exists(yZ).pipe(B.orDie,B.map((iZ)=>iZ?yZ:void 0)),{concurrency:"unbounded"}).pipe(B.map((yZ)=>yZ.filter((iZ)=>iZ!==void 0))),yield*K((yZ)=>yZ.insert(v).values({id:_.id,worktree:_.worktree,vcs:_.vcs??null,name:_.name,icon_url:_.icon?.url,icon_url_override:_.icon?.override,icon_color:_.icon?.color,time_created:_.time.created,time_updated:_.time.updated,time_initialized:_.time.initialized,sandboxes:_.sandboxes,commands:_.commands}).onConflictDoUpdate({target:v.id,set:{worktree:_.worktree,vcs:_.vcs??null,name:_.name,icon_url:_.icon?.url,icon_url_override:_.icon?.override,icon_color:_.icon?.color,time_updated:_.time.updated,time_initialized:_.time.initialized,sandboxes:_.sandboxes,commands:_.commands}}).run()),u!==PZ.global)yield*K((yZ)=>yZ.update(Y$).set({project_id:u}).where(Y6(t(Y$.project_id,PZ.global),t(Y$.directory,j.directory))).run());if(yield*w(_),u!==PZ.global&&j.vcs?.type==="git")yield*Q.commit({store:j.vcs.store,id:j.id});return{project:_,sandbox:j.vcs?j.directory:T}}),I=B.fn("Project.discover")(function*(P){if(P.vcs!=="git")return;if(P.icon?.override)return;if(P.icon?.url)return;let T=(yield*Z.glob("**/favicon.{ico,png,svg,jpg,jpeg,webp}",{cwd:P.worktree,absolute:!0,include:"file"}).pipe(B.orDie)).sort((yZ,iZ)=>yZ.length-iZ.length)[0];if(!T)return;let u=yield*Z.readFile(T).pipe(B.orDie),d=Buffer.from(u).toString("base64"),_=`data:${VZ.mimeType(T)};base64,${d}`;yield*f({projectID:P.id,icon:{url:_}}).pipe(B.catchTag("Project.NotFoundError",()=>B.void))}),C=B.fn("Project.list")(function*(){return yield*K((P)=>P.select().from(v).all().map(UZ))}),l=B.fn("Project.get")(function*(P){let j=yield*K((T)=>T.select().from(v).where(t(v.id,P)).get());return j?UZ(j):void 0}),f=B.fn("Project.update")(function*(P){let j=yield*K((u)=>u.update(v).set({name:P.name,icon_url:P.icon?.url,icon_url_override:P.icon?.override,icon_color:P.icon?.color,commands:P.commands,time_updated:Date.now()}).where(t(v.id,P.projectID)).returning().get());if(!j)return yield*new O2({projectID:P.projectID});let T=UZ(j);return yield*w(T),T}),q=B.fn("Project.initGit")(function*(P){if(P.project.vcs==="git")return P.project;if(!(yield*B.sync(()=>W6("git"))))throw Error("Git is not installed");let j=yield*D(["init","--quiet"],{cwd:P.directory});if(j.code!==0)throw Error(j.stderr.trim()||j.text.trim()||"Failed to initialize git repository");let{project:T}=yield*z(P.directory);return T}),g=B.fn("Project.setInitialized")(function*(P){yield*K((j)=>j.update(v).set({time_initialized:Date.now()}).where(t(v.id,P)).run())}),r=yield*XZ.make(B.fn("Project.initState")(function*(P){yield*(yield*Y.subscribe(C$.Event.Executed)).pipe(_Z.runForEach((j)=>j.properties.name===C$.Default.INIT?g(P.project.id):B.void),B.forkScoped)})),W$=B.fn("Project.init")(function*(){yield*XZ.get(r)}),qZ=B.fn("Project.sandboxes")(function*(P){let j=yield*K((u)=>u.select().from(v).where(t(v.id,P)).get());if(!j)return[];let T=UZ(j);return yield*B.forEach(T.sandboxes,(u)=>Z.isDir(u).pipe(B.orDie,B.map((d)=>d?u:void 0)),{concurrency:"unbounded"}).pipe(B.map((u)=>u.filter((d)=>d!==void 0)))}),e1=B.fn("Project.addSandbox")(function*(P,j){let T=yield*K((c)=>c.select().from(v).where(t(v.id,P)).get());if(!T)throw Error(`Project not found: ${P}`);let u=[...T.sandboxes];if(!u.includes(j))u.push(j);let d=yield*K((c)=>c.update(v).set({sandboxes:u,time_updated:Date.now()}).where(t(v.id,P)).returning().get());if(!d)throw Error(`Project not found: ${P}`);yield*w(UZ(d))}),Z0=B.fn("Project.removeSandbox")(function*(P,j){let T=yield*K((c)=>c.select().from(v).where(t(v.id,P)).get());if(!T)throw Error(`Project not found: ${P}`);let u=T.sandboxes.filter((c)=>c!==j),d=yield*K((c)=>c.update(v).set({sandboxes:u,time_updated:Date.now()}).where(t(v.id,P)).returning().get());if(!d)throw Error(`Project not found: ${P}`);yield*w(UZ(d))});return Y1.of({init:W$,fromDirectory:z,discover:I,list:C,get:l,update:f,initGit:q,setInitialized:g,sandboxes:qZ,addSandbox:e1,removeSandbox:Z0})})),L9=D6.pipe(p.provide(R$.defaultLayer),p.provide(Q$.defaultLayer),p.provide(T$.defaultLayer),p.provide(n1.defaultLayer),p.provide(VZ.defaultLayer),p.provide(y2.defaultLayer)),w9=B$(Y1);function F9(){return _$.use((Z)=>Z.select().from(v).all().map(($)=>UZ($)))}function O9(Z){let $=_$.use((X)=>X.select().from(v).where(t(v.id,Z)).get());if(!$)return;return UZ($)}function z9(Z){_$.use(($)=>$.update(v).set({time_initialized:Date.now()}).where(t(v.id,Z)).run())}
212
+ export{b2 as Hl,$0 as Il,H2 as Jl,A1 as Kl,HZ as Ll,S1 as Ml,h1 as Nl,J$ as Ol,k$ as Pl,C$ as Ql,Y1 as Rl,L9 as Sl,z2 as Tl};
@@ -0,0 +1,2 @@
1
+ // @bun
2
+ import{Hj as a,Ij as b,Jj as c,Kj as d,Lj as e}from"./chunk-2bs943gb.js";import"./chunk-zn283041.js";import"./chunk-11285jfy.js";import"./chunk-34d0nkas.js";import"./chunk-tvw8tfpr.js";import"./chunk-4k6px3aw.js";import"./chunk-638270xn.js";import"./chunk-sjd8mzvx.js";import"./chunk-sftkw30q.js";import"./chunk-kr1vbd82.js";import"./chunk-fk9bmtwr.js";import"./chunk-an9wvc2n.js";import"./chunk-v107htgw.js";import"./chunk-cbz8b7g5.js";import"./chunk-5jn2z3nf.js";import"./chunk-8cm9znxk.js";import"./chunk-a0srn4ak.js";import"./chunk-ygpen625.js";import"./chunk-jfz77m78.js";import"./chunk-my9cfmvt.js";import"./chunk-8jy0dvcn.js";import"./chunk-frbht418.js";import"./chunk-8ebkxjar.js";import"./chunk-zjpnyah2.js";import"./chunk-0hqmdrjr.js";import"./chunk-1pv2317e.js";import"./chunk-21x3anp4.js";import"./chunk-ntvr3177.js";import"./chunk-9h1pwxb2.js";import"./chunk-fkmzj0qt.js";import"./chunk-q9yddd1r.js";import"./chunk-eskw1cj2.js";import"./chunk-k19y2psf.js";import"./chunk-ppg6zhae.js";import"./chunk-ng3vbpmy.js";import"./chunk-1mqsg5s7.js";import"./chunk-z3mx7n44.js";import"./chunk-0qqpjj2h.js";import"./chunk-9g64kggy.js";import"./chunk-8j3aw4qg.js";export{c as url,b as openapi,d as listen,e as Server,a as Default};
@@ -0,0 +1,2 @@
1
+ // @bun
2
+ import{Oa as w,Pa as p,Qa as Gs,Ra as Ls,Sa as q,Ta as Qs,Ua as F,Va as Hs,Wa as Js,Xa as Ms}from"./chunk-64ka6hd5.js";import"./chunk-dtk4m8rm.js";import"./chunk-envnht72.js";import"./chunk-s92578qx.js";import"./chunk-7848rf5q.js";import"./chunk-y4f43qq5.js";import"./chunk-1evcc54z.js";import"./chunk-xedav0qx.js";import{vj as ss}from"./chunk-9n629gtn.js";import"./chunk-34d0nkas.js";import"./chunk-sjd8mzvx.js";import"./chunk-an9wvc2n.js";import"./chunk-cbz8b7g5.js";import"./chunk-5jn2z3nf.js";import"./chunk-8cm9znxk.js";import{qp as js}from"./chunk-a0srn4ak.js";import"./chunk-ygpen625.js";import"./chunk-jfz77m78.js";import"./chunk-my9cfmvt.js";import"./chunk-8jy0dvcn.js";import"./chunk-frbht418.js";import"./chunk-1pv2317e.js";import"./chunk-21x3anp4.js";import"./chunk-ntvr3177.js";import"./chunk-9h1pwxb2.js";import"./chunk-fkmzj0qt.js";import"./chunk-q9yddd1r.js";import"./chunk-eskw1cj2.js";import"./chunk-k19y2psf.js";import"./chunk-ppg6zhae.js";import"./chunk-ng3vbpmy.js";import{Fx as zs,Gy as k,Hz as _,Yz as ns,eC as r,pE as V,tz as ls}from"./chunk-1mqsg5s7.js";import"./chunk-z3mx7n44.js";import"./chunk-0qqpjj2h.js";import"./chunk-9g64kggy.js";import"./chunk-8j3aw4qg.js";function ys(s,o,d,i,n){return F({data:s,event:o,sessionID:d,thinking:i,limits:n})}function u(s,o){if(!s)return o;if(!o)return s;return{...s,...o}}function ro(s){return s.part.size>0||s.tools.size>0}function io(s,o){if(ro(s)){if(!o)return{phase:"running"};return{...o,phase:"running"}}if(s.permissions.length>0||s.questions.length>0){if(!o)return{phase:"idle"};return{...o,phase:"idle"}}if(!o)return;return{...o,phase:"idle",status:""}}function mo(s,o,d,i){if(o.info.role==="user"){let h=Ms(o);if(!h.text.trim())return{commits:[]};return{commits:[{kind:"user",text:h.text,phase:"start",source:"system",messageID:o.info.id}]}}let n=[],t,S=ys(s,{id:`bootstrap:message:${o.info.id}`,type:"message.updated",properties:{sessionID:o.info.sessionID,info:o.info}},o.info.sessionID,d,i);n.push(...S.commits),t=u(t,S.footer?.patch);for(let h of o.parts){let P=ys(s,{id:`bootstrap:part:${h.id}`,type:"message.part.updated",properties:{sessionID:h.sessionID,part:h,time:0}},o.info.sessionID,d,i);t=u(t,P.footer?.patch),n.push(...P.commits)}return{commits:n,patch:t}}function x(s){let o=w(),d=[],i;q({data:o,messages:s.messages,permissions:s.permissions,questions:s.questions});for(let n of s.messages){let t=mo(o,n,s.thinking,s.limits);d.push(...t.commits),i=u(i,t.patch)}return{data:o,commits:d,patch:io(o,i)}}var os=200,$s=80,E=80,no=32,go=32,lo=16,to=8;function Do(s){return{sessionID:s,data:w({includeUserText:!0}),frames:[]}}function U(s,o){let d=s.details.get(o);if(d)return d;let i=Do(o);return s.details.set(o,i),i}function L(s,o){if(!s||!o)return!1;return s.sessionID===o.sessionID&&s.partID===o.partID&&s.callID===o.callID&&s.label===o.label&&s.description===o.description&&s.status===o.status&&s.title===o.title&&s.toolCalls===o.toolCalls&&s.lastUpdatedAt===o.lastUpdatedAt}function Ps(s,o){return s.length===o.length&&s.every((d,i)=>d.id===o[i]?.id&&d===o[i])}function as(s){return{permissions:s.permissions.slice(),questions:s.questions.slice()}}function rs(s,o){return!Ps(o.permissions,s.permissions)||!Ps(o.questions,s.questions)}function v(s,o){return s.kind===o.kind&&s.text===o.text&&s.phase===o.phase&&s.source===o.source&&s.messageID===o.messageID&&s.partID===o.partID&&s.tool===o.tool&&s.interrupted===o.interrupted&&s.toolState===o.toolState&&s.toolError===o.toolError}function y(s){if(typeof s!=="string")return;return s.trim()||void 0}function f(s){if(typeof s==="number"&&Number.isFinite(s))return s;return}function So(s){let o=y(s.description);if(o)return o;let d=y(s.command);if(d)return d;let i=y(s.filePath)??y(s.filepath);if(i)return i;let n=y(s.pattern);if(n)return n;let t=y(s.query);if(t)return t;let S=y(s.url);if(S)return S;let h=y(s.path);if(h)return h;let P=y(s.prompt);if(P)return P;return}function Ts(s){return y("title"in s.state?s.state.title:void 0)}function ks(s,o){if(!s||!o)return;return`${s}:${o}`}function ho(s){if(s.state.status==="pending")return{status:"pending",input:s.state.input,raw:s.state.raw};if(s.state.status==="running")return{status:"running",input:s.state.input,time:s.state.time,...s.state.metadata?{metadata:s.state.metadata}:{},...s.state.title?{title:s.state.title}:{}};if(s.state.status==="completed")return{status:"completed",input:s.state.input,output:s.state.output,title:s.state.title,metadata:s.state.metadata,time:s.state.time};return{status:"error",input:s.state.input,error:s.state.error,time:s.state.time,...s.state.metadata?{metadata:s.state.metadata}:{}}}function Q(s,o){let d=[...s];return d.slice(Math.max(0,d.length-o))}function e(s,o){let d=new Map;for(let[i,n]of s){if(!o.has(i))continue;d.set(i,n)}return d}function Io(s){return{id:s.id,type:"tool",sessionID:s.sessionID,messageID:s.messageID,callID:s.callID,tool:s.tool,state:ho(s),...s.metadata?{metadata:s.metadata}:{}}}function Co(s){if(!s.part)return s;return{...s,part:Io(s.part)}}function yo(s){if(!("time"in s.state))return Date.now();let o=s.state.time;if(!("end"in o))return o.start??Date.now();return o.end??o.start??Date.now()}function N(s,o){return("metadata"in s.state?s.state.metadata?.[o]:void 0)??s.metadata?.[o]}function Mo(s,o){let d=ss(y(s.state.input.subagent_type)??"general"),i=y(s.state.input.description)??Ts(s)??So(s.state.input)??"",n=s.state.status==="error"?"error":s.state.status==="completed"?"completed":"running";return{sessionID:o,partID:s.id,callID:s.callID,label:d,description:i,status:n,title:Ts(s),toolCalls:f(N(s,"toolcalls"))??f(N(s,"toolCalls"))??f(N(s,"calls")),lastUpdatedAt:yo(s)}}function Po(s){return y(N(s,"sessionId"))??y(N(s,"sessionID"))}function ws(s,o,d){if(o.tool!=="task")return!1;let i=Po(o);if(!i)return!1;if(d&&d.size>0&&!d.has(i))return!1;let n=Mo(o,i);if(L(s.tabs.get(i),n))return U(s,i),!1;return s.tabs.set(i,n),U(s,i),!0}function To(s){if(s.partID)return`${s.kind}:${s.partID}:${s.phase}`;if(s.messageID)return`${s.kind}:${s.messageID}:${s.phase}`;return`${s.kind}:${s.phase}:${s.text}`}function ko(s){if(s.frames.length<=E)return;s.frames.splice(0,s.frames.length-E)}function Ro(s,o){if(s.phase!=="progress"||o.phase!=="progress"){if(v(s,o))return s;return o}let d={...s,...o,text:s.text+o.text};if(v(s,d))return s;return d}function G(s,o){let d=!1;for(let i of o.map(Co)){let n=To(i),t=s.frames.findIndex((h)=>h.key===n);if(t===-1){s.frames.push({key:n,commit:i}),d=!0;continue}let S=Ro(s.frames[t].commit,i);if(v(s.frames[t].commit,S))continue;s.frames[t]={key:n,commit:S},d=!0}if(d)ko(s);return d}function Rs(s,o,d,i){let n=s.tabs.get(o);if(n){if(U(s,o),n.status!=="running")return!1;let t={...n,description:i==="permission"?"Pending permission":"Pending question",status:"running",title:n.title??d,lastUpdatedAt:Date.now()};if(L(n,t))return!1;return s.tabs.set(o,t),!0}return s.tabs.set(o,{sessionID:o,partID:`bootstrap:${o}`,callID:`bootstrap:${o}`,label:y(d)??ss(i),description:i==="permission"?"Pending permission":"Pending question",status:"running",lastUpdatedAt:Date.now()}),U(s,o),!0}function qo(s){let o=new Set(Q(s.data.call.keys(),no));for(let d of s.data.permissions){let i=ks(d.tool?.messageID,d.tool?.callID);if(i)o.add(i)}for(let d of s.frames){let i=ks(d.commit.part?.messageID,d.commit.part?.callID);if(i)o.add(i)}return e(s.data.call,o)}function $o(s,o){let d=new Set([...o,...Q(s.echo.keys(),to)]);return e(s.echo,d)}function wo(s){return new Set(Q(s.data.ids,E+lo))}function ds(s){let o=w({includeUserText:!0}),d=new Set(s.data.part.keys()),i=new Set(s.frames.flatMap((S)=>S.commit.partID?[S.commit.partID]:[])),n=new Set([...d,...i,...s.data.tools]),t=new Set([...[...d].map((S)=>s.data.msg.get(S)).filter((S)=>typeof S==="string"),...Q(s.data.role.keys(),go)]);o.announced=s.data.announced,o.permissions=s.data.permissions,o.questions=s.data.questions,o.ids=wo(s),o.tools=new Set([...s.data.tools].filter((S)=>n.has(S))),o.call=qo(s),o.role=e(s.data.role,t),o.msg=e(s.data.msg,d),o.part=e(s.data.part,d),o.text=e(s.data.text,d),o.sent=e(s.data.sent,d),o.end=new Set([...s.data.end].filter((S)=>d.has(S))),o.echo=$o(s.data,t),s.data=o}function Fo(s){let o=as(s.detail.data),d=F({data:s.detail.data,event:s.event,sessionID:s.detail.sessionID,thinking:s.thinking,limits:s.limits}),i=G(s.detail,d.commits);return ds(s.detail),i||rs(s.detail.data,o)}function qs(s){let o=F({data:s.detail.data,event:s.event,sessionID:s.detail.sessionID,thinking:s.thinking,limits:s.limits});return G(s.detail,o.commits)}function eo(s){let o=!1;for(let d of s.messages){o=qs({detail:s.detail,event:{id:`bootstrap:message:${d.info.id}`,type:"message.updated",properties:{sessionID:s.detail.sessionID,info:d.info}},thinking:s.thinking,limits:s.limits})||o;for(let i of d.parts)o=qs({detail:s.detail,event:{id:`bootstrap:part:${i.id}`,type:"message.part.updated",properties:{sessionID:s.detail.sessionID,part:i,time:0}},thinking:s.thinking,limits:s.limits})||o}return ds(s.detail),o}function Fs(s,o){return s.tabs.has(o)}function H(s){return[...s.details.values()].flatMap((o)=>o.data.permissions)}function J(s){return[...s.details.values()].flatMap((o)=>o.data.questions)}function es(){return{tabs:new Map,details:new Map}}function Uo(s){return{sessionID:s.sessionID,commits:s.frames.map((o)=>o.commit)}}function K(s){return[...s.tabs.values()].sort((o,d)=>{let i=Number(d.status==="running")-Number(o.status==="running");if(i!==0)return i;return d.lastUpdatedAt-o.lastUpdatedAt})}function co(s){return{permissions:H(s).sort((o,d)=>o.id.localeCompare(d.id)),questions:J(s).sort((o,d)=>o.id.localeCompare(d.id))}}function Ao(s,o){return{tabs:K(s),details:o,...co(s)}}function Us(s,o){let d=o?s.details.get(o):void 0;return Ao(s,d?{[d.sessionID]:Uo(d)}:{})}function cs(s){let o=new Map(s.children.map((n)=>[n.id,n])),d=new Set(o.keys()),i=!1;for(let n of s.messages)for(let t of n.parts){if(t.type!=="tool")continue;i=ws(s.data,t,d)||i}for(let n of s.permissions){if(!d.has(n.sessionID))continue;i=Rs(s.data,n.sessionID,o.get(n.sessionID)?.title,"permission")||i}for(let n of s.questions){if(!d.has(n.sessionID))continue;i=Rs(s.data,n.sessionID,o.get(n.sessionID)?.title,"question")||i}for(let n of s.data.tabs.keys()){let t=U(s.data,n),S=as(t.data);q({data:t.data,messages:[],permissions:s.permissions.filter((h)=>h.sessionID===n).sort((h,P)=>h.id.localeCompare(P.id)),questions:s.questions.filter((h)=>h.sessionID===n).sort((h,P)=>h.id.localeCompare(P.id))}),ds(t),i=rs(t.data,S)||i}return i}function As(s){if(!Fs(s.data,s.sessionID)||s.messages.length===0)return!1;let o=U(s.data,s.sessionID),d=as(o.data),i=o.data.call.size;return q({data:o.data,messages:s.messages,permissions:o.data.permissions,questions:o.data.questions}),eo({detail:o,messages:s.messages,thinking:s.thinking,limits:s.limits})||i!==o.data.call.size||rs(o.data,d)}function is(s){let o=!1;for(let[d,i]of s.tabs.entries()){if(i.status==="running")continue;s.tabs.delete(d),s.details.delete(d),o=!0}return o}function _s(s){let o=s.event;if(o.type==="message.part.updated"){let n=o.properties.part;if(n.sessionID===s.sessionID){if(n.type!=="tool")return!1;return ws(s.data,n)}}let d=o.type==="message.updated"||o.type==="message.part.delta"||o.type==="permission.asked"||o.type==="permission.replied"||o.type==="question.asked"||o.type==="question.replied"||o.type==="question.rejected"||o.type==="session.error"||o.type==="session.status"?o.properties.sessionID:o.type==="message.part.updated"?o.properties.part.sessionID:void 0;if(!d||!Fs(s.data,d))return!1;let i=U(s.data,d);if(o.type==="session.status"){if(o.properties.status.type!=="retry")return!1;return G(i,[{kind:"error",text:o.properties.status.message,phase:"start",source:"system",messageID:`retry:${o.properties.status.attempt}`}])}if(o.type==="session.error"&&o.properties.error)return G(i,[{kind:"error",text:p(o.properties.error),phase:"start",source:"system",messageID:`session.error:${o.properties.sessionID}:${p(o.properties.error)}`}]);return Fo({detail:i,event:o,thinking:s.thinking,limits:s.limits})}var bs=void 0;class W extends zs.Service()("@muxcode/RunStreamTransport"){}function gs(s){if(s.type==="message.updated")return s.properties.sessionID;if(s.type==="message.part.delta")return s.properties.sessionID;if(s.type==="message.part.updated")return s.properties.part.sessionID;if(s.type==="session.next.shell.started"||s.type==="session.next.shell.ended"||s.type==="permission.asked"||s.type==="permission.replied"||s.type==="question.asked"||s.type==="question.replied"||s.type==="question.rejected"||s.type==="session.error"||s.type==="session.status")return s.properties.sessionID;return}function _o(s){if(!s||typeof s!=="object"||Array.isArray(s))return!1;let o=Reflect.get(s,"type"),d=Reflect.get(s,"properties");return typeof o==="string"&&!!d&&typeof d==="object"}function Vs(s){if(!s||typeof s!=="object"||Array.isArray(s))return!1;let o=Reflect.get(s,"payload");return!!o&&typeof o==="object"}function bo(s){if(!Vs(s))return;let o=s.payload;if(o.type==="sync")return;return _o(o)?o:void 0}function No(s,o){if(!o||!Vs(s))return!1;if(s.directory!==o)return!1;return s.payload.type==="server.instance.disposed"}function Ko(s,o){if(gs(s)!==o)return!1;if(s.type==="message.updated")return s.properties.info.role==="assistant";if(s.type==="message.part.delta"||s.type==="message.part.updated")return!1;if(s.type!=="session.status")return!0;return s.properties.status.type!=="idle"}function zo(s,o){return r.raceAll([k.await(s).pipe(r.as("idle"),r.exit),r.callback((d)=>{if(o.aborted)return d(r.succeed("abort")),r.void;let i=()=>{o.removeEventListener("abort",i),d(r.succeed("abort"))};return o.addEventListener("abort",i,{once:!0}),r.sync(()=>o.removeEventListener("abort",i))}).pipe(r.exit)]).pipe(r.flatMap((d)=>ls.isFailure(d)?r.failCause(d.cause):r.succeed(d.value)))}function jo(s){if(typeof s==="string")return s;if(s instanceof Error)return s.message||s.name;if(s&&typeof s==="object"){let o=s;if(typeof o.message==="string"&&o.message.trim())return o.message;if(typeof o.name==="string"&&o.name.trim())return o.name}return"unknown error"}function Go(s,o){if(s.type!==o.type)return!1;if(s.type==="prompt"&&o.type==="prompt")return!0;if(s.type==="prompt"||o.type==="prompt")return!1;return s.request===o.request}function Ns(s,o){return s.get(o)??Number.MAX_SAFE_INTEGER}function Ks(s,o,d){return[...s,...o].sort((i,n)=>{let t=Ns(d,i.id)-Ns(d,n.id);if(t!==0)return t;return i.id.localeCompare(n.id)})[0]}function Lo(s,o,d){return Gs({permission:Ks(s.permissions,H(o),d),question:Ks(s.questions,J(o),d)})}function Qo(s){let o;if(s.subagent)o={...o,subagent:s.subagent};if(!Go(s.previous,s.current))o={...o,view:s.current};if(s.current.type!=="prompt")return o={...o,patch:{...s.patch,status:Ls(s.current)}},o;if(s.patch)return o={...o,patch:s.patch},o;if(s.previous.type!=="prompt")o={...o,patch:{status:""}};return o}function ms(s,o,d){let i=new Map(o.map((t)=>[t.sessionID,t])),n=new Map(d.map((t)=>[t.sessionID,t]));for(let[t,S]of n){if(L(i.get(t),S))continue;s?.write("subagent.tab",{sessionID:t,tab:S})}for(let t of i.keys()){if(n.has(t))continue;s?.write("subagent.tab",{sessionID:t,cleared:!0})}}function Ho(s){return ns.fresh(ns.effect(W,r.gen(function*(){let o=yield*_.make(),d=yield*_.provide(o)(r.acquireRelease(r.sync(()=>new AbortController),(a)=>r.sync(()=>a.abort()))),i=!1,n=()=>{},t=()=>{d.abort()},S=()=>{s.signal?.removeEventListener("abort",t),d.abort(),n()},h=()=>{if(i)return r.void;return i=!0,S(),_.close(o,ls.void)};s.signal?.addEventListener("abort",t,{once:!0}),yield*r.addFinalizer(()=>h());let P=yield*_.provide(o)(r.acquireRelease(r.promise(()=>s.sdk.global.event({signal:d.signal})),(a)=>r.sync(()=>{a.stream.return(bs).catch(()=>{})})));n=()=>{P.stream.return(bs).catch(()=>{})},s.trace?.write("recv.subscribe",{sessionID:s.sessionID});let m={data:w(),subagent:es(),tick:0,footerView:{type:"prompt"},blockerTick:0,blockers:new Map},ts=!0,z=[],j=new Set,X=new Set,Ds=(a)=>a===s.sessionID||!!a&&m.subagent.tabs.has(a),b=()=>{if(m.selectedSubagent&&!m.subagent.tabs.has(m.selectedSubagent))m.selectedSubagent=void 0;return Us(m.subagent,m.selectedSubagent)},Y=(a)=>{if(m.blockers.has(a))return;m.blockerTick+=1,m.blockers.set(a,m.blockerTick)},Ws=(a)=>{if(a.type!=="permission.asked"&&a.type!=="question.asked")return;if(a.properties.sessionID!==s.sessionID&&!m.subagent.tabs.has(a.properties.sessionID))return;Y(a.properties.id)},Xs=(a)=>{if(a.type!=="permission.replied"&&a.type!=="question.replied"&&a.type!=="question.rejected")return;m.blockers.delete(a.properties.requestID)},$=(a,g,l)=>{let D=Lo(m.data,m.subagent,m.blockers),M=Qo({patch:g,subagent:l,current:D,previous:m.footerView});if(a.length===0&&!M){m.footerView=D;return}s.trace?.write("reduce.output",{commits:a,footer:Hs(M)}),Js({footer:s.footer,trace:s.trace},{commits:a,footer:M}),m.footerView=D},Ys=r.fn("RunStreamTransport.resolveShellAgent")(function*(a){if(a)return a;let l=(yield*r.promise(()=>s.sdk.app.agents(s.directory?{directory:s.directory}:void 0,{throwOnError:!0})).pipe(r.map((D)=>D.data??[]),r.orElseSucceed(()=>[]))).find((D)=>D.mode!=="subagent"&&D.hidden!==!0)?.name;if(l)return l;return yield*r.fail(Error("no primary agent available for shell mode"))}),Zs=r.fn("RunStreamTransport.recoverQuestion")(function*(a){if(X.has(a))return;X.add(a);try{while(!i&&!d.signal.aborted&&!s.footer.isClosed){if(m.data.questions.length>0||!m.data.tools.has(a))return;let g=yield*r.promise(()=>s.sdk.question.list()).pipe(r.map((l)=>(l.data??[]).filter((D)=>D.sessionID===s.sessionID)),r.orElseSucceed(()=>[]));if(m.data.questions.length>0||!m.data.tools.has(a))return;if(g.length>0){q({data:m.data,messages:[],permissions:[],questions:g});for(let l of g)Y(l.id);s.trace?.write("question.recover",{sessionID:s.sessionID,requests:g.map((l)=>l.id)}),$([]);return}yield*r.sleep("250 millis")}}finally{X.delete(a)}}),Ss=(a,g)=>r.promise(()=>s.sdk.session.messages({sessionID:a,...typeof g==="number"?{limit:g}:{}})).pipe(r.map((l)=>l.data??[]),r.orElseSucceed(()=>[])),Bs=r.fn("RunStreamTransport.bootstrapSubagentHistory")(function*(a){yield*r.forEach(a,(g)=>Ss(g,$s).pipe(r.tap((l)=>r.sync(()=>{if(!As({data:m.subagent,sessionID:g,messages:l,thinking:s.thinking,limits:s.limits()}))return;$([],void 0,b())}))),{concurrency:4,discard:!0})}),Os=r.fn("RunStreamTransport.bootstrap")(function*(){let[a,g,l,D]=yield*r.all([Ss(s.sessionID,s.replay?s.replayLimit===void 0?void 0:Math.max(s.replayLimit,os):os),r.promise(()=>s.sdk.session.children({sessionID:s.sessionID})).pipe(r.map((C)=>C.data??[]),r.orElseSucceed(()=>[])),r.promise(()=>s.sdk.permission.list()).pipe(r.map((C)=>C.data??[]),r.orElseSucceed(()=>[])),r.promise(()=>s.sdk.question.list()).pipe(r.map((C)=>C.data??[]),r.orElseSucceed(()=>[]))],{concurrency:"unbounded"}),M=l.filter((C)=>C.sessionID===s.sessionID),c=D.filter((C)=>C.sessionID===s.sessionID),T=s.replay?x({messages:a,permissions:M,questions:c,thinking:s.thinking,limits:s.limits()}):void 0,R=T&&s.replayLimit!==void 0&&a.length>s.replayLimit?x({messages:a.slice(-s.replayLimit),permissions:M,questions:c,thinking:s.thinking,limits:s.limits()}):T;if(j.clear(),T)m.data=T.data;if(!T)q({data:m.data,messages:a,permissions:M,questions:c});if(R)for(let[C]of R.data.text){if(!R.data.part.has(C))continue;j.add(C)}cs({data:m.subagent,messages:a,children:g,permissions:l,questions:D}),is(m.subagent);for(let C of[...m.data.permissions,...H(m.subagent),...m.data.questions,...J(m.subagent)].sort((A,ao)=>A.id.localeCompare(ao.id)))Y(C.id);if(R){let C=new Set([...m.data.part.keys(),...m.data.tools]);for(let A of R.commits){if(s.trace?.write("ui.commit",A),s.footer.append(A),A.partID&&C.has(A.partID))continue;yield*r.promise(()=>s.footer.idle()).pipe(r.orElseSucceed(()=>{return}))}}let I=b();if(ms(s.trace,[],I.tabs),$([],R?.patch,I),R)yield*r.promise(()=>s.footer.idle()).pipe(r.orElseSucceed(()=>{return}));ts=!1,yield*Cs();let O=[...m.subagent.tabs.keys()];if(O.length===0)return;yield*Bs(O).pipe(r.forkIn(o,{startImmediately:!0}),r.asVoid)}),us=r.fn("RunStreamTransport.idle")((a)=>r.promise(()=>s.sdk.session.status()).pipe(r.map((g)=>{let l=g.data?.[s.sessionID];return!l||l.type==="idle"}),r.orElseSucceed(()=>a))),Z=r.fn("RunStreamTransport.fail")(function*(a){if(m.fault)return;m.fault=a;let g=m.wait;if(m.wait=void 0,!g)return;yield*k.fail(g.done,a).pipe(r.ignore)}),xs=(a)=>{let g=m.wait;if(!g||!Ko(a,s.sessionID))return;g.live=!0},hs=r.fn("RunStreamTransport.complete")(function*(a,g){if(m.wait!==a||!a.armed||!a.live)return;if(!(yield*us(g))||m.wait!==a)return;m.tick=a.tick+1,m.wait=void 0,yield*k.succeed(a.done,void 0).pipe(r.ignore)}),fs=r.fn("RunStreamTransport.mark")(function*(a){if(a.type!=="session.status"||a.properties.sessionID!==s.sessionID||a.properties.status.type!=="idle")return;let g=m.wait;if(!g)return;yield*hs(g,!0)}),ps=r.fn("RunStreamTransport.poll")(function*(a,g){while(m.wait===a&&!g.aborted&&!s.footer.isClosed&&!i)yield*r.sleep("250 millis"),yield*hs(a,!1)}),B=(a)=>{let g=[];Qs(m.data,g),$(g),s.trace?.write(a,{sessionID:s.sessionID})},Is=r.fn("RunStreamTransport.applyEvent")(function*(a){if(a.type==="message.part.delta"&&a.properties.sessionID===s.sessionID){if(j.has(a.properties.partID)){if((m.data.text.get(a.properties.partID)??"").endsWith(a.properties.delta))return;j.delete(a.properties.partID)}}Ws(a);let g=a.type==="message.part.updated"?K(m.subagent):void 0,l=F({data:m.data,event:a,sessionID:s.sessionID,thinking:s.thinking,limits:s.limits()});if(m.data=l.data,a.type==="message.part.updated"&&a.properties.part.sessionID===s.sessionID&&a.properties.part.type==="tool"&&a.properties.part.tool==="question"&&a.properties.part.state.status==="running"&&m.data.questions.length===0)yield*Zs(a.properties.part.id).pipe(r.forkIn(o,{startImmediately:!0}),r.asVoid);let D=_s({data:m.subagent,event:a,sessionID:s.sessionID,thinking:s.thinking,limits:s.limits()});if(D&&g)ms(s.trace,g,K(m.subagent));Xs(a),$(l.commits,l.footer?.patch,D?b():void 0),xs(a),yield*fs(a)}),Cs=r.fn("RunStreamTransport.drainBuffered")(function*(){let a=z.splice(0);while(a.length>0){let g=[],l=!1;for(let D of a){if(!Ds(gs(D))){g.push(D);continue}l=!0,yield*Is(D)}if(!l){z.push(...g);return}a=g}}),Es=r.fn("RunStreamTransport.watch")(()=>V.fromAsyncIterable(P.stream,(a)=>a instanceof Error?a:Error(String(a))).pipe(V.takeUntil(()=>s.footer.isClosed||d.signal.aborted),V.runForEach(r.fn("RunStreamTransport.event")(function*(a){if(s.footer.isClosed){d.abort();return}if(No(a,s.directory)){yield*Z(Error("instance disposed")),yield*h();return}let g=bo(a);if(!g)return;let l=gs(g);if(ts){if(l)s.trace?.write("recv.event",g),z.push(g);return}if(!Ds(l)){if(l)s.trace?.write("recv.event",g),z.push(g);return}s.trace?.write("recv.event",g),yield*Is(g),yield*Cs()})),r.catch((a)=>d.signal.aborted?r.void:Z(a)),r.ensuring(r.gen(function*(){if(!d.signal.aborted&&!m.fault)yield*Z(Error("global event stream closed"));n()}))));yield*_.provide(o)(Es().pipe(r.forkScoped)),yield*Os();let vs=r.fn("RunStreamTransport.runPromptTurn")(function*(a){if(i||a.signal?.aborted||s.footer.isClosed)return;if(m.fault){yield*r.fail(m.fault);return}if(m.wait){yield*r.fail(Error("prompt already running"));return}let g=K(m.subagent);if(is(m.subagent)){let I=b();ms(s.trace,g,I.tabs),$([],void 0,I)}let l={tick:m.tick,armed:!1,live:!1,done:yield*k.make()};m.wait=l,m.data.announced=!1;let D=new AbortController,M=()=>{D.abort()};a.signal?.addEventListener("abort",M,{once:!0}),d.signal.addEventListener("abort",M,{once:!0}),yield*ps(l,D.signal).pipe(r.forkIn(o,{startImmediately:!0}),r.asVoid);let c={sessionID:s.sessionID,agent:a.agent,model:a.model,variant:a.variant,parts:[...a.includeFiles?a.files:[],{type:"text",text:a.prompt.text},...a.prompt.parts]},T=a.prompt.command;yield*(a.prompt.mode==="shell"?r.sync(()=>{s.trace?.write("send.shell",{sessionID:s.sessionID,command:a.prompt.text})}).pipe(r.andThen(Ys(a.agent).pipe(r.flatMap((I)=>r.promise(()=>s.sdk.session.shell({sessionID:s.sessionID,agent:I,model:a.model,command:a.prompt.text},{signal:D.signal,throwOnError:!0})))).pipe(r.tap(()=>r.sync(()=>{s.trace?.write("send.shell.ok",{sessionID:s.sessionID}),l.armed=!0,l.live=!0})),r.flatMap(()=>k.succeed(l.done,void 0).pipe(r.ignore)),r.catch((I)=>k.fail(l.done,I).pipe(r.ignore)),r.forkIn(o,{startImmediately:!0}),r.asVoid))):T?r.sync(()=>{s.trace?.write("send.command",{sessionID:s.sessionID,command:T.name})}).pipe(r.andThen(r.promise(()=>s.sdk.session.command({sessionID:s.sessionID,agent:a.agent,model:a.model?`${a.model.providerID}/${a.model.modelID}`:void 0,variant:a.variant,command:T.name,arguments:T.arguments,parts:[...a.includeFiles?a.files:[],...a.prompt.parts.filter((I)=>I.type==="file")]},{signal:D.signal})).pipe(r.tap(()=>r.sync(()=>{s.trace?.write("send.command.ok",{sessionID:s.sessionID,command:T.name}),l.armed=!0,l.live=!0})),r.flatMap(()=>k.succeed(l.done,void 0).pipe(r.ignore)),r.catch((I)=>k.fail(l.done,I).pipe(r.ignore)),r.forkIn(o,{startImmediately:!0}),r.asVoid))):r.sync(()=>{s.trace?.write("send.prompt",c)}).pipe(r.andThen(r.promise(()=>s.sdk.session.promptAsync(c,{signal:D.signal}))),r.tap(()=>r.sync(()=>{s.trace?.write("send.prompt.ok",{sessionID:s.sessionID}),l.armed=!0})))).pipe(r.flatMap(()=>{if(D.signal.aborted||a.signal?.aborted||s.footer.isClosed||i){if(m.wait===l)m.wait=void 0;return B("turn.abort"),r.void}if(!s.footer.isClosed&&!m.data.announced)s.trace?.write("ui.patch",{phase:"running",status:"waiting for assistant"}),s.footer.event({type:"turn.wait"});if(m.tick>l.tick){if(m.wait===l)m.wait=void 0;return r.void}return zo(l.done,D.signal).pipe(r.flatMap((I)=>r.sync(()=>{if(m.wait===l)m.wait=void 0;if(I==="abort")B("turn.abort")})))}),r.catch((I)=>{if(m.wait===l)m.wait=void 0;if(D.signal.aborted||a.signal?.aborted===!0||s.footer.isClosed||i)return B("turn.cancel"),r.void;if(I===m.fault)return r.fail(I);return s.trace?.write("send.prompt.error",{sessionID:s.sessionID,error:jo(I)}),r.fail(I)}),r.ensuring(r.sync(()=>{s.trace?.write("turn.end",{sessionID:s.sessionID}),a.signal?.removeEventListener("abort",M),d.signal.removeEventListener("abort",M)})));return}),so=r.fn("RunStreamTransport.selectSubagent")((a)=>r.sync(()=>{if(i)return;let g=a&&m.subagent.tabs.has(a)?a:void 0;if(m.selectedSubagent===g)return;m.selectedSubagent=g,$([],void 0,b())})),oo=r.fn("RunStreamTransport.close")(function*(){yield*h()});return W.of({runPromptTurn:vs,selectSubagent:so,close:oo})})))}async function Eo(s){let o=js(W,Ho(s));return await o.runPromise(()=>r.void),{runPromptTurn:(d)=>o.runPromise((i)=>i.runPromptTurn(d)),selectSubagent:(d)=>o.runSync((i)=>i.selectSubagent(d)),close:()=>o.runPromise((d)=>d.close())}}export{jo as formatUnknownError,Eo as createSessionTransport};