@rizom/brain 0.2.0-alpha.203 → 0.2.0-alpha.205

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.
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{a,b}from"./index-z2sa7222.js";import"./index-53ey0fh9.js";import"./index-w9z1vrm1.js";import"./index-fjp4jadv.js";import"./index-e2c4agdd.js";import"./index-3097wt56.js";import"./index-bs70092j.js";import"./index-9s5cwp2s.js";import"./index-wvwq0pm7.js";import"./index-gmfgjnnw.js";export{b as blogPostAdapter,a as BlogPostAdapter};
2
+ import{a,b}from"./index-whpvp633.js";import"./index-4r98bhg4.js";import"./index-w9z1vrm1.js";import"./index-fjp4jadv.js";import"./index-e2c4agdd.js";import"./index-3097wt56.js";import"./index-bs70092j.js";import"./index-9s5cwp2s.js";import"./index-wvwq0pm7.js";import"./index-gmfgjnnw.js";export{b as blogPostAdapter,a as BlogPostAdapter};
3
3
 
4
4
  //# debugId=1740B4E5E07C590464756E2164756E21
5
- //# sourceMappingURL=blog-post-adapter-e80m83vk.js.map
5
+ //# sourceMappingURL=blog-post-adapter-mcd8g3g5.js.map
@@ -0,0 +1,6 @@
1
+ // @bun
2
+ import{o as t}from"./index-w9z1vrm1.js";import{$ as _f,D as Y,E as $f,L as Bf,N as Kf,O as H,P as z,Q as W,U as G,V as Lf,W as o,Y as ff,_ as g,aa as l,ba as q,ca as s}from"./index-e2c4agdd.js";import{oa as d,pa as e,ua as Tf,wa as P}from"./index-3097wt56.js";import{Qa as x}from"./index-wvwq0pm7.js";var c=/^upload-[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;var Ak=x.object({id:x.string().regex(c),ref:x.object({kind:x.string().min(1),id:x.string().regex(c)}),filename:x.string().min(1),mediaType:x.string().min(1),sizeBytes:x.number().nonnegative(),createdAt:x.string().datetime(),metadata:x.record(x.string(),x.unknown()).optional()});function h(f){if(typeof f!=="object"||f===null||!("entityId"in f))return;let k=f.entityId;return typeof k==="string"&&k.trim().length>0?k.trim():void 0}function uf(f){if(typeof f!=="object"||f===null||!("coverImage"in f))return;let k=f.coverImage;if(k===void 0||k===!1)return;if(k===!0)return{generate:!0};if(typeof k!=="object"||k===null)return;let U=k;if(U.generate===!1)return;let $=U.prompt?.trim();return{generate:!0,...$&&{prompt:$}}}function n(f){return Object.fromEntries(Object.entries(f).filter(([,k])=>k!==void 0))}function Ff(f){let k={...f};return delete k.status,delete k.error,n(k)}class Jf extends t{context;entityType;constructor(f,k,U){super(f,{schema:U.schema,jobTypeName:U.jobTypeName});this.context=k,this.entityType=U.entityType}async afterCreate(f,k,U,$){}async onGenerationFailure(f,k){}validateAndParse(f){let k=super.validateAndParse(f);if(!k)return null;let U=uf(f);if(typeof k!=="object")return k;let $=h(f);if(!U&&!$)return k;return Object.assign(k,{...U&&{coverImage:U},...$&&{entityId:$}}),k}async process(f,k,U){try{await this.reportProgress(U,{progress:P.START,message:`Starting ${this.jobTypeName}`});let $=await this.generate(f,U),M=h(f),A=M?this.applyPreallocatedEntityId(M,$):$;await this.reportProgress(U,{progress:P.SAVE,message:`Saving ${this.entityType} to database`});let w=M?await this.updatePreallocatedStub(M,A):await this.context.entityService.createEntity({entity:{id:A.id,entityType:this.entityType,content:A.content,metadata:A.metadata},options:A.createOptions});return await this.afterCreate(f,w.entityId,U,A),await this.enqueueGenericCoverImageIfRequested(f,w.entityId,U,A),await this.reportProgress(U,{progress:P.COMPLETE,message:`${A.title??this.entityType} created successfully`}),{success:!0,entityId:w.entityId,...A.resultExtras}}catch($){if($ instanceof I)return await this.markPreallocatedStubFailed(f,$.message),await this.onGenerationFailure(f,$.message),{success:!1,error:$.message};let M=Y($);return this.logger.error(`${this.jobTypeName} job failed`,{error:$,jobId:k,data:this.summarizeDataForLog(f)}),await this.markPreallocatedStubFailed(f,M),await this.onGenerationFailure(f,M),Tf.failure($)}}applyPreallocatedEntityId(f,k){let U={...k.metadata},$=k.content,M=k.resultExtras;if(typeof U.slug==="string")U.slug=f,$=l($,"slug",f),M={...M,slug:f};return{...k,id:f,content:$,metadata:U,...M&&{resultExtras:M}}}async updatePreallocatedStub(f,k){let U=await this.context.entityService.getEntity({entityType:this.entityType,id:f,visibilityScope:"restricted"});if(!U)throw Error(`Pre-allocated entity stub not found: ${this.entityType}/${f}`);let $=this.mergeStubWithGenerated(U,k);return this.context.entityService.updateEntity({entity:{...U,id:f,entityType:this.entityType,content:$.content,metadata:$.metadata}})}mergeStubWithGenerated(f,k){let U=Ff(g(f.content).frontmatter),$=Ff(f.metadata),M=n(k.metadata),A=g(k.content),w=n(A.frontmatter),u=n({...U,...M,...w});return this.context.entities.getEffectiveFrontmatterSchema(this.entityType)?.parse(u),{content:_f(u,A.content),metadata:{...$,...M}}}async markPreallocatedStubFailed(f,k){let U=h(f);if(!U)return;try{let $=await this.context.entityService.getEntity({entityType:this.entityType,id:U,visibilityScope:"restricted"});if(!$)return;await this.context.entityService.updateEntity({entity:{...$,content:l(l($.content,"status","failed"),"error",k),metadata:{...$.metadata,status:"failed",error:k}}})}catch($){this.logger.warn("Failed to mark generation stub as failed",{error:$,entityId:U,entityType:this.entityType})}}async enqueueGenericCoverImageIfRequested(f,k,U,$){let M=uf(f);if(!M)return;await this.reportProgress(U,{progress:90,message:"Queueing cover image generation"});let A=$.title??k;await this.context.jobs.enqueue({type:"image:image-generate",data:{prompt:M.prompt??`Editorial cover image for: ${A}. `,title:`${A} Cover`,aspectRatio:"16:9",targetEntityType:this.entityType,targetEntityId:k,entityTitle:A,entityContent:$.content},toolContext:{interfaceType:"job",userId:"system"}})}failEarly(f){throw new I(f)}}class I extends Error{constructor(f){super(f);this.name="GenerationFailure"}}var nf=x.object({kind:x.string().min(1),id:x.string().min(1)}),Ef=x.object({kind:x.string().min(1),filename:x.string().min(1),mediaType:x.string().min(1),sizeBytes:x.number().nonnegative().optional(),source:nf.optional()}),Dk=x.array(Ef),Rk=x.array(e),Qk=x.array(d),Yk=x.record(x.string(),x.unknown());var Bk=x.record(x.string(),x.unknown());var nk=x.record(x.string(),x.unknown());var Sf=new Map([[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".webp","image/webp"],[".gif","image/gif"],[".pdf","application/pdf"]]),Sk=new Set(Sf.values());async function gx(f){let{entityType:k,title:U,deriveId:$,regeneratePrompt:M,context:A}=f,w=$(U),u=await A.entityService.getEntity({entityType:k,id:w});if(!u||u.metadata.status==="generating")return U;A.logger.debug(`Entity ID collision: ${k}/${w}, asking AI for a new title`);let O=x.object({title:x.string().max(80).describe("A short, unique title (2-6 words)")}),{object:m}=await A.ai.generateObject(`The title "${U}" is already taken. ${M}`,O),K=m.title;return A.logger.debug(`AI suggested new title: "${K}"`),K}var r=G.extend({id:x.literal("brain-character"),entityType:x.literal("brain-character")}),E=x.object({name:x.string().describe("The brain's friendly display name"),role:x.string().describe("The brain's primary role"),purpose:x.string().describe("The brain's purpose and goals"),values:x.array(x.string()).describe("Core values that guide behavior")});var Df=x.record(x.string(),x.unknown());class S extends q{constructor(){super({entityType:"brain-character",purpose:"The brain's own identity, character, and purpose (singleton).",schema:r,frontmatterSchema:E,isSingleton:!0,hasBody:!1})}createCharacterContent(f){return this.buildMarkdown("",f)}parseCharacterBody(f){return this.parseFrontmatter(f)}toMarkdown(f){let k=this.parseFrontmatter(f.content);return this.buildMarkdown("",Df.parse(k))}fromMarkdown(f){return{content:f,entityType:"brain-character"}}extractMetadata(f){let k=this.parseFrontmatter(f.content);return{role:k.role,values:k.values}}generateFrontMatter(f){let k=this.parseFrontmatter(f.content);return this.buildMarkdown("",Df.parse(k))}}class D extends s{static instance=null;adapter=new S;static getDefaultCharacter(){return{name:"Brain",role:"Knowledge assistant",purpose:"Help organize, understand, and retrieve information from your knowledge base",values:["clarity","accuracy","helpfulness"]}}static getInstance(f,k,U){return D.instance??=new D(f,k,U),D.instance}static resetInstance(){D.instance=null}static createFresh(f,k,U){return new D(f,k,U)}constructor(f,k,U){super(f,k,"brain-character",U??D.getDefaultCharacter(),o("brain character is loaded at bootstrap before any user is in scope"))}parseBody(f){return this.adapter.parseCharacterBody(f)}createContent(f){return this.adapter.createCharacterContent(f)}getCharacter(){return this.get()}getCharacterContent(){return this.getContent()}}var i=G.extend({id:x.literal("anchor-profile"),entityType:x.literal("anchor-profile")}),X=x.object({name:x.string().describe("Name (person or organization)"),kind:x.enum(["professional","team","collective"]).describe("Type of anchor: professional (individual), team, or collective"),organization:x.string().optional().describe("Organization the anchor belongs to"),description:x.string().optional().describe("Short description or biography"),avatar:x.string().optional().describe("URL or asset path to avatar/logo"),website:x.string().optional().describe("Primary website URL"),email:x.string().optional().describe("Contact email"),socialLinks:x.array(x.object({platform:x.enum(["github","instagram","linkedin","email","website"]).describe("Social media platform"),url:x.string().describe("Profile or contact URL"),label:x.string().optional().describe("Optional display label")})).optional().describe("Social media and contact links")});var Ix=x.record(x.string(),x.unknown());class Z extends q{constructor(){super({entityType:"anchor-profile",purpose:"The profile of the brain's anchor owner (singleton).",schema:i,frontmatterSchema:X,isSingleton:!0,hasBody:!0})}createProfileContent(f){let k=X.parse(f);return this.buildMarkdown("",k)}parseProfileBody(f,k){if(k){let{metadata:U,content:$}=ff(f,k);return $?{...U,story:$}:U}return this.parseFrontmatter(f)}fromMarkdown(f){return{content:f,entityType:"anchor-profile"}}extractMetadata(f){let k=this.parseFrontmatter(f.content);return{name:k.name,email:k.email,website:k.website}}generateFrontMatter(f){let k=this.parseFrontmatter(f.content);return this.buildMarkdown("",Ix.parse(k))}}var xf=x.object({tagline:x.string().optional().describe("Short, punchy one-liner for homepage"),intro:x.string().optional().describe("Optional longer introduction for homepage"),story:x.string().optional().describe("Extended bio/narrative (multi-paragraph markdown)")}),Rf=xf.extend({role:x.string().optional().describe("Professional role or working identity"),audience:x.string().optional().describe("Primary audience or community served"),expertise:x.array(x.string()).optional().describe("Skills, domains, areas of focus"),currentFocus:x.string().optional().describe("What you're currently working on"),availability:x.string().optional().describe("What you're open to (consulting, speaking, etc.)"),desiredTone:x.string().optional().describe("Preferred tone for profile-shaped outputs")});async function kf(f){let U=(await f.listEntities({entityType:"anchor-profile",options:{limit:1}}))[0];if(!U)throw Error("Profile not found \u2014 create an anchor-profile entity");return U.content}async function Qf(f,k){let U=await kf(f);return new Z().parseProfileBody(U,k)}class j extends s{static instance=null;adapter=new Z;static getDefaultProfile(){return{name:"Unknown",kind:"professional"}}static getInstance(f,k,U){return j.instance??=new j(f,k,U),j.instance}static resetInstance(){j.instance=null}static createFresh(f,k,U){return new j(f,k,U)}constructor(f,k,U){super(f,k,"anchor-profile",U??j.getDefaultProfile(),o("anchor profile is loaded at bootstrap before any user is in scope"))}parseBody(f){return this.adapter.parseProfileBody(f)}createContent(f){return this.adapter.createProfileContent(f)}getProfile(){return this.get()}getProfileContent(){return this.getContent()}}var Yf=x.looseObject({id:x.string(),description:x.string(),name:x.string().optional(),tags:x.array(x.string()).optional().default([])});var tx=x.looseObject({uri:x.string(),params:x.record(x.string(),x.unknown()).optional()}),ax=x.looseObject({name:x.string(),url:x.string(),description:x.string().optional(),skills:x.array(Yf).optional().default([]),capabilities:x.looseObject({extensions:x.array(tx).optional().default([])}).optional()});var dx=x.object({name:x.string(),description:x.string(),tags:x.array(x.string()),examples:x.array(x.string())});import{EventEmitter as Zf}from"events";var C={REGISTERED:"registered",INITIALIZED:"initialized",ERROR:"error",DISABLED:"disabled"},_={REGISTERED:"plugin:registered",BEFORE_INITIALIZE:"plugin:before_initialize",INITIALIZED:"plugin:initialized",ERROR:"plugin:error",DISABLED:"plugin:disabled"};class N extends Error{pluginId;constructor(f,k){super(`Plugin ${f}: ${k}`);this.name="PluginError",this.pluginId=f}}class Uf{scope;ingress=new Set;closePromise=null;closed=!1;constructor(){this.scope=W.runSync(z.make())}addFinalizer(f){if(this.closed)throw Error("Cannot register a resource after plugin teardown");W.runSync(z.addFinalizer(this.scope,W.promise(async()=>{await f()})))}addIngress(f){if(this.closed)throw Error("Cannot register ingress after plugin teardown");this.ingress.add(f)}close(f=H.void){return this.closed=!0,this.closePromise??=this.closeScope(f),this.closePromise}async closeScope(f){let k,U=!1,$=[...this.ingress].reverse();for(let u of $)try{u.stopAdmission()}catch(O){if(!U)k=O;U=!0}let M=await Promise.allSettled($.map((u)=>Promise.resolve().then(()=>u.drain())));this.ingress.clear();let A=M.find((u)=>u.status==="rejected");if(!U&&A)k=A.reason,U=!0;let w=await W.runPromiseExit(z.close(this.scope,f));if(!U&&H.isFailure(w))k=Kf.squash(w.cause),U=!0;if(U)throw k}}function Xf(f,k){let U=f.getMessageBus(),$=new Set,M={send:(L)=>U.send(L),subscribe:(L,V,b)=>{let F=!0,J=new Set,T=(y)=>{if(!F)return{noop:!0};let bf,Vf=new Promise((Q)=>{bf=Q});J.add(Vf);let v=()=>{J.delete(Vf),bf()},Cf;try{Cf=Promise.resolve(V(y))}catch(Q){throw v(),Q}return Cf.then((Q)=>{return v(),Q},(Q)=>{throw v(),Q})},p=U.subscribe(L,T,b),B={type:L,originalHandler:V,stopAdmission:()=>{if(!F)return;F=!1,p(),$.delete(B)}};$.add(B);try{k.addIngress({stopAdmission:B.stopAdmission,drain:async()=>{await Promise.all(J)}})}catch(y){throw B.stopAdmission(),y}return B.stopAdmission},unsubscribe:(L,V)=>{let b=[...$].filter((F)=>F.type===L&&F.originalHandler===V);if(b.length===0){U.unsubscribe(L,V);return}for(let F of b)F.stopAdmission()}},A=f.getAttachmentRegistry(),w={...A,register:(L,V,b)=>{let F=!0,J=A.register(L,V,b),T=()=>{if(!F)return;F=!1,J()};return k.addFinalizer(T),T}},u=f.getEntityRegistry(),O=new Proxy(u,{get(L,V){let b=Reflect.get(L,V,L);if(V==="registerEntityType"&&typeof b==="function")return(...F)=>{let J=Reflect.apply(b,L,F),T=F[0];if(typeof T==="string")k.addFinalizer(()=>L.unregisterEntityType(T));return J};return typeof b==="function"?b.bind(L):b}}),m=f.getDataSourceRegistry(),K=new Proxy(m,{get(L,V){let b=Reflect.get(L,V,L);if(V==="register"&&typeof b==="function")return(...F)=>{let J=Reflect.apply(b,L,F),T=F[0];if(typeof T==="object"&&T!==null&&"id"in T&&typeof T.id==="string"){let p=T.id.includes(":")?T.id:`shell:${T.id}`;k.addFinalizer(()=>L.unregister(p))}return J};return typeof b==="function"?b.bind(L):b}}),of=f.getInsightsRegistry(),Pf=new Proxy(of,{get(L,V){let b=Reflect.get(L,V,L);if(V==="register"&&typeof b==="function")return(...F)=>{let J=Reflect.apply(b,L,F),T=F[0];if(typeof T==="string")k.addFinalizer(()=>L.unregister(T));return J};return typeof b==="function"?b.bind(L):b}});return new Proxy(f,{get(L,V){if(V==="getMessageBus")return()=>M;if(V==="getAttachmentRegistry")return()=>w;if(V==="getEntityRegistry")return()=>O;if(V==="getDataSourceRegistry")return()=>K;if(V==="getInsightsRegistry")return()=>Pf;let b=Reflect.get(L,V,L);return typeof b==="function"?b.bind(L):b}})}class Mf{plugins;events;daemonRegistry;logger;resourceScopes=new Map;releasePromises=new Map;constructor(f,k,U,$){this.plugins=f,this.events=k,this.daemonRegistry=U,this.logger=$.child("PluginLifecycle")}async initializePlugin(f,k,U){let $=this.plugins.get(f);if(!$)throw new N(f,"Registration failed: Plugin is not registered");let M=$.plugin,A=new Uf;A.addFinalizer(()=>k.unregisterPluginCapabilities?.(f)),A.addFinalizer(()=>k.getJobQueueService().unregisterPluginHandlers(f)),this.resourceScopes.set(f,A),this.releasePromises.delete(f),this.logger.debug(`Initializing plugin: ${f}`);try{this.events.emit(_.BEFORE_INITIALIZE,f,M);let w=await M.register(Xf(k,A),U);return $.status=C.INITIALIZED,this.logger.debug(`Initialized plugin: ${f}`),this.events.emit(_.INITIALIZED,f,M),w}catch(w){throw this.logger.error(`Error initializing plugin ${f}: ${Y(w)}`),await this.failPluginInitialization(f,w),w}}async readyPlugin(f){let k=this.plugins.get(f);if(!k)throw new N(f,"Ready failed: Plugin is not registered");if(k.status!==C.INITIALIZED){this.logger.debug(`Skipping ready hook for non-initialized plugin: ${f}`);return}try{await k.plugin.ready?.(),this.logger.debug(`Ready hook completed for plugin: ${f}`)}catch(U){let $=$f(U);k.status=C.ERROR,k.error=$;try{this.events.emit(_.ERROR,f,$)}catch(M){this.logger.error(`Plugin error listener failed for ${f}`,M)}throw $}}async startPluginDaemons(f){let k=this.plugins.get(f);if(k?.status!==C.INITIALIZED)return;try{await this.daemonRegistry.startPlugin(f),this.logger.debug(`Started daemons for plugin: ${f}`)}catch(U){if(k.plugin.requiresDaemonStartup?.())throw U;this.logger.warn(`Daemon ${f} failed to start: ${Y(U)}`)}}async failPluginInitialization(f,k){let U=this.plugins.get(f);if(!U)return;let $=U.status!==C.ERROR,M=$f(k);if(U.status=C.ERROR,U.error=M,await this.releasePluginResources(f,H.fail(k)),$)try{this.events.emit(_.ERROR,f,M)}catch(A){this.logger.error(`Plugin error listener failed for ${f}`,A)}}async disablePlugin(f){let k=this.plugins.get(f);if(!k){this.logger.warn(`Cannot disable plugin ${f}: not registered`);return}if(k.status===C.DISABLED)return;this.logger.debug(`Disabling plugin: ${f}`);let U=k.status===C.ERROR;await this.releasePluginResources(f,H.void);let $=this.plugins.get(f);if(!U&&$&&$.status!==C.DISABLED)$.status=C.DISABLED,this.events.emit(_.DISABLED,f,$.plugin);this.logger.debug(`Disabled plugin: ${f}`)}releasePluginResources(f,k){let U=this.releasePromises.get(f);if(U)return U;let $=this.releasePluginResourcesOnce(f,k);return this.releasePromises.set(f,$),$}async releasePluginResourcesOnce(f,k){let U=this.plugins.get(f);if(!U)return;try{await this.daemonRegistry.stopPlugin(f),this.logger.debug(`Stopped daemons for plugin: ${f}`)}catch(M){this.logger.error(`Failed to stop daemons for plugin: ${f}`,M)}let $=this.resourceScopes.get(f);if(this.resourceScopes.delete(f),$)try{await $.close(k)}catch(M){this.logger.error(`Failed to close resources for plugin ${f}`,M)}if(U.plugin.shutdown)try{await U.plugin.shutdown(),this.logger.debug(`Shutdown completed for plugin: ${f}`)}catch(M){this.logger.error(`Plugin shutdown failed for ${f}:`,M)}for(let M of this.daemonRegistry.getByPlugin(f))try{await this.daemonRegistry.unregister(M.name)}catch(A){this.logger.error(`Failed to unregister daemon ${M.name} for plugin ${f}`,A)}}}class Af{plugins;events;logger;constructor(f,k,U){this.plugins=f,this.events=k,this.logger=U.child("DependencyResolver")}async resolveInitializationOrder(f){this.logger.debug("Resolving plugin initialization order...");let k=Array.from(this.plugins.keys()),U=new Set,$=!0;while($&&U.size<k.length){$=!1;for(let w of k){if(U.has(w))continue;if(!this.plugins.get(w))continue;if(this.getUnmetDependencies(w).length===0)try{await f(w),U.add(w),$=!0}catch(m){let K=Y(m);this.logger.error(`Failed to initialize plugin ${w}: ${K}`),U.add(w),$=!0}}}let M=k.filter((w)=>!U.has(w));if(M.length>0){let w=M.join(", ");this.logger.error(`Failed to initialize plugins due to dependency issues: ${w}`);for(let u of M){let O=this.getUnmetDependencies(u);this.logger.error(`Plugin ${u} has unmet dependencies: ${O.join(", ")}`);let m=this.plugins.get(u);if(m)m.status=C.ERROR,m.error=new N(u,`Unmet dependencies: ${O.join(", ")}`);this.events.emit(_.ERROR,u,m?.error)}}let A=new Set;for(let[w,u]of this.plugins)if(u.status===C.INITIALIZED)A.add(w);return this.logger.debug(`Resolved ${A.size} of ${k.length} plugins`),{initialized:A,failed:M}}getUnmetDependencies(f){let k=this.plugins.get(f);if(!k)return[];let{dependencies:U}=k,$=[];for(let M of U){let A=this.plugins.get(M);if(!A){$.push(M);continue}if(A.status!==C.INITIALIZED)$.push(M)}return $}}class wf{logger;constructor(f){this.logger=f.child("CapabilityRegistrar")}async registerCapabilities(f,k,U){if(U.tools.length>0)f.registerTools(k,U.tools),this.logger.debug(`Registered ${U.tools.length} tools from ${k}`);if(U.resources.length>0)f.registerResources(k,U.resources),this.logger.debug(`Registered ${U.resources.length} resources from ${k}`);if(U.instructions)f.registerInstructions(k,U.instructions),this.logger.debug(`Registered instructions from ${k}`)}}async function Hf(f){let U=(await W.runPromise(W.all(f.map(($)=>W.either(W.tryPromise({try:$,catch:(M)=>M}))),{concurrency:"unbounded"}))).find(Bf.isLeft);if(U)throw U.left}class R{static instance=null;plugins=new Map;logger;events=new Zf;daemonRegistry;shell=null;initializedPluginIds=[];pluginLifecycle;dependencyResolver;capabilityRegistrar;static getInstance(f,k){return R.instance??=new R(f,k),R.instance}static resetInstance(){R.instance=null}static createFresh(f,k){return new R(f,k)}setShell(f){this.shell=f}constructor(f,k){this.logger=f.child("PluginManager"),this.events=new Zf,this.daemonRegistry=k,this.pluginLifecycle=new Mf(this.plugins,this.events,this.daemonRegistry,f),this.dependencyResolver=new Af(this.plugins,this.events,f),this.capabilityRegistrar=new wf(f)}registerPlugin(f){if(!f.id)throw new N("unknown","Registration failed: Plugin must have an id");if(this.logger.debug(`Registering plugin: ${f.id} (${f.version})`),this.plugins.has(f.id)){let M=this.plugins.get(f.id)?.plugin.version;throw new N(f.id,`Registration failed: Plugin is already registered with version ${M}`)}let k=f.dependencies??[],U={plugin:f,status:C.REGISTERED,dependencies:k};this.plugins.set(f.id,U),this.logger.debug(`Registered plugin: ${f.id} (${f.version})`),this.events.emit(_.REGISTERED,f.id,f)}async initializePlugins(f){this.logger.debug("Initializing plugins..."),this.initializedPluginIds=[];let k=await this.dependencyResolver.resolveInitializationOrder(async(U)=>{await this.initializePlugin(U,f)});this.logger.debug(`Initialized ${k.initialized.size} of ${this.plugins.size} plugins`)}async initializePlugin(f,k){if(!this.shell)throw new N(f,"Cannot initialize plugin: Shell not set. Call setShell() first.");let U=this.shell;try{let $=await this.pluginLifecycle.initializePlugin(f,U,k);await this.capabilityRegistrar.registerCapabilities(U,f,$),this.initializedPluginIds.push(f)}catch($){throw await this.pluginLifecycle.failPluginInitialization(f,$),$}}async readyPlugins(){this.logger.debug("Dispatching plugin ready hooks...");try{await Hf(this.initializedPluginIds.map((f)=>()=>this.pluginLifecycle.readyPlugin(f)))}catch(f){for(let k of this.initializedPluginIds){let U=this.plugins.get(k);if(U?.status===C.ERROR)await this.pluginLifecycle.failPluginInitialization(k,U.error??f)}throw f}}async startPluginDaemons(){this.logger.debug("Starting plugin daemons..."),await Hf(this.initializedPluginIds.map((f)=>()=>this.pluginLifecycle.startPluginDaemons(f)))}getPlugin(f){return this.plugins.get(f)?.plugin}getPluginStatus(f){return this.plugins.get(f)?.status}hasPlugin(f){return this.plugins.has(f)}isPluginInitialized(f){return this.plugins.get(f)?.status===C.INITIALIZED}getAllPluginIds(){return Array.from(this.plugins.keys())}getAllPlugins(){return new Map(this.plugins)}getFailedPlugins(){return Array.from(this.plugins.entries()).filter((f)=>f[1].status===C.ERROR&&f[1].error!==void 0).map(([f,k])=>({id:f,error:k.error}))}getPluginPackageName(f){return this.plugins.get(f)?.plugin.packageName}async disablePlugin(f){await this.pluginLifecycle.disablePlugin(f)}async shutdownPlugins(){let f=new Set;for(let k of[...this.initializedPluginIds].reverse())await this.disablePlugin(k),f.add(k);for(let k of[...this.plugins.keys()].reverse())if(!f.has(k))await this.disablePlugin(k)}on(f,k){this.events.on(f,k)}once(f,k){this.events.once(f,k)}off(f,k){this.events.off(f,k)}getEventEmitter(){return this.events}}var ex=x.enum(["generating","draft","queued","published","failed"]),Gf=x.enum(["generating","draft","queued","published","failed"]),rx=x.object({title:x.string(),slug:x.string().optional(),status:ex,publishedAt:x.string().datetime().optional(),excerpt:x.string(),author:x.string(),coverImageId:x.string().optional(),ogImageId:x.string().optional(),seriesName:x.string().optional(),seriesIndex:x.number().optional(),ogImage:x.string().url().optional(),ogDescription:x.string().optional(),twitterCard:x.enum(["summary","summary_large_image"]).optional(),canonicalUrl:x.string().url().optional(),atprotoUri:x.string().optional()}),Gw=rx.pick({title:!0,status:!0,publishedAt:!0,seriesName:!0,seriesIndex:!0}).extend({slug:x.string(),error:x.string().optional()}),ix=x.object({title:x.string(),status:Gf,publishedAt:x.string().datetime().optional(),seriesName:x.string().optional(),seriesIndex:x.number().optional(),slug:x.string(),error:x.string().optional()}),fk=x.object({title:x.string(),slug:x.string().optional(),status:Gf,publishedAt:x.string().datetime().optional(),excerpt:x.string(),author:x.string(),coverImageId:x.string().optional(),ogImageId:x.string().optional(),seriesName:x.string().optional(),seriesIndex:x.number().optional(),ogImage:x.string().url().optional(),ogDescription:x.string().optional(),twitterCard:x.enum(["summary","summary_large_image"]).optional(),canonicalUrl:x.string().url().optional(),atprotoUri:x.string().optional()}),xk=Lf.extend({entityType:x.literal("post"),metadata:ix}),qf=xk.extend({frontmatter:fk,body:x.string(),coverImageUrl:x.string().optional()}),qw=qf.extend({url:x.string().optional(),typeLabel:x.string().optional(),listUrl:x.string().optional(),listLabel:x.string().optional(),seriesUrl:x.string().optional(),coverImageUrl:x.string().optional(),ogImageUrl:x.string().optional(),coverImageWidth:x.number().optional(),coverImageHeight:x.number().optional(),coverImageSrcset:x.string().optional(),coverImageSizes:x.string().optional()}),ow=qf.extend({url:x.string(),typeLabel:x.string(),listUrl:x.string(),listLabel:x.string(),seriesUrl:x.string().optional(),coverImageUrl:x.string().optional(),ogImageUrl:x.string().optional(),coverImageWidth:x.number().optional(),coverImageHeight:x.number().optional(),coverImageSrcset:x.string().optional(),coverImageSizes:x.string().optional()});
3
+ export{Jf as d,gx as e,X as f,xf as g,Rf as h,Qf as i,rx as j,xk as k,qf as l,qw as m,ow as n};
4
+
5
+ //# debugId=57B45F5640DA165464756E2164756E21
6
+ //# sourceMappingURL=index-4r98bhg4.js.map
@@ -21,13 +21,13 @@
21
21
  "import type { Logger } from \"@brains/utils/logger\";\nimport type { IShell } from \"../interfaces\";\nimport { EventEmitter } from \"events\";\nimport type { Plugin, PluginRegistrationContext } from \"../interfaces\";\nimport type { IDaemonRegistry } from \"./daemon-types\";\nimport type {\n PluginManager as IPluginManager,\n PluginInfo,\n PluginManagerEventMap,\n} from \"./types\";\nimport { PluginStatus, PluginEvent } from \"./types\";\nimport { PluginError } from \"../errors\";\nimport { PluginLifecycle } from \"./plugin-lifecycle\";\nimport { DependencyResolver } from \"./dependency-resolver\";\nimport { CapabilityRegistrar } from \"./capability-registrar\";\nimport { Effect, Either } from \"@brains/utils/effect\";\n\nasync function runConcurrentPhase(\n operations: Array<() => Promise<void>>,\n): Promise<void> {\n const results = await Effect.runPromise(\n Effect.all(\n operations.map((operation) =>\n Effect.either(\n Effect.tryPromise({\n try: operation,\n catch: (error) => error,\n }),\n ),\n ),\n { concurrency: \"unbounded\" },\n ),\n );\n const firstFailure = results.find(Either.isLeft);\n if (firstFailure) throw firstFailure.left;\n}\n\n// Re-export enums for convenience\nexport { PluginEvent, PluginStatus } from \"./types\";\n\n/**\n * Plugin manager that handles plugin registration, initialization, and lifecycle\n * Implements Component Interface Standardization pattern\n */\nexport class PluginManager implements IPluginManager {\n private static instance: PluginManager | null = null;\n\n private plugins: Map<string, PluginInfo> = new Map();\n private logger: Logger;\n private events = new EventEmitter();\n private daemonRegistry: IDaemonRegistry;\n private shell: IShell | null = null;\n private initializedPluginIds: string[] = [];\n private pluginLifecycle: PluginLifecycle;\n private dependencyResolver: DependencyResolver;\n private capabilityRegistrar: CapabilityRegistrar;\n\n /**\n * Get the singleton instance of PluginManager\n */\n public static getInstance(\n logger: Logger,\n daemonRegistry: IDaemonRegistry,\n ): PluginManager {\n PluginManager.instance ??= new PluginManager(logger, daemonRegistry);\n return PluginManager.instance;\n }\n\n /**\n * Reset the singleton instance (primarily for testing)\n */\n public static resetInstance(): void {\n PluginManager.instance = null;\n }\n\n /**\n * Create a fresh instance without affecting the singleton\n */\n public static createFresh(\n logger: Logger,\n daemonRegistry: IDaemonRegistry,\n ): PluginManager {\n return new PluginManager(logger, daemonRegistry);\n }\n\n /**\n * Set the shell instance after it's created\n */\n public setShell(shell: IShell): void {\n this.shell = shell;\n }\n\n /**\n * Private constructor to enforce singleton pattern\n */\n private constructor(logger: Logger, daemonRegistry: IDaemonRegistry) {\n this.logger = logger.child(\"PluginManager\");\n this.events = new EventEmitter();\n this.daemonRegistry = daemonRegistry;\n\n // Initialize helper classes\n this.pluginLifecycle = new PluginLifecycle(\n this.plugins,\n this.events,\n this.daemonRegistry,\n logger,\n );\n this.dependencyResolver = new DependencyResolver(\n this.plugins,\n this.events,\n logger,\n );\n this.capabilityRegistrar = new CapabilityRegistrar(logger);\n }\n\n /**\n * Register a plugin with the system\n * This only registers the plugin but doesn't initialize it\n */\n public registerPlugin(plugin: Plugin): void {\n if (!plugin.id) {\n throw new PluginError(\n \"unknown\",\n \"Registration failed: Plugin must have an id\",\n );\n }\n\n this.logger.debug(`Registering plugin: ${plugin.id} (${plugin.version})`);\n\n // Check if plugin is already registered\n if (this.plugins.has(plugin.id)) {\n const existingInfo = this.plugins.get(plugin.id);\n const existingVersion = existingInfo?.plugin.version;\n\n throw new PluginError(\n plugin.id,\n `Registration failed: Plugin is already registered with version ${existingVersion}`,\n );\n }\n\n // Get dependencies or use empty array\n const dependencies = plugin.dependencies ?? [];\n\n // Store plugin info\n const pluginInfo: PluginInfo = {\n plugin,\n status: PluginStatus.REGISTERED,\n dependencies,\n };\n\n this.plugins.set(plugin.id, pluginInfo);\n this.logger.debug(`Registered plugin: ${plugin.id} (${plugin.version})`);\n\n // Emit registered event\n this.events.emit(PluginEvent.REGISTERED, plugin.id, plugin);\n }\n\n /**\n * Initialize all registered plugins in dependency order\n * Plugins with no dependencies are initialized first\n */\n public async initializePlugins(\n registrationContext?: PluginRegistrationContext,\n ): Promise<void> {\n this.logger.debug(\"Initializing plugins...\");\n\n this.initializedPluginIds = [];\n\n // Use dependency resolver to handle initialization order\n const result = await this.dependencyResolver.resolveInitializationOrder(\n async (pluginId) => {\n await this.initializePlugin(pluginId, registrationContext);\n },\n );\n\n this.logger.debug(\n `Initialized ${result.initialized.size} of ${this.plugins.size} plugins`,\n );\n }\n\n /**\n * Initialize a specific plugin\n */\n private async initializePlugin(\n pluginId: string,\n registrationContext?: PluginRegistrationContext,\n ): Promise<void> {\n if (!this.shell) {\n throw new PluginError(\n pluginId,\n \"Cannot initialize plugin: Shell not set. Call setShell() first.\",\n );\n }\n const shell = this.shell;\n\n try {\n const capabilities = await this.pluginLifecycle.initializePlugin(\n pluginId,\n shell,\n registrationContext,\n );\n\n await this.capabilityRegistrar.registerCapabilities(\n shell,\n pluginId,\n capabilities,\n );\n\n this.initializedPluginIds.push(pluginId);\n } catch (error) {\n await this.pluginLifecycle.failPluginInitialization(pluginId, error);\n throw error;\n }\n }\n\n /**\n * Dispatch ready hooks for all initialized plugins.\n *\n * Hooks run concurrently — no ordering guarantees between plugins in this\n * phase. Plugins that need cross-plugin coordination must use the message\n * bus.\n */\n public async readyPlugins(): Promise<void> {\n this.logger.debug(\"Dispatching plugin ready hooks...\");\n\n try {\n await runConcurrentPhase(\n this.initializedPluginIds.map(\n (id) => (): Promise<void> => this.pluginLifecycle.readyPlugin(id),\n ),\n );\n } catch (error) {\n for (const id of this.initializedPluginIds) {\n const pluginInfo = this.plugins.get(id);\n if (pluginInfo?.status === PluginStatus.ERROR) {\n await this.pluginLifecycle.failPluginInitialization(\n id,\n pluginInfo.error ?? error,\n );\n }\n }\n throw error;\n }\n }\n\n /**\n * Start daemons for all initialized plugins concurrently.\n */\n public async startPluginDaemons(): Promise<void> {\n this.logger.debug(\"Starting plugin daemons...\");\n\n await runConcurrentPhase(\n this.initializedPluginIds.map(\n (id) => (): Promise<void> =>\n this.pluginLifecycle.startPluginDaemons(id),\n ),\n );\n }\n\n /**\n * Get a registered plugin by ID\n */\n public getPlugin(id: string): Plugin | undefined {\n const pluginInfo = this.plugins.get(id);\n return pluginInfo?.plugin;\n }\n\n /**\n * Get plugin status by ID\n */\n public getPluginStatus(id: string): PluginStatus | undefined {\n const pluginInfo = this.plugins.get(id);\n return pluginInfo?.status;\n }\n\n /**\n * Check if a plugin is registered\n */\n public hasPlugin(id: string): boolean {\n return this.plugins.has(id);\n }\n\n /**\n * Check if a plugin is initialized\n */\n public isPluginInitialized(id: string): boolean {\n const pluginInfo = this.plugins.get(id);\n return pluginInfo?.status === PluginStatus.INITIALIZED;\n }\n\n /**\n * Get all registered plugin IDs\n */\n public getAllPluginIds(): string[] {\n return Array.from(this.plugins.keys());\n }\n\n /**\n * Get all plugins with their status\n */\n public getAllPlugins(): Map<string, PluginInfo> {\n return new Map(this.plugins);\n }\n\n /**\n * Get plugins that failed to initialize\n */\n public getFailedPlugins(): Array<{ id: string; error: Error }> {\n return Array.from(this.plugins.entries())\n .filter(\n (entry): entry is [string, PluginInfo & { error: Error }] =>\n entry[1].status === PluginStatus.ERROR &&\n entry[1].error !== undefined,\n )\n .map(([id, info]) => ({ id, error: info.error }));\n }\n\n /**\n * Get plugin package name by ID\n */\n public getPluginPackageName(pluginId: string): string | undefined {\n const pluginInfo = this.plugins.get(pluginId);\n return pluginInfo?.plugin.packageName;\n }\n\n /** Terminally release a plugin and its runtime resources. */\n public async disablePlugin(id: string): Promise<void> {\n await this.pluginLifecycle.disablePlugin(id);\n }\n\n /** Release plugins in reverse initialization order. */\n public async shutdownPlugins(): Promise<void> {\n const released = new Set<string>();\n for (const id of [...this.initializedPluginIds].reverse()) {\n await this.disablePlugin(id);\n released.add(id);\n }\n for (const id of [...this.plugins.keys()].reverse()) {\n if (!released.has(id)) await this.disablePlugin(id);\n }\n }\n\n /**\n * Subscribe to plugin events\n */\n public on<E extends PluginEvent>(\n event: E,\n listener: (...args: PluginManagerEventMap[E]) => void,\n ): void {\n this.events.on(event, listener);\n }\n\n /**\n * Subscribe to plugin events once\n */\n public once<E extends PluginEvent>(\n event: E,\n listener: (...args: PluginManagerEventMap[E]) => void,\n ): void {\n this.events.once(event, listener);\n }\n\n /**\n * Unsubscribe from plugin events\n */\n public off<E extends PluginEvent>(\n event: E,\n listener: (...args: PluginManagerEventMap[E]) => void,\n ): void {\n this.events.off(event, listener);\n }\n\n /**\n * Get the event emitter for external subscribers\n */\n public getEventEmitter(): EventEmitter {\n return this.events;\n }\n}\n",
22
22
  "import type { Plugin, PluginRegistrationContext } from \"../interfaces\";\n\n/**\n * Plugin Manager interface for managing plugin lifecycle\n */\nexport interface PluginManager {\n registerPlugin(plugin: Plugin): void;\n\n initializePlugins(context?: PluginRegistrationContext): Promise<void>;\n\n readyPlugins(): Promise<void>;\n\n startPluginDaemons(): Promise<void>;\n\n getPlugin(id: string): Plugin | undefined;\n\n getPluginStatus(id: string): PluginStatus | undefined;\n\n hasPlugin(id: string): boolean;\n\n isPluginInitialized(id: string): boolean;\n\n getAllPluginIds(): string[];\n\n getAllPlugins(): Map<string, PluginInfo>;\n\n getFailedPlugins(): Array<{ id: string; error: Error }>;\n\n disablePlugin(id: string): Promise<void>;\n\n shutdownPlugins(): Promise<void>;\n\n on<E extends PluginEvent>(\n event: E,\n listener: (...args: PluginManagerEventMap[E]) => void,\n ): void;\n\n once<E extends PluginEvent>(\n event: E,\n listener: (...args: PluginManagerEventMap[E]) => void,\n ): void;\n\n off<E extends PluginEvent>(\n event: E,\n listener: (...args: PluginManagerEventMap[E]) => void,\n ): void;\n}\n\n/**\n * Plugin status types\n */\nexport const PluginStatus = {\n REGISTERED: \"registered\",\n INITIALIZED: \"initialized\",\n ERROR: \"error\",\n DISABLED: \"disabled\",\n} as const;\nexport type PluginStatus = (typeof PluginStatus)[keyof typeof PluginStatus];\n\n/**\n * Plugin metadata with status\n */\nexport interface PluginInfo {\n plugin: Plugin;\n status: PluginStatus;\n error?: Error;\n dependencies: string[];\n}\n\n/**\n * Plugin lifecycle event types\n */\nexport const PluginEvent = {\n REGISTERED: \"plugin:registered\",\n BEFORE_INITIALIZE: \"plugin:before_initialize\",\n INITIALIZED: \"plugin:initialized\",\n ERROR: \"plugin:error\",\n DISABLED: \"plugin:disabled\",\n} as const;\nexport type PluginEvent = (typeof PluginEvent)[keyof typeof PluginEvent];\n\n/**\n * Typed event map for PluginManager events\n */\nexport interface PluginManagerEventMap {\n [PluginEvent.REGISTERED]: [pluginId: string, plugin: Plugin];\n [PluginEvent.BEFORE_INITIALIZE]: [pluginId: string, plugin: Plugin];\n [PluginEvent.INITIALIZED]: [pluginId: string, plugin: Plugin];\n [PluginEvent.ERROR]: [pluginId: string, error: Error];\n [PluginEvent.DISABLED]: [pluginId: string];\n}\n",
23
23
  "/**\n * Plugin error class with plugin ID tracking\n */\nexport class PluginError extends Error {\n public readonly pluginId: string;\n\n constructor(pluginId: string, message: string) {\n super(`Plugin ${pluginId}: ${message}`);\n this.name = \"PluginError\";\n this.pluginId = pluginId;\n }\n}\n",
24
- "import type { IMessageBus, MessageHandler } from \"@brains/messaging-service\";\nimport type { IAttachmentsNamespace } from \"../service/attachment-registry\";\nimport { Cause, Effect, Exit, Scope } from \"@brains/utils/effect\";\nimport type { IShell } from \"../interfaces\";\n\n/** Internal resource scope for one plugin registration. */\nexport class PluginResourceScope {\n private readonly scope: Scope.CloseableScope;\n private closePromise: Promise<void> | null = null;\n private closed = false;\n\n public constructor() {\n this.scope = Effect.runSync(Scope.make());\n }\n\n public addFinalizer(finalizer: () => void | Promise<void>): void {\n if (this.closed) {\n throw new Error(\"Cannot register a resource after plugin teardown\");\n }\n Effect.runSync(\n Scope.addFinalizer(\n this.scope,\n Effect.promise(async () => {\n await finalizer();\n }),\n ),\n );\n }\n\n public close(exit: Exit.Exit<unknown, unknown> = Exit.void): Promise<void> {\n this.closed = true;\n this.closePromise ??= this.closeScope(exit);\n return this.closePromise;\n }\n\n private async closeScope(exit: Exit.Exit<unknown, unknown>): Promise<void> {\n const result = await Effect.runPromiseExit(Scope.close(this.scope, exit));\n if (Exit.isFailure(result)) throw Cause.squash(result.cause);\n }\n}\n\n/**\n * Restrict plugin-visible resource acquisition to the plugin scope. The proxy\n * preserves the existing IShell API while owning every message subscription.\n */\nexport function createPluginScopedShell(\n shell: IShell,\n resources: PluginResourceScope,\n): IShell {\n const messageBus = shell.getMessageBus();\n const scopedMessageBus: IMessageBus = {\n send: (request) => messageBus.send(request),\n subscribe: <T = unknown, R = unknown>(\n type: string,\n handler: MessageHandler<T, R>,\n filter?: Parameters<IMessageBus[\"subscribe\"]>[2],\n ): (() => void) => {\n let active = true;\n const unsubscribe = messageBus.subscribe(type, handler, filter);\n const release = (): void => {\n if (!active) return;\n active = false;\n unsubscribe();\n };\n resources.addFinalizer(release);\n return release;\n },\n unsubscribe: (type, handler) => messageBus.unsubscribe(type, handler),\n };\n\n const attachments = shell.getAttachmentRegistry();\n const scopedAttachments: IAttachmentsNamespace = {\n ...attachments,\n register: (sourceEntityType, attachmentType, provider): (() => void) => {\n let active = true;\n const unregister = attachments.register(\n sourceEntityType,\n attachmentType,\n provider,\n );\n const release = (): void => {\n if (!active) return;\n active = false;\n unregister();\n };\n resources.addFinalizer(release);\n return release;\n },\n };\n\n const entityRegistry = shell.getEntityRegistry();\n const scopedEntityRegistry = new Proxy(entityRegistry, {\n get(target, property): unknown {\n const value = Reflect.get(target, property, target) as unknown;\n if (property === \"registerEntityType\" && typeof value === \"function\") {\n return (...args: unknown[]): unknown => {\n const result = Reflect.apply(value, target, args);\n const entityType = args[0];\n if (typeof entityType === \"string\") {\n resources.addFinalizer(() =>\n target.unregisterEntityType(entityType),\n );\n }\n return result;\n };\n }\n return typeof value === \"function\" ? value.bind(target) : value;\n },\n });\n\n const dataSourceRegistry = shell.getDataSourceRegistry();\n const scopedDataSourceRegistry = new Proxy(dataSourceRegistry, {\n get(target, property): unknown {\n const value = Reflect.get(target, property, target) as unknown;\n if (property === \"register\" && typeof value === \"function\") {\n return (...args: unknown[]): unknown => {\n const result = Reflect.apply(value, target, args);\n const dataSource = args[0];\n if (\n typeof dataSource === \"object\" &&\n dataSource !== null &&\n \"id\" in dataSource &&\n typeof dataSource.id === \"string\"\n ) {\n const id = dataSource.id.includes(\":\")\n ? dataSource.id\n : `shell:${dataSource.id}`;\n resources.addFinalizer(() => target.unregister(id));\n }\n return result;\n };\n }\n return typeof value === \"function\" ? value.bind(target) : value;\n },\n });\n\n const insightsRegistry = shell.getInsightsRegistry();\n const scopedInsightsRegistry = new Proxy(insightsRegistry, {\n get(target, property): unknown {\n const value = Reflect.get(target, property, target) as unknown;\n if (property === \"register\" && typeof value === \"function\") {\n return (...args: unknown[]): unknown => {\n const result = Reflect.apply(value, target, args);\n const insightType = args[0];\n if (typeof insightType === \"string\") {\n resources.addFinalizer(() => target.unregister(insightType));\n }\n return result;\n };\n }\n return typeof value === \"function\" ? value.bind(target) : value;\n },\n });\n\n return new Proxy(shell, {\n get(target, property): unknown {\n if (property === \"getMessageBus\") {\n return (): IMessageBus => scopedMessageBus;\n }\n if (property === \"getAttachmentRegistry\") {\n return (): IAttachmentsNamespace => scopedAttachments;\n }\n if (property === \"getEntityRegistry\") {\n return () => scopedEntityRegistry;\n }\n if (property === \"getDataSourceRegistry\") {\n return () => scopedDataSourceRegistry;\n }\n if (property === \"getInsightsRegistry\") {\n return () => scopedInsightsRegistry;\n }\n const value = Reflect.get(target, property, target) as unknown;\n return typeof value === \"function\" ? value.bind(target) : value;\n },\n });\n}\n",
24
+ "import type { IMessageBus, MessageHandler } from \"@brains/messaging-service\";\nimport type { IAttachmentsNamespace } from \"../service/attachment-registry\";\nimport { Cause, Effect, Exit, Scope } from \"@brains/utils/effect\";\nimport type { IShell } from \"../interfaces\";\n\ninterface PluginIngress {\n stopAdmission(): void;\n drain(): Promise<void>;\n}\n\n/** Internal resource scope for one plugin registration. */\nexport class PluginResourceScope {\n private readonly scope: Scope.CloseableScope;\n private readonly ingress = new Set<PluginIngress>();\n private closePromise: Promise<void> | null = null;\n private closed = false;\n\n public constructor() {\n this.scope = Effect.runSync(Scope.make());\n }\n\n public addFinalizer(finalizer: () => void | Promise<void>): void {\n if (this.closed) {\n throw new Error(\"Cannot register a resource after plugin teardown\");\n }\n Effect.runSync(\n Scope.addFinalizer(\n this.scope,\n Effect.promise(async () => {\n await finalizer();\n }),\n ),\n );\n }\n\n /** Register Promise-based ingress that must stop admission and drain on close. */\n public addIngress(ingress: PluginIngress): void {\n if (this.closed) {\n throw new Error(\"Cannot register ingress after plugin teardown\");\n }\n this.ingress.add(ingress);\n }\n\n public close(exit: Exit.Exit<unknown, unknown> = Exit.void): Promise<void> {\n this.closed = true;\n this.closePromise ??= this.closeScope(exit);\n return this.closePromise;\n }\n\n private async closeScope(exit: Exit.Exit<unknown, unknown>): Promise<void> {\n let firstFailure: unknown;\n let failed = false;\n const ingress = [...this.ingress].reverse();\n for (const entry of ingress) {\n try {\n entry.stopAdmission();\n } catch (error) {\n if (!failed) firstFailure = error;\n failed = true;\n }\n }\n\n const drainResults = await Promise.allSettled(\n ingress.map((entry) => Promise.resolve().then(() => entry.drain())),\n );\n this.ingress.clear();\n const drainFailure = drainResults.find(\n (result): result is PromiseRejectedResult => result.status === \"rejected\",\n );\n if (!failed && drainFailure) {\n firstFailure = drainFailure.reason;\n failed = true;\n }\n\n const scopeResult = await Effect.runPromiseExit(\n Scope.close(this.scope, exit),\n );\n if (!failed && Exit.isFailure(scopeResult)) {\n firstFailure = Cause.squash(scopeResult.cause);\n failed = true;\n }\n if (failed) throw firstFailure;\n }\n}\n\n/**\n * Restrict plugin-visible resource acquisition to the plugin scope. The proxy\n * preserves the existing IShell API while owning every message subscription.\n */\nexport function createPluginScopedShell(\n shell: IShell,\n resources: PluginResourceScope,\n): IShell {\n const messageBus = shell.getMessageBus();\n const messageSubscriptions = new Set<{\n type: string;\n originalHandler: unknown;\n stopAdmission(): void;\n }>();\n const scopedMessageBus: IMessageBus = {\n send: (request) => messageBus.send(request),\n subscribe: <T = unknown, R = unknown>(\n type: string,\n handler: MessageHandler<T, R>,\n filter?: Parameters<IMessageBus[\"subscribe\"]>[2],\n ): (() => void) => {\n let accepting = true;\n const inFlight = new Set<Promise<void>>();\n const scopedHandler: MessageHandler<T, R> = (message) => {\n if (!accepting) return { noop: true };\n\n // Message handlers have no cancellation contract. Track the admitted\n // Promise so plugin teardown drains it instead of interrupting work\n // that may already be mutating plugin-owned state.\n let settleAdmitted!: () => void;\n const admitted = new Promise<void>((resolve) => {\n settleAdmitted = resolve;\n });\n inFlight.add(admitted);\n const settle = (): void => {\n inFlight.delete(admitted);\n settleAdmitted();\n };\n\n let operation: Promise<Awaited<ReturnType<typeof handler>>>;\n try {\n operation = Promise.resolve(handler(message));\n } catch (error) {\n settle();\n throw error;\n }\n return operation.then(\n (result) => {\n settle();\n return result;\n },\n (error: unknown) => {\n settle();\n throw error;\n },\n );\n };\n const unsubscribe = messageBus.subscribe(type, scopedHandler, filter);\n const subscription = {\n type,\n originalHandler: handler,\n stopAdmission: (): void => {\n if (!accepting) return;\n accepting = false;\n unsubscribe();\n messageSubscriptions.delete(subscription);\n },\n };\n messageSubscriptions.add(subscription);\n try {\n resources.addIngress({\n stopAdmission: subscription.stopAdmission,\n drain: async (): Promise<void> => {\n await Promise.all(inFlight);\n },\n });\n } catch (error) {\n subscription.stopAdmission();\n throw error;\n }\n return subscription.stopAdmission;\n },\n unsubscribe: (type, handler): void => {\n const subscriptions = [...messageSubscriptions].filter(\n (subscription) =>\n subscription.type === type &&\n subscription.originalHandler === handler,\n );\n if (subscriptions.length === 0) {\n messageBus.unsubscribe(type, handler);\n return;\n }\n for (const subscription of subscriptions) {\n subscription.stopAdmission();\n }\n },\n };\n\n const attachments = shell.getAttachmentRegistry();\n const scopedAttachments: IAttachmentsNamespace = {\n ...attachments,\n register: (sourceEntityType, attachmentType, provider): (() => void) => {\n let active = true;\n const unregister = attachments.register(\n sourceEntityType,\n attachmentType,\n provider,\n );\n const release = (): void => {\n if (!active) return;\n active = false;\n unregister();\n };\n resources.addFinalizer(release);\n return release;\n },\n };\n\n const entityRegistry = shell.getEntityRegistry();\n const scopedEntityRegistry = new Proxy(entityRegistry, {\n get(target, property): unknown {\n const value = Reflect.get(target, property, target) as unknown;\n if (property === \"registerEntityType\" && typeof value === \"function\") {\n return (...args: unknown[]): unknown => {\n const result = Reflect.apply(value, target, args);\n const entityType = args[0];\n if (typeof entityType === \"string\") {\n resources.addFinalizer(() =>\n target.unregisterEntityType(entityType),\n );\n }\n return result;\n };\n }\n return typeof value === \"function\" ? value.bind(target) : value;\n },\n });\n\n const dataSourceRegistry = shell.getDataSourceRegistry();\n const scopedDataSourceRegistry = new Proxy(dataSourceRegistry, {\n get(target, property): unknown {\n const value = Reflect.get(target, property, target) as unknown;\n if (property === \"register\" && typeof value === \"function\") {\n return (...args: unknown[]): unknown => {\n const result = Reflect.apply(value, target, args);\n const dataSource = args[0];\n if (\n typeof dataSource === \"object\" &&\n dataSource !== null &&\n \"id\" in dataSource &&\n typeof dataSource.id === \"string\"\n ) {\n const id = dataSource.id.includes(\":\")\n ? dataSource.id\n : `shell:${dataSource.id}`;\n resources.addFinalizer(() => target.unregister(id));\n }\n return result;\n };\n }\n return typeof value === \"function\" ? value.bind(target) : value;\n },\n });\n\n const insightsRegistry = shell.getInsightsRegistry();\n const scopedInsightsRegistry = new Proxy(insightsRegistry, {\n get(target, property): unknown {\n const value = Reflect.get(target, property, target) as unknown;\n if (property === \"register\" && typeof value === \"function\") {\n return (...args: unknown[]): unknown => {\n const result = Reflect.apply(value, target, args);\n const insightType = args[0];\n if (typeof insightType === \"string\") {\n resources.addFinalizer(() => target.unregister(insightType));\n }\n return result;\n };\n }\n return typeof value === \"function\" ? value.bind(target) : value;\n },\n });\n\n return new Proxy(shell, {\n get(target, property): unknown {\n if (property === \"getMessageBus\") {\n return (): IMessageBus => scopedMessageBus;\n }\n if (property === \"getAttachmentRegistry\") {\n return (): IAttachmentsNamespace => scopedAttachments;\n }\n if (property === \"getEntityRegistry\") {\n return () => scopedEntityRegistry;\n }\n if (property === \"getDataSourceRegistry\") {\n return () => scopedDataSourceRegistry;\n }\n if (property === \"getInsightsRegistry\") {\n return () => scopedInsightsRegistry;\n }\n const value = Reflect.get(target, property, target) as unknown;\n return typeof value === \"function\" ? value.bind(target) : value;\n },\n });\n}\n",
25
25
  "import { getErrorMessage, toError } from \"@brains/utils/error\";\nimport type { Logger } from \"@brains/utils/logger\";\nimport type { IShell, PluginRegistrationContext } from \"../interfaces\";\nimport type { EventEmitter } from \"events\";\nimport type { PluginCapabilities } from \"../interfaces\";\nimport type { IDaemonRegistry } from \"./daemon-types\";\nimport type { PluginInfo } from \"./types\";\nimport { PluginStatus, PluginEvent } from \"./types\";\nimport { PluginError } from \"../errors\";\nimport { Exit } from \"@brains/utils/effect\";\nimport {\n createPluginScopedShell,\n PluginResourceScope,\n} from \"./plugin-resource-scope\";\n\n/**\n * Handles plugin initialization and terminal resource teardown.\n * Extracted from PluginManager for single responsibility.\n */\nexport class PluginLifecycle {\n private plugins: Map<string, PluginInfo>;\n private events: EventEmitter;\n private daemonRegistry: IDaemonRegistry;\n private logger: Logger;\n private readonly resourceScopes = new Map<string, PluginResourceScope>();\n private readonly releasePromises = new Map<string, Promise<void>>();\n\n constructor(\n plugins: Map<string, PluginInfo>,\n events: EventEmitter,\n daemonRegistry: IDaemonRegistry,\n logger: Logger,\n ) {\n this.plugins = plugins;\n this.events = events;\n this.daemonRegistry = daemonRegistry;\n this.logger = logger.child(\"PluginLifecycle\");\n }\n\n /**\n * Initialize a specific plugin\n */\n public async initializePlugin(\n pluginId: string,\n shell: IShell,\n registrationContext?: PluginRegistrationContext,\n ): Promise<PluginCapabilities> {\n const pluginInfo = this.plugins.get(pluginId);\n if (!pluginInfo) {\n throw new PluginError(\n pluginId,\n \"Registration failed: Plugin is not registered\",\n );\n }\n\n const plugin = pluginInfo.plugin;\n const resources = new PluginResourceScope();\n resources.addFinalizer(() =>\n shell.unregisterPluginCapabilities?.(pluginId),\n );\n resources.addFinalizer(() =>\n shell.getJobQueueService().unregisterPluginHandlers(pluginId),\n );\n this.resourceScopes.set(pluginId, resources);\n this.releasePromises.delete(pluginId);\n\n this.logger.debug(`Initializing plugin: ${pluginId}`);\n\n try {\n this.events.emit(PluginEvent.BEFORE_INITIALIZE, pluginId, plugin);\n const capabilities = await plugin.register(\n createPluginScopedShell(shell, resources),\n registrationContext,\n );\n\n pluginInfo.status = PluginStatus.INITIALIZED;\n this.logger.debug(`Initialized plugin: ${pluginId}`);\n\n // Daemons start in a later shell phase after all plugins have registered\n // and ready hooks have run.\n this.events.emit(PluginEvent.INITIALIZED, pluginId, plugin);\n\n return capabilities;\n } catch (error) {\n this.logger.error(\n `Error initializing plugin ${pluginId}: ${getErrorMessage(error)}`,\n );\n await this.failPluginInitialization(pluginId, error);\n throw error;\n }\n }\n\n /**\n * Dispatch ready hook for a plugin.\n */\n public async readyPlugin(pluginId: string): Promise<void> {\n const pluginInfo = this.plugins.get(pluginId);\n if (!pluginInfo) {\n throw new PluginError(pluginId, \"Ready failed: Plugin is not registered\");\n }\n\n if (pluginInfo.status !== PluginStatus.INITIALIZED) {\n this.logger.debug(\n `Skipping ready hook for non-initialized plugin: ${pluginId}`,\n );\n return;\n }\n\n try {\n await pluginInfo.plugin.ready?.();\n this.logger.debug(`Ready hook completed for plugin: ${pluginId}`);\n } catch (error) {\n const readyError = toError(error);\n pluginInfo.status = PluginStatus.ERROR;\n pluginInfo.error = readyError;\n try {\n this.events.emit(PluginEvent.ERROR, pluginId, readyError);\n } catch (eventError) {\n this.logger.error(\n `Plugin error listener failed for ${pluginId}`,\n eventError,\n );\n }\n throw readyError;\n }\n }\n\n /**\n * Start any daemons registered by a plugin.\n */\n public async startPluginDaemons(pluginId: string): Promise<void> {\n const pluginInfo = this.plugins.get(pluginId);\n if (pluginInfo?.status !== PluginStatus.INITIALIZED) {\n return;\n }\n\n try {\n await this.daemonRegistry.startPlugin(pluginId);\n this.logger.debug(`Started daemons for plugin: ${pluginId}`);\n } catch (error) {\n if (pluginInfo.plugin.requiresDaemonStartup?.()) {\n throw error;\n }\n this.logger.warn(\n `Daemon ${pluginId} failed to start: ${getErrorMessage(error)}`,\n );\n }\n }\n\n /** Mark a failed registration phase and release everything acquired so far. */\n public async failPluginInitialization(\n id: string,\n error: unknown,\n ): Promise<void> {\n const pluginInfo = this.plugins.get(id);\n if (!pluginInfo) return;\n\n const shouldEmit = pluginInfo.status !== PluginStatus.ERROR;\n const failure = toError(error);\n pluginInfo.status = PluginStatus.ERROR;\n pluginInfo.error = failure;\n await this.releasePluginResources(id, Exit.fail(error));\n\n if (shouldEmit) {\n try {\n this.events.emit(PluginEvent.ERROR, id, failure);\n } catch (eventError) {\n this.logger.error(`Plugin error listener failed for ${id}`, eventError);\n }\n }\n }\n\n /** Terminally release one plugin. Plugin instances are not re-enabled. */\n public async disablePlugin(id: string): Promise<void> {\n const pluginInfo = this.plugins.get(id);\n if (!pluginInfo) {\n this.logger.warn(`Cannot disable plugin ${id}: not registered`);\n return;\n }\n if (pluginInfo.status === PluginStatus.DISABLED) return;\n\n this.logger.debug(`Disabling plugin: ${id}`);\n const failed = pluginInfo.status === PluginStatus.ERROR;\n await this.releasePluginResources(id, Exit.void);\n\n const releasedPluginInfo = this.plugins.get(id);\n if (\n !failed &&\n releasedPluginInfo &&\n releasedPluginInfo.status !== PluginStatus.DISABLED\n ) {\n releasedPluginInfo.status = PluginStatus.DISABLED;\n this.events.emit(PluginEvent.DISABLED, id, releasedPluginInfo.plugin);\n }\n this.logger.debug(`Disabled plugin: ${id}`);\n }\n\n private releasePluginResources(\n id: string,\n exit: Exit.Exit<unknown, unknown>,\n ): Promise<void> {\n const existing = this.releasePromises.get(id);\n if (existing) return existing;\n\n const release = this.releasePluginResourcesOnce(id, exit);\n this.releasePromises.set(id, release);\n return release;\n }\n\n private async releasePluginResourcesOnce(\n id: string,\n exit: Exit.Exit<unknown, unknown>,\n ): Promise<void> {\n const pluginInfo = this.plugins.get(id);\n if (!pluginInfo) return;\n\n try {\n await this.daemonRegistry.stopPlugin(id);\n this.logger.debug(`Stopped daemons for plugin: ${id}`);\n } catch (error) {\n this.logger.error(`Failed to stop daemons for plugin: ${id}`, error);\n }\n\n // Remove shell-owned ingress and drain scoped resources before invoking\n // plugin shutdown, so no admitted callback can enter torn-down plugin code.\n const resources = this.resourceScopes.get(id);\n this.resourceScopes.delete(id);\n if (resources) {\n try {\n await resources.close(exit);\n } catch (error) {\n this.logger.error(`Failed to close resources for plugin ${id}`, error);\n }\n }\n\n if (pluginInfo.plugin.shutdown) {\n try {\n await pluginInfo.plugin.shutdown();\n this.logger.debug(`Shutdown completed for plugin: ${id}`);\n } catch (error) {\n this.logger.error(`Plugin shutdown failed for ${id}:`, error);\n }\n }\n\n for (const daemon of this.daemonRegistry.getByPlugin(id)) {\n try {\n await this.daemonRegistry.unregister(daemon.name);\n } catch (error) {\n this.logger.error(\n `Failed to unregister daemon ${daemon.name} for plugin ${id}`,\n error,\n );\n }\n }\n }\n}\n",
26
26
  "import { getErrorMessage } from \"@brains/utils/error\";\nimport type { Logger } from \"@brains/utils/logger\";\nimport type { EventEmitter } from \"events\";\nimport type { PluginInfo } from \"./types\";\nimport { PluginStatus, PluginEvent } from \"./types\";\nimport { PluginError } from \"../errors\";\n\n/**\n * Handles plugin dependency resolution and initialization order\n * Extracted from PluginManager for single responsibility\n */\nexport class DependencyResolver {\n private plugins: Map<string, PluginInfo>;\n private events: EventEmitter;\n private logger: Logger;\n\n constructor(\n plugins: Map<string, PluginInfo>,\n events: EventEmitter,\n logger: Logger,\n ) {\n this.plugins = plugins;\n this.events = events;\n this.logger = logger.child(\"DependencyResolver\");\n }\n\n /**\n * Get plugin IDs in dependency order for initialization\n * Returns array of plugin IDs that can be initialized, considering dependencies\n */\n public async resolveInitializationOrder(\n initializeCallback: (pluginId: string) => Promise<void>,\n ): Promise<{\n initialized: Set<string>;\n failed: string[];\n }> {\n this.logger.debug(\"Resolving plugin initialization order...\");\n\n // Get all plugin IDs\n const allPluginIds = Array.from(this.plugins.keys());\n\n // Track attempted plugins (to prevent infinite loops)\n const attempted = new Set<string>();\n\n // Try to initialize all plugins\n let progress = true;\n\n // Continue until all plugins are attempted or no progress can be made\n while (progress && attempted.size < allPluginIds.length) {\n progress = false;\n\n // Iterate through all plugins\n for (const pluginId of allPluginIds) {\n // Skip already attempted plugins\n if (attempted.has(pluginId)) {\n continue;\n }\n\n const pluginInfo = this.plugins.get(pluginId);\n if (!pluginInfo) {\n continue;\n }\n\n // Check if all dependencies are initialized (check actual status, not attempted)\n const unmetDependencies = this.getUnmetDependencies(pluginId);\n\n if (unmetDependencies.length === 0) {\n // All dependencies are satisfied, initialize this plugin\n try {\n await initializeCallback(pluginId);\n attempted.add(pluginId);\n progress = true;\n } catch (error) {\n // Mark as error and continue with others\n const errorMessage = getErrorMessage(error);\n this.logger.error(\n `Failed to initialize plugin ${pluginId}: ${errorMessage}`,\n );\n\n // Plugin status and error event are already set in initializePlugin\n // Consider this \"handled\" for dependency resolution\n attempted.add(pluginId);\n progress = true;\n }\n }\n }\n }\n\n // Check for plugins that couldn't be initialized due to dependency issues\n const uninitializedPlugins = allPluginIds.filter(\n (id) => !attempted.has(id),\n );\n\n if (uninitializedPlugins.length > 0) {\n const pluginList = uninitializedPlugins.join(\", \");\n this.logger.error(\n `Failed to initialize plugins due to dependency issues: ${pluginList}`,\n );\n\n // Report specific issues for each plugin\n for (const pluginId of uninitializedPlugins) {\n const unmetDependencies = this.getUnmetDependencies(pluginId);\n this.logger.error(\n `Plugin ${pluginId} has unmet dependencies: ${unmetDependencies.join(\", \")}`,\n );\n\n // Update plugin status\n const pluginInfo = this.plugins.get(pluginId);\n if (pluginInfo) {\n pluginInfo.status = PluginStatus.ERROR;\n pluginInfo.error = new PluginError(\n pluginId,\n `Unmet dependencies: ${unmetDependencies.join(\", \")}`,\n );\n }\n\n // Emit error event\n this.events.emit(PluginEvent.ERROR, pluginId, pluginInfo?.error);\n }\n }\n\n // Get successfully initialized plugins (those with INITIALIZED status)\n const initialized = new Set<string>();\n for (const [pluginId, pluginInfo] of this.plugins) {\n if (pluginInfo.status === PluginStatus.INITIALIZED) {\n initialized.add(pluginId);\n }\n }\n\n this.logger.debug(\n `Resolved ${initialized.size} of ${allPluginIds.length} plugins`,\n );\n\n return {\n initialized,\n failed: uninitializedPlugins,\n };\n }\n\n /**\n * Check if all dependencies of a plugin are met\n */\n public getUnmetDependencies(pluginId: string): string[] {\n const pluginInfo = this.plugins.get(pluginId);\n if (!pluginInfo) {\n return [];\n }\n\n const { dependencies } = pluginInfo;\n const unmetDependencies: string[] = [];\n\n for (const depId of dependencies) {\n // Check if dependency exists\n const dependency = this.plugins.get(depId);\n\n if (!dependency) {\n unmetDependencies.push(depId);\n continue;\n }\n\n // Check if dependency is initialized (not just registered)\n if (dependency.status !== PluginStatus.INITIALIZED) {\n unmetDependencies.push(depId);\n }\n }\n\n return unmetDependencies;\n }\n}\n",
27
27
  "import type { Logger } from \"@brains/utils/logger\";\nimport type { IShell } from \"../interfaces\";\nimport type { PluginCapabilities } from \"../interfaces\";\n\n/**\n * Handles registration of plugin capabilities (tools, resources)\n * Extracted from PluginManager for single responsibility\n */\nexport class CapabilityRegistrar {\n private logger: Logger;\n\n constructor(logger: Logger) {\n this.logger = logger.child(\"CapabilityRegistrar\");\n }\n\n /**\n * Register plugin capabilities using Shell convenience methods\n */\n public async registerCapabilities(\n shell: IShell,\n pluginId: string,\n capabilities: PluginCapabilities,\n ): Promise<void> {\n // Register tools\n if (capabilities.tools.length > 0) {\n shell.registerTools(pluginId, capabilities.tools);\n this.logger.debug(\n `Registered ${capabilities.tools.length} tools from ${pluginId}`,\n );\n }\n\n // Register resources\n if (capabilities.resources.length > 0) {\n shell.registerResources(pluginId, capabilities.resources);\n this.logger.debug(\n `Registered ${capabilities.resources.length} resources from ${pluginId}`,\n );\n }\n\n // Register instructions\n if (capabilities.instructions) {\n shell.registerInstructions(pluginId, capabilities.instructions);\n this.logger.debug(`Registered instructions from ${pluginId}`);\n }\n }\n}\n",
28
28
  "import { z } from \"@brains/utils/zod\";\nimport { baseEntityParserSchema } from \"@brains/plugins\";\n\n/**\n * Blog post status\n */\nexport type BlogPostStatus =\n \"generating\" | \"draft\" | \"queued\" | \"published\" | \"failed\";\n\nexport const blogPostStatusSchema: z.ZodType<BlogPostStatus, BlogPostStatus> =\n z.enum([\"generating\", \"draft\", \"queued\", \"published\", \"failed\"]);\n\nconst blogPostStatusParserSchema: z.ZodType<BlogPostStatus, BlogPostStatus> =\n z.enum([\"generating\", \"draft\", \"queued\", \"published\", \"failed\"]);\n\n/**\n * Blog post frontmatter schema (stored in content as YAML frontmatter)\n * Contains all blog post data for human editing\n */\nexport interface BlogPostFrontmatter {\n [key: string]: unknown;\n title: string;\n slug?: string | undefined;\n status: BlogPostStatus;\n publishedAt?: string | undefined;\n excerpt: string;\n author: string;\n coverImageId?: string | undefined;\n ogImageId?: string | undefined;\n seriesName?: string | undefined;\n seriesIndex?: number | undefined;\n ogImage?: string | undefined;\n ogDescription?: string | undefined;\n twitterCard?: \"summary\" | \"summary_large_image\" | undefined;\n canonicalUrl?: string | undefined;\n atprotoUri?: string | undefined;\n}\n\ntype TwitterCardSchema = z.ZodOptional<\n z.ZodEnum<{ summary: \"summary\"; summary_large_image: \"summary_large_image\" }>\n>;\n\ntype BlogPostFrontmatterSchema = z.ZodObject<{\n title: z.ZodString;\n slug: z.ZodOptional<z.ZodString>;\n status: z.ZodType<BlogPostStatus, BlogPostStatus>;\n publishedAt: z.ZodOptional<z.ZodString>;\n excerpt: z.ZodString;\n author: z.ZodString;\n coverImageId: z.ZodOptional<z.ZodString>;\n ogImageId: z.ZodOptional<z.ZodString>;\n seriesName: z.ZodOptional<z.ZodString>;\n seriesIndex: z.ZodOptional<z.ZodNumber>;\n ogImage: z.ZodOptional<z.ZodString>;\n ogDescription: z.ZodOptional<z.ZodString>;\n twitterCard: TwitterCardSchema;\n canonicalUrl: z.ZodOptional<z.ZodString>;\n atprotoUri: z.ZodOptional<z.ZodString>;\n}>;\n\nexport const blogPostFrontmatterSchema: BlogPostFrontmatterSchema = z.object({\n title: z.string(),\n slug: z.string().optional(), // Auto-generated from title if not provided\n status: blogPostStatusSchema,\n publishedAt: z.string().datetime().optional(),\n excerpt: z.string(),\n author: z.string(),\n coverImageId: z.string().optional(), // References an image entity by ID\n ogImageId: z.string().optional(), // References an image entity for social/OG metadata\n seriesName: z.string().optional(),\n seriesIndex: z.number().optional(),\n // SEO metadata (optional, with smart fallbacks)\n ogImage: z.string().url().optional(),\n ogDescription: z.string().optional(),\n twitterCard: z.enum([\"summary\", \"summary_large_image\"]).optional(),\n canonicalUrl: z.string().url().optional(),\n atprotoUri: z.string().optional(),\n});\n\n/**\n * Blog post metadata schema - derived from frontmatter\n * Only includes fields needed for fast DB queries/filtering\n * Using .pick() ensures metadata stays in sync with frontmatter\n */\nexport interface BlogPostMetadata {\n [key: string]: unknown;\n title: string;\n status: BlogPostStatus;\n publishedAt?: string | undefined;\n seriesName?: string | undefined;\n seriesIndex?: number | undefined;\n slug: string;\n error?: string | undefined;\n}\n\ntype BlogPostMetadataSchema = z.ZodObject<{\n title: z.ZodString;\n status: z.ZodType<BlogPostStatus, BlogPostStatus>;\n publishedAt: z.ZodOptional<z.ZodString>;\n seriesName: z.ZodOptional<z.ZodString>;\n seriesIndex: z.ZodOptional<z.ZodNumber>;\n slug: z.ZodString;\n error: z.ZodOptional<z.ZodString>;\n}>;\n\nexport const blogPostMetadataSchema: BlogPostMetadataSchema =\n blogPostFrontmatterSchema\n .pick({\n title: true,\n status: true,\n publishedAt: true,\n seriesName: true,\n seriesIndex: true,\n })\n .extend({\n // slug is required in metadata (auto-generated from title if not in frontmatter)\n slug: z.string(),\n error: z.string().optional(),\n });\n\nconst blogPostEntityMetadataParserSchema: BlogPostMetadataSchema = z.object({\n title: z.string(),\n status: blogPostStatusParserSchema,\n publishedAt: z.string().datetime().optional(),\n seriesName: z.string().optional(),\n seriesIndex: z.number().optional(),\n slug: z.string(),\n error: z.string().optional(),\n});\n\nconst blogPostFrontmatterParserSchema: BlogPostFrontmatterSchema = z.object({\n title: z.string(),\n slug: z.string().optional(),\n status: blogPostStatusParserSchema,\n publishedAt: z.string().datetime().optional(),\n excerpt: z.string(),\n author: z.string(),\n coverImageId: z.string().optional(),\n ogImageId: z.string().optional(),\n seriesName: z.string().optional(),\n seriesIndex: z.number().optional(),\n ogImage: z.string().url().optional(),\n ogDescription: z.string().optional(),\n twitterCard: z.enum([\"summary\", \"summary_large_image\"]).optional(),\n canonicalUrl: z.string().url().optional(),\n atprotoUri: z.string().optional(),\n});\n\n/**\n * Blog post entity schema (extends BaseEntity)\n * Content field contains markdown with frontmatter + blog post body\n * Metadata field duplicates key fields from frontmatter for fast queries\n */\nexport const blogPostSchema: ReturnType<\n typeof baseEntityParserSchema.extend<{\n entityType: z.ZodLiteral<\"post\">;\n metadata: BlogPostMetadataSchema;\n }>\n> = baseEntityParserSchema.extend({\n entityType: z.literal(\"post\"),\n metadata: blogPostEntityMetadataParserSchema,\n});\n\n/**\n * Blog post entity type\n */\nexport type BlogPost = z.output<typeof blogPostSchema>;\n\n/**\n * Blog post with parsed frontmatter data (returned by datasource)\n * Extends BlogPost with parsed frontmatter and body (markdown without frontmatter)\n * coverImageUrl is resolved from coverImageId and contains the actual image data URL\n */\nexport const blogPostWithDataSchema: ReturnType<\n typeof blogPostSchema.extend<{\n frontmatter: BlogPostFrontmatterSchema;\n body: z.ZodString;\n coverImageUrl: z.ZodOptional<z.ZodString>;\n }>\n> = blogPostSchema.extend({\n frontmatter: blogPostFrontmatterParserSchema,\n body: z.string(),\n coverImageUrl: z.string().optional(), // Resolved data URL from coverImageId\n});\n\nexport type BlogPostWithData = z.output<typeof blogPostWithDataSchema>;\n\n/**\n * Enriched blog post schema (used for validation)\n * url, typeLabel, listUrl, listLabel are optional to allow validation before enrichment\n * seriesUrl is optional and only present for posts that belong to a series\n */\nexport const enrichedBlogPostSchema: ReturnType<\n typeof blogPostWithDataSchema.extend<{\n url: z.ZodOptional<z.ZodString>;\n typeLabel: z.ZodOptional<z.ZodString>;\n listUrl: z.ZodOptional<z.ZodString>;\n listLabel: z.ZodOptional<z.ZodString>;\n seriesUrl: z.ZodOptional<z.ZodString>;\n coverImageUrl: z.ZodOptional<z.ZodString>;\n ogImageUrl: z.ZodOptional<z.ZodString>;\n coverImageWidth: z.ZodOptional<z.ZodNumber>;\n coverImageHeight: z.ZodOptional<z.ZodNumber>;\n coverImageSrcset: z.ZodOptional<z.ZodString>;\n coverImageSizes: z.ZodOptional<z.ZodString>;\n }>\n> = blogPostWithDataSchema.extend({\n url: z.string().optional(),\n typeLabel: z.string().optional(),\n listUrl: z.string().optional(),\n listLabel: z.string().optional(),\n seriesUrl: z.string().optional(),\n coverImageUrl: z.string().optional(),\n ogImageUrl: z.string().optional(),\n coverImageWidth: z.number().optional(),\n coverImageHeight: z.number().optional(),\n coverImageSrcset: z.string().optional(),\n coverImageSizes: z.string().optional(),\n});\n\n/**\n * Template blog post schema (used for template validation)\n * All enrichment fields are required - always present after enrichment\n */\nexport const templateBlogPostSchema: ReturnType<\n typeof blogPostWithDataSchema.extend<{\n url: z.ZodString;\n typeLabel: z.ZodString;\n listUrl: z.ZodString;\n listLabel: z.ZodString;\n seriesUrl: z.ZodOptional<z.ZodString>;\n coverImageUrl: z.ZodOptional<z.ZodString>;\n ogImageUrl: z.ZodOptional<z.ZodString>;\n coverImageWidth: z.ZodOptional<z.ZodNumber>;\n coverImageHeight: z.ZodOptional<z.ZodNumber>;\n coverImageSrcset: z.ZodOptional<z.ZodString>;\n coverImageSizes: z.ZodOptional<z.ZodString>;\n }>\n> = blogPostWithDataSchema.extend({\n url: z.string(),\n typeLabel: z.string(),\n listUrl: z.string(),\n listLabel: z.string(),\n seriesUrl: z.string().optional(), // URL to series detail page (if post is in a series)\n coverImageUrl: z.string().optional(),\n ogImageUrl: z.string().optional(),\n coverImageWidth: z.number().optional(),\n coverImageHeight: z.number().optional(),\n coverImageSrcset: z.string().optional(),\n coverImageSizes: z.string().optional(),\n});\n\n/**\n * Enriched blog post type (used by components)\n * All enrichment fields (url, typeLabel, listUrl, listLabel) are required\n */\nexport type EnrichedBlogPost = z.output<typeof templateBlogPostSchema>;\n"
29
29
  ],
