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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/brain.js +953 -952
  2. package/dist/chunks/blog-post-adapter-0fc8yd1s.js +5 -0
  3. package/dist/chunks/{index-k1dcptsq.js → index-72d2a6vf.js} +3 -3
  4. package/dist/chunks/{index-k1dcptsq.js.map → index-72d2a6vf.js.map} +1 -1
  5. package/dist/chunks/{index-5ecgasa8.js → index-8ej1r6tb.js} +3 -3
  6. package/dist/chunks/{index-5ecgasa8.js.map → index-8ej1r6tb.js.map} +1 -1
  7. package/dist/chunks/{index-twtkr2fy.js → index-8hmmeype.js} +4 -4
  8. package/dist/chunks/{index-twtkr2fy.js.map → index-8hmmeype.js.map} +1 -1
  9. package/dist/chunks/{index-nqjbkf5n.js → index-a3n899ev.js} +3 -3
  10. package/dist/chunks/{index-nqjbkf5n.js.map → index-a3n899ev.js.map} +1 -1
  11. package/dist/chunks/{index-9djq51zg.js → index-a4q0aknf.js} +3 -3
  12. package/dist/chunks/{index-9djq51zg.js.map → index-a4q0aknf.js.map} +1 -1
  13. package/dist/chunks/{index-6tjqzkys.js → index-aatpaped.js} +4 -4
  14. package/dist/chunks/{index-6tjqzkys.js.map → index-aatpaped.js.map} +1 -1
  15. package/dist/chunks/{index-zx3c2cws.js → index-b6k44k1d.js} +3 -3
  16. package/dist/chunks/{index-zx3c2cws.js.map → index-b6k44k1d.js.map} +3 -3
  17. package/dist/chunks/{index-23zvavvg.js → index-er159j9b.js} +3 -3
  18. package/dist/chunks/{index-23zvavvg.js.map → index-er159j9b.js.map} +1 -1
  19. package/dist/chunks/{index-vtwspye3.js → index-fxc39qy2.js} +3 -3
  20. package/dist/chunks/{index-vtwspye3.js.map → index-fxc39qy2.js.map} +1 -1
  21. package/dist/chunks/{index-srk70x0g.js → index-kga4gmhq.js} +3 -3
  22. package/dist/chunks/{index-srk70x0g.js.map → index-kga4gmhq.js.map} +1 -1
  23. package/dist/chunks/{index-q0dkt6nc.js → index-kvac8t2y.js} +3 -3
  24. package/dist/chunks/{index-q0dkt6nc.js.map → index-kvac8t2y.js.map} +1 -1
  25. package/dist/chunks/{index-57d1xga4.js → index-q5r12b3s.js} +4 -4
  26. package/dist/chunks/{index-57d1xga4.js.map → index-q5r12b3s.js.map} +1 -1
  27. package/dist/chunks/{rss-datasource-gj506d71.js → rss-datasource-gfgpmvf3.js} +3 -3
  28. package/dist/chunks/{rss-datasource-gj506d71.js.map → rss-datasource-gfgpmvf3.js.map} +1 -1
  29. package/dist/deploy.js +1 -1
  30. package/dist/entities.js +1 -1
  31. package/dist/index.js +2 -2
  32. package/dist/index.js.map +1 -1
  33. package/dist/interfaces.js +2 -2
  34. package/dist/interfaces.js.map +1 -1
  35. package/dist/plugins.js +2 -2
  36. package/dist/plugins.js.map +1 -1
  37. package/dist/services.js +1 -1
  38. package/dist/site.js +224 -224
  39. package/dist/site.js.map +7 -5
  40. package/dist/templates.js +2 -2
  41. package/dist/templates.js.map +1 -1
  42. package/dist/themes.js +1 -1
  43. package/package.json +1 -1
  44. package/dist/chunks/blog-post-adapter-bgre78xn.js +0 -5
  45. /package/dist/chunks/{blog-post-adapter-bgre78xn.js.map → blog-post-adapter-0fc8yd1s.js.map} +0 -0
