@rizom/brain 0.2.0-alpha.582 → 0.2.0-alpha.583

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/brain.js +42 -44
  2. package/dist/chunks/{app-s1vmtghf.js → app-6bx0wrcd.js} +2 -2
  3. package/dist/chunks/{blog-post-adapter-ek7177yr.js → blog-post-adapter-z1dtc2r2.js} +2 -2
  4. package/dist/chunks/{index-3tehtce3.js → index-7c71z71j.js} +3 -3
  5. package/dist/chunks/{index-3tehtce3.js.map → index-7c71z71j.js.map} +1 -1
  6. package/dist/chunks/{index-26fbm9zd.js → index-jnfgrr88.js} +2 -2
  7. package/dist/chunks/{index-xjm4xb2a.js → index-v5j8cmga.js} +3 -3
  8. package/dist/chunks/{index-7cvf441y.js → index-x5z9qdh9.js} +2 -2
  9. package/dist/chunks/{index-trpy6wwa.js → index-ygy8j5wp.js} +3 -5
  10. package/dist/chunks/{index-trpy6wwa.js.map → index-ygy8j5wp.js.map} +3 -3
  11. package/dist/chunks/{index-n7wjg8cm.js → index-zezv3y29.js} +2 -2
  12. package/dist/chunks/{linkedin-template-hrr340bb.js → linkedin-template-f5g0md30.js} +2 -2
  13. package/dist/chunks/{rss-datasource-t5fndpsd.js → rss-datasource-zh4j263b.js} +2 -2
  14. package/dist/entities.js +1 -1
  15. package/dist/git-broker.js +1 -3
  16. package/dist/index.js +1 -1
  17. package/dist/interfaces.js +1 -1
  18. package/dist/model.js +42 -42
  19. package/dist/model.js.map +1 -1
  20. package/dist/plugins.js +1 -1
  21. package/dist/services.js +1 -1
  22. package/dist/ui/{studio-app-q77pq607.js → studio-app-cmq8cwna.js} +2 -2
  23. package/dist/ui/studio-asset-manifest.json +13 -13
  24. package/dist/ui/studio-chunks/{account-view-q2ywvgza.js → account-view-8z403hx4.js} +1 -1
  25. package/dist/ui/studio-chunks/{main-998kkstm.js → main-4vaeqvhy.js} +39 -41
  26. package/dist/ui/studio-chunks/{main-998kkstm.js.map → main-4vaeqvhy.js.map} +3 -3
  27. package/dist/ui/studio-chunks/{main-qjp9y78q.js → main-drkb8mk1.js} +1 -1
  28. package/dist/ui/studio-chunks/{main-nfp3pmrp.js → main-xvgffskk.js} +1 -1
  29. package/dist/ui/studio-chunks/{studio-chat-workspace-7c5h9jzz.js → studio-chat-workspace-5h9qka59.js} +1 -1
  30. package/package.json +1 -1
  31. /package/dist/chunks/{app-s1vmtghf.js.map → app-6bx0wrcd.js.map} +0 -0
  32. /package/dist/chunks/{blog-post-adapter-ek7177yr.js.map → blog-post-adapter-z1dtc2r2.js.map} +0 -0
  33. /package/dist/chunks/{index-26fbm9zd.js.map → index-jnfgrr88.js.map} +0 -0
  34. /package/dist/chunks/{index-xjm4xb2a.js.map → index-v5j8cmga.js.map} +0 -0
  35. /package/dist/chunks/{index-7cvf441y.js.map → index-x5z9qdh9.js.map} +0 -0
  36. /package/dist/chunks/{index-n7wjg8cm.js.map → index-zezv3y29.js.map} +0 -0
  37. /package/dist/chunks/{linkedin-template-hrr340bb.js.map → linkedin-template-f5g0md30.js.map} +0 -0
  38. /package/dist/chunks/{rss-datasource-t5fndpsd.js.map → rss-datasource-zh4j263b.js.map} +0 -0
  39. /package/dist/ui/{studio-app-q77pq607.js.map → studio-app-cmq8cwna.js.map} +0 -0
  40. /package/dist/ui/studio-chunks/{account-view-q2ywvgza.js.map → account-view-8z403hx4.js.map} +0 -0
  41. /package/dist/ui/studio-chunks/{main-qjp9y78q.js.map → main-drkb8mk1.js.map} +0 -0
  42. /package/dist/ui/studio-chunks/{main-nfp3pmrp.js.map → main-xvgffskk.js.map} +0 -0
  43. /package/dist/ui/studio-chunks/{studio-chat-workspace-7c5h9jzz.js.map → studio-chat-workspace-5h9qka59.js.map} +0 -0
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{ja as a,ka as b,la as c,ma as d}from"./index-xjm4xb2a.js";import"./index-13wwvf9d.js";import"./index-trpy6wwa.js";import"./index-5e5vv8yh.js";import"./index-xv35a0x3.js";import"./index-qsw9tcjy.js";import"./index-f90s4k5m.js";import"./index-01kchyzt.js";export{d as App,a as STARTUP_CHECK_API_KEY,c as buildShellConfig,b as toAppConfig};
2
+ import{ja as a,ka as b,la as c,ma as d}from"./index-v5j8cmga.js";import"./index-13wwvf9d.js";import"./index-ygy8j5wp.js";import"./index-5e5vv8yh.js";import"./index-xv35a0x3.js";import"./index-qsw9tcjy.js";import"./index-f90s4k5m.js";import"./index-01kchyzt.js";export{d as App,a as STARTUP_CHECK_API_KEY,c as buildShellConfig,b as toAppConfig};
3
3
 
4
4
  //# debugId=0922B8A2BF8AD17664756E2164756E21
5
- //# sourceMappingURL=app-s1vmtghf.js.map
5
+ //# sourceMappingURL=app-6bx0wrcd.js.map
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{B as a,C as b}from"./index-n7wjg8cm.js";import"./index-26fbm9zd.js";import"./index-trpy6wwa.js";import"./index-5e5vv8yh.js";import"./index-xv35a0x3.js";import"./index-qsw9tcjy.js";import"./index-f90s4k5m.js";import"./index-01kchyzt.js";export{a as BlogPostAdapter,b as blogPostAdapter};
2
+ import{B as a,C as b}from"./index-zezv3y29.js";import"./index-jnfgrr88.js";import"./index-ygy8j5wp.js";import"./index-5e5vv8yh.js";import"./index-xv35a0x3.js";import"./index-qsw9tcjy.js";import"./index-f90s4k5m.js";import"./index-01kchyzt.js";export{a as BlogPostAdapter,b as blogPostAdapter};
3
3
 
4
4
  //# debugId=1926E9DFA156C4E064756E2164756E21
