@rizom/brain 0.2.0-alpha.685 → 0.2.0-alpha.686
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/brain.js +27 -27
- package/dist/chunks/{app-jyfk7s9m.js → app-4c53djz8.js} +2 -2
- package/dist/chunks/{index-v7fe5rpz.js → index-6na1nq7g.js} +2 -2
- package/dist/chunks/{index-nj68nsdp.js → index-955w889r.js} +3 -3
- package/dist/chunks/{index-nj68nsdp.js.map → index-955w889r.js.map} +3 -3
- package/dist/chunks/{index-cn7cb3ve.js → index-ez8a274a.js} +3 -3
- package/dist/chunks/{index-cn7cb3ve.js.map → index-ez8a274a.js.map} +1 -1
- package/dist/chunks/{index-kyhqwbat.js → index-f33mthze.js} +2 -2
- package/dist/chunks/{index-27ea29ae.js → index-qte031xt.js} +2 -2
- package/dist/chunks/{index-7dx1zqyb.js → index-yhwj6qak.js} +2 -2
- package/dist/chunks/{linkedin-template-q4aankvw.js → linkedin-template-4we655mx.js} +2 -2
- package/dist/chunks/{package-gy1ank6b.js → package-pzecgmq7.js} +3 -3
- package/dist/chunks/{package-gy1ank6b.js.map → package-pzecgmq7.js.map} +1 -1
- package/dist/entities.js +1 -1
- package/dist/index.js +1 -1
- package/dist/interfaces.js +1 -1
- package/dist/model.js +25 -25
- package/dist/model.js.map +1 -1
- package/dist/services.js +1 -1
- package/dist/testing.js +1 -1
- package/dist/ui/studio-chunks/main-7zrz7m38.js.map +1 -1
- package/package.json +1 -1
- /package/dist/chunks/{app-jyfk7s9m.js.map → app-4c53djz8.js.map} +0 -0
- /package/dist/chunks/{index-v7fe5rpz.js.map → index-6na1nq7g.js.map} +0 -0
- /package/dist/chunks/{index-kyhqwbat.js.map → index-f33mthze.js.map} +0 -0
- /package/dist/chunks/{index-27ea29ae.js.map → index-qte031xt.js.map} +0 -0
- /package/dist/chunks/{index-7dx1zqyb.js.map → index-yhwj6qak.js.map} +0 -0
- /package/dist/chunks/{linkedin-template-q4aankvw.js.map → linkedin-template-4we655mx.js.map} +0 -0
|
@@ -180,7 +180,7 @@ ${r.map((s)=>jY(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:hP()}).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),Dz())).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 wC=i.record(i.string(),i.unknown());var b7=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:wC}),v7=i.object({id:i.string(),conversationId:i.string(),role:Ss,content:i.string(),timestamp:i.string(),metadata:wC});function S7(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 $z(e){return{id:e.id,conversationId:e.conversationId,role:S7(e.role),content:e.content,timestamp:e.timestamp,metadata:wa(e.metadata)}}var xC=i.object({name:i.string(),role:i.string(),purpose:i.string(),values:i.array(i.string())}),TC=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 Bz(e){return xC.parse(e)}function Lz(e){return TC.parse(e)}var w7=new Set(Object.values(ll));function Fz(e){return qz(e[0])}function CC(e,t,n){if(!Fz(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 Uz(e){return async()=>pC(await e.getAppInfo())}function Zz(e,t){return{get:()=>Bz(e.getIdentity()),getProfile:()=>Lz(e.getProfile()),getAppInfo:t}}function Wz(e,t){let n=e.getProfileKindRegistry();return{register:(r)=>{n.register(t,r)},getResolved:()=>n.getResolved(),getSelectedDefinition:()=>n.getSelectedDefinition()}}function IC(e){let t=e.getChannelRegistry();return{listDescriptors:()=>t.listDescriptors(),getDescriptor:(n)=>t.getDescriptor(n),getDeliveryProvider:(n)=>t.getDeliveryProvider(n)}}function Gz(e,t){let n=e.getOperationalHealthRegistry();return{register:(r,o)=>n.register(t,r,o)}}function Jz(e,t){let n=e.getInboxRegistry();return{registerSource:(r)=>{n.registerSource(t,r)},listSources:()=>n.listSources(),getSource:(r)=>n.getSource(r)}}function Vz(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 Hz(e,t){let n=e.getChannelRegistry();return{...IC(e),registerDescriptor:(r)=>{n.registerDescriptor(t,r)},registerDeliveryProvider:(r)=>{n.registerDeliveryProvider(t,r)}}}function Qz(e,t,n,r=!1){let o=e.getMessageBus();return{broadcast:(a,s)=>Br(o,a,s,t),request:(a,s)=>Tw(o,a,s,t),gather:(a,s)=>Cw(o,a,s,t),command:(a,s)=>Iw(o,a,s,t),answer:(a,s,l)=>{if(r&&l?.everyProcess!==!0)return()=>{};return Ew(o,a,s,{owner:t,logger:n})},subscribe:(...a)=>{let s=Fz(a)?a[0].name:a[0];if(w7.has(s))throw Error(`${t} subscribes to ${s}, which every process raises; use observe or subscribeExecution`);if(r)return()=>{};return CC(a,n,(l,c)=>o.subscribe(l,c))},subscribeExecution:(...a)=>CC(a,n,(s,l)=>o.subscribe(s,l)),observe:(...a)=>r?()=>{}:CC(a,n,(s,l)=>o.observe(s,l))}}function Kz(e,t){let n=e.getJobQueueService();return{...e.jobs,enqueue:Np(n,t,!0),enqueueBatch:uC(e.jobs,t),registerHandler:dC(n,t),has:cC(n)}}function Yz(e){let t=e.getPermissionService();return{assertEntityActionAllowed:(n,r,o)=>{t.assertEntityActionAllowed(n,r,o.userPermissionLevel)}}}function Xz(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($z),countMessages:async(t)=>e.getConversationService().countMessages(t)}}function eN(e,t){return{registerHandler:(n,r)=>{e.registerEvalHandler(t,n,r)}}}function tN(e){return{register:(t)=>{e.getAnalyticsRegistry().register(t)}}}function nN(e){return{has:(t)=>e.getPluginPackageName(t)!==void 0}}function rN(e,t){return{register:(n)=>{e.registerEndpoint({...n,pluginId:t})}}}function iN(e,t){return{register:(n)=>{e.registerInteraction({...n,pluginId:t})}}}var qp="DeclarativeOperatorWorkspace",x7=i.object({id:i.string().trim().min(1),query:i.record(i.string().trim().min(1),i.string())}).strict(),oN=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(x7).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()}),T7=i.object({workspaceUrl:i.string()}),C7=i.object({pluginId:i.string(),workspaceId:i.string().optional()}),Fp=Xn({channel:"studio:register-workspace",request:oN,response:T7,delivery:"request"}),jh=Xn({channel:"studio:unregister-workspace",request:C7,response:i.void(),delivery:"request"});function aN(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",sN=i.object({label:i.string(),value:i.string(),tone:i.enum(["plain","good","warn"]).optional()}),I7=i.object({component:i.custom((e)=>typeof e==="function",{message:"Expected dashboard widget component function"}),clientStyles:i.string().optional(),clientScript:i.string().optional()}),E7=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(sN).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:I7.optional()}).strict(),R7=i.object({pluginId:i.string(),widgetId:i.string().optional()}),Dh=Xn({channel:"dashboard:register-widget",request:E7,response:i.void(),delivery:"request"}),EC=Xn({channel:"dashboard:unregister-widget",request:R7,response:i.void(),delivery:"request"});var lN=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(),k7=i.object({pluginId:i.string(),contributionId:i.string().optional()}),zh=Xn({channel:"studio:register-overview-contribution",request:lN,response:i.void(),delivery:"request"}),RC=Xn({channel:"studio:unregister-overview-contribution",request:k7,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 cN(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(EC,{pluginId:t,...o?{widgetId:o}:{}})),s=Nh("unregister",await r(RC,{pluginId:t,...o?{contributionId:o}:{}}));return a||s}}}var kC=i.object({name:i.string(),description:i.string(),tags:i.array(i.string()),examples:i.array(i.string())});var uN=100;function A7(e){let t=e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,200);return t.length>0?t:"skill"}function dN(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)=>kC.safeParse(o.metadata)).filter((o)=>o.success).map(({data:o})=>({id:A7(o.name),name:o.name,description:o.description,tags:o.tags,examples:o.examples}));if(r.length>0)return r.slice(0,uN)}}return e.listToolsForPermissionLevel("public").map((n)=>({id:n.name,name:n.name,description:n.description,tags:[],examples:[]})).slice(0,uN)}}}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=Uz(e),p=e.getAttachmentRegistry(),f=e.getRuntimeUploadRegistry(),g=e.getRuntimeState(),h=e.getAccountSettingsRegistry(),w=n?.executionOnly===!0,v=Qz(e,t,o,w);return{pluginId:t,executionOnly:w,logger:o,entityService:r,semantic:{project:(b)=>r.projectSemanticSpace(b)},identity:Zz(e,d),profileKinds:Wz(e,t),channels:IC(e),publicSkills:dN(e),inbox:Jz(e,t),inboxFollowUps:Vz(e,t),appInfo:d,readiness:()=>e.getRuntimeReadiness(),operationalHealth:Gz(e,t),judge:(b)=>e.judge(b),domain:a,siteUrl:a?`https://${a}`:void 0,localSiteUrl:s,previewUrl:a?`https://${JT(a)}`:void 0,preferLocalUrls:l,production:c,servesHttp:e.servesHttp(),themeCSS:u,entityDisplay:n?.entityDisplay,spaces:e.getSpaces(),permissions:Yz(e),messaging:v,dashboard:cN(v,t,(b)=>e.getMessageBus().hasHandlers?.(b)??!1),studio:aN(v,t,(b)=>e.getMessageBus().hasHandlers?.(b)??!1),jobs:Kz(e,t),jobAuthority:oz(e,t),attachments:p,uploads:f,accountSettings:h,auth:e.getAuthRegistry(),atprotoProjections:e.getAtprotoProjectionRegistry(),runtimeState:g,recurringChecks:e.getRecurringChecks(t),conversations:Xz(e),dataDir:e.getDataDir(),gitBrokerSocket:e.getGitBrokerSocket(),gitBrokerCheckout:e.getGitBrokerCheckout(),eval:w?{registerHandler:()=>{}}:eN(e,t),analytics:w?{register:()=>{}}:tN(e),plugins:nN(e),endpoints:w?{register:()=>{}}:rN(e,t),interactions:w?{register:()=>{}}:iN(e,t)}}function Zp(e){return e.replace(/:/g,"-")}function fN(e){return sT(e.replace(/[:.]/g," "))}function _7(e){return e.split(/[:.-]/).map((t)=>t.charAt(0).toUpperCase()+t.slice(1)).join(" ")}var P7=i.record(i.string(),i.unknown());function PC(e){let t=Pn(e,P7);return{body:t.content,frontmatter:t.metadata}}function gN(e){return PC(e).body}function AC(e){return Di(e.trim())}function hN(e,t){let n=Zp(e),r=fN(e),o=AC(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 O7(e,t,n){let r=await e("prompt",Zp(t));return r?.content?gN(r.content):n}var pN=new WeakMap;function _C(e){let t=pN.get(e);if(t)return t;let n=new Set;return pN.set(e,n),n}async function OC(e,t,n){let r=Zp(t),o;try{o=await e.getEntity({entityType:"prompt",id:r})}catch{return n}if(o?.content)return gN(o.content);if(_C(e).has(t))return n;let a=hN(t,n);try{await e.createEntity({entity:a})}catch{}return _C(e).add(t),n}async function mN(e,t,n,r,o){await e.updateEntity({entity:{...t,content:Yi(r,{...n,defaultHash:o}),metadata:{...t.metadata,defaultHash:o}}})}async function M7(e,t,n){let r=await e.getEntity({entityType:"prompt",id:Zp(t),source:!0});if(!r)return await e.createEntity({entity:hN(t,n)}),_C(e).add(t),"created";let{body:o,frontmatter:a}=PC(r.content),s=AC(n),l=AC(o),c=typeof a.defaultHash==="string"?a.defaultHash:void 0;if(l===s){if(c===s)return;return await mN(e,r,a,o,s),"stamped"}if(c===void 0)return"unverifiedOverrides";if(c===s)return;if(l!==c)return"staleOverrides";return await mN(e,r,a,n,s),"refreshed"}async function j7(e,t){let n=fN(t),r=_7(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}=PC(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 D7(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 M7(t,a,s),retitled:await j7(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)=>OC(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 MC(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 jC=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=MC(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 z7=i.strictObject({field:i.string().min(1).max(100),direction:i.enum(["asc","desc"]),nullsFirst:i.boolean().optional(),nullsLast:i.boolean().optional()}),yN=i.array(i.string().min(1)).optional(),N7=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(z7).max(10).optional(),markdownImport:i.boolean().optional(),retiredFields:yN,translatedFields:yN,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 bN(e,t){let{defaultSort:n,actionPolicy:r,...o}=N7.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 vN=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 DC(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 $7,readdir as B7,readFile as SN,rm as zC,stat as xN,writeFile as wN}from"fs/promises";import{basename as L7,dirname as q7,join as Bo}from"path";var NC="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(`^${NC}$`,"i"),TN=86400000,CN=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 F7=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()}),U7=/^[a-z][a-z0-9-]*$/;function Z7(e){return{scoped:(t)=>e.scoped(t),retire:(t)=>e.retire(t)}}function IN(e){return L7(e)==="brain-data"?Bo(q7(e),"data"):e}class $C{dataDir;logger;constructor(e){this.dataDir=IN(e.dataDir),this.logger=e.logger}static createFresh(e){return new $C(e)}scoped(e){return new BC({...e,dataDir:this.dataDir,...this.logger!==void 0&&{logger:this.logger}})}async retire(e){if(!U7.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 xN(t)}catch(n){if(yu(n))return!1;throw n}return await zC(t,{recursive:!0,force:!0}),!0}}class BC{options;retentionMs;maxCount;createUploadId;getNow;logger;constructor(e){this.options=e,this.logger=e.logger,this.retentionMs=e.retentionMs??TN,this.maxCount=e.maxCount??CN,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 $7(r,{recursive:!0}),await wN(Bo(r,"content"),e.content),await wN(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 zC(this.getUploadDir(e),{recursive:!0,force:!0})}async read(e){let t=await this.readRecord(e);try{let n=await SN(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 SN(Bo(this.getUploadDir(e),"metadata.json"),"utf8"),n=F7.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 B7(e)}catch(s){if(yu(s))return;throw s}let r=(await Promise.all(t.map(async(s)=>{try{let l=await xN(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)=>zC(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 W7}from"async_hooks";function LC(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 EN(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 RN(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=EN(e);if(typeof t!=="object")return t;let r=LC(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=LC(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 qC)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(kN.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=RN(ms(e.content).frontmatter),r=RN(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=LC(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=EN(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(AN,{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 qC(e)}}class qC extends Error{constructor(e){super(e);this.name="GenerationFailure"}}async function FC(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 _N(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 UC(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 UC(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=_N(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:_N(l,s.metadata??a.metadata)},options:{expectedContentHash:a.contentHash,eventContext:c.eventContext}})).skipReason==="content-conflict")throw UC(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 UC(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 MN(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 DN(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:()=>FC(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 zN=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 PN(e,t){return e===void 0||Pc(e,t)?t:e}function ZC(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 WC(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 NN(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,...WC(e,o,a,n,r)})}function $N(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=ZC(t,wi(e.input,s.input),c,u,p.entities);return e.handle(_l({...f,entities:Object.freeze({...p.entities,...WC(t,d,p,n,r)})},o(p)))}}}function BN(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=ZC(t,s,c,u,p.entities);return e.handle(_l({...g,entities:Object.freeze({...p.entities,...WC(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 LN(t,w,p);if(v)throw Error(v);await FN(t,h,w,p)}}}))}}}async function G7(e,t,n){return n.refusal(t.entityType,"update")??await LN(e,t,n)}async function LN(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":qN(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 qN(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 FN(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,qN(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 J7(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 V7(e){return"linkInto"in e}var ON=Mp(i.unknown()).extend({entityId:i.string().optional(),source:zN.optional()}),UN=i.object({legacyRawData:i.literal(!0),input:i.unknown(),entityId:i.string().optional(),source:zN.optional()});function H7(e){let t=UN.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 GC extends Gh{runs=new W7;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=ON.safeParse(e),n=t.success?t.data:this.target.readsLegacyRawData===!0?H7(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=ON.safeParse(e),a=o.success?o.data:UN.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=J7(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={...ZC(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&&PN(c?.visibility,p)),g=f&&o.visibilityRefusal(this.entityType,f);if(g)this.failEarly(g);let h=d.linkInto;if(h){let b=await G7(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&&lD(d)&&{createOptions:{deduplicateId:!0}}}}async afterCreate(e,t,n,r){if(V7(r))await FN(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(jN,{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=kD(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?PN(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 JC({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 ZN(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 WN(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 VC(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 HC(e,t){return t.status==="completed"&&t.result!==void 0?wi(e,t.result):void 0}function QC(e,t){let n=HC(e.output,t);return{id:t.id,status:t.status,progress:t.progress,...n!==void 0?{result:n}:{},...VC(t)}}function JN(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 VN(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({...JN(e,t),...r})}function KC(){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 HN(){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 Q7(e,t){let n={...t};for(let r in n)if(e.fields[r]?.secret===!0)delete n[r];return Object.freeze(n)}function GN(e,t){let n=HC(e.output,t);return Object.freeze({id:t.id,status:t.status,...n!==void 0?{result:n}:{},...VC(t)})}function K7(e,t){return e?{actor:{kind:"user",userId:e.actor.id},permissionLevel:e.permission}:Ml(t)}function Y7(e,t){return{async enqueue(n,r){let o=Vp(n);n.input.parse(r);let a=await e.jobAuthority.admit(K7(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?GN(n,l):null}})},async status(n,r){let o=Vp(n),a=await e.jobs.getStatus(r);return a?.type===o?GN(n,a):null}}}function YC(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?Q7(e.accountSettingsRegistration.definition,o):null;return{config:e.config,state:e.state,caller:t,settings:a,accountSettings:e.accountSettings??KC(),entities:JN(e.entities??Ur(e.context.entityService,YC(t)),n),jobs:Y7(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 QN(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),QN(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":QN(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 XC(e,t){if(!xi(e))return[];let n=[];return bu(e.blocks,["blocks"],t,n),n}var eI=i.json();function X7(e,t){let n=ax(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 eX(e){let t=ax(jo(e).inner);return t==="string"||t==="number"||t==="boolean"||t==="enum"||t==="literal"}function tX(e,t,n,r){let{actionPath:o}=r,a=[],s=Bg(jo(n).inner);if(!X7(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 nX(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 rX(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(!In(o))return{issues:[{path:[...t,"input"],message:"Workspace action form initial input must be an object"}]};let a=eI.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(...nX(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(...tX(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 iX(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(!eX(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=rX(c,u),p=iX(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=eI.safeParse(c.input);if(!v.success||!eI.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 tI(e){return e.type!=="tabs"&&e.type!=="detail"&&e.type!=="columns"&&e.type!=="card"}function oX(e,t){return{type:"action",...t?{id:t}:{},...e}}function KN(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=KN(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=KN(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&&tI(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&&(tI(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&&(tI(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:oX(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 nI=i.enum(["text","url","number","checkbox","select","textarea"]),YN=nI.exclude(["select","textarea"]);var XN=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 aX(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 sX=i.custom(aX,{message:"Expected an imported entity definition"});function lX(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 cX=i.custom(lX,{message:"Expected an imported entity catalog definition"});function uX(e){return{kind:"external",href:e.external}}function dX(e){return{kind:"entity",entityType:e.entity.type,id:e.id}}var e$=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 pX(e){return{kind:"entity",entityType:e.entityType,id:e.id}}function mX(e){return{kind:"launch",launch:e.launch}}function fX(e){return{kind:"detail",itemId:e.detail.itemId}}var Qp=i.union([i.object({external:XN}).strict().transform(uX),i.object({entity:sX,id:De}).strict().transform(dX),i.object({catalog:cX,entityType:De,id:De}).strict().transform(pX),i.object({launch:e$}).strict().transform(mX),i.object({detail:i.object({itemId:ya}).strict()}).strict().transform(fX),i.object({kind:i.literal("external"),href:XN}).strict(),i.object({kind:i.literal("entity"),entityType:De,id:De}).strict(),i.object({kind:i.literal("launch"),launch:e$}).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 t$(e,t){return ei(e,t,(n)=>n.id,{label:"Spatial point id",path:["points","id"]})}var n$=i.object({label:je,tone:Dn.optional()}).strict(),r$=i.object({sourceId:De,targetId:De,label:je.optional(),tone:Dn.optional()}).strict(),gX=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(),hX=i.object({id:De,label:je,x:bs,y:bs,memberIds:i.array(De).max(500)}).strict(),yX=i.object({type:i.literal("spatial"),layout:i.literal("cartesian"),id:De,label:je,description:no,points:i.array(gX).max(500),zones:i.array(hX).max(100),relationships:i.array(r$).max(2000).optional(),legend:i.array(n$).max(20)}).strict().superRefine((e,t)=>{let n=t$(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]})}),bX=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(),vX=i.object({id:De,label:je,memberIds:i.array(De).min(2).max(500)}).strict(),SX=i.object({id:De,label:je,maxDistance:bs}).strict(),wX=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(bX).max(500),clusters:i.array(vX).max(100).optional(),relationships:i.array(r$).max(2000).optional(),strata:i.array(SX).min(1).max(10),legend:i.array(n$).max(20)}).strict().superRefine((e,t)=>{let n=t$(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}}),rI=i.discriminatedUnion("layout",[yX,wX]);var xX=i.object({id:De,label:je,value:kp.optional(),description:no.optional(),tone:Dn.optional()}).strict(),o$=i.object({type:i.literal("group"),id:De,label:je,items:i.array(xX).max(50)}).strict(),TX=i.object({id:De,label:je,status:i.enum(["idle","active","complete","failed"]),detail:jn.optional()}).strict(),a$=i.object({type:i.literal("flow"),id:De,label:je,direction:i.enum(["forward","bidirectional"]).optional(),steps:i.array(TX).min(2).max(20)}).strict(),CX=i.string().trim().min(1).max(120).regex(/^[a-z][a-zA-Z0-9_.-]*$/),IX=i.object({value:je,label:je,count:i.number().int().nonnegative().optional()}).strict(),EX=i.object({key:CX,label:je,value:je.optional(),allLabel:je.optional(),options:i.array(IX).max(100)}).strict(),s$=i.object({controls:i.array(EX).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 l$(e,t){ei(t,e.controls,(n)=>n.key,{label:"Query key",path:["controls","key"]})}var RX=s$.extend({type:i.literal("query"),id:De}).strict().superRefine(l$),kX=s$.superRefine(l$),c$=i.object({type:i.literal("links"),id:De.optional(),items:i.array(i.object({label:je,target:Qp}).strict()).max(30)}).strict(),u$=i.object({label:je,tone:Dn.optional()}).strict(),AX=i.object({value:De,label:je,count:i.number().int().nonnegative().optional(),emphasis:i.literal("gap").optional()}).strict(),iI=200,d$=50,_X=iI*d$+1,PX=i.object({label:je,defaultValue:De,allValue:De.optional(),options:i.array(AX).min(1).max(_X)}).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(u$).max(10).optional(),filterValues:i.array(De).max(d$).optional(),links:i.array(i.object({label:je,target:Qp}).strict()).max(10).optional(),tone:Dn.optional(),link:Qp.optional()}).strict(),OX=i.enum(["standard","editorial","attention","activity","log"]),p$=i.object({type:i.literal("list"),id:De,empty:jn,presentation:OX.optional(),filter:PX.optional(),items:i.array(ey).max(iI)}).strict();function m$(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 MX=p$.superRefine(m$),f$=i.object({key:De,label:je,align:i.enum(["start","center","end"]).optional()}).strict(),g$=i.object({key:De,label:je,values:i.array(kp).max(50)}).strict(),jX=i.union([kp,i.array(i.string().max(500)).max(50)]),DX=i.object({title:jn.trim().min(1),description:no.optional(),metadata:i.array(jn).max(20).optional(),badges:i.array(u$).max(10).optional(),count:i.number().finite().optional(),tone:Dn.optional()}).strict(),h$=i.object({id:ya,cells:i.record(i.string(),jX),link:Qp.optional()}).strict(),zX=i.object({type:i.literal("table"),id:De,empty:jn,filters:i.array(g$).max(20).optional(),columns:i.array(f$).min(1).max(30),rows:i.array(h$).max(500)}).strict();function y$(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 NX=zX.superRefine(y$),b$=i.object({id:De,label:je,tone:Dn.optional(),empty:jn,items:i.array(ey).max(100)}).strict();function v$(e,t){ei(t,e.items,(n)=>n.id,{label:"Matrix item id",path:["items","id"]})}var $X=b$.superRefine(v$),S$=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($X).min(1).max(12)}).strict();function w$(e,t){ei(t,e.cells,(n)=>n.id,{label:"Matrix cell id",path:["cells","id"]})}var BX=S$.superRefine(w$);function x$(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 T$(e,t){ei(t,e.blocks,(n)=>n.id,{label:"Operator view block id",path:["blocks","id"]})}var C$=i.union([OT,MT,jT,o$,a$,DT,zT,NT,c$,MX,NX,BX,rI]),LX=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(C$).max(30)}).strict()).min(1).max(12)}).strict().superRefine(x$);function qX(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 FX=i.custom(qX,{message:"Expected a workspace action definition"}),UX=i.object({id:De,label:je,description:no.optional(),confirmation:i.literal("prepared").optional()}).strict(),i$=i.object({value:i.string().trim().min(1).max(500),label:je}).strict(),ZX=i.object({label:je,control:nI,secret:i.boolean().optional(),options:i.array(i$).min(1).max(100).optional(),labelBy:i.object({field:De,values:i.array(i$).min(1).max(100)}).strict().optional()}).strict(),WX=i.object({presentation:i.enum(["inline","disclosure"]).optional(),submitLabel:je.optional(),fields:i.record(De,ZX)}).strict(),GX=i.object({label:je,copyable:i.boolean().optional(),sensitive:i.boolean().optional()}).strict(),JX=i.object({title:je,fields:i.record(De,GX)}).strict(),Su=i.object({action:FX,input:i.unknown().optional(),form:WX.optional(),result:JX.optional(),capability:UX.optional(),label:je.optional(),disabled:i.boolean().optional()}).strict(),VX=ey.extend({actionsLabel:je.optional(),actions:i.array(Su).max(20).optional()}),I$=p$.extend({items:i.array(VX).max(iI)}).superRefine(m$),HX=h$.extend({compact:DX.optional(),actions:i.array(Su).max(20).optional()}),E$=i.object({type:i.literal("table"),id:De,empty:jn,filters:i.array(g$).max(20).optional(),query:kX.optional(),columns:i.array(f$).min(1).max(30),rows:i.array(HX).max(500)}).strict().superRefine(y$),QX=Su.extend({dropTarget:De.optional()}),KX=ey.extend({actionsLabel:je.optional(),actions:i.array(QX).max(20).optional()}),YX=b$.extend({items:i.array(KX).max(100)}).superRefine(v$);function XX(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 R$=S$.extend({cells:i.array(YX).min(1).max(12)}).superRefine(w$).superRefine(XX),eee=Su.extend({type:i.literal("action"),id:De.optional()}),tee=i.object({type:i.literal("actions"),id:De.optional(),items:i.array(Su).max(30)}).strict(),vu=i.union([OT,MT,jT,Y0,o$,a$,DT,zT,NT,X0,RX,c$,I$,E$,R$,rI,eee,tee]),nee=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,k$,A$]))).max(30)}).strict()).min(1).max(12)}).strict().superRefine(x$),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(PT).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"]}),k$=i.object({type:i.literal("detail"),id:De,queryKey:De,empty:jn,master:i.union([I$,E$,R$]),open:i.object({forId:ya,title:je,blocks:i.array(i.union([vu,Kp])).max(30)}).strict().optional()}).strict(),A$=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(),ree=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,nee,k$,A$,Kp])).max(50)}).strict().superRefine(T$),_$=i.object({title:jn.optional(),blocks:i.array(i.union([C$,LX])).max(50)}).strict().superRefine(T$),P$=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(),iee=i.object({view:_$,digest:P$.optional()}).strict();function O$(e){let t=_$.safeParse(e);return t.success?{success:!0,data:t.data}:{success:!1,issues:Hp(t.error)}}function M$(e){let t=P$.safeParse(e);return t.success?{success:!0,data:t.data}:{success:!1,issues:Hp(t.error)}}function j$(e){let t=iee.safeParse(e);return t.success?{success:!0,data:t.data}:{success:!1,issues:Hp(t.error)}}function D$(e){let t=ree.safeParse(e);return t.success?{success:!0,data:t.data}:{success:!1,issues:Hp(t.error)}}function z$(e){let t=XC(e,"dashboard");if(t.length>0)return{success:!1,issues:t};return O$(e)}function oI(e,t){let n=XC(e,"studio");if(n.length>0)return{success:!1,issues:n};let r=D$(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 N$(e){return M$(e)}function aI(e){return j$(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 oee(e,t){let n=z$(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 aee(e,t){let n=N$(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=G0(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=aI(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=oee(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=aee(w,n)}return Object.freeze({view:g,...h?{digest:h}:{},...e.includeSource?{source:p}:{}})}}var sI=Object.freeze({config:Object.freeze({}),state:Object.freeze({}),accountSettings:void 0});async function lI(e){if(e.context.executionOnly||!e.context.dashboard.isAvailable())return!1;let t=e.definition.bind(sI,({caller:o,signal:a})=>e.load({caller:o,visibilityScope:YC(o),signal:a})),n=Xp({publicServiceId:e.context.pluginId,packageName:e.context.pluginId,config:sI.config,state:sI.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"},see=i.object({initialSyncPending:i.boolean()}),$$=i.discriminatedUnion("success",[i.object({success:i.literal(!0)}),i.object({success:i.literal(!1),error:i.string()})]),lee=un(so.initialSyncCompleted,$$),B$=i.object({timestamp:i.string()}),cee=un(so.startupContentSettled,B$),uee=un(so.shellReady,B$),L$=i.object({entityType:i.string().min(1)}),dee=un(so.identityChanged,L$);var hee={"startup-content-settled":so.startupContentSettled},yee=i.record(i.string(),i.unknown());function q$(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 pI(e){if(typeof e==="object"&&e!==null&&!Object.isFrozen(e))Object.values(e).forEach(pI),Object.freeze(e);return e}function cI(e){let{attributed:t}=e.job;return t!==void 0&&t!==!1}function bee(e){let t=Rh(e);return Object.freeze({interfaceType:e.interfaceType,actor:e.actor,...qe({userId:t,channelId:e.channelId,channelName:e.channelName})})}function uI(e){return{actor:e.actor,interfaceType:e.interfaceType}}function vee(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 See(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 wee(e){let{identity:t,views:n}=e;return Object.freeze({domain:e.domain,themeCSS:e.themeCSS,identity:Object.freeze({getProfile:()=>t.getProfile()}),entityService:See(e.entityService),views:Object.freeze({get:(r)=>n.get(r)})})}var xee=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"}),Tee=i.object({items:i.array(i.object({operation:i.enum(["upsert","delete"]),id:i.string(),source:Gi.optional()}))});function J$(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 V$(e,t){let n=J$(e,t);return Yi(n.content,n.frontmatter)}function Cee(e){let t=lr(e);return Xe(t.data)&&Object.keys(t.data).length>0?t.content:e}function Iee(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 Eee(e){return{frontmatterSchema:xh(e)??e.metadata,...xh(e)&&{writtenFrontmatterSchema:Iee(e.metadata,xh(e))},toMarkdown(t){return V$(e,{...t,content:Cee(t.content)})},fromMarkdown(t){let n=Pn(t,yee),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(J$(e,t).frontmatter)},metadataFromFrontmatter:!0}}function Ree(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 kee(e){let t=kl(e),n=e.stub;return{entityType:e.type,purpose:e.purpose,schema:t,...e.config?.binaryStorage===void 0?Eee(e):Ree(e),extractMetadata:(r)=>vD(e)?.(r.metadata)??r.metadata,getBodyTemplate:()=>yD(e),...CD(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)=>Aee(e,r)}}}function Aee(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 _ee(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(V$(e.target,{content:a.content,metadata:s}),l),metadata:s,visibility:l}})}}}),o}function Pee(e){return"load"in e&&typeof e.load==="function"&&"view"in e.definition&&typeof e.definition.view==="function"}var dI=Object.freeze({config:Object.freeze({}),state:Object.freeze({}),accountSettings:void 0});function Oee(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 Mee(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 jee(e,t,n){return kT({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=Tee.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 _ee(e,c.source,a))}return l}})}class H$ 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,{},jC,e.actions&&{[e.type]:Fh.parse(e.actions)});if(this.entityTypeConfig=bN(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)xee.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||qT(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=kee(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,Oee(n),r),derive:(t,n,r)=>e.derive(t,Mee(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 GC(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)=>PD(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=qT(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,BN(x,e,C,T,this.id,(y)=>this.templateName(y)));return}e.jobs.registerHandler(b,"generate"in x?this.generationHandler(e,x,b):$N(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=wD(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:DN(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&&ED(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?.(dI)??[]).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?wee(e):void 0;this.releases=[...gD(this.definition).map((b)=>e.messaging.answer(b.contract,async(x,{sender:T})=>b.handle({request:x,sender:T,entities:await NN(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(F$,async(b)=>({items:[...await o(Object.freeze({request:pI(structuredClone(b)),entities:Ur(e.entityService,Tr(b.userPermissionLevel))}))]}))]:[],...a?[e.messaging.answer(G$,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(hee[s.on],async()=>(await this.plantSeed(e,s),{success:!0}))]:[],...l?[e.messaging.answer(U$,(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(Z$,{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(W$,{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:dI.config,state:dI.state,binding:n,context:e,runtimeSignal:this.widgetAbort.signal})))this.dashboardWidgetIds.push(n.definition.id)}boundWidget(e){if(Pee(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=q$(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:DC(this.entityType,r,`Upload was not handled by ${this.entityType}`)})}async routeCreate(e,t,n,r,o){let a=q$(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=cD(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=uD(s);if(c)return{kind:"handled",result:await this.applyQueuedCreate(e,c,r,o)};let u=dD(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:pI(structuredClone(t)),entities:a,uploads:o},{...this.runtimeBinding(e,a,"a create route",{service:e.entityService,scope:()=>"public"}),caller:bee(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=cI(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 JC({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:uI(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,...cI(t)&&{eventContext:uI(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,...cI(t)?[{options:vee(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:uI(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?[VT.parse(p)]:[]});if(a.length===0)return;let s=n.siteConfig.url??"https://example.com",l=s.replace(/\/+$/u,""),c=HT(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=gee(n.outputDir,t.path);await pee(fee(u),{recursive:!0}),await mee(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)=>jee(e,this.version,this.scope)),...this.projectionRules]}}function Dee(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 H$(a.get(c)??c,t.filter(({source:u})=>u===c),n,r,o.filter((u)=>Dee(u,c,e)),s,l))}function zee(e){if(Jt(e.type,"Entity type"),e.scheduledGeneration){if(!e.generation)throw Error(`Entity "${e.type}" declares a scheduled generation but no generation`);vN.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`);Nee(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 Nee(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 $ee(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 Bee(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 Lee(e){return Jt(e.id,"Projection id"),Object.freeze({kind:"rizom-projection",...e})}var qee=i.object({}),iy=["create","evals","publish","projectionRules","jobs","generation"];function Fee(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 Uee(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 Zee(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??qee,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:Fee(e.id,t,g),w,Uee(e.id,o,h.entities??[]))}})}var ay="[secret]",Wee=Symbol.for("nodejs.util.inspect.custom");class Q${#e;constructor(e){this.#e=e,Object.defineProperty(this,Wee,{value:()=>ay}),Object.freeze(this)}reveal(){return this.#e}toJSON(){return ay}toString(){return ay}[Symbol.toPrimitive](){return ay}}function K$(e,t){return Object.freeze(Object.fromEntries(Object.entries(t).map(([n,r])=>[n,e.fields[n]?.secret===!0&&r!==void 0?new Q$(r):r])))}function mI(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&&!YN.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 Gee=i.object({url:i.string()}),Jee=2048;function Vee(e){try{let t=new URL(e);return t.protocol==="https:"&&t.origin===e}catch{return!1}}function Hee(e,t){if(!Vee(e))throw Error(`Workspace action "${t}" launch origin "${e}" must be an absolute https origin, such as https://example.com`)}function Y$(e,t){if(t.length>Jee)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 X$=Symbol("rizom.workspace-action-executor");function fI(e){let t=e[X$];if(!t)throw Error(`Workspace action "${e.definition.name}" was not bound by defineWorkspaceAction().bind()`);return t}function eB(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)Hee(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??Gee,...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,[X$]:Object.freeze({execute:s,...l?{prepare:l}:{}})})}};return Object.freeze(o)}function tB(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 nB=new WeakMap;function rB(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)gI(e.deadline);let t={kind:"rizom-service-job",...e,handle(n){let r=Object.freeze({kind:"rizom-service-job-binding",definition:t});return nB.set(r,async(o)=>n({...o,input:wi(t.input,o.input)})),r}};return Object.freeze(t)}function iB(e){let t=nB.get(e);if(!t)throw Error(`Job "${e.definition.name}" was not created by defineJob().handle()`);return t}function gI(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 oB(e){return Jt(e.name,"Tool name"),hI(e)}function hI(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 CB}from"async_hooks";var aB=Symbol("service-content-target");function sB(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,[aB]:!0})}import{createHash as Qee,randomBytes as Kee}from"crypto";var cB=Object.freeze({ttlMs:600000,maxPending:20});function lB(e){return Qee("sha256").update(e).digest("base64url")}class yI{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=Kee(32).toString("base64url");return this.pending.set(lB(t),{value:e,expiresAt:this.now()+this.ttlMs}),t}take(e,t=()=>!0){this.prune();let n=lB(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 Yee(e,t){if(e.userPermissionLevel!=="admin")throw Error(`${t} requires admin permission`)}import{createHash as Xee,randomUUID as ete}from"crypto";var tte=300000,nte=1000;function bI(e){if(e===null||typeof e!=="object")return JSON.stringify(e);if(Array.isArray(e))return`[${e.map(bI).join(",")}]`;return`{${Object.keys(e).sort().map((t)=>`${JSON.stringify(t)}:${bI(e[t]??null)}`).join(",")}}`}function uB(e){return Xee("sha256").update(bI(e)).digest("hex")}function dB(e={}){let t=e.now??(()=>Date.now()),n=e.maxRecords??nte,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=ete(),p=u+tte;return r.set(d,{callerId:a,actionId:s,inputDigest:uB(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!==uB(c))return;return{revision:u.revision}}}}var rte=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(),ite=i.object({capability:i.object({confirmation:i.literal("prepared").optional()})}).passthrough(),ote=i.array(i.string().trim().min(1).max(120)).max(200).transform((e)=>[...new Set(e)]),ate=i.object({summary:i.string().trim().min(1).max(500),revision:i.string().trim().min(1).max(500)}),sy=i.json(),ste=i.object({url:i.string()});function lte(e,t){if(e.confirmation?.kind!=="prepared")return!1;if(e.confirmation.conditional!==!0)return!0;let n=ite.safeParse(t);return n.success&&n.data.capability.confirmation==="prepared"}function cte(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 pB(e){return Object.freeze({actor:Object.freeze({id:e.userId,...e.displayName?{displayName:e.displayName}:{}}),permission:e.userPermissionLevel,isAnchor:e.isAnchor})}function mB(e,t){return t?AbortSignal.any([t,e]):e}async function ute(e,t,n){let r=fI(e).prepare;if(!r)throw Error("Prepared confirmation callback is unavailable");return r({...t,input:n})}async function dte(e,t,n,r){return fI(e).execute({...t,...n,input:r})}function SI(e){let t=e.binding.definition,n=H0(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=dB();async function a(C,S,y){let R=await Kh({config:e.config,state:e.state,...e.accountSettingsRegistration?{accountSettingsRegistration:e.accountSettingsRegistration}:{},provider:{caller:pB(C),signal:S},context:e.context,entities:e.entities,accountSettings:e.accountSettings});return Object.freeze({...R,query:cte(t.query,y,r)})}function s(C,S){return e.runAs?e.runAs({caller:pB(C),actor:C.actor,interfaceType:"studio",browserSession:!0},S):S()}function l(C){return e.entities?VN(e.entities,C.signal):Object.freeze({...C.entities,...HN()})}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=rte.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 ute(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=ate.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 dte(C.binding,S,{entities:l(S),accountSettings:e.accountSettings??KC()},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=ste.safeParse(y);if(!R.success||!Y$(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=ote.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=mB(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=oI(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=mB(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=lte(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 vI=Object.freeze({config:Object.freeze({}),state:Object.freeze({}),accountSettings:void 0});function wI(e){let t=e.bind(vI);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 SI({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:vI.config,state:vI.state,binding:t,context:e.context,runtimeSignal:e.runtimeSignal??new AbortController().signal})}async function pte(e){if(e.context.executionOnly||!e.context.studio.isAvailable())return!1;return e.context.studio.registerWorkspace(wI(e))}function ly(e){return Object.freeze({isAvailable:()=>!e.executionOnly&&e.studio.isAvailable(),source:(t)=>wI({...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 mte=i.string().min(1).refine((e)=>Buffer.from(e).toString("utf8")===e,"State owner must be well-formed Unicode"),fte=/^@[a-zA-Z0-9][a-zA-Z0-9_-]*\/[a-zA-Z0-9_-]+$/u;function gte(e,t){let n=mte.parse(e);if(fte.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:gte(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 hte=/^[a-z][a-z0-9_-]*$/u,fB=new WeakSet;function gB(e){return fB.has(e)}function yte(e,t={}){if(!hte.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=hI(e);if(t.bareName===!0)fB.add(n);return n}var hB=Symbol("rizom.first-party-service-runtime"),yB=new WeakSet;function bte(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"?Ste(t,d,l,(f)=>p(f.payload,f.source)):vte(t,d,l,(f,g)=>p(f,g.source)))}};return Object.freeze(s)}function vte(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 Ste(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 bB(e,t){let n=bte(t);return yB.add(n),cy(e,hB,n)}function wte(e){return e!==void 0&&yB.has(e)}function xte(e){let t=uy(e,hB);if(!wte(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 vB=new Set(["anchor-profile","brain-character"]);var yet=["GET","POST","PUT","DELETE","OPTIONS"],Tte="data-site-slot";class SB 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 xI(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=xI(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 TI=["GET","POST","PUT","DELETE","OPTIONS"];function Zl(e){return"returnTo"in e}var wB=/[\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("//")||wB.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("//")&&!wB.test(n)?n:void 0}catch{return}}function xB(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)?Rte(e,t):Cte(e);return{method:e.method,path:e.path,public:!0,handler:async(r)=>{try{let o=await _te(e,r,t);if(e.security.kind==="protocol"&&!o)throw new it("unauthenticated");let a=e.body?await kte(e.body,r):void 0,s=await t.runAs(o?Ate(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:TB(l)})}}}}function Cte(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 Ite=i.union([i.string(),i.number(),i.boolean()]),Ete=i.record(i.string(),Ite.optional());function Rte(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=Ete.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=xB(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 kte(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 Ate(e,t){return{actor:{kind:"external",externalActorId:my(t,e.actor.id)},permissionLevel:e.permission}}async function _te(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 CI="_rizomConfirmationToken",Pte=i.object({issues:i.array(i.object({path:i.array(i.union([i.string(),i.number()]))}))});function Ote(e){if(!(e instanceof Error)||e.name!=="ZodError")return;let t=Pte.safeParse(e);if(!t.success)return;return[...new Set(t.data.issues.map((n)=>n.path.join(".")||"(root)"))]}function Mte(e){if(e===null||typeof e!=="object")return;let t=Reflect.get(e,CI);return typeof t==="string"?t:void 0}function jte(e){if(e===void 0)return{};try{return JSON.parse(e)}catch{return e}}function Dte(e,t,n){let r=e.definition,o=iB(e),a=Mp(r.input);return{...r.deadline?{executionTimeoutMs:gI(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 RB extends py{definition;calls=new CB;entityAccessCache;publicId;dependencies;toolContext=new CB;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),ZN(a,`${this.id}:${a.name}`),e.jobs.registerHandler(a.name,Dte(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=SI({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)WN(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 yI(cB);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=Ote(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?K$(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 bB(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:Bte(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:$te(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(zte(`${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 lI({context:e,definition:n.definition,render:n.render,load:({visibilityScope:r,signal:o})=>n.load({corpus:kB(e.entityService),visibilityScope:r,signal:o}),runtimeSignal:this.operatorAbortController.signal}),{success:!0})))}})}claimSystemType(e,t){if(!vB.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=Nte(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}`?QC(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)=>sB(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:vT(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(jte(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=gB(e)?e.name:`${this.publicId}_${e.name}`,n=EB({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=Mte(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[CI],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),[CI]: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 kB(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 zte(e,t){return{id:e,name:t.name,description:t.description,fetch:async(n,r,o)=>r.parse(await t.fetch(n,{corpus:kB(o.entityService),publishedOnly:o.publishedOnly===!0}))}}var IB=new WeakMap;function Nte(e){let t=IB.get(e);if(t)return t;let n=new Map;return IB.set(e,n),n}function $te(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 Bte(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 AB(e,t,n,r,o=[]){return new RB(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 _B(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:qte(e.id,n,l),t),AB(e,o,a,l??s(e.id),c??[])]});return PB.set(r,(o)=>_B(e,o)),r}var PB=new WeakMap;function Lte(e,t){let n=PB.get(e);if(!n)throw Error(`Service definition "${e.id}" was not created by defineServicePlugin`);return n(Object.freeze([...t]))}function qte(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 Fte={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 Ute(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 Zte(e,t){return em(Fte,e,t),Ute(e.id,e.entities??[]),_B({...t,...e,entities:Object.freeze(e.entities===void 0?[]:[...e.entities]),accountSettings:e.accountSettings})}import{AsyncLocalStorage as fke}from"async_hooks";var OB=30000,MB=1e4;function jB(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),jB(b,OB,`Account-bound daemon "${e.id}" did not report readiness within ${OB}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 jB(h.run,MB,`Account-bound daemon "${e.id}" task did not stop within ${MB}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 DB(e){return NB(e)}function zB(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 $B(e){return{get guestReady(){return e.guestReady===!0},chat:async(t,n,r,o)=>{let a=zB(r),s=o?await e.chat(t,n,a,o):await e.chat(t,n,a);return DB(s)},confirmPendingAction:async(t,n,r,o,a)=>{let s=zB(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 DB(l)},invalidate:()=>{e.invalidateAgent()}}}function yy(e,t,n){let r=ql(e,t,n),o=e.getMCPService(),a=e.getPermissionService(),s=$B(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 II(e,t,n){return{...yy(e,t,n),channels:Hz(e,t)}}var Wte=3600000;class Eu extends Pl{type="interface";daemon;jobTrackingEntries=new Map;jobTrackingTtlMs=Wte;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([])}),BB=new WeakMap;function LB(e,t,n){BB.set(e,{declarations:t,rebuild:n})}function Ru(e,t,n){let r=BB.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(!Gte(o,e.config))throw Error(`Interface "${e.id}" did not rebuild as itself`);return o}function Gte(e,t){return e.family==="interface"&&e.config===t}function vy(e){return{run:e}}function Jte(e,t){return Ru(e,"withDaemon",(n)=>({...n,daemons:[...n.daemons,vy(t)]}))}function Vte(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 Hte(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 Qte(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 Kte(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 Yte(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 qB=Symbol("rizom.first-party-interface-runtime"),FB=new WeakSet;function Xte(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,qB,t)}function UB(e){let t=Xte(e);return FB.add(t),t}function ene(e){return e!==void 0&&FB.has(e)}function tne(e){let t=uy(e,qB);if(!ene(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 EI(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 RI(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 zC(this.getUploadDir(e),{recursive:!0,force:!0})}async read(e){let t=await this.readRecord(e);try{let n=await SN(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 SN(Bo(this.getUploadDir(e),"metadata.json"),"utf8"),n=F7.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 B7(e)}catch(s){if(yu(s))return;throw s}let r=(await Promise.all(t.map(async(s)=>{try{let l=await xN(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)=>zC(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 W7}from"async_hooks";function LC(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 EN(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 RN(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=EN(e);if(typeof t!=="object")return t;let r=LC(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=LC(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 qC)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(kN.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=RN(ms(e.content).frontmatter),r=RN(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=LC(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=EN(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(AN,{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 qC(e)}}class qC extends Error{constructor(e){super(e);this.name="GenerationFailure"}}async function FC(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 _N(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 UC(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 UC(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=_N(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:_N(l,s.metadata??a.metadata)},options:{expectedContentHash:a.contentHash,eventContext:c.eventContext}})).skipReason==="content-conflict")throw UC(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 UC(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 MN(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 DN(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:()=>FC(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 zN=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 PN(e,t){return e===void 0||Pc(e,t)?t:e}function ZC(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 WC(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 NN(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,...WC(e,o,a,n,r)})}function $N(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=ZC(t,wi(e.input,s.input),c,u,p.entities);return e.handle(_l({...f,entities:Object.freeze({...p.entities,...WC(t,d,p,n,r)})},o(p)))}}}function BN(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=ZC(t,s,c,u,p.entities);return e.handle(_l({...g,entities:Object.freeze({...p.entities,...WC(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 LN(t,w,p);if(v)throw Error(v);await FN(t,h,w,p)}}}))}}}async function G7(e,t,n){return n.refusal(t.entityType,"update")??await LN(e,t,n)}async function LN(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":qN(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 qN(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 FN(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,qN(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 J7(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 V7(e){return"linkInto"in e}var ON=Mp(i.unknown()).extend({entityId:i.string().optional(),source:zN.optional()}),UN=i.object({legacyRawData:i.literal(!0),input:i.unknown(),entityId:i.string().optional(),source:zN.optional()});function H7(e){let t=UN.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 GC extends Gh{runs=new W7;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=ON.safeParse(e),n=t.success?t.data:this.target.readsLegacyRawData===!0?H7(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=ON.safeParse(e),a=o.success?o.data:UN.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=J7(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={...ZC(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&&PN(c?.visibility,p)),g=f&&o.visibilityRefusal(this.entityType,f);if(g)this.failEarly(g);let h=d.linkInto;if(h){let b=await G7(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&&lD(d)&&{createOptions:{deduplicateId:!0}}}}async afterCreate(e,t,n,r){if(V7(r))await FN(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(jN,{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=kD(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?PN(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 JC({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 ZN(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 WN(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 VC(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 HC(e,t){return t.status==="completed"&&t.result!==void 0?wi(e,t.result):void 0}function QC(e,t){let n=HC(e.output,t);return{id:t.id,status:t.status,progress:t.progress,...n!==void 0?{result:n}:{},...VC(t)}}function JN(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 VN(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({...JN(e,t),...r})}function KC(){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 HN(){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 Q7(e,t){let n={...t};for(let r in n)if(e.fields[r]?.secret===!0)delete n[r];return Object.freeze(n)}function GN(e,t){let n=HC(e.output,t);return Object.freeze({id:t.id,status:t.status,...n!==void 0?{result:n}:{},...VC(t)})}function K7(e,t){return e?{actor:{kind:"user",userId:e.actor.id},permissionLevel:e.permission}:Ml(t)}function Y7(e,t){return{async enqueue(n,r){let o=Vp(n);n.input.parse(r);let a=await e.jobAuthority.admit(K7(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?GN(n,l):null}})},async status(n,r){let o=Vp(n),a=await e.jobs.getStatus(r);return a?.type===o?GN(n,a):null}}}function YC(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?Q7(e.accountSettingsRegistration.definition,o):null;return{config:e.config,state:e.state,caller:t,settings:a,accountSettings:e.accountSettings??KC(),entities:JN(e.entities??Ur(e.context.entityService,YC(t)),n),jobs:Y7(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 QN(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),QN(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":QN(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 XC(e,t){if(!xi(e))return[];let n=[];return bu(e.blocks,["blocks"],t,n),n}var eI=i.json();function X7(e,t){let n=ax(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 eX(e){let t=ax(jo(e).inner);return t==="string"||t==="number"||t==="boolean"||t==="enum"||t==="literal"}function tX(e,t,n,r){let{actionPath:o}=r,a=[],s=Bg(jo(n).inner);if(!X7(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 nX(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 rX(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(!In(o))return{issues:[{path:[...t,"input"],message:"Workspace action form initial input must be an object"}]};let a=eI.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(...nX(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(...tX(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 iX(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(!eX(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=rX(c,u),p=iX(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=eI.safeParse(c.input);if(!v.success||!eI.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 tI(e){return e.type!=="tabs"&&e.type!=="detail"&&e.type!=="columns"&&e.type!=="card"}function oX(e,t){return{type:"action",...t?{id:t}:{},...e}}function KN(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=KN(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=KN(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&&tI(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&&(tI(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&&(tI(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:oX(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 nI=i.enum(["text","url","number","checkbox","select","textarea"]),YN=nI.exclude(["select","textarea"]);var XN=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 aX(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 sX=i.custom(aX,{message:"Expected an imported entity definition"});function lX(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 cX=i.custom(lX,{message:"Expected an imported entity catalog definition"});function uX(e){return{kind:"external",href:e.external}}function dX(e){return{kind:"entity",entityType:e.entity.type,id:e.id}}var e$=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 pX(e){return{kind:"entity",entityType:e.entityType,id:e.id}}function mX(e){return{kind:"launch",launch:e.launch}}function fX(e){return{kind:"detail",itemId:e.detail.itemId}}var Qp=i.union([i.object({external:XN}).strict().transform(uX),i.object({entity:sX,id:De}).strict().transform(dX),i.object({catalog:cX,entityType:De,id:De}).strict().transform(pX),i.object({launch:e$}).strict().transform(mX),i.object({detail:i.object({itemId:ya}).strict()}).strict().transform(fX),i.object({kind:i.literal("external"),href:XN}).strict(),i.object({kind:i.literal("entity"),entityType:De,id:De}).strict(),i.object({kind:i.literal("launch"),launch:e$}).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 t$(e,t){return ei(e,t,(n)=>n.id,{label:"Spatial point id",path:["points","id"]})}var n$=i.object({label:je,tone:Dn.optional()}).strict(),r$=i.object({sourceId:De,targetId:De,label:je.optional(),tone:Dn.optional()}).strict(),gX=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(),hX=i.object({id:De,label:je,x:bs,y:bs,memberIds:i.array(De).max(500)}).strict(),yX=i.object({type:i.literal("spatial"),layout:i.literal("cartesian"),id:De,label:je,description:no,points:i.array(gX).max(500),zones:i.array(hX).max(100),relationships:i.array(r$).max(2000).optional(),legend:i.array(n$).max(20)}).strict().superRefine((e,t)=>{let n=t$(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]})}),bX=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(),vX=i.object({id:De,label:je,memberIds:i.array(De).min(2).max(500)}).strict(),SX=i.object({id:De,label:je,maxDistance:bs}).strict(),wX=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(bX).max(500),clusters:i.array(vX).max(100).optional(),relationships:i.array(r$).max(2000).optional(),strata:i.array(SX).min(1).max(10),legend:i.array(n$).max(20)}).strict().superRefine((e,t)=>{let n=t$(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}}),rI=i.discriminatedUnion("layout",[yX,wX]);var xX=i.object({id:De,label:je,value:kp.optional(),description:no.optional(),tone:Dn.optional()}).strict(),o$=i.object({type:i.literal("group"),id:De,label:je,items:i.array(xX).max(50)}).strict(),TX=i.object({id:De,label:je,status:i.enum(["idle","active","complete","failed"]),detail:jn.optional()}).strict(),a$=i.object({type:i.literal("flow"),id:De,label:je,direction:i.enum(["forward","bidirectional"]).optional(),steps:i.array(TX).min(2).max(20)}).strict(),CX=i.string().trim().min(1).max(120).regex(/^[a-z][a-zA-Z0-9_.-]*$/),IX=i.object({value:je,label:je,count:i.number().int().nonnegative().optional()}).strict(),EX=i.object({key:CX,label:je,value:je.optional(),allLabel:je.optional(),options:i.array(IX).max(100)}).strict(),s$=i.object({controls:i.array(EX).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 l$(e,t){ei(t,e.controls,(n)=>n.key,{label:"Query key",path:["controls","key"]})}var RX=s$.extend({type:i.literal("query"),id:De}).strict().superRefine(l$),kX=s$.superRefine(l$),c$=i.object({type:i.literal("links"),id:De.optional(),items:i.array(i.object({label:je,target:Qp}).strict()).max(30)}).strict(),u$=i.object({label:je,tone:Dn.optional()}).strict(),AX=i.object({value:De,label:je,count:i.number().int().nonnegative().optional(),emphasis:i.literal("gap").optional()}).strict(),iI=200,d$=50,_X=iI*d$+1,PX=i.object({label:je,defaultValue:De,allValue:De.optional(),options:i.array(AX).min(1).max(_X)}).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(u$).max(10).optional(),filterValues:i.array(De).max(d$).optional(),links:i.array(i.object({label:je,target:Qp}).strict()).max(10).optional(),tone:Dn.optional(),link:Qp.optional()}).strict(),OX=i.enum(["standard","editorial","attention","activity","log"]),p$=i.object({type:i.literal("list"),id:De,empty:jn,presentation:OX.optional(),filter:PX.optional(),items:i.array(ey).max(iI)}).strict();function m$(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 MX=p$.superRefine(m$),f$=i.object({key:De,label:je,align:i.enum(["start","center","end"]).optional()}).strict(),g$=i.object({key:De,label:je,values:i.array(kp).max(50)}).strict(),jX=i.union([kp,i.array(i.string().max(500)).max(50)]),DX=i.object({title:jn.trim().min(1),description:no.optional(),metadata:i.array(jn).max(20).optional(),badges:i.array(u$).max(10).optional(),count:i.number().finite().optional(),tone:Dn.optional()}).strict(),h$=i.object({id:ya,cells:i.record(i.string(),jX),link:Qp.optional()}).strict(),zX=i.object({type:i.literal("table"),id:De,empty:jn,filters:i.array(g$).max(20).optional(),columns:i.array(f$).min(1).max(30),rows:i.array(h$).max(500)}).strict();function y$(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 NX=zX.superRefine(y$),b$=i.object({id:De,label:je,tone:Dn.optional(),empty:jn,items:i.array(ey).max(100)}).strict();function v$(e,t){ei(t,e.items,(n)=>n.id,{label:"Matrix item id",path:["items","id"]})}var $X=b$.superRefine(v$),S$=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($X).min(1).max(12)}).strict();function w$(e,t){ei(t,e.cells,(n)=>n.id,{label:"Matrix cell id",path:["cells","id"]})}var BX=S$.superRefine(w$);function x$(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 T$(e,t){ei(t,e.blocks,(n)=>n.id,{label:"Operator view block id",path:["blocks","id"]})}var C$=i.union([OT,MT,jT,o$,a$,DT,zT,NT,c$,MX,NX,BX,rI]),LX=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(C$).max(30)}).strict()).min(1).max(12)}).strict().superRefine(x$);function qX(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 FX=i.custom(qX,{message:"Expected a workspace action definition"}),UX=i.object({id:De,label:je,description:no.optional(),confirmation:i.literal("prepared").optional()}).strict(),i$=i.object({value:i.string().trim().min(1).max(500),label:je}).strict(),ZX=i.object({label:je,control:nI,secret:i.boolean().optional(),options:i.array(i$).min(1).max(100).optional(),labelBy:i.object({field:De,values:i.array(i$).min(1).max(100)}).strict().optional()}).strict(),WX=i.object({presentation:i.enum(["inline","disclosure"]).optional(),submitLabel:je.optional(),fields:i.record(De,ZX)}).strict(),GX=i.object({label:je,copyable:i.boolean().optional(),sensitive:i.boolean().optional()}).strict(),JX=i.object({title:je,fields:i.record(De,GX)}).strict(),Su=i.object({action:FX,input:i.unknown().optional(),form:WX.optional(),result:JX.optional(),capability:UX.optional(),label:je.optional(),disabled:i.boolean().optional()}).strict(),VX=ey.extend({actionsLabel:je.optional(),actions:i.array(Su).max(20).optional()}),I$=p$.extend({items:i.array(VX).max(iI)}).superRefine(m$),HX=h$.extend({compact:DX.optional(),actions:i.array(Su).max(20).optional()}),E$=i.object({type:i.literal("table"),id:De,empty:jn,filters:i.array(g$).max(20).optional(),query:kX.optional(),columns:i.array(f$).min(1).max(30),rows:i.array(HX).max(500)}).strict().superRefine(y$),QX=Su.extend({dropTarget:De.optional()}),KX=ey.extend({actionsLabel:je.optional(),actions:i.array(QX).max(20).optional()}),YX=b$.extend({items:i.array(KX).max(100)}).superRefine(v$);function XX(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 R$=S$.extend({cells:i.array(YX).min(1).max(12)}).superRefine(w$).superRefine(XX),eee=Su.extend({type:i.literal("action"),id:De.optional()}),tee=i.object({type:i.literal("actions"),id:De.optional(),items:i.array(Su).max(30)}).strict(),vu=i.union([OT,MT,jT,Y0,o$,a$,DT,zT,NT,X0,RX,c$,I$,E$,R$,rI,eee,tee]),nee=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,k$,A$]))).max(30)}).strict()).min(1).max(12)}).strict().superRefine(x$),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(PT).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"]}),k$=i.object({type:i.literal("detail"),id:De,queryKey:De,empty:jn,master:i.union([I$,E$,R$]),open:i.object({forId:ya,title:je,blocks:i.array(i.union([vu,Kp])).max(30)}).strict().optional()}).strict(),A$=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(),ree=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,nee,k$,A$,Kp])).max(50)}).strict().superRefine(T$),_$=i.object({title:jn.optional(),blocks:i.array(i.union([C$,LX])).max(50)}).strict().superRefine(T$),P$=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(),iee=i.object({view:_$,digest:P$.optional()}).strict();function O$(e){let t=_$.safeParse(e);return t.success?{success:!0,data:t.data}:{success:!1,issues:Hp(t.error)}}function M$(e){let t=P$.safeParse(e);return t.success?{success:!0,data:t.data}:{success:!1,issues:Hp(t.error)}}function j$(e){let t=iee.safeParse(e);return t.success?{success:!0,data:t.data}:{success:!1,issues:Hp(t.error)}}function D$(e){let t=ree.safeParse(e);return t.success?{success:!0,data:t.data}:{success:!1,issues:Hp(t.error)}}function z$(e){let t=XC(e,"dashboard");if(t.length>0)return{success:!1,issues:t};return O$(e)}function oI(e,t){let n=XC(e,"studio");if(n.length>0)return{success:!1,issues:n};let r=D$(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 N$(e){return M$(e)}function aI(e){return j$(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 oee(e,t){let n=z$(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 aee(e,t){let n=N$(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=G0(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=aI(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=oee(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=aee(w,n)}return Object.freeze({view:g,...h?{digest:h}:{},...e.includeSource?{source:p}:{}})}}var sI=Object.freeze({config:Object.freeze({}),state:Object.freeze({}),accountSettings:void 0});async function lI(e){if(e.context.executionOnly||!e.context.dashboard.isAvailable())return!1;let t=e.definition.bind(sI,({caller:o,signal:a})=>e.load({caller:o,visibilityScope:YC(o),signal:a})),n=Xp({publicServiceId:e.context.pluginId,packageName:e.context.pluginId,config:sI.config,state:sI.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"},see=i.object({initialSyncPending:i.boolean()}),$$=i.discriminatedUnion("success",[i.object({success:i.literal(!0)}),i.object({success:i.literal(!1),error:i.string()})]),lee=un(so.initialSyncCompleted,$$),B$=i.object({timestamp:i.string()}),cee=un(so.startupContentSettled,B$),uee=un(so.shellReady,B$),L$=i.object({entityType:i.string().min(1)}),dee=un(so.identityChanged,L$);var hee={"startup-content-settled":so.startupContentSettled},yee=i.record(i.string(),i.unknown());function q$(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 pI(e){if(typeof e==="object"&&e!==null&&!Object.isFrozen(e))Object.values(e).forEach(pI),Object.freeze(e);return e}function cI(e){let{attributed:t}=e.job;return t!==void 0&&t!==!1}function bee(e){let t=Rh(e);return Object.freeze({interfaceType:e.interfaceType,actor:e.actor,...qe({userId:t,channelId:e.channelId,channelName:e.channelName})})}function uI(e){return{actor:e.actor,interfaceType:e.interfaceType}}function vee(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 See(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 wee(e){let{identity:t,views:n}=e;return Object.freeze({domain:e.domain,themeCSS:e.themeCSS,identity:Object.freeze({getProfile:()=>t.getProfile()}),entityService:See(e.entityService),views:Object.freeze({get:(r)=>n.get(r)})})}var xee=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"}),Tee=i.object({items:i.array(i.object({operation:i.enum(["upsert","delete"]),id:i.string(),source:Gi.optional()}))});function J$(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 V$(e,t){let n=J$(e,t);return Yi(n.content,n.frontmatter)}function Cee(e){let t=lr(e);return Xe(t.data)&&Object.keys(t.data).length>0?t.content:e}function Iee(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 Eee(e){return{frontmatterSchema:xh(e)??e.metadata,...xh(e)&&{writtenFrontmatterSchema:Iee(e.metadata,xh(e))},toMarkdown(t){return V$(e,{...t,content:Cee(t.content)})},fromMarkdown(t){let n=Pn(t,yee),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(J$(e,t).frontmatter)},metadataFromFrontmatter:!0}}function Ree(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 kee(e){let t=kl(e),n=e.stub;return{entityType:e.type,purpose:e.purpose,schema:t,...e.config?.binaryStorage===void 0?Eee(e):Ree(e),extractMetadata:(r)=>vD(e)?.(r.metadata)??r.metadata,getBodyTemplate:()=>yD(e),...CD(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)=>Aee(e,r)}}}function Aee(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 _ee(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(V$(e.target,{content:a.content,metadata:s}),l),metadata:s,visibility:l}})}}}),o}function Pee(e){return"load"in e&&typeof e.load==="function"&&"view"in e.definition&&typeof e.definition.view==="function"}var dI=Object.freeze({config:Object.freeze({}),state:Object.freeze({}),accountSettings:void 0});function Oee(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 Mee(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 jee(e,t,n){return kT({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=Tee.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 _ee(e,c.source,a))}return l}})}class H$ 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,{},jC,e.actions&&{[e.type]:Fh.parse(e.actions)});if(this.entityTypeConfig=bN(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)xee.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||qT(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=kee(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,Oee(n),r),derive:(t,n,r)=>e.derive(t,Mee(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 GC(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)=>PD(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=qT(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,BN(x,e,C,T,this.id,(y)=>this.templateName(y)));return}e.jobs.registerHandler(b,"generate"in x?this.generationHandler(e,x,b):$N(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=wD(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:DN(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&&ED(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?.(dI)??[]).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?wee(e):void 0;this.releases=[...gD(this.definition).map((b)=>e.messaging.answer(b.contract,async(x,{sender:T})=>b.handle({request:x,sender:T,entities:await NN(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(F$,async(b)=>({items:[...await o(Object.freeze({request:pI(structuredClone(b)),entities:Ur(e.entityService,Tr(b.userPermissionLevel))}))]}))]:[],...a?[e.messaging.answer(G$,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(hee[s.on],async()=>(await this.plantSeed(e,s),{success:!0}))]:[],...l?[e.messaging.answer(U$,(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(Z$,{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(W$,{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:dI.config,state:dI.state,binding:n,context:e,runtimeSignal:this.widgetAbort.signal})))this.dashboardWidgetIds.push(n.definition.id)}boundWidget(e){if(Pee(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=(s)=>{let l=Tr(s.permissionLevel);return{actor:s,records:this.records(e,l),entities:Ur(e.entityService,l)}},o=(s)=>{if(s.permissionLevel!=="admin")throw Error(`${t.displayName} requires admin permission`)},a=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)}))],...a&&{resolveDetail:(s,l,c)=>(o(l),a(s,Object.freeze({...r(l),signal:c})))},act:async(s,l,c)=>(o(c),t.act(s,l,Object.freeze({...r(c),edits:this.inboxEdits(e,c)})))}}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=q$(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:DC(this.entityType,r,`Upload was not handled by ${this.entityType}`)})}async routeCreate(e,t,n,r,o){let a=q$(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=cD(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=uD(s);if(c)return{kind:"handled",result:await this.applyQueuedCreate(e,c,r,o)};let u=dD(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:pI(structuredClone(t)),entities:a,uploads:o},{...this.runtimeBinding(e,a,"a create route",{service:e.entityService,scope:()=>"public"}),caller:bee(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=cI(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 JC({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:uI(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,...cI(t)&&{eventContext:uI(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,...cI(t)?[{options:vee(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:uI(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?[VT.parse(p)]:[]});if(a.length===0)return;let s=n.siteConfig.url??"https://example.com",l=s.replace(/\/+$/u,""),c=HT(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=gee(n.outputDir,t.path);await pee(fee(u),{recursive:!0}),await mee(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)=>jee(e,this.version,this.scope)),...this.projectionRules]}}function Dee(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 H$(a.get(c)??c,t.filter(({source:u})=>u===c),n,r,o.filter((u)=>Dee(u,c,e)),s,l))}function zee(e){if(Jt(e.type,"Entity type"),e.scheduledGeneration){if(!e.generation)throw Error(`Entity "${e.type}" declares a scheduled generation but no generation`);vN.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`);Nee(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 Nee(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 $ee(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 Bee(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 Lee(e){return Jt(e.id,"Projection id"),Object.freeze({kind:"rizom-projection",...e})}var qee=i.object({}),iy=["create","evals","publish","projectionRules","jobs","generation"];function Fee(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 Uee(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 Zee(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??qee,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:Fee(e.id,t,g),w,Uee(e.id,o,h.entities??[]))}})}var ay="[secret]",Wee=Symbol.for("nodejs.util.inspect.custom");class Q${#e;constructor(e){this.#e=e,Object.defineProperty(this,Wee,{value:()=>ay}),Object.freeze(this)}reveal(){return this.#e}toJSON(){return ay}toString(){return ay}[Symbol.toPrimitive](){return ay}}function K$(e,t){return Object.freeze(Object.fromEntries(Object.entries(t).map(([n,r])=>[n,e.fields[n]?.secret===!0&&r!==void 0?new Q$(r):r])))}function mI(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&&!YN.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 Gee=i.object({url:i.string()}),Jee=2048;function Vee(e){try{let t=new URL(e);return t.protocol==="https:"&&t.origin===e}catch{return!1}}function Hee(e,t){if(!Vee(e))throw Error(`Workspace action "${t}" launch origin "${e}" must be an absolute https origin, such as https://example.com`)}function Y$(e,t){if(t.length>Jee)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 X$=Symbol("rizom.workspace-action-executor");function fI(e){let t=e[X$];if(!t)throw Error(`Workspace action "${e.definition.name}" was not bound by defineWorkspaceAction().bind()`);return t}function eB(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)Hee(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??Gee,...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,[X$]:Object.freeze({execute:s,...l?{prepare:l}:{}})})}};return Object.freeze(o)}function tB(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 nB=new WeakMap;function rB(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)gI(e.deadline);let t={kind:"rizom-service-job",...e,handle(n){let r=Object.freeze({kind:"rizom-service-job-binding",definition:t});return nB.set(r,async(o)=>n({...o,input:wi(t.input,o.input)})),r}};return Object.freeze(t)}function iB(e){let t=nB.get(e);if(!t)throw Error(`Job "${e.definition.name}" was not created by defineJob().handle()`);return t}function gI(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 oB(e){return Jt(e.name,"Tool name"),hI(e)}function hI(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 CB}from"async_hooks";var aB=Symbol("service-content-target");function sB(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,[aB]:!0})}import{createHash as Qee,randomBytes as Kee}from"crypto";var cB=Object.freeze({ttlMs:600000,maxPending:20});function lB(e){return Qee("sha256").update(e).digest("base64url")}class yI{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=Kee(32).toString("base64url");return this.pending.set(lB(t),{value:e,expiresAt:this.now()+this.ttlMs}),t}take(e,t=()=>!0){this.prune();let n=lB(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 Yee(e,t){if(e.userPermissionLevel!=="admin")throw Error(`${t} requires admin permission`)}import{createHash as Xee,randomUUID as ete}from"crypto";var tte=300000,nte=1000;function bI(e){if(e===null||typeof e!=="object")return JSON.stringify(e);if(Array.isArray(e))return`[${e.map(bI).join(",")}]`;return`{${Object.keys(e).sort().map((t)=>`${JSON.stringify(t)}:${bI(e[t]??null)}`).join(",")}}`}function uB(e){return Xee("sha256").update(bI(e)).digest("hex")}function dB(e={}){let t=e.now??(()=>Date.now()),n=e.maxRecords??nte,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=ete(),p=u+tte;return r.set(d,{callerId:a,actionId:s,inputDigest:uB(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!==uB(c))return;return{revision:u.revision}}}}var rte=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(),ite=i.object({capability:i.object({confirmation:i.literal("prepared").optional()})}).passthrough(),ote=i.array(i.string().trim().min(1).max(120)).max(200).transform((e)=>[...new Set(e)]),ate=i.object({summary:i.string().trim().min(1).max(500),revision:i.string().trim().min(1).max(500)}),sy=i.json(),ste=i.object({url:i.string()});function lte(e,t){if(e.confirmation?.kind!=="prepared")return!1;if(e.confirmation.conditional!==!0)return!0;let n=ite.safeParse(t);return n.success&&n.data.capability.confirmation==="prepared"}function cte(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 pB(e){return Object.freeze({actor:Object.freeze({id:e.userId,...e.displayName?{displayName:e.displayName}:{}}),permission:e.userPermissionLevel,isAnchor:e.isAnchor})}function mB(e,t){return t?AbortSignal.any([t,e]):e}async function ute(e,t,n){let r=fI(e).prepare;if(!r)throw Error("Prepared confirmation callback is unavailable");return r({...t,input:n})}async function dte(e,t,n,r){return fI(e).execute({...t,...n,input:r})}function SI(e){let t=e.binding.definition,n=H0(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=dB();async function a(C,S,y){let R=await Kh({config:e.config,state:e.state,...e.accountSettingsRegistration?{accountSettingsRegistration:e.accountSettingsRegistration}:{},provider:{caller:pB(C),signal:S},context:e.context,entities:e.entities,accountSettings:e.accountSettings});return Object.freeze({...R,query:cte(t.query,y,r)})}function s(C,S){return e.runAs?e.runAs({caller:pB(C),actor:C.actor,interfaceType:"studio",browserSession:!0},S):S()}function l(C){return e.entities?VN(e.entities,C.signal):Object.freeze({...C.entities,...HN()})}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=rte.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 ute(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=ate.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 dte(C.binding,S,{entities:l(S),accountSettings:e.accountSettings??KC()},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=ste.safeParse(y);if(!R.success||!Y$(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=ote.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=mB(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=oI(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=mB(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=lte(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 vI=Object.freeze({config:Object.freeze({}),state:Object.freeze({}),accountSettings:void 0});function wI(e){let t=e.bind(vI);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 SI({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:vI.config,state:vI.state,binding:t,context:e.context,runtimeSignal:e.runtimeSignal??new AbortController().signal})}async function pte(e){if(e.context.executionOnly||!e.context.studio.isAvailable())return!1;return e.context.studio.registerWorkspace(wI(e))}function ly(e){return Object.freeze({isAvailable:()=>!e.executionOnly&&e.studio.isAvailable(),source:(t)=>wI({...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 mte=i.string().min(1).refine((e)=>Buffer.from(e).toString("utf8")===e,"State owner must be well-formed Unicode"),fte=/^@[a-zA-Z0-9][a-zA-Z0-9_-]*\/[a-zA-Z0-9_-]+$/u;function gte(e,t){let n=mte.parse(e);if(fte.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:gte(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 hte=/^[a-z][a-z0-9_-]*$/u,fB=new WeakSet;function gB(e){return fB.has(e)}function yte(e,t={}){if(!hte.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=hI(e);if(t.bareName===!0)fB.add(n);return n}var hB=Symbol("rizom.first-party-service-runtime"),yB=new WeakSet;function bte(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"?Ste(t,d,l,(f)=>p(f.payload,f.source)):vte(t,d,l,(f,g)=>p(f,g.source)))}};return Object.freeze(s)}function vte(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 Ste(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 bB(e,t){let n=bte(t);return yB.add(n),cy(e,hB,n)}function wte(e){return e!==void 0&&yB.has(e)}function xte(e){let t=uy(e,hB);if(!wte(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 vB=new Set(["anchor-profile","brain-character"]);var yet=["GET","POST","PUT","DELETE","OPTIONS"],Tte="data-site-slot";class SB 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 xI(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=xI(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 TI=["GET","POST","PUT","DELETE","OPTIONS"];function Zl(e){return"returnTo"in e}var wB=/[\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("//")||wB.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("//")&&!wB.test(n)?n:void 0}catch{return}}function xB(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)?Rte(e,t):Cte(e);return{method:e.method,path:e.path,public:!0,handler:async(r)=>{try{let o=await _te(e,r,t);if(e.security.kind==="protocol"&&!o)throw new it("unauthenticated");let a=e.body?await kte(e.body,r):void 0,s=await t.runAs(o?Ate(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:TB(l)})}}}}function Cte(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 Ite=i.union([i.string(),i.number(),i.boolean()]),Ete=i.record(i.string(),Ite.optional());function Rte(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=Ete.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=xB(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 kte(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 Ate(e,t){return{actor:{kind:"external",externalActorId:my(t,e.actor.id)},permissionLevel:e.permission}}async function _te(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 CI="_rizomConfirmationToken",Pte=i.object({issues:i.array(i.object({path:i.array(i.union([i.string(),i.number()]))}))});function Ote(e){if(!(e instanceof Error)||e.name!=="ZodError")return;let t=Pte.safeParse(e);if(!t.success)return;return[...new Set(t.data.issues.map((n)=>n.path.join(".")||"(root)"))]}function Mte(e){if(e===null||typeof e!=="object")return;let t=Reflect.get(e,CI);return typeof t==="string"?t:void 0}function jte(e){if(e===void 0)return{};try{return JSON.parse(e)}catch{return e}}function Dte(e,t,n){let r=e.definition,o=iB(e),a=Mp(r.input);return{...r.deadline?{executionTimeoutMs:gI(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 RB extends py{definition;calls=new CB;entityAccessCache;publicId;dependencies;toolContext=new CB;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),ZN(a,`${this.id}:${a.name}`),e.jobs.registerHandler(a.name,Dte(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=SI({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)WN(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 yI(cB);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=Ote(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?K$(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 bB(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:Bte(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:$te(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(zte(`${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 lI({context:e,definition:n.definition,render:n.render,load:({visibilityScope:r,signal:o})=>n.load({corpus:kB(e.entityService),visibilityScope:r,signal:o}),runtimeSignal:this.operatorAbortController.signal}),{success:!0})))}})}claimSystemType(e,t){if(!vB.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=Nte(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}`?QC(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)=>sB(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:vT(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(jte(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=gB(e)?e.name:`${this.publicId}_${e.name}`,n=EB({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=Mte(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[CI],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),[CI]: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 kB(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 zte(e,t){return{id:e,name:t.name,description:t.description,fetch:async(n,r,o)=>r.parse(await t.fetch(n,{corpus:kB(o.entityService),publishedOnly:o.publishedOnly===!0}))}}var IB=new WeakMap;function Nte(e){let t=IB.get(e);if(t)return t;let n=new Map;return IB.set(e,n),n}function $te(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 Bte(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 AB(e,t,n,r,o=[]){return new RB(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 _B(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:qte(e.id,n,l),t),AB(e,o,a,l??s(e.id),c??[])]});return PB.set(r,(o)=>_B(e,o)),r}var PB=new WeakMap;function Lte(e,t){let n=PB.get(e);if(!n)throw Error(`Service definition "${e.id}" was not created by defineServicePlugin`);return n(Object.freeze([...t]))}function qte(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 Fte={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 Ute(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 Zte(e,t){return em(Fte,e,t),Ute(e.id,e.entities??[]),_B({...t,...e,entities:Object.freeze(e.entities===void 0?[]:[...e.entities]),accountSettings:e.accountSettings})}import{AsyncLocalStorage as fke}from"async_hooks";var OB=30000,MB=1e4;function jB(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),jB(b,OB,`Account-bound daemon "${e.id}" did not report readiness within ${OB}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 jB(h.run,MB,`Account-bound daemon "${e.id}" task did not stop within ${MB}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 DB(e){return NB(e)}function zB(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 $B(e){return{get guestReady(){return e.guestReady===!0},chat:async(t,n,r,o)=>{let a=zB(r),s=o?await e.chat(t,n,a,o):await e.chat(t,n,a);return DB(s)},confirmPendingAction:async(t,n,r,o,a)=>{let s=zB(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 DB(l)},invalidate:()=>{e.invalidateAgent()}}}function yy(e,t,n){let r=ql(e,t,n),o=e.getMCPService(),a=e.getPermissionService(),s=$B(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 II(e,t,n){return{...yy(e,t,n),channels:Hz(e,t)}}var Wte=3600000;class Eu extends Pl{type="interface";daemon;jobTrackingEntries=new Map;jobTrackingTtlMs=Wte;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([])}),BB=new WeakMap;function LB(e,t,n){BB.set(e,{declarations:t,rebuild:n})}function Ru(e,t,n){let r=BB.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(!Gte(o,e.config))throw Error(`Interface "${e.id}" did not rebuild as itself`);return o}function Gte(e,t){return e.family==="interface"&&e.config===t}function vy(e){return{run:e}}function Jte(e,t){return Ru(e,"withDaemon",(n)=>({...n,daemons:[...n.daemons,vy(t)]}))}function Vte(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 Hte(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 Qte(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 Kte(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 Yte(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 qB=Symbol("rizom.first-party-interface-runtime"),FB=new WeakSet;function Xte(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,qB,t)}function UB(e){let t=Xte(e);return FB.add(t),t}function ene(e){return e!==void 0&&FB.has(e)}function tne(e){let t=uy(e,qB);if(!ene(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 EI(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 RI(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 kI(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 ZB=Object.defineProperty,WB=(e,t)=>{let n={};for(var r in e)ZB(n,r,{get:e[r],enumerable:!0});if(!t)ZB(n,Symbol.toStringTag,{value:"Module"});return n};var nne=Symbol.for("vercel.ai.error"),Ee=class e extends Error{constructor({name:t,message:n,cause:r}){super(n);this[nne]=!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}},GB="AI_DecisionUnsupportedQuestionTypeError",JB=`vercel.ai.error.${GB}`,rne=Symbol.for(JB),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:GB,message:o});this[rne]=!0,this.questionId=e,this.questionType=t,this.provider=n,this.modelId=r}static isInstance(e){return Ee.hasMarker(e,JB)}},VB="AI_APICallError",HB=`vercel.ai.error.${VB}`,ine=Symbol.for(HB),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:VB,message:e,cause:s});this[ine]=!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,HB)}},QB="AI_EmptyResponseBodyError",KB=`vercel.ai.error.${QB}`,one=Symbol.for(KB),Au=class extends Ee{constructor({message:e="Empty response body"}={}){super({name:QB,message:e});this[one]=!0}static isInstance(e){return Ee.hasMarker(e,KB)}},ane="AI_DecisionRefusalError",Qtt=`vercel.ai.error.${ane}`;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 YB="AI_InvalidArgumentError",XB=`vercel.ai.error.${YB}`,sne=Symbol.for(XB),tt=class extends Ee{constructor({message:e,cause:t,argument:n}){super({name:YB,message:e,cause:t});this[sne]=!0,this.argument=n}static isInstance(e){return Ee.hasMarker(e,XB)}},eL="AI_InvalidPromptError",tL=`vercel.ai.error.${eL}`,lne=Symbol.for(tL),xs=class extends Ee{constructor({prompt:e,message:t,cause:n}){super({name:eL,message:`Invalid prompt: ${t}`,cause:n});this[lne]=!0,this.prompt=e}static isInstance(e){return Ee.hasMarker(e,tL)}},nL="AI_InvalidResponseDataError",rL=`vercel.ai.error.${nL}`,cne=Symbol.for(rL),It=class extends Ee{constructor({data:e,message:t=`Invalid response data: ${JSON.stringify(e)}.`}){super({name:nL,message:t});this[cne]=!0,this.data=e}static isInstance(e){return Ee.hasMarker(e,rL)}},iL="AI_JSONParseError",oL=`vercel.ai.error.${iL}`,une=Symbol.for(oL),qo=class extends Ee{constructor({text:e,cause:t}){super({name:iL,message:`JSON parsing failed: Text: ${e}.
|
|
186
186
|
Error message: ${bt(t)}`,cause:t});this[une]=!0,this.text=e}static isInstance(e){return Ee.hasMarker(e,oL)}},aL="AI_LoadAPIKeyError",sL=`vercel.ai.error.${aL}`,dne=Symbol.for(sL),Ts=class extends Ee{constructor({message:e}){super({name:aL,message:e});this[dne]=!0}static isInstance(e){return Ee.hasMarker(e,sL)}},pne="AI_LoadSettingError",Ktt=`vercel.ai.error.${pne}`;var mne="AI_NoContentGeneratedError",Ytt=`vercel.ai.error.${mne}`;var lL="AI_NoSuchModelError",cL=`vercel.ai.error.${lL}`,fne=Symbol.for(cL),nm=class extends Ee{constructor({errorName:e=lL,modelId:t,modelType:n,message:r=`No such ${n}: ${t}`}){super({name:e,message:r});this[fne]=!0,this.modelId=t,this.modelType=n}static isInstance(e){return Ee.hasMarker(e,cL)}},uL="AI_NoSuchProviderReferenceError",dL=`vercel.ai.error.${uL}`,gne=Symbol.for(dL),_I=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:uL,message:n});this[gne]=!0,this.provider=e,this.reference=t}static isInstance(e){return Ee.hasMarker(e,dL)}},pL="AI_TooManyEmbeddingValuesForCallError",mL=`vercel.ai.error.${pL}`,hne=Symbol.for(mL),Wl=class extends Ee{constructor(e){super({name:pL,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[hne]=!0,this.provider=e.provider,this.modelId=e.modelId,this.maxEmbeddingsPerCall=e.maxEmbeddingsPerCall,this.values=e.values}static isInstance(e){return Ee.hasMarker(e,mL)}},fL="AI_TypeValidationError",gL=`vercel.ai.error.${fL}`,yne=Symbol.for(gL),_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:fL,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 G_e(e){return e.split(`
|
|
411
411
|
`).flatMap((t)=>{let n=t.match(Z_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 LQ=new hs(iS,{title:"Agent",mappings:[{key:"about",label:"About",type:"string"},{key:"skills",label:"Skills",type:"custom",formatter:W_e,parser:G_e},{key:"notes",label:"Notes",type:"string"}]});function J_e(e){return LQ.format(e)}function V_e(e){if(!e.trim())return iS.parse({});try{return LQ.parse(e)}catch{return iS.parse({})}}import{EventEmitter as HQ}from"events";var mn={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 qQ extends Error{pluginId;constructor(e,t){super(t);this.name="FatalPluginConfigurationError",this.pluginId=e}}var FQ=Symbol.for("brains.httpRouteSnapshotProvider");function oS(e){let t=Reflect.get(e,FQ);return typeof t==="function"?t:void 0}function H_e(e,t){if(oS(e))throw Error("HTTP route snapshot provider is already bound");Object.defineProperty(e,FQ,{value:t,enumerable:!1,configurable:!0,writable:!1})}function UQ(e,t){let n=oS(e);if(!n)throw Error("HTTP route snapshot provider is not bound");if(oS(t))return;H_e(t,n)}function cht(e){let t=oS(e);if(!t)throw Error("HTTP route snapshot provider is not bound");return t()}function WQ(e,t){return Reflect.get(e,t,e)}function GQ(e,t,n){if(typeof e!=="function")throw TypeError("Cannot apply a non-callable trapped member");return Reflect.apply(e,t,n)}class b_{scope;ingress=new Set;closePromise=null;closed=!1;constructor(){this.scope=be.runSync(dn.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(dn.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(dn.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=WQ(o,a);if(typeof a==="string"&&t.some((l)=>l===a)&&typeof s==="function")return(...l)=>n.acquire(()=>GQ(s,o,l),(c)=>r(l,c));return typeof s==="function"?s.bind(o):s}})}function ZQ(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 JQ(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)=>{GQ(h.unregister,h,[k])}),v=yc(e.getAuthRegistry(),["bindBackend"],t,(A,k)=>{if(ZQ(k))k()}),b=yc(e.getAtprotoProjectionRegistry(),["register"],t,(A,k)=>{if(ZQ(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=WQ(A,k);return typeof j==="function"?j.bind(A):j}});return UQ(e,R),R}class v_{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 b_;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(JQ(t,a),n);return r.status=mn.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!==mn.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!==mn.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=mn.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!==mn.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!==mn.ERROR,o=mu(t);if(n.status=mn.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===mn.DISABLED)return;this.logger.debug(`Disabling plugin: ${e}`);let n=t.status===mn.ERROR;await this.releasePluginResources(e,cn.void);let r=this.plugins.get(e);if(!n&&r&&r.status!==mn.DISABLED)r.status=mn.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 S_{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=mn.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===mn.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!==mn.INITIALIZED)r.push(o)}return r}}class w_{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 aS{projections=new Map;rules=new Map;static createFresh(){return new aS}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(Y_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=X_e(t,r),a=tPe(t,o)[0];if(a){let s=nPe(a,o);throw Error(`Projection cycle is not supported: ${[...s,s[0]].join(" -> ")}`)}return K_e({projections:t,edges:o,unknownSourceTypes:Q_e(t,n)})}}function Q_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 K_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 Y_e(e){return{...e,sources:e.sources.map((t)=>({...t,types:[...t.types],...t.excludeTypes?{excludeTypes:[...t.excludeTypes]}:{}}))}}function X_e(e,t){let n=new Map;for(let r of e)for(let o of e){let a=ePe(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 ePe(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 tPe(e,t){let n=e.map(({id:p})=>p).sort(),r=VQ(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 nPe(e,t){let n=new Set(e),r=VQ(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 VQ(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 sS{plugins=new Map;logger;events=new HQ;daemonRegistry;shell=null;initializedPluginIds=[];channelOnlyPlugins=[];pluginLifecycle;dependencyResolver;capabilityRegistrar;projectionRegistry=aS.createFresh();projectionGraph;static createFresh(e,t){return new sS(e,t)}setShell(e){this.shell=e}constructor(e,t){this.logger=e.child("PluginManager"),this.events=new HQ,this.daemonRegistry=t,this.pluginLifecycle=new v_(this.plugins,this.events,this.daemonRegistry,this.projectionRegistry,e),this.dependencyResolver=new S_(this.plugins,this.events,e),this.capabilityRegistrar=new w_(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:mn.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 x_(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===mn.ERROR)await this.pluginLifecycle.failPluginInitialization(t,n.error??e)}throw e}}async startPluginDaemons(){this.logger.debug("Starting plugin daemons..."),await x_(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===mn.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===mn.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 QQ={public:0,trusted:1,admin:2},rPe=[{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 iPe(e,t){let n=QQ[t.permissionLevel??"public"],r=[];for(let{id:o,roles:a,requiresRole:s,label:l,visibility:c,requiresActiveSession:u}of rPe){let d=t.self?.id===o;if(!d&&(n<QQ[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 KQ{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 oPe(e){return e}function lS(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 aPe(e){let t=new URL(lS(e)).hostname.toLowerCase();return t==="localhost"||t==="[::1]"||t==="::1"||t.startsWith("127.")}function YQ(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 lS(`${a}://${o}`)}return lS(t??new URL(e.url).origin)}function XQ(e,t){return new Response(JSON.stringify({error:e}),{status:t,headers:{"Content-Type":"application/json; charset=utf-8","Cache-Control":"no-store"}})}function eK(e){let t=e.headers.get("origin");if(t===null)return!1;try{return t===YQ(e)}catch{return!1}}function tK(e){return eK(e)?void 0:XQ("Same-origin request required",403)}function sPe(e){let t=tK(e);if(t)return t;if(!e.headers.get("content-type")?.startsWith("application/json"))return XQ("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,rP 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,hP as eb,Uf as fb,es as gb,We as hb,de as ib,Ft as jb,Pt as kb,US as lb,$r as mb,J as nb,ng as ob,cw as pb,Hi as qb,Qi as rb,hO as sb,$K as tb,BK as ub,qn as vb,ts as wb,En as xb,bn as yb,mi as zb,ua as Ab,Ct as Bb,Ni as Cb,yO as Db,ZK as Eb,WK as Fb,GK as Gb,Yd as Hb,ns as Ib,Sw as Jb,Tw as Kb,Cw 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,yNe as Yb,bNe 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,NO as gc,dl as hc,bg as ic,wg as jc,jw as kc,Dw as lc,xg as mc,Tg as nc,Nw as oc,Ig as pc,Vc as qc,Oo as rc,Hc as sc,Rr as tc,Gi as uc,Kw as vc,Yw as wc,U5 as xc,Z5 as yc,tx as zc,bLe as Ac,ix as Bc,ax as Cc,jo as Dc,Bg as Ec,xM as Fc,as as Gc,TM as Hc,iqe as Ic,CM as Jc,qg as Kc,W as Lc,Do as Mc,P as Nc,fe as Oc,_ as Pc,vr as Qc,AM as Rc,ma as Sc,hi as Tc,Fr as Uc,cp as Vc,Ce as Wc,Mn as Xc,ot as Yc,MM as Zc,jM as _c,st as $c,Yc as ad,Xc as bd,ls as cd,lj as dd,rh as ed,au as fd,Mx as gd,jx as hd,Zx as id,uh as jd,tT as kd,hh as ld,f0 as md,h0 as nd,fs as od,rT as pd,U9 as qd,b0 as rd,bh as sd,iT as td,v0 as ud,fa as vd,bHe as wd,vHe as xd,SHe as yd,wHe as zd,aT as Ad,vh as Bd,sT as Cd,lT as Dd,K9 as Ed,xHe as Fd,THe as Gd,CHe as Hd,IHe as Id,EHe as Jd,RHe as Kd,kHe as Ld,bi as Md,AHe as Nd,vp as Od,S0 as Pd,El as Qd,yet as Rd,Tte as Sd,SB as Td,dy as Ud,ba as Vd,jD as Wd,$Ke as Xd,UT as Yd,Pp as Zd,vY as _d,SY as $d,wY as ae,xY as be,JD as ce,du as de,TY as ee,CY as fe,IY as ge,cu as he,hs as ie,RY as je,KD as ke,XD as le,_Y as me,JT as ne,nz as oe,OY as pe,VT as qe,HT as re,k0 as se,_0 as te,Sh as ue,N0 as ve,yT as we,TT as xe,L0 as ye,Ur as ze,zl as Ae,re as Be,yt as Ce,iC as De,aC as Ee,sC as Fe,$o as Ge,lC as He,zp as Ie,Np as Je,cC as Ke,uC as Le,dC as Me,pC as Ne,wt as Oe,kh as Pe,Ah as Qe,F3e as Re,U3e as Se,XY as Te,Iz as Ue,W3e as Ve,s7 as We,G3e as Xe,J3e as Ye,V3e as Ze,H3e as _e,Q3e as $e,K3e as af,Y3e as bf,X3e as cf,e9e as df,t9e as ef,n9e as ff,m7 as gf,f7 as hf,i9e as if,o9e as jf,a9e as kf,s9e as lf,l9e as mf,c9e as nf,u9e as of,d9e as pf,Ae as qf,Fn as rf,Bl as sf,wa as tf,_h as uf,Ph as vf,Mz as wf,jz as xf,h7 as yf,Oh as zf,xC as Af,qp as Bf,oN as Cf,Fp as Df,jh as Ef,Ll as Ff,sN as Gf,Dh as Hf,EC as If,lN as Jf,zh as Kf,RC as Lf,kC as Mf,O7 as Nf,OC as Of,D7 as Pf,qh as Qf,py as Rf,jC as Sf,hu as Tf,ET as Uf,jke as Vf,FC as Wf,Dke as Xf,kT as Yf,zke as Zf,Nke as _f,Bke as $f,S4 as ag,Lke as bg,T4 as cg,R4 as dg,A4 as eg,Iu as fg,Vr as gg,Lv as hg,_4 as ig,e_ as jg,z4 as kg,df as lg,N4 as mg,xd as ng,$4 as og,eAe as pg,B4 as qg,L4 as rg,dAe as sg,F4 as tg,so as ug,see as vg,$$ as wg,lee as xg,cee as yg,uee as zg,dee as Ag,hAe as Bg,yAe as Cg,bAe as Dg,n_ as Eg,Lo as Fg,xa as Gg,Z7 as Hg,$C as Ig,Jt as Jg,R8 as Kg,AT as Lg,QC as Mg,q8 as Ng,H8 as Og,Q8 as Pg,K8 as Qg,Y8 as Rg,X8 as Sg,tY as Tg,nY as Ug,rY as Vg,iY as Wg,oY as Xg,aY as Yg,Gh as Zg,J0 as _g,Q0 as $g,eD as ah,aI as bh,lI as ch,Th as dh,sY as eh,zee as fh,$ee as gh,Bee as hh,Lee as ih,Zee as jh,cB as kh,yI as lh,mI as mh,Yee as nh,eB as oh,wI as ph,pte as qh,tB as rh,rB as sh,oB as th,yte as uh,xte as vh,Lte as wh,Zte as xh,Jte as yh,Vte as zh,Hte as Ah,Qte as Bh,Kte as Ch,Yte as Dh,tne as Eh,Pce as Fh,Vot as Gh,Aa as Hh,Uue as Ih,sR as Jh,Nm as Kh,OV as Lh,yk as Mh,Iwe as Nh,Ewe as Oh,Rwe as Ph,bk as Qh,Ck as Rh,Ik as Sh,LV as Th,Ek as Uh,qV as Vh,kk as Wh,_k as Xh,Pk as Yh,Ok as Zh,Mk as _h,Pe as $h,sA as ai,IRe as bi,AA as ci,PA as di,oke as ei,$A as fi,BA as gi,K2 as hi,Ev as ii,Rv as ji,Sd as ki,kv as li,Av as mi,cf as ni,_v as oi,i4 as pi,d4 as qi,p4 as ri,wd as si,gc as ti,uf as ui,zv as vi,Nv as wi,$v as xi,Rke as yi,kke as zi,Ake as Ai,_ke as Bi,Pke as Ci,Mke as Di,pf as Ei,mf as Fi,SAe as Gi,xAe as Hi,qAe as Ii,X4 as Ji,eQ as Ki,iQ as Li,oQ as Mi,aQ as Ni,sQ as Oi,cQ as Pi,a_ as Qi,s_ as Ri,mQ as Si,l_ as Ti,Vv as Ui,hQ as Vi,Hv as Wi,c_ as Xi,yQ as Yi,bQ as Zi,SQ as _i,wQ as $i,Qv as aj,p_ as bj,yf as cj,TQ as dj,CQ as ej,IQ as fj,EQ as gj,RQ as hj,E_e as ij,R_e as jj,P_e as kj,O_e as lj,M_e as mj,Yv as nj,_Q as oj,Xv as pj,eS as qj,tS as rj,OQ as sj,hc as tj,nS as uj,Sf as vj,MQ as wj,g_ as xj,DQ as yj,BQ as zj,B_e as Aj,U_e as Bj,J_e as Cj,V_e as Dj,qQ as Ej,H_e as Fj,cht as Gj,sS as Hj,iPe as Ij,KQ as Jj,oPe as Kj,lS as Lj,aPe as Mj,YQ as Nj,tK as Oj,sPe as Pj};
|
|
412
412
|
|
|
413
|
-
//# debugId=
|
|
414
|
-
//# sourceMappingURL=index-
|
|
413
|
+
//# debugId=3D8F220D4B4A24AE64756E2164756E21
|
|
414
|
+
//# sourceMappingURL=index-955w889r.js.map
|