@rizom/brain 0.2.0-alpha.235 → 0.2.0-alpha.236
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/brain.js +1273 -1271
- package/dist/chunks/{blog-post-adapter-0fc8yd1s.js → blog-post-adapter-vt71whj1.js} +2 -2
- package/dist/chunks/{index-er159j9b.js → index-51pqwxdb.js} +2 -2
- package/dist/chunks/index-atsf9t9d.js +6 -0
- package/dist/chunks/{index-kvac8t2y.js.map → index-atsf9t9d.js.map} +5 -4
- package/dist/chunks/index-zc6br876.js +10 -0
- package/dist/chunks/{index-a4q0aknf.js.map → index-zc6br876.js.map} +8 -8
- package/dist/chunks/{rss-datasource-gfgpmvf3.js → rss-datasource-9j87n822.js} +2 -2
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/migrations/auth-service/0009_wild_namor.sql +44 -0
- package/dist/migrations/auth-service/0010_mixed_red_skull.sql +23 -0
- package/dist/migrations/auth-service/meta/0009_snapshot.json +1824 -0
- package/dist/migrations/auth-service/meta/0010_snapshot.json +1820 -0
- package/dist/migrations/auth-service/meta/_journal.json +14 -0
- package/dist/plugins.d.ts +48 -3
- package/dist/plugins.js +3 -3
- package/dist/plugins.js.map +4 -4
- package/dist/site.js +6 -6
- package/dist/site.js.map +1 -1
- package/dist/ui/admin-app.js +102 -102
- package/dist/ui/admin-app.js.map +10 -10
- package/package.json +1 -1
- package/dist/chunks/index-a4q0aknf.js +0 -10
- package/dist/chunks/index-kvac8t2y.js +0 -6
- /package/dist/chunks/{blog-post-adapter-0fc8yd1s.js.map → blog-post-adapter-vt71whj1.js.map} +0 -0
- /package/dist/chunks/{index-er159j9b.js.map → index-51pqwxdb.js.map} +0 -0
- /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
|