5
- //# sourceMappingURL=blog-post-adapter-ek7177yr.js.map
5
+ //# sourceMappingURL=blog-post-adapter-z1dtc2r2.js.map
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{a as z,b as f}from"./index-t98fytmk.js";import{d as c,e as l}from"./index-1sd4acdk.js";import{na as D}from"./index-13wwvf9d.js";import{Fp as w,Ho as x,Tp as B,mq as M,qp as I,rp as A,sp as P,tp as T,up as R,vp as S,yp as L}from"./index-trpy6wwa.js";import"./index-5e5vv8yh.js";import"./index-xv35a0x3.js";import"./index-qsw9tcjy.js";import{Bs as k,Pq as d}from"./index-f90s4k5m.js";import{_t as h}from"./index-01kchyzt.js";var m=d.object({theme:d.object({primaryColor:d.string().describe("Primary color for the CLI theme").default("#0066cc"),accentColor:d.string().describe("Accent color for the CLI theme").default("#ff6600")}).describe("Theme configuration for the CLI interface").default({primaryColor:"#0066cc",accentColor:"#ff6600"})});var y={name:"@brains/chat-repl",license:"AGPL-3.0-only",version:"0.2.0-alpha.582",dependencies:{"@brains/job-queue":"workspace:*","@brains/plugins":"workspace:*","@brains/utils":"workspace:*",chalk:"^5.4.1",ink:"^7.0.6","ink-spinner":"^5.0.0","ink-text-input":"^6.0.0",marked:"^18.0.5",react:"^19.2.7"},devDependencies:{"@brains/eslint-config":"workspace:*","@brains/typescript-config":"workspace:*","@types/bun":"^1.4.0","@types/react":"^19.2.17",typescript:"^7.0.2"},files:["src"],main:"./src/index.ts",module:"./src/index.ts",private:!0,scripts:{dev:"tsc --watch",lint:"eslint . --max-warnings 0","lint:fix":"eslint . --max-warnings 0 --fix",test:"bun test",typecheck:"tsc --noEmit"},type:"module",types:"./src/index.ts"};var j={completed:"\u2713",declined:"\u25CB",failed:"\u2717"},Z={deniedCardIds:void 0,resolveUrl:(e)=>e,isHiddenUrl:()=>!1,eventActionUnavailableLabel:void 0};class E extends x{inkApp=null;responseCallback;systemMessageCallback;agentService;removeSignalHandlers;approvalTracker;constructor(e={}){super("cli",y,e,m)}getAgentService(){if(!this.agentService)throw Error("AgentService not initialized - plugin not registered");return this.agentService}async onRegister(e){await super.onRegister(e),this.agentService=e.agent,this.logger.debug("CLI interface registered with AgentService")}sendMessageToChannel({message:e}){let s=typeof e==="string"?e:e.fallbackText??"";if(!s)return;(this.systemMessageCallback??this.responseCallback)?.(s)}sendReply(e){this.responseCallback?.(e)}registerResponseCallback(e){this.responseCallback=e}registerSystemMessageCallback(e){this.systemMessageCallback=e}unregisterMessageCallbacks(){this.responseCallback=void 0,this.systemMessageCallback=void 0}async onProgressUpdate(e){this.logger.debug("CLI progress update",{eventId:e.id,status:e.status,progress:e.progress,message:e.message})}createDaemon(){return{start:async()=>{if(!this.context)throw new M(this.id,"Initialization failed: Plugin context not initialized");this.logger.debug("Starting CLI interface");try{let[e,s,n]=await Promise.all([import("./index-9r0scp4j.js"),import("react"),import("./EnhancedApp-hd08v65e.js")]),{render:r}=e,t=s.default,o=n.default,g=t.createElement(o,{interface:this,registerProgressCallback:(i)=>this.registerProgressCallback(i),unregisterProgressCallback:()=>this.unregisterProgressCallback(),registerResponseCallback:(i)=>this.registerResponseCallback(i),registerSystemMessageCallback:(i)=>this.registerSystemMessageCallback(i),unregisterMessageCallbacks:()=>this.unregisterMessageCallbacks()});this.inkApp=r(g),this.registerSignalHandlers()}catch(e){throw this.logger.error("Failed to start CLI interface",{error:e}),e}},stop:async()=>{this.logger.debug("Stopping CLI interface"),await this.cleanup()},healthCheck:async()=>{let e=this.inkApp!==null;return{status:e?"healthy":"error",message:e?"CLI interface is running":"CLI interface not running",lastCheck:new Date,details:{hasInkApp:this.inkApp!==null,hasCallbacks:this.hasProgressCallback()}}}}}getApprovalTracker(){return this.approvalTracker??=new L({loadMessages:async(e)=>await this.context?.conversations.getMessages(e,{limit:50})??[],onRestoreError:(e,s)=>{this.logger.debug("Failed to restore pending CLI approvals",{error:e,conversationId:s})}}),this.approvalTracker}async getPendingApprovalIds(e){return[...await this.getApprovalTracker().getApprovalIds(e)]}async processInput(e){this.startProcessingInput();try{let n=await this.getPendingApprovalIds("cli");if(n.length>0){if(await this.handleConfirmationResponse(e,"cli",n))return}let r=await this.getAgentService().chat(e,"cli",{userPermissionLevel:"admin",isAnchor:this.getContext().permissions.isAnchor("cli","local"),interfaceType:"cli",channelId:"cli",channelName:"CLI Terminal"}),t=I(r.cards),o=t.length>0?t.map((i)=>i.id):r.pendingConfirmations?.map((i)=>i.id)??[];this.getApprovalTracker().replaceApprovals("cli",o);let g=this.renderAgentResponse(r);this.logger.debug("Agent response received",{textLength:r.text.length,toolResultsCount:r.toolResults?.length??0,toolResults:r.toolResults?.map((i)=>({toolName:i.toolName,hasData:i.data!==void 0}))}),this.sendReply(g)}catch(n){this.logger.error("Error processing input",{error:n,input:e});let r=k(n,"An unknown error occurred");this.sendReply(`**Error:** ${r}`)}finally{this.endProcessingInput()}}renderAgentResponse(e){let s=w(e,{deniedCardIds:void 0}),n=[],r=[],t="";for(let o of s.directives)switch(o.kind){case"text":t=o.text;break;case"approvals":n.push(...o.cards);break;default:if(o.card.kind==="tool-approval"&&o.card.state==="approval-requested"){n.push(o.card);break}r.push(B(o.card,Z))}return[this.formatAgentResponseText(t,n),...r].filter((o)=>o.trim().length>0).join(`
2
+ import{a as z,b as f}from"./index-t98fytmk.js";import{d as c,e as l}from"./index-1sd4acdk.js";import{na as D}from"./index-13wwvf9d.js";import{Fp as w,Ho as x,Tp as B,mq as M,qp as I,rp as A,sp as P,tp as T,up as R,vp as S,yp as L}from"./index-ygy8j5wp.js";import"./index-5e5vv8yh.js";import"./index-xv35a0x3.js";import"./index-qsw9tcjy.js";import{Bs as k,Pq as d}from"./index-f90s4k5m.js";import{_t as h}from"./index-01kchyzt.js";var m=d.object({theme:d.object({primaryColor:d.string().describe("Primary color for the CLI theme").default("#0066cc"),accentColor:d.string().describe("Accent color for the CLI theme").default("#ff6600")}).describe("Theme configuration for the CLI interface").default({primaryColor:"#0066cc",accentColor:"#ff6600"})});var y={name:"@brains/chat-repl",license:"AGPL-3.0-only",version:"0.2.0-alpha.583",dependencies:{"@brains/job-queue":"workspace:*","@brains/plugins":"workspace:*","@brains/utils":"workspace:*",chalk:"^5.4.1",ink:"^7.0.6","ink-spinner":"^5.0.0","ink-text-input":"^6.0.0",marked:"^18.0.5",react:"^19.2.7"},devDependencies:{"@brains/eslint-config":"workspace:*","@brains/typescript-config":"workspace:*","@types/bun":"^1.4.0","@types/react":"^19.2.17",typescript:"^7.0.2"},files:["src"],main:"./src/index.ts",module:"./src/index.ts",private:!0,scripts:{dev:"tsc --watch",lint:"eslint . --max-warnings 0","lint:fix":"eslint . --max-warnings 0 --fix",test:"bun test",typecheck:"tsc --noEmit"},type:"module",types:"./src/index.ts"};var j={completed:"\u2713",declined:"\u25CB",failed:"\u2717"},Z={deniedCardIds:void 0,resolveUrl:(e)=>e,isHiddenUrl:()=>!1,eventActionUnavailableLabel:void 0};class E extends x{inkApp=null;responseCallback;systemMessageCallback;agentService;removeSignalHandlers;approvalTracker;constructor(e={}){super("cli",y,e,m)}getAgentService(){if(!this.agentService)throw Error("AgentService not initialized - plugin not registered");return this.agentService}async onRegister(e){await super.onRegister(e),this.agentService=e.agent,this.logger.debug("CLI interface registered with AgentService")}sendMessageToChannel({message:e}){let s=typeof e==="string"?e:e.fallbackText??"";if(!s)return;(this.systemMessageCallback??this.responseCallback)?.(s)}sendReply(e){this.responseCallback?.(e)}registerResponseCallback(e){this.responseCallback=e}registerSystemMessageCallback(e){this.systemMessageCallback=e}unregisterMessageCallbacks(){this.responseCallback=void 0,this.systemMessageCallback=void 0}async onProgressUpdate(e){this.logger.debug("CLI progress update",{eventId:e.id,status:e.status,progress:e.progress,message:e.message})}createDaemon(){return{start:async()=>{if(!this.context)throw new M(this.id,"Initialization failed: Plugin context not initialized");this.logger.debug("Starting CLI interface");try{let[e,s,n]=await Promise.all([import("./index-9r0scp4j.js"),import("react"),import("./EnhancedApp-hd08v65e.js")]),{render:r}=e,t=s.default,o=n.default,g=t.createElement(o,{interface:this,registerProgressCallback:(i)=>this.registerProgressCallback(i),unregisterProgressCallback:()=>this.unregisterProgressCallback(),registerResponseCallback:(i)=>this.registerResponseCallback(i),registerSystemMessageCallback:(i)=>this.registerSystemMessageCallback(i),unregisterMessageCallbacks:()=>this.unregisterMessageCallbacks()});this.inkApp=r(g),this.registerSignalHandlers()}catch(e){throw this.logger.error("Failed to start CLI interface",{error:e}),e}},stop:async()=>{this.logger.debug("Stopping CLI interface"),await this.cleanup()},healthCheck:async()=>{let e=this.inkApp!==null;return{status:e?"healthy":"error",message:e?"CLI interface is running":"CLI interface not running",lastCheck:new Date,details:{hasInkApp:this.inkApp!==null,hasCallbacks:this.hasProgressCallback()}}}}}getApprovalTracker(){return this.approvalTracker??=new L({loadMessages:async(e)=>await this.context?.conversations.getMessages(e,{limit:50})??[],onRestoreError:(e,s)=>{this.logger.debug("Failed to restore pending CLI approvals",{error:e,conversationId:s})}}),this.approvalTracker}async getPendingApprovalIds(e){return[...await this.getApprovalTracker().getApprovalIds(e)]}async processInput(e){this.startProcessingInput();try{let n=await this.getPendingApprovalIds("cli");if(n.length>0){if(await this.handleConfirmationResponse(e,"cli",n))return}let r=await this.getAgentService().chat(e,"cli",{userPermissionLevel:"admin",isAnchor:this.getContext().permissions.isAnchor("cli","local"),interfaceType:"cli",channelId:"cli",channelName:"CLI Terminal"}),t=I(r.cards),o=t.length>0?t.map((i)=>i.id):r.pendingConfirmations?.map((i)=>i.id)??[];this.getApprovalTracker().replaceApprovals("cli",o);let g=this.renderAgentResponse(r);this.logger.debug("Agent response received",{textLength:r.text.length,toolResultsCount:r.toolResults?.length??0,toolResults:r.toolResults?.map((i)=>({toolName:i.toolName,hasData:i.data!==void 0}))}),this.sendReply(g)}catch(n){this.logger.error("Error processing input",{error:n,input:e});let r=k(n,"An unknown error occurred");this.sendReply(`**Error:** ${r}`)}finally{this.endProcessingInput()}}renderAgentResponse(e){let s=w(e,{deniedCardIds:void 0}),n=[],r=[],t="";for(let o of s.directives)switch(o.kind){case"text":t=o.text;break;case"approvals":n.push(...o.cards);break;default:if(o.card.kind==="tool-approval"&&o.card.state==="approval-requested"){n.push(o.card);break}r.push(B(o.card,Z))}return[this.formatAgentResponseText(t,n),...r].filter((o)=>o.trim().length>0).join(`
3
3
 
4
4
  `)}formatAgentResponseText(e,s){if(s.length===0)return e;let n=P(e,s);if(s.length===1){let t=s[0];if(!t)return e;let o=t.preview?`
5
5
 
@@ -15,5 +15,5 @@ _Please reply with **yes 1** / **no 1** for the matching action._`}formatApprova
15
15
 
16
16
  ${r.error}`:`${t} ${r.summary}`}resolveApprovalIndexSugar(e,s){let n=/^(.*?)\s+#?(\d+)$/.exec(e.trim());if(!n?.[1]||!n[2])return e;let r=s[Number(n[2])-1];return r?`${n[1]} ${r}`:e}async handleConfirmationResponse(e,s,n){let r=new Set(n);if(!S(e,r))return!1;let t=R({message:this.resolveApprovalIndexSugar(e,n),approvalIds:r});if(t.kind==="not-confirmation")return!1;if(t.kind==="notice")return this.sendReply(`_${t.message}_`),!0;this.getApprovalTracker().removeApproval(s,t.approvalId);let o=await this.getAgentService().confirmPendingAction(s,t.confirmed,t.approvalId,{userPermissionLevel:"admin",isAnchor:this.getContext().permissions.isAnchor("cli","local"),interfaceType:"cli"});return this.getApprovalTracker().syncFromResponse(s,o,t.approvalId),this.sendReply(this.formatApprovalResultText(o.text,o.cards)),!0}registerSignalHandlers(){let e=()=>{this.logger.debug("Received termination signal, stopping CLI"),this.cleanup()};this.removeSignalHandlers=D(["SIGINT","SIGTERM"],e)}async cleanup(){if(this.unregisterProgressCallback(),this.unregisterMessageCallbacks(),this.removeSignalHandlers?.(),this.removeSignalHandlers=void 0,this.inkApp)this.inkApp.unmount(),this.inkApp=null}}import{jsx as a,jsxs as p}from"react/jsx-runtime";function q({batchStatus:e,showDetails:s=!0}){let{batchId:n,totalOperations:r,completedOperations:t,failedOperations:o,currentOperation:g,errors:i,status:u}=e,O=u==="processing",v=u==="completed",C=u==="failed",b=t-o;return p(c,{flexDirection:"column",marginY:1,children:[a(c,{marginBottom:1,children:p(l,{bold:!0,color:"cyan",children:["Batch Operation: ",n.slice(0,8),"..."]})}),a(c,{marginBottom:1,children:a(f,{current:t,total:r,message:"Overall Progress:",color:C?"red":v?"green":"yellow"})}),O&&g&&p(c,{marginBottom:1,children:[a(l,{color:"green",children:a(z,{type:"dots"})}),p(l,{color:"gray",children:[" ",g]})]}),s&&p(c,{flexDirection:"column",marginLeft:2,children:[b>0&&p(c,{children:[a(l,{color:"green",children:"\u2713 "}),p(l,{color:"gray",children:[b," successful"]})]}),o>0&&p(c,{children:[a(l,{color:"red",children:"\u2717 "}),p(l,{color:"gray",children:[o," failed"]})]}),i.length>0&&p(c,{flexDirection:"column",marginTop:1,children:[a(l,{color:"red",bold:!0,children:"Errors:"}),i.slice(0,3).map((H,_)=>p(c,{marginLeft:2,children:[a(l,{color:"red",children:"\u2022 "}),a(l,{color:"gray",children:H})]},_)),i.length>3&&a(c,{marginLeft:2,children:p(l,{color:"gray",children:["... and ",i.length-3," more"]})})]})]}),v&&a(c,{marginTop:1,children:a(l,{color:"green",bold:!0,children:"\u2713 Batch completed successfully"})}),C&&a(c,{marginTop:1,children:a(l,{color:"red",bold:!0,children:"\u2717 Batch failed"})})]})}export{q as BatchProgress,E as CLIInterface,f as ProgressBar,m as cliConfigSchema};
17
17
 
18
- //# debugId=32EEA3081DD8BBE664756E2164756E21
19
- //# sourceMappingURL=index-3tehtce3.js.map
18
+ //# debugId=73C549A3272B653E64756E2164756E21
19
+ //# sourceMappingURL=index-7c71z71j.js.map
@@ -7,6 +7,6 @@
7
7
  "/** @jsxImportSource react */\nimport React from \"react\";\nimport { Box, Text } from \"ink\";\nimport Spinner from \"ink-spinner\";\nimport type { BatchJobStatus } from \"@brains/job-queue\";\nimport { ProgressBar } from \"./ProgressBar\";\n\ninterface BatchProgressProps {\n batchStatus: BatchJobStatus;\n showDetails?: boolean;\n}\n\nexport function BatchProgress({\n batchStatus,\n showDetails = true,\n}: BatchProgressProps): React.ReactElement {\n const {\n batchId,\n totalOperations,\n completedOperations,\n failedOperations,\n currentOperation,\n errors,\n status,\n } = batchStatus;\n\n const inProgress = status === \"processing\";\n const isCompleted = status === \"completed\";\n const isFailed = status === \"failed\";\n\n // Calculate successful operations\n const successfulOperations = completedOperations - failedOperations;\n\n return (\n <Box flexDirection=\"column\" marginY={1}>\n {/* Header */}\n <Box marginBottom={1}>\n <Text bold color=\"cyan\">\n Batch Operation: {batchId.slice(0, 8)}...\n </Text>\n </Box>\n\n {/* Main progress bar */}\n <Box marginBottom={1}>\n <ProgressBar\n current={completedOperations}\n total={totalOperations}\n message=\"Overall Progress:\"\n color={isFailed ? \"red\" : isCompleted ? \"green\" : \"yellow\"}\n />\n </Box>\n\n {/* Current operation */}\n {inProgress && currentOperation && (\n <Box marginBottom={1}>\n <Text color=\"green\">\n <Spinner type=\"dots\" />\n </Text>\n <Text color=\"gray\"> {currentOperation}</Text>\n </Box>\n )}\n\n {/* Details section */}\n {showDetails && (\n <Box flexDirection=\"column\" marginLeft={2}>\n {/* Success count */}\n {successfulOperations > 0 && (\n <Box>\n <Text color=\"green\">✓ </Text>\n <Text color=\"gray\">{successfulOperations} successful</Text>\n </Box>\n )}\n\n {/* Failure count */}\n {failedOperations > 0 && (\n <Box>\n <Text color=\"red\">✗ </Text>\n <Text color=\"gray\">{failedOperations} failed</Text>\n </Box>\n )}\n\n {/* Errors */}\n {errors.length > 0 && (\n <Box flexDirection=\"column\" marginTop={1}>\n <Text color=\"red\" bold>\n Errors:\n </Text>\n {errors.slice(0, 3).map((error, index) => (\n <Box key={index} marginLeft={2}>\n <Text color=\"red\">• </Text>\n <Text color=\"gray\">{error}</Text>\n </Box>\n ))}\n {errors.length > 3 && (\n <Box marginLeft={2}>\n <Text color=\"gray\">... and {errors.length - 3} more</Text>\n </Box>\n )}\n </Box>\n )}\n </Box>\n )}\n\n {/* Final status */}\n {isCompleted && (\n <Box marginTop={1}>\n <Text color=\"green\" bold>\n ✓ Batch completed successfully\n </Text>\n </Box>\n )}\n\n {isFailed && (\n <Box marginTop={1}>\n <Text color=\"red\" bold>\n ✗ Batch failed\n </Text>\n </Box>\n )}\n </Box>\n );\n}\n"
8
8
  ],
9
9
  "mappings": ";8aAcO,IAAM,EAAmC,EAAE,OAAO,CACvD,MAAO,EACJ,OAAO,CACN,aAAc,EACX,OAAO,EACP,SAAS,iCAAiC,EAC1C,QAAQ,SAAS,EACpB,YAAa,EACV,OAAO,EACP,SAAS,gCAAgC,EACzC,QAAQ,SAAS,CACtB,CAAC,EACA,SAAS,2CAA2C,EACpD,QAAQ,CACP,aAAc,UACd,YAAa,SACf,CAAC,CACL,CAAC,utBCHD,IAAM,EAA8D,CAClE,UAAW,SACX,SAAU,SACV,OAAQ,QACV,EAMM,EAAwB,CAC5B,cAAe,OACf,WAAY,CAAC,IAAgD,EAC7D,YAAa,IAAe,GAC5B,4BAA6B,MAC/B,EAWO,MAAM,UAAqB,CAGhC,CAEQ,OAA0B,KAC1B,iBACA,sBACA,aACA,qBAIA,gBAER,WAAW,CAAC,EAAyB,CAAC,EAAG,CACvC,MAAM,MAAO,EAAa,EAAQ,CAAe,EAM3C,eAAe,EAAmB,CACxC,GAAI,CAAC,KAAK,aACR,MAAU,MAAM,sDAAsD,EAExE,OAAO,KAAK,kBAMW,WAAU,CACjC,EACe,CAEf,MAAM,MAAM,WAAW,CAAO,EAG9B,KAAK,aAAe,EAAQ,MAE5B,KAAK,OAAO,MAAM,4CAA4C,EAS7C,oBAAoB,EACrC,WACoC,CACpC,IAAM,EACJ,OAAO,IAAY,SAAW,EAAW,EAAQ,cAAgB,GACnE,GAAI,CAAC,EAAM,QACK,KAAK,uBAAyB,KAAK,oBACzC,CAAI,EAOR,SAAS,CAAC,EAAuB,CACvC,KAAK,mBAAmB,CAAO,EAM1B,wBAAwB,CAAC,EAA4C,CAC1E,KAAK,iBAAmB,EAQnB,6BAA6B,CAClC,EACM,CACN,KAAK,sBAAwB,EAMxB,0BAA0B,EAAS,CACxC,KAAK,iBAAmB,OACxB,KAAK,sBAAwB,YAMN,iBAAgB,CACvC,EACe,CAEf,KAAK,OAAO,MAAM,sBAAuB,CACvC,QAAS,EAAM,GACf,OAAQ,EAAM,OACd,SAAU,EAAM,SAChB,QAAS,EAAM,OACjB,CAAC,EAMgB,YAAY,EAAuB,CACpD,MAAO,CACL,MAAO,SAA2B,CAChC,GAAI,CAAC,KAAK,QACR,MAAM,IAAI,EACR,KAAK,GACL,uDACF,EAEF,KAAK,OAAO,MAAM,wBAAwB,EAE1C,GAAI,CAEF,IAAO,EAAW,EAAa,GAAa,MAAM,QAAQ,IAAI,CACrD,8BACA,gBACA,mCACT,CAAC,GAEO,UAAW,EACb,EAAQ,EAAY,QACpB,EAAM,EAAU,QAGhB,EAAU,EAAM,cAAc,EAAK,CACvC,UAAW,KACX,yBAA0B,CAAC,IACzB,KAAK,yBAAyB,CAAQ,EACxC,2BAA4B,IAAM,KAAK,2BAA2B,EAClE,yBAA0B,CAAC,IACzB,KAAK,yBAAyB,CAAQ,EACxC,8BAA+B,CAAC,IAC9B,KAAK,8BAA8B,CAAQ,EAC7C,2BAA4B,IAAM,KAAK,2BAA2B,CACpE,CAAC,EACD,KAAK,OAAS,EAAO,CAAO,EAE5B,KAAK,uBAAuB,EAC5B,MAAO,EAAO,CAEd,MADA,KAAK,OAAO,MAAM,gCAAiC,CAAE,OAAM,CAAC,EACtD,IAGV,KAAM,SAA2B,CAC/B,KAAK,OAAO,MAAM,wBAAwB,EAC1C,MAAM,KAAK,QAAQ,GAErB,YAAa,SAAmC,CAC9C,IAAM,EAAY,KAAK,SAAW,KAClC,MAAO,CACL,OAAQ,EAAY,UAAY,QAChC,QAAS,EACL,2BACA,4BACJ,UAAW,IAAI,KACf,QAAS,CACP,UAAW,KAAK,SAAW,KAC3B,aAAc,KAAK,oBAAoB,CACzC,CACF,EAEJ,EAGM,kBAAkB,EAA2B,CAenD,OAdA,KAAK,kBAAoB,IAAI,EAAuB,CAClD,aAAc,MACZ,IAEC,MAAM,KAAK,SAAS,cAAc,YAAY,EAAgB,CAC7D,MAAO,EACT,CAAC,GAAM,CAAC,EACV,eAAgB,CAAC,EAAO,IAAyB,CAC/C,KAAK,OAAO,MAAM,0CAA2C,CAC3D,QACA,gBACF,CAAC,EAEL,CAAC,EACM,KAAK,qBAGA,sBAAqB,CACjC,EACmB,CACnB,MAAO,CACL,GAAI,MAAM,KAAK,mBAAmB,EAAE,eAAe,CAAc,CACnE,OAOW,aAAY,CAAC,EAA8B,CAItD,KAAK,qBAAqB,EAE1B,GAAI,CAIF,IAAM,EACJ,MAAM,KAAK,sBAVQ,KAU4B,EACjD,GAAI,EAAmB,OAAS,GAM9B,GAL4B,MAAM,KAAK,2BACrC,EAbiB,MAejB,CACF,EACyB,OAI3B,IAAM,EAAW,MAAM,KAAK,gBAAgB,EAAE,KAC5C,EAtBmB,MAwBnB,CACE,oBAAqB,QACrB,SAAU,KAAK,WAAW,EAAE,YAAY,SAAS,MAAO,OAAO,EAC/D,cAAe,MACf,UAAW,MACX,YAAa,cACf,CACF,EAGM,EAAgB,EAAwB,EAAS,KAAK,EACtD,EACJ,EAAc,OAAS,EACnB,EAAc,IAAI,CAAC,IAAS,EAAK,EAAE,EAClC,EAAS,sBAAsB,IAC9B,CAAC,IAAiB,EAAa,EACjC,GAAK,CAAC,EACZ,KAAK,mBAAmB,EAAE,iBAzCL,MA2CnB,CACF,EAIA,IAAM,EAAe,KAAK,oBAAoB,CAAQ,EAGtD,KAAK,OAAO,MAAM,0BAA2B,CAC3C,WAAY,EAAS,KAAK,OAC1B,iBAAkB,EAAS,aAAa,QAAU,EAClD,YAAa,EAAS,aAAa,IAAI,CAAC,KAAQ,CAC9C,SAAU,EAAG,SACb,QAAS,EAAG,OAAS,MACvB,EAAE,CACJ,CAAC,EAKD,KAAK,UAAU,CAAY,EAC3B,MAAO,EAAO,CACd,KAAK,OAAO,MAAM,yBAA0B,CAAE,QAAO,OAAM,CAAC,EAC5D,IAAM,EAAe,EAAgB,EAAO,2BAA2B,EACvE,KAAK,UAAU,cAAc,GAAc,SAC3C,CAEA,KAAK,mBAAmB,GAepB,mBAAmB,CACzB,EAIQ,CACR,IAAM,EAAO,EAAkB,EAAU,CAAE,cAAe,MAAU,CAAC,EAC/D,EAAoC,CAAC,EACrC,EAAuB,CAAC,EAC1B,EAAO,GAEX,QAAW,KAAa,EAAK,WAC3B,OAAQ,EAAU,UACX,OACH,EAAO,EAAU,KACjB,UACG,YACH,EAAc,KAAK,GAAG,EAAU,KAAK,EACrC,cAEA,GACE,EAAU,KAAK,OAAS,iBACxB,EAAU,KAAK,QAAU,qBACzB,CACA,EAAc,KAAK,EAAU,IAAI,EACjC,MAEF,EAAW,KACT,EAA6B,EAAU,KAAM,CAAqB,CACpE,EAIN,MAAO,CAAC,KAAK,wBAAwB,EAAM,CAAa,EAAG,GAAG,CAAU,EACrE,OAAO,CAAC,IAAY,EAAQ,KAAK,EAAE,OAAS,CAAC,EAC7C,KAAK;AAAA;AAAA,CAAM,EAOR,uBAAuB,CAC7B,EACA,EACQ,CACR,GAAI,EAAc,SAAW,EAAG,OAAO,EACvC,IAAM,EAAW,EAA0B,EAAM,CAAa,EAE9D,GAAI,EAAc,SAAW,EAAG,CAC9B,IAAM,EAAe,EAAc,GACnC,GAAI,CAAC,EAAc,OAAO,EAC1B,IAAM,EAAU,EAAa,QAAU;AAAA;AAAA,EAAO,EAAa,UAAY,GACvE,MAAO,GAAG,IAAW;AAAA;AAAA,mEAGvB,IAAM,EAAe,EAClB,IAAI,CAAC,EAAM,IAAU,CACpB,IAAM,EAAU,EAAK,QAAU;AAAA,KAAQ,EAAK,UAAY,GACxD,MAAO,GAAG,EAAQ,MAAM,EAAK,UAAU,IACxC,EACA,KAAK;AAAA,CAAI,EACZ,MAAO,GAAG;AAAA;AAAA,EAAe;AAAA;AAAA,mEAGnB,wBAAwB,CAC9B,EACA,EACQ,CACR,IAAM,EAAa,EAAwB,CAAK,EAChD,GAAI,CAAC,EAAY,OAAO,EAExB,IAAM,EAAS,EAAwB,CAAU,EAC3C,EAAS,EAAwB,EAAO,YAC9C,OAAO,EAAO,MACV,GAAG,KAAU,EAAO;AAAA;AAAA,EAAc,EAAO,QACzC,GAAG,KAAU,EAAO,UASlB,yBAAyB,CAC/B,EACA,EACQ,CACR,IAAM,EAAQ,oBAAoB,KAAK,EAAQ,KAAK,CAAC,EACrD,GAAI,CAAC,IAAQ,IAAM,CAAC,EAAM,GAAI,OAAO,EACrC,IAAM,EAAa,EAAmB,OAAO,EAAM,EAAE,EAAI,GACzD,OAAO,EAAa,GAAG,EAAM,MAAM,IAAe,OAQtC,2BAA0B,CACtC,EACA,EACA,EACkB,CAClB,IAAM,EAAc,IAAI,IAAI,CAAkB,EAC9C,GAAI,CAAC,EAAwB,EAAS,CAAW,EAAG,MAAO,GAE3D,IAAM,EAAS,EAA0B,CACvC,QAAS,KAAK,0BAA0B,EAAS,CAAkB,EACnE,aACF,CAAC,EACD,GAAI,EAAO,OAAS,mBAAoB,MAAO,GAC/C,GAAI,EAAO,OAAS,SAElB,OADA,KAAK,UAAU,IAAI,EAAO,UAAU,EAC7B,GAIT,KAAK,mBAAmB,EAAE,eAAe,EAAgB,EAAO,UAAU,EAG1E,IAAM,EAAW,MAAM,KAAK,gBAAgB,EAAE,qBAC5C,EACA,EAAO,UACP,EAAO,WACP,CACE,oBAAqB,QACrB,SAAU,KAAK,WAAW,EAAE,YAAY,SAAS,MAAO,OAAO,EAC/D,cAAe,KACjB,CACF,EAWA,OAVA,KAAK,mBAAmB,EAAE,iBACxB,EACA,EACA,EAAO,UACT,EAGA,KAAK,UACH,KAAK,yBAAyB,EAAS,KAAM,EAAS,KAAK,CAC7D,EACO,GAQC,sBAAsB,EAAS,CACvC,IAAM,EAAgB,IAAY,CAChC,KAAK,OAAO,MAAM,2CAA2C,EACxD,KAAK,QAAQ,GAEpB,KAAK,qBAAuB,EAC1B,CAAC,SAAU,SAAS,EACpB,CACF,OAMc,QAAO,EAAkB,CAQvC,GANA,KAAK,2BAA2B,EAChC,KAAK,2BAA2B,EAEhC,KAAK,uBAAuB,EAC5B,KAAK,qBAAuB,OAExB,KAAK,OACP,KAAK,OAAO,QAAQ,EACpB,KAAK,OAAS,KAGpB,mDC/fO,SAAS,CAAa,EAC3B,cACA,cAAc,IAC2B,CACzC,IACE,UACA,kBACA,sBACA,mBACA,mBACA,SACA,UACE,EAEE,EAAa,IAAW,aACxB,EAAc,IAAW,YACzB,EAAW,IAAW,SAGtB,EAAuB,EAAsB,EAEnD,OACE,EAqFE,EArFF,CAAK,cAAc,SAAS,QAAS,EAArC,SAqFE,CAnFA,EAIE,EAJF,CAAK,aAAc,EAAnB,SACE,EAEE,EAFF,CAAM,KAAI,GAAC,MAAM,OAAjB,SAEE,CAFF,oBACoB,EAAQ,MAAM,EAAG,CAAC,EADtC,OAEE,EACF,EAGF,EAOE,EAPF,CAAK,aAAc,EAAnB,SACE,EAAC,EAAD,CACE,QAAS,EACT,MAAO,EACP,QAAQ,oBACR,MAAO,EAAW,MAAQ,EAAc,QAAU,SACpD,EACA,EAGD,GAAc,GACb,EAKE,EALF,CAAK,aAAc,EAAnB,SAKE,CAJA,EAEE,EAFF,CAAM,MAAM,QAAZ,SACE,EAAC,EAAD,CAAS,KAAK,OAAO,EACrB,EACF,EAAwC,EAAxC,CAAM,MAAM,OAAZ,SAAwC,CAAxC,IAAqB,GAAmB,GACxC,EAIH,GACC,EAoCE,EApCF,CAAK,cAAc,SAAS,WAAY,EAAxC,SAoCE,CAlCC,EAAuB,GACtB,EAGE,EAHF,UAGE,CAFA,EAAwB,EAAxB,CAAM,MAAM,QAAZ,mBAAwB,EACxB,EAAsD,EAAtD,CAAM,MAAM,OAAZ,SAAsD,CAAlC,EAApB,eAAsD,GACtD,EAIH,EAAmB,GAClB,EAGE,EAHF,UAGE,CAFA,EAAsB,EAAtB,CAAM,MAAM,MAAZ,mBAAsB,EACtB,EAA8C,EAA9C,CAAM,MAAM,OAAZ,SAA8C,CAA1B,EAApB,WAA8C,GAC9C,EAIH,EAAO,OAAS,GACf,EAeE,EAfF,CAAK,cAAc,SAAS,UAAW,EAAvC,SAeE,CAdA,EAEE,EAFF,CAAM,MAAM,MAAM,KAAI,GAAtB,mBAEE,EACD,EAAO,MAAM,EAAG,CAAC,EAAE,IAAI,CAAC,EAAO,IAC9B,EAGE,EAHF,CAAiB,WAAY,EAA7B,SAGE,CAFA,EAAsB,EAAtB,CAAM,MAAM,MAAZ,mBAAsB,EACtB,EAA4B,EAA5B,CAAM,MAAM,OAAZ,SAAoB,EAAQ,IAFpB,CAGR,CACH,EACA,EAAO,OAAS,GACf,EAEE,EAFF,CAAK,WAAY,EAAjB,SACE,EAAqD,EAArD,CAAM,MAAM,OAAZ,SAAqD,CAArD,WAA4B,EAAO,OAAS,EAA5C,SAAqD,EACrD,GAEJ,GAEJ,EAIH,GACC,EAIE,EAJF,CAAK,UAAW,EAAhB,SACE,EAEE,EAFF,CAAM,MAAM,QAAQ,KAAI,GAAxB,+CAEE,EACF,EAGH,GACC,EAIE,EAJF,CAAK,UAAW,EAAhB,SACE,EAEE,EAFF,CAAM,MAAM,MAAM,KAAI,GAAtB,+BAEE,EACF,GAEJ",
10
- "debugId": "32EEA3081DD8BBE664756E2164756E21",
10
+ "debugId": "73C549A3272B653E64756E2164756E21",
11
11
  "names": []
12
12
  }
@@ -1,6 +1,6 @@
1
1
  // @bun
2
- import{Mj as o}from"./index-trpy6wwa.js";import{Pq as t}from"./index-f90s4k5m.js";var a=t.enum(["generating","draft","queued","published","failed"]),e=t.object({title:t.string(),slug:t.string().optional(),status:a,publishedAt:t.string().datetime().optional(),excerpt:t.string(),author:t.string(),coverImageId:t.string().optional(),ogImageId:t.string().optional(),seriesName:t.string().optional(),seriesIndex:t.number().optional(),ogImage:t.string().url().optional(),canonicalUrl:t.string().url().optional()}),i=e.pick({title:!0,status:!0,publishedAt:!0,seriesName:!0,seriesIndex:!0}).extend({slug:t.string(),error:t.string().optional()}),n=o.extend({entityType:t.literal("post"),metadata:i}),r=n.extend({frontmatter:e,body:t.string(),coverImageUrl:t.string().optional()}),s=r.extend({url:t.string().optional(),typeLabel:t.string().optional(),listUrl:t.string().optional(),listLabel:t.string().optional(),seriesUrl:t.string().optional(),coverImageUrl:t.string().optional(),ogImageUrl:t.string().optional(),coverImageWidth:t.number().optional(),coverImageHeight:t.number().optional(),coverImageSrcset:t.string().optional(),coverImageSizes:t.string().optional()}),d=r.extend({url:t.string(),typeLabel:t.string(),listUrl:t.string(),listLabel:t.string(),seriesUrl:t.string().optional(),coverImageUrl:t.string().optional(),ogImageUrl:t.string().optional(),coverImageWidth:t.number().optional(),coverImageHeight:t.number().optional(),coverImageSrcset:t.string().optional(),coverImageSizes:t.string().optional()});
2
+ import{Mj as o}from"./index-ygy8j5wp.js";import{Pq as t}from"./index-f90s4k5m.js";var a=t.enum(["generating","draft","queued","published","failed"]),e=t.object({title:t.string(),slug:t.string().optional(),status:a,publishedAt:t.string().datetime().optional(),excerpt:t.string(),author:t.string(),coverImageId:t.string().optional(),ogImageId:t.string().optional(),seriesName:t.string().optional(),seriesIndex:t.number().optional(),ogImage:t.string().url().optional(),canonicalUrl:t.string().url().optional()}),i=e.pick({title:!0,status:!0,publishedAt:!0,seriesName:!0,seriesIndex:!0}).extend({slug:t.string(),error:t.string().optional()}),n=o.extend({entityType:t.literal("post"),metadata:i}),r=n.extend({frontmatter:e,body:t.string(),coverImageUrl:t.string().optional()}),s=r.extend({url:t.string().optional(),typeLabel:t.string().optional(),listUrl:t.string().optional(),listLabel:t.string().optional(),seriesUrl:t.string().optional(),coverImageUrl:t.string().optional(),ogImageUrl:t.string().optional(),coverImageWidth:t.number().optional(),coverImageHeight:t.number().optional(),coverImageSrcset:t.string().optional(),coverImageSizes:t.string().optional()}),d=r.extend({url:t.string(),typeLabel:t.string(),listUrl:t.string(),listLabel:t.string(),seriesUrl:t.string().optional(),coverImageUrl:t.string().optional(),ogImageUrl:t.string().optional(),coverImageWidth:t.number().optional(),coverImageHeight:t.number().optional(),coverImageSrcset:t.string().optional(),coverImageSizes:t.string().optional()});
3
3
  export{a as E,e as F,n as G,r as H};
4
4
 
5
5
  //# debugId=0E28D9491CC411B164756E2164756E21
6
- //# sourceMappingURL=index-26fbm9zd.js.map
6
+ //# sourceMappingURL=index-jnfgrr88.js.map
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{na as dr}from"./index-13wwvf9d.js";import{$a as ds,$l as yi,$n as rs,$o as qi,$p as tn,Aj as Ge,Al as U,Bj as Or,Bn as ts,Cj as Mr,Dj as Lr,Dn as Mi,Ea as Jr,En as Li,Ff as E,Fj as Ce,Gj as Mn,Hj as wo,Ja as At,Jj as D,Ka as Le,Kj as rt,Km as Ss,La as Zr,Lj as $t,Lm as Rs,Ma as $r,Mj as no,Mm as Is,Nj as lo,No as kn,Oa as Br,Oo as En,Pa as ss,Po as Te,Rm as Ye,Rn as Ui,Sa as _r,Sj as it,Sm as Jn,Ta as Gr,Tl as Ae,Tm as xr,Tn as Zi,Un as B,Va as Q,Vn as bn,Wa as K,Wk as ct,Wl as ys,Xa as as,Xl as vs,Xm as ns,Ya as cs,Yl as qe,Yn as mt,Za as ls,Zf as k,Zl as fi,Zn as $i,Zo as Ni,_a as us,_k as So,_l as hi,ab as ps,al as Xi,am as vi,ao as Bi,aq as di,bb as ms,bo as _i,cb as gs,cl as en,cm as Go,co as Wi,db as fs,dl as Vn,dm as Qo,dq as rn,em as Ko,ep as Ji,eq as pi,fd as C,fl as Po,fn as Rr,fp as Hi,fq as Ki,gk as yn,gl as ji,gm as Mo,gn as Ee,gp as Gi,gq as mi,hn as vn,hp as ai,ij as y,il as ie,in as es,ip as Qi,jk as Xo,jl as Yt,jn as kr,kg as _,kk as pn,kn as Ir,kp as ei,lk as Ur,ln as Oi,lp as ci,mp as Sn,nn as dn,np as li,nq as Yi,ok as Ar,on as Zt,op as ui,pq as In,qa as Dt,qq as Qe,ra as Nr,rf as q,sa as A,sn as mn,tf as Ei,ua as ee,uo as An,wa as qr,xk as xi,yj as F}from"./index-trpy6wwa.js";import{Cq as G,Gq as W,tq as Jo,yq as Fi}from"./index-5e5vv8yh.js";import{Kq as x,Lq as z}from"./index-qsw9tcjy.js";import{$r as ii,Bs as P,Cs as fe,Ir as V,Jt as Ai,Ms as J,Ot as qn,Pq as s,Pt as Di,Qt as zi,Sq as go,Ss as Ft,Tq as fo,Ts as un,Uq as Qt,Us as qo,Wq as nr,Yq as be,bs as ni,cs as oi,es as si,gt as jn,jt as Vo,kt as Ut,ms as Cr,os as Tr,pt as Ii,ws as N,zs as ne}from"./index-f90s4k5m.js";import{_t as kl}from"./index-01kchyzt.js";function Rt(e,t){let r=new Set(t.map((i)=>i.type));return e.byType.filter((i)=>(i.status==="pending"||i.status==="processing")&&!r.has(i.type))}function pe(e,t){let r=e.workerSessions,i=r.active===0?"missing":r.stale>0?"stale":"active",n=e.duePending>0&&(e.oldestDuePendingAgeMs??0)>=120000&&e.totals.processing===0&&(e.latestClaimAgeMs===null||e.latestClaimAgeMs>=120000),o=[];if(i==="missing")o.push("No live worker session");else if(i==="stale")o.push(`${r.stale} stale worker session(s)`);if(n)o.push(`${e.duePending} due job(s) have remained unclaimed for at least 120000ms`);if(t){let a=Rt(e,t).reduce((c,l)=>c+l.count,0);if(a>0)o.push(`${a} active job(s) have no declared executor`)}return{status:o.length===0?"operational":"degraded",reasons:o,worker:{state:i,activeSessions:r.active,staleSessions:r.stale,latestHeartbeatAgeMs:r.latestHeartbeatAgeMs},queue:{duePending:e.duePending,processing:e.totals.processing,oldestDuePendingAgeMs:e.oldestDuePendingAgeMs,latestClaimAgeMs:e.latestClaimAgeMs,stalled:n}}}async function hr(e){let{config:t,services:r,bootTime:i,endpoints:n,interactions:o}=e,[a,c,l,u]=await Promise.all([r.entityService.getEntityCounts(Ce("runtime app info reports operator-facing aggregate status")),r.entityService.countEmbeddings(),r.daemonRegistry.getStatuses(),r.jobQueueService.getDiagnostics()]),d=a.reduce((p,g)=>p+g.count,0);return{model:t.name||"brain-app",version:t.version||"1.0.0",uptime:Math.floor((Date.now()-i)/1000),entities:d,entityCounts:a,embeddings:c,backgroundWork:pe(u,r.jobQueueService.getExecutionRegistrations()),ai:{model:t.ai.model,embeddingModel:"text-embedding-3-small"},daemons:l,endpoints:n(),interactions:o()}}import{readdir as yr,readFile as Gs}from"fs/promises";var Qs=10;async function Ks(e="/proc"){let t=null;try{t=(await yr(`${e}/self/fd`)).length}catch{}try{let i=(await yr(e,{withFileTypes:!0})).filter((a)=>a.isDirectory()&&/^\d+$/.test(a.name)).map((a)=>a.name),n=0,o=0;return await Promise.all(i.map(async(a)=>{try{let c=await Gs(`${e}/${a}/status`,"utf8");if(o++,/^State:\s+Z\b/m.test(c))n++}catch{}})),{fileDescriptors:t,processCount:o,zombieCount:n}}catch{return{fileDescriptors:t,processCount:null,zombieCount:null}}}function vr(e,t,r){return t.status==="fulfilled"?{name:e,status:"healthy",message:r}:{name:e,status:"unhealthy",message:P(t.reason)}}function Ys(e){if(!e)return{name:"job-worker",status:"degraded",message:"Worker session state is unavailable"};let t=e.workerSessions,r=pe(e).worker;if(r.state==="missing")return{name:"job-worker",status:"degraded",message:"No live worker session",details:{sessions:t}};if(r.state==="stale")return{name:"job-worker",status:"degraded",message:`${t.stale} stale worker session(s)`,details:{sessions:t}};return{name:"job-worker",status:"healthy",message:`${t.active} live worker session(s)`,details:{sessions:t}}}function Vs(e){if(!e)return{name:"job-queue-progress",status:"degraded",message:"Queue progress state is unavailable"};let t=pe(e).queue;return t.stalled?{name:"job-queue-progress",status:"degraded",message:`${t.duePending} due job(s) are not being claimed`,details:{queue:t}}:{name:"job-queue-progress",status:"healthy",message:"Due jobs are being claimed",details:{queue:t}}}function Xs(e,t){if(!e||!t)return{name:"job-execution-inventory",status:"degraded",message:"Job execution inventory is unavailable"};let r=Rt(e,t),i=r.reduce((n,o)=>n+o.count,0);return i===0?{name:"job-execution-inventory",status:"healthy",message:"Every active job type has a declared executor"}:{name:"job-execution-inventory",status:"degraded",message:`${i} active job(s) have no declared executor`,details:{jobs:r}}}function ea(e){if(!e)return{name:"attempt-leases",status:"degraded",message:"Lease state is unavailable"};return e.staleLeaseCount===0?{name:"attempt-leases",status:"healthy",message:"No stale processing leases"}:{name:"attempt-leases",status:"degraded",message:`${e.staleLeaseCount} processing lease(s) are stale`,details:{staleLeaseCount:e.staleLeaseCount}}}function ta(e){if(!e.initialized)return{name:"projection-circuits",status:"degraded",message:"Projection runtime supervisor is not initialized"};if(e.openCircuits.length===0)return{name:"projection-circuits",status:"healthy",message:"No projection circuits are open"};return{name:"projection-circuits",status:"degraded",message:`${e.openCircuits.length} projection circuit(s) open`,details:{circuits:e.openCircuits}}}async function ra(e){let t=e.entityService.getProjectionStore(),[r,i,n]=await Promise.all([t.getActiveWave(),t.getUnresolvedProjectionIncidentDiagnostics(Qs),t.getProjectionBatchDiagnostics?.()??Promise.resolve({preparing:0,open:0,abandoned:0,expiredCallbackLeases:0,oldestActiveAgeMs:null,oldestProgressAgeMs:null})]);if(!r)return{waveId:null,batches:n,strandedRules:[],incidentCount:i.total,incidents:i.incidents};let a=(await t.listWaveRules(r.id)).filter((l)=>l.status==="queued"||l.status==="failed"),c=(await Promise.all(a.map(async(l)=>{let u=l.jobId?await e.jobQueueService.getStatus(l.jobId):null;if(l.status!=="failed"&&u&&(u.status==="pending"||u.status==="processing"))return null;return{ruleId:l.ruleId,jobId:l.jobId,jobStatus:u?.status??"missing"}}))).filter((l)=>l!==null);return{waveId:r.id,batches:n,strandedRules:c,incidentCount:i.total,incidents:i.incidents}}function ia(e){if(e.batches.abandoned>0)return{name:"projection-waves",status:"degraded",message:`${e.batches.abandoned} projection batch(es) await recovery`,details:{batches:e.batches}};if(e.batches.expiredCallbackLeases>0)return{name:"projection-waves",status:"degraded",message:"A callback projection batch lease has expired",details:{batches:e.batches}};if(e.incidentCount>0)return{name:"projection-waves",status:"degraded",message:`${e.incidentCount} unresolved terminal projection incident(s)`,details:{incidentCount:e.incidentCount,incidentsTruncated:e.incidentCount>e.incidents.length,incidents:e.incidents.map((t)=>({waveId:t.waveId,ruleId:t.ruleId,jobId:t.jobId,failureReason:t.failureReason,createdAt:t.createdAt}))}};if(!e.waveId)return{name:"projection-waves",status:"healthy",message:e.batches.open+e.batches.preparing>0?`${e.batches.open+e.batches.preparing} projection batch(es) active`:"No active projection wave",...e.batches.open+e.batches.preparing>0&&{details:{batches:e.batches}}};if(e.strandedRules.length===0)return{name:"projection-waves",status:"healthy",message:`Projection wave ${e.waveId} is progressing`};return{name:"projection-waves",status:"degraded",message:`Projection wave ${e.waveId} has ${e.strandedRules.length} stranded rule job(s)`,details:{waveId:e.waveId,strandedRules:e.strandedRules}}}function na(e){let t=e.filter((r)=>r.status!=="running"||r.health?.status==="error");return t.length===0?{name:"daemons",status:"healthy",message:`${e.length} daemon(s) healthy`}:{name:"daemons",status:"degraded",message:`${t.length} daemon(s) unhealthy`,details:{daemons:t.map((r)=>({name:r.name,status:r.status,health:r.health?.status,message:r.health?.message}))}}}async function br(e){let t=e.now?.()??Date.now(),r=(e.memoryUsage??process.memoryUsage)(),[i,n,o,a,c,l,u,d]=await Promise.allSettled([e.entityService.getEntityCounts(Ce("runtime readiness database probe")),e.jobQueueService.getDiagnostics(t),Promise.resolve(e.jobQueueService.getExecutionRegistrations()),e.daemonRegistry.getStatuses(),(e.readProcessSignals??Ks)(),e.projectionRuntimeSupervisor.getDiagnostics(),ra(e),e.operationalHealthRegistry.getChecks()]),p=n.status==="fulfilled"?n.value:null,g=o.status==="fulfilled"?o.value??null:null,f=a.status==="fulfilled"?a.value:[],m=c.status==="fulfilled"?c.value:{fileDescriptors:null,processCount:null,zombieCount:null},h=l.status==="fulfilled"?l.value:{status:"unhealthy",initialized:!1,trackedRoots:0,openCircuits:[]},I=[vr("entity-database",i,"Entity database is accessible"),vr("job-queue-database",n,"Job queue database is accessible"),Ys(p),Vs(p),Xs(p,g),ea(p),l.status==="fulfilled"?ta(h):{name:"projection-circuits",status:"degraded",message:P(l.reason)},u.status==="fulfilled"?ia(u.value):{name:"projection-waves",status:"degraded",message:P(u.reason)},a.status==="fulfilled"?na(f):{name:"daemons",status:"degraded",message:P(a.reason)}],v=d.status==="fulfilled"?d.value:[{name:"plugin-operational-health",status:"degraded",message:"Plugin operational health is unavailable"}],b=[...I,...v];return{status:I.some((S)=>S.status==="unhealthy")?"not_ready":"ready",operationalStatus:b.some((S)=>S.status!=="healthy")?"degraded":"operational",checkedAt:new Date(t).toISOString(),checks:b,resources:{memory:{rssBytes:r.rss,heapUsedBytes:r.heapUsed,heapTotalBytes:r.heapTotal},fileDescriptors:m.fileDescriptors,processes:{total:m.processCount,zombies:m.zombieCount},queue:p,projection:{initialized:h.initialized,trackedRoots:h.trackedRoots,openCircuits:h.openCircuits},worker:p?.workerSessions??{total:0,active:0,stale:0,latestHeartbeatAgeMs:null}}}}function Sr(){return{dataDir:"./data",cacheDir:"./cache",distDir:"./dist"}}function Y(e){return{database:{url:`file:${e.dataDir}/brain.db`},jobQueueDatabase:{url:`file:${e.dataDir}/brain-jobs.db`},conversationDatabase:{url:`file:${e.dataDir}/conversations.db`},runtimeStateDatabase:{url:`file:${e.dataDir}/runtime-state.db`},embeddingDatabase:{url:`file:${e.dataDir}/embeddings.db`},embedding:{enabled:!0}}}var It=Sr(),oa=s.looseObject({label:s.string().min(1),pluralName:s.string().optional(),layout:s.string().optional(),paginate:s.boolean().optional(),pageSize:s.number().optional(),navigation:s.object({show:s.boolean().optional(),slot:s.enum(["primary","secondary"]).optional(),priority:s.number().optional()}).optional()});function wt(){return Y(It)}var oe=s.enum(["debug","info","warn","error"]),se=s.enum(["none","low","medium","high","xhigh","max"]),Pt=s.object({name:s.string().default("brain-app"),version:s.string().default("1.0.0"),database:ne,jobQueueDatabase:ne,jobQueue:s.object({workerConcurrency:s.number().int().min(1).max(32).default(4)}).prefault({}),conversationDatabase:ne,runtimeStateDatabase:ne,embeddingDatabase:ne,ai:s.object({apiKey:s.string().default(""),imageApiKey:s.string().optional(),model:s.string(),temperature:s.number().min(0).max(2).default(0.7),maxTokens:s.number().positive().default(1000),webSearch:s.boolean().default(!0),reasoningEffort:se.optional()}),embedding:s.object({enabled:s.boolean().default(!0)}),logging:s.object({level:oe.default("info"),format:s.enum(["text","json"]).default("text"),file:s.string().optional(),context:s.string().default("shell")}).prefault({level:"info",context:"shell"}),features:s.object({}).default({}),plugins:s.array(Te).default([]),dataDir:s.string().default("./brain-data"),gitBrokerSocket:s.string().min(1).optional(),gitBrokerCheckout:s.string().min(1).optional(),spaces:s.array(s.string()).default([]),siteBaseUrl:s.string().optional(),localSiteUrl:s.string().optional(),preferLocalUrls:s.boolean().default(!1),themeCSS:s.string().default(""),entityDisplay:s.record(s.string(),oa).optional(),profileKind:s.string().trim().min(1).optional()});function ke(e={}){let{plugins:t=[],permissions:r={},identity:i,profile:n,agentInstructions:o,evalHandlerRegistry:a,ai:c,logging:l,embedding:u,jobQueue:d,...p}=e,{entityDisplay:g,...f}=Pt.parse({...wt(),...V(p),ai:V({...c}),logging:V({...l}),embedding:V({...u}),jobQueue:V({...d}),plugins:[]});return{...f,plugins:t,permissions:r,...V({entityDisplay:g,identity:i,profile:n,agentInstructions:o,evalHandlerRegistry:a})}}var j={NOTE:"note",BRAIN_CHARACTER:"brain-character",ANCHOR_PROFILE:"anchor-profile"},me={KNOWLEDGE_QUERY:"shell:knowledge-query",BASE_ENTITY_DISPLAY:"shell:base-entity-display",CONTENT_GENERATION:"shell:content-generation"},Ct={ENTITIES:"shell:entities"};var sa=Ir.extend({templateName:s.string()}),aa=s.object({slug:s.string()}),ca="The style guide governs voice, tone, wording and form: paragraphing, sentence rhythm, hooks, rhetorical questions and calls to action. The instructions below and any additional instructions in the request govern the task, required content, length limits, platform constraints and output format. When either conflicts with the style guide on voice or form, follow the style guide.",la="Generate the content described in your instructions.";function ua(e){return e instanceof s.ZodType}function da(e){if(!e)return;return e.replace(/^https?:\/\//,"").replace(/\/$/,"")}class xe{aiService;entityService;templateRegistry;getIdentityContent;getProfileContent;entityUrls;id="ai-content";name="AI Content Generator";description="Generates content using AI based on templates and prompts";constructor(e,t,r,i,n,o,a){this.aiService=e,this.entityService=t,this.templateRegistry=r,this.getIdentityContent=i,this.getProfileContent=n,this.entityUrls=o,this.siteBaseUrl=da(a)}siteBaseUrl;async generate(e,t,r){return this.generateWithContext(e,t,r)}async generateScoped(e,t,r){return this.generateWithContext(e,t,r.signal,r)}async generateWithContext(e,t,r,i){r?.throwIfAborted();let n=sa.parse(e),o=this.templateRegistry.get(n.templateName);if(!o)throw Error(`Template not found: ${n.templateName}`);if(!o.basePrompt)throw Error(`Template ${n.templateName} must have basePrompt for content generation`);let a=i?await Rr((I,v)=>i.getEntity(I,v),n.templateName,o.basePrompt):await Ee(this.entityService,n.templateName,o.basePrompt);r?.throwIfAborted();let c=[a,n.prompt].filter(Boolean).join(" "),l=c.length>0&&o.useKnowledgeContext===!0,u=this.entityService.getWeightMap(),d=Object.keys(u).length>0,p=l?i?await i.search(c,{limit:5,...d&&{weight:u}}):await this.entityService.search({query:c,options:{limit:5,...d&&{weight:u},...r&&{signal:r}}}):[];r?.throwIfAborted();let g=this.buildPrompt(n,p),f=i?await this.readIdentities(i,n.representedIdentity):void 0,m=this.buildSystemPrompt(a,n,f);if(!ua(o.schema))throw Error(`Template ${o.name} cannot be used for AI generation: schema is not an AI generation schema`);r?.throwIfAborted();let h=await this.aiService.generateObject(m,g,o.schema,r);return r?.throwIfAborted(),t.parse(h.object)}async readIdentities(e,t){let r=async(o)=>(await e.getEntity(o,o))?.content??"",[i,n]=await Promise.all([t!=="none"?r(j.BRAIN_CHARACTER):"",t===void 0||t==="anchor"?r(j.ANCHOR_PROFILE):""]);return{brain:i,anchor:n}}buildSystemPrompt(e,t,r){let i=[];if(t.representedIdentity===void 0||t.representedIdentity==="brain"||t.representedIdentity==="anchor")i.push("# Brain Identity",r?.brain??this.getIdentityContent(),"");if(t.representedIdentity===void 0||t.representedIdentity==="anchor")i.push("# Represented Anchor",r?.anchor??this.getProfileContent(),"");let n=this.selectStyleGuidance(t);if(n)i.push("# Style Guide",n,"","# Precedence",ca,"");return i.push("# Instructions",e),i.join(`
2
+ import{na as dr}from"./index-13wwvf9d.js";import{$a as ds,$l as yi,$n as rs,$o as qi,$p as tn,Aj as Ge,Al as U,Bj as Or,Bn as ts,Cj as Mr,Dj as Lr,Dn as Mi,Ea as Jr,En as Li,Ff as E,Fj as Ce,Gj as Mn,Hj as wo,Ja as At,Jj as D,Ka as Le,Kj as rt,Km as Ss,La as Zr,Lj as $t,Lm as Rs,Ma as $r,Mj as no,Mm as Is,Nj as lo,No as kn,Oa as Br,Oo as En,Pa as ss,Po as Te,Rm as Ye,Rn as Ui,Sa as _r,Sj as it,Sm as Jn,Ta as Gr,Tl as Ae,Tm as xr,Tn as Zi,Un as B,Va as Q,Vn as bn,Wa as K,Wk as ct,Wl as ys,Xa as as,Xl as vs,Xm as ns,Ya as cs,Yl as qe,Yn as mt,Za as ls,Zf as k,Zl as fi,Zn as $i,Zo as Ni,_a as us,_k as So,_l as hi,ab as ps,al as Xi,am as vi,ao as Bi,aq as di,bb as ms,bo as _i,cb as gs,cl as en,cm as Go,co as Wi,db as fs,dl as Vn,dm as Qo,dq as rn,em as Ko,ep as Ji,eq as pi,fd as C,fl as Po,fn as Rr,fp as Hi,fq as Ki,gk as yn,gl as ji,gm as Mo,gn as Ee,gp as Gi,gq as mi,hn as vn,hp as ai,ij as y,il as ie,in as es,ip as Qi,jk as Xo,jl as Yt,jn as kr,kg as _,kk as pn,kn as Ir,kp as ei,lk as Ur,ln as Oi,lp as ci,mp as Sn,nn as dn,np as li,nq as Yi,ok as Ar,on as Zt,op as ui,pq as In,qa as Dt,qq as Qe,ra as Nr,rf as q,sa as A,sn as mn,tf as Ei,ua as ee,uo as An,wa as qr,xk as xi,yj as F}from"./index-ygy8j5wp.js";import{Cq as G,Gq as W,tq as Jo,yq as Fi}from"./index-5e5vv8yh.js";import{Kq as x,Lq as z}from"./index-qsw9tcjy.js";import{$r as ii,Bs as P,Cs as fe,Ir as V,Jt as Ai,Ms as J,Ot as qn,Pq as s,Pt as Di,Qt as zi,Sq as go,Ss as Ft,Tq as fo,Ts as un,Uq as Qt,Us as qo,Wq as nr,Yq as be,bs as ni,cs as oi,es as si,gt as jn,jt as Vo,kt as Ut,ms as Cr,os as Tr,pt as Ii,ws as N,zs as ne}from"./index-f90s4k5m.js";import{_t as kl}from"./index-01kchyzt.js";function Rt(e,t){let r=new Set(t.map((i)=>i.type));return e.byType.filter((i)=>(i.status==="pending"||i.status==="processing")&&!r.has(i.type))}function pe(e,t){let r=e.workerSessions,i=r.active===0?"missing":r.stale>0?"stale":"active",n=e.duePending>0&&(e.oldestDuePendingAgeMs??0)>=120000&&e.totals.processing===0&&(e.latestClaimAgeMs===null||e.latestClaimAgeMs>=120000),o=[];if(i==="missing")o.push("No live worker session");else if(i==="stale")o.push(`${r.stale} stale worker session(s)`);if(n)o.push(`${e.duePending} due job(s) have remained unclaimed for at least 120000ms`);if(t){let a=Rt(e,t).reduce((c,l)=>c+l.count,0);if(a>0)o.push(`${a} active job(s) have no declared executor`)}return{status:o.length===0?"operational":"degraded",reasons:o,worker:{state:i,activeSessions:r.active,staleSessions:r.stale,latestHeartbeatAgeMs:r.latestHeartbeatAgeMs},queue:{duePending:e.duePending,processing:e.totals.processing,oldestDuePendingAgeMs:e.oldestDuePendingAgeMs,latestClaimAgeMs:e.latestClaimAgeMs,stalled:n}}}async function hr(e){let{config:t,services:r,bootTime:i,endpoints:n,interactions:o}=e,[a,c,l,u]=await Promise.all([r.entityService.getEntityCounts(Ce("runtime app info reports operator-facing aggregate status")),r.entityService.countEmbeddings(),r.daemonRegistry.getStatuses(),r.jobQueueService.getDiagnostics()]),d=a.reduce((p,g)=>p+g.count,0);return{model:t.name||"brain-app",version:t.version||"1.0.0",uptime:Math.floor((Date.now()-i)/1000),entities:d,entityCounts:a,embeddings:c,backgroundWork:pe(u,r.jobQueueService.getExecutionRegistrations()),ai:{model:t.ai.model,embeddingModel:"text-embedding-3-small"},daemons:l,endpoints:n(),interactions:o()}}import{readdir as yr,readFile as Gs}from"fs/promises";var Qs=10;async function Ks(e="/proc"){let t=null;try{t=(await yr(`${e}/self/fd`)).length}catch{}try{let i=(await yr(e,{withFileTypes:!0})).filter((a)=>a.isDirectory()&&/^\d+$/.test(a.name)).map((a)=>a.name),n=0,o=0;return await Promise.all(i.map(async(a)=>{try{let c=await Gs(`${e}/${a}/status`,"utf8");if(o++,/^State:\s+Z\b/m.test(c))n++}catch{}})),{fileDescriptors:t,processCount:o,zombieCount:n}}catch{return{fileDescriptors:t,processCount:null,zombieCount:null}}}function vr(e,t,r){return t.status==="fulfilled"?{name:e,status:"healthy",message:r}:{name:e,status:"unhealthy",message:P(t.reason)}}function Ys(e){if(!e)return{name:"job-worker",status:"degraded",message:"Worker session state is unavailable"};let t=e.workerSessions,r=pe(e).worker;if(r.state==="missing")return{name:"job-worker",status:"degraded",message:"No live worker session",details:{sessions:t}};if(r.state==="stale")return{name:"job-worker",status:"degraded",message:`${t.stale} stale worker session(s)`,details:{sessions:t}};return{name:"job-worker",status:"healthy",message:`${t.active} live worker session(s)`,details:{sessions:t}}}function Vs(e){if(!e)return{name:"job-queue-progress",status:"degraded",message:"Queue progress state is unavailable"};let t=pe(e).queue;return t.stalled?{name:"job-queue-progress",status:"degraded",message:`${t.duePending} due job(s) are not being claimed`,details:{queue:t}}:{name:"job-queue-progress",status:"healthy",message:"Due jobs are being claimed",details:{queue:t}}}function Xs(e,t){if(!e||!t)return{name:"job-execution-inventory",status:"degraded",message:"Job execution inventory is unavailable"};let r=Rt(e,t),i=r.reduce((n,o)=>n+o.count,0);return i===0?{name:"job-execution-inventory",status:"healthy",message:"Every active job type has a declared executor"}:{name:"job-execution-inventory",status:"degraded",message:`${i} active job(s) have no declared executor`,details:{jobs:r}}}function ea(e){if(!e)return{name:"attempt-leases",status:"degraded",message:"Lease state is unavailable"};return e.staleLeaseCount===0?{name:"attempt-leases",status:"healthy",message:"No stale processing leases"}:{name:"attempt-leases",status:"degraded",message:`${e.staleLeaseCount} processing lease(s) are stale`,details:{staleLeaseCount:e.staleLeaseCount}}}function ta(e){if(!e.initialized)return{name:"projection-circuits",status:"degraded",message:"Projection runtime supervisor is not initialized"};if(e.openCircuits.length===0)return{name:"projection-circuits",status:"healthy",message:"No projection circuits are open"};return{name:"projection-circuits",status:"degraded",message:`${e.openCircuits.length} projection circuit(s) open`,details:{circuits:e.openCircuits}}}async function ra(e){let t=e.entityService.getProjectionStore(),[r,i,n]=await Promise.all([t.getActiveWave(),t.getUnresolvedProjectionIncidentDiagnostics(Qs),t.getProjectionBatchDiagnostics?.()??Promise.resolve({preparing:0,open:0,abandoned:0,expiredCallbackLeases:0,oldestActiveAgeMs:null,oldestProgressAgeMs:null})]);if(!r)return{waveId:null,batches:n,strandedRules:[],incidentCount:i.total,incidents:i.incidents};let a=(await t.listWaveRules(r.id)).filter((l)=>l.status==="queued"||l.status==="failed"),c=(await Promise.all(a.map(async(l)=>{let u=l.jobId?await e.jobQueueService.getStatus(l.jobId):null;if(l.status!=="failed"&&u&&(u.status==="pending"||u.status==="processing"))return null;return{ruleId:l.ruleId,jobId:l.jobId,jobStatus:u?.status??"missing"}}))).filter((l)=>l!==null);return{waveId:r.id,batches:n,strandedRules:c,incidentCount:i.total,incidents:i.incidents}}function ia(e){if(e.batches.abandoned>0)return{name:"projection-waves",status:"degraded",message:`${e.batches.abandoned} projection batch(es) await recovery`,details:{batches:e.batches}};if(e.batches.expiredCallbackLeases>0)return{name:"projection-waves",status:"degraded",message:"A callback projection batch lease has expired",details:{batches:e.batches}};if(e.incidentCount>0)return{name:"projection-waves",status:"degraded",message:`${e.incidentCount} unresolved terminal projection incident(s)`,details:{incidentCount:e.incidentCount,incidentsTruncated:e.incidentCount>e.incidents.length,incidents:e.incidents.map((t)=>({waveId:t.waveId,ruleId:t.ruleId,jobId:t.jobId,failureReason:t.failureReason,createdAt:t.createdAt}))}};if(!e.waveId)return{name:"projection-waves",status:"healthy",message:e.batches.open+e.batches.preparing>0?`${e.batches.open+e.batches.preparing} projection batch(es) active`:"No active projection wave",...e.batches.open+e.batches.preparing>0&&{details:{batches:e.batches}}};if(e.strandedRules.length===0)return{name:"projection-waves",status:"healthy",message:`Projection wave ${e.waveId} is progressing`};return{name:"projection-waves",status:"degraded",message:`Projection wave ${e.waveId} has ${e.strandedRules.length} stranded rule job(s)`,details:{waveId:e.waveId,strandedRules:e.strandedRules}}}function na(e){let t=e.filter((r)=>r.status!=="running"||r.health?.status==="error");return t.length===0?{name:"daemons",status:"healthy",message:`${e.length} daemon(s) healthy`}:{name:"daemons",status:"degraded",message:`${t.length} daemon(s) unhealthy`,details:{daemons:t.map((r)=>({name:r.name,status:r.status,health:r.health?.status,message:r.health?.message}))}}}async function br(e){let t=e.now?.()??Date.now(),r=(e.memoryUsage??process.memoryUsage)(),[i,n,o,a,c,l,u,d]=await Promise.allSettled([e.entityService.getEntityCounts(Ce("runtime readiness database probe")),e.jobQueueService.getDiagnostics(t),Promise.resolve(e.jobQueueService.getExecutionRegistrations()),e.daemonRegistry.getStatuses(),(e.readProcessSignals??Ks)(),e.projectionRuntimeSupervisor.getDiagnostics(),ra(e),e.operationalHealthRegistry.getChecks()]),p=n.status==="fulfilled"?n.value:null,g=o.status==="fulfilled"?o.value??null:null,f=a.status==="fulfilled"?a.value:[],m=c.status==="fulfilled"?c.value:{fileDescriptors:null,processCount:null,zombieCount:null},h=l.status==="fulfilled"?l.value:{status:"unhealthy",initialized:!1,trackedRoots:0,openCircuits:[]},I=[vr("entity-database",i,"Entity database is accessible"),vr("job-queue-database",n,"Job queue database is accessible"),Ys(p),Vs(p),Xs(p,g),ea(p),l.status==="fulfilled"?ta(h):{name:"projection-circuits",status:"degraded",message:P(l.reason)},u.status==="fulfilled"?ia(u.value):{name:"projection-waves",status:"degraded",message:P(u.reason)},a.status==="fulfilled"?na(f):{name:"daemons",status:"degraded",message:P(a.reason)}],v=d.status==="fulfilled"?d.value:[{name:"plugin-operational-health",status:"degraded",message:"Plugin operational health is unavailable"}],b=[...I,...v];return{status:I.some((S)=>S.status==="unhealthy")?"not_ready":"ready",operationalStatus:b.some((S)=>S.status!=="healthy")?"degraded":"operational",checkedAt:new Date(t).toISOString(),checks:b,resources:{memory:{rssBytes:r.rss,heapUsedBytes:r.heapUsed,heapTotalBytes:r.heapTotal},fileDescriptors:m.fileDescriptors,processes:{total:m.processCount,zombies:m.zombieCount},queue:p,projection:{initialized:h.initialized,trackedRoots:h.trackedRoots,openCircuits:h.openCircuits},worker:p?.workerSessions??{total:0,active:0,stale:0,latestHeartbeatAgeMs:null}}}}function Sr(){return{dataDir:"./data",cacheDir:"./cache",distDir:"./dist"}}function Y(e){return{database:{url:`file:${e.dataDir}/brain.db`},jobQueueDatabase:{url:`file:${e.dataDir}/brain-jobs.db`},conversationDatabase:{url:`file:${e.dataDir}/conversations.db`},runtimeStateDatabase:{url:`file:${e.dataDir}/runtime-state.db`},embeddingDatabase:{url:`file:${e.dataDir}/embeddings.db`},embedding:{enabled:!0}}}var It=Sr(),oa=s.looseObject({label:s.string().min(1),pluralName:s.string().optional(),layout:s.string().optional(),paginate:s.boolean().optional(),pageSize:s.number().optional(),navigation:s.object({show:s.boolean().optional(),slot:s.enum(["primary","secondary"]).optional(),priority:s.number().optional()}).optional()});function wt(){return Y(It)}var oe=s.enum(["debug","info","warn","error"]),se=s.enum(["none","low","medium","high","xhigh","max"]),Pt=s.object({name:s.string().default("brain-app"),version:s.string().default("1.0.0"),database:ne,jobQueueDatabase:ne,jobQueue:s.object({workerConcurrency:s.number().int().min(1).max(32).default(4)}).prefault({}),conversationDatabase:ne,runtimeStateDatabase:ne,embeddingDatabase:ne,ai:s.object({apiKey:s.string().default(""),imageApiKey:s.string().optional(),model:s.string(),temperature:s.number().min(0).max(2).default(0.7),maxTokens:s.number().positive().default(1000),webSearch:s.boolean().default(!0),reasoningEffort:se.optional()}),embedding:s.object({enabled:s.boolean().default(!0)}),logging:s.object({level:oe.default("info"),format:s.enum(["text","json"]).default("text"),file:s.string().optional(),context:s.string().default("shell")}).prefault({level:"info",context:"shell"}),features:s.object({}).default({}),plugins:s.array(Te).default([]),dataDir:s.string().default("./brain-data"),gitBrokerSocket:s.string().min(1).optional(),gitBrokerCheckout:s.string().min(1).optional(),spaces:s.array(s.string()).default([]),siteBaseUrl:s.string().optional(),localSiteUrl:s.string().optional(),preferLocalUrls:s.boolean().default(!1),themeCSS:s.string().default(""),entityDisplay:s.record(s.string(),oa).optional(),profileKind:s.string().trim().min(1).optional()});function ke(e={}){let{plugins:t=[],permissions:r={},identity:i,profile:n,agentInstructions:o,evalHandlerRegistry:a,ai:c,logging:l,embedding:u,jobQueue:d,...p}=e,{entityDisplay:g,...f}=Pt.parse({...wt(),...V(p),ai:V({...c}),logging:V({...l}),embedding:V({...u}),jobQueue:V({...d}),plugins:[]});return{...f,plugins:t,permissions:r,...V({entityDisplay:g,identity:i,profile:n,agentInstructions:o,evalHandlerRegistry:a})}}var j={NOTE:"note",BRAIN_CHARACTER:"brain-character",ANCHOR_PROFILE:"anchor-profile"},me={KNOWLEDGE_QUERY:"shell:knowledge-query",BASE_ENTITY_DISPLAY:"shell:base-entity-display",CONTENT_GENERATION:"shell:content-generation"},Ct={ENTITIES:"shell:entities"};var sa=Ir.extend({templateName:s.string()}),aa=s.object({slug:s.string()}),ca="The style guide governs voice, tone, wording and form: paragraphing, sentence rhythm, hooks, rhetorical questions and calls to action. The instructions below and any additional instructions in the request govern the task, required content, length limits, platform constraints and output format. When either conflicts with the style guide on voice or form, follow the style guide.",la="Generate the content described in your instructions.";function ua(e){return e instanceof s.ZodType}function da(e){if(!e)return;return e.replace(/^https?:\/\//,"").replace(/\/$/,"")}class xe{aiService;entityService;templateRegistry;getIdentityContent;getProfileContent;entityUrls;id="ai-content";name="AI Content Generator";description="Generates content using AI based on templates and prompts";constructor(e,t,r,i,n,o,a){this.aiService=e,this.entityService=t,this.templateRegistry=r,this.getIdentityContent=i,this.getProfileContent=n,this.entityUrls=o,this.siteBaseUrl=da(a)}siteBaseUrl;async generate(e,t,r){return this.generateWithContext(e,t,r)}async generateScoped(e,t,r){return this.generateWithContext(e,t,r.signal,r)}async generateWithContext(e,t,r,i){r?.throwIfAborted();let n=sa.parse(e),o=this.templateRegistry.get(n.templateName);if(!o)throw Error(`Template not found: ${n.templateName}`);if(!o.basePrompt)throw Error(`Template ${n.templateName} must have basePrompt for content generation`);let a=i?await Rr((I,v)=>i.getEntity(I,v),n.templateName,o.basePrompt):await Ee(this.entityService,n.templateName,o.basePrompt);r?.throwIfAborted();let c=[a,n.prompt].filter(Boolean).join(" "),l=c.length>0&&o.useKnowledgeContext===!0,u=this.entityService.getWeightMap(),d=Object.keys(u).length>0,p=l?i?await i.search(c,{limit:5,...d&&{weight:u}}):await this.entityService.search({query:c,options:{limit:5,...d&&{weight:u},...r&&{signal:r}}}):[];r?.throwIfAborted();let g=this.buildPrompt(n,p),f=i?await this.readIdentities(i,n.representedIdentity):void 0,m=this.buildSystemPrompt(a,n,f);if(!ua(o.schema))throw Error(`Template ${o.name} cannot be used for AI generation: schema is not an AI generation schema`);r?.throwIfAborted();let h=await this.aiService.generateObject(m,g,o.schema,r);return r?.throwIfAborted(),t.parse(h.object)}async readIdentities(e,t){let r=async(o)=>(await e.getEntity(o,o))?.content??"",[i,n]=await Promise.all([t!=="none"?r(j.BRAIN_CHARACTER):"",t===void 0||t==="anchor"?r(j.ANCHOR_PROFILE):""]);return{brain:i,anchor:n}}buildSystemPrompt(e,t,r){let i=[];if(t.representedIdentity===void 0||t.representedIdentity==="brain"||t.representedIdentity==="anchor")i.push("# Brain Identity",r?.brain??this.getIdentityContent(),"");if(t.representedIdentity===void 0||t.representedIdentity==="anchor")i.push("# Represented Anchor",r?.anchor??this.getProfileContent(),"");let n=this.selectStyleGuidance(t);if(n)i.push("# Style Guide",n,"","# Precedence",ca,"");return i.push("# Instructions",e),i.join(`
3
3
  `)}selectStyleGuidance(e){if(!e.styleGuide)return"";let t=[];if(e.styleGuide.voice)t.push("## Voice",e.styleGuide.voice);if(e.styleGuide.visual)t.push("## Visual",e.styleGuide.visual);return t.join(`
4
4
  `)}buildPrompt(e,t=[]){let r=[];if(e.conversationHistory)r.push(`Recent conversation context:
5
5
  ${e.conversationHistory}`);if(t.length>0){let i=t.map((n)=>this.formatRelevantEntity(n,this.entityUrls)).join(`
@@ -16,9 +16,9 @@ ${JSON.stringify(e.data,null,2)}`);if(e.prompt)r.push(`Additional instructions:
16
16
  `),a=Vt(n,o,{maxEditLength:Io});if(!a)return`Full content replacement (line diff omitted: more than ${Io} changed lines).`;return a.filter((c)=>c.added||c.removed).flatMap((c)=>c.value.map((l)=>`${c.added?"+":"-"} ${l}`)).join(`
17
17
  `)}function xo(e,t,r,i){return pl(e,t,r,i)??ml(e.entityType,t,r)??gl(e.entityType,t,r)}function jo(e,t,r){return Po(e.entityType,e.metadata.status,fl(e,t,r),r)==="non-publish"?"update":"publish"}function Ao(e,t,r){return t.kind==="content"?ll(e,t.content,r):To(e,t.fields,r)}function Se(e){return{success:!1,error:e}}async function hl(e,t,r,i){if(t.confirmed&&t.contentHash&&r.contentHash!==t.contentHash)return Se("Entity was modified since you reviewed the changes. Please try again.");let n=t.operation;switch(n.kind){case"fields":return{operation:n};case"edits":return{operation:{kind:"content",content:to(r.content,n.edits)}};case"content":return Do(e,r,n.content);case"source":{let o=await Ve(e,n.source,i);if(!o.success)return o;return Do(e,r,o.content,Xe(n.source,o))}}}function Do(e,t,r,i){let n=ko(t,r,e.entityRegistry);if(typeof n!=="string")return n;return{operation:{kind:"content",content:n},...i?{source:i}:{}}}function zo(e){let{entityService:t,logger:r,entityRegistry:i}=e,n=W({label:"update",requestNoun:"the update"}),o=async(c,l,u,d)=>{let p=n.validateConfirmed(c.confirmationToken,c);if(p)return p;let g=Ao(l,u,i);if(g.visibility!==l.visibility&&!rt(d.userPermissionLevel,g.visibility))return Se(`Cannot set entity visibility to "${g.visibility}" \u2014 caller permission "${d.userPermissionLevel??"public"}" is not allowed to write at that level.`);try{let f=le(d);if((await t.updateEntity({entity:g,options:{expectedContentHash:l.contentHash,...f?{eventContext:f}:{}}})).skipReason==="content-conflict")return Se("Entity was modified before the update could be saved. Please request and confirm the update again.")}catch(f){return Se(P(f,"Failed to update entity"))}return{success:!0,data:{updated:l.id}}},a=(c,l,{operation:u,source:d})=>({needsConfirmation:!0,toolName:"system_update",summary:`Update "${tt(l)}"?`,completionSummary:`Updated ${Gn(l.entityType)}.`,preview:Eo(l,u,i),args:n.buildArgs((p)=>({...c,...d?{operation:{kind:"source",source:d}}:{},id:l.id,confirmed:!0,confirmationToken:p,contentHash:l.contentHash}))});return L("update","Update an entity with exactly one typed operation: fields for partial frontmatter/metadata changes, content for full replacement text you wrote, edits for exact text patches, or source for replacement text the user supplied. For small content changes, fetch the entity and use the edits operation with exact oldText/newText pairs instead of regenerating the whole document. For a large rewrite whose text the user supplied, use the source operation with exact user-message boundaries instead of copying it into content. Requires confirmation; call this tool without confirmed to request that confirmation instead of asking for plain-text approval. For direct requests that provide exact IDs to set an existing image as an entity cover, call this tool on the target entity with the fields operation setting coverImageId to the image ID; do not stop after lookup.",Wn,async(c,l)=>{let u=await U(t,c.entityType,c.id,r,void 0,D(l.userPermissionLevel));if(!u.ok)return Se(u.error);let{entity:d}=u,p=await hl(e,c,d,l);if("success"in p)return p;let{operation:g}=p,f=xo(d,g,i,t);if(f)return f;let m=M(e,c.entityType,jo(d,g,i),l);if(m)return m;return c.confirmed?o(c,d,g,l):a(c,d,p)},{visibility:"trusted",sideEffects:"writes"})}function Oo(e){return[Yn(e),Xn(e),eo(e),zo(e)]}function dt(e){if(e.interfaceType!==Mo)return;if(e.userPermissionLevel!=="public"||e.isAnchor)throw Error("Guest execution denied")}var yl=0.5,sr=(e)=>e==="public"?{publishedOnly:!0}:{};function vl(e,t){if(e.length===0)return;let r=Math.round(Math.max(...e.map((i)=>i.score))*100)/100;return{minScore:t,weakerMatches:e.length,bestScore:r,hint:`No result reached minScore ${t}, but ${e.length} weaker match${e.length===1?"":"es"} exist (best score ${r}). Broad or abstract questions match content weakly: search again with a lower minScore, such as 0.3, before concluding that nothing relevant exists.`}}function Lo(e){let{entityService:t,logger:r}=e;return[G("system","search","Search entities using semantic search. For broad search, make one system_search call with scope.kind all. Use scope.kind type only when the user asks for a specific entity type. Applies a default minScore of 0.5 to reduce weak matches; lower minScore only for exploratory or loose recall. An empty result with belowThreshold means weaker matches exist: search again with a lower minScore before concluding that nothing relevant exists. Search results include each matched entity's content. When relevant results already contain the complete evidence needed, answer from those results instead of redundantly listing or getting the same entities. Search results are candidates; do not present weak or unrelated candidates as exact matches.",Ln,async(i,n)=>{dt(n);let o=D(n.userPermissionLevel),a=i.minScore??yl,c=await t.search({query:i.query,options:{limit:i.limit??e.searchLimit,...i.scope.kind==="type"&&{types:[i.scope.entityType]},...i.includeUngenerated!==void 0&&{includeUngenerated:i.includeUngenerated},visibilityScope:o,...sr(o)}}),l=c.filter((d)=>d.score>=a),u=l.length===0?vl(c,a):void 0;return{success:!0,data:{results:l.map((d)=>{let p=Kt(d.entity,e.entityRegistry);return{...d,entity:p,...p!==d.entity?{excerpt:p.content}:{}}}),...u&&{belowThreshold:u}}}},{visibility:"public",sideEffects:"none",cli:{name:"search"}}),G("system","get","Retrieve a specific entity by type and identifier (ID, slug, or title). If retrieval fails, report the entity as not found rather than describing related generation work as pending.",Un,async(i,n)=>{if(dt(n),!t.getEntityTypes().includes(i.entityType))return{success:!1,error:`Unknown entity type: ${i.entityType}. Available: ${t.getEntityTypes().join(", ")}`};let o=D(n.userPermissionLevel),a=await U(t,i.entityType,i.id,r,void 0,o,sr(o));if(!a.ok)return{success:!1,error:a.error};let c=Kt(a.entity,e.entityRegistry);return{success:!0,data:{entity:i.part==="body"?{...c,content:Ro(c.content)}:c}}},{visibility:"public",sideEffects:"none",cli:{name:"get"}}),G("system","list","List entities by a known entity type. Returns metadata only \u2014 use system_get for full content. Use system_search, not system_list, for broad or vague lookup requests. Use system_list to inspect metadata dates such as publishedAt when the user asks for the latest item of a known type, such as latest blog post.",Zn,async(i,n)=>{if(dt(n),!t.getEntityTypes().includes(i.entityType))return{success:!1,error:`Unknown entity type: ${i.entityType}. Available: ${t.getEntityTypes().join(", ")}`};let o=D(n.userPermissionLevel),a={visibilityScope:o};if(i.status&&i.status!=="any")a.metadata={status:i.status};let{defaultSort:c}=e.entityRegistry.getEntityTypeConfig(i.entityType),u=(await t.listEntities({entityType:i.entityType,options:{limit:i.limit??20,filter:a,...sr(o),...c?{sortFields:c}:{}}})).map(({content:d,contentHash:p,...g})=>g);return{success:!0,data:{entities:u,count:u.length}}},{visibility:"public",sideEffects:"none",cli:{name:"list"}})]}function bl(e){let t=Object.fromEntries(Object.entries(e.params.shape).map(([r,i])=>{let n=i instanceof s.ZodDefault?i.unwrap():i,o=i.description?n.describe(i.description):n;return[r,o.optional()]}));return s.looseObject(t).describe(`Params for ${e.type}: ${e.description}`)}function Sl(e){let[t,...r]=e.map((o)=>o.type);if(t===void 0)throw Error("No analytics reports registered");let i=e.filter((o)=>Object.keys(o.params.shape).length>0).map(bl),n=s.union([...i,s.looseObject({})]);return s.object({type:s.enum([t,...r]).describe("The report to run"),params:n.optional().describe("The report's params; each report lists its own")})}function Uo(e){let{entityService:t,analytics:r}=e,i=r.getDefinitions(),n=i.map((o)=>`${o.type} (${o.description})`).join("; ");return[G("system","analytics",`Aggregate metrics and reports over the brain, not its content: for actual content use system_list, system_get or system_search. Reports: ${n}.`,Sl(i),async(o,a)=>({success:!0,data:await r.run({type:o.type,params:o.params,entityService:t,permission:a.userPermissionLevel??"public"})}),{visibility:"public",sideEffects:"none"})]}function Zo(e){let{jobs:t}=e;return[L("job_status","Inspect runtime job status for ready checks only when the prior operation created a job, or for status disputes. With a known batch ID, pass batchId. Without an ID, call this tool with no arguments to list active jobs and batches; do not ask the user for an ID first. Do not argue from the transcript alone.",Nn,async(r)=>{if(r.batchId){let o=await t.getBatchStatus(r.batchId);if(!o)return{success:!1,error:`No batch found with ID: ${r.batchId}`};let a=o.totalOperations>0?Math.round(o.completedOperations/o.totalOperations*100):0;return{success:!0,data:{batchId:r.batchId,status:o.status,progress:{total:o.totalOperations,completed:o.completedOperations,failed:o.failedOperations,percentComplete:a},currentOperation:o.currentOperation,errors:o.errors}}}let i=await t.getActiveJobs(r.jobTypes),n=await t.getActiveBatches();return{success:!0,data:{summary:{activeJobs:i.length,activeBatches:n.length},jobs:i.map((o)=>({id:o.id,type:o.type,status:o.status,priority:o.priority,retryCount:o.retryCount,createdAt:new Date(o.createdAt).toISOString(),startedAt:o.startedAt?new Date(o.startedAt).toISOString():null})),batches:n.map((o)=>({batchId:o.batchId,status:o.status.status,totalOperations:o.status.totalOperations,completedOperations:o.status.completedOperations,failedOperations:o.status.failedOperations,currentOperation:o.status.currentOperation,pluginId:o.metadata.metadata.pluginId,errors:o.status.errors}))}}},{visibility:"public",sideEffects:"none"})]}function Rl(e,t){let{entityCounts:r,daemons:i,endpoints:n,interactions:o,...a}=e;return{...a,endpoints:n.filter((c)=>t(c.visibility)).sort((c,l)=>c.priority-l.priority).map(({label:c,url:l})=>({label:c,url:l}))}}function $o(e){return[G("system","status","Get system status including model, version, background work, and the web surfaces (such as the dashboard and Studio) the caller can open, with their paths",s.object({}),async(t,r)=>({success:!0,data:Rl(await e.getAppInfo(),(i)=>e.permissionService.hasPermission(r.userPermissionLevel??"public",i))}),{visibility:"public",sideEffects:"none",cli:{name:"status"}})]}function Bo(e){return[...Lo(e),...Zo(e),...$o(e),...Oo(e),...Uo(e)]}function _o(e){return[{uri:"entity://types",name:"Entity Types",description:"List of registered entity types",mimeType:"text/plain",handler:async()=>({contents:[{uri:"entity://types",mimeType:"text/plain",text:e.entityService.getEntityTypes().join(`
18
18
  `)}]})},{uri:"brain://identity",name:"Brain Identity",description:"Brain character \u2014 name, role, purpose, values",mimeType:"application/json",handler:async()=>({contents:[{uri:"brain://identity",mimeType:"application/json",text:JSON.stringify(e.getIdentity(),null,2)}]})},{uri:"brain://profile",name:"Anchor Profile",description:"Brain owner profile \u2014 name, bio, expertise",mimeType:"application/json",handler:async()=>({contents:[{uri:"brain://profile",mimeType:"application/json",text:JSON.stringify(e.getProfile(),null,2)}]})},{uri:"brain://status",name:"Brain Status",description:"System status \u2014 version, model, interfaces, tools",mimeType:"application/json",handler:async()=>({contents:[{uri:"brain://status",mimeType:"application/json",text:JSON.stringify(await e.getAppInfo(),null,2)}]})}]}function Wo(e){let{entityService:t}=e;return[{name:"entity-list",uriTemplate:"entity://{type}",description:"List entities of a given type",mimeType:"application/json",list:async()=>t.getEntityTypes().map((i)=>({uri:`entity://${i}`,name:`${i} entities`})),complete:{type:async()=>t.getEntityTypes()},handler:async({type:r})=>{let i=t.getEntityTypes();if(!i.includes(r))throw Error(`Unknown entity type: ${r}. Available: ${i.join(", ")}`);let o=(await t.listEntities({entityType:r})).map((a)=>({id:a.id,entityType:a.entityType,...a.metadata,updated:a.updated}));return{contents:[{uri:`entity://${r}`,mimeType:"application/json",text:JSON.stringify(o,null,2)}]}}},{name:"entity-detail",uriTemplate:"entity://{type}/{id}",description:"Read a single entity by type and ID",mimeType:"text/markdown",complete:{type:async(r)=>{let i=t.getEntityTypes();return r?i.filter((n)=>n.startsWith(r)):i},id:async()=>[]},handler:async({type:r,id:i})=>{let n=await t.getEntity({entityType:r,id:i});if(!n)throw Error(`Entity not found: ${r}/${i}`);return{contents:[{uri:`entity://${r}/${i}`,mimeType:"text/markdown",text:n.content}]}}}]}function Fo(e){return[{name:"create",description:"Create new content of any type",args:{type:{description:"Entity type (e.g. post, deck, note)",required:!0},topic:{description:"Topic or title for the content"}},handler:async({topic:r,type:i})=>({messages:[{role:"user",content:{type:"text",text:r?`Create a new ${i} about: ${r}`:`Create a new ${i}. Ask me what it should be about.`}}]})},{name:"generate",description:"AI-generate content with a prompt",args:{type:{description:`Entity type (${(()=>e.entityService.getEntityTypes().join(", "))()})`,required:!0},topic:{description:"What to generate",required:!0}},handler:async({type:r,topic:i})=>({messages:[{role:"user",content:{type:"text",text:`Generate a ${r} about: ${i}`}}]})},{name:"review",description:"Review and improve existing content",args:{type:{description:"Entity type",required:!0},id:{description:"Entity ID or slug",required:!0}},handler:async({type:r,id:i})=>({messages:[{role:"user",content:{type:"text",text:`Review my ${r} "${i}". Read it first, then give me specific feedback on structure, clarity, and impact. Suggest concrete improvements.`}}]})},{name:"publish",description:"Publish content \u2014 preview, confirm, and publish",args:{type:{description:"Entity type",required:!0},id:{description:"Entity ID or slug",required:!0}},handler:async({type:r,id:i})=>({messages:[{role:"user",content:{type:"text",text:`I want to publish my ${r} "${i}". Show me a preview first, then publish it.`}}]})},{name:"brainstorm",description:"Brainstorm ideas using brain context and expertise",args:{topic:{description:"Topic to brainstorm about",required:!0}},handler:async({topic:r})=>({messages:[{role:"user",content:{type:"text",text:`Let's brainstorm about: ${r}. Use my existing content and expertise as context. Give me fresh angles and concrete ideas.`}}]})}]}function No(e){let t=e.entityService.getEntityTypes(),r=t.map((i)=>`- ${i}: ${e.entityRegistry.getAdapter(i).purpose}`);return["## Entity CRUD","","Use these system tools for ALL entity operations:","","Treat explicit verbs such as save, create, capture, remember, import, add/connect an agent, approve/archive an agent, update, delete, generate, publish, or sync as mutation requests. Entity-specific instructions may require proactively recording the user's request itself for demand or workflow tracking; follow those instructions even when the user did not use a separate save/create verb. Ordinary status questions like 'what is the status', 'is it ready', 'did that finish', or 'what happened' are not capture requests; answer them by using the relevant status/read tool for the prior operation. Never call system_create for a status follow-up.","",`- **system_create**: Create an entity from existing/concrete material. Requires confirmation before persisting; call system_create without \`confirmed\` to request that confirmation, and never pass \`confirmed: true\` on the initial user request. Use the typed \`visibility\` field instead of rewriting exact source text: omit it for public content, use \`shared\` for team/collaborator content, and use \`restricted\` for private/admin-only content. Public callers may write only public content, Trusted callers public or shared, and Admin callers all three levels. If the user only says 'not public' without clarifying team/shared versus private/admin-only, ask which scope they mean. Required \`source\` union: \`{ kind: "text", content }\` stores exact/direct content; \`{ kind: "url", url }\` creates URL/domain-backed records such as links (preserve bare domains as bare domains); \`{ kind: "upload", upload, transform: "extract-markdown" }\` imports extractable upload bytes as a markdown note; \`{ kind: "upload", upload, transform: "preserve" }\` preserves raw uploaded bytes as their durable file entity; \`{ kind: "prior-response", messageId? }\` saves a previous assistant answer/summary by reference without copying or paraphrasing it. If a direct save request includes the content in the same message, that content is sufficient, even if it is a short sentence or fragment after a colon or embedded in the request phrase (for example, "Save this memo about the launch timeline"); call system_create instead of asking the user to paste it again. If the immediate context is an assistant summary/answer about an upload and the user asks to save it/that/this/summary, create a note with \`source.kind: "prior-response"\`; do this even when the prior answer says there was limited readable content. Do not ask whether they meant the summary or the file after you just summarized/answered about the upload: save the visible prior response as a note. Do not treat a bare upload receipt like "I got filename. What would you like me to do?" as a summary/answer; if the user then says "save it", preserve the latest uploaded file itself with upload \`preserve\` (image uploads as entityType image, PDFs/documents as their file entity type). Only use \`source.kind: "upload"\` when the runtime supplies an actual upload reference/attachment; if the message contains a pasted uploaded-file transcript with readable content (for example, \`User uploaded a file "name.md": ...\`), save the visible transcript content as \`source.kind: "text"\`. Only use upload \`preserve\` otherwise when they explicitly want to save the uploaded file/document itself. Use system_generate, not system_create, for AI generation, generated images, cover images, and source-derived artifacts. Available entity types: ${t.join(", ")}.`,"- **system_generate**: Generate a new durable entity or deterministic artifact. Requires confirmation before queueing generation; call system_generate without `confirmed` to request that confirmation, and never pass `confirmed: true` on the initial user request. When the user asks you to create, write, draft, or generate new durable content and has not supplied final exact content to store, call system_generate instead of drafting the content in chat or asking for separate prose approval first. An underspecified generation request still supplies a usable prompt: preserve the user's wording and call system_generate rather than stopping to ask what details to highlight. Write the prompt from the user's request (topic, source, constraints) and do not add voice, tone or engagement directions the user did not ask for, such as 'engaging', 'a compelling hook' or 'invite discussion'; the brain's style guide supplies the voice.If generation depends on an existing source entity (for example, a newsletter from a blog post), resolve the source with read/search/list tools first unless the user gives an exact entity id in quotes, then call system_generate with `operation.kind: \"prompt-from-source\"` in the same turn when a clear source is found. If you identify the latest source entity, do not stop after saying you found it or can generate from it; call system_generate immediately. If no existing durable source entity is resolved, use `operation.kind: \"prompt\"` in the same turn, including after an optional search returns no source; never invent source IDs, use upload IDs/filenames as entity refs, use profile/brain-character as a generic source, or create placeholder source refs. For broad topical prompts like 'about AI' or 'about continuous learning', use `operation.kind: \"prompt\"`. If the user asks for the latest published/blog source, use system_list for that entity type (for blog posts, entityType post) to inspect publishedAt dates; do not rely on semantic search result order. Choose the newest matching candidate by publishedAt (not updated/created order) and proceed with system_generate rather than asking for separate prose approval; do not say 'if that is the one you mean' when a newest dated candidate is visible. Do not say 'I can generate it if you want' or 'I need to queue it first'; calling system_generate without `confirmed` is the confirmation request. Required `operation` union: `{ kind: \"prompt\", entityType, prompt }` generates a new non-image durable entity from a broad prompt with no source; `{ kind: \"prompt-from-source\", entityType, source: { entityType, entityId }, prompt }` generates from an existing resolved entity, such as a newsletter from a blog post. `{ kind: \"standalone-image\", prompt }` generates an unattached image; `{ kind: \"cover-image\", target: { entityType, entityId }, prompt }` generates an image and attaches it to an existing canonical entity as `coverImageId`; `{ kind: \"attachment\", source: { entityType, entityId }, attachmentType }` renders a deterministic artifact from an existing entity attachment provider. For save/render/regenerate/replace requests for source-derived artifacts, call `system_generate` with `operation.kind: \"attachment\"` immediately; do not say you can queue it later. Use `replace: true` when the user says regenerate, replace, refresh, or update an existing artifact. For OG/social preview renders, use `attachmentType: \"og-image\"`; the provider derives the output image and updates `ogImageId`. For deck carousel PDFs use `attachmentType: \"carousel\"`; for printable post/project PDFs use `attachmentType: \"printable\"`. If the user asks to attach a generated artifact to another entity, generate the artifact first in the same turn; do not ask whether they mean an existing artifact when the source entity is explicit or given as a quoted id such as deck `distributed-systems-primer`. Update the target only after the real artifact ID exists. To create an entity and a cover image, first create/generate only the entity, then after confirmation and after the real canonical entity ID is known call system_generate with operation.kind cover-image. When the user asks to create/regenerate a cover for an existing entity and search/get resolves a clear target, call system_generate with operation.kind cover-image in the same turn; do not stop after saying you found it. In a single initial request for 'a post with a cover image', do not also call standalone-image; never guess a future target ID, and do not generate a standalone image as a substitute for a requested cover image.",'- **system_update**: Modify an entity\'s fields or content. Required `operation` union: `{ kind: "fields", fields }`, `{ kind: "content", content }`, `{ kind: "edits", edits }`, or `{ kind: "source", source }`. Use `operation.kind: "edits"` for small content changes: fetch the entity, then send exact oldText/newText pairs, with each oldText matching once in the original Markdown. Put multiple non-overlapping edits in one call. Do not regenerate the whole note for a small change. Never replace unchanged content with placeholders or ellipses. For a whole-document rewrite, when the user supplies the replacement text, use `operation: { kind: "source", source: { kind: "user-message", startAfter, endBefore } }` with exact unique boundaries (`boundaryMode: "lines"` for delimiter lines) so the server reads it verbatim; never copy pasted text into a content operation or long edits. Use the content operation only for whole-document replacements you write yourself. Text without frontmatter replaces the body and keeps the stored frontmatter; text with frontmatter replaces the whole document. Use `operation.kind: "fields"` for title, status, coverImageId, ogImageId, and other frontmatter/metadata changes. To remove or clear a cover image, set `operation.fields.coverImageId` to null, not an empty string. Use system_update for coverImageId when an existing image entity id is known; if the user says to set an existing image as a cover, update `coverImageId` even when `ogImageId` already points at that image. To generate a new cover image for an existing entity, use system_generate with operation.kind cover-image. Cover images use `coverImageId`; OG/social previews use `ogImageId`; do not treat them as interchangeable. Requires confirmation before applying changes; call system_update without `confirmed` to request that confirmation, rather than asking for prose approval. For explicit publish requests, use the publishing tool if available instead of changing status with system_update; follow-up pronouns like \'publish it\' should target the entity just read or updated in the conversation.',"- **system_delete**: Admin-only entity removal. Requires confirmation before deleting. Never pass `confirmed: true` on the initial user request; call without `confirmed` so the confirmation flow can ask an administrator first. If system_delete is not available in the current tool surface, say deletion requires Admin access; do not imply a confirmation flow is available. Protected identity/profile records such as brain-character and anchor-profile cannot be deleted; update them instead.","- **system_get**: Retrieve a specific entity by type and ID/slug/title.","- **system_list**: List entities by type with optional filters. For simple list/show-all/summary requests that name or browse a known type or synonym (for example essays/articles/blog posts => post), use system_list with that entity type instead of semantic search. For 'summarize my blog posts' or similar whole-type summaries, first call system_list for entityType post, then summarize those returned entities. For 'latest' requests, use system_list metadata dates such as publishedAt to choose the newest candidate.","- **system_search**: Semantic search across all entities. Search results include matched entity content; when relevant results already provide the complete evidence needed, answer from them instead of redundantly calling system_list or system_get for those same entities. For each new user question about what they have written, mentioned, discussed, or saved, run a fresh search for that turn instead of answering from prior-turn search results or memory; this includes analysis phrasing such as 'How do I discuss X in my writing?' even if prior turns searched related topics.","","Do not ask for prose confirmation instead of calling the applicable mutating tool; for create, update, delete, generate, publish, sync, and similar state-changing requests, the initial tool call without `confirmed` is how you create the pending confirmation. Never claim a durable create/update/delete change was saved, created, done, or completed unless the relevant tool call succeeded or returned a pending confirmation. If a create/update/delete tool is unavailable, unauthorized, or intentionally not called, say you can't make that durable change from the current context; never say saved/created/done. For an explicit write request from an unauthorized/currently unwritable context, refuse directly; do not call system_status or system_search to check permission or look up related content. Entity type descriptions may mark projection-owned or system-maintained types read-only; refuse mutation requests for those types directly without calling read or write tools, searching for a target, or asking which record to mutate.","","Entity types \u2014 select `entityType` by what the type is for:",...r].join(`
19
- `)}var ue="system",Il=s.object({toolName:s.string(),args:s.unknown(),...Jo.partial().shape});function pt(e,t,r,i,n){for(let o of e)try{t(o)}catch{n.debug(`System ${i} ${r(o)} already registered, skipping`)}}function Ho(e,t,r,i){let n=Bo(e);pt(n,(d)=>t.registerTool(ue,d),(d)=>d.name,"tool",i);let o=r.subscribe(qo.toolExecute(ue),async(d)=>{let p=Il.safeParse(d.payload);if(!p.success)return{success:!1,error:"Invalid system tool execute payload"};let{toolName:g,args:f,interfaceType:m,actor:h,conversationId:I,channelId:v,userPermissionLevel:b}=p.data,S=n.find((O)=>O.name===g);if(!S)return{success:!1,error:`System tool not found: ${g}`};let w={interfaceType:m??"system",actor:h??{kind:"service",serviceId:"system"}};if(I)w.conversationId=I;if(v)w.channelId=v;if(b)w.userPermissionLevel=b;return{success:!0,data:await S.handler(f,w)}});i.debug(`Registered ${n.length} system tools`);let a=_o(e);pt(a,(d)=>t.registerResource(ue,d),(d)=>d.uri,"resource",i),i.debug(`Registered ${a.length} system resources`);let c=Wo(e);pt(c,(d)=>t.registerResourceTemplate(ue,d),(d)=>d.uriTemplate,"resource template",i),i.debug(`Registered ${c.length} system resource templates`);let l=Fo(e);pt(l,(d)=>t.registerPrompt(ue,d),(d)=>d.name,"prompt",i),i.debug(`Registered ${l.length} system prompts`);let u=No(e);try{t.registerInstructions(ue,u)}catch{i.debug("System instructions already registered, skipping")}return i.debug("Registered system instructions"),o}function Yo(e){let{services:t,jobs:r,analytics:i,query:n,getAppInfo:o}=e,a=t.jobQueueService,c=t.logger.child("system"),l=Ho({entityService:t.entityService,entityRegistry:t.entityRegistry,jobs:{...r,enqueue:Go(a,"system",!1),enqueueBatch:Qo(r,"system"),registerHandler:Ko(a,"system")},conversationService:t.conversationService,runtimeUploads:t.runtimeUploadRegistry,attachments:mt(t.attachmentRegistry),logger:c,query:n,getIdentity:()=>t.identityService.getCharacter(),getProfile:()=>t.profileService.getProfile(),getAppInfo:o,searchLimit:10,analytics:i,permissionService:t.permissionService},t.mcpService,t.messageBus,c);t.disposables.push(l)}class ar{scope;closePromise=null;closed=!1;constructor(){this.scope=y.runSync(k.make())}buildLayer(e){this.assertOpen();let t=y.runSyncExit(_.buildWithScope(e,this.scope));if(E.isFailure(t))throw q.squash(t.cause);return t.value}addFinalizer(e){this.assertOpen(),y.runSync(k.addFinalizer(this.scope,y.promise(async()=>{await e()})))}addSyncFinalizer(e){this.assertOpen(),y.runSync(k.addFinalizer(this.scope,y.sync(()=>{e()})))}async fork(e){if(this.closed)throw Error("Cannot start background work after shell shutdown");await y.runPromise(y.forkIn(e,this.scope))}close(e=E.void){if(this.closePromise)return this.closePromise;if(this.closed)return Promise.resolve();return this.closed=!0,this.closePromise=y.runPromise(k.close(this.scope,e)),this.closePromise}closeSync(e){if(this.closed)return;this.closed=!0,y.runSync(k.close(this.scope,e))}assertOpen(){if(this.closed)throw Error("Cannot register cleanup after shell shutdown")}}class Re{config;services;lifecycle;bootloader;initialized=!1;lifecycleState="constructed";bootMode;bootPromise=null;shutdownPromise=null;analyticsRegistry;bootTime=Date.now();endpointRegistry=new Jt;interactionRegistry=new Ht;httpRouteRegistry=Ke.createFresh();jobs;static createFresh(e,t,r){return new Re(ke(e),t,r)}constructor(e,t,r){this.config=e,this.lifecycle=new ar,ts(this,()=>this.httpRouteRegistry.getSnapshot());let i=t?.logger??z.getInstance(),n=Je.createFresh(i,this.config,r?.processRole,r?.peerChannel);try{this.services=n.initializeServices(this.lifecycle,t),this.jobs=xn(this.services.batchJobManager,this.services.jobQueueService),this.analyticsRegistry=Pn(this.services.entityRegistry),this.bootloader=new Nt(this.config,this.services,this.lifecycle,n,r?.processRole,{registerCoreDataSources:()=>wr(this.services,this.config),finalizeHttpRoutes:()=>{this.httpRouteRegistry.finalize(Dn(this.services.pluginManager))},registerSystemCapabilities:()=>Yo({services:this.services,jobs:this.jobs,analytics:this.analyticsRegistry,query:(o,a)=>this.query(o,a),getAppInfo:()=>this.getAppInfo()}),createProjectionInputContext:()=>({entities:this.services.entityService,resolvePrompt:(o,a)=>Ee(this.services.entityService,o,a),appInfo:()=>this.getAppInfo(),identityInput:()=>{let o=this.getIdentity(),a=this.getProfile();return Xo.parse({brainName:o.name,role:o.role,purpose:o.purpose,values:o.values,profileName:a.name,...a.description!==void 0?{profileDescription:a.description}:{},...a.organization!==void 0?{profileOrganization:a.organization}:{}})}}),createProjectionExecutionContext:()=>({ai:es(this),logger:this.services.logger.child("ProjectionRuntime")}),...t?.projectionRuntime&&{projectionRuntime:t.projectionRuntime}}),n.wireShell(this.services,this),On(this.lifecycle,this.services)}catch(o){try{this.lifecycle.closeSync(E.fail(o))}catch(a){i.error("Failed to roll back Shell service construction",a)}throw o}}getAnalyticsRegistry(){return this.analyticsRegistry}async initialize(e){this.services.logger.debug("Shell.initialize() called");let t=e?.mode;if(this.lifecycleState==="running")return this.services.logger.warn("Shell already initialized"),Promise.resolve();if(this.lifecycleState==="booting"){if(this.bootMode!==t)return Promise.reject(Error(`Shell is already initializing in ${this.bootMode??"normal"} mode; cannot join ${t??"normal"} mode`));return this.bootPromise??Promise.resolve()}if(this.lifecycleState==="closing"||this.lifecycleState==="closed")return Promise.reject(Error("Cannot initialize a closing shell"));if(this.lifecycleState==="failed")return Promise.reject(Error("Cannot initialize a shell after boot failure"));return this.lifecycleState="booting",this.bootMode=t,this.bootPromise=this.boot(e),this.bootPromise}async boot(e){try{if(await this.bootloader.boot(e),this.lifecycleState==="booting"){if(this.lifecycleState="running",this.initialized=!0,e?.mode===void 0)await this.services.messageBus.send({type:B.shellReady,payload:{timestamp:new Date().toISOString()},sender:"shell",broadcast:!0}),this.services.logger.debug("Emitted shell ready event")}}catch(t){if(this.initialized=!1,this.services.logger.error("Failed to initialize Shell",t),this.lifecycleState!=="closing")this.lifecycleState="failed";try{await this.lifecycle.close(E.fail(t))}catch(r){this.services.logger.error("Failed to clean up Shell after initialization failure",r)}throw t}}registerTemplates(e,t){this.services.logger.debug("Registering templates",{pluginId:t,count:Object.keys(e).length});for(let[r,i]of Object.entries(e))this.registerTemplate(r,i,t)}shutdown(){return this.shutdownPromise??=this.shutdownShell(),this.shutdownPromise}async shutdownShell(){if(this.services.logger.debug("Shutting down Shell"),this.lifecycleState==="closed")return;let e=this.bootPromise;if(this.lifecycleState="closing",this.initialized=!1,e)try{await e}catch{}await this.lifecycle.close(),this.lifecycleState="closed",this.services.logger.debug("Shell shutdown complete")}async generateContent(e,t){return this.requireInitialized("Shell content generation"),Pr(this.services,e,t)}async query(e,t){this.requireInitialized("Shell query");let r=await this.getAppInfo(),i={...t,appInfo:r,timestamp:new Date().toISOString()},{conversationHistory:n,...o}=i;return Vo.parse(await this.generateContent({prompt:e,templateName:me.KNOWLEDGE_QUERY,...n&&{conversationHistory:n},data:o,interfacePermissionGrant:"public"}))}registerPlugin(e){this.requireInitialized("Plugin registration"),this.services.pluginManager.registerPlugin(e)}isInitialized(){return this.initialized}requireInitialized(e){if(!this.initialized)throw Error(`${e} attempted before initialization`)}getEntityService(){return this.services.entityService}getConversationService(){return this.services.conversationService}getEntityRegistry(){return this.services.entityRegistry}async generateObject(e,t,r){this.requireInitialized("Shell generateObject");let{object:i}=await this.services.aiService.generateObject("You are a helpful assistant. Respond with the requested structured data.",e,t,r);return{object:i}}async judge(e){return this.requireInitialized("Shell judge"),this.services.aiService.judge(e)}getAIService(){return this.services.aiService}generateImage(e,t){return this.services.aiService.generateImage(e,t)}canGenerateImages(){return this.services.aiService.canGenerateImages()}getPluginManager(){return this.services.pluginManager}getContentService(){return this.services.contentService}getRenderService(){return this.services.renderService}getAttachmentRegistry(){return mt(this.services.attachmentRegistry)}getRuntimeUploadRegistry(){return rs(this.services.runtimeUploadRegistry)}getRuntimeState(){return this.services.runtimeStateService}getRecurringChecks(e){return this.services.recurringCheckService.namespace(e)}isJobQueueWorkerRunning(){return this.services.jobQueueWorker.isWorkerRunning()}getMessageBus(){return this.services.messageBus}getLogger(){return this.services.logger}getJobQueueService(){return this.services.jobQueueService}getMCPService(){return this.services.mcpService}listToolsForPermissionLevel(e){return this.services.mcpService.listToolsForPermissionLevel(e).map(({pluginId:t,tool:r})=>({name:r.name,description:r.description,pluginId:t}))}getPermissionService(){return this.services.permissionService}getAgentService(){return this.services.agentService}registerTools(e,t){for(let r of t)this.services.mcpService.registerTool(e,r)}registerResources(e,t){for(let r of t)this.services.mcpService.registerResource(e,r)}registerResourceTemplate(e,t){this.services.mcpService.registerResourceTemplate(e,t)}registerPrompt(e,t){this.services.mcpService.registerPrompt(e,t)}registerInstructions(e,t){if(this.services.mcpService.registerInstructions(e,t),this.initialized)this.services.agentService.invalidateAgent()}async unregisterPluginCapabilities(e){this.services.mcpService.unregisterPlugin?.(e),this.services.jobQueueService.unregisterPluginHandlers(e),this.endpointRegistry.unregister(e),this.interactionRegistry.unregister(e);for(let r of this.services.templateRegistry.getNames())if(r.startsWith(`${e}:`))this.services.templateRegistry.unregister(r);let t=this.config.evalHandlerRegistry;if(t){for(let r of t.list())if(r.pluginId===e)t.unregister(e,r.handlerId)}this.services.agentService.invalidateAgent(),await this.services.recurringCheckService.unregisterPlugin(e)}getPluginPackageName(e){return this.services.pluginManager.getPluginPackageName(e)}hasPlugin(e){return this.services.pluginManager.hasPlugin(e)}getPluginHttpRouteManifest(){return this.httpRouteRegistry.getManifest()}getPluginApiRoutes(){return this.httpRouteRegistry.getApiRoutes()}getPluginWebRoutes(){return this.httpRouteRegistry.getWebRoutes()}registerDaemon(e,t,r){this.services.daemonRegistry.register(e,t,r)}registerEndpoint(e){this.endpointRegistry.register(e)}listEndpoints(){return this.endpointRegistry.list()}registerInteraction(e){this.interactionRegistry.register(e)}listInteractions(){return this.interactionRegistry.list()}registerTemplate(e,t,r){let i=r?`${r}:${e}`:`shell:${e}`;this.services.templateRegistry.register(i,t),this.services.logger.debug(`Registered template: ${i}`)}getTemplate(e){return this.services.templateRegistry.get(e)}getDataSourceRegistry(){return this.services.dataSourceRegistry}getIdentity(){return this.services.identityService.getCharacter()}getProfile(){return this.services.profileService.getProfile()}getProfileKindRegistry(){return this.services.profileKindRegistry}getChannelRegistry(){return this.services.channelRegistry}getInboxRegistry(){return this.services.inboxRegistry}getInboxFollowUpRegistry(){return this.services.inboxFollowUpRegistry}getOperationalHealthRegistry(){return this.services.operationalHealthRegistry}getAccountSettingsRegistry(){return this.services.accountSettingsRegistry}getDomain(){return this.config.siteBaseUrl}getLocalSiteUrl(){return this.config.localSiteUrl}shouldPreferLocalUrls(){return this.config.preferLocalUrls}getThemeCSS(){return this.config.themeCSS}getSpaces(){return this.config.spaces}getDataDir(){return this.config.dataDir}getGitBrokerSocket(){return this.config.gitBrokerSocket}getGitBrokerCheckout(){return this.config.gitBrokerCheckout}registerEvalHandler(e,t,r){this.config.evalHandlerRegistry?.register(e,t,r)}async getAppInfo(){return hr({config:this.config,services:this.services,bootTime:this.bootTime,endpoints:()=>this.listEndpoints(),interactions:()=>this.listInteractions()})}getRuntimeReadiness(){return br(this.services)}}var is={kind:"service",serviceId:"brain-cli"},cr=`${is.kind}:${is.serviceId}`;var wl=s.object({provider:s.enum(["hetzner","docker"]).default("hetzner"),serverSize:s.string().default("cx33"),location:s.string().default("fsn1"),domain:s.string().optional(),docker:s.object({enabled:s.boolean().default(!0),image:s.string().optional()}).prefault({}),ports:s.object({default:s.number().default(3333),preview:s.number().default(4321),production:s.number().default(8080)}).prefault({}),cdn:s.object({enabled:s.boolean().default(!1),provider:s.enum(["bunny","none"]).default("none")}).prefault({}),dns:s.object({enabled:s.boolean().default(!1),provider:s.enum(["bunny","none"]).default("none")}).prefault({}),paths:s.object({install:s.string().optional(),data:s.string().optional()}).prefault({})}),os=s.object({name:s.string().default("brain-app"),version:s.string().default("1.0.0"),database:s.string().optional(),aiApiKey:s.string().optional(),aiImageKey:s.string().optional(),aiModel:s.string().optional(),aiReasoningEffort:se.optional(),logLevel:oe.optional(),logFile:s.string().optional(),profileKind:s.string().trim().min(1).optional(),plugins:s.array(Te).default([]),spaces:s.array(s.string()).default([]),identity:ns.optional(),agentInstructions:s.array(s.string()).optional(),deployment:wl.prefault({})});async function hs(e,t){await Q({label:"entity",config:e,schema:{assets:as,entities:ss,entityMutationReceipts:cs,projectionDirtyInputs:ls,projectionWaves:us,projectionIncidents:ds,projectionWaveInputs:ps,projectionWaveRules:ms,projectionRuleMemos:gs},migrationsFolder:K(import.meta.url,"entity-service"),authTokenEnv:"DATABASE_AUTH_TOKEN",logger:t,afterMigrate:fs})}async function bs(e,t){await Q({label:"job-queue",config:e,schema:{jobQueue:ys,jobWorkerSessions:vs},migrationsFolder:K(import.meta.url,"job-queue"),authTokenEnv:"JOB_QUEUE_DATABASE_AUTH_TOKEN",logger:t})}async function ws(e,t){await Q({label:"conversation",config:e,schema:{conversations:Ss,messages:Rs,summaryTracking:Is},migrationsFolder:K(import.meta.url,"conversation-service"),authTokenEnv:"CONVERSATION_DATABASE_AUTH_TOKEN",logger:t})}async function Ps(e,t){await Q({label:"runtime-state",config:e,schema:{runtimeStateRecords:R},migrationsFolder:K(import.meta.url,"runtime-state"),authTokenEnv:"RUNTIME_STATE_DATABASE_AUTH_TOKEN",logger:t})}import{mkdir as lr}from"fs/promises";import{isAbsolute as Pl}from"path";function Cs(e=process.env){return{dataDir:e.XDG_DATA_HOME??"./data",cacheDir:e.XDG_CACHE_HOME??"./cache",distDir:"./dist"}}function Ts(e=process.env){let t=e.BRAIN_GIT_BROKER_CHECKOUT;if(!t)return;if(!Pl(t))throw Error(`Git broker checkout path must be absolute: ${t}`);return t}function ks(e=process.env){let t=e.BRAIN_GIT_BROKER_SOCKET;if(!t)return;let r=107;if(Buffer.byteLength(t)>r)throw Error(`Git broker socket path is too long for a unix socket (${Buffer.byteLength(t)} > ${r} bytes): ${t}`);return t}function Es(e=process.env){return Y(Cs(e))}async function xs(e=process.env){let t=Cs(e);try{await lr(t.dataDir,{recursive:!0}),await lr(t.cacheDir,{recursive:!0}),await lr(t.distDir,{recursive:!0})}catch(r){let i=r instanceof Error&&r.message.includes("EACCES")?`Cannot create data directories \u2014 permission denied. Run from a writable directory or check permissions on ${t.dataDir}`:`Cannot create data directories: ${P(r)}`;throw Error(i,{cause:r})}return Y(t)}class ur{logger;migrations;constructor(e,t){this.logger=e,this.migrations=t??{getStandardConfigWithDirectories:()=>xs(),migrateEntities:hs,migrateJobQueue:bs,migrateConversations:ws,migrateRuntimeState:Ps}}async runAllMigrations(e){this.logger.debug("Running database migrations...");let t=await this.migrations.getStandardConfigWithDirectories();if(e?.database)t.database.url=e.database;if(e?.jobQueueDatabase)t.jobQueueDatabase.url=e.jobQueueDatabase;if(e?.conversationDatabase)t.conversationDatabase.url=e.conversationDatabase;if(e?.runtimeStateDatabase)t.runtimeStateDatabase.url=e.runtimeStateDatabase;await this.migrateEntityDatabase(t),await this.migrateJobQueueDatabase(t),await this.migrateConversationDatabase(t),await this.migrateRuntimeStateDatabase(t),this.logger.debug("All database migrations completed successfully")}async migrateEntityDatabase(e){this.logger.debug("Running entity database migrations..."),await this.migrations.migrateEntities({url:e.database.url,...e.database.authToken&&{authToken:e.database.authToken}},this.logger)}async migrateJobQueueDatabase(e){this.logger.debug("Running job queue database migrations..."),await this.migrations.migrateJobQueue({url:e.jobQueueDatabase.url,...e.jobQueueDatabase.authToken&&{authToken:e.jobQueueDatabase.authToken}},this.logger)}async migrateConversationDatabase(e){this.logger.debug("Running conversation database migrations..."),await this.migrations.migrateConversations({url:e.conversationDatabase.url,...e.conversationDatabase.authToken&&{authToken:e.conversationDatabase.authToken}},this.logger)}async migrateRuntimeStateDatabase(e){this.logger.debug("Running runtime state database migrations..."),await this.migrations.migrateRuntimeState({url:e.runtimeStateDatabase.url,...e.runtimeStateDatabase.authToken&&{authToken:e.runtimeStateDatabase.authToken}},this.logger)}}var Cl="NODE_ENV";function Tl(){return process.env[Cl]}function js(){return Tl()!=="production"}var El="startup-check";function xl(e){let r={...os.parse(e??{}),plugins:e?.plugins??[]};if(e?.permissions)r.permissions=e.permissions;if(e?.spaces)r.spaces=e.spaces;if(e?.cliConfig)r.cliConfig=e.cliConfig;if(e?.shellConfig)r.shellConfig=e.shellConfig;return r}function jl(e,t){let r={plugins:e.plugins??[],...e.shellConfig};return Al(r),Dl(e,r),zl(e,r,t),Ol(e,r),Ml(e,r),Ll(e,r),Ul(e,r),Zl(e,r),$l(e,r),r}function Al(e){let t=Es();e.database??=t.database,e.jobQueueDatabase??=t.jobQueueDatabase,e.conversationDatabase??=t.conversationDatabase,e.runtimeStateDatabase??=t.runtimeStateDatabase,e.embeddingDatabase??=t.embeddingDatabase,e.embedding??=t.embedding,e.gitBrokerSocket??=ks(),e.gitBrokerCheckout??=Ts()}function Dl(e,t){if(e.database)t.database={url:e.database};if(e.profileKind)t.profileKind=e.profileKind;t.features={}}function zl(e,t,r){let i=r?.mode==="startup-check";if(!e.aiApiKey&&!e.aiImageKey&&!e.aiModel&&!e.aiReasoningEffort&&!i)return;t.ai={...t.ai,...i&&!t.ai?.apiKey&&{apiKey:El},...e.aiApiKey&&{apiKey:e.aiApiKey},...e.aiImageKey&&{imageApiKey:e.aiImageKey},...e.aiModel&&{model:e.aiModel},...e.aiReasoningEffort&&{reasoningEffort:e.aiReasoningEffort}}}function Ol(e,t){if(!e.logLevel&&!e.logFile)return;t.logging={level:e.logLevel??"info",format:"text",context:e.name,...e.logFile&&{file:e.logFile}}}function Ml(e,t){let r=e.permissions?.rules??[];t.permissions={...e.permissions,rules:r.some((i)=>i.pattern===cr)?r:[{pattern:cr,level:"admin"},...r]}}function Ll(e,t){if(e.spaces)t.spaces=e.spaces}function Ul(e,t){if(e.identity)t.identity=e.identity}function Zl(e,t){if(e.agentInstructions)t.agentInstructions=e.agentInstructions}function $l(e,t){if(t.name=e.name,t.version=e.version,e.deployment.domain)t.siteBaseUrl=e.deployment.domain;t.localSiteUrl=`http://localhost:${e.deployment.ports.production}`,t.preferLocalUrls=js()}class pr{shell=null;config;signalScope=null;signalShutdownFiber=null;stopPromise=null;hasCLI=!1;static create(e,t){return new pr(xl(e),t)}constructor(e,t){if(this.config=e,this.hasCLI=process.argv.slice(2).includes("--cli"),t)this.shell=t}async migrate(){let e=z.getInstance();await new ur(e).runAllMigrations({database:this.config.shellConfig?.database?.url??this.config.database,jobQueueDatabase:this.config.shellConfig?.jobQueueDatabase?.url,conversationDatabase:this.config.shellConfig?.conversationDatabase?.url,runtimeStateDatabase:this.config.shellConfig?.runtimeStateDatabase?.url})}createShell(e,t){this.shell=Re.createFresh(jl(this.config,e),void 0,{...t?.processRole&&{processRole:t.processRole},...t?.peerChannel&&{peerChannel:t.peerChannel}})}async registerCLIInterface(){if(!this.hasCLI)return;let e=this.getShell().getPluginManager(),{CLIInterface:t}=await import("./index-3tehtce3.js"),r=new t(this.config.cliConfig);e.registerPlugin(r)}async initialize(e,t){if(!this.shell){if(!t?.migrationsCompleted)await this.migrate();this.createShell(e,t)}await this.registerCLIInterface(),await this.getShell().initialize(e)}async start(){if(this.stopPromise)return;this.setupSignalHandlers()}stop(){return this.stopPromise??=this.stopApp(),this.stopPromise}async stopApp(){await this.closeSignalScope(),await this.shell?.shutdown()}async run(e){let r={debug:x.DEBUG,info:x.INFO,warn:x.WARN,error:x.ERROR}[this.config.logLevel??"info"]??x.INFO,i=z.createFresh({level:r,context:this.config.name,useStderr:this.hasCLI});if(this.hasCLI)z.getInstance().setUseStderr(!0);try{await this.initialize(void 0,e),await this.start(),e?.onRuntimeReady?.(),i.info(`\u2705 ${this.config.name} v${this.config.version} ready`),process.stdin.resume()}catch(n){i.error(`\u274C Failed to start ${this.config.name}:`,n),process.exit(1)}}static async run(e,t,r){await pr.create(e,t).run(r)}setupSignalHandlers(){if(this.signalScope)return;let e=y.runSync(k.make()),t=()=>{this.requestGracefulShutdown("SIGINT")},r=()=>{this.requestGracefulShutdown("SIGTERM")},i=dr(["SIGINT"],t),n=dr(["SIGTERM"],r);y.runSync(k.addFinalizer(e,y.sync(()=>{n(),i()}))),this.signalScope=e}requestGracefulShutdown(e){if(this.signalShutdownFiber)return;let t=z.getInstance();t.info(`
19
+ `)}var ue="system",Il=s.object({toolName:s.string(),args:s.unknown(),...Jo.partial().shape});function pt(e,t,r,i,n){for(let o of e)try{t(o)}catch{n.debug(`System ${i} ${r(o)} already registered, skipping`)}}function Ho(e,t,r,i){let n=Bo(e);pt(n,(d)=>t.registerTool(ue,d),(d)=>d.name,"tool",i);let o=r.subscribe(qo.toolExecute(ue),async(d)=>{let p=Il.safeParse(d.payload);if(!p.success)return{success:!1,error:"Invalid system tool execute payload"};let{toolName:g,args:f,interfaceType:m,actor:h,conversationId:I,channelId:v,userPermissionLevel:b}=p.data,S=n.find((O)=>O.name===g);if(!S)return{success:!1,error:`System tool not found: ${g}`};let w={interfaceType:m??"system",actor:h??{kind:"service",serviceId:"system"}};if(I)w.conversationId=I;if(v)w.channelId=v;if(b)w.userPermissionLevel=b;return{success:!0,data:await S.handler(f,w)}});i.debug(`Registered ${n.length} system tools`);let a=_o(e);pt(a,(d)=>t.registerResource(ue,d),(d)=>d.uri,"resource",i),i.debug(`Registered ${a.length} system resources`);let c=Wo(e);pt(c,(d)=>t.registerResourceTemplate(ue,d),(d)=>d.uriTemplate,"resource template",i),i.debug(`Registered ${c.length} system resource templates`);let l=Fo(e);pt(l,(d)=>t.registerPrompt(ue,d),(d)=>d.name,"prompt",i),i.debug(`Registered ${l.length} system prompts`);let u=No(e);try{t.registerInstructions(ue,u)}catch{i.debug("System instructions already registered, skipping")}return i.debug("Registered system instructions"),o}function Yo(e){let{services:t,jobs:r,analytics:i,query:n,getAppInfo:o}=e,a=t.jobQueueService,c=t.logger.child("system"),l=Ho({entityService:t.entityService,entityRegistry:t.entityRegistry,jobs:{...r,enqueue:Go(a,"system",!1),enqueueBatch:Qo(r,"system"),registerHandler:Ko(a,"system")},conversationService:t.conversationService,runtimeUploads:t.runtimeUploadRegistry,attachments:mt(t.attachmentRegistry),logger:c,query:n,getIdentity:()=>t.identityService.getCharacter(),getProfile:()=>t.profileService.getProfile(),getAppInfo:o,searchLimit:10,analytics:i,permissionService:t.permissionService},t.mcpService,t.messageBus,c);t.disposables.push(l)}class ar{scope;closePromise=null;closed=!1;constructor(){this.scope=y.runSync(k.make())}buildLayer(e){this.assertOpen();let t=y.runSyncExit(_.buildWithScope(e,this.scope));if(E.isFailure(t))throw q.squash(t.cause);return t.value}addFinalizer(e){this.assertOpen(),y.runSync(k.addFinalizer(this.scope,y.promise(async()=>{await e()})))}addSyncFinalizer(e){this.assertOpen(),y.runSync(k.addFinalizer(this.scope,y.sync(()=>{e()})))}async fork(e){if(this.closed)throw Error("Cannot start background work after shell shutdown");await y.runPromise(y.forkIn(e,this.scope))}close(e=E.void){if(this.closePromise)return this.closePromise;if(this.closed)return Promise.resolve();return this.closed=!0,this.closePromise=y.runPromise(k.close(this.scope,e)),this.closePromise}closeSync(e){if(this.closed)return;this.closed=!0,y.runSync(k.close(this.scope,e))}assertOpen(){if(this.closed)throw Error("Cannot register cleanup after shell shutdown")}}class Re{config;services;lifecycle;bootloader;initialized=!1;lifecycleState="constructed";bootMode;bootPromise=null;shutdownPromise=null;analyticsRegistry;bootTime=Date.now();endpointRegistry=new Jt;interactionRegistry=new Ht;httpRouteRegistry=Ke.createFresh();jobs;static createFresh(e,t,r){return new Re(ke(e),t,r)}constructor(e,t,r){this.config=e,this.lifecycle=new ar,ts(this,()=>this.httpRouteRegistry.getSnapshot());let i=t?.logger??z.getInstance(),n=Je.createFresh(i,this.config,r?.processRole,r?.peerChannel);try{this.services=n.initializeServices(this.lifecycle,t),this.jobs=xn(this.services.batchJobManager,this.services.jobQueueService),this.analyticsRegistry=Pn(this.services.entityRegistry),this.bootloader=new Nt(this.config,this.services,this.lifecycle,n,r?.processRole,{registerCoreDataSources:()=>wr(this.services,this.config),finalizeHttpRoutes:()=>{this.httpRouteRegistry.finalize(Dn(this.services.pluginManager))},registerSystemCapabilities:()=>Yo({services:this.services,jobs:this.jobs,analytics:this.analyticsRegistry,query:(o,a)=>this.query(o,a),getAppInfo:()=>this.getAppInfo()}),createProjectionInputContext:()=>({entities:this.services.entityService,resolvePrompt:(o,a)=>Ee(this.services.entityService,o,a),appInfo:()=>this.getAppInfo(),identityInput:()=>{let o=this.getIdentity(),a=this.getProfile();return Xo.parse({brainName:o.name,role:o.role,purpose:o.purpose,values:o.values,profileName:a.name,...a.description!==void 0?{profileDescription:a.description}:{},...a.organization!==void 0?{profileOrganization:a.organization}:{}})}}),createProjectionExecutionContext:()=>({ai:es(this),logger:this.services.logger.child("ProjectionRuntime")}),...t?.projectionRuntime&&{projectionRuntime:t.projectionRuntime}}),n.wireShell(this.services,this),On(this.lifecycle,this.services)}catch(o){try{this.lifecycle.closeSync(E.fail(o))}catch(a){i.error("Failed to roll back Shell service construction",a)}throw o}}getAnalyticsRegistry(){return this.analyticsRegistry}async initialize(e){this.services.logger.debug("Shell.initialize() called");let t=e?.mode;if(this.lifecycleState==="running")return this.services.logger.warn("Shell already initialized"),Promise.resolve();if(this.lifecycleState==="booting"){if(this.bootMode!==t)return Promise.reject(Error(`Shell is already initializing in ${this.bootMode??"normal"} mode; cannot join ${t??"normal"} mode`));return this.bootPromise??Promise.resolve()}if(this.lifecycleState==="closing"||this.lifecycleState==="closed")return Promise.reject(Error("Cannot initialize a closing shell"));if(this.lifecycleState==="failed")return Promise.reject(Error("Cannot initialize a shell after boot failure"));return this.lifecycleState="booting",this.bootMode=t,this.bootPromise=this.boot(e),this.bootPromise}async boot(e){try{if(await this.bootloader.boot(e),this.lifecycleState==="booting"){if(this.lifecycleState="running",this.initialized=!0,e?.mode===void 0)await this.services.messageBus.send({type:B.shellReady,payload:{timestamp:new Date().toISOString()},sender:"shell",broadcast:!0}),this.services.logger.debug("Emitted shell ready event")}}catch(t){if(this.initialized=!1,this.services.logger.error("Failed to initialize Shell",t),this.lifecycleState!=="closing")this.lifecycleState="failed";try{await this.lifecycle.close(E.fail(t))}catch(r){this.services.logger.error("Failed to clean up Shell after initialization failure",r)}throw t}}registerTemplates(e,t){this.services.logger.debug("Registering templates",{pluginId:t,count:Object.keys(e).length});for(let[r,i]of Object.entries(e))this.registerTemplate(r,i,t)}shutdown(){return this.shutdownPromise??=this.shutdownShell(),this.shutdownPromise}async shutdownShell(){if(this.services.logger.debug("Shutting down Shell"),this.lifecycleState==="closed")return;let e=this.bootPromise;if(this.lifecycleState="closing",this.initialized=!1,e)try{await e}catch{}await this.lifecycle.close(),this.lifecycleState="closed",this.services.logger.debug("Shell shutdown complete")}async generateContent(e,t){return this.requireInitialized("Shell content generation"),Pr(this.services,e,t)}async query(e,t){this.requireInitialized("Shell query");let r=await this.getAppInfo(),i={...t,appInfo:r,timestamp:new Date().toISOString()},{conversationHistory:n,...o}=i;return Vo.parse(await this.generateContent({prompt:e,templateName:me.KNOWLEDGE_QUERY,...n&&{conversationHistory:n},data:o,interfacePermissionGrant:"public"}))}registerPlugin(e){this.requireInitialized("Plugin registration"),this.services.pluginManager.registerPlugin(e)}isInitialized(){return this.initialized}requireInitialized(e){if(!this.initialized)throw Error(`${e} attempted before initialization`)}getEntityService(){return this.services.entityService}getConversationService(){return this.services.conversationService}getEntityRegistry(){return this.services.entityRegistry}async generateObject(e,t,r){this.requireInitialized("Shell generateObject");let{object:i}=await this.services.aiService.generateObject("You are a helpful assistant. Respond with the requested structured data.",e,t,r);return{object:i}}async judge(e){return this.requireInitialized("Shell judge"),this.services.aiService.judge(e)}getAIService(){return this.services.aiService}generateImage(e,t){return this.services.aiService.generateImage(e,t)}canGenerateImages(){return this.services.aiService.canGenerateImages()}getPluginManager(){return this.services.pluginManager}getContentService(){return this.services.contentService}getRenderService(){return this.services.renderService}getAttachmentRegistry(){return mt(this.services.attachmentRegistry)}getRuntimeUploadRegistry(){return rs(this.services.runtimeUploadRegistry)}getRuntimeState(){return this.services.runtimeStateService}getRecurringChecks(e){return this.services.recurringCheckService.namespace(e)}isJobQueueWorkerRunning(){return this.services.jobQueueWorker.isWorkerRunning()}getMessageBus(){return this.services.messageBus}getLogger(){return this.services.logger}getJobQueueService(){return this.services.jobQueueService}getMCPService(){return this.services.mcpService}listToolsForPermissionLevel(e){return this.services.mcpService.listToolsForPermissionLevel(e).map(({pluginId:t,tool:r})=>({name:r.name,description:r.description,pluginId:t}))}getPermissionService(){return this.services.permissionService}getAgentService(){return this.services.agentService}registerTools(e,t){for(let r of t)this.services.mcpService.registerTool(e,r)}registerResources(e,t){for(let r of t)this.services.mcpService.registerResource(e,r)}registerResourceTemplate(e,t){this.services.mcpService.registerResourceTemplate(e,t)}registerPrompt(e,t){this.services.mcpService.registerPrompt(e,t)}registerInstructions(e,t){if(this.services.mcpService.registerInstructions(e,t),this.initialized)this.services.agentService.invalidateAgent()}async unregisterPluginCapabilities(e){this.services.mcpService.unregisterPlugin?.(e),this.services.jobQueueService.unregisterPluginHandlers(e),this.endpointRegistry.unregister(e),this.interactionRegistry.unregister(e);for(let r of this.services.templateRegistry.getNames())if(r.startsWith(`${e}:`))this.services.templateRegistry.unregister(r);let t=this.config.evalHandlerRegistry;if(t){for(let r of t.list())if(r.pluginId===e)t.unregister(e,r.handlerId)}this.services.agentService.invalidateAgent(),await this.services.recurringCheckService.unregisterPlugin(e)}getPluginPackageName(e){return this.services.pluginManager.getPluginPackageName(e)}hasPlugin(e){return this.services.pluginManager.hasPlugin(e)}getPluginHttpRouteManifest(){return this.httpRouteRegistry.getManifest()}getPluginApiRoutes(){return this.httpRouteRegistry.getApiRoutes()}getPluginWebRoutes(){return this.httpRouteRegistry.getWebRoutes()}registerDaemon(e,t,r){this.services.daemonRegistry.register(e,t,r)}registerEndpoint(e){this.endpointRegistry.register(e)}listEndpoints(){return this.endpointRegistry.list()}registerInteraction(e){this.interactionRegistry.register(e)}listInteractions(){return this.interactionRegistry.list()}registerTemplate(e,t,r){let i=r?`${r}:${e}`:`shell:${e}`;this.services.templateRegistry.register(i,t),this.services.logger.debug(`Registered template: ${i}`)}getTemplate(e){return this.services.templateRegistry.get(e)}getDataSourceRegistry(){return this.services.dataSourceRegistry}getIdentity(){return this.services.identityService.getCharacter()}getProfile(){return this.services.profileService.getProfile()}getProfileKindRegistry(){return this.services.profileKindRegistry}getChannelRegistry(){return this.services.channelRegistry}getInboxRegistry(){return this.services.inboxRegistry}getInboxFollowUpRegistry(){return this.services.inboxFollowUpRegistry}getOperationalHealthRegistry(){return this.services.operationalHealthRegistry}getAccountSettingsRegistry(){return this.services.accountSettingsRegistry}getDomain(){return this.config.siteBaseUrl}getLocalSiteUrl(){return this.config.localSiteUrl}shouldPreferLocalUrls(){return this.config.preferLocalUrls}getThemeCSS(){return this.config.themeCSS}getSpaces(){return this.config.spaces}getDataDir(){return this.config.dataDir}getGitBrokerSocket(){return this.config.gitBrokerSocket}getGitBrokerCheckout(){return this.config.gitBrokerCheckout}registerEvalHandler(e,t,r){this.config.evalHandlerRegistry?.register(e,t,r)}async getAppInfo(){return hr({config:this.config,services:this.services,bootTime:this.bootTime,endpoints:()=>this.listEndpoints(),interactions:()=>this.listInteractions()})}getRuntimeReadiness(){return br(this.services)}}var is={kind:"service",serviceId:"brain-cli"},cr=`${is.kind}:${is.serviceId}`;var wl=s.object({provider:s.enum(["hetzner","docker"]).default("hetzner"),serverSize:s.string().default("cx33"),location:s.string().default("fsn1"),domain:s.string().optional(),docker:s.object({enabled:s.boolean().default(!0),image:s.string().optional()}).prefault({}),ports:s.object({default:s.number().default(3333),preview:s.number().default(4321),production:s.number().default(8080)}).prefault({}),cdn:s.object({enabled:s.boolean().default(!1),provider:s.enum(["bunny","none"]).default("none")}).prefault({}),dns:s.object({enabled:s.boolean().default(!1),provider:s.enum(["bunny","none"]).default("none")}).prefault({}),paths:s.object({install:s.string().optional(),data:s.string().optional()}).prefault({})}),os=s.object({name:s.string().default("brain-app"),version:s.string().default("1.0.0"),database:s.string().optional(),aiApiKey:s.string().optional(),aiImageKey:s.string().optional(),aiModel:s.string().optional(),aiReasoningEffort:se.optional(),logLevel:oe.optional(),logFile:s.string().optional(),profileKind:s.string().trim().min(1).optional(),plugins:s.array(Te).default([]),spaces:s.array(s.string()).default([]),identity:ns.optional(),agentInstructions:s.array(s.string()).optional(),deployment:wl.prefault({})});async function hs(e,t){await Q({label:"entity",config:e,schema:{assets:as,entities:ss,entityMutationReceipts:cs,projectionDirtyInputs:ls,projectionWaves:us,projectionIncidents:ds,projectionWaveInputs:ps,projectionWaveRules:ms,projectionRuleMemos:gs},migrationsFolder:K(import.meta.url,"entity-service"),authTokenEnv:"DATABASE_AUTH_TOKEN",logger:t,afterMigrate:fs})}async function bs(e,t){await Q({label:"job-queue",config:e,schema:{jobQueue:ys,jobWorkerSessions:vs},migrationsFolder:K(import.meta.url,"job-queue"),authTokenEnv:"JOB_QUEUE_DATABASE_AUTH_TOKEN",logger:t})}async function ws(e,t){await Q({label:"conversation",config:e,schema:{conversations:Ss,messages:Rs,summaryTracking:Is},migrationsFolder:K(import.meta.url,"conversation-service"),authTokenEnv:"CONVERSATION_DATABASE_AUTH_TOKEN",logger:t})}async function Ps(e,t){await Q({label:"runtime-state",config:e,schema:{runtimeStateRecords:R},migrationsFolder:K(import.meta.url,"runtime-state"),authTokenEnv:"RUNTIME_STATE_DATABASE_AUTH_TOKEN",logger:t})}import{mkdir as lr}from"fs/promises";import{isAbsolute as Pl}from"path";function Cs(e=process.env){return{dataDir:e.XDG_DATA_HOME??"./data",cacheDir:e.XDG_CACHE_HOME??"./cache",distDir:"./dist"}}function Ts(e=process.env){let t=e.BRAIN_GIT_BROKER_CHECKOUT;if(!t)return;if(!Pl(t))throw Error(`Git broker checkout path must be absolute: ${t}`);return t}function ks(e=process.env){let t=e.BRAIN_GIT_BROKER_SOCKET;if(!t)return;let r=107;if(Buffer.byteLength(t)>r)throw Error(`Git broker socket path is too long for a unix socket (${Buffer.byteLength(t)} > ${r} bytes): ${t}`);return t}function Es(e=process.env){return Y(Cs(e))}async function xs(e=process.env){let t=Cs(e);try{await lr(t.dataDir,{recursive:!0}),await lr(t.cacheDir,{recursive:!0}),await lr(t.distDir,{recursive:!0})}catch(r){let i=r instanceof Error&&r.message.includes("EACCES")?`Cannot create data directories \u2014 permission denied. Run from a writable directory or check permissions on ${t.dataDir}`:`Cannot create data directories: ${P(r)}`;throw Error(i,{cause:r})}return Y(t)}class ur{logger;migrations;constructor(e,t){this.logger=e,this.migrations=t??{getStandardConfigWithDirectories:()=>xs(),migrateEntities:hs,migrateJobQueue:bs,migrateConversations:ws,migrateRuntimeState:Ps}}async runAllMigrations(e){this.logger.debug("Running database migrations...");let t=await this.migrations.getStandardConfigWithDirectories();if(e?.database)t.database.url=e.database;if(e?.jobQueueDatabase)t.jobQueueDatabase.url=e.jobQueueDatabase;if(e?.conversationDatabase)t.conversationDatabase.url=e.conversationDatabase;if(e?.runtimeStateDatabase)t.runtimeStateDatabase.url=e.runtimeStateDatabase;await this.migrateEntityDatabase(t),await this.migrateJobQueueDatabase(t),await this.migrateConversationDatabase(t),await this.migrateRuntimeStateDatabase(t),this.logger.debug("All database migrations completed successfully")}async migrateEntityDatabase(e){this.logger.debug("Running entity database migrations..."),await this.migrations.migrateEntities({url:e.database.url,...e.database.authToken&&{authToken:e.database.authToken}},this.logger)}async migrateJobQueueDatabase(e){this.logger.debug("Running job queue database migrations..."),await this.migrations.migrateJobQueue({url:e.jobQueueDatabase.url,...e.jobQueueDatabase.authToken&&{authToken:e.jobQueueDatabase.authToken}},this.logger)}async migrateConversationDatabase(e){this.logger.debug("Running conversation database migrations..."),await this.migrations.migrateConversations({url:e.conversationDatabase.url,...e.conversationDatabase.authToken&&{authToken:e.conversationDatabase.authToken}},this.logger)}async migrateRuntimeStateDatabase(e){this.logger.debug("Running runtime state database migrations..."),await this.migrations.migrateRuntimeState({url:e.runtimeStateDatabase.url,...e.runtimeStateDatabase.authToken&&{authToken:e.runtimeStateDatabase.authToken}},this.logger)}}var Cl="NODE_ENV";function Tl(){return process.env[Cl]}function js(){return Tl()!=="production"}var El="startup-check";function xl(e){let r={...os.parse(e??{}),plugins:e?.plugins??[]};if(e?.permissions)r.permissions=e.permissions;if(e?.spaces)r.spaces=e.spaces;if(e?.cliConfig)r.cliConfig=e.cliConfig;if(e?.shellConfig)r.shellConfig=e.shellConfig;return r}function jl(e,t){let r={plugins:e.plugins??[],...e.shellConfig};return Al(r),Dl(e,r),zl(e,r,t),Ol(e,r),Ml(e,r),Ll(e,r),Ul(e,r),Zl(e,r),$l(e,r),r}function Al(e){let t=Es();e.database??=t.database,e.jobQueueDatabase??=t.jobQueueDatabase,e.conversationDatabase??=t.conversationDatabase,e.runtimeStateDatabase??=t.runtimeStateDatabase,e.embeddingDatabase??=t.embeddingDatabase,e.embedding??=t.embedding,e.gitBrokerSocket??=ks(),e.gitBrokerCheckout??=Ts()}function Dl(e,t){if(e.database)t.database={url:e.database};if(e.profileKind)t.profileKind=e.profileKind;t.features={}}function zl(e,t,r){let i=r?.mode==="startup-check";if(!e.aiApiKey&&!e.aiImageKey&&!e.aiModel&&!e.aiReasoningEffort&&!i)return;t.ai={...t.ai,...i&&!t.ai?.apiKey&&{apiKey:El},...e.aiApiKey&&{apiKey:e.aiApiKey},...e.aiImageKey&&{imageApiKey:e.aiImageKey},...e.aiModel&&{model:e.aiModel},...e.aiReasoningEffort&&{reasoningEffort:e.aiReasoningEffort}}}function Ol(e,t){if(!e.logLevel&&!e.logFile)return;t.logging={level:e.logLevel??"info",format:"text",context:e.name,...e.logFile&&{file:e.logFile}}}function Ml(e,t){let r=e.permissions?.rules??[];t.permissions={...e.permissions,rules:r.some((i)=>i.pattern===cr)?r:[{pattern:cr,level:"admin"},...r]}}function Ll(e,t){if(e.spaces)t.spaces=e.spaces}function Ul(e,t){if(e.identity)t.identity=e.identity}function Zl(e,t){if(e.agentInstructions)t.agentInstructions=e.agentInstructions}function $l(e,t){if(t.name=e.name,t.version=e.version,e.deployment.domain)t.siteBaseUrl=e.deployment.domain;t.localSiteUrl=`http://localhost:${e.deployment.ports.production}`,t.preferLocalUrls=js()}class pr{shell=null;config;signalScope=null;signalShutdownFiber=null;stopPromise=null;hasCLI=!1;static create(e,t){return new pr(xl(e),t)}constructor(e,t){if(this.config=e,this.hasCLI=process.argv.slice(2).includes("--cli"),t)this.shell=t}async migrate(){let e=z.getInstance();await new ur(e).runAllMigrations({database:this.config.shellConfig?.database?.url??this.config.database,jobQueueDatabase:this.config.shellConfig?.jobQueueDatabase?.url,conversationDatabase:this.config.shellConfig?.conversationDatabase?.url,runtimeStateDatabase:this.config.shellConfig?.runtimeStateDatabase?.url})}createShell(e,t){this.shell=Re.createFresh(jl(this.config,e),void 0,{...t?.processRole&&{processRole:t.processRole},...t?.peerChannel&&{peerChannel:t.peerChannel}})}async registerCLIInterface(){if(!this.hasCLI)return;let e=this.getShell().getPluginManager(),{CLIInterface:t}=await import("./index-7c71z71j.js"),r=new t(this.config.cliConfig);e.registerPlugin(r)}async initialize(e,t){if(!this.shell){if(!t?.migrationsCompleted)await this.migrate();this.createShell(e,t)}await this.registerCLIInterface(),await this.getShell().initialize(e)}async start(){if(this.stopPromise)return;this.setupSignalHandlers()}stop(){return this.stopPromise??=this.stopApp(),this.stopPromise}async stopApp(){await this.closeSignalScope(),await this.shell?.shutdown()}async run(e){let r={debug:x.DEBUG,info:x.INFO,warn:x.WARN,error:x.ERROR}[this.config.logLevel??"info"]??x.INFO,i=z.createFresh({level:r,context:this.config.name,useStderr:this.hasCLI});if(this.hasCLI)z.getInstance().setUseStderr(!0);try{await this.initialize(void 0,e),await this.start(),e?.onRuntimeReady?.(),i.info(`\u2705 ${this.config.name} v${this.config.version} ready`),process.stdin.resume()}catch(n){i.error(`\u274C Failed to start ${this.config.name}:`,n),process.exit(1)}}static async run(e,t,r){await pr.create(e,t).run(r)}setupSignalHandlers(){if(this.signalScope)return;let e=y.runSync(k.make()),t=()=>{this.requestGracefulShutdown("SIGINT")},r=()=>{this.requestGracefulShutdown("SIGTERM")},i=dr(["SIGINT"],t),n=dr(["SIGTERM"],r);y.runSync(k.addFinalizer(e,y.sync(()=>{n(),i()}))),this.signalScope=e}requestGracefulShutdown(e){if(this.signalShutdownFiber)return;let t=z.getInstance();t.info(`
20
20
  Received ${e}, shutting down gracefully...`);let r=y.tryPromise({try:()=>this.stop(),catch:(i)=>i}).pipe(y.match({onFailure:(i)=>{t.error("Error during shutdown:",i),process.exit(1)},onSuccess:()=>{process.exit(0)}}));this.signalShutdownFiber=y.runFork(r)}async closeSignalScope(){let e=this.signalScope;if(this.signalScope=null,e)await y.runPromise(k.close(e,E.void))}getShell(){if(!this.shell)throw Error("Shell not initialized. Call initialize() first.");return this.shell}}
21
21
  export{oe as S,se as T,ve as U,ao as V,uo as W,st as X,Vc as Y,Xt as Z,el as _,at as $,tl as aa,Yg as ba,bo as ca,nl as da,tr as ea,rr as fa,ol as ga,sl as ha,al as ia,El as ja,xl as ka,jl as la,pr as ma};
22
22
 
23
23
  //# debugId=13A1E55F0056C69A64756E2164756E21
24
- //# sourceMappingURL=index-xjm4xb2a.js.map
24
+ //# sourceMappingURL=index-v5j8cmga.js.map
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{S as l,T as y}from"./index-xjm4xb2a.js";import{Dl as R,Ul as z,eo as a}from"./index-trpy6wwa.js";import{rq as i}from"./index-5e5vv8yh.js";import{Lt as c,Mt as h,Nt as C,Pq as e}from"./index-f90s4k5m.js";function _(t,n={}){if(!a(t))throw Error("use() expects a package definition returned by a @rizom/brain define helper");return Object.freeze({kind:"rizom-configured-plugin",definition:t,config:Object.freeze({...n})})}function O(t){if(t===null||typeof t!=="object")return!1;return Reflect.get(t,"kind")==="rizom-configured-plugin"&&a(Reflect.get(t,"definition"))&&typeof Reflect.get(t,"config")==="object"}var Ee=e.array(e.string()),Ie=e.record(e.string(),e.unknown()),Ae=e.unknown();var Be=e.enum(["eval"]),p=e.enum(["person","team","organization"]);function K(t){if(t.bundleContract?.trim().length===0)throw Error("Brain bundleContract must not be empty");return t}function f(t){if(Array.isArray(t))return t.map((n)=>f(n));if(i(t))return Object.fromEntries(Object.entries(t).map(([n,o])=>[n,f(o)]));return t}function u(t){return f(t)}var r=e.string().min(1),V=e.strictObject({member:r,value:e.record(e.string(),e.unknown()),overrides:r.optional()}),G=e.custom(i,{message:"Expected an opaque permission config object"}),q=e.strictObject({member:r,config:G,overrides:r.optional()}),U=e.strictObject({id:r,members:e.array(r),config:e.array(V).optional(),permissions:e.array(q).optional(),agentInstructions:e.array(e.string().min(1)).optional(),evalDisable:e.array(r).optional()});function E(t,n,o,Z){let w=new Set;for(let[j,g]of t.entries()){if(w.has(g))Z.addIssue({code:e.ZodIssueCode.custom,message:`Duplicate ${n} "${g}"`,path:[o,j]});w.add(g)}}var H=U.superRefine((t,n)=>{E(t.members,"member","members",n),E(t.evalDisable??[],"eval exclusion","evalDisable",n)});function I(t){return u(H.parse(t))}function J(t){if(t===void 0)return[];return Array.isArray(t)?t:[t]}var W=e.record(e.string(),e.unknown()),ut=e.record(e.string(),e.unknown()),Y=e.enum(["eval"]),Q=c,s=h,X=e.strictObject({create:s.optional(),update:s.optional(),delete:s.optional(),extract:s.optional(),publish:s.optional()}),ee=e.record(e.string(),X),A=W.superRefine((t,n)=>{if(typeof t.package!=="string")return;n.addIssue({code:"custom",message:'"package" uses the removed alpha external-plugin contract. Default-export a declarative package definition from a @rizom/brain define helper and compose it with use() in defineBrain().'})}),mt=e.strictObject({brain:e.string().optional(),bundleContract:e.string().trim().min(1).optional(),anchor:p.optional(),site:e.object({package:e.string().optional(),variant:e.string().optional(),theme:e.string().optional(),themeOverride:e.string().optional()}).optional(),name:e.string().optional(),kind:e.string().trim().min(1).optional(),logLevel:l.optional(),logFile:e.string().optional(),port:e.number().optional(),domain:e.string().optional(),database:e.string().optional(),embedding:e.strictObject({enabled:e.boolean().optional()}).optional(),model:e.string().optional(),reasoningEffort:y.optional(),bundles:e.array(e.string().min(1)).optional(),mode:Y.optional(),add:e.array(e.string()).optional(),remove:e.array(e.string()).optional(),admins:e.array(e.string()).optional(),anchors:e.array(e.string()).optional(),trusted:e.array(e.string()).optional(),spaces:e.array(e.string()).optional(),plugins:e.record(e.string(),A).optional(),permissions:e.object({admins:e.array(e.string()).optional(),anchors:e.array(e.string()).optional(),trusted:e.array(e.string()).optional(),rules:e.array(e.object({pattern:e.string(),level:Q})).optional(),entityActions:ee.optional()}).optional()});var Pt=e.record(e.string(),e.unknown());var ne=e.strictObject({pattern:e.string(),level:c}),Et=e.strictObject({admins:e.array(e.string()).optional(),anchors:e.array(e.string()).optional(),trusted:e.array(e.string()).optional(),rules:e.array(ne).optional(),entityActions:C.optional()});var D=`/* ============================================
2
+ import{S as l,T as y}from"./index-v5j8cmga.js";import{Dl as R,Ul as z,eo as a}from"./index-ygy8j5wp.js";import{rq as i}from"./index-5e5vv8yh.js";import{Lt as c,Mt as h,Nt as C,Pq as e}from"./index-f90s4k5m.js";function _(t,n={}){if(!a(t))throw Error("use() expects a package definition returned by a @rizom/brain define helper");return Object.freeze({kind:"rizom-configured-plugin",definition:t,config:Object.freeze({...n})})}function O(t){if(t===null||typeof t!=="object")return!1;return Reflect.get(t,"kind")==="rizom-configured-plugin"&&a(Reflect.get(t,"definition"))&&typeof Reflect.get(t,"config")==="object"}var Ee=e.array(e.string()),Ie=e.record(e.string(),e.unknown()),Ae=e.unknown();var Be=e.enum(["eval"]),p=e.enum(["person","team","organization"]);function K(t){if(t.bundleContract?.trim().length===0)throw Error("Brain bundleContract must not be empty");return t}function f(t){if(Array.isArray(t))return t.map((n)=>f(n));if(i(t))return Object.fromEntries(Object.entries(t).map(([n,o])=>[n,f(o)]));return t}function u(t){return f(t)}var r=e.string().min(1),V=e.strictObject({member:r,value:e.record(e.string(),e.unknown()),overrides:r.optional()}),G=e.custom(i,{message:"Expected an opaque permission config object"}),q=e.strictObject({member:r,config:G,overrides:r.optional()}),U=e.strictObject({id:r,members:e.array(r),config:e.array(V).optional(),permissions:e.array(q).optional(),agentInstructions:e.array(e.string().min(1)).optional(),evalDisable:e.array(r).optional()});function E(t,n,o,Z){let w=new Set;for(let[j,g]of t.entries()){if(w.has(g))Z.addIssue({code:e.ZodIssueCode.custom,message:`Duplicate ${n} "${g}"`,path:[o,j]});w.add(g)}}var H=U.superRefine((t,n)=>{E(t.members,"member","members",n),E(t.evalDisable??[],"eval exclusion","evalDisable",n)});function I(t){return u(H.parse(t))}function J(t){if(t===void 0)return[];return Array.isArray(t)?t:[t]}var W=e.record(e.string(),e.unknown()),ut=e.record(e.string(),e.unknown()),Y=e.enum(["eval"]),Q=c,s=h,X=e.strictObject({create:s.optional(),update:s.optional(),delete:s.optional(),extract:s.optional(),publish:s.optional()}),ee=e.record(e.string(),X),A=W.superRefine((t,n)=>{if(typeof t.package!=="string")return;n.addIssue({code:"custom",message:'"package" uses the removed alpha external-plugin contract. Default-export a declarative package definition from a @rizom/brain define helper and compose it with use() in defineBrain().'})}),mt=e.strictObject({brain:e.string().optional(),bundleContract:e.string().trim().min(1).optional(),anchor:p.optional(),site:e.object({package:e.string().optional(),variant:e.string().optional(),theme:e.string().optional(),themeOverride:e.string().optional()}).optional(),name:e.string().optional(),kind:e.string().trim().min(1).optional(),logLevel:l.optional(),logFile:e.string().optional(),port:e.number().optional(),domain:e.string().optional(),database:e.string().optional(),embedding:e.strictObject({enabled:e.boolean().optional()}).optional(),model:e.string().optional(),reasoningEffort:y.optional(),bundles:e.array(e.string().min(1)).optional(),mode:Y.optional(),add:e.array(e.string()).optional(),remove:e.array(e.string()).optional(),admins:e.array(e.string()).optional(),anchors:e.array(e.string()).optional(),trusted:e.array(e.string()).optional(),spaces:e.array(e.string()).optional(),plugins:e.record(e.string(),A).optional(),permissions:e.object({admins:e.array(e.string()).optional(),anchors:e.array(e.string()).optional(),trusted:e.array(e.string()).optional(),rules:e.array(e.object({pattern:e.string(),level:Q})).optional(),entityActions:ee.optional()}).optional()});var Pt=e.record(e.string(),e.unknown());var ne=e.strictObject({pattern:e.string(),level:c}),Et=e.strictObject({admins:e.array(e.string()).optional(),anchors:e.array(e.string()).optional(),trusted:e.array(e.string()).optional(),rules:e.array(ne).optional(),entityActions:C.optional()});var D=`/* ============================================
3
3
  THEME BASE - Shared utilities for all themes
4
4
  ============================================
5
5
  This file contains CSS that is IDENTICAL across all themes.
@@ -528,4 +528,4 @@ import{S as l,T as y}from"./index-xjm4xb2a.js";import{Dl as R,Ul as z,eo as a}fr
528
528
  `+t}var B=e.custom((t)=>z.safeParse(t).success),se=e.custom((t)=>{if(!i(t))return!1;let{plugin:n,...o}=t;if(n!==void 0&&typeof n!=="function")return!1;return R.safeParse(o).success});var le=e.looseObject({id:e.string().min(1)}),de=e.looseObject({label:e.string().min(1)}),ge=e.custom((t)=>typeof t==="function"),pe=e.looseObject({layouts:e.record(e.string(),e.unknown()).optional(),plugin:ge.optional(),pluginConfig:e.record(e.string(),e.unknown()).optional(),routes:e.array(le).optional(),entityDisplay:e.record(e.string(),de).optional(),content:e.unknown().optional(),themeOverride:e.string().optional(),headScripts:e.array(e.string()).optional(),staticAssets:e.record(e.string(),e.string()).optional()}),Ut=e.custom((t)=>pe.safeParse(t).success);var In=e.looseObject({name:e.string().min(1),version:e.string().min(1),dependencies:e.record(e.string(),e.string()).optional(),peerDependencies:e.record(e.string(),e.string()).optional()});export{_ as M,O as N,K as O,I as P,J as Q,re as R};
529
529
 
530
530
  //# debugId=0C3DDF1C97B4371864756E2164756E21
531
- //# sourceMappingURL=index-7cvf441y.js.map
531
+ //# sourceMappingURL=index-x5z9qdh9.js.map
@@ -139,9 +139,7 @@ ${e}
139
139
  \`\`\``}hasFields(e,t){return mR(e,t)}formatError(e){return`Error: ${e}`}}var kst=o.object({message:o.string()});var L2=o.record(o.string(),o.unknown());class Bl{codec;config;processor=SS();constructor(e,t){this.config=t,this.codec=o.codec(o.string(),e,{decode:(n)=>this.readSections(n),encode:(n)=>this.render(n)})}getLabels(){let e={};for(let t of this.config.mappings)e[t.key]=t.label;return e}generateBodyTemplate(){if(this.config.mappings.length===0)return"";let e=[];for(let t of this.config.mappings)e.push(`## ${t.label}`,"",`<!-- Write your ${t.label.toLowerCase()} here -->`,"");return e.join(`
140
140
  `).trimEnd()+`
141
141
  `}format(e){try{return o.encode(this.codec,e)}catch(t){throw Error(`Failed to format structured content: ${this.describeError(t)}`,{cause:t})}}parse(e){try{return o.decode(this.codec,e)}catch(t){throw Error(`Failed to parse structured content: ${this.describeError(t)}`,{cause:t})}}render(e){let t=[`# ${this.config.title}`,""];for(let n of this.config.mappings)this.formatField(e,n,t,2);return t.join(`
142
- `)}readSections(e){let t=this.processor.parse(e),n=this.extractSections(t,2);return this.buildDataFromSections(n,this.config.mappings)}describeError(e){if(e instanceof o.ZodError)return e.issues.map((t)=>`${t.path.join(".")||"(root)"}: ${t.message}`).join("; ");return $e(e)}escapeBlockMarkup(e){return e.replace(/^(\s*)#/gm,"$1\\#")}formatField(e,t,n,r){let i="#".repeat(r)+" "+t.label,a=this.getValueByPath(e,t.key);if(t.type==="custom"&&t.formatter){if(a!==void 0&&a!==null){n.push(i,"");let s=t.formatter(a);if(s)n.push(s,"")}return}switch(t.type){case"string":case"number":if(a===void 0||a===null)break;n.push(i,this.escapeBlockMarkup(String(a)),"");break;case"object":if(a===void 0||a===null)break;if(n.push(i),t.children)for(let s of t.children)this.formatField(a,s,n,r+1);break;case"array":if(a===void 0||a===null)break;if(n.push(i,""),Array.isArray(a))if(t.itemType==="object"&&t.itemMappings)a.forEach((s,l)=>{if(n.push(`${"#".repeat(r+1)} ${t.label.slice(0,-1)} ${l+1}`),n.push(""),t.itemMappings)for(let c of t.itemMappings)this.formatField(s,c,n,r+2)});else{for(let s of a){let l=this.defaultArrayItemFormat(s);n.push(`- ${l}`)}n.push("")}break}}getValueByPath(e,t){let n=t.split("."),r=e;for(let i of n){let a=L2.safeParse(r);if(!a.success)return;r=a.data[i]}return r}defaultArrayItemFormat(e){if(typeof e==="string"||typeof e==="number")return String(e);return JSON.stringify(e)}extractSections(e,t){let n=new Map,r=null,i=[];for(let a of e.children)if(a.type==="heading"&&a.depth===t){if(r)n.set(r.toLowerCase(),i);r=this.getHeadingText(a),i=[]}else if(r)i.push(a);if(r)n.set(r.toLowerCase(),i);return n}extractSubsections(e,t){let n=new Map,r=null,i=[];for(let a of e)if(a.type==="heading"&&a.depth===t){if(r)n.set(r.toLowerCase(),i);r=this.getHeadingText(a),i=[]}else if(r)i.push(a);if(r)n.set(r.toLowerCase(),i);return n}textNodeSchema=o.object({type:o.literal("text"),value:o.string()});extractTextValue(e){let t=this.textNodeSchema.safeParse(e);return t.success?t.data.value:""}getHeadingText(e){return e.children.filter((n)=>n.type==="text").map((n)=>this.extractTextValue(n)).join("")}buildDataFromSections(e,t,n=2){let r={};for(let i of t){let a=e.get(i.label.toLowerCase());if(i.type==="custom"&&i.parser&&a){let s=this.getTextFromSection(a),l=i.parser(s);this.setValueByPath(r,i.key,l)}else if(i.type==="object"&&i.children&&a){let s=this.extractSubsections(a,n+1),l=this.buildDataFromSections(s,i.children,n+1);this.setValueByPath(r,i.key,l)}else if(i.type==="array"&&a)if(i.itemType==="object"&&i.itemMappings){let s=this.extractObjectArrayItems(a,n+1,i.itemMappings);this.setValueByPath(r,i.key,s)}else{let s=this.extractSimpleArrayItems(a);this.setValueByPath(r,i.key,i.itemType==="number"?s.map(Number):s)}else if(a){let s=this.getTextFromSection(a),l=i.type==="number"?Number(s):s;this.setValueByPath(r,i.key,l)}}return r}setValueByPath(e,t,n){let r=t.split("."),i=e;for(let s=0;s<r.length-1;s++){let l=r[s];if(!l)continue;let c=L2.safeParse(i[l]);if(c.success){i[l]=c.data,i=c.data;continue}let u={};i[l]=u,i=u}let a=r[r.length-1];if(a)i[a]=n}getTextFromSection(e){let t=[];for(let n of e)if(n.type==="paragraph"){let r=this.extractTextFromParagraph(n);if(r)t.push(r)}else if(n.type==="list"){let r=n;for(let i of r.children){let a=this.extractTextFromListItem(i);if(a)t.push(`- ${a}`)}}return t.join(`
143
- `)}extractTextFromParagraph(e){return this.extractInlineText(e.children).trim()}extractInlineText(e){let t=[];for(let n of e)if(n.type==="text")t.push(this.extractTextValue(n));else if(n.type==="emphasis"){let r=this.extractInlineText(n.children);if(r)t.push(`*${r}*`)}else if(n.type==="strong"){let r=this.extractInlineText(n.children);if(r)t.push(`**${r}**`)}return t.join("")}extractSimpleArrayItems(e){let t=[];for(let n of e)if(n.type==="list"){let r=n;for(let i of r.children){let a=this.extractTextFromListItem(i);if(a)t.push(a)}}return t}extractObjectArrayItems(e,t,n){let r=[],i=[],a=!1;for(let s of e)if(s.type==="heading"&&s.depth===t){if(a&&i.length>0){let l=this.extractSubsections(i,t+1),c=this.buildDataFromSections(l,n,t+1);r.push(c)}i=[],a=!0}else if(a)i.push(s);if(a&&i.length>0){let s=this.extractSubsections(i,t+1),l=this.buildDataFromSections(s,n,t+1);r.push(l)}return r}extractTextFromListItem(e){let t=[];for(let n of e.children)if(n.type==="paragraph"){let r=this.extractTextFromParagraph(n);if(r)t.push(r)}return t.join(`
144
- `)}}var qst=o.record(o.string(),o.unknown());class Tg{format(e){return e.message}parse(e){return{message:e.trim()}}}var Jhe=o.object({slug:o.string(),title:o.string(),type:o.string(),entityId:o.string(),contentHash:o.string()});var q2={name:"shell:knowledge-query",description:"Knowledge-aware query processing with entity search",basePrompt:`You are a personal knowledge assistant with access to the user's entities and data.
142
+ `)}readSections(e){let t=this.processor.parse(e),n=this.extractSections(t,2);return this.buildDataFromSections(n,this.config.mappings,e)}describeError(e){if(e instanceof o.ZodError)return e.issues.map((t)=>`${t.path.join(".")||"(root)"}: ${t.message}`).join("; ");return $e(e)}escapeBlockMarkup(e){return e.replace(/^(\s*)#/gm,"$1\\#")}formatField(e,t,n,r){let i="#".repeat(r)+" "+t.label,a=this.getValueByPath(e,t.key);if(t.type==="custom"&&t.formatter){if(a!==void 0&&a!==null){n.push(i,"");let s=t.formatter(a);if(s)n.push(s,"")}return}switch(t.type){case"string":case"number":if(a===void 0||a===null)break;n.push(i,this.escapeBlockMarkup(String(a)),"");break;case"object":if(a===void 0||a===null)break;if(n.push(i),t.children)for(let s of t.children)this.formatField(a,s,n,r+1);break;case"array":if(a===void 0||a===null)break;if(n.push(i,""),Array.isArray(a))if(t.itemType==="object"&&t.itemMappings)a.forEach((s,l)=>{if(n.push(`${"#".repeat(r+1)} ${t.label.slice(0,-1)} ${l+1}`),n.push(""),t.itemMappings)for(let c of t.itemMappings)this.formatField(s,c,n,r+2)});else{for(let s of a){let l=this.defaultArrayItemFormat(s);n.push(`- ${l}`)}n.push("")}break}}getValueByPath(e,t){let n=t.split("."),r=e;for(let i of n){let a=L2.safeParse(r);if(!a.success)return;r=a.data[i]}return r}defaultArrayItemFormat(e){if(typeof e==="string"||typeof e==="number")return String(e);return JSON.stringify(e)}extractSections(e,t){let n=new Map,r=null,i=[];for(let a of e.children)if(a.type==="heading"&&a.depth===t){if(r)n.set(r.toLowerCase(),i);r=this.getHeadingText(a),i=[]}else if(r)i.push(a);if(r)n.set(r.toLowerCase(),i);return n}extractSubsections(e,t){let n=new Map,r=null,i=[];for(let a of e)if(a.type==="heading"&&a.depth===t){if(r)n.set(r.toLowerCase(),i);r=this.getHeadingText(a),i=[]}else if(r)i.push(a);if(r)n.set(r.toLowerCase(),i);return n}textNodeSchema=o.object({type:o.literal("text"),value:o.string()});extractTextValue(e){let t=this.textNodeSchema.safeParse(e);return t.success?t.data.value:""}getHeadingText(e){return e.children.filter((n)=>n.type==="text").map((n)=>this.extractTextValue(n)).join("")}buildDataFromSections(e,t,n,r=2){let i={};for(let a of t){let s=e.get(a.label.toLowerCase());if(a.type==="custom"&&a.parser&&s){let l=this.getTextFromSection(s,n),c=a.parser(l);this.setValueByPath(i,a.key,c)}else if(a.type==="object"&&a.children&&s){let l=this.extractSubsections(s,r+1),c=this.buildDataFromSections(l,a.children,n,r+1);this.setValueByPath(i,a.key,c)}else if(a.type==="array"&&s)if(a.itemType==="object"&&a.itemMappings){let l=this.extractObjectArrayItems(s,r+1,a.itemMappings,n);this.setValueByPath(i,a.key,l)}else{let l=this.extractSimpleArrayItems(s,n);this.setValueByPath(i,a.key,a.itemType==="number"?l.map(Number):l)}else if(s){let l=this.getTextFromSection(s,n),c=a.type==="number"?Number(l):l;this.setValueByPath(i,a.key,c)}}return i}setValueByPath(e,t,n){let r=t.split("."),i=e;for(let s=0;s<r.length-1;s++){let l=r[s];if(!l)continue;let c=L2.safeParse(i[l]);if(c.success){i[l]=c.data,i=c.data;continue}let u={};i[l]=u,i=u}let a=r[r.length-1];if(a)i[a]=n}getTextFromSection(e,t){let n=e.filter((r)=>!this.isPlaceholderComment(r));return this.unescapeBlockMarkup(this.sourceOf(n,t))}sourceOf(e,t){let n=e[0]?.position?.start.offset,r=e.at(-1)?.position?.end.offset;if(n===void 0||r===void 0)return"";return t.slice(n,r).trim()}isPlaceholderComment(e){return e.type==="html"&&e.value.trim().startsWith("<!--")}unescapeBlockMarkup(e){return e.replace(/^(\s*)\\#/gm,"$1#")}extractSimpleArrayItems(e,t){let n=[];for(let r of e)if(r.type==="list"){let i=r;for(let a of i.children){let s=this.unescapeBlockMarkup(this.sourceOf(a.children,t));if(s)n.push(s)}}return n}extractObjectArrayItems(e,t,n,r){let i=[],a=[],s=!1;for(let l of e)if(l.type==="heading"&&l.depth===t){if(s&&a.length>0){let c=this.extractSubsections(a,t+1),u=this.buildDataFromSections(c,n,r,t+1);i.push(u)}a=[],s=!0}else if(s)a.push(l);if(s&&a.length>0){let l=this.extractSubsections(a,t+1),c=this.buildDataFromSections(l,n,r,t+1);i.push(c)}return i}}var qst=o.record(o.string(),o.unknown());class Tg{format(e){return e.message}parse(e){return{message:e.trim()}}}var Jhe=o.object({slug:o.string(),title:o.string(),type:o.string(),entityId:o.string(),contentHash:o.string()});var q2={name:"shell:knowledge-query",description:"Knowledge-aware query processing with entity search",basePrompt:`You are a personal knowledge assistant with access to the user's entities and data.
145
143
  Analyze the user's query and provide a helpful response based on available information.
146
144
 
147
145
  Instructions:
@@ -356,5 +354,5 @@ Result:`);if(n===-1)return;let r=e.slice(n+9).trim();if(!r)return;try{return JSO
356
354
  `)}function kqe(e){return e.split(`
357
355
  `).flatMap((t)=>{let n=t.match(Cqe);if(!n)return[];let r=(n[3]??"").split(",").map((i)=>i.trim()).filter(Boolean);return[{name:n[1]??"",description:n[2]??"",tags:r}]})}var DX=new Bl(Xw,{title:"Agent",mappings:[{key:"about",label:"About",type:"string"},{key:"skills",label:"Skills",type:"custom",formatter:Eqe,parser:kqe},{key:"notes",label:"Notes",type:"string"}]});function Rqe(e){return DX.format(e)}function Aqe(e){if(!e.trim())return Xw.parse({});try{return DX.parse(e)}catch{return Xw.parse({})}}import{EventEmitter as LX}from"events";var Dn={REGISTERED:"registered",INITIALIZED:"initialized",ERROR:"error",DISABLED:"disabled"},Oi={REGISTERED:"plugin:registered",BEFORE_INITIALIZE:"plugin:before_initialize",INITIALIZED:"plugin:initialized",ERROR:"plugin:error",DISABLED:"plugin:disabled"};class Mi extends Error{pluginId;constructor(e,t){super(`Plugin ${e}: ${t}`);this.name="PluginError",this.pluginId=e}}function NX(e,t){return Reflect.get(e,t,e)}function zX(e,t,n){if(typeof e!=="function")throw TypeError("Cannot apply a non-callable trapped member");return Reflect.apply(e,t,n)}class cj{scope;ingress=new Set;closePromise=null;closed=!1;constructor(){this.scope=ge.runSync(en.make())}assertOpen(){if(this.closed)throw Error("Cannot register a resource after plugin teardown")}acquire(e,t){this.assertOpen();let n=e();try{this.addFinalizer(()=>t(n))}catch(r){try{t(n)}catch(i){throw AggregateError([r,i],"Plugin acquisition rollback failed",{cause:i})}throw r}return n}addFinalizer(e){this.assertOpen(),ge.runSync(en.addFinalizer(this.scope,ge.promise(async()=>{await e()})))}addIngress(e){this.assertOpen(),this.ingress.add(e)}close(e=Yt.void){return this.closed=!0,this.closePromise??=this.closeScope(e),this.closePromise}async closeScope(e){let t,n=!1,r=[...this.ingress].reverse();for(let l of r)try{l.stopAdmission()}catch(c){if(!n)t=c;n=!0}let i=await Promise.allSettled(r.map((l)=>Promise.resolve().then(()=>l.drain())));this.ingress.clear();let a=i.find((l)=>l.status==="rejected");if(!n&&a)t=a.reason,n=!0;let s=await ge.runPromiseExit(en.close(this.scope,e));if(!n&&Yt.isFailure(s))t=br.squash(s.cause),n=!0;if(n)throw t}}function Xh(e,t,n,r){return new Proxy(e,{get(i,a){let s=NX(i,a);if(typeof a==="string"&&t.some((l)=>l===a)&&typeof s==="function")return(...l)=>n.acquire(()=>zX(s,i,l),(c)=>r(l,c));return typeof s==="function"?s.bind(i):s}})}function Yh(e,t,n){return Xh(e,t,n,(r)=>{let i=r[0];if(typeof i==="string")e.unregisterPlugin(i)})}function FX(e,t){let n=e.getMessageBus(),r=new Set,i=(v,R,z)=>{t.assertOpen();let B=!0,x=new Set,L=z((N)=>{if(!B)return{noop:!0};let Q,ae=new Promise((be)=>{Q=be});x.add(ae);let J=()=>{x.delete(ae),Q()},oe;try{oe=Promise.resolve(R(N))}catch(be){throw J(),be}return oe.then((be)=>(J(),be),(be)=>{throw J(),be})}),k={type:v,originalHandler:R,stopAdmission:()=>{if(!B)return;B=!1,L(),r.delete(k)}};r.add(k);try{t.addIngress({stopAdmission:k.stopAdmission,drain:async()=>{await Promise.all(x)}})}catch(N){throw k.stopAdmission(),N}return k.stopAdmission},a={send:(v)=>n.send(v),hasHandlers:(v)=>n.hasHandlers?.(v)??!1,subscribe:(v,R,z)=>i(v,R,(B)=>n.subscribe(v,B,z)),observe:(v,R)=>i(v,R,(z)=>n.observe(v,z)),deliverPeer:(v,R)=>n.deliverPeer(v,R),unsubscribe:(v,R)=>{let z=[...r].filter((B)=>B.type===v&&B.originalHandler===R);if(z.length===0){n.unsubscribe(v,R);return}for(let B of z)B.stopAdmission()},collect:(v)=>n.collect(v),validateMessage:(v,R)=>n.validateMessage(v,R),getHandlerCount:(v)=>n.getHandlerCount(v),getTargetedHandlerCount:(v,R)=>n.getTargetedHandlerCount(v,R),clearHandlers:(v)=>n.clearHandlers(v),clearAllHandlers:()=>n.clearAllHandlers()},s=e.getAttachmentRegistry(),l={...s,register:(v,R,z)=>t.acquire(()=>s.register(v,R,z),(B)=>B())},c=e.getEntityRegistry(),u=Xh(c,["registerEntityType"],t,(v)=>{let R=v[0];if(typeof R==="string")c.unregisterEntityType(R)}),d=Yh(e.getProfileKindRegistry(),["register"],t),p=Yh(e.getChannelRegistry(),["registerDescriptor","registerDeliveryProvider"],t),f=Yh(e.getInboxRegistry(),["registerSource"],t),m=Yh(e.getInboxFollowUpRegistry(),["registerKind"],t),g=e.getAccountSettingsRegistry(),h=Xh(g,["register"],t,(v,R)=>{zX(g.unregister,g,[R])}),y=Yh(e.getOperationalHealthRegistry(),["register"],t),w=e.getDataSourceRegistry(),_=Xh(w,["register"],t,(v)=>{let R=v[0];if(typeof R==="object"&&R!==null&&"id"in R&&typeof R.id==="string"){let z=R.id.includes(":")?R.id:`shell:${R.id}`;w.unregister(z)}}),b=e.getAnalyticsRegistry(),S=Xh(b,["register"],t,(v)=>{let R=v[0];if(typeof R==="object"&&R!==null&&"type"in R&&typeof R.type==="string")b.unregister(R.type)}),A=new Proxy(e,{get(v,R){if(R==="getMessageBus")return()=>a;if(R==="getAttachmentRegistry")return()=>l;if(R==="getEntityRegistry")return()=>u;if(R==="getDataSourceRegistry")return()=>_;if(R==="getProfileKindRegistry")return()=>d;if(R==="getChannelRegistry")return()=>p;if(R==="getInboxRegistry")return()=>f;if(R==="getInboxFollowUpRegistry")return()=>m;if(R==="getOperationalHealthRegistry")return()=>y;if(R==="getAccountSettingsRegistry")return()=>h;if(R==="getAnalyticsRegistry")return()=>S;let z=NX(v,R);return typeof z==="function"?z.bind(v):z}});return ZW(e,A),A}class uj{plugins;events;daemonRegistry;logger;projectionRegistry;resourceScopes=new Map;releasePromises=new Map;constructor(e,t,n,r,i){this.plugins=e,this.events=t,this.daemonRegistry=n,this.projectionRegistry=r,this.logger=i.child("PluginLifecycle")}async initializePlugin(e,t,n){let r=this.plugins.get(e);if(!r)throw new Mi(e,"Registration failed: Plugin is not registered");let i=r.plugin,a=new cj;a.addFinalizer(()=>t.unregisterPluginCapabilities?.(e)),a.addFinalizer(()=>t.getJobQueueService().unregisterPluginHandlers(e)),a.addFinalizer(()=>this.projectionRegistry.unregisterPlugin(e)),this.resourceScopes.set(e,a),this.releasePromises.delete(e),this.logger.debug(`Initializing plugin: ${e}`);try{this.events.emit(Oi.BEFORE_INITIALIZE,e,i);let s=await i.register(FX(t,a),n);return r.status=Dn.INITIALIZED,this.logger.debug(`Initialized plugin: ${e}`),this.events.emit(Oi.INITIALIZED,e,i),s}catch(s){throw this.logger.error(`Error initializing plugin ${e}: ${$e(s)}`),await this.failPluginInitialization(e,s),s}}async finalizePluginRegistration(e){let t=this.plugins.get(e);if(!t)throw new Mi(e,"Registration finalization failed: Plugin is not registered");if(t.status!==Dn.INITIALIZED)return;try{await t.plugin.finalizeRegistration?.(),this.logger.debug(`Registration finalized for plugin: ${e}`)}catch(n){throw await this.failPluginInitialization(e,n),n}}async readyPlugin(e){let t=this.plugins.get(e);if(!t)throw new Mi(e,"Ready failed: Plugin is not registered");if(t.status!==Dn.INITIALIZED){this.logger.debug(`Skipping ready hook for non-initialized plugin: ${e}`);return}try{await t.plugin.ready?.(),this.logger.debug(`Ready hook completed for plugin: ${e}`)}catch(n){let r=xp(n);t.status=Dn.ERROR,t.error=r;try{this.events.emit(Oi.ERROR,e,r)}catch(i){this.logger.error(`Plugin error listener failed for ${e}`,i)}throw r}}async startPluginDaemons(e){let t=this.plugins.get(e);if(t?.status!==Dn.INITIALIZED)return;try{await this.daemonRegistry.startPlugin(e),this.logger.debug(`Started daemons for plugin: ${e}`)}catch(n){if(t.plugin.requiresDaemonStartup?.())throw n;this.logger.warn(`Daemon ${e} failed to start: ${$e(n)}`)}}async failPluginInitialization(e,t){let n=this.plugins.get(e);if(!n)return;let r=n.status!==Dn.ERROR,i=xp(t);if(n.status=Dn.ERROR,n.error=i,await this.releasePluginResources(e,Yt.fail(t)),r)try{this.events.emit(Oi.ERROR,e,i)}catch(a){this.logger.error(`Plugin error listener failed for ${e}`,a)}}async disablePlugin(e){let t=this.plugins.get(e);if(!t){this.logger.warn(`Cannot disable plugin ${e}: not registered`);return}if(t.status===Dn.DISABLED)return;this.logger.debug(`Disabling plugin: ${e}`);let n=t.status===Dn.ERROR;await this.releasePluginResources(e,Yt.void);let r=this.plugins.get(e);if(!n&&r&&r.status!==Dn.DISABLED)r.status=Dn.DISABLED,this.events.emit(Oi.DISABLED,e,r.plugin);this.logger.debug(`Disabled plugin: ${e}`)}releasePluginResources(e,t){let n=this.releasePromises.get(e);if(n)return n;let r=this.releasePluginResourcesOnce(e,t);return this.releasePromises.set(e,r),r}async releasePluginResourcesOnce(e,t){let n=this.plugins.get(e);if(!n)return;try{await this.daemonRegistry.stopPlugin(e),this.logger.debug(`Stopped daemons for plugin: ${e}`)}catch(i){this.logger.error(`Failed to stop daemons for plugin: ${e}`,i)}let r=this.resourceScopes.get(e);if(this.resourceScopes.delete(e),r)try{await r.close(t)}catch(i){this.logger.error(`Failed to close resources for plugin ${e}`,i)}if(n.plugin.shutdown)try{await n.plugin.shutdown(),this.logger.debug(`Shutdown completed for plugin: ${e}`)}catch(i){this.logger.error(`Plugin shutdown failed for ${e}:`,i)}for(let i of this.daemonRegistry.getByPlugin(e))try{await this.daemonRegistry.unregister(i.name)}catch(a){this.logger.error(`Failed to unregister daemon ${i.name} for plugin ${e}`,a)}}}class dj{plugins;events;logger;constructor(e,t,n){this.plugins=e,this.events=t,this.logger=n.child("DependencyResolver")}async resolveInitializationOrder(e){this.logger.debug("Resolving plugin initialization order...");let t=Array.from(this.plugins.keys()),n=new Set,r=!0;while(r&&n.size<t.length){r=!1;for(let s of t){if(n.has(s))continue;if(!this.plugins.get(s))continue;if(this.getUnmetDependencies(s).length===0)try{await e(s),n.add(s),r=!0}catch(u){let d=$e(u);this.logger.error(`Failed to initialize plugin ${s}: ${d}`),n.add(s),r=!0}}}let i=t.filter((s)=>!n.has(s));if(i.length>0){let s=i.join(", ");this.logger.error(`Failed to initialize plugins due to dependency issues: ${s}`);for(let l of i){let c=this.getUnmetDependencies(l);this.logger.error(`Plugin ${l} has unmet dependencies: ${c.join(", ")}`);let u=this.plugins.get(l);if(u)u.status=Dn.ERROR,u.error=new Mi(l,`Unmet dependencies: ${c.join(", ")}`);this.events.emit(Oi.ERROR,l,u?.error)}}let a=new Set;for(let[s,l]of this.plugins)if(l.status===Dn.INITIALIZED)a.add(s);return this.logger.debug(`Resolved ${a.size} of ${t.length} plugins`),{initialized:a,failed:i}}getUnmetDependencies(e){let t=this.plugins.get(e);if(!t)return[];let{dependencies:n}=t,r=[];for(let i of n){let a=this.plugins.get(i);if(!a){r.push(i);continue}if(a.status!==Dn.INITIALIZED)r.push(i)}return r}}class pj{logger;projectionRegistry;constructor(e,t){this.logger=e.child("CapabilityRegistrar"),this.projectionRegistry=t}async registerCapabilities(e,t,n,r){if(!r?.executionOnly&&n.tools.length>0)e.registerTools(t,n.tools),this.logger.debug(`Registered ${n.tools.length} tools from ${t}`);if(!r?.executionOnly&&n.resources.length>0)e.registerResources(t,n.resources),this.logger.debug(`Registered ${n.resources.length} resources from ${t}`);if(!r?.executionOnly&&n.instructions)e.registerInstructions(t,n.instructions),this.logger.debug(`Registered instructions from ${t}`);let i=n.projectionRules??[];try{for(let a of i)this.projectionRegistry.registerRule(t,a)}catch(a){throw this.projectionRegistry.unregisterPlugin(t),a}if(i.length>0)this.logger.debug(`Registered ${i.length} projection rules from ${t}`)}}class eT{projections=new Map;rules=new Map;static createFresh(){return new eT}constructor(){}registerRule(e,t){if(!Object.isFrozen(t))throw Error(`Projection rule "${t.id}" must be created with defineProjectionRule`);let n=this.projections.get(t.id);if(n)throw Error(`Projection "${t.id}" is already registered by "${n.pluginId}"`);let r={id:t.id,pluginId:e,targetType:t.targetType,sources:t.sources.map((a)=>({kind:a.kind,types:[...a.types],...a.excludeTypes?{excludeTypes:[...a.excludeTypes]}:{}}))};this.projections.set(t.id,r),this.rules.set(t.id,t);let i=!0;return()=>{if(!i)return;if(i=!1,this.rules.get(t.id)===t)this.rules.delete(t.id);if(this.projections.get(t.id)===r)this.projections.delete(t.id)}}unregisterPlugin(e){for(let[t,n]of this.projections)if(n.pluginId===e)this.projections.delete(t),this.rules.delete(t)}list(){return Array.from(this.projections.values()).sort((e,t)=>e.id.localeCompare(t.id)).map(Mqe)}listRules(){return[...this.rules.values()].sort((e,t)=>e.id.localeCompare(t.id))}validate(e){let t=this.list(),n=new Set(e.map(({type:s})=>s));for(let s of t)if(!n.has(s.targetType))throw Error(`Projection "${s.id}" targets unregistered entity type "${s.targetType}"`);let r=e.filter(({projectionSource:s})=>s).map(({type:s})=>s).sort(),i=jqe(t,r),a=Nqe(t,i)[0];if(a){let s=zqe(a,i);throw Error(`Projection cycle is not supported: ${[...s,s[0]].join(" -> ")}`)}return Oqe({projections:t,edges:i,unknownSourceTypes:Pqe(t,n)})}}function Pqe(e,t){let n=[];for(let r of e){let i=[...new Set(r.sources.flatMap((a)=>[...a.types,...a.excludeTypes??[]]).filter((a)=>a!=="*"&&!t.has(a)))].sort();if(i.length>0)n.push({projectionId:r.id,types:i})}return n}function Oqe(e){for(let t of e.projections){for(let n of t.sources){if(Object.freeze(n.types),n.excludeTypes)Object.freeze(n.excludeTypes);Object.freeze(n)}Object.freeze(t.sources),Object.freeze(t)}for(let t of e.edges)Object.freeze(t.causes),Object.freeze(t);for(let t of e.unknownSourceTypes)Object.freeze(t.types),Object.freeze(t);return Object.freeze(e.unknownSourceTypes),Object.freeze(e.projections),Object.freeze(e.edges),Object.freeze(e)}function Mqe(e){return{...e,sources:e.sources.map((t)=>({...t,types:[...t.types],...t.excludeTypes?{excludeTypes:[...t.excludeTypes]}:{}}))}}function jqe(e,t){let n=new Map;for(let r of e)for(let i of e){let a=Dqe(r,i,t);if(a.length===0)continue;n.set(`${r.id}\x00${i.id}`,new Set(a))}return Array.from(n,([r,i])=>{let[a="",s=""]=r.split("\x00");return{from:a,to:s,causes:[...i].sort()}}).sort((r,i)=>r.from.localeCompare(i.from)||r.to.localeCompare(i.to))}function Dqe(e,t,n){let r=[];for(let i of t.sources){let a=new Set(i.excludeTypes??[]);if((i.types.includes("*")?[...i.types.filter((l)=>l!=="*"),...n]:i.types).includes(e.targetType)&&!a.has(e.targetType))r.push(`entity:${e.targetType}`)}return[...new Set(r)]}function Nqe(e,t){let n=e.map(({id:p})=>p).sort(),r=BX(n,t),i=new Map,a=new Map,s=[],l=new Set,c=[],u=0,d=(p)=>{i.set(p,u),a.set(p,u),u++,s.push(p),l.add(p);for(let h of r.get(p)??[])if(!i.has(h))d(h),a.set(p,Math.min(a.get(p)??0,a.get(h)??0));else if(l.has(h))a.set(p,Math.min(a.get(p)??0,i.get(h)??0));if(a.get(p)!==i.get(p))return;let f=[],m;do{if(m=s.pop(),!m)break;l.delete(m),f.push(m)}while(m!==p);let g=r.get(p)?.includes(p)??!1;if(f.length>1||g)c.push(f.sort())};for(let p of n)if(!i.has(p))d(p);return c.sort((p,f)=>(p[0]??"").localeCompare(f[0]??""))}function zqe(e,t){let n=new Set(e),r=BX(e,t),i=[...e].sort()[0];if(!i)return[];if(r.get(i)?.includes(i))return[i];let a=(s,l)=>{for(let c of r.get(s)??[]){if(!n.has(c))continue;if(c===i)return l;if(l.includes(c))continue;let u=a(c,[...l,c]);if(u)return u}return};return a(i,[i])??[...e].sort()}function BX(e,t){let n=new Map;for(let r of e)n.set(r,[]);for(let r of t){let i=n.get(r.from);if(i&&!i.includes(r.to))i.push(r.to)}for(let r of n.values())r.sort();return n}class tT{plugins=new Map;logger;events=new LX;daemonRegistry;shell=null;initializedPluginIds=[];pluginLifecycle;dependencyResolver;capabilityRegistrar;projectionRegistry=eT.createFresh();projectionGraph;static createFresh(e,t){return new tT(e,t)}setShell(e){this.shell=e}constructor(e,t){this.logger=e.child("PluginManager"),this.events=new LX,this.daemonRegistry=t,this.pluginLifecycle=new uj(this.plugins,this.events,this.daemonRegistry,this.projectionRegistry,e),this.dependencyResolver=new dj(this.plugins,this.events,e),this.capabilityRegistrar=new pj(e,this.projectionRegistry)}registerPlugin(e){if(!e.id)throw new Mi("unknown","Registration failed: Plugin must have an id");if(this.logger.debug(`Registering plugin: ${e.id} (${e.version})`),this.plugins.has(e.id)){let i=this.plugins.get(e.id)?.plugin.version;throw new Mi(e.id,`Registration failed: Plugin is already registered with version ${i}`)}let t=e.dependencies??[],n={plugin:e,status:Dn.REGISTERED,dependencies:t};this.plugins.set(e.id,n),this.logger.debug(`Registered plugin: ${e.id} (${e.version})`),this.events.emit(Oi.REGISTERED,e.id,e)}async initializePlugins(e){this.logger.debug("Initializing plugins..."),this.initializedPluginIds=[];let t=await this.dependencyResolver.resolveInitializationOrder(async(n)=>{await this.initializePlugin(n,e)});this.logger.debug(`Initialized ${t.initialized.size} of ${this.plugins.size} plugins`)}async registerInterfaceChannels(e,t){let n=this.shell;if(!n)throw Error("Cannot register interface channels: Shell not set. Call setShell() first.");for(let r of e)try{await r.registerChannelsForExecution?.(n,t)}catch(i){this.logger.error(`Channel registration failed for interface ${r.id}: ${$e(i)}`)}}async initializePlugin(e,t){if(!this.shell)throw new Mi(e,"Cannot initialize plugin: Shell not set. Call setShell() first.");let n=this.shell;try{let r=await this.pluginLifecycle.initializePlugin(e,n,t);await this.capabilityRegistrar.registerCapabilities(n,e,r,{executionOnly:t?.executionOnly}),this.initializedPluginIds.push(e)}catch(r){throw await this.pluginLifecycle.failPluginInitialization(e,r),r}}async finalizePluginRegistrations(){this.logger.debug("Finalizing plugin registrations...");for(let n of this.initializedPluginIds)await this.pluginLifecycle.finalizePluginRegistration(n);if(!this.shell)throw Error("Cannot validate projections before the shell is set");let e=this.shell.getEntityRegistry(),t=this.projectionRegistry.validate(e.getAllEntityTypes().map((n)=>{let r=e.getEntityTypeConfig(n);return{type:n,projectionSource:r.projectionSource!==!1&&r.projectionSourceRole!=="excluded"}}));this.projectionGraph=t;for(let n of t.unknownSourceTypes)this.logger.warn("Projection declares entity source types no installed plugin registers",{projectionId:n.projectionId,types:n.types});this.logger.debug("Validated projection graph",{projections:t.projections.length,edges:t.edges.length})}getProjectionGraphSnapshot(){if(!this.projectionGraph)throw Error("Projection graph has not been finalized");return this.projectionGraph}getProjectionRulesSnapshot(){if(!this.projectionGraph)throw Error("Projection graph has not been finalized");return Object.freeze(this.projectionRegistry.listRules())}async readyPlugins(){this.logger.debug("Dispatching plugin ready hooks...");try{await gC(this.initializedPluginIds.map((e)=>()=>this.pluginLifecycle.readyPlugin(e)))}catch(e){for(let t of this.initializedPluginIds){let n=this.plugins.get(t);if(n?.status===Dn.ERROR)await this.pluginLifecycle.failPluginInitialization(t,n.error??e)}throw e}}async startPluginDaemons(){this.logger.debug("Starting plugin daemons..."),await gC(this.initializedPluginIds.map((e)=>()=>this.pluginLifecycle.startPluginDaemons(e)))}getPlugin(e){return this.plugins.get(e)?.plugin}getPluginStatus(e){return this.plugins.get(e)?.status}hasPlugin(e){return this.plugins.has(e)}isPluginInitialized(e){return this.plugins.get(e)?.status===Dn.INITIALIZED}getAllPluginIds(){return Array.from(this.plugins.keys())}getAllPlugins(){return new Map(this.plugins)}getFailedPlugins(){return Array.from(this.plugins.entries()).filter((e)=>e[1].status===Dn.ERROR&&e[1].error!==void 0).map(([e,t])=>({id:e,error:t.error}))}getPluginPackageName(e){return this.plugins.get(e)?.plugin.packageName}async disablePlugin(e){await this.pluginLifecycle.disablePlugin(e)}async shutdownPlugins(){let e=new Set;for(let t of[...this.initializedPluginIds].reverse())await this.disablePlugin(t),e.add(t);for(let t of[...this.plugins.keys()].reverse())if(!e.has(t))await this.disablePlugin(t)}on(e,t){this.events.on(e,t)}once(e,t){this.events.once(e,t)}off(e,t){this.events.off(e,t)}getEventEmitter(){return this.events}}var qX={public:0,trusted:1,admin:2},Fqe=new Set(["/chat","/cms","/admin","/account"]),Bqe=[{id:"dashboard",pluginId:"dashboard",label:"Dashboard",visibility:"public",requiresActiveSession:!1},{id:"web-chat",pluginId:"web-chat",label:"Chat",visibility:"trusted",requiresActiveSession:!0},{id:"studio",pluginId:"studio",label:"Studio",visibility:"public",requiresActiveSession:!0}];function Lqe(e,t){let n=qX[t.permissionLevel??"public"],r=[];for(let{id:i,pluginId:a,label:s,visibility:l,requiresActiveSession:c}of Bqe){let u=t.self?.id===i;if(!u&&(n<qX[l]||c&&t.hasActiveSession!==!0))continue;let d=e.filter((m)=>m.pluginId===a&&!(i==="studio"&&Fqe.has(m.fullPath))).map((m)=>m.fullPath).sort((m,g)=>m.length-g.length),p=i==="web-chat"&&d.length>0?e.find((m)=>m.pluginId==="studio"&&m.fullPath==="/chat")?.fullPath:void 0,f=u?t.self?.href:p??d[0];if(f!==void 0)r.push({id:i,label:s,href:f,isActive:i===t.activeId,...c?{requiresActiveSession:!0}:{}})}return r}class $X{definitions=new Map;register(e){this.definitions.set(e.type,e)}unregister(e){this.definitions.delete(e)}getDefinitions(){return Array.from(this.definitions.values())}async run(e){let t=this.definitions.get(e.type);if(!t)throw Error(`Unknown analytics report: ${e.type}. Available: ${Array.from(this.definitions.keys()).join(", ")}`);let n=t.minVisibility??"public";if(!ia.hasPermission(e.permission,n))throw Error(`The ${t.type} report answers ${n} callers only`);let r=t.params.safeParse(e.params??{});if(!r.success){let s=r.error.issues.map((l)=>`${l.path.join(".")||"params"}: ${l.message}`).join("; ");throw Error(`Invalid params for ${t.type}: ${s}`)}let i=vi(e.permission),a=i==="public"?vg(e.entityService,{publishedOnly:!0,visibilityScope:i}):e.entityService;return t.handler(r.data,{entityService:a,visibilityScope:i})}}function qqe(e){return e}export{Zd as oa,Yb as pa,E as qa,Vd as ra,H as sa,_l as ta,ve as ua,Er as va,Ti as wa,CL as xa,po as ya,Ht as za,kr as Aa,xs as Ba,Hc as Ca,Vf as Da,Dt as Ea,Mn as Fa,BL as Ga,LL as Ha,Cl as Ia,at as Ja,Te as Ka,un as La,tn as Ma,JC as Na,mo as Oa,V as Pa,vv as Qa,mE as Ra,ta as Sa,na as Ta,Lq as Ua,Lpe as Va,qpe as Wa,ur as Xa,El as Ya,Vn as Za,$n as _a,Wo as $a,ws as ab,Kt as bb,Ci as cb,qq as db,nn as eb,ZX as fb,hj as gb,j as hb,Et as ib,Zn as jb,ns as kb,xo as lb,Bi as mb,yj as nb,Zqe as ob,Gqe as pb,Wqe as qb,ly as rb,oc as sb,uT as tb,vj as ub,Qqe as vb,WX as wb,Yqe as xb,el as yb,xj as zb,Xqe as Ab,e$e as Bb,t$e as Cb,n$e as Db,r$e as Eb,o$e as Fb,JX as Gb,Qe as Hb,tl as Ib,i$e as Jb,Sn as Kb,jt as Lb,fn as Mb,nl as Nb,rl as Ob,_r as Pb,gT as Qb,Li as Rb,xn as Sb,gn as Tb,d$e as Ub,ree as Vb,Rm as Wb,Wu as Xb,tr as Yb,ST as Zb,h$e as _b,see as $b,Am as ac,no as bc,ya as cc,S$e as dc,cee as ec,ba as fc,No as gc,zr as hc,rn as ic,$i as jc,TT as kc,kn as lc,Zr as mc,Ui as nc,wt as oc,CT as pc,ET as qc,wa as rc,qj as sc,hy as tc,ll as uc,U$e as vc,Fm as wc,Z$e as xc,G$e as yc,eD as zc,wy as Ac,DT as Bc,tD as Cc,it as Dc,gt as Ec,_y as Fc,Lt as Gc,Fr as Hc,Ree as Ic,FT as Jc,BT as Kc,LT as Lc,Fee as Mc,Lee as Nc,hc as Oc,cl as Pc,qee as Qc,Ta as Rc,Wee as Sc,nte as Tc,Gr as Uc,To as Vc,cs as Wc,Oy as Xc,Wr as Yc,Ia as Zc,oo as _c,qm as $c,id as ad,Ca as bd,Gn as cd,ad as dd,Ut as ed,Jr as fd,AT as gd,yy as hd,_t as id,Tt as jd,vte as kd,cD as ld,Ot as md,ci as nd,uD as od,_a as pd,Iy as qd,UT as rd,pD as sd,Cy as td,K$e as ud,eUe as vd,Ey as wd,nUe as xd,rUe as yd,aUe as zd,Bn as Ad,sUe as Bd,lUe as Cd,cUe as Dd,uUe as Ed,hD as Fd,dUe as Gd,pUe as Hd,mUe as Id,fUe as Jd,gUe as Kd,Bm as Ld,hUe as Md,yUe as Nd,bUe as Od,vUe as Pd,SUe as Qd,Wn as Rd,RUe as Sd,gne as Td,AUe as Ud,hne as Vd,Ir as Wd,sd as Xd,Um as Yd,bc as Zd,ui as _d,vne as $d,Zi as ae,PUe as be,OUe as ce,Zy as de,jUe as ee,DUe as fe,Gy as ge,Wy as he,BUe as ie,One as je,LUe as ke,Sc as le,$Ue as me,ul as ne,Ic as oe,dd as pe,Ae as qe,yt as re,bt as se,nf as te,Rt as ue,Vr as ve,Hr as we,sb as xe,Ea as ye,He as ze,_o as Ae,lb as Be,Lo as Ce,n2e as De,ds as Ee,vd as Fe,Sd as Ge,lf as He,hl as Ie,wd as Je,sI as Ke,e1 as Le,yl as Me,gs as Ne,vre as Oe,r2e as Pe,o2e as Qe,xre as Re,i2e as Se,U1 as Te,di as Ue,Fre as Ve,Hoe as We,Koe as Xe,Qoe as Ye,jI as Ze,nie as _e,oie as $e,iie as af,aie as bf,hf as cf,sie as df,yf as ef,cie as ff,die as gf,mie as hf,gie as if,hie as jf,bie as kf,Sie as lf,DI as mf,Iie as nf,Hi as of,Mie as pf,AF as qf,br as rf,Uie as sf,Nc as tf,Bre as uf,xI as vf,wI as wf,Lre as xf,qre as yf,$re as zf,Ure as Af,Rc as Bf,mf as Cf,Wre as Df,Xre as Ef,Yt as Ff,u2e as Gf,Ac as Hf,d2e as If,Id as Jf,p2e as Kf,m2e as Lf,Pc as Mf,f2e as Nf,g2e as Of,TI as Pf,loe as Qf,_I as Rf,_d as Sf,coe as Tf,uoe as Uf,doe as Vf,ff as Wf,Cb as Xf,poe as Yf,en as Zf,Ed as _f,Oc as $f,gf as ag,OI as bg,wF as cg,Mc as dg,woe as eg,Pb as fg,MI as gg,Toe as hg,Cd as ig,Coe as jg,Dc as kg,RF as lg,wf as mg,zc as ng,E2e as og,zF as pg,k2e as qg,Xie as rg,R2e as sg,FF as tg,jb as ug,A2e as vg,P2e as wg,O2e as xg,aae as yg,FI as zg,sae as Ag,LI as Bg,M2e as Cg,kd as Dg,uae as Eg,j2e as Fg,mae as Gg,z2e as Hg,F2e as Ig,q2e as Jg,$2e as Kg,zb as Lg,K2e as Mg,JI as Ng,Q2e as Og,Y2e as Pg,Tf as Qg,vl as Rg,Ra as Sg,Dd as Tg,zae as Ug,Gae as Vg,Jae as Wg,oB as Xg,qb as Yg,hi as Zg,ase as _g,cB as $g,Qi as ah,Ese as bh,zd as ch,Rse as dh,Ase as eh,Lc as fh,Pse as gh,Ose as hh,ys as ih,$o as jh,yi as kh,Mse as lh,XI as mh,jse as nh,Bse as oh,YI as ph,Lse as qh,qse as rh,$se as sh,xB as th,Use as uh,Zse as vh,Fd as wh,Jse as xh,bs as yh,Qse as zh,Yse as Ah,wB as Bh,TB as Ch,qc as Dh,tle as Eh,nle as Fh,rle as Gh,ile as Hh,sle as Ih,lle as Jh,ule as Kh,mle as Lh,fle as Mh,ble as Nh,vle as Oh,Sle as Ph,wle as Qh,_B as Rh,IB as Sh,Ele as Th,kle as Uh,Rle as Vh,Ale as Wh,Ple as Xh,Nle as Yh,Fle as Zh,Ble as _h,Lle as $h,$le as ai,Gle as bi,Wle as ci,Vle as di,Xle as ei,ece as fi,ice as gi,ace as hi,kf as ii,cce as ji,uce as ki,dce as li,mce as mi,fce as ni,gce as oi,hce as pi,EB as qi,vce as ri,Sce as si,xce as ti,Rf as ui,Ice as vi,Cce as wi,Rce as xi,eC as yi,Oce as zi,$c as Ai,Dce as Bi,Nce as Ci,zce as Di,kB as Ei,Lce as Fi,Zce as Gi,rue as Hi,oue as Ii,iue as Ji,aue as Ki,lue as Li,due as Mi,pue as Ni,mue as Oi,fue as Pi,Af as Qi,Pf as Ri,Sue as Si,xue as Ti,wue as Ui,_ue as Vi,Cue as Wi,kue as Xi,AB as Yi,Aue as Zi,Oue as _i,jue as $i,Nue as aj,Bue as bj,tde as cj,nde as dj,rde as ej,ode as fj,ide as gj,ade as hj,ge as ij,Of as jj,lde as kj,cde as lj,ude as mj,pde as nj,mde as oj,Uo as pj,MB as qj,Bd as rj,DB as sj,NB as tj,_Ze as uj,oC as vj,vr as wj,Aa as xj,tJe as yj,bi as zj,gC as Aj,$pe as Bj,Upe as Cj,Zpe as Dj,tg as Ej,Na as Fj,Pa as Gj,Oa as Hj,Kb as Ij,vi as Jj,Ud as Kj,Si as Lj,HB as Mj,oJe as Nj,iJe as Oj,Yi as Pj,Sr as Qj,yC as Rj,Jb as Sj,qd as Tj,co as Uj,JB as Vj,Uc as Wj,Tv as Xj,Cv as Yj,_E as Zj,IE as _j,Ev as $j,kv as ak,EE as bk,Av as ck,tp as dk,Ts as ek,og as fk,ln as gk,c6e as hk,Vo as ik,ra as jk,$E as kk,UE as lk,Eme as mk,kme as nk,VE as ok,KE as pk,Fa as qk,Zv as rk,P$ as sk,Ml as tk,O$ as uk,C8e as vk,E8e as wk,Gv as xk,U as yk,Cs as zk,C as Ak,_e as Bk,I as Ck,Br as Dk,z$ as Ek,Es as Fk,Ko as Gk,go as Hk,cg as Ik,je as Jk,rr as Kk,Ct as Lk,q$ as Mk,$$ as Nk,At as Ok,ip as Pk,ap as Qk,Dl as Rk,hU as Sk,sS as Tk,mp as Uk,Tk as Vk,_k as Wk,jk as Xk,fS as Yk,Gk as Zk,SS as _k,x2 as $k,w2 as al,xl as bl,vC as cl,_he as dl,T2 as el,wS as fl,Wk as gl,_2 as hl,Zc as il,OJe as jl,MJe as kl,jJe as ll,DJe as ml,SC as nl,xC as ol,wC as pl,rpe as ql,NJe as rl,zJe as sl,FJe as tl,BJe as ul,LJe as vl,qJe as wl,$Je as xl,UJe as yl,Vk as zl,I2 as Al,As as Bl,Sp as Cl,nct as Dl,gR as El,hR as Fl,H2 as Gl,K2 as Hl,Q2 as Il,Y2 as Jl,lye as Kl,cye as Ll,ES as Ml,dye as Nl,vp as Ol,Bl as Pl,mye as Ql,tZ as Rl,gye as Sl,oZ as Tl,yye as Ul,kS as Vl,ue as Wl,_n as Xl,Ll as Yl,ER as Zl,RR as _l,AR as $l,PR as am,Eg as bm,kg as cm,OR as dm,MR as em,Nye as fm,Vt as gm,RS as hm,AS as im,Qdt as jm,Ydt as km,zye as lm,TZ as mm,ept as nm,Gye as om,tpt as pm,npt as qm,rpt as rm,opt as sm,ipt as tm,apt as um,spt as vm,lpt as wm,cpt as xm,upt as ym,dpt as zm,Qye as Am,Yye as Bm,mpt as Cm,fpt as Dm,gpt as Em,hpt as Fm,ypt as Gm,bpt as Hm,vpt as Im,Spt as Jm,Fe as Km,dr as Lm,fu as Mm,Os as Nm,PS as Om,OS as Pm,AZ as Qm,PZ as Rm,nbe as Sm,MS as Tm,Hk as Um,Ihe as Vm,Che as Wm,Kk as Xm,Qk as Ym,Og as Zm,DS as _m,$R as $m,sbe as an,ZR as bn,FS as cn,UR as dn,GR as en,dbe as fn,VR as gn,gbe as hn,US as in,O2 as jn,TS as kn,B2 as ln,aR as mn,pR as nn,q2 as on,QS as pn,KR as qn,Mg as rn,YR as sn,txe as tn,nxe as un,rxe as vn,eA as wn,oxe as xn,ixe as yn,axe as zn,sxe as An,pSe as Bn,Ap as Cn,PJ as Dn,DJ as En,QA as Fn,ho as Gn,bx as Hn,zJ as In,eP as Jn,UJ as Kn,Hg as Ln,ZJ as Mn,Mp as Nn,GJ as On,xxe as Pn,WJ as Qn,JJ as Rn,Oxe as Sn,HJ as Tn,zxe as Un,Fxe as Vn,Bxe as Wn,Lxe as Xn,qxe as Yn,nP as Zn,Ds as _n,Vxe as $n,rP as ao,sP as bo,Kxe as co,Pr as do,wbe as eo,Tbe as fo,_be as go,Cbe as ho,yG as io,SG as jo,TG as ko,bA as lo,IG as mo,RW as no,tSe as oo,iSe as po,EG as qo,RG as ro,dA as so,uSe as to,vht as uo,dSe as vo,FW as wo,ex as xo,MA as yo,jA as zo,QW as Ao,Pp as Bo,rx as Co,ox as Do,Gg as Eo,ix as Fo,iJ as Go,Wg as Ho,ISe as Io,CSe as Jo,ESe as Ko,kSe as Lo,RSe as Mo,Jg as No,Vg as Oo,Qxe as Po,iV as Qo,Xxe as Ro,uV as So,$Se as To,WSe as Uo,dx as Vo,gJ as Wo,hJ as Xo,JSe as Yo,dV as Zo,mx as _o,VA as $o,exe as ap,mAe as bp,Q_t as cp,Xp as dp,WO as ep,VO as fp,HO as gp,KO as hp,QO as ip,qe as jp,IM as kp,oLe as lp,B7 as mp,ZM as np,OLe as op,W7 as pp,K7 as qp,Q7 as rp,Y7 as sp,X7 as tp,tX as up,HM as vp,KM as wp,iX as xp,QM as yp,zw as zp,lX as Ap,Fw as Bp,YM as Cp,cX as Dp,uX as Ep,pX as Fp,mX as Gp,Bw as Hp,hX as Ip,yX as Jp,qw as Kp,Wh as Lp,Jh as Mp,bX as Np,vX as Op,SX as Pp,oj as Qp,Vh as Rp,wX as Sp,TX as Tp,_X as Up,IX as Vp,CX as Wp,vqe as Xp,Jw as Yp,EX as Zp,Vw as _p,Hw as $p,Kw as aq,kX as bq,Fu as cq,Qw as dq,Qh as eq,RX as fq,sj as gq,PX as hq,Iqe as iq,lj as jq,Rqe as kq,Aqe as lq,Mi as mq,tT as nq,Lqe as oq,$X as pq,qqe as qq};
358
356
 
359
- //# debugId=26E05DDDFFA5AB3264756E2164756E21
360
- //# sourceMappingURL=index-trpy6wwa.js.map
357
+ //# debugId=6744766C1C83D15464756E2164756E21
358
+ //# sourceMappingURL=index-ygy8j5wp.js.map