@rizom/brain 0.2.0-alpha.185 → 0.2.0-alpha.187
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 +818 -818
- package/dist/chunks/{blog-post-adapter-yjmhep1h.js → blog-post-adapter-2taww08k.js} +2 -2
- package/dist/chunks/index-2x2cw3f4.js.map +3 -3
- package/dist/chunks/{index-f7href49.js → index-nqbhg52b.js} +4 -4
- package/dist/chunks/{index-f7href49.js.map → index-nqbhg52b.js.map} +1 -1
- package/dist/chunks/{index-6ar5xerk.js → index-tt7hjc6h.js} +2 -2
- package/dist/chunks/{rss-datasource-wpssyma9.js → rss-datasource-21ffdrxs.js} +2 -2
- package/dist/entities.d.ts +8 -2
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/plugins.d.ts +8 -2
- package/dist/services.d.ts +8 -2
- package/dist/site.js +6 -6
- package/dist/site.js.map +1 -1
- package/dist/ui/cms-app.js +516 -208
- package/dist/ui/cms-app.js.map +5 -5
- package/package.json +1 -1
- /package/dist/chunks/{blog-post-adapter-yjmhep1h.js.map → blog-post-adapter-2taww08k.js.map} +0 -0
- /package/dist/chunks/{index-6ar5xerk.js.map → index-tt7hjc6h.js.map} +0 -0
- /package/dist/chunks/{rss-datasource-wpssyma9.js.map → rss-datasource-21ffdrxs.js.map} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{o as c}from"./index-1hvq9kyt.js";import{$ as G,D as R,E as i,L as jf,M as Tf,N as Y,O as S,P as T,T as X,U as Uf,V as n,X as a,Z as p,_ as wf,aa as Z,ba as P}from"./index-2x2cw3f4.js";import{na as v,oa as h,ta as Af,va as B}from"./index-ejwmsqv7.js";import{Pa as x}from"./index-awx4ta1w.js";var E=/^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 rx=x.object({id:x.string().regex(E),ref:x.object({kind:x.string().min(1),id:x.string().regex(E)}),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 z(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 $f(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 q(f){return Object.fromEntries(Object.entries(f).filter(([,k])=>k!==void 0))}function Mf(f){let k={...f};return delete k.status,delete k.error,q(k)}class uf extends c{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=$f(f);if(typeof k!=="object")return k;let $=z(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:B.START,message:`Starting ${this.jobTypeName}`});let $=await this.generate(f,U),M=z(f),A=M?this.applyPreallocatedEntityId(M,$):$;await this.reportProgress(U,{progress:B.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:B.COMPLETE,message:`${A.title??this.entityType} created successfully`}),{success:!0,entityId:w.entityId,...A.resultExtras}}catch($){if($ instanceof t)return await this.markPreallocatedStubFailed(f,$.message),await this.onGenerationFailure(f,$.message),{success:!1,error:$.message};let M=R($);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),Af.failure($)}}applyPreallocatedEntityId(f,k){let U={...k.metadata},$=k.content,M=k.resultExtras;if(typeof U.slug==="string")U.slug=f,$=G($,"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=Mf(p(f.content).frontmatter),$=Mf(f.metadata),M=q(k.metadata),A=p(k.content),w=q(A.frontmatter),F=q({...U,...M,...w});return this.context.entities.getEffectiveFrontmatterSchema(this.entityType)?.parse(F),{content:wf(F,A.content),metadata:{...$,...M}}}async markPreallocatedStubFailed(f,k){let U=z(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:G(G($.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=$f(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 t(f)}}class t extends Error{constructor(f){super(f);this.name="GenerationFailure"}}var Yf=x.object({kind:x.string().min(1),id:x.string().min(1)}),Xf=x.object({kind:x.string().min(1),filename:x.string().min(1),mediaType:x.string().min(1),sizeBytes:x.number().nonnegative().optional(),source:Yf.optional()}),Vk=x.array(Xf),mk=x.array(h),_k=x.array(v),Jk=x.record(x.string(),x.unknown());var jk=x.record(x.string(),x.unknown());var Yk=x.record(x.string(),x.unknown());var Zf=new Map([[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".webp","image/webp"],[".gif","image/gif"],[".pdf","application/pdf"]]),Zk=new Set(Zf.values());async function Sx(f){let{entityType:k,title:U,deriveId:$,regeneratePrompt:M,context:A}=f,w=$(U),F=await A.entityService.getEntity({entityType:k,id:w});if(!F||F.metadata.status==="generating")return U;A.logger.debug(`Entity ID collision: ${k}/${w}, asking AI for a new title`);let W=x.object({title:x.string().max(80).describe("A short, unique title (2-6 words)")}),{object:J}=await A.ai.generateObject(`The title "${U}" is already taken. ${M}`,W),H=J.title;return A.logger.debug(`AI suggested new title: "${H}"`),H}var g=X.extend({id:x.literal("brain-character"),entityType:x.literal("brain-character")}),s=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 Vf=x.record(x.string(),x.unknown());class l extends Z{constructor(){super({entityType:"brain-character",purpose:"The brain's own identity, character, and purpose (singleton).",schema:g,frontmatterSchema:s,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("",Vf.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("",Vf.parse(k))}}class j extends P{static instance=null;adapter=new l;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 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,"brain-character",U??j.getDefaultCharacter(),n("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=X.extend({id:x.literal("anchor-profile"),entityType:x.literal("anchor-profile")}),K=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 Ex=x.record(x.string(),x.unknown());class Q extends Z{constructor(){super({entityType:"anchor-profile",purpose:"The profile of the brain's anchor owner (singleton).",schema:I,frontmatterSchema:K,isSingleton:!0,hasBody:!0})}createProfileContent(f){let k=K.parse(f);return this.buildMarkdown("",k)}parseProfileBody(f,k){if(k){let{metadata:U,content:$}=a(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("",Ex.parse(k))}}var d=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)")}),mf=d.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 e(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 _f(f,k){let U=await e(f);return new Q().parseProfileBody(U,k)}class O extends P{static instance=null;adapter=new Q;static getDefaultProfile(){return{name:"Unknown",kind:"professional"}}static getInstance(f,k,U){return O.instance??=new O(f,k,U),O.instance}static resetInstance(){O.instance=null}static createFresh(f,k,U){return new O(f,k,U)}constructor(f,k,U){super(f,k,"anchor-profile",U??O.getDefaultProfile(),n("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 Jf=x.looseObject({id:x.string(),description:x.string(),name:x.string().optional(),tags:x.array(x.string()).optional().default([])});var zx=x.looseObject({uri:x.string(),params:x.record(x.string(),x.unknown()).optional()}),px=x.looseObject({name:x.string(),url:x.string(),description:x.string().optional(),skills:x.array(Jf).optional().default([]),capabilities:x.looseObject({extensions:x.array(zx).optional().default([])}).optional()});var tx=x.object({name:x.string(),description:x.string(),tags:x.array(x.string()),examples:x.array(x.string())});import{EventEmitter as Of}from"events";var L={REGISTERED:"registered",INITIALIZED:"initialized",ERROR:"error",DISABLED:"disabled"},m={REGISTERED:"plugin:registered",BEFORE_INITIALIZE:"plugin:before_initialize",INITIALIZED:"plugin:initialized",ERROR:"plugin:error",DISABLED:"plugin:disabled"};class _ extends Error{pluginId;constructor(f,k){super(`Plugin ${f}: ${k}`);this.name="PluginError",this.pluginId=f}}class r{scope;closePromise=null;closed=!1;constructor(){this.scope=T.runSync(S.make())}addFinalizer(f){if(this.closed)throw Error("Cannot register a resource after plugin teardown");T.runSync(S.addFinalizer(this.scope,T.promise(async()=>{await f()})))}close(f=Y.void){return this.closed=!0,this.closePromise??=this.closeScope(f),this.closePromise}async closeScope(f){let k=await T.runPromiseExit(S.close(this.scope,f));if(Y.isFailure(k))throw Tf.squash(k.cause)}}function Nf(f,k){let U=f.getMessageBus(),$={send:(u)=>U.send(u),subscribe:(u,C,b)=>{let V=!0,N=U.subscribe(u,C,b),o=()=>{if(!V)return;V=!1,N()};return k.addFinalizer(o),o},unsubscribe:(u,C)=>U.unsubscribe(u,C)},M=f.getAttachmentRegistry(),A={...M,register:(u,C,b)=>{let V=!0,N=M.register(u,C,b),o=()=>{if(!V)return;V=!1,N()};return k.addFinalizer(o),o}},w=f.getEntityRegistry(),F=new Proxy(w,{get(u,C){let b=Reflect.get(u,C,u);if(C==="registerEntityType"&&typeof b==="function")return(...V)=>{let N=Reflect.apply(b,u,V),o=V[0];if(typeof o==="string")k.addFinalizer(()=>u.unregisterEntityType(o));return N};return typeof b==="function"?b.bind(u):b}}),W=f.getDataSourceRegistry(),J=new Proxy(W,{get(u,C){let b=Reflect.get(u,C,u);if(C==="register"&&typeof b==="function")return(...V)=>{let N=Reflect.apply(b,u,V),o=V[0];if(typeof o==="object"&&o!==null&&"id"in o&&typeof o.id==="string"){let Kf=o.id.includes(":")?o.id:`shell:${o.id}`;k.addFinalizer(()=>u.unregister(Kf))}return N};return typeof b==="function"?b.bind(u):b}}),H=f.getInsightsRegistry(),Hf=new Proxy(H,{get(u,C){let b=Reflect.get(u,C,u);if(C==="register"&&typeof b==="function")return(...V)=>{let N=Reflect.apply(b,u,V),o=V[0];if(typeof o==="string")k.addFinalizer(()=>u.unregister(o));return N};return typeof b==="function"?b.bind(u):b}});return new Proxy(f,{get(u,C){if(C==="getMessageBus")return()=>$;if(C==="getAttachmentRegistry")return()=>A;if(C==="getEntityRegistry")return()=>F;if(C==="getDataSourceRegistry")return()=>J;if(C==="getInsightsRegistry")return()=>Hf;let b=Reflect.get(u,C,u);return typeof b==="function"?b.bind(u):b}})}class ff{plugins;events;daemonRegistry;logger;resourceScopes=new Map;releasedPluginIds=new Set;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 _(f,"Registration failed: Plugin is not registered");let M=$.plugin,A=new r;A.addFinalizer(()=>k.unregisterPluginCapabilities?.(f)),A.addFinalizer(()=>k.getJobQueueService().unregisterPluginHandlers(f)),this.resourceScopes.set(f,A),this.releasedPluginIds.delete(f),this.logger.debug(`Initializing plugin: ${f}`);try{this.events.emit(m.BEFORE_INITIALIZE,f,M);let w=await M.register(Nf(k,A),U);return $.status=L.INITIALIZED,this.logger.debug(`Initialized plugin: ${f}`),this.events.emit(m.INITIALIZED,f,M),w}catch(w){throw this.logger.error(`Error initializing plugin ${f}: ${R(w)}`),await this.failPluginInitialization(f,w),w}}async readyPlugin(f){let k=this.plugins.get(f);if(!k)throw new _(f,"Ready failed: Plugin is not registered");if(k.status!==L.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 $=i(U);k.status=L.ERROR,k.error=$;try{this.events.emit(m.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!==L.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: ${R(U)}`)}}async failPluginInitialization(f,k){let U=this.plugins.get(f);if(!U)return;let $=U.status!==L.ERROR,M=i(k);if(U.status=L.ERROR,U.error=M,await this.releasePluginResources(f,Y.fail(k)),$)try{this.events.emit(m.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===L.DISABLED)return;this.logger.debug(`Disabling plugin: ${f}`);let U=k.status===L.ERROR;if(await this.releasePluginResources(f,Y.void),!U)k.status=L.DISABLED,this.events.emit(m.DISABLED,f,k.plugin);this.logger.debug(`Disabled plugin: ${f}`)}async releasePluginResources(f,k){if(this.releasedPluginIds.has(f))return;this.releasedPluginIds.add(f);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)}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)}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)}}}class xf{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(J){let H=R(J);this.logger.error(`Failed to initialize plugin ${w}: ${H}`),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 F of M){let W=this.getUnmetDependencies(F);this.logger.error(`Plugin ${F} has unmet dependencies: ${W.join(", ")}`);let J=this.plugins.get(F);if(J)J.status=L.ERROR,J.error=new _(F,`Unmet dependencies: ${W.join(", ")}`);this.events.emit(m.ERROR,F,J?.error)}}let A=new Set;for(let[w,F]of this.plugins)if(F.status===L.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!==L.INITIALIZED)$.push(M)}return $}}class kf{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 Wf(f){let U=(await T.runPromise(T.all(f.map(($)=>T.either(T.tryPromise({try:$,catch:(M)=>M}))),{concurrency:"unbounded"}))).find(jf.isLeft);if(U)throw U.left}class D{static instance=null;plugins=new Map;logger;events=new Of;daemonRegistry;shell=null;initializedPluginIds=[];pluginLifecycle;dependencyResolver;capabilityRegistrar;static getInstance(f,k){return D.instance??=new D(f,k),D.instance}static resetInstance(){D.instance=null}static createFresh(f,k){return new D(f,k)}setShell(f){this.shell=f}constructor(f,k){this.logger=f.child("PluginManager"),this.events=new Of,this.daemonRegistry=k,this.pluginLifecycle=new ff(this.plugins,this.events,this.daemonRegistry,f),this.dependencyResolver=new xf(this.plugins,this.events,f),this.capabilityRegistrar=new kf(f)}registerPlugin(f){if(!f.id)throw new _("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 _(f.id,`Registration failed: Plugin is already registered with version ${M}`)}let k=f.dependencies??[],U={plugin:f,status:L.REGISTERED,dependencies:k};this.plugins.set(f.id,U),this.logger.debug(`Registered plugin: ${f.id} (${f.version})`),this.events.emit(m.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 _(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 Wf(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===L.ERROR)await this.pluginLifecycle.failPluginInitialization(k,U.error??f)}throw f}}async startPluginDaemons(){this.logger.debug("Starting plugin daemons..."),await Wf(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===L.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===L.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 cx=x.enum(["generating","draft","queued","published","failed"]),Df=x.enum(["generating","draft","queued","published","failed"]),yx=x.object({title:x.string(),slug:x.string().optional(),status:cx,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()}),Dw=yx.pick({title:!0,status:!0,publishedAt:!0,seriesName:!0,seriesIndex:!0}).extend({slug:x.string(),error:x.string().optional()}),vx=x.object({title:x.string(),status:Df,publishedAt:x.string().datetime().optional(),seriesName:x.string().optional(),seriesIndex:x.number().optional(),slug:x.string(),error:x.string().optional()}),hx=x.object({title:x.string(),slug:x.string().optional(),status:Df,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()}),gx=Uf.extend({entityType:x.literal("post"),metadata:vx}),Rf=gx.extend({frontmatter:hx,body:x.string(),coverImageUrl:x.string().optional()}),Rw=Rf.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()}),Hw=Rf.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{uf as d,Sx as e,
|
|
2
|
+
import{o as y}from"./index-1hvq9kyt.js";import{$ as q,D as R,E as i,L as jf,M as Tf,N as H,O as S,P as T,T as X,U as Uf,V as B,X as a,Z as p,_ as wf,aa as Z,ba as P}from"./index-2x2cw3f4.js";import{na as v,oa as g,ta as Af,va as G}from"./index-ejwmsqv7.js";import{Pa as x}from"./index-awx4ta1w.js";var E=/^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 rx=x.object({id:x.string().regex(E),ref:x.object({kind:x.string().min(1),id:x.string().regex(E)}),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 z(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 $f(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 l(f){return Object.fromEntries(Object.entries(f).filter(([,k])=>k!==void 0))}function Mf(f){let k={...f};return delete k.status,delete k.error,l(k)}class uf extends y{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=$f(f);if(typeof k!=="object")return k;let $=z(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:G.START,message:`Starting ${this.jobTypeName}`});let $=await this.generate(f,U),M=z(f),A=M?this.applyPreallocatedEntityId(M,$):$;await this.reportProgress(U,{progress:G.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:G.COMPLETE,message:`${A.title??this.entityType} created successfully`}),{success:!0,entityId:w.entityId,...A.resultExtras}}catch($){if($ instanceof c)return await this.markPreallocatedStubFailed(f,$.message),await this.onGenerationFailure(f,$.message),{success:!1,error:$.message};let M=R($);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),Af.failure($)}}applyPreallocatedEntityId(f,k){let U={...k.metadata},$=k.content,M=k.resultExtras;if(typeof U.slug==="string")U.slug=f,$=q($,"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=Mf(p(f.content).frontmatter),$=Mf(f.metadata),M=l(k.metadata),A=p(k.content),w=l(A.frontmatter),C=l({...U,...M,...w});return this.context.entities.getEffectiveFrontmatterSchema(this.entityType)?.parse(C),{content:wf(C,A.content),metadata:{...$,...M}}}async markPreallocatedStubFailed(f,k){let U=z(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:q(q($.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=$f(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 c(f)}}class c extends Error{constructor(f){super(f);this.name="GenerationFailure"}}var Hf=x.object({kind:x.string().min(1),id:x.string().min(1)}),Xf=x.object({kind:x.string().min(1),filename:x.string().min(1),mediaType:x.string().min(1),sizeBytes:x.number().nonnegative().optional(),source:Hf.optional()}),ok=x.array(Xf),mk=x.array(g),_k=x.array(v),Jk=x.record(x.string(),x.unknown());var jk=x.record(x.string(),x.unknown());var Hk=x.record(x.string(),x.unknown());var Zf=new Map([[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".webp","image/webp"],[".gif","image/gif"],[".pdf","application/pdf"]]),Zk=new Set(Zf.values());async function Sx(f){let{entityType:k,title:U,deriveId:$,regeneratePrompt:M,context:A}=f,w=$(U),C=await A.entityService.getEntity({entityType:k,id:w});if(!C||C.metadata.status==="generating")return U;A.logger.debug(`Entity ID collision: ${k}/${w}, asking AI for a new title`);let W=x.object({title:x.string().max(80).describe("A short, unique title (2-6 words)")}),{object:J}=await A.ai.generateObject(`The title "${U}" is already taken. ${M}`,W),K=J.title;return A.logger.debug(`AI suggested new title: "${K}"`),K}var h=X.extend({id:x.literal("brain-character"),entityType:x.literal("brain-character")}),s=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 of=x.record(x.string(),x.unknown());class n extends Z{constructor(){super({entityType:"brain-character",purpose:"The brain's own identity, character, and purpose (singleton).",schema:h,frontmatterSchema:s,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("",of.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("",of.parse(k))}}class j extends P{static instance=null;adapter=new n;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 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,"brain-character",U??j.getDefaultCharacter(),B("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=X.extend({id:x.literal("anchor-profile"),entityType:x.literal("anchor-profile")}),Q=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 Ex=x.record(x.string(),x.unknown());class Y extends Z{constructor(){super({entityType:"anchor-profile",purpose:"The profile of the brain's anchor owner (singleton).",schema:I,frontmatterSchema:Q,isSingleton:!0,hasBody:!0})}createProfileContent(f){let k=Q.parse(f);return this.buildMarkdown("",k)}parseProfileBody(f,k){if(k){let{metadata:U,content:$}=a(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("",Ex.parse(k))}}var d=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)")}),mf=d.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 e(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 _f(f,k){let U=await e(f);return new Y().parseProfileBody(U,k)}class O extends P{static instance=null;adapter=new Y;static getDefaultProfile(){return{name:"Unknown",kind:"professional"}}static getInstance(f,k,U){return O.instance??=new O(f,k,U),O.instance}static resetInstance(){O.instance=null}static createFresh(f,k,U){return new O(f,k,U)}constructor(f,k,U){super(f,k,"anchor-profile",U??O.getDefaultProfile(),B("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 Jf=x.looseObject({id:x.string(),description:x.string(),name:x.string().optional(),tags:x.array(x.string()).optional().default([])});var zx=x.looseObject({uri:x.string(),params:x.record(x.string(),x.unknown()).optional()}),px=x.looseObject({name:x.string(),url:x.string(),description:x.string().optional(),skills:x.array(Jf).optional().default([]),capabilities:x.looseObject({extensions:x.array(zx).optional().default([])}).optional()});var cx=x.object({name:x.string(),description:x.string(),tags:x.array(x.string()),examples:x.array(x.string())});import{EventEmitter as Of}from"events";var L={REGISTERED:"registered",INITIALIZED:"initialized",ERROR:"error",DISABLED:"disabled"},m={REGISTERED:"plugin:registered",BEFORE_INITIALIZE:"plugin:before_initialize",INITIALIZED:"plugin:initialized",ERROR:"plugin:error",DISABLED:"plugin:disabled"};class _ extends Error{pluginId;constructor(f,k){super(`Plugin ${f}: ${k}`);this.name="PluginError",this.pluginId=f}}class r{scope;closePromise=null;closed=!1;constructor(){this.scope=T.runSync(S.make())}addFinalizer(f){if(this.closed)throw Error("Cannot register a resource after plugin teardown");T.runSync(S.addFinalizer(this.scope,T.promise(async()=>{await f()})))}close(f=H.void){return this.closed=!0,this.closePromise??=this.closeScope(f),this.closePromise}async closeScope(f){let k=await T.runPromiseExit(S.close(this.scope,f));if(H.isFailure(k))throw Tf.squash(k.cause)}}function Nf(f,k){let U=f.getMessageBus(),$={send:(u)=>U.send(u),subscribe:(u,F,b)=>{let o=!0,N=U.subscribe(u,F,b),V=()=>{if(!o)return;o=!1,N()};return k.addFinalizer(V),V},unsubscribe:(u,F)=>U.unsubscribe(u,F)},M=f.getAttachmentRegistry(),A={...M,register:(u,F,b)=>{let o=!0,N=M.register(u,F,b),V=()=>{if(!o)return;o=!1,N()};return k.addFinalizer(V),V}},w=f.getEntityRegistry(),C=new Proxy(w,{get(u,F){let b=Reflect.get(u,F,u);if(F==="registerEntityType"&&typeof b==="function")return(...o)=>{let N=Reflect.apply(b,u,o),V=o[0];if(typeof V==="string")k.addFinalizer(()=>u.unregisterEntityType(V));return N};return typeof b==="function"?b.bind(u):b}}),W=f.getDataSourceRegistry(),J=new Proxy(W,{get(u,F){let b=Reflect.get(u,F,u);if(F==="register"&&typeof b==="function")return(...o)=>{let N=Reflect.apply(b,u,o),V=o[0];if(typeof V==="object"&&V!==null&&"id"in V&&typeof V.id==="string"){let Qf=V.id.includes(":")?V.id:`shell:${V.id}`;k.addFinalizer(()=>u.unregister(Qf))}return N};return typeof b==="function"?b.bind(u):b}}),K=f.getInsightsRegistry(),Kf=new Proxy(K,{get(u,F){let b=Reflect.get(u,F,u);if(F==="register"&&typeof b==="function")return(...o)=>{let N=Reflect.apply(b,u,o),V=o[0];if(typeof V==="string")k.addFinalizer(()=>u.unregister(V));return N};return typeof b==="function"?b.bind(u):b}});return new Proxy(f,{get(u,F){if(F==="getMessageBus")return()=>$;if(F==="getAttachmentRegistry")return()=>A;if(F==="getEntityRegistry")return()=>C;if(F==="getDataSourceRegistry")return()=>J;if(F==="getInsightsRegistry")return()=>Kf;let b=Reflect.get(u,F,u);return typeof b==="function"?b.bind(u):b}})}class ff{plugins;events;daemonRegistry;logger;resourceScopes=new Map;releasedPluginIds=new Set;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 _(f,"Registration failed: Plugin is not registered");let M=$.plugin,A=new r;A.addFinalizer(()=>k.unregisterPluginCapabilities?.(f)),A.addFinalizer(()=>k.getJobQueueService().unregisterPluginHandlers(f)),this.resourceScopes.set(f,A),this.releasedPluginIds.delete(f),this.logger.debug(`Initializing plugin: ${f}`);try{this.events.emit(m.BEFORE_INITIALIZE,f,M);let w=await M.register(Nf(k,A),U);return $.status=L.INITIALIZED,this.logger.debug(`Initialized plugin: ${f}`),this.events.emit(m.INITIALIZED,f,M),w}catch(w){throw this.logger.error(`Error initializing plugin ${f}: ${R(w)}`),await this.failPluginInitialization(f,w),w}}async readyPlugin(f){let k=this.plugins.get(f);if(!k)throw new _(f,"Ready failed: Plugin is not registered");if(k.status!==L.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 $=i(U);k.status=L.ERROR,k.error=$;try{this.events.emit(m.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!==L.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: ${R(U)}`)}}async failPluginInitialization(f,k){let U=this.plugins.get(f);if(!U)return;let $=U.status!==L.ERROR,M=i(k);if(U.status=L.ERROR,U.error=M,await this.releasePluginResources(f,H.fail(k)),$)try{this.events.emit(m.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===L.DISABLED)return;this.logger.debug(`Disabling plugin: ${f}`);let U=k.status===L.ERROR;if(await this.releasePluginResources(f,H.void),!U)k.status=L.DISABLED,this.events.emit(m.DISABLED,f,k.plugin);this.logger.debug(`Disabled plugin: ${f}`)}async releasePluginResources(f,k){if(this.releasedPluginIds.has(f))return;this.releasedPluginIds.add(f);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)}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)}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)}}}class xf{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(J){let K=R(J);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 C of M){let W=this.getUnmetDependencies(C);this.logger.error(`Plugin ${C} has unmet dependencies: ${W.join(", ")}`);let J=this.plugins.get(C);if(J)J.status=L.ERROR,J.error=new _(C,`Unmet dependencies: ${W.join(", ")}`);this.events.emit(m.ERROR,C,J?.error)}}let A=new Set;for(let[w,C]of this.plugins)if(C.status===L.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!==L.INITIALIZED)$.push(M)}return $}}class kf{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 Wf(f){let U=(await T.runPromise(T.all(f.map(($)=>T.either(T.tryPromise({try:$,catch:(M)=>M}))),{concurrency:"unbounded"}))).find(jf.isLeft);if(U)throw U.left}class D{static instance=null;plugins=new Map;logger;events=new Of;daemonRegistry;shell=null;initializedPluginIds=[];pluginLifecycle;dependencyResolver;capabilityRegistrar;static getInstance(f,k){return D.instance??=new D(f,k),D.instance}static resetInstance(){D.instance=null}static createFresh(f,k){return new D(f,k)}setShell(f){this.shell=f}constructor(f,k){this.logger=f.child("PluginManager"),this.events=new Of,this.daemonRegistry=k,this.pluginLifecycle=new ff(this.plugins,this.events,this.daemonRegistry,f),this.dependencyResolver=new xf(this.plugins,this.events,f),this.capabilityRegistrar=new kf(f)}registerPlugin(f){if(!f.id)throw new _("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 _(f.id,`Registration failed: Plugin is already registered with version ${M}`)}let k=f.dependencies??[],U={plugin:f,status:L.REGISTERED,dependencies:k};this.plugins.set(f.id,U),this.logger.debug(`Registered plugin: ${f.id} (${f.version})`),this.events.emit(m.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 _(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 Wf(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===L.ERROR)await this.pluginLifecycle.failPluginInitialization(k,U.error??f)}throw f}}async startPluginDaemons(){this.logger.debug("Starting plugin daemons..."),await Wf(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===L.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===L.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 yx=x.enum(["generating","draft","queued","published","failed"]),Df=x.enum(["generating","draft","queued","published","failed"]),tx=x.object({title:x.string(),slug:x.string().optional(),status:yx,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()}),Dw=tx.pick({title:!0,status:!0,publishedAt:!0,seriesName:!0,seriesIndex:!0}).extend({slug:x.string(),error:x.string().optional()}),vx=x.object({title:x.string(),status:Df,publishedAt:x.string().datetime().optional(),seriesName:x.string().optional(),seriesIndex:x.number().optional(),slug:x.string(),error:x.string().optional()}),gx=x.object({title:x.string(),slug:x.string().optional(),status:Df,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()}),hx=Uf.extend({entityType:x.literal("post"),metadata:vx}),Rf=hx.extend({frontmatter:gx,body:x.string(),coverImageUrl:x.string().optional()}),Rw=Rf.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()}),Kw=Rf.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{uf as d,Sx as e,Q as f,d as g,mf as h,_f as i,tx as j,hx as k,Rf as l,Rw as m,Kw as n};
|
|
4
4
|
|
|
5
|
-
//# debugId=
|
|
6
|
-
//# sourceMappingURL=index-
|
|
5
|
+
//# debugId=3BC1D24015A246BA64756E2164756E21
|
|
6
|
+
//# sourceMappingURL=index-nqbhg52b.js.map
|
|
@@ -28,6 +28,6 @@
|
|
|
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
30
|
"mappings": "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",
|
|
31
|
-
"debugId": "
|
|
31
|
+
"debugId": "3BC1D24015A246BA64756E2164756E21",
|
|
32
32
|
"names": []
|
|
33
33
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{j as v,k as G}from"./index-
|
|
2
|
+
import{j as v,k as G}from"./index-nqbhg52b.js";import{aa as D}from"./index-2x2cw3f4.js";import{Da as z}from"./index-d8kywpxf.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=30A48AC66CFBFF8764756E2164756E21
|
|
6
|
-
//# sourceMappingURL=index-
|
|
6
|
+
//# sourceMappingURL=index-tt7hjc6h.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{c as K}from"./index-d5r8p459.js";import{j as J}from"./index-
|
|
2
|
+
import{c as K}from"./index-d5r8p459.js";import{j as J}from"./index-nqbhg52b.js";import"./index-1hvq9kyt.js";import"./index-t6eyd566.js";import{X as I}from"./index-2x2cw3f4.js";import"./index-ejwmsqv7.js";import"./index-d8kywpxf.js";import"./index-spm9f4m4.js";import{Pa as j}from"./index-awx4ta1w.js";import"./index-pe6yc4tr.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=AD3C8DB4AF4B3EE664756E2164756E21
|
|
5
|
-
//# sourceMappingURL=rss-datasource-
|
|
5
|
+
//# sourceMappingURL=rss-datasource-21ffdrxs.js.map
|
package/dist/entities.d.ts
CHANGED
|
@@ -36,14 +36,20 @@ interface EntityJobOptions {
|
|
|
36
36
|
interface CreateEntityOptions extends EntityJobOptions {
|
|
37
37
|
deduplicateId?: boolean;
|
|
38
38
|
}
|
|
39
|
+
/** Options for updating an existing entity. */
|
|
40
|
+
interface UpdateEntityOptions extends EntityJobOptions {
|
|
41
|
+
/** Apply only while the stored entity still has this content hash. */
|
|
42
|
+
expectedContentHash?: string | undefined;
|
|
43
|
+
}
|
|
39
44
|
/**
|
|
40
45
|
* Result of an entity mutation that triggers an embedding job.
|
|
41
|
-
* When skipped is true,
|
|
46
|
+
* When skipped is true, no DB write, event, or embedding job was produced.
|
|
42
47
|
*/
|
|
43
48
|
interface EntityMutationResult {
|
|
44
49
|
entityId: string;
|
|
45
50
|
jobId: string;
|
|
46
51
|
skipped: boolean;
|
|
52
|
+
skipReason?: "content-conflict" | undefined;
|
|
47
53
|
}
|
|
48
54
|
/**
|
|
49
55
|
* Input for adapter-validated direct creation from finalized markdown.
|
|
@@ -352,7 +358,7 @@ interface CreateEntityFromMarkdownRequest {
|
|
|
352
358
|
}
|
|
353
359
|
interface UpdateEntityRequest<T extends BaseEntity> {
|
|
354
360
|
entity: T;
|
|
355
|
-
options?:
|
|
361
|
+
options?: UpdateEntityOptions | undefined;
|
|
356
362
|
}
|
|
357
363
|
interface DeleteEntityRequest {
|
|
358
364
|
entityType: string;
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{Oa as r,Pa as o}from"./chunks/index-awx4ta1w.js";import"./chunks/index-pe6yc4tr.js";function t(i){return i}var e={name:"@rizom/brain",version:"0.2.0-alpha.
|
|
2
|
+
import{Oa as r,Pa as o}from"./chunks/index-awx4ta1w.js";import"./chunks/index-pe6yc4tr.js";function t(i){return i}var e={name:"@rizom/brain",version:"0.2.0-alpha.187",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=
|
|
4
|
+
//# debugId=0A58FF461F84985C64756E2164756E21
|
|
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": "
|
|
9
|
+
"debugId": "0A58FF461F84985C64756E2164756E21",
|
|
10
10
|
"names": []
|
|
11
11
|
}
|
package/dist/plugins.d.ts
CHANGED
|
@@ -165,14 +165,20 @@ interface EntityJobOptions {
|
|
|
165
165
|
interface CreateEntityOptions extends EntityJobOptions {
|
|
166
166
|
deduplicateId?: boolean;
|
|
167
167
|
}
|
|
168
|
+
/** Options for updating an existing entity. */
|
|
169
|
+
interface UpdateEntityOptions extends EntityJobOptions {
|
|
170
|
+
/** Apply only while the stored entity still has this content hash. */
|
|
171
|
+
expectedContentHash?: string | undefined;
|
|
172
|
+
}
|
|
168
173
|
/**
|
|
169
174
|
* Result of an entity mutation that triggers an embedding job.
|
|
170
|
-
* When skipped is true,
|
|
175
|
+
* When skipped is true, no DB write, event, or embedding job was produced.
|
|
171
176
|
*/
|
|
172
177
|
interface EntityMutationResult {
|
|
173
178
|
entityId: string;
|
|
174
179
|
jobId: string;
|
|
175
180
|
skipped: boolean;
|
|
181
|
+
skipReason?: "content-conflict" | undefined;
|
|
176
182
|
}
|
|
177
183
|
/**
|
|
178
184
|
* Input for adapter-validated direct creation from finalized markdown.
|
|
@@ -478,7 +484,7 @@ interface CreateEntityFromMarkdownRequest {
|
|
|
478
484
|
}
|
|
479
485
|
interface UpdateEntityRequest<T extends BaseEntity> {
|
|
480
486
|
entity: T;
|
|
481
|
-
options?:
|
|
487
|
+
options?: UpdateEntityOptions | undefined;
|
|
482
488
|
}
|
|
483
489
|
interface DeleteEntityRequest {
|
|
484
490
|
entityType: string;
|
package/dist/services.d.ts
CHANGED
|
@@ -29,14 +29,20 @@ interface EntityJobOptions {
|
|
|
29
29
|
interface CreateEntityOptions extends EntityJobOptions {
|
|
30
30
|
deduplicateId?: boolean;
|
|
31
31
|
}
|
|
32
|
+
/** Options for updating an existing entity. */
|
|
33
|
+
interface UpdateEntityOptions extends EntityJobOptions {
|
|
34
|
+
/** Apply only while the stored entity still has this content hash. */
|
|
35
|
+
expectedContentHash?: string | undefined;
|
|
36
|
+
}
|
|
32
37
|
/**
|
|
33
38
|
* Result of an entity mutation that triggers an embedding job.
|
|
34
|
-
* When skipped is true,
|
|
39
|
+
* When skipped is true, no DB write, event, or embedding job was produced.
|
|
35
40
|
*/
|
|
36
41
|
interface EntityMutationResult {
|
|
37
42
|
entityId: string;
|
|
38
43
|
jobId: string;
|
|
39
44
|
skipped: boolean;
|
|
45
|
+
skipReason?: "content-conflict" | undefined;
|
|
40
46
|
}
|
|
41
47
|
/**
|
|
42
48
|
* Input for adapter-validated direct creation from finalized markdown.
|
|
@@ -184,7 +190,7 @@ interface CreateEntityFromMarkdownRequest {
|
|
|
184
190
|
}
|
|
185
191
|
interface UpdateEntityRequest<T extends BaseEntity> {
|
|
186
192
|
entity: T;
|
|
187
|
-
options?:
|
|
193
|
+
options?: UpdateEntityOptions | undefined;
|
|
188
194
|
}
|
|
189
195
|
interface DeleteEntityRequest {
|
|
190
196
|
entityType: string;
|