@rizom/brain 0.2.0-alpha.235 → 0.2.0-alpha.237

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/dist/brain.js +1177 -1312
  2. package/dist/chunks/{blog-post-adapter-0fc8yd1s.js → blog-post-adapter-vt71whj1.js} +2 -2
  3. package/dist/chunks/{index-er159j9b.js → index-51pqwxdb.js} +2 -2
  4. package/dist/chunks/index-atsf9t9d.js +6 -0
  5. package/dist/chunks/{index-kvac8t2y.js.map → index-atsf9t9d.js.map} +5 -4
  6. package/dist/chunks/index-zc6br876.js +10 -0
  7. package/dist/chunks/{index-a4q0aknf.js.map → index-zc6br876.js.map} +8 -8
  8. package/dist/chunks/{rss-datasource-gfgpmvf3.js → rss-datasource-9j87n822.js} +2 -2
  9. package/dist/index.js +2 -2
  10. package/dist/index.js.map +1 -1
  11. package/dist/migrations/auth-service/0009_wild_namor.sql +44 -0
  12. package/dist/migrations/auth-service/0010_mixed_red_skull.sql +23 -0
  13. package/dist/migrations/auth-service/meta/0009_snapshot.json +1824 -0
  14. package/dist/migrations/auth-service/meta/0010_snapshot.json +1820 -0
  15. package/dist/migrations/auth-service/meta/_journal.json +14 -0
  16. package/dist/plugins.d.ts +48 -3
  17. package/dist/plugins.js +3 -3
  18. package/dist/plugins.js.map +4 -4
  19. package/dist/site.js +6 -6
  20. package/dist/site.js.map +1 -1
  21. package/dist/ui/admin-app.js +102 -102
  22. package/dist/ui/admin-app.js.map +10 -10
  23. package/package.json +1 -1
  24. package/dist/chunks/index-a4q0aknf.js +0 -10
  25. package/dist/chunks/index-kvac8t2y.js +0 -6
  26. /package/dist/chunks/{blog-post-adapter-0fc8yd1s.js.map → blog-post-adapter-vt71whj1.js.map} +0 -0
  27. /package/dist/chunks/{index-er159j9b.js.map → index-51pqwxdb.js.map} +0 -0
  28. /package/dist/chunks/{rss-datasource-gfgpmvf3.js.map → rss-datasource-9j87n822.js.map} +0 -0