30
- "mappings": "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",
31
- "debugId": "9659241960D29E0264756E2164756E21",
30
+ "mappings": "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",
31
+ "debugId": "57B45F5640DA165464756E2164756E21",
32
32
  "names": []
33
33
  }
@@ -1,6 +1,6 @@
1
1
  // @bun
2
- import{j as v,k as G}from"./index-53ey0fh9.js";import{ba as D}from"./index-e2c4agdd.js";import{Ea as z}from"./index-bs70092j.js";class H extends D{constructor(){super({entityType:"post",purpose:"A long-form published article, essay, or blog post written for an audience.",schema:G,frontmatterSchema:v,supportsCoverImage:!0})}toMarkdown(j){let q=this.extractBody(j.content);try{let x=this.parseFrontMatter(j.content,v),I={...x,slug:x.slug??j.metadata.slug};return this.buildMarkdown(q,I)}catch{return q}}fromMarkdown(j){let q=this.parseFrontMatter(j,v),x=q.slug??z(q.title);return{content:j,entityType:"post",metadata:{title:q.title,slug:x,status:q.status,publishedAt:q.publishedAt,seriesName:q.seriesName,seriesIndex:q.seriesIndex}}}parsePostFrontmatter(j){return this.parseFrontMatter(j.content,v)}createPostContent(j,q){return this.buildMarkdown(q,j)}buildStub(j){let q={title:j.title,slug:j.id,status:"generating",excerpt:"",author:"AI"};return{content:this.buildMarkdown("",q),metadata:{title:j.title,slug:j.id,status:"generating"}}}}var M=new H;
2
+ import{j as v,k as G}from"./index-4r98bhg4.js";import{ba as D}from"./index-e2c4agdd.js";import{Ea as z}from"./index-bs70092j.js";class H extends D{constructor(){super({entityType:"post",purpose:"A long-form published article, essay, or blog post written for an audience.",schema:G,frontmatterSchema:v,supportsCoverImage:!0})}toMarkdown(j){let q=this.extractBody(j.content);try{let x=this.parseFrontMatter(j.content,v),I={...x,slug:x.slug??j.metadata.slug};return this.buildMarkdown(q,I)}catch{return q}}fromMarkdown(j){let q=this.parseFrontMatter(j,v),x=q.slug??z(q.title);return{content:j,entityType:"post",metadata:{title:q.title,slug:x,status:q.status,publishedAt:q.publishedAt,seriesName:q.seriesName,seriesIndex:q.seriesIndex}}}parsePostFrontmatter(j){return this.parseFrontMatter(j.content,v)}createPostContent(j,q){return this.buildMarkdown(q,j)}buildStub(j){let q={title:j.title,slug:j.id,status:"generating",excerpt:"",author:"AI"};return{content:this.buildMarkdown("",q),metadata:{title:j.title,slug:j.id,status:"generating"}}}}var M=new H;
3
3
  export{H as a,M as b};