@@ -5,6 +5,6 @@
5
5
  "import type {\n DataSource,\n DataSourceSchema,\n BaseDataSourceContext,\n IEntityService,\n BaseEntity,\n ListOptions,\n SortField,\n PaginationInfo,\n} from \"@brains/entity-service\";\nimport { buildPaginationInfo } from \"@brains/entity-service\";\nimport type { Logger } from \"@brains/utils/logger\";\nimport { z } from \"@brains/utils/zod\";\n\nexport type { SortField };\n\ninterface BaseQuerySchemaShape {\n id: z.ZodOptional<z.ZodString>;\n limit: z.ZodOptional<z.ZodNumber>;\n page: z.ZodOptional<z.ZodNumber>;\n pageSize: z.ZodOptional<z.ZodNumber>;\n baseUrl: z.ZodOptional<z.ZodString>;\n}\n\ntype BaseQuerySchema = ReturnType<typeof z.looseObject<BaseQuerySchemaShape>>;\n\n/**\n * Zod schema for the base query fields.\n * Subclasses can extend this with `.extend()` for additional fields.\n */\nexport const baseQuerySchema: BaseQuerySchema = z.looseObject({\n id: z.string().optional(),\n limit: z.number().optional(),\n page: z.number().optional(),\n pageSize: z.number().optional(),\n baseUrl: z.string().optional(),\n});\n\n/**\n * Zod schema for the outer datasource input (entityType + query).\n * Subclasses can extend the inner query via `baseQuerySchema.extend()`.\n */\ninterface BaseInputSchemaShape {\n entityType: z.ZodOptional<z.ZodString>;\n query: z.ZodOptional<typeof baseQuerySchema>;\n}\n\ntype BaseInputSchema = ReturnType<typeof z.looseObject<BaseInputSchemaShape>>;\n\nexport const baseInputSchema: BaseInputSchema = z.looseObject({\n entityType: z.string().optional(),\n query: baseQuerySchema.optional(),\n});\n\n/**\n * Parsed base query parameters.\n * Subclasses can extend this with additional fields via `parseQuery()`.\n */\nexport type BaseQuery = z.output<typeof baseQuerySchema>;\n\n/**\n * Navigation context for detail views (prev/next entities).\n */\nexport interface NavigationResult<T> {\n prev: T | null;\n next: T | null;\n}\n\n/**\n * Configuration for a BaseEntityDataSource.\n */\nexport interface EntityDataSourceConfig {\n /** Entity type to query (e.g., \"post\", \"deck\", \"project\") */\n entityType: string;\n /** Default sort order for list and navigation queries */\n defaultSort: SortField[];\n /** Default limit for list queries (defaults to 100) */\n defaultLimit?: number;\n /**\n * How to look up a single entity by the `id` query param.\n * - \"slug\": filter by `metadata.slug` (default)\n * - \"id\": direct `getEntity()` lookup\n */\n lookupField?: \"slug\" | \"id\";\n /** Enable prev/next navigation on detail views (defaults to false) */\n enableNavigation?: boolean;\n /** Max entities to fetch when resolving prev/next navigation (defaults to 1000) */\n navigationLimit?: number;\n}\n\n/**\n * Base class for entity datasources that follow the list/detail pattern.\n *\n * Provides:\n * - Query parsing with Zod validation\n * - Detail view: entity lookup (by slug or id), optional prev/next navigation\n * - List view: paginated fetch with sorting\n *\n * Subclasses implement:\n * - `transformEntity()` — convert raw entity to display format\n * - `buildListResult()` — shape the list response\n *\n * Optionally override:\n * - `buildDetailResult()` — shape the detail response (default throws; override\n * this OR override `fetch()` to handle detail views directly)\n *\n * For datasources with extra query cases (e.g., \"latest\", \"series\", \"nextInQueue\"),\n * override `fetch()` to handle those first, then call `super.fetch()` for the standard path.\n */\nexport abstract class BaseEntityDataSource<\n TEntity extends BaseEntity = BaseEntity,\n TTransformed = TEntity,\n> implements DataSource {\n protected readonly logger: Logger;\n abstract readonly id: string;\n abstract readonly name: string;\n abstract readonly description: string;\n\n protected abstract readonly config: EntityDataSourceConfig;\n\n constructor(logger: Logger) {\n this.logger = logger;\n }\n\n /**\n * Transform a raw entity into the display format used by templates.\n * Called for both list items and detail views.\n */\n protected abstract transformEntity(entity: TEntity): TTransformed;\n\n /**\n * Build the detail response object.\n * Override this if using the base class's standard detail path.\n * Datasources that fully override `fetch()` for detail views need not implement this.\n *\n * @param item - The transformed entity\n * @param navigation - Prev/next entities (null if navigation is disabled)\n */\n protected buildDetailResult(\n _item: TTransformed,\n _navigation: NavigationResult<TTransformed> | null,\n ): unknown {\n throw new Error(\n `${this.id}: buildDetailResult() not implemented. ` +\n `Override this method or override fetch() to handle detail views.`,\n );\n }\n\n /**\n * Build the list response object.\n * @param items - Transformed entities\n * @param pagination - Pagination info (null if no page param was provided)\n * @param query - The parsed query params (for passing through baseUrl, etc.)\n */\n protected abstract buildListResult(\n items: TTransformed[],\n pagination: PaginationInfo | null,\n query: BaseQuery,\n ): unknown;\n\n /**\n * Parse and validate the incoming query with Zod.\n * Override to support additional query parameters beyond the base set.\n * Use `baseQuerySchema.extend()` or `baseInputSchema` for validation.\n */\n protected parseQuery(query: unknown): {\n entityType: string;\n query: BaseQuery;\n } {\n const parsed = baseInputSchema.parse(query);\n return {\n entityType: parsed.entityType ?? this.config.entityType,\n query: parsed.query ?? {},\n };\n }\n\n /**\n * Standard fetch implementation: dispatch to detail or list based on query.id.\n *\n * Override to handle custom query cases before falling through to the standard path:\n * ```typescript\n * async fetch<T>(query, outputSchema, context) {\n * const params = this.parseQuery(query);\n * if (params.query.latest) {\n * return this.fetchLatest(outputSchema, context.entityService);\n * }\n * return super.fetch(query, outputSchema, context);\n * }\n * ```\n */\n async fetch<T>(\n query: unknown,\n outputSchema: DataSourceSchema<T>,\n context: BaseDataSourceContext,\n ): Promise<T> {\n const params = this.parseQuery(query);\n const entityService = context.entityService;\n\n if (params.query.id) {\n const result = await this.fetchDetail(params.query.id, entityService);\n return outputSchema.parse(\n this.buildDetailResult(result.item, result.navigation),\n );\n }\n\n const result = await this.fetchList(params.query, entityService);\n return outputSchema.parse(\n this.buildListResult(result.items, result.pagination, params.query),\n );\n }\n\n // ── Protected utilities (available to subclasses for custom cases) ──\n\n /**\n * Fetch a single entity and optionally resolve prev/next navigation.\n */\n protected async fetchDetail(\n id: string,\n entityService: IEntityService,\n ): Promise<{\n item: TTransformed;\n navigation: NavigationResult<TTransformed> | null;\n }> {\n const entity = await this.lookupEntity(id, entityService);\n const item = this.transformEntity(entity);\n\n let navigation: NavigationResult<TTransformed> | null = null;\n if (this.config.enableNavigation) {\n navigation = await this.resolveNavigation(entity, entityService);\n }\n\n return { item, navigation };\n }\n\n /**\n * Fetch a paginated list of entities.\n */\n protected async fetchList(\n query: BaseQuery,\n entityService: IEntityService,\n listOptions?: Partial<ListOptions>,\n ): Promise<{ items: TTransformed[]; pagination: PaginationInfo | null }> {\n const currentPage = query.page ?? 1;\n const itemsPerPage =\n query.pageSize ?? query.limit ?? this.config.defaultLimit ?? 100;\n const offset = (currentPage - 1) * itemsPerPage;\n\n const needsPagination = query.page !== undefined;\n\n // Run list and count queries in parallel when pagination is needed\n const [entities, totalItems] = await Promise.all([\n entityService.listEntities<TEntity>({\n entityType: this.config.entityType,\n options: {\n limit: itemsPerPage,\n offset,\n sortFields: this.config.defaultSort,\n ...listOptions,\n },\n }),\n needsPagination\n ? entityService.countEntities({\n entityType: this.config.entityType,\n options: listOptions?.filter\n ? { filter: listOptions.filter }\n : undefined,\n })\n : Promise.resolve(0),\n ]);\n\n const items = entities.map((e) => this.transformEntity(e));\n\n const pagination = needsPagination\n ? buildPaginationInfo(totalItems, currentPage, itemsPerPage)\n : null;\n\n return { items, pagination };\n }\n\n /**\n * Resolve prev/next navigation for a given entity within the sorted list.\n */\n protected async resolveNavigation(\n entity: TEntity,\n entityService: IEntityService,\n sortFields?: SortField[],\n ): Promise<NavigationResult<TTransformed>> {\n const limit = this.config.navigationLimit ?? 1000;\n const allEntities = await entityService.listEntities<TEntity>({\n entityType: this.config.entityType,\n options: {\n limit,\n sortFields: sortFields ?? this.config.defaultSort,\n },\n });\n\n const currentIndex = allEntities.findIndex((e) => e.id === entity.id);\n const prevEntity =\n currentIndex > 0 ? allEntities[currentIndex - 1] : undefined;\n const nextEntity =\n currentIndex < allEntities.length - 1\n ? allEntities[currentIndex + 1]\n : undefined;\n const prev = prevEntity ? this.transformEntity(prevEntity) : null;\n const next = nextEntity ? this.transformEntity(nextEntity) : null;\n\n return { prev, next };\n }\n\n /**\n * Look up a single entity by id or slug.\n * Uses `config.lookupField` to determine the strategy.\n */\n protected async lookupEntity(\n id: string,\n entityService: IEntityService,\n ): Promise<TEntity> {\n if (this.config.lookupField === \"id\") {\n const entity = await entityService.getEntity<TEntity>({\n entityType: this.config.entityType,\n id: id,\n });\n if (!entity) {\n throw new Error(`${this.config.entityType} not found: ${id}`);\n }\n return entity;\n }\n\n // Default: lookup by slug in metadata\n const entities = await entityService.listEntities<TEntity>({\n entityType: this.config.entityType,\n options: {\n filter: { metadata: { slug: id } },\n limit: 1,\n },\n });\n\n const entity = entities[0];\n if (!entity) {\n throw new Error(`${this.config.entityType} not found with slug: ${id}`);\n }\n return entity;\n }\n}\n"
6
6
  ],
7
7
  "mappings": "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",
8
- "debugId": "644A3905F5F196DB64756E2164756E21",
8
+ "debugId": "6DC9B119EE2FE4CA64756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -1,6 +1,6 @@
1
1
  // @bun
