@rizom/brain 0.2.0-alpha.54 → 0.2.0-alpha.55

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.54",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","react-devtools-core":"^6.1.1",sharp:"^0.34.5"},devDependencies:{"@brains/app":"workspace:*","@brains/deploy-templates":"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.55",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","react-devtools-core":"^6.1.1",sharp:"^0.34.5"},devDependencies:{"@brains/app":"workspace:*","@brains/deploy-templates":"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=E0FCEF12CE36512564756E2164756E21
4
+ //# debugId=F9DCAE2F0F21A61F64756E2164756E21
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,moFC1DF,IAAM,EAAqB,EAAY",
9
- "debugId": "E0FCEF12CE36512564756E2164756E21",
9
+ "debugId": "F9DCAE2F0F21A61F64756E2164756E21",
10
10
  "names": []
11
11
  }
@@ -11,6 +11,7 @@ Included content typically covers:
11
11
  - `brain-character/` — the brain's identity and operating voice
12
12
  - `anchor-profile/` — the operator or owner profile
13
13
  - `site-info/` — site title, metadata, and presentation defaults
14
+ - `site-content/` — editable homepage and about-page sections for the default site
14
15
  - `deck/` — example deck content
15
16
  - root `.md` files — supporting reference material
16
17
 
@@ -0,0 +1,20 @@
1
+ ---
2
+ routeId: about
3
+ sectionId: about
4
+ ---
5
+
6
+ # About Relay
7
+
8
+ ## Title
9
+
10
+ Relay is a collaborative team-memory brain.
11
+
12
+ ## Intro
13
+
14
+ It exists for teams that need to remember together: capturing what happened, summarizing why it matters, and coordinating with trusted peer brains when work crosses boundaries.
15
+
16
+ ## Points
17
+
18
+ - Not a personal blog engine or portfolio shell.
19
+ - Not a marketing automation stack.
20
+ - A small public face for a larger private knowledge workflow.
@@ -0,0 +1,82 @@
1
+ ---
2
+ routeId: home
3
+ sectionId: hero
4
+ ---
5
+
6
+ # Home hero
7
+
8
+ ## Eyebrow
9
+
10
+ Team memory / public signal
11
+
12
+ ## Headline
13
+
14
+ Relay turns shared work into a living knowledge surface.
15
+
16
+ ## Intro
17
+
18
+ Capture decisions, links, and field notes where collaboration already happens, then synthesize them into a public-facing homepage your team can keep current.
19
+
20
+ ## Primary CTA
21
+
22
+ ### Label
23
+
24
+ Explore the relay
25
+
26
+ ### Href
27
+
28
+ #operating-loop
29
+
30
+ ## Secondary CTA
31
+
32
+ ### Label
33
+
34
+ Read the model
35
+
36
+ ### Href
37
+
38
+ /about
39
+
40
+ ## Signals
41
+
42
+ ### Signal 1
43
+
44
+ #### Label
45
+
46
+ Capture
47
+
48
+ #### Value
49
+
50
+ Notes + links
51
+
52
+ #### Note
53
+
54
+ Low-friction shared context
55
+
56
+ ### Signal 2
57
+
58
+ #### Label
59
+
60
+ Synthesis
61
+
62
+ #### Value
63
+
64
+ Topics + summaries
65
+
66
+ #### Note
67
+
68
+ Durable memory from live work
69
+
70
+ ### Signal 3
71
+
72
+ #### Label
73
+
74
+ Coordination
75
+
76
+ #### Value
77
+
78
+ Peer brains
79
+
80
+ #### Note
81
+
82
+ Approved agent-to-agent exchange
@@ -0,0 +1,62 @@
1
+ ---
2
+ routeId: home
3
+ sectionId: loop
4
+ ---
5
+
6
+ # Home operating loop
7
+
8
+ ## Eyebrow
9
+
10
+ Default relay loop
11
+
12
+ ## Title
13
+
14
+ A homepage should explain the operating rhythm, not pretend to be a brochure.
15
+
16
+ ## Intro
17
+
18
+ Relay's default site frames the team brain as an active memory system: what comes in, how it gets shaped, and where it becomes useful again.
19
+
20
+ ## Steps
21
+
22
+ ### Step 1
23
+
24
+ #### Phase
25
+
26
+ 01
27
+
28
+ #### Title
29
+
30
+ Capture the trace
31
+
32
+ #### Text
33
+
34
+ Team notes, links, and chat context enter as simple entities with sourceable metadata.
35
+
36
+ ### Step 2
37
+
38
+ #### Phase
39
+
40
+ 02
41
+
42
+ #### Title
43
+
44
+ Synthesize the pattern
45
+
46
+ #### Text
47
+
48
+ Summaries and topics turn raw capture into a map of what the team already knows.
49
+
50
+ ### Step 3
51
+
52
+ #### Phase
53
+
54
+ 03
55
+
56
+ #### Title
57
+
58
+ Share the surface
59
+
60
+ #### Text
61
+
62
+ A minimal public site exposes the stable story while private memory keeps moving underneath.
@@ -0,0 +1,58 @@
1
+ ---
2
+ routeId: home
3
+ sectionId: surface
4
+ ---
5
+
6
+ # Home surface
7
+
8
+ ## Title
9
+
10
+ The default Relay template
11
+
12
+ ## Intro
13
+
14
+ The shape is intentionally simple: a clear positioning hero, the capture → synthesize → share loop, and a few proof surfaces that can be swapped for richer routes in the full preset.
15
+
16
+ ## Cards
17
+
18
+ ### Card 1
19
+
20
+ #### Label
21
+
22
+ Private by default
23
+
24
+ #### Title
25
+
26
+ Core memory stays operational.
27
+
28
+ #### Text
29
+
30
+ The public site is only a surface on top of the team brain; Discord, MCP, A2A, notes, links, topics, and summaries remain the center of gravity.
31
+
32
+ ### Card 2
33
+
34
+ #### Label
35
+
36
+ Editable content
37
+
38
+ #### Title
39
+
40
+ Homepage sections are durable entities.
41
+
42
+ #### Text
43
+
44
+ Each section is backed by site-content markdown, so the sample copy becomes real starter content instead of hardcoded demo text.
45
+
46
+ ### Card 3
47
+
48
+ #### Label
49
+
50
+ Full preset ready
51
+
52
+ #### Title
53
+
54
+ Docs and decks can become the knowledge hub.
55
+
56
+ #### Text
57
+
58
+ The default preset stays minimal; full Relay instances can layer in docs, decks, and richer collection routes without changing the homepage contract.
@@ -1,5 +1,15 @@
1
1
  ---
2
2
  title: Relay
3
- description: Your team's AI-powered knowledge hub
3
+ description: Collaborative team memory, synthesis, and peer-brain coordination.
4
4
  themeMode: dark
5
+ copyright: Relay sample site — powered by Rizom
6
+ cta:
7
+ heading: Start with shared memory
8
+ buttonText: Read the model
9
+ buttonLink: /about
10
+ sections:
11
+ loop:
12
+ blurb: Capture, synthesize, and share what the team already knows.
13
+ surface:
14
+ blurb: Minimal by default, extensible in the full preset.
5
15
  ---
package/dist/site.js CHANGED
@@ -787,7 +787,7 @@ The excerpt should be clear, concise, and compelling.`});I();U5();Z5();import{js
787
787
  Note: This is part of a series called "${G.seriesName}".`:""}`;return $.ai.generate({prompt:Y,templateName:"blog:generation"})}),$.eval.registerHandler("generateExcerpt",async(X)=>{let G=yj.parse(X);return $.ai.generate({prompt:`Title: ${G.title}
788
788
 
789
789
  Content:
790
- ${G.content}`,templateName:"blog:excerpt"})})}var jR={name:"@brains/blog",private:!0,version:"0.2.0-alpha.54",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/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 xR extends H2{entityType=l2.entityType;schema=n6;adapter=l2;constructor($={}){super("blog",jR,$,fG)}getEntityTypeConfig(){return{weight:2}}createGenerationHandler($){return new gG(this.logger.child("BlogGenerationJobHandler"),$)}getTemplates(){return PR()}getDataSources(){return[new pG(this.logger.child("BlogDataSource"))]}async onRegister($){let{RSSDataSource:X}=await Promise.resolve().then(() => (vR(),kR));$.entities.registerDataSource(new X(this.logger.child("RSSDataSource"))),await LR($,this.logger),CR($,this.logger),ER($,this.logger),IR($),this.logger.info("Blog plugin registered (routes auto-generated at /posts/)")}}Z5();A8();Q0();I();var bR=K.object({id:K.string(),template:K.string(),content:K.unknown().optional(),dataQuery:K.object({entityType:K.string().optional(),template:K.string().optional(),query:K.object({id:K.string().optional(),limit:K.number().optional(),offset:K.number().optional()}).passthrough().optional()}).passthrough().optional(),order:K.number().optional()}),hR=["primary","secondary"],yR=K.object({show:K.boolean().default(!1),label:K.string().optional(),slot:K.enum(hR).default("primary"),priority:K.number().min(0).max(100).default(50)}).optional(),fR=K.object({id:K.string(),path:K.string(),title:K.string().default(""),description:K.string().default(""),sections:K.array(bR).default([]),layout:K.string().default("default"),fullscreen:K.boolean().optional(),pluginId:K.string().optional(),sourceEntityType:K.string().optional(),external:K.boolean().optional(),navigation:yR}),mj=K.object({routes:K.array(fR),pluginId:K.string()}),pj=K.object({paths:K.array(K.string()).optional(),pluginId:K.string().optional()}),uj=K.object({pluginId:K.string().optional()}),dj=K.object({path:K.string()}),k$=K.object({label:K.string(),href:K.string(),priority:K.number()});I();var v$=K.object({heading:K.string().describe("Main CTA heading text"),buttonText:K.string().describe("Call-to-action button text"),buttonLink:K.string().describe("URL or anchor for the CTA button")}),x$=K.object({blurb:K.string().optional().describe("Short italic subtitle under the section title")}),b$=K.object({title:K.string().describe("The site's title"),description:K.string().describe("The site's description"),url:K.string().optional().describe("Canonical site URL"),copyright:K.string().optional().describe("Copyright notice text"),logo:K.boolean().optional().describe("Whether to display logo instead of title text in header"),themeMode:K.enum(["light","dark"]).optional().describe("Default theme mode"),analyticsScript:K.string().optional().describe("Analytics script HTML"),cta:v$.optional().describe("Call-to-action configuration"),sections:K.record(K.string(),x$).optional().describe("Optional per-section blurbs, keyed by section id (e.g. 'essays', 'presentations', 'about'). Used by homepage templates that render editorial section headers.")}),lj=K.object({platform:K.enum(["github","instagram","linkedin","email","website"]).describe("Social media platform"),url:K.string().describe("Profile or contact URL"),label:K.string().optional().describe("Optional display label")}),cj=b$.extend({navigation:K.object({primary:K.array(k$),secondary:K.array(k$)}),copyright:K.string(),socialLinks:K.array(lj).optional().describe("Social media links from profile metadata")});I();var rj=K.string(),ij=K.object({id:K.string().min(1)}).passthrough(),nj=K.object({label:K.string().min(1)}).passthrough(),oj=K.object({layouts:K.record(K.unknown()),plugin:K.function(),routes:K.array(ij),entityDisplay:K.record(nj),staticAssets:K.record(K.string()).optional()}).passthrough(),sj=K.custom(($)=>oj.safeParse($).success);I();Q0();var gR=K.object({}),h$=N1.extend({id:K.literal("site-info"),entityType:K.literal("site-info"),metadata:gR}),E8=v$,J4=b$.omit({url:!0,analyticsScript:!0});Q0();class x5 extends V1{constructor(){super({entityType:"site-info",schema:h$,frontmatterSchema:J4,isSingleton:!0,hasBody:!1})}createSiteInfoContent($){let X=J4.parse($);return this.buildMarkdown("",X)}parseSiteInfoBody($){return this.parseFrontmatter($)}fromMarkdown($){return{content:$,entityType:"site-info"}}extractMetadata($){return{}}generateFrontMatter($){let X=this.parseFrontmatter($.content);return this.buildMarkdown("",X)}}var RX0=new x5;var TX0=new x5;var XS=new x5;async function I8($){let G=(await $.listEntities({entityType:"site-info",options:{limit:1}}))[0];if(!G)throw Error("Site info not found \u2014 create a site-info entity");return XS.parseSiteInfoBody(G.content)}I();var GS=J4.extend({navigation:K.object({primary:K.array(K.object({label:K.string(),href:K.string(),priority:K.number()})),secondary:K.array(K.object({label:K.string(),href:K.string(),priority:K.number()}))}),copyright:K.string(),socialLinks:K.array(K.object({platform:K.enum(["github","instagram","linkedin","email","website"]).describe("Social media platform"),url:K.string().describe("Profile or contact URL"),label:K.string().optional().describe("Optional display label")})).optional().describe("Social media links from profile entity")});Q0();var y$=r6,q2=O5.extend(y$.shape);Q0();d2();I();var YS=new m1;class f${postsListUrl;id="personal:homepage";name="Personal Homepage DataSource";description="Fetches profile and blog posts for a personal homepage";constructor($){this.postsListUrl=$}async fetch($,X,G){let Y=G.entityService,[J,W,H]=await Promise.all([q5(Y),Y.listEntities({entityType:"post",options:{limit:20}}),I8(Y)]),U=YS.parseProfileBody(J,q2),F=W.sort(h6).slice(0,6).map(c2);if(!H.cta)throw Error("CTA not configured in site-info");let M={profile:U,posts:F,postsListUrl:this.postsListUrl,cta:H.cta};return X.parse(M)}}Q0();d2();var JS=new m1;class g${id="personal:about";name="About Page DataSource";description="Fetches full profile data for the about page";async fetch($,X,G){let Y=await q5(G.entityService),W={profile:JS.parseProfileBody(Y,q2)};return X.parse(W)}}import{jsxDEV as U0,Fragment as mR}from"preact/jsx-dev-runtime";function WS($){return new Date($).toLocaleDateString("en-US",{year:"numeric",month:"long",day:"numeric"})}function HS($){return $.split(/(\*[^*]+\*)/).map((X,G)=>{if(X.startsWith("*")&&X.endsWith("*")&&X.length>2)return U0("em",{className:"font-sans italic font-medium text-theme-inverse tracking-[-0.015em] [font-variation-settings:'opsz'_72]",children:X.slice(1,-1)},G,!1,void 0,this);return X})}var MY=({profile:$,posts:X,postsListUrl:G,cta:Y})=>{let J=$.tagline??$.description,W=$.name.split(" ")[0];return U0(mR,{children:[U0(s0,{title:$.name,description:$.description??J??"Personal site",ogType:"website"},void 0,!1,void 0,this),U0("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:U0("div",{className:"w-full max-w-[1100px] mx-auto text-center flex flex-col items-center gap-7",children:[J&&U0("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:HS(J)},void 0,!1,void 0,this),$.description&&U0("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:$.description},void 0,!1,void 0,this),U0("div",{className:"flex flex-wrap justify-center gap-3.5 mt-2",children:[U0("a",{href:G,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 ",U0("span",{"aria-hidden":"true",children:"\u2192"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),U0("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 ",W]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),X.length>0&&U0("section",{className:"flex flex-col py-24 px-6 md:px-12 gap-11 bg-theme-subtle",children:[U0("div",{className:"flex justify-between items-end max-w-layout mx-auto w-full gap-6 flex-wrap",children:[U0("div",{children:[U0("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),U0("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"," ",U0("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),U0("a",{href:G,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 ",U0("span",{"aria-hidden":"true",children:"\u2192"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),U0("div",{className:"grid grid-cols-[repeat(auto-fit,minmax(min(100%,320px),1fr))] gap-8 max-w-layout mx-auto w-full",children:X.map((H)=>U0("a",{href:H.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:[H.coverImageUrl?U0("img",{src:H.coverImageUrl,alt:H.metadata.title,className:"w-full aspect-[16/10] object-cover bg-theme-muted"},void 0,!1,void 0,this):U0("div",{className:"w-full aspect-[16/10] bg-gradient-to-br from-brand to-accent","aria-hidden":"true"},void 0,!1,void 0,this),U0("div",{className:"flex flex-col gap-4 p-7 flex-1",children:[U0("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:[H.frontmatter.seriesName&&U0(mR,{children:[U0("span",{className:"text-brand",children:H.frontmatter.seriesName},void 0,!1,void 0,this),U0("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),U0("time",{children:WS(H.metadata.publishedAt??H.created)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),U0("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:H.metadata.title},void 0,!1,void 0,this),H.frontmatter.excerpt&&U0("p",{className:"text-base leading-[1.55] text-theme-muted m-0 flex-1",children:H.frontmatter.excerpt},void 0,!1,void 0,this),U0("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"," ",U0("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)]},H.id,!0,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this),U0("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:[U0("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),U0("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:Y.heading},void 0,!1,void 0,this),Y.subtitle&&U0("p",{className:"text-center text-base leading-[1.55] text-theme-on-dark opacity-80 max-w-[480px] m-0",children:Y.subtitle},void 0,!1,void 0,this),U0("a",{href:Y.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:[Y.buttonText," ",U0("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 X1,Fragment as US}from"preact/jsx-dev-runtime";var QY=({profile:$})=>{let X=`About ${$.name}`,G=$.description??$.intro??"About page",Y=Boolean($.email??$.website);return X1(US,{children:[X1(s0,{title:X,description:G,ogType:"profile"},void 0,!1,void 0,this),X1("section",{className:"hero-decor bg-brand text-theme-inverse relative flex flex-col px-6 md:px-12 pt-32 pb-24",children:X1("div",{className:"w-full max-w-3xl mx-auto flex flex-col gap-6",children:[X1("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:$.name},void 0,!1,void 0,this),$.description&&X1("p",{className:"text-[clamp(1.0625rem,1.4vw,1.25rem)] leading-[1.55] text-theme-inverse opacity-95 max-w-2xl m-0",children:$.description},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),$.story&&X1("section",{className:`py-24 px-6 md:px-12 bg-theme-subtle${Y?"":" flex-grow"}`,children:X1("div",{className:"max-w-3xl mx-auto",children:X1(i2,{markdown:$.story},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this),Y&&X1("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:[X1("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),X1("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"," ",X1("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),X1("div",{className:"flex flex-wrap justify-center gap-3.5 mt-2",children:[$.email&&X1("a",{href:`mailto:${$.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 ",X1("span",{"aria-hidden":"true",children:"\u2192"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),$.website&&X1("a",{href:$.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 pR={name:"@brains/site-personal",private:!0,version:"0.2.0-alpha.54",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 FS=K.object({entityDisplay:K.object({post:K.object({label:K.string().default("Post"),pluralName:K.string().optional()}).default({})}).default({})});class qY extends d6{dependencies=["blog"];constructor($={}){super("personal-site",pR,$,FS)}async onRegister($){$.entities.extendFrontmatterSchema("anchor-profile",y$);let X=this.config.entityDisplay.post,G=`/${X.pluralName??X.label.toLowerCase()+"s"}`,Y=new f$(G);$.entities.registerDataSource(Y);let J=new g$;$.entities.registerDataSource(J);let W=K.object({profile:q2,posts:K.array(a1),postsListUrl:K.string(),cta:E8}),H=K.object({profile:q2});$.templates.register({homepage:L0({name:"homepage",description:"Personal homepage with recent blog posts",schema:W,dataSourceId:"personal:homepage",requiredPermission:"public",layout:{component:MY}}),about:L0({name:"about",description:"About page with profile",schema:H,dataSourceId:"personal:about",requiredPermission:"public",layout:{component:QY}})}),this.logger.info("Personal site plugin registered successfully")}async getTools(){return[]}async getResources(){return[]}}function OY($){return new qY($??{})}var ZY=[{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 h1}from"preact/jsx-dev-runtime";function RY({sections:$,siteInfo:X}){let G=[...X.navigation.primary,...X.navigation.secondary].filter((Y)=>Y.label!=="Home");return h1("div",{className:"flex flex-col min-h-screen bg-theme overflow-x-clip",children:[h1(w8,{title:X.title,titleClassName:"font-heading font-bold text-2xl",navigation:X.navigation.primary,showThemeToggle:!0,themeToggleClassName:"bg-theme-toggle text-theme-toggle-icon hover:bg-theme-toggle-hover rounded-[10px]",...X.logo!==void 0?{logo:X.logo}:{}},void 0,!1,void 0,this),h1("main",{className:"flex-grow flex flex-col",children:$},void 0,!1,void 0,this),h1("footer",{className:"bg-footer text-footer border-t border-theme",children:h1("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:[h1("div",{className:"flex flex-col gap-1 mb-4 md:mb-0",children:[h1("span",{className:"text-brand font-heading font-bold text-lg",children:X.title},void 0,!1,void 0,this),X.description&&h1("span",{className:"text-theme-muted text-xs",children:X.description},void 0,!1,void 0,this)]},void 0,!0,void 0,this),h1("nav",{className:"flex flex-wrap justify-center gap-x-6 gap-y-2 mb-4 md:mb-0",children:G.map((Y)=>h1("a",{href:Y.href,className:"text-theme-muted text-[13px] hover:text-brand transition-colors",children:Y.label},Y.href,!1,void 0,this))},void 0,!1,void 0,this),h1("div",{className:"flex items-center gap-4",children:[X.copyright&&h1("span",{className:"text-theme-light text-[11px]",children:X.copyright},void 0,!1,void 0,this),h1(Q2,{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)}Q0();I();U5();Q0();I();Q0();I();I();Q0();var MS=K.enum(["draft","queued","published"]),O2=K.object({title:K.string(),slug:K.string().optional(),description:K.string().optional(),author:K.string().optional(),status:MS,publishedAt:K.string().datetime().optional(),event:K.string().optional(),coverImageId:K.string().optional()}),QS=O2.pick({title:!0,description:!0,status:!0,publishedAt:!0,coverImageId:!0}).extend({slug:K.string()}),m$=N1.extend({entityType:K.literal("deck"),metadata:QS}),p$=m$.extend({frontmatter:O2,body:K.string()}),j8=p$.extend({url:K.string().optional(),typeLabel:K.string().optional(),listUrl:K.string().optional(),listLabel:K.string().optional(),coverImageUrl:K.string().optional(),coverImageWidth:K.number().optional(),coverImageHeight:K.number().optional()});class AY extends V1{constructor(){super({entityType:"deck",schema:m$,frontmatterSchema:O2,supportsCoverImage:!0})}validateSlideStructure($){if(!/^---$/gm.test($))throw Error("Invalid deck: markdown must contain slide separators (---) to be a valid presentation")}toMarkdown($){let X=this.extractBody($.content);this.validateSlideStructure(X);try{let G=this.parseFrontMatter($.content,O2),Y={...G,slug:G.slug??$.metadata.slug};return this.buildMarkdown(X,Y)}catch{return X}}fromMarkdown($){let X=this.parseFrontmatter($),G=this.extractBody($);this.validateSlideStructure(G);let Y=X.slug??f1(X.title),J=X.status;return{entityType:"deck",content:$,metadata:{slug:Y,title:X.title,description:X.description,status:J,publishedAt:X.publishedAt,coverImageId:X.coverImageId}}}generateTitle($){return $.metadata.title}generateSummary($){if($.metadata.description)return $.metadata.description;return`Presentation: ${$.metadata.title}`}generateFrontMatter($){return this.toMarkdown($)}}var S8=new AY;I();U5();var qS=K.object({markdown:K.string().describe("Markdown content with slide separators (---)")}),BY=L0({name:"deck-detail",description:"Render a presentation deck as Reveal.js slides",schema:qS,dataSourceId:"decks:entities",requiredPermission:"public",layout:{component:cG,fullscreen:!0}});U5();I();var VY=K.object({decks:K.array(p$)}),NY=K.object({decks:K.array(j8),pageTitle:K.string().optional()});import{jsxDEV as wY}from"preact/jsx-dev-runtime";var _Y=({decks:$,pageTitle:X})=>{let G=$.map((Y)=>({id:Y.id,url:Y.url,title:Y.frontmatter.title,date:Y.frontmatter.publishedAt??Y.created,description:Y.frontmatter.description}));return wY("div",{className:"deck-list bg-theme",children:wY("div",{className:"container mx-auto px-6 md:px-12 max-w-4xl py-16 md:py-24",children:wY(D8,{title:X??"Presentations",items:G},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)};I();class u$ extends i9{constructor(){super(VY,{title:"Deck List",mappings:[{key:"decks",label:"Decks",type:"array",itemType:"object"}]})}}var zY=L0({name:"deck-list",description:"List view of all presentation decks",schema:NY,dataSourceId:"decks:entities",requiredPermission:"public",formatter:new u$,layout:{component:_Y}});I();Q0();var OS=K.object({title:K.string().max(80).describe("A short, punchy title (2-5 words) that's memorable and evocative"),content:K.string().describe("Full slide deck content in markdown format with slide separators (---). Each slide should have a header and focused content."),description:K.string().describe("A concise 1-2 sentence summary that captures the essence of the talk")}),uR=L0({name:"decks:generation",description:"Template for AI to generate complete slide decks from prompts",schema:OS,dataSourceId:"shell:ai-content",requiredPermission:"public",useKnowledgeContext:!0,basePrompt:`You are creating slide decks in a distinctive voice that blends philosophy, technology, and culture.
790
+ ${G.content}`,templateName:"blog:excerpt"})})}var jR={name:"@brains/blog",private:!0,version:"0.2.0-alpha.55",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/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 xR extends H2{entityType=l2.entityType;schema=n6;adapter=l2;constructor($={}){super("blog",jR,$,fG)}getEntityTypeConfig(){return{weight:2}}createGenerationHandler($){return new gG(this.logger.child("BlogGenerationJobHandler"),$)}getTemplates(){return PR()}getDataSources(){return[new pG(this.logger.child("BlogDataSource"))]}async onRegister($){let{RSSDataSource:X}=await Promise.resolve().then(() => (vR(),kR));$.entities.registerDataSource(new X(this.logger.child("RSSDataSource"))),await LR($,this.logger),CR($,this.logger),ER($,this.logger),IR($),this.logger.info("Blog plugin registered (routes auto-generated at /posts/)")}}Z5();A8();Q0();I();var bR=K.object({id:K.string(),template:K.string(),content:K.unknown().optional(),dataQuery:K.object({entityType:K.string().optional(),template:K.string().optional(),query:K.object({id:K.string().optional(),limit:K.number().optional(),offset:K.number().optional()}).passthrough().optional()}).passthrough().optional(),order:K.number().optional()}),hR=["primary","secondary"],yR=K.object({show:K.boolean().default(!1),label:K.string().optional(),slot:K.enum(hR).default("primary"),priority:K.number().min(0).max(100).default(50)}).optional(),fR=K.object({id:K.string(),path:K.string(),title:K.string().default(""),description:K.string().default(""),sections:K.array(bR).default([]),layout:K.string().default("default"),fullscreen:K.boolean().optional(),pluginId:K.string().optional(),sourceEntityType:K.string().optional(),external:K.boolean().optional(),navigation:yR}),mj=K.object({routes:K.array(fR),pluginId:K.string()}),pj=K.object({paths:K.array(K.string()).optional(),pluginId:K.string().optional()}),uj=K.object({pluginId:K.string().optional()}),dj=K.object({path:K.string()}),k$=K.object({label:K.string(),href:K.string(),priority:K.number()});I();var v$=K.object({heading:K.string().describe("Main CTA heading text"),buttonText:K.string().describe("Call-to-action button text"),buttonLink:K.string().describe("URL or anchor for the CTA button")}),x$=K.object({blurb:K.string().optional().describe("Short italic subtitle under the section title")}),b$=K.object({title:K.string().describe("The site's title"),description:K.string().describe("The site's description"),url:K.string().optional().describe("Canonical site URL"),copyright:K.string().optional().describe("Copyright notice text"),logo:K.boolean().optional().describe("Whether to display logo instead of title text in header"),themeMode:K.enum(["light","dark"]).optional().describe("Default theme mode"),analyticsScript:K.string().optional().describe("Analytics script HTML"),cta:v$.optional().describe("Call-to-action configuration"),sections:K.record(K.string(),x$).optional().describe("Optional per-section blurbs, keyed by section id (e.g. 'essays', 'presentations', 'about'). Used by homepage templates that render editorial section headers.")}),lj=K.object({platform:K.enum(["github","instagram","linkedin","email","website"]).describe("Social media platform"),url:K.string().describe("Profile or contact URL"),label:K.string().optional().describe("Optional display label")}),cj=b$.extend({navigation:K.object({primary:K.array(k$),secondary:K.array(k$)}),copyright:K.string(),socialLinks:K.array(lj).optional().describe("Social media links from profile metadata")});I();var rj=K.string(),ij=K.object({id:K.string().min(1)}).passthrough(),nj=K.object({label:K.string().min(1)}).passthrough(),oj=K.object({layouts:K.record(K.unknown()),plugin:K.function(),routes:K.array(ij),entityDisplay:K.record(nj),staticAssets:K.record(K.string()).optional()}).passthrough(),sj=K.custom(($)=>oj.safeParse($).success);I();Q0();var gR=K.object({}),h$=N1.extend({id:K.literal("site-info"),entityType:K.literal("site-info"),metadata:gR}),E8=v$,J4=b$.omit({url:!0,analyticsScript:!0});Q0();class x5 extends V1{constructor(){super({entityType:"site-info",schema:h$,frontmatterSchema:J4,isSingleton:!0,hasBody:!1})}createSiteInfoContent($){let X=J4.parse($);return this.buildMarkdown("",X)}parseSiteInfoBody($){return this.parseFrontmatter($)}fromMarkdown($){return{content:$,entityType:"site-info"}}extractMetadata($){return{}}generateFrontMatter($){let X=this.parseFrontmatter($.content);return this.buildMarkdown("",X)}}var RX0=new x5;var TX0=new x5;var XS=new x5;async function I8($){let G=(await $.listEntities({entityType:"site-info",options:{limit:1}}))[0];if(!G)throw Error("Site info not found \u2014 create a site-info entity");return XS.parseSiteInfoBody(G.content)}I();var GS=J4.extend({navigation:K.object({primary:K.array(K.object({label:K.string(),href:K.string(),priority:K.number()})),secondary:K.array(K.object({label:K.string(),href:K.string(),priority:K.number()}))}),copyright:K.string(),socialLinks:K.array(K.object({platform:K.enum(["github","instagram","linkedin","email","website"]).describe("Social media platform"),url:K.string().describe("Profile or contact URL"),label:K.string().optional().describe("Optional display label")})).optional().describe("Social media links from profile entity")});Q0();var y$=r6,q2=O5.extend(y$.shape);Q0();d2();I();var YS=new m1;class f${postsListUrl;id="personal:homepage";name="Personal Homepage DataSource";description="Fetches profile and blog posts for a personal homepage";constructor($){this.postsListUrl=$}async fetch($,X,G){let Y=G.entityService,[J,W,H]=await Promise.all([q5(Y),Y.listEntities({entityType:"post",options:{limit:20}}),I8(Y)]),U=YS.parseProfileBody(J,q2),F=W.sort(h6).slice(0,6).map(c2);if(!H.cta)throw Error("CTA not configured in site-info");let M={profile:U,posts:F,postsListUrl:this.postsListUrl,cta:H.cta};return X.parse(M)}}Q0();d2();var JS=new m1;class g${id="personal:about";name="About Page DataSource";description="Fetches full profile data for the about page";async fetch($,X,G){let Y=await q5(G.entityService),W={profile:JS.parseProfileBody(Y,q2)};return X.parse(W)}}import{jsxDEV as U0,Fragment as mR}from"preact/jsx-dev-runtime";function WS($){return new Date($).toLocaleDateString("en-US",{year:"numeric",month:"long",day:"numeric"})}function HS($){return $.split(/(\*[^*]+\*)/).map((X,G)=>{if(X.startsWith("*")&&X.endsWith("*")&&X.length>2)return U0("em",{className:"font-sans italic font-medium text-theme-inverse tracking-[-0.015em] [font-variation-settings:'opsz'_72]",children:X.slice(1,-1)},G,!1,void 0,this);return X})}var MY=({profile:$,posts:X,postsListUrl:G,cta:Y})=>{let J=$.tagline??$.description,W=$.name.split(" ")[0];return U0(mR,{children:[U0(s0,{title:$.name,description:$.description??J??"Personal site",ogType:"website"},void 0,!1,void 0,this),U0("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:U0("div",{className:"w-full max-w-[1100px] mx-auto text-center flex flex-col items-center gap-7",children:[J&&U0("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:HS(J)},void 0,!1,void 0,this),$.description&&U0("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:$.description},void 0,!1,void 0,this),U0("div",{className:"flex flex-wrap justify-center gap-3.5 mt-2",children:[U0("a",{href:G,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 ",U0("span",{"aria-hidden":"true",children:"\u2192"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),U0("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 ",W]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),X.length>0&&U0("section",{className:"flex flex-col py-24 px-6 md:px-12 gap-11 bg-theme-subtle",children:[U0("div",{className:"flex justify-between items-end max-w-layout mx-auto w-full gap-6 flex-wrap",children:[U0("div",{children:[U0("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),U0("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"," ",U0("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),U0("a",{href:G,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 ",U0("span",{"aria-hidden":"true",children:"\u2192"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),U0("div",{className:"grid grid-cols-[repeat(auto-fit,minmax(min(100%,320px),1fr))] gap-8 max-w-layout mx-auto w-full",children:X.map((H)=>U0("a",{href:H.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:[H.coverImageUrl?U0("img",{src:H.coverImageUrl,alt:H.metadata.title,className:"w-full aspect-[16/10] object-cover bg-theme-muted"},void 0,!1,void 0,this):U0("div",{className:"w-full aspect-[16/10] bg-gradient-to-br from-brand to-accent","aria-hidden":"true"},void 0,!1,void 0,this),U0("div",{className:"flex flex-col gap-4 p-7 flex-1",children:[U0("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:[H.frontmatter.seriesName&&U0(mR,{children:[U0("span",{className:"text-brand",children:H.frontmatter.seriesName},void 0,!1,void 0,this),U0("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),U0("time",{children:WS(H.metadata.publishedAt??H.created)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),U0("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:H.metadata.title},void 0,!1,void 0,this),H.frontmatter.excerpt&&U0("p",{className:"text-base leading-[1.55] text-theme-muted m-0 flex-1",children:H.frontmatter.excerpt},void 0,!1,void 0,this),U0("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"," ",U0("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)]},H.id,!0,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this),U0("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:[U0("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),U0("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:Y.heading},void 0,!1,void 0,this),Y.subtitle&&U0("p",{className:"text-center text-base leading-[1.55] text-theme-on-dark opacity-80 max-w-[480px] m-0",children:Y.subtitle},void 0,!1,void 0,this),U0("a",{href:Y.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:[Y.buttonText," ",U0("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 X1,Fragment as US}from"preact/jsx-dev-runtime";var QY=({profile:$})=>{let X=`About ${$.name}`,G=$.description??$.intro??"About page",Y=Boolean($.email??$.website);return X1(US,{children:[X1(s0,{title:X,description:G,ogType:"profile"},void 0,!1,void 0,this),X1("section",{className:"hero-decor bg-brand text-theme-inverse relative flex flex-col px-6 md:px-12 pt-32 pb-24",children:X1("div",{className:"w-full max-w-3xl mx-auto flex flex-col gap-6",children:[X1("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:$.name},void 0,!1,void 0,this),$.description&&X1("p",{className:"text-[clamp(1.0625rem,1.4vw,1.25rem)] leading-[1.55] text-theme-inverse opacity-95 max-w-2xl m-0",children:$.description},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),$.story&&X1("section",{className:`py-24 px-6 md:px-12 bg-theme-subtle${Y?"":" flex-grow"}`,children:X1("div",{className:"max-w-3xl mx-auto",children:X1(i2,{markdown:$.story},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this),Y&&X1("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:[X1("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),X1("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"," ",X1("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),X1("div",{className:"flex flex-wrap justify-center gap-3.5 mt-2",children:[$.email&&X1("a",{href:`mailto:${$.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 ",X1("span",{"aria-hidden":"true",children:"\u2192"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),$.website&&X1("a",{href:$.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 pR={name:"@brains/site-personal",private:!0,version:"0.2.0-alpha.55",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 FS=K.object({entityDisplay:K.object({post:K.object({label:K.string().default("Post"),pluralName:K.string().optional()}).default({})}).default({})});class qY extends d6{dependencies=["blog"];constructor($={}){super("personal-site",pR,$,FS)}async onRegister($){$.entities.extendFrontmatterSchema("anchor-profile",y$);let X=this.config.entityDisplay.post,G=`/${X.pluralName??X.label.toLowerCase()+"s"}`,Y=new f$(G);$.entities.registerDataSource(Y);let J=new g$;$.entities.registerDataSource(J);let W=K.object({profile:q2,posts:K.array(a1),postsListUrl:K.string(),cta:E8}),H=K.object({profile:q2});$.templates.register({homepage:L0({name:"homepage",description:"Personal homepage with recent blog posts",schema:W,dataSourceId:"personal:homepage",requiredPermission:"public",layout:{component:MY}}),about:L0({name:"about",description:"About page with profile",schema:H,dataSourceId:"personal:about",requiredPermission:"public",layout:{component:QY}})}),this.logger.info("Personal site plugin registered successfully")}async getTools(){return[]}async getResources(){return[]}}function OY($){return new qY($??{})}var ZY=[{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 h1}from"preact/jsx-dev-runtime";function RY({sections:$,siteInfo:X}){let G=[...X.navigation.primary,...X.navigation.secondary].filter((Y)=>Y.label!=="Home");return h1("div",{className:"flex flex-col min-h-screen bg-theme overflow-x-clip",children:[h1(w8,{title:X.title,titleClassName:"font-heading font-bold text-2xl",navigation:X.navigation.primary,showThemeToggle:!0,themeToggleClassName:"bg-theme-toggle text-theme-toggle-icon hover:bg-theme-toggle-hover rounded-[10px]",...X.logo!==void 0?{logo:X.logo}:{}},void 0,!1,void 0,this),h1("main",{className:"flex-grow flex flex-col",children:$},void 0,!1,void 0,this),h1("footer",{className:"bg-footer text-footer border-t border-theme",children:h1("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:[h1("div",{className:"flex flex-col gap-1 mb-4 md:mb-0",children:[h1("span",{className:"text-brand font-heading font-bold text-lg",children:X.title},void 0,!1,void 0,this),X.description&&h1("span",{className:"text-theme-muted text-xs",children:X.description},void 0,!1,void 0,this)]},void 0,!0,void 0,this),h1("nav",{className:"flex flex-wrap justify-center gap-x-6 gap-y-2 mb-4 md:mb-0",children:G.map((Y)=>h1("a",{href:Y.href,className:"text-theme-muted text-[13px] hover:text-brand transition-colors",children:Y.label},Y.href,!1,void 0,this))},void 0,!1,void 0,this),h1("div",{className:"flex items-center gap-4",children:[X.copyright&&h1("span",{className:"text-theme-light text-[11px]",children:X.copyright},void 0,!1,void 0,this),h1(Q2,{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)}Q0();I();U5();Q0();I();Q0();I();I();Q0();var MS=K.enum(["draft","queued","published"]),O2=K.object({title:K.string(),slug:K.string().optional(),description:K.string().optional(),author:K.string().optional(),status:MS,publishedAt:K.string().datetime().optional(),event:K.string().optional(),coverImageId:K.string().optional()}),QS=O2.pick({title:!0,description:!0,status:!0,publishedAt:!0,coverImageId:!0}).extend({slug:K.string()}),m$=N1.extend({entityType:K.literal("deck"),metadata:QS}),p$=m$.extend({frontmatter:O2,body:K.string()}),j8=p$.extend({url:K.string().optional(),typeLabel:K.string().optional(),listUrl:K.string().optional(),listLabel:K.string().optional(),coverImageUrl:K.string().optional(),coverImageWidth:K.number().optional(),coverImageHeight:K.number().optional()});class AY extends V1{constructor(){super({entityType:"deck",schema:m$,frontmatterSchema:O2,supportsCoverImage:!0})}validateSlideStructure($){if(!/^---$/gm.test($))throw Error("Invalid deck: markdown must contain slide separators (---) to be a valid presentation")}toMarkdown($){let X=this.extractBody($.content);this.validateSlideStructure(X);try{let G=this.parseFrontMatter($.content,O2),Y={...G,slug:G.slug??$.metadata.slug};return this.buildMarkdown(X,Y)}catch{return X}}fromMarkdown($){let X=this.parseFrontmatter($),G=this.extractBody($);this.validateSlideStructure(G);let Y=X.slug??f1(X.title),J=X.status;return{entityType:"deck",content:$,metadata:{slug:Y,title:X.title,description:X.description,status:J,publishedAt:X.publishedAt,coverImageId:X.coverImageId}}}generateTitle($){return $.metadata.title}generateSummary($){if($.metadata.description)return $.metadata.description;return`Presentation: ${$.metadata.title}`}generateFrontMatter($){return this.toMarkdown($)}}var S8=new AY;I();U5();var qS=K.object({markdown:K.string().describe("Markdown content with slide separators (---)")}),BY=L0({name:"deck-detail",description:"Render a presentation deck as Reveal.js slides",schema:qS,dataSourceId:"decks:entities",requiredPermission:"public",layout:{component:cG,fullscreen:!0}});U5();I();var VY=K.object({decks:K.array(p$)}),NY=K.object({decks:K.array(j8),pageTitle:K.string().optional()});import{jsxDEV as wY}from"preact/jsx-dev-runtime";var _Y=({decks:$,pageTitle:X})=>{let G=$.map((Y)=>({id:Y.id,url:Y.url,title:Y.frontmatter.title,date:Y.frontmatter.publishedAt??Y.created,description:Y.frontmatter.description}));return wY("div",{className:"deck-list bg-theme",children:wY("div",{className:"container mx-auto px-6 md:px-12 max-w-4xl py-16 md:py-24",children:wY(D8,{title:X??"Presentations",items:G},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)};I();class u$ extends i9{constructor(){super(VY,{title:"Deck List",mappings:[{key:"decks",label:"Decks",type:"array",itemType:"object"}]})}}var zY=L0({name:"deck-list",description:"List view of all presentation decks",schema:NY,dataSourceId:"decks:entities",requiredPermission:"public",formatter:new u$,layout:{component:_Y}});I();Q0();var OS=K.object({title:K.string().max(80).describe("A short, punchy title (2-5 words) that's memorable and evocative"),content:K.string().describe("Full slide deck content in markdown format with slide separators (---). Each slide should have a header and focused content."),description:K.string().describe("A concise 1-2 sentence summary that captures the essence of the talk")}),uR=L0({name:"decks:generation",description:"Template for AI to generate complete slide decks from prompts",schema:OS,dataSourceId:"shell:ai-content",requiredPermission:"public",useKnowledgeContext:!0,basePrompt:`You are creating slide decks in a distinctive voice that blends philosophy, technology, and culture.
791
791
 
792
792
  Your task is to generate a complete slide deck based on the user's prompt.
793
793
 
@@ -856,12 +856,12 @@ Add your conclusion here`,F=F??`Presentation: ${H}`,await this.reportProgress(X,
856
856
  Note: This presentation is for "${J}".`:""}`,P=await this.context.ai.generate({prompt:D,templateName:"decks:generation"});H=H??P.title,U=U??P.content,F=F??P.description,await this.reportProgress(X,{progress:50,message:`Generated deck: "${H}"`})}else if(!F)await this.reportProgress(X,{progress:30,message:"Generating description with AI"}),F=(await this.context.ai.generate({prompt:`Title: ${H}
857
857
 
858
858
  Content:
859
- ${U}`,templateName:"decks:description"})).description,await this.reportProgress(X,{progress:50,message:"Description generated"});else await this.reportProgress(X,{progress:50,message:"Using provided content"});if(!H||!U)this.failEarly("Title and content are required");let Q={slug:f1(H),title:H,status:"draft"},q=await q8({entityType:"deck",title:H,deriveId:(_)=>_,regeneratePrompt:"Generate a different presentation deck title on the same topic.",context:this.context});if(q!==H)Q.title=q,Q.slug=f1(q);let A={title:Q.title,status:Q.status,slug:Q.slug,description:F,author:Y,event:J},Z=W2(U,A);return{id:q,content:Z,metadata:Q,title:q,resultExtras:{title:q,slug:Q.slug},createOptions:{deduplicateId:!0}}}summarizeDataForLog($){return{prompt:$.prompt,title:$.title}}}var nR={name:"@brains/decks",private:!0,version:"0.2.0-alpha.54",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/image":"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 oR extends H2{entityType=S8.entityType;schema=S8.schema;adapter=S8;constructor(){super("decks",nR)}createGenerationHandler($){return new EY(this.logger.child("DeckGenerationJobHandler"),$)}getTemplates(){return{"deck-detail":BY,"deck-list":zY,generation:uR,description:dR}}getDataSources(){return[new TY(this.logger)]}getEntityTypeConfig(){return{weight:1.5}}async onRegister($){await this.registerWithPublishPipeline($),this.subscribeToPublishExecute($),this.registerEvalHandlers($),this.logger.info("Decks plugin registered")}async registerWithPublishPipeline($){await $.messaging.send({type:"publish:register",payload:{entityType:"deck",provider:{name:"internal",publish:async()=>({id:"internal"})}}})}subscribeToPublishExecute($){$.messaging.subscribe("publish:execute",async(X)=>{let{entityType:G,entityId:Y}=X.payload;if(G!=="deck")return{success:!0};try{let J=await $.entityService.getEntity({entityType:"deck",id:Y});if(!J)return await $.messaging.send({type:"publish:report:failure",payload:{entityType:G,entityId:Y,error:`Deck not found: ${Y}`}}),{success:!0};if(J.metadata.status==="published")return{success:!0};let W=new Date().toISOString(),H={...J,metadata:{...J.metadata,status:"published",publishedAt:W}};await $.entityService.updateEntity({entity:{...H,content:this.adapter.toMarkdown(H)}}),await $.messaging.send({type:"publish:report:success",payload:{entityType:G,entityId:Y,result:{id:Y}}})}catch(J){await $.messaging.send({type:"publish:report:failure",payload:{entityType:G,entityId:Y,error:S0(J)}})}return{success:!0}})}registerEvalHandlers($){$.eval.registerHandler("generateDeck",async(X)=>{let G=K.object({prompt:K.string(),event:K.string().optional()}).parse(X);return $.ai.generate({prompt:`${G.prompt}${G.event?`
859
+ ${U}`,templateName:"decks:description"})).description,await this.reportProgress(X,{progress:50,message:"Description generated"});else await this.reportProgress(X,{progress:50,message:"Using provided content"});if(!H||!U)this.failEarly("Title and content are required");let Q={slug:f1(H),title:H,status:"draft"},q=await q8({entityType:"deck",title:H,deriveId:(_)=>_,regeneratePrompt:"Generate a different presentation deck title on the same topic.",context:this.context});if(q!==H)Q.title=q,Q.slug=f1(q);let A={title:Q.title,status:Q.status,slug:Q.slug,description:F,author:Y,event:J},Z=W2(U,A);return{id:q,content:Z,metadata:Q,title:q,resultExtras:{title:q,slug:Q.slug},createOptions:{deduplicateId:!0}}}summarizeDataForLog($){return{prompt:$.prompt,title:$.title}}}var nR={name:"@brains/decks",private:!0,version:"0.2.0-alpha.55",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/image":"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 oR extends H2{entityType=S8.entityType;schema=S8.schema;adapter=S8;constructor(){super("decks",nR)}createGenerationHandler($){return new EY(this.logger.child("DeckGenerationJobHandler"),$)}getTemplates(){return{"deck-detail":BY,"deck-list":zY,generation:uR,description:dR}}getDataSources(){return[new TY(this.logger)]}getEntityTypeConfig(){return{weight:1.5}}async onRegister($){await this.registerWithPublishPipeline($),this.subscribeToPublishExecute($),this.registerEvalHandlers($),this.logger.info("Decks plugin registered")}async registerWithPublishPipeline($){await $.messaging.send({type:"publish:register",payload:{entityType:"deck",provider:{name:"internal",publish:async()=>({id:"internal"})}}})}subscribeToPublishExecute($){$.messaging.subscribe("publish:execute",async(X)=>{let{entityType:G,entityId:Y}=X.payload;if(G!=="deck")return{success:!0};try{let J=await $.entityService.getEntity({entityType:"deck",id:Y});if(!J)return await $.messaging.send({type:"publish:report:failure",payload:{entityType:G,entityId:Y,error:`Deck not found: ${Y}`}}),{success:!0};if(J.metadata.status==="published")return{success:!0};let W=new Date().toISOString(),H={...J,metadata:{...J.metadata,status:"published",publishedAt:W}};await $.entityService.updateEntity({entity:{...H,content:this.adapter.toMarkdown(H)}}),await $.messaging.send({type:"publish:report:success",payload:{entityType:G,entityId:Y,result:{id:Y}}})}catch(J){await $.messaging.send({type:"publish:report:failure",payload:{entityType:G,entityId:Y,error:S0(J)}})}return{success:!0}})}registerEvalHandlers($){$.eval.registerHandler("generateDeck",async(X)=>{let G=K.object({prompt:K.string(),event:K.string().optional()}).parse(X);return $.ai.generate({prompt:`${G.prompt}${G.event?`
860
860
 
861
861
  Note: This presentation is for "${G.event}".`:""}`,templateName:"decks:generation"})}),$.eval.registerHandler("generateDescription",async(X)=>{let G=K.object({title:K.string(),content:K.string()}).parse(X);return $.ai.generate({prompt:`Title: ${G.title}
862
862
 
863
863
  Content:
864
- ${G.content}`,templateName:"decks:description"})})}}I();Q0();var c$=r6.extend({expertise:K.array(K.string()).optional().describe("Skills, domains, areas of focus"),currentFocus:K.string().optional().describe("What you're currently working on"),availability:K.string().optional().describe("What you're open to (consulting, speaking, etc.)")}),Z2=O5.extend(c$.shape);Q0();d2();I();var _S=new m1;class r${postsListUrl;decksListUrl;id="professional:homepage-list";name="Homepage List DataSource";description="Fetches profile, blog posts, and presentation decks for homepage";constructor($,X){this.postsListUrl=$;this.decksListUrl=X}async fetch($,X,G){let Y=G.entityService,[J,W,H,U]=await Promise.all([q5(Y),Y.listEntities({entityType:"post",options:{limit:20}}),Y.listEntities({entityType:"deck",options:{limit:20}}),I8(Y)]),F=_S.parseProfileBody(J,Z2),M=W.sort(h6).slice(0,3).map(c2),Q=H.sort(h6).slice(0,3).map(k8);if(!U.cta)throw Error("CTA not configured in site-info");let q={profile:F,posts:M,decks:Q,postsListUrl:this.postsListUrl,decksListUrl:this.decksListUrl,cta:U.cta,sections:U.sections??{}};return X.parse(q)}}Q0();d2();var zS=new m1;class i${id="professional:about";name="About Page DataSource";description="Fetches full profile data for the about page";async fetch($,X,G){let Y=await q5(G.entityService),W={profile:zS.parseProfileBody(Y,Z2)};return X.parse(W)}}import{jsxDEV as C0,Fragment as LS}from"preact/jsx-dev-runtime";var DS="grid md:grid-cols-[14rem_1px_1fr] gap-y-2 gap-x-0 md:gap-16 items-start",PS="border-t md:border-t-0 md:border-l border-rule-strong md:self-stretch",IY=({number:$,title:X,blurb:G,children:Y})=>C0("section",{className:"py-20 border-b border-rule px-6 md:px-12",children:C0("div",{className:"max-w-6xl mx-auto",children:C0("div",{className:DS,children:[C0(XY,{title:X,number:$,blurb:G},void 0,!1,void 0,this),C0("div",{className:PS,"aria-hidden":"true"},void 0,!1,void 0,this),C0("div",{className:"mt-6 md:mt-0",children:Y},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this),jY=({profile:$,posts:X,decks:G,postsListUrl:Y,decksListUrl:J,cta:W,sections:H})=>{let U=$.tagline||$.description,F=X.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})),M=G.map((Z)=>({id:Z.id,url:Z.url,title:Z.frontmatter.title||Z.id,date:Z.frontmatter.publishedAt??Z.created,description:Z.frontmatter.description})),Q=$.name||"Home",q=$.intro||$.description||U||"Professional site",A=Boolean($.description)||$.expertise!==void 0&&$.expertise.length>0;return C0(LS,{children:[C0(s0,{title:Q,description:q,ogType:"website"},void 0,!1,void 0,this),C0("div",{className:"homepage-list bg-theme",children:[C0("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:C0("div",{className:"relative z-10 max-w-6xl mx-auto w-full",children:[$.name&&C0("div",{className:"flex items-center gap-[0.6rem] mb-6 font-mono text-[0.7rem] font-medium uppercase tracking-[0.22em] text-accent",children:[C0("span",{className:"w-[18px] h-px bg-accent","aria-hidden":"true"},void 0,!1,void 0,this),C0("span",{children:$.name},void 0,!1,void 0,this)]},void 0,!0,void 0,this),U&&C0("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:I$(U,"italic font-normal text-accent [font-variation-settings:'opsz'_144,'SOFT'_80]")},void 0,!1,void 0,this),$.intro&&C0("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:I$($.intro,"italic text-accent")},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),C0(IY,{number:"01",title:"Essays",blurb:H.essays?.blurb,children:C0(E$,{items:F,viewAllUrl:Y,viewAllLabel:"View all essays"},void 0,!1,void 0,this)},void 0,!1,void 0,this),M.length>0&&C0(IY,{number:"02",title:"Presentations",blurb:H.presentations?.blurb,children:C0(E$,{items:M,viewAllUrl:J,viewAllLabel:"View all presentations"},void 0,!1,void 0,this)},void 0,!1,void 0,this),A&&C0(IY,{number:"03",title:"About",blurb:H.about?.blurb,children:C0("div",{className:"flex flex-col gap-8",children:[$.description&&C0("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:$.description},void 0,!1,void 0,this),$.expertise&&$.expertise.length>0&&C0(GY,{subjects:$.expertise},void 0,!1,void 0,this),C0("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",C0("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),C0(iG,{cta:W,variant:"editorial",socialLinks:$.socialLinks},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)};import{jsxDEV as B0,Fragment as CS}from"preact/jsx-dev-runtime";var SY=({profile:$})=>{let X=`About ${$.name||"Me"}`,G=$.description||$.intro||"About page",Y=$.expertise&&$.expertise.length>0||$.currentFocus||$.availability||$.email||$.website||$.socialLinks&&$.socialLinks.length>0;return B0(CS,{children:[B0(s0,{title:X,description:G,ogType:"profile"},void 0,!1,void 0,this),B0("div",{className:"about-page bg-theme",children:[B0("header",{className:"hero-bg-pattern relative w-full py-16 md:py-24 px-6 md:px-12 bg-theme overflow-hidden",children:B0("div",{className:"relative z-10 max-w-4xl mx-auto",children:[B0("h1",{className:"text-5xl md:text-6xl font-semibold mb-6 text-heading",children:["About ",$.name||"Me"]},void 0,!0,void 0,this),$.description&&B0("p",{className:"text-xl md:text-2xl text-theme-muted leading-relaxed",children:$.description},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),B0("div",{className:"container mx-auto px-6 md:px-12 max-w-4xl py-12 md:py-16",children:[$.story&&B0("section",{className:"content-section-reveal mb-20 md:mb-28",children:B0(i2,{markdown:$.story},void 0,!1,void 0,this)},void 0,!1,void 0,this),Y&&B0("div",{className:"content-section-reveal grid md:grid-cols-2 gap-x-16 gap-y-12",children:[$.expertise&&$.expertise.length>0&&B0("section",{children:[B0("h2",{className:"text-sm tracking-widest uppercase text-theme-muted mb-6",children:"Expertise"},void 0,!1,void 0,this),B0("ul",{className:"flex flex-wrap gap-3",children:$.expertise.map((J,W)=>B0("li",{className:$Y({variant:"accent",size:"lg"}),children:J},W,!1,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this),$.currentFocus&&B0("section",{children:[B0("h2",{className:"text-sm tracking-widest uppercase text-theme-muted mb-6",children:"Current Focus"},void 0,!1,void 0,this),B0("p",{className:"text-lg text-theme leading-relaxed",children:$.currentFocus},void 0,!1,void 0,this)]},void 0,!0,void 0,this),$.availability&&B0("section",{children:[B0("h2",{className:"text-sm tracking-widest uppercase text-theme-muted mb-6",children:"Availability"},void 0,!1,void 0,this),B0("p",{className:"text-lg text-theme leading-relaxed",children:$.availability},void 0,!1,void 0,this)]},void 0,!0,void 0,this),($.email||$.website||$.socialLinks&&$.socialLinks.length>0)&&B0("section",{children:[B0("h2",{className:"text-sm tracking-widest uppercase text-theme-muted mb-6",children:"Contact"},void 0,!1,void 0,this),B0("div",{className:"space-y-4",children:[$.email&&B0("p",{className:"text-lg",children:B0("a",{href:`mailto:${$.email}`,className:"text-brand hover:text-brand-dark transition-colors",children:$.email},void 0,!1,void 0,this)},void 0,!1,void 0,this),$.website&&B0("p",{className:"text-lg",children:B0("a",{href:$.website,target:"_blank",rel:"noopener noreferrer",className:"text-brand hover:text-brand-dark transition-colors",children:$.website},void 0,!1,void 0,this)},void 0,!1,void 0,this),$.socialLinks&&$.socialLinks.length>0&&B0("div",{className:"flex flex-wrap gap-4 mt-4",children:$.socialLinks.map((J,W)=>B0(t1,{href:J.url,external:!0,variant:"secondary",size:"md",children:J.label||J.platform},W,!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 q1,Fragment as sR}from"preact/jsx-dev-runtime";var kY=()=>{return q1(sR,{children:[q1(s0,{title:"Thanks for subscribing!",description:"You've successfully subscribed to the newsletter."},void 0,!1,void 0,this),q1("div",{className:"min-h-[60vh] flex items-center justify-center px-6",children:q1("div",{className:"text-center max-w-md",children:[q1("div",{className:"text-6xl mb-6",children:"\uD83C\uDF89"},void 0,!1,void 0,this),q1("h1",{className:"text-3xl font-semibold mb-4 text-heading",children:"Thanks for subscribing!"},void 0,!1,void 0,this),q1("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),q1(t1,{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)},vY=()=>{return q1(sR,{children:[q1(s0,{title:"Subscription failed",description:"There was a problem with your subscription."},void 0,!1,void 0,this),q1("div",{className:"min-h-[60vh] flex items-center justify-center px-6",children:q1("div",{className:"text-center max-w-md",children:[q1("div",{className:"text-6xl mb-6",children:"\uD83D\uDE22"},void 0,!1,void 0,this),q1("h1",{className:"text-3xl font-semibold mb-4 text-heading",children:"Something went wrong"},void 0,!1,void 0,this),q1("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),q1(t1,{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)};I();var aR=K.object({label:K.string().describe("Display label for entity type (e.g., 'Essay')"),pluralName:K.string().optional().describe("URL path segment (defaults to label.toLowerCase() + 's')")}),tR=K.object({entityDisplay:K.object({post:aR,deck:aR}).describe("Display metadata for post and deck entity types (required for homepage)")});var eR={name:"@brains/site-professional",private:!0,version:"0.2.0-alpha.54",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 xY extends d6{dependencies=["blog","decks"];constructor($){super("professional-site",eR,$,tR)}async onRegister($){$.entities.extendFrontmatterSchema("anchor-profile",c$);let X=this.config.entityDisplay.post,G=this.config.entityDisplay.deck,Y=`/${X.pluralName??X.label.toLowerCase()+"s"}`,J=`/${G.pluralName??G.label.toLowerCase()+"s"}`,W=new r$(Y,J);$.entities.registerDataSource(W);let H=new i$;$.entities.registerDataSource(H);let U=K.object({profile:Z2,posts:K.array(a1),decks:K.array(j8),postsListUrl:K.string(),decksListUrl:K.string(),cta:E8,sections:K.record(K.string(),x$)}),F=K.object({profile:Z2}),M=K.object({});$.templates.register({"homepage-list":L0({name:"homepage-list",description:"Professional homepage with essays and presentations",schema:U,dataSourceId:"professional:homepage-list",requiredPermission:"public",layout:{component:jY}}),about:L0({name:"about",description:"About page with full profile information",schema:F,dataSourceId:"professional:about",requiredPermission:"public",layout:{component:SY}}),"subscribe-thanks":L0({name:"subscribe-thanks",description:"Newsletter subscription success page",schema:M,requiredPermission:"public",layout:{component:kY}}),"subscribe-error":L0({name:"subscribe-error",description:"Newsletter subscription error page",schema:M,requiredPermission:"public",layout:{component:vY}})}),this.logger.info("Professional site plugin registered successfully")}async getTools(){return[]}async getResources(){return[]}}function bY($){return new xY($??{})}var hY=[{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 n$}from"preact/jsx-dev-runtime";function yY({sections:$,siteInfo:X,slots:G,wordmark:Y}){return n$("div",{className:"flex flex-col min-h-screen bg-theme overflow-x-clip",children:[n$(w8,{title:X.title,navigation:X.navigation.primary,showThemeToggle:!0,...X.logo!==void 0?{logo:X.logo}:{},...Y!==void 0?{wordmark:Y}:{}},void 0,!1,void 0,this),n$("main",{className:"flex-grow flex flex-col bg-theme",children:$},void 0,!1,void 0,this),n$(oG,{primaryNavigation:X.navigation.primary,secondaryNavigation:X.navigation.secondary,copyright:X.copyright,socialLinks:X.socialLinks,title:X.title,tagline:X.description,children:G?.getSlot("footer-top").map((J)=>J.render())},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function $A($){return{id:$.id,version:$.version,type:$.type,packageName:$.packageName}}var VJ0=RY;function NJ0($){return $A(OY($))}var ES=ZY,wJ0=ES,_J0=yY;function zJ0($){return $A(bY($))}var DJ0=hY;export{ES as routes,zJ0 as professionalSitePlugin,DJ0 as professionalRoutes,NJ0 as personalSitePlugin,wJ0 as personalRoutes,_J0 as ProfessionalLayout,VJ0 as PersonalLayout};
864
+ ${G.content}`,templateName:"decks:description"})})}}I();Q0();var c$=r6.extend({expertise:K.array(K.string()).optional().describe("Skills, domains, areas of focus"),currentFocus:K.string().optional().describe("What you're currently working on"),availability:K.string().optional().describe("What you're open to (consulting, speaking, etc.)")}),Z2=O5.extend(c$.shape);Q0();d2();I();var _S=new m1;class r${postsListUrl;decksListUrl;id="professional:homepage-list";name="Homepage List DataSource";description="Fetches profile, blog posts, and presentation decks for homepage";constructor($,X){this.postsListUrl=$;this.decksListUrl=X}async fetch($,X,G){let Y=G.entityService,[J,W,H,U]=await Promise.all([q5(Y),Y.listEntities({entityType:"post",options:{limit:20}}),Y.listEntities({entityType:"deck",options:{limit:20}}),I8(Y)]),F=_S.parseProfileBody(J,Z2),M=W.sort(h6).slice(0,3).map(c2),Q=H.sort(h6).slice(0,3).map(k8);if(!U.cta)throw Error("CTA not configured in site-info");let q={profile:F,posts:M,decks:Q,postsListUrl:this.postsListUrl,decksListUrl:this.decksListUrl,cta:U.cta,sections:U.sections??{}};return X.parse(q)}}Q0();d2();var zS=new m1;class i${id="professional:about";name="About Page DataSource";description="Fetches full profile data for the about page";async fetch($,X,G){let Y=await q5(G.entityService),W={profile:zS.parseProfileBody(Y,Z2)};return X.parse(W)}}import{jsxDEV as C0,Fragment as LS}from"preact/jsx-dev-runtime";var DS="grid md:grid-cols-[14rem_1px_1fr] gap-y-2 gap-x-0 md:gap-16 items-start",PS="border-t md:border-t-0 md:border-l border-rule-strong md:self-stretch",IY=({number:$,title:X,blurb:G,children:Y})=>C0("section",{className:"py-20 border-b border-rule px-6 md:px-12",children:C0("div",{className:"max-w-6xl mx-auto",children:C0("div",{className:DS,children:[C0(XY,{title:X,number:$,blurb:G},void 0,!1,void 0,this),C0("div",{className:PS,"aria-hidden":"true"},void 0,!1,void 0,this),C0("div",{className:"mt-6 md:mt-0",children:Y},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this),jY=({profile:$,posts:X,decks:G,postsListUrl:Y,decksListUrl:J,cta:W,sections:H})=>{let U=$.tagline||$.description,F=X.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})),M=G.map((Z)=>({id:Z.id,url:Z.url,title:Z.frontmatter.title||Z.id,date:Z.frontmatter.publishedAt??Z.created,description:Z.frontmatter.description})),Q=$.name||"Home",q=$.intro||$.description||U||"Professional site",A=Boolean($.description)||$.expertise!==void 0&&$.expertise.length>0;return C0(LS,{children:[C0(s0,{title:Q,description:q,ogType:"website"},void 0,!1,void 0,this),C0("div",{className:"homepage-list bg-theme",children:[C0("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:C0("div",{className:"relative z-10 max-w-6xl mx-auto w-full",children:[$.name&&C0("div",{className:"flex items-center gap-[0.6rem] mb-6 font-mono text-[0.7rem] font-medium uppercase tracking-[0.22em] text-accent",children:[C0("span",{className:"w-[18px] h-px bg-accent","aria-hidden":"true"},void 0,!1,void 0,this),C0("span",{children:$.name},void 0,!1,void 0,this)]},void 0,!0,void 0,this),U&&C0("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:I$(U,"italic font-normal text-accent [font-variation-settings:'opsz'_144,'SOFT'_80]")},void 0,!1,void 0,this),$.intro&&C0("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:I$($.intro,"italic text-accent")},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),C0(IY,{number:"01",title:"Essays",blurb:H.essays?.blurb,children:C0(E$,{items:F,viewAllUrl:Y,viewAllLabel:"View all essays"},void 0,!1,void 0,this)},void 0,!1,void 0,this),M.length>0&&C0(IY,{number:"02",title:"Presentations",blurb:H.presentations?.blurb,children:C0(E$,{items:M,viewAllUrl:J,viewAllLabel:"View all presentations"},void 0,!1,void 0,this)},void 0,!1,void 0,this),A&&C0(IY,{number:"03",title:"About",blurb:H.about?.blurb,children:C0("div",{className:"flex flex-col gap-8",children:[$.description&&C0("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:$.description},void 0,!1,void 0,this),$.expertise&&$.expertise.length>0&&C0(GY,{subjects:$.expertise},void 0,!1,void 0,this),C0("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",C0("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),C0(iG,{cta:W,variant:"editorial",socialLinks:$.socialLinks},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)};import{jsxDEV as B0,Fragment as CS}from"preact/jsx-dev-runtime";var SY=({profile:$})=>{let X=`About ${$.name||"Me"}`,G=$.description||$.intro||"About page",Y=$.expertise&&$.expertise.length>0||$.currentFocus||$.availability||$.email||$.website||$.socialLinks&&$.socialLinks.length>0;return B0(CS,{children:[B0(s0,{title:X,description:G,ogType:"profile"},void 0,!1,void 0,this),B0("div",{className:"about-page bg-theme",children:[B0("header",{className:"hero-bg-pattern relative w-full py-16 md:py-24 px-6 md:px-12 bg-theme overflow-hidden",children:B0("div",{className:"relative z-10 max-w-4xl mx-auto",children:[B0("h1",{className:"text-5xl md:text-6xl font-semibold mb-6 text-heading",children:["About ",$.name||"Me"]},void 0,!0,void 0,this),$.description&&B0("p",{className:"text-xl md:text-2xl text-theme-muted leading-relaxed",children:$.description},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),B0("div",{className:"container mx-auto px-6 md:px-12 max-w-4xl py-12 md:py-16",children:[$.story&&B0("section",{className:"content-section-reveal mb-20 md:mb-28",children:B0(i2,{markdown:$.story},void 0,!1,void 0,this)},void 0,!1,void 0,this),Y&&B0("div",{className:"content-section-reveal grid md:grid-cols-2 gap-x-16 gap-y-12",children:[$.expertise&&$.expertise.length>0&&B0("section",{children:[B0("h2",{className:"text-sm tracking-widest uppercase text-theme-muted mb-6",children:"Expertise"},void 0,!1,void 0,this),B0("ul",{className:"flex flex-wrap gap-3",children:$.expertise.map((J,W)=>B0("li",{className:$Y({variant:"accent",size:"lg"}),children:J},W,!1,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this),$.currentFocus&&B0("section",{children:[B0("h2",{className:"text-sm tracking-widest uppercase text-theme-muted mb-6",children:"Current Focus"},void 0,!1,void 0,this),B0("p",{className:"text-lg text-theme leading-relaxed",children:$.currentFocus},void 0,!1,void 0,this)]},void 0,!0,void 0,this),$.availability&&B0("section",{children:[B0("h2",{className:"text-sm tracking-widest uppercase text-theme-muted mb-6",children:"Availability"},void 0,!1,void 0,this),B0("p",{className:"text-lg text-theme leading-relaxed",children:$.availability},void 0,!1,void 0,this)]},void 0,!0,void 0,this),($.email||$.website||$.socialLinks&&$.socialLinks.length>0)&&B0("section",{children:[B0("h2",{className:"text-sm tracking-widest uppercase text-theme-muted mb-6",children:"Contact"},void 0,!1,void 0,this),B0("div",{className:"space-y-4",children:[$.email&&B0("p",{className:"text-lg",children:B0("a",{href:`mailto:${$.email}`,className:"text-brand hover:text-brand-dark transition-colors",children:$.email},void 0,!1,void 0,this)},void 0,!1,void 0,this),$.website&&B0("p",{className:"text-lg",children:B0("a",{href:$.website,target:"_blank",rel:"noopener noreferrer",className:"text-brand hover:text-brand-dark transition-colors",children:$.website},void 0,!1,void 0,this)},void 0,!1,void 0,this),$.socialLinks&&$.socialLinks.length>0&&B0("div",{className:"flex flex-wrap gap-4 mt-4",children:$.socialLinks.map((J,W)=>B0(t1,{href:J.url,external:!0,variant:"secondary",size:"md",children:J.label||J.platform},W,!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 q1,Fragment as sR}from"preact/jsx-dev-runtime";var kY=()=>{return q1(sR,{children:[q1(s0,{title:"Thanks for subscribing!",description:"You've successfully subscribed to the newsletter."},void 0,!1,void 0,this),q1("div",{className:"min-h-[60vh] flex items-center justify-center px-6",children:q1("div",{className:"text-center max-w-md",children:[q1("div",{className:"text-6xl mb-6",children:"\uD83C\uDF89"},void 0,!1,void 0,this),q1("h1",{className:"text-3xl font-semibold mb-4 text-heading",children:"Thanks for subscribing!"},void 0,!1,void 0,this),q1("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),q1(t1,{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)},vY=()=>{return q1(sR,{children:[q1(s0,{title:"Subscription failed",description:"There was a problem with your subscription."},void 0,!1,void 0,this),q1("div",{className:"min-h-[60vh] flex items-center justify-center px-6",children:q1("div",{className:"text-center max-w-md",children:[q1("div",{className:"text-6xl mb-6",children:"\uD83D\uDE22"},void 0,!1,void 0,this),q1("h1",{className:"text-3xl font-semibold mb-4 text-heading",children:"Something went wrong"},void 0,!1,void 0,this),q1("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),q1(t1,{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)};I();var aR=K.object({label:K.string().describe("Display label for entity type (e.g., 'Essay')"),pluralName:K.string().optional().describe("URL path segment (defaults to label.toLowerCase() + 's')")}),tR=K.object({entityDisplay:K.object({post:aR,deck:aR}).describe("Display metadata for post and deck entity types (required for homepage)")});var eR={name:"@brains/site-professional",private:!0,version:"0.2.0-alpha.55",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 xY extends d6{dependencies=["blog","decks"];constructor($){super("professional-site",eR,$,tR)}async onRegister($){$.entities.extendFrontmatterSchema("anchor-profile",c$);let X=this.config.entityDisplay.post,G=this.config.entityDisplay.deck,Y=`/${X.pluralName??X.label.toLowerCase()+"s"}`,J=`/${G.pluralName??G.label.toLowerCase()+"s"}`,W=new r$(Y,J);$.entities.registerDataSource(W);let H=new i$;$.entities.registerDataSource(H);let U=K.object({profile:Z2,posts:K.array(a1),decks:K.array(j8),postsListUrl:K.string(),decksListUrl:K.string(),cta:E8,sections:K.record(K.string(),x$)}),F=K.object({profile:Z2}),M=K.object({});$.templates.register({"homepage-list":L0({name:"homepage-list",description:"Professional homepage with essays and presentations",schema:U,dataSourceId:"professional:homepage-list",requiredPermission:"public",layout:{component:jY}}),about:L0({name:"about",description:"About page with full profile information",schema:F,dataSourceId:"professional:about",requiredPermission:"public",layout:{component:SY}}),"subscribe-thanks":L0({name:"subscribe-thanks",description:"Newsletter subscription success page",schema:M,requiredPermission:"public",layout:{component:kY}}),"subscribe-error":L0({name:"subscribe-error",description:"Newsletter subscription error page",schema:M,requiredPermission:"public",layout:{component:vY}})}),this.logger.info("Professional site plugin registered successfully")}async getTools(){return[]}async getResources(){return[]}}function bY($){return new xY($??{})}var hY=[{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 n$}from"preact/jsx-dev-runtime";function yY({sections:$,siteInfo:X,slots:G,wordmark:Y}){return n$("div",{className:"flex flex-col min-h-screen bg-theme overflow-x-clip",children:[n$(w8,{title:X.title,navigation:X.navigation.primary,showThemeToggle:!0,...X.logo!==void 0?{logo:X.logo}:{},...Y!==void 0?{wordmark:Y}:{}},void 0,!1,void 0,this),n$("main",{className:"flex-grow flex flex-col bg-theme",children:$},void 0,!1,void 0,this),n$(oG,{primaryNavigation:X.navigation.primary,secondaryNavigation:X.navigation.secondary,copyright:X.copyright,socialLinks:X.socialLinks,title:X.title,tagline:X.description,children:G?.getSlot("footer-top").map((J)=>J.render())},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function $A($){return{id:$.id,version:$.version,type:$.type,packageName:$.packageName}}var VJ0=RY;function NJ0($){return $A(OY($))}var ES=ZY,wJ0=ES,_J0=yY;function zJ0($){return $A(bY($))}var DJ0=hY;export{ES as routes,zJ0 as professionalSitePlugin,DJ0 as professionalRoutes,NJ0 as personalSitePlugin,wJ0 as personalRoutes,_J0 as ProfessionalLayout,VJ0 as PersonalLayout};
865
865
 
866
- //# debugId=FE60BC420BD2624164756E2164756E21
866
+ //# debugId=803F1F343A689A6464756E2164756E21
867
867
  //# sourceMappingURL=site.js.map