4
4
 
5
5
  //# debugId=6FBA410E0FE26B5E64756E2164756E21
6
- //# sourceMappingURL=index-z2sa7222.js.map
6
+ //# sourceMappingURL=index-whpvp633.js.map
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{c as K}from"./index-d5r8p459.js";import{j as J}from"./index-53ey0fh9.js";import"./index-w9z1vrm1.js";import"./index-fjp4jadv.js";import{Y as I}from"./index-e2c4agdd.js";import"./index-3097wt56.js";import"./index-bs70092j.js";import"./index-9s5cwp2s.js";import{Qa as j}from"./index-wvwq0pm7.js";import"./index-gmfgjnnw.js";var V=j.object({siteUrl:j.url(),title:j.string(),description:j.string(),language:j.string().optional(),copyright:j.string().optional()});class Y{logger;id="blog:rss";name="Blog RSS Feed DataSource";description="Generates RSS 2.0 feed XML from published blog posts";constructor(D){this.logger=D,this.logger.debug("RSSDataSource initialized")}async fetch(D,N,O){let v=V.parse(D),E=(await O.entityService.listEntities({entityType:"post",options:{limit:1000}})).filter((A)=>A.metadata.status==="published"&&A.metadata.publishedAt).map((A)=>{let H=I(A.content,J);return{...A,frontmatter:H.metadata,body:H.content}});this.logger.debug(`Generating RSS feed with ${E.length} posts`);let T={title:v.title,description:v.description,link:v.siteUrl,language:v.language??"en-us",...v.copyright&&{copyright:v.copyright}},U={xml:K(E,T)};return N.parse(U)}}export{Y as RSSDataSource};
2
+ import{c as K}from"./index-d5r8p459.js";import{j as J}from"./index-4r98bhg4.js";import"./index-w9z1vrm1.js";import"./index-fjp4jadv.js";import{Y as I}from"./index-e2c4agdd.js";import"./index-3097wt56.js";import"./index-bs70092j.js";import"./index-9s5cwp2s.js";import{Qa as j}from"./index-wvwq0pm7.js";import"./index-gmfgjnnw.js";var V=j.object({siteUrl:j.url(),title:j.string(),description:j.string(),language:j.string().optional(),copyright:j.string().optional()});class Y{logger;id="blog:rss";name="Blog RSS Feed DataSource";description="Generates RSS 2.0 feed XML from published blog posts";constructor(D){this.logger=D,this.logger.debug("RSSDataSource initialized")}async fetch(D,N,O){let v=V.parse(D),E=(await O.entityService.listEntities({entityType:"post",options:{limit:1000}})).filter((A)=>A.metadata.status==="published"&&A.metadata.publishedAt).map((A)=>{let H=I(A.content,J);return{...A,frontmatter:H.metadata,body:H.content}});this.logger.debug(`Generating RSS feed with ${E.length} posts`);let T={title:v.title,description:v.description,link:v.siteUrl,language:v.language??"en-us",...v.copyright&&{copyright:v.copyright}},U={xml:K(E,T)};return N.parse(U)}}export{Y as RSSDataSource};
3
3
 
