@enhance-eng/enhance-dev 0.1.26-dev.sha-7dea9814accf → 0.1.27-dev.sha-3dce62542ab4

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.
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/env node
2
+ import{FailedToExitError as e,parseRouter as t}from"trpc-cli";import{z as n}from"zod";import{createHash as r}from"node:crypto";import{TRPCError as i,initTRPC as a}from"@trpc/server";import{middlewareMarker as o}from"@trpc/server/unstable-core-do-not-import";import{setTimeout as s}from"node:timers/promises";import c from"node:assert/strict";import{Buffer as l}from"node:buffer";import{TRPCClientError as ee}from"@trpc/client";var te=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports);const ne=n.strictObject({}),re=n.object({firstAgentWorkAt:n.iso.datetime().nullable()}),ie=n.object({cursor:n.string().nullable().default(null),limit:n.number().int().min(1).max(100).default(20)}),ae=e=>n.object({items:n.array(e),truncated:n.boolean()}),oe=2048,se=n.enum([`never-captured`,`capture-pending`,`extension-unavailable`,`capture-failed`,`source-mismatch`,`upload-incomplete`,`blob-missing`,`image-load-failed`,`unsupported-legacy-state`]),ce=n.object({thumbnailId:n.uuid(),url:n.string(),width:n.literal(528),height:n.literal(312),bytes:n.number().int().min(1).max(1048576)}),le=n.object({canvasId:n.uuid(),thumbnailId:n.uuid(),clientReleaseIdentity:n.string().min(1).max(100),attemptedOperation:n.literal(`thumbnail-download`),recoveryOutcome:n.literal(`fallback-shown`)}),u=n.object({recorded:n.literal(!0)}),ue=n.enum([`invite-only`,`link-view`,`link-comment`]),d=n.enum([`owner`,`can-comment`,`can-view`]),f=n.enum([`can-comment`,`can-view`]),de=n.object({read:n.boolean(),comment:n.enum([`yes`,`sign-in`,`no`]),share:n.boolean(),manage:n.boolean()}),p=n.object({id:n.uuid(),title:n.string().min(1),accessState:ue,organisationId:n.uuid().nullable(),sourceUrl:n.string().nullable(),unresolvedCount:n.number().int().min(0),viewerCan:de,createdAt:n.iso.datetime(),lastActivityAt:n.iso.datetime()}),fe=n.object({title:n.string().trim().min(1),organisationId:n.uuid().nullable().default(null),sourceUrl:n.string().nullable().default(null)}),pe=p.extend({version:n.number().int().positive()}),me=n.object({canvasId:n.uuid()}),he=n.union([n.literal(`own`),n.literal(`everything`),n.uuid()]),ge=n.object({collection:he.default(`own`),title:n.string().trim().min(1).optional().describe(`Title text to match before returning canvas ids.`),deleted:n.boolean().default(!1),accessState:ue.optional(),scope:n.enum([`all`,`mine`,`shared`]).default(`all`),hasUnresolved:n.boolean().default(!1)}),_e=p.extend({screenCount:n.number().int().min(0),hasRecording:n.boolean()}),ve=ae(n.union([_e.extend({thumbnail:ce}),_e.extend({thumbnail:n.null(),thumbnailFallbackReason:se})])),ye=n.object({canvasId:n.uuid(),title:n.string().trim().min(1)}),be=n.object({canvasId:n.uuid()}),xe=n.object({canvasId:n.uuid(),deletedAt:n.iso.datetime()}),Se=n.object({canvasId:n.uuid(),organisationId:n.union([n.uuid(),n.literal(`personal`)])}),Ce=n.object({canvas:p}),we=n.object({canvasId:n.uuid(),organisationId:n.union([n.uuid(),n.literal(`personal`)]),title:n.string().trim().min(1).optional()}),Te=n.object({canvas:p}),Ee=n.object({canvasId:n.uuid(),confirmation:n.string().min(1)}),De=n.object({canvasId:n.uuid()}),Oe=n.object({canvasId:n.uuid(),accessState:ue}),ke=n.object({canvas:p,widened:n.boolean()}),Ae=n.object({canvasId:n.uuid()}),je=n.object({lastViewedAt:n.iso.datetime().nullable()}),Me=n.object({canvasId:n.uuid()}),Ne=n.object({canvasId:n.uuid()}),m=n.number(),h=n.number().nonnegative(),Pe=n.object({ratio:h,offset:m.optional()}),Fe=n.object({min:h.optional(),max:h.optional(),minParent:Pe.optional(),maxParent:Pe.optional()}).refine(({min:e,max:t})=>e===void 0||t===void 0||e<=t,`size minimum cannot exceed maximum`),Ie=n.discriminatedUnion(`mode`,[n.object({mode:n.literal(`fixed`),value:h}).strict(),Fe.extend({mode:n.literal(`hug`)}).strict(),Fe.extend({mode:n.literal(`fill`),offset:m.optional()}).strict()]),Le=n.object({top:h,right:h,bottom:h,left:h}),Re=n.union([n.literal(`auto`),m]),ze=n.object({top:Re,right:Re,bottom:Re,left:Re}),Be=n.object({mode:n.enum([`auto-fill`,`auto-fit`]),minimum:n.number().positive()}),Ve=n.object({x:m,y:m}),He=n.object({direction:n.enum([`row`,`column`]),alignItems:n.enum([`start`,`center`,`end`,`stretch`]),alignContent:n.enum([`start`,`center`,`end`,`stretch`,`space-between`,`space-around`,`space-evenly`]).optional(),justifyContent:n.enum([`start`,`center`,`end`,`space-between`,`space-around`,`space-evenly`]),gap:h,rowGap:h.optional(),columnGap:h.optional(),wrap:n.enum([`nowrap`,`wrap`]).optional(),gridColumns:n.number().int().positive().optional(),gridAutoRepeat:Be.optional(),padding:Le}).strict(),Ue=n.object({rotation:m.optional(),flipHorizontal:n.boolean().optional(),flipVertical:n.boolean().optional(),aspectRatioLocked:n.boolean().optional(),aspectRatio:n.number().positive().optional(),horizontal:Ie.optional(),vertical:Ie.optional(),position:n.enum([`flow`,`absolute`]).optional(),alignSelf:n.enum([`auto`,`start`,`center`,`end`,`stretch`]).optional(),flexGrow:h.optional(),flexShrink:h.optional(),flexBasis:n.union([n.literal(`auto`),h,Pe]).optional(),flowOffset:Ve.optional(),order:m.int().optional(),margin:ze.partial().optional(),clipContent:n.boolean().optional(),container:He.partial().extend({padding:Le.partial().optional()}).optional()}).strict(),g=m,_=h,v=n.number().min(0).max(1),We=n.string().min(1),Ge=n.object({space:n.enum([`srgb`,`display-p3`]),red:v,green:v,blue:v,alpha:v}),Ke=n.object({id:We,position:v,color:Ge}),qe=n.object({x:v,y:v}),Je=n.number().min(-1).max(1),Ye=n.object({exposure:Je.optional(),contrast:Je.optional(),saturation:Je.optional(),temperature:Je.optional(),tint:Je.optional(),highlights:Je.optional(),shadows:Je.optional()}),Xe=n.tuple([g,g,g,g,g,g]).refine(([e,t,n,r])=>e*r!==t*n,`image transform must be invertible`),Ze=n.object({id:We,visible:n.boolean(),opacity:v}),Qe=n.discriminatedUnion(`kind`,[Ze.extend({kind:n.literal(`solid`),color:Ge}),Ze.extend({kind:n.literal(`linear-gradient`),angle:g,stops:n.array(Ke).min(2)}),Ze.extend({kind:n.literal(`radial-gradient`),center:qe,radius:qe,stops:n.array(Ke).min(2)}),Ze.extend({kind:n.literal(`image`),assetId:n.string().min(1),fit:n.enum([`fill`,`cover`,`fit`,`crop`,`tile`]),tileScale:g.positive().optional(),tileOrigin:n.enum([`center`,`top-left`]).optional(),rotation:n.union([n.literal(0),n.literal(90),n.literal(180),n.literal(270)]).optional(),crop:n.object({x:v,y:v,width:v,height:v}).optional(),transform:Xe.optional(),adjustments:Ye.optional()}).refine(e=>e.crop===void 0||e.transform===void 0,{message:`image paint cannot have both a crop rectangle and an affine transform`,path:[`transform`]})]),$e=n.object({topLeft:_,topRight:_,bottomRight:_,bottomLeft:_,smoothing:v.optional()}),et=n.object({visible:n.boolean(),width:n.object({top:_,right:_,bottom:_,left:_}),style:n.enum([`solid`,`dashed`,`dotted`]),paint:Qe}),tt=n.object({visible:n.boolean(),width:_,offset:g,style:n.enum([`solid`,`dashed`,`dotted`]),paint:Qe}),nt=n.object({id:We,visible:n.boolean(),kind:n.enum([`outer`,`inner`]),color:Ge,offsetX:g,offsetY:g,blur:_,spread:g}),rt=n.object({id:We,visible:n.boolean()}),it=n.discriminatedUnion(`kind`,[rt.extend({kind:n.literal(`blur`),value:_}),rt.extend({kind:n.literal(`brightness`),value:_}),rt.extend({kind:n.literal(`contrast`),value:_}),rt.extend({kind:n.literal(`grayscale`),value:v}),rt.extend({kind:n.literal(`hue-rotate`),value:g}),rt.extend({kind:n.literal(`invert`),value:v}),rt.extend({kind:n.literal(`saturate`),value:_}),rt.extend({kind:n.literal(`sepia`),value:v})]),at=n.enum([`normal`,`multiply`,`screen`,`overlay`,`darken`,`lighten`,`plus-lighter`,`color-dodge`,`color-burn`,`hard-light`,`soft-light`,`difference`,`exclusion`,`hue`,`saturation`,`color`,`luminosity`]);n.object({opacity:v,blendMode:at,fills:n.array(Qe),border:et,outline:tt,radius:$e,shadows:n.array(nt),filters:n.array(it),backdropFilters:n.array(it)});const ot=n.object({opacity:v.optional(),blendMode:at.optional(),fills:n.array(Qe).optional(),border:et.optional(),outline:tt.optional(),radius:$e.optional(),shadows:n.array(nt).optional(),filters:n.array(it).optional(),backdropFilters:n.array(it).optional()}).refine(e=>Object.keys(e).length>0,`appearance values cannot be empty`),st=[`opacity`,`blendMode`,`fills`,`border`,`outline`,`radius`,`shadows`,`filters`,`backdropFilters`],ct=n.enum(st),lt=n.object({opacity:v.optional(),blendMode:at.optional(),fills:n.array(Qe).optional(),border:et.optional(),outline:tt.optional(),radius:$e.optional(),shadows:n.array(nt).optional(),filters:n.array(it).optional(),backdropFilters:n.array(it).optional(),clear:n.array(ct).min(1).max(st.length).optional()}).refine(e=>Object.keys(e).length>0,`appearance patch cannot be empty`).refine(({clear:e,...t})=>e===void 0||e.every(e=>t[e]===void 0),`appearance patch cannot set and clear the same property`),ut=n.number(),dt=n.number().nonnegative(),ft=n.string().regex(/^[\u{20}-\u{7E}]{4}$/u),pt=ft.refine(e=>![`wght`,`opsz`].includes(e)),y=n.object({family:n.string().min(1),fallbackFamilies:n.array(n.string().min(1)),size:dt,weight:n.number().min(1).max(1e3),variations:n.record(pt,ut).optional(),features:n.record(ft,n.number().int().nonnegative().max(65535)).optional(),opticalSize:n.discriminatedUnion(`mode`,[n.object({mode:n.literal(`auto`)}),n.object({mode:n.literal(`font-default`)}),n.object({mode:n.literal(`fixed`),value:ut})]).optional(),style:n.enum([`normal`,`italic`,`oblique`]),lineHeight:n.discriminatedUnion(`mode`,[n.object({mode:n.literal(`normal`)}),n.object({mode:n.literal(`fixed`),value:dt}),n.object({mode:n.literal(`percent`),value:dt})]),letterSpacing:n.union([ut,n.object({mode:n.literal(`percent`),value:ut})]),align:n.enum([`left`,`center`,`right`,`justify`]),direction:n.enum([`auto`,`ltr`,`rtl`]).optional(),verticalAlign:n.enum([`top`,`middle`,`bottom`]),verticalTrim:n.enum([`none`,`cap-height`]).optional(),transform:n.enum([`none`,`uppercase`,`lowercase`,`capitalize`]),decoration:n.object({line:n.enum([`none`,`underline`,`line-through`]),style:n.enum([`solid`,`double`,`dotted`,`dashed`,`wavy`]),color:Ge.optional(),thickness:n.union([dt,n.object({mode:n.literal(`percent`),value:dt}),n.object({mode:n.literal(`font-default`)})]).optional(),offset:n.union([ut,n.object({mode:n.literal(`percent`),value:ut})]).optional(),skipInk:n.enum([`auto`,`none`,`all`]).optional()}),stroke:n.object({width:dt,paint:Qe,alignment:n.enum([`inside`,`center`,`outside`]).optional()}).optional(),wrapping:n.enum([`wrap`,`nowrap`,`pre`,`pre-line`,`pre-wrap`,`break-spaces`]),wrapStyle:n.enum([`auto`,`pretty`,`balance`]).optional(),paragraphSpacing:dt.optional(),paragraphIndent:dt.optional(),listStyle:n.enum([`none`,`bulleted`,`numbered`]).optional(),listSpacing:dt.optional(),hangingList:n.boolean().optional(),hangingPunctuation:n.boolean().optional(),truncation:n.object({mode:n.enum([`none`,`ellipsis`]),maxLines:n.number().int().min(1).nullable()}).optional(),insets:n.object({top:ut,right:ut,bottom:ut,left:ut}).optional()}),mt=y.pick({align:!0,direction:!0,wrapStyle:!0,paragraphSpacing:!0,paragraphIndent:!0,listStyle:!0,listSpacing:!0,hangingList:!0}).partial().extend({listLevel:n.number().int().min(1).optional(),listStart:n.number().int().min(1).optional()}).strict(),ht=y.partial().strict(),gt=y.keyof().options,_t=ht.extend({featureChanges:n.object({set:y.shape.features,clear:n.array(ft).optional(),removeIfEmpty:n.boolean().optional()}).strict().optional(),variationChanges:n.object({set:y.shape.variations,clear:n.array(pt).optional(),removeIfEmpty:n.boolean().optional()}).strict().optional(),clear:n.array(y.keyof()).max(gt.length).optional()}).refine(e=>e.clear?.every(t=>e[t]===void 0)??!0,`a typography property cannot be set and cleared in the same patch`).refine(e=>[`features`,`variations`].every(t=>{let n=e[t===`features`?`featureChanges`:`variationChanges`];return n===void 0||e[t]===void 0&&e.clear?.includes(t)!==!0&&(n.clear?.every(e=>n.set?.[e]===void 0)??!0)}),`font settings cannot be replaced and patched, or set and cleared, together`),vt={"font-family":[`family`,`fallbackFamilies`],"font-size":[`size`],"font-weight":[`weight`],"font-variation-settings":[`weight`,`variations`,`opticalSize`],"font-optical-sizing":[`opticalSize`],"font-feature-settings":[`features`],"font-style":[`style`],"line-height":[`lineHeight`],"letter-spacing":[`letterSpacing`],"text-align":[`align`],direction:[`direction`],"unicode-bidi":[`direction`],"text-indent":[`paragraphIndent`],"hanging-punctuation":[`hangingPunctuation`],"align-content":[`verticalAlign`],"text-box":[`verticalTrim`],"text-box-trim":[`verticalTrim`],"text-box-edge":[`verticalTrim`],"text-transform":[`transform`],"text-decoration":[`decoration`],"text-decoration-line":[`decoration`],"text-decoration-style":[`decoration`],"text-decoration-color":[`decoration`],"text-decoration-thickness":[`decoration`],"text-underline-offset":[`decoration`],"text-decoration-skip-ink":[`decoration`],"-webkit-text-stroke":[`stroke`],"-webkit-text-stroke-width":[`stroke`],"-webkit-text-stroke-color":[`stroke`],"--canvas-text-stroke-alignment":[`stroke`],"white-space":[`wrapping`],"text-wrap-style":[`wrapStyle`],"text-wrap":[`wrapStyle`]},yt=/javascript|vbscript|data\s*:\s*text\/html|expression\s*\(|@import/iu,bt=/^(?:behavior|-moz-binding)$/iu,xt=n.string().min(1).regex(/^(?:--[\w-]+|-(?:webkit|moz|ms|o)-[a-z][a-z\d-]*|[a-z][a-z\d-]*)$/iu).refine(e=>!bt.test(e),`unsafe CSS property`),St=n.string().refine(e=>!yt.test(e),`unsafe CSS value`),b=n.object({id:n.string().min(1),property:xt,value:St,enabled:n.boolean()}),Ct=n.object({declarations:n.array(b)}).refine(({declarations:e})=>new Set(e.map(e=>e.id)).size===e.length,`additional style ids must be unique`),wt=n.array(b.shape.id).refine(e=>new Set(e).size===e.length,`declaration ids must be unique`),Tt=n.object({set:n.array(b).refine(e=>new Set(e.map(e=>e.id)).size===e.length,`declaration ids must be unique`).optional(),clear:wt.optional(),order:wt.optional(),empty:n.enum([`keep`,`remove`]).optional()}).strict().refine(e=>e.set?.every(t=>e.clear?.includes(t.id)!==!0)??!0,`a declaration cannot be set and cleared in the same patch`),x=n.object({url:n.url(),expiresAt:n.iso.datetime(),headers:n.record(n.string(),n.string())}),Et=n.object({url:n.url(),expiresAt:n.iso.datetime(),bytes:n.number().int().min(0)}),Dt=`/v1/canvas-assets/`,Ot=[`image/avif`,`image/gif`,`image/jpeg`,`image/png`,`image/webp`],kt=n.object({canvasId:n.uuid(),contentType:n.enum(Ot),bytes:n.number().int().positive()}),At=n.object({assetId:n.uuid(),path:n.string().startsWith(`/v1/canvas-assets/`),upload:x}),jt=(e,t)=>`${Dt}${encodeURIComponent(e)}/${encodeURIComponent(t)}`,Mt=n.tuple([n.uuid(),n.uuid()]),Nt=e=>{if(!e.startsWith(`/v1/canvas-assets/`))return null;let t=Mt.safeParse(e.slice(18).split(`/`)).data;return t===void 0?null:{canvasId:t[0],assetId:t[1]}},Pt=[`font/ttf`,`font/otf`,`font/woff`,`font/woff2`],Ft=n.object({canvasId:n.uuid(),sha256:n.string().regex(/^[a-f0-9]{64}$/u)}),It=Ft.extend({bytes:n.number().int().positive()}),Lt=It.extend({contentType:n.enum(Pt)}),Rt=n.object({path:n.string().startsWith(`/v1/canvas-assets/`)}),zt=Rt.extend({upload:x}),Bt=(e,t)=>`${Dt}${encodeURIComponent(e)}/fonts/${encodeURIComponent(t)}`,Vt=n.object({canvasId:n.uuid(),sources:n.array(Ft).min(1)}),Ht=n.object({resources:n.array(n.object({source:Ft,path:n.string()}))}),Ut=e=>{if(!e.startsWith(`/v1/canvas-assets/`))return null;let[t,n,r,i]=e.slice(18).split(`/`,4);return n!==`fonts`||i!==void 0?null:Ft.safeParse({canvasId:t,sha256:r}).data??null},Wt=1e3,Gt={image:Ot,font:Pt},Kt=n.strictObject({canvasId:n.uuid(),clientToken:n.uuid()}),qt=n.discriminatedUnion(`kind`,[Kt.extend({kind:n.literal(`image`),contentType:n.enum(Ot),bytes:n.number().int().positive(),sha256:n.string().regex(/^[a-f0-9]{64}$/u)}),Kt.extend({kind:n.literal(`font`),contentType:n.enum(Pt),bytes:n.number().int().positive(),sha256:n.string().regex(/^[a-f0-9]{64}$/u)})]),Jt=n.discriminatedUnion(`kind`,[n.strictObject({kind:n.literal(`image`),width:n.number().int().positive(),height:n.number().int().positive()}),n.strictObject({kind:n.literal(`font`),family:n.string().min(1),subfamily:n.string(),style:n.enum([`normal`,`italic`,`oblique`]),minimumWeight:n.number().min(1).max(Wt),maximumWeight:n.number().min(1).max(Wt)}).refine(e=>e.minimumWeight<=e.maximumWeight,`Font weight bounds must be ordered.`)]),Yt=n.strictObject({canvasId:n.uuid(),clientToken:n.uuid(),assetId:n.uuid(),kind:n.enum([`image`,`font`]),contentType:n.string(),bytes:n.number().int().positive(),sha256:n.string().regex(/^[a-f0-9]{64}$/u),path:n.string().startsWith(`/v1/canvas-assets/`),state:n.enum([`awaiting_upload`,`ready`]),metadata:Jt.nullable()}).refine(e=>e.state===`ready`==(e.metadata!==null),`Readiness must match verified metadata.`).refine(e=>e.metadata===null||e.metadata.kind===e.kind,`Metadata must describe the reserved asset kind.`).refine(e=>Gt[e.kind].includes(e.contentType),`Content type must match the asset kind.`).refine(e=>e.path===(e.kind===`image`?jt(e.canvasId,e.assetId):Bt(e.canvasId,e.sha256)),`The resource path must match its native identity.`),Xt=Yt.safeExtend({upload:x.nullable()}).refine(e=>e.state===`awaiting_upload`==(e.upload!==null),`Only pending uploads receive upload access.`),Zt=new Set([`aspect-ratio`,`-webkit-line-clamp`,`line-clamp`,`flex-grow`,`flex-shrink`,`font-weight`,`opacity`,`order`,`z-index`,`grid-area`,`grid-row`,`grid-column`,`grid-row-start`,`grid-row-end`,`grid-column-start`,`grid-column-end`]),Qt=(e,t)=>typeof t==`number`&&!Zt.has(e.toLowerCase())?`${String(t)}px`:String(t),$t=[`top`,`right`,`bottom`,`left`],en=[`grid-template-rows`,`grid-template-columns`,`grid-template-areas`],tn={gap:[`row-gap`,`column-gap`],"text-wrap":[`text-wrap-mode`,`text-wrap-style`],padding:$t.map(e=>`padding-${e}`),margin:$t.map(e=>`margin-${e}`),flex:[`flex-grow`,`flex-shrink`,`flex-basis`],"flex-flow":[`flex-direction`,`flex-wrap`],"place-content":[`align-content`,`justify-content`],"place-items":[`align-items`,`justify-items`],"place-self":[`align-self`,`justify-self`],"grid-template":en,grid:[...en,`grid-auto-rows`,`grid-auto-columns`,`grid-auto-flow`],"grid-row":[`grid-row-start`,`grid-row-end`],"grid-column":[`grid-column-start`,`grid-column-end`],"grid-area":[`grid-row-start`,`grid-column-start`,`grid-row-end`,`grid-column-end`]},nn=e=>tn[e.toLowerCase()]??[e.toLowerCase()],rn=(e,t)=>{if(e.isEscaped)return{...e,isEscaped:!1};if(t===`\\`)return{...e,isEscaped:!0};if(e.quote!==``)return{...e,quote:e.quote===t?``:e.quote};if([`"`,`'`].includes(t))return{...e,quote:t};let n=[`(`,`[`,`{`].includes(t)?1:[`)`,`]`,`}`].includes(t)?-1:0;return{...e,depth:e.depth+n}},an=(e,t=`space`)=>{let n=[],r=``,i={depth:0,quote:``,isEscaped:!1};for(let a of e){let e=i.depth===0&&i.quote===``&&!i.isEscaped;i=rn(i,a),e&&(t===`space`?/\s/u.test(a):a===t)?((t!==`space`||r!==``)&&n.push(r.trim()),r=``):r+=a}return(t!==`space`||r!==``)&&n.push(r.trim()),n},on=e=>/^(?:--|-?[_a-z\u{80}-\u{FFFF}])[-\w\u{80}-\u{FFFF}]*$/iu.test(e)&&!/^(?:auto|span|initial|unset)$/iu.test(e)?e:`auto`,sn=(e,t,n)=>{let r=an(t,`/`),i=r[0]??t;if(e!==`grid-area`)return r[n]??on(i);let a=r[1]??on(i);return[i,a,r[2]??on(i),r[3]??on(a)][n]??t},cn=(e,t,n)=>{let r=an(n?e:t),i=r.filter(e=>!/^(?:auto-flow|dense)$/iu.test(e)).join(` `),a=`${n?`row`:`column`}${r.some(e=>/^dense$/iu.test(e))?` dense`:``}`;return[n?`none`:e,n?t:`none`,`none`,n&&i!==``?i:`auto`,!n&&i!==``?i:`auto`,a]},ln=(e,t,n)=>{if(/^(?:none|initial|unset)$/iu.test(t))return[`none`,`none`,`none`,`auto`,`auto`,`row`][n]??t;let r=an(t,`/`),i=r[0]??t,a=r[1];if(i===``||a===``||r.length>2)return t;let o=an(i).some(e=>e.toLowerCase()===`auto-flow`),s=a!==void 0&&an(a).some(e=>e.toLowerCase()===`auto-flow`);if(e===`grid`&&a!==void 0&&o!==s)return cn(i,a,o)[n]??t;if(o||s)return t;let c=/["']/u.test(i);return a===void 0&&!c?t:[c?t:i,a??`none`,c?i:`none`,`auto`,`auto`,`row`][n]??t},un=e=>{let t=[],n=`0%`;for(let r of e)/^(?:\d+(?:\.\d*)?|\.\d+)$/u.test(r)&&t.length<2?t.push(r):n=r;return[t[0]??`1`,t[1]??`1`,n]},dn=(e,t,n)=>{if(/(?:var|env)\(|^(?:inherit|revert(?:-layer)?)$/iu.test(t))return t;if(/^grid-(?:area|row|column)$/u.test(e))return sn(e,t,n);if(e===`grid-template`||e===`grid`)return ln(e,t,n);let r=an(t);return e===`text-wrap`?n===0?r.find(e=>/^(?:wrap|nowrap)$/u.test(e))??`wrap`:r.find(e=>/^(?:auto|balance|pretty|stable)$/u.test(e))??`auto`:e===`flex-flow`?n===0?r.find(e=>/^(?:row|column)(?:-reverse)?$/u.test(e))??`row`:r.find(e=>/^(?:nowrap|wrap|wrap-reverse)$/u.test(e))??`nowrap`:e===`flex`?t===`none`?[`0`,`0`,`auto`][n]??t:t===`initial`?[`0`,`1`,`auto`][n]??t:un(r)[n]??t:r[n]??(n===3?r[1]:void 0)??r[0]??t},fn=e=>e.additionalStyles===void 0?{}:Object.fromEntries(e.additionalStyles.declarations.filter(e=>e.enabled).map(e=>[e.property,e.value])),pn=e=>{let t=new Set(e.additionalStyles?.declarations.map(e=>e.property.toLowerCase()));return{...Object.fromEntries(Object.entries(e.styles).filter(([e])=>!t.has(e.toLowerCase()))),...fn(e)}},mn=e=>/!important\s*$/iu.test(String(e)),hn=(e,t)=>{let n=String(e).replace(/\s*!important\s*$/iu,``).trim();return t||n.includes(`(`)?n:n.toLowerCase()},gn=(e,t)=>{let n=null,r=!1,i=Object.entries(pn(e));for(let[e,a]of i){let i=nn(e),o=i.indexOf(t);if(o===-1)continue;let s=mn(a);if(r&&!s)continue;let c=hn(a,/^grid(?:-|$)/iu.test(e));n=i.length===1?c:dn(e.toLowerCase(),c,o),r=s}return n??void 0},_n=(e,t)=>{let n=new Set(Object.entries(pn(e)).filter(([,e])=>mn(e)).flatMap(([e])=>nn(e)));return Object.fromEntries(Object.entries(t).map(([e,t])=>[e,nn(e).some(e=>n.has(e))&&!mn(t)?`${Qt(e,t)} !important`:t]))},vn=(e,t)=>{let n=new Set,r=e;for(;r!==void 0&&!n.has(r.id);){n.add(r.id);let e=gn(r,`writing-mode`);if(e!==void 0&&e!==`inherit`&&e!==`unset`)return e;if(t===void 0)break;let i=t.relationships[r.id]?.parentId;if(i===void 0)break;r=t.nodes[i]}return`horizontal-tb`},yn=(e,t,n)=>{let r=/^(?:vertical|sideways)-/u.test(vn(e,n));return[t===`horizontal`?`width`:`height`,t===`vertical`===r?`inline-size`:`block-size`]},bn=e=>{if(e===void 0)return`freeform`;let t=gn(e,`display`);if(t!==void 0)return/^(?:(?:inline|block)\s+|inline-)?grid$/u.test(t)?`grid`:/^(?:(?:inline|block)\s+|inline-)?flex$/u.test(t)?`flex`:`freeform`;let n=e.layout?.container;return n===void 0?`freeform`:n.gridColumns!==void 0||n.gridAutoRepeat!==void 0?`grid`:`flex`},xn=(e,t)=>{if(e===void 0||bn(e)!==`flex`)return;let n=e.layout?.container?.direction??(t=>gn(e,t))(`flex-direction`)??`row`;if(!/^(?:row|column)(?:-reverse)?$/u.test(n))return;let r=/^(?:vertical|sideways)-/u.test(vn(e,t));return n.startsWith(`column`)===r?`horizontal`:`vertical`},Sn={unversioned:void 0,v1:1,v2:2,v3:3,v4:4,v5:5,v6:6},Cn={[Sn.v1]:`layout`,[Sn.v2]:`layout`,[Sn.v3]:`typography`,[Sn.v4]:`typography`,[Sn.v5]:`typography`,[Sn.v6]:`geometry`},wn=new Set([...Object.values(Sn),7]),Tn=e=>wn.has(e),En=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Dn=e=>{if(!En(e))return e;let t=Object.fromEntries(Object.entries(e).filter(([e])=>e!==`gridTrack`)),n=t.container;En(n)&&(t.container=Object.fromEntries(Object.entries(n).filter(([e])=>e!==`materialized`)));for(let e of[`horizontal`,`vertical`]){let n=t[e];En(n)&&n.mode===`hug`&&(t[e]=Object.fromEntries(Object.entries(n).filter(([e])=>e!==`basis`)))}return t},On=e=>{let t=e.version;if(!Tn(t))return null;if(t===7||!En(e.nodes))return e;let n=Object.entries(Cn).find(([e])=>Number(e)===t)?.[1];return n===`geometry`?{...e,version:7}:Object.values(e.nodes).some(e=>En(e)&&e.geometry!==void 0)?null:n===`typography`?{...e,version:7}:{...e,version:7,nodes:Object.fromEntries(Object.entries(e.nodes).map(([e,t])=>[e,En(t)&&t.layout!==void 0?{...t,layout:Dn(t.layout)}:t]))}},kn=n.number(),An=kn.nonnegative(),jn=n.string().min(1).max(200),Mn=n.string().regex(/^[MmLlHhVvCcSsQqTtAaZzEe\d\s.,+-]*$/u),Nn=n.strictObject({x:kn,y:kn,width:An,height:An}),Pn=n.strictObject({kind:n.literal(`path`),path:Mn.min(1),fillRule:n.enum([`nonzero`,`evenodd`]),viewBox:Nn.extend({width:An.positive(),height:An.positive()})}),Fn=n.enum([`union`,`subtract`,`intersect`,`exclude`]),In=n.strictObject({kind:n.literal(`boolean`),operation:Fn,operandIds:n.array(jn).min(1).refine(e=>new Set(e).size===e.length),result:n.strictObject({path:Mn,fillRule:n.literal(`nonzero`),isEmpty:n.boolean(),bounds:Nn,inputKey:n.string().regex(/^[a-f0-9]{16}$/u)}).refine(e=>e.isEmpty===(e.path===``))}),Ln=n.discriminatedUnion(`kind`,[Pn,n.strictObject({kind:n.literal(`mask`),maskId:jn}),In]),Rn=n.literal(7,{error:`This editor uses an unsupported document format. Update the editor before changing this canvas.`});n.object({signature:n.string().regex(/^[a-f0-9]{16}$/u),image:n.string().startsWith(`data:image/jpeg;base64,`),families:n.array(n.string().min(1)).min(1)});const S=n.object({x:n.number(),y:n.number(),width:n.number().nonnegative(),height:n.number().nonnegative()}),zn=n.enum([`start`,`center`,`end`,`stretch`,`scale`]),Bn=n.object({x:zn,y:zn}),Vn=n.enum([`source`,`generated`,`user`]),C=n.looseObject({id:n.string().min(1),label:n.string(),component:n.string().min(1),labelOrigin:Vn.optional(),visible:n.boolean().optional(),locked:n.boolean().optional(),constraints:Bn.optional(),styles:n.record(n.string(),n.union([n.string(),n.number()])),layout:Ue.optional(),responsive:n.never().optional(),appearance:ot.optional(),typography:ht.optional(),additionalStyles:Ct.optional(),geometry:Ln.optional(),props:n.record(n.string(),n.unknown()).optional(),box:S.optional()}),Hn=n.object({version:n.literal(7),nodes:n.record(n.string(),C),relationships:n.record(n.string(),n.object({parentId:n.string().min(1),sortKey:n.string().min(1)})),tombstones:n.record(n.string(),n.literal(!0)).default({})}),Un=n.record(n.string(),n.unknown()),Wn=n.preprocess(e=>{let t=Un.safeParse(e).data;return t===void 0?e:Object.keys(t).length===0?Gn():On(t)},Hn),Gn=()=>({version:7,nodes:{root:{id:`root`,label:`Canvas`,component:`root`,labelOrigin:`generated`,visible:!0,locked:!1,styles:{}}},relationships:{},tombstones:{}}),Kn=n.string().min(1),qn=n.object({code:n.enum([`asset-unavailable`,`content-omitted`,`cross-origin-frame`,`nodes-truncated`,`responsive-behavior-not-editable`,`style-degraded`,`unsupported-surface`]),message:n.string().min(1),temporaryId:Kn.optional()}),Jn=n.object({nodeCount:n.number().int().positive(),sourceNodeCount:n.number().int().positive().optional(),collapsedNodeCount:n.number().int().nonnegative().optional(),collapsedWrapperNodeCount:n.number().int().nonnegative().optional(),collapsedNeutralWrapperNodeCount:n.number().int().nonnegative().optional(),collapsedTransferredWrapperNodeCount:n.number().int().nonnegative().optional(),layoutContainerCount:n.number().int().nonnegative().optional(),removedLeafNodeCount:n.number().int().nonnegative().optional(),retainedSemanticOwnerNodeCount:n.number().int().nonnegative().optional(),truncatedNodeCount:n.number().int().nonnegative().optional(),addedLayoutNodeCount:n.number().int().nonnegative().optional(),issues:n.array(qn)}),Yn=C.omit({id:!0}).extend({temporaryId:Kn}),Xn=n.object({temporaryId:Kn,parentTemporaryId:Kn,sortKey:n.string().min(1)}),Zn=n.object({version:n.literal(1),rootTemporaryId:Kn,nodes:n.array(Yn).min(1),relationships:n.array(Xn),report:Jn.catch({nodeCount:0,issues:[]})}).transform(e=>({...e,report:{...e.report,nodeCount:e.nodes.length}})),Qn=n.object({canvasId:n.uuid(),documentFormatVersion:Rn,mutationId:n.uuid(),baseVersion:n.number().int().positive(),screenNodeId:n.string().min(1),draft:Zn}),$n=n.object({canvasId:n.uuid(),mutationId:n.uuid(),previousVersion:n.number().int().positive(),version:n.number().int().positive(),rootNodeId:n.string().min(1),idMap:n.record(Kn,n.string().min(1)),insertedNodeIds:n.array(n.string().min(1)),removedNodeIds:n.array(n.string().min(1)),boxes:n.record(n.string().min(1),S),affectedBounds:S}),er=[`queued`,`claimed`,`grant`,`navigate`,`document`,`sources`,`fonts`,`layout`,`target`,`capture`,`serialize`,`compile`,`commit`,`upload`,`complete`],tr=[`queued`,`running`,`succeeded`,`failed`,`cancelled`,`expired`],nr=[`VERSION_CHANGED`,`TARGET_NOT_FOUND`,`TARGET_INVALID`,`OUTPUT_TOO_LARGE`,`READINESS_TIMEOUT`,`SOURCE_FAILED`,`BROWSER_CRASH`,`CAPTURE_FAILED`,`CONVERSION_FAILED`,`PREPARATION_FAILED`,`UPLOAD_FAILED`,`WORKER_UNAVAILABLE`,`CANCELLED`,`EXPIRED`,`INTERNAL`],rr=[`ASSET_UNAVAILABLE`,`FONT_FALLBACK`,`SOURCE_FALLBACK`,`SCALE_REDUCED`],ir=n.number().int().positive(),ar=n.object({x:n.number(),y:n.number(),width:n.number().positive(),height:n.number().positive()}),w=n.discriminatedUnion(`kind`,[n.object({kind:n.literal(`content`)}),n.object({kind:n.literal(`page`),pageId:n.string().min(1)}),n.object({kind:n.literal(`node`),nodeId:n.string().min(1)}),n.object({kind:n.literal(`bounds`),bounds:ar})]),or=n.object({kind:n.literal(`recording`),recordingId:n.uuid(),atMs:n.number().int().nonnegative()}),sr=n.object({kind:n.literal(`recording`),recordingId:n.uuid(),requestedAtMs:n.number().int().nonnegative(),settledAtMs:n.number().int().nonnegative()}),cr=n.object({recordingId:n.uuid(),atMs:n.number().int().nonnegative(),screenId:n.uuid(),screenNodeId:n.string().min(1),viewport:n.object({width:n.number().int().positive(),height:n.number().int().positive()}),box:ar,version:n.number().int().positive(),alreadyPresent:n.boolean()}),lr=n.object({canvasId:n.uuid(),expectedVersion:n.number().int().positive().optional(),scope:n.strictObject({pageId:n.string().min(1).optional(),nodeIds:n.array(n.string().min(1))}).optional(),target:w.default({kind:`content`}),sourceState:or.optional(),scale:n.number().positive().default(1),maxOutputPixels:ir.optional(),format:n.literal(`png`).default(`png`)}).refine(e=>e.sourceState===void 0||e.target.kind===`node`,{message:`a source state requires a node render target`,path:[`sourceState`]}),ur=n.enum(er),dr=n.enum(tr),fr=n.enum(nr),pr=n.enum(rr),mr=n.object({code:pr,message:n.string().min(1).max(500),sourceId:n.string().min(1).nullable()}),hr=n.object({reason:fr,phase:ur,message:n.string().min(1).max(500),retryable:n.boolean(),sourceId:n.string().min(1).nullable()}),gr=n.object({phase:ur,durationMs:n.number().int().min(0)}),_r=n.object({canvasId:n.uuid(),requestedVersion:n.number().int().positive(),loadedVersion:n.number().int().positive(),target:w,sourceState:sr.optional(),snapshot:cr.optional(),bounds:ar,width:n.number().int().positive(),height:n.number().int().positive(),scale:n.number().positive(),contentType:n.literal(`image/png`),bytes:n.number().int().positive(),warnings:n.array(mr),timings:n.array(gr),expiresAt:n.iso.datetime()}),vr=n.object({id:n.uuid(),canvasId:n.uuid(),purpose:n.enum([`inspection`,`snapshot`,`thumbnail`]),phase:ur,requestedVersion:n.number().int().positive(),target:w,sourceState:or.optional(),scale:n.number().positive(),maxOutputPixels:ir.optional(),format:n.literal(`png`),attempt:n.number().int().min(0),createdAt:n.iso.datetime(),updatedAt:n.iso.datetime()}),yr=n.discriminatedUnion(`state`,[vr.extend({state:n.literal(`queued`),result:n.null(),failure:n.null()}),vr.extend({state:n.literal(`running`),result:n.null(),failure:n.null()}),vr.extend({state:n.literal(`succeeded`),phase:n.literal(`complete`),result:_r,failure:n.null()}),vr.extend({state:n.literal(`failed`),result:n.null(),failure:hr}),vr.extend({state:n.literal(`cancelled`),result:n.null(),failure:hr.extend({reason:n.literal(`CANCELLED`)})}),vr.extend({state:n.literal(`expired`),result:n.null(),failure:hr.extend({reason:n.literal(`EXPIRED`)})})]),br=n.object({job:yr,alreadyExists:n.boolean()}),xr=n.object({jobId:n.uuid()}),Sr=n.object({job:yr}),Cr=n.object({jobId:n.uuid()}),wr=n.object({job:yr}),Tr=n.object({jobId:n.uuid()}),Er=n.object({jobId:n.uuid(),download:Et}),Dr=n.strictObject({previewJobId:n.uuid(),scope:n.strictObject({pageId:n.string().min(1).optional(),nodeIds:n.array(n.string().min(1))}),placement:n.strictObject({kind:n.literal(`below-source`)})}),Or=n.object({canvasId:n.uuid(),recordingId:n.uuid(),atMs:n.number().int().nonnegative(),context:n.strictObject({expectedVersion:n.number().int().positive(),request:Dr}).optional()}),kr=n.object({job:yr,alreadyExists:n.boolean()}),Ar=n.object({rootIds:n.array(n.string().min(1))}),jr=n.discriminatedUnion(`kind`,[n.object({kind:n.literal(`adjacent`)}),n.object({kind:n.literal(`insert-children`),pageId:n.string().min(1).optional(),targetNodeId:n.string().min(1)}),n.object({kind:n.literal(`replace`),targetNodeId:n.string().min(1)})]),Mr=n.discriminatedUnion(`kind`,[n.object({kind:n.literal(`screen`),nodeId:n.string().min(1)}),n.object({kind:n.literal(`html`),html:n.string().min(1),label:n.string().min(1),idPrefix:n.string().min(1).regex(/^[\w-]+$/u).optional()})]),Nr=n.object({source:Mr,destination:jr,revisionPolicy:n.enum([`strict`,`rebase`]).optional()}).superRefine((e,t)=>{e.source.kind===`screen`&&e.destination.kind!==`adjacent`&&t.addIssue({code:`custom`,message:`stored screens convert beside their source`,path:[`destination`]}),e.source.kind===`html`&&e.destination.kind===`adjacent`&&t.addIssue({code:`custom`,message:`authored HTML requires an editable destination`,path:[`destination`]})}),Pr=n.discriminatedUnion(`kind`,[n.object({kind:n.literal(`screen`),nodeId:n.string().min(1)}),n.object({kind:n.literal(`html`),label:n.string().min(1)})]),Fr=n.object({id:n.uuid(),canvasId:n.uuid(),source:Pr,destination:jr,phase:ur,requestedVersion:n.number().int().positive(),attempt:n.number().int().nonnegative(),createdAt:n.iso.datetime(),updatedAt:n.iso.datetime()}),Ir=n.discriminatedUnion(`state`,[Fr.extend({state:n.literal(`queued`),result:n.null(),failure:n.null()}),Fr.extend({state:n.literal(`running`),result:n.null(),failure:n.null()}),Fr.extend({state:n.literal(`succeeded`),phase:n.literal(`complete`),result:$n.extend({report:Jn}),failure:n.null()}),Fr.extend({state:n.literal(`failed`),result:n.null(),failure:hr}),Fr.extend({state:n.literal(`cancelled`),result:n.null(),failure:hr.extend({reason:n.literal(`CANCELLED`)})}),Fr.extend({state:n.literal(`expired`),result:n.null(),failure:hr.extend({reason:n.literal(`EXPIRED`)})})]),Lr=Nr.and(n.object({canvasId:n.uuid(),expectedVersion:n.number().int().positive().optional(),mutationId:n.uuid().optional(),writeScope:Ar.optional(),scope:lr.shape.scope})).refine(e=>e.scope===void 0&&e.revisionPolicy!==`strict`||e.expectedVersion!==void 0,{message:`scoped or strict conversion requires an expected version`,path:[`expectedVersion`]}),Rr=n.object({job:Ir,alreadyExists:n.boolean()}),zr=n.object({jobId:n.uuid()}),Br=n.object({job:Ir}),Vr=n.object({jobId:n.uuid()}),Hr=n.object({job:Ir});n.discriminatedUnion(`state`,[n.object({state:n.literal(`loading`),jobId:n.uuid()}),n.object({state:n.literal(`ready`),jobId:n.uuid(),loadedVersion:n.number().int().positive(),draft:Zn}),n.object({state:n.literal(`failed`),jobId:n.uuid(),message:n.string().min(1)})]);const Ur=n.object({add:n.array(n.object({resourceId:n.string().min(1)}).catchall(n.unknown())),remove:n.array(n.string().min(1))}),T=n.union([n.string(),m]),E=n.union([b.shape.value,m]).nullable().optional(),Wr=n.strictObject({border:E,"border-block":E,"border-block-color":E,"border-block-style":E,"border-block-width":E,"border-block-end":E,"border-block-end-color":E,"border-block-end-style":E,"border-block-end-width":E,"border-block-start":E,"border-block-start-color":E,"border-block-start-style":E,"border-block-start-width":E,"border-bottom":E,"border-bottom-color":E,"border-bottom-style":E,"border-bottom-left-radius":T.optional(),"border-bottom-right-radius":T.optional(),"border-bottom-width":T.optional(),"border-color":n.string().nullable().optional(),"border-image":E,"border-image-source":E,"border-image-slice":E,"border-image-width":E,"border-image-outset":E,"border-image-repeat":E,"border-inline":E,"border-inline-color":E,"border-inline-style":E,"border-inline-width":E,"border-inline-end":E,"border-inline-end-color":E,"border-inline-end-style":E,"border-inline-end-width":E,"border-inline-start":E,"border-inline-start-color":E,"border-inline-start-style":E,"border-inline-start-width":E,"border-left":E,"border-left-color":E,"border-left-style":E,"border-left-width":T.optional(),"border-radius":T.nullable().optional(),"border-right":E,"border-right-color":E,"border-right-style":E,"border-right-width":T.optional(),"border-style":E,"border-top":E,"border-top-color":E,"border-top-style":E,"border-top-left-radius":T.optional(),"border-top-right-radius":T.optional(),"border-top-width":T.optional(),"border-width":T.nullable().optional(),outline:E,"outline-color":E,"outline-style":E,"outline-offset":T.optional(),"outline-width":T.optional()}),Gr=n.string().regex(/^(?:\d+(?:\.\d+)?|\.\d+)px$/u),Kr=n.string().regex(/^-?(?:\d+(?:\.\d+)?|\.\d+)px$/u),qr=b.shape.value.refine(e=>!/\burl\s*\(/iu.test(e),`invalid text colour`),Jr=n.union([y.shape.weight,n.enum([`normal`,`bold`,`bolder`,`lighter`]),n.string().regex(/^\d+(?:\.\d+)?$/u).refine(e=>y.shape.weight.safeParse(Number(e)).success)]),D={color:qr,"font-family":b.shape.value,"font-size":n.union([h,Gr]),"font-weight":Jr,"font-style":n.enum([`normal`,`italic`,`oblique`]),"letter-spacing":m,"line-height":n.union([n.number().positive(),n.string().regex(/^(?:\d+(?:\.\d+)?(?:px|em|rem|%)?|normal)$/u)]),"text-align":n.enum([`left`,`center`,`right`]),"white-space":n.enum([`normal`,`nowrap`,`pre`,`pre-wrap`,`pre-line`,`break-spaces`])},Yr=n.strictObject({color:D.color.optional(),"font-family":D[`font-family`].optional(),"font-size":D[`font-size`].optional(),"font-weight":D[`font-weight`].optional(),"font-style":D[`font-style`].optional(),"letter-spacing":D[`letter-spacing`].optional(),"line-height":D[`line-height`].optional(),"text-align":D[`text-align`].optional(),"white-space":D[`white-space`].optional()}),Xr=n.union([b.shape.value,m]).nullable().optional(),Zr=n.strictObject({"text-decoration":Xr,"text-decoration-line":Xr,"text-decoration-style":Xr,"text-decoration-color":Xr,"text-decoration-thickness":Xr,"text-underline-offset":Xr,"text-decoration-skip-ink":Xr,color:D.color.nullable().optional(),"font-family":D[`font-family`].nullable().optional(),"font-size":D[`font-size`].nullable().optional(),"font-weight":D[`font-weight`].nullable().optional(),"font-optical-sizing":n.enum([`auto`,`none`]).nullable().optional(),"font-variation-settings":b.shape.value.nullable().optional(),"font-feature-settings":b.shape.value.nullable().optional(),"text-wrap":b.shape.value.nullable().optional(),"text-wrap-mode":b.shape.value.nullable().optional(),"text-wrap-style":b.shape.value.nullable().optional(),"text-box":b.shape.value.nullable().optional(),"text-box-trim":b.shape.value.nullable().optional(),"text-box-edge":b.shape.value.nullable().optional(),"font-style":D[`font-style`].nullable().optional(),"font-stretch":n.union([n.enum([`normal`,`ultra-condensed`,`extra-condensed`,`condensed`,`semi-condensed`,`semi-expanded`,`expanded`,`extra-expanded`,`ultra-expanded`]),n.string().regex(/^\d+(?:\.\d+)?%$/u)]).nullable().optional(),"letter-spacing":n.union([m,Kr,n.literal(`normal`)]).nullable().optional(),"line-height":D[`line-height`].nullable().optional(),"text-align":D[`text-align`].nullable().optional(),"text-indent":n.union([m,Kr]).nullable().optional(),"white-space":D[`white-space`].nullable().optional(),"word-spacing":n.union([m,Kr,n.literal(`normal`)]).nullable().optional()}),Qr=b.shape.value,O=n.union([n.string(),m]),k=n.union([b.shape.value,m]).nullable().optional(),$r=Zr.extend(Wr.shape).extend({"align-content":k,"align-items":k,"align-self":k,"aspect-ratio":k,"block-size":k,bottom:k,"box-sizing":k,display:k,flex:k,"flex-basis":k,"flex-direction":k,"flex-grow":k,"flex-shrink":k,"flex-wrap":k,height:k,"inline-size":k,inset:k,"inset-block":k,"inset-block-end":k,"inset-block-start":k,"inset-inline":k,"inset-inline-end":k,"inset-inline-start":k,"justify-content":k,left:k,margin:k,"margin-block":k,"margin-block-end":k,"margin-block-start":k,"margin-inline":k,"margin-inline-end":k,"margin-inline-start":k,"max-block-size":k,"max-height":k,"max-inline-size":k,"max-width":k,"min-block-size":k,"min-height":k,"min-inline-size":k,"min-width":k,order:k,padding:k,"padding-block":k,"padding-block-end":k,"padding-block-start":k,"padding-inline":k,"padding-inline-end":k,"padding-inline-start":k,position:k,right:k,top:k,width:k,background:n.string().nullable().optional(),"background-color":n.string().nullable().optional(),"box-shadow":n.string().nullable().optional(),"column-gap":O.optional(),gap:O.optional(),"margin-bottom":O.optional(),"margin-left":O.optional(),"margin-right":O.optional(),"margin-top":O.optional(),opacity:n.union([n.string(),n.number()]).nullable().optional(),overflow:Qr.nullable().optional(),"overflow-x":Qr.nullable().optional(),"overflow-y":Qr.nullable().optional(),"padding-bottom":O.optional(),"padding-left":O.optional(),"padding-right":O.optional(),"padding-top":O.optional(),"row-gap":O.optional(),"stroke-width":O.optional()}),ei=n.union([$r.keyof(),b.shape.property.refine(e=>e.startsWith(`--`))]),ti=$r.catchall(k).refine(e=>Object.keys(e).every(e=>ei.safeParse(e).success)),ni=n.record(n.string(),n.unknown()),ri=n.number().int().positive(),ii=n.discriminatedUnion(`kind`,[n.object({kind:n.literal(`retain`),count:ri,attributes:ni.optional()}),n.object({kind:n.literal(`delete`),count:ri}),n.object({kind:n.literal(`insert`),text:n.string().min(1).refine(e=>e.isWellFormed()),attributes:ni.optional()})]),ai=n.object({baseLength:n.number().int().nonnegative(),representation:n.enum([`plain`,`rich`,`links`]).optional(),steps:n.array(ii),endAttributes:ni.optional(),properties:ni.refine(e=>[`text`,`richText`,`links`].every(t=>!Object.hasOwn(e,t))).optional()}).superRefine((e,t)=>{let n=0;for(let t of e.steps)t.kind!==`insert`&&(n+=t.count);n!==e.baseLength&&t.addIssue({code:`custom`,message:`text change must consume its exact base`})}),oi=n.object({actionId:n.string().min(1),baseVersion:n.number().int().nonnegative(),isActive:n.boolean()}),si=n.object({baseVersion:n.number().int().nonnegative(),after:n.array(n.string().min(1)),change:ai}),ci=n.object({actionId:n.string().min(1),baseVersion:n.number().int().nonnegative(),originalChange:ai,inverse:ai,history:oi.optional(),source:si.optional()}),li=n.object({op:n.literal(`editText`),nodeId:n.string().min(1),change:ai,actionId:n.string().min(1).optional(),revision:ci.optional(),history:oi.optional(),source:si.optional()}),ui=y.pick({family:!0,fallbackFamilies:!0,size:!0,weight:!0,style:!0,variations:!0,opticalSize:!0,features:!0,lineHeight:!0,letterSpacing:!0,transform:!0,decoration:!0,paragraphSpacing:!0,paragraphIndent:!0,listSpacing:!0,hangingList:!0,hangingPunctuation:!0,verticalTrim:!0,wrapStyle:!0}).strict(),di=ui.keyof().options,fi=n.object({id:n.string().min(1),name:n.string().trim().min(1),description:n.string().max(2e3),sortKey:n.string().min(1).optional(),sourceStyleId:n.string().min(1).optional(),sourceCanvasId:n.uuid().optional(),sourceRevision:n.number().int().positive().optional(),typography:ui.extend({listStyle:y.shape.listStyle}).transform(e=>(Reflect.deleteProperty(e,`listStyle`),e))}).strict().refine(e=>e.sourceCanvasId===void 0||e.sourceStyleId!==void 0,{message:`A source canvas belongs to a reference snapshot.`,path:[`sourceCanvasId`]}).refine(e=>e.sourceRevision===void 0||e.sourceCanvasId!==void 0&&e.sourceStyleId!==void 0,{message:`A published revision belongs to a source style and canvas.`,path:[`sourceRevision`]}),pi=n.object({id:fi.shape.id,position:n.enum([`normal`,`subscript`,`superscript`]).optional(),overrides:n.partialRecord(n.enum([`fontWeight`,`fontStyle`,`fontVariationSettings`,`fontOpticalSizing`,`textDecorationLine`,`textDecorationStyle`,`textDecorationColor`,`textDecorationThickness`,`textUnderlineOffset`,`textDecorationSkipInk`]),n.union([n.string().max(1e3),n.number()])).optional()}).strict(),mi=2e3,hi=n.object({title:n.string().trim().min(1).max(200)}).strict(),gi=n.array(fi.shape.id),_i=n.object({canvasId:n.uuid()}),vi=n.object({definition:fi.refine(e=>e.sourceStyleId===void 0),revision:n.number().int().positive(),fontFaces:n.array(n.record(n.string(),n.unknown()))}),yi=n.object({styles:n.array(vi).refine(e=>new Set(e.map(e=>e.definition.id)).size===e.length)}),bi=_i.extend({revision:n.number().int().positive(),documentVersion:n.number().int().positive(),description:n.string().max(mi),publishedAt:n.iso.datetime(),...yi.shape}),xi=_i.extend({mutationId:n.uuid(),expectedRevision:n.number().int().nonnegative(),documentVersion:n.number().int().positive(),publish:gi,remove:gi,description:n.string().trim().max(mi)}).strict().refine(e=>{let t=[...e.publish,...e.remove];return t.length>0&&new Set(t).size===t.length},{message:`Select each changed style once.`}),Si=n.object({canvasId:n.uuid(),title:n.string().max(200)}),Ci=n.object({search:n.string().trim().max(200).default(``),cursor:Si.nullable().default(null),limit:n.number().int().min(1).max(50).default(20)}),wi=n.object({canvasId:n.uuid(),title:n.string(),organisationId:n.uuid().nullable(),revision:n.number().int().positive(),styleCount:n.number().int().positive(),publishedAt:n.iso.datetime()}),Ti=n.object({items:n.array(wi).max(50),nextCursor:Si.nullable()}),Ei=n.object({parentId:n.string().min(1),sortKey:n.string().min(1)}),Di=n.object({op:n.literal(`insertConvertedSubtree`),destination:jr,sourceNodeId:n.string().min(1).optional(),rootNodeId:n.string().min(1),nodes:n.record(n.string().min(1),C),relationships:n.record(n.string().min(1),Ei)}),A=n.string().min(1),Oi=n.string().min(1),ki=S.extend({width:n.number().positive(),height:n.number().positive()}),Ai=n.object({parentId:A,afterId:A.optional()}),ji=n.object({parentId:A,sortKey:Oi}),Mi=n.object({op:n.literal(`setStyles`),nodeId:A,styles:ti,clear:n.array(ei).min(1).max(Object.keys(ti.shape).length).refine(e=>new Set(e).size===e.length).optional()}).refine(e=>(e.clear??[]).every(t=>!Object.hasOwn(e.styles,t))),Ni=n.discriminatedUnion(`op`,[Di,n.object({op:n.literal(`insertNode`),node:C,parentage:ji}),Ai.extend({op:n.literal(`insertText`),nodeId:A,label:n.string().default(`Text`),text:n.string(),box:ki,styles:Yr.default({})}),Ai.extend({op:n.literal(`insertPrototype`),nodeId:A,label:n.string().default(`Prototype`),prototypeId:n.uuid(),deploymentId:n.uuid(),box:ki,canvasPageId:A.optional()}),n.object({op:n.literal(`setPrototypeDeployment`),nodeId:A,prototypeId:n.uuid(),deploymentId:n.uuid()}),li,n.object({op:n.literal(`setText`),nodeId:A,text:n.string()}),n.object({op:n.literal(`setBox`),nodeId:A,box:n.union([S,n.literal(`default`)])}),n.object({op:n.literal(`setLabel`),nodeId:A,label:n.string().trim().min(1),labelOrigin:Vn.nullable().optional()}),n.object({op:n.literal(`setContainerKind`),nodeId:A,component:n.enum([`frame`,`group`])}),n.object({op:n.literal(`setVisibility`),nodeId:A,visible:n.boolean().nullable()}),n.object({op:n.literal(`setLocked`),nodeId:A,locked:n.boolean().nullable()}),n.object({op:n.literal(`setConstraints`),nodeId:A,constraints:Bn}),Mi,n.object({op:n.literal(`setAppearance`),nodeId:A,appearance:lt}),n.object({op:n.literal(`setLayout`),nodeId:A,layout:n.union([Ue,n.literal(`default`)])}),n.object({op:n.literal(`patchTypography`),nodeId:A,typography:_t}),n.object({op:n.literal(`setTypography`),nodeId:A,typography:n.union([ht,n.literal(`default`)])}),n.object({op:n.literal(`patchAdditionalStyles`),nodeId:A,additionalStyles:Tt}),n.object({op:n.literal(`setAdditionalStyles`),nodeId:A,additionalStyles:n.union([Ct,n.literal(`default`)])}),n.object({op:n.literal(`setTextStyleLibrary`),nodeId:n.literal(`root`),sourceCanvasId:n.uuid(),library:hi.nullable()}),n.object({op:n.literal(`patchFontLibrary`),nodeId:n.literal(`root`),fonts:Ur}),n.object({op:n.literal(`setTextStyle`),nodeId:n.literal(`root`),styleId:fi.shape.id,textStyle:fi.nullable(),changedTextNodeIds:n.array(A).optional()}).refine(e=>e.textStyle===null||e.textStyle.id===e.styleId,`text style identity must match`),n.object({op:n.literal(`setGeometry`),nodeId:A,geometry:n.union([Ln,n.literal(`default`)])}),n.object({op:n.literal(`setProps`),nodeId:A,props:n.union([n.record(n.string(),n.unknown()),n.literal(`default`)])}),n.object({op:n.literal(`setParentage`),nodeId:A,parentage:ji}),Ai.extend({op:n.literal(`move`),nodeId:A}),n.object({op:n.literal(`remove`),nodeId:A,removedText:n.record(A,C.pick({props:!0})).optional()})]),Pi=$n.extend({operation:Di,next:n.array(n.string().min(1))}),Fi=n.record(n.string(),n.unknown()),Ii=n.object({canvasId:n.uuid(),afterVersion:n.number().int().positive().optional()}),Li=n.object({screenId:n.uuid(),route:n.string().nullable(),title:n.string().nullable(),viewport:n.object({width:n.number().int().positive(),height:n.number().int().positive()}),atMs:n.number().int().min(0).nullable(),sourceRecordingId:n.uuid().nullable(),assetBundle:n.object({assetBundleId:n.uuid(),sourceUrl:n.string(),assets:n.array(n.object({url:n.string(),contentType:n.string().max(200),path:n.string().startsWith(`/v1/recording-assets/`)})),missingAssetCount:n.number().int().min(0)}).nullable(),download:Et.nullable()}),Ri=n.object({mutationId:n.uuid(),previousVersion:n.number().int().positive(),version:n.number().int().positive(),operations:n.array(Ni)}),zi=n.object({mutations:n.array(Ri).optional(),version:n.number().int().min(1),document:Fi,screens:n.array(Li)}),Bi=n.object({canvasId:n.uuid(),baseVersion:n.number().int().min(1),document:Fi.refine(e=>Hn.safeParse(e).success,`A save requires a valid current-format canvas document.`),screenIds:n.array(n.uuid())}),Vi=n.discriminatedUnion(`outcome`,[n.object({outcome:n.literal(`saved`),version:n.number().int().min(1)}),n.object({outcome:n.literal(`conflict`),version:n.number().int().min(1),document:Fi})]),Hi=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Ui=(e,t,n)=>{if(!Hi(e)||typeof e.data!=`string`)return e;let r=n(e.data,t);return r===e.data?e:{...e,data:r}},Wi=(e,t)=>{if(!Hi(e)||!Array.isArray(e.sources))return e;let n=e.sources,r=n.map(n=>Ui(n,e,t));return r.every((e,t)=>e===n[t])?e:{...e,sources:r}},Gi=(e,t)=>{if(!Array.isArray(e?.fontFaces))return e;let n=e.fontFaces,r=n.map(e=>Wi(e,t));return r.every((e,t)=>e===n[t])?e:{...e,fontFaces:r}},Ki=new Set(`alignItems.backgroundColor.borderBottom.borderBottomLeftRadius.borderBottomRightRadius.borderLeft.borderRight.borderTop.borderTopLeftRadius.borderTopRightRadius.boxShadow.boxSizing.color.columnGap.display.flexDirection.fontFamily.fontFeatureSettings.fontOpticalSizing.fontSize.fontStretch.fontStyle.fontVariant.fontVariantCaps.fontVariantLigatures.fontVariantNumeric.fontVariantPosition.fontKerning.fontVariationSettings.fontWeight.justifyContent.letterSpacing.lineHeight.marginBottom.marginLeft.marginRight.marginTop.opacity.paddingBottom.paddingLeft.paddingRight.paddingTop.rowGap.textDecorationColor.textDecorationLine.textDecorationSkipInk.textDecorationStyle.textDecorationThickness.textShadow.textTransform.textUnderlineOffset.verticalAlign.whiteSpace.WebkitTextStrokeColor.WebkitTextStrokeWidth.--canvas-text-stroke-alignment`.split(`.`)),qi=Qe.array().optional(),Ji=mt.pick({paragraphSpacing:!0,paragraphIndent:!0,listSpacing:!0,wrapStyle:!0}).extend({hangingPunctuation:y.shape.hangingPunctuation,verticalTrim:y.shape.verticalTrim}).strip(),Yi=new Set([`http:`,`https:`,`mailto:`,`tel:`]),Xi=e=>{let t=e.trim();if(t===``)return!1;try{let e=new URL(t,`https://enhance.invalid/`).protocol;return Yi.has(e)}catch{return!1}},Zi=e=>typeof e==`string`&&Xi(e)?e:void 0,Qi=e=>{if(typeof e!=`object`||!e||Array.isArray(e))return null;let t=Object.entries(e);return t.some(([e,t])=>!Ki.has(e)||typeof t!=`string`&&typeof t!=`number`)?null:Object.fromEntries(t)},$i=e=>{let t=Reflect.get(e,`sourcePath`);return{...Object.fromEntries(Object.entries(e).filter(([e])=>![`text`,`href`,`sourcePath`,`styles`,`fills`,`paragraph`,`paragraphSpacing`,`paragraphIndent`,`listSpacing`,`hangingPunctuation`,`verticalTrim`,`wrapStyle`,`soft`,`textStyle`].includes(e))),...typeof t==`string`&&{sourcePath:t}}},ea=e=>{let t=[],n=e.toReversed().map(e=>({value:e,target:t})),r=new Set;for(;n.length>0;){let e=n.pop();if(e===void 0)continue;if(`done`in e){r.delete(e.done);continue}let t=[],i=na(e.value,t);if(i===null)return null;if(e.target.push(i),i.kind!==`span`)continue;let a=e.value;if(typeof a!=`object`||!a||r.has(a))return null;r.add(a),n.push({done:a});let o=Reflect.get(a,`children`);if(!Array.isArray(o))return null;let s=o;for(let e of s.toReversed())n.push({value:e,target:t})}return t},ta=e=>{let t=Reflect.get(e,`soft`);return t!==void 0&&t!==!0?null:{...$i(e),kind:`break`,...t===!0&&{soft:t}}},na=(e,t)=>{if(typeof e!=`object`||!e)return null;let n=Reflect.get(e,`kind`),r=$i(e);if(n===`break`)return ta(e);if(n===`text`){let t=Reflect.get(e,`text`);return typeof t==`string`?{...r,kind:n,text:t}:null}if(n!==`span`)return null;let i=Reflect.get(e,`children`),a=Qi(Reflect.get(e,`styles`)),o=qi.safeParse(Reflect.get(e,`fills`)),s=mt.optional().safeParse(Reflect.get(e,`paragraph`)),c=Ji.safeParse(e),l=pi.optional().safeParse(Reflect.get(e,`textStyle`));if(a===null||!o.success||!s.success||!c.success||!l.success||!Array.isArray(i))return null;let ee=Zi(Reflect.get(e,`href`));return{...r,kind:n,styles:a,children:t,...l.data!==void 0&&{textStyle:l.data},...o.data!==void 0&&{fills:o.data},...s.data!==void 0&&{paragraph:s.data},...Object.fromEntries(Object.entries(c.data).filter(([,e])=>e!==void 0)),...ee!==void 0&&{href:ee}}},ra=e=>e.kind===`text`?e.text:e.soft===!0?`\u2028`:`
3
+ `,ia=e=>{let t=e.toReversed(),n=[];for(;t.length>0;){let e=t.pop();if(e===void 0)break;if(e.kind===`span`)for(let n of e.children.toReversed())t.push(n);else n.push(ra(e))}return n.join(``)},aa=e=>{let t=e.props;if(t===void 0||!Array.isArray(t.richText))return[];let n=ea(t.richText);if(n===null)return[];let r=t.text;return ia(n)===r?n:[]},oa=n.object({start:n.number().int().nonnegative(),end:n.number().int().positive(),href:n.url().refine(e=>[`http:`,`https:`].includes(new URL(e).protocol))}),sa=n.object({text:n.string(),links:n.array(oa).optional()}),ca=(e,t)=>{let n=e.start-t.start;return n===0?e.end-t.end:n},la=e=>sa.safeParse(e.props).data?.text??null,ua=e=>{let t=sa.safeParse(e.props).data;if(t===void 0)return[];let n=t.links;if(n===void 0)return[];let r=n.filter(({start:e,end:n})=>e<n&&n<=t.text.length).toSorted(ca),i=[];for(let e of r)(i.at(-1)?.end??0)<=e.start&&i.push(e);return i},da=n.enum([`position`,`layout`,`clip`,`cornerRadius`,`blending`,`typography`,`nativeControl`,`textDecoration`,`fill`,`outline`,`textStroke`,`border`,`outerShadow`,`innerShadow`,`filters`,`additionalStyles`,`vector`,`export`,`source`]),fa=n.object({id:n.string().min(1),label:n.string().max(500),kind:n.string().min(1).max(100),parentId:n.string().min(1).nullable(),childCount:n.number().int().min(0),box:ar.nullable(),propertySections:n.array(da)}),pa=n.object({canvasId:n.uuid()}),ma=n.object({canvasId:n.uuid(),openUrl:n.url(),title:n.string().min(1),version:n.number().int().positive(),nodeCount:n.number().int().min(0),rootChildCount:n.number().int().min(0),bounds:ar.nullable(),kinds:n.record(n.string(),n.number().int().min(0)),next:n.array(n.string().min(1))}),ha=n.object({canvasId:n.uuid()}),ga=n.object({canvasId:n.uuid(),version:n.number().int().positive(),nodes:n.array(fa)}),_a=n.object({canvasId:n.uuid(),nodeId:n.string().min(1)}),va=n.object({canvasId:n.uuid(),version:n.number().int().positive(),node:fa.extend({styles:n.record(n.string(),n.union([n.string(),n.number()])),layout:Ue.optional(),appearance:ot.optional(),typography:ht.optional(),additionalStyles:Ct.optional(),props:n.record(n.string(),n.unknown()),children:n.array(n.string().min(1))}),next:n.array(n.string().min(1))}),ya=[[`alignSelf`,`align-self`],[`order`,`order`],[`flexGrow`,`flex-grow`],[`flexShrink`,`flex-shrink`],[`flexBasis`,`flex-basis`],[`aspectRatio`,`aspect-ratio`]],ba=[[`direction`,`flex-direction`],[`wrap`,`flex-wrap`],[`alignItems`,`align-items`],[`alignContent`,`align-content`],[`justifyContent`,`justify-content`],[`rowGap`,`row-gap`],[`columnGap`,`column-gap`]],xa=[`top`,`right`,`bottom`,`left`],Sa=(e,t,n)=>{let r={...e};for(let e of xa)n.has(`${t}-${e}`)&&Reflect.deleteProperty(r,e);return r},Ca=(e,t)=>{let n=new Set([...t].flatMap(e=>nn(e))),r={...e};for(let[e,t]of ya)n.has(t)&&Reflect.deleteProperty(r,e);if(r.margin!==void 0&&(r.margin=Sa(r.margin,`margin`,n)),r.container===void 0)return r;let i={...r.container};(n.has(`row-gap`)||n.has(`column-gap`))&&i.gap!==void 0&&(i.rowGap??=i.gap,i.columnGap??=i.gap,Reflect.deleteProperty(i,`gap`));for(let[e,t]of ba)n.has(t)&&Reflect.deleteProperty(i,e);return i.padding!==void 0&&(i.padding=Sa(i.padding,`padding`,n)),n.has(`grid-template-columns`)&&(Reflect.deleteProperty(i,`gridColumns`),Reflect.deleteProperty(i,`gridAutoRepeat`)),r.container=i,r},wa=(e,t,n)=>{if(e===void 0||e.mode===`fixed`)return e;let r={...e};for(let e of[`min`,`max`])t.every(t=>!n.has(`${e}-${t}`))||(Reflect.deleteProperty(r,e),Reflect.deleteProperty(r,`${e}Parent`));return r},Ta=(e,t,n)=>{let r=new Set([...t].flatMap(e=>nn(e))),i=Ca(e,r);if([`overflow`,`overflow-x`,`overflow-y`].some(e=>r.has(e))&&Reflect.deleteProperty(i,`clipContent`),r.has(`position`)&&Reflect.deleteProperty(i,`position`),r.has(`transform`))for(let e of[`rotation`,`flipHorizontal`,`flipVertical`])Reflect.deleteProperty(i,e);[`inset`,`left`,`right`,`top`,`bottom`].some(e=>r.has(e))&&Reflect.deleteProperty(i,`flowOffset`);for(let e of[`horizontal`,`vertical`]){let t=n[e].some(e=>r.has(e))?void 0:wa(i[e],n[e],r);t===void 0?Reflect.deleteProperty(i,e):i[e]=t}return i},Ea=C.shape.id,Da=S.extend({width:n.number().positive(),height:n.number().positive()}),Oa=n.record(Ea,Ea),ka=n.strictObject({fingerprint:n.string().regex(/^[a-f0-9]{64}$/u),revisionPolicy:n.enum([`strict`,`rebase`]),copiedNodeIds:Oa.optional()}),Aa=n.object({canvasId:n.uuid(),mutationId:n.uuid(),documentFormatVersion:Rn,baseVersion:n.number().int().positive(),operations:n.array(Ni).min(1),requestContext:ka.optional(),writeScope:Ar.optional()}),ja=n.object({canvasId:n.uuid(),mutationId:n.uuid(),previousVersion:n.number().int().positive(),version:n.number().int().positive(),operations:n.array(Ni),insertedNodeIds:n.array(Ea),changedNodeIds:n.array(Ea),removedNodeIds:n.array(Ea),boxes:n.record(Ea,S),affectedBounds:Da.nullable(),copiedNodeIds:Oa.optional(),next:n.array(n.string().min(1))}),Ma=n.strictObject({canvasId:n.uuid(),mutationId:n.uuid(),fingerprint:ka.shape.fingerprint}),Na=n.discriminatedUnion(`state`,[n.strictObject({state:n.literal(`not-found`)}),n.strictObject({state:n.literal(`committed`),result:ja})]),Pa={nodes:1e3,fields:20,id:200,label:500,value:1e3},Fa=n.object({available:n.boolean(),omittedNodes:n.number().int().nonnegative(),nodes:n.array(n.object({nodeId:n.string().min(1),label:n.string().max(Pa.label),kind:n.enum([`inserted`,`removed`,`changed`,`unchanged`,`unavailable`]),omittedFields:n.number().int().nonnegative(),fields:n.array(n.object({label:n.string().max(Pa.id),before:n.string().max(Pa.value).nullable(),after:n.string().max(Pa.value).nullable(),truncated:n.boolean()})).max(Pa.fields)})).max(Pa.nodes)}),Ia=`page`,La=[`position`,`layout`,`cornerRadius`,`blending`,`fill`,`outline`,`border`,`outerShadow`,`innerShadow`,`filters`,`additionalStyles`,`export`],Ra=[`position`,`layout`,`clip`,...La.filter(e=>e!==`position`&&e!==`layout`)],za=[...La,`vector`],Ba=Object.fromEntries([{objectKind:`prototype`,label:`Prototype`,category:`import`,capabilities:{canSelect:!0,canContainChildren:!1,canEditProperties:!1,commentAnchor:`node`},capture:{preservesHtmlCssAssets:!0},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`reflow`,preservesAspect:!1,canLockAspectRatio:!0},propertySections:[`position`,`layout`]},{objectKind:`root`,label:`Canvas`,category:`container`,capabilities:{canSelect:!1,canContainChildren:!0,canEditProperties:!1},selectionBehavior:{hitTarget:`children`},propertySections:[]},{objectKind:Ia,label:`Page`,category:`container`,capabilities:{canSelect:!1,canContainChildren:!1,canEditProperties:!1},selectionBehavior:{hitTarget:`children`},propertySections:[]},{objectKind:`screen`,label:`Screen`,category:`import`,capabilities:{canSelect:!0,canContainChildren:!1,canEditProperties:!1,commentAnchor:`screen`},capture:{preservesHtmlCssAssets:!0},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`reflow`,preservesAspect:!1,canLockAspectRatio:!0},propertySections:[`position`,`layout`,`source`]},{objectKind:`frame`,label:`Frame`,category:`container`,capabilities:{canSelect:!0,canContainChildren:!0,canEditProperties:!0,commentAnchor:`node`},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`reflow`,preservesAspect:!1,canLockAspectRatio:!0},propertySections:Ra},{objectKind:`group`,label:`Group`,category:`container`,capabilities:{canSelect:!0,canContainChildren:!0,canEditProperties:!0,commentAnchor:`node`},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`reflow`,preservesAspect:!1,canLockAspectRatio:!0},propertySections:[`position`,`layout`,`blending`,`additionalStyles`,`export`]},{objectKind:`rectangle`,label:`Rectangle`,category:`primitive`,capabilities:{canSelect:!0,canContainChildren:!1,canEditProperties:!0,commentAnchor:`node`},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`reflow`,preservesAspect:!1,canLockAspectRatio:!0},propertySections:La},{objectKind:`image`,label:`Image`,category:`media`,capabilities:{canSelect:!0,canContainChildren:!1,canEditProperties:!0,commentAnchor:`node`},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`scale`,preservesAspect:!0,canLockAspectRatio:!0},propertySections:La},{objectKind:`svg`,label:`SVG`,category:`primitive`,capabilities:{canSelect:!0,canContainChildren:!1,canEditProperties:!0,commentAnchor:`node`},capture:{preservesVectorData:!0},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`scale`,preservesAspect:!0,canLockAspectRatio:!0},propertySections:za},{objectKind:`recording`,label:`Recording`,category:`media`,capabilities:{canSelect:!0,canContainChildren:!1,canEditProperties:!1},capture:{preservesAssets:!0},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`scale`,preservesAspect:!0,canLockAspectRatio:!0},propertySections:[]},{objectKind:`text`,label:`Text`,category:`primitive`,capabilities:{canSelect:!0,canContainChildren:!1,canEditProperties:!0,commentAnchor:`node`},selectionBehavior:{hitTarget:`text`},resizeBehavior:{mode:`reflow`,preservesAspect:!1,canLockAspectRatio:!1},propertySections:[`position`,`layout`,`typography`,`nativeControl`,`textDecoration`,`textStroke`,`blending`,`fill`,`outerShadow`,`filters`,`additionalStyles`,`export`]}].map(e=>[e.objectKind,e])),Va=e=>Ba[e]??null,Ha=e=>Va(e)?.propertySections??[],j=C.shape.id,Ua=n.array(j).min(1),Wa=n.strictObject({x:n.number(),y:n.number()}),Ga=n.strictObject({width:n.number().positive().optional(),height:n.number().positive().optional()}).refine(e=>e.width!==void 0||e.height!==void 0,{message:`Specify width, height, or both.`}),Ka=n.discriminatedUnion(`kind`,[n.strictObject({kind:n.literal(`position`),nodeId:j,parentPosition:Wa}),n.strictObject({kind:n.literal(`resize`),nodeId:j,size:Ga}),n.strictObject({kind:n.literal(`relative-position`),nodeId:j,referenceNodeId:j,side:n.enum([`above`,`below`,`left`,`right`]),gap:n.number().nonnegative(),align:n.enum([`start`,`center`,`end`])}),n.strictObject({kind:n.literal(`move`),nodeIds:Ua,targetNodeId:j,position:n.enum([`before`,`inside`,`after`])}),n.strictObject({kind:n.literal(`group`),nodeIds:Ua,label:n.string().min(1).optional()}),n.strictObject({kind:n.literal(`ungroup`),nodeIds:Ua}),n.strictObject({kind:n.literal(`label`),nodeId:j,label:n.string().min(1)}),n.strictObject({kind:n.literal(`visibility`),nodeId:j,visible:n.boolean()}),n.strictObject({kind:n.literal(`lock`),nodeId:j,locked:n.boolean()})]),qa=n.strictObject({kind:n.literal(`arrange`),changes:n.array(Ka).min(1)}),Ja=n.strictObject({kind:n.literal(`duplicate`),nodeIds:Ua,destination:n.discriminatedUnion(`kind`,[n.strictObject({kind:n.literal(`native`)}),n.strictObject({kind:n.literal(`inside`),parentId:j})])}),Ya=n.discriminatedUnion(`kind`,[n.strictObject({kind:n.literal(`compile-screens`),sources:n.array(n.strictObject({screenId:n.uuid(),captureId:n.uuid(),label:n.string().min(1)})).min(1)}),qa,Ja,n.strictObject({kind:n.literal(`compile-html`),contextOperations:n.array(Ni).refine(e=>e.every(e=>`nodeId`in e&&![`remove`,`move`,`setParentage`,`insertText`,`insertPrototype`,`insertNode`,`insertConvertedSubtree`].includes(e.op)),`Compilation context may update retained fields only.`),fragments:n.array(n.strictObject({id:j,parentNodeId:j,html:n.string().min(1)})).min(1).refine(e=>new Set(e.map(e=>e.id)).size===e.length,`HTML fragment ids must be unique.`)})]),Xa=n.strictObject({pageId:j.optional(),nodeIds:n.array(j)}),Za=n.strictObject({request:Ya,scope:Xa}),Qa=n.strictObject({operations:n.array(Ni),idMap:n.record(j,j),rootNodeIds:n.array(j)}),$a=Qa.extend({compilations:n.array(n.strictObject({id:j,draft:Zn})).optional()});n.discriminatedUnion(`state`,[n.object({state:n.literal(`loading`),jobId:n.uuid()}),n.object({state:n.literal(`ready`),jobId:n.uuid(),loadedVersion:n.number().int().positive(),plan:$a}),n.object({state:n.literal(`failed`),jobId:n.uuid(),message:n.string().min(1)})]);const eo=n.object({id:n.uuid(),canvasId:n.uuid(),requestedVersion:n.number().int().positive(),request:Ya,scope:Xa,phase:ur,attempt:n.number().int().nonnegative(),createdAt:n.iso.datetime(),updatedAt:n.iso.datetime()}),to=n.discriminatedUnion(`state`,[eo.extend({state:n.enum([`queued`,`running`]),result:n.null(),failure:n.null()}),eo.extend({state:n.literal(`succeeded`),phase:n.literal(`complete`),result:Qa.extend({loadedVersion:n.number().int().positive()}),failure:n.null()}),eo.extend({state:n.enum([`failed`,`cancelled`,`expired`]),result:n.null(),failure:hr})]),no=n.strictObject({canvasId:n.uuid(),expectedVersion:n.number().int().positive(),request:Ya,scope:Xa}),ro=n.object({job:to,alreadyExists:n.boolean()}),io=n.object({jobId:n.uuid()}),ao=n.object({job:to}),oo=`x-enhance-agent-client`,so=n.string().trim().min(1).max(80).regex(/^[\w .+/-]+$/u),co=n.strictObject({path:n.enum([`local_mcp`,`hosted_mcp`,`direct_cli`]),name:so.optional(),version:so.optional()}),lo=co.pick({path:!0}).strip(),uo=n.strictObject({agent_client:n.enum([`claude_code`,`codex`,`cursor`,`unknown`]),connection_path:co.shape.path,identity_source:n.enum([`mcp_client_info`,`documented_cli_fallback`,`unavailable`]),auth_method:n.enum([`personal_agent_token`,`mcp_oauth`]),agent_client_version:so.optional()}),fo=e=>{let t=co.safeParse(e);if(t.success)return t.data;let n=lo.safeParse(e);return{path:n.success?n.data.path:`direct_cli`}},po=`enhance3.canvas.v1`,mo=16384,ho=n.enum([`blue`,`violet`,`green`,`amber`,`magenta`,`teal`,`red`,`orange`]),go=n.object({kind:n.literal(`person`),connectionId:n.uuid(),personId:n.uuid(),displayName:n.string().min(1).max(100),initials:n.string().min(1).max(8),colour:ho}),_o=n.object({kind:n.literal(`guest`),connectionId:n.uuid(),displayName:n.string().min(1).max(100),initials:n.string().min(1).max(8),colour:ho}),vo=n.discriminatedUnion(`kind`,[go,_o]),yo=n.object({kind:n.literal(`agent`),personId:n.uuid(),displayName:n.string().min(1).max(100),initials:n.string().min(1).max(8),tokenLabel:n.string().min(1).max(100),agentAttribution:uo.optional(),colour:ho}),bo=n.discriminatedUnion(`kind`,[go.omit({connectionId:!0}),yo]),xo=n.object({x:n.number(),y:n.number()}),So=S.extend({width:n.number().positive(),height:n.number().positive()}),Co=n.object({count:n.number().int().positive(),bounds:So.nullable()}),wo=n.object({kind:n.enum([`drag`,`resize`]),baseVersion:n.number().int().positive(),boxes:n.record(n.string().min(1),So).refine(e=>Object.keys(e).length<=100&&new TextEncoder().encode(JSON.stringify(e)).byteLength<=16384),summary:Co.optional()}),To=n.object({cursor:xo.nullable().optional(),input:n.enum([`pointer`,`touch`,`keyboard`]).optional(),focused:n.boolean().optional(),selectedNodeIds:n.array(n.string().min(1)).max(100).refine(e=>new TextEncoder().encode(JSON.stringify(e)).byteLength<=mo).optional(),selectionSummary:Co.nullable().optional(),visibleWorldBox:So.optional(),gesture:wo.nullable().optional(),cursorChat:n.string().max(140).nullable().optional()}).refine(e=>Object.keys(e).length>0,`presence patch cannot be empty`),Eo=n.object({actor:vo,seq:n.number().int().nonnegative(),cursor:xo.nullable(),input:n.enum([`pointer`,`touch`,`keyboard`]),focused:n.boolean(),selectedNodeIds:n.array(n.string().min(1)).max(100).refine(e=>new TextEncoder().encode(JSON.stringify(e)).byteLength<=mo),selectionSummary:Co.nullable().optional(),visibleWorldBox:So.nullable(),gesture:wo.nullable(),cursorChat:n.string().max(140).nullable().default(null),expiresAt:n.iso.datetime()}),Do=n.enum([`reading`,`writing`,`creating`,`deleting`,`rendering`]),Oo=n.object({activityId:n.uuid(),canvasId:n.uuid(),actor:yo,phase:Do,nodeIds:n.array(n.string().min(1)).max(100),bounds:So.nullable(),expiresAt:n.iso.datetime()}),ko=n.object({canvasId:n.uuid(),protocols:n.array(n.literal(po)).min(1).max(1)}),Ao=n.object({endpoint:n.url(),ticket:n.string().min(1).max(4096),protocol:n.literal(po),expiresAt:n.iso.datetime()}),jo=n.object({canvasId:n.uuid(),phase:Do,nodeIds:n.array(n.string().min(1)).max(100).default([]),bounds:So.nullable().default(null)}),Mo=n.object({activityId:n.uuid(),expiresAt:n.iso.datetime(),renewAfterMs:n.number().int().positive()}),No=jo.extend({activityId:n.uuid()}),Po=n.object({canvasId:n.uuid(),activityId:n.uuid()}),Fo=n.object({ended:n.literal(!0)}),Io={v:n.literal(1),seq:n.number().int().nonnegative()};n.discriminatedUnion(`type`,[n.object({...Io,type:n.literal(`room.snapshot`),payload:n.object({connectionId:n.uuid(),peers:n.array(Eo),activities:n.array(Oo),documentVersion:n.number().int().positive()})}),n.object({...Io,type:n.literal(`presence.patch`),payload:Eo}),n.object({...Io,type:n.literal(`presence.left`),payload:n.object({connectionId:n.uuid()})}),n.object({...Io,type:n.literal(`agent.activity`),payload:n.object({activityId:n.uuid(),activity:Oo.nullable()})}),n.object({...Io,type:n.literal(`document.committed`),payload:n.object({mutationId:n.uuid(),actor:bo,previousVersion:n.number().int().positive(),version:n.number().int().positive(),operations:n.array(Ni).min(1)})}),n.object({...Io,type:n.literal(`sync.required`),payload:n.object({version:n.number().int().positive(),reason:n.enum([`gap`,`relay`,`replace`,`history-restored`])})}),n.object({...Io,type:n.literal(`room.ping`),payload:n.object({pingId:n.uuid(),sentAt:n.iso.datetime()})}),n.object({...Io,type:n.literal(`room.error`),payload:n.object({code:n.enum([`auth`,`permission`,`protocol`,`payload`,`rate`,`unavailable`]),message:n.string().min(1).max(200)})})]),n.discriminatedUnion(`type`,[n.object({v:n.literal(1),type:n.literal(`presence.patch`),seq:n.number().int().nonnegative(),payload:To}),n.object({v:n.literal(1),type:n.literal(`selection.chunk`),seq:n.number().int().nonnegative(),payload:n.object({transferId:n.uuid(),offset:n.number().int().nonnegative(),total:n.number().int().positive(),nodeIds:n.array(n.string().min(1)).min(1).max(1e3)})}),n.object({v:n.literal(1),type:n.literal(`selection.unavailable`),seq:n.number().int().nonnegative(),payload:n.object({count:n.number().int().positive()})}),n.object({v:n.literal(1),type:n.literal(`room.pong`),seq:n.number().int().nonnegative(),payload:n.object({pingId:n.uuid()})})]).refine(e=>e.type!==`selection.chunk`||e.payload.offset+e.payload.nodeIds.length<=e.payload.total&&new TextEncoder().encode(JSON.stringify(e)).byteLength<=49152);const Lo=n.uuid(),Ro=C.shape.id,zo=n.array(Ro),Bo=/^\/c\/([^/]+)\/?$/iu,Vo=e=>{let t=e.trim(),n=Lo.safeParse(t);if(n.success)return{ok:!0,value:{canvasId:n.data,nodeIds:[]}};if(!URL.canParse(t))return{ok:!1,reason:`reference`};let r=new URL(t);try{decodeURIComponent(r.search),decodeURIComponent(r.hash)}catch{return{ok:!1,reason:`reference`}}let i=Lo.safeParse(Bo.exec(r.pathname)?.[1]);if(!i.success||![`http:`,`https:`].includes(r.protocol))return{ok:!1,reason:`reference`};let a=r.searchParams.getAll(`page`),o=a[0];if(a.length>1||o!==void 0&&!Ro.safeParse(o).success)return{ok:!1,reason:`page`};let s=new URLSearchParams(r.hash.slice(1));if(s.has(`recording`)||s.has(`version`)||r.searchParams.has(`version`))return{ok:!1,reason:`unsupported`};let c=s.getAll(`prototype`),l=s.getAll(`selection`);if(c.length>1||c.length>0&&l.length>0)return{ok:!1,reason:`selection`};let ee=zo.safeParse(c.length>0?c:l);return ee.success?{ok:!0,value:{canvasId:i.data,...o!==void 0&&{pageId:o},nodeIds:[...new Set(ee.data)]}}:{ok:!1,reason:`selection`}},Ho=(e,t)=>{if(!URL.canParse(e)||![`https:`,`http:`].includes(new URL(e).protocol))return{ok:!1,reason:`reference`};let n=new URL(`/c/${encodeURIComponent(t.canvasId)}`,new URL(e).origin);t.pageId!==void 0&&n.searchParams.set(`page`,t.pageId);let r=new URLSearchParams,i=new Set(t.nodeIds);for(let e of i)r.append(`selection`,e);n.hash=r.toString();let a=Vo(n.href);return a.ok?{ok:!0,url:n.href}:a},Uo=`root`,Wo=`canvas-page-default`,Go=e=>Object.entries(e.relationships).filter(([,e])=>e.parentId===Uo).toSorted(([e,t],[n,r])=>t.sortKey===r.sortKey?e.localeCompare(n):t.sortKey<r.sortKey?-1:1).map(([e])=>e),Ko=e=>{let t=Go(e).filter(t=>e.nodes[t]?.component===Ia);return t.length>0?t:[Wo]},qo=(e,t)=>{let n=new Set,r=t;for(;r!==void 0&&!n.has(r);){n.add(r);let t=e.nodes[r];if(t===void 0||t.component===`page`)return null;let i=e.relationships[r]?.parentId;if(i===Uo){let e=t.props?.canvasPageId;return typeof e==`string`?e:Wo}r=i}return null},Jo=(e,t)=>{let n=new Map;for(let[t,r]of Object.entries(e.relationships)){let e=n.get(r.parentId)??[];e.push(t),n.set(r.parentId,e)}let r=new Set,i=[...t];for(;i.length>0;){let t=i.pop();t===void 0||r.has(t)||e.nodes[t]===void 0||(r.add(t),i.push(...n.get(t)??[]))}return r},Yo=(e,t)=>{let n=Ko(t);if(e.pageId!==void 0&&!n.includes(e.pageId))return{ok:!1,reason:`page`};let r=e.nodeIds.map(e=>qo(t,e));if(r.some(e=>e===null||!n.includes(e)))return{ok:!1,reason:`selection`};if(e.pageId!==void 0&&r.some(t=>t!==e.pageId))return{ok:!1,reason:`inconsistent-page`};if(new Set(r).size>1)return{ok:!1,reason:`mixed-pages`};let i=e.pageId??r[0]??null,a=e.nodeIds.length>0?[...new Set(e.nodeIds)]:Go(t).filter(e=>{let n=qo(t,e);return n!==null&&(i===null||n===i)});return{ok:!0,pageId:i,rootNodeIds:a,nodeIds:Jo(t,a)}},Xo=n.object({jobId:n.uuid()}),Zo=n.object({jobId:n.uuid(),canvasId:n.uuid(),requestedVersion:n.number().int().positive(),target:w,sourceState:or.optional()}),Qo=n.discriminatedUnion(`purpose`,[Zo.extend({purpose:n.literal(`preparation`),preparation:Za,screens:n.array(Li).optional(),sourceState:n.undefined().optional(),scale:n.literal(1),format:n.literal(`json`)}),Zo.extend({purpose:n.enum([`inspection`,`snapshot`,`thumbnail`]),scale:n.number().positive(),maxOutputPixels:ir.optional(),format:n.literal(`png`)}),Zo.extend({purpose:n.literal(`conversion`),target:n.object({kind:n.literal(`node`),nodeId:n.string().min(1)}),sourceState:n.undefined().optional(),conversion:Nr,scale:n.literal(1),format:n.literal(`json`)})]);n.object({jobId:n.uuid()}),n.object({jobId:n.uuid()});const $o=n.object({jobId:n.uuid(),canvasId:n.uuid(),requestedVersion:n.number().int().positive(),grantToken:n.string().startsWith(`rgr_`).min(40).max(100),grantCookieName:n.string().min(1).max(100),renderUrl:n.url(),releaseIdentity:n.string().min(1).max(100)});n.discriminatedUnion(`purpose`,[$o.extend({purpose:n.literal(`preparation`),target:w,preparation:Za,sourceState:n.undefined().optional(),scale:n.literal(1)}),$o.extend({purpose:n.enum([`inspection`,`snapshot`,`thumbnail`]),target:w,sourceState:or.optional(),scale:n.number().positive(),maxOutputPixels:ir.optional(),outputKey:n.string().min(1).max(500)}),$o.extend({purpose:n.literal(`conversion`),target:n.object({kind:n.literal(`node`),nodeId:n.string().min(1).max(200)}),sourceState:n.undefined().optional(),conversion:Nr,scale:n.literal(1)})]),n.object({jobId:n.uuid(),loadedVersion:n.number().int().positive(),bounds:ar,width:n.number().int().positive(),height:n.number().int().positive(),scale:n.number().positive(),bytes:n.number().int().positive(),storageKey:n.string().min(1).max(500),warnings:n.array(mr),timings:n.array(gr),sourceState:sr.optional(),snapshot:n.object({artifactBytes:n.number().int().positive(),artifactStorageKey:n.string().min(1).max(500),route:n.string().optional(),title:n.string().optional(),viewport:n.object({width:n.number().int().positive(),height:n.number().int().positive()})}).optional()}),n.object({accepted:n.literal(!0)}),n.object({jobId:n.uuid(),loadedVersion:n.number().int().positive(),draft:Zn}),n.object({accepted:n.literal(!0)}),n.object({recordingId:n.uuid(),requestedAtMs:n.number().int().nonnegative(),settledAtMs:n.number().int().nonnegative(),artifact:n.string().min(1),route:n.string().optional(),title:n.string().optional(),viewport:n.object({width:n.number().int().positive(),height:n.number().int().positive()})}),n.object({jobId:n.uuid(),failure:hr}),n.object({accepted:n.literal(!0),willRetry:n.boolean()}),n.object({workerId:n.string().regex(/^[\w.-]+$/u).min(1).max(100),releaseIdentity:n.string().min(1).max(100),timestamp:n.coerce.number().int().nonnegative(),nonce:n.uuid(),mac:n.base64().min(32).max(200)});const es=n.object({total:n.number().int().nonnegative(),loading:n.number().int().nonnegative(),unavailable:n.number().int().nonnegative()}),ts=n.object({jobId:n.uuid(),canvasId:n.uuid().nullable(),requestedVersion:n.number().int().positive().nullable(),loadedVersion:n.number().int().positive().nullable(),phase:ur.exclude([`queued`,`claimed`,`capture`,`upload`,`complete`]),sources:es,warnings:n.array(mr),timings:n.array(gr),sourceState:sr.optional()}),ns=n.object({selector:n.string().min(1).max(500),contentSelector:n.string().min(1).max(500).optional(),bounds:ar,width:n.number().int().positive(),height:n.number().int().positive(),scale:n.number().positive()});n.discriminatedUnion(`state`,[ts.extend({state:n.literal(`loading`),capture:n.null(),failure:n.null()}),ts.extend({state:n.literal(`ready`),phase:n.literal(`target`),canvasId:n.uuid(),requestedVersion:n.number().int().positive(),loadedVersion:n.number().int().positive(),capture:ns,failure:n.null()}),ts.extend({state:n.literal(`failed`),failure:n.object({reason:fr,message:n.string().min(1).max(500),sourceId:n.string().min(1).max(200).nullable()}),capture:n.null()})]),n.object({jobId:n.uuid(),loadedVersion:n.number().int().positive(),plan:$a});const rs=n.string().min(1),is=n.object({canvasId:n.uuid()}),as=n.object({canvasId:n.uuid(),status:n.enum([`selected`,`none`,`offline`,`stale`,`updating`,`unsupported`]),documentVersion:n.number().int().positive(),selectionRevision:n.number().int().positive().nullable(),selectionChangedAt:n.iso.datetime().nullable(),selectedNodeIds:n.array(rs),missingNodeIds:n.array(rs),nodes:n.array(fa),contextRootId:rs.nullable(),visibleWorldBox:ar.nullable(),next:n.array(n.string().min(1)).max(12)}),os=n.discriminatedUnion(`kind`,[n.object({kind:n.literal(`recording`),recordingId:n.string()})]),ss=n.object({html:n.string().optional(),viewport:n.object({width:n.number(),height:n.number()}),atMs:n.number(),screenId:n.string().nullable().default(null),provenance:os.optional()}),cs=n.object({provenance:os.optional(),report:Jn.optional()}),ls=n.object({recordingId:n.string()}),us=n.object({prototypeId:n.uuid(),deploymentId:n.uuid()}),ds=`$structure`,fs=e=>{let t=[];for(let[n,r]of Object.entries(e))[`kind`,`children`,`text`,`soft`].includes(n)||(n===`styles`||n===`paragraph`?typeof r==`object`&&r&&t.push(...Object.entries(r).map(([e,t])=>[`${n}.${e}`,t])):t.push([n,r]));return Object.fromEntries(t)},ps=e=>Object.fromEntries(Object.entries(e).filter(([e])=>e!==`text`&&e!==`children`)),ms=(e,t)=>{let n={...e,...t};return t.listStyle===`none`&&(Reflect.deleteProperty(n,`listLevel`),Reflect.deleteProperty(n,`listStart`)),n},hs=(e,t,n)=>{let r=e.listStyle??t;if(r!==`bulleted`&&r!==`numbered`)return e;let i=e.listLevel??1,a=Math.max(1,i+n);if(a===i)return e;let o={...e,listLevel:a};return Reflect.deleteProperty(o,`listStart`),o},gs=(e,t)=>{let n=0;return e.map(e=>{let r=n;if(n+=ia(e.children).length,r<=t.start||r>t.end||e.paragraph?.listStart===void 0)return e;let i={...e.paragraph};return Reflect.deleteProperty(i,`listStart`),{...e,paragraph:i}})},_s=e=>{let t=[],n=0;for(let{index:r}of e.matchAll(/\n/gu))t.push({start:n,end:r+1,contentEnd:r}),n=r+1;return t.push({start:n,end:e.length,contentEnd:e.length}),t},vs=(e,t)=>{let n=Math.min(t.anchor,t.focus),r=Math.max(t.anchor,t.focus);return n===r?n>=e.start&&n<=e.contentEnd:n<e.end&&r>e.start},ys=e=>{let t=e.toReversed().map(e=>({node:e})),n=[],r=0;for(;t.length>0;){let e=t.pop();if(e===void 0)break;if(`leave`in e){e.leave.end=r;continue}let i=e.node;if(i.kind!==`span`){r+=i.kind===`text`?i.text.length:1;continue}if(i.paragraph!==void 0){let e={start:r,end:r,formatting:i.paragraph};n.push(e),t.push({leave:e})}for(let e of i.children.toReversed())t.push({node:e})}return n},bs=(e,t)=>{let n=e.filter(e=>e.start===e.end?e.start===t:e.start<=t&&t<e.end);if(n.length===0){let n=e.at(-1);return n?.end===t?n.formatting:{}}let r={};for(let e of n)r={...r,...e.formatting};return r},xs=e=>e.flatMap(e=>{if(e.kind!==`span`)return[e];let t=xs(e.children);if(e.paragraph===void 0)return[{...e,children:t}];let n={...e};return Reflect.deleteProperty(n,`paragraph`),Object.keys(n).filter(e=>![`kind`,`children`,`styles`].includes(e)).length===0&&Object.keys(e.styles).length===0?t:[{...n,children:t}]}),Ss=e=>e.some(e=>e.kind===`span`&&(e.paragraph!==void 0||e.paragraphSpacing!==void 0||e.paragraphIndent!==void 0||e.listSpacing!==void 0||e.wrapStyle!==void 0||Ss(e.children))),Cs=e=>{let t=[[]];for(let n of e){let e=n.kind===`span`?Cs(n.children).map(e=>e.length===0&&n.children.length>0?[]:[{...n,children:e}]):n.kind===`break`?n.soft===!0?[[n]]:[[n],[]]:n.text.split(`
4
+ `).map((e,t,r)=>{let i=t<r.length-1?`${e}\n`:e;return i===``&&n.text!==``?[]:[{...n,text:i}]});t.at(-1)?.push(...e[0]??[]),t.push(...e.slice(1))}return t},ws=(e,t)=>{let n={cursor:0};return t.map(({start:t})=>{let r=(n.active??[]).filter(e=>e.end>t);for(n.active=r;n.cursor<e.length;){let i=e[n.cursor];if(i===void 0||i.start>t)break;(i.end>t||i.start===t)&&r.push(i),n.cursor+=1}if(r.length===0){let n=e.at(-1);return n?.end===t?n.formatting:{}}let i={};for(let e of r)i={...i,...e.formatting};return i})},Ts=e=>{let t=ia(e),n=ys(e),r=Cs(xs(e)),i=_s(t),a=ws(n,i);return i.map((e,t)=>({kind:`span`,paragraph:a[t]??{},styles:{},children:r[t]??[]}))},Es=(e,t,n)=>{let r=_s(ia(e));return Ts(e).map((e,i)=>{let a=r[i];return a===void 0?e:vs(a,t)?{...e,paragraph:n(e.paragraph??{})}:e})},Ds=(e,t)=>bs(ys(e),t),Os=(e,t,n)=>{if(!Ss(e))return t;let r=ia(t),i=ia(e),a=n.replaces&&n.end===i.length&&n.start<i.length,o=r===``||!a&&r.endsWith(`
5
+ `)?[{kind:`span`,styles:{},children:[],paragraph:Ds(e,r===``?n.start:i.length)}]:[],s=Ts([...t,...o]);return n.replaces?gs(s,{start:n.start,end:r.length-i.length+n.end}):s},ks={color:`inherit`,textDecorationLine:`underline`,textDecorationThickness:`0.08em`,textUnderlineOffset:`0.14em`},As=new Set(di),js=new Set(Object.entries(vt).flatMap(([e,t])=>t.some(e=>As.has(e))?[e.replaceAll(/-([a-z])/gu,(e,t)=>t.toUpperCase())]:[])),Ms=(e,t,n=!1,r={})=>{if(e===null||r.paragraphSpacing!==void 0||r.paragraphIndent!==void 0||r.listSpacing!==void 0||r.hangingPunctuation!==void 0||r.verticalTrim!==void 0||r.wrapStyle!==void 0)return null;if(n){let n=pi.safeParse({...e,...r.position!==void 0&&{position:r.position},overrides:{...e.overrides,...Object.fromEntries(Object.entries(t).filter(([e])=>(e!==`fontFeatureSettings`||r.position===void 0)&&js.has(e)))}});return n.success?n.data:null}return Object.keys(t).some(e=>js.has(e))?null:e},Ns=e=>({...e.paragraphSpacing!==void 0&&{paragraphSpacing:e.paragraphSpacing},...e.paragraphIndent!==void 0&&{paragraphIndent:e.paragraphIndent},...e.listSpacing!==void 0&&{listSpacing:e.listSpacing},...e.hangingPunctuation!==void 0&&{hangingPunctuation:e.hangingPunctuation},...e.verticalTrim!==void 0&&{verticalTrim:e.verticalTrim},...e.wrapStyle!==void 0&&{wrapStyle:e.wrapStyle}}),Ps=(e,t)=>e.flatMap(e=>{if(e.kind!==`span`)return[e];let n={...e,styles:{...e.styles},children:Ps(e.children,t)};if(t.type===`format`){let e=Object.keys(Ns(t));for(let t of e)Reflect.deleteProperty(n,t);let r=Ms(n.textStyle??null,t.styles,t.shouldOverrideTextStyle,{paragraphSpacing:t.paragraphSpacing,paragraphIndent:t.paragraphIndent,listSpacing:t.listSpacing,hangingPunctuation:t.hangingPunctuation,verticalTrim:t.verticalTrim,wrapStyle:t.wrapStyle,position:t.textStylePosition});r===null?Reflect.deleteProperty(n,`textStyle`):n.textStyle=r}else if(t.type===`text-style`)return Reflect.deleteProperty(n,`textStyle`),[n];if(t.type===`link`)Reflect.deleteProperty(n,`href`);else if(t.type===`paint`)Reflect.deleteProperty(n,`fills`),Reflect.deleteProperty(n.styles,`color`);else for(let e of Object.keys(t.styles))Reflect.deleteProperty(n.styles,e);let r=Object.keys(n).filter(e=>![`kind`,`children`,`styles`].includes(e));return Object.keys(n.styles).length===0&&r.length===0?n.children:[n]}),Fs=(e,t)=>e.map(e=>e.kind===`span`?e.children.some(e=>e.kind===`span`)?{...e,children:Fs(e.children,t)}:{...e,styles:{...e.styles,...t}}:{kind:`span`,styles:t,children:[e]}),Is=(e,t)=>{let n=Ps(e,t);if(t.type===`text-style`)return t.binding===null?n:[{kind:`span`,styles:{},textStyle:t.binding,children:n}];if(t.type===`format`){let e=t.styles.textDecorationLine===void 0?[{kind:`span`,styles:t.styles,children:n}]:Fs(n,t.styles),r=Ns(t);return Object.keys(r).length===0?e:[{kind:`span`,styles:{},...r,children:e}]}return t.type===`link`?t.href===null?n:[{kind:`span`,styles:ks,href:t.href,children:n}]:t.fills===null?n:[{kind:`span`,styles:{},fills:t.fills,children:n}]},Ls={},Rs=()=>Ls.current??=new Intl.Segmenter(void 0,{granularity:`grapheme`}),zs=e=>new Set([0,e.length,...Array.from(Rs().segment(e),({index:e})=>e)]),Bs=(e,t)=>{let n=zs(e);return t.start<=t.end&&n.has(t.start)&&n.has(t.end)},Vs=e=>e.kind===`text`?e.text.length:e.kind===`break`?1:ia(e.children).length,Hs=(e,t,n)=>{let r=0;return e.flatMap(e=>{let i=Vs(e),a=Math.max(0,t-r),o=Math.min(i,n-r);return r+=i,a>=o?[]:a===0&&o===i?[e]:e.kind===`span`?[{...e,children:Hs(e.children,a,o)}]:e.kind===`text`?[{...e,text:e.text.slice(a,o)}]:[e]})},Us=e=>JSON.stringify(Object.fromEntries(Object.entries(e).filter(([e])=>![`children`,`text`].includes(e)))),Ws=e=>e.kind===`span`&&e.paragraph!==void 0&&ia(e.children).endsWith(`
6
+ `),Gs=e=>{let t=[];for(let n of e){let e=t.at(-1);if(e!==void 0&&!Ws(e)&&Us(e)===Us(n)){if(e.kind===`text`&&n.kind===`text`){t[t.length-1]={...e,text:e.text+n.text};continue}if(e.kind===`span`&&n.kind===`span`){t[t.length-1]={...e,children:Gs([...e.children,...n.children])};continue}}t.push(n)}return t},Ks=(e,t)=>e.split(/([\n\u{2028}])/u).flatMap(e=>e===`
7
+ `||e===`\u2028`?[{kind:`break`,...e===`\u2028`&&{soft:!0}}]:e===``?[]:[{...t?.kind===`text`&&t,kind:`text`,text:e}]),qs=(e,t,n,r=!1)=>{if(n===``&&!r)return[];let i=0;for(let a of e){let o=Vs(a);if(t<i+o||a===e.at(-1))return a.kind===`span`?[{...a,children:qs(a.children,t-i,n,r)}]:Ks(n,a);i+=o}return Ks(n)},Js=(e,t,n)=>{let r=t.length-e.length+(n?.end??0);if(n!==void 0&&Bs(e,n)&&Bs(t,{start:n.start,end:r})&&e.slice(0,n.start)===t.slice(0,n.start)&&e.slice(n.end)===t.slice(r))return n;let i=zs(e),a=zs(t),o=0,s=Math.min(e.length,t.length);for(;o<s&&e[o]===t[o];)o+=1;for(;!i.has(o)||!a.has(o);)--o;let c=0;for(;c<Math.min(e.length-o,t.length-o)&&e[e.length-c-1]===t[t.length-c-1];)c+=1;for(;!i.has(e.length-c)||!a.has(t.length-c);)--c;return{start:o,end:e.length-c}},Ys=e=>{let t=aa(e);if(t.length>0)return t;let n=la(e)??``,r=[],i=0;for(let t of ua(e))i<t.start&&r.push({kind:`text`,text:n.slice(i,t.start)}),r.push({kind:`span`,href:t.href,styles:ks,children:[{kind:`text`,text:n.slice(t.start,t.end)}]}),i=t.end;return i<n.length&&r.push({kind:`text`,text:n.slice(i)}),r},Xs=(e,t)=>e.some(e=>e.kind===`span`&&(t.paragraphSpacing!==void 0&&e.paragraphSpacing!==void 0||t.paragraphIndent!==void 0&&e.paragraphIndent!==void 0||t.listSpacing!==void 0&&e.listSpacing!==void 0||t.wrapStyle!==void 0&&e.wrapStyle!==void 0||Xs(e.children,t))),Zs=(e,t,n)=>{let r=Ys(e),i=ia(r),a={hasChange:!1},o=t=>{let r=n.type===`paragraph`?ms(t,n.formatting):hs(t,e.typography?.listStyle,n.delta);return a.hasChange||=JSON.stringify(t)!==JSON.stringify(r),r},s=n.type===`paragraph`&&n.wholeLayer===!0?Ts(r).map(e=>({...e,paragraph:o(e.paragraph??{})})):Es(r,{anchor:t.start,focus:t.end},o);if(n.type===`paragraph`&&Xs(r,n.formatting)){let e=_s(i);s=s.map((r,i)=>{let o=e[i];if(n.wholeLayer!==!0&&(o===void 0||!vs(o,{anchor:t.start,focus:t.end})))return r;let s=Is(r.children,{type:`format`,styles:{},paragraphSpacing:n.formatting.paragraphSpacing,paragraphIndent:n.formatting.paragraphIndent,listSpacing:n.formatting.listSpacing,wrapStyle:n.formatting.wrapStyle});return a.hasChange||=JSON.stringify(s)!==JSON.stringify(r.children),{...r,children:s}})}if(!a.hasChange||JSON.stringify(s)===JSON.stringify(r))return e.props??{};let c={...e.props,text:i,richText:s};return Reflect.deleteProperty(c,`links`),c},Qs=(e,t,n)=>{let r=t.start===0&&t.end===ia(e).length,i=qs(e,t.start,n.text,r);return n.text===``?i:((Object.keys(n.styles??{}).length>0||n.paragraphSpacing!==void 0||n.paragraphIndent!==void 0||n.listSpacing!==void 0||n.hangingPunctuation!==void 0||n.wrapStyle!==void 0||n.verticalTrim!==void 0)&&(i=Is(i,{type:`format`,styles:n.styles??{},paragraphSpacing:n.paragraphSpacing,paragraphIndent:n.paragraphIndent,listSpacing:n.listSpacing,hangingPunctuation:n.hangingPunctuation,verticalTrim:n.verticalTrim,wrapStyle:n.wrapStyle})),n.fills!==void 0&&(i=Is(i,{type:`paint`,fills:n.fills})),n.textStyle!==void 0&&(i=Is(i,{type:`text-style`,binding:n.textStyle})),i)},$s=(e,t,n)=>{let r=la(e)??``;if(!Bs(r,t))return e.props??{};if(n.type===`paragraph`||n.type===`list-indent`)return Zs(e,t,n);if(n.type!==`replace`&&t.start===t.end&&(r!==``||n.type!==`text-style`&&n.type!==`format`)||n.type===`link`&&n.href!==null&&!Xi(n.href))return e.props??{};let i=Ys(e),a=n.type===`replace`?Qs(i,t,n):Is(r===``?i:Hs(i,t.start,t.end),n),o=Os(i,Gs([...Hs(i,0,t.start),...a,...Hs(i,t.end,r.length)]),{...t,replaces:n.type===`replace`}),s={...e.props,text:ia(o)};return Reflect.deleteProperty(s,`links`),Reflect.deleteProperty(s,`richText`),(n.type!==`replace`||n.fills!==void 0||n.textStyle!==void 0||n.paragraphSpacing!==void 0||n.paragraphIndent!==void 0||n.listSpacing!==void 0||n.hangingPunctuation!==void 0||n.wrapStyle!==void 0||n.verticalTrim!==void 0||Object.keys(n.styles??{}).length>0||aa(e).length>0||r===``&&Array.isArray(e.props?.richText)&&e.props.richText.length===0||ua(e).length>0)&&(s.richText=o),s},ec=(e,t,n,r)=>{let i=la(e)??``;if(i===t)return e.props??{};let{range:a,...o}=r??{},s=Js(i,t,a);return $s(e,s,{type:`replace`,styles:n,...o,text:t.slice(s.start,t.length-i.length+s.end)})},tc=e=>Array.isArray(e.props?.richText)?`rich`:Array.isArray(e.props?.links)?`links`:`plain`,nc=(e,t)=>typeof t==`object`&&t&&!Array.isArray(t)?Object.fromEntries(Object.entries(t).toSorted(([e],[t])=>e.localeCompare(t,`en`))):t,rc=(e,t)=>e===t||JSON.stringify(e,nc)===JSON.stringify(t,nc),ic=(e,t)=>Object.fromEntries([...new Set([...Object.keys(e),...Object.keys(t)])].flatMap(n=>rc(e[n],t[n])?[]:[[n,t[n]??null]])),ac=e=>e.kind===`text`?e.text:e.soft===!0?`\u2028`:`
8
+ `,oc=e=>{let t=[],n={},r=[],i=[{nodes:e,index:0,attributes:{}}];for(;i.length>0;){let e=i.at(-1);if(e===void 0)break;let a=e.nodes[e.index++];if(a===void 0){i.pop(),r.pop();continue}let o={...e.attributes,...fs({...a})},s=ps(a);if(a.kind===`span`)r.push(s),a.children.length===0&&(n={...o,[ds]:[...r]}),i.push({nodes:a.children,index:0,attributes:o});else{let e={...o,[ds]:[...r,s]},i=ac(a);i!==``&&t.push({text:i,attributes:e}),n=e}}return{chunks:t,endAttributes:n}},sc=e=>{let t=Ys(e),n=oc(t),r=Ds(t,(la(e)??``).length);return{chunks:n.chunks.flatMap((e,t,n)=>{let r=n[t-1];if(r!==void 0&&rc(r.attributes,e.attributes))return[];let i=e.text;for(let r=t+1;r<n.length;r+=1){let t=n[r];if(t===void 0||!rc(e.attributes,t.attributes))break;i+=t.text}return[{...e,text:i}]}),endAttributes:{...n.endAttributes,...Object.fromEntries(Object.entries(r).map(([e,t])=>[`paragraph.${e}`,t]))}}},cc=(e,t,n)=>{let r=0,i=[];for(let a of e){let e=Math.max(0,t-r),o=Math.min(a.text.length,n-r);if(e<o&&i.push({...a,text:a.text.slice(e,o)}),r+=a.text.length,r>=n)break}return i},lc=(e,t)=>{if((t.kind===`insert`?t.text.length:t.count)===0)return;let n=e,r=n.at(-1);if(r?.kind===`delete`&&t.kind===`delete`){n[n.length-1]={kind:`delete`,count:r.count+t.count};return}if(r?.kind===`retain`&&t.kind===`retain`&&JSON.stringify(r.attributes??{})===JSON.stringify(t.attributes??{})){n[n.length-1]={...t,count:r.count+t.count};return}if(r?.kind===`insert`&&t.kind===`insert`&&JSON.stringify(r.attributes??{})===JSON.stringify(t.attributes??{})){n[n.length-1]={...t,text:r.text+t.text};return}n.push(t)},uc=(e,t,n)=>{let r=0;for(let i of t){let t=cc(n,r,r+i.text.length);for(let n of t){let t=ic(i.attributes,n.attributes);lc(e,{kind:`retain`,count:n.text.length,...Object.keys(t).length>0&&{attributes:t}})}r+=i.text.length}},dc=(e,t,n)=>{let r=la(e)??``,i=la(t)??``,a=sc(e),o=sc(t),s=r===i?{start:r.length,end:r.length}:Js(r,i,n),c=i.length-r.length+s.end,l=[];uc(l,cc(a.chunks,0,s.start),cc(o.chunks,0,s.start)),lc(l,{kind:`delete`,count:s.end-s.start});for(let e of cc(o.chunks,s.start,c))lc(l,{kind:`insert`,...e});uc(l,cc(a.chunks,s.end,r.length),cc(o.chunks,c,i.length));let ee=ic(a.endAttributes,o.endAttributes),te=e=>Object.fromEntries(Object.entries(e.props??{}).filter(([e])=>![`text`,`richText`,`links`].includes(e))),ne=ic(te(e),te(t)),re=tc(t);return{...re!==tc(e)&&{representation:re},...Object.keys(ne).length>0&&{properties:ne},baseLength:r.length,steps:l,...Object.keys(ee).length>0&&{endAttributes:ee}}},fc=new Set(di);new Set(Object.entries(vt).flatMap(([e,t])=>t.some(e=>fc.has(e))?[e]:[]));const pc=[[`features`,`featureChanges`],[`variations`,`variationChanges`]],mc=(e,t)=>{let n={...e};for(let e of gt){let r=t[e];r!==void 0&&Reflect.set(n,e,r)}for(let[r,i]of pc){let a=t[i];if(a===void 0)continue;let o={...e?.[r],...a.set},s=a.clear??[];for(let e of s)Reflect.deleteProperty(o,e);a.removeIfEmpty===!0&&Object.keys(o).length===0?Reflect.deleteProperty(n,r):n[r]=o}let r=t.clear??[];for(let e of r)Reflect.deleteProperty(n,e);return Object.keys(n).length===0?null:n},hc=e=>[...new Set(Object.entries(vt).flatMap(([t,n])=>e.has(t)?n:[]))],gc=1e3,_c=n.discriminatedUnion(`kind`,[n.object({kind:n.literal(`person`),personId:n.uuid(),displayName:n.string().min(1).max(200),initials:n.string().min(1).max(2)}),n.object({kind:n.literal(`agent`),personId:n.uuid(),displayName:n.string().min(1).max(200),initials:n.string().min(1).max(2),tokenLabel:n.string().min(1).max(200)})]),vc=n.object({id:n.uuid(),canvasId:n.uuid(),documentVersion:n.number().int().positive(),origin:n.enum([`automatic`,`manual`,`restore`]),restoreRole:n.enum([`before`,`result`]).nullable(),retention:n.enum([`automatic`,`named`,`restore-boundary`]),title:n.string().min(1).nullable(),description:n.string().max(gc).nullable(),actor:_c,sourceVersionEntryId:n.uuid().nullable(),expiresAt:n.iso.datetime().nullable(),createdAt:n.iso.datetime(),updatedAt:n.iso.datetime(),screenCount:n.number().int().min(0)}),yc=n.object({canvasId:n.uuid(),limit:n.number().int().min(1).max(100).default(50),cursor:n.string().min(1).max(1e3).optional(),includeAutomatic:n.boolean().default(!1),actor:n.enum([`all`,`mine`]).default(`all`)}),bc=n.object({current:n.object({documentVersion:n.number().int().positive(),updatedAt:n.iso.datetime()}),items:n.array(vc),nextCursor:n.string().min(1).nullable(),hasExpiredHistory:n.boolean()}),xc=n.object({canvasId:n.uuid(),versionId:n.uuid()}),Sc=n.object({outcome:n.literal(`ready`),entry:vc,document:Fi,screens:n.array(Li)}),Cc=n.object({outcome:n.literal(`missing-resources`),entry:vc,document:Fi,screens:n.array(Li),missingScreenIds:n.array(n.uuid()).min(1)}),wc=n.discriminatedUnion(`outcome`,[Sc,Cc,n.object({outcome:n.literal(`corrupt`),entry:vc})]),Tc=n.discriminatedUnion(`kind`,[n.object({kind:n.literal(`current`),expectedVersion:n.number().int().positive()}),n.object({kind:n.literal(`version`),versionId:n.uuid()})]),Ec=n.object({canvasId:n.uuid(),target:Tc,title:n.string().trim().min(1),description:n.string().trim().max(gc).nullable().default(null)}),Dc=n.object({canvasId:n.uuid(),versionId:n.uuid(),title:n.string().trim().min(1),description:n.string().trim().max(gc).nullable().default(null)}),Oc=n.object({canvasId:n.uuid(),versionId:n.uuid()}),kc=n.object({entry:vc}),Ac=n.object({canvasId:n.uuid(),documentFormatVersion:Rn,versionId:n.uuid(),expectedVersion:n.number().int().positive()}),jc=n.object({canvasId:n.uuid(),version:n.number().int().positive(),beforeVersionId:n.uuid(),restoredVersionId:n.uuid(),restoreFenceVersion:n.number().int().positive()}),Mc=n.object({canvasId:n.uuid(),documentFormatVersion:Rn,versionId:n.uuid(),organisationId:n.union([n.uuid(),n.literal(`personal`)]),title:n.string().trim().min(1).optional()}),Nc=n.object({canvasId:n.uuid(),title:n.string().min(1),version:n.literal(1)}),Pc=(e,t,n=1/0)=>{let r=e.split(` `).map(e=>Number(e.replace(`%`,``)));return r.every(e=>Number.isFinite(e)&&e>=t&&e<=n)&&(r.length===1||(r[0]??0)<=(r[1]??0))},Fc=n.string().regex(/^[a-f0-9]{64}$/u),Ic=n.string().trim().min(1),Lc=n.object({organisationId:n.uuid().nullable()}),Rc=n.object({family:n.string().regex(/^uploaded-font-[a-f0-9]{64}(?:-[a-f0-9]{12})?$/u),familyName:Ic,subfamilyName:Ic,version:Ic,weight:n.string().regex(/^\d+(?:\.\d+)?(?: \d+(?:\.\d+)?)?$/u).refine(e=>Pc(e,1,1e3)),style:n.enum([`normal`,`italic`,`oblique`]),stretch:n.union([n.enum([`normal`,`ultra-condensed`,`extra-condensed`,`condensed`,`semi-condensed`,`semi-expanded`,`expanded`,`extra-expanded`,`ultra-expanded`]),n.string().regex(/^\d+(?:\.\d+)?%(?: \d+(?:\.\d+)?%)?$/u).refine(e=>Pc(e,0))]),format:n.enum([`truetype`,`opentype`,`woff`,`woff2`])}),zc=n.object({kind:n.enum([`personal`,`team`]),ownerId:n.uuid(),sha256:Fc}),Bc=Lc.extend({sha256:Fc,bytes:n.number().int().positive(),contentType:n.enum(Pt)}),Vc=n.object({upload:x}),Hc=Bc.extend({metadata:Rc,hasSharingRights:n.literal(!0)}),Uc=zc.extend({bytes:n.number().int().positive(),metadata:Rc,createdAt:n.iso.datetime(),path:n.string().startsWith(`/v1/font-catalog/`)}),Wc=n.object({entries:n.array(Uc),canManage:n.boolean()}),Gc=Lc.extend({sha256:Fc}),Kc=Lc.extend({canvasId:n.uuid(),sha256:n.array(Fc).min(1)}),qc=n.object({resources:n.array(n.object({entry:Uc,path:n.string().startsWith(`/v1/canvas-assets/`)}))}),Jc=n.object({inviteId:n.uuid(),email:n.string().max(254),accessLevel:f,sendCount:n.number().int().min(1),lastSentAt:n.iso.datetime(),expiresAt:n.iso.datetime(),state:n.enum([`pending`,`expired`]),deliveryState:n.enum([`queued`,`accepted`,`failed`]),deliveryError:n.string()}),Yc=n.object({canvasTitle:n.string().min(1),invitedBy:n.string().min(1),email:n.string().max(254).pipe(n.email()),accessLevel:f,expiresAt:n.iso.datetime(),state:n.enum([`pending`,`accepted`]),hasAccount:n.boolean()}),Xc=n.object({canvasId:n.uuid(),email:n.string().max(254).transform(e=>e.trim().toLowerCase()).pipe(n.email()),accessLevel:f}),Zc=n.object({invite:Jc,acceptToken:n.string().max(512).optional()}),Qc=n.object({canvasId:n.uuid()}),$c=ae(Jc),el=n.object({canvasId:n.uuid(),inviteId:n.uuid()}),tl=n.object({canvasId:n.uuid(),inviteId:n.uuid()}),nl=n.string().min(1).max(512),rl=n.object({token:nl}),il=n.object({token:nl}),al=n.object({canvasId:n.uuid(),accessLevel:f}),ol=n.object({personId:n.uuid().nullable(),email:n.string().max(254).nullable(),displayName:n.string().max(120).nullable(),initials:n.string().max(4).nullable(),avatarUrl:n.string().max(oe).nullable(),accessLevel:d,isPending:n.boolean(),reviewState:n.enum([`not-started`,`in-progress`,`done`]).nullable(),lastViewedAt:n.iso.datetime().nullable()}),sl=n.object({canvasId:n.uuid()}),cl=ae(ol),ll=n.object({canvasId:n.uuid(),personId:n.uuid(),accessLevel:f}),ul=n.object({canvasId:n.uuid(),personId:n.uuid()}),dl=n.object({personId:n.uuid(),revoked:n.boolean()}),fl=n.object({canvasId:n.uuid(),reviewState:n.enum([`not-started`,`in-progress`,`done`])}),pl=n.object({reviewState:fl.shape.reviewState.nullable()}),M=n.string().trim().min(1).max(160),ml=n.string().regex(/^[a-f0-9]{64}$/u),hl=n.number().int().positive(),gl=n.strictObject({source:M,journey:M,step:M,variant:M}),_l=n.strictObject({sha256:ml,bytes:n.number().int().positive(),mediaType:n.string().min(1).max(200)}),vl=n.strictObject({format:n.literal(`enhance-capture`),version:n.literal(1),key:gl,label:M,journeyLabel:M,order:n.number().int().nonnegative(),viewport:n.strictObject({width:hl,height:hl,deviceScaleFactor:n.number().positive()}),extent:n.enum([`viewport`,`full-page`]),source:n.strictObject({format:n.literal(`rrweb-screen`),version:n.literal(1),blob:_l}),preview:n.strictObject({blob:_l,width:hl,height:hl,pixelRatio:n.number().positive()}),assets:n.array(n.strictObject({url:n.url(),blob:_l})),provenance:n.strictObject({adapter:M,sdkVersion:M,kernelVersion:M,browser:M,capturedAt:n.iso.datetime(),sourceUrl:n.url().optional(),commit:n.string().min(1).max(200).optional()}),issues:n.array(n.strictObject({code:M,message:n.string().min(1).max(500)}))}).superRefine((e,t)=>{(e.preview.width/e.preview.pixelRatio!==e.viewport.width||e.preview.height/e.preview.pixelRatio!==e.viewport.height)&&t.addIssue({code:`custom`,path:[`preview`],message:`The preview and captured CSS extent must match.`}),e.source.blob.mediaType!==`application/json`&&t.addIssue({code:`custom`,path:[`source`,`blob`,`mediaType`],message:`Capture sources must be frozen JSON.`}),e.preview.blob.mediaType!==`image/png`&&t.addIssue({code:`custom`,path:[`preview`,`blob`,`mediaType`],message:`Capture previews must be PNG.`}),new Set(e.assets.map(e=>e.url)).size!==e.assets.length&&t.addIssue({code:`custom`,path:[`assets`],message:`Capture resource URLs must be unique.`})}),yl=n.strictObject({id:n.uuid(),canvasId:n.uuid(),source:M,runKey:M,generation:n.number().int().nonnegative(),participants:n.array(M).min(1),expiresAt:n.iso.datetime(),formatVersion:n.literal(1)}),bl=n.strictObject({participant:M,testId:M,project:M,retry:n.number().int().nonnegative(),status:n.enum([`passed`,`failed`,`skipped`,`interrupted`,`timedOut`]),captures:n.array(vl)}),xl=n.strictObject({format:n.literal(`enhance-capture-run`),version:n.literal(1),run:yl,participants:n.array(n.strictObject({id:M,status:n.enum([`passed`,`failed`,`interrupted`])})).min(1),attempts:n.array(bl),ordering:n.enum([`partial`,`complete`])}),Sl=n.strictObject({runId:n.uuid(),canvasId:n.uuid(),canvasUrl:n.url(),version:n.number().int().positive(),manifestDigest:ml,frames:n.array(n.strictObject({key:gl,frameId:M,captureId:n.uuid()})),issues:n.array(n.strictObject({code:M,message:n.string().max(500)}))}),Cl=n.strictObject({canvasId:n.uuid(),source:M.default(`default`),runKey:M,participants:n.array(M).min(1).default([`local`]),formatVersion:n.literal(1).default(1)}),wl=n.strictObject({run:yl}),Tl=n.strictObject({runId:n.uuid()}),El=n.enum([`collecting`,`sealed`,`converting`,`committed`,`failed`,`cancelled`]),Dl=n.strictObject({run:yl,state:El,receipt:Sl.nullable(),failure:n.strictObject({code:M,message:n.string().max(1e3)}).nullable()}),Ol=n.strictObject({runId:n.uuid(),blobs:n.array(_l).min(1).max(400)}),kl=n.strictObject({uploads:n.array(n.strictObject({sha256:ml,upload:n.strictObject({url:n.url(),headers:n.record(n.string(),n.string()),expiresAt:n.iso.datetime()}).nullable()})).max(400)}),Al=n.strictObject({manifest:xl}),jl=ie.extend({cursor:n.string().max(2048).nullable().default(null)}),Ml=n.object({selector:n.string().min(1),tagName:n.string().min(1),label:n.string().nullable(),source:n.object({file:n.string().min(1),line:n.number().int().min(0).nullable()}).nullable()}),Nl=n.object({x:n.number(),y:n.number()}),Pl=n.object({x:n.number().min(0).max(1),y:n.number().min(0).max(1)}),Fl=n.object({x:n.number().min(0).max(1),y:n.number().min(0).max(1),width:n.number().min(0).max(1),height:n.number().min(0).max(1)}),Il=Ml.extend({role:n.string().min(1).optional()}),Ll=n.object({path:n.array(n.number().int().min(0)),offset:n.number().int().min(0)}),Rl=n.object({version:n.literal(1),kind:n.literal(`element`),locator:Il,attachment:Pl,fallbackBounds:Fl}),zl=n.object({version:n.literal(1),kind:n.literal(`text`),root:Il,quote:n.object({exact:n.string().min(1),prefix:n.string(),suffix:n.string()}),range:n.object({start:Ll,end:Ll}),attachment:Pl,fallbackBounds:Fl}),Bl=n.object({version:n.literal(1),kind:n.literal(`elements`),members:n.array(Il).min(2),truncated:n.boolean(),attachment:Pl,fallbackBounds:Fl}),Vl=n.object({version:n.literal(1),kind:n.literal(`area`),bounds:Fl,attachment:Pl}),Hl=n.discriminatedUnion(`kind`,[Rl,zl,Bl,Vl]),Ul=n.discriminatedUnion(`on`,[n.object({on:n.literal(`canvas`),point:Nl}),n.object({on:n.literal(`node`),nodeId:n.string().min(1),point:Nl,element:n.null()}),n.object({on:n.literal(`screen`),nodeId:n.string().min(1),screenId:n.uuid(),point:Nl,element:Ml.nullable(),target:Hl.optional()})]),Wl=n.object({kind:n.enum([`person`,`agent`]),personId:n.uuid(),name:n.string().min(1).max(120),initials:n.string().min(1).max(4),avatarUrl:n.string().max(oe).nullable(),tokenLabel:n.string().max(120).nullable()}),Gl=n.object({personId:n.uuid(),name:n.string().min(1).max(120)}),Kl=n.object({emoji:n.string().min(1).max(16),people:n.array(Gl).min(1)}),ql=n.object({messageId:n.uuid(),seq:n.number().int().min(1),body:n.string().min(1),author:Wl,createdAt:n.iso.datetime(),editedAt:n.iso.datetime().nullable(),mentions:n.array(Gl),reactions:n.array(Kl)}),Jl=n.object({kind:n.enum([`person`,`agent`]),personId:n.uuid(),name:n.string().min(1).max(120),tokenLabel:n.string().max(120).nullable()}),Yl=n.object({revision:n.number().int().positive(),threadId:n.uuid(),canvasId:n.uuid(),anchor:Ul,author:Wl,messages:n.array(ql).min(1).max(50),messageCount:n.number().int().min(1),hasMoreMessages:n.boolean(),isResolved:n.boolean(),resolvedAt:n.iso.datetime().nullable(),resolvedBy:Jl.nullable(),createdAt:n.iso.datetime(),lastMessageAt:n.iso.datetime()}),Xl=n.strictObject({canvasRef:n.string().min(1),expectedVersion:n.number().int().positive()}),Zl=Xl.extend({coordinateSpace:n.enum([`canvas-world`,`node-normalized`,`screen-normalized`])}),Ql=n.object({context:Xl.optional(),page:jl.optional(),canvasId:n.uuid(),filter:n.enum([`open`,`resolved`,`all`]).default(`open`),authorPersonId:n.uuid().optional(),agentActionable:n.boolean().default(!1),query:n.string().trim().max(200).optional()}),$l=ae(Yl).extend({nextCursor:n.string().nullable().optional()}),eu=jl.extend({context:Xl.optional(),canvasId:n.uuid(),threadId:n.uuid(),expectedRevision:n.number().int().positive().optional()}),tu=n.object({thread:Yl.omit({messages:!0,hasMoreMessages:!0}),messages:n.array(ql).max(100),nextCursor:n.string().nullable()}),nu=n.object({context:Zl.optional(),canvasId:n.uuid(),clientThreadId:n.uuid(),anchor:Ul,body:n.string().trim().min(1),mentionedPersonIds:n.array(n.uuid()).default([])}),ru=n.object({context:Xl.optional(),canvasId:n.uuid(),threadId:n.uuid(),clientMessageId:n.uuid(),body:n.string().trim().min(1),mentionedPersonIds:n.array(n.uuid()).default([])}),iu=Yl.extend({postedMessage:ql}),au=n.object({canvasId:n.uuid(),threadId:n.uuid(),messageId:n.uuid(),body:n.string().trim().min(1),mentionedPersonIds:n.array(n.uuid()).default([])}),ou=n.object({canvasId:n.uuid(),threadId:n.uuid(),messageId:n.uuid(),emoji:n.string().trim().min(1).max(16),reacted:n.boolean()}),su=n.object({canvasId:n.uuid(),threadId:n.uuid(),anchor:Ul}),cu=n.object({context:Xl.optional(),expectedRevision:n.number().int().positive().optional(),canvasId:n.uuid(),threadId:n.uuid(),resolved:n.boolean()}),lu=n.object({canvasId:n.uuid(),threadId:n.uuid(),messageId:n.uuid().optional()}),uu=n.object({deletedThreadIds:n.array(n.uuid()),deletedMessageIds:n.array(n.uuid())}),N={shortText:200,name:100,label:500,page:50,cursor:64,questionOptions:3},P=n.uuid(),du=n.string().min(1),fu=n.object({id:P,name:n.string().trim().min(1).max(N.name),content:n.string().trim().min(1),version:n.string().min(1).max(N.name)}),pu=n.object({canvasId:P,nodeId:du,label:n.string(),role:n.enum([`target`,`reference`])}),mu=n.discriminatedUnion(`type`,[n.object({type:n.literal(`text`),text:n.string()}),pu.extend({type:n.literal(`object`)})]),hu=n.object({revision:n.number().int().nonnegative(),text:n.string(),task:n.enum([`chat`,`rewrite`,`shorten`,`translate`,`replace`,`rename`]).default(`chat`),references:n.array(pu),contentVersion:n.literal(1).default(1),parts:n.array(mu).optional(),attachmentIds:n.array(P),model:n.enum([`default`,`sonnet`,`opus`,`haiku`]).default(`default`),effort:n.enum([`default`,`low`,`medium`,`high`]).default(`default`),instructions:n.array(n.object({name:n.string().max(N.name),content:n.string(),version:n.string().max(N.name)})).default([])}).transform(e=>{let t=e.parts??[...e.references.flatMap(e=>[{type:`object`,...e},{type:`text`,text:`
9
+ `}]),{type:`text`,text:e.text}],n=t.map(e=>e.type===`text`?e.text:e.label).join(``),r=new Map;for(let e of t){if(e.type===`text`)continue;let t=`${e.canvasId}:${e.nodeId}`,n=r.get(t);r.set(t,{canvasId:e.canvasId,nodeId:e.nodeId,label:e.label,role:n?.role===`target`?`target`:e.role})}return{...e,text:n,references:Array.from(r,([,e])=>e),parts:t}}),gu=n.object({state:n.enum([`checking`,`not-installed`,`unsupported`,`signed-out`,`signing-in`,`connected`,`usage-limited`,`auth-expired`,`unavailable`]),version:n.string().nullable(),account:n.string().nullable(),issue:n.string().nullable()}),_u=n.object({canvasId:P,mutationId:P,previousVersion:n.number().int().positive(),version:n.number().int().positive(),nodeIds:n.array(du),reverted:n.boolean().default(!1),review:Fa.optional()}),vu=n.object({prompt:n.string().trim().min(1),options:n.array(n.string().trim().min(1).max(N.shortText)).max(N.questionOptions).refine(e=>new Set(e).size===e.length,`Options must be distinct.`).default([])}).extend({id:P,digest:n.string().min(1).max(N.name),state:n.enum([`pending`,`answered`,`cancelled`]),answer:n.string().nullable()}),yu=n.object({jobId:P,version:n.number().int().positive(),target:w,state:n.enum([`rendered`,`checked`,`needs-review`]),summary:n.string().max(N.label)}),bu=n.object({parts:n.array(mu).optional(),id:n.string().min(1).max(N.shortText),role:n.enum([`user`,`assistant`,`tool`]),text:n.string(),tool:n.string().nullable().default(null),outcome:n.enum([`running`,`completed`,`denied`,`failed`]).nullable().default(null)}),xu=n.object({id:n.string().min(1).max(N.shortText),tool:n.string().max(N.shortText),digest:n.string().max(N.name),input:n.record(n.string(),n.unknown())}),Su=n.object({mutationId:P,canvasId:P,procedure:n.enum([`canvas.applyOperations`,`canvas.render.importSource`]),input:n.record(n.string(),n.unknown()),state:n.enum([`recorded`,`accepted`,`unknown`,`refused`])}),Cu=n.object({id:P,name:n.string().max(N.shortText),mediaType:n.enum([`image/png`,`image/jpeg`,`image/webp`]),width:n.number().int().positive(),height:n.number().int().positive(),bytes:n.number().int().positive(),preview:n.string().regex(/^data:image\/(?:png|jpeg|webp);base64,[A-Za-z0-9+/=]+$/u)}),wu=n.object({id:P,state:n.enum([`preparing`,`starting`,`running`,`waiting`,`stopping`,`reconciling`,`completed`,`stopped`,`failed`,`interrupted`,`needs-review`]),submittedDraft:hu,attachments:n.array(Cu).optional(),model:n.string().nullable().default(null),runtimeVersion:n.string().nullable().default(null),lastActivityAt:n.iso.datetime().optional(),stillWorking:n.boolean().default(!1),preparedContext:n.string().default(``),baseVersion:n.number().int().positive(),startedAt:n.iso.datetime(),endedAt:n.iso.datetime().nullable(),messages:n.array(bu),receipts:n.array(_u),inspections:n.array(yu).default([]),questions:n.array(vu).optional(),intents:n.array(Su).default([]),pending:xu.nullable(),recoveryIssue:n.string().nullable().optional(),issue:n.string().nullable()}),Tu=n.object({id:P,canvasId:P,ownerId:P,title:n.string().trim().min(1).max(N.shortText),titleSource:n.enum([`automatic`,`manual`]).optional(),visibility:n.enum([`private`,`shared`]),createdAt:n.iso.datetime(),updatedAt:n.iso.datetime(),sessionId:P,hasSession:n.boolean(),draft:hu,turns:n.array(wu),earlierMessages:n.number().int().nonnegative().optional(),sequence:n.number().int().nonnegative()}),Eu=n.uuid(),Du=wu.pick({id:!0,state:!0,model:!0,runtimeVersion:!0,stillWorking:!0,startedAt:!0,endedAt:!0,messages:!0,attachments:!0,receipts:!0,inspections:!0,questions:!0,recoveryIssue:!0,issue:!0}),Ou=n.object({canvasId:Eu,chatId:Eu,title:n.string().trim().min(1).max(N.shortText),visibility:n.enum([`private`,`shared`]),sequence:n.number().int().nonnegative(),mergeTurns:n.boolean().optional(),createdAt:n.iso.datetime(),updatedAt:n.iso.datetime(),turns:n.array(Du)}),ku=Ou.omit({mergeTurns:!0}).extend({earlierMessages:n.number().int().nonnegative().optional(),ownerId:Eu,ownerName:n.string().optional(),readSequence:n.number().int().nonnegative().optional(),unread:n.boolean().optional()}),Au=n.object({canvasId:Eu,search:n.string().max(N.shortText).default(``),ownerId:Eu.optional(),sort:n.enum([`date`,`unread`]).default(`date`),cursor:n.object({updatedAt:n.iso.datetime(),chatId:Eu,unread:n.boolean().optional()}).optional(),limit:n.number().int().min(1).max(N.page).default(N.page)}),ju=n.object({items:n.array(ku),next:n.object({updatedAt:n.iso.datetime(),chatId:Eu,unread:n.boolean().optional()}).nullable()}),Mu=n.object({canvasId:Eu,chatId:Eu}),Nu=Mu.extend({before:n.number().int().nonnegative().optional()}),Pu=n.object({chat:ku.nullable(),next:n.number().int().nonnegative().nullable()}),Fu=Mu.extend({sequence:n.number().int().nonnegative()}),Iu=n.object({saved:n.boolean()}),Lu=n.object({canvasId:Eu,cursor:n.string().max(N.cursor).default(``)}),Ru=n.object({cursor:n.string(),changed:n.boolean()}),zu=n.string().min(1),F=n.uuid();n.object({protocol:n.literal(4),shellVersion:n.string(),hostId:F.optional(),eventSequence:n.number().int().nonnegative().default(0),installationId:F,profileId:F.nullable(),credential:n.object({tokenId:F,expiresAt:n.iso.datetime()}).nullable().default(null),connection:gu,chats:n.array(Tu),chatPages:n.array(n.object({canvasId:F,hasMore:n.boolean()})).default([]),attachments:n.array(Cu),instructions:n.array(fu).default([]),issue:n.string().nullable(),capabilities:n.object({images:n.boolean(),dictation:n.boolean()})});const Bu=n.object({personId:F,tokenId:F,token:n.string().startsWith(`enh_`).max(N.label),expiresAt:n.iso.datetime()}),Vu=n.object({canvasId:F,rootIds:n.array(zu),version:n.number().int().positive()});n.discriminatedUnion(`kind`,[n.object({kind:n.literal(`desktop.describe`)}),n.object({kind:n.literal(`claude.status`)}),n.object({kind:n.literal(`claude.connect`)}),n.object({kind:n.literal(`claude.cancelConnection`)}),n.object({kind:n.literal(`claude.chooseExecutable`)}),n.object({kind:n.literal(`profile.connect`),profile:Bu}),n.object({kind:n.literal(`profile.disconnect`)}),n.object({kind:n.literal(`instruction.import`),name:n.string().trim().min(1).max(N.name),content:n.string().trim().min(1)}),n.object({kind:n.literal(`instruction.remove`),instructionId:F}),n.object({kind:n.literal(`chat.list`),canvasId:F,more:n.boolean().optional()}),n.object({kind:n.literal(`chat.read`),chatId:F,more:n.boolean().optional()}),n.object({kind:n.literal(`chat.create`),canvasId:F,visibility:n.enum([`private`,`shared`])}),n.object({kind:n.literal(`chat.saveDraft`),chatId:F,expectedRevision:n.number().int().nonnegative(),draft:hu}),n.object({kind:n.literal(`chat.rename`),chatId:F,title:n.string().trim().min(1).max(N.shortText)}),n.object({kind:n.literal(`chat.visibility`),chatId:F,visibility:n.enum([`private`,`shared`])}),n.object({kind:n.literal(`chat.delete`),chatId:F,stop:n.boolean()}),n.object({kind:n.literal(`turn.start`),chatId:F,draftRevision:n.number().int().nonnegative(),scope:Vu}),n.object({kind:n.literal(`turn.stop`),chatId:F,turnId:F}),n.object({kind:n.literal(`turn.checkChanges`),chatId:F,turnId:F}),n.object({kind:n.literal(`turn.undo`),chatId:F,turnId:F}),n.object({kind:n.literal(`question.respond`),chatId:F,turnId:F,questionId:F,digest:n.string().min(1).max(N.name),answer:n.string().trim().min(1).nullable()}),n.object({kind:n.literal(`request.respond`),chatId:F,turnId:F,requestId:n.string().max(N.shortText),digest:n.string().max(N.name),allow:n.boolean()}),n.object({kind:n.literal(`attachment.choose`),chatId:F}),n.object({kind:n.literal(`attachment.prepare`),chatId:F,name:n.string().max(N.shortText),bytes:n.string()}),n.object({kind:n.literal(`attachment.remove`),chatId:F,attachmentId:F}),n.object({kind:n.literal(`desktop.update`)}),n.object({kind:n.literal(`desktop.retryHost`)}),n.object({kind:n.literal(`desktop.openHistory`)})]);const Hu=n.string().trim().min(1).max(2e3),Uu=n.object({message:Hu,diagnostics:n.unknown().optional(),workspaceId:n.uuid().optional(),canvasId:n.uuid().optional()}),Wu=n.object({status:n.enum([`sent`,`unavailable`,`unconfirmed`]),attemptId:n.uuid(),retryAfterSeconds:n.number().int().min(1).max(3600).optional()}),Gu=n.enum([`home`,`recents`,`shared`,`trash`,`team`,`canvas`,`invite`,`sign-in`,`sign-up`,`other`]),Ku=n.enum([`Error`,`TypeError`,`RangeError`,`ReferenceError`,`SyntaxError`,`URIError`,`AbortError`,`NetworkError`,`SecurityError`,`UnhandledRejection`]),qu=1e6,Ju=n.number().int().min(0).max(864e5),Yu=n.object({name:Ku,atMs:Ju,source:n.enum([`application`,`external`,`unknown`]),line:n.number().int().min(0).max(qu).optional(),column:n.number().int().min(0).max(qu).optional()}),Xu=n.object({path:n.string().max(256).regex(/^(?:canvas|comment|organisation|person|prototype|recording|recordingAsset|screen|transcript|telemetry)(?:\.[A-Za-z]+){1,4}$/u),status:n.enum([`ok`,`refused`,`unavailable`,`cancelled`]),durationMs:Ju,atMs:Ju,correlationId:n.uuid().optional()}),Zu=n.object({action:n.enum([`navigate`,`feedback.open`]),route:Gu,atMs:Ju}),Qu=n.string().max(512).transform((e,t)=>{let r=URL.parse(e),i=r?.searchParams.get(`replay_id`),a=r?.searchParams.get(`distinct_id`),o=r?.searchParams.get(`token`);return typeof o!=`string`||r?.origin!==`https://mixpanel.com`||r.pathname!==`/projects/replay-redirect`||!n.uuid().safeParse(i).success||!n.uuid().safeParse(a).success||!/^[\da-f]{32}$/iu.test(o)?(t.addIssue({code:`custom`,message:`unsupported replay reference`}),n.NEVER):`https://mixpanel.com/projects/replay-redirect?${new URLSearchParams({replay_id:i??``,distinct_id:a??``,token:o}).toString()}`}),$u=n.object({route:Gu,environment:n.object({browser:n.enum([`Chrome`,`Edge`,`Firefox`,`Safari`,`Other`]),os:n.enum([`macOS`,`Windows`,`Linux`,`iOS`,`Android`,`Other`]),release:n.string().max(256).regex(/^[\w.+-]+$/u)}),errors:n.array(Yu).max(10),api:n.array(Xu).max(10),activity:n.array(Zu).max(20),replayUrl:Qu.optional().catch(void 0)}),ed=e=>{try{let t=JSON.stringify(e);if(new TextEncoder().encode(t).length>32768)return;let n=$u.safeParse(e);return n.success?n.data:void 0}catch{return}},td=`root`,nd=e=>`a${String(e).padStart(4,`0`)}`,rd=()=>({version:7,nodes:{[td]:{id:td,label:`Canvas`,component:`root`,styles:{}}},relationships:{}}),id=(e,t)=>({...e,nodes:{...e.nodes,[t.id]:t},relationships:{...e.relationships,[t.id]:{parentId:td,sortKey:nd(Object.keys(e.relationships).length)}}}),ad=(e,t)=>id(e,{id:t.id,label:t.label,component:`screen`,props:{capture:{viewport:t.viewport,atMs:0,screenId:t.screenId}},styles:{},box:{...t.at,...t.viewport}}),od=n.enum([`owner`,`admin`,`member`]),sd=n.object({id:n.uuid(),name:n.string().min(1).max(120),role:od}),cd=n.object({}),ld=ae(sd),ud=n.object({name:n.string().trim().min(1).max(120)}),dd=n.object({organisation:sd}),fd=n.object({organisationId:n.uuid(),name:n.string().trim().min(1).max(120)}),pd=n.object({organisationId:n.uuid()}),md=n.object({organisationId:n.uuid(),movedCanvasCount:n.number().int().min(0)}),hd=n.object({personId:n.uuid(),displayName:n.string().max(120),initials:n.string().max(4),avatarUrl:n.string().max(oe).nullable().optional(),email:n.string().max(254).nullable(),role:od}),gd=n.object({organisationId:n.uuid()}),_d=ae(hd),vd=n.object({organisationId:n.uuid(),email:n.email().trim().toLowerCase().max(254),role:n.enum([`admin`,`member`]).default(`member`)}),yd=n.object({personId:n.uuid()}),bd=n.object({organisationId:n.uuid(),personId:n.uuid(),role:n.enum([`admin`,`member`])}),xd=bd.pick({personId:!0,role:!0}),Sd=n.object({organisationId:n.uuid(),personId:n.uuid()}),Cd=n.object({personId:n.uuid(),removed:n.literal(!0)}),wd=n.object({organisationId:n.uuid(),personId:n.uuid()}),Td=n.object({ownerPersonId:n.uuid()}),Ed=n.object({inviteId:n.uuid(),email:n.string().max(254).pipe(n.email()),role:n.enum([`admin`,`member`]),sendCount:n.number().int().min(1),lastSentAt:n.iso.datetime(),expiresAt:n.iso.datetime(),state:n.enum([`pending`,`expired`]),deliveryState:n.enum([`queued`,`accepted`,`failed`]),deliveryError:n.string()}),Dd=n.object({organisationId:n.uuid(),email:n.string().trim().toLowerCase().max(254).pipe(n.email()),role:n.enum([`admin`,`member`]).default(`member`)}),Od=n.discriminatedUnion(`kind`,[n.object({kind:n.literal(`member`),personId:n.uuid()}),n.object({kind:n.literal(`invitation`),invite:Ed})]),kd=n.object({invite:Ed}),Ad=n.object({organisationId:n.uuid()}),jd=ae(Ed),Md=n.object({organisationId:n.uuid(),inviteId:n.uuid()}),Nd=Md.extend({}),Pd=n.string().min(1).max(512),Fd=n.object({token:Pd}),Id=n.object({token:Pd}),Ld=n.object({teamName:n.string().min(1).max(120),invitedBy:n.string().min(1).max(120),email:n.string().max(254).pipe(n.email()),role:n.enum([`admin`,`member`]),expiresAt:n.iso.datetime(),state:n.enum([`pending`,`accepted`]),hasAccount:n.boolean()}),Rd=n.object({organisationId:n.uuid()}),zd=n.object({id:n.uuid(),label:n.string().min(1).max(120),createdAt:n.iso.datetime(),lastUsedAt:n.iso.datetime().nullable(),expiresAt:n.iso.datetime().nullable(),revoked:n.boolean()}),Bd=n.object({label:n.string().trim().min(1).max(120).describe(`Label naming the agent.`),expiresAt:n.iso.datetime().nullable().describe(`Expiry timestamp, or null for a token that does not expire.`)}),Vd=n.object({token:n.string().startsWith(`enh_`),agentToken:zd}),Hd=n.object({}),Ud=n.object({items:n.array(zd),isConnected:n.boolean()}),Wd=n.object({tokenId:n.uuid()}),Gd=n.object({tokenId:n.uuid(),revoked:n.literal(!0)}),Kd=n.discriminatedUnion(`method`,[n.object({method:n.literal(`token`)}),n.object({method:n.literal(`browser`),issuer:n.url(),clientId:n.string().min(1),scope:n.literal(`openid`)})]),qd=n.object({id:n.uuid(),preparedCanvasId:n.uuid(),displayName:n.string().min(1).max(120),initials:n.string().min(1).max(4),avatarUrl:n.string().max(oe).nullable(),email:n.string().max(254).nullable(),createdAt:n.iso.datetime()}),Jd=n.object({}),Yd=n.object({person:qd.nullable(),authentication:n.discriminatedUnion(`kind`,[n.object({kind:n.literal(`anonymous`)}),n.object({kind:n.literal(`person`)}),n.object({kind:n.literal(`agent`),tokenId:n.uuid(),tokenLabel:n.string(),expiresAt:n.iso.datetime().nullable()}),n.object({kind:n.literal(`oauth-agent`),tokenId:n.uuid(),tokenLabel:n.string(),clientId:n.string().min(1),scopes:n.array(n.string()),expiresAt:n.iso.datetime(),resource:n.url()})])}),Xd=n.object({displayName:n.string().trim().min(1).max(120)}),Zd=n.object({person:qd}),Qd=n.string().trim().toLowerCase().min(3).max(40).regex(/^[a-z0-9][a-z0-9._-]*$/,`letters, digits, dot, underscore and dash only`),$d=n.enum([`cookie`,`token`]).default(`cookie`),ef=n.object({username:Qd,password:n.string().min(10).max(200),displayName:n.string().trim().min(1).max(120),deliver:$d,email:n.string().max(254).transform(e=>e.trim().toLowerCase()).pipe(n.email())}),tf=n.object({username:Qd,password:n.string().min(1).max(200),deliver:$d}),nf=n.object({person:qd,token:n.string().nullable()}),rf=nf.extend({preparedCanvasId:n.uuid()}),af=n.object({}),of=n.object({signedOut:n.literal(!0)}),sf=n.enum([`image/jpeg`,`image/png`,`image/webp`]),cf=n.object({contentType:sf,bytes:n.number().int().positive()}),lf=n.object({assetId:n.uuid(),upload:n.object({url:n.url(),headers:n.record(n.string(),n.string()),expiresAt:n.iso.datetime()})}),uf=n.object({assetId:n.uuid()}),df=n.object({assetId:n.uuid(),previewUrl:n.url()}),ff=n.object({abandoned:n.boolean()}),pf=n.object({requestId:n.uuid(),displayName:n.string().trim().min(1).max(120),photoAssetId:n.uuid().optional()}),mf=n.object({person:qd}),hf=n.string().max(254).pipe(n.email()),gf=n.discriminatedUnion(`kind`,[n.object({kind:n.literal(`person`),personId:n.uuid(),displayName:n.string().min(1).max(120),initials:n.string().min(1).max(4),avatarUrl:n.string().max(oe).nullable().optional(),email:hf}),n.object({kind:n.literal(`email`),email:hf})]),_f=n.object({query:n.string().trim().min(1).max(200)}),vf=n.object({recipients:n.array(gf).max(5)}),yf=n.object({}),bf=vf.extend({}),xf=`enhance3:session-handoff`;n.union([n.object({kind:n.literal(xf),body:n.object({token:n.string().min(1),displayName:n.string().min(1)})}),n.object({kind:n.literal(xf),signedOut:n.literal(!0)})]);const Sf=n.string().min(1).refine(e=>!e.startsWith(`/`)&&!e.endsWith(`/`)&&!e.includes(`\\`)&&!e.includes(`\0`)&&e.split(`/`).every(e=>e!==``&&e!==`.`&&e!==`..`),{message:`prototype paths must be portable relative file paths`}),Cf=n.object({path:Sf,contentType:n.string().min(1).max(200),bytes:n.number().int().nonnegative()}),wf=n.enum([`uploading`,`verifying`,`ready`,`failed`,`abandoned`]),Tf=n.object({canvasId:n.uuid(),prototypeId:n.uuid().optional(),clientToken:n.uuid(),nodeId:n.string().min(1),title:n.string().trim().min(1).max(200),entryPath:Sf.default(`index.html`),files:n.array(Cf).min(1),box:S.extend({width:n.number().positive(),height:n.number().positive()})}),Ef=n.object({prototypeId:n.uuid(),deploymentId:n.uuid(),nodeId:n.string().min(1),state:wf,alreadyExists:n.boolean(),fileCount:n.number().int().positive(),totalBytes:n.number().int().positive()}),Df=n.object({canvasId:n.uuid(),deploymentId:n.uuid(),cursor:n.number().int().min(0).default(0)}),Of=n.object({path:Sf,upload:x}),kf=n.object({deploymentId:n.uuid(),uploads:n.array(Of).max(50),nextCursor:n.number().int().min(0).optional()}),Af=n.object({canvasId:n.uuid(),deploymentId:n.uuid(),baseVersion:n.number().int().positive(),canvasPageId:n.string().min(1).optional()}),jf=n.object({canvasId:n.uuid(),prototypeId:n.uuid(),deploymentId:n.uuid(),nodeId:n.string().min(1),version:n.number().int().positive(),state:n.literal(`ready`),origin:n.url(),openUrl:n.string().startsWith(`/c/`)}),Mf=n.object({canvasId:n.uuid(),prototypeId:n.uuid(),deploymentId:n.uuid()}),Nf=n.object({deploymentId:n.uuid(),origin:n.url(),bootUrl:n.url(),expiresAt:n.iso.datetime()}),Pf=`__enhance/manifest.json`,Ff=n.string().length(64).refine(e=>{for(let t of e)if(!/[\da-f]/u.test(t))return!1;return!0}),If=e=>{for(let t of e){let e=t.codePointAt(0);if(e!==void 0&&(e===127||e<=31))return!0}return!1},Lf=e=>e.normalize(`NFKC`).toUpperCase().toLowerCase(),Rf=n.string().min(1).refine(e=>e===e.normalize(`NFC`),{message:`prototype paths must use NFC Unicode normalization`}).refine(e=>!e.startsWith(`/`)&&!/^[A-Za-z]:\//u.test(e)&&!e.endsWith(`/`)&&!e.includes(`\\`)&&!If(e)&&!e.startsWith(`__enhance/`)&&e.split(`/`).every(e=>e!==``&&e!==`.`&&e!==`..`),{message:`prototype paths must be portable relative file paths`}),zf=n.object({path:Rf,contentType:n.string().trim().min(1).max(200).refine(e=>!If(e)),bytes:n.number().int().nonnegative().max(2**53-1),sha256:Ff}),Bf=n.object({version:n.literal(1),entryPath:Rf,files:n.array(zf).min(1)}),Vf=n.object({artifactBytes:n.number().int().positive().max(2**53-1),expandedBytes:n.number().int().positive().optional(),fileBytes:n.number().int().positive().max(2**53-1),manifestBytes:n.number().int().positive().optional(),fileCount:n.number().int().positive().optional(),pathBytes:n.number().int().positive().max(2**53-1)}),Hf=n.object({}),Uf=n.object({attachmentProtocolVersion:n.literal(1).optional(),protocolVersion:n.literal(1),format:n.literal(`zip`),limits:Vf}),Wf=n.object({protocolVersion:n.literal(1),format:n.literal(`zip`),bytes:n.number().int().positive().max(2**53-1),sha256:Ff,fileCount:n.number().int().positive().max(2**53-1),expandedBytes:n.number().int().positive().max(2**53-1)}),Gf=n.object({canvasId:n.uuid(),prototypeId:n.uuid().optional(),clientToken:n.uuid(),nodeId:n.string().min(1),title:n.string().trim().min(1).max(200),entryPath:Rf,artifact:Wf,box:S.extend({width:n.number().positive(),height:n.number().positive()})}),Kf=n.enum([`uploading`,`queued`,`ingesting`,`ready`,`failed`,`abandoned`]),qf=n.object({prototypeId:n.uuid(),deploymentId:n.uuid(),nodeId:n.string().min(1),alreadyExists:n.boolean(),artifact:Wf}),Jf=n.discriminatedUnion(`state`,[qf.extend({state:n.literal(`uploading`),upload:x}),qf.extend({state:n.enum([`queued`,`ingesting`,`ready`,`failed`,`abandoned`])})]),Yf=n.object({canvasId:n.uuid(),deploymentId:n.uuid()}),Xf=n.object({deploymentId:n.uuid(),state:Kf}),Zf=n.object(Yf.shape),Qf=n.object({prototypeId:n.uuid(),deploymentId:n.uuid(),nodeId:n.string().min(1),fileCount:n.number().int().nonnegative(),totalBytes:n.number().int().nonnegative().max(2**53-1),processedFiles:n.number().int().nonnegative()}),$f=n.discriminatedUnion(`state`,[Qf.extend({state:n.literal(`failed`),failure:n.object({code:n.string().min(1),message:n.string().min(1),path:Rf.optional()})}),Qf.extend({state:n.enum([`uploading`,`queued`,`ingesting`,`ready`,`abandoned`])})]),ep=n.object({canvasId:n.uuid(),deploymentId:n.uuid(),baseVersion:n.number().int().positive(),canvasPageId:n.string().min(1).optional(),attachment:n.object({clientToken:n.uuid(),scope:n.object({pageId:n.string().min(1).optional(),nodeIds:n.array(n.string().min(1))})}).optional()}),tp=n.object({canvasId:n.uuid(),prototypeId:n.uuid(),deploymentId:n.uuid(),nodeId:n.string().min(1),version:n.number().int().positive(),state:n.literal(`ready`),origin:n.url(),openUrl:n.string().startsWith(`/c/`),attachment:n.discriminatedUnion(`outcome`,[n.object({outcome:n.literal(`committed`),mutationId:n.uuid(),previousVersion:n.number().int().positive(),version:n.number().int().positive()}),n.object({outcome:n.literal(`no_op`),version:n.number().int().positive()})]).optional()});n.object({protocol:n.literal(1),type:n.literal(`enhance.prototype.capture`),requestId:n.uuid(),connectionId:n.uuid().optional(),documentId:n.uuid().optional()}),n.object({protocol:n.literal(1),type:n.literal(`enhance.prototype.connect`),connectionId:n.uuid()}).extend({type:n.literal(`enhance.prototype.connected`),documentId:n.uuid(),capabilities:n.array(n.string()),release:n.string().min(1)}),n.object({protocol:n.literal(1),type:n.literal(`enhance.prototype.unloading`),documentId:n.uuid()}),n.object({protocol:n.literal(1),type:n.literal(`enhance.prototype.ready`)}),n.object({protocol:n.literal(1),type:n.literal(`enhance.prototype.escape`)}),n.object({protocol:n.literal(1),type:n.literal(`enhance.prototype.zoom`),deltaX:n.number(),deltaY:n.number(),deltaMode:n.union([n.literal(0),n.literal(1),n.literal(2)]),anchorX:n.number().min(0).max(1),anchorY:n.number().min(0).max(1)}),n.object({protocol:n.literal(1),type:n.literal(`enhance.prototype.navigate`),direction:n.enum([`back`,`forward`])}),n.object({protocol:n.literal(1),type:n.literal(`enhance.prototype.navigation`),canGoBack:n.boolean(),canGoForward:n.boolean()});const np=n.object({artifact:n.string().min(1),viewport:n.object({width:n.number().positive(),height:n.number().positive()}),title:n.string()}),rp=n.object({protocol:n.literal(1),type:n.literal(`enhance.prototype.captured`),requestId:n.uuid(),connectionId:n.uuid().optional(),documentId:n.uuid().optional()});n.discriminatedUnion(`outcome`,[rp.extend({outcome:n.literal(`captured`),screen:np}),rp.extend({outcome:n.literal(`failed`),error:n.string().min(1),code:n.enum([`capture-failed`,`capture-busy`]).optional()})]);const ip=2166136261,ap=Number.parseInt(`9e3779b9`,16),op=Number.parseInt(`85ebca6b`,16),sp=Number.parseInt(`c2b2ae35`,16);ip^ap,ip^op,ip^sp;const cp=(e,t)=>`/v1/recording-assets/${encodeURIComponent(e)}/${encodeURIComponent(t)}`,lp=n.object({width:n.number().int().positive(),height:n.number().int().positive()}),up=n.object({mimeType:n.string().min(1).max(100),sampleRate:n.number().int().min(8e3).max(192e3)}),dp=n.object({sourceUrl:n.string(),viewport:lp,pageTitle:n.string().nullable(),audio:up.nullable().default(null)}),fp=n.object({recordingId:n.uuid(),ownerPersonId:n.uuid(),chunkIndex:n.literal(0),upload:x,audioUpload:x.nullable()}),pp=n.object({recordingId:n.uuid(),index:n.number().int().min(0),firstEventMs:n.number().int().min(0),lastEventMs:n.number().int().min(0),eventCount:n.number().int().min(0),continues:n.boolean().default(!1),bytes:n.number().int().min(1),etag:n.string().min(1).max(200).optional()}),mp=n.object({nextChunkIndex:n.number().int().min(1),upload:x}),hp=n.object({recordingId:n.uuid(),index:n.number().int().min(0),firstMs:n.number().int().min(0),lastMs:n.number().int().min(0),bytes:n.number().int().min(1),epoch:n.number().int().min(0).default(0),startsEpoch:n.boolean().default(!1),etag:n.string().min(1).max(200).optional()}),gp=n.object({nextChunkIndex:n.number().int().min(1),upload:x}),_p=n.object({recordingId:n.uuid(),durationMs:n.number().int().min(0),viewport:lp,sourceUrl:n.string(),interrupted:n.boolean().default(!1),canvasId:n.uuid().optional(),organisationId:n.uuid().optional(),audioChunkCount:n.number().int().min(0).default(0),hasRecoverableBytes:n.boolean().default(!1)}).refine(e=>e.canvasId===void 0||e.organisationId===void 0,{message:`choose an existing canvas or a team for a new canvas, not both`}),vp=n.enum([`whole`,`recovering`,`partial`]),yp=n.enum([`dom`,`audio`]),bp=n.object({recordingId:n.uuid(),canvasId:n.uuid(),canvasTitle:n.string().min(1),isNewCanvas:n.boolean(),storedChunkCount:n.number().int().min(0),missingChunkIndexes:n.array(n.number().int().min(0)).max(64),missingChunkCount:n.number().int().min(0),storedAudioChunkCount:n.number().int().min(0),missingAudioChunkIndexes:n.array(n.number().int().min(0)).max(64),missingAudioChunkCount:n.number().int().min(0),integrity:vp}),xp=n.object({recordingId:n.uuid(),durationMs:n.number().int().min(0),viewport:lp,interrupted:n.boolean(),chunkCount:n.number().int().min(0),startedAt:n.iso.datetime()}),Sp=n.object({recordingId:n.uuid(),assets:n.array(n.object({url:n.url(),contentType:n.string().min(1).max(200),byteSize:n.number().int().min(1)})).max(400)}),Cp=n.object({reserved:n.array(n.object({url:n.string(),upload:x}))}),wp=n.object({recordingId:n.uuid(),arrived:n.array(n.object({url:n.url(),etag:n.string().min(1).max(200),byteSize:n.number().int().min(1)})).max(400)}),Tp=n.object({missingAssetCount:n.number().int().min(0)}),Ep=n.object({canvasId:n.uuid(),recordingId:n.uuid()}),Dp=n.object({seq:n.number().int().min(0),firstEventMs:n.number().int().min(0),lastEventMs:n.number().int().min(0),continues:n.boolean()}),Op=n.discriminatedUnion(`state`,[Dp.extend({state:n.literal(`available`),download:Et}),Dp.extend({state:n.literal(`missing`)})]),kp=n.object({seq:n.number().int().min(0),firstMs:n.number().int().min(0),lastMs:n.number().int().min(0),epoch:n.number().int().min(0),startsEpoch:n.boolean()}),Ap=n.discriminatedUnion(`state`,[kp.extend({state:n.literal(`available`),download:Et}),kp.extend({state:n.literal(`missing`)})]),jp=n.object({recordingId:n.uuid(),durationMs:n.number().int().min(0),viewport:lp,sourceUrl:n.string(),interrupted:n.boolean(),integrity:vp,chunks:n.array(Op),audio:n.object({mimeType:n.string(),chunks:n.array(Ap)}).nullable(),assets:n.array(n.object({url:n.string(),contentType:n.string(),path:n.string().startsWith(`/v1/recording-assets/`)})),missingAssetCount:n.number().int().min(0),missingAssetUrls:n.array(n.string()).optional()}),Mp=n.object({recordingId:n.uuid(),track:yp,index:n.number().int().min(0)}),Np=n.object({upload:x}),Pp=Mp.extend({etag:n.string().min(1).max(200)}),Fp=n.object({integrity:vp}),Ip=n.object({canvasId:n.uuid()}),Lp=ae(xp),Rp=n.object({recordingId:n.uuid()}),zp=n.object({recordingId:n.uuid(),discarded:n.literal(!0)}),Bp=n.object({canvasId:n.uuid(),recordingId:n.uuid()}),Vp=n.object({recordingId:n.uuid(),detachedScreenCount:n.number().int().min(0)});[`[data-enhance-unsupported]:not([data-enhance-unsupported-hidden]):not([style*="display: none"]) {
10
+ align-items: center !important;
11
+ background-color: #f7f7f8 !important;
12
+ background-image: linear-gradient(to top right, transparent calc(50% - 1px), #a8a8b0 50%, transparent calc(50% + 1px)), linear-gradient(to bottom right, transparent calc(50% - 1px), #a8a8b0 50%, transparent calc(50% + 1px)) !important;
13
+ border: 1px solid #c7c7cc !important;
14
+ box-sizing: border-box !important;
15
+ color: #4f4f55 !important;
16
+ display: flex !important;
17
+ font: 500 14px/1.4 Inter, ui-sans-serif, system-ui, sans-serif !important;
18
+ justify-content: center !important;
19
+ overflow: hidden !important;
20
+ text-align: center !important;
21
+ }`,`[data-enhance-unsupported-hidden], [data-enhance-unsupported][style*="display: none"] {
22
+ display: none !important;
23
+ }`,`[data-enhance-unsupported]::after {
24
+ background: #f7f7f8 !important;
25
+ content: attr(data-enhance-unsupported) !important;
26
+ padding: 4px 8px !important;
27
+ }`,`iframe[data-enhance-unsupported="Embedded content not supported"] {
28
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='260' height='44'%3E%3Crect width='260' height='44' rx='6' fill='%23f7f7f8'/%3E%3Ctext x='130' y='27' text-anchor='middle' font-family='Arial,sans-serif' font-size='14' font-weight='500' fill='%234f4f55'%3EEmbedded%20content%20not%20supported%3C/text%3E%3C/svg%3E"), linear-gradient(to top right, transparent calc(50% - 1px), #a8a8b0 50%, transparent calc(50% + 1px)), linear-gradient(to bottom right, transparent calc(50% - 1px), #a8a8b0 50%, transparent calc(50% + 1px)) !important;
29
+ background-position: center, center, center !important;
30
+ background-repeat: no-repeat !important;
31
+ }`].join(`
32
+ `);const Hp=n.object({clientToken:n.uuid(),provenance:n.object({sourceRecordingId:n.uuid(),atMs:n.number().int().min(0)}).nullable(),route:n.string().nullable(),pageTitle:n.string().nullable(),viewport:n.object({width:n.number().int().positive(),height:n.number().int().positive()}),bytes:n.number().int().min(1).max(2**53-1)}),Up=n.object({screenId:n.uuid(),upload:x,alreadyExists:n.boolean(),state:n.enum([`pending`,`stored`])}),Wp=n.object({screenId:n.uuid(),etag:n.string().min(1).max(200)}),Gp=n.object({screenId:n.uuid(),storedBytes:n.number().int().min(1),uploadedAt:n.iso.datetime()}),Kp=n.object({screenId:n.uuid()}),qp=n.object({screenId:n.uuid(),deletedThreadCount:n.number().int().min(0)}),Jp=n.object({code:n.enum([`BAD_REQUEST`,`UNAUTHORIZED`,`FORBIDDEN`,`NOT_FOUND`,`CONFLICT`,`RATE_LIMITED`,`INTERNAL`]),message:n.string().min(1),fields:n.record(n.string(),n.string()).optional()}),Yp=e=>Jp.safeParse(e).success,I=(e,t,n)=>n===void 0?{code:e,message:t}:{code:e,message:t,fields:n},Xp=n.object({canvasId:n.uuid(),attemptId:n.uuid(),sourceNodeId:n.string().min(1),releaseIdentity:n.string().min(1).max(100),outcome:n.enum([`started`,`succeeded`,`blocked`,`failed`]),reason:n.enum([`none`,`pending-changes`,`source-unsettled`,`captured-fonts-unavailable`,`conversion-failed`]),durationMs:n.number().int().min(0).max(18e5)}),Zp=n.object({accepted:n.literal(!0)}),L=n.number().int().min(0).max(18e5),R=n.number().int().min(0).max(1e6),Qp={canvasId:n.uuid(),clientViewId:n.uuid(),releaseIdentity:n.string().min(1).max(100),capabilityVersion:n.number().int().min(1).max(16)},$p={longTaskCount:R,longTaskTotalMs:L,longestTaskMs:L,loafCount:R,loafTotalBlockingMs:L,loafLongestBlockingMs:L,loafStyleAndLayoutMs:L,loafTopScriptMs:L,loafTopScriptSource:n.enum([`app`,`extension`,`third-party`,`unknown`])},em=n.discriminatedUnion(`name`,[n.object({...Qp,...$p,name:n.literal(`canvas_load`),outcome:n.enum([`ready`,`slow`,`degraded`,`timed-out`]),bottleneck:n.enum([`metadata`,`projection`,`sources`,`replays`]),durationMs:L,shellMs:L,projectionMs:L,sourcesMs:L,replaysMs:L,nodeCount:R,recordingCount:R,screenCount:R,replayCount:R,unavailableSourceCount:R,assetFailureCount:R,apiRequestCount:R,apiLongestMs:L,mirroredAssetRequestCount:R,mirroredAssetUniqueCount:R,mirroredAssetTransferBytes:n.number().int().min(0).max(1073741824)}),n.object({...Qp,...$p,name:n.literal(`canvas_interaction`),kind:n.enum([`pan`,`zoom`,`drag`,`edit`]),outcome:n.enum([`smooth`,`janky`]),durationMs:L,frameCount:R,slowFrameCount:R,worstFrameMs:L,nodeCount:R,replayCount:R}),n.object({...Qp,name:n.literal(`canvas_realtime`),kind:n.enum([`room-ready`,`reconnect`,`recovery`]),outcome:n.enum([`succeeded`,`failed`]),reason:n.enum([`initial`,`transport`,`snapshot`,`gap`,`replace`,`relay`,`history-restored`]),durationMs:L})]),tm=n.object({accepted:n.literal(!0)}),nm={incidentId:n.uuid(),releaseIdentity:n.string().min(1).max(100),reason:n.enum([`render-loop`,`render-error`])},rm=n.discriminatedUnion(`surface`,[n.object({...nm,surface:n.literal(`canvas`),canvasId:n.uuid()}),n.object({...nm,surface:n.literal(`application`)})]),im=n.object({accepted:n.literal(!0)});n.discriminatedUnion(`type`,[n.object({type:n.literal(`enhance3:extension-probe`)}).strict(),n.object({type:n.literal(`enhance3:extension-present`)}).strict()]);const am=n.enum([`content`,`popup`,`worker`,`offscreen`,`synthetic`]),om=n.uuid(),sm=n.string().regex(/^[\w.-]{1,64}$/u),cm=n.enum([`0`,`1`,`2-5`,`6-25`,`26+`]),lm=n.number().int().min(0).max(18e5),um={correlationId:om,extensionRelease:sm,capabilityVersion:n.number().int().min(1).max(16),context:am},dm=n.discriminatedUnion(`name`,[n.object({...um,name:n.literal(`context_lifecycle`),outcome:n.enum([`opened`,`ready`,`closed`,`open-failed`,`close-failed`])}),n.object({...um,name:n.literal(`screen_preview`),outcome:n.enum([`ready`,`unavailable`,`failed`]),source:n.enum([`button`,`shortcut`]),durationMs:lm,messageBytes:n.number().int().min(0).max(67108864)}),n.object({...um,name:n.literal(`authentication`),state:n.enum([`signed-in`,`signed-out`,`invalid`,`unknown`])}),n.object({...um,name:n.literal(`destination_request`),outcome:n.enum([`succeeded`,`empty`,`failed`]),latencyMs:lm,resultCountBucket:cm,retryOutcome:n.enum([`not-retried`,`retry-succeeded`,`retry-failed`])}),n.object({...um,name:n.literal(`destination_picker`),outcome:n.enum([`options`,`blank`,`error`]),optionCountBucket:cm}),n.object({...um,name:n.literal(`recording_transition`),state:n.enum([`starting`,`recording`,`stopping`,`landed`,`failed`,`cancelled`,`reloaded`]),terminalReason:n.enum([`none`,`completed`,`failed`,`cancelled`,`tab-closed`,`worker-reloaded`,`start-timeout`,`session-rejected`])}),n.object({...um,name:n.literal(`microphone_session`),outcome:n.enum([`opened`,`refused`,`closed`,`still-active`]),durationMs:lm,activeAudioTrackCount:n.number().int().min(0).max(8)}),n.object({...um,name:n.literal(`microphone_permission`),standing:n.enum([`prompt`,`granted`,`denied`,`unknown`]),outcome:n.enum([`observed`,`request-started`,`granted`,`denied`,`refused`,`no-device`,`in-use`,`unavailable`,`settings-opened`])}),n.object({...um,name:n.literal(`recording_cleanup`),outcome:n.enum([`released`,`still-active`,`incomplete`]),terminalReason:n.enum([`completed`,`failed`,`cancelled`,`tab-closed`,`worker-reloaded`,`start-timeout`,`session-rejected`]),mediaRecorderState:n.enum([`not-created`,`inactive`,`recording`,`paused`,`unknown`]),activeAudioTrackCount:n.number().int().min(0).max(8),audioContextState:n.enum([`not-created`,`closed`,`running`,`suspended`,`interrupted`,`unknown`]),offscreenDocumentState:n.enum([`open`,`closed`,`not-open`,`unknown`])}),n.object({...um,name:n.literal(`synthetic_stage`),stage:n.enum([`release-identity`,`authentication`,`destination-list`,`recording-start`,`recording-landed`,`microphone-release`]),outcome:n.enum([`passed`,`failed`]),durationMs:lm})]),fm=n.object({accepted:n.literal(!0)}),pm=n.object({canvasId:n.uuid(),recordingId:n.uuid()}),mm=pm,hm=n.object({sequence:n.number().int().min(0),startMs:n.number().int().min(0),endMs:n.number().int().min(0),text:n.string().min(1)}),gm=n.object({state:n.literal(`processing`),hasPublishedTranscript:n.boolean()}),_m=n.object({state:n.literal(`ready`),languageCode:n.string().min(1),integrity:n.enum([`whole`,`partial`]),isRefreshing:n.boolean(),cues:n.array(hm)}),vm=n.object({state:n.literal(`empty`),reason:n.enum([`no-audio`,`too-short`,`audio-missing`,`no-speech`])}),ym=n.object({state:n.literal(`failed`),canRetry:n.boolean()}),bm=n.discriminatedUnion(`state`,[gm,_m,vm,ym]),xm=pm,Sm=gm;var z=class extends Error{code;remediation;fields;constructor(e,t,n,r){super(t),this.name=`CliError`,this.code=e,this.remediation=n,this.fields=r}},Cm=class extends z{constructor(e,t){super(`INTERNAL`,e,t),this.name=`PartialBatchError`}};const wm=e=>e.pageId!==void 0||e.nodeIds.length>0,Tm=e=>{let t=Vo(e);if(t.ok)return t.value;throw new z(`BAD_REQUEST`,`The canvas link contains an invalid or unsupported ${t.reason}.`,`Copy a current canvas, page or selection link. Recording and version links require their dedicated commands; do not discard their scope.`)},Em=e=>{let t=Tm(e);if(wm(t))throw new z(`BAD_REQUEST`,`This command cannot discard the link ${t.nodeIds.length>0?`selection`:`page`}.`,`Use canvas tree, a scoped render or a targeted edit. Use a canvas URL without page or selection only when the request covers the whole canvas.`);return t.canvasId},Dm=(e,t)=>{if(!wm(e))return new Set;let n=Yo(e,t);if(n.ok)return n.nodeIds;let r=n.reason;throw new z(r===`page`||r===`selection`?`NOT_FOUND`:`BAD_REQUEST`,`The link ${r} is unavailable or inconsistent: ${e.nodeIds.join(`, `)}${e.pageId===void 0?``:` on page ${e.pageId}`}.`,`Copy a current link. Keep its complete page and selection; do not substitute or broaden the target.`)},Om=(e,t,n)=>{if(!wm(e))return;let r=Dm(e,t);km(r,n)},km=(e,t)=>{let n=t.filter(t=>!e.has(t));if(n.length>0)throw new z(`BAD_REQUEST`,`These nodes are outside the link selection: ${n.join(`, `)}.`,`Limit the edit to the selected nodes and their descendants. Request a wider selection only when the person wants a wider change.`)},Am=(e,t,n)=>{if(!wm(e))return n;let r=Dm(e,t),i=n.kind===`node`?n.nodeId:n.kind===`content`&&e.nodeIds.length===1?e.nodeIds[0]:void 0;if(i!==void 0)return km(r,[i]),{kind:`node`,nodeId:i};if(e.nodeIds.length===0&&e.pageId!==void 0&&(n.kind===`content`||n.kind===`page`&&n.pageId===e.pageId))return{kind:`page`,pageId:e.pageId};throw new z(`BAD_REQUEST`,`This render target would discard the link page or selection.`,`Render the linked page, or choose one node within the selection. Bounds and other pages may include unrelated content.`)},jm=n.string().min(1),Mm=n.array(jm).min(1),Nm=n.array(n.discriminatedUnion(`kind`,[n.object({kind:n.literal(`set_text`),nodeId:jm,text:n.string()}),n.object({kind:n.literal(`set_styles`),nodeIds:Mm,styles:n.record(n.string(),n.union([n.string(),n.number(),n.null()]))}),n.object({kind:n.literal(`rename`),nodeId:jm,name:n.string().trim().min(1)}),n.object({kind:n.literal(`duplicate`),nodeIds:Mm,parentId:jm.optional()}),n.object({kind:n.literal(`move`),nodeId:jm,destination:n.discriminatedUnion(`kind`,[n.object({kind:n.literal(`before`),nodeId:jm}),n.object({kind:n.literal(`after`),nodeId:jm}),n.object({kind:n.literal(`parent`),parentId:jm,index:n.number().int().nonnegative().optional()})])})])).min(1),Pm=n.object({canvas:n.string().min(1).describe(`Canvas UUID or full canvas/selection URL; selection limits the entire edit batch.`),baseVersion:n.number().int().positive().describe(`Exact version to edit, including the version returned by a previous successful write.`),edits:Nm.describe(`Sequential text, style, rename, duplicate or move edits, committed atomically. Target existing node IDs.`)}),Fm=n.strictObject({canvasRef:n.string().min(1),baseVersion:n.number().int().positive(),destination:n.strictObject({parentNodeId:C.shape.id.describe(`Existing editable container, or root for top-level insertion. Preserve page and selection scope.`)}),html:n.string().min(1).describe(`One populated, safe HTML/CSS visual group. Use authored positioning in the HTML for placement. The canonical compiler assigns fresh IDs.`),waitMs:n.number().int().min(0).max(5e3).default(1500).describe(`Additional polling after the initial server call; this does not bound initial compilation time.`),clientToken:n.uuid()}),Im=Fm.omit({clientToken:!0}),Lm=n.strictObject({...Fm.pick({canvasRef:!0,baseVersion:!0,waitMs:!0,clientToken:!0}).shape,sourceNodeId:C.shape.id.describe(`One existing captured screen. The original remains unchanged.`),placement:n.strictObject({kind:n.literal(`adjacent`)})}),Rm=Lm.omit({clientToken:!0}),zm=n.discriminatedUnion(`kind`,[n.strictObject({kind:n.literal(`personal`)}),n.strictObject({kind:n.literal(`team`),organisationId:n.uuid()})]),Bm=n.strictObject({collection:he.default(`everything`),title:fe.shape.title.optional(),includeDestinations:n.boolean().default(!0),limit:n.number().int().positive().max(50).default(25),cursor:n.string().min(1).max(16384).optional()}),Vm=n.discriminatedUnion(`kind`,[n.strictObject({kind:n.literal(`canvas`),canvasRef:n.uuid(),title:p.shape.title,organisationId:n.uuid().nullable(),accessState:p.shape.accessState,viewerCan:p.shape.viewerCan,openPath:n.string()}),n.strictObject({kind:n.literal(`destination`),destination:zm,name:n.string()})]),Hm=n.strictObject({items:n.array(Vm).max(50),returnedCount:n.number().int().nonnegative(),totalAvailable:n.number().int().nonnegative(),nextCursor:n.string().nullable(),complete:n.boolean(),sourceTruncated:n.strictObject({canvases:n.boolean(),destinations:n.boolean()}),warnings:n.array(n.string())}),Um=n.strictObject({protocol:n.literal(`enhance-canvas-find/1`),queryDigest:n.string(),snapshotDigest:n.string(),offset:n.number().int().nonnegative()}),Wm=n.strictObject({destination:zm,title:fe.shape.title,clientToken:n.uuid()}),Gm=n.strictObject({canvasRef:n.uuid(),title:p.shape.title,version:n.number().int().positive(),destination:zm,accessState:p.shape.accessState,openPath:n.string()}),Km=16384,qm=n.strictObject({view:n.literal(`resources`),limit:n.number().int().min(1).max(100).default(30),cursor:n.string().min(1).max(Km).optional()}),Jm=n.strictObject({nodeId:C.shape.id,kind:n.enum([`image`,`font`]),sourceDigest:n.string(),storage:n.enum([`canvas-image`,`canvas-font`,`recording-asset`,`inline`,`external`,`opaque`]),reference:n.string().nullable(),ownerId:n.string().nullable(),assetId:n.string().nullable(),delivery:n.literal(`not_checked`),metadata:n.strictObject({family:n.string().nullable(),style:n.string().nullable(),weight:n.string().nullable()}).nullable()}),Ym=n.strictObject({view:n.literal(`resources`),canvasId:n.uuid(),version:n.number().int().positive(),scope:n.strictObject({rootNodeIds:n.array(C.shape.id)}),coverage:n.literal(`authored-resource-slots`),complete:n.boolean(),total:n.number().int().nonnegative(),returnedCount:n.number().int().nonnegative(),resources:n.array(Jm).max(100),nextCursor:n.string().max(Km).nullable(),warnings:n.array(n.string())}),Xm=n.strictObject({protocol:n.literal(`enhance-canvas-resources/1`),canvasId:n.uuid(),version:n.number().int().positive(),digest:n.string(),offset:n.number().int().nonnegative()}),Zm=16384,Qm=n.number().int().nonnegative(),$m=n.strictObject({width:n.number().positive(),height:n.number().positive()}),eh=n.strictObject({startMs:Qm.default(0),endMs:Qm.optional(),limit:n.number().int().min(1).max(100).default(30),cursor:n.string().min(1).max(Zm).optional()}).refine(e=>e.endMs===void 0||e.endMs>e.startMs,{message:`endMs must be after startMs`}),th=n.strictObject({state:n.literal(`ready`),languageCode:n.string(),integrity:n.enum([`whole`,`partial`]),isRefreshing:n.boolean(),requestedRange:n.strictObject({startMs:Qm,endMs:Qm.nullable()}),cues:n.array(hm).max(100),returnedCount:n.number().int().nonnegative(),totalInRange:n.number().int().nonnegative(),omittedOutsideRange:n.number().int().nonnegative(),complete:n.boolean(),nextCursor:n.string().max(Zm).nullable()}),[nh,,rh,ih]=bm.options,ah=n.discriminatedUnion(`state`,[nh,rh,ih,th]),oh=n.strictObject({protocol:n.literal(`enhance-canvas-transcript/1`),digest:n.string(),offset:n.number().int().nonnegative()}),sh=n.discriminatedUnion(`kind`,[n.strictObject({kind:n.literal(`none`)}),n.strictObject({kind:n.literal(`screen`),screenId:n.string().nullable(),availability:n.enum([`available`,`pending`,`unavailable`,`inline-only`]),sourceUrl:n.string().nullable(),title:n.string().nullable(),viewport:$m,atMs:n.number(),recordingId:n.string().nullable(),missingAssetCount:n.number().int().nonnegative().nullable()}),n.strictObject({kind:n.literal(`recording`),recordingId:n.uuid(),durationMs:Qm,viewport:$m,sourceUrl:n.string(),interrupted:n.boolean(),integrity:n.enum([`whole`,`recovering`,`partial`]),chunkCount:n.number().int().nonnegative(),missingChunkCount:n.number().int().nonnegative(),hasAudio:n.boolean(),missingAssetCount:n.number().int().nonnegative()}),n.strictObject({kind:n.literal(`prototype`),prototypeId:n.uuid(),deploymentId:n.uuid(),state:n.enum([`uploading`,`queued`,`ingesting`,`ready`,`failed`,`abandoned`]),fileCount:n.number().int().nonnegative()}),n.strictObject({kind:n.literal(`conversion`),recordingId:n.string().nullable(),nodeCount:n.number().int().positive().nullable(),issueCounts:n.record(n.string(),n.number().int().nonnegative())})]),ch=1e3,B=C.shape.id,lh=n.string().min(1).describe(`Canvas UUID or full canvas/selection URL. Preserve the supplied scope.`),uh=n.number().int().positive(),dh=n.string().min(1).max(16384),fh={canvasRef:lh,expectedVersion:uh.optional()},ph=n.discriminatedUnion(`view`,[qm.extend(fh),n.strictObject({...fh,view:n.literal(`editable`),rootNodeId:B}),n.strictObject({...fh,view:n.literal(`source`),nodeId:B,transcript:eh.optional()}),n.strictObject({...fh,view:n.literal(`outline`),rootNodeIds:n.array(B).min(1).max(ch).optional(),depth:n.number().int().min(0).max(64).default(2),limit:n.number().int().min(1).max(100).default(50),cursor:dh.optional()})]).meta({type:`object`}),mh=n.strictObject({canvasRef:lh,waitMs:n.number().int().min(0).max(5e3).default(1500).describe(`Additional polling for native HTML compilation. Preparation alone never commits.`),snapshotToken:dh,html:n.string().min(1),removeNodeIds:n.array(B).max(ch).default([]),clientToken:n.uuid().describe(`Caller-generated intent ID. Reuse unchanged after an uncertain outcome.`)}),hh=n.strictObject({protocol:n.literal(`enhance-canvas-editable/1`),canvasId:n.uuid(),version:uh,rootNodeId:B,scopeNodeIds:n.array(B).max(ch),scopePageId:n.string().nullable(),digest:n.string().regex(/^[a-f0-9]{64}$/u)}),gh=n.strictObject({protocol:n.literal(`enhance-canvas-outline/1`),canvasId:n.uuid(),version:uh,queryDigest:n.string().regex(/^[a-f0-9]{64}$/u),offset:n.number().int().nonnegative()}),_h={canvasId:n.uuid(),version:uh,scope:n.strictObject({rootNodeIds:n.array(B)}),warnings:n.array(n.string())},vh=n.strictObject({..._h,view:n.literal(`editable`),complete:n.literal(!0),projectionVersion:n.literal(1),snapshotToken:dh,rootNodeId:B,html:n.string(),opaqueNodeIds:n.array(B)}),yh=n.strictObject({..._h,view:n.literal(`outline`),complete:n.boolean(),returnedCount:n.number().int(),total:n.number().int(),nextCursor:dh.nullable(),omittedDescendants:n.boolean(),nodes:n.array(n.strictObject({id:B,label:n.string(),kind:n.string(),parentId:B.nullable(),sortKey:n.string().nullable(),depth:n.number().int(),childCount:n.number().int(),childrenOmitted:n.boolean(),locked:n.boolean(),visible:n.boolean(),editable:n.boolean(),bounds:S.nullable()})).max(100)}),bh=n.strictObject({..._h,view:n.literal(`source`),nodeId:B,source:sh,transcript:ah.nullable(),complete:n.boolean(),pixelsInspected:n.literal(!1)}),xh=n.discriminatedUnion(`view`,[vh,yh,bh,Ym]).meta({type:`object`}),Sh=mh.omit({clientToken:!0}),Ch=n.strictObject({canvasRef:n.string().min(1),baseVersion:n.number().int().positive(),rootNodeIds:n.array(C.shape.id).min(1),clientToken:n.uuid()}),wh=Ch.omit({clientToken:!0}),Th=n.object({jobId:n.uuid(),operation:n.object({kind:n.literal(`canvas-render`),canvasId:n.uuid(),jobId:n.uuid()}).optional(),canvasId:n.uuid(),requestedVersion:n.number().nullable(),loadedVersion:n.number(),target:w,sourceState:sr.nullable(),bounds:S,width:n.number(),height:n.number(),scale:n.number(),contentType:n.literal(`image/png`),bytes:n.number(),warnings:n.array(mr),path:n.string().min(1),sensitive:n.literal(!0),cleanup:n.enum([`unlink-after-use`,`caller-owned`]),deleteAfter:n.string().optional()}),Eh=n.strictObject({canvasRef:n.string().min(1),expectedVersion:n.number().int().positive(),target:n.discriminatedUnion(`kind`,[w.options[0].strict(),w.options[1].strict(),w.options[2].strict(),w.options[3].strict().extend({bounds:w.options[3].shape.bounds.strict()})]),sourceState:or.strict().nullable().default(null),scale:n.number().positive().default(1),waitMs:n.number().int().min(0).max(5e3).default(1500).describe(`Additional local polling after the server returns an active job; render creation retains its existing bounded HTTP deadline.`)}),Dh=Eh.pick({canvasRef:!0,expectedVersion:!0,waitMs:!0}).extend({targets:n.array(Eh.pick({target:!0,sourceState:!0,scale:!0}).extend({id:n.string().min(1).max(80),maxOutputPixels:ir.optional().describe(`Optional requested pixel budget for this target.`)})).min(1)}).refine(e=>new Set(e.targets.map(e=>e.id)).size===e.targets.length,{path:[`targets`],message:`Each render target needs a unique id.`}),Oh=n.object({state:n.enum([`queued`,`running`]),phase:n.string(),canvasId:n.uuid(),requestedVersion:n.number().int().positive(),target:Eh.shape.target,operation:n.object({kind:n.literal(`canvas-render`),canvasId:n.uuid(),jobId:n.uuid()}),pixelsDelivered:n.literal(!1),next:n.array(n.string())}),kh=n.object({kind:n.literal(`canvas-render-batch`),canvasId:n.uuid(),requestedVersion:n.number().int().positive(),complete:n.boolean(),renderedPixels:n.number().int().nonnegative(),results:n.array(n.object({id:n.string(),target:Eh.shape.target,maxOutputPixels:ir.optional(),outcome:n.union([Th,Oh,n.object({state:n.enum([`failed`,`cancelled`,`expired`,`not_confirmed`,`not_started`]),operation:Oh.shape.operation.optional(),error:n.object({code:n.string(),message:n.string(),remediation:n.string(),fields:n.record(n.string(),n.string()).optional()})})])})).min(1),next:n.array(n.string())}),Ah=n.union([Eh,Dh]).meta({type:`object`}),jh=n.union([Eh.extend({clientToken:n.uuid()}),Dh.safeExtend({clientToken:n.uuid()})]).meta({type:`object`}),V=`00000000-0000-4000-8000-000000000010`,Mh=n.object({canvas:n.string().min(1).describe(`Complete canvas, page or selection URL, or canvas UUID. Preserve the supplied scope.`),nodeId:n.string().min(1).optional().describe(`Optional subtree within the supplied page or selection.`)}),Nh=n.object({canvasId:n.uuid(),version:n.number().int().positive(),pageId:n.string().nullable(),source:n.enum([`canvas-link`,`page-link`,`selection-link`]),selectedNodeIds:n.array(n.string()),rootNodeIds:n.array(n.string()),nodeCount:n.number().int().nonnegative(),nodes:n.array(C.extend({kind:n.string(),parentId:n.string().nullable(),children:n.array(n.string())})),next:n.array(n.string())}),Ph=Aa.omit({mutationId:!0,documentFormatVersion:!0}),Fh=n.object({canvasId:n.uuid(),expectedVersion:n.number().int().positive().nullable().describe(`Exact document version to render, or null to accept the current version.`),target:w.describe(`Area to render: all authored content, one stable node id, or explicit world-space bounds.`),sourceState:or.nullable().describe(`Recording moment to display while rendering its recording node, or null.`),scale:n.number().positive().describe(`Output pixels per canvas unit.`),outputPath:n.string().min(1).nullable().describe(`Local PNG path, or null for a protected temporary artifact.`),overwrite:n.boolean().describe(`Whether an existing outputPath may be replaced.`),timeoutMs:n.number().int().positive().describe(`Local render polling deadline in milliseconds.`),timeoutOutcome:n.literal(`pending`).optional(),scope:n.strictObject({pageId:n.string().optional(),nodeIds:n.array(n.string())}).optional()}),Ih=n.object({canvasId:n.uuid(),pageId:n.string().min(1).optional().describe(`Page from the complete canvas URL; the destination must belong to this page.`),selectionNodeIds:n.array(n.string().min(1)).optional().describe(`Selected node IDs from the canvas URL; restrict the destination to this selection.`),targetNodeId:n.string().min(1).describe(`Stable container id for insert-children, or subtree root id for replace.`),mode:n.enum([`insert-children`,`replace`]).describe(`Insert the compiled group inside the target, or replace the target subtree.`),html:n.string().min(1).describe(`Exactly one safe top-level HTML/CSS visual group to compile into editable nodes.`),idPrefix:n.string().min(1).optional().describe(`Optional namespace for generated IDs. Choose a fresh prefix for each new import or replacement; reuse only for an identical retry.`),baseVersion:n.number().int().positive(),review:n.enum([`none`,`render`]).optional().describe(`Use none to return the committed edit without rendering; omission preserves combined review.`),renderOutputPath:n.string().min(1).nullable().describe(`Local review PNG path, or null for a protected temporary artifact.`),overwriteRender:n.boolean().describe(`Whether an existing renderOutputPath may be replaced.`),renderScale:n.number().positive().describe(`Review PNG pixels per canvas unit.`),renderTimeoutMs:n.number().int().positive().describe(`Local import and review-render polling deadline in milliseconds.`)}),Lh=n.object({canvasId:n.uuid()}),Rh=n.object({canvasId:n.uuid(),prototypeId:n.uuid().nullable().describe(`Existing prototype id to redeploy, or null to create one.`),nodeId:n.string().min(1),title:n.string().min(1),directory:n.string().min(1).describe(`Absolute local directory containing the built prototype.`),entryPath:n.string().min(1).describe(`HTML entry file path relative to directory, normally index.html.`),baseVersion:n.number().int().positive(),box:n.object({x:n.number(),y:n.number(),width:n.number().positive(),height:n.number().positive()}).describe(`World-space position and size for the prototype node on the canvas.`)}),zh=n.object({canvasId:n.uuid(),recordingId:n.uuid(),atMs:n.number().int().nonnegative().describe(`Visually reviewed recording timestamp to persist, in milliseconds.`),timeoutMs:n.number().int().positive().describe(`Local snapshot polling deadline in milliseconds.`)}),Bh=n.object({canvasId:n.uuid(),recordingId:n.uuid()}),Vh=[{id:`canvas.edit`,cliPath:`canvas edit`,operation:`mutation`,effect:`write`,idempotency:`single`,inputSchema:Pm,outputSchema:ja,summary:`Change selected text, styles, names, duplicates, or positions in one atomic design edit.`,procedures:[`canvas.document.get`,`canvas.realtime.activity.begin`,`canvas.realtime.activity.renew`,`canvas.realtime.activity.end`,`canvas.applyOperations`],inputExample:{canvas:V,baseVersion:1,edits:[{kind:`set_text`,nodeId:`text_title`,text:`Today`}]},outputExample:{canvasId:V,mutationId:V,previousVersion:1,version:2,operations:[{op:`setText`,nodeId:`text_title`,text:`Today`}],insertedNodeIds:[],changedNodeIds:[`text_title`],removedNodeIds:[],boxes:{},affectedBounds:null,next:[]}},{id:`canvas.apply`,cliPath:`canvas apply`,operation:`mutation`,effect:`write`,idempotency:`single`,inputSchema:Ph,outputSchema:ja,summary:`Atomically apply bounded canvas edits and report their exact affected state.`,procedures:[`canvas.realtime.activity.begin`,`canvas.realtime.activity.renew`,`canvas.realtime.activity.end`,`canvas.applyOperations`],inputExample:{canvasId:V,baseVersion:1,operations:[{op:`setText`,nodeId:`text_title`,text:`Ready`}]},outputExample:{canvasId:V,mutationId:V,previousVersion:1,version:2,operations:[{op:`setText`,nodeId:`text_title`,text:`Ready`}],insertedNodeIds:[],changedNodeIds:[`text_title`],removedNodeIds:[],boxes:{},affectedBounds:null,next:[`Inspect version 2.`]}},{id:`canvas.render`,cliPath:`canvas render`,operation:`mutation`,effect:`read`,idempotency:`single`,inputSchema:n.union([Ah,Fh]).meta({type:`object`}),outputSchema:n.union([kh,n.looseObject({state:n.enum([`queued`,`running`]),operation:n.object({kind:n.literal(`canvas-render`),canvasId:n.uuid(),jobId:n.uuid()})}),n.looseObject({jobId:n.uuid(),canvasId:n.uuid(),loadedVersion:n.number().int().positive(),contentType:n.literal(`image/png`),bytes:n.number().int().positive(),path:n.string().min(1),sensitive:n.literal(!0),next:n.array(n.string())})]).meta({type:`object`}),summary:`Render production-faithful canvas pixels into a protected PNG artifact.`,procedures:[`canvas.render.create`,`canvas.render.get`,`canvas.render.download`],inputExample:{canvasId:V,expectedVersion:1,target:{kind:`content`},sourceState:null,scale:1,outputPath:null,overwrite:!1,timeoutMs:12e4},outputExample:{jobId:V,canvasId:V,loadedVersion:1,contentType:`image/png`,bytes:68,path:`/protected/render.png`,sensitive:!0,next:[`Inspect the PNG.`]}},{id:`canvas.writeHtml`,cliPath:`canvas write-html`,operation:`mutation`,effect:`write`,idempotency:`composite`,inputSchema:Ih,outputSchema:n.union([n.looseObject({canvasId:n.uuid(),mutationCommitted:n.literal(!0),previousVersion:n.number().int().positive(),version:n.number().int().positive(),rootNodeId:n.string().optional(),jobId:n.uuid().optional(),affected:n.object({inserted:n.number(),changed:n.number(),removed:n.number()}).optional(),createdNodes:n.array(n.object({id:n.string(),name:n.string(),component:n.string()})).optional(),removedNodeIds:n.array(n.string()),next:n.array(n.string()).optional()}),n.object({state:n.literal(`pending`),canvasId:n.uuid(),jobId:n.uuid(),phase:n.string(),status:n.object({tool:n.literal(`capability_query`),arguments:n.object({capability:n.literal(`canvas.render.getImport`),input:n.object({jobId:n.uuid()})})})})]),summary:`Design an editable screen or visual group from HTML and CSS. Use review none for a fast commit, then render after the intended edits.`,procedures:[`canvas.realtime.activity.begin`,`canvas.realtime.activity.renew`,`canvas.realtime.activity.end`,`canvas.document.get`,`canvas.render.importSource`,`canvas.render.getImport`,`canvas.render.create`,`canvas.render.get`,`canvas.render.download`],inputExample:{canvasId:V,targetNodeId:`root`,mode:`insert-children`,html:`<div layer-name="Ready" style="display:flex;flex-direction:column;gap:16px;padding:24px;width:360px;background:#fff"><h1 style="font-size:24px">Today</h1><p>Three tasks ready to start</p><div style="padding:16px;background:#eef2ff">Review the design</div></div>`,review:`none`,idPrefix:`example`,baseVersion:1,renderOutputPath:null,overwriteRender:!1,renderScale:1,renderTimeoutMs:12e4},outputExample:{canvasId:V,mutationCommitted:!0,previousVersion:1,version:2,rootNodeId:`example_ready_0001`,jobId:V,affected:{inserted:4,changed:0,removed:0},insertedNodeIds:[`example_ready_0001`,`example_text_0002`,`example_text_0003`,`example_text_0004`],affectedBounds:{x:0,y:0,width:360,height:180},removedNodeIds:[]}}],Hh=n.strictObject({...Eh.pick({canvasRef:!0,waitMs:!0}).shape,baseVersion:n.number().int().positive(),source:n.strictObject({kind:n.literal(`recording`),recordingId:n.uuid(),atMs:n.number().int().nonnegative()}),previewJobId:n.uuid().describe(`The successful canvas_render job whose pixels you inspected at this exact recording time and canvas version.`),placement:Dr.shape.placement}),Uh=Hh.extend({clientToken:n.uuid()}),Wh=n.strictObject({operation:n.strictObject({kind:n.literal(`canvas-render`),canvasId:n.uuid(),jobId:n.uuid()}),state:n.enum([`queued`,`running`,`succeeded`,`failed`,`cancelled`,`expired`]),requestedVersion:n.number().int().positive(),source:Hh.shape.source,attachment:n.enum([`pending`,`committed`,`not_confirmed`]),result:cr.nullable(),failure:hr.nullable(),warningCount:n.number().int().nonnegative(),warnings:n.array(n.string())}),Gh=C.shape.id,Kh=n.strictObject({kind:n.literal(`canvas-mutation`),canvasId:n.uuid(),mutationId:n.uuid(),fingerprint:n.string().regex(/^[a-f0-9]{64}$/u)}),qh=n.discriminatedUnion(`outcome`,[n.strictObject({outcome:n.literal(`no_op`),canvasId:n.uuid(),version:n.number().int().positive(),verification:n.strictObject({rendered:n.literal(!1)}),warnings:n.array(n.string())}),n.strictObject({outcome:n.literal(`committed`),canvasId:n.uuid(),mutationId:n.uuid(),previousVersion:n.number().int().positive(),version:n.number().int().positive(),operation:Kh,identities:n.strictObject({entries:n.array(n.strictObject({sourceNodeId:Gh,nodeId:Gh})),complete:n.boolean(),total:n.number().int().nonnegative()}).optional(),affected:n.strictObject({insertedNodeIds:n.array(Gh),changedNodeIds:n.array(Gh),removedNodeIds:n.array(Gh),complete:n.boolean(),total:n.number().int().nonnegative()}),verification:n.strictObject({rendered:n.literal(!1)}),warnings:n.array(n.string())})]).meta({type:`object`}),Jh={canvasRef:n.string().min(1),baseVersion:n.number().int().positive(),waitMs:n.number().int().min(0).max(5e3).default(1500).describe(`Additional polling after the initial server call; this does not bound initial native preparation time.`),clientToken:n.uuid()},Yh=n.strictObject({...Jh,changes:qa.shape.changes}),Xh=n.strictObject({...Jh,nodeIds:Ja.shape.nodeIds,destination:Ja.shape.destination}),Zh=Yh.omit({clientToken:!0}),Qh=Xh.omit({clientToken:!0}),$h=n.strictObject({kind:n.literal(`canvas-preparation`),canvasId:n.uuid(),jobId:n.uuid(),mutationId:n.uuid(),fingerprint:Kh.shape.fingerprint}),eg=n.strictObject({kind:n.literal(`canvas-preparation`),operation:$h,state:dr,phase:ur,requestedVersion:n.number().int().positive(),failure:hr.nullable(),outcome:n.literal(`not_confirmed`),prepared:n.boolean(),warnings:n.array(n.string())}),tg=n.union([qh,eg]).meta({type:`object`}),ng=Kt.extend({kind:n.literal(`canvas-asset`)}),rg=n.strictObject({...Eh.pick({canvasRef:!0}).shape,source:n.strictObject({kind:n.literal(`file`),path:n.string().min(1).describe(`Explicit local file path. PNG, JPEG, GIF, WebP, AVIF, TTF, OTF, WOFF or WOFF2.`)})}),ig=rg.extend({clientToken:n.uuid()}),ag=n.strictObject({operation:ng,resource:Yt.safeExtend({state:n.literal(`ready`),metadata:Yt.shape.metadata.unwrap()}),placement:n.literal(`not_requested`)}),og=n.strictObject({kind:n.literal(`canvas-asset`),operation:ng,resource:Yt,placement:n.literal(`not_checked`)}),sg=n.strictObject({kind:n.literal(`canvas-render`),canvasId:n.uuid(),jobId:n.uuid()}),cg=n.strictObject({kind:n.literal(`canvas-conversion`),canvasId:n.uuid(),jobId:n.uuid()}),lg=n.strictObject({kind:n.literal(`prototype-deployment`),canvasId:n.uuid(),deploymentId:n.uuid()}),ug=n.discriminatedUnion(`kind`,[ng,Kh,sg,cg,$h,lg]),dg=n.strictObject({operation:ug,includeImage:n.boolean().default(!1),offset:n.number().int().nonnegative().default(0),limit:n.number().int().positive().max(100).default(100)}),fg={total:n.number().int().nonnegative(),offset:n.number().int().nonnegative(),nextOffset:n.number().int().nonnegative().nullable(),complete:n.boolean()},pg=n.discriminatedUnion(`change`,[n.strictObject({nodeId:n.string(),change:n.enum([`inserted`,`changed`,`removed`])}),n.strictObject({nodeId:n.string(),change:n.literal(`copied`),sourceNodeId:n.string()})]),mg=n.discriminatedUnion(`kind`,[n.strictObject({kind:n.literal(`inserted`),nodeId:n.string()}),n.strictObject({kind:n.literal(`removed`),nodeId:n.string()}),n.strictObject({kind:n.literal(`identity`),temporaryId:n.string(),nodeId:n.string()}),n.strictObject({kind:n.literal(`issue`),issue:qn})]),hg={state:dr,phase:ur,requestedVersion:n.number().int().positive(),failure:hr.nullable()},gg=n.strictObject(_r.shape).omit({warnings:!0,timings:!0}).extend({warningCount:n.number().int().nonnegative(),timingCount:n.number().int().nonnegative()}),_g=n.discriminatedUnion(`kind`,[n.strictObject({kind:n.literal(`warning`),warning:mr}),n.strictObject({kind:n.literal(`timing`),timing:gr})]),vg=n.strictObject({kind:n.literal(`canvas-conversion`),...hg,operation:cg,destination:jr,result:n.strictObject({mutationId:n.uuid(),previousVersion:n.number().int().positive(),version:n.number().int().positive(),rootNodeId:n.string(),affectedBounds:S,insertedCount:n.number().int().nonnegative(),removedCount:n.number().int().nonnegative(),identityCount:n.number().int().nonnegative(),issueCount:n.number().int().nonnegative()}).nullable(),details:n.strictObject({...fg,entries:n.array(mg).max(100)}),warnings:n.array(n.string())}),yg=n.union([og,n.strictObject({kind:n.literal(`canvas-mutation`),state:n.literal(`not_found`),operation:Kh,outcome:n.literal(`unknown`),warnings:n.array(n.string())}),n.strictObject({kind:n.literal(`canvas-mutation`),state:n.literal(`committed`),receipt:qh,affected:n.strictObject({...fg,entries:n.array(pg).max(100)})}),n.strictObject({kind:n.literal(`canvas-render`),...hg,operation:sg,target:w,sourceState:or.nullable(),evidence:gg.nullable(),details:n.strictObject({...fg,entries:n.array(_g).max(100)}),pixelsDelivered:n.boolean(),imageContentIndex:n.number().int().nonnegative().optional(),warnings:n.array(n.string())}),vg,eg,n.strictObject({kind:n.literal(`prototype-deployment`),operation:lg,publication:$f,attachment:n.literal(`not_checked`),warnings:n.array(n.string())})]).meta({type:`object`}),bg=n.strictObject({status:yg,localImage:Th}),xg=n.union([yg,bg]).meta({type:`object`}),Sg=[{id:`canvas.capture`,cliPath:`canvas capture`,operation:`mutation`,effect:`write`,idempotency:`single`,inputSchema:Hh,outputSchema:Wh,summary:`Freeze an inspected recording moment into a durable screen on its source page, holding the observed canvas revision through attachment.`,procedures:[`canvas.render.snapshot`,`canvas.render.get`],inputExample:{canvasRef:V,baseVersion:1,source:{kind:`recording`,recordingId:V,atMs:500},previewJobId:V,placement:{kind:`below-source`},waitMs:1500},outputExample:{operation:{kind:`canvas-render`,canvasId:V,jobId:V},state:`queued`,requestedVersion:1,source:{kind:`recording`,recordingId:V,atMs:500},attachment:`pending`,result:null,failure:null,warningCount:0,warnings:[]}},{id:`canvas.makeEditable`,cliPath:`canvas make-editable`,operation:`mutation`,effect:`write`,idempotency:`single`,inputSchema:Rm,outputSchema:vg,summary:`Convert one captured screen into an independent editable copy beside its source, preserving the original.`,procedures:[`canvas.render.importSource`,`canvas.render.getImport`],inputExample:{canvasRef:V,baseVersion:1,sourceNodeId:`screen`,placement:{kind:`adjacent`},waitMs:1500},outputExample:{kind:`canvas-conversion`,operation:{kind:`canvas-conversion`,canvasId:V,jobId:V},state:`queued`,phase:`queued`,requestedVersion:1,destination:{kind:`adjacent`},result:null,failure:null,details:{entries:[],total:0,offset:0,nextOffset:null,complete:!0},warnings:[]}},{id:`canvas.insertHtml`,cliPath:`canvas insert-html`,operation:`mutation`,effect:`write`,idempotency:`single`,inputSchema:Im,outputSchema:vg,summary:`Compile one populated HTML subtree and atomically insert it at an explicit, revision-checked destination.`,procedures:[`canvas.render.importSource`,`canvas.render.getImport`,`canvas.realtime.activity.begin`,`canvas.realtime.activity.renew`,`canvas.realtime.activity.end`],inputExample:{canvasRef:V,baseVersion:1,destination:{parentNodeId:`root`},html:`<div style="width:400px;height:200px">Hello</div>`,waitMs:1500},outputExample:{kind:`canvas-conversion`,operation:{kind:`canvas-conversion`,canvasId:V,jobId:V},state:`queued`,phase:`queued`,requestedVersion:1,destination:{kind:`insert-children`,targetNodeId:`root`},result:null,failure:null,details:{entries:[],total:0,offset:0,nextOffset:null,complete:!0},warnings:[]}}],Cg=[{id:`canvas.find`,cliPath:`canvas find`,operation:`query`,effect:`read`,idempotency:`none`,inputSchema:Bm,outputSchema:Hm,summary:`Find accessible canvases and existing creation destinations with bounded, permission-checked continuations.`,procedures:[`canvas.list`,`organisation.list`],inputExample:{collection:`everything`,includeDestinations:!0,limit:25},outputExample:{items:[{kind:`destination`,destination:{kind:`personal`},name:`Personal`}],returnedCount:1,totalAvailable:1,nextCursor:null,complete:!0,sourceTruncated:{canvases:!1,destinations:!1},warnings:[]}}],wg=e=>r(`sha256`).update(JSON.stringify(e)).digest(`hex`),Tg=e=>Buffer.from(JSON.stringify(e)).toString(`base64url`),Eg=(e,t)=>{try{let n=JSON.parse(Buffer.from(e,`base64url`).toString(`utf8`));return t.parse(n)}catch{throw new z(`BAD_REQUEST`,`The canvas snapshot or cursor is invalid or unsupported.`,`Repeat the read and use its complete token without changing it.`)}},Dg=e=>Tg({protocol:`enhance-canvas-editable/1`,canvasId:e.reference.canvasId,version:e.version,rootNodeId:e.rootNodeId,scopeNodeIds:e.reference.nodeIds.toSorted((e,t)=>e.localeCompare(t)),scopePageId:e.reference.pageId??null,digest:wg(e.html)}),Og=(e,t)=>{let n=Eg(e,hh);if(n.canvasId!==t.canvasId||n.scopePageId!==(t.pageId??null)||JSON.stringify(n.scopeNodeIds)!==JSON.stringify(t.nodeIds.toSorted((e,t)=>e.localeCompare(t))))throw new z(`BAD_REQUEST`,`The editable snapshot belongs to a different canvas, page or selection.`,`Use the original canvas reference and read a fresh complete subtree if its scope must change.`);return n},kg=[{id:`operation.status`,cliPath:`operation status`,operation:`query`,effect:`read`,idempotency:`none`,inputSchema:dg,outputSchema:xg,summary:`Read existing mutation, preparation, render, conversion or publication evidence without starting or resuming work.`,procedures:[`canvas.mutation.get`,`canvas.render.get`,`canvas.render.download`,`canvas.render.getImport`,`canvas.render.preparation.get`,`prototype.getPublishStatus`,`canvas.asset.get`],inputExample:{operation:{kind:`canvas-mutation`,canvasId:V,mutationId:V,fingerprint:wg(`status-example`)}},outputExample:{kind:`canvas-mutation`,state:`not_found`,operation:{kind:`canvas-mutation`,canvasId:V,mutationId:V,fingerprint:wg(`status-example`)},outcome:`unknown`,warnings:[`The original request may still be running.`]}},{id:`canvas.remove`,cliPath:`canvas remove`,operation:`mutation`,effect:`write`,idempotency:`single`,inputSchema:wh,outputSchema:qh,summary:`Remove explicitly named subtrees atomically, preserving locked content and link scope.`,procedures:[`canvas.document.get`,`canvas.mutation.get`,`canvas.applyOperations`,`canvas.realtime.activity.begin`,`canvas.realtime.activity.renew`,`canvas.realtime.activity.end`],inputExample:{canvasRef:V,baseVersion:1,rootNodeIds:[`obsolete`]},outputExample:{outcome:`committed`,canvasId:V,mutationId:V,previousVersion:1,version:2,operation:{kind:`canvas-mutation`,canvasId:V,mutationId:V,fingerprint:wg(`canvas-removal-example`)},affected:{insertedNodeIds:[],changedNodeIds:[],removedNodeIds:[`obsolete`],complete:!0,total:1},verification:{rendered:!1},warnings:[]}},{id:`canvas.read`,cliPath:`canvas read`,operation:`query`,effect:`read`,idempotency:`none`,inputSchema:n.union([ph,Mh.strict()]).meta({type:`object`}),outputSchema:n.union([xh,Nh]).meta({type:`object`}),summary:`Read linked canvas content as editable HTML, a version-bound outline, authored resources, or bounded source and transcript evidence.`,procedures:[`canvas.document.get`,`recording.get`,`prototype.getPublishStatus`,`transcript.get`],inputExample:{canvasRef:V,view:`outline`,depth:2,limit:50},outputExample:{canvasId:V,version:1,scope:{rootNodeIds:[`root`]},view:`outline`,complete:!0,returnedCount:1,total:1,nextCursor:null,omittedDescendants:!1,nodes:[{id:`root`,label:`Canvas`,kind:`root`,parentId:null,sortKey:null,depth:0,childCount:0,childrenOmitted:!1,locked:!1,visible:!0,editable:!0,bounds:null}],warnings:[]}},{id:`canvas.updateHtml`,cliPath:`canvas update-html`,operation:`mutation`,effect:`write`,idempotency:`single`,inputSchema:Sh,outputSchema:tg,summary:`Reconcile a complete editable HTML snapshot while preserving retained node identities and untouched authored values.`,procedures:[`canvas.document.get`,`canvas.mutation.get`,`canvas.applyOperations`,`canvas.render.preparation.create`,`canvas.render.preparation.get`,`canvas.realtime.activity.begin`,`canvas.realtime.activity.renew`,`canvas.realtime.activity.end`],inputExample:{canvasRef:V,snapshotToken:Dg({reference:{canvasId:V,nodeIds:[]},version:1,rootNodeId:`root`,html:`<div data-enhance-id="root" data-enhance-name="Canvas"></div>`}),html:`<div data-enhance-id="root" data-enhance-name="Canvas"></div>`,removeNodeIds:[]},outputExample:{outcome:`no_op`,canvasId:V,version:1,verification:{rendered:!1},warnings:[]}}],Ag=[{id:`canvas.arrange`,cliPath:`canvas arrange`,operation:`mutation`,effect:`write`,idempotency:`single`,inputSchema:Zh,outputSchema:tg,summary:`Arrange explicit canvas objects through native measured layout and one revision-checked commit.`,procedures:[`canvas.mutation.get`,`canvas.render.preparation.create`,`canvas.render.preparation.get`,`canvas.applyOperations`,`canvas.realtime.activity.begin`,`canvas.realtime.activity.renew`,`canvas.realtime.activity.end`],inputExample:{canvasRef:V,baseVersion:1,changes:[{kind:`position`,nodeId:`screen`,parentPosition:{x:40,y:40}}]},outputExample:{outcome:`no_op`,canvasId:V,version:1,verification:{rendered:!1},warnings:[]}},{id:`canvas.duplicateNodes`,cliPath:`canvas duplicate-nodes`,operation:`mutation`,effect:`write`,idempotency:`single`,inputSchema:Qh,outputSchema:tg,summary:`Duplicate explicit native canvas subtrees with retained resources and durable identity mappings.`,procedures:[`canvas.mutation.get`,`canvas.render.preparation.create`,`canvas.render.preparation.get`,`canvas.applyOperations`,`canvas.realtime.activity.begin`,`canvas.realtime.activity.renew`,`canvas.realtime.activity.end`],inputExample:{canvasRef:V,baseVersion:1,nodeIds:[`screen`],destination:{kind:`native`}},outputExample:{outcome:`no_op`,canvasId:V,version:1,verification:{rendered:!1},warnings:[]}}],jg=n.strictObject({kind:n.literal(`deployment`),deploymentId:n.uuid()}),Mg=n.strictObject({kind:n.literal(`build`),prototypeId:n.uuid().nullable().default(null),nodeId:Gf.shape.nodeId,title:Gf.shape.title,entryPath:Gf.shape.entryPath.default(`index.html`),box:S.strict().extend({width:n.number().positive(),height:n.number().positive()})}),Ng=Mg.extend({kind:n.literal(`directory`),directory:n.string().min(1)}),Pg=n.strictObject({...Eh.pick({canvasRef:!0}).shape,baseVersion:n.number().int().positive(),waitMs:Eh.shape.waitMs.describe(`Additional ingestion polling, capped at five seconds. This budget does not include packaging or network transfers.`),source:n.discriminatedUnion(`kind`,[Ng,jg])}),Fg=Pg.extend({clientToken:n.uuid()});Fg.extend({source:n.discriminatedUnion(`kind`,[Mg,jg])});const Ig=n.strictObject({operation:lg,deploymentStatus:n.enum([`unknown`,`uploading`,`queued`,`ingesting`,`ready`,`failed`,`abandoned`]),publication:$f.nullable(),attachmentStatus:n.enum([`not_attempted`,`pending`,`committed`,`no_op`,`conflict`,`not_confirmed`]),attachment:tp.extend({attachment:tp.shape.attachment.unwrap()}).nullable(),failure:n.strictObject({code:n.string(),message:n.string(),remediation:n.string()}).nullable(),nextAction:n.enum([`retry_same_request`,`check_status`,`replan_attachment`,`fix_build`,`inspect_result`]),warnings:n.array(n.string())}),Lg=[{id:`prototype.publishCanvas`,cliPath:`canvas publish-prototype`,operation:`mutation`,effect:`external`,idempotency:`composite`,inputSchema:Pg,outputSchema:Ig,summary:`Publish a static build or resume an existing deployment with a revision-checked canvas attachment, returning bounded ingestion progress and a separate attachment receipt.`,procedures:[`prototype.getArtifactCapabilities`,`prototype.createArtifact`,`prototype.submitArtifact`,`prototype.getPublishStatus`,`prototype.attach`],inputExample:{canvasRef:V,baseVersion:1,source:{kind:`deployment`,deploymentId:V},waitMs:1500},outputExample:{operation:{kind:`prototype-deployment`,canvasId:V,deploymentId:V},deploymentStatus:`queued`,publication:{prototypeId:V,deploymentId:V,nodeId:`prototype`,state:`queued`,fileCount:3,totalBytes:100,processedFiles:0},attachmentStatus:`pending`,attachment:null,failure:null,nextAction:`check_status`,warnings:[]}}],Rg=n.record(n.string(),n.unknown()),zg=e=>{let t=Rg.safeParse(e);return t.success?t.data:null},Bg=e=>{if(e.format===`uuid`)return V;if(e.format===`email`)return`agent@example.test`;if(e.format===`date-time`)return`2026-08-10T00:00:00.000Z`;if(e.format===`uri`||e.format===`url`)return`https://example.test/path`;if((typeof e.pattern==`string`?e.pattern:``).includes(`development`))return`development`;let t=typeof e.minLength==`number`?e.minLength:1;return`x`.repeat(Math.max(1,t))},Vg=e=>{let t=Array.isArray(e.anyOf)?e.anyOf:null,n=Array.isArray(e.oneOf)?e.oneOf:null,r=t??n;return r===null?void 0:Wg(r[0])},Hg=e=>{let t=zg(e.properties)??{},n=Array.isArray(e.required)?e.required:[],r=[];for(let e of n)typeof e==`string`&&r.push([e,Wg(t[e])]);return Object.fromEntries(r)},Ug=e=>typeof e.minimum==`number`?e.minimum:typeof e.exclusiveMinimum==`number`?e.exclusiveMinimum+1:0,Wg=e=>{let t=zg(e);if(t===null)return{};if(`default`in t)return t.default;if(`const`in t)return t.const;let n=t.enum;if(Array.isArray(n))return n[0];let r=Vg(t);if(r!==void 0)return r;if(t.type===`null`)return null;if(t.type===`string`)return Bg(t);if(t.type===`boolean`)return!1;if(t.type===`number`||t.type===`integer`)return Ug(t);if(t.type===`array`){let e=typeof t.minItems==`number`?t.minItems:0;return Array.from({length:e},()=>Wg(t.items))}return Hg(t)},Gg={"canvas.version.list":`List retained versions of a canvas, newest first.`,"canvas.version.get":`Read the document and screen manifest retained for one canvas version.`,"canvas.version.name":`Name the current or a retained canvas version so it is kept.`,"canvas.version.updateMetadata":`Replace the title and description of a named canvas version.`,"canvas.version.removeName":`Remove a canvas version’s name and return it to automatic retention.`},Kg={"--version-id":"Canvas version entry id returned by `enhance canvas version list`.","--cursor":`Opaque continuation cursor returned by the preceding list page.`,"--limit":`Maximum number of results to return on this page.`,"--include-automatic":`Include unnamed automatic versions as well as retained versions.`,"--actor":"Version author filter: `all` or only versions created by `mine`.","--target":`Version target JSON: current with its expectedVersion, or a retained version with its versionId.`,"--description":`Optional detail explaining why this named version matters, or null.`},qg={...Gg,"canvas.createEditableFrame":`Insert one validated primitive subtree beside its source screen as an atomic canvas edit.`,"canvas.create":`Create a canvas and return the id required by canvas-scoped commands.`,"canvas.applyOperations":`Atomically apply validated text, geometry, style, ordering, and removal operations to one canvas version.`,"canvas.realtime.ticket":`Issue a one-use browser ticket for a live canvas room.`,"canvas.realtime.activity.begin":`Show that this agent has started work on a canvas.`,"canvas.realtime.activity.renew":`Renew an active agent-work indicator before its lease expires.`,"canvas.realtime.activity.end":`Remove an agent-work indicator after work completes.`,"canvas.get":`Read one canvas by id, including access and viewer capabilities.`,"canvas.setAccess":`Change how a canvas can be reached by people with its link.`,"canvas.delete":`Move a canvas to its recoverable bin; retention is currently indefinite.`,"canvas.move":`Move a canvas between the personal shelf and a team shelf.`,"canvas.duplicate":`Copy a canvas and its document into the selected shelf.`,"canvas.deletePermanently":`Permanently delete a canvas already in the recoverable bin.`,"canvas.restore":`Restore a canvas from the recoverable bin.`,"canvas.markViewed":`Record that the authenticated person has viewed a canvas.`,"canvas.list":`Find canvas ids by collection, title, access, review state, or deletion state.`,"canvas.rename":`Rename a canvas owned by the authenticated person.`,"canvas.setReviewState":`Change the authenticated person’s review state on a canvas.`,"canvas.document.get":`Read a canvas document, version, and attached screen manifest.`,"canvas.document.save":`Replace a canvas document. A stale base version exits 5 as CONFLICT; read, merge, and retry.`,"canvas.inspect":`Read the canonical browser URL for a canvas, its exact document version, kind counts, bounds, and next inspection commands.`,"canvas.tree":`List stable node ids, hierarchy, kinds, and world-space boxes for one canvas.`,"canvas.node":`Read one stable node with its exact styles, props, children, and current version.`,"canvas.selection":`Read the accountable person’s most recently changed live browser selection at an exact canvas version.`,"canvas.participants.list":`List people with direct access to a canvas.`,"canvas.participants.setAccess":`Change a canvas participant between view and comment access.`,"canvas.participants.revoke":`Remove a participant’s direct access to a canvas.`,"canvas.invites.create":`Invite an email address to access a canvas and return the pending invitation.`,"canvas.invites.accept":`Accept a canvas invitation using its secret token.`,"canvas.invites.preview":`Inspect what an invitation grants before accepting it.`,"canvas.invites.list":`List pending and expired invitations for a canvas.`,"canvas.invites.revoke":`Revoke a pending canvas invitation.`,"canvas.invites.resend":`Replace a pending canvas invitation token and send the invitation again.`,"comment.list":`List comment threads and replies on a canvas.`,"comment.get":`Read a revision-bound page of messages from one comment thread.`,"comment.start":`Start a comment thread anchored to a canvas location.`,"comment.resolve":`Set a thread resolved or reopened with an explicit target state.`,"comment.reply":`Add a reply to an existing comment thread.`,"comment.react":`Set or remove one emoji reaction on a comment message.`,"comment.edit":`Replace the body of a comment message authored by this person.`,"comment.move":`Move a comment thread anchor to a new canvas location.`,"comment.delete":`Delete an entire comment thread, or tombstone one message when its id is set.`,"organisation.list":`List teams the authenticated person belongs to.`,"organisation.create":`Create a team and make the authenticated person its owner.`,"organisation.update":`Rename a team managed by the authenticated person.`,"organisation.delete":`Delete a team and rehome every canvas to its creator’s personal shelf.`,"organisation.people.list":`List the people and roles in a team.`,"organisation.people.add":`Add an existing account by email; use organisation invites create when no account exists.`,"organisation.people.setRole":`Change a team member between administrator and member.`,"organisation.people.remove":`Remove a person from a team without deleting their account.`,"organisation.people.transferOwnership":`Transfer team ownership to another current member.`,"organisation.invites.create":`Invite an email address to join a team with the selected role.`,"organisation.invites.list":`List pending and expired invitations for a team.`,"organisation.invites.revoke":`Revoke a pending team invitation.`,"organisation.invites.resend":`Replace a team invitation token and send it again.`,"organisation.invites.preview":`Inspect a team invitation before accepting it.`,"organisation.invites.accept":`Accept a team invitation using its secret token.`,"person.me":`Resolve the current person and authentication kind.`,"person.recipients.search":`Find people who can be invited by matching a name or email.`,"person.recipients.recent":`List people recently selected as sharing recipients.`,"person.updateDisplayName":`Change the name shown for the current person throughout Enhance.`,"recording.start":`Start a recording attempt and receive its first signed chunk upload.`,"recording.appendChunk":`Commit metadata for the uploaded DOM chunk at this index, then reserve the next upload.`,"recording.appendAudioChunk":`Commit metadata for the uploaded audio chunk at this index, then reserve the next upload.`,"recording.complete":`Finish a recording and report any missing event or audio chunks.`,"recording.get":`Read one recording and its replay metadata by id.`,"recording.discard":`Abandon an incomplete recording attempt and its uploaded chunks.`,"recording.list":`List recordings attached to one canvas.`,"recording.delete":`Soft-delete a completed recording while preserving screens and clearing their provenance.`,"recording.refreshUpload":`Replace an expired signed upload for a recording chunk.`,"recording.confirmUpload":`Confirm that a repaired recording chunk reached storage.`,"recordingAsset.reserve":`Reserve signed uploads for external assets used by a recording.`,"recordingAsset.confirm":`Confirm which reserved recording assets reached storage.`,"screen.create":`Reserve a signed upload for a captured page and return its screen id.`,"screen.complete":`Confirm a captured page after its bytes have been uploaded.`,"screen.delete":`Delete an unattached captured page owned by this person.`},Jg={...Kg,"--canvas-ref":`Complete canvas, page or selection URL, or canvas UUID. Preserve the supplied scope.`,"canvas.apply --request-context":`Optional mutation fingerprint, strict or rebase revision policy, and copied-node mapping. Preserve these fields on an identical retry.`,"canvas.arrange --changes":`Explicit move, resize, parent or sibling-order changes for existing nodes; preparation measures native layout before one version-checked commit.`,"canvas.capture --source":`Recording UUID and exact millisecond timestamp already inspected through the successful preview job.`,"canvas.capture --placement":`Explicit position or native adjacent placement for the captured screen within the supplied canvas scope.`,"canvas.duplicateNodes --destination":`Existing destination parent and requested placement of fresh copies; source nodes remain unchanged.`,"canvas.find --include-destinations":`Include accessible personal and team destinations for creating a canvas; this does not create one.`,"canvas.importAsset --source":`Selected local image or font file with its resource metadata; importing registers bytes without placing a node.`,"canvas.insertHtml --destination":`Existing editable parent for the new subtree; root inserts at the top of the scoped page.`,"canvas.makeEditable --placement":`Place the editable conversion adjacent to its source; retain the captured original.`,"canvas.remove --root-node-ids":`Explicit roots to remove with their descendants, within the supplied scope and observed version.`,"canvas.updateHtml --snapshot-token":`Opaque snapshot token from a complete editable read. Retain it for the identical retry; reread after a conflict.`,"canvas.updateHtml --html":`Complete edited HTML for that snapshot, preserving retained IDs and opaque placeholders. Follow the canvas HTML version 1 reference.`,"canvas.updateHtml --remove-node-ids":`Explicit retained roots intentionally deleted from the HTML. Omission alone never authorizes removal.`,"operation.status --operation":`Exact durable operation reference returned by a prior call, including its kind and identity fields.`,"operation.status --include-image":`Include available render image evidence when true; this does not start another render.`,"operation.status --offset":`Zero-based entry offset; continue using nextOffset until the result reports complete.`,"prototype.publishCanvas --source":`Selected local build directory and attachment metadata, or an existing ready deployment to attach after replanning.`,"--canvas-id":"Canvas id, from `enhance canvas list`.","--mutation-id":`Client-minted UUID identifying this atomic canvas mutation.`,"--organisation-id":"Team id, from `enhance organisation list`.","--recording-id":"Recording id, from `enhance recording list` or `recording start`.","--screen-id":"Screen id returned by `enhance screen create` or `fixture screen`.","--context":`Observed canvas context as JSON with the complete canvasRef and expectedVersion.`,"--expected-revision":`Observed comment thread revision; reject changes since that read.`,"--thread-id":"Comment thread id returned by `comment start` or `enhance comment list`.","--message-id":"Comment message id returned by comment writes or `enhance comment list`.","--node-id":"Stable node id returned by `enhance canvas tree`.","--screen-node-id":"Root-level screen node id returned by `enhance canvas tree`.","--job-id":`Render or conversion job id returned by its create command.`,"--person-id":`Person id returned by the relevant people or participants list.`,"--display-name":`Name to show for the current person in comments and collaboration surfaces.`,"--invite-id":`Invitation id returned by the relevant invites list.`,"--client-token":`Stable UUID to reuse when retrying the exact same mutation.`,"--collection":"Canvas shelf: `own` (default), `everything`, or a team UUID from `organisation list`.","--scope":"Within the shelf, return `all`, only `mine`, or only canvases `shared` with me.","--deleted":`Set true to search the recoverable canvas bin instead of active canvases.`,"--access-state":`Filter or set link reach: invite-only, link-view, or link-comment.`,"--has-unresolved":`Set true to return only canvases with unresolved comment threads.`,"--base-version":"Document version returned by `enhance canvas document get`.","--document-format-version":`Supported canvas schema version for this writer, not the saved revision in baseVersion. Update the client if its format is no longer supported.`,"--operations":`One or more validated canvas operations; use the canvas apply command’s @file form for a batch.`,"--write-scope":`Optional JSON {"rootIds":["node_id"]}; require every edit to stay within those node subtrees.`,"--phase":`Agent work now in progress: reading, writing, creating, deleting, or rendering.`,"--node-ids":`Stable canvas node ids affected by the current agent activity.`,"--bounds":`Optional world-space activity bounds as x, y, width, and height JSON.`,"--activity-id":`Active agent-work lease id returned by canvas realtime activity begin.`,"--role":`Team role to grant: admin or member.`,"--access-level":`Participant access to grant: can-comment or can-view.`,"--expires-at":`ISO date-time when the token expires, or the literal null for no expiry.`,"--etag":`ETag returned by the signed upload PUT, with surrounding quotes removed.`,"--index":`Zero-based chunk index expected by the current recording upload.`,"--bytes":`Exact byte length of the content uploaded through the signed URL.`,"--viewport":'Viewport JSON, for example `{"width":1440,"height":900}`.',"--route":`Original page route retained with the captured screen.`,"--page-title":`Page title retained with the capture or used for a new canvas.`,"--title":`Human-readable title used to name or find the resource.`,"--email":`Email address of the person to invite or add.`,"--body":`Comment text; use the JSON input for content that is difficult to quote.`,"--source-url":`Original page URL associated with the capture or recording.`,"--name":`Human-readable team name.`,"--token":`Secret invitation token from its delivery message or local create result.`,"--filter":`Comment state to return: open, resolved, or all.`,"--author-person-id":`Only comments by this person id, from a comment author object.`,"--agent-actionable":`Set true to require an element source file; use --filter open for open actionable threads.`,"--query":`Text to search for in the resources returned by this command.`,"--client-thread-id":`Client-minted UUID; reuse it when retrying this thread creation.`,"--client-message-id":`Client-minted UUID; reuse it when retrying this reply.`,"--mentioned-person-ids":`Person UUIDs to mention; get them from the relevant people or participants list.`,"--resolved":`Target state: true resolves the thread; false reopens it.`,"--emoji":`Single emoji to add to or remove from the comment message.`,"--reacted":`Target state: true adds this person’s reaction; false removes it.`,"--review-state":`Review state to store: not-started, in-progress, or done.`,"--confirmation":`Exact current canvas title; get it from the deleted canvas list.`,"--document":`Complete opaque canvas document as one JSON object.`,"--draft":`Versioned primitive subtree JSON produced by screen conversion.`,"--screen-ids":`Every attached screen UUID; omit the option to replace the manifest with none.`,"--anchor":'Anchor JSON; canvas example: `{"on":"canvas","point":{"x":120,"y":160}}`.',"--label":`Human-readable label identifying an agent credential.`,"--audio":'Audio JSON such as `{"mimeType":"audio/webm;codecs=opus","sampleRate":48000}`, or null.',"--first-event-ms":`Earliest event offset in this DOM chunk, in milliseconds.`,"--last-event-ms":`Latest event offset in this DOM chunk, in milliseconds.`,"--event-count":`Number of events that begin in this DOM chunk; zero is valid.`,"--continues":`True when the first byte continues an event begun in the previous DOM chunk.`,"--first-ms":`Start offset of this audio chunk, in milliseconds.`,"--last-ms":`End offset of this audio chunk, in milliseconds.`,"--epoch":`Zero-based independently decodable audio segment number.`,"--starts-epoch":`True when this audio chunk contains its epoch container header.`,"--duration-ms":`Total recording duration in milliseconds.`,"--interrupted":`True when capture ended unexpectedly rather than by an ordinary stop.`,"--audio-chunk-count":`Number of audio chunks the client attempted; zero means no microphone.`,"--has-recoverable-bytes":`True when exact bytes for at least one missing chunk were retained.`,"--track":`Recording stream to repair: dom or audio.`,"--assets":`Asset reservation objects as JSON: url, contentType, and byteSize.`,"--arrived":`Uploaded asset objects as JSON: url, etag, and byteSize.`,"--provenance":'Origin JSON `{"sourceRecordingId":"UUID","atMs":0}`, or null for a standalone screen.',"--json":`Complete procedure input as JSON; do not combine it with field flags.`,"auth login --token":`Existing agent token for CI or headless fallback; omit it to authenticate in a browser.`,"canvas.create --organisation-id":"Team UUID from `enhance organisation list`; omit it to create on the personal shelf.","canvas.move --organisation-id":"Destination team UUID from `enhance organisation list`, or the literal `personal`.","canvas.duplicate --organisation-id":"Destination team UUID from `enhance organisation list`, or the literal `personal`.","canvas.deletePermanently --confirmation":"Exact canvas title returned by `enhance canvas list --deleted true`.","canvas.textStyleLibrary.list --search":`Match published library titles in your teams and files shared with you.`,"canvas.textStyleLibrary.publish --expected-revision":`Current published library revision; use 0 for its first publication.`,"canvas.textStyleLibrary.publish --document-version":`Saved source document version containing the selected style definitions.`,"canvas.textStyleLibrary.publish --publish":`Local text style ids to add or update in this publication, as a JSON array.`,"canvas.textStyleLibrary.publish --remove":`Published text style ids to remove from the library, as a JSON array.`,"canvas.textStyleLibrary.publish --description":`Release notes describing these library changes for consuming files.`,"canvas.document.save --base-version":"Current version from `canvas document get`; a stale value exits 5 with CONFLICT.","canvas.document.get --after-version":`Saved revision to request subsequent retained mutations from, excluding that revision. Verify a contiguous chain before rebasing; missing history or a restore requires the current document.`,"canvas.document.save --document":`Complete opaque JSON object; preserve fields you did not intend to change.`,"canvas.document.save --screen-ids":`Complete replacement manifest of screen UUIDs; omit to detach every screen.`,"canvas.participants.setAccess --person-id":"Participant person id from `enhance canvas participants list`.","canvas.participants.revoke --person-id":"Participant person id from `enhance canvas participants list`.","canvas.invites.accept --token":`Secret canvas invitation token; omit this option to read one line from stdin.`,"canvas.invites.preview --token":`Secret canvas invitation token; omit this option to read one line from stdin.`,"comment.list --page":`Bounded comment page as JSON with cursor and limit; preserve the returned cursor.`,"comment.start --context":`Observed canvasRef, expectedVersion and anchor coordinateSpace as JSON.`,"comment.list --query":`Text to match in comment message bodies.`,"comment.start --anchor":'JSON canvas anchor: `{"on":"canvas","point":{"x":120,"y":160}}`; node and screen anchors also accept their ids.',"comment.move --anchor":'Replacement anchor JSON; canvas example: `{"on":"canvas","point":{"x":120,"y":160}}`.',"comment.delete --message-id":`Message id to tombstone; omit this option to delete the entire thread.`,"comment.resolve --resolved":`Required target state: true resolves the thread; false reopens it.`,"organisation.people.setRole --person-id":"Team member person id from `enhance organisation people list`.","organisation.people.remove --person-id":"Team member person id from `enhance organisation people list`.","organisation.people.transferOwnership --person-id":"Current team member person id from `enhance organisation people list`.","organisation.invites.revoke --invite-id":"Team invitation id from `enhance organisation invites list`.","organisation.invites.resend --invite-id":"Team invitation id from `enhance organisation invites list`.","organisation.invites.preview --token":`Secret team invitation token; omit this option to read one line from stdin.`,"organisation.invites.accept --token":`Secret team invitation token; omit this option to read one line from stdin.`,"person.recipients.search --query":`Name or email text to match against available recipients.`,"recording.complete --canvas-id":`Existing destination canvas UUID; do not combine with --organisation-id.`,"recording.complete --organisation-id":`Team UUID for a newly created canvas; omit both destination flags for personal.`,"recording.start --page-title":`Required captured page title, or the literal null.`,"recording.appendChunk --etag":`ETag from the already-uploaded chunk at --index; omit only when abandoning that range.`,"recording.appendAudioChunk --etag":`ETag from the already-uploaded audio chunk at --index; omit only when abandoning it.`,"recordingAsset.reserve --assets":'One or more JSON objects shaped `{"url":"https://…","contentType":"image/png","byteSize":123}`.',"recordingAsset.confirm --arrived":'One or more JSON objects shaped `{"url":"https://…","etag":"…","byteSize":123}`.',"screen.create --client-token":`Client-minted capture UUID; reuse it when retrying the same screen reservation.`,"screen.create --provenance":'Required origin JSON `{"sourceRecordingId":"UUID","atMs":0}`, or the literal null.',"screen.create --route":`Required original page route, or the literal null.`,"screen.create --page-title":`Required captured page title, or the literal null.`,"fixture recording --source-url":`Required original page URL represented by this recording.`},Yg=n.record(n.string(),n.unknown()),Xg=e=>{if(typeof e!=`object`||!e||Array.isArray(e))return null;let t=Yg.safeParse(e);return t.success?t.data:null},Zg=e=>{if(Array.isArray(e))return e.map(e=>Zg(e));let t=Xg(e);return t===null?e:Object.fromEntries(Object.entries(t).toSorted(([e],[t])=>e.localeCompare(t)).map(([e,t])=>[e,Zg(t)]))},Qg=e=>r(`sha256`).update(JSON.stringify(Zg(e))).digest(`hex`),$g=e=>e.replaceAll(/[A-Z]/gu,e=>`-${e.toLowerCase()}`),e_=(e,t,n)=>{let r=Xg(e),i=Xg(r?.properties);if(i===null)return[];let a=new Set(Array.isArray(r?.required)?r.required:[]);return Object.entries(i).map(([e,r])=>{let i=Xg(r),o=`--${$g(e)}`,s=n===`input`?Jg[`${t} ${o}`]??Jg[o]:void 0;return{name:e,required:a.has(e),meaning:s??(typeof i?.description==`string`?i.description:`${n===`input`?`Input`:`Returned`} field ${e}.`)}})},t_=(e,t)=>{let n=Xg(t)?.description;return qg[e]??(typeof n==`string`&&n!==``?n:`Run the ${e} product operation.`)},n_=(e,t)=>{let n=e.split(`.`,1)[0]??e;return e.endsWith(`.list`)?[`Choose an id from the result before another ${n} operation.`]:[`canvas.apply`,`canvas.edit`,`canvas.writeHtml`].includes(e)?[`Reuse the committed version for the next edit. Render the affected screen when the requested visual change is ready to review.`]:e===`canvas.render`?[`Inspect the returned image; read more structure only if the pixels reveal a discrepancy.`]:t===`mutation`?[`Read the affected ${n} resource to confirm the result.`]:[`Use the returned identifiers and version in the next ${n} operation.`]},r_=e=>({summary:t_(e.id,e.meta),useWhen:e.operation===`query`?`Use when current ${e.id.split(`.`,1)[0]??`product`} state is missing from the task context.`:`Use when the requested change exactly matches ${e.id}; read the current state first when a version or identifier may have changed.`,preconditions:[`Authenticate as the accountable Enhance person.`,`Use only resource identifiers returned by an earlier capability result or supplied by the person.`,...e.operation===`mutation`?[`Reuse clientToken only when retrying this exact mutation input.`]:[]],input:e_(e.inputJson,e.id,`input`),output:e_(e.outputJson,e.id,`output`),result:`Returns a typed ${e.id} result from the Enhance API without transport-specific prose.`,recovery:[`BAD_REQUEST: correct the named fields and call again.`,`UNAUTHORIZED: restore Enhance authentication, then retry once.`,`FORBIDDEN or NOT_FOUND: check the supplied resource and selection; do not substitute unrelated content. Ask for corrected access or scope if needed.`,`CONFLICT: read the current resource, merge the intended change, and retry with its version.`,`INTERNAL: run Enhance diagnostics, report the failure, and stop repeating the call.`],next:n_(e.id,e.operation),examples:[{input:e.inputExample,output:e.outputExample}]}),i_=e=>n.union([n.object({ok:n.literal(!0),result:e}),n.object({ok:n.literal(!0),artifact:n.object({uri:n.string(),mimeType:n.string().min(1),bytes:n.number().int().nonnegative()})}),n.object({ok:n.literal(!1),error:n.object({code:n.string(),message:n.string(),remediation:n.string(),fields:n.array(n.object({path:n.string(),message:n.string()})).optional()})})]),a_=e=>{let t=n.toJSONSchema(e.inputSchema,{unrepresentable:`any`,io:`input`}),r=n.toJSONSchema(e.outputSchema,{unrepresentable:`any`}),i=e.guide??r_({id:e.id,operation:e.operation,meta:e.meta,inputJson:t,outputJson:r,inputExample:e.inputExample??Wg(t),outputExample:e.outputExample??Wg(r)});return{id:e.id,operation:e.operation,source:e.source,effect:e.effect,idempotency:e.idempotency,execution:e.execution,inputSchema:e.inputSchema,outputSchema:e.outputSchema,resultSchema:i_(e.outputSchema),guide:i,policy:e.policy,cli:e.cliPath===null?null:{path:e.cliPath},schemaDigest:Qg({input:t,output:r}),guidanceDigest:Qg(i),behaviorDigest:Qg({id:e.id,source:e.source,effect:e.effect,idempotency:e.idempotency,execution:e.execution,requiresLocalFiles:e.policy.requiresLocalFiles??!1,localOutputFields:e.policy.localOutputFields??[],input:t,output:r})}},o_={exposure:`internal`,reason:`Chat visibility and publication belong to the verified desktop owner, outside model tool authority.`,owner:`product`},s_={"canvas.revertMutations":{exposure:`internal`,reason:`Result Undo belongs to the desktop owner and its canonical receipt guard.`,owner:`product`},"canvas.mutationReceipt":{exposure:`internal`,reason:`Receipt reconciliation belongs to the desktop journal.`,owner:`product`},"canvas.chats.list":o_,"canvas.chats.read":o_,"canvas.chats.markRead":o_,"canvas.chats.watch":o_,"canvas.chats.delete":o_},c_={exposure:`internal`,reason:`Font upload and transfer lifecycle belongs to document authoring transactions.`,owner:`product`},l_={exposure:`internal`,reason:`Render creation, polling and cancellation belong to higher-level render capabilities.`,owner:`product`},u_={exposure:`shared`,reason:`Authenticated product operation supported equally by CLI and MCP.`,owner:`product`},d_={exposure:`internal`,reason:`Product telemetry is not an agent capability.`,owner:`product`},f_={exposure:`internal`,owner:`product`,reason:`Profile upload and atomic Save belong to the Settings draft lifecycle.`},p_={"captureRun.begin":{exposure:`internal`,owner:`product`,reason:`The SDK reserves capture baselines before tests execute.`},"captureRun.get":{exposure:`internal`,owner:`product`,reason:`SDK publication owns run and receipt recovery.`},"captureRun.reserveAssets":{exposure:`internal`,owner:`product`,reason:`The SDK verifies and uploads immutable capture artifacts.`},"captureRun.seal":{exposure:`internal`,owner:`product`,reason:`The SDK seals complete successful attempts before publication.`},"captureRun.publish":{exposure:`internal`,owner:`product`,reason:`Capture publication is composed by the SDK and captures publish command.`},"captureRun.cancel":{exposure:`internal`,owner:`product`,reason:`The SDK owns capture run cancellation.`},"captureRun.comparison":{exposure:`internal`,owner:`product`,reason:`Retained comparison pairs belong to the canvas comparison mode.`},"person.reserveProfilePhoto":f_,"person.completeProfilePhoto":f_,"person.abandonProfilePhoto":f_,"person.updateProfile":f_,"feedback.submit":{exposure:`internal`,reason:`Dashboard feedback requires a deliberate human submission.`,owner:`product`},"canvas.asset.reserve":{exposure:`internal`,owner:`product`,reason:`Resource lifecycle is composed by canvas asset import.`},"canvas.asset.complete":{exposure:`internal`,owner:`product`,reason:`Byte verification belongs to native resource completion.`},"canvas.asset.get":{exposure:`internal`,owner:`product`,reason:`Read existing resource readiness through operation status.`},"canvas.mutation.get":{exposure:`internal`,reason:`Canonical mutation receipt recovery belongs to bounded canvas edit workflows.`,owner:`product`},"canvas.firstAgentWork":{exposure:`internal`,reason:`Authenticated onboarding completion belongs to the product UI.`,owner:`product`},...s_,"canvas.chats.publish":o_,"canvas.applyOperations":{exposure:`internal`,reason:`Wrapped by bounded, intention-revealing authoring capabilities.`,owner:`product`},"canvas.realtime.ticket":{exposure:`internal`,reason:`Browser WebSocket admission is not an agent capability.`,owner:`product`},"canvas.reserveImage":{exposure:`internal`,reason:`Signed image upload reservation is wrapped by file-safe authoring.`,owner:`product`},"canvas.copyFonts":c_,"canvas.reserveFont":c_,"canvas.completeFont":c_,"canvas.fontCatalog.list":c_,"canvas.fontCatalog.reserve":c_,"canvas.fontCatalog.complete":c_,"canvas.fontCatalog.remove":c_,"canvas.fontCatalog.import":c_,"canvas.render.cancel":l_,"canvas.render.create":l_,"canvas.render.preparation.create":l_,"canvas.render.preparation.get":l_,"canvas.render.preparation.cancel":l_,"canvas.render.download":{exposure:`internal`,reason:`Signed downloads must be written through a protected artifact adapter.`,owner:`product`},"canvas.render.exposure":{exposure:`internal`,reason:`Signed render exposure is a transport implementation detail.`,owner:`product`},"canvas.render.get":l_,"canvas.render.snapshot":{exposure:`internal`,reason:`Render snapshot creation is owned by higher-level render capabilities.`,owner:`product`},"canvas.thumbnail.reportUnavailable":{exposure:`internal`,reason:`Browser thumbnail telemetry is not an agent capability.`,owner:`product`},"canvas.version.duplicate":{exposure:`internal`,reason:`Duplicating historical state is restricted to an interactive person session.`,owner:`product`},"canvas.version.restore":{exposure:`internal`,reason:`Restoring historical state is restricted to an interactive person session.`,owner:`product`},"person.createAgentToken":{exposure:`cli-transport`,reason:`Credential lifecycle remains in the interactive CLI auth surface.`,owner:`cli`},"person.listAgentTokens":{exposure:`cli-transport`,reason:`Credential lifecycle remains in the interactive CLI auth surface.`,owner:`cli`},"person.revokeAgentToken":{exposure:`cli-transport`,reason:`Credential lifecycle remains in the interactive CLI auth surface.`,owner:`cli`},"person.signIn":{exposure:`internal`,reason:`Browser sign-in protocol is wrapped by the CLI auth surface.`,owner:`product`},"person.signOut":{exposure:`internal`,reason:`Browser sign-out protocol is wrapped by the CLI auth surface.`,owner:`product`},"person.signUp":{exposure:`internal`,reason:`Browser sign-up protocol is not an agent capability.`,owner:`product`},"prototype.complete":{exposure:`internal`,reason:`Prototype upload lifecycle is wrapped by prototype publish.`,owner:`product`},"prototype.attach":{exposure:`internal`,reason:`Prototype upload lifecycle is wrapped by prototype publish.`,owner:`product`},"prototype.create":{exposure:`internal`,reason:`Prototype upload lifecycle is wrapped by prototype publish.`,owner:`product`},"prototype.createArtifact":{exposure:`internal`,reason:`Prototype upload lifecycle is wrapped by prototype publish.`,owner:`product`},"prototype.getArtifactCapabilities":{exposure:`internal`,reason:`Prototype upload lifecycle is wrapped by prototype publish.`,owner:`product`},"prototype.getPublishStatus":{exposure:`internal`,reason:`Prototype upload lifecycle is wrapped by prototype publish.`,owner:`product`},"prototype.requestRuntimeTicket":{exposure:`internal`,reason:`Runtime ticket material must never enter an agent tool result.`,owner:`product`},"prototype.reserveUploads":{exposure:`internal`,reason:`Signed uploads are wrapped by prototype publish.`,owner:`product`},"prototype.submitArtifact":{exposure:`internal`,reason:`Prototype upload lifecycle is wrapped by prototype publish.`,owner:`product`},"telemetry.conversion":d_,"telemetry.renderFailure":d_,"telemetry.lifecycle":d_,"telemetry.performance":d_,"transcript.get":{exposure:`internal`,reason:`Transcript storage details are wrapped by transcript get.`,owner:`product`}},m_=new Set(`canvas.create,canvas.createEditableFrame,canvas.delete,canvas.deletePermanently,canvas.document.get,canvas.document.save,canvas.duplicate,canvas.get,canvas.inspect,canvas.invites.accept,canvas.invites.create,canvas.invites.list,canvas.invites.preview,canvas.invites.resend,canvas.invites.revoke,canvas.list,canvas.markViewed,canvas.move,canvas.node,canvas.participants.list,canvas.participants.revoke,canvas.participants.setAccess,canvas.realtime.activity.begin,canvas.realtime.activity.end,canvas.realtime.activity.renew,canvas.rename,canvas.render.cancelImport,canvas.render.getImport,canvas.render.importSource,canvas.restore,canvas.selection,canvas.setAccess,canvas.setReviewState,canvas.textStyleLibrary.get,canvas.textStyleLibrary.list,canvas.textStyleLibrary.publish,canvas.tree,canvas.version.get,canvas.version.list,canvas.version.name,canvas.version.removeName,canvas.version.updateMetadata,comment.delete,comment.edit,comment.list,comment.get,comment.move,comment.react,comment.reply,comment.resolve,comment.start,organisation.create,organisation.delete,organisation.invites.accept,organisation.invites.create,organisation.invites.list,organisation.invites.preview,organisation.invites.resend,organisation.invites.revoke,organisation.list,organisation.people.add,organisation.people.list,organisation.people.remove,organisation.people.setRole,organisation.people.transferOwnership,organisation.update,person.me,person.recipients.recent,person.recipients.search,person.updateDisplayName,recording.appendAudioChunk,recording.appendChunk,recording.complete,recording.confirmUpload,recording.delete,recording.discard,recording.get,recording.list,recording.refreshUpload,recording.start,recordingAsset.confirm,recordingAsset.reserve,screen.complete,screen.create,screen.delete,transcript.retry`.split(`,`)),h_={"captures.publish":{exposure:`cli-transport`,owner:`cli`,requiresLocalFiles:!0,reason:`The CLI supplies its existing credential and local manifest to the public SDK publisher.`},"canvas.importAsset":{requiresLocalFiles:!0,exposure:`shared`,owner:`product`,reason:`File acquisition composes native checksum-bound canvas resource reservation and completion.`},"canvas.arrange":{exposure:`shared`,owner:`product`,reason:`Native geometry preparation and canonical revision-checked commits own arrangement.`},"canvas.duplicateNodes":{exposure:`shared`,owner:`product`,reason:`Native copy preparation retains resources; canonical receipts retain identity provenance.`},"canvas.capture":{exposure:`shared`,owner:`product`,reason:`Recording capture shares native preview, screen persistence, placement and canvas commit owners.`},"canvas.makeEditable":{exposure:`shared`,owner:`product`,reason:`Captured-screen conversion uses the existing compiler, placement and canonical commit owners.`},"canvas.insertHtml":{exposure:`shared`,owner:`product`,reason:`Scoped HTML insertion uses the existing compiler and canonical conversion commit.`},"canvas.find":{exposure:`shared`,owner:`product`,reason:`Accessible canvas and destination discovery uses existing authenticated collections.`},"operation.status":{exposure:`shared`,owner:`product`,reason:`Read existing domain-owned outcomes without starting, resuming or attaching work.`},"canvas.remove":{exposure:`shared`,owner:`product`,reason:`Scoped subtree removal uses the canonical canvas mutation and retention owners.`},"canvas.read":{exposure:`shared`,owner:`product`,reason:`Complete canvas projections and bounded outlines are product reads.`},"canvas.updateHtml":{exposure:`shared`,owner:`product`,reason:`HTML reconciliation commits through the canonical canvas operation owner.`},"canvas.edit":{exposure:`shared`,reason:`Small scoped design edits share one atomic authoring path.`,owner:`product`},"canvas.apply":{exposure:`shared`,reason:`Bounded canvas operation batches are a product authoring capability.`,owner:`product`},"canvas.render":{localOutputFields:[`outputPath`],exposure:`shared`,reason:`Production-faithful canvas rendering is a product inspection capability.`,owner:`product`},"canvas.writeHtml":{localOutputFields:[`renderOutputPath`],exposure:`shared`,reason:`HTML-to-editable-canvas authoring is a bounded product composite.`,owner:`product`},"comment.attention":{exposure:`shared`,reason:`Finding unresolved canvas feedback is a product reading capability.`,owner:`product`},"prototype.publishCanvas":{requiresLocalFiles:!0,exposure:`shared`,owner:`product`,reason:`Scoped publication composes native artifact ingestion and revision-checked canvas attachment.`},"prototype.publish":{requiresLocalFiles:!0,exposure:`shared`,reason:`Packaging and publishing a prototype is a product artifact composite.`,owner:`product`},"recording.snapshot":{exposure:`shared`,reason:`Persisting an accepted recording moment is a product authoring composite.`,owner:`product`},"transcript.read":{exposure:`shared`,reason:`Transcript-led recording inspection is a product reading composite.`,owner:`product`},"auth.login":{exposure:`cli-transport`,reason:`Interactive credential acquisition belongs only to the CLI transport.`,owner:`cli`},"auth.status":{exposure:`cli-transport`,reason:`Local credential inspection belongs only to the CLI transport.`,owner:`cli`},"auth.logout":{exposure:`cli-transport`,reason:`Local credential deletion belongs only to the CLI transport.`,owner:`cli`},doctor:{exposure:`cli-transport`,reason:`Local installation diagnostics belong only to the CLI transport.`,owner:`cli`},commands:{exposure:`cli-transport`,reason:`CLI command inventory belongs only to the CLI transport.`,owner:`cli`},"fixture.screen":{exposure:`cli-development`,reason:`Development fixture creation reads local files and is not a product capability.`,owner:`development`},"fixture.recording":{exposure:`cli-development`,reason:`Development fixture creation reads local files and is not a product capability.`,owner:`development`},"fixture.world":{exposure:`cli-development`,reason:`Development fixture creation reads local files and is not a product capability.`,owner:`development`}},g_=()=>({assertProcedureInventory:e=>{let t=new Set(e),n=new Set([...m_,...Object.keys(p_)]),r=[],i=[];for(let e of t)n.has(e)||r.push(e);for(let e of n)t.has(e)||i.push(e);if(r.length===0&&i.length===0)return;let a=r.join(`,`),o=i.join(`,`);throw TypeError(`capability policy mismatch: unknown=${a===``?`none`:a} stale=${o===``?`none`:o}`)},forProcedure:e=>{let t=p_[e];if(t!==void 0)return t;if(m_.has(e))return u_;throw TypeError(`${e} has no explicit capability policy`)},forUtility:e=>{let t=h_[e];if(t===void 0)throw TypeError(`${e} has no explicit utility policy`);return t},excludedProcedures:new Set(Object.entries(p_).flatMap(([e,t])=>t.exposure===`shared`?[]:[e]))}),__=[{id:`comment.attention`,cliPath:`comment attention`,operation:`query`,effect:`read`,idempotency:`none`,inputSchema:Lh,outputSchema:$l,summary:`List every open canvas comment that may need attention.`,procedures:[`comment.list`],inputExample:{canvasId:V},outputExample:{items:[],truncated:!1}},{id:`prototype.publish`,cliPath:`prototype publish`,operation:`mutation`,effect:`external`,idempotency:`composite`,inputSchema:Rh,outputSchema:n.looseObject({canvasId:n.uuid(),deploymentId:n.uuid(),nodeId:n.string().min(1),version:n.number().int().positive(),openUrl:n.string().startsWith(`/c/`),next:n.array(n.string())}),summary:`Package, upload, ingest, and attach a static prototype directory.`,procedures:[`prototype.getArtifactCapabilities`,`prototype.createArtifact`,`prototype.submitArtifact`,`prototype.getPublishStatus`,`prototype.attach`],inputExample:{canvasId:V,prototypeId:null,nodeId:`prototype_ready`,title:`Ready prototype`,directory:`/absolute/build`,entryPath:`index.html`,baseVersion:1,box:{x:48,y:48,width:1440,height:900}},outputExample:{canvasId:V,deploymentId:V,nodeId:`prototype_ready`,version:2,openUrl:`/c/${V}`,next:[`Open the prototype.`]}},{id:`recording.snapshot`,cliPath:`recording snapshot`,operation:`mutation`,effect:`write`,idempotency:`single`,inputSchema:zh,outputSchema:n.looseObject({jobId:n.uuid(),canvasId:n.uuid(),screenId:n.uuid(),screenNodeId:n.string().min(1),version:n.number().int().positive(),retryClientToken:n.uuid(),next:n.array(n.string())}),summary:`Persist one visually accepted recording moment as an editable canvas screen.`,procedures:[`canvas.render.snapshot`,`canvas.render.get`],inputExample:{canvasId:V,recordingId:V,atMs:1e3,timeoutMs:12e4},outputExample:{jobId:V,canvasId:V,screenId:V,screenNodeId:`screen_ready`,version:2,retryClientToken:V,next:[`Render the screen.`]}},{id:`transcript.read`,cliPath:`transcript get`,operation:`query`,effect:`read`,idempotency:`none`,inputSchema:Bh,outputSchema:bm,summary:`Read timestamped speech cues for visually verified recording selection.`,procedures:[`transcript.get`],inputExample:{canvasId:V,recordingId:V},outputExample:{state:`empty`,reason:`no-audio`}}],H=(e,t,n)=>n?{code:e,message:t,fields:n}:{code:e,message:t},v_=e=>H(`INTERNAL`,e),y_=n.object({issues:n.array(n.object({path:n.array(n.unknown()),message:n.string(),code:n.string().optional(),origin:n.string().optional(),maximum:n.number().optional(),minimum:n.number().optional(),format:n.string().optional()}))}),b_={name:`Team name`,title:`Canvas title`,email:`Email address`,username:`Username`,password:`Password`,displayName:`Name`,confirmation:`Confirmation`,canvasId:`Canvas`,organisationId:`Team`,screenIds:`Screens`},x_=e=>{let t=e.findLast(e=>typeof e==`string`)??`Value`,n=b_[t];if(n!==void 0)return n;let r=t.replaceAll(/([a-z])([A-Z])/gu,`$1 $2`).toLowerCase();return r.charAt(0).toUpperCase()+r.slice(1)},S_=e=>`${/^[aeiou]/iu.test(e)?`an`:`a`} ${e.toLowerCase()}`,C_=e=>{let t=x_(e.path);return e.code===`too_big`&&e.origin===`string`&&e.maximum!==void 0?`${t} can be up to ${String(e.maximum)} characters. Shorten it and try again.`:e.code===`too_big`&&e.maximum!==void 0?`${t} can contain up to ${String(e.maximum)} items. Remove some and try again.`:e.code===`too_small`&&e.origin===`string`&&e.minimum===1?`Enter ${S_(t)}.`:e.code===`too_small`&&e.origin===`string`&&e.minimum!==void 0?`${t} needs at least ${String(e.minimum)} characters. Add more and try again.`:e.format===`email`||e.path.includes(`email`)?`Enter a complete email address, such as name@example.com.`:`Check ${t.toLowerCase()} and try again.`},w_=e=>{let t=y_.safeParse(e);return t.success?{code:`BAD_REQUEST`,message:`that request will not do`,fields:Object.fromEntries(t.data.issues.map(e=>[e.path.map(String).join(`.`),C_(e)]))}:null},T_=e=>Yp(e)?e.code===`INTERNAL`?{code:`INTERNAL`,message:`something went wrong on our side; quote the correlation id`}:{code:e.code,message:e.message,...e.fields&&{fields:e.fields}}:w_(e),E_=a.context().create({errorFormatter:({shape:e,error:t,ctx:n})=>({...e,data:{...e.data,appError:T_(t.cause),correlationId:n===void 0?null:n.requestId}})}),U=E_.router,D_=E_.procedure,O_=E_.middleware,k_={NOT_FOUND:`NOT_FOUND`,UNAUTHORIZED:`UNAUTHORIZED`,FORBIDDEN:`FORBIDDEN`,CONFLICT:`CONFLICT`,RATE_LIMITED:`TOO_MANY_REQUESTS`,BAD_REQUEST:`BAD_REQUEST`,INTERNAL:`INTERNAL_SERVER_ERROR`},W=e=>new i({code:k_[e.code],message:e.message,cause:e}),A_=new Set([`feedback.submit`,`canvas.asset.reserve`,`canvas.asset.complete`,`canvas.render.create`,`canvas.render.importSource`,`canvas.render.preparation.create`,`screen.create`]),j_=e=>{if(e.ok)return{kind:`success`,data:e.data};let t=T_(e.error.cause);return t===null?{kind:`failure`,error:v_(`the original idempotent request failed internally`)}:{kind:`failure`,error:t}},M_=e=>{if(e.kind===`mismatch`)throw W(H(`BAD_REQUEST`,`this client token was already used with different parameters`));if(e.kind===`pending`)throw W(H(`CONFLICT`,`the request with this client token is still being resolved`));if(e.outcome.kind===`failure`)throw W(e.outcome.error);return{ok:!0,data:e.outcome.data,marker:o}},N_=O_(async({ctx:e,type:t,path:n,getRawInput:r,next:i})=>{if(t!==`mutation`||e.viewer.kind===`anonymous`||e.viewer.kind===`render`||e.idempotencyKey===null||A_.has(n))return i();let a=await r(),o=await e.idempotency.claim({personId:e.viewer.personId,clientToken:e.idempotencyKey,procedure:n,parameters:a,createdAt:new Date});if(o.isErr())throw W(v_(o.error.message));if(o.value.kind!==`started`)return M_(o.value);let s=await i(),c=await e.idempotency.complete({personId:e.viewer.personId,clientToken:e.idempotencyKey,procedure:n,outcome:j_(s)});if(c.isErr())throw W(v_(c.error.message));return s}),P_={BAD_REQUEST:`BAD_REQUEST`,UNAUTHORIZED:`UNAUTHORIZED`,FORBIDDEN:`FORBIDDEN`,NOT_FOUND:`NOT_FOUND`,CONFLICT:`CONFLICT`,TOO_MANY_REQUESTS:`RATE_LIMITED`},F_=e=>e instanceof i?Yp(e.cause)?{code:e.cause.code,message:e.cause.message.slice(0,200)}:{code:P_[e.code]??`INTERNAL`,message:null}:{code:`INTERNAL`,message:null},I_=O_(async({ctx:e,path:t,type:n,next:r})=>{let i=performance.now(),a=await e.profile(async e=>({outcome:await r(),statements:e.statements,blobAttempts:e.blobAttempts,degraded:e.degraded})),o=a.outcome.ok?null:F_(a.outcome.error),s={...e.taggedFields(),event:`ProcedureCalled`,procedure:t,kind:n,durationMs:Math.round(performance.now()-i),queryCount:a.statements.length,blobCallCount:a.blobAttempts.length,blobRetryCount:a.blobAttempts.reduce((e,t)=>e+t.attempts-1,0),degraded:a.degraded.toSorted((e,t)=>e.localeCompare(t)).join(`,`),outcome:a.outcome.ok?`ok`:`error`,errorCode:o?.code??null,errorMessage:o?.message??null};o===null||o.code===`NOT_FOUND`?e.logger.info(s,`rpc`):o.code===`INTERNAL`?e.logger.error(s,`rpc`):e.logger.warn(s,`rpc`);for(let[n,r]of a.statements.entries())e.logger.debug({procedure:t,index:n,atMs:Math.round(r.atMs*100)/100,sql:r.sql},`query`);return a.outcome}),L_=new Set([`canvas.document.get`,`canvas.render.exposure`,`prototype.requestRuntimeTicket`,`recording.get`,`recording.list`]),R_=O_(async({ctx:e,path:t,next:n})=>{if(e.viewer.kind===`render`&&!L_.has(t))throw W(I(`FORBIDDEN`,`the render grant cannot call that procedure`));return n()}),G=D_.use(I_).use(R_).use(N_),K=G.use(O_(async({ctx:e,next:t})=>{if(e.viewer.kind===`anonymous`||e.viewer.kind===`render`)throw W(I(`UNAUTHORIZED`,`this call needs a signed-in person`));return t({ctx:{...e,viewer:e.viewer}})})),q=G.use(O_(async({ctx:e,next:t})=>{if(e.viewer.kind!==`agent`)throw W(I(`UNAUTHORIZED`,`this call needs an agent token`));return t({ctx:{...e,viewer:e.viewer}})})),z_=G.use(O_(async({ctx:e,next:t})=>{if(e.viewer.kind!==`render`)throw W(I(`UNAUTHORIZED`,`this call needs a render grant`));return t({ctx:{...e,viewer:e.viewer}})})),B_=n.object({canvasId:n.uuid()}),V_=O_(async({ctx:e,getRawInput:t,next:n})=>{let r=B_.safeParse(await t());if(!r.success)throw W(I(`BAD_REQUEST`,`canvasId is required`));let i=(await e.access.resolve({canvasId:r.data.canvasId,viewer:e.viewer})).match(e=>e,e=>{throw W(e)});if(!i.canRead)throw W(I(`NOT_FOUND`,`no such canvas`));return e.tag(`canvasId`,r.data.canvasId),n({ctx:{...e,canvasAccess:i}})}),J=G.use(V_),H_=J.use(async({ctx:e,next:t})=>{if(!e.canvasAccess.canSeeRoutes||e.viewer.kind===`anonymous`||e.viewer.kind===`render`)throw W(I(`NOT_FOUND`,`no such canvas`));return t({ctx:{...e,viewer:e.viewer}})}),U_=q.use(V_),W_=U_.use(async({ctx:e,next:t})=>{if(!e.canvasAccess.canComment)throw W(I(`FORBIDDEN`,`this canvas is read-only for you`));return t({ctx:{...e,viewer:e.viewer}})}),Y=J.use(async({ctx:e,next:t})=>{if(!e.canvasAccess.canComment||e.viewer.kind===`anonymous`||e.viewer.kind===`render`)throw W(e.canvasAccess.commentNeedsSignIn||e.viewer.kind===`anonymous`||e.viewer.kind===`render`?I(`UNAUTHORIZED`,`sign in to comment on this canvas`):I(`FORBIDDEN`,`this canvas is read-only for you`));return t({ctx:{...e,viewer:e.viewer}})}),G_=J.use(async({ctx:e,next:t})=>{if(!e.canvasAccess.canShare||e.viewer.kind===`anonymous`||e.viewer.kind===`render`)throw W(I(`FORBIDDEN`,`only a canvas recipient can share this`));return t({ctx:{...e,viewer:e.viewer}})}),X=J.use(async({ctx:e,next:t})=>{if(!e.canvasAccess.canManage||e.viewer.kind===`anonymous`||e.viewer.kind===`render`)throw W(I(`FORBIDDEN`,`only an owner can change this`));return t({ctx:{...e,viewer:e.viewer}})}),Z=e=>e.match(e=>e,e=>{throw W(e)}),K_=[`blue`,`violet`,`green`,`amber`,`magenta`,`teal`,`red`,`orange`],q_=e=>{let t=0;for(let n of e)t=t*31+(n.codePointAt(0)??0)>>>0;return K_[t%K_.length]??`blue`},J_=e=>{let t={personId:e.personId,displayName:e.displayName,initials:e.initials,colour:q_(e.kind===`agent`?e.tokenId:e.personId)};return e.kind===`agent`?{...t,kind:`agent`,tokenLabel:e.tokenLabel,...e.agentAttribution!==void 0&&{agentAttribution:e.agentAttribution}}:{...t,kind:`person`}},Y_=e=>e.kind===`agent`?{personId:e.personId,tokenId:e.tokenId,mutationActor:J_(e)}:null,X_=e=>e===`own`?{kind:`own`}:e===`everything`?{kind:`everything`}:{kind:`team`,organisationId:e},Z_=e=>({id:e.canvas.id,title:e.canvas.title,accessState:e.canvas.accessState,organisationId:e.canvas.organisationId,sourceUrl:e.reach.canSeeRoutes?e.canvas.sourceUrl:null,unresolvedCount:e.unresolvedCount,viewerCan:{read:e.reach.canRead,comment:e.reach.canComment?`yes`:e.reach.commentNeedsSignIn?`sign-in`:`no`,share:e.reach.canShare,manage:e.reach.canManage},createdAt:e.canvas.createdAt.toISOString(),lastActivityAt:e.canvas.lastActivityAt.toISOString()}),Q_=e=>{let t={...Z_(e),screenCount:e.screenCount,hasRecording:e.hasRecording};return e.thumbnail===null?{...t,thumbnail:null,thumbnailFallbackReason:e.thumbnailFallbackReason}:{...t,thumbnail:{...e.thumbnail,width:528,height:312}}},$_=e=>C.parse({id:e.id,label:e.label,component:e.component,...e.labelOrigin!==void 0&&{labelOrigin:e.labelOrigin},...e.visible!==void 0&&{visible:e.visible},...e.locked!==void 0&&{locked:e.locked},...e.constraints!==void 0&&{constraints:e.constraints},styles:{...e.styles},...e.layout!==void 0&&{layout:e.layout},...e.appearance!==void 0&&{appearance:e.appearance},...e.typography!==void 0&&{typography:e.typography},...e.additionalStyles!==void 0&&{additionalStyles:e.additionalStyles},...e.props!==void 0&&{props:{...e.props}},...e.box!==void 0&&{box:{...e.box}}}),ev=e=>Y.input(Aa).output(ja).mutation(async({input:t,ctx:n})=>{let r=Z(await e.applyOperations.execute({...t,personId:n.viewer.personId,actor:J_(n.viewer)})),i=r.affectedBounds===null?[]:[`enhance canvas render --canvas ${r.canvasId} --bounds '${JSON.stringify(r.affectedBounds)}' --expected-version ${String(r.version)}`];return{...r,operations:r.operations.map(e=>Ni.parse(e)),insertedNodeIds:[...r.insertedNodeIds],changedNodeIds:[...r.changedNodeIds],removedNodeIds:[...r.removedNodeIds],boxes:{...r.boxes},...r.copiedNodeIds!==void 0&&{copiedNodeIds:{...r.copiedNodeIds}},next:[`enhance canvas tree --canvas ${r.canvasId}`,...i]}}),tv=e=>Y.meta({description:`Atomically insert a validated editable frame subtree beside an existing screen.`}).input(Qn).output(Pi).mutation(async({input:t,ctx:n})=>{let r=Z(await e.createEditableFrame.execute({...t,destination:{kind:`adjacent`},source:{kind:`screen`,nodeId:t.screenNodeId},personId:n.viewer.personId,actor:J_(n.viewer)}));return{...r,idMap:{...r.idMap},insertedNodeIds:[...r.insertedNodeIds],removedNodeIds:[...r.removedNodeIds],boxes:{...r.boxes},operation:{...r.operation,nodes:Object.fromEntries(Object.entries(r.operation.nodes).map(([e,t])=>[e,$_(t)])),relationships:{...r.operation.relationships}},next:[`enhance canvas tree --canvas ${r.canvasId}`,`enhance canvas render --canvas ${r.canvasId} --bounds '${JSON.stringify(r.affectedBounds)}' --expected-version ${String(r.version)}`]}}),nv=e=>K.input(fe).output(pe).mutation(async({input:t,ctx:n})=>{let r=Z(await e.create.execute({title:t.title,creatorPersonId:n.viewer.personId,organisationId:t.organisationId,sourceUrl:t.sourceUrl,origin:n.viewer.kind===`agent`?`agent`:`dashboard`}));return{...Z_(r),version:r.version}}),rv=e=>J.input(me).output(p).query(async({input:t,ctx:n})=>{let r=Z(await e.get.execute({canvasId:t.canvasId,reach:n.canvasAccess,accessLevel:n.canvasAccess.accessLevel}));return n.telemetry.emit(`CanvasOpened`,{canvasId:r.canvas.id,accessState:r.canvas.accessState,isMember:r.accessLevel===null?0:1}),Z_(r)}),iv=e=>X.input(Oe).output(ke).mutation(async({input:t,ctx:n})=>{let r=Z(await e.setAccess.execute(t));return n.telemetry.emit(`AccessStateChanged`,{canvasId:t.canvasId,fromState:n.canvasAccess.accessState,toState:t.accessState,widened:+!!r.widened}),{canvas:Z_({canvas:r.canvas,accessLevel:n.canvasAccess.accessLevel,reach:n.canvasAccess,unresolvedCount:0}),widened:r.widened}}),av=e=>J.input(Ae).output(je).mutation(async({input:t,ctx:n})=>n.viewer.kind===`anonymous`||n.viewer.kind===`render`?{lastViewedAt:null}:{lastViewedAt:Z(await e.markViewed.execute({canvasId:t.canvasId,personId:n.viewer.personId})).lastViewedAt?.toISOString()??null}),ov=e=>U({applyOperations:ev(e),createEditableFrame:tv(e),create:nv(e),get:rv(e),setAccess:iv(e),markViewed:av(e),list:K.input(ge).output(ve).query(async({input:t,ctx:n})=>{let r=Z(await e.list.execute({...t,collection:X_(t.collection),personId:n.viewer.personId}));return{items:r.items.map(e=>Q_(e)),truncated:r.truncated}}),rename:X.input(ye).output(p).mutation(async({input:t,ctx:n})=>Z_({canvas:Z(await e.rename.execute(t)),accessLevel:n.canvasAccess.accessLevel,reach:n.canvasAccess,unresolvedCount:0})),setReviewState:J.input(fl).output(pl).mutation(async({input:t,ctx:n})=>n.viewer.kind===`anonymous`||n.viewer.kind===`render`?{reviewState:null}:Z(await e.setReviewState.execute({...t,personId:n.viewer.personId})))});var Q=te((e=>{let t={withStackTrace:!1},n=(e,n,r=t)=>({data:n.isOk()?{type:`Ok`,value:n.value}:{type:`Err`,value:n.error},message:e,stack:r.withStackTrace?Error().stack:void 0});function r(e,t,n,r){function i(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||=Promise)(function(n,a){function o(e){try{c(r.next(e))}catch(e){a(e)}}function s(e){try{c(r.throw(e))}catch(e){a(e)}}function c(e){e.done?n(e.value):i(e.value).then(o,s)}c((r=r.apply(e,t||[])).next())})}function i(e){var t=typeof Symbol==`function`&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&typeof e.length==`number`)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw TypeError(t?`Object is not iterable.`:`Symbol.iterator is not defined.`)}function a(e){return this instanceof a?(this.v=e,this):new a(e)}function o(e,t,n){if(!Symbol.asyncIterator)throw TypeError(`Symbol.asyncIterator is not defined.`);var r=n.apply(e,t||[]),i,o=[];return i=Object.create((typeof AsyncIterator==`function`?AsyncIterator:Object).prototype),c(`next`),c(`throw`),c(`return`,s),i[Symbol.asyncIterator]=function(){return this},i;function s(e){return function(t){return Promise.resolve(t).then(e,ne)}}function c(e,t){r[e]&&(i[e]=function(t){return new Promise(function(n,r){o.push([e,t,n,r])>1||l(e,t)})},t&&(i[e]=t(i[e])))}function l(e,t){try{ee(r[e](t))}catch(e){re(o[0][3],e)}}function ee(e){e.value instanceof a?Promise.resolve(e.value.v).then(te,ne):re(o[0][2],e)}function te(e){l(`next`,e)}function ne(e){l(`throw`,e)}function re(e,t){e(t),o.shift(),o.length&&l(o[0][0],o[0][1])}}function s(e){var t,n;return t={},r(`next`),r(`throw`,function(e){throw e}),r(`return`),t[Symbol.iterator]=function(){return this},t;function r(r,i){t[r]=e[r]?function(t){return(n=!n)?{value:a(e[r](t)),done:!1}:i?i(t):t}:i}}function c(e){if(!Symbol.asyncIterator)throw TypeError(`Symbol.asyncIterator is not defined.`);var t=e[Symbol.asyncIterator],n;return t?t.call(e):(e=typeof i==`function`?i(e):e[Symbol.iterator](),n={},r(`next`),r(`throw`),r(`return`),n[Symbol.asyncIterator]=function(){return this},n);function r(t){n[t]=e[t]&&function(n){return new Promise(function(r,i){n=e[t](n),a(r,i,n.done,n.value)})}}function a(e,t,n,r){Promise.resolve(r).then(function(t){e({value:t,done:n})},t)}}var l=class e{constructor(e){this._promise=e}static fromSafePromise(t){let n=t.then(e=>new d(e));return new e(n)}static fromPromise(t,n){let r=t.then(e=>new d(e)).catch(e=>new f(n(e)));return new e(r)}static fromThrowable(t,n){return(...i)=>new e(r(this,void 0,void 0,function*(){try{return new d(yield t(...i))}catch(e){return new f(n?n(e):e)}}))}static combine(e){return oe(e)}static combineWithAllErrors(e){return ce(e)}map(t){return new e(this._promise.then(e=>r(this,void 0,void 0,function*(){return e.isErr()?new f(e.error):new d(yield t(e.value))})))}andThrough(t){return new e(this._promise.then(e=>r(this,void 0,void 0,function*(){if(e.isErr())return new f(e.error);let n=yield t(e.value);return n.isErr()?new f(n.error):new d(e.value)})))}andTee(t){return new e(this._promise.then(e=>r(this,void 0,void 0,function*(){if(e.isErr())return new f(e.error);try{yield t(e.value)}catch{}return new d(e.value)})))}orTee(t){return new e(this._promise.then(e=>r(this,void 0,void 0,function*(){if(e.isOk())return new d(e.value);try{yield t(e.error)}catch{}return new f(e.error)})))}mapErr(t){return new e(this._promise.then(e=>r(this,void 0,void 0,function*(){return e.isOk()?new d(e.value):new f(yield t(e.error))})))}andThen(t){return new e(this._promise.then(n=>{if(n.isErr())return new f(n.error);let r=t(n.value);return r instanceof e?r._promise:r}))}orElse(t){return new e(this._promise.then(e=>r(this,void 0,void 0,function*(){return e.isErr()?t(e.error):new d(e.value)})))}match(e,t){return this._promise.then(n=>n.match(e,t))}unwrapOr(e){return this._promise.then(t=>t.unwrapOr(e))}safeUnwrap(){return o(this,arguments,function*(){return yield a(yield a(yield*s(c(yield a(this._promise.then(e=>e.safeUnwrap()))))))})}then(e,t){return this._promise.then(e,t)}[Symbol.asyncIterator](){return o(this,arguments,function*(){let e=yield a(this._promise);return e.isErr()&&(yield yield a(te(e.error))),yield a(e.value)})}};function ee(e){return new l(Promise.resolve(new d(e)))}function te(e){return new l(Promise.resolve(new f(e)))}let ne=l.fromPromise,re=l.fromSafePromise,ie=l.fromThrowable,ae=e=>{let t=le([]);for(let n of e)if(n.isErr()){t=u(n.error);break}else t.map(e=>e.push(n.value));return t},oe=e=>l.fromSafePromise(Promise.all(e)).andThen(ae),se=e=>{let t=le([]);for(let n of e)n.isErr()&&t.isErr()?t.error.push(n.error):n.isErr()&&t.isOk()?t=u([n.error]):n.isOk()&&t.isOk()&&t.value.push(n.value);return t},ce=e=>l.fromSafePromise(Promise.all(e)).andThen(se);e.Result=void 0,(function(e){function t(e,t){return(...n)=>{try{return le(e(...n))}catch(e){return u(t?t(e):e)}}}e.fromThrowable=t;function n(e){return ae(e)}e.combine=n;function r(e){return se(e)}e.combineWithAllErrors=r})(e.Result||={});function le(e){return new d(e)}function u(e){return new f(e)}function ue(e){let t=e().next();return t instanceof Promise?new l(t.then(e=>e.value)):t.value}var d=class{constructor(e){this.value=e}isOk(){return!0}isErr(){return!this.isOk()}map(e){return le(e(this.value))}mapErr(e){return le(this.value)}andThen(e){return e(this.value)}andThrough(e){return e(this.value).map(e=>this.value)}andTee(e){try{e(this.value)}catch{}return le(this.value)}orTee(e){return le(this.value)}orElse(e){return le(this.value)}asyncAndThen(e){return e(this.value)}asyncAndThrough(e){return e(this.value).map(()=>this.value)}asyncMap(e){return l.fromSafePromise(e(this.value))}unwrapOr(e){return this.value}match(e,t){return e(this.value)}safeUnwrap(){let e=this.value;return(function*(){return e})()}_unsafeUnwrap(e){return this.value}_unsafeUnwrapErr(e){throw n("Called `_unsafeUnwrapErr` on an Ok",this,e)}*[Symbol.iterator](){return this.value}},f=class{constructor(e){this.error=e}isOk(){return!1}isErr(){return!this.isOk()}map(e){return u(this.error)}mapErr(e){return u(e(this.error))}andThrough(e){return u(this.error)}andTee(e){return u(this.error)}orTee(e){try{e(this.error)}catch{}return u(this.error)}andThen(e){return u(this.error)}orElse(e){return e(this.error)}asyncAndThen(e){return te(this.error)}asyncAndThrough(e){return te(this.error)}asyncMap(e){return te(this.error)}unwrapOr(e){return e}match(e,t){return t(this.error)}safeUnwrap(){let e=this.error;return(function*(){throw yield u(e),Error("Do not use this generator out of `safeTry`")})()}_unsafeUnwrap(e){throw n("Called `_unsafeUnwrap` on an Err",this,e)}_unsafeUnwrapErr(e){return this.error}*[Symbol.iterator](){let e=this;return yield e,e}};let de=e.Result.fromThrowable;e.Err=f,e.Ok=d,e.ResultAsync=l,e.err=u,e.errAsync=te,e.fromAsyncThrowable=ie,e.fromPromise=ne,e.fromSafePromise=re,e.fromThrowable=de,e.ok=le,e.okAsync=ee,e.safeTry=ue}))();const sv=async e=>{let{signal:t}=e,n=Date.now()+2e4;for(;t?.aborted!==!0;){let r=await e.read();if(r.isErr())return(0,Q.err)(r.error);let i=r.value;if(i!==e.cursor||Date.now()>=n)return(0,Q.ok)({cursor:i,changed:i!==e.cursor});try{await s(1e3,void 0,{signal:t})}catch{return(0,Q.err)(H(`BAD_REQUEST`,`This chat subscription has closed.`))}}return(0,Q.err)(H(`BAD_REQUEST`,`This chat subscription has closed.`))},cv=e=>{if(e.viewer.kind===`anonymous`||e.viewer.kind===`render`||!e.canvasAccess.canSeeComments)throw W(I(`NOT_FOUND`,`No chat history is available.`));return e.viewer.personId},lv=async(e,t,n)=>{let r=await e.currentViewer();if(r.isErr()||r.value.kind===`anonymous`||r.value.kind===`render`)return(0,Q.err)(I(`UNAUTHORIZED`,`Sign in to read chat history.`));let i=r.value,a=await e.access.resolve({canvasId:t,viewer:i});return a.isErr()?(0,Q.err)(a.error):!a.value.canRead||!a.value.canSeeComments?(0,Q.err)(I(`NOT_FOUND`,`No chat history is available.`)):n.cursor({canvasId:t,personId:i.personId})},uv=e=>J.input(Lu).output(Ru).query(async({ctx:t,input:n,signal:r})=>Z(await sv({cursor:n.cursor,signal:r,read:async()=>lv(t,n.canvasId,e)}))),dv=e=>U({watch:uv(e.chats),publish:W_.input(Ou).output(Iu).mutation(async({input:t,ctx:n})=>{if(n.viewer.kind!==`agent`)throw W(I(`UNAUTHORIZED`,`Connect the desktop agent to publish chat.`));return{saved:Z(await e.chats.publish(t,n.viewer.personId))}}),list:J.input(Au).output(ju).query(async({input:t,ctx:n})=>ju.parse(Z(await e.chats.list({...t,personId:cv(n)})))),read:J.input(Nu).output(Pu).query(async({input:t,ctx:n})=>Pu.parse(Z(await e.chats.read({...t,personId:cv(n)})))),markRead:J.input(Fu).output(Iu).mutation(async({input:t,ctx:n})=>({saved:Z(await e.chats.markRead({...t,personId:cv(n)}))})),delete:Y.input(Mu).output(Iu).mutation(async({input:t,ctx:n})=>({saved:Z(await e.chats.remove({...t,personId:n.viewer.personId}))}))}),fv=e=>J.input(Ii).output(zi).query(async({input:t,ctx:n})=>{let r=Z(await e.getDocument.execute({canvasId:t.canvasId,afterVersion:t.afterVersion,withRoutes:n.canvasAccess.canSeeRoutes}));return{...r.mutations!==void 0&&{mutations:r.mutations.map(e=>({mutationId:e.mutationId,previousVersion:e.previousVersion,version:e.version,operations:e.operations.map(e=>Ni.parse(e))}))},version:r.document.version,document:r.document.document,screens:r.screens.map(e=>({screenId:e.screenId,route:e.route,title:e.title,viewport:e.viewport,atMs:e.atMs,sourceRecordingId:e.sourceRecordingId,assetBundle:e.assetBundle===null?null:{...e.assetBundle,assets:[...e.assetBundle.assets]},download:e.download===null?null:{url:e.download.url,expiresAt:e.download.expiresAt.toISOString(),bytes:e.download.bytes}}))}}),pv=e=>Y.input(Bi).output(Vi).mutation(async({input:t,ctx:n})=>{let r=Z(await e.saveDocument.execute({canvasId:t.canvasId,personId:n.viewer.personId,baseVersion:t.baseVersion,document:t.document,screenIds:t.screenIds,actor:J_(n.viewer)}));return r.outcome===`conflict`?(n.telemetry.emit(`CanvasDocumentConflict`,{canvasId:t.canvasId,serverVersion:r.version,baseVersion:t.baseVersion,versionsBehind:r.version-t.baseVersion}),r):(n.telemetry.emit(`CanvasDocumentSaved`,{canvasId:t.canvasId,version:r.version,documentBytes:JSON.stringify(t.document).length,screenCount:t.screenIds.length}),r)}),mv=e=>U({get:fv(e),save:pv(e)}),hv=e=>U({copyFonts:Y.meta({description:`Copy readable file fonts into this canvas before publishing pasted content.`}).input(Vt).output(Ht).mutation(async({input:t,ctx:n})=>({resources:Z(await e.fonts.copy({...t,viewer:n.viewer})).map(e=>({source:e,path:Bt(t.canvasId,e.sha256)}))})),reserveFont:Y.meta({description:`Reserve a file-scoped font upload pinned to its SHA-256 digest.`}).input(Lt).output(zt).mutation(async({input:t})=>{let n=Z(await e.fonts.reserve(t));return{path:Bt(t.canvasId,t.sha256),upload:{...n,expiresAt:n.expiresAt.toISOString()}}}),completeFont:Y.meta({description:`Verify that the exact font bytes have arrived before using the resource.`}).input(It).output(Rt).mutation(async({input:t})=>(Z(await e.fonts.complete(t)),{path:Bt(t.canvasId,t.sha256)}))}),gv=e=>U({reserveImage:Y.meta({description:`Reserve storage and upload instructions for one canvas image.`}).input(kt).output(At).mutation(async({input:t})=>{let n=Z(await e.reserveImage.execute(t));return{...n,path:jt(t.canvasId,n.assetId),upload:{...n.upload,expiresAt:n.upload.expiresAt.toISOString()}}})}),_v=`root`,vv=e=>{let t=null;for(let n of e){if(t===null){t=n;continue}let e=Math.min(t.x,n.x),r=Math.min(t.y,n.y);t={x:e,y:r,width:Math.max(t.x+t.width,n.x+n.width)-e,height:Math.max(t.y+t.height,n.y+n.height)-r}}return t},yv=e=>{let t=new Map;for(let[n,r]of Object.entries(e.relationships)){let e=t.get(r.parentId),i={id:n,sortKey:r.sortKey};e===void 0?t.set(r.parentId,[i]):e.push(i)}return new Map([...t].map(([e,t])=>[e,t.toSorted((e,t)=>e.sortKey===t.sortKey?e.id.localeCompare(t.id):e.sortKey<t.sortKey?-1:+(e.sortKey>t.sortKey)).map(e=>e.id)]))},bv=e=>(0,Q.err)(`stored canvas document is not renderable: ${e}`),xv=e=>{if(e.nodes[_v]?.id!==_v)return bv(`the root node is missing`);for(let[t,n]of Object.entries(e.nodes))if(t!==n.id)return bv(`node map key does not match ${n.id}`);return(0,Q.ok)(void 0)},Sv=e=>{for(let[t,n]of Object.entries(e.relationships)){if(t===_v||e.nodes[t]===void 0)return bv(`relationship names an unknown child ${t}`);if(e.nodes[n.parentId]===void 0)return bv(`relationship names an unknown parent ${n.parentId}`)}return(0,Q.ok)(void 0)},Cv=e=>{for(let t of Object.keys(e.nodes)){let n=new Set,r=t;for(;r!==void 0&&r!==_v;){if(n.has(r))return bv(`relationship cycle reaches ${r}`);n.add(r),r=e.relationships[r]?.parentId}if(r!==_v)return bv(`node ${t} is detached from root`)}return(0,Q.ok)(void 0)},wv=e=>xv(e).andThen(()=>Sv(e)).andThen(()=>Cv(e)),Tv=e=>{let t=new Map,n=r=>{let i=t.get(r);if(i!==void 0)return i;let a=e.nodes[r]?.box,o=e.relationships[r]?.parentId,s=o===void 0?{x:0,y:0}:n(o),c={x:s.x+(a?.x??0),y:s.y+(a?.y??0)};return t.set(r,c),c},r=new Map;for(let[t,i]of Object.entries(e.nodes))i.box!==void 0&&r.set(t,{...i.box,...n(t)});return r},Ev=e=>{let t=Wn.safeParse(e);if(!t.success)return bv(`its scene shape is invalid`);let n=wv(t.data);if(n.isErr())return(0,Q.err)(n.error);let r=t.data,i=yv(r),a=Tv(r),o=Object.values(r.nodes).map(e=>({id:e.id,label:e.label,kind:e.component,parentId:r.relationships[e.id]?.parentId??null,childCount:i.get(e.id)?.length??0,box:a.get(e.id)??null,propertySections:[...Ha(e.component)]})).toSorted((e,t)=>e.id.localeCompare(t.id)),s={};for(let e of o)e.id!==_v&&(s[e.kind]=(s[e.kind]??0)+1);return(0,Q.ok)({document:r,nodes:o,children:i,bounds:vv(o.flatMap(e=>e.box===null?[]:[e.box])),kinds:s})},Dv=async(e,t)=>{let n=Z(await e.readCanvas.execute(t));return{source:n,projected:Z(Ev(n.document).mapErr(e=>H(`INTERNAL`,e)))}},Ov=(e,t)=>U_.input(pa).output(ma).query(async({input:n})=>{let{source:r,projected:i}=await Dv(e,n.canvasId);return{canvasId:n.canvasId,openUrl:new URL(`/c/${n.canvasId}`,t).href,title:r.title,version:r.version,nodeCount:Math.max(0,i.nodes.length-1),rootChildCount:i.children.get(`root`)?.length??0,bounds:i.bounds,kinds:i.kinds,next:[`enhance canvas tree --canvas ${n.canvasId}`,`enhance canvas render --canvas ${n.canvasId} --expected-version ${String(r.version)}`]}}),kv=(e,t)=>({inspect:Ov(e,t),tree:U_.input(ha).output(ga).query(async({input:t})=>{let{source:n,projected:r}=await Dv(e,t.canvasId);return{canvasId:t.canvasId,version:n.version,nodes:[...r.nodes]}}),node:U_.input(_a).output(va).query(async({input:t})=>{let{source:n,projected:r}=await Dv(e,t.canvasId),i=r.nodes.find(e=>e.id===t.nodeId),a=r.document.nodes[t.nodeId],o=Z(i===void 0||a===void 0?(0,Q.err)(H(`NOT_FOUND`,`no such canvas node`)):(0,Q.ok)({summary:i,node:a}));return{canvasId:t.canvasId,version:n.version,node:{...o.summary,styles:o.node.styles,...o.node.layout!==void 0&&{layout:o.node.layout},...o.node.appearance!==void 0&&{appearance:o.node.appearance},...o.node.typography!==void 0&&{typography:o.node.typography},...o.node.additionalStyles!==void 0&&{additionalStyles:o.node.additionalStyles},props:o.node.props??{},children:[...r.children.get(t.nodeId)??[]]},next:[`enhance canvas render --canvas ${t.canvasId} --node-id ${t.nodeId} --expected-version ${String(n.version)}`]}})}),Av=(e,t)=>e.expiresAt<=t,jv=(e,t)=>({inviteId:e.id,email:e.email,accessLevel:e.accessLevel,sendCount:e.sendCount,lastSentAt:e.lastSentAt.toISOString(),expiresAt:e.expiresAt.toISOString(),state:Av(e,t)?`expired`:`pending`,deliveryState:e.deliveryState,deliveryError:e.deliveryError??``}),Mv=(e,t)=>G_.input(Xc).output(Zc).mutation(async({input:n,ctx:r})=>{let i=Z(await e.createInvite.execute({...n,invitedByPersonId:r.viewer.personId}));return r.telemetry.emit(`InviteCreated`,{canvasId:n.canvasId,accessLevel:n.accessLevel}),{invite:jv(i.invite,new Date),...t&&{acceptToken:i.token}}}),Nv=e=>K.input(rl).output(al).mutation(async({input:t,ctx:n})=>{let r=Z((await n.verifiedEmails()).mapErr(e=>v_(e.message))),i=Z(await e.acceptInvite.execute({token:t.token,personId:n.viewer.personId,personEmails:r}));return n.telemetry.emit(`InviteAccepted`,{canvasId:i.canvasId,accessLevel:i.accessLevel}),i}),Pv=(e,t=!1)=>U({create:Mv(e,t),accept:Nv(e),preview:G.input(il).output(Yc).query(async({input:t})=>{let n=Z(await e.previewInvite.execute(t));return{...n,expiresAt:n.expiresAt.toISOString()}}),list:X.input(Qc).output($c).query(async({input:t})=>{let n=new Date;return{items:Z(await e.listInvites.execute(t)).map(e=>jv(e,n)),truncated:!1}}),revoke:X.input(el).output(el.pick({inviteId:!0})).mutation(async({input:t})=>Z(await e.revokeInvite.execute(t))),resend:X.input(tl).output(Zc).mutation(async({input:n})=>{let r=Z(await e.resendInvite.execute(n));return{invite:jv(r.invite,new Date),...t&&{acceptToken:r.token}}})}),Fv=e=>K.input(be).output(xe).mutation(async({input:t,ctx:n})=>{let r=Z(await e.remove.execute({...t,personId:n.viewer.personId}));return n.telemetry.emit(`CanvasSoftDeleted`,{canvasId:r.canvasId,threadCount:r.threadCount}),{canvasId:r.canvasId,deletedAt:r.deletedAt.toISOString()}}),Iv=e=>U({delete:Fv(e),move:X.input(Se).output(Ce).mutation(async({input:t,ctx:n})=>({canvas:Z_(Z(await e.move.execute({...t,organisationId:t.organisationId===`personal`?null:t.organisationId,personId:n.viewer.personId})))})),duplicate:X.input(we).output(Te).mutation(async({input:t,ctx:n})=>({canvas:Z_(Z(await e.duplicate.execute({...t,organisationId:t.organisationId===`personal`?null:t.organisationId,personId:n.viewer.personId})))})),deletePermanently:K.input(Ee).output(De).mutation(async({input:t,ctx:n})=>Z(await e.removePermanently.execute({...t,personId:n.viewer.personId}))),restore:K.input(Me).output(Ne).mutation(async({input:t,ctx:n})=>Z(await e.restore.execute({canvasId:t.canvasId,personId:n.viewer.personId})))}),Lv=e=>U({get:Y.input(Ma).output(Na).query(async({input:t,ctx:n})=>{let r=Z(await e.execute({...t,personId:n.viewer.personId}));return r===null?{state:`not-found`}:{state:`committed`,result:{canvasId:r.canvasId,mutationId:r.mutationId,previousVersion:r.previousVersion,version:r.version,operations:r.operations.map(e=>Ni.parse(e)),insertedNodeIds:[...r.insertedNodeIds],changedNodeIds:[...r.changedNodeIds],removedNodeIds:[...r.removedNodeIds],boxes:{...r.boxes},affectedBounds:r.affectedBounds,...r.copiedNodeIds!==void 0&&{copiedNodeIds:{...r.copiedNodeIds}},next:[]}}})}),Rv=ja.pick({canvasId:!0,mutationId:!0,previousVersion:!0,version:!0,insertedNodeIds:!0,changedNodeIds:!0,removedNodeIds:!0}).extend({review:Fa}),zv=e=>U({revertMutations:Y.input(n.object({canvasId:n.uuid(),mutationIds:n.array(n.uuid()).min(1).max(1e3),reversalId:n.uuid()})).output(ja).mutation(async({input:t,ctx:n})=>{let r=Z(await e.mutationRecovery.undo({...t,actor:J_(n.viewer)}));return{...r,operations:r.operations.map(e=>Ni.parse(e)),insertedNodeIds:[...r.insertedNodeIds],changedNodeIds:[...r.changedNodeIds],removedNodeIds:[...r.removedNodeIds],next:[]}}),mutationReceipt:Y.input(n.object({canvasId:n.uuid(),mutationId:n.uuid()})).output(Rv.nullable()).query(async({input:t,ctx:n})=>{if(n.viewer.kind!==`agent`)throw W(I(`FORBIDDEN`,`Receipt reconciliation requires the owning desktop credential.`));let r=Z(await e.mutationRecovery.receipt({...t,personId:n.viewer.personId}));return r===null?null:{...r,review:Fa.parse(r.review),insertedNodeIds:[...r.insertedNodeIds],changedNodeIds:[...r.changedNodeIds],removedNodeIds:[...r.removedNodeIds]}})}),Bv=e=>({personId:e.personId,email:e.email,displayName:e.displayName,initials:e.initials,avatarUrl:e.avatarUrl,accessLevel:e.accessLevel,isPending:e.isPending,reviewState:e.reviewState,lastViewedAt:e.lastViewedAt?.toISOString()??null}),Vv=e=>U({list:X.input(sl).output(cl).query(async({input:t})=>({items:Z(await e.listParticipants.execute(t)).map(e=>Bv(e)),truncated:!1})),setAccess:X.input(ll).output(ll.pick({personId:!0,accessLevel:!0})).mutation(async({input:t})=>(Z(await e.setParticipantAccess.execute(t)),{personId:t.personId,accessLevel:t.accessLevel})),revoke:X.input(ul).output(dl).mutation(async({input:t})=>Z(await e.revokeParticipant.execute(t)))}),Hv=e=>{if(e.purpose!==`preparation`||e.preparationRequest===null||e.preparationRequest===void 0)return null;let t=to.safeParse({id:e.id,canvasId:e.canvasId,requestedVersion:e.requestedVersion,...e.preparationRequest,phase:e.phase,state:e.state,attempt:e.attempt,createdAt:e.createdAt.toISOString(),updatedAt:e.updatedAt.toISOString(),result:e.result,failure:e.failure});return t.success?t.data:null},Uv=e=>Y_(e)??Z((0,Q.err)(H(`UNAUTHORIZED`,`this call needs an agent token`))),Wv=e=>Hv(e)??Z((0,Q.err)(H(`NOT_FOUND`,`no such preparation`))),Gv=e=>{if(e.kind===`compile-screens`)return;if(e.kind===`compile-html`)return e.fragments[0]?.parentNodeId;if(e.kind===`duplicate`)return e.nodeIds[0];let t=e.changes[0];if(t!==void 0)return`nodeIds`in t?t.nodeIds[0]:t.nodeId},Kv=e=>U({create:W_.meta({description:`Prepare a typed canvas arrangement, duplicate or HTML compilation through the native renderer without committing it.`}).input(no).output(ro).mutation(async({input:t,ctx:n})=>{let r=Uv(n.viewer),i=Gv(t.request);if(i===void 0)return Z((0,Q.err)(H(`BAD_REQUEST`,`preparation needs explicit objects`)));let a=Z(await e.create.execute({canvasId:t.canvasId,expectedVersion:t.expectedVersion,purpose:`preparation`,preparationRequest:{request:t.request,scope:t.scope},scope:t.scope,target:{kind:`node`,nodeId:i},scale:1,requesterPersonId:r.personId,requesterTokenId:r.tokenId,requesterActor:r.mutationActor,idempotencyKey:n.idempotencyKey}));return{job:Wv(a.job),alreadyExists:a.alreadyExists}}),get:q.input(io).output(ao).query(async({input:t,ctx:n})=>({job:Wv(Z(await e.get.execute({jobId:t.jobId,actor:Uv(n.viewer)})))})),cancel:q.input(io).output(ao).mutation(async({input:t,ctx:n})=>{let r=Uv(n.viewer);return Wv(Z(await e.get.execute({jobId:t.jobId,actor:r}))),{job:Wv(Z(await e.cancel.execute({jobId:t.jobId,actor:r})))}})}),qv=15e3,Jv=e=>{if(e.kind!==`agent`)throw TypeError(`agent canvas procedure did not narrow its viewer`);let t=J_(e);if(t.kind!==`agent`)throw TypeError(`agent canvas procedure did not narrow its viewer`);return{...t,tokenId:e.tokenId}},Yv=(e,t)=>{if(!(t||e===`reading`||e===`rendering`))throw W(H(`FORBIDDEN`,`this canvas is read-only for you`))},Xv=e=>U({begin:U_.input(jo).output(Mo).mutation(async({input:t,ctx:n})=>{if(n.viewer.kind!==`agent`)throw TypeError(`agent identity was not narrowed`);Yv(t.phase,n.canvasAccess.canComment);let r=Z(await e.begin({...t,actor:Jv(n.viewer)}));return{activityId:r.activityId,expiresAt:r.expiresAt.toISOString(),renewAfterMs:qv}}),renew:U_.input(No).output(Mo).mutation(async({input:t,ctx:n})=>{if(n.viewer.kind!==`agent`)throw TypeError(`agent identity was not narrowed`);Yv(t.phase,n.canvasAccess.canComment);let r=Z(await e.renew({...t,actor:Jv(n.viewer)}));return{activityId:r.activityId,expiresAt:r.expiresAt.toISOString(),renewAfterMs:qv}}),end:U_.input(Po).output(Fo).mutation(async({input:t,ctx:n})=>{if(n.viewer.kind!==`agent`)throw TypeError(`agent identity was not narrowed`);return Z(await e.end({...t,tokenId:n.viewer.tokenId})),{ended:!0}})}),Zv=(e,t)=>U({ticket:J.input(ko).output(Ao).mutation(async({input:n,ctx:r})=>{let i=Z(await e.issueRealtimeTicket.execute({canvasId:n.canvasId,viewer:r.viewer}));return{endpoint:t,ticket:i.ticket,protocol:po,expiresAt:i.expiresAt.toISOString()}}),activity:Xv(e.activity)}),Qv=`root`,$v=(e,t)=>{let n=t=>{if(t===Qv)return Qv;let n=t,r=new Set;for(;n!==Qv;){if(r.has(n))return null;r.add(n);let t=e.relationships[n]?.parentId;if(t===void 0)return null;if(t===Qv)return n;n=t}return Qv},r=new Set(t.flatMap(e=>n(e)??[]));return r.size===0?null:r.size===1?r.values().next().value??null:Qv},ey=(e,t,n)=>[`enhance canvas tree --canvas ${e}`,`enhance canvas render --canvas ${e} --expected-version ${String(t)}`,...n.map(t=>`enhance canvas node --canvas ${e} --node-id ${t}`)].slice(0,12),ty=(e,t,n)=>Ev(t.document).map(r=>{let i=new Map(r.nodes.map(e=>[e.id,e])),a=n?.status===`updating`||n?.status===`unsupported`?n.status:null,o=a===null?n?.selectedNodeIds??[]:[],s=o.flatMap(e=>{let t=i.get(e);return t===void 0?[]:[t]}),c=new Set(s.map(e=>e.id)),l=o.filter(e=>!c.has(e));return{canvasId:e,status:a??(n===null?`offline`:o.length===0?`none`:s.length===0?`stale`:`selected`),documentVersion:t.version,selectionRevision:n?.selectionRevision??null,selectionChangedAt:n?.selectionChangedAt?.toISOString()??null,selectedNodeIds:[...o],missingNodeIds:l,nodes:s,contextRootId:$v(r.document,s.map(e=>e.id)),visibleWorldBox:n?.visibleWorldBox??null,next:ey(e,t.version,s.map(e=>e.id))}}),ny=(e,t)=>U_.input(is).output(as).query(async({input:n,ctx:r})=>{if(r.viewer.kind!==`agent`)throw TypeError(`agent identity was not narrowed`);let[i,a]=await Promise.all([e.execute({canvasId:n.canvasId,personId:r.viewer.personId}),t.execute(n.canvasId)]);return Z(ty(n.canvasId,Z(a),Z(i)).mapErr(e=>H(`INTERNAL`,e)))}),ry=J.input(le).output(u).mutation(({input:e,ctx:t})=>(t.logger.warn({event:`ThumbnailBlobUnavailable`,canvasId:e.canvasId,blobId:e.thumbnailId,clientReleaseIdentity:e.clientReleaseIdentity,attemptedOperation:e.attemptedOperation,recoveryOutcome:e.recoveryOutcome},`event`),{recorded:!0})),iy=()=>U({reportUnavailable:ry}),ay=e=>e.kind===`agent`?{kind:`agent`,personId:e.personId,displayName:e.displayName,initials:e.initials,tokenLabel:e.tokenLabel??`Agent`}:{kind:`person`,personId:e.personId,displayName:e.displayName,initials:e.initials},oy=e=>({id:e.id,canvasId:e.canvasId,documentVersion:e.documentVersion,origin:e.origin,restoreRole:e.restoreRole,retention:e.retention,title:e.title,description:e.description,actor:e.actor,sourceVersionEntryId:e.sourceVersionEntryId,expiresAt:e.expiresAt?.toISOString()??null,createdAt:e.createdAt.toISOString(),updatedAt:e.updatedAt.toISOString(),screenCount:e.screenCount}),sy=e=>({screenId:e.screenId,route:e.route,title:e.title,viewport:e.viewport,atMs:e.atMs,sourceRecordingId:e.sourceRecordingId,assetBundle:e.assetBundle===null?null:{...e.assetBundle,assets:[...e.assetBundle.assets]},download:e.download===null?null:{url:e.download.url,expiresAt:e.download.expiresAt.toISOString(),bytes:e.download.bytes}}),cy=e=>H_.input(yc).output(bc).query(async({input:t,ctx:n})=>{let r=Z(await e.versions.list({...t,personId:n.viewer.personId}));return n.telemetry.emit(`CanvasVersionListServed`,{entryCount:r.items.length,automaticIncluded:+!!t.includeAutomatic,hasMore:r.nextCursor===null?0:1}),{current:{documentVersion:r.current.documentVersion,updatedAt:r.current.updatedAt.toISOString()},items:r.items.map(e=>oy(e)),nextCursor:r.nextCursor,hasExpiredHistory:r.hasExpiredHistory}}),ly=e=>H_.input(xc).output(wc).query(async({input:t,ctx:n})=>{let r=Z(await e.versions.get({...t,withRoutes:n.canvasAccess.canSeeRoutes}));return r.outcome===`corrupt`?{outcome:r.outcome,entry:oy(r.entry)}:{outcome:`ready`,entry:oy(r.entry),document:r.document,screens:r.screens.map(e=>sy(e))}}),uy=e=>Y.input(Ec).output(kc).mutation(async({input:t,ctx:n})=>({entry:oy(Z(await e.versions.name({...t,actor:ay(n.viewer),canManageAllMetadata:n.canvasAccess.canManage})))})),dy=e=>Y.input(Dc).output(kc).mutation(async({input:t,ctx:n})=>({entry:oy(Z(await e.versions.name({canvasId:t.canvasId,target:{kind:`version`,versionId:t.versionId},title:t.title,description:t.description,actor:ay(n.viewer),canManageAllMetadata:n.canvasAccess.canManage})))})),fy=e=>Y.input(Oc).output(kc).mutation(async({input:t,ctx:n})=>({entry:oy(Z(await e.versions.removeName({...t,requesterPersonId:n.viewer.personId,canManageAllMetadata:n.canvasAccess.canManage})))})),py=e=>Y.input(Ac).output(jc).mutation(async({input:t,ctx:n})=>{if(n.viewer.kind!==`person`)throw W(H(`FORBIDDEN`,`an agent cannot restore canvas history`));let r=Z(await e.versions.restore({...t,actor:ay(n.viewer)}));return n.telemetry.emit(`CanvasVersionRestored`,{documentVersion:r.version,outcome:`restored`}),r}),my=e=>X.input(Mc).output(Nc).mutation(async({input:t,ctx:n})=>{if(n.viewer.kind!==`person`)throw W(H(`FORBIDDEN`,`an agent cannot duplicate canvas history`));return Z(await e.versions.duplicate({...t,personId:n.viewer.personId,organisationId:t.organisationId===`personal`?null:t.organisationId}))}),hy=e=>U({list:cy(e),get:ly(e),name:uy(e),updateMetadata:dy(e),removeName:fy(e),restore:py(e),duplicate:my(e)}),gy=n.strictObject({canvasId:n.uuid(),frameId:n.string().min(1),captureId:n.uuid()}),_y=n.strictObject({captureId:n.uuid(),capturedAt:n.iso.datetime(),commit:n.string().max(200).optional(),url:n.string().min(1),width:n.number().positive(),height:n.number().positive(),pixelRatio:n.number().positive()}),vy=n.strictObject({frameId:n.string(),before:_y,after:_y}),yy=e=>{let t=Y_(e);return t===null?Z((0,Q.err)(H(`UNAUTHORIZED`,`Capture publication requires an agent token.`))):{mutation:t.mutationActor,tokenId:t.tokenId}},by=e=>U({comparison:H_.input(gy).output(vy.nullable()).query(async({input:t})=>Z(await e.comparison(t))),begin:q.input(Cl).output(wl).mutation(async({input:t,ctx:n})=>({run:wl.shape.run.parse(Z(await e.begin(t,yy(n.viewer))).run)})),get:q.input(Tl).output(Dl).query(async({input:t,ctx:n})=>Dl.parse(Z(await e.get(t.runId,yy(n.viewer))))),reserveAssets:q.input(Ol).output(kl).mutation(async({input:t,ctx:n})=>kl.parse(Z(await e.reserve(t,yy(n.viewer))))),seal:q.input(Al).output(Dl).mutation(async({input:t,ctx:n})=>Dl.parse(Z(await e.seal(t.manifest,yy(n.viewer))))),publish:q.input(Tl).output(Dl).mutation(async({input:t,ctx:n})=>Dl.parse(Z(await e.publish(t.runId,yy(n.viewer))))),cancel:q.input(Tl).output(Dl).mutation(async({input:t,ctx:n})=>Dl.parse(Z(await e.cancel(t.runId,yy(n.viewer)))))}),xy=e=>K.input(ne).output(re).query(async({ctx:t})=>({firstAgentWorkAt:Z(await e.execute({personId:t.viewer.personId}))?.toISOString()??null})),Sy=e=>({...e,createdAt:e.createdAt.toISOString(),path:`/v1/font-catalog/${e.kind}/${e.ownerId}/${e.sha256}`}),Cy=({fontCatalog:e})=>U({list:K.meta({description:`List fonts uploaded by you or shared with your team.`}).input(Lc).output(Wc).query(async({input:t,ctx:n})=>{let r=Z(await e.list({...t,personId:n.viewer.personId}));return{...r,entries:r.entries.map(e=>Sy(e))}}),reserve:K.meta({description:`Reserve an immutable personal or team font upload.`}).input(Bc).output(Vc).mutation(async({input:t,ctx:n})=>{let r=Z(await e.reserve({...t,personId:n.viewer.personId}));return{upload:{...r,expiresAt:r.expiresAt.toISOString()}}}),complete:K.meta({description:`Publish a verified font version with acknowledged sharing rights.`}).input(Hc).output(Uc).mutation(async({input:t,ctx:n})=>Sy(Z(await e.complete({...t,personId:n.viewer.personId})))),remove:K.meta({description:`Remove a library entry while retaining existing file font copies.`}).input(Gc).output(n.object({removed:n.literal(!0)})).mutation(async({input:t,ctx:n})=>(Z(await e.remove({...t,personId:n.viewer.personId})),{removed:!0})),import:K.meta({description:`Copy selected library font versions into an editable file.`}).input(Kc).output(qc).mutation(async({input:t,ctx:n})=>({resources:Z(await e.import({...t,personId:n.viewer.personId})).map(e=>({entry:Sy(e),path:Bt(t.canvasId,e.sha256)}))}))}),wy=e=>`rootNodeId`in e,Ty=e=>`storageKey`in e,Ey=(e,t)=>({canvasId:e.canvasId,requestedVersion:e.requestedVersion,loadedVersion:t.loadedVersion,target:e.target,...t.sourceState!==null&&t.sourceState!==void 0&&{sourceState:t.sourceState},bounds:t.bounds,width:t.width,height:t.height,scale:t.scale,contentType:t.contentType,bytes:t.bytes,warnings:[...t.warnings],timings:[...t.timings],...t.snapshot!==null&&t.snapshot!==void 0&&{snapshot:t.snapshot},expiresAt:t.expiresAt.toISOString()}),Dy=e=>({...e,idMap:{...e.idMap},insertedNodeIds:[...e.insertedNodeIds],removedNodeIds:[...e.removedNodeIds],boxes:{...e.boxes},affectedBounds:{...e.affectedBounds},report:{...e.report,issues:[...e.report.issues]}}),Oy=e=>{let t=e.conversionRequest?.source;return t?.kind===`screen`?t:{kind:`html`,label:t?.label??``}},ky=e=>{if(e.purpose===`conversion`||e.purpose===`preparation`)return null;let t=e.purpose,n={id:e.id,canvasId:e.canvasId,purpose:t,phase:e.phase,requestedVersion:e.requestedVersion,target:e.target,...e.sourceState!==null&&e.sourceState!==void 0&&{sourceState:e.sourceState},scale:e.requestedScale,...e.maxOutputPixels!==void 0&&{maxOutputPixels:e.maxOutputPixels},format:`png`,attempt:e.attempt,createdAt:e.createdAt.toISOString(),updatedAt:e.updatedAt.toISOString()};return e.state===`succeeded`&&e.result!==null&&Ty(e.result)?{...n,state:`succeeded`,phase:`complete`,result:Ey(e,e.result),failure:null}:e.state===`failed`&&e.failure!==null?{...n,state:`failed`,result:null,failure:e.failure}:e.state===`cancelled`&&e.failure?.reason===`CANCELLED`?{...n,state:`cancelled`,result:null,failure:{...e.failure,reason:`CANCELLED`}}:e.state===`expired`&&e.failure?.reason===`EXPIRED`?{...n,state:`expired`,result:null,failure:{...e.failure,reason:`EXPIRED`}}:e.state===`running`?{...n,state:`running`,result:null,failure:null}:e.state===`queued`?{...n,state:`queued`,result:null,failure:null}:null},Ay=e=>{if(e.purpose!==`conversion`||e.target.kind!==`node`||e.conversionRequest===null||e.conversionRequest===void 0)return null;let t={id:e.id,canvasId:e.canvasId,source:Oy(e),destination:e.conversionRequest.destination,phase:e.phase,requestedVersion:e.requestedVersion,attempt:e.attempt,createdAt:e.createdAt.toISOString(),updatedAt:e.updatedAt.toISOString()};return e.state===`succeeded`&&e.result!==null&&wy(e.result)?{...t,state:`succeeded`,phase:`complete`,result:Dy(e.result),failure:null}:e.state===`failed`&&e.failure!==null?{...t,state:`failed`,result:null,failure:e.failure}:e.state===`cancelled`&&e.failure?.reason===`CANCELLED`?{...t,state:`cancelled`,result:null,failure:{...e.failure,reason:`CANCELLED`}}:e.state===`expired`&&e.failure?.reason===`EXPIRED`?{...t,state:`expired`,result:null,failure:{...e.failure,reason:`EXPIRED`}}:e.state===`running`?{...t,state:`running`,result:null,failure:null}:e.state===`queued`?{...t,state:`queued`,result:null,failure:null}:null},jy=e=>Y_(e)??Z((0,Q.err)(H(`UNAUTHORIZED`,`this call needs an agent token`))),My=e=>ky(e)??Z((0,Q.err)(H(`INTERNAL`,`render outcome is incomplete`))),Ny=e=>Ay(e)??Z((0,Q.err)(H(`INTERNAL`,`primitive import outcome is incomplete`))),Py=(e,t)=>e.purpose!==`preparation`&&t===`conversion`==(e.purpose===`conversion`)?e:Z((0,Q.err)(H(`NOT_FOUND`,`no such ${t}`))),Fy=e=>U_.input(lr).output(br).mutation(async({input:t,ctx:n})=>{let r=jy(n.viewer),i=Z(await e.create.execute({canvasId:t.canvasId,purpose:`inspection`,expectedVersion:t.expectedVersion,target:t.target,scope:t.scope,sourceState:t.sourceState??null,scale:t.scale,maxOutputPixels:t.maxOutputPixels,requesterPersonId:r.personId,requesterTokenId:r.tokenId,idempotencyKey:n.idempotencyKey}));return{job:My(i.job),alreadyExists:i.alreadyExists}}),Iy=e=>q.input(xr).output(Sr).query(async({input:t,ctx:n})=>{let r=Z(await e.get.execute({jobId:t.jobId,actor:jy(n.viewer)}));return{job:My(Py(r,`render`))}}),Ly=e=>W_.input(Or).output(kr).mutation(async({input:t,ctx:n})=>{let r=jy(n.viewer),i=Z(await e.create.execute({canvasId:t.canvasId,purpose:`snapshot`,expectedVersion:t.context?.expectedVersion,scope:t.context?.request.scope,snapshotRequest:t.context?.request,target:{kind:`node`,nodeId:`rec_${t.recordingId}`},sourceState:{kind:`recording`,recordingId:t.recordingId,atMs:t.atMs},scale:1,requesterPersonId:r.personId,requesterTokenId:r.tokenId,requesterActor:r.mutationActor,idempotencyKey:n.idempotencyKey}));return{job:My(i.job),alreadyExists:i.alreadyExists}}),Ry=e=>W_.meta({description:`Import one source through the canonical editable-primitives compiler.`}).input(Lr).output(Rr).mutation(async({input:t,ctx:n})=>{let r=jy(n.viewer),i=t.source.kind===`screen`?t.source.nodeId:t.destination.kind===`adjacent`?Z((0,Q.err)(H(`BAD_REQUEST`,`authored HTML requires a destination`))):t.destination.targetNodeId,a=Z(await e.create.execute({canvasId:t.canvasId,purpose:`conversion`,expectedVersion:t.expectedVersion,target:{kind:`node`,nodeId:i},scope:t.scope,sourceState:null,conversionRequest:{source:t.source,destination:t.destination,...(t.scope!==void 0||t.revisionPolicy!==void 0)&&{revisionPolicy:t.scope===void 0?t.revisionPolicy:`strict`},...t.writeScope!==void 0&&{writeScope:t.writeScope}},mutationId:t.mutationId,scale:1,requesterPersonId:r.personId,requesterTokenId:r.tokenId,requesterActor:r.mutationActor,idempotencyKey:n.idempotencyKey}));return{job:Ny(a.job),alreadyExists:a.alreadyExists}}),zy=e=>q.meta({description:`Inspect the progress or committed result of a primitive import.`}).input(zr).output(Br).query(async({input:t,ctx:n})=>{let r=Py(Z(await e.get.execute({jobId:t.jobId,actor:jy(n.viewer)})),`conversion`);return{job:Ny(r)}}),By=e=>q.meta({description:`Cancel a queued primitive import before compilation begins.`}).input(Vr).output(Hr).mutation(async({input:t,ctx:n})=>{let r=jy(n.viewer),i=Z(await e.get.execute({jobId:t.jobId,actor:r}));Py(i,`conversion`);let a=Z(await e.cancel.execute({jobId:t.jobId,actor:r}));return{job:Ny(a)}}),Vy=e=>q.input(Cr).output(wr).mutation(async({input:t,ctx:n})=>{let r=jy(n.viewer),i=Z(await e.get.execute({jobId:t.jobId,actor:r}));return Py(i,`render`),{job:My(Z(await e.cancel.execute({jobId:t.jobId,actor:r})))}}),Hy=e=>q.input(Tr).output(Er).query(async({input:t,ctx:n})=>{let r=Z(await e.download.execute({jobId:t.jobId,actor:jy(n.viewer)}));return{jobId:t.jobId,download:{url:r.url,expiresAt:r.expiresAt.toISOString(),bytes:r.bytes}}}),Uy=e=>U({create:Fy(e),snapshot:Ly(e),importSource:Ry(e),getImport:zy(e),cancelImport:By(e),get:Iy(e),cancel:Vy(e),download:Hy(e)}),Wy=e=>U({exposure:z_.input(Xo).output(Qo).query(async({input:t,ctx:n})=>{let r=Z(await e.expose.execute({jobId:n.viewer.jobId,canvasId:n.viewer.canvasId,requestedVersion:n.viewer.requestedVersion}));if(t.jobId!==r.id)return Z((0,Q.err)(H(`NOT_FOUND`,`no such render`)));let i={jobId:r.id,canvasId:r.canvasId,requestedVersion:r.requestedVersion,target:r.target};return r.purpose===`preparation`?r.preparationRequest===null||r.preparationRequest===void 0?Z((0,Q.err)(H(`INTERNAL`,`a preparation job has no request`))):Qo.parse({...i,purpose:r.purpose,preparation:r.preparationRequest,screens:r.screens?.map(e=>sy(e)),scale:1,format:`json`}):r.purpose===`conversion`?r.target.kind!==`node`||r.conversionRequest===null||r.conversionRequest===void 0?Z((0,Q.err)(H(`INTERNAL`,`a conversion job has no source request`))):{...i,purpose:`conversion`,target:r.target,conversion:r.conversionRequest,scale:1,format:`json`}:{...i,purpose:r.purpose,...r.sourceState!==null&&r.sourceState!==void 0&&{sourceState:r.sourceState},scale:r.requestedScale,...r.maxOutputPixels!==void 0&&{maxOutputPixels:r.maxOutputPixels},format:`png`}})}),Gy=e=>bi.parse({...e,publishedAt:e.publishedAt.toISOString()}),Ky=({textStyleLibrary:e})=>U({list:K.meta({description:`Find published text style libraries in your teams and files shared with you.`}).input(Ci).output(Ti).query(async({input:t,ctx:n})=>{let r=Z(await e.list({...t,personId:n.viewer.personId}));return{...r,items:r.items.map(e=>({...e,publishedAt:e.publishedAt.toISOString()}))}}),get:K.meta({description:`Read the last published text styles from an accessible source file.`}).input(_i).output(bi.nullable()).query(async({input:t,ctx:n})=>{let r=Z(await e.get({...t,personId:n.viewer.personId}));return r===null?null:Gy(r)}),publish:K.meta({description:`Publish selected text style changes without exposing unfinished edits or updating consumer files.`}).input(xi).output(bi).mutation(async({input:t,ctx:n})=>Gy(Z(await e.publish({...t,personId:n.viewer.personId}))))}),qy=e=>Math.min(1,Math.max(0,e)),Jy=e=>e.target??(e.element===null?null:{version:1,kind:`element`,locator:e.element,attachment:{x:.5,y:.5},fallbackBounds:{x:qy(e.point.x),y:qy(e.point.y),width:0,height:0}}),Yy=e=>{if(e.on===`canvas`)return{on:`canvas`,point:e.point};if(e.on===`node`)return{on:`node`,nodeId:e.nodeId,point:e.point,element:null};let t=Jy(e);return{on:`screen`,nodeId:e.nodeId,screenId:e.screenId,point:e.point,element:e.element,...t!==null&&{target:t}}},Xy=(e,t)=>({kind:e.authorKind,personId:e.authorPersonId,name:e.authorName,initials:e.authorInitials,avatarUrl:t(e.authorPersonId).avatarUrl,tokenLabel:e.authorTokenLabel}),Zy=(e,t)=>{let n=new Map;for(let t of e.reactions){let e=n.get(t.emoji)??[];e.push(t.personId),n.set(t.emoji,e)}return[...n].map(([e,n])=>({emoji:e,people:n.map(e=>({personId:e,name:t(e).displayName}))}))},Qy=(e,t)=>({messageId:e.id,seq:e.seq,body:e.deletedAt===null?e.body:`(deleted)`,author:Xy(e,t),createdAt:e.createdAt.toISOString(),editedAt:e.editedAt?.toISOString()??null,mentions:e.mentionedPersonIds.map(e=>({personId:e,name:t(e).displayName})),reactions:Zy(e,t)}),$y=(e,t)=>{let[n]=e.messages;return{threadId:e.thread.id,revision:e.thread.revision,canvasId:e.thread.canvasId,anchor:Yy(e.thread.anchor),author:Xy(n,t),messages:e.messages.map(e=>Qy(e,t)),messageCount:e.thread.messageCount,hasMoreMessages:e.thread.messageCount>e.messages.length,isResolved:e.thread.resolvedAt!==null,resolvedAt:e.thread.resolvedAt?.toISOString()??null,resolvedBy:e.thread.resolvedByPersonId===null?null:{kind:e.thread.resolvedByTokenId===null?`person`:`agent`,personId:e.thread.resolvedByPersonId,name:t(e.thread.resolvedByPersonId).displayName,tokenLabel:e.thread.resolvedByTokenLabel},createdAt:e.thread.createdAt.toISOString(),lastMessageAt:e.thread.lastMessageAt.toISOString()}},eb=e=>{let t=new Map(e.map(e=>[e.personId,e]));return e=>{let n=t.get(e);return c.ok(n,`comment directory does not contain ${e}`),{displayName:n.displayName,avatarUrl:n.avatarUrl}}},tb=async(e,t)=>$y(t,eb(Z(await e.execute([t])))),nb=async(e,t)=>{let n=eb(Z(await e.execute([{...t,messages:[t.messages[0],...t.messages.slice(1),t.postedMessage]}])));return{...$y(t,n),postedMessage:Qy(t.postedMessage,n)}},rb=e=>e.kind===`agent`?{tokenId:e.tokenId,tokenLabel:e.tokenLabel}:{tokenId:null,tokenLabel:null},ib=e=>({kind:e.kind,personId:e.personId,...rb(e),...e.kind===`agent`&&e.agentAttribution!==void 0&&{agentAttribution:e.agentAttribution},name:e.displayName,initials:e.initials}),ab=e=>{let t=e.on===`screen`?e.element:null;return t===null?{hasElementAnchor:0,anchorHasSource:0,selectorDepth:0}:{hasElementAnchor:1,anchorHasSource:t.source===null?0:1,selectorDepth:t.selector.split(`>`).length}},ob=e=>Y.input(nu).output(Yl).mutation(async({input:t,ctx:n})=>{let r=Z(await e.start.execute({canvasId:t.canvasId,context:t.context,clientThreadId:t.clientThreadId,anchor:t.anchor,body:t.body,mentionedPersonIds:t.mentionedPersonIds,author:ib(n.viewer),mintMembership:n.canvasAccess.accessLevel===null}));return n.telemetry.emit(`CommentThreadStarted`,{canvasId:t.canvasId,threadId:r.thread.id,anchorKind:t.anchor.on,...ab(t.anchor),bodyLength:t.body.length}),tb(e.directory,r)}),sb=e=>Y.input(cu).output(Yl).mutation(async({input:t,ctx:n})=>{let r=Z(await e.resolve.execute({...t,personId:n.viewer.personId,...rb(n.viewer)}));return r.changed&&t.resolved&&n.telemetry.emit(`CommentThreadResolved`,{canvasId:t.canvasId,threadId:r.thread.id,resolvedByKind:n.viewer.kind,secondsSinceFirstMessage:Math.round((r.thread.lastMessageAt.getTime()-r.thread.createdAt.getTime())/1e3)}),tb(e.directory,r)}),cb=e=>U({start:ob(e),resolve:sb(e),react:Y.input(ou).output(Yl).mutation(async({input:t,ctx:n})=>tb(e.directory,Z(await e.react.execute({...t,personId:n.viewer.personId})))),reply:Y.input(ru).output(iu).mutation(async({input:t,ctx:n})=>{let r=Z(await e.reply.execute({...t,author:ib(n.viewer),isGuest:n.canvasAccess.accessLevel===null}));return n.telemetry.emit(`CommentReplied`,{canvasId:t.canvasId,threadId:r.thread.id,messageIndex:r.thread.messageCount}),nb(e.directory,r)}),edit:Y.input(au).output(Yl).mutation(async({input:t,ctx:n})=>tb(e.directory,Z(await e.edit.execute({...t,personId:n.viewer.personId})))),move:Y.input(su).output(Yl).mutation(async({input:t})=>tb(e.directory,Z(await e.move.execute(t)))),delete:Y.input(lu).output(uu).mutation(async({input:t,ctx:n})=>Z(await e.remove.execute({...t,personId:n.viewer.personId,canManage:n.canvasAccess.canManage})))}),lb=e=>J.input(Ql).output($l).query(async({input:t,ctx:n})=>{if(!n.canvasAccess.canSeeComments){if(t.page!==void 0)throw W(H(`FORBIDDEN`,`You cannot read comments on this canvas.`));return{items:[],truncated:!1}}let r=Z(await e.list.execute(t)),i=eb(Z(await e.directory.execute(r.items)));return{items:r.items.map(e=>$y(e,i)),truncated:r.truncated,...r.nextCursor!==void 0&&{nextCursor:r.nextCursor}}}),ub=e=>J.input(eu).output(tu).query(async({input:t,ctx:n})=>{if(!n.canvasAccess.canSeeComments)throw W(H(`FORBIDDEN`,`You cannot read comments on this canvas.`));let r=Z(await e.get.execute(t)),i=eb(Z(await e.directory.execute([r.view]))),a=$y(r.view,i);return{thread:a,messages:a.messages.filter(e=>e.seq>r.afterSeq),nextCursor:r.nextCursor}}),db=e=>({list:lb(e),get:ub(e)}),fb=e=>U({submit:K.meta({description:`Send human-authored dashboard feedback to the Enhance team.`}).input(Uu).output(Wu).mutation(async({input:t,ctx:n})=>{if(n.viewer.kind!==`person`)throw W(I(`FORBIDDEN`,`feedback requires a browser session`));if(!await n.consumeFeedbackAttempt())throw W(I(`RATE_LIMITED`,`Please wait one minute before sending feedback again.`));return Z(await e.execute({...t,diagnostics:ed(t.diagnostics),viewer:n.viewer}))})}),pb=e=>U({list:K.input(cd).output(ld).query(async({ctx:t})=>({items:Z(await e.list.execute({personId:t.viewer.personId})),truncated:!1})),create:K.input(ud).output(dd).mutation(async({input:t,ctx:n})=>({organisation:Z(await e.create.execute({name:t.name,personId:n.viewer.personId}))})),update:K.input(fd).output(dd).mutation(async({input:t,ctx:n})=>({organisation:Z(await e.update.execute({...t,personId:n.viewer.personId}))})),delete:K.input(pd).output(md).mutation(async({input:t,ctx:n})=>Z(await e.remove.execute({...t,personId:n.viewer.personId})))}),mb=(e,t)=>({inviteId:e.id,email:e.email,role:e.role,sendCount:e.sendCount,lastSentAt:e.lastSentAt.toISOString(),expiresAt:e.expiresAt.toISOString(),state:e.expiresAt<=t?`expired`:`pending`,deliveryState:e.deliveryState,deliveryError:e.deliveryError??``}),hb=e=>K.input(Dd).output(Od).mutation(async({input:t,ctx:n})=>{let r=Z(await e.createInvite.execute({...t,invitedByPersonId:n.viewer.personId}));return r.kind===`member`?r:{kind:`invitation`,invite:mb(r.invite,new Date)}}),gb=e=>K.input(Ad).output(jd).query(async({input:t,ctx:n})=>({items:Z(await e.listInvites.execute({...t,personId:n.viewer.personId})).map(e=>mb(e,new Date)),truncated:!1})),_b=e=>K.input(Md).output(Md.pick({inviteId:!0})).mutation(async({input:t,ctx:n})=>Z(await e.revokeInvite.execute({...t,personId:n.viewer.personId}))),vb=e=>K.input(Nd).output(kd).mutation(async({input:t,ctx:n})=>({invite:mb(Z(await e.resendInvite.execute({...t,personId:n.viewer.personId})),new Date)})),yb=e=>G.input(Fd).output(Ld).query(async({input:t})=>{let n=Z(await e.previewInvite.execute(t));return{...n,expiresAt:n.expiresAt.toISOString()}}),bb=e=>K.input(Id).output(Rd).mutation(async({input:t,ctx:n})=>{let r=Z((await n.verifiedEmails()).mapErr(e=>v_(e.message)));return Z(await e.acceptInvite.execute({...t,personId:n.viewer.personId,personEmails:r}))}),xb=e=>U({create:hb(e),list:gb(e),revoke:_b(e),resend:vb(e),preview:yb(e),accept:bb(e)}),Sb=e=>K.input(gd).output(_d).query(async({input:t,ctx:n})=>({items:Z(await e.listMembers.execute({organisationId:t.organisationId,personId:n.viewer.personId})),truncated:!1})),Cb=e=>K.input(vd).output(yd).mutation(async({input:t,ctx:n})=>Z(await e.addMember.execute({organisationId:t.organisationId,personId:n.viewer.personId,email:t.email,role:t.role}))),wb=e=>K.input(bd).output(xd).mutation(async({input:t,ctx:n})=>Z(await e.setMemberRole.execute({...t,actorPersonId:n.viewer.personId}))),Tb=e=>K.input(Sd).output(Cd).mutation(async({input:t,ctx:n})=>Z(await e.removeMember.execute({...t,actorPersonId:n.viewer.personId}))),Eb=e=>K.input(wd).output(Td).mutation(async({input:t,ctx:n})=>Z(await e.transferOwnership.execute({organisationId:t.organisationId,personId:n.viewer.personId,toPersonId:t.personId}))),Db=e=>U({list:Sb(e),add:Cb(e),setRole:wb(e),remove:Tb(e),transferOwnership:Eb(e)}),Ob=e=>{let[t=``,n=``,r=``,i=``,a=``]=e.split(`-`,5);return`${((Number.parseInt(t,16)^1162758195)>>>0).toString(16).padStart(8,`0`)}-${n}-5${r.slice(1)}-a${i.slice(1)}-${a}`},kb=e=>({id:e.id,preparedCanvasId:Ob(e.id),displayName:e.displayName,initials:e.initials,avatarUrl:e.avatarUrl,email:e.email,createdAt:e.createdAt.toISOString()}),Ab=e=>({id:e.id,label:e.label,createdAt:e.createdAt.toISOString(),lastUsedAt:e.lastUsedAt?.toISOString()??null,expiresAt:e.expiresAt?.toISOString()??null,revoked:e.revokedAt!==null}),jb=e=>({createAgentToken:K.meta({description:`Create an agent credential; the plaintext token is returned only once.`}).input(Bd).output(Vd).mutation(async({input:t,ctx:n})=>{let r=Z(await e.agentTokens.create({personId:n.viewer.personId,label:t.label,expiresAt:t.expiresAt===null?null:new Date(t.expiresAt)}));return{token:r.plaintext,agentToken:Ab(r.token)}}),listAgentTokens:K.meta({description:`List agent credentials so unused or revoked ones can be identified.`}).input(Hd).output(Ud).query(async({ctx:t})=>({isConnected:Z(await e.agentTokens.isConnected(t.viewer.personId)),items:Z(await e.agentTokens.list(t.viewer.personId)).map(e=>Ab(e))})),revokeAgentToken:K.meta({description:`Revoke an agent credential before its next request.`}).input(Wd).output(Gd).mutation(async({input:t,ctx:n})=>({tokenId:Z(await e.agentTokens.revoke({personId:n.viewer.personId,tokenId:t.tokenId})).id,revoked:!0}))}),Mb=e=>e.credential.kind===`token`?null:{kind:`oauth-agent`,tokenId:e.tokenId,tokenLabel:e.tokenLabel,clientId:e.credential.clientId,scopes:[...e.credential.scopes],expiresAt:e.credential.expiresAt.toISOString(),resource:e.credential.resource},Nb=e=>G.meta({description:`Resolve the current person and authentication kind.`}).input(Jd).output(Yd).query(async({ctx:t})=>{let n=t.viewer.kind===`anonymous`||t.viewer.kind===`render`?null:t.viewer.personId,r=n===null?null:await t.verifiedEmails(),i=r===null?[]:Z(r.mapErr(e=>v_(e.message))),a=Z(await e.getMe.execute({personId:n,verifiedEmails:i})),o=a.claimedCanvasIds.length+a.claimedOrganisationIds.length;o>0&&t.telemetry.emit(`InvitationsClaimed`,{claimedCount:o,claimedCanvasCount:a.claimedCanvasIds.length,claimedOrganisationCount:a.claimedOrganisationIds.length});let s=a.person===null?null:kb(a.person);if(t.viewer.kind!==`agent`)return{person:s,authentication:{kind:t.viewer.kind===`render`?`anonymous`:t.viewer.kind}};let c=Mb(t.viewer);if(c!==null)return{person:s,authentication:c};let l=Z(await e.agentTokens.find({personId:t.viewer.personId,tokenId:t.viewer.tokenId}));if(l===null)throw W(v_(`resolved agent token is missing`));return{person:s,authentication:{kind:`agent`,tokenId:l.id,tokenLabel:l.label,expiresAt:l.expiresAt?.toISOString()??null}}}),Pb=e=>U({search:K.input(_f).output(vf).query(async({input:t,ctx:n})=>({recipients:Z(await e.searchRecipients.execute({personId:n.viewer.personId,query:t.query}))})),recent:K.input(yf).output(bf).query(async({ctx:t})=>({recipients:Z(await e.recentRecipients.execute({personId:t.viewer.personId}))}))}),Fb=e=>U({...jb(e),signUp:G.meta({description:`Create a local account when no signed-in person exists.`}).input(ef).output(rf).mutation(async({input:t,ctx:n})=>{let r=Z(await e.signUp.execute(t)),i=n.session.issue(r.person.id,t.deliver);return{person:kb(r.person),preparedCanvasId:r.preparedCanvasId,token:i}}),signIn:G.meta({description:`Start a local session from an existing account.`}).input(tf).output(nf).mutation(async({input:t,ctx:n})=>{let r=Z(await e.signIn.execute(t)),i=n.session.issue(r.id,t.deliver);return{person:kb(r),token:i}}),signOut:G.meta({description:`End the browser session attached to this request.`}).input(af).output(of).mutation(({ctx:e})=>(e.session.clear(),{signedOut:!0})),me:Nb(e),updateDisplayName:K.meta({description:`Change the current person’s name inside Enhance.`}).input(Xd).output(Zd).mutation(async({input:t,ctx:n})=>({person:kb(Z(await e.updateDisplayName.execute({personId:n.viewer.personId,displayName:t.displayName})))})),recipients:Pb(e)}),Ib=e=>{if(e===void 0)throw W(v_(`Profile photo storage is unavailable.`));return e},Lb=e=>({reserveProfilePhoto:K.input(cf).output(lf).mutation(async({ctx:t,input:n})=>{let r=Z(await Ib(e).reserve({...n,personId:t.viewer.personId}));return{...r,upload:{...r.upload,expiresAt:r.upload.expiresAt.toISOString()}}}),completeProfilePhoto:K.input(uf).output(df).mutation(async({ctx:t,input:n})=>Z(await Ib(e).complete(t.viewer.personId,n.assetId))),abandonProfilePhoto:K.input(uf).output(ff).mutation(async({ctx:t,input:n})=>({abandoned:Z(await Ib(e).abandon(t.viewer.personId,n.assetId))})),updateProfile:K.input(pf).output(mf).mutation(async({ctx:t,input:n})=>({person:kb(Z(await Ib(e).save({personId:t.viewer.personId,requestId:n.requestId,displayName:n.displayName,...n.photoAssetId!==void 0&&{photoAssetId:n.photoAssetId}})))}))}),Rb=(e,t)=>{let n=`/c/${t.canvasId}?prototype=${e.prototype.id}`;if(t.hasScopedAttachment){let r=Ho(t.origin,{canvasId:t.canvasId,...t.pageId!==void 0&&{pageId:t.pageId},nodeIds:[e.prototype.nodeId]});c.ok(r.ok,`The attached prototype has no valid canvas reference`);let i=new URL(r.url);n=`${i.pathname}${i.search}${i.hash}`}return{canvasId:t.canvasId,prototypeId:e.prototype.id,deploymentId:e.deployment.id,nodeId:e.prototype.nodeId,version:e.version,attachment:e.attachment,state:`ready`,origin:t.origin,openUrl:n}},zb=e=>({personId:e.personId,publisher:{displayName:e.displayName,initials:e.initials,tokenId:e.tokenId,tokenLabel:e.tokenLabel}}),Bb=e=>({personId:e.personId,...e.kind===`agent`&&{publisher:{displayName:e.displayName,initials:e.initials,tokenId:e.tokenId,tokenLabel:e.tokenLabel}}}),Vb=e=>{if(e.kind!==`agent`)throw TypeError(`agent editor did not narrow its viewer`);return zb(e)},Hb=e=>{if(e.kind!==`agent`||e.personId===void 0)throw TypeError(`agent editor did not narrow its viewer`);return e.personId},Ub=e=>W_.input(Tf).output(Ef).mutation(async({input:t,ctx:n})=>{let r=Z(await e.publishing.create({...t,prototypeId:t.prototypeId??null,personId:Hb(n.viewer)}));return{prototypeId:r.prototype.id,deploymentId:r.deployment.id,nodeId:r.prototype.nodeId,state:r.deployment.state,alreadyExists:r.alreadyExists,fileCount:r.deployment.fileCount,totalBytes:r.deployment.totalBytes}}),Wb=e=>W_.input(Df).output(kf).mutation(async({input:t,ctx:n})=>{let r=Z(await e.upload.reserve({...t,personId:Hb(n.viewer)}));return{deploymentId:r.deploymentId,uploads:r.uploads.map(e=>({path:e.path,upload:{url:e.upload.url,expiresAt:e.upload.expiresAt.toISOString(),headers:e.upload.headers}})),...r.nextCursor!==null&&{nextCursor:r.nextCursor}}}),Gb=e=>W_.input(Af).output(jf).mutation(async({input:t,ctx:n})=>{let r=Vb(n.viewer),i=Z(await e.upload.complete({...t,...r}));return Rb(i,{canvasId:t.canvasId,hasScopedAttachment:!1,origin:e.runtimeConfig.originFor(i.deployment.id)})}),Kb=e=>J.input(Mf).output(Nf).mutation(async({input:t})=>{let n=Z(await e.runtime.requestTicket(t)),r=e.runtimeConfig.originFor(n.ticket.deploymentId);return{deploymentId:n.ticket.deploymentId,origin:r,bootUrl:`${r}/__enhance/open#ticket=${encodeURIComponent(n.token)}&deployment=${n.ticket.deploymentId}`,expiresAt:n.ticket.expiresAt.toISOString()}}),qb=e=>K.input(Hf).output(Uf).query(()=>({protocolVersion:1,format:`zip`,limits:{expandedBytes:2**53-1,manifestBytes:2**53-1,fileCount:2**53-1,...e.artifactPublishing.capabilities()},attachmentProtocolVersion:1})),Jb=e=>Y.input(Gf).output(Jf).mutation(async({input:t,ctx:n})=>{let r=Z(await e.artifactPublishing.create({...t,prototypeId:t.prototypeId??null,personId:Bb(n.viewer).personId})),i={prototypeId:r.prototype.id,deploymentId:r.deployment.id,nodeId:r.prototype.nodeId,alreadyExists:r.alreadyExists,artifact:r.deployment.artifact};if(r.deployment.state!==`uploading`)return{...i,state:r.deployment.state};if(r.upload===null)throw TypeError(`an uploading artifact has no upload`);return{...i,state:r.deployment.state,upload:{...r.upload,expiresAt:r.upload.expiresAt.toISOString()}}}),Yb=e=>Y.input(Yf).output(Xf).mutation(async({input:t,ctx:n})=>{let r=Z(await e.artifactPublishing.submit({...t,personId:Bb(n.viewer).personId}));return{deploymentId:r.id,state:r.state}}),Xb=e=>Y.input(Zf).output($f).query(async({input:t,ctx:n})=>{let r=Z(await e.artifactPublishing.status({...t,personId:Bb(n.viewer).personId})),i={prototypeId:r.prototype.id,deploymentId:r.deployment.id,nodeId:r.prototype.nodeId,fileCount:r.deployment.artifact.fileCount,totalBytes:r.deployment.artifact.expandedBytes,processedFiles:r.deployment.processedFiles};if(r.deployment.state!==`failed`)return{...i,state:r.deployment.state};let a=r.deployment.failure;if(a===null)throw TypeError(`a failed artifact has no failure`);return{...i,state:r.deployment.state,failure:{code:a.code,message:a.message,...a.path!==null&&{path:a.path}}}}),Zb=e=>Y.input(ep).output(tp).mutation(async({input:t,ctx:n})=>{let r=Bb(n.viewer),i=Z(await e.upload.complete({...t,...r}));return Rb(i,{canvasId:t.canvasId,pageId:t.canvasPageId,hasScopedAttachment:t.attachment!==void 0,origin:e.runtimeConfig.originFor(i.deployment.id)})}),Qb=e=>U({getArtifactCapabilities:qb(e),createArtifact:Jb(e),submitArtifact:Yb(e),getPublishStatus:Xb(e),attach:Zb(e),create:Ub(e),reserveUploads:Wb(e),complete:Gb(e),requestRuntimeTicket:Kb(e)}),$b=e=>({url:e.url,expiresAt:e.expiresAt.toISOString(),headers:e.headers}),ex=e=>({url:e.url,expiresAt:e.expiresAt.toISOString(),bytes:e.bytes}),tx=e=>K.input(dp).output(fp).mutation(async({input:t,ctx:n})=>{let r=Z(await e.start.execute({...t,ownerPersonId:n.viewer.personId}));return n.tag(`recordingId`,r.recording.id),n.telemetry.emit(`RecordingStarted`,{recordingId:r.recording.id,sourceOrigin:r.recording.sourceOrigin}),{recordingId:r.recording.id,ownerPersonId:r.recording.ownerPersonId,chunkIndex:0,upload:$b(r.upload),audioUpload:r.audioUpload===null?null:$b(r.audioUpload)}}),nx=e=>K.input(pp).output(mp).mutation(async({input:t,ctx:n})=>{let r=Z(await e.appendChunk.execute({...t,ownerPersonId:n.viewer.personId}));return n.tag(`recordingId`,t.recordingId),n.telemetry.emit(`RecordingChunkAppended`,{recordingId:t.recordingId,chunkIndex:t.index,bytes:t.bytes,spanMs:t.lastEventMs-t.firstEventMs}),{nextChunkIndex:r.nextChunkIndex,upload:$b(r.upload)}}),rx=e=>K.input(hp).output(gp).mutation(async({input:t,ctx:n})=>{let r=Z(await e.appendAudioChunk.execute({...t,ownerPersonId:n.viewer.personId}));return n.tag(`recordingId`,t.recordingId),n.telemetry.emit(`RecordingAudioChunkAppended`,{recordingId:t.recordingId,chunkIndex:t.index,bytes:t.bytes,spanMs:t.lastMs-t.firstMs}),{nextChunkIndex:r.nextChunkIndex,upload:$b(r.upload)}}),ix=e=>K.input(_p).output(bp).mutation(async({input:t,ctx:n})=>{let r=Z(await e.complete.execute({...t,ownerPersonId:n.viewer.personId})),i=r.recording;return n.tag(`recordingId`,i.id),n.telemetry.emit(`RecordingCompleted`,{recordingId:i.id,canvasId:i.canvasId,chunkCount:r.storedChunkCount,missingChunkCount:r.missingChunkCount,bytes:i.byteSize,durationMs:i.durationMs,viewportWidth:i.viewportWidth,viewportHeight:i.viewportHeight,interrupted:+!!i.interrupted,canvasWasCreated:+!!r.isNewCanvas}),{recordingId:i.id,canvasId:r.canvasId,canvasTitle:r.canvasTitle,isNewCanvas:r.isNewCanvas,storedChunkCount:r.storedChunkCount,missingChunkIndexes:r.missingChunkIndexes,missingChunkCount:r.missingChunkCount,storedAudioChunkCount:r.storedAudioChunkCount,missingAudioChunkIndexes:r.missingAudioChunkIndexes,missingAudioChunkCount:r.missingAudioChunkCount,integrity:r.integrity}}),ax=e=>J.input(Ep).output(jp).query(async({input:t,ctx:n})=>{let r=Z(await e.get.execute(t));return n.tag(`recordingId`,r.recording.id),{recordingId:r.recording.id,durationMs:r.recording.durationMs,viewport:r.recording.viewport,interrupted:r.recording.interrupted,integrity:r.integrity,chunks:r.chunks.map(e=>({seq:e.chunk.seq,firstEventMs:e.chunk.firstEventMs,lastEventMs:e.chunk.lastEventMs,continues:e.chunk.continues,...e.download===null?{state:`missing`}:{state:`available`,download:ex(e.download)}})),audio:r.recording.audioMimeType===null?null:{mimeType:r.recording.audioMimeType,chunks:r.audioChunks.map(e=>({seq:e.chunk.seq,firstMs:e.chunk.firstMs,lastMs:e.chunk.lastMs,epoch:e.chunk.epoch,startsEpoch:e.chunk.startsEpoch,...e.download===null?{state:`missing`}:{state:`available`,download:ex(e.download)}}))},assets:r.assets.map(e=>({url:e.url,contentType:e.contentType,path:cp(e.assetBundleId,e.urlHash)})),sourceUrl:r.recording.sourceUrl,missingAssetCount:r.missingAssetCount,missingAssetUrls:[...r.missingAssetUrls]}}),ox=e=>U({start:tx(e),appendChunk:nx(e),appendAudioChunk:rx(e),complete:ix(e),get:ax(e),discard:K.input(Rp).output(zp).mutation(async({input:t,ctx:n})=>({recordingId:Z(await e.discard.execute({...t,ownerPersonId:n.viewer.personId})).recordingId,discarded:!0})),list:J.input(Ip).output(Lp).query(async({input:t})=>({items:Z(await e.list.execute(t)).map(e=>({recordingId:e.id,durationMs:e.durationMs,viewport:e.viewport,interrupted:e.interrupted,chunkCount:e.chunkCount,startedAt:e.startedAt.toISOString()})),truncated:!1})),delete:X.input(Bp).output(Vp).mutation(async({input:t})=>Z(await e.remove.execute(t)))}),sx=e=>({url:e.url,expiresAt:e.expiresAt.toISOString(),headers:e.headers}),cx=e=>K.input(Sp).output(Cp).mutation(async({input:t,ctx:n})=>{let r=Z(await e.reserveAssets.execute({...t,ownerPersonId:n.viewer.personId}));return n.tag(`recordingId`,t.recordingId),n.telemetry.emit(`RecordingAssetsReserved`,{recordingId:t.recordingId,assetCount:t.assets.length}),{reserved:r.reserved.map(e=>({url:e.url,upload:sx(e.upload)}))}}),lx=e=>K.input(wp).output(Tp).mutation(async({input:t,ctx:n})=>{let r=Z(await e.confirmAssets.execute({...t,ownerPersonId:n.viewer.personId}));return n.tag(`recordingId`,t.recordingId),n.telemetry.emit(`RecordingAssetsConfirmed`,{recordingId:t.recordingId,assetCount:t.arrived.length,missingAssetCount:r.missingAssetCount}),{missingAssetCount:r.missingAssetCount}}),ux=e=>U({reserve:cx(e),confirm:lx(e)}),dx=e=>({url:e.url,expiresAt:e.expiresAt.toISOString(),headers:e.headers}),fx=e=>K.input(Mp).output(Np).mutation(async({input:t,ctx:n})=>{let r=Z(await e.refreshUpload.execute({...t,ownerPersonId:n.viewer.personId}));return n.tag(`recordingId`,t.recordingId),{upload:dx(r.upload)}}),px=e=>K.input(Pp).output(Fp).mutation(async({input:t,ctx:n})=>{let r=Z(await e.confirmUpload.execute({...t,ownerPersonId:n.viewer.personId}));return n.tag(`recordingId`,t.recordingId),r}),mx=e=>({refreshUpload:fx(e),confirmUpload:px(e)}),hx=e=>U({create:K.input(Hp).output(Up).mutation(async({input:t,ctx:n})=>{let r=Z(await e.create.execute({...t,ownerPersonId:n.viewer.personId}));return n.tag(`screenId`,r.screen.id),n.telemetry.emit(`ScreenCreated`,{screenId:r.screen.id,bytes:t.bytes,hasProvenance:t.provenance===null?0:1,atMs:t.provenance?.atMs??null,wasRetry:+!!r.alreadyExists}),{screenId:r.screen.id,upload:{url:r.upload.url,expiresAt:r.upload.expiresAt.toISOString(),headers:r.upload.headers},alreadyExists:r.alreadyExists,state:r.state}}),complete:K.input(Wp).output(Gp).mutation(async({input:t,ctx:n})=>{let r=Z(await e.complete.execute({...t,ownerPersonId:n.viewer.personId}));return n.tag(`screenId`,r.id),{screenId:r.id,storedBytes:r.storedBytes,uploadedAt:r.uploadedAt.toISOString()}}),delete:K.input(Kp).output(qp).mutation(async({input:t,ctx:n})=>Z(await e.remove.execute({...t,ownerPersonId:n.viewer.personId})))}),gx=()=>G.input(Xp).output(Zp).mutation(({input:e,ctx:t})=>{let n={...e,event:`EditableConversionReported`};return e.outcome===`blocked`||e.outcome===`failed`?t.logger.warn(n,`event`):t.logger.info(n,`event`),{accepted:!0}}),_x=e=>{let{name:t,...n}=e;return{...n,event:`ClientTimingReported`,signal:t,supportedClient:+(e.capabilityVersion===2),isSlow:+(e.name===`canvas_load`&&(e.outcome===`slow`||e.outcome===`timed-out`)),isDegraded:+(e.name===`canvas_load`&&(e.outcome===`degraded`||e.outcome===`timed-out`)),isJanky:+(e.name===`canvas_interaction`&&e.outcome===`janky`),isRealtimeFailure:+(e.name===`canvas_realtime`&&e.outcome===`failed`),mirroredAssetDuplicateCount:e.name===`canvas_load`?Math.max(e.mirroredAssetRequestCount-e.mirroredAssetUniqueCount,0):0}},vx=e=>e.name===`canvas_load`?e.outcome!==`ready`:e.name===`canvas_interaction`?e.outcome!==`smooth`:e.outcome!==`succeeded`,yx=()=>G.input(em).output(tm).mutation(({input:e,ctx:t})=>{let n=_x(e);return vx(e)?t.logger.warn(n,`event`):t.logger.info(n,`event`),{accepted:!0}}),bx=()=>G.input(rm).output(im).mutation(({input:e,ctx:t})=>(t.logger.error({...e,event:`EditorRenderFailed`},`event`),{accepted:!0})),xx=e=>{switch(e.name){case`authentication`:return e.state===`invalid`;case`context_lifecycle`:return e.outcome.endsWith(`failed`);case`destination_picker`:return e.outcome!==`options`;case`destination_request`:return e.outcome===`failed`;case`microphone_session`:return e.outcome===`still-active`;case`microphone_permission`:return[`denied`,`refused`,`no-device`,`in-use`,`unavailable`].includes(e.outcome);case`recording_cleanup`:return e.outcome!==`released`;case`recording_transition`:return e.state===`failed`||e.state===`cancelled`;case`screen_preview`:return e.outcome!==`ready`;case`synthetic_stage`:return e.outcome===`failed`}},Sx=e=>{let{name:t,...n}=e;return{...n,event:`ExtensionLifecycle`,signal:t,supportedClient:+(e.capabilityVersion===2)}},Cx=()=>U({lifecycle:G.input(dm).output(fm).mutation(({input:e,ctx:t})=>{let n=Sx(e);return xx(e)?t.logger.warn(n,`event`):t.logger.info(n,`event`),{accepted:!0}})}),wx=e=>U({get:J.meta({description:`Read timestamped speech cues as candidate moments; render and inspect candidate PNGs before snapshotting.`}).input(mm).output(bm).query(async({input:t,ctx:n})=>Z(await e.get.execute({...t,canRetry:n.canvasAccess.canManage}))),retry:X.meta({description:`Retry a failed transcription for one recording.`}).input(xm).output(Sm).mutation(async({input:t})=>Z(await e.retry.execute(t)))}),Tx=e=>({canvasId:e.canvasId,clientToken:e.clientToken,assetId:e.assetId,kind:e.kind,contentType:e.contentType,bytes:e.bytes,sha256:e.sha256,path:e.kind===`image`?jt(e.canvasId,e.assetId):Bt(e.canvasId,e.sha256),state:e.metadata===null?`awaiting_upload`:`ready`,metadata:e.metadata}),Ex=e=>U({reserve:Y.meta({description:`Reserve an actor-owned, checksum-bound image or font import. Identical retries refresh upload access; changed content requires a new token.`}).input(qt).output(Xt).mutation(async({input:t,ctx:n})=>{let{asset:r,upload:i}=Z(await e.assets.reserve({...t,personId:n.viewer.personId}));return{...Tx(r),upload:i===null?null:{...i,expiresAt:i.expiresAt.toISOString()}}}),complete:Y.meta({description:`Verify uploaded asset bytes and format, and persist resource readiness. Does not place content or change the canvas document.`}).input(Kt).output(Yt).mutation(async({input:t,ctx:n})=>Tx(Z(await e.assets.complete({...t,personId:n.viewer.personId})))),get:J.meta({description:`Read the existing asset import owned by this actor. Does not verify, upload, or resume work.`}).input(Kt).output(Yt).query(async({input:t,ctx:n})=>{if(n.viewer.kind===`anonymous`||n.viewer.kind===`render`)throw W(H(`NOT_FOUND`,`No such asset import.`));return Tx(Z(await e.assets.get({...t,personId:n.viewer.personId})))})}),Dx={shouldExposeInviteTokens:!1,realtimeEndpoint:`ws://localhost:3000/v1/canvas-realtime`,webOrigin:`http://localhost:5173`},Ox=(e,t)=>U({asset:Ex(e.canvas),firstAgentWork:xy(e.canvas.firstAgentWork),mutation:Lv(e.canvas.getMutation),...zv(e.canvas)._def.record,chats:dv(e.canvas),...ov(e.canvas)._def.record,...gv(e.canvas)._def.record,...hv(e.canvas)._def.record,fontCatalog:Cy(e.canvas),textStyleLibrary:Ky(e.canvas),...Iv(e.canvas)._def.record,...kv(e.render,t.webOrigin),selection:ny(e.canvas.selection,e.render.readCanvas),realtime:Zv(e.canvas,t.realtimeEndpoint),document:mv(e.canvas),version:hy(e.canvas),render:U({...Uy(e.render)._def.record,preparation:Kv(e.render),...Wy(e.render)._def.record}),thumbnail:iy(),participants:Vv(e.canvas),invites:Pv(e.canvas,t.shouldExposeInviteTokens)}),kx=(e,t=Dx)=>U({captureRun:by(e.capture),feedback:fb(e.feedback),canvas:Ox(e,t),comment:U({...db(e.comment),...cb(e.comment)._def.record}),organisation:U({...pb(e.organisation)._def.record,people:Db(e.organisation),invites:xb(e.organisation)}),person:U({...Fb(e.person)._def.record,...Lb(e.person.profile)}),prototype:Qb(e.prototype),recording:U({...ox(e.recording)._def.record,...mx(e.recording)}),recordingAsset:ux(e.recording),screen:hx(e.screen),transcript:wx(e.transcript),telemetry:U({...Cx()._def.record,performance:yx(),conversion:gx(),renderFailure:bx()})}),$={execute:()=>{throw Error(`The schema-only router must never execute an API handler.`)}},Ax={capture:{begin:$.execute,get:$.execute,reserve:$.execute,seal:$.execute,publish:$.execute,cancel:$.execute,comparison:$.execute},feedback:$,organisation:{list:$,listMembers:$,addMember:$,create:$,update:$,remove:$,setMemberRole:$,removeMember:$,transferOwnership:$,createInvite:$,listInvites:$,revokeInvite:$,resendInvite:$,previewInvite:$,acceptInvite:$},canvas:{getMutation:$,mutationRecovery:{undo:$.execute,receipt:$.execute},chats:{publish:$.execute,list:$.execute,remove:$.execute,cursor:$.execute,read:$.execute,markRead:$.execute},applyOperations:$,createEditableFrame:$,create:$,get:$,list:$,rename:$,setAccess:$,remove:$,move:$,duplicate:$,removePermanently:$,markViewed:$,firstAgentWork:$,setReviewState:$,restore:$,versions:{list:$.execute,get:$.execute,name:$.execute,removeName:$.execute,restore:$.execute,duplicate:$.execute},getDocument:$,saveDocument:$,reserveImage:$,assets:{reserve:$.execute,complete:$.execute,get:$.execute},fonts:{copy:$.execute,importResource:$.execute,reserve:$.execute,complete:$.execute,deliver:$.execute},fontCatalog:{list:$.execute,reserve:$.execute,complete:$.execute,remove:$.execute,import:$.execute,deliver:$.execute},textStyleLibrary:{get:$.execute,list:$.execute,publish:$.execute},listParticipants:$,setParticipantAccess:$,revokeParticipant:$,createInvite:$,listInvites:$,revokeInvite:$,resendInvite:$,acceptInvite:$,previewInvite:$,issueRealtimeTicket:$,activity:{begin:()=>$.execute(),renew:()=>$.execute(),end:()=>$.execute()},selection:$},comment:{get:$,start:$,reply:$,edit:$,move:$,react:$,resolve:$,remove:$,list:$,directory:$},person:{signUp:$,signIn:$,getMe:$,updateDisplayName:$,searchRecipients:$,recentRecipients:$,agentTokens:{create:()=>$.execute(),list:()=>$.execute(),find:()=>$.execute(),isConnected:()=>$.execute(),revoke:()=>$.execute()}},prototype:{publishing:{create:$.execute},artifactPublishing:{capabilities:$.execute,create:$.execute,submit:$.execute,status:$.execute},upload:{reserve:$.execute,complete:$.execute},runtime:{requestTicket:$.execute,consumeTicket:$.execute,readFile:$.execute},runtimeConfig:{originFor:()=>$.execute(),webOrigin:`https://unused.invalid`,bridgeScriptUrl:`https://unused.invalid/prototype-bridge.js`,secureCookies:!0}},recording:{start:$,reserveAssets:$,confirmAssets:$,appendChunk:$,appendAudioChunk:$,complete:$,refreshUpload:$,confirmUpload:$,discard:$,get:$,list:$,remove:$},render:{create:$,get:$,cancel:$,download:$,expose:$,readCanvas:$},screen:{create:$,complete:$,remove:$},transcript:{get:$,retry:$}},jx=()=>kx(Ax),Mx=[{id:`canvas.importAsset`,cliPath:`canvas import-asset`,operation:`mutation`,effect:`write`,idempotency:`composite`,inputSchema:rg,outputSchema:ag,summary:`Import one selected local image or font into the native canvas asset lifecycle, verify its bytes, and return a durable resource without placing it.`,procedures:[`canvas.asset.reserve`,`canvas.asset.complete`,`canvas.document.get`],inputExample:{canvasRef:V,source:{kind:`file`,path:`/project/logo.png`}},outputExample:{operation:{kind:`canvas-asset`,canvasId:V,clientToken:V},resource:{canvasId:V,clientToken:V,assetId:V,kind:`image`,contentType:`image/png`,bytes:1024,sha256:`aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa`,path:`/v1/canvas-assets/${V}/${V}`,state:`ready`,metadata:{kind:`image`,width:64,height:64}},placement:`not_requested`}}],Nx=[...Vh,...Cg,...kg,...Sg,...Lg,...Mx,...Ag,...__],Px=n.record(n.string(),n.unknown()),Fx={"canvas.render.importSource":{canvasId:V,source:{kind:`html`,html:`<div></div>`,label:`Example`},destination:{kind:`insert-children`,targetNodeId:`root`}},"canvas.textStyleLibrary.publish":{canvasId:V,mutationId:V,expectedRevision:0,documentVersion:1,publish:[`body`],remove:[],description:`Publish the Body text style.`},"canvas.document.save":{canvasId:V,baseVersion:1,document:Gn(),screenIds:[]},"canvas.invites.create":{canvasId:V,email:`agent@example.test`,accessLevel:`can-comment`},"organisation.invites.create":{organisationId:V,email:`agent@example.test`,role:`member`}},Ix=(e,t)=>{let n=Px.safeParse(e);if(!n.success)throw TypeError(`${t} is not an object`);return n.data},Lx=(e,t,n)=>{if(!(typeof e==`object`&&e||typeof e==`function`))throw TypeError(`${n} is not reflectable`);return Reflect.get(e,t)},Rx=(e,t)=>t===`query`?`read`:/(?:\.delete(?:Permanently)?|\.discard|\.remove(?:Name)?|\.revoke)$/u.test(e)?`delete`:`write`,zx=(e,t)=>{let r=Lx(e[t],`_def`,`${t} definition`),i=n.array(n.unknown()).safeParse(Lx(r,`inputs`,`${t} internals`));if(!i.success)throw TypeError(`${t} has no input schema`);let a=i.data[0];if(!(a instanceof n.ZodType))throw TypeError(`${t} has no input schema`);let o=Lx(r,`output`,`${t} internals`);if(!(o instanceof n.ZodType))throw TypeError(`${t} has no output schema`);return{input:a,output:o}},Bx=()=>{let e=jx(),n=Ix(Reflect.get(e,`_def`),`router internals`),r=Ix(n.procedures,`router procedures`),i=t({router:e}),a=g_();a.assertProcedureInventory(i.map(([e])=>e));let o=i.map(([e,t])=>{if(t.type===null)throw TypeError(`${e} has no operation type`);let n=zx(r,e),i=a.forProcedure(e);return a_({id:e,operation:t.type,source:`router`,effect:Rx(e,t.type),idempotency:t.type===`query`?`none`:`single`,execution:{kind:`remote`,procedure:e},inputSchema:n.input,outputSchema:n.output,meta:t.meta,policy:i,cliPath:i.exposure===`shared`?e.replaceAll(`.`,` `):null,...Fx[e]!==void 0&&{inputExample:Fx[e]}})}),s=Nx.map(e=>a_({id:e.id,operation:e.operation,source:`composite`,effect:e.effect,idempotency:e.idempotency,execution:{kind:`composite`,procedures:e.procedures},inputSchema:e.inputSchema,outputSchema:e.outputSchema,meta:{description:e.summary},policy:a.forUtility(e.id),cliPath:e.cliPath,inputExample:e.inputExample,outputExample:e.outputExample}));return[...o,...s].toSorted((e,t)=>e.id.localeCompare(t.id))};var Vx=class extends e{requestedCode;constructor(e){super(`CLI process adapter intercepted an exit`,{exitCode:e,cause:null}),this.name=`ProcessExitError`,this.requestedCode=e}};const Hx=new Set(`a an and are as at be before by can do for from how i in into is it me my of on or our the then this to use with`.split(` `)),Ux={"canvas.writeHtml":[`design editable screen`,`create screen`,`new screen`,`mockup`,`html css`,`build layout`],"canvas.read":[`read canvas link`,`inspect page`,`read linked selection`,`canvas tree`],"canvas.selection":[`read current canvas selection`,`live browser selection`],"canvas.edit":[`change selected text`,`edit text`,`change styles`,`duplicate card`,`move node`,`rename layer`,`update selected design`],"canvas.render":[`render canvas`,`preview design`,`inspect pixels`,`screenshot design`]},Wx=e=>e.replaceAll(/([a-z])([A-Z])/gu,`$1 $2`).toLocaleLowerCase(`en-AU`).replaceAll(/[^a-z0-9]+/gu,` `).trim(),Gx=e=>[...new Set(Wx(e).split(` `).filter(e=>e!==``&&!Hx.has(e)))],Kx=(e,t)=>{let n=Wx(t);if(n===Wx(e.id))return 1e5;let r=Ux[e.id]??[];if(r.some(e=>Wx(e)===n))return 9e4;let i=new Set(r.flatMap(e=>Gx(e))),a=new Set(Gx(e.id)),o=new Set(Gx(e.guide.summary)),s=0;for(let e of Gx(t))i.has(e)?s+=1100:a.has(e)?s+=1050:o.has(e)&&(s+=1e3);return s},qx=e=>{let t=e.guide.examples[0];if(t===void 0)throw TypeError(`${e.id} has no capability example`);return t},Jx=e=>({id:e.id,operation:e.operation,effect:e.effect,idempotency:e.idempotency,summary:e.guide.summary,useWhen:e.guide.useWhen,preconditions:e.guide.preconditions,inputSchema:n.toJSONSchema(e.inputSchema,{unrepresentable:`any`,io:`input`}),exampleInput:qx(e).input,output:e.guide.output,result:e.guide.result,recovery:e.guide.recovery,next:e.guide.next,schemaDigest:e.schemaDigest,guidanceDigest:e.guidanceDigest,behaviorDigest:e.behaviorDigest}),Yx=e=>({id:e.id,operation:e.operation,effect:e.effect,summary:e.guide.summary,useWhen:e.guide.useWhen}),Xx=e=>({search:t=>{let n=e.filter(e=>t.operation===`any`||e.operation===t.operation).map(e=>({capability:e,score:Kx(e,t.query)})).filter(e=>e.score>0).toSorted((e,t)=>{let n=t.score-e.score;return n===0?e.capability.id.localeCompare(t.capability.id):n}),r={matches:n.slice(0,t.limit).map(({capability:e})=>Yx(e)),totalMatches:n.length,truncated:n.length>t.limit},i=n[0];if(i===void 0)return r;let a={...r,bestContract:Jx(i.capability)};return l.byteLength(JSON.stringify({ok:!0,result:a}),`utf8`)<=2e4?a:{...r,detailRequired:{capability:i.capability.id}}},describe:t=>{let n=e.find(e=>e.id===t);return n===void 0?null:Jx(n)}}),Zx=(e,t)=>e.filter(e=>t.includes(e.policy.exposure)),Qx=e=>Zx(e,[`shared`]),$x=new Set([`FORBIDDEN`,`NOT_FOUND`,`CONFLICT`,`RATE_LIMITED`]),eS=e=>{switch(e){case`BAD_REQUEST`:return`Run the command with '--help', then rewrite every rejected argument.`;case`UNAUTHORIZED`:return`Run 'enhance auth login' and complete authentication in the browser.`;case`FORBIDDEN`:return`Run 'enhance canvas list --scope mine' and choose a target you can change.`;case`NOT_FOUND`:return`List the resource again and retry with an identifier from that result.`;case`CONFLICT`:return`Read the resource again before retrying the change.`;case`RATE_LIMITED`:return`Wait for the server retry window, then retry once.`;case`INTERNAL`:return`Run 'enhance doctor', report the result, and stop.`}},tS=n.object({data:n.looseObject({appError:n.unknown()})}),nS=e=>{let t=tS.safeParse(e);return Jp.safeParse(t.success?t.data.data.appError:null)},rS=e=>{if(!(e instanceof ee))return e;if(e.cause instanceof z)return e.cause;let t=nS(e);return t.success?new z(t.data.code,t.data.message,eS(t.data.code),t.data.fields):e},iS=e=>e===void 0?{}:{fields:Object.entries(e).toSorted(([e],[t])=>e.localeCompare(t)).map(([e,t])=>({path:e,message:t}))},aS=(e,t)=>{if(e instanceof z)return{code:e.code,message:e.message,remediation:e.remediation,...iS(e.fields)};if(e instanceof ee){if(e.cause instanceof z)return aS(e.cause,t);let n=nS(e);if(n.success)return{code:n.data.code,message:n.data.message,remediation:eS(n.data.code),...iS(n.data.fields)}}if(e instanceof Vx){let e=t?.trim();return{code:`BAD_REQUEST`,message:e===void 0||e===``?`The command line is malformed.`:e,remediation:`Run 'enhance --help' and use one of the complete command paths shown there.`}}return{code:`INTERNAL`,message:`The request failed before it received a usable result.`,remediation:`Run 'enhance doctor', report the result, and stop.`}},oS=e=>{let t=aS(e,null);if(t.remediation!==eS(t.code))return t;let n={BAD_REQUEST:`Review this tool’s input schema and correct the reported argument errors.`,UNAUTHORIZED:`Reconnect Enhance through this host’s connection flow, then repeat the request.`,FORBIDDEN:`Choose a canvas you can access. Do not repeat this write against the denied canvas.`,INTERNAL:`A write may have an unknown outcome. Inspect a returned operation reference before retrying. Otherwise retry only identical arguments with the original clientToken; never create a new intent to recover a failed request. If the failure repeats, stop and report this error.`};return{...t,remediation:n[t.code]??t.remediation}},sS=(e,t,n)=>t?2:n instanceof Cm?6:e.code===`BAD_REQUEST`?3:e.code===`UNAUTHORIZED`?4:$x.has(e.code)?5:1,cS=n.object({canvasId:n.uuid(),mutationCommitted:n.literal(!0),previousVersion:n.number().int().positive(),version:n.number().int().positive(),rootNodeId:n.string().optional(),mutationId:n.uuid().optional(),jobId:n.uuid().optional(),affected:n.object({inserted:n.number(),changed:n.number(),removed:n.number()}),affectedBounds:S.nullable()}),lS=e=>typeof e==`object`&&e&&!Array.isArray(e)?Object.fromEntries(Object.entries(e)):null,uS=e=>{let t=cS.safeParse(e);if(t.success)return t.data;let n=ja.safeParse(e);return n.success?{canvasId:n.data.canvasId,mutationCommitted:!0,mutationId:n.data.mutationId,previousVersion:n.data.previousVersion,version:n.data.version,affected:{inserted:n.data.insertedNodeIds.length,changed:n.data.changedNodeIds.length,removed:n.data.removedNodeIds.length},affectedBounds:n.data.affectedBounds}:null},dS=e=>Buffer.byteLength(JSON.stringify(e))<=3584,fS=(e,t,n)=>{let r=[];for(let i of n.slice(0,20)){if(!dS({...e,[t]:[...r,i]}))break;r.push(i)}return r},pS=e=>{let t=lS(e);if(t===null)return null;let n=uS(e);if(n===null)return null;let r={...t,...n};if(dS(r))return{value:r,detail:null};let i={...n,detailTruncated:!0};for(let e of[`mode`,`targetNodeId`,`review`]){let n=t[e];n!==void 0&&dS({...i,[e]:n})&&(i[e]=n)}for(let e of[`insertedNodeIds`,`changedNodeIds`,`removedNodeIds`,`createdNodes`,`duplicatedNodes`,`moves`,`affectedParents`]){let n=t[e];if(!Array.isArray(n))continue;let r=fS(i,e,n);r.length>0&&(i[e]=r)}return{value:i,detail:r}},mS=/(?<![-\w@])enhance(?=(?:-mcp)?(?:[^-\w]|$))/gu,hS=(e,t)=>e.replaceAll(mS,()=>t),gS=e=>typeof e==`object`&&!!e&&!Array.isArray(e),_S=(e,t)=>typeof e==`string`?hS(e,t):Array.isArray(e)?e.map(e=>_S(e,t)):gS(e)?Object.fromEntries(Object.entries(e).map(([e,n])=>[e,_S(n,t)])):e,vS=(e,t)=>typeof e==`string`?hS(e,t):gS(e)?Object.fromEntries(Object.entries(e).map(([e,n])=>[e,e===`next`?_S(n,t):n])):e,yS=(e,t)=>({...e,message:hS(e.message,t),remediation:hS(e.remediation,t),...e.fields!==void 0&&{fields:e.fields.map(e=>({...e,message:hS(e.message,t)}))}});export{Ah as $,br as $n,rd as $t,rg as A,Mo as An,z as At,Uh as B,Ta as Bn,tp as Bt,Eg as C,ss as Cn,Om as Ct,bg as D,Wo as Dn,wm as Dt,vg as E,ls as En,Em as Et,Qh as F,ao as Fn,mp as Ft,Ih as G,Ni as Gn,Bf as Gt,Ph as H,Gi as Hn,Lf as Ht,Xh as I,Ia as In,bp as It,zh as J,Br as Jn,Yd as Jt,Lh as K,ti as Kn,Rf as Kt,tg as L,Aa as Ln,jp as Lt,ag as M,oo as Mn,Jp as Mt,Zh as N,fo as Nn,Gp as Nt,dg as O,qo as On,Tm as Ot,Yh as P,ro as Pn,Up as Pt,Oh as Q,ar as Qn,ld as Qt,qh as R,ja as Rn,fp as Rt,Dg as S,Ys as Sn,Nm as St,Og as T,us as Tn,Am as Tt,Mh as U,zi as Un,Uf as Ut,Wh as V,la as Vn,Jf as Vt,Fh as W,Vi as Wn,$f as Wt,Dh as X,dr as Xn,Vd as Xt,Bh as Y,or as Yn,Kd as Yt,kh as Z,w as Zn,dd as Zt,qg as _,nu as _n,p as _r,Im as _t,aS as a,Yl as an,gn as ar,gh as at,Ig as b,dc as bn,Lm as bt,Zx as c,tu as cn,xn as cr,Sh as ct,Vx as d,ru as dn,Yt as dr,Xm as dt,ad as en,kr as er,jh as et,Bx as f,iu as fn,qt as fr,Wm as ft,Jg as g,zl as gn,b as gr,Hm as gt,a_ as h,Bl as hn,Nt as hr,Bm as ht,sS as i,Jl as in,Hn as ir,Ch as it,ig as j,Do as jn,bm as jt,yg as k,Yo as kn,Cm as kt,Qx as l,Ql as ln,_n as lr,mh as lt,g_ as m,Rl as mn,Ut as mr,Um as mt,vS as n,Xl as nn,Sr as nr,Th as nt,oS as o,Il as on,pn as or,ph as ot,jx as p,Vl as pn,Xt as pr,Gm as pt,Rh as q,Rr as qn,Xf as qt,pS as r,ql as rn,Wn as rr,wh as rt,rS as s,Ml as sn,yn as sr,xh as st,yS as t,Wl as tn,Er as tr,Eh as tt,Xx as u,$l as un,Qt as ur,oh as ut,Pg as v,mc as vn,pe as vr,Fm as vt,Tg as w,cs as wn,Dm as wt,wg as x,ec as xn,Pm as xt,Fg as y,hc as yn,ve as yr,Rm as yt,Hh as z,Na as zn,Pf as zt};