@rizom/brain 0.2.0-alpha.82 → 0.2.0-alpha.83

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/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- function t(i){return i}var e={name:"@rizom/brain",version:"0.2.0-alpha.82",description:"Brain runtime + CLI \u2014 scaffold, run, and manage AI brain instances",type:"module",bin:{brain:"./dist/brain.js"},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"],scripts:{build:"bun scripts/build.ts",prepublishOnly:"bun scripts/build.ts","dev:start":"bun dist/brain.js start",typecheck:"tsc --noEmit",test:"bun test",lint:"eslint . --ext .ts"},dependencies:{"@clack/prompts":"^0.11.0","@modelcontextprotocol/sdk":"^1.24.0","@tailwindcss/postcss":"^4.1.13","@tailwindcss/typography":"^0.5.19",postcss:"^8.5.6",preact:"^10.27.2","preact-render-to-string":"^6.3.1",tailwindcss:"^4.1.11"},optionalDependencies:{"@bitwarden/sdk-napi":"^1.0.0","@libsql/client":"^0.15.7","@tailwindcss/oxide":"^4.1.4","better-sqlite3":"^11.8.1",lightningcss:"^1.29.2","playwright-core":"^1.56.0","react-devtools-core":"^6.1.1",sharp:"^0.34.5"},devDependencies:{"@brains/app":"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-default":"workspace:*","@brains/theme-rizom":"workspace:*","@brains/typescript-config":"workspace:*","@brains/utils":"workspace:*","@types/bun":"latest",rollup:"^4.60.2","rollup-plugin-dts":"^6.4.1",typescript:"^5.3.3"},publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/rizom-ai/brains.git",directory:"packages/brain-cli"},license:"Apache-2.0",author:"Yeehaa <yeehaa@rizom.ai> (https://rizom.ai)",homepage:"https://github.com/rizom-ai/brains/tree/main/packages/brain-cli#readme",bugs:"https://github.com/rizom-ai/brains/issues",engines:{bun:">=1.3.3"},keywords:["brain","ai","cli","mcp","agent","personal-ai","knowledge-management"]};var n=e.version;export{t as defineBrain,n as PLUGIN_API_VERSION};
2
+ function t(i){return i}var e={name:"@rizom/brain",version:"0.2.0-alpha.83",description:"Brain runtime + CLI \u2014 scaffold, run, and manage AI brain instances",type:"module",bin:{brain:"./dist/brain.js"},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"],scripts:{build:"bun scripts/build.ts",prepublishOnly:"bun scripts/build.ts","dev:start":"bun dist/brain.js start",typecheck:"tsc --noEmit",test:"bun test",lint:"eslint . --ext .ts"},dependencies:{"@clack/prompts":"^0.11.0","@modelcontextprotocol/sdk":"^1.24.0","@tailwindcss/postcss":"^4.1.13","@tailwindcss/typography":"^0.5.19",postcss:"^8.5.6",preact:"^10.27.2","preact-render-to-string":"^6.3.1",tailwindcss:"^4.1.11"},optionalDependencies:{"@bitwarden/sdk-napi":"^1.0.0","@libsql/client":"^0.15.7","@tailwindcss/oxide":"^4.1.4","better-sqlite3":"^11.8.1",lightningcss:"^1.29.2","playwright-core":"^1.56.0","react-devtools-core":"^6.1.1",sharp:"^0.34.5"},devDependencies:{"@brains/app":"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-default":"workspace:*","@brains/theme-rizom":"workspace:*","@brains/typescript-config":"workspace:*","@brains/utils":"workspace:*","@types/bun":"latest",rollup:"^4.60.2","rollup-plugin-dts":"^6.4.1",typescript:"^5.3.3"},publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/rizom-ai/brains.git",directory:"packages/brain-cli"},license:"Apache-2.0",author:"Yeehaa <yeehaa@rizom.ai> (https://rizom.ai)",homepage:"https://github.com/rizom-ai/brains/tree/main/packages/brain-cli#readme",bugs:"https://github.com/rizom-ai/brains/issues",engines:{bun:">=1.3.3"},keywords:["brain","ai","cli","mcp","agent","personal-ai","knowledge-management"]};var n=e.version;export{t as defineBrain,n as PLUGIN_API_VERSION};
3
3
 
4
- //# debugId=476E0DFED6BCC87864756E2164756E21
4
+ //# debugId=29580405D84E472064756E2164756E21
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 = packageJson.version;\n"
7
7
  ],
8
8
  "mappings": ";AAkEO,SAAS,CAAW,CAAC,EAA8C,CACxE,OAAO,wsFC1DF,IAAM,EAAqB,EAAY",
9
- "debugId": "476E0DFED6BCC87864756E2164756E21",
9
+ "debugId": "29580405D84E472064756E2164756E21",
10
10
  "names": []
11
11
  }
package/dist/site.js CHANGED
@@ -978,7 +978,7 @@ The excerpt should be clear, concise, and compelling.`});H0();_5();B3();import{j
978
978
  Note: This is part of a series called "${X.seriesName}".`:""}`;return w.ai.generate({prompt:W,templateName:"blog:generation"})}),w.eval.registerHandler("generateExcerpt",async($)=>{let X=v80.parse($);return w.ai.generate({prompt:`Title: ${X.title}
979
979
 
980
980
  Content:
981
- ${X.content}`,templateName:"blog:excerpt"})})}var Gj={name:"@brains/blog",private:!0,version:"0.2.0-alpha.82",description:"AI-powered blog post generation from existing brain content",type:"module",exports:{".":"./src/index.ts"},scripts:{typecheck:"tsc --noEmit",test:"bun test",lint:"eslint . --ext .ts","lint:fix":"eslint . --ext .ts --fix",eval:"cd evals && bun run brain-eval"},dependencies:{"@brains/contracts":"workspace:*","@brains/plugins":"workspace:*","@brains/utils":"workspace:*"},devDependencies:{"@brains/app":"workspace:*","@brains/eslint-config":"workspace:*","@brains/typescript-config":"workspace:*","@types/bun":"latest","bun-types":"latest",eslint:"^8.56.0",typescript:"^5.3.3"}};class fj extends u6{entityType=a4.entityType;schema=S8;adapter=a4;constructor(w={}){super("blog",Gj,w,Sf)}getEntityTypeConfig(){return{weight:2}}createGenerationHandler(w){return new Cf(this.logger.child("BlogGenerationJobHandler"),w)}getTemplates(){return wj()}getDataSources(){return[new xf(this.logger.child("BlogDataSource"))]}async onRegister(w){let{RSSDataSource:$}=await Promise.resolve().then(() => (Uj(),Hj));w.entities.registerDataSource(new $(this.logger.child("RSSDataSource"))),await $j(w,this.logger),Xj(w,this.logger),Yj(w,this.logger),Jj(w),this.logger.info("Blog plugin registered (routes auto-generated at /posts/)")}}B3();qw();A1();c4();H0();A1();c4();var Aj=z.object({}),YJ=x2.extend({id:z.literal("site-info"),entityType:z.literal("site-info"),metadata:Aj}),F$=LW,Y7=PW.omit({url:!0,analyticsScript:!0});A1();class w6 extends s2{constructor(){super({entityType:"site-info",schema:YJ,frontmatterSchema:Y7,isSingleton:!0,hasBody:!1})}createSiteInfoContent(w){let $=Y7.parse(w);return this.buildMarkdown("",$)}parseSiteInfoBody(w){return this.parseFrontmatter(w)}fromMarkdown(w){return{content:w,entityType:"site-info"}}extractMetadata(w){return{}}generateFrontMatter(w){let $=this.parseFrontmatter(w.content);return this.buildMarkdown("",$)}}var bp0=new w6;var np0=new w6;var T80=new w6;async function U9(w){let X=(await w.listEntities({entityType:"site-info",options:{limit:1}}))[0];if(!X)throw Error("Site info not found \u2014 create a site-info entity");return T80.parseSiteInfoBody(X.content)}H0();var E80=Y7.extend({navigation:z.object({primary:z.array(z.object({label:z.string(),href:z.string(),priority:z.number()})),secondary:z.array(z.object({label:z.string(),href:z.string(),priority:z.number()}))}),copyright:z.string(),socialLinks:z.array(z.object({platform:z.enum(["github","instagram","linkedin","email","website"]).describe("Social media platform"),url:z.string().describe("Profile or contact URL"),label:z.string().optional().describe("Optional display label")})).optional().describe("Social media links from profile entity")});A1();var JJ=j8,s6=M3.extend(JJ.shape);A1();o4();H0();var j80=new T5;class GJ{postsListUrl;id="personal:homepage";name="Personal Homepage DataSource";description="Fetches profile and blog posts for a personal homepage";constructor(w){this.postsListUrl=w}async fetch(w,$,X){let W=X.entityService,[Y,J,G]=await Promise.all([V3(W),W.listEntities({entityType:"post",options:{limit:20}}),U9(W)]),K=j80.parseProfileBody(Y,s6),H=J.sort(K8).slice(0,6).map(s4);if(!G.cta)throw Error("CTA not configured in site-info");let f={profile:K,posts:H,postsListUrl:this.postsListUrl,cta:G.cta};return $.parse(f)}}A1();o4();var I80=new T5;class KJ{id="personal:about";name="About Page DataSource";description="Fetches full profile data for the about page";async fetch(w,$,X){let W=await V3(X.entityService),J={profile:I80.parseProfileBody(W,s6)};return $.parse(J)}}import{jsxDEV as Y1,Fragment as Qj}from"preact/jsx-dev-runtime";function S80(w){return new Date(w).toLocaleDateString("en-US",{year:"numeric",month:"long",day:"numeric"})}function C80(w){return w.split(/(\*[^*]+\*)/).map(($,X)=>{if($.startsWith("*")&&$.endsWith("*")&&$.length>2)return Y1("em",{className:"font-sans italic font-medium text-theme-inverse tracking-[-0.015em] [font-variation-settings:'opsz'_72]",children:$.slice(1,-1)},X,!1,void 0,this);return $})}var mQ=({profile:w,posts:$,postsListUrl:X,cta:W})=>{let Y=w.tagline??w.description,J=w.name.split(" ")[0];return Y1(Qj,{children:[Y1(V2,{title:w.name,description:w.description??Y??"Personal site",ogType:"website"},void 0,!1,void 0,this),Y1("header",{className:"hero-decor bg-brand text-theme-inverse relative flex flex-col items-center justify-center px-6 md:px-12 pt-32 pb-24 gap-7",children:Y1("div",{className:"w-full max-w-[1100px] mx-auto text-center flex flex-col items-center gap-7",children:[Y&&Y1("h1",{className:"font-heading font-bold text-[clamp(2.5rem,6vw,5rem)] leading-[1.05] tracking-[-0.035em] text-theme-inverse text-balance m-0 [font-variation-settings:'wdth'_90,'opsz'_96]",children:C80(Y)},void 0,!1,void 0,this),w.description&&Y1("p",{className:"text-[clamp(1.0625rem,1.4vw,1.3125rem)] leading-[1.5] text-theme-inverse opacity-95 max-w-[600px] mx-auto m-0",children:w.description},void 0,!1,void 0,this),Y1("div",{className:"flex flex-wrap justify-center gap-3.5 mt-2",children:[Y1("a",{href:X,className:"inline-flex items-center gap-2 rounded-full py-3.5 px-7 bg-theme text-brand border-2 border-theme font-heading font-semibold text-[15px] hover:bg-theme-subtle hover:-translate-y-0.5 transition-all [font-variation-settings:'wdth'_92,'opsz'_18]",children:["Read the Blog ",Y1("span",{"aria-hidden":"true",children:"\u2192"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Y1("a",{href:"/about",className:"rounded-full py-3.5 px-7 border-2 border-theme-light text-theme-inverse font-heading font-semibold text-[15px] hover:bg-brand-dark hover:border-theme hover:-translate-y-0.5 transition-all [font-variation-settings:'wdth'_92,'opsz'_18]",children:["About ",J]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),$.length>0&&Y1("section",{className:"flex flex-col py-24 px-6 md:px-12 gap-11 bg-theme-subtle",children:[Y1("div",{className:"flex justify-between items-end max-w-layout mx-auto w-full gap-6 flex-wrap",children:[Y1("div",{children:[Y1("span",{className:"block font-heading font-semibold text-[13px] uppercase tracking-[0.22em] text-brand mb-3 [font-variation-settings:'wdth'_85,'opsz'_12]",children:"The Archive"},void 0,!1,void 0,this),Y1("h2",{className:"font-heading font-bold text-[clamp(2.25rem,5vw,3.75rem)] leading-none tracking-[-0.03em] text-heading m-0 [font-variation-settings:'wdth'_92,'opsz'_64]",children:["Recent"," ",Y1("em",{className:"font-sans italic font-medium text-brand [font-variation-settings:'opsz'_60]",children:"posts"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),Y1("a",{href:X,className:"font-heading font-semibold text-[15px] text-brand inline-flex items-center gap-1.5 pb-1.5 border-b-2 border-current hover:text-brand-dark transition-colors [font-variation-settings:'wdth'_88,'opsz'_16]",children:["View the whole archive ",Y1("span",{"aria-hidden":"true",children:"\u2192"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),Y1("div",{className:"grid grid-cols-[repeat(auto-fit,minmax(min(100%,320px),1fr))] gap-8 max-w-layout mx-auto w-full",children:$.map((G)=>Y1("a",{href:G.url,className:"group flex flex-col bg-theme border border-theme rounded-md overflow-hidden hover:-translate-y-1 hover:border-brand/50 transition-all no-underline shadow-sm hover:shadow-lg",children:[G.coverImageUrl?Y1("img",{src:G.coverImageUrl,alt:G.metadata.title,className:"w-full aspect-[16/10] object-cover bg-theme-muted"},void 0,!1,void 0,this):Y1("div",{className:"w-full aspect-[16/10] bg-gradient-to-br from-brand to-accent","aria-hidden":"true"},void 0,!1,void 0,this),Y1("div",{className:"flex flex-col gap-4 p-7 flex-1",children:[Y1("div",{className:"flex flex-wrap items-center gap-3.5 font-heading text-[11px] font-semibold uppercase tracking-[0.18em] text-theme-muted [font-variation-settings:'wdth'_85,'opsz'_11]",children:[G.frontmatter.seriesName&&Y1(Qj,{children:[Y1("span",{className:"text-brand",children:G.frontmatter.seriesName},void 0,!1,void 0,this),Y1("span",{className:"w-[3px] h-[3px] rounded-full bg-current opacity-50","aria-hidden":"true"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Y1("time",{children:S80(G.metadata.publishedAt??G.created)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Y1("h3",{className:"font-sans font-semibold text-[clamp(1.375rem,1.8vw,1.625rem)] leading-[1.18] tracking-[-0.012em] text-heading m-0 text-balance",children:G.metadata.title},void 0,!1,void 0,this),G.frontmatter.excerpt&&Y1("p",{className:"text-base leading-[1.55] text-theme-muted m-0 flex-1",children:G.frontmatter.excerpt},void 0,!1,void 0,this),Y1("span",{className:"inline-flex items-center gap-1.5 font-heading font-semibold text-[13px] uppercase tracking-[0.14em] text-brand mt-1 [font-variation-settings:'wdth'_88,'opsz'_14]",children:["Read the post"," ",Y1("span",{"aria-hidden":"true",className:"transition-transform group-hover:translate-x-1",children:"\u2192"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},G.id,!0,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Y1("section",{className:"cta-decor bg-theme-dark text-theme-on-dark flex-grow flex flex-col items-center justify-center py-24 px-6 md:px-12 gap-5",children:[Y1("span",{className:"font-heading font-medium text-xs uppercase tracking-[0.24em] text-accent [font-variation-settings:'wdth'_85,'opsz'_12]",children:"Get in touch"},void 0,!1,void 0,this),Y1("h2",{className:"text-center font-heading font-bold text-[clamp(2rem,4vw,3rem)] leading-none tracking-[-0.03em] text-theme-on-dark m-0 [font-variation-settings:'wdth'_90,'opsz'_64]",children:W.heading},void 0,!1,void 0,this),W.subtitle&&Y1("p",{className:"text-center text-base leading-[1.55] text-theme-on-dark opacity-80 max-w-[480px] m-0",children:W.subtitle},void 0,!1,void 0,this),Y1("a",{href:W.buttonLink,className:"inline-flex items-center gap-2 rounded-full py-3.5 px-7 bg-brand text-theme-inverse border-2 border-brand font-heading font-semibold text-[15px] hover:bg-brand-dark hover:-translate-y-0.5 transition-all mt-2 [font-variation-settings:'wdth'_92,'opsz'_18]",children:[W.buttonText," ",Y1("span",{"aria-hidden":"true",children:"\u2192"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)};import{jsxDEV as v2,Fragment as b80}from"preact/jsx-dev-runtime";var lQ=({profile:w})=>{let $=`About ${w.name}`,X=w.description??w.intro??"About page",W=Boolean(w.email??w.website);return v2(b80,{children:[v2(V2,{title:$,description:X,ogType:"profile"},void 0,!1,void 0,this),v2("section",{className:"hero-decor bg-brand text-theme-inverse relative flex flex-col px-6 md:px-12 pt-32 pb-24",children:v2("div",{className:"w-full max-w-3xl mx-auto flex flex-col gap-6",children:[v2("h1",{className:"font-heading font-bold text-[clamp(2.5rem,6vw,4.5rem)] leading-[1.05] tracking-[-0.035em] text-theme-inverse text-balance m-0 [font-variation-settings:'wdth'_90,'opsz'_96]",children:w.name},void 0,!1,void 0,this),w.description&&v2("p",{className:"text-[clamp(1.0625rem,1.4vw,1.25rem)] leading-[1.55] text-theme-inverse opacity-95 max-w-2xl m-0",children:w.description},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),w.story&&v2("section",{className:`py-24 px-6 md:px-12 bg-theme-subtle${W?"":" flex-grow"}`,children:v2("div",{className:"max-w-3xl mx-auto",children:v2(H9,{markdown:w.story},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this),W&&v2("section",{className:"cta-decor bg-theme-dark text-theme-on-dark flex-grow flex flex-col items-center justify-center py-24 px-6 md:px-12 gap-5",children:[v2("span",{className:"font-heading font-medium text-xs uppercase tracking-[0.24em] text-accent [font-variation-settings:'wdth'_85,'opsz'_12]",children:"Get in touch"},void 0,!1,void 0,this),v2("h2",{className:"text-center font-heading font-bold text-[clamp(2rem,4vw,3rem)] leading-none tracking-[-0.03em] text-theme-on-dark m-0 [font-variation-settings:'wdth'_90,'opsz'_64]",children:["Say"," ",v2("em",{className:"font-sans italic font-medium text-accent [font-variation-settings:'opsz'_72]",children:"hi."},void 0,!1,void 0,this)]},void 0,!0,void 0,this),v2("div",{className:"flex flex-wrap justify-center gap-3.5 mt-2",children:[w.email&&v2("a",{href:`mailto:${w.email}`,className:"inline-flex items-center gap-2 rounded-full py-3.5 px-7 bg-brand text-theme-inverse border-2 border-brand font-heading font-semibold text-[15px] hover:bg-brand-dark hover:-translate-y-0.5 transition-all [font-variation-settings:'wdth'_92,'opsz'_18]",children:["Get in Touch ",v2("span",{"aria-hidden":"true",children:"\u2192"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),w.website&&v2("a",{href:w.website,className:"rounded-full py-3.5 px-7 border-2 border-theme-light text-theme-on-dark font-heading font-semibold text-[15px] hover:bg-brand-dark hover:border-theme hover:-translate-y-0.5 transition-all [font-variation-settings:'wdth'_92,'opsz'_18]",children:"Website"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)};var Fj={name:"@brains/site-personal",private:!0,version:"0.2.0-alpha.82",description:"Personal site composition package",type:"module",exports:{".":"./src/index.ts"},files:["src"],scripts:{typecheck:"tsc --noEmit",lint:"eslint . --ext .ts","lint:fix":"eslint . --ext .ts --fix"},dependencies:{"@brains/blog":"workspace:*","@brains/identity-service":"workspace:*","@brains/plugins":"workspace:*","@brains/site-composition":"workspace:*","@brains/site-engine":"workspace:*","@brains/site-info":"workspace:*","@brains/templates":"workspace:*","@brains/ui-library":"workspace:*","@brains/utils":"workspace:*",preact:"^10.27.2"},devDependencies:{"@brains/eslint-config":"workspace:*","@brains/typescript-config":"workspace:*","@types/bun":"latest","bun-types":"latest",eslint:"^8.56.0",typescript:"^5.3.3"}};var y80=z.object({entityDisplay:z.object({post:z.object({label:z.string().default("Post"),pluralName:z.string().optional()}).default({})}).default({})});class pQ extends k8{dependencies=["blog"];constructor(w={}){super("personal-site",Fj,w,y80)}async onRegister(w){w.entities.extendFrontmatterSchema("anchor-profile",JJ);let $=this.config.entityDisplay.post,X=`/${$.pluralName??$.label.toLowerCase()+"s"}`,W=new GJ(X);w.entities.registerDataSource(W);let Y=new KJ;w.entities.registerDataSource(Y);let J=z.object({profile:s6,posts:z.array(r5),postsListUrl:z.string(),cta:F$}),G=z.object({profile:s6});w.templates.register({homepage:T1({name:"homepage",description:"Personal homepage with recent blog posts",schema:J,dataSourceId:"personal:homepage",requiredPermission:"public",layout:{component:mQ}}),about:T1({name:"about",description:"About page with profile",schema:G,dataSourceId:"personal:about",requiredPermission:"public",layout:{component:lQ}})}),this.logger.info("Personal site plugin registered successfully")}async getTools(){return[]}async getResources(){return[]}}function rQ(w){return new pQ(w??{})}var cQ=[{id:"home",path:"/",title:"Home",description:"Personal site homepage",layout:"default",navigation:{show:!0,label:"Home",slot:"secondary",priority:10},sections:[{id:"homepage",template:"personal-site:homepage",dataQuery:{}}]},{id:"about",path:"/about",title:"About",description:"About page",layout:"default",navigation:{show:!0,label:"About",slot:"primary",priority:90},sections:[{id:"about",template:"personal-site:about",dataQuery:{}}]}];import{jsxDEV as h5}from"preact/jsx-dev-runtime";function dQ({sections:w,siteInfo:$}){let X=[...$.navigation.primary,...$.navigation.secondary].filter((W)=>W.label!=="Home");return h5("div",{className:"flex flex-col min-h-screen bg-theme overflow-x-clip",children:[h5(G$,{title:$.title,titleClassName:"font-heading font-bold text-2xl",navigation:$.navigation.primary,showThemeToggle:!0,themeToggleClassName:"bg-theme-toggle text-theme-toggle-icon hover:bg-theme-toggle-hover rounded-[10px]",...$.logo!==void 0?{logo:$.logo}:{}},void 0,!1,void 0,this),h5("main",{className:"flex-grow flex flex-col",children:w},void 0,!1,void 0,this),h5("footer",{className:"bg-footer text-footer border-t border-theme",children:h5("div",{className:"max-w-layout mx-auto flex flex-col md:flex-row justify-between items-center py-8 px-6 md:px-8",children:[h5("div",{className:"flex flex-col gap-1 mb-4 md:mb-0",children:[h5("span",{className:"text-brand font-heading font-bold text-lg",children:$.title},void 0,!1,void 0,this),$.description&&h5("span",{className:"text-theme-muted text-xs",children:$.description},void 0,!1,void 0,this)]},void 0,!0,void 0,this),h5("nav",{className:"flex flex-wrap justify-center gap-x-6 gap-y-2 mb-4 md:mb-0",children:X.map((W)=>h5("a",{href:W.href,className:"text-theme-muted text-[13px] hover:text-brand transition-colors",children:W.label},W.href,!1,void 0,this))},void 0,!1,void 0,this),h5("div",{className:"flex items-center gap-4",children:[$.copyright&&h5("span",{className:"text-theme-light text-[11px]",children:$.copyright},void 0,!1,void 0,this),h5(r6,{variant:"footer",size:"sm"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}A1();H0();_5();A1();H0();A1();H0();H0();A1();var u80=z.enum(["draft","queued","published"]),Oj="publishedAt is required when deck status is published",Zj=(w)=>w.status==="published"&&!w.publishedAt,iQ=(w)=>{if(Zj(w))throw Error(Oj)},t6=z.object({title:z.string(),slug:z.string().optional(),description:z.string().optional(),author:z.string().optional(),status:u80,publishedAt:z.string().datetime().optional(),event:z.string().optional(),coverImageId:z.string().optional()}),g80=t6.pick({title:!0,description:!0,status:!0,publishedAt:!0,coverImageId:!0}).extend({slug:z.string()}).superRefine((w,$)=>{if(!Zj(w))return;$.addIssue({code:z.ZodIssueCode.custom,path:["publishedAt"],message:Oj})}),HJ=x2.extend({entityType:z.literal("deck"),metadata:g80}),UJ=HJ.extend({frontmatter:t6,body:z.string()}),O$=UJ.extend({url:z.string().optional(),typeLabel:z.string().optional(),listUrl:z.string().optional(),listLabel:z.string().optional(),coverImageUrl:z.string().optional(),coverImageWidth:z.number().optional(),coverImageHeight:z.number().optional()});class nQ extends s2{constructor(){super({entityType:"deck",schema:HJ,frontmatterSchema:t6,supportsCoverImage:!0})}validateSlideStructure(w){if(!/^---$/gm.test(w))throw Error("Invalid deck: markdown must contain slide separators (---) to be a valid presentation")}toMarkdown(w){let $=this.extractBody(w.content);this.validateSlideStructure($);let X=this.parseFrontMatter(w.content,t6);iQ(X);let W={...X,slug:X.slug??w.metadata.slug};return this.buildMarkdown($,W)}fromMarkdown(w){let $=this.parseFrontmatter(w),X=this.extractBody(w);iQ($),this.validateSlideStructure(X);let W=$.slug??J5($.title),Y=$.status;return{entityType:"deck",content:w,metadata:{slug:W,title:$.title,description:$.description,status:Y,publishedAt:$.publishedAt,coverImageId:$.coverImageId}}}generateTitle(w){return w.metadata.title}generateSummary(w){if(w.metadata.description)return w.metadata.description;return`Presentation: ${w.metadata.title}`}generateFrontMatter(w){return this.toMarkdown(w)}}var Z$=new nQ;H0();_5();var m80=z.object({markdown:z.string().describe("Markdown content with slide separators (---)")}),oQ=T1({name:"deck-detail",description:"Render a presentation deck as Reveal.js slides",schema:m80,dataSourceId:"decks:entities",requiredPermission:"public",layout:{component:RQ,fullscreen:!0}});_5();H0();var aQ=z.object({decks:z.array(UJ)}),sQ=z.object({decks:z.array(O$),pageTitle:z.string().optional(),pageLabel:z.string().optional()});import{jsxDEV as tQ}from"preact/jsx-dev-runtime";var l80="Presentations",eQ=({decks:w,pageLabel:$})=>{let X=w.map((Y)=>({id:Y.id,url:Y.url,title:Y.frontmatter.title,date:Y.frontmatter.publishedAt??Y.created,description:Y.frontmatter.description}));return tQ("div",{className:"deck-list bg-theme",children:tQ("div",{className:"container mx-auto max-w-[1100px] px-6 py-16 md:px-12 md:py-24",children:tQ(K$,{label:$&&$!=="Decks"?$:l80,items:X},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)};G5();var _c0=z.object({message:z.string()});r4();r4();G5();JW();class fJ{schema;config;processor=$8();constructor(w,$){this.schema=w;this.config=$}getLabels(){let w={};for(let $ of this.config.mappings)w[$.key]=$.label;return w}generateBodyTemplate(){if(this.config.mappings.length===0)return"";let w=[];for(let $ of this.config.mappings)w.push(`## ${$.label}`,"",`<!-- Write your ${$.label.toLowerCase()} here -->`,"");return w.join(`
981
+ ${X.content}`,templateName:"blog:excerpt"})})}var Gj={name:"@brains/blog",private:!0,version:"0.2.0-alpha.83",description:"AI-powered blog post generation from existing brain content",type:"module",exports:{".":"./src/index.ts"},scripts:{typecheck:"tsc --noEmit",test:"bun test",lint:"eslint . --ext .ts","lint:fix":"eslint . --ext .ts --fix",eval:"cd evals && bun run brain-eval"},dependencies:{"@brains/contracts":"workspace:*","@brains/plugins":"workspace:*","@brains/utils":"workspace:*"},devDependencies:{"@brains/app":"workspace:*","@brains/eslint-config":"workspace:*","@brains/typescript-config":"workspace:*","@types/bun":"latest","bun-types":"latest",eslint:"^8.56.0",typescript:"^5.3.3"}};class fj extends u6{entityType=a4.entityType;schema=S8;adapter=a4;constructor(w={}){super("blog",Gj,w,Sf)}getEntityTypeConfig(){return{weight:2}}createGenerationHandler(w){return new Cf(this.logger.child("BlogGenerationJobHandler"),w)}getTemplates(){return wj()}getDataSources(){return[new xf(this.logger.child("BlogDataSource"))]}async onRegister(w){let{RSSDataSource:$}=await Promise.resolve().then(() => (Uj(),Hj));w.entities.registerDataSource(new $(this.logger.child("RSSDataSource"))),await $j(w,this.logger),Xj(w,this.logger),Yj(w,this.logger),Jj(w),this.logger.info("Blog plugin registered (routes auto-generated at /posts/)")}}B3();qw();A1();c4();H0();A1();c4();var Aj=z.object({}),YJ=x2.extend({id:z.literal("site-info"),entityType:z.literal("site-info"),metadata:Aj}),F$=LW,Y7=PW.omit({url:!0,analyticsScript:!0});A1();class w6 extends s2{constructor(){super({entityType:"site-info",schema:YJ,frontmatterSchema:Y7,isSingleton:!0,hasBody:!1})}createSiteInfoContent(w){let $=Y7.parse(w);return this.buildMarkdown("",$)}parseSiteInfoBody(w){return this.parseFrontmatter(w)}fromMarkdown(w){return{content:w,entityType:"site-info"}}extractMetadata(w){return{}}generateFrontMatter(w){let $=this.parseFrontmatter(w.content);return this.buildMarkdown("",$)}}var bp0=new w6;var np0=new w6;var T80=new w6;async function U9(w){let X=(await w.listEntities({entityType:"site-info",options:{limit:1}}))[0];if(!X)throw Error("Site info not found \u2014 create a site-info entity");return T80.parseSiteInfoBody(X.content)}H0();var E80=Y7.extend({navigation:z.object({primary:z.array(z.object({label:z.string(),href:z.string(),priority:z.number()})),secondary:z.array(z.object({label:z.string(),href:z.string(),priority:z.number()}))}),copyright:z.string(),socialLinks:z.array(z.object({platform:z.enum(["github","instagram","linkedin","email","website"]).describe("Social media platform"),url:z.string().describe("Profile or contact URL"),label:z.string().optional().describe("Optional display label")})).optional().describe("Social media links from profile entity")});A1();var JJ=j8,s6=M3.extend(JJ.shape);A1();o4();H0();var j80=new T5;class GJ{postsListUrl;id="personal:homepage";name="Personal Homepage DataSource";description="Fetches profile and blog posts for a personal homepage";constructor(w){this.postsListUrl=w}async fetch(w,$,X){let W=X.entityService,[Y,J,G]=await Promise.all([V3(W),W.listEntities({entityType:"post",options:{limit:20}}),U9(W)]),K=j80.parseProfileBody(Y,s6),H=J.sort(K8).slice(0,6).map(s4);if(!G.cta)throw Error("CTA not configured in site-info");let f={profile:K,posts:H,postsListUrl:this.postsListUrl,cta:G.cta};return $.parse(f)}}A1();o4();var I80=new T5;class KJ{id="personal:about";name="About Page DataSource";description="Fetches full profile data for the about page";async fetch(w,$,X){let W=await V3(X.entityService),J={profile:I80.parseProfileBody(W,s6)};return $.parse(J)}}import{jsxDEV as Y1,Fragment as Qj}from"preact/jsx-dev-runtime";function S80(w){return new Date(w).toLocaleDateString("en-US",{year:"numeric",month:"long",day:"numeric"})}function C80(w){return w.split(/(\*[^*]+\*)/).map(($,X)=>{if($.startsWith("*")&&$.endsWith("*")&&$.length>2)return Y1("em",{className:"font-sans italic font-medium text-theme-inverse tracking-[-0.015em] [font-variation-settings:'opsz'_72]",children:$.slice(1,-1)},X,!1,void 0,this);return $})}var mQ=({profile:w,posts:$,postsListUrl:X,cta:W})=>{let Y=w.tagline??w.description,J=w.name.split(" ")[0];return Y1(Qj,{children:[Y1(V2,{title:w.name,description:w.description??Y??"Personal site",ogType:"website"},void 0,!1,void 0,this),Y1("header",{className:"hero-decor bg-brand text-theme-inverse relative flex flex-col items-center justify-center px-6 md:px-12 pt-32 pb-24 gap-7",children:Y1("div",{className:"w-full max-w-[1100px] mx-auto text-center flex flex-col items-center gap-7",children:[Y&&Y1("h1",{className:"font-heading font-bold text-[clamp(2.5rem,6vw,5rem)] leading-[1.05] tracking-[-0.035em] text-theme-inverse text-balance m-0 [font-variation-settings:'wdth'_90,'opsz'_96]",children:C80(Y)},void 0,!1,void 0,this),w.description&&Y1("p",{className:"text-[clamp(1.0625rem,1.4vw,1.3125rem)] leading-[1.5] text-theme-inverse opacity-95 max-w-[600px] mx-auto m-0",children:w.description},void 0,!1,void 0,this),Y1("div",{className:"flex flex-wrap justify-center gap-3.5 mt-2",children:[Y1("a",{href:X,className:"inline-flex items-center gap-2 rounded-full py-3.5 px-7 bg-theme text-brand border-2 border-theme font-heading font-semibold text-[15px] hover:bg-theme-subtle hover:-translate-y-0.5 transition-all [font-variation-settings:'wdth'_92,'opsz'_18]",children:["Read the Blog ",Y1("span",{"aria-hidden":"true",children:"\u2192"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Y1("a",{href:"/about",className:"rounded-full py-3.5 px-7 border-2 border-theme-light text-theme-inverse font-heading font-semibold text-[15px] hover:bg-brand-dark hover:border-theme hover:-translate-y-0.5 transition-all [font-variation-settings:'wdth'_92,'opsz'_18]",children:["About ",J]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),$.length>0&&Y1("section",{className:"flex flex-col py-24 px-6 md:px-12 gap-11 bg-theme-subtle",children:[Y1("div",{className:"flex justify-between items-end max-w-layout mx-auto w-full gap-6 flex-wrap",children:[Y1("div",{children:[Y1("span",{className:"block font-heading font-semibold text-[13px] uppercase tracking-[0.22em] text-brand mb-3 [font-variation-settings:'wdth'_85,'opsz'_12]",children:"The Archive"},void 0,!1,void 0,this),Y1("h2",{className:"font-heading font-bold text-[clamp(2.25rem,5vw,3.75rem)] leading-none tracking-[-0.03em] text-heading m-0 [font-variation-settings:'wdth'_92,'opsz'_64]",children:["Recent"," ",Y1("em",{className:"font-sans italic font-medium text-brand [font-variation-settings:'opsz'_60]",children:"posts"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),Y1("a",{href:X,className:"font-heading font-semibold text-[15px] text-brand inline-flex items-center gap-1.5 pb-1.5 border-b-2 border-current hover:text-brand-dark transition-colors [font-variation-settings:'wdth'_88,'opsz'_16]",children:["View the whole archive ",Y1("span",{"aria-hidden":"true",children:"\u2192"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),Y1("div",{className:"grid grid-cols-[repeat(auto-fit,minmax(min(100%,320px),1fr))] gap-8 max-w-layout mx-auto w-full",children:$.map((G)=>Y1("a",{href:G.url,className:"group flex flex-col bg-theme border border-theme rounded-md overflow-hidden hover:-translate-y-1 hover:border-brand/50 transition-all no-underline shadow-sm hover:shadow-lg",children:[G.coverImageUrl?Y1("img",{src:G.coverImageUrl,alt:G.metadata.title,className:"w-full aspect-[16/10] object-cover bg-theme-muted"},void 0,!1,void 0,this):Y1("div",{className:"w-full aspect-[16/10] bg-gradient-to-br from-brand to-accent","aria-hidden":"true"},void 0,!1,void 0,this),Y1("div",{className:"flex flex-col gap-4 p-7 flex-1",children:[Y1("div",{className:"flex flex-wrap items-center gap-3.5 font-heading text-[11px] font-semibold uppercase tracking-[0.18em] text-theme-muted [font-variation-settings:'wdth'_85,'opsz'_11]",children:[G.frontmatter.seriesName&&Y1(Qj,{children:[Y1("span",{className:"text-brand",children:G.frontmatter.seriesName},void 0,!1,void 0,this),Y1("span",{className:"w-[3px] h-[3px] rounded-full bg-current opacity-50","aria-hidden":"true"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Y1("time",{children:S80(G.metadata.publishedAt??G.created)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Y1("h3",{className:"font-sans font-semibold text-[clamp(1.375rem,1.8vw,1.625rem)] leading-[1.18] tracking-[-0.012em] text-heading m-0 text-balance",children:G.metadata.title},void 0,!1,void 0,this),G.frontmatter.excerpt&&Y1("p",{className:"text-base leading-[1.55] text-theme-muted m-0 flex-1",children:G.frontmatter.excerpt},void 0,!1,void 0,this),Y1("span",{className:"inline-flex items-center gap-1.5 font-heading font-semibold text-[13px] uppercase tracking-[0.14em] text-brand mt-1 [font-variation-settings:'wdth'_88,'opsz'_14]",children:["Read the post"," ",Y1("span",{"aria-hidden":"true",className:"transition-transform group-hover:translate-x-1",children:"\u2192"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},G.id,!0,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Y1("section",{className:"cta-decor bg-theme-dark text-theme-on-dark flex-grow flex flex-col items-center justify-center py-24 px-6 md:px-12 gap-5",children:[Y1("span",{className:"font-heading font-medium text-xs uppercase tracking-[0.24em] text-accent [font-variation-settings:'wdth'_85,'opsz'_12]",children:"Get in touch"},void 0,!1,void 0,this),Y1("h2",{className:"text-center font-heading font-bold text-[clamp(2rem,4vw,3rem)] leading-none tracking-[-0.03em] text-theme-on-dark m-0 [font-variation-settings:'wdth'_90,'opsz'_64]",children:W.heading},void 0,!1,void 0,this),W.subtitle&&Y1("p",{className:"text-center text-base leading-[1.55] text-theme-on-dark opacity-80 max-w-[480px] m-0",children:W.subtitle},void 0,!1,void 0,this),Y1("a",{href:W.buttonLink,className:"inline-flex items-center gap-2 rounded-full py-3.5 px-7 bg-brand text-theme-inverse border-2 border-brand font-heading font-semibold text-[15px] hover:bg-brand-dark hover:-translate-y-0.5 transition-all mt-2 [font-variation-settings:'wdth'_92,'opsz'_18]",children:[W.buttonText," ",Y1("span",{"aria-hidden":"true",children:"\u2192"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)};import{jsxDEV as v2,Fragment as b80}from"preact/jsx-dev-runtime";var lQ=({profile:w})=>{let $=`About ${w.name}`,X=w.description??w.intro??"About page",W=Boolean(w.email??w.website);return v2(b80,{children:[v2(V2,{title:$,description:X,ogType:"profile"},void 0,!1,void 0,this),v2("section",{className:"hero-decor bg-brand text-theme-inverse relative flex flex-col px-6 md:px-12 pt-32 pb-24",children:v2("div",{className:"w-full max-w-3xl mx-auto flex flex-col gap-6",children:[v2("h1",{className:"font-heading font-bold text-[clamp(2.5rem,6vw,4.5rem)] leading-[1.05] tracking-[-0.035em] text-theme-inverse text-balance m-0 [font-variation-settings:'wdth'_90,'opsz'_96]",children:w.name},void 0,!1,void 0,this),w.description&&v2("p",{className:"text-[clamp(1.0625rem,1.4vw,1.25rem)] leading-[1.55] text-theme-inverse opacity-95 max-w-2xl m-0",children:w.description},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),w.story&&v2("section",{className:`py-24 px-6 md:px-12 bg-theme-subtle${W?"":" flex-grow"}`,children:v2("div",{className:"max-w-3xl mx-auto",children:v2(H9,{markdown:w.story},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this),W&&v2("section",{className:"cta-decor bg-theme-dark text-theme-on-dark flex-grow flex flex-col items-center justify-center py-24 px-6 md:px-12 gap-5",children:[v2("span",{className:"font-heading font-medium text-xs uppercase tracking-[0.24em] text-accent [font-variation-settings:'wdth'_85,'opsz'_12]",children:"Get in touch"},void 0,!1,void 0,this),v2("h2",{className:"text-center font-heading font-bold text-[clamp(2rem,4vw,3rem)] leading-none tracking-[-0.03em] text-theme-on-dark m-0 [font-variation-settings:'wdth'_90,'opsz'_64]",children:["Say"," ",v2("em",{className:"font-sans italic font-medium text-accent [font-variation-settings:'opsz'_72]",children:"hi."},void 0,!1,void 0,this)]},void 0,!0,void 0,this),v2("div",{className:"flex flex-wrap justify-center gap-3.5 mt-2",children:[w.email&&v2("a",{href:`mailto:${w.email}`,className:"inline-flex items-center gap-2 rounded-full py-3.5 px-7 bg-brand text-theme-inverse border-2 border-brand font-heading font-semibold text-[15px] hover:bg-brand-dark hover:-translate-y-0.5 transition-all [font-variation-settings:'wdth'_92,'opsz'_18]",children:["Get in Touch ",v2("span",{"aria-hidden":"true",children:"\u2192"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),w.website&&v2("a",{href:w.website,className:"rounded-full py-3.5 px-7 border-2 border-theme-light text-theme-on-dark font-heading font-semibold text-[15px] hover:bg-brand-dark hover:border-theme hover:-translate-y-0.5 transition-all [font-variation-settings:'wdth'_92,'opsz'_18]",children:"Website"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)};var Fj={name:"@brains/site-personal",private:!0,version:"0.2.0-alpha.83",description:"Personal site composition package",type:"module",exports:{".":"./src/index.ts"},files:["src"],scripts:{typecheck:"tsc --noEmit",lint:"eslint . --ext .ts","lint:fix":"eslint . --ext .ts --fix"},dependencies:{"@brains/blog":"workspace:*","@brains/identity-service":"workspace:*","@brains/plugins":"workspace:*","@brains/site-composition":"workspace:*","@brains/site-engine":"workspace:*","@brains/site-info":"workspace:*","@brains/templates":"workspace:*","@brains/ui-library":"workspace:*","@brains/utils":"workspace:*",preact:"^10.27.2"},devDependencies:{"@brains/eslint-config":"workspace:*","@brains/typescript-config":"workspace:*","@types/bun":"latest","bun-types":"latest",eslint:"^8.56.0",typescript:"^5.3.3"}};var y80=z.object({entityDisplay:z.object({post:z.object({label:z.string().default("Post"),pluralName:z.string().optional()}).default({})}).default({})});class pQ extends k8{dependencies=["blog"];constructor(w={}){super("personal-site",Fj,w,y80)}async onRegister(w){w.entities.extendFrontmatterSchema("anchor-profile",JJ);let $=this.config.entityDisplay.post,X=`/${$.pluralName??$.label.toLowerCase()+"s"}`,W=new GJ(X);w.entities.registerDataSource(W);let Y=new KJ;w.entities.registerDataSource(Y);let J=z.object({profile:s6,posts:z.array(r5),postsListUrl:z.string(),cta:F$}),G=z.object({profile:s6});w.templates.register({homepage:T1({name:"homepage",description:"Personal homepage with recent blog posts",schema:J,dataSourceId:"personal:homepage",requiredPermission:"public",layout:{component:mQ}}),about:T1({name:"about",description:"About page with profile",schema:G,dataSourceId:"personal:about",requiredPermission:"public",layout:{component:lQ}})}),this.logger.info("Personal site plugin registered successfully")}async getTools(){return[]}async getResources(){return[]}}function rQ(w){return new pQ(w??{})}var cQ=[{id:"home",path:"/",title:"Home",description:"Personal site homepage",layout:"default",navigation:{show:!0,label:"Home",slot:"secondary",priority:10},sections:[{id:"homepage",template:"personal-site:homepage",dataQuery:{}}]},{id:"about",path:"/about",title:"About",description:"About page",layout:"default",navigation:{show:!0,label:"About",slot:"primary",priority:90},sections:[{id:"about",template:"personal-site:about",dataQuery:{}}]}];import{jsxDEV as h5}from"preact/jsx-dev-runtime";function dQ({sections:w,siteInfo:$}){let X=[...$.navigation.primary,...$.navigation.secondary].filter((W)=>W.label!=="Home");return h5("div",{className:"flex flex-col min-h-screen bg-theme overflow-x-clip",children:[h5(G$,{title:$.title,titleClassName:"font-heading font-bold text-2xl",navigation:$.navigation.primary,showThemeToggle:!0,themeToggleClassName:"bg-theme-toggle text-theme-toggle-icon hover:bg-theme-toggle-hover rounded-[10px]",...$.logo!==void 0?{logo:$.logo}:{}},void 0,!1,void 0,this),h5("main",{className:"flex-grow flex flex-col",children:w},void 0,!1,void 0,this),h5("footer",{className:"bg-footer text-footer border-t border-theme",children:h5("div",{className:"max-w-layout mx-auto flex flex-col md:flex-row justify-between items-center py-8 px-6 md:px-8",children:[h5("div",{className:"flex flex-col gap-1 mb-4 md:mb-0",children:[h5("span",{className:"text-brand font-heading font-bold text-lg",children:$.title},void 0,!1,void 0,this),$.description&&h5("span",{className:"text-theme-muted text-xs",children:$.description},void 0,!1,void 0,this)]},void 0,!0,void 0,this),h5("nav",{className:"flex flex-wrap justify-center gap-x-6 gap-y-2 mb-4 md:mb-0",children:X.map((W)=>h5("a",{href:W.href,className:"text-theme-muted text-[13px] hover:text-brand transition-colors",children:W.label},W.href,!1,void 0,this))},void 0,!1,void 0,this),h5("div",{className:"flex items-center gap-4",children:[$.copyright&&h5("span",{className:"text-theme-light text-[11px]",children:$.copyright},void 0,!1,void 0,this),h5(r6,{variant:"footer",size:"sm"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}A1();H0();_5();A1();H0();A1();H0();H0();A1();var u80=z.enum(["draft","queued","published"]),Oj="publishedAt is required when deck status is published",Zj=(w)=>w.status==="published"&&!w.publishedAt,iQ=(w)=>{if(Zj(w))throw Error(Oj)},t6=z.object({title:z.string(),slug:z.string().optional(),description:z.string().optional(),author:z.string().optional(),status:u80,publishedAt:z.string().datetime().optional(),event:z.string().optional(),coverImageId:z.string().optional()}),g80=t6.pick({title:!0,description:!0,status:!0,publishedAt:!0,coverImageId:!0}).extend({slug:z.string()}).superRefine((w,$)=>{if(!Zj(w))return;$.addIssue({code:z.ZodIssueCode.custom,path:["publishedAt"],message:Oj})}),HJ=x2.extend({entityType:z.literal("deck"),metadata:g80}),UJ=HJ.extend({frontmatter:t6,body:z.string()}),O$=UJ.extend({url:z.string().optional(),typeLabel:z.string().optional(),listUrl:z.string().optional(),listLabel:z.string().optional(),coverImageUrl:z.string().optional(),coverImageWidth:z.number().optional(),coverImageHeight:z.number().optional()});class nQ extends s2{constructor(){super({entityType:"deck",schema:HJ,frontmatterSchema:t6,supportsCoverImage:!0})}validateSlideStructure(w){if(!/^---$/gm.test(w))throw Error("Invalid deck: markdown must contain slide separators (---) to be a valid presentation")}toMarkdown(w){let $=this.extractBody(w.content);this.validateSlideStructure($);let X=this.parseFrontMatter(w.content,t6);iQ(X);let W={...X,slug:X.slug??w.metadata.slug};return this.buildMarkdown($,W)}fromMarkdown(w){let $=this.parseFrontmatter(w),X=this.extractBody(w);iQ($),this.validateSlideStructure(X);let W=$.slug??J5($.title),Y=$.status;return{entityType:"deck",content:w,metadata:{slug:W,title:$.title,description:$.description,status:Y,publishedAt:$.publishedAt,coverImageId:$.coverImageId}}}generateTitle(w){return w.metadata.title}generateSummary(w){if(w.metadata.description)return w.metadata.description;return`Presentation: ${w.metadata.title}`}generateFrontMatter(w){return this.toMarkdown(w)}}var Z$=new nQ;H0();_5();var m80=z.object({markdown:z.string().describe("Markdown content with slide separators (---)")}),oQ=T1({name:"deck-detail",description:"Render a presentation deck as Reveal.js slides",schema:m80,dataSourceId:"decks:entities",requiredPermission:"public",layout:{component:RQ,fullscreen:!0}});_5();H0();var aQ=z.object({decks:z.array(UJ)}),sQ=z.object({decks:z.array(O$),pageTitle:z.string().optional(),pageLabel:z.string().optional()});import{jsxDEV as tQ}from"preact/jsx-dev-runtime";var l80="Presentations",eQ=({decks:w,pageLabel:$})=>{let X=w.map((Y)=>({id:Y.id,url:Y.url,title:Y.frontmatter.title,date:Y.frontmatter.publishedAt??Y.created,description:Y.frontmatter.description}));return tQ("div",{className:"deck-list bg-theme",children:tQ("div",{className:"container mx-auto max-w-[1100px] px-6 py-16 md:px-12 md:py-24",children:tQ(K$,{label:$&&$!=="Decks"?$:l80,items:X},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)};G5();var _c0=z.object({message:z.string()});r4();r4();G5();JW();class fJ{schema;config;processor=$8();constructor(w,$){this.schema=w;this.config=$}getLabels(){let w={};for(let $ of this.config.mappings)w[$.key]=$.label;return w}generateBodyTemplate(){if(this.config.mappings.length===0)return"";let w=[];for(let $ of this.config.mappings)w.push(`## ${$.label}`,"",`<!-- Write your ${$.label.toLowerCase()} here -->`,"");return w.join(`
982
982
  `).trimEnd()+`