4
4
  //# debugId=A37060E2D9903BE964756E2164756E21
5
- //# sourceMappingURL=rss-datasource-gm50xxrm.js.map
5
+ //# sourceMappingURL=rss-datasource-8wtv3mt5.js.map
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{Pa as r,Qa as o}from"./chunks/index-wvwq0pm7.js";import"./chunks/index-gmfgjnnw.js";function t(i){return i}var e={name:"@rizom/brain",version:"0.2.0-alpha.203",description:"Brain runtime + CLI \u2014 scaffold, run, and manage AI brain instances",keywords:["brain","ai","cli","mcp","agent","personal-ai","knowledge-management"],license:"Apache-2.0",author:"Yeehaa <yeehaa@rizom.ai> (https://rizom.ai)",bin:{brain:"./dist/brain.js"},bugs:"https://github.com/rizom-ai/brains/issues",dependencies:{"@clack/prompts":"^1.5.1","@modelcontextprotocol/sdk":"^1.29.0","@tailwindcss/postcss":"^4.3.1","@tailwindcss/typography":"^0.5.20",postcss:"^8.5.15",preact:"^10.27.2","preact-render-to-string":"^6.7.0",tailwindcss:"^4.3.1",zod:"^4.1.8"},devDependencies:{"@brains/app":"workspace:*","@brains/build-tools":"workspace:*","@brains/content-formatters":"workspace:*","@brains/deploy-support":"workspace:*","@brains/eslint-config":"workspace:*","@brains/mcp-service":"workspace:*","@brains/plugins":"workspace:*","@brains/ranger":"workspace:*","@brains/relay":"workspace:*","@brains/rover":"workspace:*","@brains/site-composition":"workspace:*","@brains/site-default":"workspace:*","@brains/site-personal":"workspace:*","@brains/site-professional":"workspace:*","@brains/theme-rizom":"workspace:*","@brains/typescript-config":"workspace:*","@brains/utils":"workspace:*","@rizom/theme-default":"workspace:*","@types/bun":"^1.3.14",rolldown:"^1.0.0","rolldown-plugin-dts":"^0.27.4",typescript:"^7.0.2"},engines:{bun:">=1.3.3"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./cli":"./dist/brain.js","./plugins":{types:"./dist/plugins.d.ts",import:"./dist/plugins.js"},"./entities":{types:"./dist/entities.d.ts",import:"./dist/entities.js"},"./services":{types:"./dist/services.d.ts",import:"./dist/services.js"},"./interfaces":{types:"./dist/interfaces.d.ts",import:"./dist/interfaces.js"},"./templates":{types:"./dist/templates.d.ts",import:"./dist/templates.js"},"./site":{types:"./dist/site.d.ts",import:"./dist/site.js"},"./themes":{types:"./dist/themes.d.ts",import:"./dist/themes.js"},"./deploy":{types:"./dist/deploy.d.ts",import:"./dist/deploy.js"},"./tsconfig.instance.json":"./tsconfig.instance.json"},files:["dist","templates","tsconfig.instance.json"],homepage:"https://github.com/rizom-ai/brains/tree/main/packages/brain-cli#readme",optionalDependencies:{"@bitwarden/sdk-napi":"^1.0.0","@libsql/client":"^0.17.4","@tailwindcss/oxide":"^4.1.4",lightningcss:"^1.29.2","playwright-core":"^1.61.0","react-devtools-core":"^7.0.1",sharp:"^0.35.1"},publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/rizom-ai/brains.git",directory:"packages/brain-cli"},scripts:{build:"bun scripts/build.ts","dev:start":"bun scripts/build.ts && bun dist/brain.js start",lint:"eslint . --max-warnings 0","lint:fix":"eslint . --max-warnings 0 --fix",prepublishOnly:"bun scripts/build.ts",test:"bun test",typecheck:"tsc --noEmit"},type:"module"};var n=e.version;export{o as z,t as defineBrain,r as ZodError,n as PLUGIN_API_VERSION};
2
+ import{Pa as r,Qa as o}from"./chunks/index-wvwq0pm7.js";import"./chunks/index-gmfgjnnw.js";function t(i){return i}var e={name:"@rizom/brain",version:"0.2.0-alpha.205",description:"Brain runtime + CLI \u2014 scaffold, run, and manage AI brain instances",keywords:["brain","ai","cli","mcp","agent","personal-ai","knowledge-management"],license:"Apache-2.0",author:"Yeehaa <yeehaa@rizom.ai> (https://rizom.ai)",bin:{brain:"./dist/brain.js"},bugs:"https://github.com/rizom-ai/brains/issues",dependencies:{"@clack/prompts":"^1.5.1","@modelcontextprotocol/sdk":"^1.29.0","@tailwindcss/postcss":"^4.3.1","@tailwindcss/typography":"^0.5.20",postcss:"^8.5.15",preact:"^10.27.2","preact-render-to-string":"^6.7.0",tailwindcss:"^4.3.1",zod:"^4.1.8"},devDependencies:{"@brains/app":"workspace:*","@brains/build-tools":"workspace:*","@brains/content-formatters":"workspace:*","@brains/deploy-support":"workspace:*","@brains/eslint-config":"workspace:*","@brains/mcp-service":"workspace:*","@brains/plugins":"workspace:*","@brains/ranger":"workspace:*","@brains/relay":"workspace:*","@brains/rover":"workspace:*","@brains/site-composition":"workspace:*","@brains/site-default":"workspace:*","@brains/site-personal":"workspace:*","@brains/site-professional":"workspace:*","@brains/theme-rizom":"workspace:*","@brains/typescript-config":"workspace:*","@brains/utils":"workspace:*","@rizom/theme-default":"workspace:*","@types/bun":"^1.3.14",rolldown:"^1.0.0","rolldown-plugin-dts":"^0.27.4",typescript:"^7.0.2"},engines:{bun:">=1.3.3"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./cli":"./dist/brain.js","./plugins":{types:"./dist/plugins.d.ts",import:"./dist/plugins.js"},"./entities":{types:"./dist/entities.d.ts",import:"./dist/entities.js"},"./services":{types:"./dist/services.d.ts",import:"./dist/services.js"},"./interfaces":{types:"./dist/interfaces.d.ts",import:"./dist/interfaces.js"},"./templates":{types:"./dist/templates.d.ts",import:"./dist/templates.js"},"./site":{types:"./dist/site.d.ts",import:"./dist/site.js"},"./themes":{types:"./dist/themes.d.ts",import:"./dist/themes.js"},"./deploy":{types:"./dist/deploy.d.ts",import:"./dist/deploy.js"},"./tsconfig.instance.json":"./tsconfig.instance.json"},files:["dist","templates","tsconfig.instance.json"],homepage:"https://github.com/rizom-ai/brains/tree/main/packages/brain-cli#readme",optionalDependencies:{"@bitwarden/sdk-napi":"^1.0.0","@libsql/client":"^0.17.4","@tailwindcss/oxide":"^4.1.4",lightningcss:"^1.29.2","playwright-core":"^1.61.0","react-devtools-core":"^7.0.1",sharp:"^0.35.1"},publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/rizom-ai/brains.git",directory:"packages/brain-cli"},scripts:{build:"bun scripts/build.ts","dev:start":"bun scripts/build.ts && bun dist/brain.js start",lint:"eslint . --max-warnings 0","lint:fix":"eslint . --max-warnings 0 --fix",prepublishOnly:"bun scripts/build.ts",test:"bun test",typecheck:"tsc --noEmit"},type:"module"};var n=e.version;export{o as z,t as defineBrain,r as ZodError,n as PLUGIN_API_VERSION};
3
3
 
4
- //# debugId=24CAB22BBA9EFEC564756E2164756E21
4
+ //# debugId=A23EAE8CE6407C2C64756E2164756E21
5
5
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -6,6 +6,6 @@
6
6
  "import packageJson from \"../package.json\" with { type: \"json\" };\n\n/**\n * Pre-v1 external plugin API marker.\n *\n * During alpha, the external plugin API compatibility marker tracks the\n * published @rizom/brain package version. Once the plugin API is declared\n * stable, this can move to an independent semver contract such as 1.0.0.\n */\nexport const PLUGIN_API_VERSION: string = packageJson.version;\n"
7
7
  ],
8
8
  "mappings": ";0FA0EO,UAAS,CAAW,CAAC,EAA8C,CACxE,OAAO,6yFClEF,IAAM,EAA6B,EAAY",
9
- "debugId": "24CAB22BBA9EFEC564756E2164756E21",
9
+ "debugId": "A23EAE8CE6407C2C64756E2164756E21",
10
10
  "names": []
11
11
  }