2
- import{m as a}from"./index-9djq51zg.js";import{$ as q,B as Y,C as kf,J as Gf,L as Yf,M as Z,N as s,O as R,S as K,T as Nf,U as u,W as Uf,Y as t,Z as Of,_ as E,aa as n}from"./index-k1dcptsq.js";import{Ea as r,Fa as i,Na as Tf,Ra as c,Xa as P}from"./index-zx3c2cws.js";import{Za as U}from"./index-57d1xga4.js";var zf={pluginsRegistered:"system:plugins:registered",initialSyncCompleted:"sync:initial:completed",shellReady:"system:shell:ready"};var I=/^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 GU=U.object({id:U.string().regex(I),ref:U.object({kind:U.string().min(1),id:U.string().regex(I)}),filename:U.string().min(1),mediaType:U.string().min(1),sizeBytes:U.number().nonnegative(),createdAt:U.string().datetime(),metadata:U.record(U.string(),U.unknown()).optional()});function g(f){if(typeof f!=="object"||f===null||!("entityId"in f))return;let x=f.entityId;return typeof x==="string"&&x.trim().length>0?x.trim():void 0}function bf(f){if(typeof f!=="object"||f===null||!("coverImage"in f))return;let x=f.coverImage;if(x===void 0||x===!1)return;if(x===!0)return{generate:!0};if(typeof x!=="object"||x===null)return;let A=x;if(A.generate===!1)return;let k=A.prompt?.trim();return{generate:!0,...k&&{prompt:k}}}function S(f){return Object.fromEntries(Object.entries(f).filter(([,x])=>x!==void 0))}function Vf(f){let x={...f};return delete x.status,delete x.error,S(x)}class Ff extends a{context;entityType;constructor(f,x,A){super(f,{schema:A.schema,jobTypeName:A.jobTypeName});this.context=x,this.entityType=A.entityType}async afterCreate(f,x,A,k){}async onGenerationFailure(f,x){}validateAndParse(f){let x=super.validateAndParse(f);if(!x)return null;let A=bf(f);if(typeof x!=="object")return x;let k=g(f);if(!A&&!k)return x;return Object.assign(x,{...A&&{coverImage:A},...k&&{entityId:k}}),x}async process(f,x,A){try{await this.reportProgress(A,{progress:P.START,message:`Starting ${this.jobTypeName}`});let k=await this.generate(f,A),$=g(f),M=$?this.applyPreallocatedEntityId($,k):k;await this.reportProgress(A,{progress:P.SAVE,message:`Saving ${this.entityType} to database`});let L=$?await this.updatePreallocatedStub($,M):await this.context.entityService.createEntity({entity:{id:M.id,entityType:this.entityType,content:M.content,metadata:M.metadata},options:M.createOptions});return await this.afterCreate(f,L.entityId,A,M),await this.enqueueGenericCoverImageIfRequested(f,L.entityId,A,M),await this.reportProgress(A,{progress:P.COMPLETE,message:`${M.title??this.entityType} created successfully`}),{success:!0,entityId:L.entityId,...M.resultExtras}}catch(k){if(k instanceof d)return await this.markPreallocatedStubFailed(f,k.message),await this.onGenerationFailure(f,k.message),{success:!1,error:k.message};let $=Y(k);return this.logger.error(`${this.jobTypeName} job failed`,{error:k,jobId:x,data:this.summarizeDataForLog(f)}),await this.markPreallocatedStubFailed(f,$),await this.onGenerationFailure(f,$),Tf.failure(k)}}applyPreallocatedEntityId(f,x){let A={...x.metadata},k=x.content,$=x.resultExtras;if(typeof A.slug==="string")A.slug=f,k=E(k,"slug",f),$={...$,slug:f};return{...x,id:f,content:k,metadata:A,...$&&{resultExtras:$}}}async updatePreallocatedStub(f,x){let A=await this.context.entityService.getEntity({entityType:this.entityType,id:f,visibilityScope:"restricted"});if(!A)throw Error(`Pre-allocated entity stub not found: ${this.entityType}/${f}`);let k=this.mergeStubWithGenerated(A,x);return this.context.entityService.updateEntity({entity:{...A,id:f,entityType:this.entityType,content:k.content,metadata:k.metadata}})}mergeStubWithGenerated(f,x){let A=Vf(t(f.content).frontmatter),k=Vf(f.metadata),$=S(x.metadata),M=t(x.content),L=S(M.frontmatter),V=S({...A,...$,...L});return this.context.entities.getEffectiveFrontmatterSchema(this.entityType)?.parse(V),{content:Of(V,M.content),metadata:{...k,...$}}}async markPreallocatedStubFailed(f,x){let A=g(f);if(!A)return;try{let k=await this.context.entityService.getEntity({entityType:this.entityType,id:A,visibilityScope:"restricted"});if(!k)return;await this.context.entityService.updateEntity({entity:{...k,content:E(E(k.content,"status","failed"),"error",x),metadata:{...k.metadata,status:"failed",error:x}}})}catch(k){this.logger.warn("Failed to mark generation stub as failed",{error:k,entityId:A,entityType:this.entityType})}}async enqueueGenericCoverImageIfRequested(f,x,A,k){let $=bf(f);if(!$)return;await this.reportProgress(A,{progress:90,message:"Queueing cover image generation"});let M=k.title??x;await this.context.jobs.enqueue({type:c.generate,data:{prompt:$.prompt??`Editorial cover image for: ${M}. `,title:`${M} Cover`,aspectRatio:"16:9",targetEntityType:this.entityType,targetEntityId:x,entityTitle:M,entityContent:k.content},toolContext:{interfaceType:"job",actor:{kind:"service",serviceId:"generation-job-handler"}}})}failEarly(f){throw new d(f)}}class d extends Error{constructor(f){super(f);this.name="GenerationFailure"}}var nf=U.object({kind:U.string().min(1),id:U.string().min(1)}),lf=U.object({kind:U.string().min(1),filename:U.string().min(1),mediaType:U.string().min(1),sizeBytes:U.number().nonnegative().optional(),source:nf.optional()}),IU=U.array(lf),gU=U.array(i),tU=U.array(r),dU=U.record(U.string(),U.unknown());var fA=U.record(U.string(),U.unknown());var MA=U.record(U.string(),U.unknown());var yf=new Map([[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".webp","image/webp"],[".gif","image/gif"],[".pdf","application/pdf"]]),NA=new Set(yf.values());async function tx(f){let{entityType:x,title:A,deriveId:k,regeneratePrompt:$,context:M}=f,L=k(A),V=await M.entityService.getEntity({entityType:x,id:L});if(!V||V.metadata.status==="generating")return A;M.logger.debug(`Entity ID collision: ${x}/${L}, asking AI for a new title`);let J=U.object({title:U.string().max(80).describe("A short, unique title (2-6 words)")}),{object:W}=await M.ai.generateObject(`The title "${A}" is already taken. ${$}`,J),X=W.title;return M.logger.debug(`AI suggested new title: "${X}"`),X}var ff=K.extend({id:U.literal("brain-character"),entityType:U.literal("brain-character")}),z=U.object({name:U.string().describe("The brain's friendly display name"),role:U.string().describe("The brain's primary role"),purpose:U.string().describe("The brain's purpose and goals"),values:U.array(U.string()).describe("Core values that guide behavior")});var Df=U.record(U.string(),U.unknown());class o extends q{constructor(){super({entityType:"brain-character",purpose:"The brain's own identity, character, and purpose (singleton).",schema:ff,frontmatterSchema:z,isSingleton:!0,hasBody:!1})}createCharacterContent(f){return this.buildMarkdown("",f)}parseCharacterBody(f){return this.parseFrontmatter(f)}toMarkdown(f){let x=this.parseFrontmatter(f.content);return this.buildMarkdown("",Df.parse(x))}fromMarkdown(f){return{content:f,entityType:"brain-character"}}extractMetadata(f){let x=this.parseFrontmatter(f.content);return{role:x.role,values:x.values}}generateFrontMatter(f){let x=this.parseFrontmatter(f.content);return this.buildMarkdown("",Df.parse(x))}}class D extends n{static instance=null;adapter=new o;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,x,A){return D.instance??=new D(f,x,A),D.instance}static resetInstance(){D.instance=null}static createFresh(f,x,A){return new D(f,x,A)}constructor(f,x,A){super(f,x,"brain-character",A??D.getDefaultCharacter(),u("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 xf=K.extend({id:U.literal("anchor-profile"),entityType:U.literal("anchor-profile")}),mf=U.enum(["person","team","organization"]),Q=U.object({name:U.string().describe("Name of the anchor"),organization:U.string().optional().describe("Organization the anchor belongs to"),description:U.string().optional().describe("Short description or biography"),avatar:U.string().optional().describe("URL or asset path to avatar/logo"),website:U.string().optional().describe("Primary website URL"),email:U.string().optional().describe("Contact email"),socialLinks:U.array(U.object({platform:U.enum(["github","instagram","linkedin","email","website"]).describe("Social media platform"),url:U.string().describe("Profile or contact URL"),label:U.string().optional().describe("Optional display label")})).optional().describe("Social media and contact links")});var dx=U.record(U.string(),U.unknown());class l extends q{constructor(){super({entityType:"anchor-profile",purpose:"The profile of the brain's Anchor (singleton).",schema:xf,frontmatterSchema:Q,isSingleton:!0,hasBody:!0})}createProfileContent(f){let x=Q.parse(f);return this.buildMarkdown("",x)}parseProfileBody(f,x){if(x){let{metadata:A,content:k}=Uf(f,x);return k?{...A,story:k}:A}return this.parseFrontmatter(f)}fromMarkdown(f){return{content:f,entityType:"anchor-profile"}}extractMetadata(f){let x=this.parseFrontmatter(f.content);return{name:x.name,email:x.email,website:x.website}}generateFrontMatter(f){let x=this.parseFrontmatter(f.content);return this.buildMarkdown("",dx.parse(x))}}class j extends n{static instance=null;adapter=new l;static getDefaultProfile(){return{name:"Unknown"}}static getInstance(f,x,A){return j.instance??=new j(f,x,A),j.instance}static resetInstance(){j.instance=null}static createFresh(f,x,A){return new j(f,x,A)}constructor(f,x,A){super(f,x,"anchor-profile",A??j.getDefaultProfile(),u("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 y=U.enum(["person","team","organization"]),mk=U.object({kind:U.string().trim().min(1),category:y,labels:U.object({singular:U.string().trim().min(1),plural:U.string().trim().min(1)})});var Bf=U.looseObject({id:U.string(),description:U.string(),name:U.string().optional(),tags:U.array(U.string()).optional().default([])}),ax=Q.extend({kind:U.string().trim().min(1).optional(),category:y.optional()}).superRefine((f,x)=>{if(f.kind===void 0!==(f.category===void 0))x.addIssue({code:"custom",message:"Anchor kind and category must be provided together"})}),ex=U.looseObject({uri:U.string(),params:U.record(U.string(),U.unknown()).optional()}),rx=U.looseObject({name:U.string(),url:U.string(),description:U.string().optional(),skills:U.array(Bf).optional().default([]),capabilities:U.looseObject({extensions:U.array(ex).optional().default([])}).optional()});var ix=U.object({name:U.string(),description:U.string(),tags:U.array(U.string()),examples:U.array(U.string())});import{EventEmitter as Xf}from"events";var _={REGISTERED:"registered",INITIALIZED:"initialized",ERROR:"error",DISABLED:"disabled"},F={REGISTERED:"plugin:registered",BEFORE_INITIALIZE:"plugin:before_initialize",INITIALIZED:"plugin:initialized",ERROR:"plugin:error",DISABLED:"plugin:disabled"};class H extends Error{pluginId;constructor(f,x){super(`Plugin ${f}: ${x}`);this.name="PluginError",this.pluginId=f}}class Af{scope;ingress=new Set;closePromise=null;closed=!1;constructor(){this.scope=R.runSync(s.make())}addFinalizer(f){if(this.closed)throw Error("Cannot register a resource after plugin teardown");R.runSync(s.addFinalizer(this.scope,R.promise(async()=>{await f()})))}addIngress(f){if(this.closed)throw Error("Cannot register ingress after plugin teardown");this.ingress.add(f)}close(f=Z.void){return this.closed=!0,this.closePromise??=this.closeScope(f),this.closePromise}async closeScope(f){let x,A=!1,k=[...this.ingress].reverse();for(let V of k)try{V.stopAdmission()}catch(J){if(!A)x=J;A=!0}let $=await Promise.allSettled(k.map((V)=>Promise.resolve().then(()=>V.drain())));this.ingress.clear();let M=$.find((V)=>V.status==="rejected");if(!A&&M)x=M.reason,A=!0;let L=await R.runPromiseExit(s.close(this.scope,f));if(!A&&Z.isFailure(L))x=Yf.squash(L.cause),A=!0;if(A)throw x}}function Qf(f,x){let A=f.getMessageBus(),k=new Set,$={send:(w)=>A.send(w),subscribe:(w,C,N)=>{let b=!0,O=new Set,T=(v)=>{if(!b)return{noop:!0};let Lf,Cf=new Promise((B)=>{Lf=B});O.add(Cf);let h=()=>{O.delete(Cf),Lf()},_f;try{_f=Promise.resolve(C(v))}catch(B){throw h(),B}return _f.then((B)=>{return h(),B},(B)=>{throw h(),B})},p=A.subscribe(w,T,N),G={type:w,originalHandler:C,stopAdmission:()=>{if(!b)return;b=!1,p(),k.delete(G)}};k.add(G);try{x.addIngress({stopAdmission:G.stopAdmission,drain:async()=>{await Promise.all(O)}})}catch(v){throw G.stopAdmission(),v}return G.stopAdmission},unsubscribe:(w,C)=>{let N=[...k].filter((b)=>b.type===w&&b.originalHandler===C);if(N.length===0){A.unsubscribe(w,C);return}for(let b of N)b.stopAdmission()}},M=f.getAttachmentRegistry(),L={...M,register:(w,C,N)=>{let b=!0,O=M.register(w,C,N),T=()=>{if(!b)return;b=!1,O()};return x.addFinalizer(T),T}},V=f.getEntityRegistry(),J=new Proxy(V,{get(w,C){let N=Reflect.get(w,C,w);if(C==="registerEntityType"&&typeof N==="function")return(...b)=>{let O=Reflect.apply(N,w,b),T=b[0];if(typeof T==="string")x.addFinalizer(()=>w.unregisterEntityType(T));return O};return typeof N==="function"?N.bind(w):N}}),W=f.getProfileKindRegistry(),X=new Proxy(W,{get(w,C){let N=Reflect.get(w,C,w);if(C==="register"&&typeof N==="function")return(...b)=>{let O=Reflect.apply(N,w,b),T=b[0];if(typeof T==="string")x.addFinalizer(()=>w.unregisterPlugin(T));return O};return typeof N==="function"?N.bind(w):N}}),uf=f.getDataSourceRegistry(),Pf=new Proxy(uf,{get(w,C){let N=Reflect.get(w,C,w);if(C==="register"&&typeof N==="function")return(...b)=>{let O=Reflect.apply(N,w,b),T=b[0];if(typeof T==="object"&&T!==null&&"id"in T&&typeof T.id==="string"){let p=T.id.includes(":")?T.id:`shell:${T.id}`;x.addFinalizer(()=>w.unregister(p))}return O};return typeof N==="function"?N.bind(w):N}}),Ef=f.getInsightsRegistry(),Sf=new Proxy(Ef,{get(w,C){let N=Reflect.get(w,C,w);if(C==="register"&&typeof N==="function")return(...b)=>{let O=Reflect.apply(N,w,b),T=b[0];if(typeof T==="string")x.addFinalizer(()=>w.unregister(T));return O};return typeof N==="function"?N.bind(w):N}});return new Proxy(f,{get(w,C){if(C==="getMessageBus")return()=>$;if(C==="getAttachmentRegistry")return()=>L;if(C==="getEntityRegistry")return()=>J;if(C==="getDataSourceRegistry")return()=>Pf;if(C==="getProfileKindRegistry")return()=>X;if(C==="getInsightsRegistry")return()=>Sf;let N=Reflect.get(w,C,w);return typeof N==="function"?N.bind(w):N}})}class $f{plugins;events;daemonRegistry;logger;resourceScopes=new Map;releasePromises=new Map;constructor(f,x,A,k){this.plugins=f,this.events=x,this.daemonRegistry=A,this.logger=k.child("PluginLifecycle")}async initializePlugin(f,x,A){let k=this.plugins.get(f);if(!k)throw new H(f,"Registration failed: Plugin is not registered");let $=k.plugin,M=new Af;M.addFinalizer(()=>x.unregisterPluginCapabilities?.(f)),M.addFinalizer(()=>x.getJobQueueService().unregisterPluginHandlers(f)),this.resourceScopes.set(f,M),this.releasePromises.delete(f),this.logger.debug(`Initializing plugin: ${f}`);try{this.events.emit(F.BEFORE_INITIALIZE,f,$);let L=await $.register(Qf(x,M),A);return k.status=_.INITIALIZED,this.logger.debug(`Initialized plugin: ${f}`),this.events.emit(F.INITIALIZED,f,$),L}catch(L){throw this.logger.error(`Error initializing plugin ${f}: ${Y(L)}`),await this.failPluginInitialization(f,L),L}}async finalizePluginRegistration(f){let x=this.plugins.get(f);if(!x)throw new H(f,"Registration finalization failed: Plugin is not registered");if(x.status!==_.INITIALIZED)return;try{await x.plugin.finalizeRegistration?.(),this.logger.debug(`Registration finalized for plugin: ${f}`)}catch(A){throw await this.failPluginInitialization(f,A),A}}async readyPlugin(f){let x=this.plugins.get(f);if(!x)throw new H(f,"Ready failed: Plugin is not registered");if(x.status!==_.INITIALIZED){this.logger.debug(`Skipping ready hook for non-initialized plugin: ${f}`);return}try{await x.plugin.ready?.(),this.logger.debug(`Ready hook completed for plugin: ${f}`)}catch(A){let k=kf(A);x.status=_.ERROR,x.error=k;try{this.events.emit(F.ERROR,f,k)}catch($){this.logger.error(`Plugin error listener failed for ${f}`,$)}throw k}}async startPluginDaemons(f){let x=this.plugins.get(f);if(x?.status!==_.INITIALIZED)return;try{await this.daemonRegistry.startPlugin(f),this.logger.debug(`Started daemons for plugin: ${f}`)}catch(A){if(x.plugin.requiresDaemonStartup?.())throw A;this.logger.warn(`Daemon ${f} failed to start: ${Y(A)}`)}}async failPluginInitialization(f,x){let A=this.plugins.get(f);if(!A)return;let k=A.status!==_.ERROR,$=kf(x);if(A.status=_.ERROR,A.error=$,await this.releasePluginResources(f,Z.fail(x)),k)try{this.events.emit(F.ERROR,f,$)}catch(M){this.logger.error(`Plugin error listener failed for ${f}`,M)}}async disablePlugin(f){let x=this.plugins.get(f);if(!x){this.logger.warn(`Cannot disable plugin ${f}: not registered`);return}if(x.status===_.DISABLED)return;this.logger.debug(`Disabling plugin: ${f}`);let A=x.status===_.ERROR;await this.releasePluginResources(f,Z.void);let k=this.plugins.get(f);if(!A&&k&&k.status!==_.DISABLED)k.status=_.DISABLED,this.events.emit(F.DISABLED,f,k.plugin);this.logger.debug(`Disabled plugin: ${f}`)}releasePluginResources(f,x){let A=this.releasePromises.get(f);if(A)return A;let k=this.releasePluginResourcesOnce(f,x);return this.releasePromises.set(f,k),k}async releasePluginResourcesOnce(f,x){let A=this.plugins.get(f);if(!A)return;try{await this.daemonRegistry.stopPlugin(f),this.logger.debug(`Stopped daemons for plugin: ${f}`)}catch($){this.logger.error(`Failed to stop daemons for plugin: ${f}`,$)}let k=this.resourceScopes.get(f);if(this.resourceScopes.delete(f),k)try{await k.close(x)}catch($){this.logger.error(`Failed to close resources for plugin ${f}`,$)}if(A.plugin.shutdown)try{await A.plugin.shutdown(),this.logger.debug(`Shutdown completed for plugin: ${f}`)}catch($){this.logger.error(`Plugin shutdown failed for ${f}:`,$)}for(let $ of this.daemonRegistry.getByPlugin(f))try{await this.daemonRegistry.unregister($.name)}catch(M){this.logger.error(`Failed to unregister daemon ${$.name} for plugin ${f}`,M)}}}class Mf{plugins;events;logger;constructor(f,x,A){this.plugins=f,this.events=x,this.logger=A.child("DependencyResolver")}async resolveInitializationOrder(f){this.logger.debug("Resolving plugin initialization order...");let x=Array.from(this.plugins.keys()),A=new Set,k=!0;while(k&&A.size<x.length){k=!1;for(let L of x){if(A.has(L))continue;if(!this.plugins.get(L))continue;if(this.getUnmetDependencies(L).length===0)try{await f(L),A.add(L),k=!0}catch(W){let X=Y(W);this.logger.error(`Failed to initialize plugin ${L}: ${X}`),A.add(L),k=!0}}}let $=x.filter((L)=>!A.has(L));if($.length>0){let L=$.join(", ");this.logger.error(`Failed to initialize plugins due to dependency issues: ${L}`);for(let V of $){let J=this.getUnmetDependencies(V);this.logger.error(`Plugin ${V} has unmet dependencies: ${J.join(", ")}`);let W=this.plugins.get(V);if(W)W.status=_.ERROR,W.error=new H(V,`Unmet dependencies: ${J.join(", ")}`);this.events.emit(F.ERROR,V,W?.error)}}let M=new Set;for(let[L,V]of this.plugins)if(V.status===_.INITIALIZED)M.add(L);return this.logger.debug(`Resolved ${M.size} of ${x.length} plugins`),{initialized:M,failed:$}}getUnmetDependencies(f){let x=this.plugins.get(f);if(!x)return[];let{dependencies:A}=x,k=[];for(let $ of A){let M=this.plugins.get($);if(!M){k.push($);continue}if(M.status!==_.INITIALIZED)k.push($)}return k}}class wf{logger;constructor(f){this.logger=f.child("CapabilityRegistrar")}async registerCapabilities(f,x,A){if(A.tools.length>0)f.registerTools(x,A.tools),this.logger.debug(`Registered ${A.tools.length} tools from ${x}`);if(A.resources.length>0)f.registerResources(x,A.resources),this.logger.debug(`Registered ${A.resources.length} resources from ${x}`);if(A.instructions)f.registerInstructions(x,A.instructions),this.logger.debug(`Registered instructions from ${x}`)}}async function Zf(f){let A=(await R.runPromise(R.all(f.map((k)=>R.either(R.tryPromise({try:k,catch:($)=>$}))),{concurrency:"unbounded"}))).find(Gf.isLeft);if(A)throw A.left}class m{static instance=null;plugins=new Map;logger;events=new Xf;daemonRegistry;shell=null;initializedPluginIds=[];pluginLifecycle;dependencyResolver;capabilityRegistrar;static getInstance(f,x){return m.instance??=new m(f,x),m.instance}static resetInstance(){m.instance=null}static createFresh(f,x){return new m(f,x)}setShell(f){this.shell=f}constructor(f,x){this.logger=f.child("PluginManager"),this.events=new Xf,this.daemonRegistry=x,this.pluginLifecycle=new $f(this.plugins,this.events,this.daemonRegistry,f),this.dependencyResolver=new Mf(this.plugins,this.events,f),this.capabilityRegistrar=new wf(f)}registerPlugin(f){if(!f.id)throw new H("unknown","Registration failed: Plugin must have an id");if(this.logger.debug(`Registering plugin: ${f.id} (${f.version})`),this.plugins.has(f.id)){let $=this.plugins.get(f.id)?.plugin.version;throw new H(f.id,`Registration failed: Plugin is already registered with version ${$}`)}let x=f.dependencies??[],A={plugin:f,status:_.REGISTERED,dependencies:x};this.plugins.set(f.id,A),this.logger.debug(`Registered plugin: ${f.id} (${f.version})`),this.events.emit(F.REGISTERED,f.id,f)}async initializePlugins(f){this.logger.debug("Initializing plugins..."),this.initializedPluginIds=[];let x=await this.dependencyResolver.resolveInitializationOrder(async(A)=>{await this.initializePlugin(A,f)});this.logger.debug(`Initialized ${x.initialized.size} of ${this.plugins.size} plugins`)}async initializePlugin(f,x){if(!this.shell)throw new H(f,"Cannot initialize plugin: Shell not set. Call setShell() first.");let A=this.shell;try{let k=await this.pluginLifecycle.initializePlugin(f,A,x);await this.capabilityRegistrar.registerCapabilities(A,f,k),this.initializedPluginIds.push(f)}catch(k){throw await this.pluginLifecycle.failPluginInitialization(f,k),k}}async finalizePluginRegistrations(){this.logger.debug("Finalizing plugin registrations...");for(let f of this.initializedPluginIds)await this.pluginLifecycle.finalizePluginRegistration(f)}async readyPlugins(){this.logger.debug("Dispatching plugin ready hooks...");try{await Zf(this.initializedPluginIds.map((f)=>()=>this.pluginLifecycle.readyPlugin(f)))}catch(f){for(let x of this.initializedPluginIds){let A=this.plugins.get(x);if(A?.status===_.ERROR)await this.pluginLifecycle.failPluginInitialization(x,A.error??f)}throw f}}async startPluginDaemons(){this.logger.debug("Starting plugin daemons..."),await Zf(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===_.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===_.ERROR&&f[1].error!==void 0).map(([f,x])=>({id:f,error:x.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 x of[...this.initializedPluginIds].reverse())await this.disablePlugin(x),f.add(x);for(let x of[...this.plugins.keys()].reverse())if(!f.has(x))await this.disablePlugin(x)}on(f,x){this.events.on(f,x)}once(f,x){this.events.once(f,x)}off(f,x){this.events.off(f,x)}getEventEmitter(){return this.events}}var fU=U.enum(["generating","draft","queued","published","failed"]),Kf=U.enum(["generating","draft","queued","published","failed"]),xU=U.object({title:U.string(),slug:U.string().optional(),status:fU,publishedAt:U.string().datetime().optional(),excerpt:U.string(),author:U.string(),coverImageId:U.string().optional(),ogImageId:U.string().optional(),seriesName:U.string().optional(),seriesIndex:U.number().optional(),ogImage:U.string().url().optional(),ogDescription:U.string().optional(),twitterCard:U.enum(["summary","summary_large_image"]).optional(),canonicalUrl:U.string().url().optional(),atprotoUri:U.string().optional()}),$N=xU.pick({title:!0,status:!0,publishedAt:!0,seriesName:!0,seriesIndex:!0}).extend({slug:U.string(),error:U.string().optional()}),UU=U.object({title:U.string(),status:Kf,publishedAt:U.string().datetime().optional(),seriesName:U.string().optional(),seriesIndex:U.number().optional(),slug:U.string(),error:U.string().optional()}),AU=U.object({title:U.string(),slug:U.string().optional(),status:Kf,publishedAt:U.string().datetime().optional(),excerpt:U.string(),author:U.string(),coverImageId:U.string().optional(),ogImageId:U.string().optional(),seriesName:U.string().optional(),seriesIndex:U.number().optional(),ogImage:U.string().url().optional(),ogDescription:U.string().optional(),twitterCard:U.enum(["summary","summary_large_image"]).optional(),canonicalUrl:U.string().url().optional(),atprotoUri:U.string().optional()}),kU=Nf.extend({entityType:U.literal("post"),metadata:UU}),qf=kU.extend({frontmatter:AU,body:U.string(),coverImageUrl:U.string().optional()}),MN=qf.extend({url:U.string().optional(),typeLabel:U.string().optional(),listUrl:U.string().optional(),listLabel:U.string().optional(),seriesUrl:U.string().optional(),coverImageUrl:U.string().optional(),ogImageUrl:U.string().optional(),coverImageWidth:U.number().optional(),coverImageHeight:U.number().optional(),coverImageSrcset:U.string().optional(),coverImageSizes:U.string().optional()}),wN=qf.extend({url:U.string(),typeLabel:U.string(),listUrl:U.string(),listLabel:U.string(),seriesUrl:U.string().optional(),coverImageUrl:U.string().optional(),ogImageUrl:U.string().optional(),coverImageWidth:U.number().optional(),coverImageHeight:U.number().optional(),coverImageSrcset:U.string().optional(),coverImageSizes:U.string().optional()});
2
+ import{m as a}from"./index-a4q0aknf.js";import{$ as q,B as Y,C as kf,J as Gf,L as Yf,M as Z,N as s,O as R,S as K,T as Nf,U as u,W as Uf,Y as t,Z as Of,_ as E,aa as n}from"./index-72d2a6vf.js";import{Fa as r,Ga as i,Oa as Tf,Sa as c,Ya as P}from"./index-b6k44k1d.js";import{_a as U}from"./index-q5r12b3s.js";var zf={pluginsRegistered:"system:plugins:registered",initialSyncCompleted:"sync:initial:completed",shellReady:"system:shell:ready"};var I=/^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 GU=U.object({id:U.string().regex(I),ref:U.object({kind:U.string().min(1),id:U.string().regex(I)}),filename:U.string().min(1),mediaType:U.string().min(1),sizeBytes:U.number().nonnegative(),createdAt:U.string().datetime(),metadata:U.record(U.string(),U.unknown()).optional()});function g(f){if(typeof f!=="object"||f===null||!("entityId"in f))return;let x=f.entityId;return typeof x==="string"&&x.trim().length>0?x.trim():void 0}function bf(f){if(typeof f!=="object"||f===null||!("coverImage"in f))return;let x=f.coverImage;if(x===void 0||x===!1)return;if(x===!0)return{generate:!0};if(typeof x!=="object"||x===null)return;let A=x;if(A.generate===!1)return;let k=A.prompt?.trim();return{generate:!0,...k&&{prompt:k}}}function S(f){return Object.fromEntries(Object.entries(f).filter(([,x])=>x!==void 0))}function Vf(f){let x={...f};return delete x.status,delete x.error,S(x)}class Ff extends a{context;entityType;constructor(f,x,A){super(f,{schema:A.schema,jobTypeName:A.jobTypeName});this.context=x,this.entityType=A.entityType}async afterCreate(f,x,A,k){}async onGenerationFailure(f,x){}validateAndParse(f){let x=super.validateAndParse(f);if(!x)return null;let A=bf(f);if(typeof x!=="object")return x;let k=g(f);if(!A&&!k)return x;return Object.assign(x,{...A&&{coverImage:A},...k&&{entityId:k}}),x}async process(f,x,A){try{await this.reportProgress(A,{progress:P.START,message:`Starting ${this.jobTypeName}`});let k=await this.generate(f,A),$=g(f),M=$?this.applyPreallocatedEntityId($,k):k;await this.reportProgress(A,{progress:P.SAVE,message:`Saving ${this.entityType} to database`});let L=$?await this.updatePreallocatedStub($,M):await this.context.entityService.createEntity({entity:{id:M.id,entityType:this.entityType,content:M.content,metadata:M.metadata},options:M.createOptions});return await this.afterCreate(f,L.entityId,A,M),await this.enqueueGenericCoverImageIfRequested(f,L.entityId,A,M),await this.reportProgress(A,{progress:P.COMPLETE,message:`${M.title??this.entityType} created successfully`}),{success:!0,entityId:L.entityId,...M.resultExtras}}catch(k){if(k instanceof d)return await this.markPreallocatedStubFailed(f,k.message),await this.onGenerationFailure(f,k.message),{success:!1,error:k.message};let $=Y(k);return this.logger.error(`${this.jobTypeName} job failed`,{error:k,jobId:x,data:this.summarizeDataForLog(f)}),await this.markPreallocatedStubFailed(f,$),await this.onGenerationFailure(f,$),Tf.failure(k)}}applyPreallocatedEntityId(f,x){let A={...x.metadata},k=x.content,$=x.resultExtras;if(typeof A.slug==="string")A.slug=f,k=E(k,"slug",f),$={...$,slug:f};return{...x,id:f,content:k,metadata:A,...$&&{resultExtras:$}}}async updatePreallocatedStub(f,x){let A=await this.context.entityService.getEntity({entityType:this.entityType,id:f,visibilityScope:"restricted"});if(!A)throw Error(`Pre-allocated entity stub not found: ${this.entityType}/${f}`);let k=this.mergeStubWithGenerated(A,x);return this.context.entityService.updateEntity({entity:{...A,id:f,entityType:this.entityType,content:k.content,metadata:k.metadata}})}mergeStubWithGenerated(f,x){let A=Vf(t(f.content).frontmatter),k=Vf(f.metadata),$=S(x.metadata),M=t(x.content),L=S(M.frontmatter),V=S({...A,...$,...L});return this.context.entities.getEffectiveFrontmatterSchema(this.entityType)?.parse(V),{content:Of(V,M.content),metadata:{...k,...$}}}async markPreallocatedStubFailed(f,x){let A=g(f);if(!A)return;try{let k=await this.context.entityService.getEntity({entityType:this.entityType,id:A,visibilityScope:"restricted"});if(!k)return;await this.context.entityService.updateEntity({entity:{...k,content:E(E(k.content,"status","failed"),"error",x),metadata:{...k.metadata,status:"failed",error:x}}})}catch(k){this.logger.warn("Failed to mark generation stub as failed",{error:k,entityId:A,entityType:this.entityType})}}async enqueueGenericCoverImageIfRequested(f,x,A,k){let $=bf(f);if(!$)return;await this.reportProgress(A,{progress:90,message:"Queueing cover image generation"});let M=k.title??x;await this.context.jobs.enqueue({type:c.generate,data:{prompt:$.prompt??`Editorial cover image for: ${M}. `,title:`${M} Cover`,aspectRatio:"16:9",targetEntityType:this.entityType,targetEntityId:x,entityTitle:M,entityContent:k.content},toolContext:{interfaceType:"job",actor:{kind:"service",serviceId:"generation-job-handler"}}})}failEarly(f){throw new d(f)}}class d extends Error{constructor(f){super(f);this.name="GenerationFailure"}}var nf=U.object({kind:U.string().min(1),id:U.string().min(1)}),lf=U.object({kind:U.string().min(1),filename:U.string().min(1),mediaType:U.string().min(1),sizeBytes:U.number().nonnegative().optional(),source:nf.optional()}),IU=U.array(lf),gU=U.array(i),tU=U.array(r),dU=U.record(U.string(),U.unknown());var fA=U.record(U.string(),U.unknown());var MA=U.record(U.string(),U.unknown());var yf=new Map([[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".webp","image/webp"],[".gif","image/gif"],[".pdf","application/pdf"]]),NA=new Set(yf.values());async function tx(f){let{entityType:x,title:A,deriveId:k,regeneratePrompt:$,context:M}=f,L=k(A),V=await M.entityService.getEntity({entityType:x,id:L});if(!V||V.metadata.status==="generating")return A;M.logger.debug(`Entity ID collision: ${x}/${L}, asking AI for a new title`);let J=U.object({title:U.string().max(80).describe("A short, unique title (2-6 words)")}),{object:W}=await M.ai.generateObject(`The title "${A}" is already taken. ${$}`,J),X=W.title;return M.logger.debug(`AI suggested new title: "${X}"`),X}var ff=K.extend({id:U.literal("brain-character"),entityType:U.literal("brain-character")}),z=U.object({name:U.string().describe("The brain's friendly display name"),role:U.string().describe("The brain's primary role"),purpose:U.string().describe("The brain's purpose and goals"),values:U.array(U.string()).describe("Core values that guide behavior")});var Df=U.record(U.string(),U.unknown());class o extends q{constructor(){super({entityType:"brain-character",purpose:"The brain's own identity, character, and purpose (singleton).",schema:ff,frontmatterSchema:z,isSingleton:!0,hasBody:!1})}createCharacterContent(f){return this.buildMarkdown("",f)}parseCharacterBody(f){return this.parseFrontmatter(f)}toMarkdown(f){let x=this.parseFrontmatter(f.content);return this.buildMarkdown("",Df.parse(x))}fromMarkdown(f){return{content:f,entityType:"brain-character"}}extractMetadata(f){let x=this.parseFrontmatter(f.content);return{role:x.role,values:x.values}}generateFrontMatter(f){let x=this.parseFrontmatter(f.content);return this.buildMarkdown("",Df.parse(x))}}class D extends n{static instance=null;adapter=new o;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,x,A){return D.instance??=new D(f,x,A),D.instance}static resetInstance(){D.instance=null}static createFresh(f,x,A){return new D(f,x,A)}constructor(f,x,A){super(f,x,"brain-character",A??D.getDefaultCharacter(),u("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 xf=K.extend({id:U.literal("anchor-profile"),entityType:U.literal("anchor-profile")}),mf=U.enum(["person","team","organization"]),Q=U.object({name:U.string().describe("Name of the anchor"),organization:U.string().optional().describe("Organization the anchor belongs to"),description:U.string().optional().describe("Short description or biography"),avatar:U.string().optional().describe("URL or asset path to avatar/logo"),website:U.string().optional().describe("Primary website URL"),email:U.string().optional().describe("Contact email"),socialLinks:U.array(U.object({platform:U.enum(["github","instagram","linkedin","email","website"]).describe("Social media platform"),url:U.string().describe("Profile or contact URL"),label:U.string().optional().describe("Optional display label")})).optional().describe("Social media and contact links")});var dx=U.record(U.string(),U.unknown());class l extends q{constructor(){super({entityType:"anchor-profile",purpose:"The profile of the brain's Anchor (singleton).",schema:xf,frontmatterSchema:Q,isSingleton:!0,hasBody:!0})}createProfileContent(f){let x=Q.parse(f);return this.buildMarkdown("",x)}parseProfileBody(f,x){if(x){let{metadata:A,content:k}=Uf(f,x);return k?{...A,story:k}:A}return this.parseFrontmatter(f)}fromMarkdown(f){return{content:f,entityType:"anchor-profile"}}extractMetadata(f){let x=this.parseFrontmatter(f.content);return{name:x.name,email:x.email,website:x.website}}generateFrontMatter(f){let x=this.parseFrontmatter(f.content);return this.buildMarkdown("",dx.parse(x))}}class j extends n{static instance=null;adapter=new l;static getDefaultProfile(){return{name:"Unknown"}}static getInstance(f,x,A){return j.instance??=new j(f,x,A),j.instance}static resetInstance(){j.instance=null}static createFresh(f,x,A){return new j(f,x,A)}constructor(f,x,A){super(f,x,"anchor-profile",A??j.getDefaultProfile(),u("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 y=U.enum(["person","team","organization"]),mk=U.object({kind:U.string().trim().min(1),category:y,labels:U.object({singular:U.string().trim().min(1),plural:U.string().trim().min(1)})});var Bf=U.looseObject({id:U.string(),description:U.string(),name:U.string().optional(),tags:U.array(U.string()).optional().default([])}),ax=Q.extend({kind:U.string().trim().min(1).optional(),category:y.optional()}).superRefine((f,x)=>{if(f.kind===void 0!==(f.category===void 0))x.addIssue({code:"custom",message:"Anchor kind and category must be provided together"})}),ex=U.looseObject({uri:U.string(),params:U.record(U.string(),U.unknown()).optional()}),rx=U.looseObject({name:U.string(),url:U.string(),description:U.string().optional(),skills:U.array(Bf).optional().default([]),capabilities:U.looseObject({extensions:U.array(ex).optional().default([])}).optional()});var ix=U.object({name:U.string(),description:U.string(),tags:U.array(U.string()),examples:U.array(U.string())});import{EventEmitter as Xf}from"events";var _={REGISTERED:"registered",INITIALIZED:"initialized",ERROR:"error",DISABLED:"disabled"},F={REGISTERED:"plugin:registered",BEFORE_INITIALIZE:"plugin:before_initialize",INITIALIZED:"plugin:initialized",ERROR:"plugin:error",DISABLED:"plugin:disabled"};class H extends Error{pluginId;constructor(f,x){super(`Plugin ${f}: ${x}`);this.name="PluginError",this.pluginId=f}}class Af{scope;ingress=new Set;closePromise=null;closed=!1;constructor(){this.scope=R.runSync(s.make())}addFinalizer(f){if(this.closed)throw Error("Cannot register a resource after plugin teardown");R.runSync(s.addFinalizer(this.scope,R.promise(async()=>{await f()})))}addIngress(f){if(this.closed)throw Error("Cannot register ingress after plugin teardown");this.ingress.add(f)}close(f=Z.void){return this.closed=!0,this.closePromise??=this.closeScope(f),this.closePromise}async closeScope(f){let x,A=!1,k=[...this.ingress].reverse();for(let V of k)try{V.stopAdmission()}catch(J){if(!A)x=J;A=!0}let $=await Promise.allSettled(k.map((V)=>Promise.resolve().then(()=>V.drain())));this.ingress.clear();let M=$.find((V)=>V.status==="rejected");if(!A&&M)x=M.reason,A=!0;let L=await R.runPromiseExit(s.close(this.scope,f));if(!A&&Z.isFailure(L))x=Yf.squash(L.cause),A=!0;if(A)throw x}}function Qf(f,x){let A=f.getMessageBus(),k=new Set,$={send:(w)=>A.send(w),subscribe:(w,C,N)=>{let b=!0,O=new Set,T=(v)=>{if(!b)return{noop:!0};let Lf,Cf=new Promise((B)=>{Lf=B});O.add(Cf);let h=()=>{O.delete(Cf),Lf()},_f;try{_f=Promise.resolve(C(v))}catch(B){throw h(),B}return _f.then((B)=>{return h(),B},(B)=>{throw h(),B})},p=A.subscribe(w,T,N),G={type:w,originalHandler:C,stopAdmission:()=>{if(!b)return;b=!1,p(),k.delete(G)}};k.add(G);try{x.addIngress({stopAdmission:G.stopAdmission,drain:async()=>{await Promise.all(O)}})}catch(v){throw G.stopAdmission(),v}return G.stopAdmission},unsubscribe:(w,C)=>{let N=[...k].filter((b)=>b.type===w&&b.originalHandler===C);if(N.length===0){A.unsubscribe(w,C);return}for(let b of N)b.stopAdmission()}},M=f.getAttachmentRegistry(),L={...M,register:(w,C,N)=>{let b=!0,O=M.register(w,C,N),T=()=>{if(!b)return;b=!1,O()};return x.addFinalizer(T),T}},V=f.getEntityRegistry(),J=new Proxy(V,{get(w,C){let N=Reflect.get(w,C,w);if(C==="registerEntityType"&&typeof N==="function")return(...b)=>{let O=Reflect.apply(N,w,b),T=b[0];if(typeof T==="string")x.addFinalizer(()=>w.unregisterEntityType(T));return O};return typeof N==="function"?N.bind(w):N}}),W=f.getProfileKindRegistry(),X=new Proxy(W,{get(w,C){let N=Reflect.get(w,C,w);if(C==="register"&&typeof N==="function")return(...b)=>{let O=Reflect.apply(N,w,b),T=b[0];if(typeof T==="string")x.addFinalizer(()=>w.unregisterPlugin(T));return O};return typeof N==="function"?N.bind(w):N}}),uf=f.getDataSourceRegistry(),Pf=new Proxy(uf,{get(w,C){let N=Reflect.get(w,C,w);if(C==="register"&&typeof N==="function")return(...b)=>{let O=Reflect.apply(N,w,b),T=b[0];if(typeof T==="object"&&T!==null&&"id"in T&&typeof T.id==="string"){let p=T.id.includes(":")?T.id:`shell:${T.id}`;x.addFinalizer(()=>w.unregister(p))}return O};return typeof N==="function"?N.bind(w):N}}),Ef=f.getInsightsRegistry(),Sf=new Proxy(Ef,{get(w,C){let N=Reflect.get(w,C,w);if(C==="register"&&typeof N==="function")return(...b)=>{let O=Reflect.apply(N,w,b),T=b[0];if(typeof T==="string")x.addFinalizer(()=>w.unregister(T));return O};return typeof N==="function"?N.bind(w):N}});return new Proxy(f,{get(w,C){if(C==="getMessageBus")return()=>$;if(C==="getAttachmentRegistry")return()=>L;if(C==="getEntityRegistry")return()=>J;if(C==="getDataSourceRegistry")return()=>Pf;if(C==="getProfileKindRegistry")return()=>X;if(C==="getInsightsRegistry")return()=>Sf;let N=Reflect.get(w,C,w);return typeof N==="function"?N.bind(w):N}})}class $f{plugins;events;daemonRegistry;logger;resourceScopes=new Map;releasePromises=new Map;constructor(f,x,A,k){this.plugins=f,this.events=x,this.daemonRegistry=A,this.logger=k.child("PluginLifecycle")}async initializePlugin(f,x,A){let k=this.plugins.get(f);if(!k)throw new H(f,"Registration failed: Plugin is not registered");let $=k.plugin,M=new Af;M.addFinalizer(()=>x.unregisterPluginCapabilities?.(f)),M.addFinalizer(()=>x.getJobQueueService().unregisterPluginHandlers(f)),this.resourceScopes.set(f,M),this.releasePromises.delete(f),this.logger.debug(`Initializing plugin: ${f}`);try{this.events.emit(F.BEFORE_INITIALIZE,f,$);let L=await $.register(Qf(x,M),A);return k.status=_.INITIALIZED,this.logger.debug(`Initialized plugin: ${f}`),this.events.emit(F.INITIALIZED,f,$),L}catch(L){throw this.logger.error(`Error initializing plugin ${f}: ${Y(L)}`),await this.failPluginInitialization(f,L),L}}async finalizePluginRegistration(f){let x=this.plugins.get(f);if(!x)throw new H(f,"Registration finalization failed: Plugin is not registered");if(x.status!==_.INITIALIZED)return;try{await x.plugin.finalizeRegistration?.(),this.logger.debug(`Registration finalized for plugin: ${f}`)}catch(A){throw await this.failPluginInitialization(f,A),A}}async readyPlugin(f){let x=this.plugins.get(f);if(!x)throw new H(f,"Ready failed: Plugin is not registered");if(x.status!==_.INITIALIZED){this.logger.debug(`Skipping ready hook for non-initialized plugin: ${f}`);return}try{await x.plugin.ready?.(),this.logger.debug(`Ready hook completed for plugin: ${f}`)}catch(A){let k=kf(A);x.status=_.ERROR,x.error=k;try{this.events.emit(F.ERROR,f,k)}catch($){this.logger.error(`Plugin error listener failed for ${f}`,$)}throw k}}async startPluginDaemons(f){let x=this.plugins.get(f);if(x?.status!==_.INITIALIZED)return;try{await this.daemonRegistry.startPlugin(f),this.logger.debug(`Started daemons for plugin: ${f}`)}catch(A){if(x.plugin.requiresDaemonStartup?.())throw A;this.logger.warn(`Daemon ${f} failed to start: ${Y(A)}`)}}async failPluginInitialization(f,x){let A=this.plugins.get(f);if(!A)return;let k=A.status!==_.ERROR,$=kf(x);if(A.status=_.ERROR,A.error=$,await this.releasePluginResources(f,Z.fail(x)),k)try{this.events.emit(F.ERROR,f,$)}catch(M){this.logger.error(`Plugin error listener failed for ${f}`,M)}}async disablePlugin(f){let x=this.plugins.get(f);if(!x){this.logger.warn(`Cannot disable plugin ${f}: not registered`);return}if(x.status===_.DISABLED)return;this.logger.debug(`Disabling plugin: ${f}`);let A=x.status===_.ERROR;await this.releasePluginResources(f,Z.void);let k=this.plugins.get(f);if(!A&&k&&k.status!==_.DISABLED)k.status=_.DISABLED,this.events.emit(F.DISABLED,f,k.plugin);this.logger.debug(`Disabled plugin: ${f}`)}releasePluginResources(f,x){let A=this.releasePromises.get(f);if(A)return A;let k=this.releasePluginResourcesOnce(f,x);return this.releasePromises.set(f,k),k}async releasePluginResourcesOnce(f,x){let A=this.plugins.get(f);if(!A)return;try{await this.daemonRegistry.stopPlugin(f),this.logger.debug(`Stopped daemons for plugin: ${f}`)}catch($){this.logger.error(`Failed to stop daemons for plugin: ${f}`,$)}let k=this.resourceScopes.get(f);if(this.resourceScopes.delete(f),k)try{await k.close(x)}catch($){this.logger.error(`Failed to close resources for plugin ${f}`,$)}if(A.plugin.shutdown)try{await A.plugin.shutdown(),this.logger.debug(`Shutdown completed for plugin: ${f}`)}catch($){this.logger.error(`Plugin shutdown failed for ${f}:`,$)}for(let $ of this.daemonRegistry.getByPlugin(f))try{await this.daemonRegistry.unregister($.name)}catch(M){this.logger.error(`Failed to unregister daemon ${$.name} for plugin ${f}`,M)}}}class Mf{plugins;events;logger;constructor(f,x,A){this.plugins=f,this.events=x,this.logger=A.child("DependencyResolver")}async resolveInitializationOrder(f){this.logger.debug("Resolving plugin initialization order...");let x=Array.from(this.plugins.keys()),A=new Set,k=!0;while(k&&A.size<x.length){k=!1;for(let L of x){if(A.has(L))continue;if(!this.plugins.get(L))continue;if(this.getUnmetDependencies(L).length===0)try{await f(L),A.add(L),k=!0}catch(W){let X=Y(W);this.logger.error(`Failed to initialize plugin ${L}: ${X}`),A.add(L),k=!0}}}let $=x.filter((L)=>!A.has(L));if($.length>0){let L=$.join(", ");this.logger.error(`Failed to initialize plugins due to dependency issues: ${L}`);for(let V of $){let J=this.getUnmetDependencies(V);this.logger.error(`Plugin ${V} has unmet dependencies: ${J.join(", ")}`);let W=this.plugins.get(V);if(W)W.status=_.ERROR,W.error=new H(V,`Unmet dependencies: ${J.join(", ")}`);this.events.emit(F.ERROR,V,W?.error)}}let M=new Set;for(let[L,V]of this.plugins)if(V.status===_.INITIALIZED)M.add(L);return this.logger.debug(`Resolved ${M.size} of ${x.length} plugins`),{initialized:M,failed:$}}getUnmetDependencies(f){let x=this.plugins.get(f);if(!x)return[];let{dependencies:A}=x,k=[];for(let $ of A){let M=this.plugins.get($);if(!M){k.push($);continue}if(M.status!==_.INITIALIZED)k.push($)}return k}}class wf{logger;constructor(f){this.logger=f.child("CapabilityRegistrar")}async registerCapabilities(f,x,A){if(A.tools.length>0)f.registerTools(x,A.tools),this.logger.debug(`Registered ${A.tools.length} tools from ${x}`);if(A.resources.length>0)f.registerResources(x,A.resources),this.logger.debug(`Registered ${A.resources.length} resources from ${x}`);if(A.instructions)f.registerInstructions(x,A.instructions),this.logger.debug(`Registered instructions from ${x}`)}}async function Zf(f){let A=(await R.runPromise(R.all(f.map((k)=>R.either(R.tryPromise({try:k,catch:($)=>$}))),{concurrency:"unbounded"}))).find(Gf.isLeft);if(A)throw A.left}class m{static instance=null;plugins=new Map;logger;events=new Xf;daemonRegistry;shell=null;initializedPluginIds=[];pluginLifecycle;dependencyResolver;capabilityRegistrar;static getInstance(f,x){return m.instance??=new m(f,x),m.instance}static resetInstance(){m.instance=null}static createFresh(f,x){return new m(f,x)}setShell(f){this.shell=f}constructor(f,x){this.logger=f.child("PluginManager"),this.events=new Xf,this.daemonRegistry=x,this.pluginLifecycle=new $f(this.plugins,this.events,this.daemonRegistry,f),this.dependencyResolver=new Mf(this.plugins,this.events,f),this.capabilityRegistrar=new wf(f)}registerPlugin(f){if(!f.id)throw new H("unknown","Registration failed: Plugin must have an id");if(this.logger.debug(`Registering plugin: ${f.id} (${f.version})`),this.plugins.has(f.id)){let $=this.plugins.get(f.id)?.plugin.version;throw new H(f.id,`Registration failed: Plugin is already registered with version ${$}`)}let x=f.dependencies??[],A={plugin:f,status:_.REGISTERED,dependencies:x};this.plugins.set(f.id,A),this.logger.debug(`Registered plugin: ${f.id} (${f.version})`),this.events.emit(F.REGISTERED,f.id,f)}async initializePlugins(f){this.logger.debug("Initializing plugins..."),this.initializedPluginIds=[];let x=await this.dependencyResolver.resolveInitializationOrder(async(A)=>{await this.initializePlugin(A,f)});this.logger.debug(`Initialized ${x.initialized.size} of ${this.plugins.size} plugins`)}async initializePlugin(f,x){if(!this.shell)throw new H(f,"Cannot initialize plugin: Shell not set. Call setShell() first.");let A=this.shell;try{let k=await this.pluginLifecycle.initializePlugin(f,A,x);await this.capabilityRegistrar.registerCapabilities(A,f,k),this.initializedPluginIds.push(f)}catch(k){throw await this.pluginLifecycle.failPluginInitialization(f,k),k}}async finalizePluginRegistrations(){this.logger.debug("Finalizing plugin registrations...");for(let f of this.initializedPluginIds)await this.pluginLifecycle.finalizePluginRegistration(f)}async readyPlugins(){this.logger.debug("Dispatching plugin ready hooks...");try{await Zf(this.initializedPluginIds.map((f)=>()=>this.pluginLifecycle.readyPlugin(f)))}catch(f){for(let x of this.initializedPluginIds){let A=this.plugins.get(x);if(A?.status===_.ERROR)await this.pluginLifecycle.failPluginInitialization(x,A.error??f)}throw f}}async startPluginDaemons(){this.logger.debug("Starting plugin daemons..."),await Zf(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===_.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===_.ERROR&&f[1].error!==void 0).map(([f,x])=>({id:f,error:x.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 x of[...this.initializedPluginIds].reverse())await this.disablePlugin(x),f.add(x);for(let x of[...this.plugins.keys()].reverse())if(!f.has(x))await this.disablePlugin(x)}on(f,x){this.events.on(f,x)}once(f,x){this.events.once(f,x)}off(f,x){this.events.off(f,x)}getEventEmitter(){return this.events}}var fU=U.enum(["generating","draft","queued","published","failed"]),Kf=U.enum(["generating","draft","queued","published","failed"]),xU=U.object({title:U.string(),slug:U.string().optional(),status:fU,publishedAt:U.string().datetime().optional(),excerpt:U.string(),author:U.string(),coverImageId:U.string().optional(),ogImageId:U.string().optional(),seriesName:U.string().optional(),seriesIndex:U.number().optional(),ogImage:U.string().url().optional(),ogDescription:U.string().optional(),twitterCard:U.enum(["summary","summary_large_image"]).optional(),canonicalUrl:U.string().url().optional(),atprotoUri:U.string().optional()}),$N=xU.pick({title:!0,status:!0,publishedAt:!0,seriesName:!0,seriesIndex:!0}).extend({slug:U.string(),error:U.string().optional()}),UU=U.object({title:U.string(),status:Kf,publishedAt:U.string().datetime().optional(),seriesName:U.string().optional(),seriesIndex:U.number().optional(),slug:U.string(),error:U.string().optional()}),AU=U.object({title:U.string(),slug:U.string().optional(),status:Kf,publishedAt:U.string().datetime().optional(),excerpt:U.string(),author:U.string(),coverImageId:U.string().optional(),ogImageId:U.string().optional(),seriesName:U.string().optional(),seriesIndex:U.number().optional(),ogImage:U.string().url().optional(),ogDescription:U.string().optional(),twitterCard:U.enum(["summary","summary_large_image"]).optional(),canonicalUrl:U.string().url().optional(),atprotoUri:U.string().optional()}),kU=Nf.extend({entityType:U.literal("post"),metadata:UU}),qf=kU.extend({frontmatter:AU,body:U.string(),coverImageUrl:U.string().optional()}),MN=qf.extend({url:U.string().optional(),typeLabel:U.string().optional(),listUrl:U.string().optional(),listLabel:U.string().optional(),seriesUrl:U.string().optional(),coverImageUrl:U.string().optional(),ogImageUrl:U.string().optional(),coverImageWidth:U.number().optional(),coverImageHeight:U.number().optional(),coverImageSrcset:U.string().optional(),coverImageSizes:U.string().optional()}),wN=qf.extend({url:U.string(),typeLabel:U.string(),listUrl:U.string(),listLabel:U.string(),seriesUrl:U.string().optional(),coverImageUrl:U.string().optional(),ogImageUrl:U.string().optional(),coverImageWidth:U.number().optional(),coverImageHeight:U.number().optional(),coverImageSrcset:U.string().optional(),coverImageSizes:U.string().optional()});
3
3
  export{zf as d,Ff as e,tx as f,Q as g,xU as h,kU as i,qf as j,MN as k,wN as l};
4
4
 
5
- //# debugId=515C8B7FDA84C63264756E2164756E21
6
- //# sourceMappingURL=index-q0dkt6nc.js.map
5
+ //# debugId=7A02F2B6C9F40B7F64756E2164756E21
6
+ //# sourceMappingURL=index-kvac8t2y.js.map
@@ -29,6 +29,6 @@
29
29
  "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"
30
30
  ],
31
31
  "mappings": "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",
32
- "debugId": "515C8B7FDA84C63264756E2164756E21",
32
+ "debugId": "7A02F2B6C9F40B7F64756E2164756E21",
33
33
  "names": []
34
34
  }