983
983
  `}format(w){try{let $=[`# ${this.config.title}`,""];for(let X of this.config.mappings)this.formatField(w,X,$,2);return $.join(`
984
984
  `)}catch{throw Error("Failed to format structured content")}}parse(w){try{let $=this.processor.parse(w),X=this.extractSections($,2),W=this.buildDataFromSections(X,this.config.mappings);return this.schema.parse(W)}catch{throw Error("Failed to parse structured content")}}formatField(w,$,X,W){let Y="#".repeat(W)+" "+$.label,J=this.getValueByPath(w,$.key);if($.type==="custom"&&$.formatter){if(J!==void 0&&J!==null){X.push(Y,"");let G=$.formatter(J);if(G)X.push(G,"")}return}switch($.type){case"string":case"number":X.push(Y,String(J??""),"");break;case"object":if(X.push(Y),$.children&&J)for(let G of $.children)this.formatField(J,G,X,W+1);break;case"array":if(X.push(Y,""),Array.isArray(J))if($.itemType==="object"&&$.itemMappings)J.forEach((G,K)=>{if(X.push(`${"#".repeat(W+1)} ${$.label.slice(0,-1)} ${K+1}`),X.push(""),$.itemMappings)for(let H of $.itemMappings)this.formatField(G,H,X,W+2)});else{for(let G of J){let K=this.defaultArrayItemFormat(G);X.push(`- ${K}`)}X.push("")}break}}getValueByPath(w,$){let X=$.split("."),W=w;for(let Y of X)if(W&&typeof W==="object"&&Y in W)W=W[Y];else return;return W}defaultArrayItemFormat(w){if(typeof w==="string"||typeof w==="number")return String(w);return JSON.stringify(w)}extractSections(w,$){let X=new Map,W=null,Y=[];for(let J of w.children)if(J.type==="heading"&&J.depth===$){if(W)X.set(W.toLowerCase(),Y);W=this.getHeadingText(J),Y=[]}else if(W)Y.push(J);if(W)X.set(W.toLowerCase(),Y);return X}extractSubsections(w,$){let X=new Map,W=null,Y=[];for(let J of w)if(J.type==="heading"&&J.depth===$){if(W)X.set(W.toLowerCase(),Y);W=this.getHeadingText(J),Y=[]}else if(W)Y.push(J);if(W)X.set(W.toLowerCase(),Y);return X}textNodeSchema=z.object({type:z.literal("text"),value:z.string()});extractTextValue(w){let $=this.textNodeSchema.safeParse(w);return $.success?$.data.value:""}getHeadingText(w){return w.children.filter((X)=>X.type==="text").map((X)=>this.extractTextValue(X)).join("")}buildDataFromSections(w,$,X=2){let W={};for(let Y of $){let J=w.get(Y.label.toLowerCase());if(Y.type==="custom"&&Y.parser&&J){let G=this.getTextFromSection(J),K=Y.parser(G);this.setValueByPath(W,Y.key,K)}else if(Y.type==="object"&&Y.children&&J){let G=this.extractSubsections(J,X+1),K=this.buildDataFromSections(G,Y.children,X+1);this.setValueByPath(W,Y.key,K)}else if(Y.type==="array"&&J)if(Y.itemType==="object"&&Y.itemMappings){let G=this.extractObjectArrayItems(J,X+1,Y.itemMappings);this.setValueByPath(W,Y.key,G)}else{let G=this.extractSimpleArrayItems(J);this.setValueByPath(W,Y.key,G)}else if(J){let G=this.getTextFromSection(J),K=Y.type==="number"?Number(G):G;this.setValueByPath(W,Y.key,K)}}return W}setValueByPath(w,$,X){let W=$.split("."),Y=w;for(let G=0;G<W.length-1;G++){let K=W[G];if(!K)continue;if(!(K in Y))Y[K]={};Y=Y[K]}let J=W[W.length-1];if(J)Y[J]=X}getTextFromSection(w){let $=[];for(let X of w)if(X.type==="paragraph"){let W=this.extractTextFromParagraph(X);if(W)$.push(W)}else if(X.type==="list"){let W=X;for(let Y of W.children){let J=this.extractTextFromListItem(Y);if(J)$.push(`- ${J}`)}}return $.join(`
