@rizom/brain 0.2.0-alpha.683 → 0.2.0-alpha.684

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 (28) hide show
  1. package/dist/brain.js +27 -27
  2. package/dist/chunks/{app-nv4951p9.js → app-c0ez15h5.js} +2 -2
  3. package/dist/chunks/{index-jdw1vf1q.js → index-461jgd27.js} +3 -3
  4. package/dist/chunks/{index-jdw1vf1q.js.map → index-461jgd27.js.map} +3 -3
  5. package/dist/chunks/{index-8hb3p9cv.js → index-bcsgmycf.js} +2 -2
  6. package/dist/chunks/{index-0n49v9qb.js → index-hnhsxxqn.js} +2 -2
  7. package/dist/chunks/{index-fskd6ywz.js → index-m54trpmw.js} +2 -2
  8. package/dist/chunks/{index-hnxprvbk.js → index-vb6bkx05.js} +3 -3
  9. package/dist/chunks/{index-hnxprvbk.js.map → index-vb6bkx05.js.map} +1 -1
  10. package/dist/chunks/{index-wk0209z1.js → index-xzb62tf3.js} +2 -2
  11. package/dist/chunks/{linkedin-template-pw4esdqc.js → linkedin-template-5dmjaydp.js} +2 -2
  12. package/dist/chunks/{package-pjp4q825.js → package-vbzq94yk.js} +3 -3
  13. package/dist/chunks/{package-pjp4q825.js.map → package-vbzq94yk.js.map} +1 -1
  14. package/dist/entities.js +1 -1
  15. package/dist/index.js +1 -1
  16. package/dist/interfaces.js +1 -1
  17. package/dist/model.js +25 -25
  18. package/dist/model.js.map +1 -1
  19. package/dist/services.js +1 -1
  20. package/dist/testing.js +1 -1
  21. package/dist/ui/studio-chunks/main-j7wzshpv.js.map +2 -2
  22. package/package.json +1 -1
  23. /package/dist/chunks/{app-nv4951p9.js.map → app-c0ez15h5.js.map} +0 -0
  24. /package/dist/chunks/{index-8hb3p9cv.js.map → index-bcsgmycf.js.map} +0 -0
  25. /package/dist/chunks/{index-0n49v9qb.js.map → index-hnhsxxqn.js.map} +0 -0
  26. /package/dist/chunks/{index-fskd6ywz.js.map → index-m54trpmw.js.map} +0 -0
  27. /package/dist/chunks/{index-wk0209z1.js.map → index-xzb62tf3.js.map} +0 -0
  28. /package/dist/chunks/{linkedin-template-pw4esdqc.js.map → linkedin-template-5dmjaydp.js.map} +0 -0
@@ -180,7 +180,7 @@ ${r.map((s)=>_Y(s,n(s))).join(`
180
180
  OR EXISTS (SELECT 1 FROM ${Fn} WHERE ${Fn.conversationId} = ${Ae.id}
181
181
  AND instr(lower(${Fn.content}), ${r.trim().toLowerCase()}) > 0)
182
182
  )`:void 0].filter((f)=>f!==void 0),p=this.db.select().from(Ae).orderBy(Xt(Ae.lastActive),Xt(Ae.id)).limit(t).offset(n);if(d.length===0)return p;return p.where(ce(...d))}async searchConversations(e,t){let n=`%${e.toLowerCase()}%`;return(await this.db.selectDistinct({conversation:Ae}).from(Ae).leftJoin(Fn,V(Fn.conversationId,Ae.id)).where(ce(Ka(Ae.interfaceType,wt),t?M`lower(${Fn.content}) LIKE ${n} AND ${Ae.sessionId} = ${t}`:M`lower(${Fn.content}) LIKE ${n}`)).orderBy(Xt(Ae.lastActive))).map((o)=>o.conversation)}async countMessages(e){let t=await this.getConversation(e);if(!t)return 0;let[n]=await this.db.select({count:mP()}).from(Fn).where(ce(V(Fn.conversationId,e),ol(this.db.select({id:Ae.id}).from(Ae).where(this.accessCondition(t)))));return Number(n?.count??0)}async updateConversationMetadata(e){let t=await this.getConversation(e.conversationId);if(!t)return!1;if(t.interfaceType===wt&&"guest"in e.metadata)throw Error("Guest ownership cannot be changed");let n=new Date().toISOString(),r={...wa(t.metadata),...e.metadata},o=Promise.resolve().then(()=>this.db.update(Ae).set({metadata:JSON.stringify(r),updated:n}).where(this.accessCondition(t)).returning({id:Ae.id})),a=t.interfaceType===wt?await o.catch(()=>null):await o;if(!a)throw Error("Guest conversation write unavailable");if(a.length!==1)return!1;if(t.interfaceType!==wt)this.logger.debug("Updated conversation metadata",{conversationId:e.conversationId});return!0}async deleteExpiredGuestConversations(e=100){i.number().int().min(1).max(1000).parse(e);let t=this.db.select({id:Ae.id}).from(Ae).where(ce(V(Ae.interfaceType,wt),Oz())).orderBy(at(Ae.lastActive)).limit(e);return(await this.db.delete(Ae).where(Tt(Ae.id,t)).returning({id:Ae.id})).length}async deleteConversation(e){let t=await this.findConversation(e);if(!t)return!1;if(await this.db.delete(Ae).where(V(Ae.id,e)),t.interfaceType!==wt)this.logger.debug("Deleted conversation",{conversationId:e});return!0}}var SC=i.record(i.string(),i.unknown());var f7=i.object({id:i.string(),sessionId:i.string(),interfaceType:i.string(),channelId:i.string(),personId:i.string().optional(),channelName:i.string().optional(),startedAt:i.string(),lastActiveAt:i.string(),createdAt:i.string(),updatedAt:i.string(),metadata:SC}),g7=i.object({id:i.string(),conversationId:i.string(),role:Ss,content:i.string(),timestamp:i.string(),metadata:SC});function h7(e){let t=Ss.safeParse(e);return t.success?t.data:"user"}function Mh(e){let t=wa(e.metadata),n=typeof t.channelName==="string"?t.channelName:void 0;return{id:e.id,sessionId:e.sessionId,interfaceType:e.interfaceType,channelId:e.channelId,...e.personId?{personId:e.personId}:{},channelName:n,startedAt:e.started,lastActiveAt:e.lastActive,createdAt:e.created,updatedAt:e.updated,metadata:t}}function Dz(e){return{id:e.id,conversationId:e.conversationId,role:h7(e.role),content:e.content,timestamp:e.timestamp,metadata:wa(e.metadata)}}var wC=i.object({name:i.string(),role:i.string(),purpose:i.string(),values:i.array(i.string())}),xC=i.object({name:i.string(),organization:i.string().optional(),description:i.string().optional(),avatar:i.string().optional(),photo:i.string().optional(),website:i.string().optional(),email:i.string().optional(),socialLinks:i.array(uu).optional()});function zz(e){return wC.parse(e)}function Nz(e){return xC.parse(e)}var y7=new Set(Object.values(ll));function Bz(e){return $z(e[0])}function TC(e,t,n){if(!Bz(e)){let[a,s]=e;return n(a,s)}let[r,o]=e;return n(r.name,async(a)=>{let s=r.schema.safeParse(a.payload);if(!s.success)return t.warn(`Refused an invalid ${r.name} payload`,{error:s.error.message}),{success:!1,error:`Invalid ${r.name} payload`};let{payload:l,...c}=a;return o(s.data,c)})}function Lz(e){return async()=>dC(await e.getAppInfo())}function qz(e,t){return{get:()=>zz(e.getIdentity()),getProfile:()=>Nz(e.getProfile()),getAppInfo:t}}function Fz(e,t){let n=e.getProfileKindRegistry();return{register:(r)=>{n.register(t,r)},getResolved:()=>n.getResolved(),getSelectedDefinition:()=>n.getSelectedDefinition()}}function CC(e){let t=e.getChannelRegistry();return{listDescriptors:()=>t.listDescriptors(),getDescriptor:(n)=>t.getDescriptor(n),getDeliveryProvider:(n)=>t.getDeliveryProvider(n)}}function Uz(e,t){let n=e.getOperationalHealthRegistry();return{register:(r,o)=>n.register(t,r,o)}}function Zz(e,t){let n=e.getInboxRegistry();return{registerSource:(r)=>{n.registerSource(t,r)},listSources:()=>n.listSources(),getSource:(r)=>n.getSource(r)}}function Wz(e,t){let n=e.getInboxFollowUpRegistry();return{registerKind:(r)=>{n.registerKind(t,r)},listKinds:()=>n.listKinds(),getKind:(r)=>n.getKind(r),resolve:(r)=>n.resolve(r),resolveUniversal:(r)=>n.resolveUniversal(r)}}function Gz(e,t){let n=e.getChannelRegistry();return{...CC(e),registerDescriptor:(r)=>{n.registerDescriptor(t,r)},registerDeliveryProvider:(r)=>{n.registerDeliveryProvider(t,r)}}}function Jz(e,t,n,r=!1){let o=e.getMessageBus();return{broadcast:(a,s)=>Br(o,a,s,t),request:(a,s)=>xw(o,a,s,t),gather:(a,s)=>Tw(o,a,s,t),command:(a,s)=>Cw(o,a,s,t),answer:(a,s,l)=>{if(r&&l?.everyProcess!==!0)return()=>{};return Iw(o,a,s,{owner:t,logger:n})},subscribe:(...a)=>{let s=Bz(a)?a[0].name:a[0];if(y7.has(s))throw Error(`${t} subscribes to ${s}, which every process raises; use observe or subscribeExecution`);if(r)return()=>{};return TC(a,n,(l,c)=>o.subscribe(l,c))},subscribeExecution:(...a)=>TC(a,n,(s,l)=>o.subscribe(s,l)),observe:(...a)=>r?()=>{}:TC(a,n,(s,l)=>o.observe(s,l))}}function Vz(e,t){let n=e.getJobQueueService();return{...e.jobs,enqueue:Np(n,t,!0),enqueueBatch:cC(e.jobs,t),registerHandler:uC(n,t),has:lC(n)}}function Hz(e){let t=e.getPermissionService();return{assertEntityActionAllowed:(n,r,o)=>{t.assertEntityActionAllowed(n,r,o.userPermissionLevel)}}}function Qz(e){return{get:async(t)=>{let r=await e.getConversationService().getConversation(t);return r?Mh(r):null},search:async(t)=>(await e.getConversationService().searchConversations(t)).map(Mh),list:async(t)=>(await e.getConversationService().listConversations(t)).map(Mh),getMessages:async(t,n)=>(await e.getConversationService().getMessages(t,n)).map(Dz),countMessages:async(t)=>e.getConversationService().countMessages(t)}}function Kz(e,t){return{registerHandler:(n,r)=>{e.registerEvalHandler(t,n,r)}}}function Yz(e){return{register:(t)=>{e.getAnalyticsRegistry().register(t)}}}function Xz(e){return{has:(t)=>e.getPluginPackageName(t)!==void 0}}function eN(e,t){return{register:(n)=>{e.registerEndpoint({...n,pluginId:t})}}}function tN(e,t){return{register:(n)=>{e.registerInteraction({...n,pluginId:t})}}}var qp="DeclarativeOperatorWorkspace",b7=i.object({id:i.string().trim().min(1),query:i.record(i.string().trim().min(1),i.string())}).strict(),nN=i.object({id:i.string().trim().min(1),pluginId:i.string().trim().min(1),label:i.string().trim().min(1),rendererName:i.literal(qp),priority:i.number().int(),permission:i.enum(["public","trusted","admin"]).default("trusted"),urlQuery:i.literal(!0).optional(),aliases:i.array(b7).max(20).readonly().optional(),entityTypes:i.union([i.array(i.string().trim().min(1)),i.custom((e)=>typeof e==="function",{message:"Expected Studio workspace entity types resolver function"})]).default([]),publishesEntityTypes:i.literal(!0).optional(),accessHandler:i.custom((e)=>typeof e==="function",{message:"Expected Studio workspace access handler function"}),dataProvider:i.custom((e)=>typeof e==="function",{message:"Expected Studio workspace data provider function"}),actionHandler:i.custom((e)=>typeof e==="function",{message:"Expected Studio workspace action handler function"}).optional(),badgeProvider:i.custom((e)=>typeof e==="function",{message:"Expected Studio workspace badge provider function"}).optional()}),v7=i.object({workspaceUrl:i.string()}),S7=i.object({pluginId:i.string(),workspaceId:i.string().optional()}),Fp=Xn({channel:"studio:register-workspace",request:nN,response:v7,delivery:"request"}),jh=Xn({channel:"studio:unregister-workspace",request:S7,response:i.void(),delivery:"request"});function rN(e,t,n){return{isAvailable:()=>n(Fp.name),async registerWorkspace(r){if(!n(Fp.name))return!1;let o=await e.request(Fp,{...r,pluginId:t});if(o.status==="failed")throw Up(o.error,`Studio workspace register failed: ${o.error.message}`);return o.status==="answered"?o.data:!1},async unregisterWorkspace(r){if(!n(jh.name))return!1;let o=await e.request(jh,{pluginId:t,...r?{workspaceId:r}:{}});if(o.status==="failed")throw Up(o.error,`Studio workspace unregister failed: ${o.error.message}`);return o.status==="answered"}}}var Ll="DeclarativeOperatorWidget",iN=i.object({label:i.string(),value:i.string(),tone:i.enum(["plain","good","warn"]).optional()}),w7=i.object({component:i.custom((e)=>typeof e==="function",{message:"Expected dashboard widget component function"}),clientStyles:i.string().optional(),clientScript:i.string().optional()}),x7=i.object({id:i.string(),pluginId:i.string(),title:i.string(),description:i.string().optional(),group:i.string().min(1),priority:i.number().default(50),section:i.enum(["primary","secondary","sidebar"]).default("primary"),rendererName:i.literal(Ll),visibility:i.enum(["public","trusted","admin"]).default("public"),needsAttention:i.number().int().nonnegative().optional(),digest:i.array(iN).max(4).optional(),dataProvider:i.custom((e)=>typeof e==="function",{message:"Expected dashboard widget data provider function"}),digestProvider:i.custom((e)=>typeof e==="function",{message:"Expected dashboard widget digest provider function"}).optional(),renderer:w7.optional()}).strict(),T7=i.object({pluginId:i.string(),widgetId:i.string().optional()}),Dh=Xn({channel:"dashboard:register-widget",request:x7,response:i.void(),delivery:"request"}),IC=Xn({channel:"dashboard:unregister-widget",request:T7,response:i.void(),delivery:"request"});var oN=i.object({id:i.string().trim().min(1).max(120),pluginId:i.string().trim().min(1).max(120),title:i.string().trim().min(1).max(160),description:i.string().max(500).optional(),group:i.string().trim().min(1).max(120),rendererName:i.literal(Ll),priority:i.number().int().default(50),section:i.enum(["primary","secondary","sidebar"]).default("primary"),visibility:i.enum(["trusted","admin"]),needsAttention:i.number().int().nonnegative().optional(),digest:i.array(i.object({label:i.string().trim().min(1).max(160),value:i.string().max(500),tone:i.enum(["plain","good","warn"]).optional()})).max(4).optional(),dataProvider:i.custom((e)=>typeof e==="function",{message:"Expected Overview contribution data provider function"}),digestProvider:i.custom((e)=>typeof e==="function",{message:"Expected Overview contribution digest provider function"}).optional()}).strict(),C7=i.object({pluginId:i.string(),contributionId:i.string().optional()}),zh=Xn({channel:"studio:register-overview-contribution",request:oN,response:i.void(),delivery:"request"}),EC=Xn({channel:"studio:unregister-overview-contribution",request:C7,response:i.void(),delivery:"request"});function Nh(e,t){if(t.status==="failed")throw Up(t.error,`Dashboard widget ${e} failed: ${t.error.message}`);return t.status==="answered"}function aN(e,t,n){let r=async(o,a)=>n(o.name)?e.request(o,a):{status:"unavailable"};return{isAvailable:()=>n(Dh.name)||n(zh.name),registerWidget:async(o)=>{let a=Nh("register",await r(Dh,{...o,pluginId:t})),s=o.visibility??"public";if(s==="public")return a;let l=Nh("register",await r(zh,{...o,pluginId:t,visibility:s}));return a||l},unregisterWidget:async(o)=>{let a=Nh("unregister",await r(IC,{pluginId:t,...o?{widgetId:o}:{}})),s=Nh("unregister",await r(EC,{pluginId:t,...o?{contributionId:o}:{}}));return a||s}}}var RC=i.object({name:i.string(),description:i.string(),tags:i.array(i.string()),examples:i.array(i.string())});var sN=100;function I7(e){let t=e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,200);return t.length>0?t:"skill"}function lN(e){return{async list(){let t=e.getEntityService();if(t.hasEntityType("skill")){let n;try{n=await t.listEntities({entityType:"skill",options:{filter:{visibilityScope:"public"}}})}catch{n=void 0}if(n!==void 0){let r=n.map((o)=>RC.safeParse(o.metadata)).filter((o)=>o.success).map(({data:o})=>({id:I7(o.name),name:o.name,description:o.description,tags:o.tags,examples:o.examples}));if(r.length>0)return r.slice(0,sN)}}return e.listToolsForPermissionLevel("public").map((n)=>({id:n.name,name:n.name,description:n.description,tags:[],examples:[]})).slice(0,sN)}}}function ql(e,t,n){let r=e.getEntityService(),o=e.getLogger().child(t),a=e.getDomain(),s=e.getLocalSiteUrl(),l=e.shouldPreferLocalUrls(),c=e.isProduction(),u=e.getThemeCSS(),d=Lz(e),p=e.getAttachmentRegistry(),f=e.getRuntimeUploadRegistry(),g=e.getRuntimeState(),h=e.getAccountSettingsRegistry(),w=n?.executionOnly===!0,v=Jz(e,t,o,w);return{pluginId:t,executionOnly:w,logger:o,entityService:r,semantic:{project:(b)=>r.projectSemanticSpace(b)},identity:qz(e,d),profileKinds:Fz(e,t),channels:CC(e),publicSkills:lN(e),inbox:Zz(e,t),inboxFollowUps:Wz(e,t),appInfo:d,readiness:()=>e.getRuntimeReadiness(),operationalHealth:Uz(e,t),judge:(b)=>e.judge(b),domain:a,siteUrl:a?`https://${a}`:void 0,localSiteUrl:s,previewUrl:a?`https://${GT(a)}`:void 0,preferLocalUrls:l,production:c,servesHttp:e.servesHttp(),themeCSS:u,entityDisplay:n?.entityDisplay,spaces:e.getSpaces(),permissions:Hz(e),messaging:v,dashboard:aN(v,t,(b)=>e.getMessageBus().hasHandlers?.(b)??!1),studio:rN(v,t,(b)=>e.getMessageBus().hasHandlers?.(b)??!1),jobs:Vz(e,t),jobAuthority:nz(e,t),attachments:p,uploads:f,accountSettings:h,auth:e.getAuthRegistry(),atprotoProjections:e.getAtprotoProjectionRegistry(),runtimeState:g,recurringChecks:e.getRecurringChecks(t),conversations:Qz(e),dataDir:e.getDataDir(),gitBrokerSocket:e.getGitBrokerSocket(),gitBrokerCheckout:e.getGitBrokerCheckout(),eval:w?{registerHandler:()=>{}}:Kz(e,t),analytics:w?{register:()=>{}}:Yz(e),plugins:Xz(e),endpoints:w?{register:()=>{}}:eN(e,t),interactions:w?{register:()=>{}}:tN(e,t)}}function Zp(e){return e.replace(/:/g,"-")}function dN(e){return aT(e.replace(/[:.]/g," "))}function E7(e){return e.split(/[:.-]/).map((t)=>t.charAt(0).toUpperCase()+t.slice(1)).join(" ")}var R7=i.record(i.string(),i.unknown());function _C(e){let t=Pn(e,R7);return{body:t.content,frontmatter:t.metadata}}function pN(e){return _C(e).body}function kC(e){return Di(e.trim())}function mN(e,t){let n=Zp(e),r=dN(e),o=kC(t);return{id:n,entityType:"prompt",content:Yi(t,{title:r,target:e,defaultHash:o}),metadata:{title:r,target:e,slug:n,defaultHash:o}}}async function k7(e,t,n){let r=await e("prompt",Zp(t));return r?.content?pN(r.content):n}var cN=new WeakMap;function AC(e){let t=cN.get(e);if(t)return t;let n=new Set;return cN.set(e,n),n}async function PC(e,t,n){let r=Zp(t),o;try{o=await e.getEntity({entityType:"prompt",id:r})}catch{return n}if(o?.content)return pN(o.content);if(AC(e).has(t))return n;let a=mN(t,n);try{await e.createEntity({entity:a})}catch{}return AC(e).add(t),n}async function uN(e,t,n,r,o){await e.updateEntity({entity:{...t,content:Yi(r,{...n,defaultHash:o}),metadata:{...t.metadata,defaultHash:o}}})}async function A7(e,t,n){let r=await e.getEntity({entityType:"prompt",id:Zp(t),source:!0});if(!r)return await e.createEntity({entity:mN(t,n)}),AC(e).add(t),"created";let{body:o,frontmatter:a}=_C(r.content),s=kC(n),l=kC(o),c=typeof a.defaultHash==="string"?a.defaultHash:void 0;if(l===s){if(c===s)return;return await uN(e,r,a,o,s),"stamped"}if(c===void 0)return"unverifiedOverrides";if(c===s)return;if(l!==c)return"staleOverrides";return await uN(e,r,a,n,s),"refreshed"}async function _7(e,t){let n=dN(t),r=E7(t);if(r===n)return!1;let o=await e.getEntity({entityType:"prompt",id:Zp(t),source:!0});if(!o)return!1;let{body:a,frontmatter:s}=_C(o.content);if(s.title!==r)return!1;return await e.updateEntity({entity:{...o,content:Yi(a,{...s,title:n}),metadata:{...o.metadata,title:n}}}),!0}async function P7(e,t){let n={created:[],refreshed:[],stamped:[],retitled:[],staleOverrides:[],unverifiedOverrides:[],failed:[]};if(!t.hasEntityType("prompt"))return n;let r=[...e.getAll()].flatMap(([a,s])=>s.basePrompt?[{target:a,basePrompt:s.basePrompt}]:[]);return(await Promise.allSettled(r.map(async({target:a,basePrompt:s})=>({outcome:await A7(t,a,s),retitled:await _7(t,a)})))).forEach((a,s)=>{let l=r[s]?.target??"";if(a.status==="rejected"){n.failed.push({target:l,error:he(a.reason)});return}if(a.value.outcome)n[a.value.outcome].push(l);if(a.value.retitled)n.retitled.push(l)}),n}function $h(e){let t=e.getEntityService(),n=e.getEntityRegistry(),r=e.getDataSourceRegistry();return{registerGroupingSource:(o)=>n.registerGroupingSource(o),ensureGroupingsCurrent:()=>n.ensureGroupingsCurrent(),validateGroupings:(o)=>n.validateGroupings(o),replaceGroupings:(o,a)=>n.replaceGroupings(o,a),registerGrouping:(o)=>n.registerGrouping(o),getGroupings:()=>n.getGroupings(),isGroupingContributor:(o)=>n.isGroupingContributor(o),register:(o,a,s,l)=>{n.registerEntityType(o,a,s,l)},getAdapter:(o)=>{try{return n.getAdapter(o)}catch{return}},extendFrontmatterSchema:(o,a)=>{n.extendFrontmatterSchema(o,a)},getEffectiveFrontmatterSchema:(o)=>n.getEffectiveFrontmatterSchema(o),registerPersistValidator:(o,a)=>{n.registerPersistValidator(o,a)},registerCreateInterceptor:(o,a)=>{n.registerCreateInterceptor(o,a)},registerCreateCheck:(o,a)=>{n.registerCreateCheck(o,a)},registerGenerationEnqueuer:(o,a)=>{n.registerGenerationEnqueuer(o,a)},registerUploadSaveHandler:(o)=>{n.registerUploadSaveHandler(o)},getUploadSaveHandler:(o)=>n.getUploadSaveHandler(o),update:async(o)=>t.updateEntity({entity:o}),registerDataSource:(o)=>{r.register(o)}}}function Bh(e){return{resolve:(t,n)=>PC(e,t,n)}}function Lh(e){let t=e.getRenderService();return{get:(n)=>t.get(n),list:()=>t.list(),hasRenderer:(n,r="web")=>t.hasRenderer(n,r),getRenderer:(n,r="web")=>t.getRenderer(n,r),validate:(n,r)=>t.validate(n,r)}}function qh(e){return{query:(t,n)=>e.query(t,n),generate:async(t,n,r)=>(r?.throwIfAborted(),n.parse(await e.generateContent(t,r))),generateObject:async(t,n,r)=>e.generateObject(t,n,r),generateImage:async(t,n)=>e.generateImage(t,n),canGenerateImages:()=>e.canGenerateImages()}}function OC(e,t,n){let r=ql(e,t,n),o=e.getEntityService();return{...r,entityService:o,entities:$h(e),ai:qh(e),prompts:Bh(o),views:Lh(e),permissions:r.permissions}}var MC=i.object({});class hu extends Pl{type="entity";entityActionPolicy;constructor(e,t,n,r,o){super(e,t,n,r);if(o!==void 0)this.entityActionPolicy=o}async register(e,t){let n=OC(e,this.id,t);this.context=n,this.setupMessageHandlers(n);let r=this.getProjectionRules(n),o=this.getEntityTypeConfig(),a=r.some((f)=>f.targetType===this.entityType),s=o?.projectionSource!==!1&&o?.projectionSourceRole!=="excluded"&&(o?.projectionSource===!0||o?.projectionSourceRole!==void 0),l=a&&!s?{...o,projectionSource:!1,projectionSourceRole:"excluded"}:o;if(n.entities.register(this.entityType,this.schema,this.adapter,l),this.interceptCreate!==hu.prototype.interceptCreate)n.entities.registerCreateInterceptor(this.entityType,(f,g)=>this.interceptCreate(f,g,n));if(this.checkCreate!==hu.prototype.checkCreate)n.entities.registerCreateCheck(this.entityType,(f,g)=>this.checkCreate(f,g,n));let c=this.createGenerationHandler(n);if(c)n.jobs.registerHandler(`${this.entityType}:generation`,c);let u=this.getTemplates();if(u&&Object.keys(u).length>0)e.registerTemplates(u,this.id);let d=this.getDataSources();for(let f of d)n.entities.registerDataSource(f);await this.onRegister(this.context);let p=await this.getInstructions();return{tools:[],resources:[],...p&&{instructions:p},...r.length>0&&{projectionRules:r}}}async interceptCreate(e,t,n){return{kind:"continue",input:e}}async checkCreate(e,t,n){return{kind:"ready"}}createGenerationHandler(e){return null}getTemplates(){return null}getDataSources(){return[]}getEntityTypeConfig(){return}getProjectionRules(e){return[]}}var O7=i.strictObject({field:i.string().min(1).max(100),direction:i.enum(["asc","desc"]),nullsFirst:i.boolean().optional(),nullsLast:i.boolean().optional()}),fN=i.array(i.string().min(1)).optional(),M7=i.strictObject({weight:i.number().optional(),embeddable:i.boolean().optional(),fullTextSearchable:i.boolean().optional(),includeInBroadSearch:i.boolean().optional(),binaryStorage:i.enum(["data-url","asset"]).optional(),defaultSort:i.array(O7).max(10).optional(),markdownImport:i.boolean().optional(),retiredFields:fN,translatedFields:fN,actionPolicy:Fh.optional(),projectionSource:i.boolean().optional(),projectionSourceRole:i.enum(["canonical","primary","secondary","supporting","ambient","excluded"]).optional(),containedIn:i.string().min(1).optional(),publish:i.strictObject({publishStatuses:i.array(i.string().min(1))}).optional()});function gN(e,t){let{defaultSort:n,actionPolicy:r,...o}=M7.parse(t??{});return{classification:e,...qe({...o,defaultSort:n?.map(({field:a,direction:s,...l})=>({field:a,direction:s,...qe(l)})),actionPolicy:r&&qe(r)})}}var hN=i.strictObject({from:i.strictObject({entityType:i.string().min(1),status:i.string().min(1).optional(),limit:i.number().int().min(1).max(100)}),mode:i.enum(["each","batch"])});function jC(e,t,n){return async(r,o)=>{let a=await t({entityType:e,...r.title!==void 0?{title:r.title}:{},...r.visibility!==void 0?{visibility:r.visibility}:{},from:r.upload},o);return a.kind==="handled"?a.result:{success:!1,error:n}}}import{mkdir as j7,readdir as D7,readFile as yN,rm as DC,stat as vN,writeFile as bN}from"fs/promises";import{basename as z7,dirname as N7,join as Bo}from"path";var zC="upload-[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}",Uh=new RegExp(`^${zC}$`,"i"),SN=86400000,wN=200,Lo=Object.freeze({namespace:"upload",refKind:"upload",routePath:"/api/chat/uploads"});class xa extends Error{code;constructor(e,t){super(t);this.code=e,this.name="RuntimeUploadStoreError"}}var $7=i.object({id:i.string().regex(Uh),ref:i.object({kind:i.string().min(1),id:i.string().regex(Uh)}),filename:i.string().min(1),mediaType:i.string().min(1),sizeBytes:i.number().nonnegative(),createdAt:i.string().datetime(),metadata:i.record(i.string(),i.unknown()).optional()}),B7=/^[a-z][a-z0-9-]*$/;function L7(e){return{scoped:(t)=>e.scoped(t),retire:(t)=>e.retire(t)}}function xN(e){return z7(e)==="brain-data"?Bo(N7(e),"data"):e}class NC{dataDir;logger;constructor(e){this.dataDir=xN(e.dataDir),this.logger=e.logger}static createFresh(e){return new NC(e)}scoped(e){return new $C({...e,dataDir:this.dataDir,...this.logger!==void 0&&{logger:this.logger}})}async retire(e){if(!B7.test(e))throw Error(`"${e}" is not an upload namespace`);if(e===Lo.namespace)throw Error(`"${e}" is the runtime's shared upload store; the runtime's shared upload store is never retired`);let t=Bo(this.dataDir,e,"uploads");try{await vN(t)}catch(n){if(yu(n))return!1;throw n}return await DC(t,{recursive:!0,force:!0}),!0}}class $C{options;retentionMs;maxCount;createUploadId;getNow;logger;constructor(e){this.options=e,this.logger=e.logger,this.retentionMs=e.retentionMs??SN,this.maxCount=e.maxCount??wN,this.createUploadId=e.createId??(()=>`upload-${crypto.randomUUID()}`),this.getNow=e.now??(()=>new Date)}async save(e){let t=this.createUploadId();this.assertValidUploadId(t);let n={id:t,ref:{kind:this.options.refKind,id:t},filename:e.filename,mediaType:e.mediaType,sizeBytes:e.content.byteLength,createdAt:this.getNow().toISOString(),...e.metadata!==void 0&&{metadata:e.metadata}},r=this.getUploadDir(t);return await j7(r,{recursive:!0}),await bN(Bo(r,"content"),e.content),await bN(Bo(r,"metadata.json"),`${JSON.stringify(n,null,2)}
183
- `,"utf8"),await this.prune().catch((o)=>{this.logger?.warn("Failed to prune runtime uploads",{error:he(o)})}),n}async remove(e){this.assertValidUploadId(e),await DC(this.getUploadDir(e),{recursive:!0,force:!0})}async read(e){let t=await this.readRecord(e);try{let n=await yN(Bo(this.getUploadDir(e),"content"));return{record:t,content:n}}catch(n){if(yu(n))throw new xa("not_found","Upload not found");throw new xa("invalid_metadata","Upload content could not be read")}}async readRecord(e){this.assertValidUploadId(e);try{let t=await yN(Bo(this.getUploadDir(e),"metadata.json"),"utf8"),n=$7.safeParse(JSON.parse(t));if(!n.success||n.data.id!==e||n.data.ref.id!==e||n.data.ref.kind!==this.options.refKind)throw new xa("invalid_metadata","Invalid upload metadata");return n.data}catch(t){if(t instanceof xa)throw t;if(yu(t))throw new xa("not_found","Upload not found");throw new xa("invalid_metadata","Upload metadata could not be read")}}toResponseBody(e){return{...e,url:this.getUploadUrl(e.id),downloadUrl:this.getUploadUrl(e.id,!0)}}async prune(){let e=this.getUploadsRoot(),t;try{t=await D7(e)}catch(s){if(yu(s))return;throw s}let r=(await Promise.all(t.map(async(s)=>{try{let l=await vN(Bo(e,s));return l.isDirectory()?{entry:s,mtimeMs:l.mtimeMs}:null}catch(l){if(yu(l))return null;throw l}}))).filter((s)=>s!==null).sort((s,l)=>l.mtimeMs-s.mtimeMs),o=this.getNow().getTime()-this.retentionMs,a=r.filter((s,l)=>l>=this.maxCount||s.mtimeMs<o);await Promise.all(a.map((s)=>DC(Bo(e,s.entry),{recursive:!0,force:!0})))}getUploadDir(e){return this.assertValidUploadId(e),Bo(this.getUploadsRoot(),e)}getUploadsRoot(){return Bo(this.options.dataDir,this.options.namespace,"uploads")}getUploadUrl(e,t=!1){this.assertValidUploadId(e);let n=encodeURIComponent(e);return`${this.options.routePath}?id=${n}${t?"&download=1":""}`}assertValidUploadId(e){if(!Uh.test(e))throw new xa("invalid_ref","Invalid upload ref")}}import{AsyncLocalStorage as q7}from"async_hooks";function BC(e){if(typeof e!=="object"||e===null||!("entityId"in e))return;let t=e.entityId;return typeof t==="string"&&t.trim().length>0?t.trim():void 0}function TN(e){if(!Xe(e)||!("coverImage"in e))return;let t=e.coverImage;if(t===void 0||t===!1)return;if(t===!0)return{generate:!0};if(!Xe(t))return;if(t.generate===!1)return;let n=t.prompt,r=typeof n==="string"?n.trim():void 0;return{generate:!0,...r&&{prompt:r}}}function Wh(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function CN(e){let t={...e};return delete t.status,delete t.error,Wh(t)}class Gh extends zp{context;entityType;retries;constructor(e,t,n){super(e,{schema:n.schema,jobTypeName:n.jobTypeName});this.context=t,this.entityType=n.entityType,this.retries=n.retries}async enqueueFollowUp(e,t,n){if(!this.retries){await e();return}await this.retries.run(e,t,n)}async afterCreate(e,t,n,r){}async onGenerationFailure(e,t){}validateAndParse(e){let t=super.validateAndParse(e);if(!t)return null;let n=TN(e);if(typeof t!=="object")return t;let r=BC(e);if(!n&&!r)return t;return Object.assign(t,{...n&&{coverImage:n},...r&&{entityId:r}}),t}async process(e,t,n){try{await this.reportProgress(n,{progress:Zh.START,message:`Starting ${this.jobTypeName}`});let r=await this.generate(e,n),o=BC(e),a=o?this.applyPreallocatedEntityId(o,r):r;await this.reportProgress(n,{progress:Zh.SAVE,message:`Saving ${this.entityType} to database`});let s=o?await this.updatePreallocatedStub(o,a):await this.context.entityService.createEntity({entity:{id:a.id,entityType:this.entityType,content:a.content,metadata:a.metadata,...a.visibility&&{visibility:a.visibility}},options:a.createOptions});return await this.afterCreate(e,s.entityId,n,a),await this.enqueueGenericCoverImageIfRequested(e,s.entityId,n,a),await this.reportProgress(n,{progress:Zh.COMPLETE,message:`${a.title??this.entityType} created successfully`}),this.toResult({success:!0,entityId:s.entityId,...a.resultExtras})}catch(r){if(r instanceof LC)return await this.markPreallocatedStubFailed(e,r.message),await this.onGenerationFailure(e,r.message),this.toResult({success:!1,error:r.message});let o=he(r);return this.logger.error(`${this.jobTypeName} job failed`,{error:r,jobId:t,data:this.summarizeDataForLog(e)}),await this.markPreallocatedStubFailed(e,o),await this.onGenerationFailure(e,o),this.toResult(IN.failure(r))}}toResult(e){return e}applyPreallocatedEntityId(e,t){let n={...t.metadata},r=t.content,o=t.resultExtras;if(typeof n.slug==="string")n.slug=e,r=Cl(r,"slug",e),o={...o,slug:e};return{...t,id:e,content:r,metadata:n,...o&&{resultExtras:o}}}async updatePreallocatedStub(e,t){let n=await this.context.entityService.getEntity({entityType:this.entityType,id:e,visibilityScope:zt("pre-allocated generation stub update")});if(!n)throw Error(`Pre-allocated entity stub not found: ${this.entityType}/${e}`);let r=this.mergeStubWithGenerated(n,t);return this.context.entityService.updateEntity({entity:{...n,id:e,entityType:this.entityType,content:r.content,metadata:r.metadata,...t.visibility&&{visibility:t.visibility}}})}mergeStubWithGenerated(e,t){let n=CN(ms(e.content).frontmatter),r=CN(e.metadata),o=Wh(t.metadata),a=ms(t.content),s=Wh(a.frontmatter),l=Wh({...n,...o,...s});return this.context.entities.getEffectiveFrontmatterSchema(this.entityType)?.parse(l),{content:Yr(l,a.content),metadata:{...r,...o}}}async onTerminalError(e,t){await this.markPreallocatedStubFailed(t,e.message,{onlyWhileGenerating:!0})}async markPreallocatedStubFailed(e,t,n={}){let r=BC(e);if(!r)return;try{let o=await this.context.entityService.getEntity({entityType:this.entityType,id:r,visibilityScope:zt("mark generation stub failed")});if(!o)return;if(n.onlyWhileGenerating&&o.metadata.status!=="generating")return;await this.context.entityService.updateEntity({entity:{...o,content:Cl(Cl(o.content,"status","failed"),"error",t),metadata:{...o.metadata,status:"failed",error:t}}})}catch(o){this.logger.warn("Failed to mark generation stub as failed",{error:o,entityId:r,entityType:this.entityType})}}async enqueueGenericCoverImageIfRequested(e,t,n,r){let o=TN(e);if(!o)return;await this.reportProgress(n,{progress:90,message:"Queueing cover image generation"});let a=r.title??t;await this.enqueueFollowUp(()=>this.context.jobs.enqueue(EN,{prompt:o.prompt??`Editorial cover image for: ${a}. `,title:`${a} Cover`,aspectRatio:"16:9",targetEntityType:this.entityType,targetEntityId:t,entityTitle:a,entityContent:r.content},{toolContext:{interfaceType:"job",actor:{kind:"service",serviceId:"generation-job-handler"}}}),`queue the cover image for ${this.entityType}:${t}`,`cover-image:${this.entityType}:${t}`)}failEarly(e){throw new LC(e)}}class LC extends Error{constructor(e){super(e);this.name="GenerationFailure"}}async function qC(e,t={}){let n=t.pollMs??100,r=Date.now()+(t.timeoutMs??60000),o=async()=>{if((await e.getActiveJobs([fi.embedding])).length===0)return;if(Date.now()>=r)throw Error("Embeddings did not drain before the deadline");return await new Promise((s)=>setTimeout(s,n)),o()};return o()}async function Jh(e,t,n,r){if(r.asPackage===!0)return;let o=await r.access();if(e===void 0||e==="never"||vi.hasPermission(o.permissionLevel,e))return;let a=`Writing ${t} (${n}) requires ${e} permission; the caller has ${o.permissionLevel}`;throw new it("permission_denied",{message:a,publicMessage:a})}function RN(e,t){let n=e.metadata.safeParse(t);if(!n.success)throw new it("invalid_input",{message:`Invalid ${e.type} metadata: ${n.error.message}`,cause:n.error});return n.data}function FC(e,t){return new it("conflict",{message:`The ${e} "${t}" changed after it was read`,publicMessage:"The record changed after it was read; read it again"})}function Vh(e){let{entityService:t}=e;async function n(o,a,s){let l=await s.access();if(a.entityType!==o.type)throw new it("permission_denied",{message:`A ${o.type} write cannot change a ${a.entityType}`});let c=await t.getEntityRaw({entityType:o.type,id:a.id,visibilityScope:e.readScope(s,o.type,l)});if(!c)throw new it("not_found",{message:`No ${o.type} "${a.id}" is visible to the caller`});if(c.contentHash!==a.contentHash)throw FC(o.type,a.id);return c}return{create:async(o,a)=>{let s=e.owned(o),l=e.currentCall();await e.assertWriteAllowed(s.type,"create",l),await e.assertCreateVisibility?.(s.type,a.visibility??"public",l);let c=RN(s,a.metadata);if(a.id!==void 0){if(await t.getEntity({entityType:s.type,id:a.id,visibilityScope:zt("an owned create checks whether its id is taken; no content returned")}))throw new it("conflict",{message:`A ${s.type} "${a.id}" already exists`})}return{id:(await t.createEntity({entity:{...qe({id:a.id,visibility:a.visibility}),entityType:s.type,content:a.content,metadata:c},options:{...a.id!==void 0&&{conditionalWrite:{expectedRevision:null}},eventContext:l.eventContext}})).entityId}},update:async(o,a,s)=>{let l=e.owned(o),c=e.currentCall();await e.assertWriteAllowed(l.type,"update",c);let u=await n(l,a,c);if((await t.updateEntity({entity:{...u,content:s.content??u.content,metadata:RN(l,s.metadata??a.metadata)},options:{expectedContentHash:a.contentHash,eventContext:c.eventContext}})).skipReason==="content-conflict")throw FC(l.type,a.id)},delete:async(o,a)=>{let s=e.owned(o),l=e.currentCall();if(await e.assertWriteAllowed(s.type,"delete",l),await n(s,a,l),!await t.deleteEntity({entityType:s.type,id:a.id,options:{expectedContentHash:a.contentHash,eventContext:l.eventContext}}))throw FC(s.type,a.id)}}}function Wp(e,t,n){return Object.freeze({async generate(r,o){let a=t(r.template),s=r.voice?await _N(e.entityService):"",l=await e.ai.generate({prompt:r.prompt,templateName:a,...r.data&&{data:{...r.data}},...qe({representedIdentity:r.representedIdentity}),...s&&{styleGuide:{voice:s}}},i.unknown(),n);return wi(o,l)}})}function ON(e,t){let n=new Map,r=(o,a)=>`${o}\x00${a}`;return Object.freeze({async seed(o){await e.entityService.createEntity({entity:{id:o.id,entityType:o.entityType,content:o.content,visibility:ui.parse(o.visibility??"public"),metadata:{...o.metadata}}}),n.set(r(o.entityType,o.id),{entityType:o.entityType,id:o.id})},async reset(o){let a=ui.parse(o?.visibilityScope??"public"),s=await e.entityService.listEntities({entityType:t,options:{filter:{visibilityScope:a}}}),l=new Map([...s.map((c)=>[r(c.entityType,c.id),{entityType:c.entityType,id:c.id}]),...n]);await Promise.all([...l.values()].map((c)=>e.entityService.deleteEntity(c))),n.clear()},settleEmbeddings:()=>qC(e.jobs)})}async function Qh(e,t,n){let r=await t.access(),o=(a)=>t.asPackage===!0&&n(a);return Object.freeze({entities:pu(e.entityService,()=>t,n),scope:(a)=>vs(t,n(a),r),refusal:(a,s)=>{if(o(a))return;try{e.permissions.assertEntityActionAllowed(a,s,{userPermissionLevel:r.permissionLevel});return}catch(l){return he(l)}},visibilityRefusal:(a,s)=>o(a)||Ja(r.permissionLevel,s)?void 0:`A ${r.permissionLevel} requester cannot write a ${s} ${a}`})}var MN=i.object({entityType:i.string().min(1),ids:i.array(i.string().min(1)).min(1)});function Gp(e){let{sourceEntityType:t,sourceEntityId:n,sourceEntityIds:r}=e;if(typeof t!=="string"||t==="")return;let o=[...typeof n==="string"?[n]:[],...Array.isArray(r)?r.filter((s)=>typeof s==="string"):[]].filter((s)=>s!==""),a=[...new Set(o)];return a.length>0?{entityType:t,ids:a}:void 0}function kN(e,t){return e===void 0||Pc(e,t)?t:e}function UC(e,t,n,r,o){let s=Object.freeze({publish:(c,u)=>e.messaging.broadcast(c,u)}),l=Object.freeze({report:(c)=>n.report({progress:c.progress,...qe({total:c.total,message:c.message})})});return Object.freeze({input:t,entities:o,messaging:s,progress:l,signal:r})}function ZC(e,t,n,r,o){let{declaring:a}=o;return Vh({entityService:e.entityService,owned:(s)=>{if(s.type!==a.type)throw new it("permission_denied",{message:`A ${a.type} job may only write ${a.type} records, and "${s.type}" is not its type`});return a},currentCall:()=>t,assertWriteAllowed:(s,l,c)=>Jh(o.requiredLevel(s,l),s,l,c),readScope:(s,l,c)=>vs(s,r(l),c),assertCreateVisibility:async(s,l)=>{let c=n.visibilityRefusal(s,l);if(c)throw new it("permission_denied",{message:c,publicMessage:c})}})}async function jN(e,t,n,r){let o={...va(e.jobAuthority),eventContext:{actor:{kind:"service",serviceId:t}}},a=await Qh(e,o,n);return Object.freeze({...a.entities,...ZC(e,o,a,n,r)})}function DN(e,t,n,r,o){let a=Mp(e.input);return{validateAndParse(s){let l=a.safeParse(s);return l.success?l.data:null},async process(s,l,c,u){let d=await jp(t.jobAuthority,s),p=await Qh(t,d,n),f=UC(t,wi(e.input,s.input),c,u,p.entities);return e.handle(_l({...f,entities:Object.freeze({...p.entities,...ZC(t,d,p,n,r)})},o(p)))}}}function zN(e,t,n,r,o,a){return{validateAndParse(s){let l=e.input.safeParse(s);return l.success?l.data:null},async process(s,l,c,u){let d={...va(t.jobAuthority),eventContext:{actor:{kind:"service",serviceId:o}}},p=await Qh(t,d,n),f=t.uploads.scoped(Lo),g=UC(t,s,c,u,p.entities);return e.handle(_l({...g,entities:Object.freeze({...p.entities,...ZC(t,d,p,n,r)})},{where:"a contract job",reader:p.entities,packageReader:p.entities,ownsType:n,searchWithDistances:(h)=>t.entityService.searchWithDistances(h),generateObject:(h,w)=>t.ai.generateObject(h,w),generate:Wp(t,a,u).generate,anyEntities:{service:t.entityService,scope:()=>"public"},job:{logger:t.logger,images:Object.freeze({canGenerate:()=>t.ai.canGenerateImages(),generate:async(h,w)=>{let{dataUrl:v}=await t.ai.generateImage(h,qe({aspectRatio:w?.aspectRatio}));return{dataUrl:v}}}),attachments:Object.freeze({resolve:(h)=>t.attachments.resolve({...h})}),uploads:Object.freeze({read:(h)=>f.read(h),readRecord:(h)=>f.readRecord(h)}),linkInto:async(h,w)=>{let v=await NN(t,w,p);if(v)throw Error(v);await BN(t,h,w,p)}}}))}}}async function F7(e,t,n){return n.refusal(t.entityType,"update")??await NN(e,t,n)}async function NN(e,t,n){let r=await e.entityService.getEntity({entityType:t.entityType,id:t.entityId,visibilityScope:n.scope(t.entityType)});if(!r)return`Target entity not found: ${t.entityType}/${t.entityId}`;if("field"in t&&t.field==="coverImageId"&&e.entities.getAdapter(t.entityType)?.supportsCoverImage!==!0)return`Entity type '${t.entityType}' doesn't support cover images`;if(e.entities.getAdapter(t.entityType)?.metadataFromFrontmatter!==!0)return;let o=e.entities.getEffectiveFrontmatterSchema(t.entityType);if(!o)return;let a="field"in t?t.field:t.list,s={...r.metadata,[a]:"field"in t?"linked-entity":$N(r.metadata[t.list],t,"linked-entity")},l;try{l=o.parse(s)}catch{return`Entity type '${t.entityType}' field '${a}' cannot hold a link`}return typeof l==="object"&&l!==null&&Object.hasOwn(l,a)?void 0:`Entity type '${t.entityType}' declares no metadata field '${a}' to link into`}function $N(e,t,n){let r=new Set(t.replaces??[]),o=(Array.isArray(e)?e:[]).flatMap((a)=>typeof a==="object"&&a!==null&&("id"in a)&&typeof a.id==="string"&&!r.has(a.id)?[{id:a.id}]:[]);return o.some(({id:a})=>a===n)?o:[...o,{id:n}]}async function BN(e,t,n,r){let o=await e.entityService.getEntityRaw({entityType:n.entityType,id:n.entityId,visibilityScope:r.scope(n.entityType)});if(!o)throw Error(`Cannot link ${t} into ${n.entityType}/${n.entityId}, which does not exist`);let a=e.entities.getAdapter(n.entityType)?.metadataFromFrontmatter===!0,s=a?o.metadata:ms(o.content).frontmatter,[l,c]="field"in n?[n.field,t]:[n.list,$N(s[n.list],n,t)];await e.entityService.updateEntity({entity:{...o,content:a?o.content:Cl(o.content,l,c),metadata:a||Object.hasOwn(o.metadata,l)?{...o.metadata,[l]:c}:o.metadata}})}function U7(e){if(typeof e!=="object"||e===null||!("entityId"in e))return;let t=e.entityId;return typeof t==="string"&&t.trim().length>0?t.trim():void 0}function Z7(e){return"linkInto"in e}var AN=Mp(i.unknown()).extend({entityId:i.string().optional(),source:MN.optional()}),LN=i.object({legacyRawData:i.literal(!0),input:i.unknown(),entityId:i.string().optional(),source:MN.optional()});function W7(e){let t=LN.safeParse(e);if(t.success)return t.data;if(!Xe(e)||"authority"in e)return null;let{entityId:n,...r}=e;return{legacyRawData:!0,input:r,...typeof n==="string"&&{entityId:n},...qe({source:Gp(e)})}}class WC extends Gh{runs=new q7;declaration;target;constructor(e,t,n,r){super(e,t,{schema:n.input,jobTypeName:r.jobTypeName,entityType:r.entityType,retries:r.retries});this.declaration=n,this.target=r}validateAndParse(e){let t=AN.safeParse(e),n=t.success?t.data:this.target.readsLegacyRawData===!0?W7(e):null;if(!n)return null;let r=super.validateAndParse(n.input);if(r===null)return null;return{...n,...qe({coverImage:Xe(r)?r.coverImage:void 0})}}async process(e,t,n,r){let o=AN.safeParse(e),a=o.success?o.data:LN.parse(e),s="legacyRawData"in a?{...va(this.context.jobAuthority),eventContext:{actor:{kind:"service",serviceId:this.target.pluginId}}}:await jp(this.context.jobAuthority,a),l={signal:r??new AbortController().signal,input:a.input,authority:await Qh(this.context,s,this.target.ownsType),source:a.source};return this.runs.run(l,()=>super.process(e,t,n))}async generate(e,t){let{signal:n,input:r,authority:o,source:a}=this.currentRun(),s=U7(e),l=o.refusal(this.entityType,"create");if(l)this.failEarly(l);let c=s===void 0?void 0:await this.context.entityService.getEntity({entityType:this.entityType,id:s,visibilityScope:o.scope(this.entityType)});if(s!==void 0&&!c)this.failEarly(`Pre-allocated entity stub not found: ${this.entityType}/${s}`);let u={...UC(this.context,wi(this.declaration.input,r),t,n,o.entities),entityId:s,ai:this.generationAI(n)},d=await this.declaration.generate(_l(u,this.target.runtime(o)));if(!d.success)this.failEarly(d.error);let p=await this.sourceVisibility(a),f=d.visibility??(p&&kN(c?.visibility,p)),g=f&&o.visibilityRefusal(this.entityType,f);if(g)this.failEarly(g);let h=d.linkInto;if(h){let b=await F7(this.context,h,o);if(b)this.failEarly(b)}let w={...d.metadata},v=typeof w.title==="string"?w.title:void 0;return{id:s??d.id??fa(v??this.entityType),content:d.content,metadata:w,...qe({title:v,resultExtras:d.resultExtras&&{...d.resultExtras}}),...h&&{linkInto:h},...f&&{visibility:f},...s===void 0&&oD(d)&&{createOptions:{deduplicateId:!0}}}}async afterCreate(e,t,n,r){if(Z7(r))await BN(this.context,t,r.linkInto,this.currentRun().authority);if(await this.runStep({written:{entityId:t,...qe({title:r.title})}}),this.target.reportsToPipeline)await this.context.messaging.command(PN,{entityType:this.entityType,entityId:t})}async onGenerationFailure(e,t){if(await this.runStep({failed:t}),this.target.reportsToPipeline)await this.context.messaging.command(Hh,{entityType:this.entityType,error:t})}async runStep(e){let t=ID(this.declaration),n=this.target.retries;if(!t||!n)return;let r=this.declaration.input.safeParse(this.runs.getStore()?.input);await t({input:r.success?r.data:void 0,outcome:e,messaging:this.context.messaging,jobs:this.context.jobs,retries:n})}generationAI(e){return Wp(this.context,this.target.template,e)}async sourceVisibility(e){if(!e)return;return(await Promise.all(e.ids.map((n)=>this.context.entityService.getEntity({entityType:e.entityType,id:n,visibilityScope:zt("a generation is no more visible than its source; only the visibility is read")})))).reduce((n,r)=>r?kN(n,r.visibility):n,void 0)}currentRun(){let e=this.runs.getStore();if(!e)throw Error(`${this.jobTypeName} ran outside its job`);return e}}async function GC({entityService:e,entity:t,options:n}){let r=await e.getEntity({entityType:t.entityType,id:t.id,visibilityScope:zt("pending entity identity check")});if(r)return{entityId:r.id,created:!1,existingEntity:r};let o=await e.createEntity({entity:t,...n?{options:n}:{}});return{entityId:o.entityId,created:!0,mutation:o}}var Jp=new WeakMap;function qN(e,t){let n=Jp.get(e);if(n&&n!==t)throw Error(`Job "${e.name}" is registered as both "${n}" and "${t}"`);Jp.set(e,t)}function FN(e,t){if(Jp.get(e)===t)Jp.delete(e)}function Vp(e){let t=Jp.get(e);if(!t)throw Error(`Job "${e.name}" is not registered by an active declarative service`);return t}function JC(e){if(!e.lastError)return;let t=cg.safeParse(e.lastErrorPublic).data??new it("handler_failed").toJSON();return{code:t.code,error:t.message}}function VC(e,t){return t.status==="completed"&&t.result!==void 0?wi(e,t.result):void 0}function HC(e,t){let n=VC(e.output,t);return{id:t.id,status:t.status,progress:t.progress,...n!==void 0?{result:n}:{},...JC(t)}}function ZN(e,t){return Object.freeze({async get(n,r){t.throwIfAborted();let o=await e.get(n,r);return t.throwIfAborted(),o},async list(n,r){t.throwIfAborted();let o=await e.list(n,r);return t.throwIfAborted(),o},async count(n){t.throwIfAborted();let r=await e.count(n);return t.throwIfAborted(),r}})}function WN(e,t){let n=async(o)=>{t.throwIfAborted();let a=await o();return t.throwIfAborted(),a},r={create:(o,a)=>n(()=>e.create(o,a)),update:(o,a,s)=>n(()=>e.update(o,a,s)),delete:(o,a)=>n(()=>e.delete(o,a))};return Object.freeze({...ZN(e,t),...r})}function QC(){let e=async()=>{throw new it("permission_denied",{message:"This operator surface keeps no account settings"})};return Object.freeze({read:e,save:e,claim:e,redeem:e})}function GN(){let e=async()=>{throw new it("permission_denied",{message:"This operator surface owns no entity types to write"})};return Object.freeze({create:e,update:e,delete:e})}function G7(e,t){let n={...t};for(let r in n)if(e.fields[r]?.secret===!0)delete n[r];return Object.freeze(n)}function UN(e,t){let n=VC(e.output,t);return Object.freeze({id:t.id,status:t.status,...n!==void 0?{result:n}:{},...JC(t)})}function J7(e,t){return e?{actor:{kind:"user",userId:e.actor.id},permissionLevel:e.permission}:Ml(t)}function V7(e,t){return{async enqueue(n,r){let o=Vp(n);n.input.parse(r);let a=await e.jobAuthority.admit(J7(t,e.pluginId)),s=await e.jobs.enqueue({type:o,data:{authority:a,input:r},options:{source:e.pluginId,metadata:{operationType:"data_processing",pluginId:e.pluginId}}});return Object.freeze({id:s,status:async()=>{let l=await e.jobs.getStatus(s);return l?.type===o?UN(n,l):null}})},async status(n,r){let o=Vp(n),a=await e.jobs.getStatus(r);return a?.type===o?UN(n,a):null}}}function KC(e){return Tr(e?.permission??"public")}async function Kh(e){let{caller:t,signal:n}=e.provider;n.throwIfAborted();let r=t?.permission??"public",o=t&&e.accountSettingsRegistration?await e.context.accountSettings.getForActor(e.accountSettingsRegistration,t.actor.id):null,a=o&&e.accountSettingsRegistration?G7(e.accountSettingsRegistration.definition,o):null;return{config:e.config,state:e.state,caller:t,settings:a,accountSettings:e.accountSettings??QC(),entities:ZN(e.entities??Ur(e.context.entityService,KC(t)),n),jobs:V7(e.context,t),permissions:{allows(s,l){try{return e.context.permissions.assertEntityActionAllowed(s.type,l,{userPermissionLevel:r}),!0}catch{return!1}}},signal:n}}function Hp(e){return e.issues.map((t)=>({path:t.path,message:t.message}))}function xi(e){return typeof e==="object"&&e!==null&&!Array.isArray(e)}function Xh(e,t,n,r,o=!1){if(!xi(e))return;if(e.detail!==void 0&&!o){r.push({path:t,message:"A detail link is available only on rows of a detail block's master collection"});return}if(e.kind==="external"||e.kind==="entity"||e.kind==="launch"||e.kind==="detail"){r.push({path:t,message:"Author links must use a typed external, entity, catalog, or launch target rather than a normalized host target"});return}let a=e.launch;if(n==="dashboard"&&xi(a)&&(a.target==="inbox-open-entity"||a.target==="inbox-capture-note"||a.target==="inbox-discuss-in-chat"))r.push({path:[...t,"launch","target"],message:`Launch intent "${a.target}" is available only in Studio workspaces`})}function JN(e,t,n,r,o=!1){if(!Array.isArray(e))return;for(let[a,s]of e.entries()){if(!xi(s))continue;Xh(s.target,[...t,a,"target"],n,r,o)}}function Yh(e,t,n,r,o=!1){if(!Array.isArray(e))return;for(let[a,s]of e.entries()){if(!xi(s))continue;Xh(s.link,[...t,a,"link"],n,r,o),JN(s.links,[...t,a,"links"],n,r,o)}}function bu(e,t,n,r){if(!Array.isArray(e))return;for(let[o,a]of e.entries()){if(!xi(a))continue;let s=[...t,o];switch(a.type){case"links":JN(a.items,[...s,"items"],n,r);break;case"list":Yh(a.items,[...s,"items"],n,r);break;case"table":{let l=a.rows;if(Array.isArray(l))for(let[c,u]of l.entries()){if(!xi(u))continue;Xh(u.link,[...s,"rows",c,"link"],n,r)}break}case"matrix":{let l=a.cells;if(Array.isArray(l))for(let[c,u]of l.entries()){if(!xi(u))continue;Yh(u.items,[...s,"cells",c,"items"],n,r)}break}case"tabs":{let l=a.tabs;if(Array.isArray(l))for(let[c,u]of l.entries()){if(!xi(u))continue;bu(u.blocks,[...s,"tabs",c,"blocks"],n,r)}break}case"card":bu(a.blocks,[...s,"blocks"],n,r);break;case"columns":bu(a.primary,[...s,"primary"],n,r),bu(a.aside,[...s,"aside"],n,r);break;case"detail":{let l=a.master;if(xi(l)){let u=[...s,"master"];Yh(l.items,[...u,"items"],n,r,!0);let d=l.cells;if(Array.isArray(d))for(let[f,g]of d.entries()){if(!xi(g))continue;Yh(g.items,[...u,"cells",f,"items"],n,r,!0)}let p=l.rows;if(Array.isArray(p))for(let[f,g]of p.entries()){if(!xi(g))continue;Xh(g.link,[...u,"rows",f,"link"],n,r,!0)}}let c=a.open;if(xi(c))bu(c.blocks,[...s,"open","blocks"],n,r);break}}}}function YC(e,t){if(!xi(e))return[];let n=[];return bu(e.blocks,["blocks"],t,n),n}var XC=i.json();function H7(e,t){let n=ox(jo(t).inner);switch(e){case"checkbox":return n==="boolean";case"number":return n==="number";case"select":return n==="string"||n==="enum";case"text":case"textarea":case"url":return n==="string"}}function Q7(e){let t=ox(jo(e).inner);return t==="string"||t==="number"||t==="boolean"||t==="enum"||t==="literal"}function K7(e,t,n,r){let{actionPath:o}=r,a=[],s=Bg(jo(n).inner);if(!H7(t.control,n))a.push({path:[...o,"form","fields",e,"control"],message:`Form control "${t.control}" is incompatible with schema field "${e}"`});if(t.control==="select"){if(!t.options||t.options.length===0)a.push({path:[...o,"form","fields",e,"options"],message:`Select field "${e}" requires options`});else if(s){if(t.options.some((l)=>!s.includes(l.value)))a.push({path:[...o,"form","fields",e,"options"],message:`Select field "${e}" options must use values from its enum schema`})}}else if(t.options!==void 0)a.push({path:[...o,"form","fields",e,"options"],message:`Non-select field "${e}" cannot declare options`});if(t.labelBy){let l=r.fields[t.labelBy.field],c=new Set(l?.options?.map((d)=>d.value)??[]),u=new Set(t.labelBy.values.map((d)=>d.value));if(l?.control!=="select")a.push({path:[...o,"form","fields",e,"labelBy","field"],message:`Dynamic label source "${t.labelBy.field}" must be a select form field`});else if(c.size!==u.size||Array.from(c).some((d)=>!u.has(d)))a.push({path:[...o,"form","fields",e,"labelBy","values"],message:`Dynamic labels for "${e}" must cover every option of "${t.labelBy.field}"`})}if(t.secret===!0&&e in r.initial)a.push({path:[...o,"input",e],message:`Secret form field "${e}" cannot be pre-bound into browser data`});if(t.secret===!0&&t.control!=="text"&&t.control!=="url")a.push({path:[...o,"form","fields",e,"secret"],message:`Secret field "${e}" must use a text or URL control`});return a}function Y7(e,t,n){return Object.entries(t).flatMap(([r,o])=>{let a=e[r];if(a===void 0)return[{path:[...n,"input",r],message:`Form initial input "${r}" is not declared by the action schema`}];return a instanceof i.ZodType&&!a.safeParse(o).success?[{path:[...n,"input",r],message:`Form initial input "${r}" does not satisfy the action schema`}]:[]})}function X7(e,t){let n=e.form;if(!n)return{issues:[]};let r=as(e.action.input);if(!r)return{issues:[{path:[...t,"form"],message:`Form action "${e.action.name}" requires an object input schema`}]};let o=e.input??{};if(!Cn(o))return{issues:[{path:[...t,"input"],message:"Workspace action form initial input must be an object"}]};let a=XC.safeParse(o);if(!a.success)return{issues:[{path:[...t,"input"],message:"Workspace action form initial input must be JSON-native"}]};let s=Object.entries(n.fields),l=[];if(s.length>50)l.push({path:[...t,"form","fields"],message:"Workspace action forms support at most 50 fields"});l.push(...Y7(r,o,t));let c=[];for(let[d,p]of s){let f=r[d];if(f===void 0){l.push({path:[...t,"form","fields",d],message:`Form field "${d}" is not declared by the action schema`});continue}l.push(...K7(d,p,f,{fields:n.fields,initial:o,actionPath:t})),c.push({name:d,label:p.label,control:p.control,required:jo(f).required,...p.secret?{secret:!0}:{},...p.options?{options:p.options}:{},...p.labelBy?{labelBy:p.labelBy}:{}})}let u=new Set(s.map(([d])=>d));for(let d of Object.keys(r))if(!u.has(d)&&!(d in o))l.push({path:[...t,"form","fields",d],message:`Action schema field "${d}" has no form declaration or pre-bound input`});return{input:a.data,form:{...n.presentation?{presentation:n.presentation}:{},...n.submitLabel?{submitLabel:n.submitLabel}:{},fields:c},issues:l}}function eX(e,t){if(!e.result)return{issues:[]};let n=as(e.action.output);if(!n)return{issues:[{path:[...t,"result"],message:`Presented result for "${e.action.name}" requires an object output schema`}]};let r=[],o=Object.entries(e.result.fields);if(o.length>50)r.push({path:[...t,"result","fields"],message:"Workspace action results support at most 50 fields"});let a=new Set(o.map(([s])=>s));for(let[s,l]of o){let c=n[s];if(c===void 0)r.push({path:[...t,"result","fields",s],message:`Result field "${s}" is not declared by the action output schema`});else if(!Q7(c))r.push({path:[...t,"result","fields",s],message:`Result field "${s}" must use a scalar output schema`});if(l.sensitive===!0&&l.copyable!==!0)r.push({path:[...t,"result","fields",s,"copyable"],message:`Sensitive result field "${s}" must be explicitly copyable`})}for(let s of Object.keys(n))if(!a.has(s))r.push({path:[...t,"result","fields",s],message:`Action output field "${s}" has no result declaration`});return{result:{title:e.result.title,fields:o.map(([s,l])=>({name:s,label:l.label,...l.copyable?{copyable:!0}:{},...l.sensitive?{sensitive:!0}:{}}))},issues:r}}function Fl(e,t,n,r,o){let a=[],s=[];for(let[l,c]of e.entries()){let u=[...r,o?.[l]??l];if(!t.includes(c.action)){s.push({path:[...u,"action"],message:`Action "${c.action.name}" is not declared by this workspace`});continue}if(c.action.permission!==void 0&&!ha(n,c.action.permission))continue;if(c.action.catalog===!0&&!c.capability){s.push({path:[...u,"capability"],message:`Catalog action "${c.action.name}" requires a typed capability definition`});continue}if(c.action.catalog!==!0&&c.capability){s.push({path:[...u,"capability"],message:`Action "${c.action.name}" is not a capability catalog`});continue}if(c.capability?.confirmation==="prepared"&&c.action.confirmation?.kind!=="prepared"){s.push({path:[...u,"capability","confirmation"],message:`Capability "${c.capability.id}" requires a prepared catalog action`});continue}if(c.action.launch&&c.result){s.push({path:[...u,"result"],message:`Action "${c.action.name}" sends the browser elsewhere, so it has no result to show`});continue}let d=X7(c,u),p=eX(c,u);s.push(...d.issues,...p.issues);let f;if(c.form)f=d.input;else{let w=c.action.input.safeParse(c.input);if(!w.success)s.push(...w.error.issues.map((v)=>({path:[...u,"input",...v.path],message:v.message})));else{let v=XC.safeParse(c.input);if(!v.success||!XC.safeParse(w.data).success)s.push({path:[...u,"input"],message:"Workspace action input must be JSON-native"});else f=v.data}}if(d.issues.length>0||p.issues.length>0||f===void 0)continue;let g=c.action.confirmation,h=g?.kind==="static"?g:g?.kind==="prepared"&&(g.conditional!==!0||c.capability?.confirmation==="prepared")?{kind:"prepared"}:void 0;a.push(Object.freeze({actionId:c.action.name,...c.capability?{capabilityId:c.capability.id}:{},label:c.label??c.capability?.label??c.action.label,input:f,...d.form?{form:d.form}:{},...p.result?{result:p.result}:{},...c.disabled?{disabled:!0}:{},...h?{confirmation:h}:{},...c.action.launch?{launch:!0}:{},...c.dropTarget?{dropTarget:c.dropTarget}:{}}))}return{controls:a,issues:s}}function eI(e){return e.type!=="tabs"&&e.type!=="detail"&&e.type!=="columns"&&e.type!=="card"}function tX(e,t){return{type:"action",...t?{id:t}:{},...e}}function VN(e,t,n,r){let o=Fl(e.actions??[],n,r,[...t,"actions"]);return{item:{id:e.id,title:e.title,...e.description?{description:e.description}:{},...e.metadata?{metadata:e.metadata}:{},...e.at?{at:e.at}:{},...e.tags?{tags:e.tags}:{},...qe({count:e.count}),...e.badges?{badges:e.badges}:{},...e.filterValues?{filterValues:e.filterValues}:{},...e.links?{links:e.links}:{},...e.tone?{tone:e.tone}:{},...e.link?{link:e.link}:{},...o.controls.length>0?{actions:o.controls,...qe({actionsLabel:e.actionsLabel})}:{}},issues:o.issues}}function Ul(e,t,n,r){switch(e.type){case"list":{let o=[],a=e.items.map((s,l)=>{let c=VN(s,["blocks",t,"items",l],n,r);return o.push(...c.issues),c.item});return{block:{type:"list",id:e.id,empty:e.empty,...e.presentation?{presentation:e.presentation}:{},...e.filter?{filter:e.filter}:{},items:a},issues:o}}case"table":{let o=[],a=e.rows.map((s,l)=>{let c=Fl(s.actions??[],n,r,["blocks",t,"rows",l,"actions"]);return o.push(...c.issues),{id:s.id,cells:s.cells,...s.compact?{compact:s.compact}:{},...s.link?{link:s.link}:{},...c.controls.length>0?{actions:c.controls}:{}}});return{block:{type:"table",id:e.id,empty:e.empty,...e.filters?{filters:e.filters}:{},...e.query?{query:e.query}:{},columns:e.columns,rows:a},issues:o}}case"matrix":{let o=[],a=e.cells.map((s,l)=>({id:s.id,label:s.label,...s.tone?{tone:s.tone}:{},empty:s.empty,items:s.items.map((c,u)=>{let d=VN(c,["blocks",t,"cells",l,"items",u],n,r);return o.push(...d.issues),d.item})}));return{block:{type:"matrix",id:e.id,...e.columns?{columns:e.columns}:{},cells:a},issues:o}}case"tabs":{let o=[],a=e.tabs.map((s)=>{let l=[];for(let[c,u]of s.blocks.entries()){let d=Ul(u,c,n,r);if(o.push(...d.issues),d.block&&d.block.type!=="tabs")l.push(d.block)}return{id:s.id,label:s.label,...qe({count:s.count}),blocks:l}});return{block:{type:"tabs",id:e.id,label:e.label,defaultTab:e.defaultTab,...e.queryKey?{queryKey:e.queryKey}:{},tabs:a},issues:o}}case"card":{let o=[],a=[];for(let[s,l]of e.blocks.entries()){let c=Ul(l,s,n,r);if(o.push(...c.issues),c.block&&eI(c.block))a.push(c.block)}return{block:{type:"card",id:e.id,label:e.label,...e.presentation?{presentation:e.presentation}:{},...qe({disclosureLabel:e.disclosureLabel}),...e.metadata?{metadata:e.metadata}:{},...e.summary?{summary:e.summary}:{},...e.tone?{tone:e.tone}:{},blocks:a},issues:o}}case"columns":{let o=[],a=(s)=>{let l=[];for(let[c,u]of s.entries()){let d=Ul(u,c,n,r);o.push(...d.issues);let p=d.block;if(p&&(eI(p)||p.type==="card"))l.push(p)}return l};return{block:{type:"columns",id:e.id,primary:a(e.primary),aside:a(e.aside)},issues:o}}case"detail":{let o=[],a=Ul(e.master,t,n,r);o.push(...a.issues);let s=a.block;if(!s||s.type!=="list"&&s.type!=="table"&&s.type!=="matrix")return{issues:o};let l=[];for(let[c,u]of(e.open?.blocks??[]).entries()){let d=Ul(u,c,n,r);o.push(...d.issues);let p=d.block;if(p&&(eI(p)||p.type==="card"))l.push(p)}return{block:{type:"detail",id:e.id,queryKey:e.queryKey,empty:e.empty,master:s,...e.open?{open:{forId:e.open.forId,title:e.open.title,blocks:l}}:{}},issues:o}}case"action":{let o=Fl([e],n,r,["blocks"],[t]),a=o.controls[0];return{...a?{block:tX(a,e.id)}:{},issues:o.issues}}case"actions":{let o=Fl(e.items,n,r,["blocks",t,"items"]);return{block:{type:"actions",...e.id?{id:e.id}:{},items:o.controls},issues:o.issues}}default:return{block:e,issues:[]}}}var tI=i.enum(["text","url","number","checkbox","select","textarea"]),HN=tI.exclude(["select","textarea"]);var QN=i.string().max(2048).refine((e)=>{try{let t=new URL(e);return t.protocol==="https:"||t.protocol==="http:"}catch{return!1}},{message:"External operator links must use http or https"});function nX(e){return e!==null&&typeof e==="object"&&"kind"in e&&e.kind==="rizom-entity"&&"type"in e&&typeof e.type==="string"&&e.type.length>0}var rX=i.custom(nX,{message:"Expected an imported entity definition"});function iX(e){return e!==null&&typeof e==="object"&&"kind"in e&&e.kind==="rizom-entity-catalog"&&"id"in e&&typeof e.id==="string"&&"label"in e&&typeof e.label==="string"}var oX=i.custom(iX,{message:"Expected an imported entity catalog definition"});function aX(e){return{kind:"external",href:e.external}}function sX(e){return{kind:"entity",entityType:e.entity.type,id:e.id}}var KN=i.union([i.object({target:i.literal("account-settings")}).strict(),i.object({target:i.literal("invitations")}).strict(),i.object({target:i.literal("admin-peer-invite"),peerId:De,displayName:je}).strict(),i.object({target:i.literal("inbox")}).strict(),i.object({target:i.literal("inbox"),source:i.literal("mail"),filter:i.enum(["high-priority","needs-reply","unclassified"]).optional()}).strict(),i.object({target:i.literal("publishing")}).strict(),i.object({target:i.literal("site")}).strict(),i.object({target:i.literal("traffic")}).strict(),i.object({target:i.literal("board")}).strict(),i.object({target:i.literal("inbox-open-entity"),entityType:De,entityId:De}).strict(),i.object({target:i.literal("inbox-capture-note"),title:jn,summary:i.string().trim().min(1).max(1000).optional(),entityType:De,entityId:De}).strict(),i.object({target:i.literal("inbox-discuss-in-chat"),sourceId:De,itemId:i.string().trim().min(1).max(300),label:i.string().trim().min(1).max(160)}).strict()]);function lX(e){return{kind:"entity",entityType:e.entityType,id:e.id}}function cX(e){return{kind:"launch",launch:e.launch}}function uX(e){return{kind:"detail",itemId:e.detail.itemId}}var Qp=i.union([i.object({external:QN}).strict().transform(aX),i.object({entity:rX,id:De}).strict().transform(sX),i.object({catalog:oX,entityType:De,id:De}).strict().transform(lX),i.object({launch:KN}).strict().transform(cX),i.object({detail:i.object({itemId:ya}).strict()}).strict().transform(uX),i.object({kind:i.literal("external"),href:QN}).strict(),i.object({kind:i.literal("entity"),entityType:De,id:De}).strict(),i.object({kind:i.literal("launch"),launch:KN}).strict(),i.object({kind:i.literal("detail"),itemId:ya}).strict()]);function ei(e,t,n,r){let[o,a]=r.path,s=new Set;for(let[l,c]of t.entries()){let u=n(c);if(u!==void 0){if(s.has(u)||r.reserved?.has(u))e.addIssue({code:"custom",message:`${r.label} "${u}" is duplicated`,path:[o,l,a]});s.add(u)}r.each?.(c,l)}return s}function YN(e,t){return ei(e,t,(n)=>n.id,{label:"Spatial point id",path:["points","id"]})}var XN=i.object({label:je,tone:Dn.optional()}).strict(),e$=i.object({sourceId:De,targetId:De,label:je.optional(),tone:Dn.optional()}).strict(),dX=i.object({id:De,label:je,category:je,x:bs,y:bs,zoneId:De.optional(),tone:Dn.optional(),details:i.array(jn).max(20).optional()}).strict(),pX=i.object({id:De,label:je,x:bs,y:bs,memberIds:i.array(De).max(500)}).strict(),mX=i.object({type:i.literal("spatial"),layout:i.literal("cartesian"),id:De,label:je,description:no,points:i.array(dX).max(500),zones:i.array(pX).max(100),relationships:i.array(e$).max(2000).optional(),legend:i.array(XN).max(20)}).strict().superRefine((e,t)=>{let n=YN(t,e.points),r=ei(t,e.zones,(a)=>a.id,{label:"Spatial zone id",path:["zones","id"],reserved:n,each:(a,s)=>{for(let l of a.memberIds)if(!n.has(l))t.addIssue({code:"custom",message:`Spatial zone member "${l}" has no matching point`,path:["zones",s,"memberIds"]})}});for(let[a,s]of e.points.entries())if(s.zoneId&&!r.has(s.zoneId))t.addIssue({code:"custom",message:`Spatial point zone "${s.zoneId}" has no matching zone`,path:["points",a,"zoneId"]});let o=new Set([...n,...r]);for(let[a,s]of(e.relationships??[]).entries())if(!o.has(s.sourceId)||!o.has(s.targetId))t.addIssue({code:"custom",message:"Spatial relationship endpoints must reference declared points or zones",path:["relationships",a]})}),fX=i.object({id:De,label:je,kind:je,status:je,tags:i.array(je).max(30).optional(),distance:bs,bearing:i.number().finite().min(0).lt(360),relatedIds:i.array(De).max(100).optional(),tone:Dn.optional(),details:i.array(jn).max(20).optional()}).strict(),gX=i.object({id:De,label:je,memberIds:i.array(De).min(2).max(500)}).strict(),hX=i.object({id:De,label:je,maxDistance:bs}).strict(),yX=i.object({type:i.literal("spatial"),layout:i.literal("radial"),id:De,label:je,description:no,centerLabel:je,centerKind:i.enum(["identity","centroid"]),points:i.array(fX).max(500),clusters:i.array(gX).max(100).optional(),relationships:i.array(e$).max(2000).optional(),strata:i.array(hX).min(1).max(10),legend:i.array(XN).max(20)}).strict().superRefine((e,t)=>{let n=YN(t,e.points);for(let[o,a]of e.points.entries())for(let s of a.relatedIds??[])if(!n.has(s))t.addIssue({code:"custom",message:`Related point "${s}" is not declared`,path:["points",o,"relatedIds"]});ei(t,e.clusters??[],(o)=>o.id,{label:"Spatial cluster id",path:["clusters","id"],each:(o,a)=>{for(let s of o.memberIds)if(!n.has(s))t.addIssue({code:"custom",message:`Spatial cluster member "${s}" has no matching point`,path:["clusters",a,"memberIds"]})}});for(let[o,a]of(e.relationships??[]).entries())if(!n.has(a.sourceId)||!n.has(a.targetId))t.addIssue({code:"custom",message:"Spatial relationship endpoints must reference declared points",path:["relationships",o]});let r=-1;for(let[o,a]of e.strata.entries()){if(a.maxDistance<=r)t.addIssue({code:"custom",message:"Radial strata must increase by maximum distance",path:["strata",o,"maxDistance"]});r=a.maxDistance}}),nI=i.discriminatedUnion("layout",[mX,yX]);var bX=i.object({id:De,label:je,value:kp.optional(),description:no.optional(),tone:Dn.optional()}).strict(),n$=i.object({type:i.literal("group"),id:De,label:je,items:i.array(bX).max(50)}).strict(),vX=i.object({id:De,label:je,status:i.enum(["idle","active","complete","failed"]),detail:jn.optional()}).strict(),r$=i.object({type:i.literal("flow"),id:De,label:je,direction:i.enum(["forward","bidirectional"]).optional(),steps:i.array(vX).min(2).max(20)}).strict(),SX=i.string().trim().min(1).max(120).regex(/^[a-z][a-zA-Z0-9_.-]*$/),wX=i.object({value:je,label:je,count:i.number().int().nonnegative().optional()}).strict(),xX=i.object({key:SX,label:je,value:je.optional(),allLabel:je.optional(),options:i.array(wX).max(100)}).strict(),i$=i.object({controls:i.array(xX).max(20),pagination:i.object({offset:i.number().int().nonnegative(),limit:i.number().int().min(1).max(100),total:i.number().int().nonnegative(),label:je.optional()}).strict().optional()}).strict();function o$(e,t){ei(t,e.controls,(n)=>n.key,{label:"Query key",path:["controls","key"]})}var TX=i$.extend({type:i.literal("query"),id:De}).strict().superRefine(o$),CX=i$.superRefine(o$),a$=i.object({type:i.literal("links"),id:De.optional(),items:i.array(i.object({label:je,target:Qp}).strict()).max(30)}).strict(),s$=i.object({label:je,tone:Dn.optional()}).strict(),IX=i.object({value:De,label:je,count:i.number().int().nonnegative().optional(),emphasis:i.literal("gap").optional()}).strict(),rI=200,l$=50,EX=rI*l$+1,RX=i.object({label:je,defaultValue:De,allValue:De.optional(),options:i.array(IX).min(1).max(EX)}).strict().superRefine((e,t)=>{if(!ei(t,e.options,(r)=>r.value,{label:"List filter value",path:["options","value"]}).has(e.defaultValue))t.addIssue({code:"custom",message:`List filter default "${e.defaultValue}" has no matching option`,path:["defaultValue"]})}),ey=i.object({id:ya,title:jn,description:no.optional(),metadata:i.array(jn).max(20).optional(),tags:i.array(je).max(30).optional(),at:i.iso.datetime({offset:!0}).optional(),count:i.number().finite().optional(),badges:i.array(s$).max(10).optional(),filterValues:i.array(De).max(l$).optional(),links:i.array(i.object({label:je,target:Qp}).strict()).max(10).optional(),tone:Dn.optional(),link:Qp.optional()}).strict(),kX=i.enum(["standard","editorial","attention","activity","log"]),c$=i.object({type:i.literal("list"),id:De,empty:jn,presentation:kX.optional(),filter:RX.optional(),items:i.array(ey).max(rI)}).strict();function u$(e,t){if(ei(t,e.items,(o)=>o.id,{label:"List item id",path:["items","id"]}),!e.filter)return;let n=new Set(e.filter.options.map((o)=>o.value)),r=e.filter.allValue??"all";for(let[o,a]of e.items.entries())for(let s of a.filterValues??[])if(s!==r&&!n.has(s))t.addIssue({code:"custom",message:`List item filter value "${s}" has no matching option`,path:["items",o,"filterValues"]})}var AX=c$.superRefine(u$),d$=i.object({key:De,label:je,align:i.enum(["start","center","end"]).optional()}).strict(),p$=i.object({key:De,label:je,values:i.array(kp).max(50)}).strict(),_X=i.union([kp,i.array(i.string().max(500)).max(50)]),PX=i.object({title:jn.trim().min(1),description:no.optional(),metadata:i.array(jn).max(20).optional(),badges:i.array(s$).max(10).optional(),count:i.number().finite().optional(),tone:Dn.optional()}).strict(),m$=i.object({id:ya,cells:i.record(i.string(),_X),link:Qp.optional()}).strict(),OX=i.object({type:i.literal("table"),id:De,empty:jn,filters:i.array(p$).max(20).optional(),columns:i.array(d$).min(1).max(30),rows:i.array(m$).max(500)}).strict();function f$(e,t){let n=ei(t,e.columns,(r)=>r.key,{label:"Table column key",path:["columns","key"]});for(let[r,o]of(e.filters??[]).entries())if(!n.has(o.key))t.addIssue({code:"custom",message:`Table filter key "${o.key}" has no matching column`,path:["filters",r,"key"]});ei(t,e.rows,(r)=>r.id,{label:"Table row id",path:["rows","id"],each:(r,o)=>{for(let a of Object.keys(r.cells))if(!n.has(a))t.addIssue({code:"custom",message:`Table cell key "${a}" has no matching column`,path:["rows",o,"cells",a]})}})}var MX=OX.superRefine(f$),g$=i.object({id:De,label:je,tone:Dn.optional(),empty:jn,items:i.array(ey).max(100)}).strict();function h$(e,t){ei(t,e.items,(n)=>n.id,{label:"Matrix item id",path:["items","id"]})}var jX=g$.superRefine(h$),y$=i.object({type:i.literal("matrix"),id:De,columns:i.union([i.literal(1),i.literal(2),i.literal(3),i.literal(4)]).optional(),cells:i.array(jX).min(1).max(12)}).strict();function b$(e,t){ei(t,e.cells,(n)=>n.id,{label:"Matrix cell id",path:["cells","id"]})}var DX=y$.superRefine(b$);function v$(e,t){if(!ei(t,e.tabs,(r)=>r.id,{label:"Tab id",path:["tabs","id"]}).has(e.defaultTab))t.addIssue({code:"custom",message:`Default tab "${e.defaultTab}" has no matching tab`,path:["defaultTab"]})}function S$(e,t){ei(t,e.blocks,(n)=>n.id,{label:"Operator view block id",path:["blocks","id"]})}var w$=i.union([PT,OT,MT,n$,r$,jT,DT,zT,a$,AX,MX,DX,nI]),zX=i.object({type:i.literal("tabs"),id:De,label:je,defaultTab:De,tabs:i.array(i.object({id:De,label:je,count:i.number().int().nonnegative().optional(),blocks:i.array(w$).max(30)}).strict()).min(1).max(12)}).strict().superRefine(v$);function NX(e){return e!==null&&typeof e==="object"&&"kind"in e&&e.kind==="rizom-workspace-action"&&"name"in e&&typeof e.name==="string"&&"input"in e&&typeof e.input==="object"&&e.input!==null&&"safeParse"in e.input&&typeof e.input.safeParse==="function"}var $X=i.custom(NX,{message:"Expected a workspace action definition"}),BX=i.object({id:De,label:je,description:no.optional(),confirmation:i.literal("prepared").optional()}).strict(),t$=i.object({value:i.string().trim().min(1).max(500),label:je}).strict(),LX=i.object({label:je,control:tI,secret:i.boolean().optional(),options:i.array(t$).min(1).max(100).optional(),labelBy:i.object({field:De,values:i.array(t$).min(1).max(100)}).strict().optional()}).strict(),qX=i.object({presentation:i.enum(["inline","disclosure"]).optional(),submitLabel:je.optional(),fields:i.record(De,LX)}).strict(),FX=i.object({label:je,copyable:i.boolean().optional(),sensitive:i.boolean().optional()}).strict(),UX=i.object({title:je,fields:i.record(De,FX)}).strict(),Su=i.object({action:$X,input:i.unknown().optional(),form:qX.optional(),result:UX.optional(),capability:BX.optional(),label:je.optional(),disabled:i.boolean().optional()}).strict(),ZX=ey.extend({actionsLabel:je.optional(),actions:i.array(Su).max(20).optional()}),x$=c$.extend({items:i.array(ZX).max(rI)}).superRefine(u$),WX=m$.extend({compact:PX.optional(),actions:i.array(Su).max(20).optional()}),T$=i.object({type:i.literal("table"),id:De,empty:jn,filters:i.array(p$).max(20).optional(),query:CX.optional(),columns:i.array(d$).min(1).max(30),rows:i.array(WX).max(500)}).strict().superRefine(f$),GX=Su.extend({dropTarget:De.optional()}),JX=ey.extend({actionsLabel:je.optional(),actions:i.array(GX).max(20).optional()}),VX=g$.extend({items:i.array(JX).max(100)}).superRefine(h$);function HX(e,t){let n=new Set(e.cells.map((r)=>r.id));e.cells.forEach((r,o)=>r.items.forEach((a,s)=>{let l=new Set;(a.actions??[]).forEach((c,u)=>{let d=c.dropTarget;if(d===void 0)return;let p=!n.has(d)?`Drop target "${d}" is not a cell of this matrix`:d===r.id?`Drop target "${d}" is the card's own cell`:l.has(d)?`Drop target "${d}" has more than one action on this card`:c.action.confirmation!==void 0||c.form!==void 0?`Drop target "${d}" needs an action that runs without confirmation or a form`:void 0;if(l.add(d),p)t.addIssue({code:"custom",message:p,path:["cells",o,"items",s,"actions",u,"dropTarget"]})})}))}var C$=y$.extend({cells:i.array(VX).min(1).max(12)}).superRefine(b$).superRefine(HX),QX=Su.extend({type:i.literal("action"),id:De.optional()}),KX=i.object({type:i.literal("actions"),id:De.optional(),items:i.array(Su).max(30)}).strict(),vu=i.union([PT,OT,MT,H0,n$,r$,jT,DT,zT,Q0,TX,a$,x$,T$,C$,nI,QX,KX]),YX=i.object({type:i.literal("tabs"),id:De,label:je,defaultTab:De,queryKey:De.optional(),tabs:i.array(i.object({id:De,label:je,count:i.number().int().nonnegative().optional(),blocks:i.array(i.lazy(()=>i.union([vu,Kp,I$,E$]))).max(30)}).strict()).min(1).max(12)}).strict().superRefine(v$),Kp=i.object({disclosureLabel:je.optional(),type:i.literal("card"),id:De,label:je,presentation:i.enum(["section","disclosure","feature"]).optional(),metadata:i.array(jn).max(20).optional(),summary:i.array(_T).max(4).optional(),tone:Dn.optional(),blocks:i.array(vu).max(12)}).strict().refine((e)=>e.disclosureLabel===void 0||e.presentation==="disclosure",{message:"disclosureLabel requires disclosure presentation",path:["disclosureLabel"]}),I$=i.object({type:i.literal("detail"),id:De,queryKey:De,empty:jn,master:i.union([x$,T$,C$]),open:i.object({forId:ya,title:je,blocks:i.array(i.union([vu,Kp])).max(30)}).strict().optional()}).strict(),E$=i.object({type:i.literal("columns"),id:De,primary:i.array(i.union([vu,Kp])).max(20),aside:i.array(i.union([vu,Kp])).max(12)}).strict(),XX=i.object({kicker:je.optional(),title:jn.optional(),description:no.optional(),status:i.object({label:je,detail:jn.optional(),tone:Dn.optional()}).strict().optional(),facts:i.array(i.object({label:je,tone:Dn.optional()}).strict()).max(6).optional(),primaryAction:Su.optional(),blocks:i.array(i.union([vu,YX,I$,E$,Kp])).max(50)}).strict().superRefine(S$),R$=i.object({title:jn.optional(),blocks:i.array(i.union([w$,zX])).max(50)}).strict().superRefine(S$),k$=i.object({items:i.array(i.object({label:je,value:i.string().max(500),tone:i.enum(["good","warn"]).optional()}).strict()).max(4),attention:i.number().int().nonnegative().optional()}).strict(),eee=i.object({view:R$,digest:k$.optional()}).strict();function A$(e){let t=R$.safeParse(e);return t.success?{success:!0,data:t.data}:{success:!1,issues:Hp(t.error)}}function _$(e){let t=k$.safeParse(e);return t.success?{success:!0,data:t.data}:{success:!1,issues:Hp(t.error)}}function P$(e){let t=eee.safeParse(e);return t.success?{success:!0,data:t.data}:{success:!1,issues:Hp(t.error)}}function O$(e){let t=XX.safeParse(e);return t.success?{success:!0,data:t.data}:{success:!1,issues:Hp(t.error)}}function M$(e){let t=YC(e,"dashboard");if(t.length>0)return{success:!1,issues:t};return A$(e)}function iI(e,t){let n=YC(e,"studio");if(n.length>0)return{success:!1,issues:n};let r=O$(e);if(!r.success)return r;let o=[],a=[],s=r.data.primaryAction?Fl([r.data.primaryAction],t.actions,t.permission,[],["primaryAction"]):{controls:[],issues:[]};a.push(...s.issues);for(let[l,c]of r.data.blocks.entries()){let u=Ul(c,l,t.actions,t.permission);if(a.push(...u.issues),u.block)o.push(u.block)}if(a.length>0)return{success:!1,issues:a};return{success:!0,data:Object.freeze({...r.data.kicker?{kicker:r.data.kicker}:{},...r.data.title?{title:r.data.title}:{},...r.data.description?{description:r.data.description}:{},...r.data.status?{status:r.data.status}:{},...r.data.facts?{facts:r.data.facts}:{},...s.controls[0]?{primaryAction:s.controls[0]}:{},blocks:Object.freeze(o)})}}function j$(e){return _$(e)}function oI(e){return P$(e)}function Vt(e,t,n,r={}){return new it(r.code??"handler_failed",{message:`Service "${e.publicServiceId}" package "${e.packageName}" ${e.surface} "${e.id}" ${t}${n?`: ${n}`:""}`,...r.publicMessage!==void 0&&{publicMessage:r.publicMessage},...r.cause!==void 0&&{cause:r.cause}})}function oo(e,t,n){let{code:r,message:o}=Ki(n).toJSON();return Vt(e,t,void 0,{code:r,publicMessage:o,cause:n})}function ty(e,t,n){return Vt(e,t,ao(n.issues),{code:"invalid_input",publicMessage:xu(n,{maxLength:wu}),cause:n})}function ao(e){return e.slice(0,5).map((t)=>`${t.path.length>0?t.path.join("."):"value"}: ${t.message}`).join("; ")}function Yp(e,t,n){let r=e.safeParse(t);if(!r.success)throw Vt(n,"returned invalid data; return a value matching its data schema",ao(r.error.issues),{code:"invalid_response",cause:r.error});return r.data}async function ny(e,t,n){try{return await n()}catch(r){if(!t.some((o)=>o?.aborted)){let{code:o}=Ki(r),a=o==="handler_failed"||o==="invalid_response",s=r instanceof Error?r.cause:void 0;e[a?"error":"warn"](he(r),{code:o,...s!==void 0&&{cause:he(s)}})}throw r}}function tee(e,t){let n=M$(e);if(!n.success)throw Vt(t,"returned an invalid view; use supported OperatorView blocks and safe links",ao(n.issues),{code:"invalid_response"});return n.data}function nee(e,t){let n=j$(e);if(!n.success)throw Vt(t,"returned an invalid digest; provide at most four bounded lines and a non-negative attention count",ao(n.issues),{code:"invalid_response"});return n.data}function Xp(e){let t=e.binding.definition,n={publicServiceId:e.publicServiceId,packageName:e.packageName,surface:"dashboard widget",id:t.id},r=U0(e.binding);return{id:t.id,title:t.title,...t.description?{description:t.description}:{},group:t.group,rendererName:Ll,section:t.placement,priority:t.priority??50,visibility:t.permission,dataProvider:(s)=>e.runAs?e.runAs({caller:s.caller,interfaceType:"dashboard"},()=>o(s,()=>a(s))):o(s,()=>a(s)),digestProvider(s){let l=oI(s);if(!l.success)return{};return{...l.data.digest?{digest:l.data.digest.items.map((c)=>({...c,tone:c.tone??"plain"}))}:{},...l.data.digest?.attention!==void 0?{needsAttention:l.data.digest.attention}:{}}}};function o(s,l){return ny(e.context.logger,[s.signal,e.runtimeSignal],l)}async function a(s){let l={...s,signal:AbortSignal.any([s.signal,e.runtimeSignal])},c=l.caller?.permission??"public";if(!ha(c,t.permission))throw Vt(n,"was requested below its minimum permission",void 0,{code:"permission_denied"});let u=await Kh({config:e.config,state:e.state,...e.accountSettingsRegistration?{accountSettingsRegistration:e.accountSettingsRegistration}:{},provider:l,context:e.context,entities:e.entities,accountSettings:e.accountSettings});l.signal.throwIfAborted();let d;try{d=await r(u)}catch(w){if(l.signal.aborted)throw l.signal.reason??w;throw oo(n,"data loader failed",w)}l.signal.throwIfAborted();let p=Yp(t.data,d,n),f;try{f=t.view({data:p})}catch(w){if(l.signal.aborted)throw l.signal.reason??w;throw oo(n,"view derivation failed",w)}let g=tee(f,n),h;if(t.digest){let w;try{w=t.digest({data:p})}catch(v){if(l.signal.aborted)throw l.signal.reason??v;throw oo(n,"digest derivation failed",v)}h=nee(w,n)}return Object.freeze({view:g,...h?{digest:h}:{},...e.includeSource?{source:p}:{}})}}var aI=Object.freeze({config:Object.freeze({}),state:Object.freeze({}),accountSettings:void 0});async function sI(e){if(e.context.executionOnly||!e.context.dashboard.isAvailable())return!1;let t=e.definition.bind(aI,({caller:o,signal:a})=>e.load({caller:o,visibilityScope:KC(o),signal:a})),n=Xp({publicServiceId:e.context.pluginId,packageName:e.context.pluginId,config:aI.config,state:aI.state,binding:t,context:e.context,runtimeSignal:e.runtimeSignal??new AbortController().signal,includeSource:e.render!==void 0}),r=e.render?{...n,renderer:e.render}:n;return e.context.dashboard.registerWidget(r)}var so={pluginsRegistered:"system:plugins:registered",initialSyncCompleted:"sync:initial:completed",startupContentSettled:"system:startup-content:settled",shellReady:"system:shell:ready",identityChanged:"system:identity:changed"},ree=i.object({initialSyncPending:i.boolean()}),D$=i.discriminatedUnion("success",[i.object({success:i.literal(!0)}),i.object({success:i.literal(!1),error:i.string()})]),iee=En(so.initialSyncCompleted,D$),z$=i.object({timestamp:i.string()}),oee=En(so.startupContentSettled,z$),aee=En(so.shellReady,z$),N$=i.object({entityType:i.string().min(1)}),see=En(so.identityChanged,N$);var pee={"startup-content-settled":so.startupContentSettled},mee=i.record(i.string(),i.unknown());function $$(e,t,n){switch(t.from?.kind){case"entity-attachment":return e.fromAttachment;case"upload":return e.fromUpload;default:if(t.content)return e.fromContent;if(t.prompt)return e.fromPrompt;return t.url?n:void 0}}function dI(e){if(typeof e==="object"&&e!==null&&!Object.isFrozen(e))Object.values(e).forEach(dI),Object.freeze(e);return e}function lI(e){let{attributed:t}=e.job;return t!==void 0&&t!==!1}function fee(e){let t=Rh(e);return Object.freeze({interfaceType:e.interfaceType,actor:e.actor,...qe({userId:t,channelId:e.channelId,channelName:e.channelName})})}function cI(e){return{actor:e.actor,interfaceType:e.interfaceType}}function gee(e,t,n={}){return{source:e,metadata:{operationType:n.operationType??"content_operations",...n.channel===!0&&t.channelId!==void 0&&{channelId:t.channelId},interfaceType:t.interfaceType,requestedByActor:t.actor,...t.actor.kind==="user"?{requestedByUserId:t.actor.userId}:{},requestedByInterface:t.interfaceType}}}function Ar(e){return{success:!1,error:e}}function hee(e){function t(r,o){let a={entityType:r.entityType,id:r.id};return o?e.getEntity(a,o):e.getEntity(a)}function n(r,o){let a={entityType:r.entityType,options:qe({limit:r.options?.limit})};return o?e.listEntities(a,o):e.listEntities(a)}return Object.freeze({getEntity:t,listEntities:n})}function yee(e){let{identity:t,views:n}=e;return Object.freeze({domain:e.domain,themeCSS:e.themeCSS,identity:Object.freeze({getProfile:()=>t.getProfile()}),entityService:hee(e.entityService),views:Object.freeze({get:(r)=>n.get(r)})})}var bee=i.string().min(1).refine((e)=>!e.startsWith("/")&&!e.includes("\\")&&e.split("/").every((t)=>t!==""&&t!==".."),{message:"A feed path is relative to the build output"}),vee=i.object({items:i.array(i.object({operation:i.enum(["upsert","delete"]),id:i.string(),source:Gi.optional()}))});function Z$(e,t){return e.markdown?.encode?e.markdown.encode({content:t.content,metadata:e.metadata.parse(Ap(e,t.metadata))}):{content:t.content,frontmatter:t.metadata}}function W$(e,t){let n=Z$(e,t);return Yi(n.content,n.frontmatter)}function See(e){let t=lr(e);return Xe(t.data)&&Object.keys(t.data).length>0?t.content:e}function wee(e,t){let n=new Set([...Object.keys(e.shape),...Object.keys(t?.shape??{})]);return i.object(Object.fromEntries([...n].map((r)=>[r,i.unknown()])))}function xee(e){return{frontmatterSchema:xh(e)??e.metadata,...xh(e)&&{writtenFrontmatterSchema:wee(e.metadata,xh(e))},toMarkdown(t){return W$(e,{...t,content:See(t.content)})},fromMarkdown(t){let n=Pn(t,mee),r=e.markdown?e.markdown.decode({content:n.content,frontmatter:n.metadata}):{content:n.content,metadata:n.metadata};return{content:r.content,metadata:e.metadata.parse(Ap(e,r.metadata))}},parseFrontMatter:(t,n)=>Pn(t,n).metadata,generateFrontMatter(t){return tp(Z$(e,t).frontmatter)},metadataFromFrontmatter:!0}}function Tee(e){return{toMarkdown:(t)=>t.content,fromMarkdown(t){let n=e.markdown?.decode({content:t,frontmatter:{}}),r=e.type;if(!n)return{entityType:r,content:t};let o={...n.metadata};return Object.keys(o).length>0?{entityType:r,content:n.content,metadata:o}:{entityType:r,content:n.content}},parseFrontMatter:(t,n)=>n.parse({}),generateFrontMatter:()=>""}}function Cee(e){let t=kl(e),n=e.stub;return{entityType:e.type,purpose:e.purpose,schema:t,...e.config?.binaryStorage===void 0?xee(e):Tee(e),extractMetadata:(r)=>hD(e)?.(r.metadata)??r.metadata,getBodyTemplate:()=>fD(e),...wD(e)&&{writesInDocumentOrder:!0},...n&&{buildStub:(r)=>{let o=n(r);return{content:o.content,metadata:{...o.metadata}}}},...e.singleton===!0&&{isSingleton:!0},...e.hasBody!==void 0&&{hasBody:e.hasBody},...e.coverImage===!0&&{supportsCoverImage:!0},...e.create?.fields&&{createFieldsSchema:e.create.fields},...e.displayTitle&&{displayTitle:(r)=>Iee(e,r)}}}function Iee(e,t){let n=e.metadata.safeParse(Ap(e,t.metadata));return n.success?e.displayTitle?.({content:t.content,metadata:n.data}):void 0}async function Eee(e,t,n){let r=kl(e.source).parse(t),o=[];return await e.project({source:r,signal:n,target:{async upsert(a){let s=Gi.parse(e.target.metadata.parse(a.metadata)),l=a.visibility??r.visibility;o.push({operation:"upsert",entity:{id:a.id,entityType:e.target.type,content:Wc(W$(e.target,{content:a.content,metadata:s}),l),metadata:s,visibility:l}})}}}),o}function Ree(e){return"load"in e&&typeof e.load==="function"&&"view"in e.definition&&typeof e.definition.view==="function"}var uI=Object.freeze({config:Object.freeze({}),state:Object.freeze({}),accountSettings:void 0});function kee(e){let t=e.entities;return Object.freeze({entities:Object.freeze({getEntity:t.getEntity.bind(t),listEntities:t.listEntities.bind(t),getEntityTypes:t.getEntityTypes.bind(t),hasEntityType:t.hasEntityType.bind(t),getEntityTypeConfig:t.getEntityTypeConfig.bind(t),isProjectionOwnedEntity:t.isProjectionOwnedEntity.bind(t)}),resolvePrompt:e.resolvePrompt.bind(e),appInfo:e.appInfo.bind(e),identityInput:e.identityInput.bind(e)})}function Aee(e){let t=e.ai;return Object.freeze({ai:Object.freeze({generate:t.generate.bind(t),generateObject:t.generateObject.bind(t)}),logger:e.logger})}function _ee(e,t,n){return RT({id:n(e.id),version:t,sources:[{kind:"entity",types:[e.source.type]}],targetType:e.target.type,inputSchema:Gi,async selectInput(r,o){let a=r.inputs.filter(({sourceType:l})=>l===e.source.type),s=await Promise.all(a.map(async(l)=>{if(l.operation==="delete")return{operation:"delete",id:l.sourceId};let c=await o.entities.getEntity({entityType:l.sourceType,id:l.sourceId,visibilityScope:zt("projection rule loads source entity")});if(!c)throw Error(`Projection "${e.id}" could not load ${l.sourceType}:${l.sourceId}`);return{operation:"upsert",id:l.sourceId,source:c}}));return Gi.parse({items:s})},async derive(r,o,a){let s=vee.parse(r),l=[];for(let c of s.items){if(a.throwIfAborted(),c.operation==="delete"){l.push({operation:"delete",entityType:e.target.type,id:c.id});continue}if(!c.source)throw Error(`Projection "${e.id}" upsert item ${c.id} is missing its source`);l.push(...await Eee(e,c.source,a))}return l}})}class G$ extends hu{entityTypeConfig;projections;scope;validatePersist;seed;templates;dataSources;packageDataSourceIds;feed;definition;create;attachments;jobs;generation;projectionRules;packageTypes;permissions;releases=[];dashboardWidgetIds=[];widgetAbort=new AbortController;entityType;schema;adapter;constructor(e,t,n,r,o,a,s){super(r(e.type),n,{},MC,e.actions&&{[e.type]:Fh.parse(e.actions)});if(this.entityTypeConfig=gN(e.classification,e.config),this.projections=t,this.scope=r,this.validatePersist=e.validatePersist,this.seed=e.seed,this.templates=e.templates,this.dataSources=o,this.packageDataSourceIds=a,this.packageTypes=s,e.feed)bee.parse(e.feed.path);this.feed=e.feed,this.definition=e,this.create=e.create,this.attachments=e.attachments,this.jobs=e.jobs??{};let l=this.jobs.generation;if(l!==void 0&&(e.generation!==void 0||LT(l)===void 0))throw Error(`${e.type} declares a job named "generation", the name a create route gives its own generation`);this.generation=e.generation,this.entityType=e.type,this.schema=kl(e),this.adapter=Cee(e);let c=e.projectionRules;this.projectionRules=(typeof c==="function"?c({template:(u)=>this.templateName(u)}):c??[]).map((u)=>this.declaredProjectionRule(u))}declaredProjectionRule(e){if(e.targetType!==this.entityType)throw Error(`Projection rule "${e.id}" on ${this.entityType} writes ${e.targetType}`);return Object.freeze({...e,selectInput:(t,n,r)=>e.selectInput(t,kee(n),r),derive:(t,n,r)=>e.derive(t,Aee(n),r)})}getEntityTypeConfig(){return this.entityTypeConfig}templateName(e){if(!Object.hasOwn(this.templates??{},e))throw Error(`${this.entityType} declares no template named "${e}"`);return`${this.id}:${e}`}ownsType(e){return this.packageTypes.has(e)}asPackage(e){let t=va(e.jobAuthority);return pu(e.entityService,()=>t,(n)=>this.ownsType(n))}generationHandler(e,t,n,r=!1,o=!1){return new WC(this.logger,e,t,{entityType:this.entityType,jobTypeName:n,template:(a)=>this.templateName(a),ownsType:(a)=>this.ownsType(a),retries:this.retries,reportsToPipeline:r,readsLegacyRawData:o,pluginId:this.id,runtime:(a)=>this.runBinding(e,a,"a generation")})}async getInstructions(){return this.definition.instructions}async runScheduledGeneration(e,t){let n=(r)=>e.messaging.command(Hh,{entityType:this.entityType,error:r});try{let r=va(e.jobAuthority),o=await r.access(),a=(u)=>vs(r,this.ownsType(u),o),s=await e.entityService.listEntities({entityType:t.from.entityType,options:{limit:t.from.limit,filter:{visibilityScope:a(t.from.entityType),...t.from.status!==void 0&&{metadata:{status:t.from.status}}}}}),l=await this.scheduledInput(e,t,s.map(({id:u})=>u),a(this.entityType));if(!l){await n(`No ${[t.from.status,t.from.entityType].filter(Boolean).join(" ")} available to write a ${this.entityType} from`);return}let c={...await jl(e.jobAuthority,void 0,l),...qe({source:Gp(l)})};await this.retries.run(()=>e.jobs.enqueue({type:`${this.entityType}:generation`,data:c,toolContext:{interfaceType:"job",actor:{kind:"service",serviceId:this.id}}}),`queue a scheduled ${this.entityType} generation`,`generate:${this.entityType}`)}catch(r){await n(he(r))}}async scheduledInput(e,t,n,r){if(n.length===0)return null;let o=t.from.entityType;if(t.mode==="batch")return{sourceEntityType:o,sourceEntityIds:[...n]};let a=await Promise.all(n.map((l)=>e.entityService.listEntities({entityType:this.entityType,options:{filter:{visibilityScope:r,metadata:{sourceEntityType:o,sourceEntityId:l}},limit:1}}))),s=n.find((l,c)=>a[c]?.length===0);return s?{sourceEntityType:o,sourceEntityId:s}:null}createGenerationHandler(e){return this.generation?this.generationHandler(e,this.generation,`${this.entityType}:generation`,this.definition.scheduledGeneration!==void 0,!0):null}getTemplates(){let e=this.templates;if(!e)return null;let t=this.packageDataSourceIds;return Object.fromEntries(Object.entries(e).map(([n,r])=>[n,r.dataSourceId&&t.has(r.dataSourceId)?{...r,dataSourceId:this.scope(r.dataSourceId)}:r]))}getDataSources(){return this.dataSources.map((e)=>kD(e,this.scope(e.id),this.logger))}requiredLevel(e,t){if(!this.permissions)throw Error(`Entity type "${this.entityType}" is not registered`);return this.permissions.getEntityActionRequiredLevel(e,t)}async register(e,t){return this.permissions=e.getPermissionService(),super.register(e,t)}async onRegister(e){let t=this.validatePersist;if(t)e.entities.registerPersistValidator(this.entityType,async(b)=>{await t(Object.freeze({content:b.content,visibility:b.visibility}))});if(Object.entries(this.jobs).forEach(([b,x])=>{let T={declaring:this.definition,requiredLevel:(y,R)=>this.requiredLevel(y,R)},C=(y)=>this.ownsType(y),S=LT(x);if(S){if(S.type!==`${this.id}:${b}`)throw Error(`Job "${b}" of ${this.entityType} answers "${S.type}" but is declared as "${this.id}:${b}"`);if("generate"in x)throw Error(`Contract job "${S.type}" handles its own work`);e.jobs.registerHandler(b,zN(x,e,C,T,this.id,(y)=>this.templateName(y)));return}e.jobs.registerHandler(b,"generate"in x?this.generationHandler(e,x,b):DN(x,e,C,T,(y)=>this.runBinding(e,y,"a job")))}),this.generation){let b=`${this.entityType}:generation`;e.entities.registerGenerationEnqueuer(this.entityType,async(x,T)=>{let{entityId:C,...S}=x,y=await jl(e.jobAuthority,Ol(T),S);return e.jobs.enqueue({type:b,data:{...y,...typeof C==="string"&&{entityId:C},...qe({source:Gp(x)})},toolContext:T})})}let n=this.create,r=bD(this.definition);if(n||r)this.registerCreateRouting(e,n??{},r);Object.entries(this.definition.evals??{}).forEach(([b,x])=>{e.eval.registerHandler(b,(T)=>x(T,_l({ai:Wp(e,(C)=>this.templateName(C)),entities:this.asPackage(e),fixtures:ON(e,this.entityType)},{...this.runtimeBinding(e,this.asPackage(e),"an eval"),runGeneration:(C,S)=>this.runGenerationForEval(e,C,S)})))});let o=this.definition.agentContext,a=this.definition.scheduledGeneration,s=this.seed,l=this.feed,c=this.definition.atproto,u=this.definition.publish,d=u&&TD(u.provider,this.logger),p=this.definition.publishAssets??[];for(let b of this.definition.analyticsReports??[])e.analytics.register({type:b.type,description:b.description,params:b.params,...qe({minVisibility:b.minVisibility}),handler:(x,{entityService:T,visibilityScope:C})=>b.report(x,Object.freeze({entities:Ur(T,C),visibility:C}))});let f=(this.definition.dashboardWidgets?.(uI)??[]).map((b)=>this.boundWidget(b)),g=f.map(({definition:b})=>b.id),h=g.find((b,x)=>g.indexOf(b)!==x);if(h)throw Error(`${this.entityType} binds dashboard widget "${h}" twice`);let w=this.definition.inbox;if(w)e.inbox.registerSource(this.inboxSource(e,w));let v=this.attachments?.length?yee(e):void 0;this.releases=[...pD(this.definition).map((b)=>e.messaging.answer(b.contract,async(x,{sender:T})=>b.handle({request:x,sender:T,entities:await jN(e,this.id,(C)=>this.ownsType(C),{declaring:this.definition,requiredLevel:(C,S)=>this.requiredLevel(C,S)})}),b.everyProcess===!0?{everyProcess:!0}:{})),...o?[e.messaging.answer(B$,async(b)=>({items:[...await o(Object.freeze({request:dI(structuredClone(b)),entities:Ur(e.entityService,Tr(b.userPermissionLevel))}))]}))]:[],...a?[e.messaging.answer(U$,async({entityType:b})=>{if(b===this.entityType)await this.runScheduledGeneration(e,a)})]:[],...(this.attachments??[]).flatMap((b)=>v?[e.attachments.register(this.entityType,b.type,b.provider(v))]:[]),...s?[e.messaging.subscribe(pee[s.on],async()=>(await this.plantSeed(e,s),{success:!0}))]:[],...l?[e.messaging.answer(L$,(b)=>this.stageFeed(e,l,b),{everyProcess:!0})]:[],...(this.definition.checks??[]).map((b)=>e.recurringChecks.register({id:b.id,cadence:b.cadence,...qe({deliverAlerts:b.deliverAlerts,includeInInbox:b.includeInInbox}),run:({signal:x})=>b.run(Object.freeze({entities:this.asPackage(e),siteUrl:e.siteUrl,signal:x}))})),...c?[e.atprotoProjections.register(this.atprotoProjection(e,c))]:[],...f.length>0?[e.messaging.subscribe(so.pluginsRegistered,async()=>(await this.registerDashboardWidgets(e,f),{success:!0}))]:[],...u||p.length>0?[e.messaging.subscribe(so.pluginsRegistered,async()=>{if(u)await e.messaging.command(q$,{entityType:this.entityType,provider:d??u.provider,config:{executionMode:"provider",...qe({publishResultIdField:u.resultIdField,publishTimestampField:u.timestampField})}});for(let b of p)await e.messaging.command(F$,{entityType:this.entityType,attachmentType:b.attachmentType,mediaEntityType:"image",targetEntityField:{location:"frontmatter",field:b.field},...qe({requiredWhen:b.requiredWhen}),autoGenerate:!0});return{success:!0}})]:[]]}async registerDashboardWidgets(e,t){if(e.executionOnly||!e.dashboard.isAvailable())return;for(let n of t)if(await e.dashboard.registerWidget(Xp({publicServiceId:this.id,packageName:this.packageName,config:uI.config,state:uI.state,binding:n,context:e,runtimeSignal:this.widgetAbort.signal})))this.dashboardWidgetIds.push(n.definition.id)}boundWidget(e){if(Ree(e))return e;throw Error(`${this.entityType} dashboard widget "${e.definition.id}" is not bound; bind it with defineDashboardWidget(...).bind(context, load)`)}records(e,t){let n=this.definition,r=Ur(e.entityService,t);return Object.freeze({get:(o)=>r.get(n,o),list:(o)=>r.list(n,o)})}inboxSource(e,t){let n=zt("the declared Inbox lists as its package"),r=(a)=>{let s=Tr(a.permissionLevel);return{actor:a,records:this.records(e,s),entities:Ur(e.entityService,s)}},o=t.resolveDetail?.bind(t);return{sourceId:t.sourceId,displayName:t.displayName,...t.facets?{facets:[...t.facets]}:{},list:async()=>[...await t.list(Object.freeze({records:this.records(e,n),entities:this.asPackage(e)}))],...o&&{resolveDetail:(a,s,l)=>o(a,Object.freeze({...r(s),signal:l}))},act:(a,s,l)=>t.act(a,s,Object.freeze({...r(l),edits:this.inboxEdits(e,l)}))}}inboxEdits(e,t){let n=this.entityType,r=(l)=>e.permissions.assertEntityActionAllowed(n,l,{userPermissionLevel:t.permissionLevel}),o=(l)=>{if(l.entityType!==n)throw Error(`An Inbox action on ${n} cannot write ${l.entityType}`)},a=()=>Error(`The ${n} changed meanwhile; try again`),s=async(l,c,u)=>{if(r(u),o(l),!(await e.entityService.updateEntity({entity:{...l,content:c.content??l.content,metadata:this.definition.metadata.parse(c.metadata??l.metadata)},options:{expectedContentHash:l.contentHash}})).skipped)return;if((await e.entityService.getEntity({entityType:n,id:l.id,visibilityScope:zt("an Inbox write checks its read")}))?.contentHash!==l.contentHash)throw a()};return Object.freeze({update:(l,c)=>s(l,c,"update"),publish:(l,c)=>s(l,c,"publish"),delete:async(l)=>{if(r("delete"),o(l),!await e.entityService.deleteEntity({entityType:n,id:l.id,options:{expectedContentHash:l.contentHash}}))throw a()}})}atprotoProjection(e,t){let n=this.definition,r=Ur(e.entityService,"public"),o=t.isPublishable?.bind(t);return{entityType:this.entityType,collection:t.lexicon.id,lexicon:t.lexicon,...qe({validate:t.validate}),...o&&{isPublishable:(a)=>{let s=kl(n).safeParse(a);return s.success?o(s.data):!0}},buildRecord:async({entity:a,config:s,client:l,pageUrl:c,topics:u,dryRun:d})=>t.buildRecord(Object.freeze({entity:Al(n,a),config:Object.freeze(qe({brainDid:s.brainDid,anchorDid:s.anchorDid})),...qe({pageUrl:c,topics:u&&Object.freeze([...u])}),dryRun:d===!0,entities:r,uploadBlob:async({data:p,mimeType:f})=>{if(d)return{$type:"blob",ref:{$link:"dry-run"},mimeType:f,size:p.byteLength};if(!l?.uploadBlob)throw Error("AT Protocol PDS client does not support blob uploads");return(await l.uploadBlob({data:p,mimeType:f})).blob}}))}}registerCreateRouting(e,t,n){let r=(a,s)=>this.routeCreate(e,t,n,a,s);e.entities.registerCreateInterceptor(this.entityType,r),e.entities.registerCreateCheck(this.entityType,async(a,s)=>{let l=$$(t,a,n);if(!l)return{kind:"ready"};if("reject"in l)return{kind:"error",error:l.reject};return l.check?l.check(this.createContext(e,a,s)):{kind:"ready"}});let o=t.fromUpload?.mediaTypes??[];if(o.length>0)e.entities.registerUploadSaveHandler({entityType:this.entityType,mediaTypes:[...o],handler:jC(this.entityType,r,`Upload was not handled by ${this.entityType}`)})}async routeCreate(e,t,n,r,o){let a=$$(t,r,n);if(!a)return{kind:"continue",input:r};if("reject"in a)return{kind:"handled",result:Ar(a.reject)};let s=await a.resolve(this.createContext(e,r,o)),l=aD(s);if(l){let{targetEntityId:d}=l.options,p={...r,...d!==void 0&&{targetEntityId:d}};if(!l.document)return{kind:"continue",input:p};let{fields:f,...g}=p,{title:h,content:w,fields:v}=l.document;return{kind:"continue",input:{...g,...h!==void 0&&{title:h},content:w,...v!==void 0&&{fields:{...v}}}}}let c=sD(s);if(c)return{kind:"handled",result:await this.applyQueuedCreate(e,c,r,o)};let u=lD(s);if(u)return{kind:"handled",result:await this.applyStoredCreate(e,u,r,o)};return{kind:"handled",result:await this.applyCreateResolution(e,s,r,o)}}createContext(e,t,n){let r=e.uploads.scoped(Lo),o=Object.freeze({read:(s)=>r.read(s),readRecord:(s)=>r.readRecord(s)}),a=Ur(e.entityService,this.callerScope(n));return _l({input:dI(structuredClone(t)),entities:a,uploads:o},{...this.runtimeBinding(e,a,"a create route",{service:e.entityService,scope:()=>"public"}),caller:fee(n)})}runtimeBinding(e,t,n,r){return{where:n,reader:t,...r&&{anyEntities:r},packageReader:this.asPackage(e),ownsType:(o)=>this.ownsType(o),searchWithDistances:(o)=>e.entityService.searchWithDistances(o),generateObject:(o,a)=>e.ai.generateObject(o,a),generate:Wp(e,(o)=>this.templateName(o)).generate,logger:e.logger,identity:Object.freeze({getProfile:()=>e.identity.getProfile()})}}async runGenerationForEval(e,t,n={}){let r=this.generation;if(!r)throw Error(`Entity "${this.entityType}" declares no generation`);let o=this.generationHandler(e,r,`${this.entityType}:generation`,this.definition.scheduledGeneration!==void 0),a=o.validateAndParse(await jl(e.jobAuthority,void 0,t));if(a===null)return{success:!1,error:"Invalid generation input"};let s=n.onProgress,l=s?$o.from(async({progress:u,message:d})=>{await s({progress:u,...qe({message:d})})}):void 0;return{...await o.process(a,`eval-${Date.now()}`,l??$o.noop())}}runBinding(e,t,n){return this.runtimeBinding(e,t.entities,n,{service:e.entityService,scope:(r)=>t.scope(r)})}callerScope(e){return Tr(e.userPermissionLevel)}async applyCreateResolution(e,t,n,r){if("delegate"in t)return this.applyDelegation(e,t,n,r);if("refuse"in t)return Ar(t.refuse);let o=this.callerScope(r),a={actor:r.actor,interfaceType:r.interfaceType};if("existing"in t){let d=await e.entityService.getEntity({entityType:this.entityType,id:t.existing.id,visibilityScope:o});if(!d)return Ar(`Cannot reuse ${this.entityType} "${t.existing.id}", which does not exist`);return this.createSuccess("existing",d.id,t.attachment)}let s="update"in t?t.update:t.create,l=this.definition.metadata.safeParse(s.metadata);if(!l.success)return Ar(this.invalid(l.error));if("update"in t){let d=await e.entityService.getEntity({entityType:this.entityType,id:t.update.id,visibilityScope:o});if(!d)return Ar(`Cannot update ${this.entityType} "${t.update.id}", which does not exist`);let p=await e.entityService.updateEntity({entity:{...d,content:t.update.content,metadata:l.data},options:{eventContext:a}});return this.createSuccess("updated",p.entityId,void 0)}let c=await e.entityService.getEntity({entityType:this.entityType,id:t.create.id,visibilityScope:zt("create route checks whether its id is taken; no content returned")}),u=`A ${this.entityType} "${t.create.id}" already exists`;if(c)return Ar(u);try{let d=await e.entityService.createEntity({entity:{id:t.create.id,entityType:this.entityType,content:t.create.content,metadata:l.data,...n.visibility!==void 0&&{visibility:n.visibility}},options:{conditionalWrite:{expectedRevision:null},eventContext:a}});return this.createSuccess("created",d.entityId,t.attachment)}catch(d){if(d instanceof Rr)return Ar(u);throw d}}invalid(e){return`Invalid ${this.entityType} metadata: ${e.issues.map(({path:t,message:n})=>`${t.join(".")||"metadata"}: ${n}`).join("; ")}`}async applyDelegation(e,t,n,r){let{job:o,input:a={}}=t.delegate,s=o==="generation"?this.generation:void 0,l=s??(Object.hasOwn(this.jobs,o)?this.jobs[o]:void 0);if(!l)return Ar(`${this.entityType} declares no job named "${o}"`);if((("create"in t)||("existing"in t))&&!("generate"in l))return Ar(`${this.entityType} job "${o}" does not generate, so it cannot fill an allocated entity`);let u=l.input.safeParse(a);if(!u.success)return Ar(`Invalid input for ${this.entityType} job "${o}": ${u.error.issues.map(({message:g})=>g).join("; ")}`);let d=await jl(e.jobAuthority,Ol(r),a),p=await this.allocate(e,t,n,r);if("error"in p)return Ar(p.error);let f=p.entityId;try{let g={...d,...f!==void 0&&{entityId:f},..."generate"in l&&qe({source:Gp(n)})},h=s?await e.jobs.enqueue({type:`${this.entityType}:generation`,data:g,toolContext:r,options:{source:this.id,metadata:{operationType:"content_operations"}}}):await e.jobs.enqueue({type:o,data:g,toolContext:{interfaceType:r.interfaceType,actor:r.actor,...qe({channelId:r.channelId})}}),w="attachment"in t?t.attachment:void 0;return{success:!0,data:{status:"generating",jobId:h,...f!==void 0&&{entityId:f,...w&&{attachment:qc.parse(w({entityId:f}))}}}}}catch(g){if(p.written)await e.entityService.deleteEntity({entityType:this.entityType,id:p.written}).catch((h)=>{this.logger.warn("Failed to remove an unqueued placeholder",{entityId:p.written,error:h})});return Ar(he(g))}}async allocate(e,t,n,r){if("existing"in t){let s=await e.entityService.getEntity({entityType:this.entityType,id:t.existing.id,visibilityScope:this.callerScope(r)});return s?{entityId:s.id}:{error:`Cannot reuse ${this.entityType} "${t.existing.id}", which does not exist`}}if(!("create"in t))return{entityId:void 0};let o=this.definition.metadata.safeParse(t.create.metadata);if(!o.success)return{error:this.invalid(o.error)};let a=await e.entityService.createEntity({entity:{id:t.create.id,entityType:this.entityType,content:t.create.content,metadata:o.data,...n.visibility!==void 0&&{visibility:n.visibility}},options:{deduplicateId:!0,eventContext:{actor:r.actor,interfaceType:r.interfaceType}}});return{entityId:a.entityId,written:a.entityId}}async applyQueuedCreate(e,t,n,r){let o=lI(t),a=t.placeholder;if(a?.deduplicate===!0)return this.applyDeduplicatedQueuedCreate(e,t,a,r);if(a){let s=this.definition.metadata.safeParse(a.metadata);if(!s.success)return Ar(this.invalid(s.error));let l=new Date().toISOString(),c=await GC({entityService:e.entityService,entity:{id:t.entityId,entityType:this.entityType,content:a.content,metadata:s.data,...a.visibility!==void 0&&{visibility:a.visibility},created:l,updated:l},...o&&{options:{eventContext:cI(r)}}});if(a.visibility!==void 0&&c.existingEntity!==void 0&&c.existingEntity.visibility!==a.visibility)return Ar(`Existing ${this.entityType} visibility "${c.existingEntity.visibility}" does not match requested visibility "${a.visibility}".`)}return this.queueFill(e,t,r,t.entityId)}async applyDeduplicatedQueuedCreate(e,t,n,r){let o=this.definition.metadata.safeParse(n.metadata);if(!o.success)return Ar(this.invalid(o.error));let a=new Date().toISOString(),s=await e.entityService.createEntity({entity:{id:t.entityId,entityType:this.entityType,content:n.content,metadata:o.data,...n.visibility!==void 0&&{visibility:n.visibility},created:a,updated:a},options:{deduplicateId:!0,...lI(t)&&{eventContext:cI(r)}}});return this.queueFill(e,t,r,s.entityId)}async writtenPlaceholder(e,t){let n=await e.entityService.getEntity({entityType:this.entityType,id:t,visibilityScope:zt("read back the placeholder a queued create wrote; only its hash is handed on")});if(!n)throw Error(`The ${this.entityType} placeholder "${t}" could not be read back`);return{entityId:n.id,contentHash:n.contentHash}}async queueFill(e,t,n,r){let{data:o}=t.job,a=await e.jobs.enqueue(t.job.contract,typeof o==="function"?o(await this.writtenPlaceholder(e,r)):o,...lI(t)?[{options:gee(this.id,n,typeof t.job.attributed==="object"?t.job.attributed:void 0)}]:[]);return{success:!0,data:{entityId:r,status:"generating",jobId:a,...t.attachment!==void 0&&{attachment:qc.parse(t.attachment)}}}}async applyStoredCreate(e,t,n,r){let o=this.definition.metadata.safeParse(t.record.metadata);if(!o.success)return Ar(this.invalid(o.error));let a=new Date().toISOString(),s=await e.entityService.createEntity({entity:{id:t.record.id,entityType:this.entityType,content:t.record.content,metadata:o.data,...n.visibility!==void 0&&{visibility:n.visibility},created:a,updated:a},options:{deduplicateId:!0,eventContext:cI(r)}});return{success:!0,data:{entityId:s.entityId,status:"created",attachment:qc.parse(t.attachment({entityId:s.entityId}))}}}createSuccess(e,t,n){return{success:!0,data:{status:e,entityId:t,...n&&{attachment:qc.parse(n({entityId:t}))}}}}async onShutdown(){this.releases.forEach((n)=>n()),this.releases=[],this.widgetAbort.abort();let e=this.getContext(),t=this.dashboardWidgetIds.splice(0);await Promise.all(t.map(async(n)=>{try{await e.dashboard.unregisterWidget(n)}catch(r){this.logger.error("Failed to unregister a declared dashboard widget",{widgetId:n,error:he(r)})}}))}async stageFeed(e,t,n){try{await this.writeFeed(e,t,n)}catch(r){this.logger.error(`Failed to write the ${this.entityType} feed`,r),n.reportFailure(`${this.entityType} feed generation failed: ${he(r)}`)}}async writeFeed(e,t,n){let r=await e.entityService.listEntities({entityType:this.entityType,options:{limit:1000,publishedOnly:n.environment==="production"}}),o=Object.freeze({environment:n.environment}),a=r.flatMap((d)=>{let p=t.toItem(Al(this.definition,d),o);return p?[JT.parse(p)]:[]});if(a.length===0)return;let s=n.siteConfig.url??"https://example.com",l=s.replace(/\/+$/u,""),c=VT(a,{title:n.siteConfig.title??t.title??"Feed",description:n.siteConfig.description??t.description??"Latest updates",link:s,selfLink:`${s}/${t.path}`},(d)=>`${l}/${n.generateEntityUrl(this.entityType,d.slug).replace(/^\/+/u,"")}`),u=dee(n.outputDir,t.path);await lee(uee(u),{recursive:!0}),await cee(u,c,"utf8")}async plantSeed(e,t){if(await e.entityService.getEntity({entityType:this.entityType,id:t.id,visibilityScope:zt("seed checks whether its default exists; no content returned")}))return;try{await e.entityService.createEntity({entity:{id:t.id,entityType:this.entityType,content:t.content(),metadata:t.metadata??{}},options:{conditionalWrite:{expectedRevision:null}}})}catch(r){if(!(r instanceof Rr))throw r}}getProjectionRules(){return[...this.projections.map((e)=>_ee(e,this.version,this.scope)),...this.projectionRules]}}function Pee(e,t,n){return e.kind==="rizom-entity-data-source"?e.entity===t:n[0]===t}function ry(e,t,n,r,o=[],a=new Map){let s=new Set(o.map(({id:c})=>c)),l=new Set(e.map(({type:c})=>c));return e.map((c)=>new G$(a.get(c)??c,t.filter(({source:u})=>u===c),n,r,o.filter((u)=>Pee(u,c,e)),s,l))}function Oee(e){if(Jt(e.type,"Entity type"),e.scheduledGeneration){if(!e.generation)throw Error(`Entity "${e.type}" declares a scheduled generation but no generation`);hN.parse(e.scheduledGeneration)}if(Object.keys(e.jobs??{}).forEach((n)=>Jt(n,"Job name")),!e.purpose.trim())throw Error(`Entity "${e.type}" purpose must not be empty`);if(e.config?.binaryStorage!==void 0&&e.coverImage===!0)throw Error(`Entity "${e.type}" stores binary content, which carries no cover image`);Mee(e);let t=(e.checks??[]).map(({id:n})=>n);return t.forEach((n,r)=>{if(Jt(n,"Check id"),t.indexOf(n)!==r)throw Error(`Entity "${e.type}" declares check "${n}" twice`)}),Object.freeze({kind:"rizom-entity",...e,classification:Oc.parse(e.classification)})}function Mee(e){let t=new Set(e.attachments?.map(({type:n})=>n));for(let n of e.publishAssets??[]){if(!t.has(n.attachmentType))throw Error(`Entity "${e.type}" publish asset renders from "${n.attachmentType}", which ${e.type} does not attach`);if(n.field==="coverImageId"&&e.coverImage!==!0)throw Error(`Entity "${e.type}": ${e.type} records a cover image but does not declare coverImage`)}}function jee(e){if(Jt(e.type,"Analytics report type"),!e.description.trim())throw Error(`Analytics report "${e.type}" description must not be empty`);return Object.freeze({kind:"rizom-analytics-report",...e})}function Dee(e){if(Object.hasOwn(e,"handle")===Object.hasOwn(e,"generate"))throw Error("An entity job either handles or generates \u2014 not both or neither");return Object.freeze({...e})}function zee(e){return Jt(e.id,"Projection id"),Object.freeze({kind:"rizom-projection",...e})}var Nee=i.object({}),iy=["create","evals","publish","projectionRules","jobs","generation"];function $ee(e,t,n){let[r,...o]=t;if(!r||o.length>0)throw Error(`Entity package "${e}" keeps a legacy plugin id only when it installs one plugin`);return(a)=>(Jt(a,"Local plugin id"),a===r.type?n:`${n}:${a}`)}function oy(e,t,n){let r=n.map(({id:a})=>a);if(new Set(r).size!==r.length)throw Error(`Entity package "${e}" contains duplicate data source ids`);if(n.length>0&&t.size===0)throw Error(`Entity package "${e}" declares data sources but no entities to install them`);let o=n.find((a)=>a.kind==="rizom-entity-data-source"&&!t.has(a.entity));if(o)throw Error(`Entity package "${e}" data source "${o.id}" reads an entity outside its package`)}function Bee(e,t,n){let r=new Map;for(let o of n){let{entity:a}=o;if(!t.has(a))throw Error(`Entity package "${e}" configures "${a.type}", which is outside its package`);if(r.has(a))throw Error(`Entity package "${e}" configures "${a.type}" twice`);let s=Object.keys(o).find((c)=>c!=="entity"&&!iy.some((u)=>u===c));if(s!==void 0)throw Error(`Entity package "${e}" cannot configure the ${s} of "${a.type}"; configure binds ${iy.join(", ")}`);for(let c of iy)if(o[c]!==void 0&&a[c]!==void 0)throw Error(`Entity package "${e}" configures the ${c} of "${a.type}", which declares it already`);let l=Object.fromEntries(iy.flatMap((c)=>o[c]===void 0?[]:[[c,o[c]]]));r.set(a,Object.freeze({...a,...l}))}return r}function Lee(e){let t=Object.freeze([...e.entities]),n=Object.freeze([...e.projections??[]]),r=Object.freeze([...e.dataSources??[]]),o=new Set(t),a=t.map(({type:d})=>d);if(new Set(a).size!==a.length)throw Error(`Entity package "${e.id}" contains duplicate entity types`);oy(e.id,o,r);let s=n.map(({id:d})=>d);if(new Set(s).size!==s.length)throw Error(`Entity package "${e.id}" contains duplicate projection ids`);let l=n.find(({source:d,target:p})=>!o.has(d)||!o.has(p));if(l)throw Error(`Entity package "${e.id}" projection "${l.id}" references an entity outside its package`);let c=e.configure,u={entities:t,projections:n,dataSources:r};return ga({family:"entity",id:e.id,config:e.config??Nee,public:u,instantiate:({config:d,package:p,scope:f,pluginId:g})=>{let h=c?.({config:d})??{},w=Object.freeze([...r,...h.dataSources??[]]);return oy(e.id,o,w),ry(t,n,p,g===void 0?f:$ee(e.id,t,g),w,Bee(e.id,o,h.entities??[]))}})}var ay="[secret]",qee=Symbol.for("nodejs.util.inspect.custom");class J${#e;constructor(e){this.#e=e,Object.defineProperty(this,qee,{value:()=>ay}),Object.freeze(this)}reveal(){return this.#e}toJSON(){return ay}toString(){return ay}[Symbol.toPrimitive](){return ay}}function V$(e,t){return Object.freeze(Object.fromEntries(Object.entries(t).map(([n,r])=>[n,e.fields[n]?.secret===!0&&r!==void 0?new J$(r):r])))}function pI(e){Si(e.title,"Account settings title"),Ep(e.description,"Account settings description");let t=Object.keys(e.schema.shape),n=new Set(Object.keys(e.fields));for(let[o,a]of Object.entries(e.fields)){if(!t.includes(o))throw Error(`Account settings field "${o}" is not declared by the settings schema`);if(Si(a.label,`Account settings field "${o}" label`),a.control!==void 0&&!HN.safeParse(a.control).success)throw Error(`Account settings field "${o}" has unsupported control "${String(a.control)}"`);if(a.secret!==void 0&&typeof a.secret!=="boolean")throw Error(`Account settings field "${o}" secret must be boolean`)}for(let o of t)if(!n.has(o))throw Error(`Account settings schema field "${o}" has no field declaration; declare its label and whether it is secret`);let r=e.fields;for(let o of Object.values(r))Object.freeze(o);return Object.freeze(r),Object.freeze({kind:"rizom-account-settings",...e,fields:r})}var Fee=i.object({url:i.string()}),Uee=2048;function Zee(e){try{let t=new URL(e);return t.protocol==="https:"&&t.origin===e}catch{return!1}}function Wee(e,t){if(!Zee(e))throw Error(`Workspace action "${t}" launch origin "${e}" must be an absolute https origin, such as https://example.com`)}function H$(e,t){if(t.length>Uee)return!1;try{let n=new URL(t);return n.protocol==="https:"&&n.username===""&&n.password===""&&e.origins.includes(n.origin)}catch{return!1}}var Q$=Symbol("rizom.workspace-action-executor");function mI(e){let t=e[Q$];if(!t)throw Error(`Workspace action "${e.definition.name}" was not bound by defineWorkspaceAction().bind()`);return t}function K$(e){if(Jt(e.name,"Workspace action name"),Si(e.label,`Workspace action "${e.name}" label`),e.confirmation?.kind==="static")Si(e.confirmation.message,`Workspace action "${e.name}" confirmation`);if(e.permission!==void 0)Rp(e.permission,`Workspace action "${e.name}"`);let{launch:t,output:n,...r}=e;if(t){if(n!==void 0)throw Error(`Workspace action "${e.name}" launches the browser, so it declares no output`);if(t.origins.length===0||t.origins.length>10)throw Error(`Workspace action "${e.name}" launch declares one to ten origins`);for(let a of t.origins)Wee(a,e.name)}else if(n===void 0)throw Error(`Workspace action "${e.name}" declares an output schema`);let o={kind:"rizom-workspace-action",...r,output:n??Fee,...t&&{launch:Object.freeze({origins:Object.freeze([...t.origins])})},bind(a,s,l){if(o.confirmation?.kind==="prepared"&&!l)throw Error(`Workspace action "${o.name}" requires a prepared confirmation callback`);return Object.freeze({kind:"rizom-workspace-action-binding",definition:o,[Q$]:Object.freeze({execute:s,...l?{prepare:l}:{}})})}};return Object.freeze(o)}function Y$(e){let t=e.delivery;if(t!=="request"&&t!=="command")throw Error(`Bus contract "${e.channel}" must be delivered as a "request" or a "command"`);return Xn(e)}var X$=new WeakMap;function eB(e){if(Jt(e.name,"Job name"),e.retry&&(!Number.isInteger(e.retry.attempts)||e.retry.attempts<1))throw Error(`Job "${e.name}" retry attempts must be at least 1`);if(e.deadline)fI(e.deadline);let t={kind:"rizom-service-job",...e,handle(n){let r=Object.freeze({kind:"rizom-service-job-binding",definition:t});return X$.set(r,async(o)=>n({...o,input:wi(t.input,o.input)})),r}};return Object.freeze(t)}function tB(e){let t=X$.get(e);if(!t)throw Error(`Job "${e.definition.name}" was not created by defineJob().handle()`);return t}function fI(e){let t=/^(\d+)(ms|s|m)$/u.exec(e);if(!t)throw Error(`Invalid job deadline "${e}"`);let n=Number(t[1]);if(!Number.isSafeInteger(n)||n<1)throw Error(`Job deadline "${e}" must be positive`);let r=t[2];return n*(r==="m"?60000:r==="s"?1000:1)}function nB(e){return Jt(e.name,"Tool name"),gI(e)}function gI(e){if(!e.description.trim())throw Error(`Tool "${e.name}" description must not be empty`);return Object.freeze({kind:"rizom-service-tool",...e})}import{AsyncLocalStorage as wB}from"async_hooks";var rB=Symbol("service-content-target");function iB(e,t){if(e.template.includes(":")||!t(e.template))throw Error(`Unknown or non-generatable service template: ${e.template}`);let n=wh.parse({templateName:e.template,context:e.context,destination:{entityType:e.destination.entity.type,idPath:e.destination.idPath,metadata:Ro.parse(e.destination.entity.metadata.parse(e.destination.metadata)),visibility:e.destination.visibility}});return Object.freeze({...n,[rB]:!0})}import{createHash as Gee,randomBytes as Jee}from"crypto";var aB=Object.freeze({ttlMs:600000,maxPending:20});function oB(e){return Gee("sha256").update(e).digest("base64url")}class hI{pending=new Map;ttlMs;maxPending;now;constructor(e){if(!Number.isSafeInteger(e.ttlMs)||e.ttlMs<=0)throw Error("Single-use store TTL must be a positive integer");if(!Number.isSafeInteger(e.maxPending)||e.maxPending<=0)throw Error("Single-use store bound must be a positive integer");this.ttlMs=e.ttlMs,this.maxPending=e.maxPending,this.now=e.now??Date.now}issue(e){this.prune(),[...this.pending.keys()].slice(0,Math.max(0,this.pending.size-this.maxPending+1)).forEach((n)=>this.pending.delete(n));let t=Jee(32).toString("base64url");return this.pending.set(oB(t),{value:e,expiresAt:this.now()+this.ttlMs}),t}take(e,t=()=>!0){this.prune();let n=oB(e),r=this.pending.get(n);if(!r||!t(r.value))return null;return this.pending.delete(n),r.value}prune(){let e=this.now();[...this.pending].filter(([,t])=>t.expiresAt<=e).forEach(([t])=>this.pending.delete(t))}}function Tu(){return Object.freeze({})}function Vee(e,t){if(e.userPermissionLevel!=="admin")throw Error(`${t} requires admin permission`)}import{createHash as Hee,randomUUID as Qee}from"crypto";var Kee=300000,Yee=1000;function yI(e){if(e===null||typeof e!=="object")return JSON.stringify(e);if(Array.isArray(e))return`[${e.map(yI).join(",")}]`;return`{${Object.keys(e).sort().map((t)=>`${JSON.stringify(t)}:${yI(e[t]??null)}`).join(",")}}`}function sB(e){return Hee("sha256").update(yI(e)).digest("hex")}function lB(e={}){let t=e.now??(()=>Date.now()),n=e.maxRecords??Yee,r=new Map;function o(a){r.forEach((s,l)=>{if(s.expiresAt<=a)r.delete(l)}),Array.from(r.keys()).slice(0,Math.max(0,r.size-n+1)).forEach((s)=>r.delete(s))}return{issue({callerId:a,actionId:s,input:l,revision:c}){let u=t();o(u);let d=Qee(),p=u+Kee;return r.set(d,{callerId:a,actionId:s,inputDigest:sB(l),revision:c,expiresAt:p}),{token:d,expiresAt:p}},redeem(a,{callerId:s,actionId:l,input:c}){let u=a?r.get(a):void 0;if(a)r.delete(a);if(u===void 0||u.expiresAt<=t()||u.callerId!==s||u.actionId!==l||u.inputDigest!==sB(c))return;return{revision:u.revision}}}}var Xee=i.object({actionId:i.string().trim().min(1).max(120),input:i.unknown(),mode:i.enum(["prepare","execute"]).default("execute"),confirmationToken:i.string().uuid().optional()}).strict(),ete=i.object({capability:i.object({confirmation:i.literal("prepared").optional()})}).passthrough(),tte=i.array(i.string().trim().min(1).max(120)).max(200).transform((e)=>[...new Set(e)]),nte=i.object({summary:i.string().trim().min(1).max(500),revision:i.string().trim().min(1).max(500)}),sy=i.json(),rte=i.object({url:i.string()});function ite(e,t){if(e.confirmation?.kind!=="prepared")return!1;if(e.confirmation.conditional!==!0)return!0;let n=ete.safeParse(t);return n.success&&n.data.capability.confirmation==="prepared"}function ote(e,t,n){let r=e?.safeParse(t??{});if(r&&!r.success)throw ty(n,"received invalid query state",r.error);let o=r?.data;if(e&&!sy.safeParse(o).success)throw Vt(n,"query state must be JSON-native");return Object.freeze({get(a){if(a!==e)throw Vt(n,"query reader was called with a schema not declared by the workspace");return a.parse(o)}})}function cB(e){return Object.freeze({actor:Object.freeze({id:e.userId,...e.displayName?{displayName:e.displayName}:{}}),permission:e.userPermissionLevel,isAnchor:e.isAnchor})}function uB(e,t){return t?AbortSignal.any([t,e]):e}async function ate(e,t,n){let r=mI(e).prepare;if(!r)throw Error("Prepared confirmation callback is unavailable");return r({...t,input:n})}async function ste(e,t,n,r){return mI(e).execute({...t,...n,input:r})}function vI(e){let t=e.binding.definition,n=G0(e.binding),r={publicServiceId:e.publicServiceId,packageName:e.packageName,surface:"Studio workspace",id:t.id};if(t.query){let C=t.query.safeParse({});if(!C.success)throw Vt(r,"declares a query schema without a valid empty/default state",ao(C.error.issues));if(!sy.safeParse(C.data).success)throw Vt(r,"query state must be JSON-native")}let o=lB();async function a(C,S,y){let R=await Kh({config:e.config,state:e.state,...e.accountSettingsRegistration?{accountSettingsRegistration:e.accountSettingsRegistration}:{},provider:{caller:cB(C),signal:S},context:e.context,entities:e.entities,accountSettings:e.accountSettings});return Object.freeze({...R,query:ote(t.query,y,r)})}function s(C,S){return e.runAs?e.runAs({caller:cB(C),actor:C.actor,interfaceType:"studio",browserSession:!0},S):S()}function l(C){return e.entities?WN(e.entities,C.signal):Object.freeze({...C.entities,...GN()})}async function c(C,S){if(!ha(C.userPermissionLevel,t.permission))return!1;if(!n.authorize)return!0;let y=await a(C,S,void 0),R;try{R=await n.authorize(y)}catch(A){if(S.aborted)throw S.reason??A;throw oo(r,"authorization policy failed",A)}if(typeof R!=="boolean")throw Vt(r,"authorization policy must return a boolean",void 0,{code:"invalid_response"});return R}function u(C,S){return ny(e.context.logger,[C,e.runtimeSignal],S)}function d(C,S){let y=Xee.safeParse(C);if(!y.success)throw ty(r,"received an invalid action request",y.error);let R=e.binding.actions.find((z)=>z.definition.name===y.data.actionId);if(!R)throw Vt(r,`does not declare action "${y.data.actionId}"`,void 0,{code:"not_found",publicMessage:"This workspace has no such action"});let A=R.definition;if(A.permission!==void 0&&!ha(S.userPermissionLevel,A.permission))throw Vt(r,`action "${A.name}" was requested below its minimum permission`,void 0,{code:"permission_denied"});let k=i.safeParse(A.input,y.data.input);if(!k.success)throw ty(r,`action "${A.name}" received invalid input`,k.error);let j=sy.safeParse(k.data);if(!j.success)throw Vt(r,`action "${A.name}" input must be JSON-native`,void 0,{code:"invalid_input"});return{binding:R,mode:y.data.mode,confirmationToken:y.data.confirmationToken,input:k.data,jsonInput:j.data}}async function p(C,S,y){let R=await f(C,y);y.signal.throwIfAborted();let{token:A,expiresAt:k}=o.issue({callerId:S.userId,actionId:C.binding.definition.name,input:C.jsonInput,revision:R.revision});return{kind:"prepared-confirmation",token:A,summary:R.summary,expiresAt:new Date(k).toISOString()}}async function f(C,S){let y=C.binding.definition.name,R;try{R=await ate(C.binding,S,C.input)}catch(k){if(S.signal.aborted)throw S.signal.reason??k;throw oo(r,`action "${y}" prepare failed`,k)}let A=nte.safeParse(R);if(!A.success)throw Vt(r,`action "${y}" prepared an invalid confirmation`,ao(A.error.issues),{code:"invalid_response"});return A.data}async function g(C,S,y){let R=C.binding.definition.name,A=(z)=>Vt(r,`action "${R}" prepared confirmation is invalid or stale`,void 0,{code:"conflict",publicMessage:"The confirmation is no longer current; confirm again",cause:z}),k=o.redeem(C.confirmationToken,{callerId:S.userId,actionId:R,input:C.jsonInput});if(!k)throw A();let j=await f(C,y).catch((z)=>{if(y.signal.aborted)throw y.signal.reason??z;throw A(z)});if(y.signal.throwIfAborted(),j.revision!==k.revision)throw A()}async function h(C,S,y){let R=C.binding.definition,A;try{A=await ste(C.binding,S,{entities:l(S),accountSettings:e.accountSettings??QC()},C.input)}catch(z){if(y.aborted)throw y.reason??z;throw oo(r,`action "${R.name}" failed`,z)}y.throwIfAborted();let k=R.output.safeParse(A);if(!k.success)throw Vt(r,`action "${R.name}" returned invalid output`,ao(k.error.issues),{code:"invalid_response",cause:k.error});if(R.launch)return w(R.name,R.launch,A);let j=sy.safeParse(k.data);if(!j.success)throw Vt(r,`action "${R.name}" output must be JSON-native`,void 0,{code:"invalid_response"});return j.data}function w(C,S,y){let R=rte.safeParse(y);if(!R.success||!H$(S,R.data.url))throw Vt(r,`action "${C}" launched outside its declared origins (${S.origins.join(", ")})`,void 0,{code:"invalid_response"});return{kind:"launch",url:new URL(R.data.url).href}}let v=n.listEntityTypes;return{id:e.runtimeWorkspaceId,label:t.label,rendererName:qp,priority:t.priority??50,permission:t.permission,...t.query?{urlQuery:!0}:{},...e.aliases?{aliases:e.aliases}:{},...t.publishesEntityTypes?{publishesEntityTypes:!0}:{},entityTypes:v?(C)=>s(C,()=>u(void 0,async()=>{if(!await c(C,e.runtimeSignal))return[];let S=await v(await a(C,e.runtimeSignal,void 0)),y=tte.safeParse(S);if(!y.success)throw Vt(r,"returned an invalid entity-type catalog",ao(y.error.issues),{code:"invalid_response"});return y.data})):(t.entities??[]).map((C)=>C.type),accessHandler:(C)=>s(C,()=>u(void 0,()=>c(C,e.runtimeSignal))),dataProvider:(C,S,y)=>s(C,()=>u(y,()=>b(C,S,y))),actionHandler:(C,S,y)=>s(S,()=>u(y,()=>x(C,S,y))),...t.badge?{badgeProvider:(C)=>s(C,()=>u(void 0,()=>T(C)))}:{}};async function b(C,S,y){let R=uB(e.runtimeSignal,y);if(R.throwIfAborted(),!await c(C,R))throw Vt(r,"was requested below its admission policy",void 0,{code:"permission_denied"});let A=await a(C,R,S),k;try{k=await n.load(A)}catch(N){if(R.aborted)throw R.reason??N;throw oo(r,"data loader failed",N)}R.throwIfAborted();let j=Yp(t.data,k,r),z;try{z=t.view({data:j})}catch(N){if(R.aborted)throw R.reason??N;throw oo(r,"view derivation failed",N)}let G=iI(z,{actions:t.actions,permission:C.userPermissionLevel});if(!G.success)throw Vt(r,"returned an invalid view; use supported StudioWorkspaceView blocks and declared actions",ao(G.issues),{code:"invalid_response"});let D=t.refresh?.({data:j});if(D!==void 0&&(!Number.isInteger(D)||D<500||D>60000))throw Vt(r,"returned an invalid refresh interval; use 500-60000 milliseconds",void 0,{code:"invalid_response"});return Object.freeze({view:G.data,...D===void 0?{}:{refreshAfterMs:D}})}async function x(C,S,y){let R=uB(e.runtimeSignal,y);if(R.throwIfAborted(),!await c(S,R))throw Vt(r,"action was requested below its admission policy",void 0,{code:"permission_denied"});let A=d(C,S),k=await a(S,R,void 0),j=ite(A.binding.definition,A.input);if(A.mode==="prepare"){if(!j)throw Vt(r,`action "${A.binding.definition.name}" does not support prepared confirmation`,void 0,{code:"invalid_input"});return p(A,S,k)}if(j)await g(A,S,k);return h(A,k,R)}async function T(C){let S=e.runtimeSignal;if(!await c(C,S))return 0;let y=await a(C,S,void 0),R=await Promise.resolve(n.load(y)).catch((j)=>{throw oo(r,"data loader failed",j)}),A=Yp(t.data,R,r),k=t.badge?.({data:A})??0;if(!Number.isInteger(k)||k<0||k>999999)throw Vt(r,"returned an invalid badge; use an integer from 0 to 999999",void 0,{code:"invalid_response"});return k}}var bI=Object.freeze({config:Object.freeze({}),state:Object.freeze({}),accountSettings:void 0});function SI(e){let t=e.bind(bI);if(t.definition!==e.definition)throw Error(`Built-in Studio binding for "${e.definition.id}" returned a different definition`);let n=`${e.context.pluginId}:${e.definition.id}`;return vI({publicServiceId:e.context.pluginId,packageName:e.context.pluginId,runtimeWorkspaceId:n,...e.aliases?{aliases:e.aliases.map((o)=>({id:`${e.context.pluginId}:${o.id}`,query:o.query}))}:{},config:bI.config,state:bI.state,binding:t,context:e.context,runtimeSignal:e.runtimeSignal??new AbortController().signal})}async function lte(e){if(e.context.executionOnly||!e.context.studio.isAvailable())return!1;return e.context.studio.registerWorkspace(SI(e))}function ly(e){return Object.freeze({isAvailable:()=>!e.executionOnly&&e.studio.isAvailable(),source:(t)=>SI({...t,context:e}),register:async(t)=>{if(e.executionOnly||!e.studio.isAvailable())return;let n=await e.studio.registerWorkspace(t);return n===!1?void 0:n.workspaceUrl}})}var cte=i.string().min(1).refine((e)=>Buffer.from(e).toString("utf8")===e,"State owner must be well-formed Unicode"),ute=/^@[a-zA-Z0-9][a-zA-Z0-9_-]*\/[a-zA-Z0-9_-]+$/u;function dte(e,t){let n=cte.parse(e);if(ute.test(n))return`${n.slice(1).replace("/",".")}.${t}`;return`package:${Buffer.from(n).toString("base64url")}:${t}`}function Cu(e,t){return(n)=>e.scoped({namespace:dte(t,n.namespace),schema:n.schema})}function cy(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!1,writable:!1,configurable:!1}),e}function uy(e,t){let n=Reflect.get(e,t);return typeof n==="object"&&n!==null?n:void 0}var pte=/^[a-z][a-z0-9_-]*$/u,dB=new WeakSet;function pB(e){return dB.has(e)}function mte(e,t={}){if(!pte.test(e.name))throw Error(`First-party tool name "${e.name}" must start with a lowercase letter and contain only lowercase letters, numbers, hyphens and underscores`);let n=gI(e);if(t.bareName===!0)dB.add(n);return n}var mB=Symbol("rizom.first-party-service-runtime"),fB=new WeakSet;function fte(e){let{messaging:t,asPackage:n,onRelease:r,onReady:o,onRegistered:a}=e,s={logger:e.logger,deliveryProvider:e.deliveryProvider,entityShapes:e.entityShapes,dataDir:e.dataDir,identity:e.identity,domain:e.domain,auth:e.auth,studio:e.studio,inbox:e.inbox,inboxFollowUps:e.inboxFollowUps,recurringCheck:e.recurringCheck,interaction:e.interaction,workspaceUrl:e.workspaceUrl,siteUrl:e.siteUrl,routeByRole:e.routeByRole,toolCall:e.toolCall,classRuntimeState:e.classRuntimeState,evalHandler:e.evalHandler,entityReads:e.entityReads,claim:e.claim,profileKinds:e.profileKinds,ai:e.ai,dataSource:e.dataSource,template:e.template,dashboardWidget:e.dashboardWidget,ready(l){o(()=>n(async()=>l()))},registered(l){a(()=>n(async()=>l()))},answer(l,c,u={}){let d=l;r(t.answer(d,(p,{sender:f})=>n(async()=>c({request:p,sender:f})),u.everyProcess===!0?{everyProcess:!0}:{}))},listen(l,c,u={}){let d=u.mode??"subscribe",p=async(f,g)=>(await n(async()=>c({payload:f,sender:g})),{success:!0});r(typeof l==="string"?hte(t,d,l,(f)=>p(f.payload,f.source)):gte(t,d,l,(f,g)=>p(f,g.source)))}};return Object.freeze(s)}function gte(e,t,n,r){switch(t){case"observe":return e.observe(n,r);case"execution":return e.subscribeExecution(n,r);case"subscribe":return e.subscribe(n,r)}}function hte(e,t,n,r){switch(t){case"observe":return e.observe(n,r);case"execution":return e.subscribeExecution(n,r);case"subscribe":return e.subscribe(n,r)}}function gB(e,t){let n=fte(t);return fB.add(n),cy(e,mB,n)}function yte(e){return e!==void 0&&fB.has(e)}function bte(e){let t=uy(e,mB);if(!yte(t))throw Error("This context carries no service runtime: serviceRuntime() reaches internal capabilities of a slot context the brain's runtime built, for first-party packages only");return t}var hB=new Set(["anchor-profile","brain-character"]);var get=["GET","POST","PUT","DELETE","OPTIONS"],vte="data-site-slot";class yB extends Response{slot;constructor(e,t={}){let{slot:n,...r}=t;super(e,r);this.slot=n}}function dy(e,t={}){return new Response(JSON.stringify(e),{status:t.status??200,headers:{"Content-Type":"application/json; charset=utf-8",...t.headers}})}function ws(e,t){return e.filter((n)=>n.definition.role===t).sort((n,r)=>n.fullPath.length-r.fullPath.length)[0]}function wI(e,t,n){let r=ql(e,t,n),o=e.getEntityService(),a=e.getContentService(),s=e.getPermissionService();return{...r,permissions:{...r.permissions,getConfiguredPrincipalSeeds:()=>s.getConfiguredPrincipalSeeds(),replaceRuntimePrincipalState:(l)=>s.replaceRuntimePrincipalState(l)},entityService:o,bulkMutations:o,entities:$h(e),webRoutes:{getRoutes:()=>e.getPluginWebRoutes(),findByRole:(l)=>ws(e.getPluginWebRoutes(),l)},content:{generate:async({targets:l,toolContext:c,force:u,dryRun:d,signal:p})=>{p?.throwIfAborted();let f=c?Ol(c):Eh(t,s),g=Np(e.getJobQueueService(),t,!1);return a.submitGeneration({caller:f,targets:l,pluginId:t,options:{...u!==void 0&&{force:u},...d!==void 0&&{dryRun:d}}},{enqueue:(h,w)=>g({type:fi.contentGeneration,data:h,toolContext:c??null,options:{source:t,rootJobId:w,maxRetries:0,metadata:{operationType:"content_operations",pluginId:t}}})},p)}},templates:{register:(l,c)=>{e.registerTemplates(l,c??t)},format:(l,c)=>a.formatContent(l,c,{pluginId:t}),parse:(l,c)=>a.parseContent(l,c,t),resolve:async(l,c)=>a.resolveContent(l,c,t),getCapabilities:(l)=>{let c=e.getTemplate(No(l,t));if(!c)return null;let u=lu.getCapabilities(c);return{canGenerate:u.canGenerate,canFetch:u.canFetch,canRender:u.canRender,isStaticOnly:u.isStaticOnly}}},views:Lh(e),prompts:Bh(o),ai:qh(e),registerInstructions:(l)=>{e.registerInstructions(t,l)}}}class py extends Pl{type="service";getApiRoutes(){return[]}getWebRoutes(){return[]}async register(e,t){let n=wI(e,this.id,t);return this.context=n,this.setupMessageHandlers(n),await this.onRegister(n),this.getCapabilities()}get entityService(){return this.getContext().entityService}registerEntityType(e,t,n,r){this.getContext().entities.register(e,t,n,r)}async enqueueJob(e){return this.getContext().jobs.enqueue(e)}async enqueueBatch(e,t){return this.getContext().jobs.enqueueBatch(e,t)}async registerEntityTypes(e){}async registerJobHandlers(e){}async onRegister(e){await this.registerEntityTypes(e),await this.registerJobHandlers(e)}}var xI=["GET","POST","PUT","DELETE","OPTIONS"];function Zl(e){return"returnTo"in e}var bB=/[\s\\\p{Cc}\p{Cf}]/u;function Iu(e){if(typeof e!=="string"||e!==e.trim()||e.length===0||e.length>2048||!e.startsWith("/")||e.startsWith("//")||bB.test(e))return;try{let t=new URL(e,"https://brains.invalid");if(t.origin!=="https://brains.invalid")return;let n=`${t.pathname}${t.search}${t.hash}`;return n.length>0&&n.length<=2048&&n.startsWith("/")&&!n.startsWith("//")&&!bB.test(n)?n:void 0}catch{return}}function vB(e,t,n={}){let r=Iu(e);if(!r)return;let o=new URL(r,"https://brains.invalid");if(n.replace)o.search="",o.hash="";for(let[a,s]of t)o.searchParams.set(a,s);return Iu(`${o.pathname}${o.search}${o.hash}`)}function fy(e,t){let n=Zl(e)?Tte(e,t):Ste(e);return{method:e.method,path:e.path,public:!0,handler:async(r)=>{try{let o=await Ete(e,r,t);if(e.security.kind==="protocol"&&!o)throw new it("unauthenticated");let a=e.body?await Cte(e.body,r):void 0,s=await t.runAs(o?Ite(o,t.declarationId):t.anonymous,r,async()=>Zl(e)?e.handle({request:r,body:void 0,caller:o}):e.handle({request:r,body:a,caller:o}));return n(s)}catch(o){let a=Ki(o,r.signal.aborted?"cancelled":"handler_failed"),s=a.code==="handler_failed"||a.code==="invalid_response";t.logger[s?"error":"warn"](`Route ${e.method} ${e.path} failed`,{code:a.code,error:he(o)});let{code:l,message:c}=a.toJSON();return dy({error:c,code:l},{status:SB(l)})}}}}function Ste(e){return(t)=>{let n=e.response.safeParse(t);if(!n.success)throw new it("invalid_response",{message:`Route ${e.method} ${e.path} answered outside its response schema`,cause:n.error});return dy(n.data)}}var wte=i.union([i.string(),i.number(),i.boolean()]),xte=i.record(i.string(),wte.optional());function Tte(e,t){let{workspaceUrl:n}=t,{returnTo:r}=e,o=r.query;if(!n||!o)throw Error(`Route ${e.method} ${e.path} returns to Studio workspace "${r.id}", which only a service that declares it can do`);let a=(s)=>new it("invalid_response",{message:`Route ${e.method} ${e.path} answered outside Studio workspace "${r.id}"'s query`,cause:s});return(s)=>{let l=o.safeParse(s),c=xte.safeParse(s);if(!l.success)throw a(l.error);if(!c.success)throw a(c.error);let u=Object.entries(c.data).flatMap(([g,h])=>h===void 0?[]:[[g,String(h)]]),d=o.safeParse(Object.fromEntries(u));if(!d.success)throw a(d.error);let p=n(r);if(p===void 0)throw new it("no_handler",{message:`Studio workspace "${r.id}" is not hosted, so route ${e.path} has nowhere to return the browser`,publicMessage:"Studio is not available to return to"});let f=vB(p,u,{replace:!0});if(!f)throw new it("handler_failed",{message:`Studio workspace "${r.id}" has no same-origin URL to return to: ${p}`});return new Response(null,{status:303,headers:{Location:f,"Cache-Control":"no-store"}})}}async function Cte(e,t){let n=await t.json().catch((o)=>{throw new it("invalid_input",{publicMessage:"Request body must be valid JSON",cause:o})}),r=e.safeParse(n);if(!r.success)throw new it("invalid_input",{publicMessage:xu(r.error,{maxLength:wu}),cause:r.error});return r.data}function Ite(e,t){return{actor:{kind:"external",externalActorId:my(t,e.actor.id)},permissionLevel:e.permission}}async function Ete(e,t,n){if(e.security.kind==="public")return null;let r=await e.security.authenticate({request:t});if(!r?.id.trim())return null;return Object.freeze({actor:Object.freeze({...r}),permission:n.permissions.getUserLevel(n.declarationId,r.id),isAnchor:n.permissions.isAnchor(n.declarationId,r.id)})}var TI="_rizomConfirmationToken",Rte=i.object({issues:i.array(i.object({path:i.array(i.union([i.string(),i.number()]))}))});function kte(e){if(!(e instanceof Error)||e.name!=="ZodError")return;let t=Rte.safeParse(e);if(!t.success)return;return[...new Set(t.data.issues.map((n)=>n.path.join(".")||"(root)"))]}function Ate(e){if(e===null||typeof e!=="object")return;let t=Reflect.get(e,TI);return typeof t==="string"?t:void 0}function _te(e){if(e===void 0)return{};try{return JSON.parse(e)}catch{return e}}function Pte(e,t,n){let r=e.definition,o=tB(e),a=Mp(r.input);return{...r.deadline?{executionTimeoutMs:fI(r.deadline)}:{},validateAndParse(s){let l=a.safeParse(s);return l.success?l.data:null},async process(s,l,c,u){let d=await jp(t.jobAuthority,s),{input:p}=s,f=await n(d,()=>o({input:p,signal:u,progress:c})),g=r.output.safeParse(f);if(!g.success)throw new it("invalid_response",{message:`Job "${r.name}" answered outside its output schema`,cause:g.error});return f}}}class CB extends py{definition;calls=new wB;entityAccessCache;publicId;dependencies;toolContext=new wB;cleanups=[];registeredJobs=new Set;answered=[];readyHandlers=[];registeredHandlers=[];routes=[];operatorAbortController=new AbortController;registeredStudioWorkspaceIds=[];workspaceUrls=new Map;returnTargets=[];registeredDashboardWidgetIds=[];accountSettingsRegistration;studioWorkspaceBindings=[];dashboardWidgetBindings=[];scopedShell;state;tools;resources;constructor(e,t,n,r,o){super(r,n,t,Rl());this.definition=e,this.publicId=e.id,this.dependencies=[...o]}register(e,t){return this.scopedShell=e,super.register(e,t)}async onRegister(e){if(await super.onRegister(e),this.definition.accountSettings&&!e.executionOnly)this.accountSettingsRegistration=e.accountSettings.register({ownerPluginId:this.id,packageName:this.packageName,definitionId:this.definition.id,definition:this.definition.accountSettings});this.state=this.definition.setup?await this.definition.setup({config:this.config,lifecycle:{onCleanup:(o)=>{this.cleanups.push(o)}},runtimeState:Cu(e.runtimeState,this.packageName)}):Tu();let t=this.templateFormatter();e.templates.register(this.runtimeTemplates(),this.id),this.registerPrompts();let n=this.definition.jobs?.({config:this.config,state:this.state,entities:this.entityAccess(),messaging:this.messaging(),templates:t})??[],r=new Set;for(let o of n){let a=o.definition;if(r.has(a.name))throw Error(`Service "${this.publicId}" registers job "${a.name}" more than once`);r.add(a.name),this.registeredJobs.add(a),qN(a,`${this.id}:${a.name}`),e.jobs.registerHandler(a.name,Pte(o,e,(s,l)=>this.calls.run(s,l)))}this.registerSubscriptions(e),this.routes=(this.definition.routes?.({config:this.config,state:this.state,entities:this.entityAccess(),jobs:this.jobs(),messaging:this.messaging(),accountSettings:this.accountSettingsWriter()})??[]).map((o)=>this.runtimeRoute(o))}getWebRoutes(){return[...this.routes]}runtimeRoute(e){if(Zl(e))this.returnTargets.push({route:e,workspace:e.returnTo});let t=this.requireShell().getPermissionService();return fy(e,{declarationId:this.publicId,permissions:{getUserLevel:(n,r)=>t.determineUserLevel(n,r),isAnchor:(n,r)=>t.isAnchor(n,r)},anonymous:Ml(this.id),runAs:(n,r,o)=>this.calls.run(this.routeCall(n,r),o),logger:this.logger,workspaceUrl:(n)=>this.workspaceUrls.get(n)})}async onRegistrationComplete(e){if(this.definition.accountSettings&&!e.executionOnly&&!e.accountSettings.hasBackend())throw Error(`Service "${this.publicId}" account settings require auth-service and an account settings encryption key`);for(let r of this.registeredHandlers)await r();if(e.executionOnly)return;this.bindOperatorDefinitions(e);let t=[],n=[];try{for(let r of this.studioWorkspaceBindings){let o=`${this.id}:${r.definition.id}`,a=vI({publicServiceId:this.publicId,packageName:this.packageName,runtimeWorkspaceId:o,config:this.config,state:this.requireState(),...this.accountSettingsRegistration?{accountSettingsRegistration:this.accountSettingsRegistration}:{},binding:r,context:e,runtimeSignal:this.operatorAbortController.signal,entities:this.entityAccess(),accountSettings:this.accountSettingsWriter(),runAs:this.asOperator});try{let s=await e.studio.registerWorkspace(a);if(s===!1){await this.rollbackStudioWorkspaces(e,t),t.splice(0),this.workspaceUrls.clear();break}this.workspaceUrls.set(r.definition,s.workspaceUrl)}catch(s){throw Error(`Service "${this.publicId}" package "${this.packageName}" Studio workspace "${r.definition.id}" host registration failed; correct the declaration or Studio configuration: ${he(s)}`,{cause:s})}t.push(o)}this.registeredStudioWorkspaceIds.push(...t);for(let r of this.dashboardWidgetBindings){let o=Xp({publicServiceId:this.publicId,packageName:this.packageName,config:this.config,state:this.requireState(),...this.accountSettingsRegistration?{accountSettingsRegistration:this.accountSettingsRegistration}:{},binding:r,context:e,runtimeSignal:this.operatorAbortController.signal,entities:this.entityAccess(),accountSettings:this.accountSettingsWriter(),runAs:this.asOperator});try{if(!await e.dashboard.registerWidget(o)){await this.rollbackDashboardWidgets(e,n),n.splice(0);break}}catch(a){throw Error(`Service "${this.publicId}" package "${this.packageName}" dashboard widget "${r.definition.id}" host registration failed; correct the declaration or Dashboard configuration: ${he(a)}`,{cause:a})}n.push(r.definition.id)}this.registeredDashboardWidgetIds.push(...n)}catch(r){throw await this.rollbackDashboardWidgets(e,n),await this.rollbackStudioWorkspaces(e,t),r}}async getTools(){if(this.tools)return this.tools;let e=this.requireState(),t=this.definition.tools?.(this.withRuntime(this.getContext(),{config:this.config,state:e,entities:this.entityAccess(),jobs:this.jobs(),messaging:this.messaging(),accountSettings:this.accountSettingsWriter(),templates:this.templateFormatter(),content:this.content()}))??[],n=new Set;return this.tools=t.map((r)=>{if(n.has(r.name))throw Error(`Service "${this.publicId}" defines tool "${r.name}" more than once`);return n.add(r.name),this.runtimeTool(r)}),this.tools}async getResources(){if(this.resources)return this.resources;let e=this.definition.resources?.({config:this.config,state:this.requireState()})??{};return this.resources=Object.entries(e).map(([t,n])=>this.runtimeResource(t,n)),this.resources}async getInstructions(){return this.definition.instructions?.({config:this.config,state:this.requireState()})}async onReady(){for(let e of this.readyHandlers)await e()}async onShutdown(){this.operatorAbortController.abort(Error(`Service "${this.publicId}" is shutting down`)),await this.rollbackDashboardWidgets(this.getContext(),this.registeredDashboardWidgetIds.splice(0)),await this.rollbackStudioWorkspaces(this.getContext(),this.registeredStudioWorkspaceIds.splice(0)),this.studioWorkspaceBindings=[],this.dashboardWidgetBindings=[],this.workspaceUrls.clear(),this.returnTargets.splice(0),this.tools=void 0,this.resources=void 0,this.routes=[];for(let e of this.registeredJobs)FN(e,`${this.id}:${e.name}`);this.registeredJobs.clear();for(let e of this.answered.splice(0).reverse())e();this.readyHandlers.splice(0),this.registeredHandlers.splice(0);for(let e of this.cleanups.splice(0).reverse())await e()}assertReturnTargets(){let e=new Set(this.studioWorkspaceBindings.map((t)=>t.definition));for(let{route:t,workspace:n}of this.returnTargets)if(!e.has(n))throw Error(`Service "${this.publicId}" route ${t.method} ${t.path} returns to Studio workspace "${n.id}", which this package does not declare`)}bindOperatorDefinitions(e){if(this.definition.dashboardWidgets&&e.dashboard.isAvailable()){let t=this.definition.dashboardWidgets(this.withRuntime(e,{config:this.config,state:this.requireState(),accountSettings:this.definition.accountSettings})),n=new Set;for(let r of t){let o=r.definition.id;if(n.has(o))throw Error(`Service "${this.publicId}" package "${this.packageName}" registers dashboard widget "${o}" more than once; return each local widget definition once`);n.add(o)}this.dashboardWidgetBindings=Object.freeze([...t])}if(this.definition.studioWorkspaces&&e.studio.isAvailable()){let t=this.definition.studioWorkspaces(this.withRuntime(e,{config:this.config,state:this.requireState(),accountSettings:this.definition.accountSettings})),n=new Set;for(let r of t){let o=r.definition.id;if(n.has(o))throw Error(`Service "${this.publicId}" package "${this.packageName}" registers Studio workspace "${o}" more than once; return each local workspace definition once`);n.add(o)}this.studioWorkspaceBindings=Object.freeze([...t]),this.assertReturnTargets()}}async rollbackStudioWorkspaces(e,t){for(let n of[...t].reverse()){try{await e.studio.unregisterWorkspace(n)}catch(o){this.logger.error("Failed to unregister declarative Studio workspace",{serviceId:this.publicId,packageName:this.packageName,workspaceId:n,error:he(o)})}let r=this.registeredStudioWorkspaceIds.lastIndexOf(n);if(r>=0)this.registeredStudioWorkspaceIds.splice(r,1)}}async rollbackDashboardWidgets(e,t){for(let n of[...t].reverse()){try{await e.dashboard.unregisterWidget(n)}catch(o){this.logger.error("Failed to unregister declarative dashboard widget",{serviceId:this.publicId,packageName:this.packageName,widgetId:n,error:he(o)})}let r=this.registeredDashboardWidgetIds.lastIndexOf(n);if(r>=0)this.registeredDashboardWidgetIds.splice(r,1)}}requireState(){if(this.state===void 0)throw Error(`Service "${this.publicId}" has not completed setup`);return this.state}toolCall(e){let t=this.getContext(),n,r=Ol(e),{actor:o}=e;return{access:()=>n??=t.jobAuthority.access(r),caller:r,account:async()=>o.kind==="user"?{userId:o.userId}:void 0,eventContext:{actor:e.actor,interfaceType:e.interfaceType}}}asOperator=(e,t)=>this.calls.run(this.operatorCall(e),t);operatorCall(e){let t=this.getContext(),n=e.caller?{actor:e.actor??{kind:"user",userId:e.caller.actor.id},permissionLevel:e.caller.permission}:Ml(this.id),r,o=e.caller?.actor.id;return{access:()=>r??=t.jobAuthority.access(n),caller:n,account:async()=>o===void 0?void 0:e.browserSession?{userId:o,sessionUserId:o}:{userId:o},eventContext:{actor:n.actor,interfaceType:e.interfaceType}}}routeCall(e,t){let n=this.getContext(),r,o;return{access:()=>r??=n.jobAuthority.access(e),caller:e,account:()=>o??=(async()=>{let a=await n.auth.get()?.resolveSession(t);return a?{userId:a.userId,sessionUserId:a.userId}:void 0})(),eventContext:{actor:e.actor}}}accountClaims=new hI(aB);accountSettingsWriter(){let e=async()=>{let n=await this.calls.getStore()?.account?.();if(!n)throw new it("permission_denied",{publicMessage:"Account settings need a signed-in account"});return n},t=async(n,r)=>{let o=this.accountSettingsRegistration;if(!o)throw new it("permission_denied",{message:`Service "${this.publicId}" keeps no account settings here`});let a=i.record(i.string(),i.unknown()).safeParse(r);if(!a.success)throw new it("invalid_input",{publicMessage:"Account settings must be an object"});try{await this.getContext().accountSettings.save(o.id,n,a.data)}catch(s){let l=kte(s);if(!l)throw s;let c=`Invalid account settings: ${l.join(", ")}`;throw new it("invalid_input",{message:c,publicMessage:c})}};return{read:async()=>{let n=await this.calls.getStore()?.account?.(),r=this.accountSettingsRegistration;if(!n||!r)return null;let o=await this.getContext().accountSettings.getForActor(r,n.userId);return o?V$(r.definition,o):null},save:async(n)=>t((await e()).userId,n),claim:async()=>{let n=await e();return this.accountClaims.issue(n)},redeem:async(n,r)=>{let o=await this.calls.getStore()?.account?.(),a=this.accountClaims.take(n,(s)=>s.sessionUserId===void 0||s.sessionUserId===o?.sessionUserId);if(!a)throw new it("permission_denied",{publicMessage:"This link has expired or was already used"});await t(a.userId,await r())}}}currentCall(){return this.calls.getStore()??this.packageCall()}packageCall(){let e=this.getContext();return{...va(e.jobAuthority),eventContext:{actor:{kind:"service",serviceId:this.id}}}}ownsType(e){return this.definition.entities.some(({type:t})=>t===e)}readScope(e,t,n){return vs(e,this.ownsType(t),n)}messaging(){let e=this.getContext();return Object.freeze({request:(n,r)=>e.messaging.request(n,r),command:(n,r)=>e.messaging.command(n,r),publish:(n,r)=>e.messaging.broadcast(n,r)})}registerSubscriptions(e){if(!this.definition.subscriptions)return;let t=new WeakMap,n=(a,s)=>{let l=a.delivery;if(l!=="request"&&l!=="command")throw Error(`Service "${this.publicId}" cannot answer "${a.name}": a package answers requests and commands only`);let c=`${this.packageName}:`;if(!a.name.startsWith(c)||a.name.length===c.length)throw Error(`Service "${this.publicId}" answers only channels named "${c}<name>", and "${a.name}" is not one`);let u=a,d=Object.freeze({kind:"rizom-service-subscription-binding",contract:u});return t.set(d,()=>e.messaging.answer(u,(p,{sender:f})=>this.calls.run(this.packageCall(),async()=>s({request:p,sender:f})))),d},r=this.definition.subscriptions(this.withRuntime(e,{config:this.config,state:this.requireState(),entities:this.entityAccess(),jobs:this.jobs(),messaging:this.messaging(),answer:n})),o=new Set;for(let a of r){let s=t.get(a);if(!s)throw Error(`Service "${this.publicId}" returns a subscription its own answer did not bind`);if(o.has(a.contract.name))throw Error(`Service "${this.publicId}" answers "${a.contract.name}" more than once`);o.add(a.contract.name),this.answered.push(s())}}withRuntime(e,t){return gB(t,{logger:this.logger,messaging:e.messaging,deliveryProvider:(n)=>e.channels.getDeliveryProvider(n),asPackage:(n)=>this.calls.run(this.packageCall(),n),onRelease:(n)=>{this.answered.push(n)},onReady:(n)=>{this.readyHandlers.push(n)},onRegistered:(n)=>{this.registeredHandlers.push(n)},entityShapes:Dte(e),dataDir:e.dataDir,identity:Object.freeze({get:()=>e.identity.get(),getProfile:()=>e.identity.getProfile()}),domain:e.domain,auth:()=>e.auth.get(),studio:ly(e),inbox:Object.freeze({listSources:()=>e.inbox.listSources(),getSource:(n)=>e.inbox.getSource(n)}),inboxFollowUps:Object.freeze({resolve:(n)=>e.inboxFollowUps.resolve(n)}),recurringCheck:(n)=>{e.recurringChecks.register(n)},interaction:(n)=>{e.interactions.register(n)},workspaceUrl:(n)=>this.workspaceUrls.get(n),siteUrl:e.siteUrl,routeByRole:(n)=>e.webRoutes.findByRole(n),evalHandler:(n,r)=>{e.eval.registerHandler(n,r)},classRuntimeState:Object.freeze({scoped:e.runtimeState.scoped.bind(e.runtimeState)}),toolCall:()=>{let n=this.toolContext.getStore();return n?Object.freeze({...n.conversationId!==void 0&&{conversationId:n.conversationId},...n.userPermissionLevel!==void 0&&{userPermissionLevel:n.userPermissionLevel}}):void 0},entityReads:jte(e),claim:(n)=>this.claimSystemType(e,n),profileKinds:e.profileKinds,ai:Object.freeze({generateObject:(n,r,o)=>e.ai.generateObject(n,r,o),judge:(n)=>e.judge(n)}),dataSource:(n)=>{e.entities.registerDataSource(Ote(`${this.id}:${n.id}`,n))},template:(n,r)=>{e.templates.register({[n]:r},this.id)},dashboardWidget:(n)=>{this.answered.push(e.messaging.subscribe(so.pluginsRegistered,async()=>(await sI({context:e,definition:n.definition,render:n.render,load:({visibilityScope:r,signal:o})=>n.load({corpus:IB(e.entityService),visibilityScope:r,signal:o}),runtimeSignal:this.operatorAbortController.signal}),{success:!0})))}})}claimSystemType(e,t){if(!hB.has(t))throw Error(`Service "${this.publicId}" cannot claim entity type "${t}": it is not a shell system type`);let{entityService:n}=e;if(!n.hasEntityType(t))throw Error(`Service "${this.publicId}" cannot claim shell system type "${t}": it is not registered`);let r=Mte(this.requireShell()),o=r.get(t);if(o!==void 0&&o!==this.id)throw Error(`Service "${this.publicId}" cannot claim shell system type "${t}": it is already claimed by "${o}"`);r.set(t,this.id),this.answered.push(()=>{if(r.get(t)===this.id)r.delete(t)});let a=(s)=>{if(s!==t)throw new it("permission_denied",{message:`Service "${this.publicId}" claimed "${t}", not "${s}"`})};return Object.freeze({type:t,getEntity:async(s)=>(a(s.entityType),n.getEntity(s)),listEntities:async(s)=>(a(s.entityType),n.listEntities(s)),createEntity:async(s)=>(a(s.entity.entityType),n.createEntity(s)),updateEntity:async(s)=>(a(s.entity.entityType),n.updateEntity(s)),extendFrontmatterSchema:(s)=>{e.entities.extendFrontmatterSchema(t,s)},registerPersistValidator:(s)=>{e.entities.registerPersistValidator(t,s)}})}ownedDefinition(e){let t=this.definition.entities.find((n)=>n===e);if(!t)throw new it("permission_denied",{message:`Service "${this.publicId}" may only write the entity types its header declares, and "${e.type}" is not one of them`});return t}async assertWriteAllowed(e,t,n){await Jh(this.requireShell().getPermissionService().getEntityActionRequiredLevel(e,t),e,t,n)}entityAccess(){if(this.entityAccessCache)return this.entityAccessCache;let e=this.getContext(),t={...pu(e.entityService,()=>this.currentCall(),(n)=>this.ownsType(n)),...Vh({entityService:e.entityService,owned:(n)=>this.ownedDefinition(n),currentCall:()=>this.currentCall(),assertWriteAllowed:(n,r,o)=>this.assertWriteAllowed(n,r,o),readScope:(n,r,o)=>this.readScope(n,r,o)})};return this.entityAccessCache=Object.freeze(t),this.entityAccessCache}jobs(){let e=this.getContext(),t=async(n,r)=>{let o=await e.jobs.getStatus(r);return o?.type===`${this.id}:${n.name}`?HC(n,o):null};return{enqueue:async(n,r)=>{if(!this.registeredJobs.has(n))throw Error(`Service "${this.publicId}" cannot enqueue unregistered job "${n.name}"`);n.input.parse(r);let o=this.toolContext.getStore(),a=await jl(e.jobAuthority,this.calls.getStore()?.caller,r),s=n.retry?n.retry.attempts-1:void 0,l=await e.jobs.enqueue({type:n.name,data:a,...o?{toolContext:o}:{},options:{source:this.id,metadata:{operationType:"data_processing",pluginId:this.id},...s!==void 0?{maxRetries:s}:{}}});return Object.freeze({id:l,status:()=>t(n,l)})},status:t}}content(){let e=this.getContext(),t=this.erasedTemplates(),n=(r)=>t.get(r)?.generation!==void 0;return{target:(r)=>iB(r,n),generate:async(r)=>{let o=this.toolContext.getStore(),a=await e.content.generate({targets:[...r.targets],toolContext:o,...r.force!==void 0&&{force:r.force},...r.dryRun!==void 0&&{dryRun:r.dryRun},...o?.signal&&{signal:o.signal}});return{...a,items:a.items.map(({destination:s,templateName:l,...c})=>({destination:{entityType:s.entityType,idPath:s.idPath,entityId:s.entityId},template:bT(l,this.id),...c}))}}}}templateFormatter(){let e=this.erasedTemplates();return{format(t,n){let r=e.get(t)?.format;if(!r)throw Error(`No template formats as ${t}`);return r(n)}}}erasedTemplateCache;erasedTemplates(){return this.erasedTemplateCache??=new Map(Object.entries(this.definition.templates??{}).map(([e,t])=>{let{format:n,renderers:r}=t;if(!n&&!r)throw Error(`Service "${this.publicId}" template "${e}" neither formats nor renders`);return[e,{schema:t.schema,description:t.description,generation:t.generation,format:n&&((o)=>n({value:t.schema.parse(o)})),component:r&&((o)=>r.web(t.schema.parse(o)))}]})),this.erasedTemplateCache}runtimeTemplates(){let e={};for(let[t,n]of this.erasedTemplates()){let{format:r,component:o,generation:a}=n;if(a&&!a.prompt.trim())throw Error(`Service "${this.publicId}" generation template "${t}" requires a non-empty prompt`);if(a&&!r)throw Error(`Service "${this.publicId}" generation template "${t}" must format what it generates`);let s={name:t,description:n.description??`${this.publicId} ${t}`,schema:n.schema,requiredPermission:"admin",...r?{formatter:{format:r,parse:()=>{throw Error(`Template "${t}" is format-only`)}},...a?{basePrompt:a.prompt,dataSourceId:"shell:ai-content",...a.useKnowledgeContext!==void 0?{useKnowledgeContext:a.useKnowledgeContext}:{}}:{}}:{}};e[t]=o?gy({...s,schema:n.schema.pipe(Ro),layout:{component:o}}):gy(s)}return e}requireShell(){let e=this.scopedShell;if(!e)throw Error(`Service "${this.publicId}" has no shell`);return e}registerPrompts(){let e=this.requireShell();for(let[t,n]of Object.entries(this.definition.prompts??{})){let r={name:`${this.publicId}_${t}`,...n.description?{description:n.description}:{},args:{input:{description:"JSON input",required:!0}},handler:async(o)=>{let a=n.input.parse(_te(o.input));return{messages:[{role:"user",content:{type:"text",text:n.render({input:a})}}]}}};e.registerPrompt(this.id,r)}}runtimeResource(e,t){return{uri:t.uri,name:e,...t.description?{description:t.description}:{},mimeType:t.mimeType??"text/plain",handler:async()=>({contents:[{uri:t.uri,mimeType:t.mimeType??"text/plain",text:await t.read()}]})}}runtimeTool(e){let t=pB(e)?e.name:`${this.publicId}_${e.name}`,n=TB({label:e.name,requestNoun:"the operation"});return{name:t,description:e.description,inputSchema:e.input.shape,outputSchema:e.output,visibility:e.permission??"admin",sideEffects:e.sideEffects??(e.confirmation?"writes":"none"),handler:async(r,o)=>{let a="invalid_input";try{if(o.signal?.aborted)throw new it("cancelled");let s=Ate(r);if(s!==void 0){let d=n.validateConfirmed(s,r);if(d)return d;let p={...i.record(i.string(),i.unknown()).parse(r)};delete p[TI],r=p}let l=e.input.safeParse(r);if(!l.success)throw new it("invalid_input",{cause:l.error,publicMessage:xu(l.error,{maxLength:wu})});let c=l.data;if(s===void 0&&e.confirmation)return{needsConfirmation:!0,toolName:t,summary:typeof e.confirmation==="function"?e.confirmation(c):e.confirmation,args:n.buildArgs((d)=>({...i.record(i.string(),i.unknown()).parse(c),[TI]:d}))};a="handler_failed";let u=await this.toolContext.run(o,()=>this.calls.run(this.toolCall(o),()=>Promise.resolve(e.execute({input:c,signal:o.signal??new AbortController().signal}))));return a="invalid_response",{success:!0,data:e.output.parse(u)}}catch(s){let l=Ki(s,o.signal?.aborted?"cancelled":a).toJSON();return this.logger.debug("Declared tool failed",{tool:t,code:l.code,error:he(s)}),{success:!1,error:l.message,code:l.code}}}}}}function IB(e){return Object.freeze({listEntities:(t)=>e.listEntities(t),getEntity:(t)=>e.getEntity(t),countEntities:(t)=>e.countEntities(t),nearestToEntity:(t)=>e.nearestToEntity(t),projectSemanticSpace:(t)=>e.projectSemanticSpace(t)})}function Ote(e,t){return{id:e,name:t.name,description:t.description,fetch:async(n,r,o)=>r.parse(await t.fetch(n,{corpus:IB(o.entityService),publishedOnly:o.publishedOnly===!0}))}}var xB=new WeakMap;function Mte(e){let t=xB.get(e);if(t)return t;let n=new Map;return xB.set(e,n),n}function jte(e){let{entityService:t}=e;return Object.freeze({getEntityTypes:()=>t.getEntityTypes(),getEntityCounts:(n)=>t.getEntityCounts(n),listEntities:(n)=>t.listEntities(n),getEntity:(n)=>t.getEntity(n),search:(n)=>t.search(n)})}function Dte(e){return Object.freeze({types:()=>e.entityService.getEntityTypes(),frontmatterSchema:(t)=>e.entities.getEffectiveFrontmatterSchema(t),isSingleton:(t)=>e.entities.getAdapter(t)?.isSingleton===!0,bodyTemplate:(t)=>e.entities.getAdapter(t)?.getBodyTemplate()??""})}function EB(e,t,n,r,o=[]){return new CB(e,t,n,r,o)}function em(e,t,n){let r=Object.keys(t).find((a)=>!e.header.has(a));if(r!==void 0)throw Error(`${e.label} "${t.id}" declares "${r}" in its header; behavior is ${e.helper}'s second argument`);let o=Object.keys(n??{}).find((a)=>!e.behavior.has(a));if(o!==void 0)throw Error(`${e.label} "${t.id}" declares "${o}", which is not a behavior slot`)}function RB(e,t=[]){let n=e.entities;oy(e.id,new Set(n),t);let r=ga({family:"service",id:e.id,config:e.config,instantiate:({config:o,package:a,scope:s,pluginId:l,dependencies:c})=>[...ry(n,[],a,l===void 0?s:Nte(e.id,n,l),t),EB(e,o,a,l??s(e.id),c??[])]});return kB.set(r,(o)=>RB(e,o)),r}var kB=new WeakMap;function zte(e,t){let n=kB.get(e);if(!n)throw Error(`Service definition "${e.id}" was not created by defineServicePlugin`);return n(Object.freeze([...t]))}function Nte(e,t,n){let[r,...o]=t;if(o.length>0)throw Error(`Service "${e}" keeps a legacy plugin id only when it owns at most one entity type`);if(r?.type===n)throw Error(`Service "${e}" cannot keep legacy plugin id "${n}", which its entity type is installed under`);return(a)=>(Jt(a,"Local plugin id"),r===void 0||a===r.type?a:`${r.type}:${a}`)}var $te={label:"Service",helper:"defineServicePlugin",header:new Set(["id","config","entities","setup","accountSettings"]),behavior:new Set(["instructions","resources","prompts","templates","jobs","tools","subscriptions","routes","dashboardWidgets","studioWorkspaces"])};function Bte(e,t){let n=t.map(({type:o})=>o),r=n.find((o,a)=>n.indexOf(o)!==a);if(r!==void 0)throw Error(`Service "${e}" declares entity type "${r}" more than once`);if(n.includes(e))throw Error(`Service "${e}" declares an entity type of the same name; give one of them a distinct id`)}function Lte(e,t){return em($te,e,t),Bte(e.id,e.entities??[]),RB({...t,...e,entities:Object.freeze(e.entities===void 0?[]:[...e.entities]),accountSettings:e.accountSettings})}import{AsyncLocalStorage as dke}from"async_hooks";var AB=30000,_B=1e4;function PB(e,t,n){let r,o=new Promise((a,s)=>{r=setTimeout(()=>s(Error(n)),t)});return Promise.race([e,o]).finally(()=>clearTimeout(r))}function hy(e,t,n){let r=!1,o=0,a,s,l=Promise.resolve(),c=new Map,u=()=>{let g=l.catch(()=>{return}).then(()=>d());return l=g.then(()=>{a=void 0},(h)=>{a="Account task reconciliation failed"}),g},d=async()=>{if(!r)return;let g=o,h=await n.listConfigured(t);if(g!==o)return;let w=new Map(h.map((v)=>[v.id,v.revision]));for(let[v,b]of c)if(w.get(v)!==b.revision)await f(v,b);if(g!==o)return;for(let v of h)if(!c.has(v.id))p(v)},p=(g)=>{let h=new AbortController,w,v,b=new Promise((C,S)=>{w=C,v=S}),x={controller:h,revision:g.revision,status:"starting",message:"Connecting",run:Promise.resolve()},T=Promise.resolve().then(()=>e.run({account:Object.freeze({id:g.id,settings:g.settings}),signal:h.signal,health:{ready(){x.status="ready",x.message="Ready",w?.()},warning(C){x.status="warning",x.message=C}}})).then(()=>{if(!h.signal.aborted)throw Error(`Account-bound daemon "${e.id}" stopped before it was aborted`)}).catch((C)=>{if(h.signal.aborted)return;let S=C instanceof Error?C:Error(he(C));x.status="error",x.message="Account task failed",v?.(S)});x.run=T,c.set(g.id,x),PB(b,AB,`Account-bound daemon "${e.id}" did not report readiness within ${AB}ms`).catch(()=>{if(h.signal.aborted)return;x.status="error",x.message="Account task did not become ready",h.abort()})},f=async(g,h)=>{if(c.get(g)!==h)return;c.delete(g),h.controller.abort(),await PB(h.run,_B,`Account-bound daemon "${e.id}" task did not stop within ${_B}ms`).catch(()=>{return})};return{async start(){if(r)return;r=!0,o++,s=n.subscribe(t,()=>{u()}),await u()},async stop(){if(!r&&c.size===0)return;r=!1,o++,s?.(),s=void 0,await l.catch(()=>{return});let g=[...c.entries()];await Promise.all(g.map(([h,w])=>f(h,w)))},healthCheck(){let g={total:c.size,ready:0,warning:0,error:0};for(let w of c.values())if(w.status==="ready")g.ready++;else if(w.status==="warning")g.warning++;else if(w.status==="error")g.error++;let h=a||g.error>0?"error":g.warning>0?"warning":"healthy";return Promise.resolve({status:h,message:a??(g.total===0?"No configured accounts":`${g.ready} of ${g.total} account task(s) ready`),lastCheck:new Date,details:g})}}}function tm(e){let t,n,r={status:"unknown",message:"Waiting for readiness",lastCheck:new Date};return{async start(){if(t)return;t=new AbortController;let o=t,a,s,l=new Promise((d,p)=>{a=d,s=p});n=Promise.resolve().then(()=>e.run({signal:o.signal,health:{ready(){r={status:"healthy",message:"Ready",lastCheck:new Date},a?.()},warning(d){r={status:"warning",message:d,lastCheck:new Date}}}})).then(()=>{if(!o.signal.aborted)throw Error(`Daemon "${e.id}" stopped before it was aborted`)}).catch((d)=>{let p=d instanceof Error?d:Error(String(d));throw r={status:"error",message:p.message,lastCheck:new Date},s?.(p),p}),n.catch(()=>{return});let c,u=new Promise((d,p)=>{c=setTimeout(()=>{let f=Error(`Daemon "${e.id}" did not report readiness within 30000ms`);r={status:"error",message:f.message,lastCheck:new Date},o.abort(),p(f)},30000)});try{await Promise.race([l,u])}finally{clearTimeout(c)}},async stop(){let o=t,a=n;t=void 0,n=void 0,o?.abort();let s,l=a?await Promise.race([a.then(()=>!0,()=>!0),new Promise((c)=>{s=setTimeout(()=>c(!1),1e4)})]):!0;if(clearTimeout(s),!l)r={status:"error",message:`Daemon "${e.id}" did not stop within 10000ms`,lastCheck:new Date};if(r.status!=="error")r={status:"unknown",message:"Stopped",lastCheck:new Date}},healthCheck(){return Promise.resolve({...r,lastCheck:new Date})}}}function OB(e){return jB(e)}function MB(e){if(!e)return;return{...e.userPermissionLevel&&{userPermissionLevel:e.userPermissionLevel},...e.isAnchor!==void 0&&{isAnchor:e.isAnchor},...e.interfaceType&&{interfaceType:e.interfaceType},...e.channelId&&{channelId:e.channelId},...e.channelName&&{channelName:e.channelName},...e.actor&&{actor:e.actor},...e.source&&{source:e.source},...e.attachments&&{attachments:e.attachments},...e.guestExecution&&{guestExecution:e.guestExecution},...e.guestScreening&&{guestScreening:e.guestScreening}}}function DB(e){return{get guestReady(){return e.guestReady===!0},chat:async(t,n,r,o)=>{let a=MB(r),s=o?await e.chat(t,n,a,o):await e.chat(t,n,a);return OB(s)},confirmPendingAction:async(t,n,r,o,a)=>{let s=MB(o);if(!s)throw Error("Confirmation requires caller context.");let l=a?await e.confirmPendingAction(t,n,r,s,a):await e.confirmPendingAction(t,n,r,s);return OB(l)},invalidate:()=>{e.invalidateAgent()}}}function yy(e,t,n){let r=ql(e,t,n),o=e.getMCPService(),a=e.getPermissionService(),s=DB(e.getAgentService());return{...r,mcpTransport:o,agent:s,permissions:{...r.permissions,getUserLevel:(l,c,u)=>a.determineUserLevel(l,c,u),isAnchor:(l,c)=>a.isAnchor(l,c)},daemons:{register:(l,c)=>{let u=`${t}:${l}`;e.registerDaemon(u,c,t),r.logger.debug(`Registered daemon: ${u}`)}},conversations:{...r.conversations,start:async(l)=>e.getConversationService().startConversation(l),addMessage:async(l)=>{await e.getConversationService().addMessage(l)},updateMetadata:async(l)=>e.getConversationService().updateConversationMetadata(l),delete:async(l)=>e.getConversationService().deleteConversation(l)},tools:{listForPermissionLevel:(l)=>e.listToolsForPermissionLevel(l)},webRoutes:{getRoutes:()=>e.getPluginWebRoutes(),findByRole:(l)=>ws(e.getPluginWebRoutes(),l)},plugins:{has:(l)=>e.hasPlugin(l)}}}function CI(e,t,n){return{...yy(e,t,n),channels:Gz(e,t)}}var qte=3600000;class Eu extends Pl{type="interface";daemon;jobTrackingEntries=new Map;jobTrackingTtlMs=qte;createContext(e,t){return yy(e,this.id,t)}async register(e,t){let n=this.createContext(e,t);if(this.context=n,this.initializeDaemon(),this.daemon)await this.registerDaemon(n);return this.setupMessageHandlers(n),await this.onRegister(n),this.getCapabilities()}async onRegister(e){}async registerDaemon(e){if(!this.daemon)return;e.daemons.register(this.id,this.daemon),e.logger.debug(`Registered daemon for interface: ${this.id}`)}createDaemon(){return}requiresDaemonStartup(){return!1}getWebRoutes(){return[]}initializeDaemon(){let e=this.createDaemon();if(e)this.daemon=e}async handleProgressEvent(e,t){}cleanupExpiredEntries(){let e=Date.now(),t=[];for(let[n,r]of this.jobTrackingEntries)if(e-r.createdAt>this.jobTrackingTtlMs)t.push(n);for(let n of t)this.jobTrackingEntries.delete(n)}ownsJob(e,t){return this.jobTrackingEntries.has(e)||t!==void 0&&this.jobTrackingEntries.has(t)}getJobTracking(e,t){let n=this.jobTrackingEntries.get(e);if(n)return n.info;if(t){let r=this.jobTrackingEntries.get(t);if(r)return r.info}return}setJobTracking(e,t){this.cleanupExpiredEntries(),this.jobTrackingEntries.set(e,{info:t,createdAt:Date.now()})}removeJobTracking(e){this.jobTrackingEntries.delete(e)}async createJobWithTracking(e,t){let r=await this.getContext().jobs.enqueue(e);return this.setJobTracking(r,t),r}async createBatchWithTracking(e,t,n){let o=await this.getContext().jobs.enqueueBatch(e,n);return this.setJobTracking(o,t),o}}var by=Object.freeze({daemons:Object.freeze([])}),zB=new WeakMap;function NB(e,t,n){zB.set(e,{declarations:t,rebuild:n})}function Ru(e,t,n){let r=zB.get(e);if(!r)throw Error(`${t} takes a definition defineInterface returned; "${e.id}" is not one`);let o=r.rebuild(n(r.declarations));if(!Fte(o,e.config))throw Error(`Interface "${e.id}" did not rebuild as itself`);return o}function Fte(e,t){return e.family==="interface"&&e.config===t}function vy(e){return{run:e}}function Ute(e,t){return Ru(e,"withDaemon",(n)=>({...n,daemons:[...n.daemons,vy(t)]}))}function Zte(e,t){return Ru(e,"withMessageTransport",(n)=>{if(n.transport)throw Error(`Interface "${e.id}" declares a message transport more than once`);return{...n,transport:vy(t)}})}function Wte(e,t){return Ru(e,"withChannels",(n)=>{if(n.channels)throw Error(`Interface "${e.id}" declares its channels more than once`);return{...n,channels:{run:t}}})}function Gte(e,t){return Ru(e,"withWebRoutes",(n)=>{if(n.webRoutes)throw Error(`Interface "${e.id}" declares its web routes more than once`);return{...n,webRoutes:vy(t)}})}function Jte(e,t){return Ru(e,"withTools",(n)=>{if(n.tools)throw Error(`Interface "${e.id}" declares its tools more than once`);return{...n,tools:vy(t)}})}function Vte(e,t,n){return Ru(e,"withProtocolPlugin",(r)=>{if(r.protocol)throw Error(`Interface "${e.id}" declares a protocol plugin more than once`);let a={definition:t,...{config:n}};return{...r,protocol:a}})}var $B=Symbol("rizom.first-party-interface-runtime"),BB=new WeakSet;function Hte(e){let{agent:t,conversations:n,permissions:r,messages:o}=e,a={get guestReady(){return t.guestReady},chat:(l,c,u,d)=>t.chat(l,c,u,d),confirmPendingAction:(l,c,u,d,p)=>t.confirmPendingAction(l,c,u,d,p)},s={logger:e.logger,agent:Object.freeze(a),conversations:Object.freeze({getMessages:(l,c)=>n.getMessages(l,c),get:(l)=>n.get(l),list:(l)=>n.list(l),start:(l)=>n.start(l),addMessage:(l)=>n.addMessage(l),updateMetadata:(l)=>n.updateMetadata(l),delete:(l)=>n.delete(l)}),sharedUploads:(l={})=>e.uploads.scoped({...Lo,...l.routePath?{routePath:l.routePath}:{}}),retireUploads:(l)=>e.uploads.retire(l),gather:(l,c)=>e.messaging.gather(l,c),spaces:Object.freeze([...e.spaces]),siteUrl:e.siteUrl,localSiteUrl:e.localSiteUrl,preferLocalUrls:e.preferLocalUrls,previewUrl:e.previewUrl,themeCSS:e.themeCSS,routeByRole:(l)=>e.routeByRole(l),operationalHealth(l,c){e.onRelease(e.operationalHealth.register(l,c))},inbox:Object.freeze({getSource:(l)=>e.inbox.getSource(l)}),jobs:Object.freeze({getStatus:(l)=>e.jobs.getStatus(l)}),studio:e.studio,permissions:Object.freeze({getUserLevel:(l,c,u)=>r.getUserLevel(l,c,u),isAnchor:(l,c)=>r.isAnchor(l,c)}),production:e.production,domain:e.domain,servesHttp:e.servesHttp,auth:()=>e.auth(),mcpTransport:e.mcpTransport,endpoint(l){e.endpoints.register(l)},interaction(l){e.interactions.register(l)},listen(l,c){e.onRelease(e.messaging.subscribe(l,async(u)=>(await c({payload:u}),{success:!0})))},answer(l,c){let u=l;e.onRelease(e.messaging.answer(u,async(d,{sender:p})=>c({request:d,sender:p})))},request:(l,c)=>e.messaging.request(l,c),classRuntimeState:Object.freeze({scoped:e.runtimeState.scoped.bind(e.runtimeState)}),ready(l){e.onReady(async()=>l())},identity:Object.freeze({get:()=>e.identity.get(),getProfile:()=>e.identity.getProfile(),getAppInfo:()=>e.identity.getAppInfo()}),profileKinds:Object.freeze({getResolved:()=>e.profileKinds.getResolved()}),publicSkills:Object.freeze({list:()=>e.publicSkills.list()}),tools:Object.freeze({listForPermissionLevel:(l)=>e.tools.listForPermissionLevel(l)}),entityReads:Object.freeze({hasEntityType:(l)=>e.entityReads.hasEntityType(l),listEntities:e.entityReads.listEntities.bind(e.entityReads),getEntity:e.entityReads.getEntity.bind(e.entityReads)}),get messages(){if(!o)throw Error(`Interface "${e.interfaceId}" has no message transport: interfaceRuntime(context).messages coordinates replies only for an interface declared withMessageTransport`);return o}};return Object.freeze(s)}function ku(e,t){return cy(e,$B,t)}function LB(e){let t=Hte(e);return BB.add(t),t}function Qte(e){return e!==void 0&&BB.has(e)}function Kte(e){let t=uy(e,$B);if(!Qte(t))throw Error("This context carries no interface runtime: interfaceRuntime() reaches internal capabilities of a setup or slot context the brain's runtime built, for first-party packages only");return t}function II(e,t){e.messaging.subscribe(zl,async(n)=>{try{return await t.onProgress(n,n.metadata),{success:!0}}catch(r){return t.onError(r),{success:!1}}})}function EI(e){let t=e.status==="completed"?"\u2705":"\u274C",n=e.status==="completed"?"completed":"failed",r=e.metadata.operationType.replace(/_/g," "),o=e.metadata.operationTarget?`: ${e.metadata.operationTarget}`:"",a=`${t} **${r}${o}** ${n}`;if(e.message)a+=`
183
+ `,"utf8"),await this.prune().catch((o)=>{this.logger?.warn("Failed to prune runtime uploads",{error:he(o)})}),n}async remove(e){this.assertValidUploadId(e),await DC(this.getUploadDir(e),{recursive:!0,force:!0})}async read(e){let t=await this.readRecord(e);try{let n=await yN(Bo(this.getUploadDir(e),"content"));return{record:t,content:n}}catch(n){if(yu(n))throw new xa("not_found","Upload not found");throw new xa("invalid_metadata","Upload content could not be read")}}async readRecord(e){this.assertValidUploadId(e);try{let t=await yN(Bo(this.getUploadDir(e),"metadata.json"),"utf8"),n=$7.safeParse(JSON.parse(t));if(!n.success||n.data.id!==e||n.data.ref.id!==e||n.data.ref.kind!==this.options.refKind)throw new xa("invalid_metadata","Invalid upload metadata");return n.data}catch(t){if(t instanceof xa)throw t;if(yu(t))throw new xa("not_found","Upload not found");throw new xa("invalid_metadata","Upload metadata could not be read")}}toResponseBody(e){return{...e,url:this.getUploadUrl(e.id),downloadUrl:this.getUploadUrl(e.id,!0)}}async prune(){let e=this.getUploadsRoot(),t;try{t=await D7(e)}catch(s){if(yu(s))return;throw s}let r=(await Promise.all(t.map(async(s)=>{try{let l=await vN(Bo(e,s));return l.isDirectory()?{entry:s,mtimeMs:l.mtimeMs}:null}catch(l){if(yu(l))return null;throw l}}))).filter((s)=>s!==null).sort((s,l)=>l.mtimeMs-s.mtimeMs),o=this.getNow().getTime()-this.retentionMs,a=r.filter((s,l)=>l>=this.maxCount||s.mtimeMs<o);await Promise.all(a.map((s)=>DC(Bo(e,s.entry),{recursive:!0,force:!0})))}getUploadDir(e){return this.assertValidUploadId(e),Bo(this.getUploadsRoot(),e)}getUploadsRoot(){return Bo(this.options.dataDir,this.options.namespace,"uploads")}getUploadUrl(e,t=!1){this.assertValidUploadId(e);let n=encodeURIComponent(e);return`${this.options.routePath}?id=${n}${t?"&download=1":""}`}assertValidUploadId(e){if(!Uh.test(e))throw new xa("invalid_ref","Invalid upload ref")}}import{AsyncLocalStorage as q7}from"async_hooks";function BC(e){if(typeof e!=="object"||e===null||!("entityId"in e))return;let t=e.entityId;return typeof t==="string"&&t.trim().length>0?t.trim():void 0}function TN(e){if(!Xe(e)||!("coverImage"in e))return;let t=e.coverImage;if(t===void 0||t===!1)return;if(t===!0)return{generate:!0};if(!Xe(t))return;if(t.generate===!1)return;let n=t.prompt,r=typeof n==="string"?n.trim():void 0;return{generate:!0,...r&&{prompt:r}}}function Wh(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function CN(e){let t={...e};return delete t.status,delete t.error,Wh(t)}class Gh extends zp{context;entityType;retries;constructor(e,t,n){super(e,{schema:n.schema,jobTypeName:n.jobTypeName});this.context=t,this.entityType=n.entityType,this.retries=n.retries}async enqueueFollowUp(e,t,n){if(!this.retries){await e();return}await this.retries.run(e,t,n)}async afterCreate(e,t,n,r){}async onGenerationFailure(e,t){}validateAndParse(e){let t=super.validateAndParse(e);if(!t)return null;let n=TN(e);if(typeof t!=="object")return t;let r=BC(e);if(!n&&!r)return t;return Object.assign(t,{...n&&{coverImage:n},...r&&{entityId:r}}),t}async process(e,t,n){try{await this.reportProgress(n,{progress:Zh.START,message:`Starting ${this.jobTypeName}`});let r=await this.generate(e,n),o=BC(e),a=o?this.applyPreallocatedEntityId(o,r):r;await this.reportProgress(n,{progress:Zh.SAVE,message:`Saving ${this.entityType} to database`});let s=o?await this.updatePreallocatedStub(o,a):await this.context.entityService.createEntity({entity:{id:a.id,entityType:this.entityType,content:a.content,metadata:a.metadata,...a.visibility&&{visibility:a.visibility}},options:a.createOptions});return await this.afterCreate(e,s.entityId,n,a),await this.enqueueGenericCoverImageIfRequested(e,s.entityId,n,a),await this.reportProgress(n,{progress:Zh.COMPLETE,message:`${a.title??this.entityType} created successfully`}),this.toResult({success:!0,entityId:s.entityId,...a.resultExtras})}catch(r){if(r instanceof LC)return await this.markPreallocatedStubFailed(e,r.message),await this.onGenerationFailure(e,r.message),this.toResult({success:!1,error:r.message});let o=he(r);return this.logger.error(`${this.jobTypeName} job failed`,{error:r,jobId:t,data:this.summarizeDataForLog(e)}),await this.markPreallocatedStubFailed(e,o),await this.onGenerationFailure(e,o),this.toResult(IN.failure(r))}}toResult(e){return e}applyPreallocatedEntityId(e,t){let n={...t.metadata},r=t.content,o=t.resultExtras;if(typeof n.slug==="string")n.slug=e,r=Cl(r,"slug",e),o={...o,slug:e};return{...t,id:e,content:r,metadata:n,...o&&{resultExtras:o}}}async updatePreallocatedStub(e,t){let n=await this.context.entityService.getEntity({entityType:this.entityType,id:e,visibilityScope:zt("pre-allocated generation stub update")});if(!n)throw Error(`Pre-allocated entity stub not found: ${this.entityType}/${e}`);let r=this.mergeStubWithGenerated(n,t);return this.context.entityService.updateEntity({entity:{...n,id:e,entityType:this.entityType,content:r.content,metadata:r.metadata,...t.visibility&&{visibility:t.visibility}}})}mergeStubWithGenerated(e,t){let n=CN(ms(e.content).frontmatter),r=CN(e.metadata),o=Wh(t.metadata),a=ms(t.content),s=Wh(a.frontmatter),l=Wh({...n,...o,...s});return this.context.entities.getEffectiveFrontmatterSchema(this.entityType)?.parse(l),{content:Yr(l,a.content),metadata:{...r,...o}}}async onTerminalError(e,t){await this.markPreallocatedStubFailed(t,e.message,{onlyWhileGenerating:!0})}async markPreallocatedStubFailed(e,t,n={}){let r=BC(e);if(!r)return;try{let o=await this.context.entityService.getEntity({entityType:this.entityType,id:r,visibilityScope:zt("mark generation stub failed")});if(!o)return;if(n.onlyWhileGenerating&&o.metadata.status!=="generating")return;await this.context.entityService.updateEntity({entity:{...o,content:Cl(Cl(o.content,"status","failed"),"error",t),metadata:{...o.metadata,status:"failed",error:t}}})}catch(o){this.logger.warn("Failed to mark generation stub as failed",{error:o,entityId:r,entityType:this.entityType})}}async enqueueGenericCoverImageIfRequested(e,t,n,r){let o=TN(e);if(!o)return;await this.reportProgress(n,{progress:90,message:"Queueing cover image generation"});let a=r.title??t;await this.enqueueFollowUp(()=>this.context.jobs.enqueue(EN,{prompt:o.prompt??`Editorial cover image for: ${a}. `,title:`${a} Cover`,aspectRatio:"16:9",targetEntityType:this.entityType,targetEntityId:t,entityTitle:a,entityContent:r.content},{toolContext:{interfaceType:"job",actor:{kind:"service",serviceId:"generation-job-handler"}}}),`queue the cover image for ${this.entityType}:${t}`,`cover-image:${this.entityType}:${t}`)}failEarly(e){throw new LC(e)}}class LC extends Error{constructor(e){super(e);this.name="GenerationFailure"}}async function qC(e,t={}){let n=t.pollMs??100,r=Date.now()+(t.timeoutMs??60000),o=async()=>{if((await e.getActiveJobs([fi.embedding])).length===0)return;if(Date.now()>=r)throw Error("Embeddings did not drain before the deadline");return await new Promise((s)=>setTimeout(s,n)),o()};return o()}async function Jh(e,t,n,r){if(r.asPackage===!0)return;let o=await r.access();if(e===void 0||e==="never"||vi.hasPermission(o.permissionLevel,e))return;let a=`Writing ${t} (${n}) requires ${e} permission; the caller has ${o.permissionLevel}`;throw new it("permission_denied",{message:a,publicMessage:a})}function RN(e,t){let n=e.metadata.safeParse(t);if(!n.success)throw new it("invalid_input",{message:`Invalid ${e.type} metadata: ${n.error.message}`,cause:n.error});return n.data}function FC(e,t){return new it("conflict",{message:`The ${e} "${t}" changed after it was read`,publicMessage:"The record changed after it was read; read it again"})}function Vh(e){let{entityService:t}=e;async function n(o,a,s){let l=await s.access();if(a.entityType!==o.type)throw new it("permission_denied",{message:`A ${o.type} write cannot change a ${a.entityType}`});let c=await t.getEntityRaw({entityType:o.type,id:a.id,visibilityScope:e.readScope(s,o.type,l)});if(!c)throw new it("not_found",{message:`No ${o.type} "${a.id}" is visible to the caller`});if(c.contentHash!==a.contentHash)throw FC(o.type,a.id);return c}return{create:async(o,a)=>{let s=e.owned(o),l=e.currentCall();await e.assertWriteAllowed(s.type,"create",l),await e.assertCreateVisibility?.(s.type,a.visibility??"public",l);let c=RN(s,a.metadata);if(a.id!==void 0){if(await t.getEntity({entityType:s.type,id:a.id,visibilityScope:zt("an owned create checks whether its id is taken; no content returned")}))throw new it("conflict",{message:`A ${s.type} "${a.id}" already exists`})}return{id:(await t.createEntity({entity:{...qe({id:a.id,visibility:a.visibility}),entityType:s.type,content:a.content,metadata:c},options:{...a.id!==void 0&&{conditionalWrite:{expectedRevision:null}},eventContext:l.eventContext}})).entityId}},update:async(o,a,s)=>{let l=e.owned(o),c=e.currentCall();await e.assertWriteAllowed(l.type,"update",c);let u=await n(l,a,c);if((await t.updateEntity({entity:{...u,content:s.content??u.content,metadata:RN(l,s.metadata??a.metadata)},options:{expectedContentHash:a.contentHash,eventContext:c.eventContext}})).skipReason==="content-conflict")throw FC(l.type,a.id)},delete:async(o,a)=>{let s=e.owned(o),l=e.currentCall();if(await e.assertWriteAllowed(s.type,"delete",l),await n(s,a,l),!await t.deleteEntity({entityType:s.type,id:a.id,options:{expectedContentHash:a.contentHash,eventContext:l.eventContext}}))throw FC(s.type,a.id)}}}function Wp(e,t,n){return Object.freeze({async generate(r,o){let a=t(r.template),s=r.voice?await _N(e.entityService):"",l=await e.ai.generate({prompt:r.prompt,templateName:a,...r.data&&{data:{...r.data}},...qe({representedIdentity:r.representedIdentity}),...s&&{styleGuide:{voice:s}}},i.unknown(),n);return wi(o,l)}})}function ON(e,t){let n=new Map,r=(o,a)=>`${o}\x00${a}`;return Object.freeze({async seed(o){await e.entityService.createEntity({entity:{id:o.id,entityType:o.entityType,content:o.content,visibility:ui.parse(o.visibility??"public"),metadata:{...o.metadata}}}),n.set(r(o.entityType,o.id),{entityType:o.entityType,id:o.id})},async reset(o){let a=ui.parse(o?.visibilityScope??"public"),s=await e.entityService.listEntities({entityType:t,options:{filter:{visibilityScope:a}}}),l=new Map([...s.map((c)=>[r(c.entityType,c.id),{entityType:c.entityType,id:c.id}]),...n]);await Promise.all([...l.values()].map((c)=>e.entityService.deleteEntity(c))),n.clear()},settleEmbeddings:()=>qC(e.jobs)})}async function Qh(e,t,n){let r=await t.access(),o=(a)=>t.asPackage===!0&&n(a);return Object.freeze({entities:pu(e.entityService,()=>t,n),scope:(a)=>vs(t,n(a),r),refusal:(a,s)=>{if(o(a))return;try{e.permissions.assertEntityActionAllowed(a,s,{userPermissionLevel:r.permissionLevel});return}catch(l){return he(l)}},visibilityRefusal:(a,s)=>o(a)||Ja(r.permissionLevel,s)?void 0:`A ${r.permissionLevel} requester cannot write a ${s} ${a}`})}var MN=i.object({entityType:i.string().min(1),ids:i.array(i.string().min(1)).min(1)});function Gp(e){let{sourceEntityType:t,sourceEntityId:n,sourceEntityIds:r}=e;if(typeof t!=="string"||t==="")return;let o=[...typeof n==="string"?[n]:[],...Array.isArray(r)?r.filter((s)=>typeof s==="string"):[]].filter((s)=>s!==""),a=[...new Set(o)];return a.length>0?{entityType:t,ids:a}:void 0}function kN(e,t){return e===void 0||Pc(e,t)?t:e}function UC(e,t,n,r,o){let s=Object.freeze({publish:(c,u)=>e.messaging.broadcast(c,u)}),l=Object.freeze({report:(c)=>n.report({progress:c.progress,...qe({total:c.total,message:c.message})})});return Object.freeze({input:t,entities:o,messaging:s,progress:l,signal:r})}function ZC(e,t,n,r,o){let{declaring:a}=o;return Vh({entityService:e.entityService,owned:(s)=>{if(s.type!==a.type)throw new it("permission_denied",{message:`A ${a.type} job may only write ${a.type} records, and "${s.type}" is not its type`});return a},currentCall:()=>t,assertWriteAllowed:(s,l,c)=>Jh(o.requiredLevel(s,l),s,l,c),readScope:(s,l,c)=>vs(s,r(l),c),assertCreateVisibility:async(s,l)=>{let c=n.visibilityRefusal(s,l);if(c)throw new it("permission_denied",{message:c,publicMessage:c})}})}async function jN(e,t,n,r){let o={...va(e.jobAuthority),eventContext:{actor:{kind:"service",serviceId:t}}},a=await Qh(e,o,n);return Object.freeze({...a.entities,...ZC(e,o,a,n,r)})}function DN(e,t,n,r,o){let a=Mp(e.input);return{validateAndParse(s){let l=a.safeParse(s);return l.success?l.data:null},async process(s,l,c,u){let d=await jp(t.jobAuthority,s),p=await Qh(t,d,n),f=UC(t,wi(e.input,s.input),c,u,p.entities);return e.handle(_l({...f,entities:Object.freeze({...p.entities,...ZC(t,d,p,n,r)})},o(p)))}}}function zN(e,t,n,r,o,a){return{validateAndParse(s){let l=e.input.safeParse(s);return l.success?l.data:null},async process(s,l,c,u){let d={...va(t.jobAuthority),eventContext:{actor:{kind:"service",serviceId:o}}},p=await Qh(t,d,n),f=t.uploads.scoped(Lo),g=UC(t,s,c,u,p.entities);return e.handle(_l({...g,entities:Object.freeze({...p.entities,...ZC(t,d,p,n,r)})},{where:"a contract job",reader:p.entities,packageReader:p.entities,ownsType:n,searchWithDistances:(h)=>t.entityService.searchWithDistances(h),generateObject:(h,w)=>t.ai.generateObject(h,w),generate:Wp(t,a,u).generate,anyEntities:{service:t.entityService,scope:()=>"public"},job:{logger:t.logger,images:Object.freeze({canGenerate:()=>t.ai.canGenerateImages(),generate:async(h,w)=>{let{dataUrl:v}=await t.ai.generateImage(h,qe({aspectRatio:w?.aspectRatio}));return{dataUrl:v}}}),attachments:Object.freeze({resolve:(h)=>t.attachments.resolve({...h})}),uploads:Object.freeze({read:(h)=>f.read(h),readRecord:(h)=>f.readRecord(h)}),linkInto:async(h,w)=>{let v=await NN(t,w,p);if(v)throw Error(v);await BN(t,h,w,p)}}}))}}}async function F7(e,t,n){return n.refusal(t.entityType,"update")??await NN(e,t,n)}async function NN(e,t,n){let r=await e.entityService.getEntity({entityType:t.entityType,id:t.entityId,visibilityScope:n.scope(t.entityType)});if(!r)return`Target entity not found: ${t.entityType}/${t.entityId}`;if("field"in t&&t.field==="coverImageId"&&e.entities.getAdapter(t.entityType)?.supportsCoverImage!==!0)return`Entity type '${t.entityType}' doesn't support cover images`;if(e.entities.getAdapter(t.entityType)?.metadataFromFrontmatter!==!0)return;let o=e.entities.getEffectiveFrontmatterSchema(t.entityType);if(!o)return;let a="field"in t?t.field:t.list,s={...r.metadata,[a]:"field"in t?"linked-entity":$N(r.metadata[t.list],t,"linked-entity")},l;try{l=o.parse(s)}catch{return`Entity type '${t.entityType}' field '${a}' cannot hold a link`}return typeof l==="object"&&l!==null&&Object.hasOwn(l,a)?void 0:`Entity type '${t.entityType}' declares no metadata field '${a}' to link into`}function $N(e,t,n){let r=new Set(t.replaces??[]),o=(Array.isArray(e)?e:[]).flatMap((a)=>typeof a==="object"&&a!==null&&("id"in a)&&typeof a.id==="string"&&!r.has(a.id)?[{id:a.id}]:[]);return o.some(({id:a})=>a===n)?o:[...o,{id:n}]}async function BN(e,t,n,r){let o=await e.entityService.getEntityRaw({entityType:n.entityType,id:n.entityId,visibilityScope:r.scope(n.entityType)});if(!o)throw Error(`Cannot link ${t} into ${n.entityType}/${n.entityId}, which does not exist`);let a=e.entities.getAdapter(n.entityType)?.metadataFromFrontmatter===!0,s=a?o.metadata:ms(o.content).frontmatter,[l,c]="field"in n?[n.field,t]:[n.list,$N(s[n.list],n,t)];await e.entityService.updateEntity({entity:{...o,content:a?o.content:Cl(o.content,l,c),metadata:a||Object.hasOwn(o.metadata,l)?{...o.metadata,[l]:c}:o.metadata}})}function U7(e){if(typeof e!=="object"||e===null||!("entityId"in e))return;let t=e.entityId;return typeof t==="string"&&t.trim().length>0?t.trim():void 0}function Z7(e){return"linkInto"in e}var AN=Mp(i.unknown()).extend({entityId:i.string().optional(),source:MN.optional()}),LN=i.object({legacyRawData:i.literal(!0),input:i.unknown(),entityId:i.string().optional(),source:MN.optional()});function W7(e){let t=LN.safeParse(e);if(t.success)return t.data;if(!Xe(e)||"authority"in e)return null;let{entityId:n,...r}=e;return{legacyRawData:!0,input:r,...typeof n==="string"&&{entityId:n},...qe({source:Gp(e)})}}class WC extends Gh{runs=new q7;declaration;target;constructor(e,t,n,r){super(e,t,{schema:n.input,jobTypeName:r.jobTypeName,entityType:r.entityType,retries:r.retries});this.declaration=n,this.target=r}validateAndParse(e){let t=AN.safeParse(e),n=t.success?t.data:this.target.readsLegacyRawData===!0?W7(e):null;if(!n)return null;let r=super.validateAndParse(n.input);if(r===null)return null;return{...n,...qe({coverImage:Xe(r)?r.coverImage:void 0})}}async process(e,t,n,r){let o=AN.safeParse(e),a=o.success?o.data:LN.parse(e),s="legacyRawData"in a?{...va(this.context.jobAuthority),eventContext:{actor:{kind:"service",serviceId:this.target.pluginId}}}:await jp(this.context.jobAuthority,a),l={signal:r??new AbortController().signal,input:a.input,authority:await Qh(this.context,s,this.target.ownsType),source:a.source};return this.runs.run(l,()=>super.process(e,t,n))}async generate(e,t){let{signal:n,input:r,authority:o,source:a}=this.currentRun(),s=U7(e),l=o.refusal(this.entityType,"create");if(l)this.failEarly(l);let c=s===void 0?void 0:await this.context.entityService.getEntity({entityType:this.entityType,id:s,visibilityScope:o.scope(this.entityType)});if(s!==void 0&&!c)this.failEarly(`Pre-allocated entity stub not found: ${this.entityType}/${s}`);let u={...UC(this.context,wi(this.declaration.input,r),t,n,o.entities),entityId:s,ai:this.generationAI(n)},d=await this.declaration.generate(_l(u,this.target.runtime(o)));if(!d.success)this.failEarly(d.error);let p=await this.sourceVisibility(a),f=d.visibility??(p&&kN(c?.visibility,p)),g=f&&o.visibilityRefusal(this.entityType,f);if(g)this.failEarly(g);let h=d.linkInto;if(h){let b=await F7(this.context,h,o);if(b)this.failEarly(b)}let w={...d.metadata},v=typeof w.title==="string"?w.title:void 0;return{id:s??d.id??fa(v??this.entityType),content:d.content,metadata:w,...qe({title:v,resultExtras:d.resultExtras&&{...d.resultExtras}}),...h&&{linkInto:h},...f&&{visibility:f},...s===void 0&&oD(d)&&{createOptions:{deduplicateId:!0}}}}async afterCreate(e,t,n,r){if(Z7(r))await BN(this.context,t,r.linkInto,this.currentRun().authority);if(await this.runStep({written:{entityId:t,...qe({title:r.title})}}),this.target.reportsToPipeline)await this.context.messaging.command(PN,{entityType:this.entityType,entityId:t})}async onGenerationFailure(e,t){if(await this.runStep({failed:t}),this.target.reportsToPipeline)await this.context.messaging.command(Hh,{entityType:this.entityType,error:t})}async runStep(e){let t=ID(this.declaration),n=this.target.retries;if(!t||!n)return;let r=this.declaration.input.safeParse(this.runs.getStore()?.input);await t({input:r.success?r.data:void 0,outcome:e,messaging:this.context.messaging,jobs:this.context.jobs,retries:n})}generationAI(e){return Wp(this.context,this.target.template,e)}async sourceVisibility(e){if(!e)return;return(await Promise.all(e.ids.map((n)=>this.context.entityService.getEntity({entityType:e.entityType,id:n,visibilityScope:zt("a generation is no more visible than its source; only the visibility is read")})))).reduce((n,r)=>r?kN(n,r.visibility):n,void 0)}currentRun(){let e=this.runs.getStore();if(!e)throw Error(`${this.jobTypeName} ran outside its job`);return e}}async function GC({entityService:e,entity:t,options:n}){let r=await e.getEntity({entityType:t.entityType,id:t.id,visibilityScope:zt("pending entity identity check")});if(r)return{entityId:r.id,created:!1,existingEntity:r};let o=await e.createEntity({entity:t,...n?{options:n}:{}});return{entityId:o.entityId,created:!0,mutation:o}}var Jp=new WeakMap;function qN(e,t){let n=Jp.get(e);if(n&&n!==t)throw Error(`Job "${e.name}" is registered as both "${n}" and "${t}"`);Jp.set(e,t)}function FN(e,t){if(Jp.get(e)===t)Jp.delete(e)}function Vp(e){let t=Jp.get(e);if(!t)throw Error(`Job "${e.name}" is not registered by an active declarative service`);return t}function JC(e){if(!e.lastError)return;let t=cg.safeParse(e.lastErrorPublic).data??new it("handler_failed").toJSON();return{code:t.code,error:t.message}}function VC(e,t){return t.status==="completed"&&t.result!==void 0?wi(e,t.result):void 0}function HC(e,t){let n=VC(e.output,t);return{id:t.id,status:t.status,progress:t.progress,...n!==void 0?{result:n}:{},...JC(t)}}function ZN(e,t){return Object.freeze({async get(n,r){t.throwIfAborted();let o=await e.get(n,r);return t.throwIfAborted(),o},async list(n,r){t.throwIfAborted();let o=await e.list(n,r);return t.throwIfAborted(),o},async count(n){t.throwIfAborted();let r=await e.count(n);return t.throwIfAborted(),r}})}function WN(e,t){let n=async(o)=>{t.throwIfAborted();let a=await o();return t.throwIfAborted(),a},r={create:(o,a)=>n(()=>e.create(o,a)),update:(o,a,s)=>n(()=>e.update(o,a,s)),delete:(o,a)=>n(()=>e.delete(o,a))};return Object.freeze({...ZN(e,t),...r})}function QC(){let e=async()=>{throw new it("permission_denied",{message:"This operator surface keeps no account settings"})};return Object.freeze({read:e,save:e,claim:e,redeem:e})}function GN(){let e=async()=>{throw new it("permission_denied",{message:"This operator surface owns no entity types to write"})};return Object.freeze({create:e,update:e,delete:e})}function G7(e,t){let n={...t};for(let r in n)if(e.fields[r]?.secret===!0)delete n[r];return Object.freeze(n)}function UN(e,t){let n=VC(e.output,t);return Object.freeze({id:t.id,status:t.status,...n!==void 0?{result:n}:{},...JC(t)})}function J7(e,t){return e?{actor:{kind:"user",userId:e.actor.id},permissionLevel:e.permission}:Ml(t)}function V7(e,t){return{async enqueue(n,r){let o=Vp(n);n.input.parse(r);let a=await e.jobAuthority.admit(J7(t,e.pluginId)),s=await e.jobs.enqueue({type:o,data:{authority:a,input:r},options:{source:e.pluginId,metadata:{operationType:"data_processing",pluginId:e.pluginId}}});return Object.freeze({id:s,status:async()=>{let l=await e.jobs.getStatus(s);return l?.type===o?UN(n,l):null}})},async status(n,r){let o=Vp(n),a=await e.jobs.getStatus(r);return a?.type===o?UN(n,a):null}}}function KC(e){return Tr(e?.permission??"public")}async function Kh(e){let{caller:t,signal:n}=e.provider;n.throwIfAborted();let r=t?.permission??"public",o=t&&e.accountSettingsRegistration?await e.context.accountSettings.getForActor(e.accountSettingsRegistration,t.actor.id):null,a=o&&e.accountSettingsRegistration?G7(e.accountSettingsRegistration.definition,o):null;return{config:e.config,state:e.state,caller:t,settings:a,accountSettings:e.accountSettings??QC(),entities:ZN(e.entities??Ur(e.context.entityService,KC(t)),n),jobs:V7(e.context,t),permissions:{allows(s,l){try{return e.context.permissions.assertEntityActionAllowed(s.type,l,{userPermissionLevel:r}),!0}catch{return!1}}},signal:n}}function Hp(e){return e.issues.map((t)=>({path:t.path,message:t.message}))}function xi(e){return typeof e==="object"&&e!==null&&!Array.isArray(e)}function Xh(e,t,n,r,o=!1){if(!xi(e))return;if(e.detail!==void 0&&!o){r.push({path:t,message:"A detail link is available only on rows of a detail block's master collection"});return}if(e.kind==="external"||e.kind==="entity"||e.kind==="launch"||e.kind==="detail"){r.push({path:t,message:"Author links must use a typed external, entity, catalog, or launch target rather than a normalized host target"});return}let a=e.launch;if(n==="dashboard"&&xi(a)&&(a.target==="inbox-open-entity"||a.target==="inbox-capture-note"||a.target==="inbox-discuss-in-chat"))r.push({path:[...t,"launch","target"],message:`Launch intent "${a.target}" is available only in Studio workspaces`})}function JN(e,t,n,r,o=!1){if(!Array.isArray(e))return;for(let[a,s]of e.entries()){if(!xi(s))continue;Xh(s.target,[...t,a,"target"],n,r,o)}}function Yh(e,t,n,r,o=!1){if(!Array.isArray(e))return;for(let[a,s]of e.entries()){if(!xi(s))continue;Xh(s.link,[...t,a,"link"],n,r,o),JN(s.links,[...t,a,"links"],n,r,o)}}function bu(e,t,n,r){if(!Array.isArray(e))return;for(let[o,a]of e.entries()){if(!xi(a))continue;let s=[...t,o];switch(a.type){case"links":JN(a.items,[...s,"items"],n,r);break;case"list":Yh(a.items,[...s,"items"],n,r);break;case"table":{let l=a.rows;if(Array.isArray(l))for(let[c,u]of l.entries()){if(!xi(u))continue;Xh(u.link,[...s,"rows",c,"link"],n,r)}break}case"matrix":{let l=a.cells;if(Array.isArray(l))for(let[c,u]of l.entries()){if(!xi(u))continue;Yh(u.items,[...s,"cells",c,"items"],n,r)}break}case"tabs":{let l=a.tabs;if(Array.isArray(l))for(let[c,u]of l.entries()){if(!xi(u))continue;bu(u.blocks,[...s,"tabs",c,"blocks"],n,r)}break}case"card":bu(a.blocks,[...s,"blocks"],n,r);break;case"columns":bu(a.primary,[...s,"primary"],n,r),bu(a.aside,[...s,"aside"],n,r);break;case"detail":{let l=a.master;if(xi(l)){let u=[...s,"master"];Yh(l.items,[...u,"items"],n,r,!0);let d=l.cells;if(Array.isArray(d))for(let[f,g]of d.entries()){if(!xi(g))continue;Yh(g.items,[...u,"cells",f,"items"],n,r,!0)}let p=l.rows;if(Array.isArray(p))for(let[f,g]of p.entries()){if(!xi(g))continue;Xh(g.link,[...u,"rows",f,"link"],n,r,!0)}}let c=a.open;if(xi(c))bu(c.blocks,[...s,"open","blocks"],n,r);break}}}}function YC(e,t){if(!xi(e))return[];let n=[];return bu(e.blocks,["blocks"],t,n),n}var XC=i.json();function H7(e,t){let n=ox(jo(t).inner);switch(e){case"checkbox":return n==="boolean";case"number":return n==="number";case"select":return n==="string"||n==="enum";case"text":case"textarea":case"url":return n==="string"}}function Q7(e){let t=ox(jo(e).inner);return t==="string"||t==="number"||t==="boolean"||t==="enum"||t==="literal"}function K7(e,t,n,r){let{actionPath:o}=r,a=[],s=Bg(jo(n).inner);if(!H7(t.control,n))a.push({path:[...o,"form","fields",e,"control"],message:`Form control "${t.control}" is incompatible with schema field "${e}"`});if(t.control==="select"){if(!t.options||t.options.length===0)a.push({path:[...o,"form","fields",e,"options"],message:`Select field "${e}" requires options`});else if(s){if(t.options.some((l)=>!s.includes(l.value)))a.push({path:[...o,"form","fields",e,"options"],message:`Select field "${e}" options must use values from its enum schema`})}}else if(t.options!==void 0)a.push({path:[...o,"form","fields",e,"options"],message:`Non-select field "${e}" cannot declare options`});if(t.labelBy){let l=r.fields[t.labelBy.field],c=new Set(l?.options?.map((d)=>d.value)??[]),u=new Set(t.labelBy.values.map((d)=>d.value));if(l?.control!=="select")a.push({path:[...o,"form","fields",e,"labelBy","field"],message:`Dynamic label source "${t.labelBy.field}" must be a select form field`});else if(c.size!==u.size||Array.from(c).some((d)=>!u.has(d)))a.push({path:[...o,"form","fields",e,"labelBy","values"],message:`Dynamic labels for "${e}" must cover every option of "${t.labelBy.field}"`})}if(t.secret===!0&&e in r.initial)a.push({path:[...o,"input",e],message:`Secret form field "${e}" cannot be pre-bound into browser data`});if(t.secret===!0&&t.control!=="text"&&t.control!=="url")a.push({path:[...o,"form","fields",e,"secret"],message:`Secret field "${e}" must use a text or URL control`});return a}function Y7(e,t,n){return Object.entries(t).flatMap(([r,o])=>{let a=e[r];if(a===void 0)return[{path:[...n,"input",r],message:`Form initial input "${r}" is not declared by the action schema`}];return a instanceof i.ZodType&&!a.safeParse(o).success?[{path:[...n,"input",r],message:`Form initial input "${r}" does not satisfy the action schema`}]:[]})}function X7(e,t){let n=e.form;if(!n)return{issues:[]};let r=as(e.action.input);if(!r)return{issues:[{path:[...t,"form"],message:`Form action "${e.action.name}" requires an object input schema`}]};let o=e.input??{};if(!Cn(o))return{issues:[{path:[...t,"input"],message:"Workspace action form initial input must be an object"}]};let a=XC.safeParse(o);if(!a.success)return{issues:[{path:[...t,"input"],message:"Workspace action form initial input must be JSON-native"}]};let s=Object.entries(n.fields),l=[];if(s.length>50)l.push({path:[...t,"form","fields"],message:"Workspace action forms support at most 50 fields"});l.push(...Y7(r,o,t));let c=[];for(let[d,p]of s){let f=r[d];if(f===void 0){l.push({path:[...t,"form","fields",d],message:`Form field "${d}" is not declared by the action schema`});continue}l.push(...K7(d,p,f,{fields:n.fields,initial:o,actionPath:t})),c.push({name:d,label:p.label,control:p.control,required:jo(f).required,...p.secret?{secret:!0}:{},...p.options?{options:p.options}:{},...p.labelBy?{labelBy:p.labelBy}:{}})}let u=new Set(s.map(([d])=>d));for(let d of Object.keys(r))if(!u.has(d)&&!(d in o))l.push({path:[...t,"form","fields",d],message:`Action schema field "${d}" has no form declaration or pre-bound input`});return{input:a.data,form:{...n.presentation?{presentation:n.presentation}:{},...n.submitLabel?{submitLabel:n.submitLabel}:{},fields:c},issues:l}}function eX(e,t){if(!e.result)return{issues:[]};let n=as(e.action.output);if(!n)return{issues:[{path:[...t,"result"],message:`Presented result for "${e.action.name}" requires an object output schema`}]};let r=[],o=Object.entries(e.result.fields);if(o.length>50)r.push({path:[...t,"result","fields"],message:"Workspace action results support at most 50 fields"});let a=new Set(o.map(([s])=>s));for(let[s,l]of o){let c=n[s];if(c===void 0)r.push({path:[...t,"result","fields",s],message:`Result field "${s}" is not declared by the action output schema`});else if(!Q7(c))r.push({path:[...t,"result","fields",s],message:`Result field "${s}" must use a scalar output schema`});if(l.sensitive===!0&&l.copyable!==!0)r.push({path:[...t,"result","fields",s,"copyable"],message:`Sensitive result field "${s}" must be explicitly copyable`})}for(let s of Object.keys(n))if(!a.has(s))r.push({path:[...t,"result","fields",s],message:`Action output field "${s}" has no result declaration`});return{result:{title:e.result.title,fields:o.map(([s,l])=>({name:s,label:l.label,...l.copyable?{copyable:!0}:{},...l.sensitive?{sensitive:!0}:{}}))},issues:r}}function Fl(e,t,n,r,o){let a=[],s=[];for(let[l,c]of e.entries()){let u=[...r,o?.[l]??l];if(!t.includes(c.action)){s.push({path:[...u,"action"],message:`Action "${c.action.name}" is not declared by this workspace`});continue}if(c.action.permission!==void 0&&!ha(n,c.action.permission))continue;if(c.action.catalog===!0&&!c.capability){s.push({path:[...u,"capability"],message:`Catalog action "${c.action.name}" requires a typed capability definition`});continue}if(c.action.catalog!==!0&&c.capability){s.push({path:[...u,"capability"],message:`Action "${c.action.name}" is not a capability catalog`});continue}if(c.capability?.confirmation==="prepared"&&c.action.confirmation?.kind!=="prepared"){s.push({path:[...u,"capability","confirmation"],message:`Capability "${c.capability.id}" requires a prepared catalog action`});continue}if(c.action.launch&&c.result){s.push({path:[...u,"result"],message:`Action "${c.action.name}" sends the browser elsewhere, so it has no result to show`});continue}let d=X7(c,u),p=eX(c,u);s.push(...d.issues,...p.issues);let f;if(c.form)f=d.input;else{let w=c.action.input.safeParse(c.input);if(!w.success)s.push(...w.error.issues.map((v)=>({path:[...u,"input",...v.path],message:v.message})));else{let v=XC.safeParse(c.input);if(!v.success||!XC.safeParse(w.data).success)s.push({path:[...u,"input"],message:"Workspace action input must be JSON-native"});else f=v.data}}if(d.issues.length>0||p.issues.length>0||f===void 0)continue;let g=c.action.confirmation,h=g?.kind==="static"?g:g?.kind==="prepared"&&(g.conditional!==!0||c.capability?.confirmation==="prepared")?{kind:"prepared"}:void 0;a.push(Object.freeze({actionId:c.action.name,...c.capability?{capabilityId:c.capability.id}:{},label:c.label??c.capability?.label??c.action.label,input:f,...d.form?{form:d.form}:{},...p.result?{result:p.result}:{},...c.disabled?{disabled:!0}:{},...h?{confirmation:h}:{},...c.action.launch?{launch:!0}:{},...c.dropTarget?{dropTarget:c.dropTarget}:{}}))}return{controls:a,issues:s}}function eI(e){return e.type!=="tabs"&&e.type!=="detail"&&e.type!=="columns"&&e.type!=="card"}function tX(e,t){return{type:"action",...t?{id:t}:{},...e}}function VN(e,t,n,r){let o=Fl(e.actions??[],n,r,[...t,"actions"]);return{item:{id:e.id,title:e.title,...e.description?{description:e.description}:{},...e.metadata?{metadata:e.metadata}:{},...e.at?{at:e.at}:{},...e.tags?{tags:e.tags}:{},...qe({count:e.count}),...e.badges?{badges:e.badges}:{},...e.filterValues?{filterValues:e.filterValues}:{},...e.links?{links:e.links}:{},...e.tone?{tone:e.tone}:{},...e.link?{link:e.link}:{},...o.controls.length>0?{actions:o.controls,...qe({actionsLabel:e.actionsLabel})}:{}},issues:o.issues}}function Ul(e,t,n,r){switch(e.type){case"list":{let o=[],a=e.items.map((s,l)=>{let c=VN(s,["blocks",t,"items",l],n,r);return o.push(...c.issues),c.item});return{block:{type:"list",id:e.id,empty:e.empty,...e.presentation?{presentation:e.presentation}:{},...e.filter?{filter:e.filter}:{},items:a},issues:o}}case"table":{let o=[],a=e.rows.map((s,l)=>{let c=Fl(s.actions??[],n,r,["blocks",t,"rows",l,"actions"]);return o.push(...c.issues),{id:s.id,cells:s.cells,...s.compact?{compact:s.compact}:{},...s.link?{link:s.link}:{},...c.controls.length>0?{actions:c.controls}:{}}});return{block:{type:"table",id:e.id,empty:e.empty,...e.filters?{filters:e.filters}:{},...e.query?{query:e.query}:{},columns:e.columns,rows:a},issues:o}}case"matrix":{let o=[],a=e.cells.map((s,l)=>({id:s.id,label:s.label,...s.tone?{tone:s.tone}:{},empty:s.empty,items:s.items.map((c,u)=>{let d=VN(c,["blocks",t,"cells",l,"items",u],n,r);return o.push(...d.issues),d.item})}));return{block:{type:"matrix",id:e.id,...e.columns?{columns:e.columns}:{},cells:a},issues:o}}case"tabs":{let o=[],a=e.tabs.map((s)=>{let l=[];for(let[c,u]of s.blocks.entries()){let d=Ul(u,c,n,r);if(o.push(...d.issues),d.block&&d.block.type!=="tabs")l.push(d.block)}return{id:s.id,label:s.label,...qe({count:s.count}),blocks:l}});return{block:{type:"tabs",id:e.id,label:e.label,defaultTab:e.defaultTab,...e.queryKey?{queryKey:e.queryKey}:{},tabs:a},issues:o}}case"card":{let o=[],a=[];for(let[s,l]of e.blocks.entries()){let c=Ul(l,s,n,r);if(o.push(...c.issues),c.block&&eI(c.block))a.push(c.block)}return{block:{type:"card",id:e.id,label:e.label,...e.presentation?{presentation:e.presentation}:{},...qe({disclosureLabel:e.disclosureLabel}),...e.metadata?{metadata:e.metadata}:{},...e.summary?{summary:e.summary}:{},...e.tone?{tone:e.tone}:{},blocks:a},issues:o}}case"columns":{let o=[],a=(s)=>{let l=[];for(let[c,u]of s.entries()){let d=Ul(u,c,n,r);o.push(...d.issues);let p=d.block;if(p&&(eI(p)||p.type==="card"))l.push(p)}return l};return{block:{type:"columns",id:e.id,primary:a(e.primary),aside:a(e.aside)},issues:o}}case"detail":{let o=[],a=Ul(e.master,t,n,r);o.push(...a.issues);let s=a.block;if(!s||s.type!=="list"&&s.type!=="table"&&s.type!=="matrix")return{issues:o};let l=[];for(let[c,u]of(e.open?.blocks??[]).entries()){let d=Ul(u,c,n,r);o.push(...d.issues);let p=d.block;if(p&&(eI(p)||p.type==="card"))l.push(p)}return{block:{type:"detail",id:e.id,queryKey:e.queryKey,empty:e.empty,master:s,...e.open?{open:{forId:e.open.forId,title:e.open.title,blocks:l}}:{}},issues:o}}case"action":{let o=Fl([e],n,r,["blocks"],[t]),a=o.controls[0];return{...a?{block:tX(a,e.id)}:{},issues:o.issues}}case"actions":{let o=Fl(e.items,n,r,["blocks",t,"items"]);return{block:{type:"actions",...e.id?{id:e.id}:{},items:o.controls},issues:o.issues}}default:return{block:e,issues:[]}}}var tI=i.enum(["text","url","number","checkbox","select","textarea"]),HN=tI.exclude(["select","textarea"]);var QN=i.string().max(2048).refine((e)=>{try{let t=new URL(e);return t.protocol==="https:"||t.protocol==="http:"}catch{return!1}},{message:"External operator links must use http or https"});function nX(e){return e!==null&&typeof e==="object"&&"kind"in e&&e.kind==="rizom-entity"&&"type"in e&&typeof e.type==="string"&&e.type.length>0}var rX=i.custom(nX,{message:"Expected an imported entity definition"});function iX(e){return e!==null&&typeof e==="object"&&"kind"in e&&e.kind==="rizom-entity-catalog"&&"id"in e&&typeof e.id==="string"&&"label"in e&&typeof e.label==="string"}var oX=i.custom(iX,{message:"Expected an imported entity catalog definition"});function aX(e){return{kind:"external",href:e.external}}function sX(e){return{kind:"entity",entityType:e.entity.type,id:e.id}}var KN=i.union([i.object({target:i.literal("account-settings")}).strict(),i.object({target:i.literal("invitations")}).strict(),i.object({target:i.literal("admin-peer-invite"),peerId:De,displayName:je}).strict(),i.object({target:i.literal("inbox")}).strict(),i.object({target:i.literal("inbox"),source:i.literal("mail"),filter:i.enum(["high-priority","needs-reply","unclassified"]).optional()}).strict(),i.object({target:i.literal("publishing")}).strict(),i.object({target:i.literal("site")}).strict(),i.object({target:i.literal("traffic")}).strict(),i.object({target:i.literal("board")}).strict(),i.object({target:i.literal("inbox-open-entity"),entityType:De,entityId:De}).strict(),i.object({target:i.literal("inbox-capture-note"),title:jn,summary:i.string().trim().min(1).max(1000).optional(),entityType:De,entityId:De}).strict(),i.object({target:i.literal("inbox-discuss-in-chat"),sourceId:De,itemId:i.string().trim().min(1).max(300),label:i.string().trim().min(1).max(160)}).strict()]);function lX(e){return{kind:"entity",entityType:e.entityType,id:e.id}}function cX(e){return{kind:"launch",launch:e.launch}}function uX(e){return{kind:"detail",itemId:e.detail.itemId}}var Qp=i.union([i.object({external:QN}).strict().transform(aX),i.object({entity:rX,id:De}).strict().transform(sX),i.object({catalog:oX,entityType:De,id:De}).strict().transform(lX),i.object({launch:KN}).strict().transform(cX),i.object({detail:i.object({itemId:ya}).strict()}).strict().transform(uX),i.object({kind:i.literal("external"),href:QN}).strict(),i.object({kind:i.literal("entity"),entityType:De,id:De}).strict(),i.object({kind:i.literal("launch"),launch:KN}).strict(),i.object({kind:i.literal("detail"),itemId:ya}).strict()]);function ei(e,t,n,r){let[o,a]=r.path,s=new Set;for(let[l,c]of t.entries()){let u=n(c);if(u!==void 0){if(s.has(u)||r.reserved?.has(u))e.addIssue({code:"custom",message:`${r.label} "${u}" is duplicated`,path:[o,l,a]});s.add(u)}r.each?.(c,l)}return s}function YN(e,t){return ei(e,t,(n)=>n.id,{label:"Spatial point id",path:["points","id"]})}var XN=i.object({label:je,tone:Dn.optional()}).strict(),e$=i.object({sourceId:De,targetId:De,label:je.optional(),tone:Dn.optional()}).strict(),dX=i.object({id:De,label:je,category:je,x:bs,y:bs,zoneId:De.optional(),tone:Dn.optional(),details:i.array(jn).max(20).optional()}).strict(),pX=i.object({id:De,label:je,x:bs,y:bs,memberIds:i.array(De).max(500)}).strict(),mX=i.object({type:i.literal("spatial"),layout:i.literal("cartesian"),id:De,label:je,description:no,points:i.array(dX).max(500),zones:i.array(pX).max(100),relationships:i.array(e$).max(2000).optional(),legend:i.array(XN).max(20)}).strict().superRefine((e,t)=>{let n=YN(t,e.points),r=ei(t,e.zones,(a)=>a.id,{label:"Spatial zone id",path:["zones","id"],reserved:n,each:(a,s)=>{for(let l of a.memberIds)if(!n.has(l))t.addIssue({code:"custom",message:`Spatial zone member "${l}" has no matching point`,path:["zones",s,"memberIds"]})}});for(let[a,s]of e.points.entries())if(s.zoneId&&!r.has(s.zoneId))t.addIssue({code:"custom",message:`Spatial point zone "${s.zoneId}" has no matching zone`,path:["points",a,"zoneId"]});let o=new Set([...n,...r]);for(let[a,s]of(e.relationships??[]).entries())if(!o.has(s.sourceId)||!o.has(s.targetId))t.addIssue({code:"custom",message:"Spatial relationship endpoints must reference declared points or zones",path:["relationships",a]})}),fX=i.object({id:De,label:je,kind:je,status:je,tags:i.array(je).max(30).optional(),distance:bs,bearing:i.number().finite().min(0).lt(360),relatedIds:i.array(De).max(100).optional(),tone:Dn.optional(),details:i.array(jn).max(20).optional()}).strict(),gX=i.object({id:De,label:je,memberIds:i.array(De).min(2).max(500)}).strict(),hX=i.object({id:De,label:je,maxDistance:bs}).strict(),yX=i.object({type:i.literal("spatial"),layout:i.literal("radial"),id:De,label:je,description:no,centerLabel:je,centerKind:i.enum(["identity","centroid"]),points:i.array(fX).max(500),clusters:i.array(gX).max(100).optional(),relationships:i.array(e$).max(2000).optional(),strata:i.array(hX).min(1).max(10),legend:i.array(XN).max(20)}).strict().superRefine((e,t)=>{let n=YN(t,e.points);for(let[o,a]of e.points.entries())for(let s of a.relatedIds??[])if(!n.has(s))t.addIssue({code:"custom",message:`Related point "${s}" is not declared`,path:["points",o,"relatedIds"]});ei(t,e.clusters??[],(o)=>o.id,{label:"Spatial cluster id",path:["clusters","id"],each:(o,a)=>{for(let s of o.memberIds)if(!n.has(s))t.addIssue({code:"custom",message:`Spatial cluster member "${s}" has no matching point`,path:["clusters",a,"memberIds"]})}});for(let[o,a]of(e.relationships??[]).entries())if(!n.has(a.sourceId)||!n.has(a.targetId))t.addIssue({code:"custom",message:"Spatial relationship endpoints must reference declared points",path:["relationships",o]});let r=-1;for(let[o,a]of e.strata.entries()){if(a.maxDistance<=r)t.addIssue({code:"custom",message:"Radial strata must increase by maximum distance",path:["strata",o,"maxDistance"]});r=a.maxDistance}}),nI=i.discriminatedUnion("layout",[mX,yX]);var bX=i.object({id:De,label:je,value:kp.optional(),description:no.optional(),tone:Dn.optional()}).strict(),n$=i.object({type:i.literal("group"),id:De,label:je,items:i.array(bX).max(50)}).strict(),vX=i.object({id:De,label:je,status:i.enum(["idle","active","complete","failed"]),detail:jn.optional()}).strict(),r$=i.object({type:i.literal("flow"),id:De,label:je,direction:i.enum(["forward","bidirectional"]).optional(),steps:i.array(vX).min(2).max(20)}).strict(),SX=i.string().trim().min(1).max(120).regex(/^[a-z][a-zA-Z0-9_.-]*$/),wX=i.object({value:je,label:je,count:i.number().int().nonnegative().optional()}).strict(),xX=i.object({key:SX,label:je,value:je.optional(),allLabel:je.optional(),options:i.array(wX).max(100)}).strict(),i$=i.object({controls:i.array(xX).max(20),pagination:i.object({offset:i.number().int().nonnegative(),limit:i.number().int().min(1).max(100),total:i.number().int().nonnegative(),label:je.optional()}).strict().optional()}).strict();function o$(e,t){ei(t,e.controls,(n)=>n.key,{label:"Query key",path:["controls","key"]})}var TX=i$.extend({type:i.literal("query"),id:De}).strict().superRefine(o$),CX=i$.superRefine(o$),a$=i.object({type:i.literal("links"),id:De.optional(),items:i.array(i.object({label:je,target:Qp}).strict()).max(30)}).strict(),s$=i.object({label:je,tone:Dn.optional()}).strict(),IX=i.object({value:De,label:je,count:i.number().int().nonnegative().optional(),emphasis:i.literal("gap").optional()}).strict(),rI=200,l$=50,EX=rI*l$+1,RX=i.object({label:je,defaultValue:De,allValue:De.optional(),options:i.array(IX).min(1).max(EX)}).strict().superRefine((e,t)=>{if(!ei(t,e.options,(r)=>r.value,{label:"List filter value",path:["options","value"]}).has(e.defaultValue))t.addIssue({code:"custom",message:`List filter default "${e.defaultValue}" has no matching option`,path:["defaultValue"]})}),ey=i.object({id:ya,title:jn,description:no.optional(),metadata:i.array(jn).max(20).optional(),tags:i.array(je).max(30).optional(),at:i.iso.datetime({offset:!0}).optional(),count:i.number().finite().optional(),badges:i.array(s$).max(10).optional(),filterValues:i.array(De).max(l$).optional(),links:i.array(i.object({label:je,target:Qp}).strict()).max(10).optional(),tone:Dn.optional(),link:Qp.optional()}).strict(),kX=i.enum(["standard","editorial","attention","activity","log"]),c$=i.object({type:i.literal("list"),id:De,empty:jn,presentation:kX.optional(),filter:RX.optional(),items:i.array(ey).max(rI)}).strict();function u$(e,t){if(ei(t,e.items,(o)=>o.id,{label:"List item id",path:["items","id"]}),!e.filter)return;let n=new Set(e.filter.options.map((o)=>o.value)),r=e.filter.allValue??"all";for(let[o,a]of e.items.entries())for(let s of a.filterValues??[])if(s!==r&&!n.has(s))t.addIssue({code:"custom",message:`List item filter value "${s}" has no matching option`,path:["items",o,"filterValues"]})}var AX=c$.superRefine(u$),d$=i.object({key:De,label:je,align:i.enum(["start","center","end"]).optional()}).strict(),p$=i.object({key:De,label:je,values:i.array(kp).max(50)}).strict(),_X=i.union([kp,i.array(i.string().max(500)).max(50)]),PX=i.object({title:jn.trim().min(1),description:no.optional(),metadata:i.array(jn).max(20).optional(),badges:i.array(s$).max(10).optional(),count:i.number().finite().optional(),tone:Dn.optional()}).strict(),m$=i.object({id:ya,cells:i.record(i.string(),_X),link:Qp.optional()}).strict(),OX=i.object({type:i.literal("table"),id:De,empty:jn,filters:i.array(p$).max(20).optional(),columns:i.array(d$).min(1).max(30),rows:i.array(m$).max(500)}).strict();function f$(e,t){let n=ei(t,e.columns,(r)=>r.key,{label:"Table column key",path:["columns","key"]});for(let[r,o]of(e.filters??[]).entries())if(!n.has(o.key))t.addIssue({code:"custom",message:`Table filter key "${o.key}" has no matching column`,path:["filters",r,"key"]});ei(t,e.rows,(r)=>r.id,{label:"Table row id",path:["rows","id"],each:(r,o)=>{for(let a of Object.keys(r.cells))if(!n.has(a))t.addIssue({code:"custom",message:`Table cell key "${a}" has no matching column`,path:["rows",o,"cells",a]})}})}var MX=OX.superRefine(f$),g$=i.object({id:De,label:je,tone:Dn.optional(),empty:jn,items:i.array(ey).max(100)}).strict();function h$(e,t){ei(t,e.items,(n)=>n.id,{label:"Matrix item id",path:["items","id"]})}var jX=g$.superRefine(h$),y$=i.object({type:i.literal("matrix"),id:De,columns:i.union([i.literal(1),i.literal(2),i.literal(3),i.literal(4)]).optional(),cells:i.array(jX).min(1).max(12)}).strict();function b$(e,t){ei(t,e.cells,(n)=>n.id,{label:"Matrix cell id",path:["cells","id"]})}var DX=y$.superRefine(b$);function v$(e,t){if(!ei(t,e.tabs,(r)=>r.id,{label:"Tab id",path:["tabs","id"]}).has(e.defaultTab))t.addIssue({code:"custom",message:`Default tab "${e.defaultTab}" has no matching tab`,path:["defaultTab"]})}function S$(e,t){ei(t,e.blocks,(n)=>n.id,{label:"Operator view block id",path:["blocks","id"]})}var w$=i.union([PT,OT,MT,n$,r$,jT,DT,zT,a$,AX,MX,DX,nI]),zX=i.object({type:i.literal("tabs"),id:De,label:je,defaultTab:De,tabs:i.array(i.object({id:De,label:je,count:i.number().int().nonnegative().optional(),blocks:i.array(w$).max(30)}).strict()).min(1).max(12)}).strict().superRefine(v$);function NX(e){return e!==null&&typeof e==="object"&&"kind"in e&&e.kind==="rizom-workspace-action"&&"name"in e&&typeof e.name==="string"&&"input"in e&&typeof e.input==="object"&&e.input!==null&&"safeParse"in e.input&&typeof e.input.safeParse==="function"}var $X=i.custom(NX,{message:"Expected a workspace action definition"}),BX=i.object({id:De,label:je,description:no.optional(),confirmation:i.literal("prepared").optional()}).strict(),t$=i.object({value:i.string().trim().min(1).max(500),label:je}).strict(),LX=i.object({label:je,control:tI,secret:i.boolean().optional(),options:i.array(t$).min(1).max(100).optional(),labelBy:i.object({field:De,values:i.array(t$).min(1).max(100)}).strict().optional()}).strict(),qX=i.object({presentation:i.enum(["inline","disclosure"]).optional(),submitLabel:je.optional(),fields:i.record(De,LX)}).strict(),FX=i.object({label:je,copyable:i.boolean().optional(),sensitive:i.boolean().optional()}).strict(),UX=i.object({title:je,fields:i.record(De,FX)}).strict(),Su=i.object({action:$X,input:i.unknown().optional(),form:qX.optional(),result:UX.optional(),capability:BX.optional(),label:je.optional(),disabled:i.boolean().optional()}).strict(),ZX=ey.extend({actionsLabel:je.optional(),actions:i.array(Su).max(20).optional()}),x$=c$.extend({items:i.array(ZX).max(rI)}).superRefine(u$),WX=m$.extend({compact:PX.optional(),actions:i.array(Su).max(20).optional()}),T$=i.object({type:i.literal("table"),id:De,empty:jn,filters:i.array(p$).max(20).optional(),query:CX.optional(),columns:i.array(d$).min(1).max(30),rows:i.array(WX).max(500)}).strict().superRefine(f$),GX=Su.extend({dropTarget:De.optional()}),JX=ey.extend({actionsLabel:je.optional(),actions:i.array(GX).max(20).optional()}),VX=g$.extend({items:i.array(JX).max(100)}).superRefine(h$);function HX(e,t){let n=new Set(e.cells.map((r)=>r.id));e.cells.forEach((r,o)=>r.items.forEach((a,s)=>{let l=new Set;(a.actions??[]).forEach((c,u)=>{let d=c.dropTarget;if(d===void 0)return;let p=!n.has(d)?`Drop target "${d}" is not a cell of this matrix`:d===r.id?`Drop target "${d}" is the card's own cell`:l.has(d)?`Drop target "${d}" has more than one action on this card`:c.action.confirmation!==void 0||c.form!==void 0?`Drop target "${d}" needs an action that runs without confirmation or a form`:void 0;if(l.add(d),p)t.addIssue({code:"custom",message:p,path:["cells",o,"items",s,"actions",u,"dropTarget"]})})}))}var C$=y$.extend({cells:i.array(VX).min(1).max(12)}).superRefine(b$).superRefine(HX),QX=Su.extend({type:i.literal("action"),id:De.optional()}),KX=i.object({type:i.literal("actions"),id:De.optional(),items:i.array(Su).max(30)}).strict(),vu=i.union([PT,OT,MT,H0,n$,r$,jT,DT,zT,Q0,TX,a$,x$,T$,C$,nI,QX,KX]),YX=i.object({type:i.literal("tabs"),id:De,label:je,defaultTab:De,queryKey:De.optional(),tabs:i.array(i.object({id:De,label:je,count:i.number().int().nonnegative().optional(),blocks:i.array(i.lazy(()=>i.union([vu,Kp,I$,E$]))).max(30)}).strict()).min(1).max(12)}).strict().superRefine(v$),Kp=i.object({disclosureLabel:je.optional(),type:i.literal("card"),id:De,label:je,presentation:i.enum(["section","disclosure","feature"]).optional(),metadata:i.array(jn).max(20).optional(),summary:i.array(_T).max(4).optional(),tone:Dn.optional(),blocks:i.array(vu).max(12)}).strict().refine((e)=>e.disclosureLabel===void 0||e.presentation==="disclosure",{message:"disclosureLabel requires disclosure presentation",path:["disclosureLabel"]}),I$=i.object({type:i.literal("detail"),id:De,queryKey:De,empty:jn,master:i.union([x$,T$,C$]),open:i.object({forId:ya,title:je,blocks:i.array(i.union([vu,Kp])).max(30)}).strict().optional()}).strict(),E$=i.object({type:i.literal("columns"),id:De,primary:i.array(i.union([vu,Kp])).max(20),aside:i.array(i.union([vu,Kp])).max(12)}).strict(),XX=i.object({kicker:je.optional(),title:jn.optional(),description:no.optional(),status:i.object({label:je,detail:jn.optional(),tone:Dn.optional()}).strict().optional(),facts:i.array(i.object({label:je,tone:Dn.optional()}).strict()).max(6).optional(),primaryAction:Su.optional(),blocks:i.array(i.union([vu,YX,I$,E$,Kp])).max(50)}).strict().superRefine(S$),R$=i.object({title:jn.optional(),blocks:i.array(i.union([w$,zX])).max(50)}).strict().superRefine(S$),k$=i.object({items:i.array(i.object({label:je,value:i.string().max(500),tone:i.enum(["good","warn"]).optional()}).strict()).max(4),attention:i.number().int().nonnegative().optional()}).strict(),eee=i.object({view:R$,digest:k$.optional()}).strict();function A$(e){let t=R$.safeParse(e);return t.success?{success:!0,data:t.data}:{success:!1,issues:Hp(t.error)}}function _$(e){let t=k$.safeParse(e);return t.success?{success:!0,data:t.data}:{success:!1,issues:Hp(t.error)}}function P$(e){let t=eee.safeParse(e);return t.success?{success:!0,data:t.data}:{success:!1,issues:Hp(t.error)}}function O$(e){let t=XX.safeParse(e);return t.success?{success:!0,data:t.data}:{success:!1,issues:Hp(t.error)}}function M$(e){let t=YC(e,"dashboard");if(t.length>0)return{success:!1,issues:t};return A$(e)}function iI(e,t){let n=YC(e,"studio");if(n.length>0)return{success:!1,issues:n};let r=O$(e);if(!r.success)return r;let o=[],a=[],s=r.data.primaryAction?Fl([r.data.primaryAction],t.actions,t.permission,[],["primaryAction"]):{controls:[],issues:[]};a.push(...s.issues);for(let[l,c]of r.data.blocks.entries()){let u=Ul(c,l,t.actions,t.permission);if(a.push(...u.issues),u.block)o.push(u.block)}if(a.length>0)return{success:!1,issues:a};return{success:!0,data:Object.freeze({...r.data.kicker?{kicker:r.data.kicker}:{},...r.data.title?{title:r.data.title}:{},...r.data.description?{description:r.data.description}:{},...r.data.status?{status:r.data.status}:{},...r.data.facts?{facts:r.data.facts}:{},...s.controls[0]?{primaryAction:s.controls[0]}:{},blocks:Object.freeze(o)})}}function j$(e){return _$(e)}function oI(e){return P$(e)}function Vt(e,t,n,r={}){return new it(r.code??"handler_failed",{message:`Service "${e.publicServiceId}" package "${e.packageName}" ${e.surface} "${e.id}" ${t}${n?`: ${n}`:""}`,...r.publicMessage!==void 0&&{publicMessage:r.publicMessage},...r.cause!==void 0&&{cause:r.cause}})}function oo(e,t,n){let{code:r,message:o}=Ki(n).toJSON();return Vt(e,t,void 0,{code:r,publicMessage:o,cause:n})}function ty(e,t,n){return Vt(e,t,ao(n.issues),{code:"invalid_input",publicMessage:xu(n,{maxLength:wu}),cause:n})}function ao(e){return e.slice(0,5).map((t)=>`${t.path.length>0?t.path.join("."):"value"}: ${t.message}`).join("; ")}function Yp(e,t,n){let r=e.safeParse(t);if(!r.success)throw Vt(n,"returned invalid data; return a value matching its data schema",ao(r.error.issues),{code:"invalid_response",cause:r.error});return r.data}async function ny(e,t,n){try{return await n()}catch(r){if(!t.some((o)=>o?.aborted)){let{code:o}=Ki(r),a=o==="handler_failed"||o==="invalid_response",s=r instanceof Error?r.cause:void 0;e[a?"error":"warn"](he(r),{code:o,...s!==void 0&&{cause:he(s)}})}throw r}}function tee(e,t){let n=M$(e);if(!n.success)throw Vt(t,"returned an invalid view; use supported OperatorView blocks and safe links",ao(n.issues),{code:"invalid_response"});return n.data}function nee(e,t){let n=j$(e);if(!n.success)throw Vt(t,"returned an invalid digest; provide at most four bounded lines and a non-negative attention count",ao(n.issues),{code:"invalid_response"});return n.data}function Xp(e){let t=e.binding.definition,n={publicServiceId:e.publicServiceId,packageName:e.packageName,surface:"dashboard widget",id:t.id},r=U0(e.binding);return{id:t.id,title:t.title,...t.description?{description:t.description}:{},group:t.group,rendererName:Ll,section:t.placement,priority:t.priority??50,visibility:t.permission,dataProvider:(s)=>e.runAs?e.runAs({caller:s.caller,interfaceType:"dashboard"},()=>o(s,()=>a(s))):o(s,()=>a(s)),digestProvider(s){let l=oI(s);if(!l.success)return{};return{...l.data.digest?{digest:l.data.digest.items.map((c)=>({...c,tone:c.tone??"plain"}))}:{},...l.data.digest?.attention!==void 0?{needsAttention:l.data.digest.attention}:{}}}};function o(s,l){return ny(e.context.logger,[s.signal,e.runtimeSignal],l)}async function a(s){let l={...s,signal:AbortSignal.any([s.signal,e.runtimeSignal])},c=l.caller?.permission??"public";if(!ha(c,t.permission))throw Vt(n,"was requested below its minimum permission",void 0,{code:"permission_denied"});let u=await Kh({config:e.config,state:e.state,...e.accountSettingsRegistration?{accountSettingsRegistration:e.accountSettingsRegistration}:{},provider:l,context:e.context,entities:e.entities,accountSettings:e.accountSettings});l.signal.throwIfAborted();let d;try{d=await r(u)}catch(w){if(l.signal.aborted)throw l.signal.reason??w;throw oo(n,"data loader failed",w)}l.signal.throwIfAborted();let p=Yp(t.data,d,n),f;try{f=t.view({data:p})}catch(w){if(l.signal.aborted)throw l.signal.reason??w;throw oo(n,"view derivation failed",w)}let g=tee(f,n),h;if(t.digest){let w;try{w=t.digest({data:p})}catch(v){if(l.signal.aborted)throw l.signal.reason??v;throw oo(n,"digest derivation failed",v)}h=nee(w,n)}return Object.freeze({view:g,...h?{digest:h}:{},...e.includeSource?{source:p}:{}})}}var aI=Object.freeze({config:Object.freeze({}),state:Object.freeze({}),accountSettings:void 0});async function sI(e){if(e.context.executionOnly||!e.context.dashboard.isAvailable())return!1;let t=e.definition.bind(aI,({caller:o,signal:a})=>e.load({caller:o,visibilityScope:KC(o),signal:a})),n=Xp({publicServiceId:e.context.pluginId,packageName:e.context.pluginId,config:aI.config,state:aI.state,binding:t,context:e.context,runtimeSignal:e.runtimeSignal??new AbortController().signal,includeSource:e.render!==void 0}),r=e.render?{...n,renderer:e.render}:n;return e.context.dashboard.registerWidget(r)}var so={pluginsRegistered:"system:plugins:registered",initialSyncCompleted:"sync:initial:completed",startupContentSettled:"system:startup-content:settled",shellReady:"system:shell:ready",identityChanged:"system:identity:changed"},ree=i.object({initialSyncPending:i.boolean()}),D$=i.discriminatedUnion("success",[i.object({success:i.literal(!0)}),i.object({success:i.literal(!1),error:i.string()})]),iee=En(so.initialSyncCompleted,D$),z$=i.object({timestamp:i.string()}),oee=En(so.startupContentSettled,z$),aee=En(so.shellReady,z$),N$=i.object({entityType:i.string().min(1)}),see=En(so.identityChanged,N$);var pee={"startup-content-settled":so.startupContentSettled},mee=i.record(i.string(),i.unknown());function $$(e,t,n){switch(t.from?.kind){case"entity-attachment":return e.fromAttachment;case"upload":return e.fromUpload;default:if(t.content)return e.fromContent;if(t.prompt)return e.fromPrompt;return t.url?n:void 0}}function dI(e){if(typeof e==="object"&&e!==null&&!Object.isFrozen(e))Object.values(e).forEach(dI),Object.freeze(e);return e}function lI(e){let{attributed:t}=e.job;return t!==void 0&&t!==!1}function fee(e){let t=Rh(e);return Object.freeze({interfaceType:e.interfaceType,actor:e.actor,...qe({userId:t,channelId:e.channelId,channelName:e.channelName})})}function cI(e){return{actor:e.actor,interfaceType:e.interfaceType}}function gee(e,t,n={}){return{source:e,metadata:{operationType:n.operationType??"content_operations",...n.channel===!0&&t.channelId!==void 0&&{channelId:t.channelId},interfaceType:t.interfaceType,requestedByActor:t.actor,...t.actor.kind==="user"?{requestedByUserId:t.actor.userId}:{},requestedByInterface:t.interfaceType}}}function Ar(e){return{success:!1,error:e}}function hee(e){function t(r,o){let a={entityType:r.entityType,id:r.id};return o?e.getEntity(a,o):e.getEntity(a)}function n(r,o){let a={entityType:r.entityType,options:qe({limit:r.options?.limit})};return o?e.listEntities(a,o):e.listEntities(a)}return Object.freeze({getEntity:t,listEntities:n})}function yee(e){let{identity:t,views:n}=e;return Object.freeze({domain:e.domain,themeCSS:e.themeCSS,identity:Object.freeze({getProfile:()=>t.getProfile()}),entityService:hee(e.entityService),views:Object.freeze({get:(r)=>n.get(r)})})}var bee=i.string().min(1).refine((e)=>!e.startsWith("/")&&!e.includes("\\")&&e.split("/").every((t)=>t!==""&&t!==".."),{message:"A feed path is relative to the build output"}),vee=i.object({items:i.array(i.object({operation:i.enum(["upsert","delete"]),id:i.string(),source:Gi.optional()}))});function Z$(e,t){return e.markdown?.encode?e.markdown.encode({content:t.content,metadata:e.metadata.parse(Ap(e,t.metadata))}):{content:t.content,frontmatter:t.metadata}}function W$(e,t){let n=Z$(e,t);return Yi(n.content,n.frontmatter)}function See(e){let t=lr(e);return Xe(t.data)&&Object.keys(t.data).length>0?t.content:e}function wee(e,t){let n=new Set([...Object.keys(e.shape),...Object.keys(t?.shape??{})]);return i.object(Object.fromEntries([...n].map((r)=>[r,i.unknown()])))}function xee(e){return{frontmatterSchema:xh(e)??e.metadata,...xh(e)&&{writtenFrontmatterSchema:wee(e.metadata,xh(e))},toMarkdown(t){return W$(e,{...t,content:See(t.content)})},fromMarkdown(t){let n=Pn(t,mee),r=e.markdown?e.markdown.decode({content:n.content,frontmatter:n.metadata}):{content:n.content,metadata:n.metadata};return{...e.singleton===!0&&{id:e.type},content:r.content,metadata:e.metadata.parse(Ap(e,r.metadata))}},parseFrontMatter:(t,n)=>Pn(t,n).metadata,generateFrontMatter(t){return tp(Z$(e,t).frontmatter)},metadataFromFrontmatter:!0}}function Tee(e){return{toMarkdown:(t)=>t.content,fromMarkdown(t){let n=e.markdown?.decode({content:t,frontmatter:{}}),r=e.type;if(!n)return{entityType:r,content:t};let o={...n.metadata};return Object.keys(o).length>0?{entityType:r,content:n.content,metadata:o}:{entityType:r,content:n.content}},parseFrontMatter:(t,n)=>n.parse({}),generateFrontMatter:()=>""}}function Cee(e){let t=kl(e),n=e.stub;return{entityType:e.type,purpose:e.purpose,schema:t,...e.config?.binaryStorage===void 0?xee(e):Tee(e),extractMetadata:(r)=>hD(e)?.(r.metadata)??r.metadata,getBodyTemplate:()=>fD(e),...wD(e)&&{writesInDocumentOrder:!0},...n&&{buildStub:(r)=>{let o=n(r);return{content:o.content,metadata:{...o.metadata}}}},...e.singleton===!0&&{isSingleton:!0},...e.hasBody!==void 0&&{hasBody:e.hasBody},...e.coverImage===!0&&{supportsCoverImage:!0},...e.create?.fields&&{createFieldsSchema:e.create.fields},...e.displayTitle&&{displayTitle:(r)=>Iee(e,r)}}}function Iee(e,t){let n=e.metadata.safeParse(Ap(e,t.metadata));return n.success?e.displayTitle?.({content:t.content,metadata:n.data}):void 0}async function Eee(e,t,n){let r=kl(e.source).parse(t),o=[];return await e.project({source:r,signal:n,target:{async upsert(a){let s=Gi.parse(e.target.metadata.parse(a.metadata)),l=a.visibility??r.visibility;o.push({operation:"upsert",entity:{id:a.id,entityType:e.target.type,content:Wc(W$(e.target,{content:a.content,metadata:s}),l),metadata:s,visibility:l}})}}}),o}function Ree(e){return"load"in e&&typeof e.load==="function"&&"view"in e.definition&&typeof e.definition.view==="function"}var uI=Object.freeze({config:Object.freeze({}),state:Object.freeze({}),accountSettings:void 0});function kee(e){let t=e.entities;return Object.freeze({entities:Object.freeze({getEntity:t.getEntity.bind(t),listEntities:t.listEntities.bind(t),getEntityTypes:t.getEntityTypes.bind(t),hasEntityType:t.hasEntityType.bind(t),getEntityTypeConfig:t.getEntityTypeConfig.bind(t),isProjectionOwnedEntity:t.isProjectionOwnedEntity.bind(t)}),resolvePrompt:e.resolvePrompt.bind(e),appInfo:e.appInfo.bind(e),identityInput:e.identityInput.bind(e)})}function Aee(e){let t=e.ai;return Object.freeze({ai:Object.freeze({generate:t.generate.bind(t),generateObject:t.generateObject.bind(t)}),logger:e.logger})}function _ee(e,t,n){return RT({id:n(e.id),version:t,sources:[{kind:"entity",types:[e.source.type]}],targetType:e.target.type,inputSchema:Gi,async selectInput(r,o){let a=r.inputs.filter(({sourceType:l})=>l===e.source.type),s=await Promise.all(a.map(async(l)=>{if(l.operation==="delete")return{operation:"delete",id:l.sourceId};let c=await o.entities.getEntity({entityType:l.sourceType,id:l.sourceId,visibilityScope:zt("projection rule loads source entity")});if(!c)throw Error(`Projection "${e.id}" could not load ${l.sourceType}:${l.sourceId}`);return{operation:"upsert",id:l.sourceId,source:c}}));return Gi.parse({items:s})},async derive(r,o,a){let s=vee.parse(r),l=[];for(let c of s.items){if(a.throwIfAborted(),c.operation==="delete"){l.push({operation:"delete",entityType:e.target.type,id:c.id});continue}if(!c.source)throw Error(`Projection "${e.id}" upsert item ${c.id} is missing its source`);l.push(...await Eee(e,c.source,a))}return l}})}class G$ extends hu{entityTypeConfig;projections;scope;validatePersist;seed;templates;dataSources;packageDataSourceIds;feed;definition;create;attachments;jobs;generation;projectionRules;packageTypes;permissions;releases=[];dashboardWidgetIds=[];widgetAbort=new AbortController;entityType;schema;adapter;constructor(e,t,n,r,o,a,s){super(r(e.type),n,{},MC,e.actions&&{[e.type]:Fh.parse(e.actions)});if(this.entityTypeConfig=gN(e.classification,e.config),this.projections=t,this.scope=r,this.validatePersist=e.validatePersist,this.seed=e.seed,this.templates=e.templates,this.dataSources=o,this.packageDataSourceIds=a,this.packageTypes=s,e.feed)bee.parse(e.feed.path);this.feed=e.feed,this.definition=e,this.create=e.create,this.attachments=e.attachments,this.jobs=e.jobs??{};let l=this.jobs.generation;if(l!==void 0&&(e.generation!==void 0||LT(l)===void 0))throw Error(`${e.type} declares a job named "generation", the name a create route gives its own generation`);this.generation=e.generation,this.entityType=e.type,this.schema=kl(e),this.adapter=Cee(e);let c=e.projectionRules;this.projectionRules=(typeof c==="function"?c({template:(u)=>this.templateName(u)}):c??[]).map((u)=>this.declaredProjectionRule(u))}declaredProjectionRule(e){if(e.targetType!==this.entityType)throw Error(`Projection rule "${e.id}" on ${this.entityType} writes ${e.targetType}`);return Object.freeze({...e,selectInput:(t,n,r)=>e.selectInput(t,kee(n),r),derive:(t,n,r)=>e.derive(t,Aee(n),r)})}getEntityTypeConfig(){return this.entityTypeConfig}templateName(e){if(!Object.hasOwn(this.templates??{},e))throw Error(`${this.entityType} declares no template named "${e}"`);return`${this.id}:${e}`}ownsType(e){return this.packageTypes.has(e)}asPackage(e){let t=va(e.jobAuthority);return pu(e.entityService,()=>t,(n)=>this.ownsType(n))}generationHandler(e,t,n,r=!1,o=!1){return new WC(this.logger,e,t,{entityType:this.entityType,jobTypeName:n,template:(a)=>this.templateName(a),ownsType:(a)=>this.ownsType(a),retries:this.retries,reportsToPipeline:r,readsLegacyRawData:o,pluginId:this.id,runtime:(a)=>this.runBinding(e,a,"a generation")})}async getInstructions(){return this.definition.instructions}async runScheduledGeneration(e,t){let n=(r)=>e.messaging.command(Hh,{entityType:this.entityType,error:r});try{let r=va(e.jobAuthority),o=await r.access(),a=(u)=>vs(r,this.ownsType(u),o),s=await e.entityService.listEntities({entityType:t.from.entityType,options:{limit:t.from.limit,filter:{visibilityScope:a(t.from.entityType),...t.from.status!==void 0&&{metadata:{status:t.from.status}}}}}),l=await this.scheduledInput(e,t,s.map(({id:u})=>u),a(this.entityType));if(!l){await n(`No ${[t.from.status,t.from.entityType].filter(Boolean).join(" ")} available to write a ${this.entityType} from`);return}let c={...await jl(e.jobAuthority,void 0,l),...qe({source:Gp(l)})};await this.retries.run(()=>e.jobs.enqueue({type:`${this.entityType}:generation`,data:c,toolContext:{interfaceType:"job",actor:{kind:"service",serviceId:this.id}}}),`queue a scheduled ${this.entityType} generation`,`generate:${this.entityType}`)}catch(r){await n(he(r))}}async scheduledInput(e,t,n,r){if(n.length===0)return null;let o=t.from.entityType;if(t.mode==="batch")return{sourceEntityType:o,sourceEntityIds:[...n]};let a=await Promise.all(n.map((l)=>e.entityService.listEntities({entityType:this.entityType,options:{filter:{visibilityScope:r,metadata:{sourceEntityType:o,sourceEntityId:l}},limit:1}}))),s=n.find((l,c)=>a[c]?.length===0);return s?{sourceEntityType:o,sourceEntityId:s}:null}createGenerationHandler(e){return this.generation?this.generationHandler(e,this.generation,`${this.entityType}:generation`,this.definition.scheduledGeneration!==void 0,!0):null}getTemplates(){let e=this.templates;if(!e)return null;let t=this.packageDataSourceIds;return Object.fromEntries(Object.entries(e).map(([n,r])=>[n,r.dataSourceId&&t.has(r.dataSourceId)?{...r,dataSourceId:this.scope(r.dataSourceId)}:r]))}getDataSources(){return this.dataSources.map((e)=>kD(e,this.scope(e.id),this.logger))}requiredLevel(e,t){if(!this.permissions)throw Error(`Entity type "${this.entityType}" is not registered`);return this.permissions.getEntityActionRequiredLevel(e,t)}async register(e,t){return this.permissions=e.getPermissionService(),super.register(e,t)}async onRegister(e){let t=this.validatePersist;if(t)e.entities.registerPersistValidator(this.entityType,async(b)=>{await t(Object.freeze({content:b.content,visibility:b.visibility}))});if(Object.entries(this.jobs).forEach(([b,x])=>{let T={declaring:this.definition,requiredLevel:(y,R)=>this.requiredLevel(y,R)},C=(y)=>this.ownsType(y),S=LT(x);if(S){if(S.type!==`${this.id}:${b}`)throw Error(`Job "${b}" of ${this.entityType} answers "${S.type}" but is declared as "${this.id}:${b}"`);if("generate"in x)throw Error(`Contract job "${S.type}" handles its own work`);e.jobs.registerHandler(b,zN(x,e,C,T,this.id,(y)=>this.templateName(y)));return}e.jobs.registerHandler(b,"generate"in x?this.generationHandler(e,x,b):DN(x,e,C,T,(y)=>this.runBinding(e,y,"a job")))}),this.generation){let b=`${this.entityType}:generation`;e.entities.registerGenerationEnqueuer(this.entityType,async(x,T)=>{let{entityId:C,...S}=x,y=await jl(e.jobAuthority,Ol(T),S);return e.jobs.enqueue({type:b,data:{...y,...typeof C==="string"&&{entityId:C},...qe({source:Gp(x)})},toolContext:T})})}let n=this.create,r=bD(this.definition);if(n||r)this.registerCreateRouting(e,n??{},r);Object.entries(this.definition.evals??{}).forEach(([b,x])=>{e.eval.registerHandler(b,(T)=>x(T,_l({ai:Wp(e,(C)=>this.templateName(C)),entities:this.asPackage(e),fixtures:ON(e,this.entityType)},{...this.runtimeBinding(e,this.asPackage(e),"an eval"),runGeneration:(C,S)=>this.runGenerationForEval(e,C,S)})))});let o=this.definition.agentContext,a=this.definition.scheduledGeneration,s=this.seed,l=this.feed,c=this.definition.atproto,u=this.definition.publish,d=u&&TD(u.provider,this.logger),p=this.definition.publishAssets??[];for(let b of this.definition.analyticsReports??[])e.analytics.register({type:b.type,description:b.description,params:b.params,...qe({minVisibility:b.minVisibility}),handler:(x,{entityService:T,visibilityScope:C})=>b.report(x,Object.freeze({entities:Ur(T,C),visibility:C}))});let f=(this.definition.dashboardWidgets?.(uI)??[]).map((b)=>this.boundWidget(b)),g=f.map(({definition:b})=>b.id),h=g.find((b,x)=>g.indexOf(b)!==x);if(h)throw Error(`${this.entityType} binds dashboard widget "${h}" twice`);let w=this.definition.inbox;if(w)e.inbox.registerSource(this.inboxSource(e,w));let v=this.attachments?.length?yee(e):void 0;this.releases=[...pD(this.definition).map((b)=>e.messaging.answer(b.contract,async(x,{sender:T})=>b.handle({request:x,sender:T,entities:await jN(e,this.id,(C)=>this.ownsType(C),{declaring:this.definition,requiredLevel:(C,S)=>this.requiredLevel(C,S)})}),b.everyProcess===!0?{everyProcess:!0}:{})),...o?[e.messaging.answer(B$,async(b)=>({items:[...await o(Object.freeze({request:dI(structuredClone(b)),entities:Ur(e.entityService,Tr(b.userPermissionLevel))}))]}))]:[],...a?[e.messaging.answer(U$,async({entityType:b})=>{if(b===this.entityType)await this.runScheduledGeneration(e,a)})]:[],...(this.attachments??[]).flatMap((b)=>v?[e.attachments.register(this.entityType,b.type,b.provider(v))]:[]),...s?[e.messaging.subscribe(pee[s.on],async()=>(await this.plantSeed(e,s),{success:!0}))]:[],...l?[e.messaging.answer(L$,(b)=>this.stageFeed(e,l,b),{everyProcess:!0})]:[],...(this.definition.checks??[]).map((b)=>e.recurringChecks.register({id:b.id,cadence:b.cadence,...qe({deliverAlerts:b.deliverAlerts,includeInInbox:b.includeInInbox}),run:({signal:x})=>b.run(Object.freeze({entities:this.asPackage(e),siteUrl:e.siteUrl,signal:x}))})),...c?[e.atprotoProjections.register(this.atprotoProjection(e,c))]:[],...f.length>0?[e.messaging.subscribe(so.pluginsRegistered,async()=>(await this.registerDashboardWidgets(e,f),{success:!0}))]:[],...u||p.length>0?[e.messaging.subscribe(so.pluginsRegistered,async()=>{if(u)await e.messaging.command(q$,{entityType:this.entityType,provider:d??u.provider,config:{executionMode:"provider",...qe({publishResultIdField:u.resultIdField,publishTimestampField:u.timestampField})}});for(let b of p)await e.messaging.command(F$,{entityType:this.entityType,attachmentType:b.attachmentType,mediaEntityType:"image",targetEntityField:{location:"frontmatter",field:b.field},...qe({requiredWhen:b.requiredWhen}),autoGenerate:!0});return{success:!0}})]:[]]}async registerDashboardWidgets(e,t){if(e.executionOnly||!e.dashboard.isAvailable())return;for(let n of t)if(await e.dashboard.registerWidget(Xp({publicServiceId:this.id,packageName:this.packageName,config:uI.config,state:uI.state,binding:n,context:e,runtimeSignal:this.widgetAbort.signal})))this.dashboardWidgetIds.push(n.definition.id)}boundWidget(e){if(Ree(e))return e;throw Error(`${this.entityType} dashboard widget "${e.definition.id}" is not bound; bind it with defineDashboardWidget(...).bind(context, load)`)}records(e,t){let n=this.definition,r=Ur(e.entityService,t);return Object.freeze({get:(o)=>r.get(n,o),list:(o)=>r.list(n,o)})}inboxSource(e,t){let n=zt("the declared Inbox lists as its package"),r=(a)=>{let s=Tr(a.permissionLevel);return{actor:a,records:this.records(e,s),entities:Ur(e.entityService,s)}},o=t.resolveDetail?.bind(t);return{sourceId:t.sourceId,displayName:t.displayName,...t.facets?{facets:[...t.facets]}:{},list:async()=>[...await t.list(Object.freeze({records:this.records(e,n),entities:this.asPackage(e)}))],...o&&{resolveDetail:(a,s,l)=>o(a,Object.freeze({...r(s),signal:l}))},act:(a,s,l)=>t.act(a,s,Object.freeze({...r(l),edits:this.inboxEdits(e,l)}))}}inboxEdits(e,t){let n=this.entityType,r=(l)=>e.permissions.assertEntityActionAllowed(n,l,{userPermissionLevel:t.permissionLevel}),o=(l)=>{if(l.entityType!==n)throw Error(`An Inbox action on ${n} cannot write ${l.entityType}`)},a=()=>Error(`The ${n} changed meanwhile; try again`),s=async(l,c,u)=>{if(r(u),o(l),!(await e.entityService.updateEntity({entity:{...l,content:c.content??l.content,metadata:this.definition.metadata.parse(c.metadata??l.metadata)},options:{expectedContentHash:l.contentHash}})).skipped)return;if((await e.entityService.getEntity({entityType:n,id:l.id,visibilityScope:zt("an Inbox write checks its read")}))?.contentHash!==l.contentHash)throw a()};return Object.freeze({update:(l,c)=>s(l,c,"update"),publish:(l,c)=>s(l,c,"publish"),delete:async(l)=>{if(r("delete"),o(l),!await e.entityService.deleteEntity({entityType:n,id:l.id,options:{expectedContentHash:l.contentHash}}))throw a()}})}atprotoProjection(e,t){let n=this.definition,r=Ur(e.entityService,"public"),o=t.isPublishable?.bind(t);return{entityType:this.entityType,collection:t.lexicon.id,lexicon:t.lexicon,...qe({validate:t.validate}),...o&&{isPublishable:(a)=>{let s=kl(n).safeParse(a);return s.success?o(s.data):!0}},buildRecord:async({entity:a,config:s,client:l,pageUrl:c,topics:u,dryRun:d})=>t.buildRecord(Object.freeze({entity:Al(n,a),config:Object.freeze(qe({brainDid:s.brainDid,anchorDid:s.anchorDid})),...qe({pageUrl:c,topics:u&&Object.freeze([...u])}),dryRun:d===!0,entities:r,uploadBlob:async({data:p,mimeType:f})=>{if(d)return{$type:"blob",ref:{$link:"dry-run"},mimeType:f,size:p.byteLength};if(!l?.uploadBlob)throw Error("AT Protocol PDS client does not support blob uploads");return(await l.uploadBlob({data:p,mimeType:f})).blob}}))}}registerCreateRouting(e,t,n){let r=(a,s)=>this.routeCreate(e,t,n,a,s);e.entities.registerCreateInterceptor(this.entityType,r),e.entities.registerCreateCheck(this.entityType,async(a,s)=>{let l=$$(t,a,n);if(!l)return{kind:"ready"};if("reject"in l)return{kind:"error",error:l.reject};return l.check?l.check(this.createContext(e,a,s)):{kind:"ready"}});let o=t.fromUpload?.mediaTypes??[];if(o.length>0)e.entities.registerUploadSaveHandler({entityType:this.entityType,mediaTypes:[...o],handler:jC(this.entityType,r,`Upload was not handled by ${this.entityType}`)})}async routeCreate(e,t,n,r,o){let a=$$(t,r,n);if(!a)return{kind:"continue",input:r};if("reject"in a)return{kind:"handled",result:Ar(a.reject)};let s=await a.resolve(this.createContext(e,r,o)),l=aD(s);if(l){let{targetEntityId:d}=l.options,p={...r,...d!==void 0&&{targetEntityId:d}};if(!l.document)return{kind:"continue",input:p};let{fields:f,...g}=p,{title:h,content:w,fields:v}=l.document;return{kind:"continue",input:{...g,...h!==void 0&&{title:h},content:w,...v!==void 0&&{fields:{...v}}}}}let c=sD(s);if(c)return{kind:"handled",result:await this.applyQueuedCreate(e,c,r,o)};let u=lD(s);if(u)return{kind:"handled",result:await this.applyStoredCreate(e,u,r,o)};return{kind:"handled",result:await this.applyCreateResolution(e,s,r,o)}}createContext(e,t,n){let r=e.uploads.scoped(Lo),o=Object.freeze({read:(s)=>r.read(s),readRecord:(s)=>r.readRecord(s)}),a=Ur(e.entityService,this.callerScope(n));return _l({input:dI(structuredClone(t)),entities:a,uploads:o},{...this.runtimeBinding(e,a,"a create route",{service:e.entityService,scope:()=>"public"}),caller:fee(n)})}runtimeBinding(e,t,n,r){return{where:n,reader:t,...r&&{anyEntities:r},packageReader:this.asPackage(e),ownsType:(o)=>this.ownsType(o),searchWithDistances:(o)=>e.entityService.searchWithDistances(o),generateObject:(o,a)=>e.ai.generateObject(o,a),generate:Wp(e,(o)=>this.templateName(o)).generate,logger:e.logger,identity:Object.freeze({getProfile:()=>e.identity.getProfile()})}}async runGenerationForEval(e,t,n={}){let r=this.generation;if(!r)throw Error(`Entity "${this.entityType}" declares no generation`);let o=this.generationHandler(e,r,`${this.entityType}:generation`,this.definition.scheduledGeneration!==void 0),a=o.validateAndParse(await jl(e.jobAuthority,void 0,t));if(a===null)return{success:!1,error:"Invalid generation input"};let s=n.onProgress,l=s?$o.from(async({progress:u,message:d})=>{await s({progress:u,...qe({message:d})})}):void 0;return{...await o.process(a,`eval-${Date.now()}`,l??$o.noop())}}runBinding(e,t,n){return this.runtimeBinding(e,t.entities,n,{service:e.entityService,scope:(r)=>t.scope(r)})}callerScope(e){return Tr(e.userPermissionLevel)}async applyCreateResolution(e,t,n,r){if("delegate"in t)return this.applyDelegation(e,t,n,r);if("refuse"in t)return Ar(t.refuse);let o=this.callerScope(r),a={actor:r.actor,interfaceType:r.interfaceType};if("existing"in t){let d=await e.entityService.getEntity({entityType:this.entityType,id:t.existing.id,visibilityScope:o});if(!d)return Ar(`Cannot reuse ${this.entityType} "${t.existing.id}", which does not exist`);return this.createSuccess("existing",d.id,t.attachment)}let s="update"in t?t.update:t.create,l=this.definition.metadata.safeParse(s.metadata);if(!l.success)return Ar(this.invalid(l.error));if("update"in t){let d=await e.entityService.getEntity({entityType:this.entityType,id:t.update.id,visibilityScope:o});if(!d)return Ar(`Cannot update ${this.entityType} "${t.update.id}", which does not exist`);let p=await e.entityService.updateEntity({entity:{...d,content:t.update.content,metadata:l.data},options:{eventContext:a}});return this.createSuccess("updated",p.entityId,void 0)}let c=await e.entityService.getEntity({entityType:this.entityType,id:t.create.id,visibilityScope:zt("create route checks whether its id is taken; no content returned")}),u=`A ${this.entityType} "${t.create.id}" already exists`;if(c)return Ar(u);try{let d=await e.entityService.createEntity({entity:{id:t.create.id,entityType:this.entityType,content:t.create.content,metadata:l.data,...n.visibility!==void 0&&{visibility:n.visibility}},options:{conditionalWrite:{expectedRevision:null},eventContext:a}});return this.createSuccess("created",d.entityId,t.attachment)}catch(d){if(d instanceof Rr)return Ar(u);throw d}}invalid(e){return`Invalid ${this.entityType} metadata: ${e.issues.map(({path:t,message:n})=>`${t.join(".")||"metadata"}: ${n}`).join("; ")}`}async applyDelegation(e,t,n,r){let{job:o,input:a={}}=t.delegate,s=o==="generation"?this.generation:void 0,l=s??(Object.hasOwn(this.jobs,o)?this.jobs[o]:void 0);if(!l)return Ar(`${this.entityType} declares no job named "${o}"`);if((("create"in t)||("existing"in t))&&!("generate"in l))return Ar(`${this.entityType} job "${o}" does not generate, so it cannot fill an allocated entity`);let u=l.input.safeParse(a);if(!u.success)return Ar(`Invalid input for ${this.entityType} job "${o}": ${u.error.issues.map(({message:g})=>g).join("; ")}`);let d=await jl(e.jobAuthority,Ol(r),a),p=await this.allocate(e,t,n,r);if("error"in p)return Ar(p.error);let f=p.entityId;try{let g={...d,...f!==void 0&&{entityId:f},..."generate"in l&&qe({source:Gp(n)})},h=s?await e.jobs.enqueue({type:`${this.entityType}:generation`,data:g,toolContext:r,options:{source:this.id,metadata:{operationType:"content_operations"}}}):await e.jobs.enqueue({type:o,data:g,toolContext:{interfaceType:r.interfaceType,actor:r.actor,...qe({channelId:r.channelId})}}),w="attachment"in t?t.attachment:void 0;return{success:!0,data:{status:"generating",jobId:h,...f!==void 0&&{entityId:f,...w&&{attachment:qc.parse(w({entityId:f}))}}}}}catch(g){if(p.written)await e.entityService.deleteEntity({entityType:this.entityType,id:p.written}).catch((h)=>{this.logger.warn("Failed to remove an unqueued placeholder",{entityId:p.written,error:h})});return Ar(he(g))}}async allocate(e,t,n,r){if("existing"in t){let s=await e.entityService.getEntity({entityType:this.entityType,id:t.existing.id,visibilityScope:this.callerScope(r)});return s?{entityId:s.id}:{error:`Cannot reuse ${this.entityType} "${t.existing.id}", which does not exist`}}if(!("create"in t))return{entityId:void 0};let o=this.definition.metadata.safeParse(t.create.metadata);if(!o.success)return{error:this.invalid(o.error)};let a=await e.entityService.createEntity({entity:{id:t.create.id,entityType:this.entityType,content:t.create.content,metadata:o.data,...n.visibility!==void 0&&{visibility:n.visibility}},options:{deduplicateId:!0,eventContext:{actor:r.actor,interfaceType:r.interfaceType}}});return{entityId:a.entityId,written:a.entityId}}async applyQueuedCreate(e,t,n,r){let o=lI(t),a=t.placeholder;if(a?.deduplicate===!0)return this.applyDeduplicatedQueuedCreate(e,t,a,r);if(a){let s=this.definition.metadata.safeParse(a.metadata);if(!s.success)return Ar(this.invalid(s.error));let l=new Date().toISOString(),c=await GC({entityService:e.entityService,entity:{id:t.entityId,entityType:this.entityType,content:a.content,metadata:s.data,...a.visibility!==void 0&&{visibility:a.visibility},created:l,updated:l},...o&&{options:{eventContext:cI(r)}}});if(a.visibility!==void 0&&c.existingEntity!==void 0&&c.existingEntity.visibility!==a.visibility)return Ar(`Existing ${this.entityType} visibility "${c.existingEntity.visibility}" does not match requested visibility "${a.visibility}".`)}return this.queueFill(e,t,r,t.entityId)}async applyDeduplicatedQueuedCreate(e,t,n,r){let o=this.definition.metadata.safeParse(n.metadata);if(!o.success)return Ar(this.invalid(o.error));let a=new Date().toISOString(),s=await e.entityService.createEntity({entity:{id:t.entityId,entityType:this.entityType,content:n.content,metadata:o.data,...n.visibility!==void 0&&{visibility:n.visibility},created:a,updated:a},options:{deduplicateId:!0,...lI(t)&&{eventContext:cI(r)}}});return this.queueFill(e,t,r,s.entityId)}async writtenPlaceholder(e,t){let n=await e.entityService.getEntity({entityType:this.entityType,id:t,visibilityScope:zt("read back the placeholder a queued create wrote; only its hash is handed on")});if(!n)throw Error(`The ${this.entityType} placeholder "${t}" could not be read back`);return{entityId:n.id,contentHash:n.contentHash}}async queueFill(e,t,n,r){let{data:o}=t.job,a=await e.jobs.enqueue(t.job.contract,typeof o==="function"?o(await this.writtenPlaceholder(e,r)):o,...lI(t)?[{options:gee(this.id,n,typeof t.job.attributed==="object"?t.job.attributed:void 0)}]:[]);return{success:!0,data:{entityId:r,status:"generating",jobId:a,...t.attachment!==void 0&&{attachment:qc.parse(t.attachment)}}}}async applyStoredCreate(e,t,n,r){let o=this.definition.metadata.safeParse(t.record.metadata);if(!o.success)return Ar(this.invalid(o.error));let a=new Date().toISOString(),s=await e.entityService.createEntity({entity:{id:t.record.id,entityType:this.entityType,content:t.record.content,metadata:o.data,...n.visibility!==void 0&&{visibility:n.visibility},created:a,updated:a},options:{deduplicateId:!0,eventContext:cI(r)}});return{success:!0,data:{entityId:s.entityId,status:"created",attachment:qc.parse(t.attachment({entityId:s.entityId}))}}}createSuccess(e,t,n){return{success:!0,data:{status:e,entityId:t,...n&&{attachment:qc.parse(n({entityId:t}))}}}}async onShutdown(){this.releases.forEach((n)=>n()),this.releases=[],this.widgetAbort.abort();let e=this.getContext(),t=this.dashboardWidgetIds.splice(0);await Promise.all(t.map(async(n)=>{try{await e.dashboard.unregisterWidget(n)}catch(r){this.logger.error("Failed to unregister a declared dashboard widget",{widgetId:n,error:he(r)})}}))}async stageFeed(e,t,n){try{await this.writeFeed(e,t,n)}catch(r){this.logger.error(`Failed to write the ${this.entityType} feed`,r),n.reportFailure(`${this.entityType} feed generation failed: ${he(r)}`)}}async writeFeed(e,t,n){let r=await e.entityService.listEntities({entityType:this.entityType,options:{limit:1000,publishedOnly:n.environment==="production"}}),o=Object.freeze({environment:n.environment}),a=r.flatMap((d)=>{let p=t.toItem(Al(this.definition,d),o);return p?[JT.parse(p)]:[]});if(a.length===0)return;let s=n.siteConfig.url??"https://example.com",l=s.replace(/\/+$/u,""),c=VT(a,{title:n.siteConfig.title??t.title??"Feed",description:n.siteConfig.description??t.description??"Latest updates",link:s,selfLink:`${s}/${t.path}`},(d)=>`${l}/${n.generateEntityUrl(this.entityType,d.slug).replace(/^\/+/u,"")}`),u=dee(n.outputDir,t.path);await lee(uee(u),{recursive:!0}),await cee(u,c,"utf8")}async plantSeed(e,t){if(await e.entityService.getEntity({entityType:this.entityType,id:t.id,visibilityScope:zt("seed checks whether its default exists; no content returned")}))return;try{await e.entityService.createEntity({entity:{id:t.id,entityType:this.entityType,content:t.content(),metadata:t.metadata??{}},options:{conditionalWrite:{expectedRevision:null}}})}catch(r){if(!(r instanceof Rr))throw r}}getProjectionRules(){return[...this.projections.map((e)=>_ee(e,this.version,this.scope)),...this.projectionRules]}}function Pee(e,t,n){return e.kind==="rizom-entity-data-source"?e.entity===t:n[0]===t}function ry(e,t,n,r,o=[],a=new Map){let s=new Set(o.map(({id:c})=>c)),l=new Set(e.map(({type:c})=>c));return e.map((c)=>new G$(a.get(c)??c,t.filter(({source:u})=>u===c),n,r,o.filter((u)=>Pee(u,c,e)),s,l))}function Oee(e){if(Jt(e.type,"Entity type"),e.scheduledGeneration){if(!e.generation)throw Error(`Entity "${e.type}" declares a scheduled generation but no generation`);hN.parse(e.scheduledGeneration)}if(Object.keys(e.jobs??{}).forEach((n)=>Jt(n,"Job name")),!e.purpose.trim())throw Error(`Entity "${e.type}" purpose must not be empty`);if(e.config?.binaryStorage!==void 0&&e.coverImage===!0)throw Error(`Entity "${e.type}" stores binary content, which carries no cover image`);Mee(e);let t=(e.checks??[]).map(({id:n})=>n);return t.forEach((n,r)=>{if(Jt(n,"Check id"),t.indexOf(n)!==r)throw Error(`Entity "${e.type}" declares check "${n}" twice`)}),Object.freeze({kind:"rizom-entity",...e,classification:Oc.parse(e.classification)})}function Mee(e){let t=new Set(e.attachments?.map(({type:n})=>n));for(let n of e.publishAssets??[]){if(!t.has(n.attachmentType))throw Error(`Entity "${e.type}" publish asset renders from "${n.attachmentType}", which ${e.type} does not attach`);if(n.field==="coverImageId"&&e.coverImage!==!0)throw Error(`Entity "${e.type}": ${e.type} records a cover image but does not declare coverImage`)}}function jee(e){if(Jt(e.type,"Analytics report type"),!e.description.trim())throw Error(`Analytics report "${e.type}" description must not be empty`);return Object.freeze({kind:"rizom-analytics-report",...e})}function Dee(e){if(Object.hasOwn(e,"handle")===Object.hasOwn(e,"generate"))throw Error("An entity job either handles or generates \u2014 not both or neither");return Object.freeze({...e})}function zee(e){return Jt(e.id,"Projection id"),Object.freeze({kind:"rizom-projection",...e})}var Nee=i.object({}),iy=["create","evals","publish","projectionRules","jobs","generation"];function $ee(e,t,n){let[r,...o]=t;if(!r||o.length>0)throw Error(`Entity package "${e}" keeps a legacy plugin id only when it installs one plugin`);return(a)=>(Jt(a,"Local plugin id"),a===r.type?n:`${n}:${a}`)}function oy(e,t,n){let r=n.map(({id:a})=>a);if(new Set(r).size!==r.length)throw Error(`Entity package "${e}" contains duplicate data source ids`);if(n.length>0&&t.size===0)throw Error(`Entity package "${e}" declares data sources but no entities to install them`);let o=n.find((a)=>a.kind==="rizom-entity-data-source"&&!t.has(a.entity));if(o)throw Error(`Entity package "${e}" data source "${o.id}" reads an entity outside its package`)}function Bee(e,t,n){let r=new Map;for(let o of n){let{entity:a}=o;if(!t.has(a))throw Error(`Entity package "${e}" configures "${a.type}", which is outside its package`);if(r.has(a))throw Error(`Entity package "${e}" configures "${a.type}" twice`);let s=Object.keys(o).find((c)=>c!=="entity"&&!iy.some((u)=>u===c));if(s!==void 0)throw Error(`Entity package "${e}" cannot configure the ${s} of "${a.type}"; configure binds ${iy.join(", ")}`);for(let c of iy)if(o[c]!==void 0&&a[c]!==void 0)throw Error(`Entity package "${e}" configures the ${c} of "${a.type}", which declares it already`);let l=Object.fromEntries(iy.flatMap((c)=>o[c]===void 0?[]:[[c,o[c]]]));r.set(a,Object.freeze({...a,...l}))}return r}function Lee(e){let t=Object.freeze([...e.entities]),n=Object.freeze([...e.projections??[]]),r=Object.freeze([...e.dataSources??[]]),o=new Set(t),a=t.map(({type:d})=>d);if(new Set(a).size!==a.length)throw Error(`Entity package "${e.id}" contains duplicate entity types`);oy(e.id,o,r);let s=n.map(({id:d})=>d);if(new Set(s).size!==s.length)throw Error(`Entity package "${e.id}" contains duplicate projection ids`);let l=n.find(({source:d,target:p})=>!o.has(d)||!o.has(p));if(l)throw Error(`Entity package "${e.id}" projection "${l.id}" references an entity outside its package`);let c=e.configure,u={entities:t,projections:n,dataSources:r};return ga({family:"entity",id:e.id,config:e.config??Nee,public:u,instantiate:({config:d,package:p,scope:f,pluginId:g})=>{let h=c?.({config:d})??{},w=Object.freeze([...r,...h.dataSources??[]]);return oy(e.id,o,w),ry(t,n,p,g===void 0?f:$ee(e.id,t,g),w,Bee(e.id,o,h.entities??[]))}})}var ay="[secret]",qee=Symbol.for("nodejs.util.inspect.custom");class J${#e;constructor(e){this.#e=e,Object.defineProperty(this,qee,{value:()=>ay}),Object.freeze(this)}reveal(){return this.#e}toJSON(){return ay}toString(){return ay}[Symbol.toPrimitive](){return ay}}function V$(e,t){return Object.freeze(Object.fromEntries(Object.entries(t).map(([n,r])=>[n,e.fields[n]?.secret===!0&&r!==void 0?new J$(r):r])))}function pI(e){Si(e.title,"Account settings title"),Ep(e.description,"Account settings description");let t=Object.keys(e.schema.shape),n=new Set(Object.keys(e.fields));for(let[o,a]of Object.entries(e.fields)){if(!t.includes(o))throw Error(`Account settings field "${o}" is not declared by the settings schema`);if(Si(a.label,`Account settings field "${o}" label`),a.control!==void 0&&!HN.safeParse(a.control).success)throw Error(`Account settings field "${o}" has unsupported control "${String(a.control)}"`);if(a.secret!==void 0&&typeof a.secret!=="boolean")throw Error(`Account settings field "${o}" secret must be boolean`)}for(let o of t)if(!n.has(o))throw Error(`Account settings schema field "${o}" has no field declaration; declare its label and whether it is secret`);let r=e.fields;for(let o of Object.values(r))Object.freeze(o);return Object.freeze(r),Object.freeze({kind:"rizom-account-settings",...e,fields:r})}var Fee=i.object({url:i.string()}),Uee=2048;function Zee(e){try{let t=new URL(e);return t.protocol==="https:"&&t.origin===e}catch{return!1}}function Wee(e,t){if(!Zee(e))throw Error(`Workspace action "${t}" launch origin "${e}" must be an absolute https origin, such as https://example.com`)}function H$(e,t){if(t.length>Uee)return!1;try{let n=new URL(t);return n.protocol==="https:"&&n.username===""&&n.password===""&&e.origins.includes(n.origin)}catch{return!1}}var Q$=Symbol("rizom.workspace-action-executor");function mI(e){let t=e[Q$];if(!t)throw Error(`Workspace action "${e.definition.name}" was not bound by defineWorkspaceAction().bind()`);return t}function K$(e){if(Jt(e.name,"Workspace action name"),Si(e.label,`Workspace action "${e.name}" label`),e.confirmation?.kind==="static")Si(e.confirmation.message,`Workspace action "${e.name}" confirmation`);if(e.permission!==void 0)Rp(e.permission,`Workspace action "${e.name}"`);let{launch:t,output:n,...r}=e;if(t){if(n!==void 0)throw Error(`Workspace action "${e.name}" launches the browser, so it declares no output`);if(t.origins.length===0||t.origins.length>10)throw Error(`Workspace action "${e.name}" launch declares one to ten origins`);for(let a of t.origins)Wee(a,e.name)}else if(n===void 0)throw Error(`Workspace action "${e.name}" declares an output schema`);let o={kind:"rizom-workspace-action",...r,output:n??Fee,...t&&{launch:Object.freeze({origins:Object.freeze([...t.origins])})},bind(a,s,l){if(o.confirmation?.kind==="prepared"&&!l)throw Error(`Workspace action "${o.name}" requires a prepared confirmation callback`);return Object.freeze({kind:"rizom-workspace-action-binding",definition:o,[Q$]:Object.freeze({execute:s,...l?{prepare:l}:{}})})}};return Object.freeze(o)}function Y$(e){let t=e.delivery;if(t!=="request"&&t!=="command")throw Error(`Bus contract "${e.channel}" must be delivered as a "request" or a "command"`);return Xn(e)}var X$=new WeakMap;function eB(e){if(Jt(e.name,"Job name"),e.retry&&(!Number.isInteger(e.retry.attempts)||e.retry.attempts<1))throw Error(`Job "${e.name}" retry attempts must be at least 1`);if(e.deadline)fI(e.deadline);let t={kind:"rizom-service-job",...e,handle(n){let r=Object.freeze({kind:"rizom-service-job-binding",definition:t});return X$.set(r,async(o)=>n({...o,input:wi(t.input,o.input)})),r}};return Object.freeze(t)}function tB(e){let t=X$.get(e);if(!t)throw Error(`Job "${e.definition.name}" was not created by defineJob().handle()`);return t}function fI(e){let t=/^(\d+)(ms|s|m)$/u.exec(e);if(!t)throw Error(`Invalid job deadline "${e}"`);let n=Number(t[1]);if(!Number.isSafeInteger(n)||n<1)throw Error(`Job deadline "${e}" must be positive`);let r=t[2];return n*(r==="m"?60000:r==="s"?1000:1)}function nB(e){return Jt(e.name,"Tool name"),gI(e)}function gI(e){if(!e.description.trim())throw Error(`Tool "${e.name}" description must not be empty`);return Object.freeze({kind:"rizom-service-tool",...e})}import{AsyncLocalStorage as wB}from"async_hooks";var rB=Symbol("service-content-target");function iB(e,t){if(e.template.includes(":")||!t(e.template))throw Error(`Unknown or non-generatable service template: ${e.template}`);let n=wh.parse({templateName:e.template,context:e.context,destination:{entityType:e.destination.entity.type,idPath:e.destination.idPath,metadata:Ro.parse(e.destination.entity.metadata.parse(e.destination.metadata)),visibility:e.destination.visibility}});return Object.freeze({...n,[rB]:!0})}import{createHash as Gee,randomBytes as Jee}from"crypto";var aB=Object.freeze({ttlMs:600000,maxPending:20});function oB(e){return Gee("sha256").update(e).digest("base64url")}class hI{pending=new Map;ttlMs;maxPending;now;constructor(e){if(!Number.isSafeInteger(e.ttlMs)||e.ttlMs<=0)throw Error("Single-use store TTL must be a positive integer");if(!Number.isSafeInteger(e.maxPending)||e.maxPending<=0)throw Error("Single-use store bound must be a positive integer");this.ttlMs=e.ttlMs,this.maxPending=e.maxPending,this.now=e.now??Date.now}issue(e){this.prune(),[...this.pending.keys()].slice(0,Math.max(0,this.pending.size-this.maxPending+1)).forEach((n)=>this.pending.delete(n));let t=Jee(32).toString("base64url");return this.pending.set(oB(t),{value:e,expiresAt:this.now()+this.ttlMs}),t}take(e,t=()=>!0){this.prune();let n=oB(e),r=this.pending.get(n);if(!r||!t(r.value))return null;return this.pending.delete(n),r.value}prune(){let e=this.now();[...this.pending].filter(([,t])=>t.expiresAt<=e).forEach(([t])=>this.pending.delete(t))}}function Tu(){return Object.freeze({})}function Vee(e,t){if(e.userPermissionLevel!=="admin")throw Error(`${t} requires admin permission`)}import{createHash as Hee,randomUUID as Qee}from"crypto";var Kee=300000,Yee=1000;function yI(e){if(e===null||typeof e!=="object")return JSON.stringify(e);if(Array.isArray(e))return`[${e.map(yI).join(",")}]`;return`{${Object.keys(e).sort().map((t)=>`${JSON.stringify(t)}:${yI(e[t]??null)}`).join(",")}}`}function sB(e){return Hee("sha256").update(yI(e)).digest("hex")}function lB(e={}){let t=e.now??(()=>Date.now()),n=e.maxRecords??Yee,r=new Map;function o(a){r.forEach((s,l)=>{if(s.expiresAt<=a)r.delete(l)}),Array.from(r.keys()).slice(0,Math.max(0,r.size-n+1)).forEach((s)=>r.delete(s))}return{issue({callerId:a,actionId:s,input:l,revision:c}){let u=t();o(u);let d=Qee(),p=u+Kee;return r.set(d,{callerId:a,actionId:s,inputDigest:sB(l),revision:c,expiresAt:p}),{token:d,expiresAt:p}},redeem(a,{callerId:s,actionId:l,input:c}){let u=a?r.get(a):void 0;if(a)r.delete(a);if(u===void 0||u.expiresAt<=t()||u.callerId!==s||u.actionId!==l||u.inputDigest!==sB(c))return;return{revision:u.revision}}}}var Xee=i.object({actionId:i.string().trim().min(1).max(120),input:i.unknown(),mode:i.enum(["prepare","execute"]).default("execute"),confirmationToken:i.string().uuid().optional()}).strict(),ete=i.object({capability:i.object({confirmation:i.literal("prepared").optional()})}).passthrough(),tte=i.array(i.string().trim().min(1).max(120)).max(200).transform((e)=>[...new Set(e)]),nte=i.object({summary:i.string().trim().min(1).max(500),revision:i.string().trim().min(1).max(500)}),sy=i.json(),rte=i.object({url:i.string()});function ite(e,t){if(e.confirmation?.kind!=="prepared")return!1;if(e.confirmation.conditional!==!0)return!0;let n=ete.safeParse(t);return n.success&&n.data.capability.confirmation==="prepared"}function ote(e,t,n){let r=e?.safeParse(t??{});if(r&&!r.success)throw ty(n,"received invalid query state",r.error);let o=r?.data;if(e&&!sy.safeParse(o).success)throw Vt(n,"query state must be JSON-native");return Object.freeze({get(a){if(a!==e)throw Vt(n,"query reader was called with a schema not declared by the workspace");return a.parse(o)}})}function cB(e){return Object.freeze({actor:Object.freeze({id:e.userId,...e.displayName?{displayName:e.displayName}:{}}),permission:e.userPermissionLevel,isAnchor:e.isAnchor})}function uB(e,t){return t?AbortSignal.any([t,e]):e}async function ate(e,t,n){let r=mI(e).prepare;if(!r)throw Error("Prepared confirmation callback is unavailable");return r({...t,input:n})}async function ste(e,t,n,r){return mI(e).execute({...t,...n,input:r})}function vI(e){let t=e.binding.definition,n=G0(e.binding),r={publicServiceId:e.publicServiceId,packageName:e.packageName,surface:"Studio workspace",id:t.id};if(t.query){let C=t.query.safeParse({});if(!C.success)throw Vt(r,"declares a query schema without a valid empty/default state",ao(C.error.issues));if(!sy.safeParse(C.data).success)throw Vt(r,"query state must be JSON-native")}let o=lB();async function a(C,S,y){let R=await Kh({config:e.config,state:e.state,...e.accountSettingsRegistration?{accountSettingsRegistration:e.accountSettingsRegistration}:{},provider:{caller:cB(C),signal:S},context:e.context,entities:e.entities,accountSettings:e.accountSettings});return Object.freeze({...R,query:ote(t.query,y,r)})}function s(C,S){return e.runAs?e.runAs({caller:cB(C),actor:C.actor,interfaceType:"studio",browserSession:!0},S):S()}function l(C){return e.entities?WN(e.entities,C.signal):Object.freeze({...C.entities,...GN()})}async function c(C,S){if(!ha(C.userPermissionLevel,t.permission))return!1;if(!n.authorize)return!0;let y=await a(C,S,void 0),R;try{R=await n.authorize(y)}catch(A){if(S.aborted)throw S.reason??A;throw oo(r,"authorization policy failed",A)}if(typeof R!=="boolean")throw Vt(r,"authorization policy must return a boolean",void 0,{code:"invalid_response"});return R}function u(C,S){return ny(e.context.logger,[C,e.runtimeSignal],S)}function d(C,S){let y=Xee.safeParse(C);if(!y.success)throw ty(r,"received an invalid action request",y.error);let R=e.binding.actions.find((z)=>z.definition.name===y.data.actionId);if(!R)throw Vt(r,`does not declare action "${y.data.actionId}"`,void 0,{code:"not_found",publicMessage:"This workspace has no such action"});let A=R.definition;if(A.permission!==void 0&&!ha(S.userPermissionLevel,A.permission))throw Vt(r,`action "${A.name}" was requested below its minimum permission`,void 0,{code:"permission_denied"});let k=i.safeParse(A.input,y.data.input);if(!k.success)throw ty(r,`action "${A.name}" received invalid input`,k.error);let j=sy.safeParse(k.data);if(!j.success)throw Vt(r,`action "${A.name}" input must be JSON-native`,void 0,{code:"invalid_input"});return{binding:R,mode:y.data.mode,confirmationToken:y.data.confirmationToken,input:k.data,jsonInput:j.data}}async function p(C,S,y){let R=await f(C,y);y.signal.throwIfAborted();let{token:A,expiresAt:k}=o.issue({callerId:S.userId,actionId:C.binding.definition.name,input:C.jsonInput,revision:R.revision});return{kind:"prepared-confirmation",token:A,summary:R.summary,expiresAt:new Date(k).toISOString()}}async function f(C,S){let y=C.binding.definition.name,R;try{R=await ate(C.binding,S,C.input)}catch(k){if(S.signal.aborted)throw S.signal.reason??k;throw oo(r,`action "${y}" prepare failed`,k)}let A=nte.safeParse(R);if(!A.success)throw Vt(r,`action "${y}" prepared an invalid confirmation`,ao(A.error.issues),{code:"invalid_response"});return A.data}async function g(C,S,y){let R=C.binding.definition.name,A=(z)=>Vt(r,`action "${R}" prepared confirmation is invalid or stale`,void 0,{code:"conflict",publicMessage:"The confirmation is no longer current; confirm again",cause:z}),k=o.redeem(C.confirmationToken,{callerId:S.userId,actionId:R,input:C.jsonInput});if(!k)throw A();let j=await f(C,y).catch((z)=>{if(y.signal.aborted)throw y.signal.reason??z;throw A(z)});if(y.signal.throwIfAborted(),j.revision!==k.revision)throw A()}async function h(C,S,y){let R=C.binding.definition,A;try{A=await ste(C.binding,S,{entities:l(S),accountSettings:e.accountSettings??QC()},C.input)}catch(z){if(y.aborted)throw y.reason??z;throw oo(r,`action "${R.name}" failed`,z)}y.throwIfAborted();let k=R.output.safeParse(A);if(!k.success)throw Vt(r,`action "${R.name}" returned invalid output`,ao(k.error.issues),{code:"invalid_response",cause:k.error});if(R.launch)return w(R.name,R.launch,A);let j=sy.safeParse(k.data);if(!j.success)throw Vt(r,`action "${R.name}" output must be JSON-native`,void 0,{code:"invalid_response"});return j.data}function w(C,S,y){let R=rte.safeParse(y);if(!R.success||!H$(S,R.data.url))throw Vt(r,`action "${C}" launched outside its declared origins (${S.origins.join(", ")})`,void 0,{code:"invalid_response"});return{kind:"launch",url:new URL(R.data.url).href}}let v=n.listEntityTypes;return{id:e.runtimeWorkspaceId,label:t.label,rendererName:qp,priority:t.priority??50,permission:t.permission,...t.query?{urlQuery:!0}:{},...e.aliases?{aliases:e.aliases}:{},...t.publishesEntityTypes?{publishesEntityTypes:!0}:{},entityTypes:v?(C)=>s(C,()=>u(void 0,async()=>{if(!await c(C,e.runtimeSignal))return[];let S=await v(await a(C,e.runtimeSignal,void 0)),y=tte.safeParse(S);if(!y.success)throw Vt(r,"returned an invalid entity-type catalog",ao(y.error.issues),{code:"invalid_response"});return y.data})):(t.entities??[]).map((C)=>C.type),accessHandler:(C)=>s(C,()=>u(void 0,()=>c(C,e.runtimeSignal))),dataProvider:(C,S,y)=>s(C,()=>u(y,()=>b(C,S,y))),actionHandler:(C,S,y)=>s(S,()=>u(y,()=>x(C,S,y))),...t.badge?{badgeProvider:(C)=>s(C,()=>u(void 0,()=>T(C)))}:{}};async function b(C,S,y){let R=uB(e.runtimeSignal,y);if(R.throwIfAborted(),!await c(C,R))throw Vt(r,"was requested below its admission policy",void 0,{code:"permission_denied"});let A=await a(C,R,S),k;try{k=await n.load(A)}catch(N){if(R.aborted)throw R.reason??N;throw oo(r,"data loader failed",N)}R.throwIfAborted();let j=Yp(t.data,k,r),z;try{z=t.view({data:j})}catch(N){if(R.aborted)throw R.reason??N;throw oo(r,"view derivation failed",N)}let G=iI(z,{actions:t.actions,permission:C.userPermissionLevel});if(!G.success)throw Vt(r,"returned an invalid view; use supported StudioWorkspaceView blocks and declared actions",ao(G.issues),{code:"invalid_response"});let D=t.refresh?.({data:j});if(D!==void 0&&(!Number.isInteger(D)||D<500||D>60000))throw Vt(r,"returned an invalid refresh interval; use 500-60000 milliseconds",void 0,{code:"invalid_response"});return Object.freeze({view:G.data,...D===void 0?{}:{refreshAfterMs:D}})}async function x(C,S,y){let R=uB(e.runtimeSignal,y);if(R.throwIfAborted(),!await c(S,R))throw Vt(r,"action was requested below its admission policy",void 0,{code:"permission_denied"});let A=d(C,S),k=await a(S,R,void 0),j=ite(A.binding.definition,A.input);if(A.mode==="prepare"){if(!j)throw Vt(r,`action "${A.binding.definition.name}" does not support prepared confirmation`,void 0,{code:"invalid_input"});return p(A,S,k)}if(j)await g(A,S,k);return h(A,k,R)}async function T(C){let S=e.runtimeSignal;if(!await c(C,S))return 0;let y=await a(C,S,void 0),R=await Promise.resolve(n.load(y)).catch((j)=>{throw oo(r,"data loader failed",j)}),A=Yp(t.data,R,r),k=t.badge?.({data:A})??0;if(!Number.isInteger(k)||k<0||k>999999)throw Vt(r,"returned an invalid badge; use an integer from 0 to 999999",void 0,{code:"invalid_response"});return k}}var bI=Object.freeze({config:Object.freeze({}),state:Object.freeze({}),accountSettings:void 0});function SI(e){let t=e.bind(bI);if(t.definition!==e.definition)throw Error(`Built-in Studio binding for "${e.definition.id}" returned a different definition`);let n=`${e.context.pluginId}:${e.definition.id}`;return vI({publicServiceId:e.context.pluginId,packageName:e.context.pluginId,runtimeWorkspaceId:n,...e.aliases?{aliases:e.aliases.map((o)=>({id:`${e.context.pluginId}:${o.id}`,query:o.query}))}:{},config:bI.config,state:bI.state,binding:t,context:e.context,runtimeSignal:e.runtimeSignal??new AbortController().signal})}async function lte(e){if(e.context.executionOnly||!e.context.studio.isAvailable())return!1;return e.context.studio.registerWorkspace(SI(e))}function ly(e){return Object.freeze({isAvailable:()=>!e.executionOnly&&e.studio.isAvailable(),source:(t)=>SI({...t,context:e}),register:async(t)=>{if(e.executionOnly||!e.studio.isAvailable())return;let n=await e.studio.registerWorkspace(t);return n===!1?void 0:n.workspaceUrl}})}var cte=i.string().min(1).refine((e)=>Buffer.from(e).toString("utf8")===e,"State owner must be well-formed Unicode"),ute=/^@[a-zA-Z0-9][a-zA-Z0-9_-]*\/[a-zA-Z0-9_-]+$/u;function dte(e,t){let n=cte.parse(e);if(ute.test(n))return`${n.slice(1).replace("/",".")}.${t}`;return`package:${Buffer.from(n).toString("base64url")}:${t}`}function Cu(e,t){return(n)=>e.scoped({namespace:dte(t,n.namespace),schema:n.schema})}function cy(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!1,writable:!1,configurable:!1}),e}function uy(e,t){let n=Reflect.get(e,t);return typeof n==="object"&&n!==null?n:void 0}var pte=/^[a-z][a-z0-9_-]*$/u,dB=new WeakSet;function pB(e){return dB.has(e)}function mte(e,t={}){if(!pte.test(e.name))throw Error(`First-party tool name "${e.name}" must start with a lowercase letter and contain only lowercase letters, numbers, hyphens and underscores`);let n=gI(e);if(t.bareName===!0)dB.add(n);return n}var mB=Symbol("rizom.first-party-service-runtime"),fB=new WeakSet;function fte(e){let{messaging:t,asPackage:n,onRelease:r,onReady:o,onRegistered:a}=e,s={logger:e.logger,deliveryProvider:e.deliveryProvider,entityShapes:e.entityShapes,dataDir:e.dataDir,identity:e.identity,domain:e.domain,auth:e.auth,studio:e.studio,inbox:e.inbox,inboxFollowUps:e.inboxFollowUps,recurringCheck:e.recurringCheck,interaction:e.interaction,workspaceUrl:e.workspaceUrl,siteUrl:e.siteUrl,routeByRole:e.routeByRole,toolCall:e.toolCall,classRuntimeState:e.classRuntimeState,evalHandler:e.evalHandler,entityReads:e.entityReads,claim:e.claim,profileKinds:e.profileKinds,ai:e.ai,dataSource:e.dataSource,template:e.template,dashboardWidget:e.dashboardWidget,ready(l){o(()=>n(async()=>l()))},registered(l){a(()=>n(async()=>l()))},answer(l,c,u={}){let d=l;r(t.answer(d,(p,{sender:f})=>n(async()=>c({request:p,sender:f})),u.everyProcess===!0?{everyProcess:!0}:{}))},listen(l,c,u={}){let d=u.mode??"subscribe",p=async(f,g)=>(await n(async()=>c({payload:f,sender:g})),{success:!0});r(typeof l==="string"?hte(t,d,l,(f)=>p(f.payload,f.source)):gte(t,d,l,(f,g)=>p(f,g.source)))}};return Object.freeze(s)}function gte(e,t,n,r){switch(t){case"observe":return e.observe(n,r);case"execution":return e.subscribeExecution(n,r);case"subscribe":return e.subscribe(n,r)}}function hte(e,t,n,r){switch(t){case"observe":return e.observe(n,r);case"execution":return e.subscribeExecution(n,r);case"subscribe":return e.subscribe(n,r)}}function gB(e,t){let n=fte(t);return fB.add(n),cy(e,mB,n)}function yte(e){return e!==void 0&&fB.has(e)}function bte(e){let t=uy(e,mB);if(!yte(t))throw Error("This context carries no service runtime: serviceRuntime() reaches internal capabilities of a slot context the brain's runtime built, for first-party packages only");return t}var hB=new Set(["anchor-profile","brain-character"]);var get=["GET","POST","PUT","DELETE","OPTIONS"],vte="data-site-slot";class yB extends Response{slot;constructor(e,t={}){let{slot:n,...r}=t;super(e,r);this.slot=n}}function dy(e,t={}){return new Response(JSON.stringify(e),{status:t.status??200,headers:{"Content-Type":"application/json; charset=utf-8",...t.headers}})}function ws(e,t){return e.filter((n)=>n.definition.role===t).sort((n,r)=>n.fullPath.length-r.fullPath.length)[0]}function wI(e,t,n){let r=ql(e,t,n),o=e.getEntityService(),a=e.getContentService(),s=e.getPermissionService();return{...r,permissions:{...r.permissions,getConfiguredPrincipalSeeds:()=>s.getConfiguredPrincipalSeeds(),replaceRuntimePrincipalState:(l)=>s.replaceRuntimePrincipalState(l)},entityService:o,bulkMutations:o,entities:$h(e),webRoutes:{getRoutes:()=>e.getPluginWebRoutes(),findByRole:(l)=>ws(e.getPluginWebRoutes(),l)},content:{generate:async({targets:l,toolContext:c,force:u,dryRun:d,signal:p})=>{p?.throwIfAborted();let f=c?Ol(c):Eh(t,s),g=Np(e.getJobQueueService(),t,!1);return a.submitGeneration({caller:f,targets:l,pluginId:t,options:{...u!==void 0&&{force:u},...d!==void 0&&{dryRun:d}}},{enqueue:(h,w)=>g({type:fi.contentGeneration,data:h,toolContext:c??null,options:{source:t,rootJobId:w,maxRetries:0,metadata:{operationType:"content_operations",pluginId:t}}})},p)}},templates:{register:(l,c)=>{e.registerTemplates(l,c??t)},format:(l,c)=>a.formatContent(l,c,{pluginId:t}),parse:(l,c)=>a.parseContent(l,c,t),resolve:async(l,c)=>a.resolveContent(l,c,t),getCapabilities:(l)=>{let c=e.getTemplate(No(l,t));if(!c)return null;let u=lu.getCapabilities(c);return{canGenerate:u.canGenerate,canFetch:u.canFetch,canRender:u.canRender,isStaticOnly:u.isStaticOnly}}},views:Lh(e),prompts:Bh(o),ai:qh(e),registerInstructions:(l)=>{e.registerInstructions(t,l)}}}class py extends Pl{type="service";getApiRoutes(){return[]}getWebRoutes(){return[]}async register(e,t){let n=wI(e,this.id,t);return this.context=n,this.setupMessageHandlers(n),await this.onRegister(n),this.getCapabilities()}get entityService(){return this.getContext().entityService}registerEntityType(e,t,n,r){this.getContext().entities.register(e,t,n,r)}async enqueueJob(e){return this.getContext().jobs.enqueue(e)}async enqueueBatch(e,t){return this.getContext().jobs.enqueueBatch(e,t)}async registerEntityTypes(e){}async registerJobHandlers(e){}async onRegister(e){await this.registerEntityTypes(e),await this.registerJobHandlers(e)}}var xI=["GET","POST","PUT","DELETE","OPTIONS"];function Zl(e){return"returnTo"in e}var bB=/[\s\\\p{Cc}\p{Cf}]/u;function Iu(e){if(typeof e!=="string"||e!==e.trim()||e.length===0||e.length>2048||!e.startsWith("/")||e.startsWith("//")||bB.test(e))return;try{let t=new URL(e,"https://brains.invalid");if(t.origin!=="https://brains.invalid")return;let n=`${t.pathname}${t.search}${t.hash}`;return n.length>0&&n.length<=2048&&n.startsWith("/")&&!n.startsWith("//")&&!bB.test(n)?n:void 0}catch{return}}function vB(e,t,n={}){let r=Iu(e);if(!r)return;let o=new URL(r,"https://brains.invalid");if(n.replace)o.search="",o.hash="";for(let[a,s]of t)o.searchParams.set(a,s);return Iu(`${o.pathname}${o.search}${o.hash}`)}function fy(e,t){let n=Zl(e)?Tte(e,t):Ste(e);return{method:e.method,path:e.path,public:!0,handler:async(r)=>{try{let o=await Ete(e,r,t);if(e.security.kind==="protocol"&&!o)throw new it("unauthenticated");let a=e.body?await Cte(e.body,r):void 0,s=await t.runAs(o?Ite(o,t.declarationId):t.anonymous,r,async()=>Zl(e)?e.handle({request:r,body:void 0,caller:o}):e.handle({request:r,body:a,caller:o}));return n(s)}catch(o){let a=Ki(o,r.signal.aborted?"cancelled":"handler_failed"),s=a.code==="handler_failed"||a.code==="invalid_response";t.logger[s?"error":"warn"](`Route ${e.method} ${e.path} failed`,{code:a.code,error:he(o)});let{code:l,message:c}=a.toJSON();return dy({error:c,code:l},{status:SB(l)})}}}}function Ste(e){return(t)=>{let n=e.response.safeParse(t);if(!n.success)throw new it("invalid_response",{message:`Route ${e.method} ${e.path} answered outside its response schema`,cause:n.error});return dy(n.data)}}var wte=i.union([i.string(),i.number(),i.boolean()]),xte=i.record(i.string(),wte.optional());function Tte(e,t){let{workspaceUrl:n}=t,{returnTo:r}=e,o=r.query;if(!n||!o)throw Error(`Route ${e.method} ${e.path} returns to Studio workspace "${r.id}", which only a service that declares it can do`);let a=(s)=>new it("invalid_response",{message:`Route ${e.method} ${e.path} answered outside Studio workspace "${r.id}"'s query`,cause:s});return(s)=>{let l=o.safeParse(s),c=xte.safeParse(s);if(!l.success)throw a(l.error);if(!c.success)throw a(c.error);let u=Object.entries(c.data).flatMap(([g,h])=>h===void 0?[]:[[g,String(h)]]),d=o.safeParse(Object.fromEntries(u));if(!d.success)throw a(d.error);let p=n(r);if(p===void 0)throw new it("no_handler",{message:`Studio workspace "${r.id}" is not hosted, so route ${e.path} has nowhere to return the browser`,publicMessage:"Studio is not available to return to"});let f=vB(p,u,{replace:!0});if(!f)throw new it("handler_failed",{message:`Studio workspace "${r.id}" has no same-origin URL to return to: ${p}`});return new Response(null,{status:303,headers:{Location:f,"Cache-Control":"no-store"}})}}async function Cte(e,t){let n=await t.json().catch((o)=>{throw new it("invalid_input",{publicMessage:"Request body must be valid JSON",cause:o})}),r=e.safeParse(n);if(!r.success)throw new it("invalid_input",{publicMessage:xu(r.error,{maxLength:wu}),cause:r.error});return r.data}function Ite(e,t){return{actor:{kind:"external",externalActorId:my(t,e.actor.id)},permissionLevel:e.permission}}async function Ete(e,t,n){if(e.security.kind==="public")return null;let r=await e.security.authenticate({request:t});if(!r?.id.trim())return null;return Object.freeze({actor:Object.freeze({...r}),permission:n.permissions.getUserLevel(n.declarationId,r.id),isAnchor:n.permissions.isAnchor(n.declarationId,r.id)})}var TI="_rizomConfirmationToken",Rte=i.object({issues:i.array(i.object({path:i.array(i.union([i.string(),i.number()]))}))});function kte(e){if(!(e instanceof Error)||e.name!=="ZodError")return;let t=Rte.safeParse(e);if(!t.success)return;return[...new Set(t.data.issues.map((n)=>n.path.join(".")||"(root)"))]}function Ate(e){if(e===null||typeof e!=="object")return;let t=Reflect.get(e,TI);return typeof t==="string"?t:void 0}function _te(e){if(e===void 0)return{};try{return JSON.parse(e)}catch{return e}}function Pte(e,t,n){let r=e.definition,o=tB(e),a=Mp(r.input);return{...r.deadline?{executionTimeoutMs:fI(r.deadline)}:{},validateAndParse(s){let l=a.safeParse(s);return l.success?l.data:null},async process(s,l,c,u){let d=await jp(t.jobAuthority,s),{input:p}=s,f=await n(d,()=>o({input:p,signal:u,progress:c})),g=r.output.safeParse(f);if(!g.success)throw new it("invalid_response",{message:`Job "${r.name}" answered outside its output schema`,cause:g.error});return f}}}class CB extends py{definition;calls=new wB;entityAccessCache;publicId;dependencies;toolContext=new wB;cleanups=[];registeredJobs=new Set;answered=[];readyHandlers=[];registeredHandlers=[];routes=[];operatorAbortController=new AbortController;registeredStudioWorkspaceIds=[];workspaceUrls=new Map;returnTargets=[];registeredDashboardWidgetIds=[];accountSettingsRegistration;studioWorkspaceBindings=[];dashboardWidgetBindings=[];scopedShell;state;tools;resources;constructor(e,t,n,r,o){super(r,n,t,Rl());this.definition=e,this.publicId=e.id,this.dependencies=[...o]}register(e,t){return this.scopedShell=e,super.register(e,t)}async onRegister(e){if(await super.onRegister(e),this.definition.accountSettings&&!e.executionOnly)this.accountSettingsRegistration=e.accountSettings.register({ownerPluginId:this.id,packageName:this.packageName,definitionId:this.definition.id,definition:this.definition.accountSettings});this.state=this.definition.setup?await this.definition.setup({config:this.config,lifecycle:{onCleanup:(o)=>{this.cleanups.push(o)}},runtimeState:Cu(e.runtimeState,this.packageName)}):Tu();let t=this.templateFormatter();e.templates.register(this.runtimeTemplates(),this.id),this.registerPrompts();let n=this.definition.jobs?.({config:this.config,state:this.state,entities:this.entityAccess(),messaging:this.messaging(),templates:t})??[],r=new Set;for(let o of n){let a=o.definition;if(r.has(a.name))throw Error(`Service "${this.publicId}" registers job "${a.name}" more than once`);r.add(a.name),this.registeredJobs.add(a),qN(a,`${this.id}:${a.name}`),e.jobs.registerHandler(a.name,Pte(o,e,(s,l)=>this.calls.run(s,l)))}this.registerSubscriptions(e),this.routes=(this.definition.routes?.({config:this.config,state:this.state,entities:this.entityAccess(),jobs:this.jobs(),messaging:this.messaging(),accountSettings:this.accountSettingsWriter()})??[]).map((o)=>this.runtimeRoute(o))}getWebRoutes(){return[...this.routes]}runtimeRoute(e){if(Zl(e))this.returnTargets.push({route:e,workspace:e.returnTo});let t=this.requireShell().getPermissionService();return fy(e,{declarationId:this.publicId,permissions:{getUserLevel:(n,r)=>t.determineUserLevel(n,r),isAnchor:(n,r)=>t.isAnchor(n,r)},anonymous:Ml(this.id),runAs:(n,r,o)=>this.calls.run(this.routeCall(n,r),o),logger:this.logger,workspaceUrl:(n)=>this.workspaceUrls.get(n)})}async onRegistrationComplete(e){if(this.definition.accountSettings&&!e.executionOnly&&!e.accountSettings.hasBackend())throw Error(`Service "${this.publicId}" account settings require auth-service and an account settings encryption key`);for(let r of this.registeredHandlers)await r();if(e.executionOnly)return;this.bindOperatorDefinitions(e);let t=[],n=[];try{for(let r of this.studioWorkspaceBindings){let o=`${this.id}:${r.definition.id}`,a=vI({publicServiceId:this.publicId,packageName:this.packageName,runtimeWorkspaceId:o,config:this.config,state:this.requireState(),...this.accountSettingsRegistration?{accountSettingsRegistration:this.accountSettingsRegistration}:{},binding:r,context:e,runtimeSignal:this.operatorAbortController.signal,entities:this.entityAccess(),accountSettings:this.accountSettingsWriter(),runAs:this.asOperator});try{let s=await e.studio.registerWorkspace(a);if(s===!1){await this.rollbackStudioWorkspaces(e,t),t.splice(0),this.workspaceUrls.clear();break}this.workspaceUrls.set(r.definition,s.workspaceUrl)}catch(s){throw Error(`Service "${this.publicId}" package "${this.packageName}" Studio workspace "${r.definition.id}" host registration failed; correct the declaration or Studio configuration: ${he(s)}`,{cause:s})}t.push(o)}this.registeredStudioWorkspaceIds.push(...t);for(let r of this.dashboardWidgetBindings){let o=Xp({publicServiceId:this.publicId,packageName:this.packageName,config:this.config,state:this.requireState(),...this.accountSettingsRegistration?{accountSettingsRegistration:this.accountSettingsRegistration}:{},binding:r,context:e,runtimeSignal:this.operatorAbortController.signal,entities:this.entityAccess(),accountSettings:this.accountSettingsWriter(),runAs:this.asOperator});try{if(!await e.dashboard.registerWidget(o)){await this.rollbackDashboardWidgets(e,n),n.splice(0);break}}catch(a){throw Error(`Service "${this.publicId}" package "${this.packageName}" dashboard widget "${r.definition.id}" host registration failed; correct the declaration or Dashboard configuration: ${he(a)}`,{cause:a})}n.push(r.definition.id)}this.registeredDashboardWidgetIds.push(...n)}catch(r){throw await this.rollbackDashboardWidgets(e,n),await this.rollbackStudioWorkspaces(e,t),r}}async getTools(){if(this.tools)return this.tools;let e=this.requireState(),t=this.definition.tools?.(this.withRuntime(this.getContext(),{config:this.config,state:e,entities:this.entityAccess(),jobs:this.jobs(),messaging:this.messaging(),accountSettings:this.accountSettingsWriter(),templates:this.templateFormatter(),content:this.content()}))??[],n=new Set;return this.tools=t.map((r)=>{if(n.has(r.name))throw Error(`Service "${this.publicId}" defines tool "${r.name}" more than once`);return n.add(r.name),this.runtimeTool(r)}),this.tools}async getResources(){if(this.resources)return this.resources;let e=this.definition.resources?.({config:this.config,state:this.requireState()})??{};return this.resources=Object.entries(e).map(([t,n])=>this.runtimeResource(t,n)),this.resources}async getInstructions(){return this.definition.instructions?.({config:this.config,state:this.requireState()})}async onReady(){for(let e of this.readyHandlers)await e()}async onShutdown(){this.operatorAbortController.abort(Error(`Service "${this.publicId}" is shutting down`)),await this.rollbackDashboardWidgets(this.getContext(),this.registeredDashboardWidgetIds.splice(0)),await this.rollbackStudioWorkspaces(this.getContext(),this.registeredStudioWorkspaceIds.splice(0)),this.studioWorkspaceBindings=[],this.dashboardWidgetBindings=[],this.workspaceUrls.clear(),this.returnTargets.splice(0),this.tools=void 0,this.resources=void 0,this.routes=[];for(let e of this.registeredJobs)FN(e,`${this.id}:${e.name}`);this.registeredJobs.clear();for(let e of this.answered.splice(0).reverse())e();this.readyHandlers.splice(0),this.registeredHandlers.splice(0);for(let e of this.cleanups.splice(0).reverse())await e()}assertReturnTargets(){let e=new Set(this.studioWorkspaceBindings.map((t)=>t.definition));for(let{route:t,workspace:n}of this.returnTargets)if(!e.has(n))throw Error(`Service "${this.publicId}" route ${t.method} ${t.path} returns to Studio workspace "${n.id}", which this package does not declare`)}bindOperatorDefinitions(e){if(this.definition.dashboardWidgets&&e.dashboard.isAvailable()){let t=this.definition.dashboardWidgets(this.withRuntime(e,{config:this.config,state:this.requireState(),accountSettings:this.definition.accountSettings})),n=new Set;for(let r of t){let o=r.definition.id;if(n.has(o))throw Error(`Service "${this.publicId}" package "${this.packageName}" registers dashboard widget "${o}" more than once; return each local widget definition once`);n.add(o)}this.dashboardWidgetBindings=Object.freeze([...t])}if(this.definition.studioWorkspaces&&e.studio.isAvailable()){let t=this.definition.studioWorkspaces(this.withRuntime(e,{config:this.config,state:this.requireState(),accountSettings:this.definition.accountSettings})),n=new Set;for(let r of t){let o=r.definition.id;if(n.has(o))throw Error(`Service "${this.publicId}" package "${this.packageName}" registers Studio workspace "${o}" more than once; return each local workspace definition once`);n.add(o)}this.studioWorkspaceBindings=Object.freeze([...t]),this.assertReturnTargets()}}async rollbackStudioWorkspaces(e,t){for(let n of[...t].reverse()){try{await e.studio.unregisterWorkspace(n)}catch(o){this.logger.error("Failed to unregister declarative Studio workspace",{serviceId:this.publicId,packageName:this.packageName,workspaceId:n,error:he(o)})}let r=this.registeredStudioWorkspaceIds.lastIndexOf(n);if(r>=0)this.registeredStudioWorkspaceIds.splice(r,1)}}async rollbackDashboardWidgets(e,t){for(let n of[...t].reverse()){try{await e.dashboard.unregisterWidget(n)}catch(o){this.logger.error("Failed to unregister declarative dashboard widget",{serviceId:this.publicId,packageName:this.packageName,widgetId:n,error:he(o)})}let r=this.registeredDashboardWidgetIds.lastIndexOf(n);if(r>=0)this.registeredDashboardWidgetIds.splice(r,1)}}requireState(){if(this.state===void 0)throw Error(`Service "${this.publicId}" has not completed setup`);return this.state}toolCall(e){let t=this.getContext(),n,r=Ol(e),{actor:o}=e;return{access:()=>n??=t.jobAuthority.access(r),caller:r,account:async()=>o.kind==="user"?{userId:o.userId}:void 0,eventContext:{actor:e.actor,interfaceType:e.interfaceType}}}asOperator=(e,t)=>this.calls.run(this.operatorCall(e),t);operatorCall(e){let t=this.getContext(),n=e.caller?{actor:e.actor??{kind:"user",userId:e.caller.actor.id},permissionLevel:e.caller.permission}:Ml(this.id),r,o=e.caller?.actor.id;return{access:()=>r??=t.jobAuthority.access(n),caller:n,account:async()=>o===void 0?void 0:e.browserSession?{userId:o,sessionUserId:o}:{userId:o},eventContext:{actor:n.actor,interfaceType:e.interfaceType}}}routeCall(e,t){let n=this.getContext(),r,o;return{access:()=>r??=n.jobAuthority.access(e),caller:e,account:()=>o??=(async()=>{let a=await n.auth.get()?.resolveSession(t);return a?{userId:a.userId,sessionUserId:a.userId}:void 0})(),eventContext:{actor:e.actor}}}accountClaims=new hI(aB);accountSettingsWriter(){let e=async()=>{let n=await this.calls.getStore()?.account?.();if(!n)throw new it("permission_denied",{publicMessage:"Account settings need a signed-in account"});return n},t=async(n,r)=>{let o=this.accountSettingsRegistration;if(!o)throw new it("permission_denied",{message:`Service "${this.publicId}" keeps no account settings here`});let a=i.record(i.string(),i.unknown()).safeParse(r);if(!a.success)throw new it("invalid_input",{publicMessage:"Account settings must be an object"});try{await this.getContext().accountSettings.save(o.id,n,a.data)}catch(s){let l=kte(s);if(!l)throw s;let c=`Invalid account settings: ${l.join(", ")}`;throw new it("invalid_input",{message:c,publicMessage:c})}};return{read:async()=>{let n=await this.calls.getStore()?.account?.(),r=this.accountSettingsRegistration;if(!n||!r)return null;let o=await this.getContext().accountSettings.getForActor(r,n.userId);return o?V$(r.definition,o):null},save:async(n)=>t((await e()).userId,n),claim:async()=>{let n=await e();return this.accountClaims.issue(n)},redeem:async(n,r)=>{let o=await this.calls.getStore()?.account?.(),a=this.accountClaims.take(n,(s)=>s.sessionUserId===void 0||s.sessionUserId===o?.sessionUserId);if(!a)throw new it("permission_denied",{publicMessage:"This link has expired or was already used"});await t(a.userId,await r())}}}currentCall(){return this.calls.getStore()??this.packageCall()}packageCall(){let e=this.getContext();return{...va(e.jobAuthority),eventContext:{actor:{kind:"service",serviceId:this.id}}}}ownsType(e){return this.definition.entities.some(({type:t})=>t===e)}readScope(e,t,n){return vs(e,this.ownsType(t),n)}messaging(){let e=this.getContext();return Object.freeze({request:(n,r)=>e.messaging.request(n,r),command:(n,r)=>e.messaging.command(n,r),publish:(n,r)=>e.messaging.broadcast(n,r)})}registerSubscriptions(e){if(!this.definition.subscriptions)return;let t=new WeakMap,n=(a,s)=>{let l=a.delivery;if(l!=="request"&&l!=="command")throw Error(`Service "${this.publicId}" cannot answer "${a.name}": a package answers requests and commands only`);let c=`${this.packageName}:`;if(!a.name.startsWith(c)||a.name.length===c.length)throw Error(`Service "${this.publicId}" answers only channels named "${c}<name>", and "${a.name}" is not one`);let u=a,d=Object.freeze({kind:"rizom-service-subscription-binding",contract:u});return t.set(d,()=>e.messaging.answer(u,(p,{sender:f})=>this.calls.run(this.packageCall(),async()=>s({request:p,sender:f})))),d},r=this.definition.subscriptions(this.withRuntime(e,{config:this.config,state:this.requireState(),entities:this.entityAccess(),jobs:this.jobs(),messaging:this.messaging(),answer:n})),o=new Set;for(let a of r){let s=t.get(a);if(!s)throw Error(`Service "${this.publicId}" returns a subscription its own answer did not bind`);if(o.has(a.contract.name))throw Error(`Service "${this.publicId}" answers "${a.contract.name}" more than once`);o.add(a.contract.name),this.answered.push(s())}}withRuntime(e,t){return gB(t,{logger:this.logger,messaging:e.messaging,deliveryProvider:(n)=>e.channels.getDeliveryProvider(n),asPackage:(n)=>this.calls.run(this.packageCall(),n),onRelease:(n)=>{this.answered.push(n)},onReady:(n)=>{this.readyHandlers.push(n)},onRegistered:(n)=>{this.registeredHandlers.push(n)},entityShapes:Dte(e),dataDir:e.dataDir,identity:Object.freeze({get:()=>e.identity.get(),getProfile:()=>e.identity.getProfile()}),domain:e.domain,auth:()=>e.auth.get(),studio:ly(e),inbox:Object.freeze({listSources:()=>e.inbox.listSources(),getSource:(n)=>e.inbox.getSource(n)}),inboxFollowUps:Object.freeze({resolve:(n)=>e.inboxFollowUps.resolve(n)}),recurringCheck:(n)=>{e.recurringChecks.register(n)},interaction:(n)=>{e.interactions.register(n)},workspaceUrl:(n)=>this.workspaceUrls.get(n),siteUrl:e.siteUrl,routeByRole:(n)=>e.webRoutes.findByRole(n),evalHandler:(n,r)=>{e.eval.registerHandler(n,r)},classRuntimeState:Object.freeze({scoped:e.runtimeState.scoped.bind(e.runtimeState)}),toolCall:()=>{let n=this.toolContext.getStore();return n?Object.freeze({...n.conversationId!==void 0&&{conversationId:n.conversationId},...n.userPermissionLevel!==void 0&&{userPermissionLevel:n.userPermissionLevel}}):void 0},entityReads:jte(e),claim:(n)=>this.claimSystemType(e,n),profileKinds:e.profileKinds,ai:Object.freeze({generateObject:(n,r,o)=>e.ai.generateObject(n,r,o),judge:(n)=>e.judge(n)}),dataSource:(n)=>{e.entities.registerDataSource(Ote(`${this.id}:${n.id}`,n))},template:(n,r)=>{e.templates.register({[n]:r},this.id)},dashboardWidget:(n)=>{this.answered.push(e.messaging.subscribe(so.pluginsRegistered,async()=>(await sI({context:e,definition:n.definition,render:n.render,load:({visibilityScope:r,signal:o})=>n.load({corpus:IB(e.entityService),visibilityScope:r,signal:o}),runtimeSignal:this.operatorAbortController.signal}),{success:!0})))}})}claimSystemType(e,t){if(!hB.has(t))throw Error(`Service "${this.publicId}" cannot claim entity type "${t}": it is not a shell system type`);let{entityService:n}=e;if(!n.hasEntityType(t))throw Error(`Service "${this.publicId}" cannot claim shell system type "${t}": it is not registered`);let r=Mte(this.requireShell()),o=r.get(t);if(o!==void 0&&o!==this.id)throw Error(`Service "${this.publicId}" cannot claim shell system type "${t}": it is already claimed by "${o}"`);r.set(t,this.id),this.answered.push(()=>{if(r.get(t)===this.id)r.delete(t)});let a=(s)=>{if(s!==t)throw new it("permission_denied",{message:`Service "${this.publicId}" claimed "${t}", not "${s}"`})};return Object.freeze({type:t,getEntity:async(s)=>(a(s.entityType),n.getEntity(s)),listEntities:async(s)=>(a(s.entityType),n.listEntities(s)),createEntity:async(s)=>(a(s.entity.entityType),n.createEntity(s)),updateEntity:async(s)=>(a(s.entity.entityType),n.updateEntity(s)),extendFrontmatterSchema:(s)=>{e.entities.extendFrontmatterSchema(t,s)},registerPersistValidator:(s)=>{e.entities.registerPersistValidator(t,s)}})}ownedDefinition(e){let t=this.definition.entities.find((n)=>n===e);if(!t)throw new it("permission_denied",{message:`Service "${this.publicId}" may only write the entity types its header declares, and "${e.type}" is not one of them`});return t}async assertWriteAllowed(e,t,n){await Jh(this.requireShell().getPermissionService().getEntityActionRequiredLevel(e,t),e,t,n)}entityAccess(){if(this.entityAccessCache)return this.entityAccessCache;let e=this.getContext(),t={...pu(e.entityService,()=>this.currentCall(),(n)=>this.ownsType(n)),...Vh({entityService:e.entityService,owned:(n)=>this.ownedDefinition(n),currentCall:()=>this.currentCall(),assertWriteAllowed:(n,r,o)=>this.assertWriteAllowed(n,r,o),readScope:(n,r,o)=>this.readScope(n,r,o)})};return this.entityAccessCache=Object.freeze(t),this.entityAccessCache}jobs(){let e=this.getContext(),t=async(n,r)=>{let o=await e.jobs.getStatus(r);return o?.type===`${this.id}:${n.name}`?HC(n,o):null};return{enqueue:async(n,r)=>{if(!this.registeredJobs.has(n))throw Error(`Service "${this.publicId}" cannot enqueue unregistered job "${n.name}"`);n.input.parse(r);let o=this.toolContext.getStore(),a=await jl(e.jobAuthority,this.calls.getStore()?.caller,r),s=n.retry?n.retry.attempts-1:void 0,l=await e.jobs.enqueue({type:n.name,data:a,...o?{toolContext:o}:{},options:{source:this.id,metadata:{operationType:"data_processing",pluginId:this.id},...s!==void 0?{maxRetries:s}:{}}});return Object.freeze({id:l,status:()=>t(n,l)})},status:t}}content(){let e=this.getContext(),t=this.erasedTemplates(),n=(r)=>t.get(r)?.generation!==void 0;return{target:(r)=>iB(r,n),generate:async(r)=>{let o=this.toolContext.getStore(),a=await e.content.generate({targets:[...r.targets],toolContext:o,...r.force!==void 0&&{force:r.force},...r.dryRun!==void 0&&{dryRun:r.dryRun},...o?.signal&&{signal:o.signal}});return{...a,items:a.items.map(({destination:s,templateName:l,...c})=>({destination:{entityType:s.entityType,idPath:s.idPath,entityId:s.entityId},template:bT(l,this.id),...c}))}}}}templateFormatter(){let e=this.erasedTemplates();return{format(t,n){let r=e.get(t)?.format;if(!r)throw Error(`No template formats as ${t}`);return r(n)}}}erasedTemplateCache;erasedTemplates(){return this.erasedTemplateCache??=new Map(Object.entries(this.definition.templates??{}).map(([e,t])=>{let{format:n,renderers:r}=t;if(!n&&!r)throw Error(`Service "${this.publicId}" template "${e}" neither formats nor renders`);return[e,{schema:t.schema,description:t.description,generation:t.generation,format:n&&((o)=>n({value:t.schema.parse(o)})),component:r&&((o)=>r.web(t.schema.parse(o)))}]})),this.erasedTemplateCache}runtimeTemplates(){let e={};for(let[t,n]of this.erasedTemplates()){let{format:r,component:o,generation:a}=n;if(a&&!a.prompt.trim())throw Error(`Service "${this.publicId}" generation template "${t}" requires a non-empty prompt`);if(a&&!r)throw Error(`Service "${this.publicId}" generation template "${t}" must format what it generates`);let s={name:t,description:n.description??`${this.publicId} ${t}`,schema:n.schema,requiredPermission:"admin",...r?{formatter:{format:r,parse:()=>{throw Error(`Template "${t}" is format-only`)}},...a?{basePrompt:a.prompt,dataSourceId:"shell:ai-content",...a.useKnowledgeContext!==void 0?{useKnowledgeContext:a.useKnowledgeContext}:{}}:{}}:{}};e[t]=o?gy({...s,schema:n.schema.pipe(Ro),layout:{component:o}}):gy(s)}return e}requireShell(){let e=this.scopedShell;if(!e)throw Error(`Service "${this.publicId}" has no shell`);return e}registerPrompts(){let e=this.requireShell();for(let[t,n]of Object.entries(this.definition.prompts??{})){let r={name:`${this.publicId}_${t}`,...n.description?{description:n.description}:{},args:{input:{description:"JSON input",required:!0}},handler:async(o)=>{let a=n.input.parse(_te(o.input));return{messages:[{role:"user",content:{type:"text",text:n.render({input:a})}}]}}};e.registerPrompt(this.id,r)}}runtimeResource(e,t){return{uri:t.uri,name:e,...t.description?{description:t.description}:{},mimeType:t.mimeType??"text/plain",handler:async()=>({contents:[{uri:t.uri,mimeType:t.mimeType??"text/plain",text:await t.read()}]})}}runtimeTool(e){let t=pB(e)?e.name:`${this.publicId}_${e.name}`,n=TB({label:e.name,requestNoun:"the operation"});return{name:t,description:e.description,inputSchema:e.input.shape,outputSchema:e.output,visibility:e.permission??"admin",sideEffects:e.sideEffects??(e.confirmation?"writes":"none"),handler:async(r,o)=>{let a="invalid_input";try{if(o.signal?.aborted)throw new it("cancelled");let s=Ate(r);if(s!==void 0){let d=n.validateConfirmed(s,r);if(d)return d;let p={...i.record(i.string(),i.unknown()).parse(r)};delete p[TI],r=p}let l=e.input.safeParse(r);if(!l.success)throw new it("invalid_input",{cause:l.error,publicMessage:xu(l.error,{maxLength:wu})});let c=l.data;if(s===void 0&&e.confirmation)return{needsConfirmation:!0,toolName:t,summary:typeof e.confirmation==="function"?e.confirmation(c):e.confirmation,args:n.buildArgs((d)=>({...i.record(i.string(),i.unknown()).parse(c),[TI]:d}))};a="handler_failed";let u=await this.toolContext.run(o,()=>this.calls.run(this.toolCall(o),()=>Promise.resolve(e.execute({input:c,signal:o.signal??new AbortController().signal}))));return a="invalid_response",{success:!0,data:e.output.parse(u)}}catch(s){let l=Ki(s,o.signal?.aborted?"cancelled":a).toJSON();return this.logger.debug("Declared tool failed",{tool:t,code:l.code,error:he(s)}),{success:!1,error:l.message,code:l.code}}}}}}function IB(e){return Object.freeze({listEntities:(t)=>e.listEntities(t),getEntity:(t)=>e.getEntity(t),countEntities:(t)=>e.countEntities(t),nearestToEntity:(t)=>e.nearestToEntity(t),projectSemanticSpace:(t)=>e.projectSemanticSpace(t)})}function Ote(e,t){return{id:e,name:t.name,description:t.description,fetch:async(n,r,o)=>r.parse(await t.fetch(n,{corpus:IB(o.entityService),publishedOnly:o.publishedOnly===!0}))}}var xB=new WeakMap;function Mte(e){let t=xB.get(e);if(t)return t;let n=new Map;return xB.set(e,n),n}function jte(e){let{entityService:t}=e;return Object.freeze({getEntityTypes:()=>t.getEntityTypes(),getEntityCounts:(n)=>t.getEntityCounts(n),listEntities:(n)=>t.listEntities(n),getEntity:(n)=>t.getEntity(n),search:(n)=>t.search(n)})}function Dte(e){return Object.freeze({types:()=>e.entityService.getEntityTypes(),frontmatterSchema:(t)=>e.entities.getEffectiveFrontmatterSchema(t),isSingleton:(t)=>e.entities.getAdapter(t)?.isSingleton===!0,bodyTemplate:(t)=>e.entities.getAdapter(t)?.getBodyTemplate()??""})}function EB(e,t,n,r,o=[]){return new CB(e,t,n,r,o)}function em(e,t,n){let r=Object.keys(t).find((a)=>!e.header.has(a));if(r!==void 0)throw Error(`${e.label} "${t.id}" declares "${r}" in its header; behavior is ${e.helper}'s second argument`);let o=Object.keys(n??{}).find((a)=>!e.behavior.has(a));if(o!==void 0)throw Error(`${e.label} "${t.id}" declares "${o}", which is not a behavior slot`)}function RB(e,t=[]){let n=e.entities;oy(e.id,new Set(n),t);let r=ga({family:"service",id:e.id,config:e.config,instantiate:({config:o,package:a,scope:s,pluginId:l,dependencies:c})=>[...ry(n,[],a,l===void 0?s:Nte(e.id,n,l),t),EB(e,o,a,l??s(e.id),c??[])]});return kB.set(r,(o)=>RB(e,o)),r}var kB=new WeakMap;function zte(e,t){let n=kB.get(e);if(!n)throw Error(`Service definition "${e.id}" was not created by defineServicePlugin`);return n(Object.freeze([...t]))}function Nte(e,t,n){let[r,...o]=t;if(o.length>0)throw Error(`Service "${e}" keeps a legacy plugin id only when it owns at most one entity type`);if(r?.type===n)throw Error(`Service "${e}" cannot keep legacy plugin id "${n}", which its entity type is installed under`);return(a)=>(Jt(a,"Local plugin id"),r===void 0||a===r.type?a:`${r.type}:${a}`)}var $te={label:"Service",helper:"defineServicePlugin",header:new Set(["id","config","entities","setup","accountSettings"]),behavior:new Set(["instructions","resources","prompts","templates","jobs","tools","subscriptions","routes","dashboardWidgets","studioWorkspaces"])};function Bte(e,t){let n=t.map(({type:o})=>o),r=n.find((o,a)=>n.indexOf(o)!==a);if(r!==void 0)throw Error(`Service "${e}" declares entity type "${r}" more than once`);if(n.includes(e))throw Error(`Service "${e}" declares an entity type of the same name; give one of them a distinct id`)}function Lte(e,t){return em($te,e,t),Bte(e.id,e.entities??[]),RB({...t,...e,entities:Object.freeze(e.entities===void 0?[]:[...e.entities]),accountSettings:e.accountSettings})}import{AsyncLocalStorage as dke}from"async_hooks";var AB=30000,_B=1e4;function PB(e,t,n){let r,o=new Promise((a,s)=>{r=setTimeout(()=>s(Error(n)),t)});return Promise.race([e,o]).finally(()=>clearTimeout(r))}function hy(e,t,n){let r=!1,o=0,a,s,l=Promise.resolve(),c=new Map,u=()=>{let g=l.catch(()=>{return}).then(()=>d());return l=g.then(()=>{a=void 0},(h)=>{a="Account task reconciliation failed"}),g},d=async()=>{if(!r)return;let g=o,h=await n.listConfigured(t);if(g!==o)return;let w=new Map(h.map((v)=>[v.id,v.revision]));for(let[v,b]of c)if(w.get(v)!==b.revision)await f(v,b);if(g!==o)return;for(let v of h)if(!c.has(v.id))p(v)},p=(g)=>{let h=new AbortController,w,v,b=new Promise((C,S)=>{w=C,v=S}),x={controller:h,revision:g.revision,status:"starting",message:"Connecting",run:Promise.resolve()},T=Promise.resolve().then(()=>e.run({account:Object.freeze({id:g.id,settings:g.settings}),signal:h.signal,health:{ready(){x.status="ready",x.message="Ready",w?.()},warning(C){x.status="warning",x.message=C}}})).then(()=>{if(!h.signal.aborted)throw Error(`Account-bound daemon "${e.id}" stopped before it was aborted`)}).catch((C)=>{if(h.signal.aborted)return;let S=C instanceof Error?C:Error(he(C));x.status="error",x.message="Account task failed",v?.(S)});x.run=T,c.set(g.id,x),PB(b,AB,`Account-bound daemon "${e.id}" did not report readiness within ${AB}ms`).catch(()=>{if(h.signal.aborted)return;x.status="error",x.message="Account task did not become ready",h.abort()})},f=async(g,h)=>{if(c.get(g)!==h)return;c.delete(g),h.controller.abort(),await PB(h.run,_B,`Account-bound daemon "${e.id}" task did not stop within ${_B}ms`).catch(()=>{return})};return{async start(){if(r)return;r=!0,o++,s=n.subscribe(t,()=>{u()}),await u()},async stop(){if(!r&&c.size===0)return;r=!1,o++,s?.(),s=void 0,await l.catch(()=>{return});let g=[...c.entries()];await Promise.all(g.map(([h,w])=>f(h,w)))},healthCheck(){let g={total:c.size,ready:0,warning:0,error:0};for(let w of c.values())if(w.status==="ready")g.ready++;else if(w.status==="warning")g.warning++;else if(w.status==="error")g.error++;let h=a||g.error>0?"error":g.warning>0?"warning":"healthy";return Promise.resolve({status:h,message:a??(g.total===0?"No configured accounts":`${g.ready} of ${g.total} account task(s) ready`),lastCheck:new Date,details:g})}}}function tm(e){let t,n,r={status:"unknown",message:"Waiting for readiness",lastCheck:new Date};return{async start(){if(t)return;t=new AbortController;let o=t,a,s,l=new Promise((d,p)=>{a=d,s=p});n=Promise.resolve().then(()=>e.run({signal:o.signal,health:{ready(){r={status:"healthy",message:"Ready",lastCheck:new Date},a?.()},warning(d){r={status:"warning",message:d,lastCheck:new Date}}}})).then(()=>{if(!o.signal.aborted)throw Error(`Daemon "${e.id}" stopped before it was aborted`)}).catch((d)=>{let p=d instanceof Error?d:Error(String(d));throw r={status:"error",message:p.message,lastCheck:new Date},s?.(p),p}),n.catch(()=>{return});let c,u=new Promise((d,p)=>{c=setTimeout(()=>{let f=Error(`Daemon "${e.id}" did not report readiness within 30000ms`);r={status:"error",message:f.message,lastCheck:new Date},o.abort(),p(f)},30000)});try{await Promise.race([l,u])}finally{clearTimeout(c)}},async stop(){let o=t,a=n;t=void 0,n=void 0,o?.abort();let s,l=a?await Promise.race([a.then(()=>!0,()=>!0),new Promise((c)=>{s=setTimeout(()=>c(!1),1e4)})]):!0;if(clearTimeout(s),!l)r={status:"error",message:`Daemon "${e.id}" did not stop within 10000ms`,lastCheck:new Date};if(r.status!=="error")r={status:"unknown",message:"Stopped",lastCheck:new Date}},healthCheck(){return Promise.resolve({...r,lastCheck:new Date})}}}function OB(e){return jB(e)}function MB(e){if(!e)return;return{...e.userPermissionLevel&&{userPermissionLevel:e.userPermissionLevel},...e.isAnchor!==void 0&&{isAnchor:e.isAnchor},...e.interfaceType&&{interfaceType:e.interfaceType},...e.channelId&&{channelId:e.channelId},...e.channelName&&{channelName:e.channelName},...e.actor&&{actor:e.actor},...e.source&&{source:e.source},...e.attachments&&{attachments:e.attachments},...e.guestExecution&&{guestExecution:e.guestExecution},...e.guestScreening&&{guestScreening:e.guestScreening}}}function DB(e){return{get guestReady(){return e.guestReady===!0},chat:async(t,n,r,o)=>{let a=MB(r),s=o?await e.chat(t,n,a,o):await e.chat(t,n,a);return OB(s)},confirmPendingAction:async(t,n,r,o,a)=>{let s=MB(o);if(!s)throw Error("Confirmation requires caller context.");let l=a?await e.confirmPendingAction(t,n,r,s,a):await e.confirmPendingAction(t,n,r,s);return OB(l)},invalidate:()=>{e.invalidateAgent()}}}function yy(e,t,n){let r=ql(e,t,n),o=e.getMCPService(),a=e.getPermissionService(),s=DB(e.getAgentService());return{...r,mcpTransport:o,agent:s,permissions:{...r.permissions,getUserLevel:(l,c,u)=>a.determineUserLevel(l,c,u),isAnchor:(l,c)=>a.isAnchor(l,c)},daemons:{register:(l,c)=>{let u=`${t}:${l}`;e.registerDaemon(u,c,t),r.logger.debug(`Registered daemon: ${u}`)}},conversations:{...r.conversations,start:async(l)=>e.getConversationService().startConversation(l),addMessage:async(l)=>{await e.getConversationService().addMessage(l)},updateMetadata:async(l)=>e.getConversationService().updateConversationMetadata(l),delete:async(l)=>e.getConversationService().deleteConversation(l)},tools:{listForPermissionLevel:(l)=>e.listToolsForPermissionLevel(l)},webRoutes:{getRoutes:()=>e.getPluginWebRoutes(),findByRole:(l)=>ws(e.getPluginWebRoutes(),l)},plugins:{has:(l)=>e.hasPlugin(l)}}}function CI(e,t,n){return{...yy(e,t,n),channels:Gz(e,t)}}var qte=3600000;class Eu extends Pl{type="interface";daemon;jobTrackingEntries=new Map;jobTrackingTtlMs=qte;createContext(e,t){return yy(e,this.id,t)}async register(e,t){let n=this.createContext(e,t);if(this.context=n,this.initializeDaemon(),this.daemon)await this.registerDaemon(n);return this.setupMessageHandlers(n),await this.onRegister(n),this.getCapabilities()}async onRegister(e){}async registerDaemon(e){if(!this.daemon)return;e.daemons.register(this.id,this.daemon),e.logger.debug(`Registered daemon for interface: ${this.id}`)}createDaemon(){return}requiresDaemonStartup(){return!1}getWebRoutes(){return[]}initializeDaemon(){let e=this.createDaemon();if(e)this.daemon=e}async handleProgressEvent(e,t){}cleanupExpiredEntries(){let e=Date.now(),t=[];for(let[n,r]of this.jobTrackingEntries)if(e-r.createdAt>this.jobTrackingTtlMs)t.push(n);for(let n of t)this.jobTrackingEntries.delete(n)}ownsJob(e,t){return this.jobTrackingEntries.has(e)||t!==void 0&&this.jobTrackingEntries.has(t)}getJobTracking(e,t){let n=this.jobTrackingEntries.get(e);if(n)return n.info;if(t){let r=this.jobTrackingEntries.get(t);if(r)return r.info}return}setJobTracking(e,t){this.cleanupExpiredEntries(),this.jobTrackingEntries.set(e,{info:t,createdAt:Date.now()})}removeJobTracking(e){this.jobTrackingEntries.delete(e)}async createJobWithTracking(e,t){let r=await this.getContext().jobs.enqueue(e);return this.setJobTracking(r,t),r}async createBatchWithTracking(e,t,n){let o=await this.getContext().jobs.enqueueBatch(e,n);return this.setJobTracking(o,t),o}}var by=Object.freeze({daemons:Object.freeze([])}),zB=new WeakMap;function NB(e,t,n){zB.set(e,{declarations:t,rebuild:n})}function Ru(e,t,n){let r=zB.get(e);if(!r)throw Error(`${t} takes a definition defineInterface returned; "${e.id}" is not one`);let o=r.rebuild(n(r.declarations));if(!Fte(o,e.config))throw Error(`Interface "${e.id}" did not rebuild as itself`);return o}function Fte(e,t){return e.family==="interface"&&e.config===t}function vy(e){return{run:e}}function Ute(e,t){return Ru(e,"withDaemon",(n)=>({...n,daemons:[...n.daemons,vy(t)]}))}function Zte(e,t){return Ru(e,"withMessageTransport",(n)=>{if(n.transport)throw Error(`Interface "${e.id}" declares a message transport more than once`);return{...n,transport:vy(t)}})}function Wte(e,t){return Ru(e,"withChannels",(n)=>{if(n.channels)throw Error(`Interface "${e.id}" declares its channels more than once`);return{...n,channels:{run:t}}})}function Gte(e,t){return Ru(e,"withWebRoutes",(n)=>{if(n.webRoutes)throw Error(`Interface "${e.id}" declares its web routes more than once`);return{...n,webRoutes:vy(t)}})}function Jte(e,t){return Ru(e,"withTools",(n)=>{if(n.tools)throw Error(`Interface "${e.id}" declares its tools more than once`);return{...n,tools:vy(t)}})}function Vte(e,t,n){return Ru(e,"withProtocolPlugin",(r)=>{if(r.protocol)throw Error(`Interface "${e.id}" declares a protocol plugin more than once`);let a={definition:t,...{config:n}};return{...r,protocol:a}})}var $B=Symbol("rizom.first-party-interface-runtime"),BB=new WeakSet;function Hte(e){let{agent:t,conversations:n,permissions:r,messages:o}=e,a={get guestReady(){return t.guestReady},chat:(l,c,u,d)=>t.chat(l,c,u,d),confirmPendingAction:(l,c,u,d,p)=>t.confirmPendingAction(l,c,u,d,p)},s={logger:e.logger,agent:Object.freeze(a),conversations:Object.freeze({getMessages:(l,c)=>n.getMessages(l,c),get:(l)=>n.get(l),list:(l)=>n.list(l),start:(l)=>n.start(l),addMessage:(l)=>n.addMessage(l),updateMetadata:(l)=>n.updateMetadata(l),delete:(l)=>n.delete(l)}),sharedUploads:(l={})=>e.uploads.scoped({...Lo,...l.routePath?{routePath:l.routePath}:{}}),retireUploads:(l)=>e.uploads.retire(l),gather:(l,c)=>e.messaging.gather(l,c),spaces:Object.freeze([...e.spaces]),siteUrl:e.siteUrl,localSiteUrl:e.localSiteUrl,preferLocalUrls:e.preferLocalUrls,previewUrl:e.previewUrl,themeCSS:e.themeCSS,routeByRole:(l)=>e.routeByRole(l),operationalHealth(l,c){e.onRelease(e.operationalHealth.register(l,c))},inbox:Object.freeze({getSource:(l)=>e.inbox.getSource(l)}),jobs:Object.freeze({getStatus:(l)=>e.jobs.getStatus(l)}),studio:e.studio,permissions:Object.freeze({getUserLevel:(l,c,u)=>r.getUserLevel(l,c,u),isAnchor:(l,c)=>r.isAnchor(l,c)}),production:e.production,domain:e.domain,servesHttp:e.servesHttp,auth:()=>e.auth(),mcpTransport:e.mcpTransport,endpoint(l){e.endpoints.register(l)},interaction(l){e.interactions.register(l)},listen(l,c){e.onRelease(e.messaging.subscribe(l,async(u)=>(await c({payload:u}),{success:!0})))},answer(l,c){let u=l;e.onRelease(e.messaging.answer(u,async(d,{sender:p})=>c({request:d,sender:p})))},request:(l,c)=>e.messaging.request(l,c),classRuntimeState:Object.freeze({scoped:e.runtimeState.scoped.bind(e.runtimeState)}),ready(l){e.onReady(async()=>l())},identity:Object.freeze({get:()=>e.identity.get(),getProfile:()=>e.identity.getProfile(),getAppInfo:()=>e.identity.getAppInfo()}),profileKinds:Object.freeze({getResolved:()=>e.profileKinds.getResolved()}),publicSkills:Object.freeze({list:()=>e.publicSkills.list()}),tools:Object.freeze({listForPermissionLevel:(l)=>e.tools.listForPermissionLevel(l)}),entityReads:Object.freeze({hasEntityType:(l)=>e.entityReads.hasEntityType(l),listEntities:e.entityReads.listEntities.bind(e.entityReads),getEntity:e.entityReads.getEntity.bind(e.entityReads)}),get messages(){if(!o)throw Error(`Interface "${e.interfaceId}" has no message transport: interfaceRuntime(context).messages coordinates replies only for an interface declared withMessageTransport`);return o}};return Object.freeze(s)}function ku(e,t){return cy(e,$B,t)}function LB(e){let t=Hte(e);return BB.add(t),t}function Qte(e){return e!==void 0&&BB.has(e)}function Kte(e){let t=uy(e,$B);if(!Qte(t))throw Error("This context carries no interface runtime: interfaceRuntime() reaches internal capabilities of a setup or slot context the brain's runtime built, for first-party packages only");return t}function II(e,t){e.messaging.subscribe(zl,async(n)=>{try{return await t.onProgress(n,n.metadata),{success:!0}}catch(r){return t.onError(r),{success:!1}}})}function EI(e){let t=e.status==="completed"?"\u2705":"\u274C",n=e.status==="completed"?"completed":"failed",r=e.metadata.operationType.replace(/_/g," "),o=e.metadata.operationTarget?`: ${e.metadata.operationTarget}`:"",a=`${t} **${r}${o}** ${n}`;if(e.message)a+=`
184
184
  ${e.message}`;return a}function RI(e){let t=e.metadata.operationType.replace(/_/g," "),n=e.metadata.operationTarget?`: ${e.metadata.operationTarget}`:"",r=`\uD83D\uDD04 **${t}${n}**`;if(e.progress&&e.progress.total>0)r+=` ${e.progress.current}/${e.progress.total} (${e.progress.percentage}%)`;if(e.message)r+=`
185
185
  ${e.message}`;return r}var qB=Object.defineProperty,FB=(e,t)=>{let n={};for(var r in e)qB(n,r,{get:e[r],enumerable:!0});if(!t)qB(n,Symbol.toStringTag,{value:"Module"});return n};var Yte=Symbol.for("vercel.ai.error"),Ee=class e extends Error{constructor({name:t,message:n,cause:r}){super(n);this[Yte]=!0,this.name=t,this.cause=r}static isInstance(t){return e.hasMarker(t,"vercel.ai.error")}static hasMarker(t,n){let r=Symbol.for(n);return t!=null&&typeof t==="object"&&r in t&&typeof t[r]==="boolean"&&t[r]===!0}},UB="AI_DecisionUnsupportedQuestionTypeError",ZB=`vercel.ai.error.${UB}`,Xte=Symbol.for(ZB),Sy=class extends Ee{constructor({questionId:e,questionType:t,provider:n,modelId:r,message:o=`Question "${e}" has type "${t}", which is not supported by provider "${n}" and model "${r}".`}){super({name:UB,message:o});this[Xte]=!0,this.questionId=e,this.questionType=t,this.provider=n,this.modelId=r}static isInstance(e){return Ee.hasMarker(e,ZB)}},WB="AI_APICallError",GB=`vercel.ai.error.${WB}`,ene=Symbol.for(GB),et=class extends Ee{constructor({message:e,url:t,requestBodyValues:n,statusCode:r,responseHeaders:o,responseBody:a,cause:s,isRetryable:l=r!=null&&(r===408||r===409||r===429||r>=500),data:c}){super({name:WB,message:e,cause:s});this[ene]=!0,this.url=t,this.requestBodyValues=n,this.statusCode=r,this.responseHeaders=o,this.responseBody=a,this.isRetryable=l,this.data=c}static isInstance(e){return Ee.hasMarker(e,GB)}},JB="AI_EmptyResponseBodyError",VB=`vercel.ai.error.${JB}`,tne=Symbol.for(VB),Au=class extends Ee{constructor({message:e="Empty response body"}={}){super({name:JB,message:e});this[tne]=!0}static isInstance(e){return Ee.hasMarker(e,VB)}},nne="AI_DecisionRefusalError",Vtt=`vercel.ai.error.${nne}`;function bt(e){if(e==null)return"unknown error";if(typeof e==="string")return e;if(e instanceof Error)return e.toString();return JSON.stringify(e)}var HB="AI_InvalidArgumentError",QB=`vercel.ai.error.${HB}`,rne=Symbol.for(QB),tt=class extends Ee{constructor({message:e,cause:t,argument:n}){super({name:HB,message:e,cause:t});this[rne]=!0,this.argument=n}static isInstance(e){return Ee.hasMarker(e,QB)}},KB="AI_InvalidPromptError",YB=`vercel.ai.error.${KB}`,ine=Symbol.for(YB),xs=class extends Ee{constructor({prompt:e,message:t,cause:n}){super({name:KB,message:`Invalid prompt: ${t}`,cause:n});this[ine]=!0,this.prompt=e}static isInstance(e){return Ee.hasMarker(e,YB)}},XB="AI_InvalidResponseDataError",eL=`vercel.ai.error.${XB}`,one=Symbol.for(eL),It=class extends Ee{constructor({data:e,message:t=`Invalid response data: ${JSON.stringify(e)}.`}){super({name:XB,message:t});this[one]=!0,this.data=e}static isInstance(e){return Ee.hasMarker(e,eL)}},tL="AI_JSONParseError",nL=`vercel.ai.error.${tL}`,ane=Symbol.for(nL),qo=class extends Ee{constructor({text:e,cause:t}){super({name:tL,message:`JSON parsing failed: Text: ${e}.
186
186
  Error message: ${bt(t)}`,cause:t});this[ane]=!0,this.text=e}static isInstance(e){return Ee.hasMarker(e,nL)}},rL="AI_LoadAPIKeyError",iL=`vercel.ai.error.${rL}`,sne=Symbol.for(iL),Ts=class extends Ee{constructor({message:e}){super({name:rL,message:e});this[sne]=!0}static isInstance(e){return Ee.hasMarker(e,iL)}},lne="AI_LoadSettingError",Htt=`vercel.ai.error.${lne}`;var cne="AI_NoContentGeneratedError",Qtt=`vercel.ai.error.${cne}`;var oL="AI_NoSuchModelError",aL=`vercel.ai.error.${oL}`,une=Symbol.for(aL),nm=class extends Ee{constructor({errorName:e=oL,modelId:t,modelType:n,message:r=`No such ${n}: ${t}`}){super({name:e,message:r});this[une]=!0,this.modelId=t,this.modelType=n}static isInstance(e){return Ee.hasMarker(e,aL)}},sL="AI_NoSuchProviderReferenceError",lL=`vercel.ai.error.${sL}`,dne=Symbol.for(lL),AI=class extends Ee{constructor({provider:e,reference:t,message:n=`No provider reference found for provider '${e}'. Available providers: ${Object.keys(t).join(", ")}`}){super({name:sL,message:n});this[dne]=!0,this.provider=e,this.reference=t}static isInstance(e){return Ee.hasMarker(e,lL)}},cL="AI_TooManyEmbeddingValuesForCallError",uL=`vercel.ai.error.${cL}`,pne=Symbol.for(uL),Wl=class extends Ee{constructor(e){super({name:cL,message:`Too many values for a single embedding call. The ${e.provider} model "${e.modelId}" can only embed up to ${e.maxEmbeddingsPerCall} values per call, but ${e.values.length} values were provided.`});this[pne]=!0,this.provider=e.provider,this.modelId=e.modelId,this.maxEmbeddingsPerCall=e.maxEmbeddingsPerCall,this.values=e.values}static isInstance(e){return Ee.hasMarker(e,uL)}},dL="AI_TypeValidationError",pL=`vercel.ai.error.${dL}`,mne=Symbol.for(pL),_r=class e extends Ee{constructor({value:t,cause:n,context:r}){let o="Type validation failed";if(r?.field)o+=` for ${r.field}`;if(r?.entityName||r?.entityId){o+=" (";let a=[];if(r.entityName)a.push(r.entityName);if(r.entityId)a.push(`id: "${r.entityId}"`);o+=a.join(", "),o+=")"}super({name:dL,message:`${o}: Value: ${JSON.stringify(t)}.
@@ -410,5 +410,5 @@ Result:`);if(n===-1)return;let r=e.slice(n+9).trim();if(!r)return;try{return JSO
410
410
  `)}function Z_e(e){return e.split(`
411
411
  `).flatMap((t)=>{let n=t.match(F_e);if(!n)return[];let r=(n[3]??"").split(",").map((o)=>o.trim()).filter(Boolean);return[{name:n[1]??"",description:n[2]??"",tags:r}]})}var zQ=new hs(rS,{title:"Agent",mappings:[{key:"about",label:"About",type:"string"},{key:"skills",label:"Skills",type:"custom",formatter:U_e,parser:Z_e},{key:"notes",label:"Notes",type:"string"}]});function W_e(e){return zQ.format(e)}function G_e(e){if(!e.trim())return rS.parse({});try{return zQ.parse(e)}catch{return rS.parse({})}}import{EventEmitter as WQ}from"events";var pn={REGISTERED:"registered",INITIALIZED:"initialized",ERROR:"error",DISABLED:"disabled"},qi={REGISTERED:"plugin:registered",BEFORE_INITIALIZE:"plugin:before_initialize",INITIALIZED:"plugin:initialized",ERROR:"plugin:error",DISABLED:"plugin:disabled"};class Fi extends Error{pluginId;constructor(e,t){super(`Plugin ${e}: ${t}`);this.name="PluginError",this.pluginId=e}}class NQ extends Error{pluginId;constructor(e,t){super(t);this.name="FatalPluginConfigurationError",this.pluginId=e}}var $Q=Symbol.for("brains.httpRouteSnapshotProvider");function iS(e){let t=Reflect.get(e,$Q);return typeof t==="function"?t:void 0}function J_e(e,t){if(iS(e))throw Error("HTTP route snapshot provider is already bound");Object.defineProperty(e,$Q,{value:t,enumerable:!1,configurable:!0,writable:!1})}function BQ(e,t){let n=iS(e);if(!n)throw Error("HTTP route snapshot provider is not bound");if(iS(t))return;J_e(t,n)}function nht(e){let t=iS(e);if(!t)throw Error("HTTP route snapshot provider is not bound");return t()}function qQ(e,t){return Reflect.get(e,t,e)}function FQ(e,t,n){if(typeof e!=="function")throw TypeError("Cannot apply a non-callable trapped member");return Reflect.apply(e,t,n)}class g_{scope;ingress=new Set;closePromise=null;closed=!1;constructor(){this.scope=be.runSync(un.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(o){throw AggregateError([r,o],"Plugin acquisition rollback failed",{cause:o})}throw r}return n}addFinalizer(e){this.assertOpen(),be.runSync(un.addFinalizer(this.scope,be.promise(async()=>{await e()})))}addIngress(e){this.assertOpen(),this.ingress.add(e)}close(e=cn.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 o=await Promise.allSettled(r.map((l)=>Promise.resolve().then(()=>l.drain())));this.ingress.clear();let a=o.find((l)=>l.status==="rejected");if(!n&&a)t=a.reason,n=!0;let s=await be.runPromiseExit(un.close(this.scope,e));if(!n&&cn.isFailure(s))t=$i.squash(s.cause),n=!0;if(n)throw t}}function yc(e,t,n,r){return new Proxy(e,{get(o,a){let s=qQ(o,a);if(typeof a==="string"&&t.some((l)=>l===a)&&typeof s==="function")return(...l)=>n.acquire(()=>FQ(s,o,l),(c)=>r(l,c));return typeof s==="function"?s.bind(o):s}})}function LQ(e){return typeof e==="function"}function wf(e,t,n){return yc(e,t,n,(r)=>{let o=r[0];if(typeof o==="string")e.unregisterPlugin(o)})}function UQ(e,t){let n=e.getMessageBus(),r=new Set,o=(A,k,j)=>{t.assertOpen();let z=!0,G=new Set,N=j((B)=>{if(!z)return{noop:!0};let K,ee=new Promise((ae)=>{K=ae});G.add(ee);let F=()=>{G.delete(ee),K()},O;try{O=Promise.resolve(k(B))}catch(ae){throw F(),ae}return O.then((ae)=>(F(),ae),(ae)=>{throw F(),ae})}),q={type:A,originalHandler:k,stopAdmission:()=>{if(!z)return;z=!1,N(),r.delete(q)}};r.add(q);try{t.addIngress({stopAdmission:q.stopAdmission,drain:async()=>{await Promise.all(G)}})}catch(B){throw q.stopAdmission(),B}return q.stopAdmission},a={send:(A)=>n.send(A),hasHandlers:(A)=>n.hasHandlers?.(A)??!1,subscribe:(A,k,j)=>o(A,k,(z)=>n.subscribe(A,z,j)),observe:(A,k)=>o(A,k,(j)=>n.observe(A,j)),deliverPeer:(A,k)=>n.deliverPeer(A,k),unsubscribe:(A,k)=>{let j=[...r].filter((z)=>z.type===A&&z.originalHandler===k);if(j.length===0){n.unsubscribe(A,k);return}for(let z of j)z.stopAdmission()},collect:(A)=>n.collect(A),validateMessage:(A,k)=>n.validateMessage(A,k),getHandlerCount:(A)=>n.getHandlerCount(A),getTargetedHandlerCount:(A,k)=>n.getTargetedHandlerCount(A,k),clearHandlers:(A)=>n.clearHandlers(A),clearAllHandlers:()=>n.clearAllHandlers()},s=e.getAttachmentRegistry(),l={...s,register:(A,k,j)=>t.acquire(()=>s.register(A,k,j),(z)=>z())},c=e.getEntityRegistry(),u=yc(c,["registerEntityType"],t,(A)=>{let k=A[0];if(typeof k==="string")c.unregisterEntityType(k)}),d=wf(e.getProfileKindRegistry(),["register"],t),p=wf(e.getChannelRegistry(),["registerDescriptor","registerDeliveryProvider"],t),f=wf(e.getInboxRegistry(),["registerSource"],t),g=wf(e.getInboxFollowUpRegistry(),["registerKind"],t),h=e.getAccountSettingsRegistry(),w=yc(h,["register"],t,(A,k)=>{FQ(h.unregister,h,[k])}),v=yc(e.getAuthRegistry(),["bindBackend"],t,(A,k)=>{if(LQ(k))k()}),b=yc(e.getAtprotoProjectionRegistry(),["register"],t,(A,k)=>{if(LQ(k))k()}),x=wf(e.getOperationalHealthRegistry(),["register"],t),T=e.getDataSourceRegistry(),C=yc(T,["register"],t,(A)=>{let k=A[0];if(typeof k==="object"&&k!==null&&"id"in k&&typeof k.id==="string"){let j=k.id.includes(":")?k.id:`shell:${k.id}`;T.unregister(j)}}),S=e.getAnalyticsRegistry(),y=yc(S,["register"],t,(A)=>{let k=A[0];if(typeof k==="object"&&k!==null&&"type"in k&&typeof k.type==="string")S.unregister(k.type)}),R=new Proxy(e,{get(A,k){if(k==="getMessageBus")return()=>a;if(k==="getAttachmentRegistry")return()=>l;if(k==="getEntityRegistry")return()=>u;if(k==="getDataSourceRegistry")return()=>C;if(k==="getProfileKindRegistry")return()=>d;if(k==="getChannelRegistry")return()=>p;if(k==="getInboxRegistry")return()=>f;if(k==="getInboxFollowUpRegistry")return()=>g;if(k==="getOperationalHealthRegistry")return()=>x;if(k==="getAccountSettingsRegistry")return()=>w;if(k==="getAuthRegistry")return()=>v;if(k==="getAtprotoProjectionRegistry")return()=>b;if(k==="getAnalyticsRegistry")return()=>y;let j=qQ(A,k);return typeof j==="function"?j.bind(A):j}});return BQ(e,R),R}class h_{plugins;events;daemonRegistry;logger;projectionRegistry;resourceScopes=new Map;releasePromises=new Map;constructor(e,t,n,r,o){this.plugins=e,this.events=t,this.daemonRegistry=n,this.projectionRegistry=r,this.logger=o.child("PluginLifecycle")}async initializePlugin(e,t,n){let r=this.plugins.get(e);if(!r)throw new Fi(e,"Registration failed: Plugin is not registered");let o=r.plugin,a=new g_;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(qi.BEFORE_INITIALIZE,e,o);let s=await o.register(UQ(t,a),n);return r.status=pn.INITIALIZED,this.logger.debug(`Initialized plugin: ${e}`),this.events.emit(qi.INITIALIZED,e,o),s}catch(s){throw this.logger.error(`Error initializing plugin ${e}: ${he(s)}`),await this.failPluginInitialization(e,s),s}}async finalizePluginRegistration(e){let t=this.plugins.get(e);if(!t)throw new Fi(e,"Registration finalization failed: Plugin is not registered");if(t.status!==pn.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 Fi(e,"Ready failed: Plugin is not registered");if(t.status!==pn.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=mu(n);t.status=pn.ERROR,t.error=r;try{this.events.emit(qi.ERROR,e,r)}catch(o){this.logger.error(`Plugin error listener failed for ${e}`,o)}throw r}}async startPluginDaemons(e){let t=this.plugins.get(e);if(t?.status!==pn.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: ${he(n)}`)}}async failPluginInitialization(e,t){let n=this.plugins.get(e);if(!n)return;let r=n.status!==pn.ERROR,o=mu(t);if(n.status=pn.ERROR,n.error=o,await this.releasePluginResources(e,cn.fail(t)),r)try{this.events.emit(qi.ERROR,e,o)}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===pn.DISABLED)return;this.logger.debug(`Disabling plugin: ${e}`);let n=t.status===pn.ERROR;await this.releasePluginResources(e,cn.void);let r=this.plugins.get(e);if(!n&&r&&r.status!==pn.DISABLED)r.status=pn.DISABLED,this.events.emit(qi.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(o){this.logger.error(`Failed to stop daemons for plugin: ${e}`,o)}let r=this.resourceScopes.get(e);if(this.resourceScopes.delete(e),r)try{await r.close(t)}catch(o){this.logger.error(`Failed to close resources for plugin ${e}`,o)}if(n.plugin.shutdown)try{await n.plugin.shutdown(),this.logger.debug(`Shutdown completed for plugin: ${e}`)}catch(o){this.logger.error(`Plugin shutdown failed for ${e}:`,o)}for(let o of this.daemonRegistry.getByPlugin(e))try{await this.daemonRegistry.unregister(o.name)}catch(a){this.logger.error(`Failed to unregister daemon ${o.name} for plugin ${e}`,a)}}}class y_{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=he(u);this.logger.error(`Failed to initialize plugin ${s}: ${d}`),n.add(s),r=!0}}}let o=t.filter((s)=>!n.has(s));if(o.length>0){let s=o.join(", ");this.logger.error(`Failed to initialize plugins due to dependency issues: ${s}`);for(let l of o){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=pn.ERROR,u.error=new Fi(l,`Unmet dependencies: ${c.join(", ")}`);this.events.emit(qi.ERROR,l,u?.error)}}let a=new Set;for(let[s,l]of this.plugins)if(l.status===pn.INITIALIZED)a.add(s);return this.logger.debug(`Resolved ${a.size} of ${t.length} plugins`),{initialized:a,failed:o}}getUnmetDependencies(e){let t=this.plugins.get(e);if(!t)return[];let{dependencies:n}=t,r=[];for(let o of n){let a=this.plugins.get(o);if(!a){r.push(o);continue}if(a.status!==pn.INITIALIZED)r.push(o)}return r}}class b_{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 o=n.projectionRules??[];try{for(let a of o)this.projectionRegistry.registerRule(t,a)}catch(a){throw this.projectionRegistry.unregisterPlugin(t),a}if(o.length>0)this.logger.debug(`Registered ${o.length} projection rules from ${t}`)}}class oS{projections=new Map;rules=new Map;static createFresh(){return new oS}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 o=!0;return()=>{if(!o)return;if(o=!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(Q_e)}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(),o=K_e(t,r),a=X_e(t,o)[0];if(a){let s=ePe(a,o);throw Error(`Projection cycle is not supported: ${[...s,s[0]].join(" -> ")}`)}return H_e({projections:t,edges:o,unknownSourceTypes:V_e(t,n)})}}function V_e(e,t){let n=[];for(let r of e){let o=[...new Set(r.sources.flatMap((a)=>[...a.types,...a.excludeTypes??[]]).filter((a)=>a!=="*"&&!t.has(a)))].sort();if(o.length>0)n.push({projectionId:r.id,types:o})}return n}function H_e(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 Q_e(e){return{...e,sources:e.sources.map((t)=>({...t,types:[...t.types],...t.excludeTypes?{excludeTypes:[...t.excludeTypes]}:{}}))}}function K_e(e,t){let n=new Map;for(let r of e)for(let o of e){let a=Y_e(r,o,t);if(a.length===0)continue;n.set(`${r.id}\x00${o.id}`,new Set(a))}return Array.from(n,([r,o])=>{let[a="",s=""]=r.split("\x00");return{from:a,to:s,causes:[...o].sort()}}).sort((r,o)=>r.from.localeCompare(o.from)||r.to.localeCompare(o.to))}function Y_e(e,t,n){let r=[];for(let o of t.sources){let a=new Set(o.excludeTypes??[]);if((o.types.includes("*")?[...o.types.filter((l)=>l!=="*"),...n]:o.types).includes(e.targetType)&&!a.has(e.targetType))r.push(`entity:${e.targetType}`)}return[...new Set(r)]}function X_e(e,t){let n=e.map(({id:p})=>p).sort(),r=ZQ(n,t),o=new Map,a=new Map,s=[],l=new Set,c=[],u=0,d=(p)=>{o.set(p,u),a.set(p,u),u++,s.push(p),l.add(p);for(let w of r.get(p)??[])if(!o.has(w))d(w),a.set(p,Math.min(a.get(p)??0,a.get(w)??0));else if(l.has(w))a.set(p,Math.min(a.get(p)??0,o.get(w)??0));if(a.get(p)!==o.get(p))return;let f=[],g;do{if(g=s.pop(),!g)break;l.delete(g),f.push(g)}while(g!==p);let h=r.get(p)?.includes(p)??!1;if(f.length>1||h)c.push(f.sort())};for(let p of n)if(!o.has(p))d(p);return c.sort((p,f)=>(p[0]??"").localeCompare(f[0]??""))}function ePe(e,t){let n=new Set(e),r=ZQ(e,t),o=[...e].sort()[0];if(!o)return[];if(r.get(o)?.includes(o))return[o];let a=(s,l)=>{for(let c of r.get(s)??[]){if(!n.has(c))continue;if(c===o)return l;if(l.includes(c))continue;let u=a(c,[...l,c]);if(u)return u}return};return a(o,[o])??[...e].sort()}function ZQ(e,t){let n=new Map;for(let r of e)n.set(r,[]);for(let r of t){let o=n.get(r.from);if(o&&!o.includes(r.to))o.push(r.to)}for(let r of n.values())r.sort();return n}class aS{plugins=new Map;logger;events=new WQ;daemonRegistry;shell=null;initializedPluginIds=[];channelOnlyPlugins=[];pluginLifecycle;dependencyResolver;capabilityRegistrar;projectionRegistry=oS.createFresh();projectionGraph;static createFresh(e,t){return new aS(e,t)}setShell(e){this.shell=e}constructor(e,t){this.logger=e.child("PluginManager"),this.events=new WQ,this.daemonRegistry=t,this.pluginLifecycle=new h_(this.plugins,this.events,this.daemonRegistry,this.projectionRegistry,e),this.dependencyResolver=new y_(this.plugins,this.events,e),this.capabilityRegistrar=new b_(e,this.projectionRegistry)}registerPlugin(e){if(!e.id)throw new Fi("unknown","Registration failed: Plugin must have an id");if(this.logger.debug(`Registering plugin: ${e.id} (${e.version})`),this.plugins.has(e.id)){let o=this.plugins.get(e.id)?.plugin.version;throw new Fi(e.id,`Registration failed: Plugin is already registered with version ${o}`)}let t=e.dependencies??[],n={plugin:e,status:pn.REGISTERED,dependencies:t};this.plugins.set(e.id,n),this.logger.debug(`Registered plugin: ${e.id} (${e.version})`),this.events.emit(qi.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),this.channelOnlyPlugins.push(r)}catch(o){this.logger.error(`Channel registration failed for interface ${r.id}: ${he(o)}`)}}async initializePlugin(e,t){if(!this.shell)throw new Fi(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 v_(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===pn.ERROR)await this.pluginLifecycle.failPluginInitialization(t,n.error??e)}throw e}}async startPluginDaemons(){this.logger.debug("Starting plugin daemons..."),await v_(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===pn.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===pn.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);for(let t of this.channelOnlyPlugins.splice(0).reverse())try{await t.shutdown?.()}catch(n){this.logger.error(`Shutdown failed for interface channels ${t.id}: ${he(n)}`)}}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 GQ={public:0,trusted:1,admin:2},tPe=[{id:"dashboard",roles:["dashboard"],label:"Dashboard",visibility:"public",requiresActiveSession:!1},{id:"web-chat",roles:["studio-chat","ask"],requiresRole:"chat-api",label:"Chat",visibility:"trusted",requiresActiveSession:!0},{id:"studio",roles:["studio"],label:"Studio",visibility:"public",requiresActiveSession:!0}];function nPe(e,t){let n=GQ[t.permissionLevel??"public"],r=[];for(let{id:o,roles:a,requiresRole:s,label:l,visibility:c,requiresActiveSession:u}of tPe){let d=t.self?.id===o;if(!d&&(n<GQ[c]||u&&t.hasActiveSession!==!0))continue;let p=d?t.self?.href:s&&!ws(e,s)?void 0:a.map((f)=>ws(e,f)?.fullPath).find((f)=>f!==void 0);if(p!==void 0)r.push({id:o,label:l,href:p,isActive:o===t.activeId,...u?{requiresActiveSession:!0}:{}})}return r}class JQ{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(!vi.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 o=Tr(e.permission),a=o==="public"?bp(e.entityService,{publishedOnly:!0,visibilityScope:o}):e.entityService;return t.handler(r.data,{entityService:a,visibilityScope:o})}}function rPe(e){return e}function sS(e){let t=e?.trim();if(!t)return"http://localhost:8080";let n=t.replace(/\/+$/,""),r=new URL(n);if(r.pathname!=="/"||r.search||r.hash)throw Error("OAuth issuer must be an origin without path, query, or hash");return r.origin}function iPe(e){let t=new URL(sS(e)).hostname.toLowerCase();return t==="localhost"||t==="[::1]"||t==="::1"||t.startsWith("127.")}function VQ(e,t){let r=e.headers.get("x-forwarded-proto")?.split(",")[0]?.trim(),o=e.headers.get("x-forwarded-host")??e.headers.get("host");if(o){let a=r??new URL(e.url).protocol.replace(":","");return sS(`${a}://${o}`)}return sS(t??new URL(e.url).origin)}function HQ(e,t){return new Response(JSON.stringify({error:e}),{status:t,headers:{"Content-Type":"application/json; charset=utf-8","Cache-Control":"no-store"}})}function QQ(e){let t=e.headers.get("origin");if(t===null)return!1;try{return t===VQ(e)}catch{return!1}}function KQ(e){return QQ(e)?void 0:HQ("Same-origin request required",403)}function oPe(e){let t=KQ(e);if(t)return t;if(!e.headers.get("content-type")?.startsWith("application/json"))return HQ("JSON request required",415);return}export{Oc as Na,jf as Oa,zt as Pa,M as Qa,zc as Ra,V as Sa,Ka as Ta,ce as Ua,$n as Va,Hn as Wa,eP as Xa,br as Ya,Tt as Za,Qn as _a,ca as $a,ol as ab,Ya as bb,at as cb,Xt as db,mP as eb,Uf as fb,es as gb,We as hb,de as ib,Ft as jb,Pt as kb,FS as lb,$r as mb,J as nb,ng as ob,lw as pb,Hi as qb,Qi as rb,mO as sb,jK as tb,DK as ub,qn as vb,ts as wb,In as xb,yn as yb,mi as zb,ua as Ab,Ct as Bb,Ni as Cb,fO as Db,LK as Eb,qK as Fb,FK as Gb,Yd as Hb,ns as Ib,vw as Jb,xw as Kb,Tw as Lb,Br as Mb,ui as Nb,Oi as Ob,Pc as Pb,Tr as Qb,Ja as Rb,Ir as Sb,ug as Tb,pg as Ub,Fc as Vb,Uc as Wb,mg as Xb,gNe as Yb,hNe as Zb,Zc as _b,Yi as $b,Pn as ac,ep as bc,fg as cc,cl as dc,Wc as ec,Lr as fc,jO as gc,dl as hc,bg as ic,wg as jc,Mw as kc,jw as lc,xg as mc,Tg as nc,zw as oc,Ig as pc,Vc as qc,Oo as rc,Hc as sc,Rr as tc,Gi as uc,Qw as vc,Kw as wc,B5 as xc,L5 as yc,ex as zc,hLe as Ac,rx as Bc,ox as Cc,jo as Dc,Bg as Ec,vM as Fc,as as Gc,SM as Hc,nqe as Ic,wM as Jc,qg as Kc,W as Lc,Do as Mc,P as Nc,fe as Oc,_ as Pc,vr as Qc,EM as Rc,ma as Sc,hi as Tc,Fr as Uc,cp as Vc,Ce as Wc,Mn as Xc,ot as Yc,_M as Zc,PM as _c,st as $c,Yc as ad,Xc as bd,ls as cd,oj as dd,rh as ed,au as fd,Ox as gd,Mx as hd,Ux as id,uh as jd,eT as kd,hh as ld,d0 as md,m0 as nd,fs as od,nT as pd,B9 as qd,g0 as rd,bh as sd,rT as td,h0 as ud,fa as vd,hHe as wd,yHe as xd,bHe as yd,vHe as zd,oT as Ad,vh as Bd,aT as Cd,sT as Dd,J9 as Ed,SHe as Fd,wHe as Gd,xHe as Hd,THe as Id,CHe as Jd,IHe as Kd,EHe as Ld,bi as Md,RHe as Nd,vp as Od,y0 as Pd,El as Qd,get as Rd,vte as Sd,yB as Td,dy as Ud,ba as Vd,PD as Wd,zKe as Xd,FT as Yd,Pp as Zd,gY as _d,hY as $d,yY as ae,bY as be,ZD as ce,du as de,vY as ee,SY as fe,wY as ge,cu as he,hs as ie,TY as je,VD as ke,QD as le,EY as me,GT as ne,XD as oe,kY as pe,JT as qe,VT as re,I0 as se,R0 as te,Sh as ue,j0 as ve,hT as we,xT as xe,N0 as ye,Ur as ze,zl as Ae,re as Be,yt as Ce,rC as De,oC as Ee,aC as Fe,$o as Ge,sC as He,zp as Ie,Np as Je,lC as Ke,cC as Le,uC as Me,dC as Ne,wt as Oe,kh as Pe,Ah as Qe,L3e as Re,q3e as Se,HY as Te,xz as Ue,U3e as Ve,r7 as We,Z3e as Xe,W3e as Ye,G3e as Ze,J3e as _e,V3e as $e,H3e as af,Q3e as bf,K3e as cf,Y3e as df,X3e as ef,e9e as ff,c7 as gf,u7 as hf,n9e as if,r9e as jf,i9e as kf,o9e as lf,a9e as mf,s9e as nf,l9e as of,c9e as pf,Ae as qf,Fn as rf,Bl as sf,wa as tf,_h as uf,Ph as vf,_z as wf,Pz as xf,p7 as yf,Oh as zf,wC as Af,qp as Bf,nN as Cf,Fp as Df,jh as Ef,Ll as Ff,iN as Gf,Dh as Hf,IC as If,oN as Jf,zh as Kf,EC as Lf,RC as Mf,k7 as Nf,PC as Of,P7 as Pf,qh as Qf,py as Rf,MC as Sf,hu as Tf,IT as Uf,Pke as Vf,qC as Wf,Oke as Xf,RT as Yf,Mke as Zf,jke as _f,zke as $f,h4 as ag,Nke as bg,v4 as cg,T4 as dg,I4 as eg,Iu as fg,Vr as gg,Bv as hg,E4 as ig,KA as jg,O4 as kg,df as lg,M4 as mg,xd as ng,j4 as og,Kke as pg,D4 as qg,z4 as rg,lAe as sg,$4 as tg,so as ug,ree as vg,D$ as wg,iee as xg,oee as yg,aee as zg,see as Ag,mAe as Bg,fAe as Cg,gAe as Dg,XA as Eg,Lo as Fg,xa as Gg,L7 as Hg,NC as Ig,Jt as Jg,T8 as Kg,kT as Lg,HC as Mg,N8 as Ng,W8 as Og,G8 as Pg,J8 as Qg,V8 as Rg,H8 as Sg,K8 as Tg,Y8 as Ug,X8 as Vg,eY as Wg,tY as Xg,nY as Yg,Gh as Zg,Z0 as _g,J0 as $g,K0 as ah,oI as bh,sI as ch,Th as dh,rY as eh,Oee as fh,jee as gh,Dee as hh,zee as ih,Lee as jh,aB as kh,hI as lh,pI as mh,Vee as nh,K$ as oh,SI as ph,lte as qh,Y$ as rh,eB as sh,nB as th,mte as uh,bte as vh,zte as wh,Lte as xh,Ute as yh,Zte as zh,Wte as Ah,Gte as Bh,Jte as Ch,Vte as Dh,Kte as Eh,Rce as Fh,Got as Gh,Aa as Hh,Bue as Ih,aR as Jh,Nm as Kh,AV as Lh,hk as Mh,wwe as Nh,xwe as Oh,Twe as Ph,yk as Qh,Tk as Rh,Ck as Sh,NV as Th,Ik as Uh,$V as Vh,Rk as Wh,Ak as Xh,_k as Yh,Pk as Zh,Ok as _h,Pe as $h,aA as ai,xRe as bi,EA as ci,nke as di,DA as ei,zA as fi,J2 as gi,Iv as hi,Ev as ii,Sd as ji,Rv as ki,kv as li,cf as mi,Av as ni,e4 as oi,s4 as pi,l4 as qi,wd as ri,gc as si,uf as ti,Dv as ui,zv as vi,Nv as wi,Cke as xi,Ike as yi,Eke as zi,Rke as Ai,kke as Bi,_ke as Ci,pf as Di,mf as Ei,yAe as Fi,vAe as Gi,BAe as Hi,H4 as Ii,Q4 as Ji,eQ as Ki,tQ as Li,nQ as Mi,rQ as Ni,oQ as Oi,r_ as Pi,i_ as Qi,cQ as Ri,o_ as Si,Jv as Ti,pQ as Ui,Vv as Vi,a_ as Wi,mQ as Xi,fQ as Yi,hQ as Zi,yQ as _i,Hv as $i,c_ as aj,yf as bj,vQ as cj,SQ as dj,wQ as ej,xQ as fj,TQ as gj,C_e as hj,I_e as ij,A_e as jj,__e as kj,P_e as lj,Kv as mj,EQ as nj,Yv as oj,Xv as pj,eS as qj,kQ as rj,hc as sj,tS as tj,Sf as uj,AQ as vj,p_ as wj,PQ as xj,DQ as yj,N_e as zj,q_e as Aj,W_e as Bj,G_e as Cj,NQ as Dj,J_e as Ej,nht as Fj,aS as Gj,nPe as Hj,JQ as Ij,rPe as Jj,sS as Kj,iPe as Lj,VQ as Mj,KQ as Nj,oPe as Oj};
412
412
 
413
- //# debugId=1345F3D84F8FCCFB64756E2164756E21
414
- //# sourceMappingURL=index-jdw1vf1q.js.map
413
+ //# debugId=25B9EDDC23DFAA1A64756E2164756E21
414
+ //# sourceMappingURL=index-461jgd27.js.map