@@ -0,0 +1,10 @@
1
+ // @bun
2
+ import{B,D as v,E as k,F as m,G as _,H as V,I as q,M as y,N as J,O as N,P as g,Q as MZ,V as ZZ,W as $Z}from"./index-72d2a6vf.js";import{oa as AZ,pa as d}from"./index-8hmmeype.js";import{ya as SZ}from"./index-8ej1r6tb.js";import{Ja as VZ,Ka as L,La as QA,Ma as hA,Pa as Q,Qa as YZ,Ra as XA,Ta as e,Wa as E}from"./index-b6k44k1d.js";import{_a as Z}from"./index-q5r12b3s.js";var h$=Z.object({id:Z.string(),sessionId:Z.string(),interfaceType:Z.string(),channelId:Z.string(),personId:Z.string().optional(),channelName:Z.string().optional(),startedAt:Z.string(),lastActiveAt:Z.string(),createdAt:Z.string(),updatedAt:Z.string(),metadata:d}),j$=Z.object({id:Z.string(),conversationId:Z.string(),role:Q,content:Z.string(),timestamp:Z.string(),metadata:d});var NA=Z.object({name:Z.string(),role:Z.string(),purpose:Z.string(),values:Z.array(Z.string())}),_A=Z.object({name:Z.string(),organization:Z.string().optional(),description:Z.string().optional(),avatar:Z.string().optional(),website:Z.string().optional(),email:Z.string().optional(),socialLinks:Z.array(Z.object({platform:Z.enum(["github","instagram","linkedin","email","website"]),url:Z.string(),label:Z.string().optional()})).optional()});import{createClient as l$}from"@libsql/client";class LA{constructor(A,$){this.name=A,this.unique=$}static[m]="SQLiteIndexBuilderOn";on(...A){return new OA(this.name,A,this.unique)}}class OA{static[m]="SQLiteIndexBuilder";config;constructor(A,$,H){this.config={name:A,columns:$,unique:H,where:void 0}}where(A){return this.config.where=A,this}build(A){return new BA(this.config,A)}}class BA{static[m]="SQLiteIndex";config;constructor(A,$){this.config={...A,table:$}}}function w(A){return new LA(A,!1)}var h=q("conversations",{id:V("id").primaryKey(),sessionId:V("session_id").notNull(),interfaceType:V("interface_type").notNull(),channelId:V("channel_id").notNull(),personId:V("person_id"),started:V("started").notNull(),lastActive:V("last_active").notNull(),metadata:V("metadata"),created:V("created").notNull(),updated:V("updated").notNull()},(A)=>({sessionIdx:w("idx_conversations_session").on(A.sessionId),channelIdx:w("idx_conversations_channel").on(A.channelId),personIdx:w("idx_conversations_person").on(A.personId),interfaceSessionIdx:w("idx_conversations_interface_session").on(A.interfaceType,A.sessionId),interfaceChannelIdx:w("idx_conversations_interface_channel").on(A.interfaceType,A.channelId)})),CA=q("messages",{id:V("id").primaryKey(),conversationId:V("conversation_id").notNull().references(()=>h.id,{onDelete:"cascade"}),role:V("role").notNull(),content:V("content").notNull(),timestamp:V("timestamp").notNull(),metadata:V("metadata")},(A)=>({conversationIdx:w("idx_messages_conversation").on(A.conversationId),timestampIdx:w("idx_messages_timestamp").on(A.timestamp)})),MA=q("summary_tracking",{conversationId:V("conversation_id").primaryKey().references(()=>h.id,{onDelete:"cascade"}),lastSummarizedAt:V("last_summarized_at"),lastMessageId:V("last_message_id"),messagesSinceSummary:_("messages_since_summary").default(0),updated:V("updated").notNull()});var zZ=Z.preprocess((A)=>{if(typeof A!=="string")return A;try{return JSON.parse(A)}catch{return}},Z.record(Z.string(),Z.unknown())).catch({});function S(A){return zZ.parse(A)}var j=Z.object({identity:L,interfaceType:Z.string(),role:Q,displayName:Z.string().optional(),username:Z.string().optional(),isBot:Z.boolean().optional()}),mZ=Z.preprocess(hZ,j);function hZ(A){if(!IZ(A)||"identity"in A)return A;let{actorId:$,interfaceType:H,role:P}=A;if(typeof $!=="string"||typeof H!=="string"||P!=="user"&&P!=="assistant")return A;let{userId:X,canonicalId:Y}=A;return{identity:QA({actorId:$,interfaceType:H,role:P,...typeof X==="string"?{userId:X}:{},...typeof Y==="string"?{canonicalId:Y}:{}}),interfaceType:H,role:P,...typeof A.displayName==="string"?{displayName:A.displayName}:{},...typeof A.username==="string"?{username:A.username}:{},...typeof A.isBot==="boolean"?{isBot:A.isBot}:{}}}var I=Z.object({messageId:Z.string().optional(),channelId:Z.string().optional(),channelName:Z.string().optional(),threadId:Z.string().optional(),metadata:Z.record(Z.string(),Z.unknown()).optional()}),jZ=Z.looseObject({actor:mZ.optional(),source:I.optional()});function IZ(A){return typeof A==="object"&&A!==null&&!Array.isArray(A)}var vZ=Z.object({id:Z.string(),conversationId:Z.string(),role:Z.string(),content:Z.string(),timestamp:Z.string(),metadata:Z.string().nullable()}),gZ=Z.object({conversationId:Z.string(),messageCount:Z.number(),messages:Z.array(vZ),windowStart:Z.number(),windowEnd:Z.number(),windowSize:Z.number(),timestamp:Z.string()});var qA=Z.object({kind:Z.string().min(1),id:Z.string().min(1)}),cZ=Z.object({kind:Z.literal("text"),filename:Z.string().min(1),mediaType:Z.string().min(1),content:Z.string(),sizeBytes:Z.number().nonnegative().optional(),source:qA.optional()}),uZ=Z.custom((A)=>A instanceof Uint8Array),dZ=Z.object({kind:Z.literal("file"),filename:Z.string().min(1),mediaType:Z.string().min(1),data:uZ,sizeBytes:Z.number().nonnegative().optional(),source:qA.optional()}),lZ=Z.discriminatedUnion("kind",[cZ,dZ]),z1=Z.object({userPermissionLevel:Z.enum(["admin","trusted","public"]).optional(),isAnchor:Z.boolean().optional(),interfaceType:Z.string().optional(),channelId:Z.string().optional(),channelName:Z.string().optional(),actor:j.optional(),source:I.optional(),attachments:Z.array(lZ).optional()});var iZ=Z.object({status:Z.enum(["healthy","warning","error","unknown"]),message:Z.string().optional(),lastCheck:Z.date().optional(),details:Z.record(Z.string(),Z.unknown()).optional()}),kA=Z.object({name:Z.string(),pluginId:Z.string(),status:Z.string(),health:iZ.optional()});import{McpServer as t1,ResourceTemplate as e1}from"@modelcontextprotocol/sdk/server/mcp.js";var EA=Z.object({interfaceType:Z.string(),actor:L,displayName:Z.string().optional(),conversationId:Z.string().optional(),channelId:Z.string().optional(),channelName:Z.string().optional(),runId:Z.string().optional(),toolCallId:Z.string().optional(),userPermissionLevel:Z.enum(["admin","trusted","public"]).optional(),isAnchor:Z.boolean().optional()}),fA=Z.strictObject({success:Z.literal(!0),data:Z.unknown().optional(),message:Z.string().optional(),cached:Z.literal(!0).optional()}),JA=Z.strictObject({success:Z.literal(!1),error:Z.string(),code:Z.string().optional()}),TA=Z.strictObject({needsConfirmation:Z.literal(!0),toolName:Z.string(),summary:Z.string(),completionSummary:Z.string().optional(),preview:Z.string().optional(),args:Z.unknown()}),l=Z.union([fA,JA,TA]);var u1=Z.union([Z.looseObject({success:Z.literal(!0)}),Z.object({success:Z.literal(!1),error:Z.string()})]);var nZ=Z.union([Z.object({success:Z.literal(!0),data:Z.unknown(),message:Z.string().optional()}),Z.object({success:Z.literal(!1),error:Z.string(),code:Z.string().optional()})]);var u4=Z.object({id:Z.string(),type:Z.string(),version:Z.string(),status:Z.string()}),d4=Z.object({name:Z.string(),description:Z.string()}),SA=Z.enum(["admin","trusted","public"]),i=Z.object({label:Z.string(),url:Z.string(),pluginId:Z.string(),priority:Z.number().default(100),visibility:SA.default("public")}),rZ=Z.enum(["human","agent","admin","protocol"]),aZ=Z.enum(["available","coming-soon","disabled"]),n=Z.object({id:Z.string(),label:Z.string(),description:Z.string().optional(),href:Z.string(),kind:rZ,pluginId:Z.string(),priority:Z.number().default(100),visibility:SA.default("public"),status:aZ.default("available")}),r=Z.object({entityType:Z.string(),count:Z.number()}),l4=Z.object({model:Z.string(),version:Z.string(),uptime:Z.number(),entities:Z.number(),entityCounts:Z.array(r),embeddings:Z.number(),ai:Z.object({model:Z.string(),embeddingModel:Z.string()}),daemons:Z.array(kA),endpoints:Z.array(i),interactions:Z.array(n)});var i4=Z.object({id:Z.string(),version:Z.string(),type:Z.enum(["core","entity","service","interface"]),description:Z.string().optional(),dependencies:Z.array(Z.string()).optional(),packageName:Z.string()});var sZ=Z.object({status:Z.enum(["healthy","warning","error","unknown"]),message:Z.string().optional(),lastCheck:Z.string().optional(),details:Z.record(Z.string(),Z.unknown()).optional()}),oZ=Z.object({name:Z.string(),pluginId:Z.string(),status:Z.string(),health:sZ.optional()}),o4=Z.object({model:Z.string(),version:Z.string(),uptime:Z.number(),entities:Z.number(),entityCounts:Z.array(r),embeddings:Z.number(),ai:Z.object({model:Z.string(),embeddingModel:Z.string()}),daemons:Z.array(oZ),endpoints:Z.array(i),interactions:Z.array(n)});var A6=Z.object({enabled:Z.boolean().describe("Whether the plugin is enabled"),debug:Z.boolean().describe("Enable debug logging for this plugin")});class a extends Error{pluginId;issues;constructor(A,$){super(`Invalid plugin config for ${A}`);this.name="PluginConfigValidationError",this.pluginId=A,this.issues=$}}var s=Z.enum(["file_operations","content_operations","data_processing","batch_processing"]),tZ=Z.object({pluginId:Z.string().optional(),progressToken:Z.union([Z.string(),Z.number()]).optional(),operationType:s,operationTarget:Z.string().optional(),interfaceType:Z.string().optional(),conversationId:Z.string().optional(),channelId:Z.string().optional(),requestedByActor:L.optional(),requestedByUserId:Z.string().optional(),requestedByInterface:Z.string().optional(),silent:Z.boolean().optional()}),f=Z.object({pluginId:Z.string().optional(),progressToken:Z.union([Z.string(),Z.number()]).optional(),operationType:s,operationTarget:Z.string().optional(),interfaceType:Z.string().optional(),conversationId:Z.string().optional(),channelId:Z.string().optional(),requestedByActor:L.optional(),requestedByUserId:Z.string().optional(),requestedByInterface:Z.string().optional(),silent:Z.boolean().optional(),rootJobId:Z.string()}),P6=Z.enum(["none","skip","replace","coalesce"]);var o=Z.enum(["pending","processing","completed","failed"]),xA=Z.enum(["completed","failed"]);var eZ=Z.object({id:Z.string(),type:Z.string(),status:o,data:Z.unknown(),result:Z.unknown().optional(),lastError:Z.string().optional().nullable(),attempts:Z.number(),maxRetries:Z.number(),priority:Z.number(),createdAt:Z.date(),updatedAt:Z.date(),processedAt:Z.date().optional().nullable(),completedAt:Z.date().optional().nullable(),failedAt:Z.date().optional().nullable()}),A$=Z.object({jobId:Z.string(),type:Z.string(),status:xA,result:Z.unknown().optional(),error:Z.string().optional()}),yA=Z.object({success:Z.literal(!1),error:Z.string().optional()}),t=Z.object({id:Z.string(),type:Z.enum(["job","batch"]),status:o,message:Z.string().optional(),progress:Z.object({current:Z.number(),total:Z.number(),percentage:Z.number()}).optional(),aggregationKey:Z.string().optional(),batchDetails:Z.object({totalOperations:Z.number(),completedOperations:Z.number(),failedOperations:Z.number(),currentOperation:Z.string().optional(),errors:Z.array(Z.string()).optional()}).optional(),jobDetails:Z.object({jobType:Z.string(),priority:Z.number(),retryCount:Z.number()}).optional(),metadata:f});var Z$=Z.record(Z.string(),Z.unknown());class zA{logger;schema;jobTypeName;constructor(A,$){this.logger=A,this.schema=$.schema,this.jobTypeName=$.jobTypeName}validateAndParse(A){if(!this.schema)throw Error(`${this.jobTypeName}: No schema provided. Override validateAndParse() or provide a schema.`);let $=this.schema.safeParse(A);if(!$.success)return this.logger.warn(`Invalid ${this.jobTypeName} job data`,{data:A,validationError:$.error.issues}),null;return this.logger.debug(`${this.jobTypeName} job data validation successful`,{data:this.summarizeDataForLog($.data)}),$.data}async onError(A,$,H,P){this.logger.error(`${this.jobTypeName} job error handler triggered`,{jobId:H,errorMessage:A.message,errorStack:A.stack,data:this.summarizeDataForLog($)})}async reportProgress(A,$){await A.report({progress:$.progress,total:$.total??100,message:$.message})}summarizeDataForLog(A){let $=Z$.safeParse(A);return $.success?$.data:{}}}import{createClient as w6}from"@libsql/client";var mA=q("job_queue",{id:V("id").primaryKey().$defaultFn(()=>k()),type:V("type").notNull(),data:V("data").notNull(),result:V("result",{mode:"json"}),source:V("source"),metadata:V("metadata",{mode:"json"}).$type().notNull(),status:V("status",{enum:["pending","processing","completed","failed"]}).notNull().default("pending"),priority:_("priority").notNull().default(0),retryCount:_("retryCount").notNull().default(0),maxRetries:_("maxRetries").notNull().default(3),lastError:V("lastError"),createdAt:_("createdAt").notNull().$defaultFn(()=>Date.now()),scheduledFor:_("scheduledFor").notNull().$defaultFn(()=>Date.now()),startedAt:_("startedAt"),completedAt:_("completedAt")},(A)=>({queueReadyIdx:w("idx_job_queue_ready").on(A.status,A.priority,A.scheduledFor),jobTypeIdx:w("idx_job_queue_type").on(A.type,A.status),jobSourceIdx:w("idx_job_queue_source").on(A.source)}));var q6=Z.looseObject({deduplicationKey:Z.string().optional()});class C{callback;heartbeatInterval;constructor(A){this.callback=A}static from(A){if(!A)return;return new C(A)}createSub(A){let{scale:$}=A??{};if($){let{start:H,end:P}=$,X=P-H;return new C(async(Y)=>{let K=H+Y.progress/(Y.total??100)*X;await this.callback({...Y,progress:K,total:100})})}return new C(this.callback)}async report(A){await this.callback(A)}startHeartbeat(A,$=5000){this.stopHeartbeat(),this.heartbeatInterval=setInterval(()=>{this.report({message:A,progress:0}).catch(()=>{})},$)}stopHeartbeat(){if(this.heartbeatInterval)clearInterval(this.heartbeatInterval),this.heartbeatInterval=void 0}toCallback(){return this.callback}}var A0=Z.preprocess((A)=>{if(typeof A!=="string")return A;return JSON.parse(A)},Z.record(Z.string(),Z.unknown()));var P$=Z.object({id:Z.string(),type:Z.string(),data:Z.string(),status:Z.enum(["pending","processing","completed","failed"]),source:Z.string().nullable(),priority:Z.number(),retryCount:Z.number(),maxRetries:Z.number(),lastError:Z.string().nullable(),createdAt:Z.number(),scheduledFor:Z.number(),startedAt:Z.number().nullable(),completedAt:Z.number().nullable(),metadata:f,result:Z.unknown().nullable().optional()});function AA(A,$,H){return async(P)=>{let{type:X,data:Y,toolContext:K=null,options:W}=P,G=K?hA(K):void 0,{metadata:D,...F}=W??{},R={operationType:"data_processing",pluginId:$,...D,...K&&{interfaceType:K.interfaceType,conversationId:K.conversationId,channelId:K.channelId,requestedByActor:K.actor,...G?{requestedByUserId:G}:{},requestedByInterface:K.interfaceType}};if(K&&!G)delete R.requestedByUserId;let O={...F,source:$,...W?.rootJobId&&{rootJobId:W.rootJobId},metadata:R},U=H&&!X.includes(":")?`${$}:${X}`:X;return A.enqueue({type:U,data:Y,options:O})}}function ZA(A,$){return async(H,P)=>{let X=k(),Y=H.map((W)=>({...W,type:W.type.includes(":")?W.type:`${$}:${W.type}`})),K={...P,source:$,rootJobId:X,metadata:{...P?.metadata,operationType:"batch_processing",pluginId:$}};return await A.enqueueBatch(Y,K,X,$),X}}function $A(A,$){return(H,P)=>{let X=H.includes(":")?H:`${$}:${H}`;A.registerHandler(X,P,$)}}var X$=Z.custom((A)=>typeof A==="object"&&A!==null&&("safeParse"in A)),Y$=Z.object({name:Z.string(),schema:X$});function jA(A){return Y$.safeParse(A).success}function K$(A){if(!A)return;return{status:A.status,message:A.message,lastCheck:A.lastCheck?.toISOString(),details:A.details}}function IA(A){return{model:A.model,version:A.version,uptime:A.uptime,entities:A.entities,entityCounts:A.entityCounts,embeddings:A.embeddings,ai:A.ai,daemons:A.daemons.map(($)=>({name:$.name,pluginId:$.pluginId,status:$.status,health:K$($.health)})),endpoints:A.endpoints,interactions:A.interactions}}function G$(A){let $=Q.safeParse(A);return $.success?$.data:"user"}function b(A){let $=S(A.metadata),H=typeof $.channelName==="string"?$.channelName:void 0;return{id:A.id,sessionId:A.sessionId,interfaceType:A.interfaceType,channelId:A.channelId,...A.personId?{personId:A.personId}:{},channelName:H,startedAt:A.started,lastActiveAt:A.lastActive,createdAt:A.created,updatedAt:A.updated,metadata:$}}function vA(A){return{id:A.id,conversationId:A.conversationId,role:G$(A.role),content:A.content,timestamp:A.timestamp,metadata:S(A.metadata)}}function gA(A){return NA.parse(A)}function bA(A){return _A.parse(A)}function pA(A){return async()=>{return IA(await A.getAppInfo())}}function cA(A,$){return{get:()=>gA(A.getIdentity()),getProfile:()=>bA(A.getProfile()),getAppInfo:$}}function uA(A,$){let H=A.getProfileKindRegistry();return{register:(P)=>{H.register($,P)},getResolved:()=>H.getResolved(),getSelectedDefinition:()=>H.getSelectedDefinition()}}function HA(A){let $=A.getChannelRegistry();return{listDescriptors:()=>$.listDescriptors(),getDescriptor:(H)=>$.getDescriptor(H),getDeliveryProvider:(H)=>$.getDeliveryProvider(H)}}function dA(A,$){let H=A.getChannelRegistry();return{...HA(A),registerDescriptor:(P)=>{H.registerDescriptor($,P)},registerDeliveryProvider:(P)=>{H.registerDeliveryProvider($,P)}}}function lA(A,$,H){let P=A.getMessageBus();return{send:async(Y)=>{return P.send({...Y,sender:$})},subscribe:(Y,K)=>{if(jA(Y)){let W=Y,G=K,D=async(F)=>{let R=W.schema.safeParse(F.payload);if(!R.success)return H.warn(`Invalid payload for channel ${W.name}`,{error:R.error.message}),{noop:!0};let{payload:O,...U}=F;return G(R.data,U)};return P.subscribe(W.name,D)}return P.subscribe(Y,K)}}}function iA(A,$){let H=A.getJobQueueService();return{...A.jobs,enqueue:AA(H,$,!0),enqueueBatch:ZA(A.jobs,$),registerHandler:$A(H,$)}}function nA(A){let $=A.getPermissionService();return{assertEntityActionAllowed:(H,P,X)=>{$.assertEntityActionAllowed(H,P,X.userPermissionLevel)}}}function rA(A){return{get:async($)=>{let P=await A.getConversationService().getConversation($);return P?b(P):null},search:async($)=>{return(await A.getConversationService().searchConversations($)).map(b)},list:async($)=>{return(await A.getConversationService().listConversations($)).map(b)},getMessages:async($,H)=>{return(await A.getConversationService().getMessages($,H)).map(vA)},countMessages:async($)=>{return A.getConversationService().countMessages($)}}}function aA(A,$){return{registerHandler:(H,P)=>{A.registerEvalHandler($,H,P)}}}function sA(A){return{register:($,H)=>{A.getInsightsRegistry().register($,H)}}}function oA(A){return{has:($)=>A.getPluginPackageName($)!==void 0}}function tA(A,$){return{register:(H)=>{A.registerEndpoint({...H,pluginId:$})}}}function eA(A,$){return{register:(H)=>{A.registerInteraction({...H,pluginId:$})}}}function T(A,$,H){let P=A.getEntityService(),X=A.getLogger().child($),Y=A.getDomain(),K=A.getLocalSiteUrl(),W=A.shouldPreferLocalUrls(),G=A.getThemeCSS(),D=pA(A),F=A.getAttachmentRegistry(),R=A.getRuntimeUploadRegistry(),O=A.getRuntimeState();return{pluginId:$,logger:X,entityService:P,semantic:{project:(U)=>P.projectSemanticSpace(U)},identity:cA(A,D),profileKinds:uA(A,$),channels:HA(A),appInfo:D,judge:(U)=>A.judge(U),domain:Y,siteUrl:Y?`https://${Y}`:void 0,localSiteUrl:K,previewUrl:Y?`https://${AZ(Y)}`:void 0,preferLocalUrls:W,themeCSS:G,entityDisplay:H?.entityDisplay,spaces:A.getSpaces(),permissions:nA(A),messaging:lA(A,$,X),jobs:iA(A,$),attachments:F,uploads:R,runtimeState:O,recurringChecks:A.getRecurringChecks($),conversations:rA(A),dataDir:A.getDataDir(),eval:aA(A,$),insights:sA(A),plugins:oA(A),endpoints:tA(A,$),interactions:eA(A,$)}}function W$(A){return A.replace(/:/g,"-")}function D$(A){return A.split(/[:.-]/).map(($)=>$.charAt(0).toUpperCase()+$.slice(1)).join(" ")}var PA=new Map;async function HZ(A,$,H){let P=PA.get($);if(P!==void 0)return P;let X=W$($),Y;try{Y=await A.getEntity({entityType:"prompt",id:X})}catch{return H}if(Y?.content){let K=$Z(Y.content,Z.record(Z.string(),Z.unknown())).content;return PA.set($,K),K}try{let K=D$($),W=ZZ(H,{title:K,target:$});await A.createEntity({entity:{id:X,entityType:"prompt",content:W,metadata:{title:K,target:$,slug:X}}})}catch{}return PA.set($,H),H}function p(A){let $=A.getEntityService(),H=A.getEntityRegistry(),P=A.getDataSourceRegistry();return{register:(X,Y,K,W)=>{H.registerEntityType(X,Y,K,W)},getAdapter:(X)=>{try{return H.getAdapter(X)}catch{return}},extendFrontmatterSchema:(X,Y)=>{H.extendFrontmatterSchema(X,Y)},getEffectiveFrontmatterSchema:(X)=>{return H.getEffectiveFrontmatterSchema(X)},registerPersistValidator:(X,Y)=>{H.registerPersistValidator(X,Y)},registerCreateInterceptor:(X,Y)=>{H.registerCreateInterceptor(X,Y)},registerUploadSaveHandler:(X)=>{H.registerUploadSaveHandler(X)},getUploadSaveHandler:(X)=>{return H.getUploadSaveHandler(X)},update:async(X)=>{return $.updateEntity({entity:X})},registerDataSource:(X)=>{P.register(X)}}}function c(A){return{resolve:($,H)=>{return HZ(A,$,H)}}}function PZ(A,$,H){let P=T(A,$,H),X=A.getEntityService();return{...P,entityService:X,entities:p(A),ai:{query:(Y,K)=>A.query(Y,K),generate:async(Y)=>{return A.generateContent(Y)},generateObject:async(Y,K,W)=>{return A.generateObject(Y,K,W)},generateImage:async(Y,K)=>{return A.generateImage(Y,K)},canGenerateImages:()=>{return A.canGenerateImages()}},prompts:c(X),permissions:P.permissions}}function KZ(A,$,H){let P=!1,X=!1;if(A.jobs.registerHandler(H.job.type,H.job.handler),H.initialSync){let Y=H.initialSync;A.messaging.subscribe(YZ.initialCompleted,async()=>{if(P)return{success:!0};if(P=!0,!(await Y.shouldEnqueue?.()??!0))return $.info("Skipping derived entity projection initial sync",{projectionId:H.id,targetType:H.targetType}),{success:!0};return X=await XZ(A,$,H,Y.jobData,F$(Y.jobOptions),"initial-sync"),{success:!0}})}if(H.sourceChange){let Y=H.sourceChange,K=new Set(Y.sourceTypes),W=Y.events??[XA.created,XA.updated],G=async(D)=>{if(Y.requireInitialSync&&!P)return{success:!0};let F=D.payload,R=V$(Y,F);if(!R||!K.has("*")&&!K.has(R))return{success:!0};if(!(await Y.shouldEnqueue?.(F)??!0))return{success:!0};let U=await Y.jobData(F);if(!U)return{success:!0};return await XZ(A,$,H,U,Y.jobOptions?.(F),"source-change"),{success:!0}};for(let D of W)A.messaging.subscribe(D,G)}return{hasObservedInitialSync:()=>P,hasQueuedInitialSync:()=>X}}function V$(A,$){if(A.sourceType)return A.sourceType;if(A.sourceKind&&A.sourceKind!=="entity")return A.sourceKind;return $.entityType}async function XZ(A,$,H,P,X,Y){try{return await A.jobs.enqueue({type:H.job.type,data:P,...X?{options:X}:{}}),$.info("Queued derived entity projection",{projectionId:H.id,targetType:H.targetType,reason:Y}),!0}catch(K){return $.error("Failed to queue derived entity projection",{projectionId:H.id,targetType:H.targetType,reason:Y,error:B(K)}),!1}}function F$(A){return typeof A==="function"?A():A}var R$=Z.object({toolName:Z.string(),args:Z.unknown(),progressToken:Z.union([Z.string(),Z.number()]).optional(),hasProgress:Z.boolean().optional(),interfaceType:Z.string(),actor:L,displayName:Z.string().optional(),conversationId:Z.string().optional(),channelId:Z.string().optional(),channelName:Z.string().optional(),runId:Z.string().optional(),toolCallId:Z.string().optional(),userPermissionLevel:Z.enum(["admin","trusted","public"]).optional(),isAnchor:Z.boolean().optional(),signal:Z.custom((A)=>A instanceof AbortSignal).optional()}),U$=Z.object({resourceUri:Z.string()});class M{id;version;description;packageName;config;context;get logger(){return this.context?.logger??v.createFresh({context:this.id})}constructor(A,$,H,P){this.id=A,this.packageName=$.name,this.version=$.version,this.description=$.description??`${$.name} plugin`;let X=P.safeParse(H);if(!X.success)throw new a(A,X.error.issues.map((Y)=>({path:Y.path.map(String).join("."),code:Y.code,message:Y.message})));this.config=X.data}setupMessageHandlers(A){A.messaging.subscribe(E.toolExecute(this.id),async($)=>{try{let H=R$.safeParse($.payload);if(!H.success)return{success:!1,error:"Invalid tool execution request format"};let{toolName:P,args:X,progressToken:Y,hasProgress:K,interfaceType:W,actor:G,displayName:D,conversationId:F,channelId:R,channelName:O,runId:U,toolCallId:VA,userPermissionLevel:FA,isAnchor:RA,signal:UA}=H.data,wA=(await this.getTools()).find((u)=>u.name===P);if(!wA)return{success:!1,error:`Tool not found: ${P}`};let yZ={interfaceType:W,actor:G,...D&&{displayName:D},...F&&{conversationId:F},...R&&{channelId:R},...O&&{channelName:O},...U&&{runId:U},...VA&&{toolCallId:VA},...FA&&{userPermissionLevel:FA},...RA!==void 0&&{isAnchor:RA},...UA&&{signal:UA},...K&&Y!==void 0&&{progressToken:Y,sendProgress:async(u)=>{await A.messaging.send({type:E.progress(this.id),payload:{progressToken:Y,notification:u}})}}};return{success:!0,data:await wA.handler(X,yZ)}}catch(H){return this.logger.error("Tool execution error",H),{success:!1,error:B(H)}}}),A.messaging.subscribe(E.resourceGet(this.id),async($)=>{try{let H=U$.safeParse($.payload);if(!H.success)return{success:!1,error:"Invalid resource get request format"};let{resourceUri:P}=H.data,Y=(await this.getResources()).find((W)=>W.uri===P);if(!Y)return{success:!1,error:`Resource not found: ${P}`};return{success:!0,data:await Y.handler()}}catch(H){return this.logger.error("Resource fetch error",H),{success:!1,error:B(H)}}})}async onRegister(A){}async onRegistrationComplete(A){}async finalizeRegistration(){await this.onRegistrationComplete(this.getContext())}async onReady(A){}async ready(){await this.onReady(this.getContext())}async getCapabilities(){let A=await this.getInstructions();return{tools:await this.getTools(),resources:await this.getResources(),...A&&{instructions:A}}}async getTools(){return[]}async getResources(){return[]}async getInstructions(){return}async shutdown(){await this.onShutdown()}async onShutdown(){}getContext(){if(!this.context)throw Error(`Plugin ${this.id}: Plugin not registered yet`);return this.context}determineUserPermissionLevel(A){return"public"}createProgressBridge(A){if(!A)return;let $=this.context;if(!$)return;let H=this.id;return C.from(async(P)=>{await $.messaging.send({type:E.progress(H),payload:{progressToken:A,notification:{progress:P.progress,total:P.total,message:P.message}}})})}}var D8=Z.object({});class GZ extends M{type="entity";entityActionPolicy;derivedEntityProjectionControllers=new Map;constructor(A,$,H,P,X){super(A,$,H,P);if(X!==void 0)this.entityActionPolicy=X}async register(A,$){let H=PZ(A,this.id,$);if(this.context=H,this.setupMessageHandlers(H),H.entities.register(this.entityType,this.schema,this.adapter,this.getEntityTypeConfig()),this.interceptCreate!==GZ.prototype.interceptCreate)H.entities.registerCreateInterceptor(this.entityType,(G,D)=>this.interceptCreate(G,D,H));let P=this.createGenerationHandler(H);if(P)H.jobs.registerHandler(`${this.entityType}:generation`,P);let X=this.getTemplates();if(X&&Object.keys(X).length>0)A.registerTemplates(X,this.id);let Y=this.getDataSources();for(let G of Y)H.entities.registerDataSource(G);let K=this.getDerivedEntityProjections(H);for(let G of K){let D=KZ(H,this.logger,G);this.derivedEntityProjectionControllers.set(G.id,D)}await this.onRegister(this.context);let W=await this.getInstructions();return{tools:[],resources:[],...W&&{instructions:W}}}async interceptCreate(A,$,H){return{kind:"continue",input:A}}createGenerationHandler(A){return null}getTemplates(){return null}getDataSources(){return[]}getEntityTypeConfig(){return}getDerivedEntityProjections(A){return[]}getDerivedEntityProjectionController(A){return this.derivedEntityProjectionControllers.get(A)}}function WZ(A){return VZ(A)}function DZ(A){if(!A)return;return{...A.userPermissionLevel&&{userPermissionLevel:A.userPermissionLevel},...A.isAnchor!==void 0&&{isAnchor:A.isAnchor},...A.interfaceType&&{interfaceType:A.interfaceType},...A.channelId&&{channelId:A.channelId},...A.channelName&&{channelName:A.channelName},...A.actor&&{actor:A.actor},...A.source&&{source:A.source},...A.attachments&&{attachments:A.attachments}}}function FZ(A){return{chat:async($,H,P,X)=>{let Y=DZ(P),K=X?await A.chat($,H,Y,X):await A.chat($,H,Y);return WZ(K)},confirmPendingAction:async($,H,P,X,Y)=>{let K=DZ(X);if(!K)throw Error("Confirmation requires caller context.");let W=Y?await A.confirmPendingAction($,H,P,K,Y):await A.confirmPendingAction($,H,P,K);return WZ(W)},invalidate:()=>{A.invalidateAgent()}}}function YA(A,$,H){let P=T(A,$,H),X=A.getMCPService(),Y=A.getPermissionService(),K=FZ(A.getAgentService());return{...P,mcpTransport:X,agent:K,permissions:{...P.permissions,getUserLevel:(W,G,D)=>{return Y.determineUserLevel(W,G,D)},isAnchor:(W,G)=>Y.isAnchor(W,G)},daemons:{register:(W,G)=>{let D=`${$}:${W}`;A.registerDaemon(D,G,$),P.logger.debug(`Registered daemon: ${D}`)}},conversations:{...P.conversations,start:async(W)=>{return A.getConversationService().startConversation(W)},addMessage:async(W)=>{await A.getConversationService().addMessage(W)},updateMetadata:async(W)=>{return A.getConversationService().updateConversationMetadata(W)},delete:async(W)=>{return A.getConversationService().deleteConversation(W)}},tools:{listForPermissionLevel:(W)=>{return A.listToolsForPermissionLevel(W)}},apiRoutes:{getRoutes:()=>{return A.getPluginApiRoutes()},getMessageBus:()=>{return A.getMessageBus()}},webRoutes:{getRoutes:()=>{return A.getPluginWebRoutes()}},plugins:{has:(W)=>A.hasPlugin(W)}}}function RZ(A,$,H){return{...YA(A,$,H),channels:dA(A,$)}}var w$=3600000;class KA extends M{type="interface";daemon;jobTrackingEntries=new Map;jobTrackingTtlMs=w$;createContext(A,$){return YA(A,this.id,$)}async register(A,$){let H=this.createContext(A,$);if(this.context=H,this.initializeDaemon(),this.daemon)await this.registerDaemon(H);return this.setupMessageHandlers(H),await this.onRegister(H),this.getCapabilities()}async onRegister(A){}async registerDaemon(A){if(!this.daemon)return;A.daemons.register(this.id,this.daemon),A.logger.debug(`Registered daemon for interface: ${this.id}`)}createDaemon(){return}requiresDaemonStartup(){return!1}getWebRoutes(){return[]}initializeDaemon(){let A=this.createDaemon();if(A)this.daemon=A}async handleProgressEvent(A,$){}cleanupExpiredEntries(){let A=Date.now(),$=[];for(let[H,P]of this.jobTrackingEntries)if(A-P.createdAt>this.jobTrackingTtlMs)$.push(H);for(let H of $)this.jobTrackingEntries.delete(H)}ownsJob(A,$){return this.jobTrackingEntries.has(A)||$!==void 0&&this.jobTrackingEntries.has($)}getJobTracking(A,$){let H=this.jobTrackingEntries.get(A);if(H)return H.info;if($){let P=this.jobTrackingEntries.get($);if(P)return P.info}return}setJobTracking(A,$){this.cleanupExpiredEntries(),this.jobTrackingEntries.set(A,{info:$,createdAt:Date.now()})}removeJobTracking(A){this.jobTrackingEntries.delete(A)}async createJobWithTracking(A,$){let P=await this.getContext().jobs.enqueue(A);return this.setJobTracking(P,$),P}async createBatchWithTracking(A,$,H){let X=await this.getContext().jobs.enqueueBatch(A,H);return this.setJobTracking(X,$),X}}function z(A,$){return{state:$,toolName:A.toolName,conversationId:A.conversationId,interfaceType:A.interfaceType,...A.channelId!==void 0&&{channelId:A.channelId},...A.channelName!==void 0&&{channelName:A.channelName},...A.error!==void 0&&{error:A.error}}}function UZ(A,$){return A.pendingConfirmations?.some((H)=>H.toolName===$)===!0||N$(A.cards).some((H)=>H.toolName===$)}function N$(A){return A?.filter(($)=>$.kind==="tool-approval"&&$.state==="approval-requested")??[]}var GA=1e5,_$=[".md",".txt",".markdown"],L$=["text/plain","text/markdown","text/x-markdown"],O$=/https?:\/\/[^\s<>"{}|\\^`[\]]+?(?=[,;:\s]|$)/gi,B$=["meet.google.com","zoom.us","teams.microsoft.com","whereby.com","gather.town","calendly.com","cal.com","discord.com","discord.gg","cdn.discordapp.com","media.discordapp.net","giphy.com","tenor.com","wetransfer.com","file.io"],C$=Z.object({captureUrls:Z.boolean().default(!1),blockedUrlDomains:Z.array(Z.string()).default(B$)});function wZ(A,$){if($&&L$.some((H)=>$.startsWith(H)))return!0;return _$.some((H)=>A.toLowerCase().endsWith(H))}function NZ(A){return A<=GA}function _Z(A){if(A.includes(0))return!1;try{return new TextDecoder("utf-8",{fatal:!0}).decode(A),!0}catch{return!1}}function LZ(A,$){return`User uploaded a file "${A}":
3
+
4
+ ${$}`}function OZ(A,$){let H=A.match(O$)??[];return[...new Set(H)].filter((P)=>{try{let{hostname:X}=new URL(P);return!$.some((Y)=>X===Y||X.endsWith(`.${Y}`))}catch{return!1}})}function WA(A,$){let H=A.attachment.source;if((H?.entityType==="document"||H?.entityType==="image")&&H.entityId)return{entityType:H.entityType,id:H.entityId};return M$(A.attachment.downloadUrl??A.attachment.url,$)}function M$(A,$="http://local"){if(!A)return;let H;try{H=new URL(A,$)}catch{return}let P=H.searchParams.get("id")?.trim();if(!P)return;if(H.pathname==="/api/chat/attachments/document")return{entityType:"document",id:P};if(H.pathname==="/api/chat/attachments/image")return{entityType:"image",id:P};return}function BZ(A,$){let H=Q$($,A==="document"?/^application\/pdf$/i:/^image\/[a-z0-9.+-]+$/i);if(!H)return;if(A==="document"&&H.mimeType.toLowerCase()!=="application/pdf")return;return H}function CZ(A,$,H,P){let X=A?.filename;if(typeof X==="string"&&X.trim())return X;if(H==="document")return`${$}.pdf`;let Y=A?.format;if(typeof Y==="string"&&Y.trim())return`${$}.${Y==="jpeg"?"jpg":Y}`;let K=P.split("/")[1]?.split("+")[0]??"png";return`${$}.${K}`}function Q$(A,$){let H=A.match(/^data:([^;]+);base64,(.+)$/i),P=H?.[1],X=H?.[2];if(!P||!X||!$.test(P))return;let Y=Buffer.from(X,"base64");return{mimeType:P,data:Y.buffer.slice(Y.byteOffset,Y.byteOffset+Y.byteLength)}}async function QZ({entityRef:A,userLevel:$,getEntity:H,getVisibleEntity:P}){let X=MZ($),Y=await P(A,X);if(Y)return{status:"visible",entity:Y};return Boolean(await H(A))?{status:"denied"}:{status:"missing"}}function qZ(A){return A==="admin"||A==="trusted"}function kZ(A,$){A.messaging.subscribe(e.progress,async(H)=>{try{let P=t.safeParse(H.payload);if(!P.success)return $.onInvalidSchema(),{success:!1};let X=P.data;return await $.onProgress(X,X.metadata),{success:!0}}catch(P){return $.onError(P),{success:!1}}})}function EZ(A){let $=A.status==="completed"?"\u2705":"\u274C",H=A.status==="completed"?"completed":"failed",P=A.metadata.operationType.replace(/_/g," "),X=A.metadata.operationTarget?`: ${A.metadata.operationTarget}`:"",Y=`${$} **${P}${X}** ${H}`;if(A.message)Y+=`
5
+ ${A.message}`;return Y}function fZ(A){let $=A.metadata.operationType.replace(/_/g," "),H=A.metadata.operationTarget?`: ${A.metadata.operationTarget}`:"",P=`\uD83D\uDD04 **${$}${H}**`;if(A.progress&&A.progress.total>0)P+=` ${A.progress.current}/${A.progress.total} (${A.progress.percentage}%)`;if(A.message)P+=`
6
+ ${A.message}`;return P}var q$=Z.enum(["tool:invoking","tool:completed","tool:failed"]),k$=Z.object({toolName:Z.string().min(1),conversationId:Z.string().min(1),interfaceType:Z.string().min(1),channelId:Z.string().min(1).optional(),channelName:Z.string().min(1).optional(),toolCallId:Z.string().min(1).optional(),error:Z.string().optional()}),E$=["tool:invoking","tool:completed","tool:failed"];function JZ(A,$){for(let H of E$)A.messaging.subscribe(H,async(P)=>{try{let X=q$.safeParse(P.type),Y=k$.safeParse(P.payload);if(!X.success||!Y.success)return $.onInvalidSchema(),{success:!1};return await $.onToolActivity({type:X.data,...Y.data}),{success:!0}}catch(X){return $.onError(X),{success:!1}}})}class DA{scope;fibers;delayMs;clock;closePromise=null;closed=!1;constructor(A,$){this.delayMs=A,this.clock=$?.clock,this.scope=N.runSync(J.make()),this.fibers=N.runSync(J.extend(g.make(),this.scope))}schedule(A,$){if(this.closed)return;let H=N.sleep(this.delayMs).pipe(N.andThen(N.sync($))),P=this.clock?N.withClock(H,this.clock):H,X=N.runFork(P);g.unsafeSet(this.fibers,A,X)}close(){return this.closed=!0,this.closePromise??=N.runPromise(J.close(this.scope,y.void)),this.closePromise}}var TZ=500,f$=500;class J$ extends KA{createContext(A,$){return RZ(A,this.id,$)}isUploadableTextFile(A,$){return wZ(A,$)}isFileSizeAllowed(A){return NZ(A)}formatFileUploadMessage(A,$){return LZ(A,$)}getMaxFileUploadBytes(){return GA}isLikelyTextContent(A){return _Z(A)}async resolveNativeArtifactDelivery(A){let $=[],H=new Set;if(!this.context||!A.cards)return{files:$,deniedCardIds:H};let P=this.context;for(let X of A.cards){if(X.kind!=="attachment")continue;let Y=WA(X,A.displayBaseUrl);if(!Y)continue;let K=await QZ({entityRef:Y,userLevel:A.userPermissionLevel,getEntity:(G)=>P.entityService.getEntity(G),getVisibleEntity:(G,D)=>P.entityService.getEntity({...G,visibilityScope:D})});if(K.status==="denied"){H.add(X.id);continue}if(K.status!=="visible")continue;if(!qZ(A.userPermissionLevel))continue;if(typeof K.entity.content!=="string")continue;let W=BZ(Y.entityType,K.entity.content);if(!W)continue;if(A.maxBytes!==void 0&&W.data.byteLength>A.maxBytes){this.logger.debug("Skipping oversized native artifact upload",{cardId:X.id,sizeBytes:W.data.byteLength});continue}$.push({cardId:X.id,data:new Uint8Array(W.data),filename:X.attachment.filename??CZ(K.entity.metadata,Y.id,Y.entityType,W.mimeType),mimeType:W.mimeType})}return{files:$,deniedCardIds:H}}extractCaptureableUrls(A,$){return OZ(A,$)}async captureUrlViaAgent(A,$,H,P,X){if(!this.context)return;let Y=this.context.permissions.getUserLevel(P,H,X);await this.context.agent.chat(`Save this link: ${A}`,`links-${$}`,{userPermissionLevel:Y,interfaceType:P,channelId:$})}progressEvents=new Map;progressCleanupSupervisor=new DA(f$);sendMessageToChannel(A){return}sendMessageWithId(A){return Promise.resolve(void 0)}editMessage(A){return Promise.resolve(!1)}supportsMessageEditing(){return!1}progressCallback;isProcessingInput=!1;currentChannelId=null;bufferedCompletionMessages=[];progressMessageTracking=new Map;agentResponseTracking=new Map;pendingToolCompletions=new Map;registerProgressCallback(A){this.progressCallback=A;let $=Array.from(this.progressEvents.values()).filter((H)=>H.status==="processing");A($)}unregisterProgressCallback(){delete this.progressCallback}trackAgentResponseForJob(A,$,H){this.agentResponseTracking.set(A,{messageId:$,channelId:H,lastUpdate:Date.now()}),this.logger.debug("Tracking agent response for job",{jobId:A,messageId:$,channelId:H})}async onRegister(A){await super.onRegister(A),kZ(A,{onProgress:async($,H)=>{await this.handleProgressEvent($,H)},onError:($)=>{this.logger.error("Error handling progress event",{error:$,interfaceId:this.id})},onInvalidSchema:()=>{this.logger.warn("Invalid progress event schema",{interfaceId:this.id})}}),JZ(A,{onToolActivity:async($)=>{await this.handleToolActivityEvent($)},onError:($)=>{this.logger.error("Error handling tool activity event",{error:$,interfaceId:this.id})},onInvalidSchema:()=>{this.logger.warn("Invalid tool activity event schema",{interfaceId:this.id})}}),this.logger.debug("Message interface registered with progress and tool handlers",{id:this.id})}async onShutdown(){await this.progressCleanupSupervisor.close(),this.progressEvents.clear(),this.progressMessageTracking.clear(),this.agentResponseTracking.clear(),this.pendingToolCompletions.clear(),this.bufferedCompletionMessages=[],this.isProcessingInput=!1,this.currentChannelId=null,delete this.progressCallback,await super.onShutdown()}async handleProgressEvent(A,$){if(!this.shouldHandleProgressEvent(A))return;this.updateProgressState(A);let H=A.metadata.channelId??null,P=A.metadata.rootJobId;if(await this.handleProcessingProgress(A,H,P))return;if(A.status==="completed"||A.status==="failed")await this.handleTerminalProgress(A,H,P);await this.onProgressUpdate(A),this.logProgressProcessed(A)}shouldHandleProgressEvent(A){let $=A.metadata.interfaceType;return!$||$===this.id}updateProgressState(A){this.progressEvents.set(A.id,A),this.notifyProgressCallback()}async handleProcessingProgress(A,$,H){if(A.status!=="processing"||!this.supportsMessageEditing())return!1;let P=this.agentResponseTracking.get(A.id);if(P)return await this.editTrackedProgressMessage(A,P),!0;let X=this.formatProgressOutput(A),Y=this.progressMessageTracking.get(H),K=Date.now();if(Y){if(K-Y.lastUpdate>=TZ)await this.editMessage({channelId:Y.channelId,messageId:Y.messageId,newMessage:X}),Y.lastUpdate=K}else if($&&!this.isProcessingInput)await this.sendInitialProgressMessage(H,$,X,K);return!1}async editTrackedProgressMessage(A,$){let H=Date.now();if(H-$.lastUpdate<TZ)return;await this.editMessage({channelId:$.channelId,messageId:$.messageId,newMessage:this.formatProgressOutput(A)}),$.lastUpdate=H}async sendInitialProgressMessage(A,$,H,P){let X=await this.sendMessageWithId({channelId:$,message:H});if(!X)return;this.progressMessageTracking.set(A,{messageId:X,channelId:$,lastUpdate:P}),this.logger.debug("Tracking progress message",{rootJobId:A,messageId:X,channelId:$})}async handleTerminalProgress(A,$,H){let P=this.formatCompletionOutput(A),X=this.progressMessageTracking.get(H),Y=this.agentResponseTracking.get(A.id);if(this.logger.debug("Completion event received",{eventId:A.id,rootJobId:H,hasProgressTracking:!!X,hasAgentTracking:!!Y,supportsEditing:this.supportsMessageEditing()}),this.supportsMessageEditing())await this.updateTrackedCompletion(A,P,X,Y,H);if(!X&&!Y&&$)this.sendOrBufferCompletionMessage(P,$);this.scheduleProgressCleanup(A.id)}async updateTrackedCompletion(A,$,H,P,X){if(P){if(await this.editMessage({channelId:P.channelId,messageId:P.messageId,newMessage:$}),this.agentResponseTracking.delete(A.id),H)this.progressMessageTracking.delete(X);return}if(H)await this.editMessage({channelId:H.channelId,messageId:H.messageId,newMessage:$}),this.progressMessageTracking.delete(X)}sendOrBufferCompletionMessage(A,$){if(this.isProcessingInput){this.bufferedCompletionMessages.push({message:A,channelId:$});return}this.sendMessageToChannel({channelId:$,message:A})}scheduleProgressCleanup(A){this.progressCleanupSupervisor.schedule(A,()=>{this.progressEvents.delete(A),this.notifyProgressCallback()})}logProgressProcessed(A){this.logger.debug("Progress event processed",{eventId:A.id,status:A.status,operationType:A.metadata.operationType,targetChannel:A.metadata.channelId})}formatProgressOutput(A){return fZ(A)}formatCompletionOutput(A){return EZ(A)}async onProgressUpdate(A){}async handleToolActivityEvent(A){if(A.interfaceType!==this.id)return;switch(A.type){case"tool:invoking":this.pendingToolCompletions.delete(this.getToolCompletionKey(A)),await this.handleToolStatusUpdate(z(A,"running"));return;case"tool:completed":if(this.isProcessingInput){this.pendingToolCompletions.set(this.getToolCompletionKey(A),A);return}await this.handleToolStatusUpdate(z(A,"completed"));return;case"tool:failed":this.pendingToolCompletions.delete(this.getToolCompletionKey(A)),await this.handleToolStatusUpdate(z(A,"failed"));return}}async handleToolStatusUpdate(A){}async handleAgentResponseToolStatuses(A,$){if(this.pendingToolCompletions.size===0)return;let H=Array.from(this.pendingToolCompletions.values()).filter((P)=>P.interfaceType===this.id&&P.conversationId===$);for(let P of H){this.pendingToolCompletions.delete(this.getToolCompletionKey(P));let X=UZ(A,P.toolName)?"awaiting-approval":"completed";await this.handleToolStatusUpdate(z(P,X))}}getToolCompletionKey(A){return`${A.interfaceType}:${A.conversationId}:${A.toolName}`}notifyProgressCallback(){if(this.progressCallback){let A=Array.from(this.progressEvents.values());this.progressCallback(A)}}getProgressEvents(){return Array.from(this.progressEvents.values())}getActiveProgressEvents(){return Array.from(this.progressEvents.values()).filter((A)=>A.status==="processing")}startProcessingInput(A=null){this.isProcessingInput=!0,this.currentChannelId=A}endProcessingInput(){this.isProcessingInput=!1;for(let{message:A,channelId:$}of this.bufferedCompletionMessages)this.sendMessageToChannel({channelId:$,message:A});this.bufferedCompletionMessages=[],this.currentChannelId=null}getCurrentChannelId(){return this.currentChannelId}}function xZ(A,$,H){let P=T(A,$,H),X=A.getEntityService(),Y=A.getRenderService(),K=A.getContentService(),W=A.getPermissionService();return{...P,permissions:{...P.permissions,getConfiguredPrincipalSeeds:()=>W.getConfiguredPrincipalSeeds(),replaceRuntimePrincipalState:(G)=>W.replaceRuntimePrincipalState(G)},entityService:X,entities:p(A),webRoutes:{getRoutes:()=>A.getPluginWebRoutes()},templates:{register:(G,D)=>{A.registerTemplates(G,D??$)},format:(G,D)=>{return K.formatContent(G,D,{pluginId:$})},parse:(G,D)=>{return K.parseContent(G,D,$)},resolve:async(G,D)=>{return await K.resolveContent(G,D,$)},getCapabilities:(G)=>{let D=G.includes(":")?G:`${$}:${G}`,F=A.getTemplate(D);if(!F)return null;let R=SZ.getCapabilities(F);return{canGenerate:R.canGenerate,canFetch:R.canFetch,canRender:R.canRender,isStaticOnly:R.isStaticOnly}}},views:{get:(G)=>{return Y.get(G)??void 0},list:()=>{return Y.list()},hasRenderer:(G,D="web")=>{return Y.hasRenderer(G,D)},getRenderer:(G,D="web")=>{return Y.getRenderer(G,D)},validate:(G,D)=>{return Y.validate(G,D)}},prompts:c(X),ai:{query:(G,D)=>A.query(G,D),generate:async(G)=>{return A.generateContent(G)},generateObject:async(G,D,F)=>{return A.generateObject(G,D,F)},generateImage:async(G,D)=>{return A.generateImage(G,D)},canGenerateImages:()=>{return A.canGenerateImages()}},registerInstructions:(G)=>{A.registerInstructions($,G)}}}class T$ extends M{type="service";getApiRoutes(){return[]}getWebRoutes(){return[]}async register(A,$){let H=xZ(A,this.id,$);return this.context=H,this.setupMessageHandlers(H),await this.onRegister(H),this.getCapabilities()}get entityService(){return this.getContext().entityService}registerEntityType(A,$,H,P){this.getContext().entities.register(A,$,H,P)}async enqueueJob(A){return this.getContext().jobs.enqueue(A)}async enqueueBatch(A,$){return this.getContext().jobs.enqueueBatch(A,$)}async registerEntityTypes(A){}async registerJobHandlers(A){}async onRegister(A){await this.registerEntityTypes(A),await this.registerJobHandlers(A)}}
7
+ export{zA as m,h$ as n,j$ as o,NA as p,_A as q,D8 as r,GZ as s,KA as t,J$ as u,T$ as v,z1 as w,o4 as x};
8
+
9
+ //# debugId=6291C409A6BD4BE364756E2164756E21
10
+ //# sourceMappingURL=index-zc6br876.js.map