@@ -1082,10 +1082,11 @@ ${K}`,templateName:"decks:description"})).description,await this.reportProgress(
1082
1082
  --carousel-surface-glow: #1a1530;
1083
1083
  --carousel-ink: var(--color-text, #f0ede5);
1084
1084
  --carousel-heading: var(--color-heading, #f7f3e6);
1085
- --carousel-ink-muted: color-mix(in srgb, var(--carousel-ink) 50%, transparent);
1086
- --carousel-divider: color-mix(in srgb, var(--carousel-ink) 12%, transparent);
1085
+ --carousel-ink-muted: color-mix(in srgb, var(--carousel-ink) 50%, var(--carousel-surface));
1086
+ --carousel-divider: color-mix(in srgb, var(--carousel-ink) 12%, var(--carousel-surface));
1087
1087
  --carousel-accent: var(--color-accent, var(--color-brand, #ff8b3d));
1088
- --carousel-accent-soft: color-mix(in srgb, var(--carousel-accent) 22%, transparent);
1088
+ --carousel-accent-soft: color-mix(in srgb, var(--carousel-accent) 22%, var(--carousel-surface));
1089
+ --carousel-glow-soft: color-mix(in srgb, var(--carousel-surface-glow) 55%, var(--carousel-surface));
1089
1090
  --carousel-body-line-height: 1.3;
1090
1091
  }
1091
1092
 
@@ -1095,10 +1096,11 @@ ${K}`,templateName:"decks:description"})).description,await this.reportProgress(
1095
1096
  --carousel-surface-glow: #fbf6ea;
1096
1097
  --carousel-ink: var(--color-text, #15171a);
1097
1098
  --carousel-heading: var(--color-heading, #0a0c10);
1098
- --carousel-ink-muted: color-mix(in srgb, var(--carousel-ink) 55%, transparent);
1099
- --carousel-divider: color-mix(in srgb, var(--carousel-ink) 18%, transparent);
1099
+ --carousel-ink-muted: color-mix(in srgb, var(--carousel-ink) 55%, var(--carousel-surface));
1100
+ --carousel-divider: color-mix(in srgb, var(--carousel-ink) 18%, var(--carousel-surface));
1100
1101
  --carousel-accent: var(--color-accent, var(--color-brand, #c5500e));
1101
- --carousel-accent-soft: color-mix(in srgb, var(--carousel-accent) 14%, transparent);
1102
+ --carousel-accent-soft: color-mix(in srgb, var(--carousel-accent) 14%, var(--carousel-surface));
1103
+ --carousel-glow-soft: color-mix(in srgb, var(--carousel-surface-glow) 70%, var(--carousel-surface));
1102
1104
  --carousel-body-line-height: 1.26;
1103
1105
  }
1104
1106
 
@@ -1112,17 +1114,28 @@ ${K}`,templateName:"decks:description"})).description,await this.reportProgress(
1112
1114
  display: grid;
1113
1115
  grid-template-rows: auto 1fr auto;
1114
1116
  padding: 88px 108px;
1115
- background:
1116
- radial-gradient(circle at 100% 0%, var(--carousel-accent-soft), transparent 42%),
1117
- radial-gradient(circle at 0% 100%, var(--carousel-surface-glow), transparent 55%),
1118
- linear-gradient(165deg, var(--carousel-surface) 0%, var(--carousel-surface-deep) 100%);
1117
+ /* Keep the PDF background fully opaque. LinkedIn re-rasterizes
1118
+ uploaded documents and can flatten transparent gradients
1119
+ differently than local PDF viewers. */
1120
+ background-color: var(--carousel-surface);
1121
+ background-image: linear-gradient(
1122
+ 165deg,
1123
+ var(--carousel-surface) 0%,
1124
+ var(--carousel-accent-soft) 26%,
1125
+ var(--carousel-glow-soft) 62%,
1126
+ var(--carousel-surface-deep) 100%
1127
+ );
1119
1128
  }
1120
1129
 
1121
1130
  .deck-carousel-slide.is-cover {
1122
- background:
1123
- radial-gradient(circle at 12% 14%, var(--carousel-accent-soft), transparent 48%),
1124
- radial-gradient(circle at 92% 92%, var(--carousel-surface-glow), transparent 60%),
1125
- linear-gradient(155deg, var(--carousel-surface-deep) 0%, var(--carousel-surface) 60%, var(--carousel-surface-deep) 100%);
1131
+ background-color: var(--carousel-surface-deep);
1132
+ background-image: linear-gradient(
1133
+ 155deg,
1134
+ var(--carousel-accent-soft) 0%,
1135
+ var(--carousel-surface-deep) 34%,
1136
+ var(--carousel-surface) 68%,
1137
+ var(--carousel-glow-soft) 100%
1138
+ );
1126
1139
  }
1127
1140
 
1128
1141
  .deck-carousel-slide:last-child {
@@ -1471,12 +1484,12 @@ ${$.join(`
1471
1484
  </div>
1472
1485
  </body>
1473
1486
  </html>`}H0();H0();c4();H0();H0();function lO(w){let $=ZU0(w.template,w.format),X=z.record(z.unknown()).parse(w.content),W=z.record(z.unknown()).parse(w.template.schema.parse(X)),Y=new LG(w.siteConfig.title),J=zU0(w.imageBuildService),G=mO(xQ,{headCollector:Y,children:mO(BQ,{imageRenderer:J,children:mO($,W)})}),K=OU0(G);if(!Y.getHeadProps())Y.setHeadProps({title:w.siteConfig.title});let H=VU0(Y.generateHeadHTML(),w.noindex??!0);return gO(K,H,w.siteConfig.title,w.siteConfig.themeMode)}function ZU0(w,$){let X=w.renderers[$];if(!X||typeof X!=="function")throw Error(`No ${$} renderer for template: ${w.name}`);return X}function zU0(w){return w?.createImageRenderer()??null}function VU0(w,$){if(!$)return w;return`${w}
1474
- <meta name="robots" content="noindex,nofollow">`}import{createServer as MU0}from"http";import{lstat as Ru,mkdir as qu,readFile as BU0,writeFile as Du}from"fs/promises";import{dirname as NU0,extname as RU0,join as pO,posix as hU0,resolve as _G,sep as hu}from"path";async function cO(w){let $=DU0(w.mediaPath),X=vU0(w.outputDir,$),W=lO({template:w.template,format:w.format,content:w.content,siteConfig:w.siteConfig,imageBuildService:w.imageBuildService});return await qu(NU0(X),{recursive:!0}),await Du(X,W,"utf-8"),await qU0(w.outputDir,w.themeCSS),{urlPath:$,filePath:X}}async function qU0(w,$){let X=pO(w,"styles");await qu(X,{recursive:!0}),await Du(pO(X,"main.css"),$,"utf-8")}async function dO(w){let $=_G(w.rootDir),X=w.host??"127.0.0.1",W=MU0(async(G,K)=>{try{let H=new URL(G.url??"/",`http://${X}`),f=decodeURIComponent(H.pathname);if(LU0(f)){K.writeHead(403),K.end("Forbidden");return}let A=f.startsWith("/")?f.slice(1):f,Q=_G($,A);if(!rO($,Q)){K.writeHead(403),K.end("Forbidden");return}let F=await _U0(Q);if(!F||!rO($,F)){K.writeHead(404),K.end("Not found");return}let Z=await BU0(F);K.writeHead(200,{"content-type":PU0(F)}),K.end(Z)}catch{K.writeHead(404),K.end("Not found")}});await kU0(W,X);let Y=TU0(W),J=`http://${X}:${Y}`;return{baseUrl:J,urlFor:(G)=>`${J}${G.startsWith("/")?G:`/${G}`}`,close:()=>EU0(W)}}function DU0(w){if(!w.startsWith("/_media/"))throw Error("Media render paths must start with /_media/");if(w.split("/").filter(Boolean).some((W)=>W===".."))throw Error("Media render path cannot contain traversal");let X=hU0.normalize(w);if(!X.startsWith("/_media/"))throw Error("Media render path cannot contain traversal");return X.endsWith("/")?X:`${X}/`}function vU0(w,$){let X=_G(w),W=$.slice(1),Y=_G(X,W,"index.html");if(!rO(X,Y))throw Error("Media render path cannot contain traversal");return Y}function LU0(w){return w.split("/").some(($)=>$==="..")}function rO(w,$){let X=w.endsWith(hu)?w:`${w}${hu}`;return $===w||$.startsWith(X)}async function _U0(w){try{let $=await Ru(w);if($.isSymbolicLink())return null;if($.isDirectory()){let X=pO(w,"index.html"),W=await Ru(X).catch(()=>null);if(!W||W.isSymbolicLink())return null;return W.isFile()?X:null}if($.isFile())return w;return null}catch{return null}}function PU0(w){switch(RU0(w).toLowerCase()){case".css":return"text/css; charset=utf-8";case".html":return"text/html; charset=utf-8";case".js":return"application/javascript; charset=utf-8";case".json":return"application/json";case".png":return"image/png";case".jpg":case".jpeg":return"image/jpeg";case".svg":return"image/svg+xml";case".webp":return"image/webp";default:return"application/octet-stream"}}async function kU0(w,$){await new Promise((X,W)=>{let Y=(G)=>{w.off("listening",J),W(G)},J=()=>{w.off("error",Y),X()};w.once("error",Y),w.once("listening",J),w.listen(0,$)})}function TU0(w){let $=w.address();if(typeof $!=="object"||$===null)throw Error("Static render server did not bind to a TCP port");return $.port}async function EU0(w){await new Promise(($,X)=>{w.close((W)=>{if(W){X(W);return}$()})})}H0();var bU0=26214400,xU0=60000,vu=20;class iO{context;renderPdf;getThemeMode;constructor(w,$={}){this.context=w;this.renderPdf=$.renderPdf??HF,this.getThemeMode=$.getThemeMode??(async()=>"dark")}async resolve(w){if(w.sourceEntityType!=="deck")return;let $=await this.context.entityService.getEntity({entityType:"deck",id:w.sourceEntityId});if(!$)return;let X=yU0($,{brandLabel:this.resolveBrandLabel()});if(X.slides.length>vu)throw Error(`Refusing to render carousel with ${X.slides.length} slides; maxSlides=${vu}`);let W=await this.getThemeMode(),Y=await jU0(CU0(SU0(),"brain-deck-carousel-"));try{let J=await cO({outputDir:Y,mediaPath:`/_media/carousel/${$.id}`,template:Dj,format:"pdf",content:X,siteConfig:{title:X.title,themeMode:W},themeCSS:this.context.themeCSS}),G=await dO({rootDir:Y});try{return{type:"document",data:await this.renderPdf(G.urlFor(J.urlPath),{maxBytes:bU0,timeoutMs:xU0,printBackground:!0,preferCSSPageSize:!0}),mimeType:"application/pdf",filename:`${uU0($)}-carousel.pdf`}}finally{await G.close()}}finally{await IU0(Y,{recursive:!0,force:!0})}}resolveBrandLabel(){let w=this.context.domain?.trim();if(w&&w.length>0)return w;let $=this.context.identity.getProfile().name;return $.length>0?$:void 0}}function yU0(w,$={}){let{frontmatter:X,content:W}=SH(w.content),Y=typeof X.title==="string"?X.title:w.metadata.title,J=typeof X.event==="string"&&X.event.length>0?X.event:void 0,G=W.split(/^---$/gm).map((K)=>K.trim()).filter((K)=>K.length>0).map((K)=>({markdown:K}));return{title:Y,slides:G,...$.brandLabel?{brandLabel:$.brandLabel}:{},...J?{eyebrow:J}:{}}}function uU0(w){let $=w.metadata.slug;return $.length>0?$:J5(w.metadata.title)}var Lu={name:"@brains/decks",private:!0,version:"0.2.0-alpha.82",description:"Presentation decks plugin for creating and viewing slide presentations",type:"module",exports:{".":"./src/index.ts"},scripts:{typecheck:"tsc --noEmit",test:"bun test",lint:"eslint . --ext .ts","lint:fix":"eslint . --ext .ts --fix",eval:"cd evals && bun run brain-eval"},dependencies:{"@brains/content-formatters":"workspace:*","@brains/contracts":"workspace:*","@brains/image":"workspace:*","@brains/media-page-composer":"workspace:*","@brains/media-renderer":"workspace:*","@brains/plugins":"workspace:*","@brains/site-info":"workspace:*","@brains/ui-library":"workspace:*","@brains/utils":"workspace:*"},devDependencies:{"@brains/app":"workspace:*","@brains/eslint-config":"workspace:*","@brains/typescript-config":"workspace:*","@types/bun":"latest","bun-types":"latest",eslint:"^8.56.0",typescript:"^5.3.3"}};class _u extends u6{deps;entityType=Z$.entityType;schema=Z$.schema;adapter=Z$;unregisterCarouselAttachmentProvider;constructor(w={}){super("decks",Lu);this.deps=w}createGenerationHandler(w){return new KF(this.logger.child("DeckGenerationJobHandler"),w)}getTemplates(){return{"deck-detail":oQ,"deck-list":$F,generation:zj,description:Vj}}getDataSources(){return[new GF(this.logger)]}getEntityTypeConfig(){return{weight:1.5}}async onRegister(w){await this.registerWithPublishPipeline(w),this.subscribeToPublishExecute(w),this.registerCarouselAttachmentProvider(w),this.registerEvalHandlers(w),this.logger.info("Decks plugin registered")}async onShutdown(){this.unregisterCarouselAttachmentProvider?.(),this.unregisterCarouselAttachmentProvider=void 0}async registerWithPublishPipeline(w){await w.messaging.send({type:"publish:register",payload:{entityType:"deck",provider:{name:"internal",publish:async()=>({id:"internal"})}}})}subscribeToPublishExecute(w){w.messaging.subscribe("publish:execute",async($)=>{let{entityType:X,entityId:W}=$.payload;if(X!=="deck")return{success:!0};try{let Y=await w.entityService.getEntity({entityType:"deck",id:W});if(!Y)return await w.messaging.send({type:"publish:report:failure",payload:{entityType:X,entityId:W,error:`Deck not found: ${W}`}}),{success:!0};if(Y.metadata.status==="published")return{success:!0};let J=new Date().toISOString(),G={...Y,metadata:{...Y.metadata,status:"published",publishedAt:J}};await w.entityService.updateEntity({entity:{...G,content:this.adapter.toMarkdown(G)}}),await w.messaging.send({type:"publish:report:success",payload:{entityType:X,entityId:W,result:{id:W}}})}catch(Y){await w.messaging.send({type:"publish:report:failure",payload:{entityType:X,entityId:W,error:a1(Y)}})}return{success:!0}})}registerCarouselAttachmentProvider(w){let $={...this.deps,getThemeMode:this.deps.getThemeMode??(async()=>{try{return(await U9(w.entityService)).themeMode??"dark"}catch{return"dark"}})};this.unregisterCarouselAttachmentProvider=w.attachments.register("deck",hj,new iO(w,$))}registerEvalHandlers(w){w.eval.registerHandler("generateDeck",async($)=>{let X=z.object({prompt:z.string(),event:z.string().optional()}).parse($);return w.ai.generate({prompt:`${X.prompt}${X.event?`
1487
+ <meta name="robots" content="noindex,nofollow">`}import{createServer as MU0}from"http";import{lstat as Ru,mkdir as qu,readFile as BU0,writeFile as Du}from"fs/promises";import{dirname as NU0,extname as RU0,join as pO,posix as hU0,resolve as _G,sep as hu}from"path";async function cO(w){let $=DU0(w.mediaPath),X=vU0(w.outputDir,$),W=lO({template:w.template,format:w.format,content:w.content,siteConfig:w.siteConfig,imageBuildService:w.imageBuildService});return await qu(NU0(X),{recursive:!0}),await Du(X,W,"utf-8"),await qU0(w.outputDir,w.themeCSS),{urlPath:$,filePath:X}}async function qU0(w,$){let X=pO(w,"styles");await qu(X,{recursive:!0}),await Du(pO(X,"main.css"),$,"utf-8")}async function dO(w){let $=_G(w.rootDir),X=w.host??"127.0.0.1",W=MU0(async(G,K)=>{try{let H=new URL(G.url??"/",`http://${X}`),f=decodeURIComponent(H.pathname);if(LU0(f)){K.writeHead(403),K.end("Forbidden");return}let A=f.startsWith("/")?f.slice(1):f,Q=_G($,A);if(!rO($,Q)){K.writeHead(403),K.end("Forbidden");return}let F=await _U0(Q);if(!F||!rO($,F)){K.writeHead(404),K.end("Not found");return}let Z=await BU0(F);K.writeHead(200,{"content-type":PU0(F)}),K.end(Z)}catch{K.writeHead(404),K.end("Not found")}});await kU0(W,X);let Y=TU0(W),J=`http://${X}:${Y}`;return{baseUrl:J,urlFor:(G)=>`${J}${G.startsWith("/")?G:`/${G}`}`,close:()=>EU0(W)}}function DU0(w){if(!w.startsWith("/_media/"))throw Error("Media render paths must start with /_media/");if(w.split("/").filter(Boolean).some((W)=>W===".."))throw Error("Media render path cannot contain traversal");let X=hU0.normalize(w);if(!X.startsWith("/_media/"))throw Error("Media render path cannot contain traversal");return X.endsWith("/")?X:`${X}/`}function vU0(w,$){let X=_G(w),W=$.slice(1),Y=_G(X,W,"index.html");if(!rO(X,Y))throw Error("Media render path cannot contain traversal");return Y}function LU0(w){return w.split("/").some(($)=>$==="..")}function rO(w,$){let X=w.endsWith(hu)?w:`${w}${hu}`;return $===w||$.startsWith(X)}async function _U0(w){try{let $=await Ru(w);if($.isSymbolicLink())return null;if($.isDirectory()){let X=pO(w,"index.html"),W=await Ru(X).catch(()=>null);if(!W||W.isSymbolicLink())return null;return W.isFile()?X:null}if($.isFile())return w;return null}catch{return null}}function PU0(w){switch(RU0(w).toLowerCase()){case".css":return"text/css; charset=utf-8";case".html":return"text/html; charset=utf-8";case".js":return"application/javascript; charset=utf-8";case".json":return"application/json";case".png":return"image/png";case".jpg":case".jpeg":return"image/jpeg";case".svg":return"image/svg+xml";case".webp":return"image/webp";default:return"application/octet-stream"}}async function kU0(w,$){await new Promise((X,W)=>{let Y=(G)=>{w.off("listening",J),W(G)},J=()=>{w.off("error",Y),X()};w.once("error",Y),w.once("listening",J),w.listen(0,$)})}function TU0(w){let $=w.address();if(typeof $!=="object"||$===null)throw Error("Static render server did not bind to a TCP port");return $.port}async function EU0(w){await new Promise(($,X)=>{w.close((W)=>{if(W){X(W);return}$()})})}H0();var bU0=26214400,xU0=60000,vu=20;class iO{context;renderPdf;getThemeMode;constructor(w,$={}){this.context=w;this.renderPdf=$.renderPdf??HF,this.getThemeMode=$.getThemeMode??(async()=>"dark")}async resolve(w){if(w.sourceEntityType!=="deck")return;let $=await this.context.entityService.getEntity({entityType:"deck",id:w.sourceEntityId});if(!$)return;let X=yU0($,{brandLabel:this.resolveBrandLabel()});if(X.slides.length>vu)throw Error(`Refusing to render carousel with ${X.slides.length} slides; maxSlides=${vu}`);let W=await this.getThemeMode(),Y=await jU0(CU0(SU0(),"brain-deck-carousel-"));try{let J=await cO({outputDir:Y,mediaPath:`/_media/carousel/${$.id}`,template:Dj,format:"pdf",content:X,siteConfig:{title:X.title,themeMode:W},themeCSS:this.context.themeCSS}),G=await dO({rootDir:Y});try{return{type:"document",data:await this.renderPdf(G.urlFor(J.urlPath),{maxBytes:bU0,timeoutMs:xU0,printBackground:!0,preferCSSPageSize:!0}),mimeType:"application/pdf",filename:`${uU0($)}-carousel.pdf`}}finally{await G.close()}}finally{await IU0(Y,{recursive:!0,force:!0})}}resolveBrandLabel(){let w=this.context.domain?.trim();if(w&&w.length>0)return w;let $=this.context.identity.getProfile().name;return $.length>0?$:void 0}}function yU0(w,$={}){let{frontmatter:X,content:W}=SH(w.content),Y=typeof X.title==="string"?X.title:w.metadata.title,J=typeof X.event==="string"&&X.event.length>0?X.event:void 0,G=W.split(/^---$/gm).map((K)=>K.trim()).filter((K)=>K.length>0).map((K)=>({markdown:K}));return{title:Y,slides:G,...$.brandLabel?{brandLabel:$.brandLabel}:{},...J?{eyebrow:J}:{}}}function uU0(w){let $=w.metadata.slug;return $.length>0?$:J5(w.metadata.title)}var Lu={name:"@brains/decks",private:!0,version:"0.2.0-alpha.83",description:"Presentation decks plugin for creating and viewing slide presentations",type:"module",exports:{".":"./src/index.ts"},scripts:{typecheck:"tsc --noEmit",test:"bun test",lint:"eslint . --ext .ts","lint:fix":"eslint . --ext .ts --fix",eval:"cd evals && bun run brain-eval"},dependencies:{"@brains/content-formatters":"workspace:*","@brains/contracts":"workspace:*","@brains/image":"workspace:*","@brains/media-page-composer":"workspace:*","@brains/media-renderer":"workspace:*","@brains/plugins":"workspace:*","@brains/site-info":"workspace:*","@brains/ui-library":"workspace:*","@brains/utils":"workspace:*"},devDependencies:{"@brains/app":"workspace:*","@brains/eslint-config":"workspace:*","@brains/typescript-config":"workspace:*","@types/bun":"latest","bun-types":"latest",eslint:"^8.56.0",typescript:"^5.3.3"}};class _u extends u6{deps;entityType=Z$.entityType;schema=Z$.schema;adapter=Z$;unregisterCarouselAttachmentProvider;constructor(w={}){super("decks",Lu);this.deps=w}createGenerationHandler(w){return new KF(this.logger.child("DeckGenerationJobHandler"),w)}getTemplates(){return{"deck-detail":oQ,"deck-list":$F,generation:zj,description:Vj}}getDataSources(){return[new GF(this.logger)]}getEntityTypeConfig(){return{weight:1.5}}async onRegister(w){await this.registerWithPublishPipeline(w),this.subscribeToPublishExecute(w),this.registerCarouselAttachmentProvider(w),this.registerEvalHandlers(w),this.logger.info("Decks plugin registered")}async onShutdown(){this.unregisterCarouselAttachmentProvider?.(),this.unregisterCarouselAttachmentProvider=void 0}async registerWithPublishPipeline(w){await w.messaging.send({type:"publish:register",payload:{entityType:"deck",provider:{name:"internal",publish:async()=>({id:"internal"})}}})}subscribeToPublishExecute(w){w.messaging.subscribe("publish:execute",async($)=>{let{entityType:X,entityId:W}=$.payload;if(X!=="deck")return{success:!0};try{let Y=await w.entityService.getEntity({entityType:"deck",id:W});if(!Y)return await w.messaging.send({type:"publish:report:failure",payload:{entityType:X,entityId:W,error:`Deck not found: ${W}`}}),{success:!0};if(Y.metadata.status==="published")return{success:!0};let J=new Date().toISOString(),G={...Y,metadata:{...Y.metadata,status:"published",publishedAt:J}};await w.entityService.updateEntity({entity:{...G,content:this.adapter.toMarkdown(G)}}),await w.messaging.send({type:"publish:report:success",payload:{entityType:X,entityId:W,result:{id:W}}})}catch(Y){await w.messaging.send({type:"publish:report:failure",payload:{entityType:X,entityId:W,error:a1(Y)}})}return{success:!0}})}registerCarouselAttachmentProvider(w){let $={...this.deps,getThemeMode:this.deps.getThemeMode??(async()=>{try{return(await U9(w.entityService)).themeMode??"dark"}catch{return"dark"}})};this.unregisterCarouselAttachmentProvider=w.attachments.register("deck",hj,new iO(w,$))}registerEvalHandlers(w){w.eval.registerHandler("generateDeck",async($)=>{let X=z.object({prompt:z.string(),event:z.string().optional()}).parse($);return w.ai.generate({prompt:`${X.prompt}${X.event?`
1475
1488
 
1476
1489
  Note: This presentation is for "${X.event}".`:""}`,templateName:"decks:generation"})}),w.eval.registerHandler("generateDescription",async($)=>{let X=z.object({title:z.string(),content:z.string()}).parse($);return w.ai.generate({prompt:`Title: ${X.title}
1477
1490
 
1478
1491
  Content:
1479
- ${X.content}`,templateName:"decks:description"})})}}c4();H0();A1();var PG=j8.extend({expertise:z.array(z.string()).optional().describe("Skills, domains, areas of focus"),currentFocus:z.string().optional().describe("What you're currently working on"),availability:z.string().optional().describe("What you're open to (consulting, speaking, etc.)")}),Q4=M3.extend(PG.shape);A1();o4();H0();var mU0=new T5;class kG{postsListUrl;decksListUrl;id="professional:homepage-list";name="Homepage List DataSource";description="Fetches profile, blog posts, and presentation decks for homepage";constructor(w,$){this.postsListUrl=w;this.decksListUrl=$}async fetch(w,$,X){let W=X.entityService,[Y,J,G,K]=await Promise.all([V3(W),W.listEntities({entityType:"post",options:{limit:20}}),W.listEntities({entityType:"deck",options:{limit:20}}),U9(W)]),H=mU0.parseProfileBody(Y,Q4),f=J.sort(K8).slice(0,3).map(s4),A=G.sort(K8).slice(0,3).map(z$);if(!K.cta)throw Error("CTA not configured in site-info");let Q={profile:H,posts:f,decks:A,postsListUrl:this.postsListUrl,decksListUrl:this.decksListUrl,cta:K.cta,sections:K.sections??{}};return $.parse(Q)}}A1();o4();var lU0=new T5;class TG{id="professional:about";name="About Page DataSource";description="Fetches full profile data for the about page";async fetch(w,$,X){let W=await V3(X.entityService),J={profile:lU0.parseProfileBody(W,Q4)};return $.parse(J)}}import{jsxDEV as E1,Fragment as cU0}from"preact/jsx-dev-runtime";var pU0="grid md:grid-cols-[14rem_1px_1fr] gap-y-2 gap-x-0 md:gap-16 items-start",rU0="border-t md:border-t-0 md:border-l border-rule-strong md:self-stretch",nO=({number:w,title:$,blurb:X,children:W})=>E1("section",{className:"py-20 border-b border-rule px-6 md:px-12",children:E1("div",{className:"max-w-6xl mx-auto",children:E1("div",{className:pU0,children:[E1(IQ,{title:$,number:w,blurb:X},void 0,!1,void 0,this),E1("div",{className:rU0,"aria-hidden":"true"},void 0,!1,void 0,this),E1("div",{className:"mt-6 md:mt-0",children:W},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this),oO=({profile:w,posts:$,decks:X,postsListUrl:W,decksListUrl:Y,cta:J,sections:G})=>{let K=w.tagline||w.description,H=$.map((Z)=>({id:Z.id,url:Z.url,title:Z.metadata.title,date:Z.metadata.publishedAt||Z.created,description:Z.frontmatter.excerpt,series:Z.frontmatter.seriesName&&Z.frontmatter.seriesIndex?{name:Z.frontmatter.seriesName,index:Z.frontmatter.seriesIndex}:void 0})),f=X.map((Z)=>({id:Z.id,url:Z.url,title:Z.frontmatter.title||Z.id,date:Z.frontmatter.publishedAt??Z.created,description:Z.frontmatter.description})),A=w.name||"Home",Q=w.intro||w.description||K||"Professional site",F=Boolean(w.description)||w.expertise!==void 0&&w.expertise.length>0;return E1(cU0,{children:[E1(V2,{title:A,description:Q,ogType:"website"},void 0,!1,void 0,this),E1("div",{className:"homepage-list bg-theme",children:[E1("header",{className:"hero-bg-pattern relative w-full px-6 md:px-12 pt-28 pb-24 md:pt-28 md:pb-24 overflow-hidden border-b border-rule",children:E1("div",{className:"relative z-10 max-w-6xl mx-auto w-full",children:[w.name&&E1("div",{className:"flex items-center gap-[0.6rem] mb-6 font-mono text-[0.7rem] font-medium uppercase tracking-[0.22em] text-accent",children:[E1("span",{className:"w-[18px] h-px bg-accent","aria-hidden":"true"},void 0,!1,void 0,this),E1("span",{children:w.name},void 0,!1,void 0,this)]},void 0,!0,void 0,this),K&&E1("h1",{className:"font-heading text-[clamp(2.75rem,6.5vw,5.5rem)] font-normal text-heading leading-[1.02] tracking-[-0.025em] max-w-[18ch] [font-variation-settings:'opsz'_144,'SOFT'_30]",children:XJ(K,"italic font-normal text-accent [font-variation-settings:'opsz'_144,'SOFT'_80]")},void 0,!1,void 0,this),w.intro&&E1("p",{className:"font-heading font-light text-[clamp(1.1rem,1.8vw,1.4rem)] leading-[1.5] text-theme-muted max-w-[42ch] mt-8 [font-variation-settings:'opsz'_24]",children:XJ(w.intro,"italic text-accent")},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),E1(nO,{number:"01",title:"Essays",blurb:G.essays?.blurb,children:E1($J,{items:H,viewAllUrl:W,viewAllLabel:"View all essays"},void 0,!1,void 0,this)},void 0,!1,void 0,this),f.length>0&&E1(nO,{number:"02",title:"Presentations",blurb:G.presentations?.blurb,children:E1($J,{items:f,viewAllUrl:Y,viewAllLabel:"View all presentations"},void 0,!1,void 0,this)},void 0,!1,void 0,this),F&&E1(nO,{number:"03",title:"About",blurb:G.about?.blurb,children:E1("div",{className:"flex flex-col gap-8",children:[w.description&&E1("p",{className:"font-heading font-light text-[1.25rem] leading-[1.55] text-theme max-w-[55ch] [font-variation-settings:'opsz'_24,'SOFT'_50]",children:w.description},void 0,!1,void 0,this),w.expertise&&w.expertise.length>0&&E1(SQ,{subjects:w.expertise},void 0,!1,void 0,this),E1("a",{href:"/about",className:"mt-6 inline-flex items-center gap-2 font-mono text-[0.7rem] font-medium uppercase tracking-[0.18em] text-accent pb-1 relative before:content-[''] before:absolute before:left-0 before:right-full before:bottom-0 before:h-px before:bg-accent before:transition-[right] before:duration-300 hover:before:right-0",children:["Learn more",E1("span",{"aria-hidden":"true",children:"\u2192"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),E1(qQ,{cta:J,variant:"editorial",socialLinks:w.socialLinks},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)};import{jsxDEV as R1,Fragment as dU0}from"preact/jsx-dev-runtime";var aO=({profile:w})=>{let $=`About ${w.name||"Me"}`,X=w.description||w.intro||"About page",W=w.expertise&&w.expertise.length>0||w.currentFocus||w.availability||w.email||w.website||w.socialLinks&&w.socialLinks.length>0;return R1(dU0,{children:[R1(V2,{title:$,description:X,ogType:"profile"},void 0,!1,void 0,this),R1("div",{className:"about-page bg-theme",children:[R1("header",{className:"hero-bg-pattern relative w-full py-16 md:py-24 px-6 md:px-12 bg-theme overflow-hidden",children:R1("div",{className:"relative z-10 max-w-4xl mx-auto",children:[R1("h1",{className:"text-5xl md:text-6xl font-semibold mb-6 text-heading",children:["About ",w.name||"Me"]},void 0,!0,void 0,this),w.description&&R1("p",{className:"text-xl md:text-2xl text-theme-muted leading-relaxed",children:w.description},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),R1("div",{className:"container mx-auto px-6 md:px-12 max-w-4xl py-12 md:py-16",children:[w.story&&R1("section",{className:"content-section-reveal mb-20 md:mb-28",children:R1(H9,{markdown:w.story},void 0,!1,void 0,this)},void 0,!1,void 0,this),W&&R1("div",{className:"content-section-reveal grid md:grid-cols-2 gap-x-16 gap-y-12",children:[w.expertise&&w.expertise.length>0&&R1("section",{children:[R1("h2",{className:"text-sm tracking-widest uppercase text-theme-muted mb-6",children:"Expertise"},void 0,!1,void 0,this),R1("ul",{className:"flex flex-wrap gap-3",children:w.expertise.map((Y,J)=>R1("li",{className:kQ({variant:"accent",size:"lg"}),children:Y},J,!1,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this),w.currentFocus&&R1("section",{children:[R1("h2",{className:"text-sm tracking-widest uppercase text-theme-muted mb-6",children:"Current Focus"},void 0,!1,void 0,this),R1("p",{className:"text-lg text-theme leading-relaxed",children:w.currentFocus},void 0,!1,void 0,this)]},void 0,!0,void 0,this),w.availability&&R1("section",{children:[R1("h2",{className:"text-sm tracking-widest uppercase text-theme-muted mb-6",children:"Availability"},void 0,!1,void 0,this),R1("p",{className:"text-lg text-theme leading-relaxed",children:w.availability},void 0,!1,void 0,this)]},void 0,!0,void 0,this),(w.email||w.website||w.socialLinks&&w.socialLinks.length>0)&&R1("section",{children:[R1("h2",{className:"text-sm tracking-widest uppercase text-theme-muted mb-6",children:"Contact"},void 0,!1,void 0,this),R1("div",{className:"space-y-4",children:[w.email&&R1("p",{className:"text-lg",children:R1("a",{href:`mailto:${w.email}`,className:"text-brand hover:text-brand-dark transition-colors",children:w.email},void 0,!1,void 0,this)},void 0,!1,void 0,this),w.website&&R1("p",{className:"text-lg",children:R1("a",{href:w.website,target:"_blank",rel:"noopener noreferrer",className:"text-brand hover:text-brand-dark transition-colors",children:w.website},void 0,!1,void 0,this)},void 0,!1,void 0,this),w.socialLinks&&w.socialLinks.length>0&&R1("div",{className:"flex flex-wrap gap-4 mt-4",children:w.socialLinks.map((Y,J)=>R1(c5,{href:Y.url,external:!0,variant:"secondary",size:"md",children:Y.label||Y.platform},J,!1,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)};import{jsxDEV as p2,Fragment as Pu}from"preact/jsx-dev-runtime";var sO=()=>{return p2(Pu,{children:[p2(V2,{title:"Thanks for subscribing!",description:"You've successfully subscribed to the newsletter."},void 0,!1,void 0,this),p2("div",{className:"min-h-[60vh] flex items-center justify-center px-6",children:p2("div",{className:"text-center max-w-md",children:[p2("div",{className:"text-6xl mb-6",children:"\uD83C\uDF89"},void 0,!1,void 0,this),p2("h1",{className:"text-3xl font-semibold mb-4 text-heading",children:"Thanks for subscribing!"},void 0,!1,void 0,this),p2("p",{className:"text-lg text-theme-muted mb-8",children:"You'll receive a confirmation email shortly. Check your inbox to confirm your subscription."},void 0,!1,void 0,this),p2(c5,{href:"/",variant:"primary",children:"Back to Home"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},tO=()=>{return p2(Pu,{children:[p2(V2,{title:"Subscription failed",description:"There was a problem with your subscription."},void 0,!1,void 0,this),p2("div",{className:"min-h-[60vh] flex items-center justify-center px-6",children:p2("div",{className:"text-center max-w-md",children:[p2("div",{className:"text-6xl mb-6",children:"\uD83D\uDE22"},void 0,!1,void 0,this),p2("h1",{className:"text-3xl font-semibold mb-4 text-heading",children:"Something went wrong"},void 0,!1,void 0,this),p2("p",{className:"text-lg text-theme-muted mb-8",children:"We couldn't process your subscription. Please try again or contact us if the problem persists."},void 0,!1,void 0,this),p2(c5,{href:"/",variant:"primary",children:"Back to Home"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};H0();var ku=z.object({label:z.string().describe("Display label for entity type (e.g., 'Essay')"),pluralName:z.string().optional().describe("URL path segment (defaults to label.toLowerCase() + 's')")}),Tu=z.object({entityDisplay:z.object({post:ku,deck:ku}).describe("Display metadata for post and deck entity types (required for homepage)")});var Eu={name:"@brains/site-professional",private:!0,version:"0.2.0-alpha.82",description:"Professional site composition package",type:"module",exports:{".":"./src/index.ts"},files:["src"],scripts:{typecheck:"tsc --noEmit",lint:"eslint . --ext .ts","lint:fix":"eslint . --ext .ts --fix"},dependencies:{"@brains/blog":"workspace:*","@brains/decks":"workspace:*","@brains/identity-service":"workspace:*","@brains/plugins":"workspace:*","@brains/site-composition":"workspace:*","@brains/site-engine":"workspace:*","@brains/site-info":"workspace:*","@brains/templates":"workspace:*","@brains/ui-library":"workspace:*","@brains/utils":"workspace:*",preact:"^10.27.2"},devDependencies:{"@brains/eslint-config":"workspace:*","@brains/typescript-config":"workspace:*","@types/bun":"latest","bun-types":"latest",eslint:"^8.56.0",typescript:"^5.3.3"}};class eO extends k8{dependencies=["blog","decks"];constructor(w){super("professional-site",Eu,w,Tu)}async onRegister(w){w.entities.extendFrontmatterSchema("anchor-profile",PG);let $=this.config.entityDisplay.post,X=this.config.entityDisplay.deck,W=`/${$.pluralName??$.label.toLowerCase()+"s"}`,Y=`/${X.pluralName??X.label.toLowerCase()+"s"}`,J=new kG(W,Y);w.entities.registerDataSource(J);let G=new TG;w.entities.registerDataSource(G);let K=z.object({profile:Q4,posts:z.array(r5),decks:z.array(O$),postsListUrl:z.string(),decksListUrl:z.string(),cta:F$,sections:z.record(z.string(),_W)}),H=z.object({profile:Q4}),f=z.object({});w.templates.register({"homepage-list":T1({name:"homepage-list",description:"Professional homepage with essays and presentations",schema:K,dataSourceId:"professional:homepage-list",requiredPermission:"public",layout:{component:oO}}),about:T1({name:"about",description:"About page with full profile information",schema:H,dataSourceId:"professional:about",requiredPermission:"public",layout:{component:aO}}),"subscribe-thanks":T1({name:"subscribe-thanks",description:"Newsletter subscription success page",schema:f,requiredPermission:"public",layout:{component:sO}}),"subscribe-error":T1({name:"subscribe-error",description:"Newsletter subscription error page",schema:f,requiredPermission:"public",layout:{component:tO}})}),this.logger.info("Professional site plugin registered successfully")}async getTools(){return[]}async getResources(){return[]}}function wZ(w){return new eO(w??{})}var $Z=[{id:"home",path:"/",title:"Home",description:"Professional site homepage",layout:"default",navigation:{show:!0,label:"Home",slot:"secondary",priority:10},sections:[{id:"homepage",template:"professional-site:homepage-list",dataQuery:{}}]},{id:"about",path:"/about",title:"About",description:"About page",layout:"default",navigation:{show:!0,label:"About",slot:"primary",priority:90},sections:[{id:"about",template:"professional-site:about",dataQuery:{}}]},{id:"subscribe-thanks",path:"/subscribe/thanks",title:"Thanks for subscribing",description:"Newsletter subscription confirmation",layout:"default",navigation:{show:!1},sections:[{id:"subscribe-thanks",template:"professional-site:subscribe-thanks",dataQuery:{},content:{}}]},{id:"subscribe-error",path:"/subscribe/error",title:"Subscription failed",description:"Newsletter subscription error",layout:"default",navigation:{show:!1},sections:[{id:"subscribe-error",template:"professional-site:subscribe-error",dataQuery:{},content:{}}]}];import{jsxDEV as EG}from"preact/jsx-dev-runtime";function XZ({sections:w,siteInfo:$,slots:X,wordmark:W}){return EG("div",{className:"flex flex-col min-h-screen bg-theme overflow-x-clip",children:[EG(G$,{title:$.title,navigation:$.navigation.primary,showThemeToggle:!0,...$.logo!==void 0?{logo:$.logo}:{},...W!==void 0?{wordmark:W}:{}},void 0,!1,void 0,this),EG("main",{className:"flex-grow flex flex-col bg-theme",children:w},void 0,!1,void 0,this),EG(vQ,{primaryNavigation:$.navigation.primary,secondaryNavigation:$.navigation.secondary,copyright:$.copyright,socialLinks:$.socialLinks,title:$.title,tagline:$.description,children:X?.getSlot("footer-top").map((Y)=>Y.render())},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function ju(w){return{id:w.id,version:w.version,type:w.type,packageName:w.packageName}}var ee0=dQ;function w01(w){return ju(rQ(w))}var nU0=cQ,$01=nU0,X01=XZ;function W01(w){return ju(wZ(w))}var Y01=$Z;export{nU0 as routes,W01 as professionalSitePlugin,Y01 as professionalRoutes,w01 as personalSitePlugin,$01 as personalRoutes,X01 as ProfessionalLayout,ee0 as PersonalLayout};
1492
+ ${X.content}`,templateName:"decks:description"})})}}c4();H0();A1();var PG=j8.extend({expertise:z.array(z.string()).optional().describe("Skills, domains, areas of focus"),currentFocus:z.string().optional().describe("What you're currently working on"),availability:z.string().optional().describe("What you're open to (consulting, speaking, etc.)")}),Q4=M3.extend(PG.shape);A1();o4();H0();var mU0=new T5;class kG{postsListUrl;decksListUrl;id="professional:homepage-list";name="Homepage List DataSource";description="Fetches profile, blog posts, and presentation decks for homepage";constructor(w,$){this.postsListUrl=w;this.decksListUrl=$}async fetch(w,$,X){let W=X.entityService,[Y,J,G,K]=await Promise.all([V3(W),W.listEntities({entityType:"post",options:{limit:20}}),W.listEntities({entityType:"deck",options:{limit:20}}),U9(W)]),H=mU0.parseProfileBody(Y,Q4),f=J.sort(K8).slice(0,3).map(s4),A=G.sort(K8).slice(0,3).map(z$);if(!K.cta)throw Error("CTA not configured in site-info");let Q={profile:H,posts:f,decks:A,postsListUrl:this.postsListUrl,decksListUrl:this.decksListUrl,cta:K.cta,sections:K.sections??{}};return $.parse(Q)}}A1();o4();var lU0=new T5;class TG{id="professional:about";name="About Page DataSource";description="Fetches full profile data for the about page";async fetch(w,$,X){let W=await V3(X.entityService),J={profile:lU0.parseProfileBody(W,Q4)};return $.parse(J)}}import{jsxDEV as E1,Fragment as cU0}from"preact/jsx-dev-runtime";var pU0="grid md:grid-cols-[14rem_1px_1fr] gap-y-2 gap-x-0 md:gap-16 items-start",rU0="border-t md:border-t-0 md:border-l border-rule-strong md:self-stretch",nO=({number:w,title:$,blurb:X,children:W})=>E1("section",{className:"py-20 border-b border-rule px-6 md:px-12",children:E1("div",{className:"max-w-6xl mx-auto",children:E1("div",{className:pU0,children:[E1(IQ,{title:$,number:w,blurb:X},void 0,!1,void 0,this),E1("div",{className:rU0,"aria-hidden":"true"},void 0,!1,void 0,this),E1("div",{className:"mt-6 md:mt-0",children:W},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this),oO=({profile:w,posts:$,decks:X,postsListUrl:W,decksListUrl:Y,cta:J,sections:G})=>{let K=w.tagline||w.description,H=$.map((Z)=>({id:Z.id,url:Z.url,title:Z.metadata.title,date:Z.metadata.publishedAt||Z.created,description:Z.frontmatter.excerpt,series:Z.frontmatter.seriesName&&Z.frontmatter.seriesIndex?{name:Z.frontmatter.seriesName,index:Z.frontmatter.seriesIndex}:void 0})),f=X.map((Z)=>({id:Z.id,url:Z.url,title:Z.frontmatter.title||Z.id,date:Z.frontmatter.publishedAt??Z.created,description:Z.frontmatter.description})),A=w.name||"Home",Q=w.intro||w.description||K||"Professional site",F=Boolean(w.description)||w.expertise!==void 0&&w.expertise.length>0;return E1(cU0,{children:[E1(V2,{title:A,description:Q,ogType:"website"},void 0,!1,void 0,this),E1("div",{className:"homepage-list bg-theme",children:[E1("header",{className:"hero-bg-pattern relative w-full px-6 md:px-12 pt-28 pb-24 md:pt-28 md:pb-24 overflow-hidden border-b border-rule",children:E1("div",{className:"relative z-10 max-w-6xl mx-auto w-full",children:[w.name&&E1("div",{className:"flex items-center gap-[0.6rem] mb-6 font-mono text-[0.7rem] font-medium uppercase tracking-[0.22em] text-accent",children:[E1("span",{className:"w-[18px] h-px bg-accent","aria-hidden":"true"},void 0,!1,void 0,this),E1("span",{children:w.name},void 0,!1,void 0,this)]},void 0,!0,void 0,this),K&&E1("h1",{className:"font-heading text-[clamp(2.75rem,6.5vw,5.5rem)] font-normal text-heading leading-[1.02] tracking-[-0.025em] max-w-[18ch] [font-variation-settings:'opsz'_144,'SOFT'_30]",children:XJ(K,"italic font-normal text-accent [font-variation-settings:'opsz'_144,'SOFT'_80]")},void 0,!1,void 0,this),w.intro&&E1("p",{className:"font-heading font-light text-[clamp(1.1rem,1.8vw,1.4rem)] leading-[1.5] text-theme-muted max-w-[42ch] mt-8 [font-variation-settings:'opsz'_24]",children:XJ(w.intro,"italic text-accent")},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),E1(nO,{number:"01",title:"Essays",blurb:G.essays?.blurb,children:E1($J,{items:H,viewAllUrl:W,viewAllLabel:"View all essays"},void 0,!1,void 0,this)},void 0,!1,void 0,this),f.length>0&&E1(nO,{number:"02",title:"Presentations",blurb:G.presentations?.blurb,children:E1($J,{items:f,viewAllUrl:Y,viewAllLabel:"View all presentations"},void 0,!1,void 0,this)},void 0,!1,void 0,this),F&&E1(nO,{number:"03",title:"About",blurb:G.about?.blurb,children:E1("div",{className:"flex flex-col gap-8",children:[w.description&&E1("p",{className:"font-heading font-light text-[1.25rem] leading-[1.55] text-theme max-w-[55ch] [font-variation-settings:'opsz'_24,'SOFT'_50]",children:w.description},void 0,!1,void 0,this),w.expertise&&w.expertise.length>0&&E1(SQ,{subjects:w.expertise},void 0,!1,void 0,this),E1("a",{href:"/about",className:"mt-6 inline-flex items-center gap-2 font-mono text-[0.7rem] font-medium uppercase tracking-[0.18em] text-accent pb-1 relative before:content-[''] before:absolute before:left-0 before:right-full before:bottom-0 before:h-px before:bg-accent before:transition-[right] before:duration-300 hover:before:right-0",children:["Learn more",E1("span",{"aria-hidden":"true",children:"\u2192"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),E1(qQ,{cta:J,variant:"editorial",socialLinks:w.socialLinks},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)};import{jsxDEV as R1,Fragment as dU0}from"preact/jsx-dev-runtime";var aO=({profile:w})=>{let $=`About ${w.name||"Me"}`,X=w.description||w.intro||"About page",W=w.expertise&&w.expertise.length>0||w.currentFocus||w.availability||w.email||w.website||w.socialLinks&&w.socialLinks.length>0;return R1(dU0,{children:[R1(V2,{title:$,description:X,ogType:"profile"},void 0,!1,void 0,this),R1("div",{className:"about-page bg-theme",children:[R1("header",{className:"hero-bg-pattern relative w-full py-16 md:py-24 px-6 md:px-12 bg-theme overflow-hidden",children:R1("div",{className:"relative z-10 max-w-4xl mx-auto",children:[R1("h1",{className:"text-5xl md:text-6xl font-semibold mb-6 text-heading",children:["About ",w.name||"Me"]},void 0,!0,void 0,this),w.description&&R1("p",{className:"text-xl md:text-2xl text-theme-muted leading-relaxed",children:w.description},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),R1("div",{className:"container mx-auto px-6 md:px-12 max-w-4xl py-12 md:py-16",children:[w.story&&R1("section",{className:"content-section-reveal mb-20 md:mb-28",children:R1(H9,{markdown:w.story},void 0,!1,void 0,this)},void 0,!1,void 0,this),W&&R1("div",{className:"content-section-reveal grid md:grid-cols-2 gap-x-16 gap-y-12",children:[w.expertise&&w.expertise.length>0&&R1("section",{children:[R1("h2",{className:"text-sm tracking-widest uppercase text-theme-muted mb-6",children:"Expertise"},void 0,!1,void 0,this),R1("ul",{className:"flex flex-wrap gap-3",children:w.expertise.map((Y,J)=>R1("li",{className:kQ({variant:"accent",size:"lg"}),children:Y},J,!1,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this),w.currentFocus&&R1("section",{children:[R1("h2",{className:"text-sm tracking-widest uppercase text-theme-muted mb-6",children:"Current Focus"},void 0,!1,void 0,this),R1("p",{className:"text-lg text-theme leading-relaxed",children:w.currentFocus},void 0,!1,void 0,this)]},void 0,!0,void 0,this),w.availability&&R1("section",{children:[R1("h2",{className:"text-sm tracking-widest uppercase text-theme-muted mb-6",children:"Availability"},void 0,!1,void 0,this),R1("p",{className:"text-lg text-theme leading-relaxed",children:w.availability},void 0,!1,void 0,this)]},void 0,!0,void 0,this),(w.email||w.website||w.socialLinks&&w.socialLinks.length>0)&&R1("section",{children:[R1("h2",{className:"text-sm tracking-widest uppercase text-theme-muted mb-6",children:"Contact"},void 0,!1,void 0,this),R1("div",{className:"space-y-4",children:[w.email&&R1("p",{className:"text-lg",children:R1("a",{href:`mailto:${w.email}`,className:"text-brand hover:text-brand-dark transition-colors",children:w.email},void 0,!1,void 0,this)},void 0,!1,void 0,this),w.website&&R1("p",{className:"text-lg",children:R1("a",{href:w.website,target:"_blank",rel:"noopener noreferrer",className:"text-brand hover:text-brand-dark transition-colors",children:w.website},void 0,!1,void 0,this)},void 0,!1,void 0,this),w.socialLinks&&w.socialLinks.length>0&&R1("div",{className:"flex flex-wrap gap-4 mt-4",children:w.socialLinks.map((Y,J)=>R1(c5,{href:Y.url,external:!0,variant:"secondary",size:"md",children:Y.label||Y.platform},J,!1,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)};import{jsxDEV as p2,Fragment as Pu}from"preact/jsx-dev-runtime";var sO=()=>{return p2(Pu,{children:[p2(V2,{title:"Thanks for subscribing!",description:"You've successfully subscribed to the newsletter."},void 0,!1,void 0,this),p2("div",{className:"min-h-[60vh] flex items-center justify-center px-6",children:p2("div",{className:"text-center max-w-md",children:[p2("div",{className:"text-6xl mb-6",children:"\uD83C\uDF89"},void 0,!1,void 0,this),p2("h1",{className:"text-3xl font-semibold mb-4 text-heading",children:"Thanks for subscribing!"},void 0,!1,void 0,this),p2("p",{className:"text-lg text-theme-muted mb-8",children:"You'll receive a confirmation email shortly. Check your inbox to confirm your subscription."},void 0,!1,void 0,this),p2(c5,{href:"/",variant:"primary",children:"Back to Home"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},tO=()=>{return p2(Pu,{children:[p2(V2,{title:"Subscription failed",description:"There was a problem with your subscription."},void 0,!1,void 0,this),p2("div",{className:"min-h-[60vh] flex items-center justify-center px-6",children:p2("div",{className:"text-center max-w-md",children:[p2("div",{className:"text-6xl mb-6",children:"\uD83D\uDE22"},void 0,!1,void 0,this),p2("h1",{className:"text-3xl font-semibold mb-4 text-heading",children:"Something went wrong"},void 0,!1,void 0,this),p2("p",{className:"text-lg text-theme-muted mb-8",children:"We couldn't process your subscription. Please try again or contact us if the problem persists."},void 0,!1,void 0,this),p2(c5,{href:"/",variant:"primary",children:"Back to Home"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};H0();var ku=z.object({label:z.string().describe("Display label for entity type (e.g., 'Essay')"),pluralName:z.string().optional().describe("URL path segment (defaults to label.toLowerCase() + 's')")}),Tu=z.object({entityDisplay:z.object({post:ku,deck:ku}).describe("Display metadata for post and deck entity types (required for homepage)")});var Eu={name:"@brains/site-professional",private:!0,version:"0.2.0-alpha.83",description:"Professional site composition package",type:"module",exports:{".":"./src/index.ts"},files:["src"],scripts:{typecheck:"tsc --noEmit",lint:"eslint . --ext .ts","lint:fix":"eslint . --ext .ts --fix"},dependencies:{"@brains/blog":"workspace:*","@brains/decks":"workspace:*","@brains/identity-service":"workspace:*","@brains/plugins":"workspace:*","@brains/site-composition":"workspace:*","@brains/site-engine":"workspace:*","@brains/site-info":"workspace:*","@brains/templates":"workspace:*","@brains/ui-library":"workspace:*","@brains/utils":"workspace:*",preact:"^10.27.2"},devDependencies:{"@brains/eslint-config":"workspace:*","@brains/typescript-config":"workspace:*","@types/bun":"latest","bun-types":"latest",eslint:"^8.56.0",typescript:"^5.3.3"}};class eO extends k8{dependencies=["blog","decks"];constructor(w){super("professional-site",Eu,w,Tu)}async onRegister(w){w.entities.extendFrontmatterSchema("anchor-profile",PG);let $=this.config.entityDisplay.post,X=this.config.entityDisplay.deck,W=`/${$.pluralName??$.label.toLowerCase()+"s"}`,Y=`/${X.pluralName??X.label.toLowerCase()+"s"}`,J=new kG(W,Y);w.entities.registerDataSource(J);let G=new TG;w.entities.registerDataSource(G);let K=z.object({profile:Q4,posts:z.array(r5),decks:z.array(O$),postsListUrl:z.string(),decksListUrl:z.string(),cta:F$,sections:z.record(z.string(),_W)}),H=z.object({profile:Q4}),f=z.object({});w.templates.register({"homepage-list":T1({name:"homepage-list",description:"Professional homepage with essays and presentations",schema:K,dataSourceId:"professional:homepage-list",requiredPermission:"public",layout:{component:oO}}),about:T1({name:"about",description:"About page with full profile information",schema:H,dataSourceId:"professional:about",requiredPermission:"public",layout:{component:aO}}),"subscribe-thanks":T1({name:"subscribe-thanks",description:"Newsletter subscription success page",schema:f,requiredPermission:"public",layout:{component:sO}}),"subscribe-error":T1({name:"subscribe-error",description:"Newsletter subscription error page",schema:f,requiredPermission:"public",layout:{component:tO}})}),this.logger.info("Professional site plugin registered successfully")}async getTools(){return[]}async getResources(){return[]}}function wZ(w){return new eO(w??{})}var $Z=[{id:"home",path:"/",title:"Home",description:"Professional site homepage",layout:"default",navigation:{show:!0,label:"Home",slot:"secondary",priority:10},sections:[{id:"homepage",template:"professional-site:homepage-list",dataQuery:{}}]},{id:"about",path:"/about",title:"About",description:"About page",layout:"default",navigation:{show:!0,label:"About",slot:"primary",priority:90},sections:[{id:"about",template:"professional-site:about",dataQuery:{}}]},{id:"subscribe-thanks",path:"/subscribe/thanks",title:"Thanks for subscribing",description:"Newsletter subscription confirmation",layout:"default",navigation:{show:!1},sections:[{id:"subscribe-thanks",template:"professional-site:subscribe-thanks",dataQuery:{},content:{}}]},{id:"subscribe-error",path:"/subscribe/error",title:"Subscription failed",description:"Newsletter subscription error",layout:"default",navigation:{show:!1},sections:[{id:"subscribe-error",template:"professional-site:subscribe-error",dataQuery:{},content:{}}]}];import{jsxDEV as EG}from"preact/jsx-dev-runtime";function XZ({sections:w,siteInfo:$,slots:X,wordmark:W}){return EG("div",{className:"flex flex-col min-h-screen bg-theme overflow-x-clip",children:[EG(G$,{title:$.title,navigation:$.navigation.primary,showThemeToggle:!0,...$.logo!==void 0?{logo:$.logo}:{},...W!==void 0?{wordmark:W}:{}},void 0,!1,void 0,this),EG("main",{className:"flex-grow flex flex-col bg-theme",children:w},void 0,!1,void 0,this),EG(vQ,{primaryNavigation:$.navigation.primary,secondaryNavigation:$.navigation.secondary,copyright:$.copyright,socialLinks:$.socialLinks,title:$.title,tagline:$.description,children:X?.getSlot("footer-top").map((Y)=>Y.render())},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function ju(w){return{id:w.id,version:w.version,type:w.type,packageName:w.packageName}}var ee0=dQ;function w01(w){return ju(rQ(w))}var nU0=cQ,$01=nU0,X01=XZ;function W01(w){return ju(wZ(w))}var Y01=$Z;export{nU0 as routes,W01 as professionalSitePlugin,Y01 as professionalRoutes,w01 as personalSitePlugin,$01 as personalRoutes,X01 as ProfessionalLayout,ee0 as PersonalLayout};
1480
1493
 
1481
- //# debugId=78A1529880C20CB464756E2164756E21
1494
+ //# debugId=83F6AB3E98E9FDCF64756E2164756E21
1482
1495
  //# sourceMappingURL=site.js.map