@enhance-eng/enhance-dev 0.1.41-dev.sha-2b04fd6f785f → 0.1.41-dev.sha-b35a2bec8e72

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/main.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{A as e,An as t,At as n,Bn as r,Bt as i,Cr as a,Dt as o,Ft as s,Gt as c,Ht as l,It as u,Mt as ee,Nt as d,Ot as te,Pt as ne,Sr as re,Tr as ie,Ut as ae,Vn as oe,Vr as se,Vt as ce,_ as le,a as ue,ar as de,bt as fe,c as pe,ct as me,dt as he,f as ge,h as _e,in as ve,it as ye,jt as be,m as xe,mr as Se,n as Ce,o as we,on as Te,or as Ee,p as De,pt as Oe,r as ke,s as Ae,sn as je,sr as Me,t as Ne,u as Pe,wr as Fe,xr as Ie,y as Le,zt as Re}from"./cli-output-identity.lib-CjRqgKQ4.mjs";import{C as ze,D as Be,E as Ve,S as He,T as Ue,_ as We,a as Ge,b as Ke,c as qe,d as Je,g as Ye,h as Xe,i as Ze,l as Qe,m as $e,n as et,p as f,r as tt,s as nt,t as rt,u as it,v as at,w as ot,x as st,y as ct}from"./zod-messages.lib-7mBmzE7A.mjs";import{t as lt}from"./capability-inventory.mapper-B_GMS9z3.mjs";import p from"node:process";import{Command as ut}from"commander";import{createCli as dt,parseRouter as ft}from"trpc-cli";import{z as m}from"zod";import{z as h}from"zod/mini";import{hostname as pt,tmpdir as mt}from"node:os";import{createInterface as ht}from"node:readline";import{chmodSync as gt,createReadStream as _t,existsSync as vt,lstatSync as yt,mkdirSync as bt,openAsBlob as xt,readFileSync as St,readdirSync as Ct,statSync as wt,unlinkSync as Tt,writeFileSync as Et}from"node:fs";import g from"node:path";import{createHash as Dt,randomUUID as Ot}from"node:crypto";import{link as kt,mkdir as At,readFile as jt,rename as Mt,rm as Nt,stat as Pt,writeFile as Ft}from"node:fs/promises";import{pipeline as It}from"node:stream/promises";import{channel as Lt}from"node:diagnostics_channel";import{proxify as Rt}from"trpc-cli/dist/proxify.js";const zt=new Set([`cursive`,`emoji`,`fantasy`,`fangsong`,`math`,`monospace`,`sans-serif`,`serif`,`system-ui`,`ui-monospace`,`ui-rounded`,`ui-sans-serif`,`ui-serif`]),Bt=/^-?[_a-z][-\w]*$/iu,Vt=/^var\(--[-\w]+\)$/iu,Ht=e=>zt.has(e.toLowerCase()),Ut=e=>e.replaceAll(/\\(?:([\da-f]{1,6})(?:\r\n|[\t\n\f\r ])?|(\r\n|[\n\r\f])|([^\da-f]))/giu,(e,t,n,r)=>{if(n!==void 0)return``;if(t===void 0)return r??``;let i=Number.parseInt(t,16);return String.fromCodePoint(i===0||i>1114111||i>=55296&&i<=57343?65533:i)}),Wt=e=>{let t=e.trim(),n=t.startsWith(`"`)&&t.endsWith(`"`)||t.startsWith(`'`)&&t.endsWith(`'`);return Ut(n?t.slice(1,-1):t)},Gt=e=>e.startsWith(`"`)&&Ht(Wt(e))?JSON.stringify(Wt(e)):Bt.test(e)||Vt.test(e)?e:JSON.stringify(e),Kt=e=>e===void 0?{}:{...e!==`auto`&&{direction:e},"unicode-bidi":e===`auto`?`plaintext`:`isolate`},qt={Inter:`Inter Variable`,"JetBrains Mono":`JetBrains Mono Variable`},Jt=e=>[...new Set([e.family,...Object.hasOwn(qt,e.family)?[qt[e.family]??e.family]:[],...e.fallbackFamilies])].map(e=>Gt(e)).join(`, `),Yt=e=>Object.entries({...e.variations,...e.weight!==void 0&&{wght:e.weight},...e.opticalSize?.mode===`fixed`&&{opsz:e.opticalSize.value}}).toSorted(([e],[t])=>e.localeCompare(t,`en`,{caseFirst:`upper`})).map(([e,t])=>`${JSON.stringify(e)} ${String(t)}`).join(`, `),Xt=e=>{let t=Object.entries(e??{}).toSorted(([e],[t])=>e.localeCompare(t,`en`)).map(([e,t])=>`${JSON.stringify(e)} ${String(t)}`).join(`, `);return t===``?`normal`:t},Zt=e=>e.mode===`normal`?`normal`:e.mode===`percent`?String(e.value/100):e.value;function Qt(e){return{...e.lineHeight!==void 0&&{"line-height":Zt(e.lineHeight)},...e.letterSpacing!==void 0&&{"letter-spacing":typeof e.letterSpacing==`number`?e.letterSpacing:`${String(e.letterSpacing.value/100)}em`}}}const $t=e=>e===void 0?`auto`:typeof e==`number`?e:e.mode===`font-default`?`from-font`:`${String(e.value)}%`,en=e=>({"text-decoration-line":e.line,"text-decoration-style":e.style,"text-decoration-color":e.color===void 0?`currentColor`:Ve(e.color),"text-decoration-thickness":$t(e.thickness),"text-underline-offset":$t(e.offset),"text-decoration-skip-ink":e.skipInk??`auto`}),tn=e=>`${JSON.stringify(e)}\n`,nn=e=>{if(e<1)throw RangeError(`a chunk has to be able to hold at least one character`);let t=``,n=[],r=!1,i=!1,a=()=>{let e={body:t,continues:r,eventCount:n.length-+!!r,firstEventMs:n.length===0?0:Math.min(...n),lastEventMs:n.length===0?0:Math.max(...n)};return r=!t.endsWith(`
2
+ import{A as e,An as t,At as n,Bn as r,Bt as i,Cr as a,Dt as o,Ft as s,Gt as c,Ht as l,It as u,Mt as ee,Nt as d,Ot as te,Pt as ne,Sr as re,Tr as ie,Ut as ae,Vn as oe,Vr as se,Vt as ce,_ as le,a as ue,ar as de,bt as fe,c as pe,ct as me,dt as he,f as ge,h as _e,in as ve,it as ye,jt as be,m as xe,mr as Se,n as Ce,o as we,on as Te,or as Ee,p as De,pt as Oe,r as ke,s as Ae,sn as je,sr as Me,t as Ne,u as Pe,wr as Fe,xr as Ie,y as Le,zt as Re}from"./cli-output-identity.lib-BWLOngqR.mjs";import{C as ze,D as Be,E as Ve,S as He,T as Ue,_ as We,a as Ge,b as Ke,c as qe,d as Je,g as Ye,h as Xe,i as Ze,l as Qe,m as $e,n as et,p as f,r as tt,s as nt,t as rt,u as it,v as at,w as ot,x as st,y as ct}from"./zod-messages.lib-C9jatU-6.mjs";import{t as lt}from"./capability-inventory.mapper-B_GMS9z3.mjs";import p from"node:process";import{Command as ut}from"commander";import{createCli as dt,parseRouter as ft}from"trpc-cli";import{z as m}from"zod";import{z as h}from"zod/mini";import{hostname as pt,tmpdir as mt}from"node:os";import{createInterface as ht}from"node:readline";import{chmodSync as gt,createReadStream as _t,existsSync as vt,lstatSync as yt,mkdirSync as bt,openAsBlob as xt,readFileSync as St,readdirSync as Ct,statSync as wt,unlinkSync as Tt,writeFileSync as Et}from"node:fs";import g from"node:path";import{createHash as Dt,randomUUID as Ot}from"node:crypto";import{link as kt,mkdir as At,readFile as jt,rename as Mt,rm as Nt,stat as Pt,writeFile as Ft}from"node:fs/promises";import{pipeline as It}from"node:stream/promises";import{channel as Lt}from"node:diagnostics_channel";import{proxify as Rt}from"trpc-cli/dist/proxify.js";const zt=new Set([`cursive`,`emoji`,`fantasy`,`fangsong`,`math`,`monospace`,`sans-serif`,`serif`,`system-ui`,`ui-monospace`,`ui-rounded`,`ui-sans-serif`,`ui-serif`]),Bt=/^-?[_a-z][-\w]*$/iu,Vt=/^var\(--[-\w]+\)$/iu,Ht=e=>zt.has(e.toLowerCase()),Ut=e=>e.replaceAll(/\\(?:([\da-f]{1,6})(?:\r\n|[\t\n\f\r ])?|(\r\n|[\n\r\f])|([^\da-f]))/giu,(e,t,n,r)=>{if(n!==void 0)return``;if(t===void 0)return r??``;let i=Number.parseInt(t,16);return String.fromCodePoint(i===0||i>1114111||i>=55296&&i<=57343?65533:i)}),Wt=e=>{let t=e.trim(),n=t.startsWith(`"`)&&t.endsWith(`"`)||t.startsWith(`'`)&&t.endsWith(`'`);return Ut(n?t.slice(1,-1):t)},Gt=e=>e.startsWith(`"`)&&Ht(Wt(e))?JSON.stringify(Wt(e)):Bt.test(e)||Vt.test(e)?e:JSON.stringify(e),Kt=e=>e===void 0?{}:{...e!==`auto`&&{direction:e},"unicode-bidi":e===`auto`?`plaintext`:`isolate`},qt={Inter:`Inter Variable`,"JetBrains Mono":`JetBrains Mono Variable`},Jt=e=>[...new Set([e.family,...Object.hasOwn(qt,e.family)?[qt[e.family]??e.family]:[],...e.fallbackFamilies])].map(e=>Gt(e)).join(`, `),Yt=e=>Object.entries({...e.variations,...e.weight!==void 0&&{wght:e.weight},...e.opticalSize?.mode===`fixed`&&{opsz:e.opticalSize.value}}).toSorted(([e],[t])=>e.localeCompare(t,`en`,{caseFirst:`upper`})).map(([e,t])=>`${JSON.stringify(e)} ${String(t)}`).join(`, `),Xt=e=>{let t=Object.entries(e??{}).toSorted(([e],[t])=>e.localeCompare(t,`en`)).map(([e,t])=>`${JSON.stringify(e)} ${String(t)}`).join(`, `);return t===``?`normal`:t},Zt=e=>e.mode===`normal`?`normal`:e.mode===`percent`?String(e.value/100):e.value;function Qt(e){return{...e.lineHeight!==void 0&&{"line-height":Zt(e.lineHeight)},...e.letterSpacing!==void 0&&{"letter-spacing":typeof e.letterSpacing==`number`?e.letterSpacing:`${String(e.letterSpacing.value/100)}em`}}}const $t=e=>e===void 0?`auto`:typeof e==`number`?e:e.mode===`font-default`?`from-font`:`${String(e.value)}%`,en=e=>({"text-decoration-line":e.line,"text-decoration-style":e.style,"text-decoration-color":e.color===void 0?`currentColor`:Ve(e.color),"text-decoration-thickness":$t(e.thickness),"text-underline-offset":$t(e.offset),"text-decoration-skip-ink":e.skipInk??`auto`}),tn=e=>`${JSON.stringify(e)}\n`,nn=e=>{if(e<1)throw RangeError(`a chunk has to be able to hold at least one character`);let t=``,n=[],r=!1,i=!1,a=()=>{let e={body:t,continues:r,eventCount:n.length-+!!r,firstEventMs:n.length===0?0:Math.min(...n),lastEventMs:n.length===0?0:Math.max(...n)};return r=!t.endsWith(`
3
3
  `),t=``,n=r?[n.at(-1)??0]:[],e};return{pending:()=>t.length,add:r=>{let o=[],s=tn(r.event);for(n.push(r.atMs),i=!0;t.length+s.length>=e;){let n=e-t.length;t+=s.slice(0,n),s=s.slice(n),o.push(a())}return t+=s,o},drain:()=>!i||t.length>0?[a()]:[]}},rn=(e,t)=>{let n=nn(t);return[...e.flatMap(e=>n.add(e)),...n.drain()]},an=[`recording.start`,`recording.appendChunk`,`recording.complete`],on=e=>async t=>{let n=c.parse(await e.mutate(an[0],{sourceUrl:t.sourceUrl,viewport:t.viewport,pageTitle:t.pageTitle,audio:null})),r=n.upload;try{let i=rn(t.entries,8388608);for(let[t,a]of i.entries()){let i=new TextEncoder().encode(a.body),o=await e.upload({url:r.url,headers:r.headers,body:i});r=l.parse(await e.mutate(an[1],{recordingId:n.recordingId,index:t,firstEventMs:a.firstEventMs,lastEventMs:a.lastEventMs,eventCount:a.eventCount,continues:a.continues,bytes:i.byteLength,etag:o})).upload}let a=Math.max(0,...t.entries.map(e=>e.atMs));return ae.parse(await e.mutate(an[2],{recordingId:n.recordingId,durationMs:a,viewport:t.viewport,sourceUrl:t.sourceUrl,interrupted:!1,...t.canvasId!==void 0&&{canvasId:t.canvasId},audioChunkCount:0,hasRecoverableBytes:!1}))}catch{throw new s(`Recording ${n.recordingId} began, but not every chunk was committed.`,`Run 'enhance recording discard --recording-id ${n.recordingId}' to remove the incomplete attempt before retrying the fixture.`)}},sn=[`screen.create`,`screen.complete`],cn=e=>async t=>{let n=ce.parse(await e.mutate(sn[0],{clientToken:t.clientToken,provenance:t.provenance,route:t.route,pageTitle:t.pageTitle,viewport:t.viewport,bytes:t.body.byteLength}));try{let r=await e.upload({url:n.upload.url,headers:n.upload.headers,body:t.body}),a=i.parse(await e.mutate(sn[1],{screenId:n.screenId,etag:r}));return{screenId:a.screenId,clientToken:t.clientToken,route:t.route,title:t.pageTitle,viewport:t.viewport,atMs:t.provenance?.atMs??null,sourceRecordingId:t.provenance?.sourceRecordingId??null,assetBundle:null,download:null,storedBytes:a.storedBytes}}catch{throw new s(`Screen ${n.screenId} was reserved, but its upload did not complete.`,`Retry 'enhance fixture screen' with the same --client-token ${t.clientToken}.`)}},ln=[`organisation.create`,`canvas.create`,`screen.create`,`screen.complete`,`canvas.document.get`,`canvas.document.save`],un=(e,t)=>async n=>{let r=ve.parse(await e.mutate(ln[0],{name:n.organisationName})).organisation,i=se.parse(await e.mutate(ln[1],{title:n.canvasTitle,organisationId:r.id,sourceUrl:null}));try{let a=[];for(let e of n.screens)a.push(await t(e));let o=Ee.parse(await e.query(ln[4],{canvasId:i.id})),c=Te();for(let[e,t]of a.entries())c=je(c,{id:`fixture-screen-${String(e+1)}`,label:`Fixture screen ${String(e+1)}`,screenId:t.screenId,viewport:n.screens[e]?.viewport??{width:1440,height:900},at:{x:48+e*48,y:48+e*48}});let l=de.parse(await e.mutate(ln[5],{canvasId:i.id,baseVersion:o.version,document:c,screenIds:a.map(e=>e.screenId)}));if(l.outcome===`conflict`)throw new s(`World canvas ${i.id} was created, but another writer changed its document.`,`Read 'enhance canvas document get --canvas-id ${i.id}' before adding the screens.`);return{organisationId:r.id,canvasId:i.id,screenIds:a.map(e=>e.screenId),documentVersion:l.version}}catch(e){throw e instanceof s?e:new s(`Organisation ${r.id} and canvas ${i.id} exist, but the world is incomplete.`,`Inspect 'enhance canvas get --canvas-id ${i.id}' before retrying any missing steps.`)}},dn=async(e,t)=>{if(e!==void 0&&e!==``)return e.trim();if(p.stdin.isTTY)throw new u(`BAD_REQUEST`,`A token is required and interactive prompting is disabled.`,`Pass '--token <token>' or pipe one line to '${t}'.`);let n=ht({input:p.stdin,crlfDelay:1/0});for await(let e of n){n.close();let t=e.trim();if(t!==``)return t;break}throw new u(`BAD_REQUEST`,`A token is required.`,`Pass '--token <token>' or pipe one line to '${t}'.`)},fn=async e=>{if(e!==void 0)return e.trim();if(p.stdin.isTTY)return null;let t=ht({input:p.stdin,crlfDelay:1/0});for await(let e of t){t.close();let n=e.trim();return n===``?null:n}return null},pn=(e,t,n)=>{let r=e.command(`auth`).description(`Store and inspect the agent credential.`);r.command(`login`).description(`Authenticate in a browser, then store a revocable agent credential.`).option(`--token <token>`,`Use an existing agent token instead of browser authentication.`).option(`--no-open`,`Print the authorization URL without opening the browser.`).action(async e=>{let r=await fn(e.token);if(r!==null){n.result(await t.loginWithToken(r));return}n.result(await t.loginWithBrowser({label:`CLI on ${pt()}`.slice(0,120),openBrowser:e.open,onReady:e=>{n.result({status:`waiting_for_browser`,url:e})}}))}),r.command(`status`).description(`Resolve the stored token to its person, label, and expiry.`).action(async()=>{n.result(await t.status())}),r.command(`logout`).description(`Delete the local credential file; this does not revoke the server token.`).action(async()=>{n.result(await t.logout())})},mn=m.coerce.number().int().positive(),hn=m.coerce.number().positive(),gn=m.uuid(),_n=m.union([m.string(),m.number(),m.null()]),vn=m.record(m.string(),_n),yn=m.array(m.object({nodeId:m.string().min(1).max(200),textContent:m.string()})).min(1),bn=m.array(m.object({nodeId:m.string().min(1).max(200),name:m.string()})).min(1),xn=m.array(m.object({nodeIds:m.array(m.string().min(1).max(200)).min(1),styles:vn})).min(1),Sn=m.array(m.object({id:m.string().min(1).max(200),parentId:m.string().min(1).max(200).optional()})).min(1),Cn=m.array(m.union([m.object({nodeId:m.string().min(1).max(200),before:m.string().min(1).max(200)}),m.object({nodeId:m.string().min(1).max(200),after:m.string().min(1).max(200)}),m.object({nodeId:m.string().min(1).max(200),parentId:m.string().min(1).max(200),index:m.number().int().nonnegative().optional()})])).min(1),wn=m.array(m.string().min(1).max(200)).min(1),Tn=m.coerce.number().int().min(0),En=m.uuid().nullable(),Dn=(e,t,n)=>{let r=e.safeParse(t);if(r.success)return r.data;throw new u(`BAD_REQUEST`,`${n} is invalid.`,`Run the command with --help.`)},On=e=>Dn(mn,e,`--base-version`),kn=(e,t,n)=>{let r=En.safeParse(t??null);if(!r.success)throw new u(`BAD_REQUEST`,`--client-token must be a UUID.`,`Mint one UUID and reuse it only when retrying the exact same command.`);e.mutationKey.select(r.data,n)},An=(e,t)=>e.mutationKey.current(`canvas.applyOperations`,{purpose:t}),jn=async(e,t,n,r)=>{kn(e,t.clientToken,!1);let i=d(t.canvas),a=On(t.baseVersion);return ee(i)&&Xe(i,await Ye(e,i.canvasId,a),r),We(e.remote).execute({canvasId:i.canvasId,mutationId:An(e,n),baseVersion:a,operations:[...r]})},Mn=async(e,t,n,r)=>{kn(e,t.clientToken,!1);let i=d(t.canvas);return $e(e.remote).execute({...i,baseVersion:On(t.baseVersion),mutationId:An(e,`canvas.edit`),edits:n,...r!==void 0&&{idPrefix:r}})},Nn=(e,t)=>{if(!e.startsWith(`@`))return e;let n=e.slice(1);if(n===``)throw new u(`BAD_REQUEST`,`${t} @ must name a file.`,`Pass ${t} @/absolute/path/to/file or an inline value.`);let r=g.resolve(n);try{if(!wt(r).isFile())throw Error(`not a regular file`);return St(r,`utf8`)}catch{throw new u(`BAD_REQUEST`,`Could not read the file at ${r}.`,`Use a readable regular UTF-8 file.`)}},Pn=m.array(Me).min(1),Fn=e=>{try{return JSON.parse(Nn(e,`--operations`))}catch(e){throw e instanceof u?e:new u(`BAD_REQUEST`,`--operations must be one valid JSON array.`,`Pass inline JSON or @/absolute/path/layout.json; run 'enhance canvas apply --help' for examples.`)}},In=e=>{let t=Fn(e),n=Pn.safeParse(t);if(!n.success){let e=n.error.issues[0];throw new u(`BAD_REQUEST`,`The canvas operation batch is invalid${e===void 0||e.path.length===0?``:` at ${e.path.join(`.`)}`}.`,`Correct the named operation; run 'enhance canvas apply --help' for the supported vocabulary.`)}return n.data},Ln=m.coerce.number().int().positive(),Rn=e=>{let t=Ln.safeParse(e);if(t.success)return t.data;throw new u(`BAD_REQUEST`,`--base-version is invalid.`,`Run 'enhance canvas apply --help'.`)},zn=(e,t)=>{let n=m.uuid().nullable().safeParse(t??null);if(!n.success)throw new u(`BAD_REQUEST`,`--client-token must be a UUID.`,`Mint one UUID and reuse it only when retrying this exact operation batch.`);return e.mutationKey.select(n.data,!1),e.mutationKey.current(`canvas.applyOperations`,{})},Bn=(e,t)=>{e.command(`apply`).description(`Apply an atomic canvas edit batch and return its affected bounds.`).summary(`Apply edits and return affected bounds.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID to edit.`).requiredOption(`--base-version <integer>`,`Exact version returned by canvas inspect or tree.`).requiredOption(`--operations <json-or-@path>`,`JSON operation array inline, or @path to a JSON file.`).option(`--client-token <uuid>`,`Stable UUID to reuse only when retrying this exact batch.`).addHelpText(`after`,[``,`Supported operations: insertNode, insertText, insertPrototype, setText, editText, setBox, setLabel, setVisibility, setLocked, setConstraints, setStyles, setAppearance, setLayout, patchTypography, setTypography, patchAdditionalStyles, setAdditionalStyles, setProps, setParentage, move, remove.`,`Use editText for revision-aware character or range changes. setText replaces the whole text and is rejected if it conflicts with a newer text edit.`,`Example:`,` enhance canvas apply --canvas <url-or-id> --base-version 3 --operations '[{"op":"insertText","nodeId":"txt_summary","parentId":"root","text":"Checkout needs an address.","box":{"x":120,"y":594,"width":720,"height":80},"styles":{"font-size":24}}]'`].join(`
4
4
  `)).action(async e=>{zn(t,e.clientToken);let n=d(e.canvas),r=Rn(e.baseVersion),i=In(e.operations);ee(n)&&Xe(n,await Ye(t,n.canvasId,r),i);let a=await t.invocation.invoke({capability:f(t.catalog(),`canvas.apply`),arguments:{canvasId:n.canvasId,baseVersion:r,operations:[...i]},clientToken:e.clientToken??null});t.output.result(a)})},Vn=e=>{try{return JSON.parse(e)}catch{return}},Hn=e=>{if(e===void 0)return null;let t=Se.safeParse(Vn(e));if(t.success)return t.data;throw new u(`BAD_REQUEST`,`--bounds must be a positive world rectangle.`,`Pass JSON with x, y, width and height.`)},Un=e=>e===void 0?[]:e.split(`,`).map(e=>e.trim()).filter(e=>e!==``).slice(0,100),Wn=(e,t)=>{e.command(`begin`).description(`Start visible agent activity.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID.`).requiredOption(`--phase <phase>`,`reading, writing, creating, deleting, or rendering.`).option(`--node-ids <ids>`,`Comma-separated stable node ids.`).option(`--bounds <json>`,`Optional world rectangle for not-yet-created content.`).action(async e=>{let n=oe.safeParse(e.phase);if(!n.success)throw new u(`BAD_REQUEST`,`--phase is invalid.`,`Use reading, writing, creating, deleting, or rendering.`);let i=be(e.canvas),a=r.parse(await t.remote.mutate(`canvas.realtime.activity.begin`,{canvasId:i,phase:n.data,nodeIds:Un(e.nodeIds),bounds:Hn(e.bounds)}));t.output.result({...a,next:[`enhance canvas work update --canvas ${i} --activity-id ${a.activityId} --phase ${n.data}`,`enhance canvas finish-working-on-nodes --canvas ${i} --activity-id ${a.activityId}`]})})},Gn=(e,t)=>{e.command(`update`).description(`Move visible agent activity.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID.`).requiredOption(`--activity-id <uuid>`,`Lease id returned by work begin.`).requiredOption(`--phase <phase>`,`Current agent phase.`).option(`--node-ids <ids>`,`Comma-separated current stable node ids.`).option(`--bounds <json>`,`Optional current world rectangle.`).action(async e=>{t.output.result(r.parse(await t.remote.mutate(`canvas.realtime.activity.renew`,{canvasId:be(e.canvas),activityId:gn.parse(e.activityId),phase:oe.parse(e.phase),nodeIds:Un(e.nodeIds),bounds:Hn(e.bounds)})))})},Kn=(e,t)=>{e.command(`finish-working-on-nodes`).description(`End visible agent activity.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID.`).requiredOption(`--activity-id <uuid>`,`Lease id returned by canvas work begin.`).action(async e=>{if(!await at(t.remote).finish(be(e.canvas),gn.parse(e.activityId)))throw new u(`NOT_FOUND`,`The activity could not be finished.`,`It may already have expired; run canvas work begin for new work.`);t.output.result({ended:!0,activityId:e.activityId})})},qn=(e,t)=>{let n=e.command(`work`).description(`Manage visible agent activity.`);Wn(n,t),Gn(n,t),Kn(e,t)},_=(e,t,n)=>{let r=(()=>{try{return JSON.parse(Nn(e,n))}catch(e){throw e instanceof u?e:new u(`BAD_REQUEST`,`${n} must be valid JSON.`,`Pass inline JSON or @/absolute/path/to/input.json; run the command with --help.`)}})(),i=t.safeParse(r);if(i.success)return i.data;let a=i.error.issues[0];throw new u(`BAD_REQUEST`,`${n} is invalid${a===void 0||a.path.length===0?``:` at ${a.path.join(`.`)}`}.`,a?.message??`Correct the JSON shape and retry.`)},Jn=(e,t)=>{e.command(`set-text-content`).description(`Set Text node values.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID to edit.`).requiredOption(`--base-version <integer>`,`Exact current canvas version.`).requiredOption(`--updates <json-or-@path>`,`Array of {nodeId,textContent} updates.`).option(`--client-token <uuid>`,`Stable UUID for retrying this exact batch.`).action(async e=>{let n=_(e.updates,yn,`--updates`).map(e=>({kind:`set_text`,nodeId:e.nodeId,text:e.textContent}));t.output.result(await Mn(t,e,n))})},Yn=(e,t)=>{e.command(`rename-nodes`).description(`Rename layers.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID to edit.`).requiredOption(`--base-version <integer>`,`Exact current canvas version.`).requiredOption(`--updates <json-or-@path>`,`Array of {nodeId,name} updates.`).option(`--client-token <uuid>`,`Stable UUID for retrying this exact batch.`).action(async e=>{let n=_(e.updates,bn,`--updates`).map(e=>({kind:`rename`,nodeId:e.nodeId,name:e.name}));t.output.result(await Mn(t,e,n))})},Xn=(e,t)=>{e.command(`delete-nodes`).description(`Delete node subtrees.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID to edit.`).requiredOption(`--base-version <integer>`,`Exact current canvas version.`).requiredOption(`--node-ids <json-or-@path>`,`JSON array of stable node ids.`).option(`--client-token <uuid>`,`Stable UUID for retrying this exact batch.`).action(async e=>{let n=_(e.nodeIds,wn,`--node-ids`);t.output.result(await jn(t,e,`delete-nodes`,n.map(e=>({op:`remove`,nodeId:e}))))})},Zn=(e,t)=>{e.command(`update-styles`).description(`Update visual and layout styles.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID to edit.`).requiredOption(`--base-version <integer>`,`Exact current canvas version.`).requiredOption(`--updates <json-or-@path>`,`Array of {nodeIds,styles} updates.`).option(`--client-token <uuid>`,`Stable UUID for retrying this exact batch.`).action(async e=>{let n=_(e.updates,xn,`--updates`);t.output.result(await Mn(t,e,n.map(e=>({kind:`set_styles`,...e}))))})},Qn=(e,t)=>{e.command(`edit`).description(`Apply an atomic canvas edit batch.`).requiredOption(`--canvas <url-or-id>`,`Canvas or selection URL, or canvas UUID.`).requiredOption(`--base-version <integer>`,`Canvas version to edit; use the previous write result to continue.`).requiredOption(`--edits <json-or-@path>`,`Array of edits with kind set_text, set_styles, rename, duplicate or move.`).option(`--client-token <uuid>`,`Stable UUID for retrying this exact batch.`).addHelpText(`after`,`
5
5
  Edit shapes (combine related edits in one array):
@@ -15,7 +15,7 @@ Use input-version IDs. Duplicate mappings are returned for a subsequent call.
15
15
  `),Rr=(e,t,n,r)=>{let i=Ar(e,t),a=` `.repeat(n),o=[`data-node-id=${JSON.stringify(i.id)}`,`data-name=${JSON.stringify(i.label)}`,`style={${JSON.stringify(Or(i,e))}}`];if(i.locked===!0&&o.push(`data-locked="true"`),i.component===`image`)return`${a}<img ${o.join(` `)} alt=${JSON.stringify(jr(i,`alt`))} src=${JSON.stringify(jr(i,`src`))} />`;if(i.component===`svg`)return`${a}<div ${o.join(` `)} data-component="svg" />`;let s=i.component===`text`?`span`:`div`,c=i.component===`text`?Lr(i,n+1):``,l=(n>=r?[]:kr(e,t)).map(t=>Rr(e,t,n+1,r));return c===``&&l.length===0?`${a}<${s} ${o.join(` `)} />`:[`${a}<${s} ${o.join(` `)}>`,...c===``?[]:[`${a} ${c}`],...l,`${a}</${s}>`].join(`
16
16
  `)},zr=(e,t,n)=>Rr(e,t,0,n),Br=(e,t)=>t.map(t=>{let n=Ar(e,t);return{nodeId:t,name:n.label,component:n.component,box:n.box,css:Or(n,e),layout:n.layout,appearance:n.appearance,typography:n.typography}}),Vr={topic:`canvas-agent-authoring`,workflow:[`Keep the complete selection link as --canvas; only selected nodes and descendants are in scope.`,`Unknown state: canvas inspect. When nodeCount=0, use target root and its version to create a populated screen using write-html --review none. No blank pre-render or empty shell.`,`Multiple screens: publish each populated screen before authoring the next so users see progress. Prepare only what that screen needs; do not prepare the whole set before the first write.`,`Existing content: read only missing subtree structure or ids. Reuse useful context and product styles.`,`Batch related text, style, rename, duplicate and move changes with canvas edit --edits. Existing focused commands also work.`,`Use the version from the latest successful read or write as --base-version. After a conflict, reread and recompute the requested edit.`,`Render the affected screen when ready for review and inspect the PNG. Repeat after changes or a concrete discrepancy.`],html:{modes:[`insert-children`,`replace`],rules:[`Use inline concrete CSS; flex, padding and gap. Avoid margin, grid, tables and inline layout.`,`Give screen rows, cards and buttons explicit dimensions; avoid relying on implicit stretch. Use block frames for colored badges.`,`Name meaningful groups with layer-name; include content and structure together.`,`Styled text controls become frames with editable text children.`,`Scripts, event handlers, embedded documents, executable URLs and CSS imports are rejected.`]},completion:[`Natural hierarchy with the fewest useful editable primitives.`,`The committed version and affected ids match the request.`,`Inspect the final PNG for hierarchy, alignment, clipping and overflow.`,`Keep text, layout and appearance editable in the ordinary inspector.`]},Hr=async(e,t)=>{let n=Ee.parse(await e.remote.query(`canvas.document.get`,{canvasId:t}));return{held:n,document:ne(n.document)}},Ur=(e,t)=>{e.command(`guide`).description(`Agent design workflow.`).action(()=>{t.output.result(Vr)}),e.command(`get-jsx`).description(`Read concise subtree JSX.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID to inspect.`).requiredOption(`--node-id <id>`,`Stable subtree root id.`).option(`--depth <integer>`,`Maximum descendant depth from 0 to 20.`,`8`).action(async e=>{let n=d(e.canvas),r=n.canvasId,{held:i,document:a}=await Hr(t,r);te(n,a,[e.nodeId]),t.output.result({canvasId:r,version:i.version,nodeId:e.nodeId,jsx:zr(a,e.nodeId,Dn(Tn,e.depth,`--depth`)),warning:`This is a structural reading projection. Use canvas render as the pixel authority.`})}),e.command(`get-computed-styles`).description(`Read effective node CSS.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID to inspect.`).requiredOption(`--node-ids <json-or-@path>`,`JSON array of stable node ids.`).action(async e=>{let n=d(e.canvas),r=n.canvasId,{held:i,document:a}=await Hr(t,r),o=_(e.nodeIds,wn,`--node-ids`);te(n,a,o),t.output.result({canvasId:r,version:i.version,nodes:Br(a,o),warning:`These are authored CSS instructions, not measured browser dimensions. Use canvas render as the pixel authority.`})})},Wr=e=>{if(e===void 0)throw new u(`BAD_REQUEST`,`--client-token is required with --input.`,`Mint one UUID for this request and reuse it only when retrying the same --input.`);return m.uuid().parse(e)},Gr=async(e,t)=>{if(t.input!==void 0){if([t.canvas,t.baseVersion,t.nodes,t.idPrefix].some(e=>e!==void 0))throw new u(`BAD_REQUEST`,`Choose --input or the individual duplicate options.`,`Use --input with --client-token for native measured duplication.`);let n=f(e.catalog(),`canvas.duplicateNodes`);e.output.result(await e.invocation.invoke({capability:n,arguments:_(t.input,n.inputSchema,`--input`),clientToken:Wr(t.clientToken)}));return}if(t.canvas===void 0||t.baseVersion===void 0||t.nodes===void 0)throw TypeError(`The required-option check let duplicate-nodes run without --canvas, --base-version or --nodes.`);let n=_(t.nodes,Sn,`--nodes`).map(e=>({kind:`duplicate`,nodeIds:[e.id],...e.parentId!==void 0&&{parentId:e.parentId}})),r=await Mn(e,{canvas:t.canvas,baseVersion:t.baseVersion,...t.clientToken!==void 0&&{clientToken:t.clientToken}},n,t.idPrefix),{duplicatedNodes:i,...a}=r;e.output.result({...r,duplicatedNodes:i,apply:a})},Kr=(e,t)=>{e.command(`duplicate-nodes`).description(`Deep-clone node subtrees; --input uses native measured layout and durable copy receipts.`).option(`--input <json-or-@path>`,`Scoped native duplication request; requires --client-token.`).option(`--canvas <url-or-id>`,`Canvas URL or UUID to edit.`).option(`--base-version <integer>`,`Exact current canvas version.`).option(`--nodes <json-or-@path>`,`Array of {id,parentId?} requests.`).option(`--id-prefix <prefix>`,`Stable namespace for cloned ids.`).option(`--client-token <uuid>`,`Stable UUID for retrying this exact batch.`).action(async e=>Gr(t,e))},qr=(e,t)=>{e.command(`move-nodes`).description(`Reorder or reparent nodes.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID to edit.`).requiredOption(`--base-version <integer>`,`Exact current canvas version.`).requiredOption(`--moves <json-or-@path>`,`Sequential before, after, or parent/index moves.`).option(`--client-token <uuid>`,`Stable UUID for retrying this exact batch.`).action(async e=>{let n=await Mn(t,e,_(e.moves,Cn,`--moves`).map(e=>({kind:`move`,nodeId:e.nodeId,destination:`before`in e?{kind:`before`,nodeId:e.before}:`after`in e?{kind:`after`,nodeId:e.after}:{kind:`parent`,parentId:e.parentId,...e.index!==void 0&&{index:e.index}}}))),{moves:r,affectedParents:i,...a}=n;t.output.result({...n,moves:r,affectedParents:i,apply:a})})},Jr=(e,t)=>{Kr(e,t),qr(e,t)},Yr=e=>Nn(e,`--html`),Xr=new Set([`flex-grow`,`flex-shrink`,`font-weight`,`opacity`,`order`,`z-index`]),Zr=async(e,t)=>{if(![`insert-children`,`replace`].includes(t.mode))throw new u(`BAD_REQUEST`,`--mode must be insert-children or replace.`,`Choose one of the two documented modes.`);if(![`none`,`render`].includes(t.review))throw new u(`BAD_REQUEST`,`--review must be none or render.`,`Choose one of the documented review modes.`);kn(e,t.clientToken,!0);let n=t.mode===`replace`?`replace`:`insert-children`,r=d(t.canvas),i=On(t.baseVersion);e.output.result(await e.invocation.invoke({capability:f(e.catalog(),`canvas.writeHtml`),arguments:{canvasId:r.canvasId,...r.pageId!==void 0&&{pageId:r.pageId},...r.nodeIds.length>0&&{selectionNodeIds:[...r.nodeIds]},targetNodeId:t.targetNodeId,mode:n,html:Yr(t.html),...t.idPrefix!==void 0&&{idPrefix:t.idPrefix},baseVersion:i,review:t.review,renderOutputPath:t.output??null,overwriteRender:t.force===!0,renderScale:Dn(hn,t.scale,`--scale`),renderTimeoutMs:Dn(mn,t.timeoutMs,`--timeout-ms`)},clientToken:t.clientToken??null}))},Qr=(e,t)=>{e.command(`write-html`).description(`Compile HTML/CSS primitives.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID to edit.`).requiredOption(`--base-version <integer>`,`Exact current canvas version.`).requiredOption(`--target-node-id <id>`,`Container receiving children, or node to replace.`).requiredOption(`--html <html-or-@path>`,`Inline HTML fragment or @path to a UTF-8 file.`).option(`--mode <mode>`,`insert-children or replace.`,`insert-children`).option(`--review <mode>`,`none to return after commitment; render to include review pixels.`,`render`).option(`--id-prefix <prefix>`,`Fresh namespace for a new import/replacement; reuse only for an identical retry.`).option(`--client-token <uuid>`,`Stable UUID for retrying this exact write and review.`).option(`--output <path>`,`Write the review PNG to this path.`).option(`--force`,`Replace an existing --output file deliberately.`,!1).option(`--scale <number>`,`Review pixels per canvas unit, from 0.1 to 4.`,`1`).option(`--timeout-ms <integer>`,`Review render polling deadline.`,`120000`).addHelpText(`after`,`
17
17
  Write one visual group at a time. Use --review none for a committed receipt, then render its version and inspect the PNG. Use flex, padding and gap; use targeted commands for later edits.
18
- `).action(async e=>Zr(t,e))},$r=e=>e.replaceAll(/([a-z\d])([A-Z])/gu,`$1-$2`).toLowerCase(),ei=(e,t)=>typeof t==`number`&&!Xr.has(e)?`${String(t)}px`:String(t),ti=e=>Object.entries(e).filter(([,e])=>e!==null).map(([e,t])=>{let n=$r(e);return`${n}:${ei(n,t??``)}`}).join(`;`).replaceAll(`&`,`&amp;`).replaceAll(`"`,`&quot;`),ni=e=>e.length===0?0:Math.max(...e.map(e=>e.x+e.width))+80,ri=(e,t)=>{e.command(`create-artboard`).description(`Create a top-level frame.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID to edit.`).requiredOption(`--base-version <integer>`,`Exact current canvas version.`).requiredOption(`--name <name>`,`Meaningful layer name.`).requiredOption(`--styles <json-or-@path>`,`CSSProperties with width and height.`).option(`--client-token <uuid>`,`Stable UUID for retrying this exact creation and review.`).option(`--output <path>`,`Review PNG path.`).option(`--force`,`Replace an existing review PNG.`,!1).action(async e=>{let n=_(e.styles,vn,`--styles`);if(n.width===void 0||n.height===void 0)throw new u(`BAD_REQUEST`,`--styles must include width and height.`,`Use explicit whole-pixel dimensions such as 1440px and 900px.`);kn(t,e.clientToken,!0);let r=be(e.canvas),i=On(e.baseVersion),a=await Ye(t,r,i),o=Object.entries(a.relationships).flatMap(([e,t])=>{let n=a.nodes[e]?.box;return n!==void 0&&t.parentId===`root`?[n]:[]}),s={display:`flex`,flexDirection:`column`,left:ni(o),top:0,...n,position:`absolute`},c=e.name.replaceAll(`&`,`&amp;`).replaceAll(`"`,`&quot;`);t.output.result(await Je(t.remote,t.render).execute({canvasId:r,targetNodeId:`root`,mode:`insert-children`,html:`<div layer-name="${c}" data-enhance-kind="frame" style="${ti(s)}"></div>`,idPrefix:`artboard_${t.mutationKey.current(`canvas.render.importSource`,{canvasId:r})}`,baseVersion:i,renderClientToken:t.mutationKey.current(`canvas.render.create`,{purpose:`create-artboard-review`}),renderOutputPath:e.output??null,overwriteRender:e.force===!0,renderScale:1,renderTimeoutMs:12e4}))})},ii=(e,t)=>{Qr(e,t),ri(e,t)},ai=(e,t)=>{for(let n of[`canvas.insertHtml`,`canvas.makeEditable`,`canvas.capture`,`canvas.capturePage`,`canvas.arrange`]){let r=f(t.catalog(),n),i=n===`canvas.insertHtml`?`insert-html`:n===`canvas.makeEditable`?`make-editable`:n===`canvas.capturePage`?`capture-page`:n.slice(7);e.command(i).description(r.guide.summary).requiredOption(`--input <json-or-@path>`,`Canvas reference, base version and explicit native authoring request.`).requiredOption(`--client-token <uuid>`,`Stable intent ID; reuse unchanged after an uncertain outcome.`).action(async e=>{t.output.result(await t.invocation.invoke({capability:r,arguments:_(e.input,r.inputSchema,`--input`),clientToken:m.uuid().parse(e.clientToken)}))})}},oi=(e,t)=>{e.command(`remove`).description(`Remove explicitly named canvas subtrees with scope, lock and revision checks.`).requiredOption(`--input <json-or-@path>`,`Request containing canvasRef, baseVersion and rootNodeIds.`).requiredOption(`--client-token <uuid>`,`Stable intent ID; reuse unchanged after an uncertain outcome.`).action(async e=>{t.output.result(await t.invocation.invoke({capability:f(t.catalog(),`canvas.remove`),arguments:_(e.input,me,`--input`),clientToken:m.uuid().parse(e.clientToken)}))})},si=(e,t)=>{e.command(`read`).description(`Read complete editable content, bounded evidence, or the supplied reference.`).summary(`Read linked canvas content.`).option(`--input <json-or-@path>`,`Bounded read request containing canvasRef, view and target options.`).option(`--canvas <url-or-id>`,`Complete canvas, page or selection URL for comprehensive reads.`).option(`--node-id <id>`,`Subtree within --canvas; unavailable with --input.`).action(async e=>{if(e.input===void 0==(e.canvas===void 0)||e.input!==void 0&&e.nodeId!==void 0)throw new u(`BAD_REQUEST`,`Choose exactly one of --input or --canvas; --node-id requires --canvas.`,`Use --input for bounded views, or --canvas with an optional --node-id for comprehensive reads.`);let n=e.input===void 0?{canvas:e.canvas,...e.nodeId!==void 0&&{nodeId:e.nodeId}}:_(e.input,he,`--input`);t.output.result(await t.invocation.invoke({capability:f(t.catalog(),`canvas.read`),arguments:n,clientToken:null}))})},ci=(e,t)=>{e.command(`find`).description(`Find accessible canvases and existing creation destinations with bounded results.`).option(`--input <json-or-@path>`,`Search title, collection, limit and continuation cursor.`,`{}`).action(async e=>{t.output.result(await t.invocation.invoke({capability:f(t.catalog(),`canvas.find`),arguments:_(e.input,fe,`--input`),clientToken:null}))}),oi(e,t),si(e,t),e.command(`update-html`).description(`Apply an identity-preserving edit from a complete HTML snapshot.`).requiredOption(`--input <json-or-@path>`,`Request containing canvasRef, snapshotToken, html and removeNodeIds.`).requiredOption(`--client-token <uuid>`,`Stable intent ID; reuse unchanged after an uncertain outcome.`).action(async e=>{let n=_(e.input,Oe,`--input`);t.output.result(await t.invocation.invoke({capability:f(t.catalog(),`canvas.updateHtml`),arguments:n,clientToken:m.uuid().parse(e.clientToken)}))})},li=(e,t)=>{let n=f(t.catalog(),`prototype.publishCanvas`);e.command(`publish-prototype`).description(n.guide.summary).requiredOption(`--input <json-or-@path>`,`Complete canvas reference, baseVersion, unpacked build directory or existing deployment, and bounded waitMs.`).requiredOption(`--client-token <uuid>`,`Stable attachment intent; reuse the same arguments after uncertainty, use a new token after replanning.`).action(async e=>{t.output.result(await t.invocation.invoke({capability:n,arguments:_(e.input,n.inputSchema,`--input`),clientToken:m.uuid().parse(e.clientToken)}))})},ui=(e,t)=>{let n=f(t.catalog(),`canvas.importAsset`);e.command(`import-asset`).description(n.guide.summary).requiredOption(`--input <json-or-@path>`,`Canvas reference and selected local file source.`).requiredOption(`--client-token <uuid>`,`Stable import intent; reuse after uncertainty.`).action(async e=>{t.output.result(await t.invocation.invoke({capability:n,arguments:_(e.input,n.inputSchema,`--input`),clientToken:m.uuid().parse(e.clientToken)}))})},di=(e,t)=>{ci(e,t),li(e,t),ui(e,t),ai(e,t),Ur(e,t),ii(e,t),$n(e,t),Jr(e,t),qn(e,t)},fi=e=>{let t=e.getOptionValue(`canvas`),n=e.getOptionValue(`canvasId`);if(t!==void 0&&n!==void 0)throw new u(`BAD_REQUEST`,`--canvas and --canvas-id cannot be combined.`,`Pass the pasted URL or UUID through --canvas.`);let r=t??n;if(typeof r!=`string`)throw TypeError(`The required-option check let canvas ${e.name()} run without --canvas.`);return{reference:d(r),url:r}},pi=(e,t)=>{let n=e.getOptionValue(`nodeId`)??(t.nodeIds.length===1?t.nodeIds[0]:void 0);if(typeof n!=`string`||n===``)throw new u(`BAD_REQUEST`,`--node-id or a single-node selection link is required.`,`Choose one node, or use canvas tree to inspect the linked selection.`);return n},mi=async(e,t,n,r)=>{let i=e.name()===`node`?pi(e,n):void 0,a=await it(t.remote,{canvas:r,...i!==void 0&&{nodeId:i}});if(i===void 0)return a;let{nodes:o,...s}=a;return{...s,node:o.find(e=>e.id===i)}},hi=(e,t)=>{for(let n of[`inspect`,`tree`,`node`,`selection`]){let r=e.commands.find(e=>e.name()===n),i=r?.options.find(e=>e.long===`--canvas-id`);r!==void 0&&i!==void 0&&(i.makeOptionMandatory(!1),r.options.find(e=>e.long===`--node-id`)?.makeOptionMandatory(!1),r.option(`--canvas <url-or-id>`,`Pasted canvas URL or UUID. Selection links limit reads and edits to the linked subtree.`),r.action(async()=>{let{reference:e,url:i}=fi(r),a=ee(e)?await mi(r,t,e,i):await t.remote.query(`canvas.${n}`,{canvasId:e.canvasId,...n===`node`&&{nodeId:pi(r,e)}});t.output.result(a)}))}},gi=e=>{if(e.input===void 0)return null;if(e.canvas!==void 0||e.nodeId!==void 0||e.bounds!==void 0||e.expectedVersion!==void 0||e.atMs!==void 0||e.output!==void 0||e.force===!0||e.scale!==`1`||e.timeoutMs!==`120000`)throw new u(`BAD_REQUEST`,`The bounded --input request cannot be combined with individual render options.`,`Put the entire scoped render request in --input.`);return{arguments:_(e.input,ye,`--input`),clientToken:Wr(e.clientToken)}},_i=`canvas render --canvas 0b9f4c1e-5d2a-4e8b-9c3f-7a6d1e2b4c50`,vi={"canvas render":_i},yi=m.coerce.number().int().positive(),bi=m.coerce.number().int().nonnegative(),xi=m.coerce.number().positive(),Si=(e,t,n,r=`canvas render`)=>{let i=e.safeParse(t);if(!i.success)throw new u(`BAD_REQUEST`,`${n} is invalid.`,`Run 'enhance ${r} --help'.`);return i.data},Ci=e=>{if(e===void 0)return null;try{let t=Se.safeParse(JSON.parse(e));if(t.success)return t.data}catch{}throw new u(`BAD_REQUEST`,`--bounds must be a finite positive world rectangle.`,`Pass JSON such as '{"x":0,"y":0,"width":800,"height":600}'.`)},wi=(e,t)=>e===void 0?t===null?{kind:`content`}:{kind:`bounds`,bounds:t}:{kind:`node`,nodeId:e},Ti=e=>{if(!(typeof e!=`string`||!e.startsWith(`rec_`)))return m.uuid().safeParse(e.slice(4)).data},Ei=(e,t)=>{let n=m.uuid().nullable().safeParse(t??null);if(!n.success)throw new u(`BAD_REQUEST`,`--client-token must be a UUID.`,`Mint one UUID and reuse it only when retrying this exact render.`);return e.mutationKey.select(n.data,!1),e.mutationKey.current(`canvas.render.create`,{})},Di=async(e,t)=>{let r=d(e.canvas??``),i=wi(e.nodeId,Ci(e.bounds)),a=e.expectedVersion===void 0?null:Si(yi,e.expectedVersion,`--expected-version`);if(!ee(r))return{target:i,expectedVersion:a};let o=Ee.parse(await t.remote.query(`canvas.document.get`,{canvasId:r.canvasId}));if(a!==null&&a!==o.version)throw new u(`CONFLICT`,`The canvas changed before rendering.`,`Read the linked page or selection and render its current version.`);return{target:n(r,ne(o.document),i),expectedVersion:o.version}},Oi=async(e,t)=>{if(e.canvas===void 0)throw TypeError(`The required-option check let canvas render run without --canvas.`);if(e.nodeId!==void 0&&e.bounds!==void 0)throw new u(`BAD_REQUEST`,`--node-id and --bounds cannot be combined.`,`Choose one focused target, or omit both to render all authored content.`);let n=await Di(e,t),r=n.target.kind===`node`?n.target.nodeId:void 0;if(r===void 0&&e.atMs!==void 0)throw new u(`BAD_REQUEST`,`--at-ms requires --node-id.`,"Render the stable recording node returned by `enhance canvas tree`.");let i=e.atMs===void 0?null:Ti(r);if(i===void 0&&e.atMs!==void 0)throw new u(`BAD_REQUEST`,`--at-ms requires a stable recording node id such as rec_<recording-uuid>.`,"Run `enhance canvas tree --canvas <url-or-id>` and choose a recording node.");Ei(t,e.clientToken);let a=await t.invocation.invoke({capability:f(t.catalog(),`canvas.render`),arguments:{canvasId:d(e.canvas).canvasId,...n,sourceState:i==null?null:{kind:`recording`,recordingId:i,atMs:Si(bi,e.atMs??``,`--at-ms`)},scale:Si(xi,e.scale,`--scale`),outputPath:e.output??null,overwrite:e.force===!0,timeoutMs:Si(yi,e.timeoutMs,`--timeout-ms`)},clientToken:e.clientToken??null});t.output.result(a)},ki=e=>e.parent===null?e:ki(e.parent),Ai=(e,t)=>{e.option(`--input <json-or-@path>`,`Bounded scoped render request; requires --client-token.`).option(`--canvas <url-or-id>`,`Canvas URL or UUID to render.`).option(`--node-id <id>`,`Render one stable canvas node instead of all authored content.`).option(`--bounds <json>`,`Render an explicit rectangle in canvas world coordinates.`).option(`--expected-version <integer>`,`Refuse pixels from any other document version.`).option(`--at-ms <integer>`,`Pause a recording node at this millisecond; inspect the PNG before snapshotting it.`).option(`--scale <number>`,`Output pixels per canvas unit, from 0.1 to 4.`,`1`).option(`--output <path>`,`Write the PNG to this path instead of a protected temporary file.`).option(`--force`,`Replace an existing --output file deliberately.`,!1).option(`--timeout-ms <integer>`,`Local polling deadline in milliseconds.`,`120000`).option(`--client-token <uuid>`,`Stable UUID to reuse only when retrying this render request.`).addHelpText(`after`,()=>`\nExample:\n ${ki(e).name()} ${_i}\n\nFor transcript-led selection, inspect nearby --at-ms renders and reject transitions or duplicate states before running recording snapshot.\n`).action(async e=>{let n=gi(e);if(n===null)return Oi(e,t);t.output.result(await t.invocation.invoke({capability:f(t.catalog(),`canvas.render`),...n}))})},ji=(e,t)=>{let n=e.commands.find(e=>e.name()===`canvas`);if(n===void 0)throw TypeError(`the API router did not supply canvas commands`);n.configureHelp({subcommandTerm:e=>e.name()});let r=n.commands.find(e=>e.name()===`render`);if(r===void 0)throw TypeError(`the API router did not supply canvas render`);let i=ct(t.remote,Qe(t.configDirectory),t.now,t.output.result);Bn(n,t),di(n,{...t,render:i}),hi(n,t),Ai(r,t)},y=m.string().trim().min(1).max(160),Mi=m.string().regex(/^[a-f0-9]{64}$/u),Ni=m.number().int().positive(),Pi=m.strictObject({source:y,journey:y,step:y,variant:y}),Fi=m.strictObject({sha256:Mi,bytes:m.number().int().positive(),mediaType:m.string().min(1).max(200)}),Ii=m.strictObject({organisationId:m.uuid().optional()}),Li=m.strictObject({key:m.string().min(1),label:m.string().min(1),url:m.url().optional(),sequence:m.number().int().nonnegative(),attempt:m.number().int().nonnegative().default(0)}),Ri=m.union([m.strictObject({runId:m.uuid()}),m.strictObject({reference:m.string().min(1),revision:m.string().min(1).optional()})]),zi=m.strictObject({destination:Ii,context:Li.optional(),revision:m.string().min(1).optional(),baselineRunId:m.uuid().nullable(),compareTo:Ri.optional()}),Bi=m.enum([`awaiting-review`,`approved`,`changes-requested`]),Vi=m.strictObject({format:m.literal(`enhance-capture`),version:m.literal(1),key:Pi,label:y,journeyLabel:y,order:m.number().int().nonnegative(),page:m.string().min(1).optional(),viewport:m.strictObject({width:Ni,height:Ni,deviceScaleFactor:m.number().positive()}),extent:m.enum([`viewport`,`full-page`]),source:m.strictObject({format:m.literal(`rrweb-screen`),version:m.literal(1),blob:Fi}),preview:m.strictObject({blob:Fi,width:Ni,height:Ni,pixelRatio:m.number().positive()}),assets:m.array(m.strictObject({url:m.url(),blob:Fi})),provenance:m.strictObject({adapter:y,sdkVersion:y,kernelVersion:y,browser:y,capturedAt:m.iso.datetime(),sourceUrl:m.url().optional(),commit:m.string().min(1).max(200).optional()}),issues:m.array(m.strictObject({code:y,message:m.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.`})}),Hi=m.strictObject({id:m.uuid(),canvasId:m.uuid(),source:y,runKey:y,generation:m.number().int().nonnegative(),participants:m.array(y).min(1),expiresAt:m.iso.datetime(),formatVersion:m.literal(1),review:zi.optional()}),Ui={participant:y,retry:m.number().int().nonnegative(),status:m.enum([`passed`,`failed`,`skipped`,`interrupted`,`timedOut`]),title:m.string().min(1).optional(),location:m.strictObject({file:m.string().min(1),line:m.number().int()}).optional(),captures:m.array(Vi)},Wi=m.strictObject({runner:m.literal(`playwright`).optional(),testId:y,project:y,...Ui}),Gi=m.strictObject({runner:m.literal(`script`),...Ui}),Ki=m.union([Wi,Gi]),qi=m.strictObject({key:Pi.optional(),testId:y.optional(),message:m.string().min(1).max(500)}),Ji=m.strictObject({format:m.literal(`enhance-capture-run`),version:m.literal(1),run:Hi,participants:m.array(m.strictObject({id:y,status:m.enum([`passed`,`failed`,`interrupted`])})).min(1),attempts:m.array(Ki),ordering:m.enum([`partial`,`complete`]),leftOut:m.array(qi).optional()}),Yi=m.strictObject({runId:m.uuid(),canvasId:m.uuid(),canvasUrl:m.url(),version:m.number().int().positive(),manifestDigest:Mi,frames:m.array(m.strictObject({key:Pi,frameId:y,captureId:m.uuid()})),issues:m.array(m.strictObject({code:y,message:m.string().max(500)}))}),Xi=m.strictObject({canvasId:m.uuid().optional(),destination:Ii.optional(),title:m.string().trim().min(1).optional(),context:Li.optional(),revision:m.string().min(1).optional(),compareTo:Ri.optional(),source:y.default(`default`),runKey:y,participants:m.array(y).min(1).default([`local`]),formatVersion:m.literal(1).default(1)}).superRefine((e,t)=>{e.canvasId===void 0==(e.destination===void 0)&&t.addIssue({code:`custom`,message:`Choose either a canvas or a destination for this run.`}),e.canvasId!==void 0&&(e.context!==void 0||e.compareTo!==void 0)&&t.addIssue({code:`custom`,message:`Run review requires a destination.`})}),Zi=m.strictObject({run:Hi});m.strictObject({runId:m.uuid()});const Qi=m.enum([`collecting`,`sealed`,`converting`,`committed`,`failed`,`cancelled`]),$i=m.strictObject({run:Hi,state:Qi,receipt:Yi.nullable(),verdict:Bi.optional(),failure:m.strictObject({code:y,message:m.string().max(1e3)}).nullable()});m.strictObject({runId:m.uuid(),blobs:m.array(Fi).min(1).max(400)});const ea=m.strictObject({uploads:m.array(m.strictObject({sha256:Mi,upload:m.strictObject({url:m.url(),headers:m.record(m.string(),m.string()),expiresAt:m.iso.datetime()}).nullable()})).max(400)});m.strictObject({canvasId:m.uuid(),frameId:m.string().min(1),captureId:m.uuid()});const ta=m.strictObject({captureId:m.uuid(),capturedAt:m.iso.datetime(),commit:m.string().max(200).optional(),url:m.string().min(1),width:m.number().positive(),height:m.number().positive(),pixelRatio:m.number().positive()});m.strictObject({frameId:m.string(),before:ta,after:ta});const na=h.array(h.object({code:h.string().check(h.minLength(1),h.maxLength(160)),message:h.string().check(h.minLength(1),h.maxLength(500))})).check(h.maxLength(32));h.object({issues:h.optional(na),prototype:h.optional(h.object({prototypeId:h.uuid(),deploymentId:h.uuid()}))});const ra={unreadable:`its saved capture could not be read`,notACapture:`it is not an Enhance capture`,pictureMismatch:`its picture does not match the size of its page`,nothingArrived:`none of its files arrived`,notSaved:`it could not be saved on this machine`,noPicture:`it could not be compiled and has no picture`,anotherSource:`it was captured for another source`,outsideShards:`its test ran outside this run's shards`},ia=(e,t)=>e<t?-1:e===t?0:1,aa=(e,t)=>{let n=Object.keys(e).toSorted(ia);t.output.push(`{`),t.pending.push({text:`}`});for(let r=n.length-1;r>=0;r--){let i=n[r];i!==void 0&&(t.pending.push({value:Reflect.get(e,i)},{text:`${JSON.stringify(i)}:`}),r>0&&t.pending.push({text:`,`}))}},oa=(e,t)=>{if(e===null||typeof e==`boolean`||typeof e==`string`||typeof e==`number`&&Number.isFinite(e))return t.output.push(JSON.stringify(e)),!0;if(typeof e!=`object`||t.active.has(e)||!Array.isArray(e)&&Object.getPrototypeOf(e)!==Object.prototype)return!1;if(t.active.add(e),t.pending.push({leave:e}),Array.isArray(e)){t.output.push(`[`),t.pending.push({text:`]`});for(let n=e.length-1;n>=0;n--)t.pending.push({value:e[n]}),n>0&&t.pending.push({text:`,`})}else aa(e,t);return!0},sa=e=>{let t={pending:[{value:e}],active:new Set,output:[]};for(;t.pending.length>0;){let e=t.pending.pop();if(e===void 0)break;if(`text`in e)t.output.push(e.text);else if(`leave`in e)t.active.delete(e.leave);else if(!oa(e.value,t))return null}return t.output.join(``)},ca=e=>{let t=2166136261;for(let n of e)t^=n.codePointAt(0)??0,t=Math.imul(t,16777619)>>>0;return t.toString(16).padStart(8,`0`)},la=e=>{let t=e.trim();return t.length<=160?t:`${t.slice(0,151).trimEnd()} ${ca(t)}`},ua=e=>JSON.stringify([e.source,e.journey,e.step,e.variant]),da=(e,t)=>e<t?-1:e===t?0:1,fa=e=>{let t=new Set,n=[];for(let r of e)for(let e of[r.source.blob,r.preview.blob,...r.assets.map(e=>e.blob)])t.has(e.sha256)||(t.add(e.sha256),n.push(e));return n.toSorted((e,t)=>da(e.sha256,t.sha256))},pa=`node`,ma=e=>`testId`in e&&e.testId!==pa?e.testId:void 0,b=e=>`testId`in e&&e.testId!==pa?JSON.stringify([e.participant,e.project,e.testId]):JSON.stringify([e.participant,`script`]),ha=(e,t)=>{let n=ma(e);return e.captures.map(e=>({key:e.key,...n!==void 0&&{testId:n},message:t}))},ga=(e,t)=>{let n=new Set(e.run.participants),r=new Set,i=new Map;for(let a of e.attempts){let e=JSON.stringify([b(a),a.retry]);if(!n.has(a.participant)){t.push(...ha(a,ra.outsideShards));continue}if(r.has(e)||(r.add(e),a.captures.length===0))continue;let o=i.get(b(a));(o===void 0||o.retry<a.retry)&&i.set(b(a),a)}return e.attempts.filter(e=>i.get(b(e))===e)},_a=e=>JSON.stringify([e.key.journey,e.key.variant]),va=(...e)=>e.find(e=>e!==0)??0,ya=(e,t)=>va(da(e.artifact.key.journey,t.artifact.key.journey),da(e.artifact.key.variant,t.artifact.key.variant),e.artifact.order-t.artifact.order,da(e.attempt.location?.file??``,t.attempt.location?.file??``),(e.attempt.location?.line??0)-(t.attempt.location?.line??0),da(b(e.attempt),b(t.attempt)),e.index-t.index),ba=e=>{let t=Map.groupBy(e,e=>ua(e.artifact.key)),n=new Map;for(let e of t.values()){let t=Map.groupBy(e,e=>b(e.attempt));for(let e of t.values())for(let[r,i]of e.entries()){let e=t.size>1?` · ${i.attempt.title??ma(i.attempt)??`script`}`:``,a=r>0?` (${String(r+1)})`:``;n.set(i,`${e}${a}`)}}return n},xa=e=>{let t=ba(e),n=new Map(fa(e.map(e=>e.artifact)).map(e=>[e.sha256,e])),r=e=>n.get(e.sha256)??e,i=new Map,a=new Map;return e.map(e=>{let{artifact:n}=e,o=_a(n);i.has(o)||i.set(o,n.page);let s=a.get(o)??0;a.set(o,s+1);let c=t.get(e)??``,l=i.get(o),u={...n};return delete u.page,{...u,...l!==void 0&&{page:l},key:{...n.key,step:la(`${n.key.step}${c}`)},label:la(`${n.label}${c}`),order:s,source:{...n.source,blob:r(n.source.blob)},preview:{...n.preview,blob:r(n.preview.blob)},assets:n.assets.map(e=>({...e,blob:r(e.blob)}))}})},Sa=e=>{let t=Ji.safeParse(e);if(!t.success)return{refusal:`Invalid capture manifest.`,leftOut:[]};let n=t.data,r=[...n.leftOut??[]],i=ga(n,r).flatMap(e=>e.captures.map((t,n)=>({artifact:t,attempt:e,index:n}))).filter(e=>{if(e.artifact.key.source===n.run.source)return!0;let t=ma(e.attempt);return r.push({key:e.artifact.key,...t!==void 0&&{testId:t},message:ra.anotherSource}),!1}).toSorted(ya);return i.length===0?{refusal:`A run must contain at least one capture.`,leftOut:r}:{captures:xa(i),leftOut:r}},Ca=(e,t)=>sa({...e,expiresAt:``})===sa({...t,expiresAt:``}),wa=e=>{let t=sa(e);return t===null?null:`enhance-capture-run:v1\0${t}`},Ta=(e,t)=>va(da(b(e),b(t)),e.retry-t.retry),Ea=e=>{let t=e[0];if(t===void 0)return`At least one participant manifest is required.`;let n=new Map,r=[],i=[];for(let a of e){if(!Ca(a.run,t.run)||a.ordering!==t.ordering)return`Participant manifests must belong to the same reserved run and ordering.`;if(!a.participants.some(e=>n.has(e.id))){for(let e of a.participants)n.set(e.id,e);i.push(...a.leftOut??[]);for(let e of a.attempts)a.participants.some(t=>t.id===e.participant)?r.push(e):i.push(...ha(e,ra.outsideShards))}}let a={...t};return delete a.leftOut,{...a,participants:Array.from(n,([,e])=>e).toSorted((e,t)=>da(e.id,t.id)),attempts:r.toSorted(Ta),...i.length>0&&{leftOut:i}}},Da=[`journey`,`step`,`variant`],Oa=[`label`,`journeyLabel`],ka=e=>typeof e==`string`?la(e):e,Aa=e=>{if(typeof e!=`object`||!e||Array.isArray(e))return e;let t={...e};for(let e of Oa)t[e]=ka(t[e]);let n=t.key;if(typeof n==`object`&&n&&!Array.isArray(n)){let e={...n};for(let t of Da)e[t]=ka(e[t]);t.key=e}return t},ja=e=>e.length>0&&e.every(e=>e.path.length===1&&e.path[0]===`preview`),Ma=(e,t,n)=>{let r=typeof e==`object`&&e?Pi.safeParse(Reflect.get(e,`key`)):null;return{...r?.success===!0&&{key:r.data},...t!==void 0&&{testId:t},message:ja(n)?ra.pictureMismatch:ra.notACapture}},Na={captures:m.array(m.unknown())},Pa=Ji.extend({attempts:m.array(m.union([Wi.extend(Na),Gi.extend(Na)]))}).transform(e=>{let t=[...e.leftOut??[]],n=e.attempts.map(e=>({...e,captures:e.captures.flatMap(n=>{let r=Aa(n),i=Vi.safeParse(r);return i.success?[i.data]:(t.push(Ma(r,`testId`in e?e.testId:void 0,i.error.issues)),[])})}));return{...e,attempts:n,...t.length>0&&{leftOut:t}}});m.strictObject({manifest:Pa}),m.strictObject({canvasId:m.uuid()}).extend({verdict:Bi});const Fa=m.strictObject({canvasId:m.uuid(),name:m.string().min(1)}),Ia=m.strictObject({runId:m.uuid(),revision:m.string(),version:m.number().int().positive()}),La=Fa.extend({expectedVersion:m.number().int().nonnegative(),revision:m.string().min(1)}),Ra=m.strictObject({current:$i,latest:Hi,related:m.array(m.strictObject({run:Hi,verdict:Bi})),changes:m.array(m.strictObject({key:Pi,frameId:m.string(),label:m.string(),journeyLabel:m.string(),page:m.string().optional(),change:m.enum([`new`,`changed`,`unchanged`,`uncompared`])}))}),x=(e,t,n,r)=>Object.assign(Error(t),{code:e,...n!==void 0&&{runId:n},...r}),za=e=>e instanceof Error&&typeof Reflect.get(e,`code`)==`string`,Ba=e=>Dt(`sha256`).update(e).digest(`hex`),Va=async e=>{let t=Dt(`sha256`);return await It(_t(e),async e=>{for await(let n of e)t.update(n)}),t.digest(`hex`)},Ha=e=>{let t=wa(e);if(t===null)throw Error(`A capture manifest must contain only finite JSON values.`);return Dt(`sha256`).update(t).digest(`hex`)},Ua=Lt(`enhance.capture.resources`),Wa=(e,t)=>{if(!/^[a-f0-9]{64}$/u.test(t))throw x(`artifact`,`Invalid capture blob digest.`);return g.join(g.resolve(e),`blobs`,t)},Ga=async(e,t)=>{for(let n of e)try{let e=Wa(n,t.sha256),r=await Pt(e);if(r.isFile()&&r.size===t.bytes&&await Va(e)===t.sha256)return e}catch(e){Ua.publish({stage:`local-read`,sha256:t.sha256,error:e})}return null},Ka=e=>e instanceof Error&&Reflect.get(e,`code`)===`EEXIST`,qa=async(e,t)=>{try{await kt(e,t)}catch(e){if(!Ka(e)||!(await Pt(t)).isFile())throw e}finally{await Nt(e,{force:!0})}},Ja=async(e,t,n)=>{try{if(t.bytes!==n.byteLength||Ba(n)!==t.sha256)throw x(`artifact`,`Capture blob bytes do not match their descriptor.`);await At(g.join(e,`blobs`),{recursive:!0});let r=Wa(e,t.sha256),i=`${r}.${globalThis.crypto.randomUUID()}.tmp`;return await Ft(i,n,{flag:`wx`,mode:384}),await qa(i,r),!0}catch(e){return Ua.publish({stage:`local-write`,sha256:t.sha256,error:e}),!1}},Ya=async(e,t)=>{let n=Vi.parse(t);if(await Ga([e],n.source.blob)===null&&await Ga([e],n.preview.blob)===null)throw x(`artifact`,`Neither the snapshot nor the preview of a capture is on disk.`);return n},Xa=async(e,t)=>{let n=`${e}.${globalThis.crypto.randomUUID()}.tmp`;await Ft(n,JSON.stringify(t),{mode:384}),await Mt(n,e)},Za=async e=>{let t=JSON.parse(await jt(e,`utf8`));return Pa.parse(t)},S={unversioned:void 0,v1:1,v2:2,v3:3,v4:4,v5:5,v6:6,v7:7,v8:8,v9:9,v10:10,v11:11,v12:12,v13:13,v14:14},Qa={[S.v1]:`layout`,[S.v2]:`layout`,[S.v3]:`typography`,[S.v4]:`typography`,[S.v5]:`typography`,[S.v6]:`geometry`,[S.v7]:`geometry`,[S.v8]:`geometry`,[S.v9]:`geometry`,[S.v10]:`geometry`,[S.v11]:`css`,[S.v12]:`text-shadow-blend`,[S.v13]:`format-number`,[S.v14]:`format-number`},$a=[`appearance-unsupported-component`,`styles-unsupported-component`,`text-shadow-blend-unsupported`,`recording-aspect-not-preserved`],C=e=>typeof e==`object`&&!!e&&!Array.isArray(e),eo=e=>Array.isArray(e)?e:void 0,w=(e,...t)=>Object.fromEntries(Object.entries(e).filter(([e])=>!t.includes(e))),to=e=>`${e}~mask`,no={alpha:`alpha`,luminance:`luminance`,vector:`outline`},ro=e=>{if(!C(e)||!C(e.compositing))return;let t=e.compositing.mask;return typeof t==`string`?no[t]:void 0},io=e=>C(e)?w(e,`blendMode`,`blendSource`):e,ao=e=>C(e)&&`paint`in e?{...w(e,`paint`,`alignment`),paints:[e.paint]}:e,oo=e=>{if(!C(e)||!C(e.progression))return e;let t=e.progression.startValue,n=e.value;return{...w(e,`progression`),value:typeof t==`number`&&typeof n==`number`?Math.max(t,n):n}},so=e=>C(e)&&e.kind===`image`?w(e,`adjustments`):e,co=e=>eo(e)?.filter(e=>!C(e)||e.kind!==`inner`).map(e=>C(e)?{...e,spread:0}:e)??e,lo=e=>{if(!C(e))return e;let t={...e,paint:io(e.paint)};return e.alignment===`inside`?{...t,alignment:`center`}:t},uo=e=>{if(!C(e)||e.kind!==`span`)return e;let t=w(e,`decorationBlendMode`),n=eo(e.fills);n!==void 0&&(t.fills=n.map(e=>io(e))),C(e.stroke)&&(t.stroke=lo(e.stroke));let r=eo(e.children);return r!==void 0&&(t.children=r.map(e=>uo(e))),t},fo=(e,t)=>{let n=eo(t.fills);if(n===void 0)return;let[r]=n,i=C(r)?r.blendMode:void 0;typeof i==`string`&&n.length===1&&(e.blendMode??`normal`)===`normal`&&(t.blendMode=i),t.fills=n.map(e=>io(e))},po=(e,t)=>{let n={...e};`border`in e&&(n.border=ao(e.border)),`outline`in e&&(n.outline=ao(e.outline));let r=eo(e.fills);r!==void 0&&(n.fills=r.map(e=>so(e)));let i=eo(e.filters);return i!==void 0&&(n.filters=i.map(e=>oo(e))),t?(`shadows`in e&&(n.shadows=co(e.shadows)),fo(e,n),n):n},mo=e=>{let t=e.props;if(!C(t)||!C(t.paintFallback))return{...e};let n=t.paintFallback.mask;if(n===void 0)return{...e};let r=w(t.paintFallback,`mask`),i=Object.keys(r).length===0?w(t,`paintFallback`):{...t,paintFallback:r},a=e.styles,o=w(e,`props`);return C(n)&&C(a)&&(o.styles=Object.fromEntries(Object.entries(a).filter(([e,t])=>n[e]!==t))),Object.keys(i).length>0&&(o.props=i),o},ho=e=>{let t=e.compositing;return C(t)?t.groupMode===void 0?t.paintSemantics===`web`&&(e.component===`frame`||e.component===`group`):t.groupMode===`isolated`:!1},go=e=>{let t={...e};return`stroke`in e&&(t.stroke=lo(e.stroke)),C(e.decoration)&&(t.decoration=w(e.decoration,`blendMode`)),t},_o=e=>{if(!C(e))return e;let t=w(mo(e),`compositing`);ho(e)&&C(t.styles)&&(t.styles={...t.styles,isolation:`isolate`});let n=e.component===`text`;if(C(e.appearance)&&(t.appearance=po(e.appearance,n)),!n)return t;C(e.typography)&&(t.typography=go(e.typography));let r=t.props,i=C(r)?eo(r.richText):void 0;return i!==void 0&&C(r)&&(t.props={...r,richText:i.map(e=>uo(e))}),t},vo=e=>C(e)&&typeof e.sortKey==`string`?e.sortKey:``,yo=e=>{let t=new Map;for(let[n,r]of Object.entries(e)){if(!C(r)||typeof r.parentId!=`string`)continue;let e=t.get(r.parentId);e===void 0?t.set(r.parentId,[n]):e.push(n)}let n=t=>vo(e[t]),r=(e,t)=>n(e)<n(t)?-1:Number(n(e)>n(t));for(let e of t.values())e.sort(r);return t},bo=(e,t,n)=>({id:e,label:`Mask`,labelOrigin:`generated`,component:`group`,styles:{},geometry:{kind:`mask`,maskId:t,mode:n}}),xo=(e,t,n,r)=>{let i=``;for(let a of t){let t=ro(e[a]);t!==void 0&&(i=to(a),n[i]=bo(i,a,t),r[i]=r[a]);let o=r[a];i!==``&&C(o)&&(r[a]={...o,parentId:i})}},So=(e,t,n)=>{for(let[r,i]of yo(n)){let a=i.filter(t=>ro(e[t])!==void 0),[o]=i,s=t[r],c=ro(e[o]);c!==void 0&&a.length===1&&C(s)&&s.component===`group`&&s.geometry===void 0?t[r]={...s,geometry:{kind:`mask`,maskId:o,mode:c}}:xo(e,i,t,n)}},Co=e=>{let t=e.nodes;if(!C(t))return e;let n=Object.fromEntries(Object.entries(t).map(([e,t])=>[e,_o(t)]));if(!C(e.relationships))return{...e,nodes:n};let r={...e.relationships};return So(t,n,r),{...e,nodes:n,relationships:r}},wo=e=>typeof e==`object`&&!!e&&!Array.isArray(e),To=e=>Array.isArray(e),Eo=e=>{if(!wo(e))return e;let t={...e};return Reflect.deleteProperty(t,`blendMode`),Reflect.deleteProperty(t,`blendSource`),t},Do=e=>{if(!wo(e)||e.component!==`text`||!wo(e.appearance))return e;let t=e.appearance.shadows;return To(t)?{...e,appearance:{...e.appearance,shadows:t.map(e=>Eo(e))}}:e},Oo=e=>{let t=e.nodes;return wo(t)?{...e,nodes:Object.fromEntries(Object.entries(t).map(([e,t])=>[e,Do(t)]))}:e},ko=new Set([...Object.values(S),15]),Ao=e=>ko.has(e),jo=new Set([`format-number`,`text-shadow-blend`,`css`,`geometry`]),Mo=e=>typeof e==`object`&&!!e&&!Array.isArray(e),No=e=>{if(!Mo(e))return e;let t=Object.fromEntries(Object.entries(e).filter(([e])=>e!==`gridTrack`)),n=t.container;Mo(n)&&(t.container=Object.fromEntries(Object.entries(n).filter(([e])=>e!==`materialized`)));for(let e of[`horizontal`,`vertical`]){let n=t[e];Mo(n)&&n.mode===`hug`&&(t[e]=Object.fromEntries(Object.entries(n).filter(([e])=>e!==`basis`)))}return t},Po=e=>{let t=e.version;if(!Ao(t))return null;if(t===15||!Mo(e.nodes))return e;let n=Object.entries(Qa).find(([e])=>Number(e)===t)?.[1];return jo.has(n)?{...e,version:15}:Object.values(e.nodes).some(e=>Mo(e)&&e.geometry!==void 0)?null:n===`typography`?{...e,version:15}:{...e,version:15,nodes:Object.fromEntries(Object.entries(e.nodes).map(([e,t])=>[e,Mo(t)&&t.layout!==void 0?{...t,layout:No(t.layout)}:t]))}},Fo=e=>{let t=Po(e);return t===null||t===e||e.version===S.v13||e.version===S.v14?t:Oo(e.version===S.v12?t:Co(t))},Io=e=>{if(e===15)return`current`;if(typeof e!=`number`||!Number.isSafeInteger(e)||e<1)return`refused`;if(e>15)return`ahead`;let t=new Map(Object.entries(Qa).map(([e,t])=>[Number(e),t]));for(let n=e;n<15;n+=1)if(t.get(n)!==`format-number`)return`refused`;return`number-only`};m.strictObject({}),m.object({firstAgentWorkAt:m.iso.datetime().nullable()});const Lo=m.object({cursor:m.string().nullable().default(null),limit:m.number().int().min(1).max(100).default(20)}),Ro=e=>m.object({items:m.array(e),truncated:m.boolean()}),zo=2048,Bo=m.enum([`never-captured`,`capture-pending`,`extension-unavailable`,`capture-failed`,`source-mismatch`,`upload-incomplete`,`blob-missing`,`image-load-failed`,`unsupported-legacy-state`]),Vo=m.object({background:m.string().optional(),documentVersion:m.number().int().positive().optional(),thumbnailId:m.uuid(),url:m.string(),width:m.literal(528),height:m.literal(312),bytes:m.number().int().min(1).max(1048576)});m.object({canvasId:m.uuid(),thumbnailId:m.uuid(),clientReleaseIdentity:m.string().min(1).max(100),attemptedOperation:m.literal(`thumbnail-download`),recoveryOutcome:m.literal(`fallback-shown`)}),m.object({recorded:m.literal(!0)});const Ho=m.enum([`invite-only`,`link-view`,`link-comment`,`link-edit`]),Uo=m.enum([`owner`,`can-edit`,`can-comment`,`can-view`]),Wo=m.enum([`can-edit`,`can-comment`,`can-view`]),Go=m.object({read:m.boolean(),comment:m.enum([`yes`,`sign-in`,`no`]),edit:m.enum([`yes`,`sign-in`,`no`]).default(`no`),grants:m.array(m.object({source:m.enum([`direct`,`team`,`link`]),accessLevel:Uo})).default([]),grantableAccessLevels:m.array(Wo).default([]),share:m.boolean(),manage:m.boolean(),readHistory:m.boolean().default(!1)}),Ko=m.object({id:m.uuid(),title:m.string().min(1),accessState:Ho,organisationId:m.uuid().nullable(),sourceUrl:m.string().nullable(),unresolvedCount:m.number().int().min(0),viewerCan:Go,createdAt:m.iso.datetime(),lastActivityAt:m.iso.datetime()});m.object({title:m.string().trim().min(1),organisationId:m.uuid().nullable().default(null),sourceUrl:m.string().nullable().default(null)}),Ko.extend({version:m.number().int().positive()}),m.object({canvasId:m.uuid()});const qo=m.union([m.literal(`own`),m.literal(`everything`),m.uuid()]);m.object({collection:qo.default(`own`),title:m.string().trim().min(1).optional().describe(`Title text to match before returning canvas ids.`),deleted:m.boolean().default(!1),accessState:Ho.optional(),scope:m.enum([`all`,`mine`,`shared`]).default(`all`),hasUnresolved:m.boolean().default(!1)});const Jo=Ko.extend({screenCount:m.number().int().min(0),hasRecording:m.boolean(),lastViewedAt:m.iso.datetime().nullable()});Ro(m.union([Jo.extend({thumbnail:Vo}),Jo.extend({thumbnail:m.null(),thumbnailFallbackReason:Bo})])),m.object({canvasId:m.uuid(),title:m.string().trim().min(1)}),m.object({canvasId:m.uuid()}),m.object({canvasId:m.uuid(),deletedAt:m.iso.datetime()}),m.object({canvasId:m.uuid(),organisationId:m.union([m.uuid(),m.literal(`personal`)])}),m.object({canvas:Ko}),m.object({canvasId:m.uuid(),organisationId:m.union([m.uuid(),m.literal(`personal`)]),title:m.string().trim().min(1).optional()}),m.object({canvas:Ko}),m.object({canvasId:m.uuid(),sourceCanvasId:m.uuid().optional(),organisationId:m.union([m.uuid(),m.literal(`personal`)]),title:m.string().trim().min(1),document:m.record(m.string(),m.unknown()),screenIds:m.array(m.uuid())}),m.object({canvas:Ko,document:m.record(m.string(),m.unknown())}),m.object({canvasId:m.uuid(),confirmation:m.string().min(1)}),m.object({canvasId:m.uuid()}),m.object({canvasId:m.uuid(),accessState:Ho}),m.object({canvas:Ko,widened:m.boolean()}),m.object({canvasId:m.uuid()}),m.object({lastViewedAt:m.iso.datetime().nullable()}),m.object({canvasId:m.uuid()}),m.object({canvasId:m.uuid()});const Yo=/javascript|vbscript|data\s*:\s*text\/html|expression\s*\(|@import/iu,Xo=m.string().refine(e=>!Yo.test(e),`unsafe CSS value`),T=m.number(),E=m.number().nonnegative(),D=T,Zo=E,O=m.number().min(0).max(1),Qo=m.string().min(1),$o=m.object({space:m.enum([`srgb`,`display-p3`]),red:O,green:O,blue:O,alpha:O,definitionId:Qo.optional()}),es=m.object({id:Qo,position:O,color:$o}),ts=m.object({id:Qo,visible:m.boolean()}),ns=ts.extend({kind:m.literal(`blur`),value:Zo,parameter:m.enum([`radius`,`standard-deviation`]).optional()}),rs=[ts.extend({kind:m.literal(`brightness`),value:Zo}),ts.extend({kind:m.literal(`contrast`),value:Zo}),ts.extend({kind:m.literal(`grayscale`),value:O}),ts.extend({kind:m.literal(`hue-rotate`),value:D}),ts.extend({kind:m.literal(`invert`),value:O}),ts.extend({kind:m.literal(`saturate`),value:Zo}),ts.extend({kind:m.literal(`sepia`),value:O})],is=m.discriminatedUnion(`kind`,[ns,...rs]),as=m.discriminatedUnion(`kind`,[ns.extend({progression:m.object({startValue:Zo,start:m.object({x:D,y:D}),end:m.object({x:D,y:D})}).optional()}),...rs]),os=m.tuple([D,D,D,D,D,D]).refine(([e,t,n,r])=>e*r!==t*n,`paint transform must be invertible`),ss=m.enum([`normal`,`multiply`,`screen`,`overlay`,`darken`,`lighten`,`plus-lighter`,`color-dodge`,`color-burn`,`hard-light`,`soft-light`,`difference`,`exclusion`,`hue`,`saturation`,`color`,`luminosity`]),cs=m.object({kind:m.literal(`figma`),originalMode:m.string(),mappedMode:ss,sourceGuid:m.string().optional(),path:m.array(m.string())}),ls=m.object({id:Qo,blendMode:ss.optional(),blendSource:cs.optional(),visible:m.boolean(),opacity:O}),us=m.discriminatedUnion(`kind`,[ls.extend({kind:m.literal(`solid`),color:$o}),ls.extend({kind:m.literal(`linear-gradient`),angle:D,transform:os.optional(),stops:m.array(es).min(2)}),ls.extend({kind:m.literal(`radial-gradient`),center:m.object({x:D,y:D}),radius:m.object({x:Zo,y:Zo}),transform:os.optional(),stops:m.array(es).min(2)}),ls.extend({kind:m.literal(`angular-gradient`),transform:os,stops:m.array(es).min(2)}),ls.extend({kind:m.literal(`diamond-gradient`),transform:os,stops:m.array(es).min(2)}),ls.extend({kind:m.literal(`image`),assetId:m.string().min(1),fit:m.enum([`fill`,`cover`,`fit`,`crop`,`tile`]),tileScale:D.positive().optional(),tileOrigin:m.enum([`center`,`top-left`]).optional(),rotation:m.union([m.literal(0),m.literal(90),m.literal(180),m.literal(270)]).optional(),crop:m.object({x:O,y:O,width:O,height:O}).optional(),transform:os.optional(),filters:m.array(is).optional(),naturalSize:m.object({width:D.positive(),height:D.positive()}).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`]})]),ds=m.intersection(us,m.object({alternatives:m.partialRecord(m.enum([`solid`,`linear-gradient`,`radial-gradient`,`angular-gradient`,`diamond-gradient`,`image`]),us).optional(),recentGradient:m.enum([`linear-gradient`,`radial-gradient`,`angular-gradient`,`diamond-gradient`]).optional()})),fs=m.object({id:Qo,name:m.string().trim().min(1),value:m.union([$o.omit({definitionId:!0}),m.object({definitionId:Qo})]),source:m.object({kind:m.literal(`figma`),key:Qo,modeId:Qo.optional()}).optional()}),ps=m.object({op:m.literal(`setArtworkColor`),nodeId:m.literal(`root`),colorId:m.string().min(1),definition:fs.nullable()}).refine(e=>e.definition===null||e.definition.id===e.colorId,`colour identity must match`),ms=m.object({ratio:E,offset:T.optional()}),hs=m.object({min:E.optional(),max:E.optional(),minParent:ms.optional(),maxParent:ms.optional()}).refine(({min:e,max:t})=>e===void 0||t===void 0||e<=t,`size minimum cannot exceed maximum`),gs=m.discriminatedUnion(`mode`,[m.object({mode:m.literal(`fixed`),value:E}).strict(),hs.extend({mode:m.literal(`hug`),implicitExtent:E.optional()}).strict(),hs.extend({mode:m.literal(`fill`),offset:T.optional()}).strict()]),_s=m.object({top:E,right:E,bottom:E,left:E}),vs=m.union([m.literal(`auto`),T]),ys=m.object({top:vs,right:vs,bottom:vs,left:vs}),bs=m.object({mode:m.enum([`auto-fill`,`auto-fit`]),minimum:m.number().positive()}),xs=m.object({x:T,y:T}),Ss=m.object({direction:m.enum([`row`,`column`]),alignItems:m.enum([`start`,`center`,`end`,`stretch`]),alignContent:m.enum([`start`,`center`,`end`,`stretch`,`space-between`,`space-around`,`space-evenly`]).optional(),justifyContent:m.enum([`start`,`center`,`end`,`space-between`,`space-around`,`space-evenly`]),gap:T,rowGap:T.optional(),columnGap:T.optional(),crossGapMode:m.literal(`auto`).optional(),wrap:m.enum([`nowrap`,`wrap`]).optional(),gridColumns:m.number().int().positive().optional(),gridAutoRepeat:bs.optional(),padding:_s}).strict(),Cs=m.object({button:m.literal(!0).optional(),overflowClip:m.literal(!0).optional(),lineAboveBorderBottom:T.optional()}).strict(),ws=m.object({top:E.optional(),right:E.optional(),bottom:E.optional(),left:E.optional()}).strict(),Ts=m.object({ratio:T,offset:T.optional()}).strict(),Es=m.object({x:Ts.optional(),y:Ts.optional()}).strict(),Ds=m.object({rotation:T.optional(),flipHorizontal:m.boolean().optional(),flipVertical:m.boolean().optional(),aspectRatioLocked:m.boolean().optional(),aspectRatio:m.number().positive().optional(),horizontal:gs.optional(),vertical:gs.optional(),position:m.enum([`flow`,`absolute`]).optional(),retainedIgnore:m.literal(!0).optional(),gridParticipation:m.literal(`unassigned`).optional(),gridEmptyPlacement:m.literal(`manual`).optional(),gridAutoTrackPolicy:m.object({rows:m.literal(`extend-last`).optional(),columns:m.literal(`extend-last`).optional()}).strict().optional(),retainedFlexSpacing:m.object({gap:m.union([T,Xo.min(1)]),counterGap:m.union([T,Xo.min(1)]),crossGapMode:m.literal(`auto`).optional()}).strict().optional(),alignSelf:m.enum([`auto`,`start`,`center`,`end`,`stretch`]).optional(),flexGrow:E.optional(),flexShrink:E.optional(),flexBasis:m.union([m.literal(`auto`),E,ms]).optional(),flowOffset:xs.optional(),positionParent:Es.optional(),order:T.int().optional(),margin:ys.partial().optional(),clipContent:m.boolean().optional(),baselineSource:Cs.optional(),scrollbarGutter:ws.optional(),container:Ss.partial().extend({padding:_s.partial().optional()}).optional()}).strict(),Os=T,k=E,ks=m.number().min(0).max(1),As=m.string().min(1),js=m.object({topLeft:k,topRight:k,bottomRight:k,bottomLeft:k,smoothing:ks.optional()}),Ms=m.array(k).min(1),Ns=m.enum([`none`,`round`,`square`]),Ps=m.object({visible:m.boolean(),layoutInclusion:m.enum([`always`,`visible`,`none`]).optional(),width:m.object({top:k,right:k,bottom:k,left:k}),style:m.enum([`solid`,`dashed`,`dotted`]),paints:m.array(ds),dashPattern:Ms.optional(),dashCap:Ns.optional(),dashOrigin:m.literal(`css`).optional(),alignment:m.enum([`inside`,`center`,`outside`]).optional()}),Fs=Ps.pick({width:!0,style:!0,layoutInclusion:!0}),Is=m.object({visible:m.boolean(),width:k,offset:Os,style:m.enum([`solid`,`dashed`,`dotted`]),paints:m.array(ds),dashPattern:Ms.optional(),dashCap:Ns.optional()}),Ls=m.object({id:As,visible:m.boolean(),kind:m.enum([`outer`,`inner`]),color:$o,offsetX:Os,offsetY:Os,blur:k,spread:Os,blendMode:ss.optional(),blendSource:cs.optional(),isShownBehindNode:m.boolean().optional()}),Rs=m.object({opacity:ks,blendMode:ss,fills:m.array(ds),border:Ps,retainedBorder:Fs.optional(),outline:Is,radius:js,shadows:m.array(Ls),filters:m.array(is),backdropFilters:m.array(as)}),zs=Rs.partial().refine(e=>Object.keys(e).length>0,`appearance values cannot be empty`),Bs=[`opacity`,`blendMode`,`fills`,`border`,`retainedBorder`,`outline`,`radius`,`shadows`,`filters`,`backdropFilters`],Vs=m.enum(Bs),Hs=Rs.partial().extend({clear:m.array(Vs).min(1).max(Bs.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`),A=m.number(),j=m.number().nonnegative(),Us=m.string().regex(/^[\u{20}-\u{7E}]{4}$/u),Ws=Us.refine(e=>![`wght`,`opsz`].includes(e)),M=m.object({family:m.string().min(1),fallbackFamilies:m.array(m.string().min(1)),size:j,weight:m.number().min(1).max(1e3),variations:m.record(Ws,A).optional(),features:m.record(Us,m.number().int().nonnegative().max(65535)).optional(),opticalSize:m.discriminatedUnion(`mode`,[m.object({mode:m.literal(`auto`)}),m.object({mode:m.literal(`font-default`)}),m.object({mode:m.literal(`fixed`),value:A})]).optional(),style:m.enum([`normal`,`italic`,`oblique`]),lineHeight:m.discriminatedUnion(`mode`,[m.object({mode:m.literal(`normal`)}),m.object({mode:m.literal(`fixed`),value:j}),m.object({mode:m.literal(`percent`),value:j})]),letterSpacing:m.union([A,m.object({mode:m.literal(`percent`),value:A})]),align:m.enum([`left`,`center`,`right`,`justify`]),direction:m.enum([`auto`,`ltr`,`rtl`]).optional(),verticalAlign:m.enum([`top`,`middle`,`bottom`]),verticalTrim:m.enum([`none`,`cap-height`]).optional(),transform:m.enum([`none`,`uppercase`,`lowercase`,`capitalize`]),decoration:m.object({line:m.enum([`none`,`underline`,`line-through`]),style:m.enum([`solid`,`double`,`dotted`,`dashed`,`wavy`]),color:$o.optional(),blendMode:ss.optional(),thickness:m.union([j,m.object({mode:m.literal(`percent`),value:j}),m.object({mode:m.literal(`font-default`)})]).optional(),offset:m.union([A,m.object({mode:m.literal(`percent`),value:A})]).optional(),skipInk:m.enum([`auto`,`none`,`all`]).optional()}),stroke:m.object({width:j,paint:ds,alignment:m.enum([`center`,`outside`]).optional()}).optional(),wrapping:m.enum([`wrap`,`nowrap`,`pre`,`pre-line`,`pre-wrap`,`break-spaces`]),wrapStyle:m.enum([`auto`,`pretty`,`balance`]).optional(),paragraphSpacing:j.optional(),paragraphIndent:j.optional(),listStyle:m.enum([`none`,`bulleted`,`numbered`]).optional(),listSpacing:j.optional(),hangingList:m.boolean().optional(),hangingPunctuation:m.boolean().optional(),truncation:m.object({mode:m.enum([`none`,`ellipsis`]),maxLines:m.number().int().min(1).nullable()}).optional(),insets:m.object({top:A,right:A,bottom:A,left:A}).optional()}),Gs=M.pick({align:!0,direction:!0,wrapStyle:!0,paragraphSpacing:!0,paragraphIndent:!0,listStyle:!0,listSpacing:!0,hangingList:!0}).partial().extend({listLevel:m.number().int().min(1).optional(),listStart:m.number().int().min(1).optional()}).strict(),Ks=M.partial().strict(),qs=M.keyof().options,Js=Ks.extend({featureChanges:m.object({set:M.shape.features,clear:m.array(Us).optional(),removeIfEmpty:m.boolean().optional()}).strict().optional(),variationChanges:m.object({set:M.shape.variations,clear:m.array(Ws).optional(),removeIfEmpty:m.boolean().optional()}).strict().optional(),clear:m.array(M.keyof()).max(qs.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`),Ys={"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`],"paint-order":[`stroke`],"white-space":[`wrapping`],"text-wrap-style":[`wrapStyle`],"text-wrap":[`wrapStyle`]},Xs=/^(?:behavior|-moz-binding)$/iu,Zs=m.string().min(1).regex(/^(?:--[\w-]+|-(?:webkit|moz|ms|o)-[a-z][a-z\d-]*|[a-z][a-z\d-]*)$/iu).refine(e=>!Xs.test(e),`unsafe CSS property`),N=m.object({id:m.string().min(1),property:Zs,value:Xo,enabled:m.boolean()}),Qs=m.object({declarations:m.array(N)}).refine(({declarations:e})=>new Set(e.map(e=>e.id)).size===e.length,`additional style ids must be unique`),$s=m.array(N.shape.id).refine(e=>new Set(e).size===e.length,`declaration ids must be unique`),ec=m.object({set:m.array(N).refine(e=>new Set(e.map(e=>e.id)).size===e.length,`declaration ids must be unique`).optional(),clear:$s.optional(),order:$s.optional(),empty:m.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`),tc=M.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}).extend({decoration:M.shape.decoration.omit({blendMode:!0})}).strict(),nc=tc.keyof().options,rc=m.object({id:m.string().min(1),name:m.string().trim().min(1),description:m.string().max(2e3),sortKey:m.string().min(1).optional(),sourceStyleId:m.string().min(1).optional(),sourceCanvasId:m.uuid().optional(),sourceRevision:m.number().int().positive().optional(),typography:tc.extend({listStyle:M.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`]});m.object({id:rc.shape.id,position:m.enum([`normal`,`subscript`,`superscript`]).optional(),overrides:m.partialRecord(m.enum([`fontWeight`,`fontStyle`,`fontVariationSettings`,`fontOpticalSizing`,`textDecorationLine`,`textDecorationStyle`,`textDecorationColor`,`textDecorationThickness`,`textUnderlineOffset`,`textDecorationSkipInk`]),m.union([m.string().max(1e3),m.number()])).optional()}).strict();const ic=ds.array().optional();m.object({fills:ic}),Gs.pick({paragraphSpacing:!0,paragraphIndent:!0,listSpacing:!0,wrapStyle:!0}).extend({hangingPunctuation:M.shape.hangingPunctuation,verticalTrim:M.shape.verticalTrim,stroke:M.shape.stroke.nullable(),decorationBlendMode:M.shape.decoration.shape.blendMode,backgroundBlendMode:ss.optional()}).strip();const P=m.object({url:m.url(),expiresAt:m.iso.datetime(),headers:m.record(m.string(),m.string())}),ac=m.object({url:m.url(),expiresAt:m.iso.datetime(),bytes:m.number().int().min(0)}),oc=`/v1/canvas-assets/`,sc=[`image/avif`,`image/gif`,`image/jpeg`,`image/png`,`image/webp`],cc=m.string().regex(/^image\/[a-z0-9.+-]+$/u);m.object({canvasId:m.uuid(),contentType:m.enum(sc),bytes:m.number().int().positive()}),m.object({assetId:m.uuid(),path:m.string().startsWith(`/v1/canvas-assets/`),upload:P});const lc=(e,t)=>`${oc}${encodeURIComponent(e)}/${encodeURIComponent(t)}`,uc=m.tuple([m.uuid(),m.uuid()]),dc=e=>{if(!e.startsWith(`/v1/canvas-assets/`))return null;let t=uc.safeParse(e.slice(18).split(`/`)).data;return t===void 0?null:{canvasId:t[0],assetId:t[1]}},fc=[`font/ttf`,`font/otf`,`font/woff`,`font/woff2`,`font/collection`],pc=m.object({canvasId:m.uuid(),sha256:m.string().regex(/^[a-f0-9]{64}$/u)});pc.extend({bytes:m.number().int().positive()}).extend({contentType:m.enum(fc)}),m.object({path:m.string().startsWith(`/v1/canvas-assets/`)}).extend({upload:P});const mc=(e,t)=>`${oc}${encodeURIComponent(e)}/fonts/${encodeURIComponent(t)}`;m.object({canvasId:m.uuid(),sources:m.array(pc).min(1)}),m.object({resources:m.array(m.object({source:pc,path:m.string()}))});const hc=1e3,gc=new Set(fc),_c=(e,t)=>e===`image`?cc.safeParse(t).success:gc.has(t),vc=m.strictObject({canvasId:m.uuid(),clientToken:m.uuid()});m.discriminatedUnion(`kind`,[vc.extend({kind:m.literal(`image`),contentType:m.enum(sc),bytes:m.number().int().positive(),sha256:m.string().regex(/^[a-f0-9]{64}$/u)}),vc.extend({kind:m.literal(`font`),contentType:m.enum(fc),bytes:m.number().int().positive(),sha256:m.string().regex(/^[a-f0-9]{64}$/u)})]);const yc=m.discriminatedUnion(`kind`,[m.strictObject({kind:m.literal(`image`),width:m.number().int().positive(),height:m.number().int().positive()}),m.strictObject({kind:m.literal(`font`),family:m.string().min(1),subfamily:m.string(),style:m.enum([`normal`,`italic`,`oblique`]),minimumWeight:m.number().min(1).max(hc),maximumWeight:m.number().min(1).max(hc)}).refine(e=>e.minimumWeight<=e.maximumWeight,`Font weight bounds must be ordered.`)]);m.strictObject({canvasId:m.uuid(),clientToken:m.uuid(),assetId:m.uuid(),kind:m.enum([`image`,`font`]),contentType:m.string(),bytes:m.number().int().positive(),sha256:m.string().regex(/^[a-f0-9]{64}$/u),path:m.string().startsWith(`/v1/canvas-assets/`),state:m.enum([`awaiting_upload`,`ready`]),metadata:yc.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=>_c(e.kind,e.contentType),`Content type must match the asset kind.`).refine(e=>e.path===(e.kind===`image`?lc(e.canvasId,e.assetId):mc(e.canvasId,e.sha256)),`The resource path must match its native identity.`).safeExtend({upload:P.nullable()}).refine(e=>e.state===`awaiting_upload`==(e.upload!==null),`Only pending uploads receive upload access.`);const bc=[`top`,`right`,`bottom`,`left`];bc.map(e=>`padding-${e}`),bc.map(e=>`margin-${e}`);const xc=m.enum([`png`,`jpeg`]),Sc=m.number().positive(),Cc=m.strictObject({format:xc.optional(),scale:Sc.optional()}),wc=m.strictObject({format:xc.nullable().optional(),scale:Sc.nullable().optional()}).refine(e=>e.format!==void 0||e.scale!==void 0),Tc=m.number(),Ec=Tc.nonnegative(),Dc=m.string().min(1).max(200),Oc=m.string().regex(/^[MmLlHhVvCcSsQqTtAaZzEe\d\s.,+-]*$/u),kc=m.strictObject({x:Tc,y:Tc,width:Ec,height:Ec}),Ac=m.strictObject({kind:m.literal(`path`),path:Oc.min(1),fillRule:m.enum([`nonzero`,`evenodd`]),viewBox:kc.extend({width:Ec.positive(),height:Ec.positive()})}),jc=m.strictObject({kind:m.literal(`polygon`),count:m.number().int().min(3),innerRatio:m.number().min(0).max(1).optional(),cornerRadius:Ec,cornerSmoothing:m.number().min(0).max(1)}),Mc=m.enum([`union`,`subtract`,`intersect`,`exclude`]),Nc=m.strictObject({kind:m.literal(`boolean`),operation:Mc,operandIds:m.array(Dc).min(1).refine(e=>new Set(e).size===e.length),result:m.strictObject({path:Oc,fillRule:m.literal(`nonzero`),isEmpty:m.boolean(),bounds:kc,inputKey:m.string().regex(/^[a-f0-9]{16}$/u)}).refine(e=>e.isEmpty===(e.path===``))}),Pc=m.discriminatedUnion(`kind`,[Ac,jc,m.strictObject({kind:m.literal(`mask`),maskId:Dc,mode:m.enum([`alpha`,`luminance`,`outline`]).optional()}),Nc]),Fc=`Update Enhance: compositing is no longer supported. Use the isolation style or a mask group.`,Ic=`This change needs a newer version of Enhance. Refresh the editor, or update the Enhance plugin or command-line tool, then try again.`,Lc={forCaller:!0},Rc=m.number({error:Ic}).int({error:Ic}).positive({error:Ic}).meta({description:`The document format this client writes. The current format is 15.`,examples:[15]}),zc=(e,t,n)=>{let r=Io(e);r===`current`||r===`number-only`&&t===`names`||n.addIssue({code:`custom`,path:[`documentFormatVersion`],message:r===`ahead`?`Enhance is being updated. Try again in a minute.`:Ic,params:Lc,input:e})};m.object({signature:m.string().regex(/^[a-f0-9]{16}$/u),image:m.string().refine(e=>e.startsWith(`data:image/jpeg;base64,`)||dc(e)!==null),families:m.array(m.string().min(1)).min(1)});const F=m.object({x:m.number(),y:m.number(),width:m.number().nonnegative(),height:m.number().nonnegative()}),Bc=m.enum([`start`,`center`,`end`,`stretch`,`scale`]),Vc=m.object({x:Bc,y:Bc}),Hc=m.enum([`source`,`generated`,`content`,`user`]),I=m.looseObject({id:m.string().min(1),label:m.string(),component:m.string().min(1),labelOrigin:Hc.optional(),visible:m.boolean().optional(),locked:m.boolean().optional(),constraints:Vc.optional(),styles:m.record(m.string(),m.union([m.string(),m.number()])),layout:Ds.optional(),responsive:m.never().optional(),appearance:zs.optional(),exportSettings:Cc.optional(),typography:Ks.optional(),additionalStyles:Qs.optional(),geometry:Pc.optional(),compositing:m.never({error:Fc}).optional(),props:m.record(m.string(),m.unknown()).optional(),box:F.optional()}),Uc=m.object({version:m.literal(15),nodes:m.record(m.string(),I),relationships:m.record(m.string(),m.object({parentId:m.string().min(1),sortKey:m.string().min(1)})),tombstones:m.record(m.string(),m.literal(!0)).default({})}),Wc=m.record(m.string(),m.unknown());m.preprocess(e=>{let t=Wc.safeParse(e).data;return t===void 0?e:Object.keys(t).length===0?Gc():Fo(t)},Uc);const Gc=()=>({version:15,nodes:{root:{id:`root`,label:`Canvas`,component:`root`,labelOrigin:`generated`,visible:!0,locked:!1,styles:{}}},relationships:{},tombstones:{}}),Kc=m.string().min(1),qc=m.object({code:m.enum([`asset-unavailable`,`content-omitted`,`cross-origin-frame`,`nodes-truncated`,`responsive-behavior-not-editable`,`style-degraded`,`unsupported-surface`]),message:m.string().min(1),temporaryId:Kc.optional()}),Jc=m.enum([`text-stroke-inside`,`text-stroke-outside-translucent`,`text-stroke-paints`,`text-inner-shadow`,`text-shadow-spread`,`text-shadow-blend`,`text-background-blur`,`progressive-layer-blur`,`progressive-background-blur`,`blend-plus-darker`,`blend-linear-burn`,`image-exposure`,`image-contrast`,`image-saturation`,`image-temperature`,`image-tint`,`image-highlights`,`image-shadows`,`effect-noise`,`effect-texture`,`effect-glass`]),Yc=m.object({nodeCount:m.number().int().positive(),unsupportedFeatures:m.array(m.object({feature:Jc,count:m.number().int().positive()})).optional(),sourceNodeCount:m.number().int().positive().optional(),collapsedNodeCount:m.number().int().nonnegative().optional(),collapsedWrapperNodeCount:m.number().int().nonnegative().optional(),collapsedNeutralWrapperNodeCount:m.number().int().nonnegative().optional(),collapsedTransferredWrapperNodeCount:m.number().int().nonnegative().optional(),layoutContainerCount:m.number().int().nonnegative().optional(),removedLeafNodeCount:m.number().int().nonnegative().optional(),retainedSemanticOwnerNodeCount:m.number().int().nonnegative().optional(),truncatedNodeCount:m.number().int().nonnegative().optional(),addedLayoutNodeCount:m.number().int().nonnegative().optional(),issues:m.array(qc)}),Xc=I.omit({id:!0}).extend({temporaryId:Kc}),Zc=m.object({temporaryId:Kc,parentTemporaryId:Kc,sortKey:m.string().min(1)}),Qc=m.object({version:m.literal(1),rootTemporaryId:Kc,nodes:m.array(Xc).min(1),relationships:m.array(Zc),report:Yc.catch({nodeCount:0,issues:[]})}).transform(e=>({...e,report:{...e.report,nodeCount:e.nodes.length}})),$c=m.object({screenId:m.string().min(1),pageId:m.string().min(1)}),el={canvasId:m.uuid(),documentFormatVersion:Rc,mutationId:m.uuid(),baseVersion:m.number().int().positive(),draft:Qc};m.union([m.strictObject({...el,screenNodeId:m.string().min(1).describe(`The screen layer to convert beside itself.`)}),m.strictObject({...el,capture:$c.describe(`The stored page a new capture lands from, and the page its frame goes on.`)})]).superRefine((e,t)=>{zc(e.documentFormatVersion,`whole`,t)});const tl=m.object({canvasId:m.uuid(),mutationId:m.uuid(),previousVersion:m.number().int().positive(),version:m.number().int().positive(),rootNodeId:m.string().min(1),idMap:m.record(Kc,m.string().min(1)),insertedNodeIds:m.array(m.string().min(1)),removedNodeIds:m.array(m.string().min(1)),boxes:m.record(m.string().min(1),F),affectedBounds:F}),nl=[`queued`,`claimed`,`grant`,`navigate`,`document`,`sources`,`fonts`,`layout`,`target`,`capture`,`serialize`,`compile`,`commit`,`upload`,`complete`],rl=[`queued`,`running`,`succeeded`,`failed`,`cancelled`,`expired`],il=[`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`],al=[`ASSET_UNAVAILABLE`,`FONT_FALLBACK`,`LOCAL_FONT_FALLBACK`,`SOURCE_FALLBACK`,`SCALE_REDUCED`,`LAYOUT_FALLBACK`],ol=m.number().int().positive(),sl=m.object({x:m.number(),y:m.number(),width:m.number().positive(),height:m.number().positive()}),cl=m.discriminatedUnion(`kind`,[m.object({kind:m.literal(`content`)}),m.object({kind:m.literal(`page`),pageId:m.string().min(1)}),m.object({kind:m.literal(`node`),nodeId:m.string().min(1)}),m.object({kind:m.literal(`bounds`),bounds:sl})]),ll=m.object({kind:m.literal(`recording`),recordingId:m.uuid(),atMs:m.number().int().nonnegative()}),ul=m.object({kind:m.literal(`recording`),recordingId:m.uuid(),requestedAtMs:m.number().int().nonnegative(),settledAtMs:m.number().int().nonnegative()}),dl=m.object({recordingId:m.uuid(),atMs:m.number().int().nonnegative(),screenId:m.uuid(),screenNodeId:m.string().min(1).nullable(),pageId:m.string().min(1).optional(),viewport:m.object({width:m.number().int().positive(),height:m.number().int().positive()}),box:sl,version:m.number().int().positive(),alreadyPresent:m.boolean()}),fl=m.object({canvasId:m.uuid(),expectedVersion:m.number().int().positive().optional(),scope:m.strictObject({pageId:m.string().min(1).optional(),nodeIds:m.array(m.string().min(1))}).optional(),target:cl.default({kind:`content`}),sourceState:ll.optional(),scale:m.number().positive().default(1),maxOutputPixels:ol.optional(),format:m.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`]}),pl=m.enum(nl);m.enum(rl);const ml=m.enum(il),hl=m.enum(al),gl=m.object({code:hl,message:m.string().min(1).max(500),sourceId:m.string().min(1).nullable()}),L=m.object({reason:ml,phase:pl,message:m.string().min(1).max(500),retryable:m.boolean(),sourceId:m.string().min(1).nullable()}),_l=m.object({phase:pl,durationMs:m.number().int().min(0)}),vl=m.object({canvasId:m.uuid(),requestedVersion:m.number().int().positive(),loadedVersion:m.number().int().positive(),target:cl,sourceState:ul.optional(),snapshot:dl.optional(),bounds:sl,width:m.number().int().positive(),height:m.number().int().positive(),scale:m.number().positive(),contentType:m.literal(`image/png`),bytes:m.number().int().positive(),warnings:m.array(gl),timings:m.array(_l),expiresAt:m.iso.datetime()}),yl=m.object({id:m.uuid(),canvasId:m.uuid(),purpose:m.enum([`inspection`,`snapshot`,`thumbnail`,`export`]),phase:pl,requestedVersion:m.number().int().positive(),target:cl,sourceState:ll.optional(),scale:m.number().positive(),maxOutputPixels:ol.optional(),format:m.literal(`png`),attempt:m.number().int().min(0),lastFailure:L.optional(),createdAt:m.iso.datetime(),updatedAt:m.iso.datetime()}),bl=m.discriminatedUnion(`state`,[yl.extend({state:m.literal(`queued`),result:m.null(),failure:m.null()}),yl.extend({state:m.literal(`running`),result:m.null(),failure:m.null()}),yl.extend({state:m.literal(`succeeded`),phase:m.literal(`complete`),result:vl,failure:m.null()}),yl.extend({state:m.literal(`failed`),result:m.null(),failure:L}),yl.extend({state:m.literal(`cancelled`),result:m.null(),failure:L.extend({reason:m.literal(`CANCELLED`)})}),yl.extend({state:m.literal(`expired`),result:m.null(),failure:L.extend({reason:m.literal(`EXPIRED`)})})]);m.object({job:bl,alreadyExists:m.boolean()}),m.object({jobId:m.uuid()}).extend({waitMs:m.number().int().min(0).max(1e4).optional()}),m.object({job:bl}),m.object({jobId:m.uuid()}),m.object({job:bl});const xl=m.discriminatedUnion(`status`,[m.object({status:m.literal(`available`),version:m.number().int().positive(),format:m.literal(`enhance-scene-json`),code:m.string(),prototypes:m.array(m.object({nodeId:m.string(),prototypeId:m.uuid(),deploymentId:m.uuid(),capability:m.literal(`canvas.read`),canvasPath:m.string(),input:m.object({canvasRef:m.uuid(),view:m.literal(`source`),nodeId:m.string()}),guidance:m.string()})),guidance:m.string()}),m.object({status:m.literal(`unavailable`),guidance:m.string()})]);m.object({canvasId:m.uuid(),nodeId:m.string().min(1),expectedVersion:m.number().int().positive(),scale:m.number().positive()}),m.object({jobId:m.uuid()}),m.object({jobId:m.uuid(),download:ac,source:xl.optional()});const Sl=m.strictObject({previewJobId:m.uuid(),scope:m.strictObject({pageId:m.string().min(1).optional(),nodeIds:m.array(m.string().min(1))}),placement:m.strictObject({kind:m.enum([`below-source`,`editable-below-source`])})});m.object({canvasId:m.uuid(),recordingId:m.uuid(),atMs:m.number().int().nonnegative(),context:m.strictObject({expectedVersion:m.number().int().positive(),request:Sl}).optional()}),m.object({job:bl,alreadyExists:m.boolean()});const Cl=m.object({rootIds:m.array(m.string().min(1))}),wl=m.discriminatedUnion(`kind`,[m.object({kind:m.literal(`adjacent`)}),m.object({kind:m.literal(`insert-children`),pageId:m.string().min(1).optional(),targetNodeId:m.string().min(1)}),m.object({kind:m.literal(`replace`),targetNodeId:m.string().min(1),onlyPicture:m.literal(!0).optional()})]),Tl=m.discriminatedUnion(`kind`,[m.object({kind:m.literal(`screen`),nodeId:m.string().min(1)}),m.object({kind:m.literal(`html`),html:m.string().min(1),label:m.string().min(1),idPrefix:m.string().min(1).regex(/^[\w-]+$/u).optional()})]),El=m.object({source:Tl,destination:wl,revisionPolicy:m.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`]})}),Dl=m.discriminatedUnion(`kind`,[m.object({kind:m.literal(`screen`),nodeId:m.string().min(1)}),m.object({kind:m.literal(`html`),label:m.string().min(1)})]),Ol=m.object({id:m.uuid(),canvasId:m.uuid(),source:Dl,destination:wl,phase:pl,requestedVersion:m.number().int().positive(),attempt:m.number().int().nonnegative(),createdAt:m.iso.datetime(),updatedAt:m.iso.datetime()}),kl=m.discriminatedUnion(`state`,[Ol.extend({state:m.literal(`queued`),result:m.null(),failure:m.null()}),Ol.extend({state:m.literal(`running`),result:m.null(),failure:m.null()}),Ol.extend({state:m.literal(`succeeded`),phase:m.literal(`complete`),result:tl.extend({report:Yc}),failure:m.null()}),Ol.extend({state:m.literal(`failed`),result:m.null(),failure:L}),Ol.extend({state:m.literal(`cancelled`),result:m.null(),failure:L.extend({reason:m.literal(`CANCELLED`)})}),Ol.extend({state:m.literal(`expired`),result:m.null(),failure:L.extend({reason:m.literal(`EXPIRED`)})})]);El.and(m.object({canvasId:m.uuid(),expectedVersion:m.number().int().positive().optional(),mutationId:m.uuid().optional(),writeScope:Cl.optional(),scope:fl.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`]}),m.object({job:kl,alreadyExists:m.boolean()}),m.object({jobId:m.uuid()}),m.object({job:kl}),m.object({jobId:m.uuid()}),m.object({job:kl}),m.discriminatedUnion(`state`,[m.object({state:m.literal(`loading`),jobId:m.uuid()}),m.object({state:m.literal(`ready`),jobId:m.uuid(),loadedVersion:m.number().int().positive(),draft:Qc}),m.object({state:m.literal(`failed`),jobId:m.uuid(),message:m.string().min(1)})]);const Al=m.object({add:m.array(m.object({resourceId:m.string().min(1)}).catchall(m.unknown())),remove:m.array(m.string().min(1))}),R=m.union([m.string(),T]),z=m.union([N.shape.value,T]).nullable().optional(),jl=m.strictObject({border:z,"border-block":z,"border-block-color":z,"border-block-style":z,"border-block-width":z,"border-block-end":z,"border-block-end-color":z,"border-block-end-style":z,"border-block-end-width":z,"border-block-start":z,"border-block-start-color":z,"border-block-start-style":z,"border-block-start-width":z,"border-bottom":z,"border-bottom-color":z,"border-bottom-style":z,"border-bottom-left-radius":R.optional(),"border-bottom-right-radius":R.optional(),"border-bottom-width":R.optional(),"border-color":m.string().nullable().optional(),"border-image":z,"border-image-source":z,"border-image-slice":z,"border-image-width":z,"border-image-outset":z,"border-image-repeat":z,"border-inline":z,"border-inline-color":z,"border-inline-style":z,"border-inline-width":z,"border-inline-end":z,"border-inline-end-color":z,"border-inline-end-style":z,"border-inline-end-width":z,"border-inline-start":z,"border-inline-start-color":z,"border-inline-start-style":z,"border-inline-start-width":z,"border-left":z,"border-left-color":z,"border-left-style":z,"border-left-width":R.optional(),"border-radius":R.nullable().optional(),"border-right":z,"border-right-color":z,"border-right-style":z,"border-right-width":R.optional(),"border-style":z,"border-top":z,"border-top-color":z,"border-top-style":z,"border-top-left-radius":R.optional(),"border-top-right-radius":R.optional(),"border-top-width":R.optional(),"border-width":R.nullable().optional(),outline:z,"outline-color":z,"outline-style":z,"outline-offset":R.optional(),"outline-width":R.optional()}),Ml=m.string().regex(/^(?:\d+(?:\.\d+)?|\.\d+)px$/u),Nl=m.string().regex(/^-?(?:\d+(?:\.\d+)?|\.\d+)px$/u),Pl=N.shape.value.refine(e=>!/\burl\s*\(/iu.test(e),`invalid text colour`),Fl=m.union([M.shape.weight,m.enum([`normal`,`bold`,`bolder`,`lighter`]),m.string().regex(/^\d+(?:\.\d+)?$/u).refine(e=>M.shape.weight.safeParse(Number(e)).success)]),B={color:Pl,"font-family":N.shape.value,"font-size":m.union([E,Ml]),"font-weight":Fl,"font-style":m.enum([`normal`,`italic`,`oblique`]),"letter-spacing":T,"line-height":m.union([m.number().positive(),m.string().regex(/^(?:\d+(?:\.\d+)?(?:px|em|rem|%)?|normal)$/u)]),"text-align":m.enum([`left`,`center`,`right`]),"white-space":m.enum([`normal`,`nowrap`,`pre`,`pre-wrap`,`pre-line`,`break-spaces`])},Il=m.strictObject({color:B.color.optional(),"font-family":B[`font-family`].optional(),"font-size":B[`font-size`].optional(),"font-weight":B[`font-weight`].optional(),"font-style":B[`font-style`].optional(),"letter-spacing":B[`letter-spacing`].optional(),"line-height":B[`line-height`].optional(),"text-align":B[`text-align`].optional(),"white-space":B[`white-space`].optional()}),Ll=m.enum([`start`,`end`,`left`,`right`,`center`,`justify`,`justify-all`,`match-parent`,`-webkit-left`,`-webkit-right`,`-webkit-center`]),Rl=m.union([B[`font-style`],m.string().regex(/^oblique -?(?:\d+(?:\.\d+)?|\.\d+)deg$/u)]),V=m.union([N.shape.value,T]).nullable().optional(),zl=m.strictObject({"text-decoration":V,"text-decoration-line":V,"text-decoration-style":V,"text-decoration-color":V,"text-decoration-thickness":V,"text-underline-offset":V,"text-decoration-skip-ink":V,color:B.color.nullable().optional(),"font-family":B[`font-family`].nullable().optional(),"font-size":B[`font-size`].nullable().optional(),"font-weight":B[`font-weight`].nullable().optional(),"font-optical-sizing":m.enum([`auto`,`none`]).nullable().optional(),"font-variation-settings":N.shape.value.nullable().optional(),"font-feature-settings":N.shape.value.nullable().optional(),"text-wrap":N.shape.value.nullable().optional(),"text-wrap-mode":N.shape.value.nullable().optional(),"text-wrap-style":N.shape.value.nullable().optional(),"text-box":N.shape.value.nullable().optional(),"text-box-trim":N.shape.value.nullable().optional(),"text-box-edge":N.shape.value.nullable().optional(),"font-style":Rl.nullable().optional(),"font-stretch":m.union([m.enum([`normal`,`ultra-condensed`,`extra-condensed`,`condensed`,`semi-condensed`,`semi-expanded`,`expanded`,`extra-expanded`,`ultra-expanded`]),m.string().regex(/^\d+(?:\.\d+)?%$/u)]).nullable().optional(),"letter-spacing":m.union([T,Nl,m.literal(`normal`)]).nullable().optional(),"line-height":B[`line-height`].nullable().optional(),"text-align":Ll.nullable().optional(),"text-indent":m.union([T,Nl]).nullable().optional(),"white-space":B[`white-space`].nullable().optional(),"word-spacing":m.union([T,Nl,m.literal(`normal`)]).nullable().optional(),direction:V,"unicode-bidi":V,"hanging-punctuation":V,"text-transform":V,"-webkit-text-stroke":V,"-webkit-text-stroke-width":V,"-webkit-text-stroke-color":V,"paint-order":V}),Bl=N.shape.value,H=m.union([m.string(),T]),U=m.union([N.shape.value,T]).nullable().optional(),Vl=zl.extend(jl.shape).extend({"align-content":U,"align-items":U,"align-self":U,"aspect-ratio":U,"block-size":U,bottom:U,"box-sizing":U,display:U,flex:U,"flex-basis":U,"flex-direction":U,"flex-grow":U,"flex-shrink":U,"flex-wrap":U,grid:U,"grid-template":U,"grid-template-columns":U,"grid-template-rows":U,"grid-template-areas":U,"grid-auto-columns":U,"grid-auto-rows":U,"grid-auto-flow":U,"grid-row":U,"grid-column":U,"grid-area":U,"grid-row-start":U,"grid-row-end":U,"grid-column-start":U,"grid-column-end":U,"justify-items":U,"justify-self":U,"place-items":U,"place-self":U,"place-content":U,height:U,"inline-size":U,inset:U,"inset-block":U,"inset-block-end":U,"inset-block-start":U,"inset-inline":U,"inset-inline-end":U,"inset-inline-start":U,isolation:U,"justify-content":U,left:U,margin:U,"margin-block":U,"margin-block-end":U,"margin-block-start":U,"margin-inline":U,"margin-inline-end":U,"margin-inline-start":U,"max-block-size":U,"max-height":U,"max-inline-size":U,"max-width":U,"min-block-size":U,"min-height":U,"min-inline-size":U,"min-width":U,order:U,padding:U,"padding-block":U,"padding-block-end":U,"padding-block-start":U,"padding-inline":U,"padding-inline-end":U,"padding-inline-start":U,position:U,right:U,top:U,width:U,background:m.string().nullable().optional(),"background-color":m.string().nullable().optional(),"background-image":U,"background-size":U,"background-position":U,"background-repeat":U,"background-origin":U,"background-blend-mode":U,"box-shadow":m.string().nullable().optional(),"column-gap":H.optional(),gap:H.optional(),"margin-bottom":H.optional(),"margin-left":H.optional(),"margin-right":H.optional(),"margin-top":H.optional(),opacity:m.union([m.string(),m.number()]).nullable().optional(),overflow:Bl.nullable().optional(),"overflow-x":Bl.nullable().optional(),"overflow-y":Bl.nullable().optional(),"padding-bottom":H.optional(),"padding-left":H.optional(),"padding-right":H.optional(),"padding-top":H.optional(),"row-gap":H.optional(),"stroke-width":H.optional()}),Hl=m.union([Vl.keyof(),N.shape.property.refine(e=>e.startsWith(`--`))]),Ul=Vl.catchall(U).refine(e=>Object.keys(e).every(e=>Hl.safeParse(e).success)),Wl=m.record(m.string(),m.unknown()),Gl=m.number().int().positive(),Kl=m.discriminatedUnion(`kind`,[m.object({kind:m.literal(`retain`),count:Gl,attributes:Wl.optional(),shouldPreserveParagraph:m.boolean().optional()}),m.object({kind:m.literal(`delete`),count:Gl}),m.object({kind:m.literal(`insert`),text:m.string().min(1).refine(e=>e.isWellFormed()),attributes:Wl.optional(),shouldPreserveParagraph:m.boolean().optional()})]),ql=m.object({baseLength:m.number().int().nonnegative(),representation:m.enum([`plain`,`rich`,`links`]).optional(),steps:m.array(Kl),endAttributes:Wl.optional(),properties:Wl.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`})}),Jl=m.object({actionId:m.string().min(1),baseVersion:m.number().int().nonnegative(),isActive:m.boolean()}),Yl=m.object({baseVersion:m.number().int().nonnegative(),after:m.array(m.string().min(1)),change:ql}),Xl=m.object({actionId:m.string().min(1),baseVersion:m.number().int().nonnegative(),originalChange:ql,inverse:ql,history:Jl.optional(),source:Yl.optional()}),Zl=m.object({op:m.literal(`editText`),nodeId:m.string().min(1),change:ql,actionId:m.string().min(1).optional(),revision:Xl.optional(),history:Jl.optional(),source:Yl.optional()}),Ql=2e3,$l=m.object({title:m.string().trim().min(1).max(200)}).strict(),eu=m.array(rc.shape.id),tu=m.object({canvasId:m.uuid()}),nu=m.object({definition:rc.refine(e=>e.sourceStyleId===void 0),revision:m.number().int().positive(),fontFaces:m.array(m.record(m.string(),m.unknown()))}),ru=m.object({styles:m.array(nu).refine(e=>new Set(e.map(e=>e.definition.id)).size===e.length)});tu.extend({revision:m.number().int().positive(),documentVersion:m.number().int().positive(),description:m.string().max(Ql),publishedAt:m.iso.datetime(),...ru.shape}),tu.extend({mutationId:m.uuid(),expectedRevision:m.number().int().nonnegative(),documentVersion:m.number().int().positive(),publish:eu,remove:eu,description:m.string().trim().max(Ql)}).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.`});const iu=m.object({canvasId:m.uuid(),title:m.string().max(200)});m.object({search:m.string().trim().max(200).default(``),cursor:iu.nullable().default(null),limit:m.number().int().min(1).max(50).default(20)});const au=m.object({canvasId:m.uuid(),title:m.string(),organisationId:m.uuid().nullable(),revision:m.number().int().positive(),styleCount:m.number().int().positive(),publishedAt:m.iso.datetime()});m.object({items:m.array(au).max(50),nextCursor:iu.nullable()});const ou=m.object({parentId:m.string().min(1),sortKey:m.string().min(1)}),su=m.object({op:m.literal(`insertConvertedSubtree`),destination:wl,sourceNodeId:m.string().min(1).optional(),rootNodeId:m.string().min(1),nodes:m.record(m.string().min(1),I),relationships:m.record(m.string().min(1),ou)}),W=m.string().min(1),cu=F.extend({width:m.number().positive(),height:m.number().positive()}),lu=m.object({parentId:W,afterId:W.optional()}),uu=ou,du=m.object({op:m.literal(`setStyles`),nodeId:W,styles:Ul,clear:m.array(Hl).min(1).refine(e=>new Set(e).size===e.length).optional()}).refine(e=>(e.clear??[]).every(t=>!Object.hasOwn(e.styles,t))),fu=m.discriminatedUnion(`op`,[su,m.object({op:m.literal(`insertNode`),node:I,parentage:uu,prototypeSource:m.object({canvasId:m.uuid(),nodeId:W,documentVersion:m.number().int().nonnegative(),versionEntryId:m.uuid().optional()}).optional(),screenSource:m.object({canvasId:m.uuid()}).optional(),pageCopyBase:m.string().refine(e=>e.trim()!==``).optional()}),lu.extend({op:m.literal(`insertText`),nodeId:W,label:m.string().default(`Text`),text:m.string(),box:cu,styles:Il.default({})}),lu.extend({op:m.literal(`insertPrototype`),nodeId:W,label:m.string().default(`Prototype`),prototypeId:m.uuid(),deploymentId:m.uuid(),box:cu,canvasPageId:W.optional()}),m.object({op:m.literal(`setPrototypeDeployment`),nodeId:W,prototypeId:m.uuid(),deploymentId:m.uuid(),expected:m.object({prototypeId:m.uuid(),deploymentId:m.uuid()}).optional()}),Zl,m.object({op:m.literal(`setText`),nodeId:W,text:m.string()}),m.object({op:m.literal(`setBox`),nodeId:W,box:m.union([F,m.literal(`default`)])}),m.object({op:m.literal(`setLabel`),nodeId:W,label:m.string().trim().min(1),labelOrigin:Hc.nullable().optional()}),m.object({op:m.literal(`setContainerKind`),nodeId:W,component:m.enum([`frame`,`group`])}),m.object({op:m.literal(`setVisibility`),nodeId:W,visible:m.boolean().nullable()}),m.object({op:m.literal(`setLocked`),nodeId:W,locked:m.boolean().nullable()}),m.object({op:m.literal(`setConstraints`),nodeId:W,constraints:Vc.nullable()}),du,m.object({op:m.literal(`patchExportSettings`),nodeId:W,exportSettings:wc}),m.object({op:m.literal(`setAppearance`),nodeId:W,appearance:Hs}),m.object({op:m.literal(`setLayout`),nodeId:W,layout:m.union([Ds,m.literal(`default`)]),fields:m.array(Ds.keyof()).optional()}),m.object({op:m.literal(`patchTypography`),nodeId:W,typography:Js}),m.object({op:m.literal(`setTypography`),nodeId:W,typography:m.union([Ks,m.literal(`default`)])}),m.object({op:m.literal(`patchAdditionalStyles`),nodeId:W,additionalStyles:ec}),m.object({op:m.literal(`setAdditionalStyles`),nodeId:W,additionalStyles:m.union([Qs,m.literal(`default`)])}),ps,m.object({op:m.literal(`setTextStyleLibrary`),nodeId:m.literal(`root`),sourceCanvasId:m.uuid(),library:$l.nullable()}),m.object({op:m.literal(`patchFontLibrary`),nodeId:m.literal(`root`),fonts:Al}),m.object({op:m.literal(`setTextStyle`),nodeId:m.literal(`root`),styleId:rc.shape.id,textStyle:rc.nullable(),changedTextNodeIds:m.array(W).optional()}).refine(e=>e.textStyle===null||e.textStyle.id===e.styleId,`text style identity must match`),m.object({op:m.literal(`setGeometry`),nodeId:W,geometry:m.union([Pc,m.literal(`default`)])}),m.object({op:m.literal(`setProps`),nodeId:W,props:m.union([m.record(m.string(),m.unknown()),m.literal(`default`)])}),m.object({op:m.literal(`setParentage`),nodeId:W,parentage:uu}),lu.extend({op:m.literal(`move`),nodeId:W}),m.object({op:m.literal(`remove`),nodeId:W,removedText:m.record(W,I.pick({props:!0})).optional()})]),pu=fu.options.map(e=>e.shape.op.value),mu=m.preprocess((e,t)=>typeof e!=`object`||!e||Reflect.get(e,`op`)!==`setCompositing`?e:(t.issues.push({code:`custom`,message:Fc,input:e}),m.NEVER),fu);tl.extend({operation:su,next:m.array(m.string().min(1))});const hu=m.record(m.string(),m.unknown());m.object({canvasId:m.uuid(),afterVersion:m.number().int().positive().optional()});const gu=m.object({screenId:m.uuid(),clientToken:m.uuid(),route:m.string().nullable(),title:m.string().nullable(),viewport:m.object({width:m.number().int().positive(),height:m.number().int().positive()}),atMs:m.number().int().min(0).nullable(),sourceRecordingId:m.uuid().nullable(),assetBundle:m.object({assetBundleId:m.uuid(),sourceUrl:m.string(),assets:m.array(m.object({url:m.string(),contentType:m.string(),path:m.string().startsWith(`/v1/recording-assets/`)})),missingAssetCount:m.number().int().min(0)}).nullable(),download:ac.nullable()}),_u=m.object({mutationId:m.uuid(),previousVersion:m.number().int().positive(),version:m.number().int().positive(),operations:m.array(mu)});m.object({mutations:m.array(_u).optional(),version:m.number().int().min(1),restoreFenceVersion:m.number().int().positive().optional(),document:hu.optional(),screens:m.array(gu)}).extend({document:hu}),m.object({canvasId:m.uuid(),baseVersion:m.number().int().min(1),document:hu.refine(e=>Uc.safeParse(e).success,`A save requires a valid current-format canvas document.`),screenIds:m.array(m.uuid())}),m.discriminatedUnion(`outcome`,[m.object({outcome:m.literal(`saved`),version:m.number().int().min(1)}),m.object({outcome:m.literal(`conflict`),version:m.number().int().min(1),document:hu})]);const vu=m.object({start:m.number().int().nonnegative(),end:m.number().int().positive(),href:m.url().refine(e=>[`http:`,`https:`].includes(new URL(e).protocol))});m.object({text:m.string(),links:m.array(vu).optional()});const yu=m.enum([`position`,`layout`,`clip`,`cornerRadius`,`blending`,`typography`,`nativeControl`,`textDecoration`,`fill`,`outline`,`textStroke`,`border`,`outerShadow`,`innerShadow`,`filters`,`additionalStyles`,`vector`,`export`,`source`]),bu=m.object({id:m.string().min(1),label:m.string().max(500),kind:m.string().min(1).max(100),parentId:m.string().min(1).nullable(),childCount:m.number().int().min(0),box:F.nullable(),propertySections:m.array(yu)});m.object({canvasId:m.uuid()}),m.object({canvasId:m.uuid(),openUrl:m.url(),title:m.string().min(1),version:m.number().int().positive(),nodeCount:m.number().int().min(0),rootChildCount:m.number().int().min(0),bounds:F.nullable(),kinds:m.record(m.string(),m.number().int().min(0)),next:m.array(m.string().min(1))}),m.object({canvasId:m.uuid()}),m.object({canvasId:m.uuid(),version:m.number().int().positive(),nodes:m.array(bu)}),m.object({canvasId:m.uuid(),nodeId:m.string().min(1)}),m.object({canvasId:m.uuid(),version:m.number().int().positive(),node:bu.extend({styles:m.record(m.string(),m.union([m.string(),m.number()])),layout:Ds.optional(),appearance:zs.optional(),geometry:Pc.optional(),typography:Ks.optional(),additionalStyles:Qs.optional(),props:m.record(m.string(),m.unknown()),children:m.array(m.string().min(1))}),next:m.array(m.string().min(1))});const xu={insertConvertedSubtree:`whole`,insertNode:`whole`,insertText:`names`,insertPrototype:`names`,setPrototypeDeployment:`names`,editText:`names`,setText:`names`,setBox:`names`,setLabel:`names`,setContainerKind:`names`,setVisibility:`names`,setLocked:`names`,setConstraints:`names`,setStyles:`names`,patchExportSettings:`names`,setAppearance:`names`,setLayout:`whole`,patchTypography:`names`,setTypography:`whole`,patchAdditionalStyles:`names`,setAdditionalStyles:`whole`,setArtworkColor:`whole`,setTextStyleLibrary:`whole`,patchFontLibrary:`names`,setTextStyle:`whole`,setGeometry:`whole`,setProps:`whole`,setParentage:`names`,move:`names`,remove:`names`},Su=I.shape.id,Cu=F.extend({width:m.number().positive(),height:m.number().positive()}),wu=m.record(Su,Su),Tu=m.strictObject({fingerprint:m.string().regex(/^[a-f0-9]{64}$/u),revisionPolicy:m.enum([`strict`,`rebase`]),copiedNodeIds:wu.optional()});m.object({canvasId:m.uuid(),mutationId:m.uuid(),documentFormatVersion:Rc,baseVersion:m.number().int().positive(),operations:m.array(mu).min(1),requestContext:Tu.optional(),writeScope:Cl.optional()}).superRefine((e,t)=>{zc(e.documentFormatVersion,e.operations.every(e=>xu[e.op]===`names`)?`names`:`whole`,t)});const Eu=m.object({canvasId:m.uuid(),mutationId:m.uuid(),previousVersion:m.number().int().positive(),version:m.number().int().positive(),operations:m.array(mu),insertedNodeIds:m.array(Su),changedNodeIds:m.array(Su),removedNodeIds:m.array(Su),boxes:m.record(Su,F),affectedBounds:Cu.nullable(),copiedNodeIds:wu.optional(),next:m.array(m.string().min(1))});m.strictObject({canvasId:m.uuid(),mutationId:m.uuid(),fingerprint:Tu.shape.fingerprint}),m.discriminatedUnion(`state`,[m.strictObject({state:m.literal(`not-found`)}),m.strictObject({state:m.literal(`committed`),result:Eu})]);const Du={nodes:1e3,fields:20,id:200,label:500,value:1e3},Ou=m.object({available:m.boolean(),omittedNodes:m.number().int().nonnegative(),nodes:m.array(m.object({nodeId:m.string().min(1),label:m.string().max(Du.label),kind:m.enum([`inserted`,`removed`,`changed`,`unchanged`,`unavailable`]),omittedFields:m.number().int().nonnegative(),fields:m.array(m.object({label:m.string().max(Du.id),before:m.string().max(Du.value).nullable(),after:m.string().max(Du.value).nullable(),truncated:m.boolean()})).max(Du.fields)})).max(Du.nodes)}),ku=[`position`,`layout`,`cornerRadius`,`blending`,`fill`,`outline`,`border`,`outerShadow`,`innerShadow`,`filters`,`additionalStyles`,`export`],Au=[`position`,`layout`,`clip`,...ku.filter(e=>e!==`position`&&e!==`layout`)],ju=[...ku,`vector`];Object.fromEntries([{objectKind:`prototype`,label:`Prototype`,category:`import`,capabilities:{canSelect:!0,canContainChildren:!1,canEditProperties:!0,commentAnchor:`node`},capture:{preservesHtmlCssAssets:!0},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`reflow`,preservesAspect:!1,canLockAspectRatio:!0},propertySections:[`position`,`layout`,`cornerRadius`,`blending`,`outline`,`outerShadow`,`innerShadow`,`filters`]},{objectKind:`root`,label:`Canvas`,category:`container`,capabilities:{canSelect:!1,canContainChildren:!0,canEditProperties:!1},selectionBehavior:{hitTarget:`children`},propertySections:[]},{objectKind:`page`,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:Au},{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`,`filters`,`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:ku},{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:ku},{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:ju},{objectKind:`boolean`,label:`Boolean`,category:`container`,capabilities:{canSelect:!0,canContainChildren:!0,canEditProperties:!0,commentAnchor:`node`},capture:{preservesVectorData:!0},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`scale`,preservesAspect:!1,canLockAspectRatio:!0},propertySections:ju},{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]));const G=I.shape.id,Mu=m.array(G).min(1),Nu=m.strictObject({x:m.number(),y:m.number()}),Pu=m.strictObject({width:m.number().positive().optional(),height:m.number().positive().optional()}).refine(e=>e.width!==void 0||e.height!==void 0,{message:`Specify width, height, or both.`}),Fu=m.discriminatedUnion(`kind`,[m.strictObject({kind:m.literal(`position`),nodeId:G,parentPosition:Nu}),m.strictObject({kind:m.literal(`resize`),nodeId:G,size:Pu}),m.strictObject({kind:m.literal(`relative-position`),nodeId:G,referenceNodeId:G,side:m.enum([`above`,`below`,`left`,`right`]),gap:m.number().nonnegative(),align:m.enum([`start`,`center`,`end`])}),m.strictObject({kind:m.literal(`move`),nodeIds:Mu,targetNodeId:G,position:m.enum([`before`,`inside`,`after`])}),m.strictObject({kind:m.literal(`group`),nodeIds:Mu,label:m.string().min(1).optional()}),m.strictObject({kind:m.literal(`ungroup`),nodeIds:Mu}),m.strictObject({kind:m.literal(`label`),nodeId:G,label:m.string().min(1)}),m.strictObject({kind:m.literal(`visibility`),nodeId:G,visible:m.boolean()}),m.strictObject({kind:m.literal(`lock`),nodeId:G,locked:m.boolean()})]),Iu=m.strictObject({kind:m.literal(`arrange`),changes:m.array(Fu).min(1)}),Lu=m.strictObject({kind:m.literal(`duplicate`),nodeIds:Mu,destination:m.discriminatedUnion(`kind`,[m.strictObject({kind:m.literal(`native`)}),m.strictObject({kind:m.literal(`inside`),parentId:G})])}),Ru=m.discriminatedUnion(`kind`,[m.strictObject({kind:m.literal(`compile-screens`),sources:m.array(m.strictObject({screenId:m.uuid(),captureId:m.uuid(),label:m.string().min(1)})).min(1),landing:m.literal(`editable-frame`).optional().describe(`Lands the page as an ordinary editable frame. Without it, the layers belong to a capture run.`)}),Iu,Lu,m.strictObject({kind:m.literal(`compile-html`),contextOperations:m.array(mu).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:m.array(m.strictObject({id:G,parentNodeId:G,html:m.string().min(1)})).min(1).refine(e=>new Set(e.map(e=>e.id)).size===e.length,`HTML fragment ids must be unique.`)})]),zu=m.strictObject({pageId:G.optional(),nodeIds:m.array(G)}),Bu=m.strictObject({request:Ru,scope:zu}),Vu=m.strictObject({operations:m.array(mu),idMap:m.record(G,G),rootNodeIds:m.array(G)}),Hu=Vu.extend({compilations:m.array(m.strictObject({id:G,draft:Qc,warnings:m.array(gl).optional()})).optional()});m.discriminatedUnion(`state`,[m.object({state:m.literal(`loading`),jobId:m.uuid()}),m.object({state:m.literal(`ready`),jobId:m.uuid(),loadedVersion:m.number().int().positive(),plan:Hu}),m.object({state:m.literal(`failed`),jobId:m.uuid(),message:m.string().min(1),reason:m.enum([`SOURCE_FAILED`,`PREPARATION_FAILED`]).optional(),retryable:m.boolean().optional()})]);const Uu=m.object({id:m.uuid(),canvasId:m.uuid(),requestedVersion:m.number().int().positive(),request:Ru,scope:zu,phase:pl,attempt:m.number().int().nonnegative(),createdAt:m.iso.datetime(),updatedAt:m.iso.datetime()}),Wu=m.discriminatedUnion(`state`,[Uu.extend({state:m.enum([`queued`,`running`]),result:m.null(),failure:m.null()}),Uu.extend({state:m.literal(`succeeded`),phase:m.literal(`complete`),result:Vu.extend({loadedVersion:m.number().int().positive()}),failure:m.null()}),Uu.extend({state:m.enum([`failed`,`cancelled`,`expired`]),result:m.null(),failure:L})]);m.strictObject({canvasId:m.uuid(),expectedVersion:m.number().int().positive(),request:Ru,scope:zu}),m.object({job:Wu,alreadyExists:m.boolean()}),m.object({jobId:m.uuid()}),m.object({job:Wu});const Gu=m.string().trim().min(1).max(80).regex(/^[\w .+/-]+$/u),Ku=m.strictObject({path:m.enum([`local_mcp`,`hosted_mcp`,`direct_cli`]),name:Gu.optional(),version:Gu.optional()});Ku.pick({path:!0}).strip();const qu=m.strictObject({agent_client:m.enum([`claude_code`,`codex`,`cursor`,`unknown`]),connection_path:Ku.shape.path,identity_source:m.enum([`mcp_client_info`,`documented_cli_fallback`,`unavailable`]),auth_method:m.enum([`personal_agent_token`,`mcp_oauth`]),agent_client_version:Gu.optional()}),Ju=m.enum([`green`,`blue`,`indigo`,`amber`,`lime`,`teal`,`cyan`,`sky`,`violet`,`purple`,`fuchsia`,`pink`]),Yu=m.string().regex(/^[0-9a-f]{32}$/),Xu=m.object({viewKey:Yu.optional(),admissionOrder:m.number().int().nonnegative().optional(),followColour:Ju.optional()}),Zu=m.object({pageId:m.string().min(1).nullable().optional(),followingViewKey:Yu.nullable().optional()}),Qu=`enhance3.canvas.v1`,$u=16384,ed=m.enum([`blue`,`violet`,`green`,`amber`,`magenta`,`teal`,`red`,`orange`]),td=m.object({kind:m.literal(`person`),connectionId:m.uuid(),personId:m.uuid(),displayName:m.string().min(1).max(100),initials:m.string().min(1).max(8),avatarUrl:m.string().max(zo).nullable().optional(),colour:ed}),nd=td.extend(Xu.shape),rd=m.object({kind:m.literal(`guest`),connectionId:m.uuid(),displayName:m.string().min(1).max(100),initials:m.string().min(1).max(8),colour:ed,...Xu.shape}),id=m.discriminatedUnion(`kind`,[nd,rd]),ad=m.object({kind:m.literal(`agent`),personId:m.uuid(),displayName:m.string().min(1).max(100),initials:m.string().min(1).max(8),tokenLabel:m.string().min(1).max(100),agentAttribution:qu.optional(),colour:ed}),od=m.discriminatedUnion(`kind`,[td.omit({connectionId:!0,avatarUrl:!0}),ad]),sd=m.object({x:m.number(),y:m.number()}),cd=F.extend({width:m.number().positive(),height:m.number().positive()}),ld=m.object({count:m.number().int().positive(),bounds:cd.nullable()}),ud=m.object({kind:m.enum([`drag`,`resize`]),baseVersion:m.number().int().positive(),boxes:m.record(m.string().min(1),cd).refine(e=>Object.keys(e).length<=100&&new TextEncoder().encode(JSON.stringify(e)).byteLength<=16384),summary:ld.optional()}),dd=m.object({cursor:sd.nullable().optional(),input:m.enum([`pointer`,`touch`,`keyboard`]).optional(),focused:m.boolean().optional(),selectedNodeIds:m.array(m.string().min(1)).max(100).refine(e=>new TextEncoder().encode(JSON.stringify(e)).byteLength<=$u).optional(),selectionSummary:ld.nullable().optional(),visibleWorldBox:cd.optional(),gesture:ud.nullable().optional(),cursorChat:m.string().max(140).nullable().optional(),...Zu.shape}).refine(e=>Object.keys(e).length>0,`presence patch cannot be empty`),fd=m.object({actor:id,seq:m.number().int().nonnegative(),cursor:sd.nullable(),input:m.enum([`pointer`,`touch`,`keyboard`]),focused:m.boolean(),selectedNodeIds:m.array(m.string().min(1)).max(100).refine(e=>new TextEncoder().encode(JSON.stringify(e)).byteLength<=$u),selectionSummary:ld.nullable().optional(),visibleWorldBox:cd.nullable(),gesture:ud.nullable(),cursorChat:m.string().max(140).nullable().default(null),...Zu.shape,followOrder:m.number().int().nonnegative().optional(),expiresAt:m.iso.datetime()}),pd=m.enum([`reading`,`writing`,`creating`,`deleting`,`rendering`]),md=m.object({activityId:m.uuid(),canvasId:m.uuid(),actor:ad,phase:pd,nodeIds:m.array(m.string().min(1)).max(100),bounds:cd.nullable(),expiresAt:m.iso.datetime()}),hd=m.object({canvasId:m.uuid(),phase:pd,nodeIds:m.array(m.string().min(1)).max(100).default([]),bounds:cd.nullable().default(null)});m.object({activityId:m.uuid(),expiresAt:m.iso.datetime(),renewAfterMs:m.number().int().positive()}),hd.extend({activityId:m.uuid()}),m.object({canvasId:m.uuid(),activityId:m.uuid()}),m.object({ended:m.literal(!0)});const K={v:m.literal(1),seq:m.number().int().nonnegative()};m.discriminatedUnion(`type`,[m.object({...K,type:m.literal(`access.changed`),payload:m.object({})}),m.object({...K,type:m.literal(`comments.changed`),payload:m.object({threadId:m.uuid()})}),m.object({...K,type:m.literal(`resources.changed`),payload:m.object({})}),m.object({...K,type:m.literal(`room.snapshot`),payload:m.object({connectionId:m.uuid(),viewKey:Xu.shape.viewKey,peers:m.array(fd),activities:m.array(md),documentVersion:m.number().int().positive()})}),m.object({...K,type:m.literal(`presence.patch`),payload:fd}),m.object({...K,type:m.literal(`presence.left`),payload:m.object({connectionId:m.uuid()})}),m.object({...K,type:m.literal(`agent.activity`),payload:m.object({activityId:m.uuid(),activity:md.nullable()})}),m.object({...K,type:m.literal(`document.committed`),payload:m.object({mutationId:m.uuid(),actor:od,previousVersion:m.number().int().positive(),version:m.number().int().positive(),operations:m.array(mu).min(1)})}),m.object({...K,type:m.literal(`sync.required`),payload:m.object({version:m.number().int().positive(),reason:m.enum([`gap`,`relay`,`replace`,`history-restored`])})}),m.object({...K,type:m.literal(`room.ping`),payload:m.object({pingId:m.uuid(),sentAt:m.iso.datetime()})}),m.object({...K,type:m.literal(`room.error`),payload:m.object({code:m.enum([`auth`,`permission`,`protocol`,`payload`,`rate`,`unavailable`]),message:m.string().min(1).max(200)})})]),m.discriminatedUnion(`type`,[m.object({v:m.literal(1),type:m.literal(`presence.patch`),seq:m.number().int().nonnegative(),payload:dd}),m.object({v:m.literal(1),type:m.literal(`selection.chunk`),seq:m.number().int().nonnegative(),payload:m.object({transferId:m.uuid(),offset:m.number().int().nonnegative(),total:m.number().int().positive(),nodeIds:m.array(m.string().min(1)).min(1).max(1e3)})}),m.object({v:m.literal(1),type:m.literal(`selection.unavailable`),seq:m.number().int().nonnegative(),payload:m.object({count:m.number().int().positive()})}),m.object({v:m.literal(1),type:m.literal(`room.pong`),seq:m.number().int().nonnegative(),payload:m.object({pingId:m.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),m.object({canvasId:m.uuid(),protocols:m.array(m.literal(Qu)).min(1).max(1),viewId:m.uuid().optional()}),m.object({endpoint:m.url(),ticket:m.string().min(1).max(4096),protocol:m.literal(Qu),expiresAt:m.iso.datetime()}),m.uuid();const gd=I.shape.id;m.array(gd),m.object({jobId:m.uuid()});const _d=m.object({jobId:m.uuid(),canvasId:m.uuid(),requestedVersion:m.number().int().positive(),target:cl,sourceState:ll.optional()});m.discriminatedUnion(`purpose`,[_d.extend({purpose:m.literal(`preparation`),preparation:Bu,screens:m.array(gu).optional(),attempts:m.strictObject({counted:m.number().int().nonnegative(),limit:m.number().int().positive()}).optional(),deadlineAt:m.iso.datetime().optional(),sourceState:m.undefined().optional(),scale:m.literal(1),format:m.literal(`json`)}),_d.extend({purpose:m.enum([`inspection`,`snapshot`,`thumbnail`,`export`]),scale:m.number().positive(),maxOutputPixels:ol.optional(),format:m.literal(`png`)}),_d.extend({purpose:m.literal(`conversion`),target:m.object({kind:m.literal(`node`),nodeId:m.string().min(1)}),sourceState:m.undefined().optional(),conversion:El,scale:m.literal(1),format:m.literal(`json`)})]),m.object({jobId:m.uuid()}),m.object({jobId:m.uuid()});const vd=m.object({jobId:m.uuid(),canvasId:m.uuid(),requestedVersion:m.number().int().positive(),grantToken:m.string().startsWith(`rgr_`).min(40).max(100),grantCookieName:m.string().min(1).max(100),renderUrl:m.url(),deadlineAt:m.iso.datetime().optional(),releaseIdentity:m.string().min(1).max(100)});m.discriminatedUnion(`purpose`,[vd.extend({purpose:m.literal(`preparation`),target:cl,preparation:Bu,sourceState:m.undefined().optional(),scale:m.literal(1)}),vd.extend({purpose:m.enum([`inspection`,`snapshot`,`thumbnail`,`export`]),target:cl,sourceState:ll.optional(),scale:m.number().positive(),maxOutputPixels:ol.optional(),outputKey:m.string().min(1).max(500)}),vd.extend({purpose:m.literal(`conversion`),target:m.object({kind:m.literal(`node`),nodeId:m.string().min(1).max(200)}),sourceState:m.undefined().optional(),conversion:El,scale:m.literal(1)})]),m.object({jobId:m.uuid(),loadedVersion:m.number().int().positive(),bounds:sl,width:m.number().int().positive(),height:m.number().int().positive(),scale:m.number().positive(),bytes:m.number().int().positive(),storageKey:m.string().min(1).max(500),warnings:m.array(gl),timings:m.array(_l),sourceState:ul.optional(),snapshot:m.object({artifactBytes:m.number().int().positive(),artifactStorageKey:m.string().min(1).max(500),route:m.string().optional(),title:m.string().optional(),viewport:m.object({width:m.number().int().positive(),height:m.number().int().positive()})}).optional()}),m.object({accepted:m.literal(!0)}),m.object({jobId:m.uuid(),loadedVersion:m.number().int().positive(),draft:Qc}),m.object({accepted:m.literal(!0)}),m.object({recordingId:m.uuid(),requestedAtMs:m.number().int().nonnegative(),settledAtMs:m.number().int().nonnegative(),artifact:m.string().min(1),route:m.string().optional(),title:m.string().optional(),viewport:m.object({width:m.number().int().positive(),height:m.number().int().positive()})}),m.object({jobId:m.uuid(),failure:L}),m.object({accepted:m.literal(!0),willRetry:m.boolean()}),m.object({workerId:m.string().regex(/^[\w.-]+$/u).min(1).max(100),releaseIdentity:m.string().min(1).max(100),timestamp:m.coerce.number().int().nonnegative(),nonce:m.uuid(),mac:m.base64().min(32).max(200)});const yd=m.object({total:m.number().int().nonnegative(),loading:m.number().int().nonnegative(),unavailable:m.number().int().nonnegative()}),bd=m.object({jobId:m.uuid(),canvasId:m.uuid().nullable(),requestedVersion:m.number().int().positive().nullable(),loadedVersion:m.number().int().positive().nullable(),phase:pl.exclude([`queued`,`claimed`,`capture`,`upload`,`complete`]),sources:yd,warnings:m.array(gl),timings:m.array(_l),sourceState:ul.optional()}),xd=m.object({selector:m.string().min(1).max(500),contentSelector:m.string().min(1).max(500).optional(),expectsPaint:m.boolean().optional(),bounds:sl,width:m.number().int().positive(),height:m.number().int().positive(),scale:m.number().positive()});m.discriminatedUnion(`state`,[bd.extend({state:m.literal(`loading`),capture:m.null(),failure:m.null()}),bd.extend({state:m.literal(`ready`),phase:m.literal(`target`),canvasId:m.uuid(),requestedVersion:m.number().int().positive(),loadedVersion:m.number().int().positive(),capture:xd,failure:m.null()}),bd.extend({state:m.literal(`failed`),failure:m.object({reason:ml,message:m.string().min(1).max(500),sourceId:m.string().min(1).max(200).nullable(),overtaken:m.boolean().optional()}),capture:m.null()})]),m.object({jobId:m.uuid(),loadedVersion:m.number().int().positive(),plan:Hu});const Sd=m.string().min(1);m.object({canvasId:m.uuid()}),m.object({canvasId:m.uuid(),status:m.enum([`selected`,`none`,`offline`,`stale`,`updating`,`unsupported`]),documentVersion:m.number().int().positive(),selectionRevision:m.number().int().positive().nullable(),selectionChangedAt:m.iso.datetime().nullable(),selectedNodeIds:m.array(Sd),missingNodeIds:m.array(Sd),nodes:m.array(bu),contextRootId:Sd.nullable(),visibleWorldBox:sl.nullable(),next:m.array(m.string().min(1)).max(12)});const Cd=m.discriminatedUnion(`kind`,[m.object({kind:m.literal(`recording`),recordingId:m.string()})]),wd=m.discriminatedUnion(`state`,[m.object({state:m.literal(`converting`)}),m.object({state:m.literal(`failed`),reason:m.string().min(1).max(200)})]);m.object({html:m.string().optional(),viewport:m.object({width:m.number(),height:m.number()}),atMs:m.number(),screenId:m.string().nullable().default(null),sourceNodeId:m.string().optional(),provenance:Cd.optional(),landing:wd.optional()}),m.object({provenance:Cd.optional(),report:Yc.optional()}),m.object({recordingId:m.string()}),m.object({prototypeId:m.uuid(),deploymentId:m.uuid()}),m.object({preparedExperience:m.enum([`agent-connection`,`whisper-prototype`]),ownerPersonId:m.uuid(),resources:m.array(m.string().min(1))});const Td=new Set(nc);new Set(Object.entries(Ys).flatMap(([e,t])=>t.some(e=>Td.has(e))?[e.replaceAll(/-([a-z])/gu,(e,t)=>t.toUpperCase())]:[]));const Ed=new Set(nc);new Set(Object.entries(Ys).flatMap(([e,t])=>t.some(e=>Ed.has(e))?[e]:[]));const Dd=1e3,Od=m.discriminatedUnion(`kind`,[m.object({kind:m.literal(`person`),personId:m.uuid(),displayName:m.string().min(1).max(200),initials:m.string().min(1).max(2)}),m.object({kind:m.literal(`agent`),personId:m.uuid(),displayName:m.string().min(1).max(200),initials:m.string().min(1).max(2),tokenLabel:m.string().min(1).max(200)})]),kd=m.object({id:m.uuid(),canvasId:m.uuid(),documentVersion:m.number().int().positive(),origin:m.enum([`automatic`,`manual`,`restore`]),restoreRole:m.enum([`before`,`result`]).nullable(),retention:m.enum([`automatic`,`named`,`restore-boundary`]),title:m.string().min(1).nullable(),description:m.string().max(Dd).nullable(),actor:Od,sourceVersionEntryId:m.uuid().nullable(),expiresAt:m.iso.datetime().nullable(),checkpointAt:m.iso.datetime(),createdAt:m.iso.datetime(),updatedAt:m.iso.datetime(),screenCount:m.number().int().min(0)});m.object({canvasId:m.uuid(),limit:m.number().int().min(1).max(100).default(50),cursor:m.string().min(1).max(1e3).optional(),includeAutomatic:m.boolean().default(!1),actor:m.enum([`all`,`mine`]).default(`all`)}),m.object({current:m.object({documentVersion:m.number().int().positive(),updatedAt:m.iso.datetime()}),items:m.array(kd),nextCursor:m.string().min(1).nullable(),hasExpiredHistory:m.boolean()}),m.object({canvasId:m.uuid(),versionId:m.uuid()});const Ad=m.object({outcome:m.literal(`ready`),entry:kd,document:hu,screens:m.array(gu)}),jd=m.object({outcome:m.literal(`missing-resources`),entry:kd,document:hu,screens:m.array(gu),missingScreenIds:m.array(m.uuid()).min(1)});m.discriminatedUnion(`outcome`,[Ad,jd,m.object({outcome:m.literal(`corrupt`),entry:kd})]);const Md=m.discriminatedUnion(`kind`,[m.object({kind:m.literal(`current`),expectedVersion:m.number().int().positive()}),m.object({kind:m.literal(`version`),versionId:m.uuid()})]);m.object({canvasId:m.uuid(),target:Md,title:m.string().trim().min(1),description:m.string().trim().max(Dd).nullable().default(null)}),m.object({canvasId:m.uuid(),versionId:m.uuid(),title:m.string().trim().min(1),description:m.string().trim().max(Dd).nullable().default(null)}),m.object({canvasId:m.uuid(),versionId:m.uuid()}),m.object({entry:kd});const Nd=(e,t)=>{zc(e.documentFormatVersion,`names`,t)};m.object({canvasId:m.uuid(),documentFormatVersion:Rc,versionId:m.uuid(),expectedVersion:m.number().int().positive()}).superRefine(Nd),m.object({canvasId:m.uuid(),version:m.number().int().positive(),beforeVersionId:m.uuid(),restoredVersionId:m.uuid(),restoreFenceVersion:m.number().int().positive()}),m.object({canvasId:m.uuid(),documentFormatVersion:Rc,versionId:m.uuid(),organisationId:m.union([m.uuid(),m.literal(`personal`)]),title:m.string().trim().min(1).optional()}).superRefine(Nd),m.object({canvasId:m.uuid(),title:m.string().min(1),version:m.literal(1)}),m.object({canvasId:m.uuid(),sourceCanvasId:m.uuid(),recordingIds:m.array(m.uuid()).min(1)}),m.object({copies:m.array(m.object({sourceRecordingId:m.uuid(),recordingId:m.uuid()}))});const Pd=(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))},Fd=m.string().regex(/^[a-f0-9]{64}$/u),Id=m.string().trim().min(1),Ld=m.object({organisationId:m.uuid().nullable()}),Rd=m.object({family:m.string().regex(/^uploaded-font-[a-f0-9]{64}(?:-[a-f0-9]{12})?$/u),familyName:Id,subfamilyName:Id,version:Id,weight:m.string().regex(/^\d+(?:\.\d+)?(?: \d+(?:\.\d+)?)?$/u).refine(e=>Pd(e,1,1e3)),style:m.enum([`normal`,`italic`,`oblique`]),stretch:m.union([m.enum([`normal`,`ultra-condensed`,`extra-condensed`,`condensed`,`semi-condensed`,`semi-expanded`,`expanded`,`extra-expanded`,`ultra-expanded`]),m.string().regex(/^\d+(?:\.\d+)?%(?: \d+(?:\.\d+)?%)?$/u).refine(e=>Pd(e,0))]),format:m.enum([`truetype`,`opentype`,`woff`,`woff2`])}),zd=m.object({kind:m.enum([`personal`,`team`]),ownerId:m.uuid(),sha256:Fd}),Bd=Ld.extend({sha256:Fd,bytes:m.number().int().positive(),contentType:m.enum(fc)});m.object({upload:P}),Bd.extend({metadata:Rd,hasSharingRights:m.literal(!0)});const Vd=zd.extend({bytes:m.number().int().positive(),metadata:Rd,createdAt:m.iso.datetime(),path:m.string().startsWith(`/v1/font-catalog/`)});m.object({entries:m.array(Vd),canManage:m.boolean()}),Ld.extend({sha256:Fd}),Ld.extend({canvasId:m.uuid(),sha256:m.array(Fd).min(1)}),m.object({resources:m.array(m.object({entry:Vd,path:m.string().startsWith(`/v1/canvas-assets/`)}))});const Hd=m.object({inviteId:m.uuid(),email:m.string().max(254),accessLevel:Wo,sendCount:m.number().int().min(1),lastSentAt:m.iso.datetime(),expiresAt:m.iso.datetime(),state:m.enum([`pending`,`expired`]),deliveryState:m.enum([`queued`,`accepted`,`failed`]),deliveryError:m.string()});m.object({canvasTitle:m.string().min(1),invitedBy:m.string().min(1),email:m.string().max(254).pipe(m.email()),accessLevel:Wo,expiresAt:m.iso.datetime(),state:m.enum([`pending`,`accepted`]),hasAccount:m.boolean()}),m.object({canvasId:m.uuid(),email:m.string().max(254).transform(e=>e.trim().toLowerCase()).pipe(m.email()),accessLevel:Wo}),m.object({invite:Hd,acceptToken:m.string().max(512).optional()}),m.object({canvasId:m.uuid()}),Ro(Hd),m.object({canvasId:m.uuid(),inviteId:m.uuid()}),m.object({canvasId:m.uuid(),inviteId:m.uuid()});const Ud=m.string().min(1).max(512);m.object({token:Ud}),m.object({token:Ud}),m.object({canvasId:m.uuid(),accessLevel:Uo});const Wd=m.object({personId:m.uuid().nullable(),email:m.string().max(254).nullable(),displayName:m.string().max(120).nullable(),initials:m.string().max(4).nullable(),avatarUrl:m.string().max(zo).nullable(),accessLevel:Uo,isPending:m.boolean(),reviewState:m.enum([`not-started`,`in-progress`,`done`]).nullable(),lastViewedAt:m.iso.datetime().nullable()});m.object({canvasId:m.uuid()}),Ro(Wd),m.object({canvasId:m.uuid(),personId:m.uuid(),accessLevel:Wo}),m.object({canvasId:m.uuid(),personId:m.uuid()}),m.object({personId:m.uuid(),revoked:m.boolean()});const Gd=m.object({canvasId:m.uuid(),reviewState:m.enum([`not-started`,`in-progress`,`done`])});m.object({reviewState:Gd.shape.reviewState.nullable()}),m.object({canvasId:m.uuid()}),m.object({pass:m.string().min(1),expiresAt:m.iso.datetime(),scriptUrl:m.url(),apiUrl:m.url()});const Kd=Lo.extend({cursor:m.string().max(2048).nullable().default(null)}),qd=m.object({selector:m.string().min(1),tagName:m.string().min(1),label:m.string().nullable(),source:m.object({file:m.string().min(1),line:m.number().int().min(0).nullable()}).nullable()}),Jd=m.object({x:m.number(),y:m.number()}),Yd=m.object({x:m.number().min(0).max(1),y:m.number().min(0).max(1)}),Xd=m.object({x:m.number().min(0).max(1),y:m.number().min(0).max(1),width:m.number().min(0).max(1),height:m.number().min(0).max(1)}),Zd=qd.extend({role:m.string().min(1).optional()}),Qd=m.object({path:m.array(m.number().int().min(0)),offset:m.number().int().min(0)}),$d=m.object({version:m.literal(1),kind:m.literal(`element`),locator:Zd,attachment:Yd,fallbackBounds:Xd}),ef=m.object({version:m.literal(1),kind:m.literal(`text`),root:Zd,quote:m.object({exact:m.string().min(1),prefix:m.string(),suffix:m.string()}),range:m.object({start:Qd,end:Qd}),attachment:Yd,fallbackBounds:Xd}),tf=m.object({version:m.literal(1),kind:m.literal(`elements`),members:m.array(Zd).min(2),truncated:m.boolean(),attachment:Yd,fallbackBounds:Xd}),nf=m.object({version:m.literal(1),kind:m.literal(`area`),bounds:Xd,attachment:Yd}),rf=m.discriminatedUnion(`kind`,[$d,ef,tf,nf]),af=m.discriminatedUnion(`on`,[m.object({on:m.literal(`canvas`),point:Jd,pageId:m.string().min(1).max(256).optional()}),m.object({on:m.literal(`node`),nodeId:m.string().min(1),point:Jd,element:m.null()}),m.object({on:m.literal(`screen`),nodeId:m.string().min(1),screenId:m.uuid(),point:Jd,element:qd.nullable(),target:rf.optional()})]),of=m.object({kind:m.enum([`person`,`agent`]),personId:m.uuid(),name:m.string().min(1).max(120),initials:m.string().min(1).max(4),avatarUrl:m.string().max(zo).nullable(),tokenLabel:m.string().max(120).nullable()}),sf=m.object({personId:m.uuid(),name:m.string().min(1).max(120)}),cf=m.object({emoji:m.string().min(1).max(16),people:m.array(sf).min(1)}),lf=m.object({messageId:m.uuid(),seq:m.number().int().min(1),body:m.string().min(1),isDeleted:m.boolean(),author:of,createdAt:m.iso.datetime(),editedAt:m.iso.datetime().nullable(),mentions:m.array(sf),reactions:m.array(cf)}),uf=m.object({kind:m.enum([`person`,`agent`]),personId:m.uuid(),name:m.string().min(1).max(120),tokenLabel:m.string().max(120).nullable()}),df=m.object({revision:m.number().int().positive(),threadId:m.uuid(),canvasId:m.uuid(),anchor:af,author:of,messages:m.array(lf).min(1).max(50),messageCount:m.number().int().min(1),hasMoreMessages:m.boolean(),isResolved:m.boolean(),resolvedAt:m.iso.datetime().nullable(),resolvedBy:uf.nullable(),createdAt:m.iso.datetime(),lastMessageAt:m.iso.datetime()}),ff=m.strictObject({canvasRef:m.string().min(1),expectedVersion:m.number().int().positive()}),pf=ff.extend({coordinateSpace:m.enum([`canvas-world`,`node-normalized`,`screen-normalized`])});m.object({context:ff.optional(),page:Kd.optional(),canvasId:m.uuid(),filter:m.enum([`open`,`resolved`,`all`]).default(`open`),authorPersonId:m.uuid().optional(),agentActionable:m.boolean().default(!1),query:m.string().trim().max(200).optional()}),Ro(df).extend({nextCursor:m.string().nullable().optional()}),Kd.extend({context:ff.optional(),canvasId:m.uuid(),threadId:m.uuid(),expectedRevision:m.number().int().positive().optional()}),m.object({thread:df.omit({messages:!0,hasMoreMessages:!0}),messages:m.array(lf).max(100),nextCursor:m.string().nullable()}),m.object({context:pf.optional(),canvasId:m.uuid(),clientThreadId:m.uuid(),anchor:af,body:m.string().trim().min(1),mentionedPersonIds:m.array(m.uuid()).default([])}),m.object({context:ff.optional(),canvasId:m.uuid(),threadId:m.uuid(),clientMessageId:m.uuid(),body:m.string().trim().min(1),mentionedPersonIds:m.array(m.uuid()).default([])}),df.extend({postedMessage:lf}),m.object({canvasId:m.uuid(),threadId:m.uuid(),messageId:m.uuid(),body:m.string().trim().min(1),mentionedPersonIds:m.array(m.uuid()).default([])}),m.object({canvasId:m.uuid(),threadId:m.uuid(),messageId:m.uuid(),emoji:m.string().trim().min(1).max(16),reacted:m.boolean()}),m.object({canvasId:m.uuid(),threadId:m.uuid(),anchor:af}),m.object({context:ff.optional(),expectedRevision:m.number().int().positive().optional(),canvasId:m.uuid(),threadId:m.uuid(),resolved:m.boolean()}),m.object({canvasId:m.uuid(),threadId:m.uuid(),messageId:m.uuid().optional()}),m.object({deletedThreadIds:m.array(m.uuid()),deletedMessageIds:m.array(m.uuid())});const q={shortText:200,name:100,label:500,page:50,cursor:64,questionOptions:3},J=m.uuid(),mf=m.string().min(1),hf=m.object({id:J,name:m.string().trim().min(1).max(q.name),content:m.string().trim().min(1),version:m.string().min(1).max(q.name)}),gf=m.object({canvasId:J,nodeId:mf,label:m.string(),role:m.enum([`target`,`reference`])}),_f=m.discriminatedUnion(`type`,[m.object({type:m.literal(`text`),text:m.string()}),gf.extend({type:m.literal(`object`)})]),vf=m.object({revision:m.number().int().nonnegative(),text:m.string(),task:m.enum([`chat`,`rewrite`,`shorten`,`translate`,`replace`,`rename`]).default(`chat`),references:m.array(gf),contentVersion:m.literal(1).default(1),parts:m.array(_f).optional(),attachmentIds:m.array(J),model:m.enum([`default`,`sonnet`,`opus`,`haiku`]).default(`default`),effort:m.enum([`default`,`low`,`medium`,`high`]).default(`default`),instructions:m.array(m.object({name:m.string().max(q.name),content:m.string(),version:m.string().max(q.name)})).default([])}).transform(e=>{let t=e.parts??[...e.references.flatMap(e=>[{type:`object`,...e},{type:`text`,text:`
18
+ `).action(async e=>Zr(t,e))},$r=e=>e.replaceAll(/([a-z\d])([A-Z])/gu,`$1-$2`).toLowerCase(),ei=(e,t)=>typeof t==`number`&&!Xr.has(e)?`${String(t)}px`:String(t),ti=e=>Object.entries(e).filter(([,e])=>e!==null).map(([e,t])=>{let n=$r(e);return`${n}:${ei(n,t??``)}`}).join(`;`).replaceAll(`&`,`&amp;`).replaceAll(`"`,`&quot;`),ni=e=>e.length===0?0:Math.max(...e.map(e=>e.x+e.width))+80,ri=(e,t)=>{e.command(`create-artboard`).description(`Create a top-level frame.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID to edit.`).requiredOption(`--base-version <integer>`,`Exact current canvas version.`).requiredOption(`--name <name>`,`Meaningful layer name.`).requiredOption(`--styles <json-or-@path>`,`CSSProperties with width and height.`).option(`--client-token <uuid>`,`Stable UUID for retrying this exact creation and review.`).option(`--output <path>`,`Review PNG path.`).option(`--force`,`Replace an existing review PNG.`,!1).action(async e=>{let n=_(e.styles,vn,`--styles`);if(n.width===void 0||n.height===void 0)throw new u(`BAD_REQUEST`,`--styles must include width and height.`,`Use explicit whole-pixel dimensions such as 1440px and 900px.`);kn(t,e.clientToken,!0);let r=be(e.canvas),i=On(e.baseVersion),a=await Ye(t,r,i),o=Object.entries(a.relationships).flatMap(([e,t])=>{let n=a.nodes[e]?.box;return n!==void 0&&t.parentId===`root`?[n]:[]}),s={display:`flex`,flexDirection:`column`,left:ni(o),top:0,...n,position:`absolute`},c=e.name.replaceAll(`&`,`&amp;`).replaceAll(`"`,`&quot;`);t.output.result(await Je(t.remote,t.render).execute({canvasId:r,targetNodeId:`root`,mode:`insert-children`,html:`<div layer-name="${c}" data-enhance-kind="frame" style="${ti(s)}"></div>`,idPrefix:`artboard_${t.mutationKey.current(`canvas.render.importSource`,{canvasId:r})}`,baseVersion:i,renderClientToken:t.mutationKey.current(`canvas.render.create`,{purpose:`create-artboard-review`}),renderOutputPath:e.output??null,overwriteRender:e.force===!0,renderScale:1,renderTimeoutMs:12e4}))})},ii=(e,t)=>{Qr(e,t),ri(e,t)},ai=(e,t)=>{for(let n of[`canvas.insertHtml`,`canvas.makeEditable`,`canvas.capture`,`canvas.capturePage`,`canvas.arrange`]){let r=f(t.catalog(),n),i=n===`canvas.insertHtml`?`insert-html`:n===`canvas.makeEditable`?`make-editable`:n===`canvas.capturePage`?`capture-page`:n.slice(7);e.command(i).description(r.guide.summary).requiredOption(`--input <json-or-@path>`,`Canvas reference, base version and explicit native authoring request.`).requiredOption(`--client-token <uuid>`,`Stable intent ID; reuse unchanged after an uncertain outcome.`).action(async e=>{t.output.result(await t.invocation.invoke({capability:r,arguments:_(e.input,r.inputSchema,`--input`),clientToken:m.uuid().parse(e.clientToken)}))})}},oi=(e,t)=>{e.command(`remove`).description(`Remove explicitly named canvas subtrees with scope, lock and revision checks.`).requiredOption(`--input <json-or-@path>`,`Request containing canvasRef, baseVersion and rootNodeIds.`).requiredOption(`--client-token <uuid>`,`Stable intent ID; reuse unchanged after an uncertain outcome.`).action(async e=>{t.output.result(await t.invocation.invoke({capability:f(t.catalog(),`canvas.remove`),arguments:_(e.input,me,`--input`),clientToken:m.uuid().parse(e.clientToken)}))})},si=(e,t)=>{e.command(`read`).description(`Read complete editable content, bounded evidence, or the supplied reference.`).summary(`Read linked canvas content.`).option(`--input <json-or-@path>`,`Bounded read request containing canvasRef, view and target options.`).option(`--canvas <url-or-id>`,`Complete canvas, page or selection URL for comprehensive reads.`).option(`--node-id <id>`,`Subtree within --canvas; unavailable with --input.`).action(async e=>{if(e.input===void 0==(e.canvas===void 0)||e.input!==void 0&&e.nodeId!==void 0)throw new u(`BAD_REQUEST`,`Choose exactly one of --input or --canvas; --node-id requires --canvas.`,`Use --input for bounded views, or --canvas with an optional --node-id for comprehensive reads.`);let n=e.input===void 0?{canvas:e.canvas,...e.nodeId!==void 0&&{nodeId:e.nodeId}}:_(e.input,he,`--input`);t.output.result(await t.invocation.invoke({capability:f(t.catalog(),`canvas.read`),arguments:n,clientToken:null}))})},ci=(e,t)=>{e.command(`find`).description(`Find accessible canvases and existing creation destinations with bounded results.`).option(`--input <json-or-@path>`,`Search title, collection, limit and continuation cursor.`,`{}`).action(async e=>{t.output.result(await t.invocation.invoke({capability:f(t.catalog(),`canvas.find`),arguments:_(e.input,fe,`--input`),clientToken:null}))}),oi(e,t),si(e,t),e.command(`update-html`).description(`Apply an identity-preserving edit from a complete HTML snapshot.`).requiredOption(`--input <json-or-@path>`,`Request containing canvasRef, snapshotToken, html and removeNodeIds.`).requiredOption(`--client-token <uuid>`,`Stable intent ID; reuse unchanged after an uncertain outcome.`).action(async e=>{let n=_(e.input,Oe,`--input`);t.output.result(await t.invocation.invoke({capability:f(t.catalog(),`canvas.updateHtml`),arguments:n,clientToken:m.uuid().parse(e.clientToken)}))})},li=(e,t)=>{let n=f(t.catalog(),`prototype.publishCanvas`);e.command(`publish-prototype`).description(n.guide.summary).requiredOption(`--input <json-or-@path>`,`Complete canvas reference, baseVersion, unpacked build directory or existing deployment, and bounded waitMs.`).requiredOption(`--client-token <uuid>`,`Stable attachment intent; reuse the same arguments after uncertainty, use a new token after replanning.`).action(async e=>{t.output.result(await t.invocation.invoke({capability:n,arguments:_(e.input,n.inputSchema,`--input`),clientToken:m.uuid().parse(e.clientToken)}))})},ui=(e,t)=>{let n=f(t.catalog(),`canvas.importAsset`);e.command(`import-asset`).description(n.guide.summary).requiredOption(`--input <json-or-@path>`,`Canvas reference and selected local file source.`).requiredOption(`--client-token <uuid>`,`Stable import intent; reuse after uncertainty.`).action(async e=>{t.output.result(await t.invocation.invoke({capability:n,arguments:_(e.input,n.inputSchema,`--input`),clientToken:m.uuid().parse(e.clientToken)}))})},di=(e,t)=>{ci(e,t),li(e,t),ui(e,t),ai(e,t),Ur(e,t),ii(e,t),$n(e,t),Jr(e,t),qn(e,t)},fi=e=>{let t=e.getOptionValue(`canvas`),n=e.getOptionValue(`canvasId`);if(t!==void 0&&n!==void 0)throw new u(`BAD_REQUEST`,`--canvas and --canvas-id cannot be combined.`,`Pass the pasted URL or UUID through --canvas.`);let r=t??n;if(typeof r!=`string`)throw TypeError(`The required-option check let canvas ${e.name()} run without --canvas.`);return{reference:d(r),url:r}},pi=(e,t)=>{let n=e.getOptionValue(`nodeId`)??(t.nodeIds.length===1?t.nodeIds[0]:void 0);if(typeof n!=`string`||n===``)throw new u(`BAD_REQUEST`,`--node-id or a single-node selection link is required.`,`Choose one node, or use canvas tree to inspect the linked selection.`);return n},mi=async(e,t,n,r)=>{let i=e.name()===`node`?pi(e,n):void 0,a=await it(t.remote,{canvas:r,...i!==void 0&&{nodeId:i}});if(i===void 0)return a;let{nodes:o,...s}=a;return{...s,node:o.find(e=>e.id===i)}},hi=(e,t)=>{for(let n of[`inspect`,`tree`,`node`,`selection`]){let r=e.commands.find(e=>e.name()===n),i=r?.options.find(e=>e.long===`--canvas-id`);r!==void 0&&i!==void 0&&(i.makeOptionMandatory(!1),r.options.find(e=>e.long===`--node-id`)?.makeOptionMandatory(!1),r.option(`--canvas <url-or-id>`,`Pasted canvas URL or UUID. Selection links limit reads and edits to the linked subtree.`),r.action(async()=>{let{reference:e,url:i}=fi(r),a=ee(e)?await mi(r,t,e,i):await t.remote.query(`canvas.${n}`,{canvasId:e.canvasId,...n===`node`&&{nodeId:pi(r,e)}});t.output.result(a)}))}},gi=e=>{if(e.input===void 0)return null;if(e.canvas!==void 0||e.nodeId!==void 0||e.bounds!==void 0||e.expectedVersion!==void 0||e.atMs!==void 0||e.output!==void 0||e.force===!0||e.scale!==`1`||e.timeoutMs!==`120000`)throw new u(`BAD_REQUEST`,`The bounded --input request cannot be combined with individual render options.`,`Put the entire scoped render request in --input.`);return{arguments:_(e.input,ye,`--input`),clientToken:Wr(e.clientToken)}},_i=`canvas render --canvas 0b9f4c1e-5d2a-4e8b-9c3f-7a6d1e2b4c50`,vi={"canvas render":_i},yi=m.coerce.number().int().positive(),bi=m.coerce.number().int().nonnegative(),xi=m.coerce.number().positive(),Si=(e,t,n,r=`canvas render`)=>{let i=e.safeParse(t);if(!i.success)throw new u(`BAD_REQUEST`,`${n} is invalid.`,`Run 'enhance ${r} --help'.`);return i.data},Ci=e=>{if(e===void 0)return null;try{let t=Se.safeParse(JSON.parse(e));if(t.success)return t.data}catch{}throw new u(`BAD_REQUEST`,`--bounds must be a finite positive world rectangle.`,`Pass JSON such as '{"x":0,"y":0,"width":800,"height":600}'.`)},wi=(e,t)=>e===void 0?t===null?{kind:`content`}:{kind:`bounds`,bounds:t}:{kind:`node`,nodeId:e},Ti=e=>{if(!(typeof e!=`string`||!e.startsWith(`rec_`)))return m.uuid().safeParse(e.slice(4)).data},Ei=(e,t)=>{let n=m.uuid().nullable().safeParse(t??null);if(!n.success)throw new u(`BAD_REQUEST`,`--client-token must be a UUID.`,`Mint one UUID and reuse it only when retrying this exact render.`);return e.mutationKey.select(n.data,!1),e.mutationKey.current(`canvas.render.create`,{})},Di=async(e,t)=>{let r=d(e.canvas??``),i=wi(e.nodeId,Ci(e.bounds)),a=e.expectedVersion===void 0?null:Si(yi,e.expectedVersion,`--expected-version`);if(!ee(r))return{target:i,expectedVersion:a};let o=Ee.parse(await t.remote.query(`canvas.document.get`,{canvasId:r.canvasId}));if(a!==null&&a!==o.version)throw new u(`CONFLICT`,`The canvas changed before rendering.`,`Read the linked page or selection and render its current version.`);return{target:n(r,ne(o.document),i),expectedVersion:o.version}},Oi=async(e,t)=>{if(e.canvas===void 0)throw TypeError(`The required-option check let canvas render run without --canvas.`);if(e.nodeId!==void 0&&e.bounds!==void 0)throw new u(`BAD_REQUEST`,`--node-id and --bounds cannot be combined.`,`Choose one focused target, or omit both to render all authored content.`);let n=await Di(e,t),r=n.target.kind===`node`?n.target.nodeId:void 0;if(r===void 0&&e.atMs!==void 0)throw new u(`BAD_REQUEST`,`--at-ms requires --node-id.`,"Render the stable recording node returned by `enhance canvas tree`.");let i=e.atMs===void 0?null:Ti(r);if(i===void 0&&e.atMs!==void 0)throw new u(`BAD_REQUEST`,`--at-ms requires a stable recording node id such as rec_<recording-uuid>.`,"Run `enhance canvas tree --canvas <url-or-id>` and choose a recording node.");Ei(t,e.clientToken);let a=await t.invocation.invoke({capability:f(t.catalog(),`canvas.render`),arguments:{canvasId:d(e.canvas).canvasId,...n,sourceState:i==null?null:{kind:`recording`,recordingId:i,atMs:Si(bi,e.atMs??``,`--at-ms`)},scale:Si(xi,e.scale,`--scale`),outputPath:e.output??null,overwrite:e.force===!0,timeoutMs:Si(yi,e.timeoutMs,`--timeout-ms`)},clientToken:e.clientToken??null});t.output.result(a)},ki=e=>e.parent===null?e:ki(e.parent),Ai=(e,t)=>{e.option(`--input <json-or-@path>`,`Bounded scoped render request; requires --client-token.`).option(`--canvas <url-or-id>`,`Canvas URL or UUID to render.`).option(`--node-id <id>`,`Render one stable canvas node instead of all authored content.`).option(`--bounds <json>`,`Render an explicit rectangle in canvas world coordinates.`).option(`--expected-version <integer>`,`Refuse pixels from any other document version.`).option(`--at-ms <integer>`,`Pause a recording node at this millisecond; inspect the PNG before snapshotting it.`).option(`--scale <number>`,`Output pixels per canvas unit, from 0.1 to 4.`,`1`).option(`--output <path>`,`Write the PNG to this path instead of a protected temporary file.`).option(`--force`,`Replace an existing --output file deliberately.`,!1).option(`--timeout-ms <integer>`,`Local polling deadline in milliseconds.`,`120000`).option(`--client-token <uuid>`,`Stable UUID to reuse only when retrying this render request.`).addHelpText(`after`,()=>`\nExample:\n ${ki(e).name()} ${_i}\n\nFor transcript-led selection, inspect nearby --at-ms renders and reject transitions or duplicate states before running recording snapshot.\n`).action(async e=>{let n=gi(e);if(n===null)return Oi(e,t);t.output.result(await t.invocation.invoke({capability:f(t.catalog(),`canvas.render`),...n}))})},ji=(e,t)=>{let n=e.commands.find(e=>e.name()===`canvas`);if(n===void 0)throw TypeError(`the API router did not supply canvas commands`);n.configureHelp({subcommandTerm:e=>e.name()});let r=n.commands.find(e=>e.name()===`render`);if(r===void 0)throw TypeError(`the API router did not supply canvas render`);let i=ct(t.remote,Qe(t.configDirectory),t.now,t.output.result);Bn(n,t),di(n,{...t,render:i}),hi(n,t),Ai(r,t)},y=m.string().trim().min(1).max(160),Mi=m.string().regex(/^[a-f0-9]{64}$/u),Ni=m.number().int().positive(),Pi=m.strictObject({source:y,journey:y,step:y,variant:y}),Fi=m.strictObject({sha256:Mi,bytes:m.number().int().positive(),mediaType:m.string().min(1).max(200)}),Ii=m.strictObject({organisationId:m.uuid().optional()}),Li=m.strictObject({key:m.string().min(1),label:m.string().min(1),url:m.url().optional(),sequence:m.number().int().nonnegative(),attempt:m.number().int().nonnegative().default(0)}),Ri=m.union([m.strictObject({runId:m.uuid()}),m.strictObject({reference:m.string().min(1),revision:m.string().min(1).optional()})]),zi=m.strictObject({destination:Ii,context:Li.optional(),revision:m.string().min(1).optional(),baselineRunId:m.uuid().nullable(),compareTo:Ri.optional()}),Bi=m.enum([`awaiting-review`,`approved`,`changes-requested`]),Vi=m.strictObject({format:m.literal(`enhance-capture`),version:m.literal(1),key:Pi,label:y,journeyLabel:y,order:m.number().int().nonnegative(),page:m.string().min(1).optional(),viewport:m.strictObject({width:Ni,height:Ni,deviceScaleFactor:m.number().positive()}),extent:m.enum([`viewport`,`full-page`]),source:m.strictObject({format:m.literal(`rrweb-screen`),version:m.literal(1),blob:Fi}),preview:m.strictObject({blob:Fi,width:Ni,height:Ni,pixelRatio:m.number().positive()}),assets:m.array(m.strictObject({url:m.url(),blob:Fi})),provenance:m.strictObject({adapter:y,sdkVersion:y,kernelVersion:y,browser:y,capturedAt:m.iso.datetime(),sourceUrl:m.url().optional(),commit:m.string().min(1).max(200).optional()}),issues:m.array(m.strictObject({code:y,message:m.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.`})}),Hi=m.strictObject({id:m.uuid(),canvasId:m.uuid(),source:y,runKey:y,generation:m.number().int().nonnegative(),participants:m.array(y).min(1),expiresAt:m.iso.datetime(),formatVersion:m.literal(1),review:zi.optional()}),Ui={participant:y,retry:m.number().int().nonnegative(),status:m.enum([`passed`,`failed`,`skipped`,`interrupted`,`timedOut`]),title:m.string().min(1).optional(),location:m.strictObject({file:m.string().min(1),line:m.number().int()}).optional(),captures:m.array(Vi)},Wi=m.strictObject({runner:m.literal(`playwright`).optional(),testId:y,project:y,...Ui}),Gi=m.strictObject({runner:m.literal(`script`),...Ui}),Ki=m.union([Wi,Gi]),qi=m.strictObject({key:Pi.optional(),testId:y.optional(),message:m.string().min(1).max(500)}),Ji=m.strictObject({format:m.literal(`enhance-capture-run`),version:m.literal(1),run:Hi,participants:m.array(m.strictObject({id:y,status:m.enum([`passed`,`failed`,`interrupted`])})).min(1),attempts:m.array(Ki),ordering:m.enum([`partial`,`complete`]),leftOut:m.array(qi).optional()}),Yi=m.strictObject({runId:m.uuid(),canvasId:m.uuid(),canvasUrl:m.url(),version:m.number().int().positive(),manifestDigest:Mi,frames:m.array(m.strictObject({key:Pi,frameId:y,captureId:m.uuid()})),issues:m.array(m.strictObject({code:y,message:m.string().max(500)}))}),Xi=m.strictObject({canvasId:m.uuid().optional(),destination:Ii.optional(),title:m.string().trim().min(1).optional(),context:Li.optional(),revision:m.string().min(1).optional(),compareTo:Ri.optional(),source:y.default(`default`),runKey:y,participants:m.array(y).min(1).default([`local`]),formatVersion:m.literal(1).default(1)}).superRefine((e,t)=>{e.canvasId===void 0==(e.destination===void 0)&&t.addIssue({code:`custom`,message:`Choose either a canvas or a destination for this run.`}),e.canvasId!==void 0&&(e.context!==void 0||e.compareTo!==void 0)&&t.addIssue({code:`custom`,message:`Run review requires a destination.`})}),Zi=m.strictObject({run:Hi});m.strictObject({runId:m.uuid()});const Qi=m.enum([`collecting`,`sealed`,`converting`,`committed`,`failed`,`cancelled`]),$i=m.strictObject({run:Hi,state:Qi,receipt:Yi.nullable(),verdict:Bi.optional(),failure:m.strictObject({code:y,message:m.string().max(1e3)}).nullable()});m.strictObject({runId:m.uuid(),blobs:m.array(Fi).min(1).max(400)});const ea=m.strictObject({uploads:m.array(m.strictObject({sha256:Mi,upload:m.strictObject({url:m.url(),headers:m.record(m.string(),m.string()),expiresAt:m.iso.datetime()}).nullable()})).max(400)});m.strictObject({canvasId:m.uuid(),frameId:m.string().min(1),captureId:m.uuid()});const ta=m.strictObject({captureId:m.uuid(),capturedAt:m.iso.datetime(),commit:m.string().max(200).optional(),url:m.string().min(1),width:m.number().positive(),height:m.number().positive(),pixelRatio:m.number().positive()});m.strictObject({frameId:m.string(),before:ta,after:ta});const na=h.array(h.object({code:h.string().check(h.minLength(1),h.maxLength(160)),message:h.string().check(h.minLength(1),h.maxLength(500))})).check(h.maxLength(32));h.object({issues:h.optional(na),prototype:h.optional(h.object({prototypeId:h.uuid(),deploymentId:h.uuid()}))});const ra={unreadable:`its saved capture could not be read`,notACapture:`it is not an Enhance capture`,pictureMismatch:`its picture does not match the size of its page`,nothingArrived:`none of its files arrived`,notSaved:`it could not be saved on this machine`,noPicture:`it could not be compiled and has no picture`,anotherSource:`it was captured for another source`,outsideShards:`its test ran outside this run's shards`},ia=(e,t)=>e<t?-1:e===t?0:1,aa=(e,t)=>{let n=Object.keys(e).toSorted(ia);t.output.push(`{`),t.pending.push({text:`}`});for(let r=n.length-1;r>=0;r--){let i=n[r];i!==void 0&&(t.pending.push({value:Reflect.get(e,i)},{text:`${JSON.stringify(i)}:`}),r>0&&t.pending.push({text:`,`}))}},oa=(e,t)=>{if(e===null||typeof e==`boolean`||typeof e==`string`||typeof e==`number`&&Number.isFinite(e))return t.output.push(JSON.stringify(e)),!0;if(typeof e!=`object`||t.active.has(e)||!Array.isArray(e)&&Object.getPrototypeOf(e)!==Object.prototype)return!1;if(t.active.add(e),t.pending.push({leave:e}),Array.isArray(e)){t.output.push(`[`),t.pending.push({text:`]`});for(let n=e.length-1;n>=0;n--)t.pending.push({value:e[n]}),n>0&&t.pending.push({text:`,`})}else aa(e,t);return!0},sa=e=>{let t={pending:[{value:e}],active:new Set,output:[]};for(;t.pending.length>0;){let e=t.pending.pop();if(e===void 0)break;if(`text`in e)t.output.push(e.text);else if(`leave`in e)t.active.delete(e.leave);else if(!oa(e.value,t))return null}return t.output.join(``)},ca=e=>{let t=2166136261;for(let n of e)t^=n.codePointAt(0)??0,t=Math.imul(t,16777619)>>>0;return t.toString(16).padStart(8,`0`)},la=e=>{let t=e.trim();return t.length<=160?t:`${t.slice(0,151).trimEnd()} ${ca(t)}`},ua=e=>JSON.stringify([e.source,e.journey,e.step,e.variant]),da=(e,t)=>e<t?-1:e===t?0:1,fa=e=>{let t=new Set,n=[];for(let r of e)for(let e of[r.source.blob,r.preview.blob,...r.assets.map(e=>e.blob)])t.has(e.sha256)||(t.add(e.sha256),n.push(e));return n.toSorted((e,t)=>da(e.sha256,t.sha256))},pa=`node`,ma=e=>`testId`in e&&e.testId!==pa?e.testId:void 0,b=e=>`testId`in e&&e.testId!==pa?JSON.stringify([e.participant,e.project,e.testId]):JSON.stringify([e.participant,`script`]),ha=(e,t)=>{let n=ma(e);return e.captures.map(e=>({key:e.key,...n!==void 0&&{testId:n},message:t}))},ga=(e,t)=>{let n=new Set(e.run.participants),r=new Set,i=new Map;for(let a of e.attempts){let e=JSON.stringify([b(a),a.retry]);if(!n.has(a.participant)){t.push(...ha(a,ra.outsideShards));continue}if(r.has(e)||(r.add(e),a.captures.length===0))continue;let o=i.get(b(a));(o===void 0||o.retry<a.retry)&&i.set(b(a),a)}return e.attempts.filter(e=>i.get(b(e))===e)},_a=e=>JSON.stringify([e.key.journey,e.key.variant]),va=(...e)=>e.find(e=>e!==0)??0,ya=(e,t)=>va(da(e.artifact.key.journey,t.artifact.key.journey),da(e.artifact.key.variant,t.artifact.key.variant),e.artifact.order-t.artifact.order,da(e.attempt.location?.file??``,t.attempt.location?.file??``),(e.attempt.location?.line??0)-(t.attempt.location?.line??0),da(b(e.attempt),b(t.attempt)),e.index-t.index),ba=e=>{let t=Map.groupBy(e,e=>ua(e.artifact.key)),n=new Map;for(let e of t.values()){let t=Map.groupBy(e,e=>b(e.attempt));for(let e of t.values())for(let[r,i]of e.entries()){let e=t.size>1?` · ${i.attempt.title??ma(i.attempt)??`script`}`:``,a=r>0?` (${String(r+1)})`:``;n.set(i,`${e}${a}`)}}return n},xa=e=>{let t=ba(e),n=new Map(fa(e.map(e=>e.artifact)).map(e=>[e.sha256,e])),r=e=>n.get(e.sha256)??e,i=new Map,a=new Map;return e.map(e=>{let{artifact:n}=e,o=_a(n);i.has(o)||i.set(o,n.page);let s=a.get(o)??0;a.set(o,s+1);let c=t.get(e)??``,l=i.get(o),u={...n};return delete u.page,{...u,...l!==void 0&&{page:l},key:{...n.key,step:la(`${n.key.step}${c}`)},label:la(`${n.label}${c}`),order:s,source:{...n.source,blob:r(n.source.blob)},preview:{...n.preview,blob:r(n.preview.blob)},assets:n.assets.map(e=>({...e,blob:r(e.blob)}))}})},Sa=e=>{let t=Ji.safeParse(e);if(!t.success)return{refusal:`Invalid capture manifest.`,leftOut:[]};let n=t.data,r=[...n.leftOut??[]],i=ga(n,r).flatMap(e=>e.captures.map((t,n)=>({artifact:t,attempt:e,index:n}))).filter(e=>{if(e.artifact.key.source===n.run.source)return!0;let t=ma(e.attempt);return r.push({key:e.artifact.key,...t!==void 0&&{testId:t},message:ra.anotherSource}),!1}).toSorted(ya);return i.length===0?{refusal:`A run must contain at least one capture.`,leftOut:r}:{captures:xa(i),leftOut:r}},Ca=(e,t)=>sa({...e,expiresAt:``})===sa({...t,expiresAt:``}),wa=e=>{let t=sa(e);return t===null?null:`enhance-capture-run:v1\0${t}`},Ta=(e,t)=>va(da(b(e),b(t)),e.retry-t.retry),Ea=e=>{let t=e[0];if(t===void 0)return`At least one participant manifest is required.`;let n=new Map,r=[],i=[];for(let a of e){if(!Ca(a.run,t.run)||a.ordering!==t.ordering)return`Participant manifests must belong to the same reserved run and ordering.`;if(!a.participants.some(e=>n.has(e.id))){for(let e of a.participants)n.set(e.id,e);i.push(...a.leftOut??[]);for(let e of a.attempts)a.participants.some(t=>t.id===e.participant)?r.push(e):i.push(...ha(e,ra.outsideShards))}}let a={...t};return delete a.leftOut,{...a,participants:Array.from(n,([,e])=>e).toSorted((e,t)=>da(e.id,t.id)),attempts:r.toSorted(Ta),...i.length>0&&{leftOut:i}}},Da=[`journey`,`step`,`variant`],Oa=[`label`,`journeyLabel`],ka=e=>typeof e==`string`?la(e):e,Aa=e=>{if(typeof e!=`object`||!e||Array.isArray(e))return e;let t={...e};for(let e of Oa)t[e]=ka(t[e]);let n=t.key;if(typeof n==`object`&&n&&!Array.isArray(n)){let e={...n};for(let t of Da)e[t]=ka(e[t]);t.key=e}return t},ja=e=>e.length>0&&e.every(e=>e.path.length===1&&e.path[0]===`preview`),Ma=(e,t,n)=>{let r=typeof e==`object`&&e?Pi.safeParse(Reflect.get(e,`key`)):null;return{...r?.success===!0&&{key:r.data},...t!==void 0&&{testId:t},message:ja(n)?ra.pictureMismatch:ra.notACapture}},Na={captures:m.array(m.unknown())},Pa=Ji.extend({attempts:m.array(m.union([Wi.extend(Na),Gi.extend(Na)]))}).transform(e=>{let t=[...e.leftOut??[]],n=e.attempts.map(e=>({...e,captures:e.captures.flatMap(n=>{let r=Aa(n),i=Vi.safeParse(r);return i.success?[i.data]:(t.push(Ma(r,`testId`in e?e.testId:void 0,i.error.issues)),[])})}));return{...e,attempts:n,...t.length>0&&{leftOut:t}}});m.strictObject({manifest:Pa}),m.strictObject({canvasId:m.uuid()}).extend({verdict:Bi});const Fa=m.strictObject({canvasId:m.uuid(),name:m.string().min(1)}),Ia=m.strictObject({runId:m.uuid(),revision:m.string(),version:m.number().int().positive()}),La=Fa.extend({expectedVersion:m.number().int().nonnegative(),revision:m.string().min(1)}),Ra=m.strictObject({current:$i,latest:Hi,related:m.array(m.strictObject({run:Hi,verdict:Bi})),changes:m.array(m.strictObject({key:Pi,frameId:m.string(),label:m.string(),journeyLabel:m.string(),page:m.string().optional(),change:m.enum([`new`,`changed`,`unchanged`,`uncompared`])}))}),x=(e,t,n,r)=>Object.assign(Error(t),{code:e,...n!==void 0&&{runId:n},...r}),za=e=>e instanceof Error&&typeof Reflect.get(e,`code`)==`string`,Ba=e=>Dt(`sha256`).update(e).digest(`hex`),Va=async e=>{let t=Dt(`sha256`);return await It(_t(e),async e=>{for await(let n of e)t.update(n)}),t.digest(`hex`)},Ha=e=>{let t=wa(e);if(t===null)throw Error(`A capture manifest must contain only finite JSON values.`);return Dt(`sha256`).update(t).digest(`hex`)},Ua=Lt(`enhance.capture.resources`),Wa=(e,t)=>{if(!/^[a-f0-9]{64}$/u.test(t))throw x(`artifact`,`Invalid capture blob digest.`);return g.join(g.resolve(e),`blobs`,t)},Ga=async(e,t)=>{for(let n of e)try{let e=Wa(n,t.sha256),r=await Pt(e);if(r.isFile()&&r.size===t.bytes&&await Va(e)===t.sha256)return e}catch(e){Ua.publish({stage:`local-read`,sha256:t.sha256,error:e})}return null},Ka=e=>e instanceof Error&&Reflect.get(e,`code`)===`EEXIST`,qa=async(e,t)=>{try{await kt(e,t)}catch(e){if(!Ka(e)||!(await Pt(t)).isFile())throw e}finally{await Nt(e,{force:!0})}},Ja=async(e,t,n)=>{try{if(t.bytes!==n.byteLength||Ba(n)!==t.sha256)throw x(`artifact`,`Capture blob bytes do not match their descriptor.`);await At(g.join(e,`blobs`),{recursive:!0});let r=Wa(e,t.sha256),i=`${r}.${globalThis.crypto.randomUUID()}.tmp`;return await Ft(i,n,{flag:`wx`,mode:384}),await qa(i,r),!0}catch(e){return Ua.publish({stage:`local-write`,sha256:t.sha256,error:e}),!1}},Ya=async(e,t)=>{let n=Vi.parse(t);if(await Ga([e],n.source.blob)===null&&await Ga([e],n.preview.blob)===null)throw x(`artifact`,`Neither the snapshot nor the preview of a capture is on disk.`);return n},Xa=async(e,t)=>{let n=`${e}.${globalThis.crypto.randomUUID()}.tmp`;await Ft(n,JSON.stringify(t),{mode:384}),await Mt(n,e)},Za=async e=>{let t=JSON.parse(await jt(e,`utf8`));return Pa.parse(t)},S={unversioned:void 0,v1:1,v2:2,v3:3,v4:4,v5:5,v6:6,v7:7,v8:8,v9:9,v10:10,v11:11,v12:12,v13:13,v14:14},Qa={[S.v1]:`layout`,[S.v2]:`layout`,[S.v3]:`typography`,[S.v4]:`typography`,[S.v5]:`typography`,[S.v6]:`geometry`,[S.v7]:`geometry`,[S.v8]:`geometry`,[S.v9]:`geometry`,[S.v10]:`geometry`,[S.v11]:`css`,[S.v12]:`text-shadow-blend`,[S.v13]:`format-number`,[S.v14]:`format-number`},$a=[`appearance-unsupported-component`,`styles-unsupported-component`,`text-shadow-blend-unsupported`,`recording-aspect-not-preserved`],C=e=>typeof e==`object`&&!!e&&!Array.isArray(e),eo=e=>Array.isArray(e)?e:void 0,w=(e,...t)=>Object.fromEntries(Object.entries(e).filter(([e])=>!t.includes(e))),to=e=>`${e}~mask`,no={alpha:`alpha`,luminance:`luminance`,vector:`outline`},ro=e=>{if(!C(e)||!C(e.compositing))return;let t=e.compositing.mask;return typeof t==`string`?no[t]:void 0},io=e=>C(e)?w(e,`blendMode`,`blendSource`):e,ao=e=>C(e)&&`paint`in e?{...w(e,`paint`,`alignment`),paints:[e.paint]}:e,oo=e=>{if(!C(e)||!C(e.progression))return e;let t=e.progression.startValue,n=e.value;return{...w(e,`progression`),value:typeof t==`number`&&typeof n==`number`?Math.max(t,n):n}},so=e=>C(e)&&e.kind===`image`?w(e,`adjustments`):e,co=e=>eo(e)?.filter(e=>!C(e)||e.kind!==`inner`).map(e=>C(e)?{...e,spread:0}:e)??e,lo=e=>{if(!C(e))return e;let t={...e,paint:io(e.paint)};return e.alignment===`inside`?{...t,alignment:`center`}:t},uo=e=>{if(!C(e)||e.kind!==`span`)return e;let t=w(e,`decorationBlendMode`),n=eo(e.fills);n!==void 0&&(t.fills=n.map(e=>io(e))),C(e.stroke)&&(t.stroke=lo(e.stroke));let r=eo(e.children);return r!==void 0&&(t.children=r.map(e=>uo(e))),t},fo=(e,t)=>{let n=eo(t.fills);if(n===void 0)return;let[r]=n,i=C(r)?r.blendMode:void 0;typeof i==`string`&&n.length===1&&(e.blendMode??`normal`)===`normal`&&(t.blendMode=i),t.fills=n.map(e=>io(e))},po=(e,t)=>{let n={...e};`border`in e&&(n.border=ao(e.border)),`outline`in e&&(n.outline=ao(e.outline));let r=eo(e.fills);r!==void 0&&(n.fills=r.map(e=>so(e)));let i=eo(e.filters);return i!==void 0&&(n.filters=i.map(e=>oo(e))),t?(`shadows`in e&&(n.shadows=co(e.shadows)),fo(e,n),n):n},mo=e=>{let t=e.props;if(!C(t)||!C(t.paintFallback))return{...e};let n=t.paintFallback.mask;if(n===void 0)return{...e};let r=w(t.paintFallback,`mask`),i=Object.keys(r).length===0?w(t,`paintFallback`):{...t,paintFallback:r},a=e.styles,o=w(e,`props`);return C(n)&&C(a)&&(o.styles=Object.fromEntries(Object.entries(a).filter(([e,t])=>n[e]!==t))),Object.keys(i).length>0&&(o.props=i),o},ho=e=>{let t=e.compositing;return C(t)?t.groupMode===void 0?t.paintSemantics===`web`&&(e.component===`frame`||e.component===`group`):t.groupMode===`isolated`:!1},go=e=>{let t={...e};return`stroke`in e&&(t.stroke=lo(e.stroke)),C(e.decoration)&&(t.decoration=w(e.decoration,`blendMode`)),t},_o=e=>{if(!C(e))return e;let t=w(mo(e),`compositing`);ho(e)&&C(t.styles)&&(t.styles={...t.styles,isolation:`isolate`});let n=e.component===`text`;if(C(e.appearance)&&(t.appearance=po(e.appearance,n)),!n)return t;C(e.typography)&&(t.typography=go(e.typography));let r=t.props,i=C(r)?eo(r.richText):void 0;return i!==void 0&&C(r)&&(t.props={...r,richText:i.map(e=>uo(e))}),t},vo=e=>C(e)&&typeof e.sortKey==`string`?e.sortKey:``,yo=e=>{let t=new Map;for(let[n,r]of Object.entries(e)){if(!C(r)||typeof r.parentId!=`string`)continue;let e=t.get(r.parentId);e===void 0?t.set(r.parentId,[n]):e.push(n)}let n=t=>vo(e[t]),r=(e,t)=>n(e)<n(t)?-1:Number(n(e)>n(t));for(let e of t.values())e.sort(r);return t},bo=(e,t,n)=>({id:e,label:`Mask`,labelOrigin:`generated`,component:`group`,styles:{},geometry:{kind:`mask`,maskId:t,mode:n}}),xo=(e,t,n,r)=>{let i=``;for(let a of t){let t=ro(e[a]);t!==void 0&&(i=to(a),n[i]=bo(i,a,t),r[i]=r[a]);let o=r[a];i!==``&&C(o)&&(r[a]={...o,parentId:i})}},So=(e,t,n)=>{for(let[r,i]of yo(n)){let a=i.filter(t=>ro(e[t])!==void 0),[o]=i,s=t[r],c=ro(e[o]);c!==void 0&&a.length===1&&C(s)&&s.component===`group`&&s.geometry===void 0?t[r]={...s,geometry:{kind:`mask`,maskId:o,mode:c}}:xo(e,i,t,n)}},Co=e=>{let t=e.nodes;if(!C(t))return e;let n=Object.fromEntries(Object.entries(t).map(([e,t])=>[e,_o(t)]));if(!C(e.relationships))return{...e,nodes:n};let r={...e.relationships};return So(t,n,r),{...e,nodes:n,relationships:r}},wo=e=>typeof e==`object`&&!!e&&!Array.isArray(e),To=e=>Array.isArray(e),Eo=e=>{if(!wo(e))return e;let t={...e};return Reflect.deleteProperty(t,`blendMode`),Reflect.deleteProperty(t,`blendSource`),t},Do=e=>{if(!wo(e)||e.component!==`text`||!wo(e.appearance))return e;let t=e.appearance.shadows;return To(t)?{...e,appearance:{...e.appearance,shadows:t.map(e=>Eo(e))}}:e},Oo=e=>{let t=e.nodes;return wo(t)?{...e,nodes:Object.fromEntries(Object.entries(t).map(([e,t])=>[e,Do(t)]))}:e},ko=new Set([...Object.values(S),15]),Ao=e=>ko.has(e),jo=new Set([`format-number`,`text-shadow-blend`,`css`,`geometry`]),Mo=e=>typeof e==`object`&&!!e&&!Array.isArray(e),No=e=>{if(!Mo(e))return e;let t=Object.fromEntries(Object.entries(e).filter(([e])=>e!==`gridTrack`)),n=t.container;Mo(n)&&(t.container=Object.fromEntries(Object.entries(n).filter(([e])=>e!==`materialized`)));for(let e of[`horizontal`,`vertical`]){let n=t[e];Mo(n)&&n.mode===`hug`&&(t[e]=Object.fromEntries(Object.entries(n).filter(([e])=>e!==`basis`)))}return t},Po=e=>{let t=e.version;if(!Ao(t))return null;if(t===15||!Mo(e.nodes))return e;let n=Object.entries(Qa).find(([e])=>Number(e)===t)?.[1];return jo.has(n)?{...e,version:15}:Object.values(e.nodes).some(e=>Mo(e)&&e.geometry!==void 0)?null:n===`typography`?{...e,version:15}:{...e,version:15,nodes:Object.fromEntries(Object.entries(e.nodes).map(([e,t])=>[e,Mo(t)&&t.layout!==void 0?{...t,layout:No(t.layout)}:t]))}},Fo=e=>{let t=Po(e);return t===null||t===e||e.version===S.v13||e.version===S.v14?t:Oo(e.version===S.v12?t:Co(t))},Io=e=>{if(e===15)return`current`;if(typeof e!=`number`||!Number.isSafeInteger(e)||e<1)return`refused`;if(e>15)return`ahead`;let t=new Map(Object.entries(Qa).map(([e,t])=>[Number(e),t]));for(let n=e;n<15;n+=1)if(t.get(n)!==`format-number`)return`refused`;return`number-only`};m.strictObject({}),m.object({firstAgentWorkAt:m.iso.datetime().nullable()});const Lo=m.object({cursor:m.string().nullable().default(null),limit:m.number().int().min(1).max(100).default(20)}),Ro=e=>m.object({items:m.array(e),truncated:m.boolean()}),zo=2048,Bo=m.enum([`never-captured`,`capture-pending`,`extension-unavailable`,`capture-failed`,`source-mismatch`,`upload-incomplete`,`blob-missing`,`image-load-failed`,`unsupported-legacy-state`]),Vo=m.object({background:m.string().optional(),documentVersion:m.number().int().positive().optional(),thumbnailId:m.uuid(),url:m.string(),width:m.literal(528),height:m.literal(312),bytes:m.number().int().min(1).max(1048576)});m.object({canvasId:m.uuid(),thumbnailId:m.uuid(),clientReleaseIdentity:m.string().min(1).max(100),attemptedOperation:m.literal(`thumbnail-download`),recoveryOutcome:m.literal(`fallback-shown`)}),m.object({recorded:m.literal(!0)});const Ho=m.enum([`invite-only`,`link-view`,`link-comment`,`link-edit`]),Uo=m.enum([`owner`,`can-edit`,`can-comment`,`can-view`]),Wo=m.enum([`can-edit`,`can-comment`,`can-view`]),Go=m.object({read:m.boolean(),comment:m.enum([`yes`,`sign-in`,`no`]),edit:m.enum([`yes`,`sign-in`,`no`]).default(`no`),grants:m.array(m.object({source:m.enum([`direct`,`team`,`link`]),accessLevel:Uo})).default([]),grantableAccessLevels:m.array(Wo).default([]),share:m.boolean(),manage:m.boolean(),readHistory:m.boolean().default(!1)}),Ko=m.object({id:m.uuid(),title:m.string().min(1),accessState:Ho,organisationId:m.uuid().nullable(),sourceUrl:m.string().nullable(),unresolvedCount:m.number().int().min(0),viewerCan:Go,createdAt:m.iso.datetime(),lastActivityAt:m.iso.datetime()});m.object({title:m.string().trim().min(1),organisationId:m.uuid().nullable().default(null),sourceUrl:m.string().nullable().default(null)}),Ko.extend({version:m.number().int().positive()}),m.object({canvasId:m.uuid()});const qo=m.union([m.literal(`own`),m.literal(`everything`),m.uuid()]);m.object({collection:qo.default(`own`),title:m.string().trim().min(1).optional().describe(`Title text to match before returning canvas ids.`),deleted:m.boolean().default(!1),accessState:Ho.optional(),scope:m.enum([`all`,`mine`,`shared`]).default(`all`),hasUnresolved:m.boolean().default(!1)});const Jo=Ko.extend({screenCount:m.number().int().min(0),hasRecording:m.boolean(),lastViewedAt:m.iso.datetime().nullable()});Ro(m.union([Jo.extend({thumbnail:Vo}),Jo.extend({thumbnail:m.null(),thumbnailFallbackReason:Bo})])),m.object({canvasId:m.uuid(),title:m.string().trim().min(1)}),m.object({canvasId:m.uuid()}),m.object({canvasId:m.uuid(),deletedAt:m.iso.datetime()}),m.object({canvasId:m.uuid(),organisationId:m.union([m.uuid(),m.literal(`personal`)])}),m.object({canvas:Ko}),m.object({canvasId:m.uuid(),organisationId:m.union([m.uuid(),m.literal(`personal`)]),title:m.string().trim().min(1).optional()}),m.object({canvas:Ko}),m.object({canvasId:m.uuid(),sourceCanvasId:m.uuid().optional(),organisationId:m.union([m.uuid(),m.literal(`personal`)]),title:m.string().trim().min(1),document:m.record(m.string(),m.unknown()),screenIds:m.array(m.uuid())}),m.object({canvas:Ko,document:m.record(m.string(),m.unknown())}),m.object({canvasId:m.uuid(),confirmation:m.string().min(1)}),m.object({canvasId:m.uuid()}),m.object({canvasId:m.uuid(),accessState:Ho}),m.object({canvas:Ko,widened:m.boolean()}),m.object({canvasId:m.uuid()}),m.object({lastViewedAt:m.iso.datetime().nullable()}),m.object({canvasId:m.uuid()}),m.object({canvasId:m.uuid()});const Yo=/javascript|vbscript|data\s*:\s*text\/html|expression\s*\(|@import/iu,Xo=m.string().refine(e=>!Yo.test(e),`unsafe CSS value`),T=m.number(),E=m.number().nonnegative(),D=T,Zo=E,O=m.number().min(0).max(1),Qo=m.string().min(1),$o=m.object({space:m.enum([`srgb`,`display-p3`]),red:O,green:O,blue:O,alpha:O,definitionId:Qo.optional()}),es=m.object({id:Qo,position:O,color:$o}),ts=m.object({id:Qo,visible:m.boolean()}),ns=ts.extend({kind:m.literal(`blur`),value:Zo,parameter:m.enum([`radius`,`standard-deviation`]).optional()}),rs=[ts.extend({kind:m.literal(`brightness`),value:Zo}),ts.extend({kind:m.literal(`contrast`),value:Zo}),ts.extend({kind:m.literal(`grayscale`),value:O}),ts.extend({kind:m.literal(`hue-rotate`),value:D}),ts.extend({kind:m.literal(`invert`),value:O}),ts.extend({kind:m.literal(`saturate`),value:Zo}),ts.extend({kind:m.literal(`sepia`),value:O})],is=m.discriminatedUnion(`kind`,[ns,...rs]),as=m.discriminatedUnion(`kind`,[ns.extend({progression:m.object({startValue:Zo,start:m.object({x:D,y:D}),end:m.object({x:D,y:D})}).optional()}),...rs]),os=m.tuple([D,D,D,D,D,D]).refine(([e,t,n,r])=>e*r!==t*n,`paint transform must be invertible`),ss=m.enum([`normal`,`multiply`,`screen`,`overlay`,`darken`,`lighten`,`plus-lighter`,`color-dodge`,`color-burn`,`hard-light`,`soft-light`,`difference`,`exclusion`,`hue`,`saturation`,`color`,`luminosity`]),cs=m.object({kind:m.literal(`figma`),originalMode:m.string(),mappedMode:ss,sourceGuid:m.string().optional(),path:m.array(m.string())}),ls=m.object({id:Qo,blendMode:ss.optional(),blendSource:cs.optional(),visible:m.boolean(),opacity:O}),us=m.discriminatedUnion(`kind`,[ls.extend({kind:m.literal(`solid`),color:$o}),ls.extend({kind:m.literal(`linear-gradient`),angle:D,transform:os.optional(),stops:m.array(es).min(2)}),ls.extend({kind:m.literal(`radial-gradient`),center:m.object({x:D,y:D}),radius:m.object({x:Zo,y:Zo}),transform:os.optional(),stops:m.array(es).min(2)}),ls.extend({kind:m.literal(`angular-gradient`),transform:os,stops:m.array(es).min(2)}),ls.extend({kind:m.literal(`diamond-gradient`),transform:os,stops:m.array(es).min(2)}),ls.extend({kind:m.literal(`image`),assetId:m.string().min(1),fit:m.enum([`fill`,`cover`,`fit`,`crop`,`tile`]),tileScale:D.positive().optional(),tileOrigin:m.enum([`center`,`top-left`]).optional(),rotation:m.union([m.literal(0),m.literal(90),m.literal(180),m.literal(270)]).optional(),crop:m.object({x:O,y:O,width:O,height:O}).optional(),transform:os.optional(),filters:m.array(is).optional(),naturalSize:m.object({width:D.positive(),height:D.positive()}).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`]})]),ds=m.intersection(us,m.object({alternatives:m.partialRecord(m.enum([`solid`,`linear-gradient`,`radial-gradient`,`angular-gradient`,`diamond-gradient`,`image`]),us).optional(),recentGradient:m.enum([`linear-gradient`,`radial-gradient`,`angular-gradient`,`diamond-gradient`]).optional()})),fs=m.object({id:Qo,name:m.string().trim().min(1),value:m.union([$o.omit({definitionId:!0}),m.object({definitionId:Qo})]),source:m.object({kind:m.literal(`figma`),key:Qo,modeId:Qo.optional()}).optional()}),ps=m.object({op:m.literal(`setArtworkColor`),nodeId:m.literal(`root`),colorId:m.string().min(1),definition:fs.nullable()}).refine(e=>e.definition===null||e.definition.id===e.colorId,`colour identity must match`),ms=m.object({ratio:E,offset:T.optional()}),hs=m.object({min:E.optional(),max:E.optional(),minParent:ms.optional(),maxParent:ms.optional()}).refine(({min:e,max:t})=>e===void 0||t===void 0||e<=t,`size minimum cannot exceed maximum`),gs=m.discriminatedUnion(`mode`,[m.object({mode:m.literal(`fixed`),value:E}).strict(),hs.extend({mode:m.literal(`hug`),implicitExtent:E.optional()}).strict(),hs.extend({mode:m.literal(`fill`),offset:T.optional()}).strict()]),_s=m.object({top:E,right:E,bottom:E,left:E}),vs=m.union([m.literal(`auto`),T]),ys=m.object({top:vs,right:vs,bottom:vs,left:vs}),bs=m.object({mode:m.enum([`auto-fill`,`auto-fit`]),minimum:m.number().positive()}),xs=m.object({x:T,y:T}),Ss=m.object({direction:m.enum([`row`,`column`]),alignItems:m.enum([`start`,`center`,`end`,`stretch`]),alignContent:m.enum([`start`,`center`,`end`,`stretch`,`space-between`,`space-around`,`space-evenly`]).optional(),justifyContent:m.enum([`start`,`center`,`end`,`space-between`,`space-around`,`space-evenly`]),gap:T,rowGap:T.optional(),columnGap:T.optional(),crossGapMode:m.literal(`auto`).optional(),wrap:m.enum([`nowrap`,`wrap`]).optional(),gridColumns:m.number().int().positive().optional(),gridAutoRepeat:bs.optional(),padding:_s}).strict(),Cs=m.object({button:m.literal(!0).optional(),overflowClip:m.literal(!0).optional(),lineAboveBorderBottom:T.optional()}).strict(),ws=m.object({top:E.optional(),right:E.optional(),bottom:E.optional(),left:E.optional()}).strict(),Ts=m.object({ratio:T,offset:T.optional()}).strict(),Es=m.object({x:Ts.optional(),y:Ts.optional()}).strict(),Ds=m.object({rotation:T.optional(),flipHorizontal:m.boolean().optional(),flipVertical:m.boolean().optional(),aspectRatioLocked:m.boolean().optional(),aspectRatio:m.number().positive().optional(),horizontal:gs.optional(),vertical:gs.optional(),position:m.enum([`flow`,`absolute`]).optional(),retainedIgnore:m.literal(!0).optional(),gridParticipation:m.literal(`unassigned`).optional(),gridEmptyPlacement:m.literal(`manual`).optional(),gridAutoTrackPolicy:m.object({rows:m.literal(`extend-last`).optional(),columns:m.literal(`extend-last`).optional()}).strict().optional(),retainedFlexSpacing:m.object({gap:m.union([T,Xo.min(1)]),counterGap:m.union([T,Xo.min(1)]),crossGapMode:m.literal(`auto`).optional()}).strict().optional(),alignSelf:m.enum([`auto`,`start`,`center`,`end`,`stretch`]).optional(),flexGrow:E.optional(),flexShrink:E.optional(),flexBasis:m.union([m.literal(`auto`),E,ms]).optional(),flowOffset:xs.optional(),positionParent:Es.optional(),order:T.int().optional(),margin:ys.partial().optional(),clipContent:m.boolean().optional(),baselineSource:Cs.optional(),scrollbarGutter:ws.optional(),container:Ss.partial().extend({padding:_s.partial().optional()}).optional()}).strict(),Os=T,k=E,ks=m.number().min(0).max(1),As=m.string().min(1),js=m.object({topLeft:k,topRight:k,bottomRight:k,bottomLeft:k,smoothing:ks.optional()}),Ms=m.array(k).min(1),Ns=m.enum([`none`,`round`,`square`]),Ps=m.object({visible:m.boolean(),layoutInclusion:m.enum([`always`,`visible`,`none`]).optional(),width:m.object({top:k,right:k,bottom:k,left:k}),style:m.enum([`solid`,`dashed`,`dotted`]),paints:m.array(ds),dashPattern:Ms.optional(),dashCap:Ns.optional(),dashOrigin:m.literal(`css`).optional(),alignment:m.enum([`inside`,`center`,`outside`]).optional()}),Fs=Ps.pick({width:!0,style:!0,layoutInclusion:!0}),Is=m.object({visible:m.boolean(),width:k,offset:Os,style:m.enum([`solid`,`dashed`,`dotted`]),paints:m.array(ds),dashPattern:Ms.optional(),dashCap:Ns.optional()}),Ls=m.object({id:As,visible:m.boolean(),kind:m.enum([`outer`,`inner`]),color:$o,offsetX:Os,offsetY:Os,blur:k,spread:Os,blendMode:ss.optional(),blendSource:cs.optional(),isShownBehindNode:m.boolean().optional()}),Rs=m.object({opacity:ks,blendMode:ss,fills:m.array(ds),border:Ps,retainedBorder:Fs.optional(),outline:Is,radius:js,shadows:m.array(Ls),filters:m.array(is),backdropFilters:m.array(as)}),zs=Rs.partial().refine(e=>Object.keys(e).length>0,`appearance values cannot be empty`),Bs=[`opacity`,`blendMode`,`fills`,`border`,`retainedBorder`,`outline`,`radius`,`shadows`,`filters`,`backdropFilters`],Vs=m.enum(Bs),Hs=Rs.partial().extend({clear:m.array(Vs).min(1).max(Bs.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`),A=m.number(),j=m.number().nonnegative(),Us=m.string().regex(/^[\u{20}-\u{7E}]{4}$/u),Ws=Us.refine(e=>![`wght`,`opsz`].includes(e)),M=m.object({family:m.string().min(1),fallbackFamilies:m.array(m.string().min(1)),size:j,weight:m.number().min(1).max(1e3),variations:m.record(Ws,A).optional(),features:m.record(Us,m.number().int().nonnegative().max(65535)).optional(),opticalSize:m.discriminatedUnion(`mode`,[m.object({mode:m.literal(`auto`)}),m.object({mode:m.literal(`font-default`)}),m.object({mode:m.literal(`fixed`),value:A})]).optional(),style:m.enum([`normal`,`italic`,`oblique`]),lineHeight:m.discriminatedUnion(`mode`,[m.object({mode:m.literal(`normal`)}),m.object({mode:m.literal(`fixed`),value:j}),m.object({mode:m.literal(`percent`),value:j})]),letterSpacing:m.union([A,m.object({mode:m.literal(`percent`),value:A})]),align:m.enum([`left`,`center`,`right`,`justify`]),direction:m.enum([`auto`,`ltr`,`rtl`]).optional(),verticalAlign:m.enum([`top`,`middle`,`bottom`]),verticalTrim:m.enum([`none`,`cap-height`]).optional(),transform:m.enum([`none`,`uppercase`,`lowercase`,`capitalize`]),decoration:m.object({line:m.enum([`none`,`underline`,`line-through`]),style:m.enum([`solid`,`double`,`dotted`,`dashed`,`wavy`]),color:$o.optional(),blendMode:ss.optional(),thickness:m.union([j,m.object({mode:m.literal(`percent`),value:j}),m.object({mode:m.literal(`font-default`)})]).optional(),offset:m.union([A,m.object({mode:m.literal(`percent`),value:A})]).optional(),skipInk:m.enum([`auto`,`none`,`all`]).optional()}),stroke:m.object({width:j,paint:ds,alignment:m.enum([`center`,`outside`]).optional()}).optional(),wrapping:m.enum([`wrap`,`nowrap`,`pre`,`pre-line`,`pre-wrap`,`break-spaces`]),wrapStyle:m.enum([`auto`,`pretty`,`balance`]).optional(),paragraphSpacing:j.optional(),paragraphIndent:j.optional(),listStyle:m.enum([`none`,`bulleted`,`numbered`]).optional(),listSpacing:j.optional(),hangingList:m.boolean().optional(),hangingPunctuation:m.boolean().optional(),truncation:m.object({mode:m.enum([`none`,`ellipsis`]),maxLines:m.number().int().min(1).nullable()}).optional(),insets:m.object({top:A,right:A,bottom:A,left:A}).optional()}),Gs=M.pick({align:!0,direction:!0,wrapStyle:!0,paragraphSpacing:!0,paragraphIndent:!0,listStyle:!0,listSpacing:!0,hangingList:!0}).partial().extend({listLevel:m.number().int().min(1).optional(),listStart:m.number().int().min(1).optional()}).strict(),Ks=M.partial().strict(),qs=M.keyof().options,Js=Ks.extend({featureChanges:m.object({set:M.shape.features,clear:m.array(Us).optional(),removeIfEmpty:m.boolean().optional()}).strict().optional(),variationChanges:m.object({set:M.shape.variations,clear:m.array(Ws).optional(),removeIfEmpty:m.boolean().optional()}).strict().optional(),clear:m.array(M.keyof()).max(qs.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`),Ys={"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`],"paint-order":[`stroke`],"white-space":[`wrapping`],"text-wrap-style":[`wrapStyle`],"text-wrap":[`wrapStyle`]},Xs=/^(?:behavior|-moz-binding)$/iu,Zs=m.string().min(1).regex(/^(?:--[\w-]+|-(?:webkit|moz|ms|o)-[a-z][a-z\d-]*|[a-z][a-z\d-]*)$/iu).refine(e=>!Xs.test(e),`unsafe CSS property`),N=m.object({id:m.string().min(1),property:Zs,value:Xo,enabled:m.boolean()}),Qs=m.object({declarations:m.array(N)}).refine(({declarations:e})=>new Set(e.map(e=>e.id)).size===e.length,`additional style ids must be unique`),$s=m.array(N.shape.id).refine(e=>new Set(e).size===e.length,`declaration ids must be unique`),ec=m.object({set:m.array(N).refine(e=>new Set(e.map(e=>e.id)).size===e.length,`declaration ids must be unique`).optional(),clear:$s.optional(),order:$s.optional(),empty:m.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`),tc=M.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}).extend({decoration:M.shape.decoration.omit({blendMode:!0})}).strict(),nc=tc.keyof().options,rc=m.object({id:m.string().min(1),name:m.string().trim().min(1),description:m.string().max(2e3),sortKey:m.string().min(1).optional(),sourceStyleId:m.string().min(1).optional(),sourceCanvasId:m.uuid().optional(),sourceRevision:m.number().int().positive().optional(),typography:tc.extend({listStyle:M.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`]});m.object({id:rc.shape.id,position:m.enum([`normal`,`subscript`,`superscript`]).optional(),overrides:m.partialRecord(m.enum([`fontWeight`,`fontStyle`,`fontVariationSettings`,`fontOpticalSizing`,`textDecorationLine`,`textDecorationStyle`,`textDecorationColor`,`textDecorationThickness`,`textUnderlineOffset`,`textDecorationSkipInk`]),m.union([m.string().max(1e3),m.number()])).optional()}).strict();const ic=ds.array().optional();m.object({fills:ic}),Gs.pick({paragraphSpacing:!0,paragraphIndent:!0,listSpacing:!0,wrapStyle:!0}).extend({hangingPunctuation:M.shape.hangingPunctuation,verticalTrim:M.shape.verticalTrim,stroke:M.shape.stroke.nullable(),decorationBlendMode:M.shape.decoration.shape.blendMode,backgroundBlendMode:ss.optional()}).strip();const P=m.object({url:m.url(),expiresAt:m.iso.datetime(),headers:m.record(m.string(),m.string())}),ac=m.object({url:m.url(),expiresAt:m.iso.datetime(),bytes:m.number().int().min(0)}),oc=`/v1/canvas-assets/`,sc=[`image/avif`,`image/gif`,`image/jpeg`,`image/png`,`image/webp`],cc=m.string().regex(/^image\/[a-z0-9.+-]+$/u);m.object({canvasId:m.uuid(),contentType:m.enum(sc),bytes:m.number().int().positive()}),m.object({assetId:m.uuid(),path:m.string().startsWith(`/v1/canvas-assets/`),upload:P});const lc=(e,t)=>`${oc}${encodeURIComponent(e)}/${encodeURIComponent(t)}`,uc=m.tuple([m.uuid(),m.uuid()]),dc=e=>{if(!e.startsWith(`/v1/canvas-assets/`))return null;let t=uc.safeParse(e.slice(18).split(`/`)).data;return t===void 0?null:{canvasId:t[0],assetId:t[1]}},fc=[`font/ttf`,`font/otf`,`font/woff`,`font/woff2`,`font/collection`],pc=m.object({canvasId:m.uuid(),sha256:m.string().regex(/^[a-f0-9]{64}$/u)});pc.extend({bytes:m.number().int().positive()}).extend({contentType:m.enum(fc)}),m.object({path:m.string().startsWith(`/v1/canvas-assets/`)}).extend({upload:P});const mc=(e,t)=>`${oc}${encodeURIComponent(e)}/fonts/${encodeURIComponent(t)}`;m.object({canvasId:m.uuid(),sources:m.array(pc).min(1)}),m.object({resources:m.array(m.object({source:pc,path:m.string()}))});const hc=1e3,gc=new Set(fc),_c=(e,t)=>e===`image`?cc.safeParse(t).success:gc.has(t),vc=m.strictObject({canvasId:m.uuid(),clientToken:m.uuid()});m.discriminatedUnion(`kind`,[vc.extend({kind:m.literal(`image`),contentType:m.enum(sc),bytes:m.number().int().positive(),sha256:m.string().regex(/^[a-f0-9]{64}$/u)}),vc.extend({kind:m.literal(`font`),contentType:m.enum(fc),bytes:m.number().int().positive(),sha256:m.string().regex(/^[a-f0-9]{64}$/u)})]);const yc=m.discriminatedUnion(`kind`,[m.strictObject({kind:m.literal(`image`),width:m.number().int().positive(),height:m.number().int().positive()}),m.strictObject({kind:m.literal(`font`),family:m.string().min(1),subfamily:m.string(),style:m.enum([`normal`,`italic`,`oblique`]),minimumWeight:m.number().min(1).max(hc),maximumWeight:m.number().min(1).max(hc)}).refine(e=>e.minimumWeight<=e.maximumWeight,`Font weight bounds must be ordered.`)]);m.strictObject({canvasId:m.uuid(),clientToken:m.uuid(),assetId:m.uuid(),kind:m.enum([`image`,`font`]),contentType:m.string(),bytes:m.number().int().positive(),sha256:m.string().regex(/^[a-f0-9]{64}$/u),path:m.string().startsWith(`/v1/canvas-assets/`),state:m.enum([`awaiting_upload`,`ready`]),metadata:yc.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=>_c(e.kind,e.contentType),`Content type must match the asset kind.`).refine(e=>e.path===(e.kind===`image`?lc(e.canvasId,e.assetId):mc(e.canvasId,e.sha256)),`The resource path must match its native identity.`).safeExtend({upload:P.nullable()}).refine(e=>e.state===`awaiting_upload`==(e.upload!==null),`Only pending uploads receive upload access.`);const bc=[`top`,`right`,`bottom`,`left`];bc.map(e=>`padding-${e}`),bc.map(e=>`margin-${e}`);const xc=m.enum([`png`,`jpeg`]),Sc=m.number().positive(),Cc=m.strictObject({format:xc.optional(),scale:Sc.optional()}),wc=m.strictObject({format:xc.nullable().optional(),scale:Sc.nullable().optional()}).refine(e=>e.format!==void 0||e.scale!==void 0),Tc=m.number(),Ec=Tc.nonnegative(),Dc=m.string().min(1).max(200),Oc=m.string().regex(/^[MmLlHhVvCcSsQqTtAaZzEe\d\s.,+-]*$/u),kc=m.strictObject({x:Tc,y:Tc,width:Ec,height:Ec}),Ac=m.strictObject({kind:m.literal(`path`),path:Oc.min(1),fillRule:m.enum([`nonzero`,`evenodd`]),viewBox:kc.extend({width:Ec.positive(),height:Ec.positive()})}),jc=m.strictObject({kind:m.literal(`polygon`),count:m.number().int().min(3),innerRatio:m.number().min(0).max(1).optional(),cornerRadius:Ec,cornerSmoothing:m.number().min(0).max(1)}),Mc=m.enum([`union`,`subtract`,`intersect`,`exclude`]),Nc=m.strictObject({kind:m.literal(`boolean`),operation:Mc,operandIds:m.array(Dc).min(1).refine(e=>new Set(e).size===e.length),result:m.strictObject({path:Oc,fillRule:m.literal(`nonzero`),isEmpty:m.boolean(),bounds:kc,inputKey:m.string().regex(/^[a-f0-9]{16}$/u)}).refine(e=>e.isEmpty===(e.path===``))}),Pc=m.discriminatedUnion(`kind`,[Ac,jc,m.strictObject({kind:m.literal(`mask`),maskId:Dc,mode:m.enum([`alpha`,`luminance`,`outline`]).optional()}),Nc]),Fc=`Update Enhance: compositing is no longer supported. Use the isolation style or a mask group.`,Ic=`This change needs a newer version of Enhance. Refresh the editor, or update the Enhance plugin or command-line tool, then try again.`,Lc={forCaller:!0},Rc=m.number({error:Ic}).int({error:Ic}).positive({error:Ic}).meta({description:`The document format this client writes. The current format is 15.`,examples:[15]}),zc=(e,t,n)=>{let r=Io(e);r===`current`||r===`number-only`&&t===`names`||n.addIssue({code:`custom`,path:[`documentFormatVersion`],message:r===`ahead`?`Enhance is being updated. Try again in a minute.`:Ic,params:Lc,input:e})};m.object({signature:m.string().regex(/^[a-f0-9]{16}$/u),image:m.string().refine(e=>e.startsWith(`data:image/jpeg;base64,`)||dc(e)!==null),families:m.array(m.string().min(1)).min(1)});const F=m.object({x:m.number(),y:m.number(),width:m.number().nonnegative(),height:m.number().nonnegative()}),Bc=m.enum([`start`,`center`,`end`,`stretch`,`scale`]),Vc=m.object({x:Bc,y:Bc}),Hc=m.enum([`source`,`generated`,`content`,`user`]),I=m.looseObject({id:m.string().min(1),label:m.string(),component:m.string().min(1),labelOrigin:Hc.optional(),visible:m.boolean().optional(),locked:m.boolean().optional(),constraints:Vc.optional(),styles:m.record(m.string(),m.union([m.string(),m.number()])),layout:Ds.optional(),responsive:m.never().optional(),appearance:zs.optional(),exportSettings:Cc.optional(),typography:Ks.optional(),additionalStyles:Qs.optional(),geometry:Pc.optional(),compositing:m.never({error:Fc}).optional(),props:m.record(m.string(),m.unknown()).optional(),box:F.optional()}),Uc=m.object({version:m.literal(15),nodes:m.record(m.string(),I),relationships:m.record(m.string(),m.object({parentId:m.string().min(1),sortKey:m.string().min(1)})),tombstones:m.record(m.string(),m.literal(!0)).default({})}),Wc=m.record(m.string(),m.unknown());m.preprocess(e=>{let t=Wc.safeParse(e).data;return t===void 0?e:Object.keys(t).length===0?Gc():Fo(t)},Uc);const Gc=()=>({version:15,nodes:{root:{id:`root`,label:`Canvas`,component:`root`,labelOrigin:`generated`,visible:!0,locked:!1,styles:{}}},relationships:{},tombstones:{}}),Kc=m.string().min(1),qc=m.object({code:m.enum([`asset-unavailable`,`content-omitted`,`cross-origin-frame`,`nodes-truncated`,`responsive-behavior-not-editable`,`style-degraded`,`unsupported-surface`]),message:m.string().min(1),temporaryId:Kc.optional()}),Jc=m.enum([`text-stroke-inside`,`text-stroke-outside-translucent`,`text-stroke-paints`,`text-inner-shadow`,`text-shadow-spread`,`text-shadow-blend`,`text-background-blur`,`progressive-layer-blur`,`progressive-background-blur`,`blend-plus-darker`,`blend-linear-burn`,`image-exposure`,`image-contrast`,`image-saturation`,`image-temperature`,`image-tint`,`image-highlights`,`image-shadows`,`effect-noise`,`effect-texture`,`effect-glass`]),Yc=m.object({nodeCount:m.number().int().positive(),unsupportedFeatures:m.array(m.object({feature:Jc,count:m.number().int().positive()})).optional(),sourceNodeCount:m.number().int().positive().optional(),collapsedNodeCount:m.number().int().nonnegative().optional(),collapsedWrapperNodeCount:m.number().int().nonnegative().optional(),collapsedNeutralWrapperNodeCount:m.number().int().nonnegative().optional(),collapsedTransferredWrapperNodeCount:m.number().int().nonnegative().optional(),layoutContainerCount:m.number().int().nonnegative().optional(),removedLeafNodeCount:m.number().int().nonnegative().optional(),retainedSemanticOwnerNodeCount:m.number().int().nonnegative().optional(),truncatedNodeCount:m.number().int().nonnegative().optional(),addedLayoutNodeCount:m.number().int().nonnegative().optional(),issues:m.array(qc)}),Xc=I.omit({id:!0}).extend({temporaryId:Kc}),Zc=m.object({temporaryId:Kc,parentTemporaryId:Kc,sortKey:m.string().min(1)}),Qc=m.object({version:m.literal(1),rootTemporaryId:Kc,nodes:m.array(Xc).min(1),relationships:m.array(Zc),report:Yc.catch({nodeCount:0,issues:[]})}).transform(e=>({...e,report:{...e.report,nodeCount:e.nodes.length}})),$c=m.object({screenId:m.string().min(1),pageId:m.string().min(1),pictureNodeId:m.string().min(1).optional().describe(`The capture's picture, which the frame replaces in place and whose id it keeps. Refused as capture-already-landed once the picture is a frame.`)}),el={canvasId:m.uuid(),documentFormatVersion:Rc,mutationId:m.uuid(),baseVersion:m.number().int().positive(),draft:Qc};m.union([m.strictObject({...el,screenNodeId:m.string().min(1).describe(`The screen layer to convert beside itself.`)}),m.strictObject({...el,capture:$c.describe(`The stored page a new capture lands from, and the page its frame goes on.`)})]).superRefine((e,t)=>{zc(e.documentFormatVersion,`whole`,t)});const tl=m.object({canvasId:m.uuid(),mutationId:m.uuid(),previousVersion:m.number().int().positive(),version:m.number().int().positive(),rootNodeId:m.string().min(1),idMap:m.record(Kc,m.string().min(1)),insertedNodeIds:m.array(m.string().min(1)),removedNodeIds:m.array(m.string().min(1)),boxes:m.record(m.string().min(1),F),affectedBounds:F}),nl=[`queued`,`claimed`,`grant`,`navigate`,`document`,`sources`,`fonts`,`layout`,`target`,`capture`,`serialize`,`compile`,`commit`,`upload`,`complete`],rl=[`queued`,`running`,`succeeded`,`failed`,`cancelled`,`expired`],il=[`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`],al=[`ASSET_UNAVAILABLE`,`FONT_FALLBACK`,`LOCAL_FONT_FALLBACK`,`SOURCE_FALLBACK`,`SCALE_REDUCED`,`LAYOUT_FALLBACK`],ol=m.number().int().positive(),sl=m.object({x:m.number(),y:m.number(),width:m.number().positive(),height:m.number().positive()}),cl=m.discriminatedUnion(`kind`,[m.object({kind:m.literal(`content`)}),m.object({kind:m.literal(`page`),pageId:m.string().min(1)}),m.object({kind:m.literal(`node`),nodeId:m.string().min(1)}),m.object({kind:m.literal(`bounds`),bounds:sl})]),ll=m.object({kind:m.literal(`recording`),recordingId:m.uuid(),atMs:m.number().int().nonnegative()}),ul=m.object({kind:m.literal(`recording`),recordingId:m.uuid(),requestedAtMs:m.number().int().nonnegative(),settledAtMs:m.number().int().nonnegative()}),dl=m.object({recordingId:m.uuid(),atMs:m.number().int().nonnegative(),screenId:m.uuid(),screenNodeId:m.string().min(1).nullable(),pageId:m.string().min(1).optional(),viewport:m.object({width:m.number().int().positive(),height:m.number().int().positive()}),box:sl,version:m.number().int().positive(),alreadyPresent:m.boolean()}),fl=m.object({canvasId:m.uuid(),expectedVersion:m.number().int().positive().optional(),scope:m.strictObject({pageId:m.string().min(1).optional(),nodeIds:m.array(m.string().min(1))}).optional(),target:cl.default({kind:`content`}),sourceState:ll.optional(),scale:m.number().positive().default(1),maxOutputPixels:ol.optional(),format:m.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`]}),pl=m.enum(nl);m.enum(rl);const ml=m.enum(il),hl=m.enum(al),gl=m.object({code:hl,message:m.string().min(1).max(500),sourceId:m.string().min(1).nullable()}),L=m.object({reason:ml,phase:pl,message:m.string().min(1).max(500),retryable:m.boolean(),sourceId:m.string().min(1).nullable()}),_l=m.object({phase:pl,durationMs:m.number().int().min(0)}),vl=m.object({canvasId:m.uuid(),requestedVersion:m.number().int().positive(),loadedVersion:m.number().int().positive(),target:cl,sourceState:ul.optional(),snapshot:dl.optional(),bounds:sl,width:m.number().int().positive(),height:m.number().int().positive(),scale:m.number().positive(),contentType:m.literal(`image/png`),bytes:m.number().int().positive(),warnings:m.array(gl),timings:m.array(_l),expiresAt:m.iso.datetime()}),yl=m.object({id:m.uuid(),canvasId:m.uuid(),purpose:m.enum([`inspection`,`snapshot`,`thumbnail`,`export`]),phase:pl,requestedVersion:m.number().int().positive(),target:cl,sourceState:ll.optional(),scale:m.number().positive(),maxOutputPixels:ol.optional(),format:m.literal(`png`),attempt:m.number().int().min(0),lastFailure:L.optional(),createdAt:m.iso.datetime(),updatedAt:m.iso.datetime()}),bl=m.discriminatedUnion(`state`,[yl.extend({state:m.literal(`queued`),result:m.null(),failure:m.null()}),yl.extend({state:m.literal(`running`),result:m.null(),failure:m.null()}),yl.extend({state:m.literal(`succeeded`),phase:m.literal(`complete`),result:vl,failure:m.null()}),yl.extend({state:m.literal(`failed`),result:m.null(),failure:L}),yl.extend({state:m.literal(`cancelled`),result:m.null(),failure:L.extend({reason:m.literal(`CANCELLED`)})}),yl.extend({state:m.literal(`expired`),result:m.null(),failure:L.extend({reason:m.literal(`EXPIRED`)})})]);m.object({job:bl,alreadyExists:m.boolean()}),m.object({jobId:m.uuid()}).extend({waitMs:m.number().int().min(0).max(1e4).optional()}),m.object({job:bl}),m.object({jobId:m.uuid()}),m.object({job:bl});const xl=m.discriminatedUnion(`status`,[m.object({status:m.literal(`available`),version:m.number().int().positive(),format:m.literal(`enhance-scene-json`),code:m.string(),prototypes:m.array(m.object({nodeId:m.string(),prototypeId:m.uuid(),deploymentId:m.uuid(),capability:m.literal(`canvas.read`),canvasPath:m.string(),input:m.object({canvasRef:m.uuid(),view:m.literal(`source`),nodeId:m.string()}),guidance:m.string()})),guidance:m.string()}),m.object({status:m.literal(`unavailable`),guidance:m.string()})]);m.object({canvasId:m.uuid(),nodeId:m.string().min(1),expectedVersion:m.number().int().positive(),scale:m.number().positive()}),m.object({jobId:m.uuid()}),m.object({jobId:m.uuid(),download:ac,source:xl.optional()});const Sl=m.strictObject({previewJobId:m.uuid(),scope:m.strictObject({pageId:m.string().min(1).optional(),nodeIds:m.array(m.string().min(1))}),placement:m.strictObject({kind:m.enum([`below-source`,`editable-below-source`])})});m.object({canvasId:m.uuid(),recordingId:m.uuid(),atMs:m.number().int().nonnegative(),context:m.strictObject({expectedVersion:m.number().int().positive(),request:Sl}).optional()}),m.object({job:bl,alreadyExists:m.boolean()});const Cl=m.object({rootIds:m.array(m.string().min(1))}),wl=m.discriminatedUnion(`kind`,[m.object({kind:m.literal(`adjacent`)}),m.object({kind:m.literal(`insert-children`),pageId:m.string().min(1).optional(),targetNodeId:m.string().min(1)}),m.object({kind:m.literal(`replace`),targetNodeId:m.string().min(1),onlyPicture:m.literal(!0).optional()})]),Tl=m.discriminatedUnion(`kind`,[m.object({kind:m.literal(`screen`),nodeId:m.string().min(1)}),m.object({kind:m.literal(`html`),html:m.string().min(1),label:m.string().min(1),idPrefix:m.string().min(1).regex(/^[\w-]+$/u).optional()})]),El=m.object({source:Tl,destination:wl,revisionPolicy:m.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`]})}),Dl=m.discriminatedUnion(`kind`,[m.object({kind:m.literal(`screen`),nodeId:m.string().min(1)}),m.object({kind:m.literal(`html`),label:m.string().min(1)})]),Ol=m.object({id:m.uuid(),canvasId:m.uuid(),source:Dl,destination:wl,phase:pl,requestedVersion:m.number().int().positive(),attempt:m.number().int().nonnegative(),createdAt:m.iso.datetime(),updatedAt:m.iso.datetime()}),kl=m.discriminatedUnion(`state`,[Ol.extend({state:m.literal(`queued`),result:m.null(),failure:m.null()}),Ol.extend({state:m.literal(`running`),result:m.null(),failure:m.null()}),Ol.extend({state:m.literal(`succeeded`),phase:m.literal(`complete`),result:tl.extend({report:Yc}),failure:m.null()}),Ol.extend({state:m.literal(`failed`),result:m.null(),failure:L}),Ol.extend({state:m.literal(`cancelled`),result:m.null(),failure:L.extend({reason:m.literal(`CANCELLED`)})}),Ol.extend({state:m.literal(`expired`),result:m.null(),failure:L.extend({reason:m.literal(`EXPIRED`)})})]);El.and(m.object({canvasId:m.uuid(),expectedVersion:m.number().int().positive().optional(),mutationId:m.uuid().optional(),writeScope:Cl.optional(),scope:fl.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`]}),m.object({job:kl,alreadyExists:m.boolean()}),m.object({jobId:m.uuid()}),m.object({job:kl}),m.object({jobId:m.uuid()}),m.object({job:kl}),m.discriminatedUnion(`state`,[m.object({state:m.literal(`loading`),jobId:m.uuid()}),m.object({state:m.literal(`ready`),jobId:m.uuid(),loadedVersion:m.number().int().positive(),draft:Qc}),m.object({state:m.literal(`failed`),jobId:m.uuid(),message:m.string().min(1)})]);const Al=m.object({add:m.array(m.object({resourceId:m.string().min(1)}).catchall(m.unknown())),remove:m.array(m.string().min(1))}),R=m.union([m.string(),T]),z=m.union([N.shape.value,T]).nullable().optional(),jl=m.strictObject({border:z,"border-block":z,"border-block-color":z,"border-block-style":z,"border-block-width":z,"border-block-end":z,"border-block-end-color":z,"border-block-end-style":z,"border-block-end-width":z,"border-block-start":z,"border-block-start-color":z,"border-block-start-style":z,"border-block-start-width":z,"border-bottom":z,"border-bottom-color":z,"border-bottom-style":z,"border-bottom-left-radius":R.optional(),"border-bottom-right-radius":R.optional(),"border-bottom-width":R.optional(),"border-color":m.string().nullable().optional(),"border-image":z,"border-image-source":z,"border-image-slice":z,"border-image-width":z,"border-image-outset":z,"border-image-repeat":z,"border-inline":z,"border-inline-color":z,"border-inline-style":z,"border-inline-width":z,"border-inline-end":z,"border-inline-end-color":z,"border-inline-end-style":z,"border-inline-end-width":z,"border-inline-start":z,"border-inline-start-color":z,"border-inline-start-style":z,"border-inline-start-width":z,"border-left":z,"border-left-color":z,"border-left-style":z,"border-left-width":R.optional(),"border-radius":R.nullable().optional(),"border-right":z,"border-right-color":z,"border-right-style":z,"border-right-width":R.optional(),"border-style":z,"border-top":z,"border-top-color":z,"border-top-style":z,"border-top-left-radius":R.optional(),"border-top-right-radius":R.optional(),"border-top-width":R.optional(),"border-width":R.nullable().optional(),outline:z,"outline-color":z,"outline-style":z,"outline-offset":R.optional(),"outline-width":R.optional()}),Ml=m.string().regex(/^(?:\d+(?:\.\d+)?|\.\d+)px$/u),Nl=m.string().regex(/^-?(?:\d+(?:\.\d+)?|\.\d+)px$/u),Pl=N.shape.value.refine(e=>!/\burl\s*\(/iu.test(e),`invalid text colour`),Fl=m.union([M.shape.weight,m.enum([`normal`,`bold`,`bolder`,`lighter`]),m.string().regex(/^\d+(?:\.\d+)?$/u).refine(e=>M.shape.weight.safeParse(Number(e)).success)]),B={color:Pl,"font-family":N.shape.value,"font-size":m.union([E,Ml]),"font-weight":Fl,"font-style":m.enum([`normal`,`italic`,`oblique`]),"letter-spacing":T,"line-height":m.union([m.number().positive(),m.string().regex(/^(?:\d+(?:\.\d+)?(?:px|em|rem|%)?|normal)$/u)]),"text-align":m.enum([`left`,`center`,`right`]),"white-space":m.enum([`normal`,`nowrap`,`pre`,`pre-wrap`,`pre-line`,`break-spaces`])},Il=m.strictObject({color:B.color.optional(),"font-family":B[`font-family`].optional(),"font-size":B[`font-size`].optional(),"font-weight":B[`font-weight`].optional(),"font-style":B[`font-style`].optional(),"letter-spacing":B[`letter-spacing`].optional(),"line-height":B[`line-height`].optional(),"text-align":B[`text-align`].optional(),"white-space":B[`white-space`].optional()}),Ll=m.enum([`start`,`end`,`left`,`right`,`center`,`justify`,`justify-all`,`match-parent`,`-webkit-left`,`-webkit-right`,`-webkit-center`]),Rl=m.union([B[`font-style`],m.string().regex(/^oblique -?(?:\d+(?:\.\d+)?|\.\d+)deg$/u)]),V=m.union([N.shape.value,T]).nullable().optional(),zl=m.strictObject({"text-decoration":V,"text-decoration-line":V,"text-decoration-style":V,"text-decoration-color":V,"text-decoration-thickness":V,"text-underline-offset":V,"text-decoration-skip-ink":V,color:B.color.nullable().optional(),"font-family":B[`font-family`].nullable().optional(),"font-size":B[`font-size`].nullable().optional(),"font-weight":B[`font-weight`].nullable().optional(),"font-optical-sizing":m.enum([`auto`,`none`]).nullable().optional(),"font-variation-settings":N.shape.value.nullable().optional(),"font-feature-settings":N.shape.value.nullable().optional(),"text-wrap":N.shape.value.nullable().optional(),"text-wrap-mode":N.shape.value.nullable().optional(),"text-wrap-style":N.shape.value.nullable().optional(),"text-box":N.shape.value.nullable().optional(),"text-box-trim":N.shape.value.nullable().optional(),"text-box-edge":N.shape.value.nullable().optional(),"font-style":Rl.nullable().optional(),"font-stretch":m.union([m.enum([`normal`,`ultra-condensed`,`extra-condensed`,`condensed`,`semi-condensed`,`semi-expanded`,`expanded`,`extra-expanded`,`ultra-expanded`]),m.string().regex(/^\d+(?:\.\d+)?%$/u)]).nullable().optional(),"letter-spacing":m.union([T,Nl,m.literal(`normal`)]).nullable().optional(),"line-height":B[`line-height`].nullable().optional(),"text-align":Ll.nullable().optional(),"text-indent":m.union([T,Nl]).nullable().optional(),"white-space":B[`white-space`].nullable().optional(),"word-spacing":m.union([T,Nl,m.literal(`normal`)]).nullable().optional(),direction:V,"unicode-bidi":V,"hanging-punctuation":V,"text-transform":V,"-webkit-text-stroke":V,"-webkit-text-stroke-width":V,"-webkit-text-stroke-color":V,"paint-order":V}),Bl=N.shape.value,H=m.union([m.string(),T]),U=m.union([N.shape.value,T]).nullable().optional(),Vl=zl.extend(jl.shape).extend({"align-content":U,"align-items":U,"align-self":U,"aspect-ratio":U,"block-size":U,bottom:U,"box-sizing":U,display:U,flex:U,"flex-basis":U,"flex-direction":U,"flex-grow":U,"flex-shrink":U,"flex-wrap":U,grid:U,"grid-template":U,"grid-template-columns":U,"grid-template-rows":U,"grid-template-areas":U,"grid-auto-columns":U,"grid-auto-rows":U,"grid-auto-flow":U,"grid-row":U,"grid-column":U,"grid-area":U,"grid-row-start":U,"grid-row-end":U,"grid-column-start":U,"grid-column-end":U,"justify-items":U,"justify-self":U,"place-items":U,"place-self":U,"place-content":U,height:U,"inline-size":U,inset:U,"inset-block":U,"inset-block-end":U,"inset-block-start":U,"inset-inline":U,"inset-inline-end":U,"inset-inline-start":U,isolation:U,"justify-content":U,left:U,margin:U,"margin-block":U,"margin-block-end":U,"margin-block-start":U,"margin-inline":U,"margin-inline-end":U,"margin-inline-start":U,"max-block-size":U,"max-height":U,"max-inline-size":U,"max-width":U,"min-block-size":U,"min-height":U,"min-inline-size":U,"min-width":U,order:U,padding:U,"padding-block":U,"padding-block-end":U,"padding-block-start":U,"padding-inline":U,"padding-inline-end":U,"padding-inline-start":U,position:U,right:U,top:U,width:U,background:m.string().nullable().optional(),"background-color":m.string().nullable().optional(),"background-image":U,"background-size":U,"background-position":U,"background-repeat":U,"background-origin":U,"background-blend-mode":U,"box-shadow":m.string().nullable().optional(),"column-gap":H.optional(),gap:H.optional(),"margin-bottom":H.optional(),"margin-left":H.optional(),"margin-right":H.optional(),"margin-top":H.optional(),opacity:m.union([m.string(),m.number()]).nullable().optional(),overflow:Bl.nullable().optional(),"overflow-x":Bl.nullable().optional(),"overflow-y":Bl.nullable().optional(),"padding-bottom":H.optional(),"padding-left":H.optional(),"padding-right":H.optional(),"padding-top":H.optional(),"row-gap":H.optional(),"stroke-width":H.optional()}),Hl=m.union([Vl.keyof(),N.shape.property.refine(e=>e.startsWith(`--`))]),Ul=Vl.catchall(U).refine(e=>Object.keys(e).every(e=>Hl.safeParse(e).success)),Wl=m.record(m.string(),m.unknown()),Gl=m.number().int().positive(),Kl=m.discriminatedUnion(`kind`,[m.object({kind:m.literal(`retain`),count:Gl,attributes:Wl.optional(),shouldPreserveParagraph:m.boolean().optional()}),m.object({kind:m.literal(`delete`),count:Gl}),m.object({kind:m.literal(`insert`),text:m.string().min(1).refine(e=>e.isWellFormed()),attributes:Wl.optional(),shouldPreserveParagraph:m.boolean().optional()})]),ql=m.object({baseLength:m.number().int().nonnegative(),representation:m.enum([`plain`,`rich`,`links`]).optional(),steps:m.array(Kl),endAttributes:Wl.optional(),properties:Wl.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`})}),Jl=m.object({actionId:m.string().min(1),baseVersion:m.number().int().nonnegative(),isActive:m.boolean()}),Yl=m.object({baseVersion:m.number().int().nonnegative(),after:m.array(m.string().min(1)),change:ql}),Xl=m.object({actionId:m.string().min(1),baseVersion:m.number().int().nonnegative(),originalChange:ql,inverse:ql,history:Jl.optional(),source:Yl.optional()}),Zl=m.object({op:m.literal(`editText`),nodeId:m.string().min(1),change:ql,actionId:m.string().min(1).optional(),revision:Xl.optional(),history:Jl.optional(),source:Yl.optional()}),Ql=2e3,$l=m.object({title:m.string().trim().min(1).max(200)}).strict(),eu=m.array(rc.shape.id),tu=m.object({canvasId:m.uuid()}),nu=m.object({definition:rc.refine(e=>e.sourceStyleId===void 0),revision:m.number().int().positive(),fontFaces:m.array(m.record(m.string(),m.unknown()))}),ru=m.object({styles:m.array(nu).refine(e=>new Set(e.map(e=>e.definition.id)).size===e.length)});tu.extend({revision:m.number().int().positive(),documentVersion:m.number().int().positive(),description:m.string().max(Ql),publishedAt:m.iso.datetime(),...ru.shape}),tu.extend({mutationId:m.uuid(),expectedRevision:m.number().int().nonnegative(),documentVersion:m.number().int().positive(),publish:eu,remove:eu,description:m.string().trim().max(Ql)}).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.`});const iu=m.object({canvasId:m.uuid(),title:m.string().max(200)});m.object({search:m.string().trim().max(200).default(``),cursor:iu.nullable().default(null),limit:m.number().int().min(1).max(50).default(20)});const au=m.object({canvasId:m.uuid(),title:m.string(),organisationId:m.uuid().nullable(),revision:m.number().int().positive(),styleCount:m.number().int().positive(),publishedAt:m.iso.datetime()});m.object({items:m.array(au).max(50),nextCursor:iu.nullable()});const ou=m.object({parentId:m.string().min(1),sortKey:m.string().min(1)}),su=m.object({op:m.literal(`insertConvertedSubtree`),destination:wl,sourceNodeId:m.string().min(1).optional(),rootNodeId:m.string().min(1),nodes:m.record(m.string().min(1),I),relationships:m.record(m.string().min(1),ou)}),W=m.string().min(1),cu=F.extend({width:m.number().positive(),height:m.number().positive()}),lu=m.object({parentId:W,afterId:W.optional()}),uu=ou,du=m.object({op:m.literal(`setStyles`),nodeId:W,styles:Ul,clear:m.array(Hl).min(1).refine(e=>new Set(e).size===e.length).optional()}).refine(e=>(e.clear??[]).every(t=>!Object.hasOwn(e.styles,t))),fu=m.discriminatedUnion(`op`,[su,m.object({op:m.literal(`insertNode`),node:I,parentage:uu,prototypeSource:m.object({canvasId:m.uuid(),nodeId:W,documentVersion:m.number().int().nonnegative(),versionEntryId:m.uuid().optional()}).optional(),screenSource:m.object({canvasId:m.uuid()}).optional(),pageCopyBase:m.string().refine(e=>e.trim()!==``).optional()}),lu.extend({op:m.literal(`insertText`),nodeId:W,label:m.string().default(`Text`),text:m.string(),box:cu,styles:Il.default({})}),lu.extend({op:m.literal(`insertPrototype`),nodeId:W,label:m.string().default(`Prototype`),prototypeId:m.uuid(),deploymentId:m.uuid(),box:cu,canvasPageId:W.optional()}),m.object({op:m.literal(`setPrototypeDeployment`),nodeId:W,prototypeId:m.uuid(),deploymentId:m.uuid(),expected:m.object({prototypeId:m.uuid(),deploymentId:m.uuid()}).optional()}),Zl,m.object({op:m.literal(`setText`),nodeId:W,text:m.string()}),m.object({op:m.literal(`setBox`),nodeId:W,box:m.union([F,m.literal(`default`)])}),m.object({op:m.literal(`setLabel`),nodeId:W,label:m.string().trim().min(1),labelOrigin:Hc.nullable().optional()}),m.object({op:m.literal(`setContainerKind`),nodeId:W,component:m.enum([`frame`,`group`])}),m.object({op:m.literal(`setVisibility`),nodeId:W,visible:m.boolean().nullable()}),m.object({op:m.literal(`setLocked`),nodeId:W,locked:m.boolean().nullable()}),m.object({op:m.literal(`setConstraints`),nodeId:W,constraints:Vc.nullable()}),du,m.object({op:m.literal(`patchExportSettings`),nodeId:W,exportSettings:wc}),m.object({op:m.literal(`setAppearance`),nodeId:W,appearance:Hs}),m.object({op:m.literal(`setLayout`),nodeId:W,layout:m.union([Ds,m.literal(`default`)]),fields:m.array(Ds.keyof()).optional()}),m.object({op:m.literal(`patchTypography`),nodeId:W,typography:Js}),m.object({op:m.literal(`setTypography`),nodeId:W,typography:m.union([Ks,m.literal(`default`)])}),m.object({op:m.literal(`patchAdditionalStyles`),nodeId:W,additionalStyles:ec}),m.object({op:m.literal(`setAdditionalStyles`),nodeId:W,additionalStyles:m.union([Qs,m.literal(`default`)])}),ps,m.object({op:m.literal(`setTextStyleLibrary`),nodeId:m.literal(`root`),sourceCanvasId:m.uuid(),library:$l.nullable()}),m.object({op:m.literal(`patchFontLibrary`),nodeId:m.literal(`root`),fonts:Al}),m.object({op:m.literal(`setTextStyle`),nodeId:m.literal(`root`),styleId:rc.shape.id,textStyle:rc.nullable(),changedTextNodeIds:m.array(W).optional()}).refine(e=>e.textStyle===null||e.textStyle.id===e.styleId,`text style identity must match`),m.object({op:m.literal(`setGeometry`),nodeId:W,geometry:m.union([Pc,m.literal(`default`)])}),m.object({op:m.literal(`setProps`),nodeId:W,props:m.union([m.record(m.string(),m.unknown()),m.literal(`default`)])}),m.object({op:m.literal(`setParentage`),nodeId:W,parentage:uu}),lu.extend({op:m.literal(`move`),nodeId:W}),m.object({op:m.literal(`remove`),nodeId:W,removedText:m.record(W,I.pick({props:!0})).optional()})]),pu=fu.options.map(e=>e.shape.op.value),mu=m.preprocess((e,t)=>typeof e!=`object`||!e||Reflect.get(e,`op`)!==`setCompositing`?e:(t.issues.push({code:`custom`,message:Fc,input:e}),m.NEVER),fu);tl.extend({operation:su,next:m.array(m.string().min(1))});const hu=m.record(m.string(),m.unknown());m.object({canvasId:m.uuid(),afterVersion:m.number().int().positive().optional()});const gu=m.object({screenId:m.uuid(),clientToken:m.uuid(),route:m.string().nullable(),title:m.string().nullable(),viewport:m.object({width:m.number().int().positive(),height:m.number().int().positive()}),atMs:m.number().int().min(0).nullable(),sourceRecordingId:m.uuid().nullable(),assetBundle:m.object({assetBundleId:m.uuid(),sourceUrl:m.string(),assets:m.array(m.object({url:m.string(),contentType:m.string(),path:m.string().startsWith(`/v1/recording-assets/`)})),missingAssetCount:m.number().int().min(0)}).nullable(),download:ac.nullable()}),_u=m.object({mutationId:m.uuid(),previousVersion:m.number().int().positive(),version:m.number().int().positive(),operations:m.array(mu)});m.object({mutations:m.array(_u).optional(),version:m.number().int().min(1),restoreFenceVersion:m.number().int().positive().optional(),document:hu.optional(),screens:m.array(gu)}).extend({document:hu}),m.object({canvasId:m.uuid(),baseVersion:m.number().int().min(1),document:hu.refine(e=>Uc.safeParse(e).success,`A save requires a valid current-format canvas document.`),screenIds:m.array(m.uuid())}),m.discriminatedUnion(`outcome`,[m.object({outcome:m.literal(`saved`),version:m.number().int().min(1)}),m.object({outcome:m.literal(`conflict`),version:m.number().int().min(1),document:hu})]);const vu=m.object({start:m.number().int().nonnegative(),end:m.number().int().positive(),href:m.url().refine(e=>[`http:`,`https:`].includes(new URL(e).protocol))});m.object({text:m.string(),links:m.array(vu).optional()});const yu=m.enum([`position`,`layout`,`clip`,`cornerRadius`,`blending`,`typography`,`nativeControl`,`textDecoration`,`fill`,`outline`,`textStroke`,`border`,`outerShadow`,`innerShadow`,`filters`,`additionalStyles`,`vector`,`export`,`source`]),bu=m.object({id:m.string().min(1),label:m.string().max(500),kind:m.string().min(1).max(100),parentId:m.string().min(1).nullable(),childCount:m.number().int().min(0),box:F.nullable(),propertySections:m.array(yu)});m.object({canvasId:m.uuid()}),m.object({canvasId:m.uuid(),openUrl:m.url(),title:m.string().min(1),version:m.number().int().positive(),nodeCount:m.number().int().min(0),rootChildCount:m.number().int().min(0),bounds:F.nullable(),kinds:m.record(m.string(),m.number().int().min(0)),next:m.array(m.string().min(1))}),m.object({canvasId:m.uuid()}),m.object({canvasId:m.uuid(),version:m.number().int().positive(),nodes:m.array(bu)}),m.object({canvasId:m.uuid(),nodeId:m.string().min(1)}),m.object({canvasId:m.uuid(),version:m.number().int().positive(),node:bu.extend({styles:m.record(m.string(),m.union([m.string(),m.number()])),layout:Ds.optional(),appearance:zs.optional(),geometry:Pc.optional(),typography:Ks.optional(),additionalStyles:Qs.optional(),props:m.record(m.string(),m.unknown()),children:m.array(m.string().min(1))}),next:m.array(m.string().min(1))});const xu={insertConvertedSubtree:`whole`,insertNode:`whole`,insertText:`names`,insertPrototype:`names`,setPrototypeDeployment:`names`,editText:`names`,setText:`names`,setBox:`names`,setLabel:`names`,setContainerKind:`names`,setVisibility:`names`,setLocked:`names`,setConstraints:`names`,setStyles:`names`,patchExportSettings:`names`,setAppearance:`names`,setLayout:`whole`,patchTypography:`names`,setTypography:`whole`,patchAdditionalStyles:`names`,setAdditionalStyles:`whole`,setArtworkColor:`whole`,setTextStyleLibrary:`whole`,patchFontLibrary:`names`,setTextStyle:`whole`,setGeometry:`whole`,setProps:`whole`,setParentage:`names`,move:`names`,remove:`names`},Su=I.shape.id,Cu=F.extend({width:m.number().positive(),height:m.number().positive()}),wu=m.record(Su,Su),Tu=m.strictObject({fingerprint:m.string().regex(/^[a-f0-9]{64}$/u),revisionPolicy:m.enum([`strict`,`rebase`]),copiedNodeIds:wu.optional()});m.object({canvasId:m.uuid(),mutationId:m.uuid(),documentFormatVersion:Rc,baseVersion:m.number().int().positive(),operations:m.array(mu).min(1),requestContext:Tu.optional(),writeScope:Cl.optional()}).superRefine((e,t)=>{zc(e.documentFormatVersion,e.operations.every(e=>xu[e.op]===`names`)?`names`:`whole`,t)});const Eu=m.object({canvasId:m.uuid(),mutationId:m.uuid(),previousVersion:m.number().int().positive(),version:m.number().int().positive(),operations:m.array(mu),insertedNodeIds:m.array(Su),changedNodeIds:m.array(Su),removedNodeIds:m.array(Su),boxes:m.record(Su,F),affectedBounds:Cu.nullable(),copiedNodeIds:wu.optional(),next:m.array(m.string().min(1))});m.strictObject({canvasId:m.uuid(),mutationId:m.uuid(),fingerprint:Tu.shape.fingerprint}),m.discriminatedUnion(`state`,[m.strictObject({state:m.literal(`not-found`)}),m.strictObject({state:m.literal(`committed`),result:Eu})]);const Du={nodes:1e3,fields:20,id:200,label:500,value:1e3},Ou=m.object({available:m.boolean(),omittedNodes:m.number().int().nonnegative(),nodes:m.array(m.object({nodeId:m.string().min(1),label:m.string().max(Du.label),kind:m.enum([`inserted`,`removed`,`changed`,`unchanged`,`unavailable`]),omittedFields:m.number().int().nonnegative(),fields:m.array(m.object({label:m.string().max(Du.id),before:m.string().max(Du.value).nullable(),after:m.string().max(Du.value).nullable(),truncated:m.boolean()})).max(Du.fields)})).max(Du.nodes)}),ku=[`position`,`layout`,`cornerRadius`,`blending`,`fill`,`outline`,`border`,`outerShadow`,`innerShadow`,`filters`,`additionalStyles`,`export`],Au=[`position`,`layout`,`clip`,...ku.filter(e=>e!==`position`&&e!==`layout`)],ju=[...ku,`vector`];Object.fromEntries([{objectKind:`prototype`,label:`Prototype`,category:`import`,capabilities:{canSelect:!0,canContainChildren:!1,canEditProperties:!0,commentAnchor:`node`},capture:{preservesHtmlCssAssets:!0},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`reflow`,preservesAspect:!1,canLockAspectRatio:!0},propertySections:[`position`,`layout`,`cornerRadius`,`blending`,`outline`,`outerShadow`,`innerShadow`,`filters`]},{objectKind:`root`,label:`Canvas`,category:`container`,capabilities:{canSelect:!1,canContainChildren:!0,canEditProperties:!1},selectionBehavior:{hitTarget:`children`},propertySections:[]},{objectKind:`page`,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:Au},{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`,`filters`,`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:ku},{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:ku},{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:ju},{objectKind:`boolean`,label:`Boolean`,category:`container`,capabilities:{canSelect:!0,canContainChildren:!0,canEditProperties:!0,commentAnchor:`node`},capture:{preservesVectorData:!0},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`scale`,preservesAspect:!1,canLockAspectRatio:!0},propertySections:ju},{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]));const G=I.shape.id,Mu=m.array(G).min(1),Nu=m.strictObject({x:m.number(),y:m.number()}),Pu=m.strictObject({width:m.number().positive().optional(),height:m.number().positive().optional()}).refine(e=>e.width!==void 0||e.height!==void 0,{message:`Specify width, height, or both.`}),Fu=m.discriminatedUnion(`kind`,[m.strictObject({kind:m.literal(`position`),nodeId:G,parentPosition:Nu}),m.strictObject({kind:m.literal(`resize`),nodeId:G,size:Pu}),m.strictObject({kind:m.literal(`relative-position`),nodeId:G,referenceNodeId:G,side:m.enum([`above`,`below`,`left`,`right`]),gap:m.number().nonnegative(),align:m.enum([`start`,`center`,`end`])}),m.strictObject({kind:m.literal(`move`),nodeIds:Mu,targetNodeId:G,position:m.enum([`before`,`inside`,`after`])}),m.strictObject({kind:m.literal(`group`),nodeIds:Mu,label:m.string().min(1).optional()}),m.strictObject({kind:m.literal(`ungroup`),nodeIds:Mu}),m.strictObject({kind:m.literal(`label`),nodeId:G,label:m.string().min(1)}),m.strictObject({kind:m.literal(`visibility`),nodeId:G,visible:m.boolean()}),m.strictObject({kind:m.literal(`lock`),nodeId:G,locked:m.boolean()})]),Iu=m.strictObject({kind:m.literal(`arrange`),changes:m.array(Fu).min(1)}),Lu=m.strictObject({kind:m.literal(`duplicate`),nodeIds:Mu,destination:m.discriminatedUnion(`kind`,[m.strictObject({kind:m.literal(`native`)}),m.strictObject({kind:m.literal(`inside`),parentId:G})])}),Ru=m.discriminatedUnion(`kind`,[m.strictObject({kind:m.literal(`compile-screens`),sources:m.array(m.strictObject({screenId:m.uuid(),captureId:m.uuid(),label:m.string().min(1)})).min(1),landing:m.literal(`editable-frame`).optional().describe(`Lands the page as an ordinary editable frame. Without it, the layers belong to a capture run.`)}),Iu,Lu,m.strictObject({kind:m.literal(`compile-html`),contextOperations:m.array(mu).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:m.array(m.strictObject({id:G,parentNodeId:G,html:m.string().min(1)})).min(1).refine(e=>new Set(e.map(e=>e.id)).size===e.length,`HTML fragment ids must be unique.`)})]),zu=m.strictObject({pageId:G.optional(),nodeIds:m.array(G)}),Bu=m.strictObject({request:Ru,scope:zu}),Vu=m.strictObject({operations:m.array(mu),idMap:m.record(G,G),rootNodeIds:m.array(G)}),Hu=Vu.extend({compilations:m.array(m.strictObject({id:G,draft:Qc,warnings:m.array(gl).optional()})).optional()});m.discriminatedUnion(`state`,[m.object({state:m.literal(`loading`),jobId:m.uuid()}),m.object({state:m.literal(`ready`),jobId:m.uuid(),loadedVersion:m.number().int().positive(),plan:Hu}),m.object({state:m.literal(`failed`),jobId:m.uuid(),message:m.string().min(1),reason:m.enum([`SOURCE_FAILED`,`PREPARATION_FAILED`]).optional(),retryable:m.boolean().optional()})]);const Uu=m.object({id:m.uuid(),canvasId:m.uuid(),requestedVersion:m.number().int().positive(),request:Ru,scope:zu,phase:pl,attempt:m.number().int().nonnegative(),createdAt:m.iso.datetime(),updatedAt:m.iso.datetime()}),Wu=m.discriminatedUnion(`state`,[Uu.extend({state:m.enum([`queued`,`running`]),result:m.null(),failure:m.null()}),Uu.extend({state:m.literal(`succeeded`),phase:m.literal(`complete`),result:Vu.extend({loadedVersion:m.number().int().positive()}),failure:m.null()}),Uu.extend({state:m.enum([`failed`,`cancelled`,`expired`]),result:m.null(),failure:L})]);m.strictObject({canvasId:m.uuid(),expectedVersion:m.number().int().positive(),request:Ru,scope:zu}),m.object({job:Wu,alreadyExists:m.boolean()}),m.object({jobId:m.uuid()}),m.object({job:Wu});const Gu=m.string().trim().min(1).max(80).regex(/^[\w .+/-]+$/u),Ku=m.strictObject({path:m.enum([`local_mcp`,`hosted_mcp`,`direct_cli`]),name:Gu.optional(),version:Gu.optional()});Ku.pick({path:!0}).strip();const qu=m.strictObject({agent_client:m.enum([`claude_code`,`codex`,`cursor`,`unknown`]),connection_path:Ku.shape.path,identity_source:m.enum([`mcp_client_info`,`documented_cli_fallback`,`unavailable`]),auth_method:m.enum([`personal_agent_token`,`mcp_oauth`]),agent_client_version:Gu.optional()}),Ju=m.enum([`green`,`blue`,`indigo`,`amber`,`lime`,`teal`,`cyan`,`sky`,`violet`,`purple`,`fuchsia`,`pink`]),Yu=m.string().regex(/^[0-9a-f]{32}$/),Xu=m.object({viewKey:Yu.optional(),admissionOrder:m.number().int().nonnegative().optional(),followColour:Ju.optional()}),Zu=m.object({pageId:m.string().min(1).nullable().optional(),followingViewKey:Yu.nullable().optional()}),Qu=`enhance3.canvas.v1`,$u=16384,ed=m.enum([`blue`,`violet`,`green`,`amber`,`magenta`,`teal`,`red`,`orange`]),td=m.object({kind:m.literal(`person`),connectionId:m.uuid(),personId:m.uuid(),displayName:m.string().min(1).max(100),initials:m.string().min(1).max(8),avatarUrl:m.string().max(zo).nullable().optional(),colour:ed}),nd=td.extend(Xu.shape),rd=m.object({kind:m.literal(`guest`),connectionId:m.uuid(),displayName:m.string().min(1).max(100),initials:m.string().min(1).max(8),colour:ed,...Xu.shape}),id=m.discriminatedUnion(`kind`,[nd,rd]),ad=m.object({kind:m.literal(`agent`),personId:m.uuid(),displayName:m.string().min(1).max(100),initials:m.string().min(1).max(8),tokenLabel:m.string().min(1).max(100),agentAttribution:qu.optional(),colour:ed}),od=m.discriminatedUnion(`kind`,[td.omit({connectionId:!0,avatarUrl:!0}),ad]),sd=m.object({x:m.number(),y:m.number()}),cd=F.extend({width:m.number().positive(),height:m.number().positive()}),ld=m.object({count:m.number().int().positive(),bounds:cd.nullable()}),ud=m.object({kind:m.enum([`drag`,`resize`]),baseVersion:m.number().int().positive(),boxes:m.record(m.string().min(1),cd).refine(e=>Object.keys(e).length<=100&&new TextEncoder().encode(JSON.stringify(e)).byteLength<=16384),summary:ld.optional()}),dd=m.object({cursor:sd.nullable().optional(),input:m.enum([`pointer`,`touch`,`keyboard`]).optional(),focused:m.boolean().optional(),selectedNodeIds:m.array(m.string().min(1)).max(100).refine(e=>new TextEncoder().encode(JSON.stringify(e)).byteLength<=$u).optional(),selectionSummary:ld.nullable().optional(),visibleWorldBox:cd.optional(),gesture:ud.nullable().optional(),cursorChat:m.string().max(140).nullable().optional(),...Zu.shape}).refine(e=>Object.keys(e).length>0,`presence patch cannot be empty`),fd=m.object({actor:id,seq:m.number().int().nonnegative(),cursor:sd.nullable(),input:m.enum([`pointer`,`touch`,`keyboard`]),focused:m.boolean(),selectedNodeIds:m.array(m.string().min(1)).max(100).refine(e=>new TextEncoder().encode(JSON.stringify(e)).byteLength<=$u),selectionSummary:ld.nullable().optional(),visibleWorldBox:cd.nullable(),gesture:ud.nullable(),cursorChat:m.string().max(140).nullable().default(null),...Zu.shape,followOrder:m.number().int().nonnegative().optional(),expiresAt:m.iso.datetime()}),pd=m.enum([`reading`,`writing`,`creating`,`deleting`,`rendering`]),md=m.object({activityId:m.uuid(),canvasId:m.uuid(),actor:ad,phase:pd,nodeIds:m.array(m.string().min(1)).max(100),bounds:cd.nullable(),expiresAt:m.iso.datetime()}),hd=m.object({canvasId:m.uuid(),phase:pd,nodeIds:m.array(m.string().min(1)).max(100).default([]),bounds:cd.nullable().default(null)});m.object({activityId:m.uuid(),expiresAt:m.iso.datetime(),renewAfterMs:m.number().int().positive()}),hd.extend({activityId:m.uuid()}),m.object({canvasId:m.uuid(),activityId:m.uuid()}),m.object({ended:m.literal(!0)});const K={v:m.literal(1),seq:m.number().int().nonnegative()};m.discriminatedUnion(`type`,[m.object({...K,type:m.literal(`access.changed`),payload:m.object({})}),m.object({...K,type:m.literal(`comments.changed`),payload:m.object({threadId:m.uuid()})}),m.object({...K,type:m.literal(`resources.changed`),payload:m.object({})}),m.object({...K,type:m.literal(`room.snapshot`),payload:m.object({connectionId:m.uuid(),viewKey:Xu.shape.viewKey,peers:m.array(fd),activities:m.array(md),documentVersion:m.number().int().positive()})}),m.object({...K,type:m.literal(`presence.patch`),payload:fd}),m.object({...K,type:m.literal(`presence.left`),payload:m.object({connectionId:m.uuid()})}),m.object({...K,type:m.literal(`agent.activity`),payload:m.object({activityId:m.uuid(),activity:md.nullable()})}),m.object({...K,type:m.literal(`document.committed`),payload:m.object({mutationId:m.uuid(),actor:od,previousVersion:m.number().int().positive(),version:m.number().int().positive(),operations:m.array(mu).min(1)})}),m.object({...K,type:m.literal(`sync.required`),payload:m.object({version:m.number().int().positive(),reason:m.enum([`gap`,`relay`,`replace`,`history-restored`])})}),m.object({...K,type:m.literal(`room.ping`),payload:m.object({pingId:m.uuid(),sentAt:m.iso.datetime()})}),m.object({...K,type:m.literal(`room.error`),payload:m.object({code:m.enum([`auth`,`permission`,`protocol`,`payload`,`rate`,`unavailable`]),message:m.string().min(1).max(200)})})]),m.discriminatedUnion(`type`,[m.object({v:m.literal(1),type:m.literal(`presence.patch`),seq:m.number().int().nonnegative(),payload:dd}),m.object({v:m.literal(1),type:m.literal(`selection.chunk`),seq:m.number().int().nonnegative(),payload:m.object({transferId:m.uuid(),offset:m.number().int().nonnegative(),total:m.number().int().positive(),nodeIds:m.array(m.string().min(1)).min(1).max(1e3)})}),m.object({v:m.literal(1),type:m.literal(`selection.unavailable`),seq:m.number().int().nonnegative(),payload:m.object({count:m.number().int().positive()})}),m.object({v:m.literal(1),type:m.literal(`room.pong`),seq:m.number().int().nonnegative(),payload:m.object({pingId:m.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),m.object({canvasId:m.uuid(),protocols:m.array(m.literal(Qu)).min(1).max(1),viewId:m.uuid().optional()}),m.object({endpoint:m.url(),ticket:m.string().min(1).max(4096),protocol:m.literal(Qu),expiresAt:m.iso.datetime()}),m.uuid();const gd=I.shape.id;m.array(gd),m.object({jobId:m.uuid()});const _d=m.object({jobId:m.uuid(),canvasId:m.uuid(),requestedVersion:m.number().int().positive(),target:cl,sourceState:ll.optional()});m.discriminatedUnion(`purpose`,[_d.extend({purpose:m.literal(`preparation`),preparation:Bu,screens:m.array(gu).optional(),attempts:m.strictObject({counted:m.number().int().nonnegative(),limit:m.number().int().positive()}).optional(),deadlineAt:m.iso.datetime().optional(),sourceState:m.undefined().optional(),scale:m.literal(1),format:m.literal(`json`)}),_d.extend({purpose:m.enum([`inspection`,`snapshot`,`thumbnail`,`export`]),scale:m.number().positive(),maxOutputPixels:ol.optional(),format:m.literal(`png`)}),_d.extend({purpose:m.literal(`conversion`),target:m.object({kind:m.literal(`node`),nodeId:m.string().min(1)}),sourceState:m.undefined().optional(),conversion:El,scale:m.literal(1),format:m.literal(`json`)})]),m.object({jobId:m.uuid()}),m.object({jobId:m.uuid()});const vd=m.object({jobId:m.uuid(),canvasId:m.uuid(),requestedVersion:m.number().int().positive(),grantToken:m.string().startsWith(`rgr_`).min(40).max(100),grantCookieName:m.string().min(1).max(100),renderUrl:m.url(),deadlineAt:m.iso.datetime().optional(),releaseIdentity:m.string().min(1).max(100)});m.discriminatedUnion(`purpose`,[vd.extend({purpose:m.literal(`preparation`),target:cl,preparation:Bu,sourceState:m.undefined().optional(),scale:m.literal(1)}),vd.extend({purpose:m.enum([`inspection`,`snapshot`,`thumbnail`,`export`]),target:cl,sourceState:ll.optional(),scale:m.number().positive(),maxOutputPixels:ol.optional(),outputKey:m.string().min(1).max(500)}),vd.extend({purpose:m.literal(`conversion`),target:m.object({kind:m.literal(`node`),nodeId:m.string().min(1).max(200)}),sourceState:m.undefined().optional(),conversion:El,scale:m.literal(1)})]),m.object({jobId:m.uuid(),loadedVersion:m.number().int().positive(),bounds:sl,width:m.number().int().positive(),height:m.number().int().positive(),scale:m.number().positive(),bytes:m.number().int().positive(),storageKey:m.string().min(1).max(500),warnings:m.array(gl),timings:m.array(_l),sourceState:ul.optional(),snapshot:m.object({artifactBytes:m.number().int().positive(),artifactStorageKey:m.string().min(1).max(500),route:m.string().optional(),title:m.string().optional(),viewport:m.object({width:m.number().int().positive(),height:m.number().int().positive()})}).optional()}),m.object({accepted:m.literal(!0)}),m.object({jobId:m.uuid(),loadedVersion:m.number().int().positive(),draft:Qc}),m.object({accepted:m.literal(!0)}),m.object({recordingId:m.uuid(),requestedAtMs:m.number().int().nonnegative(),settledAtMs:m.number().int().nonnegative(),artifact:m.string().min(1),route:m.string().optional(),title:m.string().optional(),viewport:m.object({width:m.number().int().positive(),height:m.number().int().positive()})}),m.object({jobId:m.uuid(),failure:L}),m.object({accepted:m.literal(!0),willRetry:m.boolean()}),m.object({workerId:m.string().regex(/^[\w.-]+$/u).min(1).max(100),releaseIdentity:m.string().min(1).max(100),timestamp:m.coerce.number().int().nonnegative(),nonce:m.uuid(),mac:m.base64().min(32).max(200)});const yd=m.object({total:m.number().int().nonnegative(),loading:m.number().int().nonnegative(),unavailable:m.number().int().nonnegative()}),bd=m.object({jobId:m.uuid(),canvasId:m.uuid().nullable(),requestedVersion:m.number().int().positive().nullable(),loadedVersion:m.number().int().positive().nullable(),phase:pl.exclude([`queued`,`claimed`,`capture`,`upload`,`complete`]),sources:yd,warnings:m.array(gl),timings:m.array(_l),sourceState:ul.optional()}),xd=m.object({selector:m.string().min(1).max(500),contentSelector:m.string().min(1).max(500).optional(),expectsPaint:m.boolean().optional(),bounds:sl,width:m.number().int().positive(),height:m.number().int().positive(),scale:m.number().positive()});m.discriminatedUnion(`state`,[bd.extend({state:m.literal(`loading`),capture:m.null(),failure:m.null()}),bd.extend({state:m.literal(`ready`),phase:m.literal(`target`),canvasId:m.uuid(),requestedVersion:m.number().int().positive(),loadedVersion:m.number().int().positive(),capture:xd,failure:m.null()}),bd.extend({state:m.literal(`failed`),failure:m.object({reason:ml,message:m.string().min(1).max(500),sourceId:m.string().min(1).max(200).nullable(),overtaken:m.boolean().optional()}),capture:m.null()})]),m.object({jobId:m.uuid(),loadedVersion:m.number().int().positive(),plan:Hu});const Sd=m.string().min(1);m.object({canvasId:m.uuid()}),m.object({canvasId:m.uuid(),status:m.enum([`selected`,`none`,`offline`,`stale`,`updating`,`unsupported`]),documentVersion:m.number().int().positive(),selectionRevision:m.number().int().positive().nullable(),selectionChangedAt:m.iso.datetime().nullable(),selectedNodeIds:m.array(Sd),missingNodeIds:m.array(Sd),nodes:m.array(bu),contextRootId:Sd.nullable(),visibleWorldBox:sl.nullable(),next:m.array(m.string().min(1)).max(12)});const Cd=m.discriminatedUnion(`kind`,[m.object({kind:m.literal(`recording`),recordingId:m.string()})]),wd=m.discriminatedUnion(`state`,[m.object({state:m.literal(`converting`)}),m.object({state:m.literal(`failed`),reason:m.string().min(1).max(200)})]);m.object({html:m.string().optional(),viewport:m.object({width:m.number(),height:m.number()}),atMs:m.number(),screenId:m.string().nullable().default(null),sourceNodeId:m.string().optional(),provenance:Cd.optional(),landing:wd.optional()}),m.object({provenance:Cd.optional(),report:Yc.optional()}),m.object({recordingId:m.string()}),m.object({prototypeId:m.uuid(),deploymentId:m.uuid()}),m.object({preparedExperience:m.enum([`agent-connection`,`whisper-prototype`]),ownerPersonId:m.uuid(),resources:m.array(m.string().min(1))});const Td=new Set(nc);new Set(Object.entries(Ys).flatMap(([e,t])=>t.some(e=>Td.has(e))?[e.replaceAll(/-([a-z])/gu,(e,t)=>t.toUpperCase())]:[]));const Ed=new Set(nc);new Set(Object.entries(Ys).flatMap(([e,t])=>t.some(e=>Ed.has(e))?[e]:[]));const Dd=1e3,Od=m.discriminatedUnion(`kind`,[m.object({kind:m.literal(`person`),personId:m.uuid(),displayName:m.string().min(1).max(200),initials:m.string().min(1).max(2)}),m.object({kind:m.literal(`agent`),personId:m.uuid(),displayName:m.string().min(1).max(200),initials:m.string().min(1).max(2),tokenLabel:m.string().min(1).max(200)})]),kd=m.object({id:m.uuid(),canvasId:m.uuid(),documentVersion:m.number().int().positive(),origin:m.enum([`automatic`,`manual`,`restore`]),restoreRole:m.enum([`before`,`result`]).nullable(),retention:m.enum([`automatic`,`named`,`restore-boundary`]),title:m.string().min(1).nullable(),description:m.string().max(Dd).nullable(),actor:Od,sourceVersionEntryId:m.uuid().nullable(),expiresAt:m.iso.datetime().nullable(),checkpointAt:m.iso.datetime(),createdAt:m.iso.datetime(),updatedAt:m.iso.datetime(),screenCount:m.number().int().min(0)});m.object({canvasId:m.uuid(),limit:m.number().int().min(1).max(100).default(50),cursor:m.string().min(1).max(1e3).optional(),includeAutomatic:m.boolean().default(!1),actor:m.enum([`all`,`mine`]).default(`all`)}),m.object({current:m.object({documentVersion:m.number().int().positive(),updatedAt:m.iso.datetime()}),items:m.array(kd),nextCursor:m.string().min(1).nullable(),hasExpiredHistory:m.boolean()}),m.object({canvasId:m.uuid(),versionId:m.uuid()});const Ad=m.object({outcome:m.literal(`ready`),entry:kd,document:hu,screens:m.array(gu)}),jd=m.object({outcome:m.literal(`missing-resources`),entry:kd,document:hu,screens:m.array(gu),missingScreenIds:m.array(m.uuid()).min(1)});m.discriminatedUnion(`outcome`,[Ad,jd,m.object({outcome:m.literal(`corrupt`),entry:kd})]);const Md=m.discriminatedUnion(`kind`,[m.object({kind:m.literal(`current`),expectedVersion:m.number().int().positive()}),m.object({kind:m.literal(`version`),versionId:m.uuid()})]);m.object({canvasId:m.uuid(),target:Md,title:m.string().trim().min(1),description:m.string().trim().max(Dd).nullable().default(null)}),m.object({canvasId:m.uuid(),versionId:m.uuid(),title:m.string().trim().min(1),description:m.string().trim().max(Dd).nullable().default(null)}),m.object({canvasId:m.uuid(),versionId:m.uuid()}),m.object({entry:kd});const Nd=(e,t)=>{zc(e.documentFormatVersion,`names`,t)};m.object({canvasId:m.uuid(),documentFormatVersion:Rc,versionId:m.uuid(),expectedVersion:m.number().int().positive()}).superRefine(Nd),m.object({canvasId:m.uuid(),version:m.number().int().positive(),beforeVersionId:m.uuid(),restoredVersionId:m.uuid(),restoreFenceVersion:m.number().int().positive()}),m.object({canvasId:m.uuid(),documentFormatVersion:Rc,versionId:m.uuid(),organisationId:m.union([m.uuid(),m.literal(`personal`)]),title:m.string().trim().min(1).optional()}).superRefine(Nd),m.object({canvasId:m.uuid(),title:m.string().min(1),version:m.literal(1)}),m.object({canvasId:m.uuid(),sourceCanvasId:m.uuid(),recordingIds:m.array(m.uuid()).min(1)}),m.object({copies:m.array(m.object({sourceRecordingId:m.uuid(),recordingId:m.uuid()}))});const Pd=(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))},Fd=m.string().regex(/^[a-f0-9]{64}$/u),Id=m.string().trim().min(1),Ld=m.object({organisationId:m.uuid().nullable()}),Rd=m.object({family:m.string().regex(/^uploaded-font-[a-f0-9]{64}(?:-[a-f0-9]{12})?$/u),familyName:Id,subfamilyName:Id,version:Id,weight:m.string().regex(/^\d+(?:\.\d+)?(?: \d+(?:\.\d+)?)?$/u).refine(e=>Pd(e,1,1e3)),style:m.enum([`normal`,`italic`,`oblique`]),stretch:m.union([m.enum([`normal`,`ultra-condensed`,`extra-condensed`,`condensed`,`semi-condensed`,`semi-expanded`,`expanded`,`extra-expanded`,`ultra-expanded`]),m.string().regex(/^\d+(?:\.\d+)?%(?: \d+(?:\.\d+)?%)?$/u).refine(e=>Pd(e,0))]),format:m.enum([`truetype`,`opentype`,`woff`,`woff2`])}),zd=m.object({kind:m.enum([`personal`,`team`]),ownerId:m.uuid(),sha256:Fd}),Bd=Ld.extend({sha256:Fd,bytes:m.number().int().positive(),contentType:m.enum(fc)});m.object({upload:P}),Bd.extend({metadata:Rd,hasSharingRights:m.literal(!0)});const Vd=zd.extend({bytes:m.number().int().positive(),metadata:Rd,createdAt:m.iso.datetime(),path:m.string().startsWith(`/v1/font-catalog/`)});m.object({entries:m.array(Vd),canManage:m.boolean()}),Ld.extend({sha256:Fd}),Ld.extend({canvasId:m.uuid(),sha256:m.array(Fd).min(1)}),m.object({resources:m.array(m.object({entry:Vd,path:m.string().startsWith(`/v1/canvas-assets/`)}))});const Hd=m.object({inviteId:m.uuid(),email:m.string().max(254),accessLevel:Wo,sendCount:m.number().int().min(1),lastSentAt:m.iso.datetime(),expiresAt:m.iso.datetime(),state:m.enum([`pending`,`expired`]),deliveryState:m.enum([`queued`,`accepted`,`failed`]),deliveryError:m.string()});m.object({canvasTitle:m.string().min(1),invitedBy:m.string().min(1),email:m.string().max(254).pipe(m.email()),accessLevel:Wo,expiresAt:m.iso.datetime(),state:m.enum([`pending`,`accepted`]),hasAccount:m.boolean()}),m.object({canvasId:m.uuid(),email:m.string().max(254).transform(e=>e.trim().toLowerCase()).pipe(m.email()),accessLevel:Wo}),m.object({invite:Hd,acceptToken:m.string().max(512).optional()}),m.object({canvasId:m.uuid()}),Ro(Hd),m.object({canvasId:m.uuid(),inviteId:m.uuid()}),m.object({canvasId:m.uuid(),inviteId:m.uuid()});const Ud=m.string().min(1).max(512);m.object({token:Ud}),m.object({token:Ud}),m.object({canvasId:m.uuid(),accessLevel:Uo});const Wd=m.object({personId:m.uuid().nullable(),email:m.string().max(254).nullable(),displayName:m.string().max(120).nullable(),initials:m.string().max(4).nullable(),avatarUrl:m.string().max(zo).nullable(),accessLevel:Uo,isPending:m.boolean(),reviewState:m.enum([`not-started`,`in-progress`,`done`]).nullable(),lastViewedAt:m.iso.datetime().nullable()});m.object({canvasId:m.uuid()}),Ro(Wd),m.object({canvasId:m.uuid(),personId:m.uuid(),accessLevel:Wo}),m.object({canvasId:m.uuid(),personId:m.uuid()}),m.object({personId:m.uuid(),revoked:m.boolean()});const Gd=m.object({canvasId:m.uuid(),reviewState:m.enum([`not-started`,`in-progress`,`done`])});m.object({reviewState:Gd.shape.reviewState.nullable()}),m.object({canvasId:m.uuid()}),m.object({pass:m.string().min(1),expiresAt:m.iso.datetime(),scriptUrl:m.url(),apiUrl:m.url()});const Kd=Lo.extend({cursor:m.string().max(2048).nullable().default(null)}),qd=m.object({selector:m.string().min(1),tagName:m.string().min(1),label:m.string().nullable(),source:m.object({file:m.string().min(1),line:m.number().int().min(0).nullable()}).nullable()}),Jd=m.object({x:m.number(),y:m.number()}),Yd=m.object({x:m.number().min(0).max(1),y:m.number().min(0).max(1)}),Xd=m.object({x:m.number().min(0).max(1),y:m.number().min(0).max(1),width:m.number().min(0).max(1),height:m.number().min(0).max(1)}),Zd=qd.extend({role:m.string().min(1).optional()}),Qd=m.object({path:m.array(m.number().int().min(0)),offset:m.number().int().min(0)}),$d=m.object({version:m.literal(1),kind:m.literal(`element`),locator:Zd,attachment:Yd,fallbackBounds:Xd}),ef=m.object({version:m.literal(1),kind:m.literal(`text`),root:Zd,quote:m.object({exact:m.string().min(1),prefix:m.string(),suffix:m.string()}),range:m.object({start:Qd,end:Qd}),attachment:Yd,fallbackBounds:Xd}),tf=m.object({version:m.literal(1),kind:m.literal(`elements`),members:m.array(Zd).min(2),truncated:m.boolean(),attachment:Yd,fallbackBounds:Xd}),nf=m.object({version:m.literal(1),kind:m.literal(`area`),bounds:Xd,attachment:Yd}),rf=m.discriminatedUnion(`kind`,[$d,ef,tf,nf]),af=m.discriminatedUnion(`on`,[m.object({on:m.literal(`canvas`),point:Jd,pageId:m.string().min(1).max(256).optional()}),m.object({on:m.literal(`node`),nodeId:m.string().min(1),point:Jd,element:m.null()}),m.object({on:m.literal(`screen`),nodeId:m.string().min(1),screenId:m.uuid(),point:Jd,element:qd.nullable(),target:rf.optional()})]),of=m.object({kind:m.enum([`person`,`agent`]),personId:m.uuid(),name:m.string().min(1).max(120),initials:m.string().min(1).max(4),avatarUrl:m.string().max(zo).nullable(),tokenLabel:m.string().max(120).nullable()}),sf=m.object({personId:m.uuid(),name:m.string().min(1).max(120)}),cf=m.object({emoji:m.string().min(1).max(16),people:m.array(sf).min(1)}),lf=m.object({messageId:m.uuid(),seq:m.number().int().min(1),body:m.string().min(1),isDeleted:m.boolean(),author:of,createdAt:m.iso.datetime(),editedAt:m.iso.datetime().nullable(),mentions:m.array(sf),reactions:m.array(cf)}),uf=m.object({kind:m.enum([`person`,`agent`]),personId:m.uuid(),name:m.string().min(1).max(120),tokenLabel:m.string().max(120).nullable()}),df=m.object({revision:m.number().int().positive(),threadId:m.uuid(),canvasId:m.uuid(),anchor:af,author:of,messages:m.array(lf).min(1).max(50),messageCount:m.number().int().min(1),hasMoreMessages:m.boolean(),isResolved:m.boolean(),resolvedAt:m.iso.datetime().nullable(),resolvedBy:uf.nullable(),createdAt:m.iso.datetime(),lastMessageAt:m.iso.datetime()}),ff=m.strictObject({canvasRef:m.string().min(1),expectedVersion:m.number().int().positive()}),pf=ff.extend({coordinateSpace:m.enum([`canvas-world`,`node-normalized`,`screen-normalized`])});m.object({context:ff.optional(),page:Kd.optional(),canvasId:m.uuid(),filter:m.enum([`open`,`resolved`,`all`]).default(`open`),authorPersonId:m.uuid().optional(),agentActionable:m.boolean().default(!1),query:m.string().trim().max(200).optional()}),Ro(df).extend({nextCursor:m.string().nullable().optional()}),Kd.extend({context:ff.optional(),canvasId:m.uuid(),threadId:m.uuid(),expectedRevision:m.number().int().positive().optional()}),m.object({thread:df.omit({messages:!0,hasMoreMessages:!0}),messages:m.array(lf).max(100),nextCursor:m.string().nullable()}),m.object({context:pf.optional(),canvasId:m.uuid(),clientThreadId:m.uuid(),anchor:af,body:m.string().trim().min(1),mentionedPersonIds:m.array(m.uuid()).default([])}),m.object({context:ff.optional(),canvasId:m.uuid(),threadId:m.uuid(),clientMessageId:m.uuid(),body:m.string().trim().min(1),mentionedPersonIds:m.array(m.uuid()).default([])}),df.extend({postedMessage:lf}),m.object({canvasId:m.uuid(),threadId:m.uuid(),messageId:m.uuid(),body:m.string().trim().min(1),mentionedPersonIds:m.array(m.uuid()).default([])}),m.object({canvasId:m.uuid(),threadId:m.uuid(),messageId:m.uuid(),emoji:m.string().trim().min(1).max(16),reacted:m.boolean()}),m.object({canvasId:m.uuid(),threadId:m.uuid(),anchor:af}),m.object({context:ff.optional(),expectedRevision:m.number().int().positive().optional(),canvasId:m.uuid(),threadId:m.uuid(),resolved:m.boolean()}),m.object({canvasId:m.uuid(),threadId:m.uuid(),messageId:m.uuid().optional()}),m.object({deletedThreadIds:m.array(m.uuid()),deletedMessageIds:m.array(m.uuid())});const q={shortText:200,name:100,label:500,page:50,cursor:64,questionOptions:3},J=m.uuid(),mf=m.string().min(1),hf=m.object({id:J,name:m.string().trim().min(1).max(q.name),content:m.string().trim().min(1),version:m.string().min(1).max(q.name)}),gf=m.object({canvasId:J,nodeId:mf,label:m.string(),role:m.enum([`target`,`reference`])}),_f=m.discriminatedUnion(`type`,[m.object({type:m.literal(`text`),text:m.string()}),gf.extend({type:m.literal(`object`)})]),vf=m.object({revision:m.number().int().nonnegative(),text:m.string(),task:m.enum([`chat`,`rewrite`,`shorten`,`translate`,`replace`,`rename`]).default(`chat`),references:m.array(gf),contentVersion:m.literal(1).default(1),parts:m.array(_f).optional(),attachmentIds:m.array(J),model:m.enum([`default`,`sonnet`,`opus`,`haiku`]).default(`default`),effort:m.enum([`default`,`low`,`medium`,`high`]).default(`default`),instructions:m.array(m.object({name:m.string().max(q.name),content:m.string(),version:m.string().max(q.name)})).default([])}).transform(e=>{let t=e.parts??[...e.references.flatMap(e=>[{type:`object`,...e},{type:`text`,text:`
19
19
  `}]),{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}}),yf=m.object({state:m.enum([`checking`,`not-installed`,`unsupported`,`signed-out`,`signing-in`,`connected`,`usage-limited`,`auth-expired`,`unavailable`]),version:m.string().nullable(),account:m.string().nullable(),issue:m.string().nullable()}),bf=m.object({canvasId:J,mutationId:J,previousVersion:m.number().int().positive(),version:m.number().int().positive(),nodeIds:m.array(mf),reverted:m.boolean().default(!1),review:Ou.optional()}),xf=m.object({prompt:m.string().trim().min(1),options:m.array(m.string().trim().min(1).max(q.shortText)).max(q.questionOptions).refine(e=>new Set(e).size===e.length,`Options must be distinct.`).default([])}).extend({id:J,digest:m.string().min(1).max(q.name),state:m.enum([`pending`,`answered`,`cancelled`]),answer:m.string().nullable()}),Sf=m.object({jobId:J,version:m.number().int().positive(),target:cl,state:m.enum([`rendered`,`checked`,`needs-review`]),summary:m.string().max(q.label)}),Cf=m.object({parts:m.array(_f).optional(),id:m.string().min(1).max(q.shortText),role:m.enum([`user`,`assistant`,`tool`]),text:m.string(),tool:m.string().nullable().default(null),outcome:m.enum([`running`,`completed`,`denied`,`failed`]).nullable().default(null)}),wf=m.object({id:m.string().min(1).max(q.shortText),tool:m.string().max(q.shortText),digest:m.string().max(q.name),input:m.record(m.string(),m.unknown())}),Tf=m.object({mutationId:J,canvasId:J,procedure:m.enum([`canvas.applyOperations`,`canvas.render.importSource`]),input:m.record(m.string(),m.unknown()),state:m.enum([`recorded`,`accepted`,`unknown`,`refused`])}),Ef=m.object({id:J,name:m.string().max(q.shortText),mediaType:m.enum([`image/png`,`image/jpeg`,`image/webp`]),width:m.number().int().positive(),height:m.number().int().positive(),bytes:m.number().int().positive(),preview:m.string().regex(/^data:image\/(?:png|jpeg|webp);base64,[A-Za-z0-9+/=]+$/u)}),Df=m.object({id:J,state:m.enum([`preparing`,`starting`,`running`,`waiting`,`stopping`,`reconciling`,`completed`,`stopped`,`failed`,`interrupted`,`needs-review`]),submittedDraft:vf,attachments:m.array(Ef).optional(),model:m.string().nullable().default(null),runtimeVersion:m.string().nullable().default(null),lastActivityAt:m.iso.datetime().optional(),stillWorking:m.boolean().default(!1),preparedContext:m.string().default(``),baseVersion:m.number().int().positive(),startedAt:m.iso.datetime(),endedAt:m.iso.datetime().nullable(),messages:m.array(Cf),receipts:m.array(bf),inspections:m.array(Sf).default([]),questions:m.array(xf).optional(),intents:m.array(Tf).default([]),pending:wf.nullable(),recoveryIssue:m.string().nullable().optional(),issue:m.string().nullable()}),Of=m.object({id:J,canvasId:J,ownerId:J,title:m.string().trim().min(1).max(q.shortText),titleSource:m.enum([`automatic`,`manual`]).optional(),visibility:m.enum([`private`,`shared`]),createdAt:m.iso.datetime(),updatedAt:m.iso.datetime(),sessionId:J,hasSession:m.boolean(),draft:vf,turns:m.array(Df),earlierMessages:m.number().int().nonnegative().optional(),sequence:m.number().int().nonnegative()}),Y=m.uuid(),kf=Df.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}),Af=m.object({canvasId:Y,chatId:Y,title:m.string().trim().min(1).max(q.shortText),visibility:m.enum([`private`,`shared`]),sequence:m.number().int().nonnegative(),mergeTurns:m.boolean().optional(),createdAt:m.iso.datetime(),updatedAt:m.iso.datetime(),turns:m.array(kf)}).omit({mergeTurns:!0}).extend({earlierMessages:m.number().int().nonnegative().optional(),ownerId:Y,ownerName:m.string().optional(),readSequence:m.number().int().nonnegative().optional(),unread:m.boolean().optional()});m.object({canvasId:Y,search:m.string().max(q.shortText).default(``),ownerId:Y.optional(),sort:m.enum([`date`,`unread`]).default(`date`),cursor:m.object({updatedAt:m.iso.datetime(),chatId:Y,unread:m.boolean().optional()}).optional(),limit:m.number().int().min(1).max(q.page).default(q.page)}),m.object({items:m.array(Af),next:m.object({updatedAt:m.iso.datetime(),chatId:Y,unread:m.boolean().optional()}).nullable()});const jf=m.object({canvasId:Y,chatId:Y});jf.extend({before:m.number().int().nonnegative().optional()}),m.object({chat:Af.nullable(),next:m.number().int().nonnegative().nullable()}),jf.extend({sequence:m.number().int().nonnegative()}),m.object({saved:m.boolean()}),m.object({canvasId:Y,cursor:m.string().max(q.cursor).default(``)}),m.object({cursor:m.string(),changed:m.boolean()});const Mf=m.string().min(1),X=m.uuid();m.object({protocol:m.literal(4),shellVersion:m.string(),hostId:X.optional(),eventSequence:m.number().int().nonnegative().default(0),installationId:X,profileId:X.nullable(),credential:m.object({tokenId:X,expiresAt:m.iso.datetime()}).nullable().default(null),connection:yf,chats:m.array(Of),chatPages:m.array(m.object({canvasId:X,hasMore:m.boolean()})).default([]),attachments:m.array(Ef),instructions:m.array(hf).default([]),issue:m.string().nullable(),capabilities:m.object({images:m.boolean(),dictation:m.boolean()})});const Nf=m.object({personId:X,tokenId:X,token:m.string().startsWith(`enh_`).max(q.label),expiresAt:m.iso.datetime()}),Pf=m.object({canvasId:X,rootIds:m.array(Mf),version:m.number().int().positive()});m.discriminatedUnion(`kind`,[m.object({kind:m.literal(`desktop.describe`)}),m.object({kind:m.literal(`claude.status`)}),m.object({kind:m.literal(`claude.connect`)}),m.object({kind:m.literal(`claude.cancelConnection`)}),m.object({kind:m.literal(`claude.chooseExecutable`)}),m.object({kind:m.literal(`profile.connect`),profile:Nf}),m.object({kind:m.literal(`profile.disconnect`)}),m.object({kind:m.literal(`instruction.import`),name:m.string().trim().min(1).max(q.name),content:m.string().trim().min(1)}),m.object({kind:m.literal(`instruction.remove`),instructionId:X}),m.object({kind:m.literal(`chat.list`),canvasId:X,more:m.boolean().optional()}),m.object({kind:m.literal(`chat.read`),chatId:X,more:m.boolean().optional()}),m.object({kind:m.literal(`chat.create`),canvasId:X,visibility:m.enum([`private`,`shared`])}),m.object({kind:m.literal(`chat.saveDraft`),chatId:X,expectedRevision:m.number().int().nonnegative(),draft:vf}),m.object({kind:m.literal(`chat.rename`),chatId:X,title:m.string().trim().min(1).max(q.shortText)}),m.object({kind:m.literal(`chat.visibility`),chatId:X,visibility:m.enum([`private`,`shared`])}),m.object({kind:m.literal(`chat.delete`),chatId:X,stop:m.boolean()}),m.object({kind:m.literal(`turn.start`),chatId:X,draftRevision:m.number().int().nonnegative(),scope:Pf}),m.object({kind:m.literal(`turn.stop`),chatId:X,turnId:X}),m.object({kind:m.literal(`turn.checkChanges`),chatId:X,turnId:X}),m.object({kind:m.literal(`turn.undo`),chatId:X,turnId:X}),m.object({kind:m.literal(`question.respond`),chatId:X,turnId:X,questionId:X,digest:m.string().min(1).max(q.name),answer:m.string().trim().min(1).nullable()}),m.object({kind:m.literal(`request.respond`),chatId:X,turnId:X,requestId:m.string().max(q.shortText),digest:m.string().max(q.name),allow:m.boolean()}),m.object({kind:m.literal(`attachment.choose`),chatId:X}),m.object({kind:m.literal(`attachment.prepare`),chatId:X,name:m.string().max(q.shortText),bytes:m.string()}),m.object({kind:m.literal(`attachment.remove`),chatId:X,attachmentId:X}),m.object({kind:m.literal(`desktop.update`)}),m.object({kind:m.literal(`desktop.retryHost`)}),m.object({kind:m.literal(`desktop.openHistory`)})]);const Ff=m.string().trim().min(1).max(2e3);m.object({message:Ff,diagnostics:m.unknown().optional(),workspaceId:m.uuid().optional(),canvasId:m.uuid().optional()}),m.object({status:m.enum([`sent`,`unavailable`,`unconfirmed`]),attemptId:m.uuid(),retryAfterSeconds:m.number().int().min(1).max(3600).optional()});const If=m.enum([`home`,`recents`,`shared`,`trash`,`team`,`canvas`,`invite`,`sign-in`,`sign-up`,`other`]),Lf=m.enum([`Error`,`TypeError`,`RangeError`,`ReferenceError`,`SyntaxError`,`URIError`,`AbortError`,`NetworkError`,`SecurityError`,`UnhandledRejection`]),Rf=1e6,zf=m.number().int().min(0).max(864e5),Bf=m.object({name:Lf,atMs:zf,source:m.enum([`application`,`external`,`unknown`]),line:m.number().int().min(0).max(Rf).optional(),column:m.number().int().min(0).max(Rf).optional()}),Vf=m.object({path:m.string().max(256).regex(/^(?:canvas|comment|organisation|person|prototype|recording|recordingAsset|screen|transcript|telemetry)(?:\.[A-Za-z]+){1,4}$/u),status:m.enum([`ok`,`refused`,`unavailable`,`cancelled`]),durationMs:zf,atMs:zf,correlationId:m.uuid().optional()}),Hf=m.object({action:m.enum([`navigate`,`feedback.open`]),route:If,atMs:zf}),Uf=m.string().max(512).transform((e,t)=>{let n=URL.parse(e),r=n?.searchParams.get(`replay_id`),i=n?.searchParams.get(`distinct_id`),a=n?.searchParams.get(`token`);return typeof a!=`string`||n?.origin!==`https://mixpanel.com`||n.pathname!==`/projects/replay-redirect`||!m.uuid().safeParse(r).success||!m.uuid().safeParse(i).success||!/^[\da-f]{32}$/iu.test(a)?(t.addIssue({code:`custom`,message:`unsupported replay reference`}),m.NEVER):`https://mixpanel.com/projects/replay-redirect?${new URLSearchParams({replay_id:r??``,distinct_id:i??``,token:a}).toString()}`});m.object({route:If,environment:m.object({browser:m.enum([`Chrome`,`Edge`,`Firefox`,`Safari`,`Other`]),os:m.enum([`macOS`,`Windows`,`Linux`,`iOS`,`Android`,`Other`]),release:m.string().max(256).regex(/^[\w.+-]+$/u)}),errors:m.array(Bf).max(10),api:m.array(Vf).max(10),activity:m.array(Hf).max(20),replayUrl:Uf.optional().catch(void 0)});const Wf=m.enum([`owner`,`admin`,`member`]),Gf=m.enum([`can-view`,`can-comment`,`can-edit`]),Kf=m.object({id:m.uuid(),name:m.string().min(1).max(120),role:Wf});m.object({}),Ro(Kf),m.object({name:m.string().trim().min(1).max(120)}),m.object({organisation:Kf}),m.object({organisationId:m.uuid(),name:m.string().trim().min(1).max(120)}),m.object({organisationId:m.uuid()}),m.object({organisationId:m.uuid(),movedCanvasCount:m.number().int().min(0)});const qf=m.object({personId:m.uuid(),displayName:m.string().max(120),initials:m.string().max(4),avatarUrl:m.string().max(zo).nullable().optional(),email:m.string().max(254).nullable(),contentAccess:Gf.default(`can-comment`),role:Wf});m.object({organisationId:m.uuid()}),Ro(qf),m.object({organisationId:m.uuid(),email:m.email().trim().toLowerCase().max(254),role:m.enum([`admin`,`member`]).default(`member`),contentAccess:Gf.default(`can-comment`)}),m.object({personId:m.uuid()}),m.object({organisationId:m.uuid(),personId:m.uuid(),role:m.enum([`admin`,`member`])}).pick({personId:!0,role:!0}),m.object({organisationId:m.uuid(),personId:m.uuid(),contentAccess:Gf}).pick({personId:!0,contentAccess:!0}),m.object({organisationId:m.uuid(),personId:m.uuid()}),m.object({personId:m.uuid(),removed:m.literal(!0)}),m.object({organisationId:m.uuid(),personId:m.uuid()}),m.object({ownerPersonId:m.uuid()});const Jf=m.object({inviteId:m.uuid(),email:m.string().max(254).pipe(m.email()),contentAccess:Gf.default(`can-comment`),role:m.enum([`admin`,`member`]),sendCount:m.number().int().min(1),lastSentAt:m.iso.datetime(),expiresAt:m.iso.datetime(),state:m.enum([`pending`,`expired`]),deliveryState:m.enum([`queued`,`accepted`,`failed`]),deliveryError:m.string()});m.object({organisationId:m.uuid(),email:m.string().trim().toLowerCase().max(254).pipe(m.email()),role:m.enum([`admin`,`member`]).default(`member`),contentAccess:Gf.default(`can-comment`)}),m.discriminatedUnion(`kind`,[m.object({kind:m.literal(`member`),personId:m.uuid()}),m.object({kind:m.literal(`invitation`),invite:Jf})]),m.object({invite:Jf}),m.object({organisationId:m.uuid()}),Ro(Jf),m.object({organisationId:m.uuid(),inviteId:m.uuid()}).extend({});const Yf=m.string().min(1).max(512);m.object({token:Yf}),m.object({token:Yf}),m.object({teamName:m.string().min(1).max(120),invitedBy:m.string().min(1).max(120),email:m.string().max(254).pipe(m.email()),contentAccess:Gf.default(`can-comment`),role:m.enum([`admin`,`member`]),expiresAt:m.iso.datetime(),state:m.enum([`pending`,`accepted`]),hasAccount:m.boolean()}),m.object({organisationId:m.uuid()});const Xf=m.object({id:m.uuid(),label:m.string().min(1).max(120),createdAt:m.iso.datetime(),lastUsedAt:m.iso.datetime().nullable(),expiresAt:m.iso.datetime().nullable(),revoked:m.boolean()});m.object({label:m.string().trim().min(1).max(120).describe(`Label naming the agent.`),expiresAt:m.iso.datetime().nullable().describe(`Expiry timestamp, or null for a token that does not expire.`)}),m.object({token:m.string().startsWith(`enh_`),agentToken:Xf}),m.object({}),m.object({items:m.array(Xf),isConnected:m.boolean()}),m.object({tokenId:m.uuid()}),m.object({tokenId:m.uuid(),revoked:m.literal(!0)}),m.discriminatedUnion(`method`,[m.object({method:m.literal(`token`)}),m.object({method:m.literal(`browser`),issuer:m.url(),clientId:m.string().min(1),scope:m.literal(`openid`)})]);const Zf=m.object({id:m.uuid(),preparedCanvasId:m.uuid(),displayName:m.string().min(1).max(120),initials:m.string().min(1).max(4),avatarUrl:m.string().max(zo).nullable(),email:m.string().max(254).nullable(),createdAt:m.iso.datetime()});m.object({}),m.object({person:Zf.nullable(),authentication:m.discriminatedUnion(`kind`,[m.object({kind:m.literal(`anonymous`)}),m.object({kind:m.literal(`person`)}),m.object({kind:m.literal(`agent`),tokenId:m.uuid(),tokenLabel:m.string(),expiresAt:m.iso.datetime().nullable()}),m.object({kind:m.literal(`oauth-agent`),tokenId:m.uuid(),tokenLabel:m.string(),clientId:m.string().min(1),scopes:m.array(m.string()),expiresAt:m.iso.datetime(),resource:m.url()})])}),m.object({displayName:m.string().trim().min(1).max(120)}),m.object({person:Zf});const Qf=m.string().trim().toLowerCase().min(3).max(40).regex(/^[a-z0-9][a-z0-9._-]*$/,`letters, digits, dot, underscore and dash only`),$f=m.enum([`cookie`,`token`]).default(`cookie`);m.object({username:Qf,password:m.string().min(10).max(200),displayName:m.string().trim().min(1).max(120),deliver:$f,email:m.string().max(254).transform(e=>e.trim().toLowerCase()).pipe(m.email())}),m.object({username:Qf,password:m.string().min(1).max(200),deliver:$f}),m.object({person:Zf,token:m.string().nullable()}).extend({preparedCanvasId:m.uuid()}),m.object({}),m.object({signedOut:m.literal(!0)});const ep=m.enum([`image/jpeg`,`image/png`,`image/webp`]);m.object({contentType:ep,bytes:m.number().int().positive()}),m.object({assetId:m.uuid(),upload:m.object({url:m.url(),headers:m.record(m.string(),m.string()),expiresAt:m.iso.datetime()})}),m.object({assetId:m.uuid()}),m.object({assetId:m.uuid(),previewUrl:m.url()}),m.object({abandoned:m.boolean()}),m.object({requestId:m.uuid(),displayName:m.string().trim().min(1).max(120),photoAssetId:m.uuid().optional()}),m.object({person:Zf});const tp=m.string().max(254).pipe(m.email()),np=m.discriminatedUnion(`kind`,[m.object({kind:m.literal(`person`),personId:m.uuid(),displayName:m.string().min(1).max(120),initials:m.string().min(1).max(4),avatarUrl:m.string().max(zo).nullable().optional(),email:tp}),m.object({kind:m.literal(`email`),email:tp})]);m.object({query:m.string().trim().min(1).max(200)});const rp=m.object({recipients:m.array(np).max(5)});m.object({}),rp.extend({});const ip=`enhance3:session-handoff`;m.union([m.object({kind:m.literal(ip),body:m.object({token:m.string().min(1),displayName:m.string().min(1)})}),m.object({kind:m.literal(ip),signedOut:m.literal(!0)})]);const ap=m.string().length(64).refine(e=>{for(let t of e)if(!/[\da-f]/u.test(t))return!1;return!0}),op=e=>{for(let t of e){let e=t.codePointAt(0);if(e!==void 0&&(e===127||e<=31))return!0}return!1},sp=m.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(`\\`)&&!op(e)&&!e.startsWith(`__enhance/`)&&e.split(`/`).every(e=>e!==``&&e!==`.`&&e!==`..`),{message:`prototype paths must be portable relative file paths`}),cp=m.object({path:sp,contentType:m.string().trim().min(1).max(200).refine(e=>!op(e)),bytes:m.number().int().nonnegative().max(2**53-1),sha256:ap});m.object({version:m.literal(1),entryPath:sp,files:m.array(cp).min(1)});const lp=m.object({artifactBytes:m.number().int().positive().max(2**53-1),expandedBytes:m.number().int().positive().optional(),fileBytes:m.number().int().positive().max(2**53-1),manifestBytes:m.number().int().positive().optional(),fileCount:m.number().int().positive().optional(),pathBytes:m.number().int().positive().max(2**53-1)});m.object({}),m.object({attachmentProtocolVersion:m.literal(1).optional(),protocolVersion:m.literal(1),format:m.literal(`zip`),limits:lp});const up=m.object({protocolVersion:m.literal(1),format:m.literal(`zip`),bytes:m.number().int().positive().max(2**53-1),sha256:ap,fileCount:m.number().int().positive().max(2**53-1),expandedBytes:m.number().int().positive().max(2**53-1)});m.object({canvasId:m.uuid(),targetMode:m.enum([`node`,`prototype`]).optional(),canvasPageId:m.string().min(1).optional(),prototypeId:m.uuid().optional(),clientToken:m.uuid(),nodeId:m.string().min(1),title:m.string().trim().min(1).max(200),entryPath:sp,artifact:up,box:F.extend({width:m.number().positive(),height:m.number().positive()})});const dp=m.enum([`uploading`,`queued`,`ingesting`,`ready`,`failed`,`abandoned`]),fp=m.array(m.object({path:m.string().min(1),code:m.string().min(1)})),pp=m.object({prototypeId:m.uuid(),deploymentId:m.uuid(),nodeId:m.string().min(1),alreadyExists:m.boolean(),artifact:up});m.discriminatedUnion(`state`,[pp.extend({state:m.literal(`uploading`),upload:P}),pp.extend({state:m.enum([`queued`,`ingesting`,`ready`,`failed`,`abandoned`])})]);const mp=m.object({canvasId:m.uuid(),deploymentId:m.uuid()});m.object({deploymentId:m.uuid(),state:dp}),m.object(mp.shape);const hp=m.object({prototypeId:m.uuid(),deploymentId:m.uuid(),nodeId:m.string().min(1),fileCount:m.number().int().nonnegative(),totalBytes:m.number().int().nonnegative().max(2**53-1),processedFiles:m.number().int().nonnegative(),unavailableFiles:fp.optional()});m.discriminatedUnion(`state`,[hp.extend({state:m.literal(`failed`),failure:m.object({code:m.string().min(1),message:m.string().min(1),path:sp.optional()})}),hp.extend({state:m.enum([`uploading`,`queued`,`ingesting`,`ready`,`abandoned`])})]),m.object({canvasId:m.uuid(),deploymentId:m.uuid(),baseVersion:m.number().int().positive(),canvasPageId:m.string().min(1).optional(),attachment:m.object({clientToken:m.uuid(),scope:m.object({pageId:m.string().min(1).optional(),nodeIds:m.array(m.string().min(1))})}).optional()}),m.object({canvasId:m.uuid(),prototypeId:m.uuid(),deploymentId:m.uuid(),nodeId:m.string().min(1),version:m.number().int().positive(),state:m.literal(`ready`),origin:m.url(),openUrl:m.string().startsWith(`/c/`),canvasUrl:m.url().optional(),unavailableFiles:fp.optional(),attachment:m.discriminatedUnion(`outcome`,[m.object({outcome:m.literal(`committed`),mutationId:m.uuid(),previousVersion:m.number().int().positive(),version:m.number().int().positive()}),m.object({outcome:m.literal(`no_op`),version:m.number().int().positive()})]).optional()}),m.object({bytes:m.number().int().positive().max(2**53-1)}),m.object({id:m.uuid(),upload:P}),m.object({id:m.uuid()});const gp=m.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`}),_p=m.object({path:gp,contentType:m.string().min(1).max(200),bytes:m.number().int().nonnegative()}),vp=m.enum([`uploading`,`verifying`,`ready`,`failed`,`abandoned`]);m.object({canvasId:m.uuid(),prototypeId:m.uuid().optional(),clientToken:m.uuid(),nodeId:m.string().min(1),targetMode:m.enum([`node`,`prototype`]).optional(),canvasPageId:m.string().min(1).optional(),title:m.string().trim().min(1).max(200),entryPath:gp.default(`index.html`),files:m.array(_p).min(1),box:F.extend({width:m.number().positive(),height:m.number().positive()})}),m.object({prototypeId:m.uuid(),deploymentId:m.uuid(),nodeId:m.string().min(1),state:vp,alreadyExists:m.boolean(),fileCount:m.number().int().positive(),totalBytes:m.number().int().positive()}),m.object({canvasId:m.uuid(),deploymentId:m.uuid(),cursor:m.number().int().min(0).default(0)});const yp=m.object({path:gp,upload:P});m.object({deploymentId:m.uuid(),uploads:m.array(yp).max(50),nextCursor:m.number().int().min(0).optional()}),m.object({canvasId:m.uuid(),deploymentId:m.uuid(),baseVersion:m.number().int().positive(),canvasPageId:m.string().min(1).optional()}),m.object({canvasId:m.uuid(),prototypeId:m.uuid(),deploymentId:m.uuid(),nodeId:m.string().min(1),version:m.number().int().positive(),state:m.literal(`ready`),origin:m.url(),openUrl:m.string().startsWith(`/c/`),canvasUrl:m.url().optional(),unavailableFiles:fp.optional()}),m.object({context:m.discriminatedUnion(`kind`,[m.object({kind:m.literal(`live`),nodeId:m.string().min(1)}),m.object({kind:m.literal(`version`),nodeId:m.string().min(1),versionEntryId:m.uuid()})]).optional(),canvasId:m.uuid(),prototypeId:m.uuid(),deploymentId:m.uuid()}),m.object({deploymentId:m.uuid(),origin:m.url(),bootUrl:m.url(),expiresAt:m.iso.datetime()});const bp=h.int().check(h.minimum(0),h.maximum(6e5)),xp=h.enum([`none`,`completed`,`background`,`failed`]);h.object({protocol:h.literal(1),type:h.literal(`enhance.prototype.gate`),generation:h.uuid(),nonce:h.uuid(),outcome:h.enum([`opening`,`migrating`,`accepted`,`expired-or-used`,`temporary-error`,`denied`]),timing:h.optional(h.object({exchangeMs:bp,migration:xp,migrationWaitMs:bp}))}),h.object({protocol:h.literal(1),type:h.literal(`enhance.prototype.capture`),requestId:h.uuid(),connectionId:h.optional(h.uuid()),documentId:h.optional(h.uuid()),format:h.optional(h.literal(`menu-svg`))});const Sp=h.object({protocol:h.literal(1),type:h.literal(`enhance.prototype.connect`),connectionId:h.uuid()});h.extend(Sp,{type:h.literal(`enhance.prototype.connected`),documentId:h.uuid(),capabilities:h.array(h.string()),release:h.string().check(h.minLength(1))}),h.extend(Sp,{type:h.literal(`enhance.prototype.capture-blocked`)}),h.object({protocol:h.literal(1),type:h.literal(`enhance.prototype.unloading`),documentId:h.uuid()}),h.object({protocol:h.literal(1),type:h.literal(`enhance.prototype.ready`),inputVersion:h.optional(h.int()),build:h.optional(h.string()),capabilities:h.optional(h.array(h.string()))});const Cp=h.object({protocol:h.literal(1),type:h.literal(`enhance.prototype.present`),generation:h.uuid(),nonce:h.uuid()});h.extend(Cp,{type:h.literal(`enhance.prototype.presented`),documentId:h.uuid()}),h.object({protocol:h.literal(1),type:h.literal(`enhance.prototype.escape`)}),h.object({protocol:h.literal(1),type:h.literal(`enhance.prototype.zoom`),deltaX:h.number(),deltaY:h.number(),deltaMode:h.union([h.literal(0),h.literal(1),h.literal(2)]),anchorX:h.number().check(h.minimum(0),h.maximum(1)),anchorY:h.number().check(h.minimum(0),h.maximum(1))}),h.object({protocol:h.literal(1),type:h.literal(`enhance.prototype.navigate`),direction:h.enum([`back`,`forward`,`reload`])}),h.object({protocol:h.literal(1),type:h.literal(`enhance.prototype.navigation`),path:h.optional(h.string()),canGoBack:h.boolean(),canGoForward:h.boolean(),isNavigating:h._default(h.boolean(),!1)});const wp=h.object({artifact:h.string().check(h.minLength(1)),viewport:h.object({width:h.number().check(h.positive()),height:h.number().check(h.positive())}),title:h.string(),files:h.optional(h.object({named:h.array(h.string()),fetched:h.array(h.object({url:h.string(),contentType:h.string(),bytes:h.custom(e=>Object.prototype.toString.call(e)===`[object ArrayBuffer]`)}))}))}),Tp=h.object({protocol:h.literal(1),type:h.literal(`enhance.prototype.captured`),requestId:h.uuid(),connectionId:h.optional(h.uuid()),documentId:h.optional(h.uuid())});h.discriminatedUnion(`outcome`,[h.extend(Tp,{outcome:h.literal(`captured`),screen:wp,issues:h.optional(na)}),h.extend(Tp,{outcome:h.literal(`menu-svg`),markup:h.string().check(h.startsWith(`data:image/svg+xml`))}),h.extend(Tp,{outcome:h.literal(`failed`),error:h.string().check(h.minLength(1)),code:h.optional(h.enum([`capture-failed`,`capture-busy`]))})]);const Ep=h.number().check(h.minimum(0),h.maximum(6e4)),Dp={wheelQuietMs:280,pointerSlopPx:4,singleAxisRatio:1.2,momentumTailSpeed:100,axisRatio:1.25,openingSamplePx:4,openingWindowMs:35},Op=h.object({directionConfirmation:h._default(h.literal(`next-sample`),`next-sample`),openingSamplePx:h._default(h.number().check(h.minimum(0),h.maximum(16)),Dp.openingSamplePx),openingWindowMs:h._default(h.number().check(h.minimum(0),h.maximum(50)),Dp.openingWindowMs),canvasProtection:h._default(h.literal(`slow-tail`),`slow-tail`),momentumTailSpeed:h._default(h.number().check(h.minimum(0),h.maximum(1e3)),Dp.momentumTailSpeed),wheelQuietMs:h._default(Ep,Dp.wheelQuietMs),pointerSlopPx:h._default(h.number().check(h.minimum(0),h.maximum(50)),Dp.pointerSlopPx),singleAxisRatio:h._default(h.number().check(h.minimum(.25),h.maximum(4)),Dp.singleAxisRatio),axisRatio:h._default(h.number().check(h.minimum(1),h.maximum(4)),Dp.axisRatio)});Op.parse({});const kp=h.object({inputVersion:h.literal(2)});h.extend(kp,{type:h.literal(`enhance.prototype.input-context`),settings:Op,navigationAt:h.number(),canvasPhysicalAt:h._default(h.number(),0),canvasSubstantialAt:h._default(h.number(),0),canvasSpeed:h._default(h.number().check(h.nonnegative()),0),canvasWheelUntil:h.number(),canvasMomentum:h.nullable(h.boolean()),escapeAt:h._default(h.number(),0),escapePending:h._default(h.boolean(),!1),appWheelUntil:h._default(h.number(),0),appMomentum:h._default(h.nullable(h.boolean()),null),toolOwnsInput:h.boolean(),interactive:h._default(h.boolean(),!0),pointerPan:h.optional(h.boolean()),pointerPanId:h.optional(h.int().check(h.nonnegative())),pointer:h.nullable(h.object({x:h.number(),y:h.number()})),cursor:h.optional(h.nullable(h.object({anchor:h.nullable(h.object({x:h.number(),y:h.number()})),fallback:h.string(),pointerTime:h.number()}))),visible:h.boolean()});const Ap=h.extend(kp,{type:h.literal(`enhance.prototype.wheel`),deltaX:h.number(),deltaY:h.number(),zoom:h.boolean(),momentum:h.nullable(h.boolean()),openingHandoff:h.optional(h.boolean()),anchorX:h.number().check(h.minimum(0),h.maximum(1)),anchorY:h.number().check(h.minimum(0),h.maximum(1))}),jp=h.extend(kp,{type:h.literal(`enhance.prototype.pan`),phase:h.enum([`start`,`move`,`end`,`cancel`]),pointerId:h.int().check(h.nonnegative()),clientPoint:h.optional(h.object({x:h.number(),y:h.number()})),screenX:h.number(),screenY:h.number(),anchorX:h.number().check(h.minimum(0),h.maximum(1)),anchorY:h.number().check(h.minimum(0),h.maximum(1))}),Mp=h.extend(kp,{type:h.literal(`enhance.prototype.input-activity`),owner:h.enum([`app`,`canvas`,`none`]),reason:h.string().check(h.maxLength(120)),momentum:h.nullable(h.boolean()),focused:h.boolean(),hovered:h._default(h.boolean(),!1),suppressed:h._default(h.boolean(),!1),protected:h.boolean(),screenX:h.number(),screenY:h.number(),pointerAnchor:h._default(h.nullable(h.object({x:h.number(),y:h.number()})),null),pointerTime:h._default(h.number(),0),kind:h.enum([`pointer`,`interaction`,`wheel`,`focus`,`protection`,`escape`,`select`])}),Np=h.extend(kp,{type:h.literal(`enhance.prototype.input-ready`),build:h.string().check(h.maxLength(120))}),Pp=h.extend(kp,{type:h.literal(`enhance.prototype.context-menu`),anchorX:h.number().check(h.minimum(0),h.maximum(1)),anchorY:h.number().check(h.minimum(0),h.maximum(1)),keyboard:h.boolean(),ctrlKey:h.boolean(),metaKey:h.boolean()});h.discriminatedUnion(`type`,[Ap,Mp,Np,jp,Pp]);const Fp=2166136261,Ip=Number.parseInt(`9e3779b9`,16),Lp=Number.parseInt(`85ebca6b`,16),Rp=Number.parseInt(`c2b2ae35`,16);Fp^Ip,Fp^Lp,Fp^Rp;const zp=m.object({width:m.number().int().positive(),height:m.number().int().positive()}),Bp=m.object({mimeType:m.string().min(1).max(100),sampleRate:m.number().int().min(8e3).max(192e3)});m.object({sourceUrl:m.string(),viewport:zp,pageTitle:m.string().nullable(),audio:Bp.nullable().default(null)}),m.object({recordingId:m.uuid(),ownerPersonId:m.uuid(),chunkIndex:m.literal(0),upload:P,audioUpload:P.nullable()}),m.object({recordingId:m.uuid(),index:m.number().int().min(0),firstEventMs:m.number().int().min(0),lastEventMs:m.number().int().min(0),eventCount:m.number().int().min(0),continues:m.boolean().default(!1),bytes:m.number().int().min(1),etag:m.string().min(1).max(200).optional()}),m.object({nextChunkIndex:m.number().int().min(1),upload:P}),m.object({recordingId:m.uuid(),index:m.number().int().min(0),firstMs:m.number().int().min(0),lastMs:m.number().int().min(0),bytes:m.number().int().min(1),epoch:m.number().int().min(0).default(0),startsEpoch:m.boolean().default(!1),etag:m.string().min(1).max(200).optional()}),m.object({nextChunkIndex:m.number().int().min(1),upload:P}),m.object({recordingId:m.uuid(),durationMs:m.number().int().min(0),viewport:zp,sourceUrl:m.string(),interrupted:m.boolean().default(!1),canvasId:m.uuid().optional(),organisationId:m.uuid().optional(),audioChunkCount:m.number().int().min(0).default(0),hasRecoverableBytes:m.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`});const Vp=m.enum([`whole`,`recovering`,`partial`]),Hp=m.enum([`dom`,`audio`]);m.object({recordingId:m.uuid(),canvasId:m.uuid(),canvasTitle:m.string().min(1),isNewCanvas:m.boolean(),storedChunkCount:m.number().int().min(0),missingChunkIndexes:m.array(m.number().int().min(0)).max(64),missingChunkCount:m.number().int().min(0),storedAudioChunkCount:m.number().int().min(0),missingAudioChunkIndexes:m.array(m.number().int().min(0)).max(64),missingAudioChunkCount:m.number().int().min(0),integrity:Vp});const Up=m.object({recordingId:m.uuid(),durationMs:m.number().int().min(0),viewport:zp,interrupted:m.boolean(),chunkCount:m.number().int().min(0),startedAt:m.iso.datetime(),isCopy:m.boolean()}),Wp=m.array(m.object({url:m.url(),contentType:m.string().min(1).max(200),byteSize:m.number().int().min(1),sha256:m.string().regex(/^[a-f0-9]{64}$/u).optional()})).max(400);m.union([m.object({recordingId:m.uuid(),assets:Wp}),m.object({screenId:m.uuid(),assets:Wp})]),m.object({reserved:m.array(m.object({url:m.string(),upload:P}))});const Gp=m.array(m.object({url:m.url(),etag:m.string().min(1).max(200),byteSize:m.number().int().min(1)})).max(400);m.union([m.object({recordingId:m.uuid(),arrived:Gp}),m.object({screenId:m.uuid(),arrived:Gp})]),m.object({missingAssetCount:m.number().int().min(0)}),m.object({canvasId:m.uuid(),recordingId:m.uuid()});const Kp=m.object({seq:m.number().int().min(0),firstEventMs:m.number().int().min(0),lastEventMs:m.number().int().min(0),continues:m.boolean()}),qp=m.discriminatedUnion(`state`,[Kp.extend({state:m.literal(`available`),download:ac}),Kp.extend({state:m.literal(`missing`)})]),Jp=m.object({seq:m.number().int().min(0),firstMs:m.number().int().min(0),lastMs:m.number().int().min(0),epoch:m.number().int().min(0),startsEpoch:m.boolean()}),Yp=m.discriminatedUnion(`state`,[Jp.extend({state:m.literal(`available`),download:ac}),Jp.extend({state:m.literal(`missing`)})]);m.object({recordingId:m.uuid(),durationMs:m.number().int().min(0),viewport:zp,sourceUrl:m.string(),interrupted:m.boolean(),integrity:Vp,chunks:m.array(qp),audio:m.object({mimeType:m.string(),chunks:m.array(Yp)}).nullable(),assets:m.array(m.object({url:m.string(),contentType:m.string(),path:m.string().startsWith(`/v1/recording-assets/`)})),missingAssetCount:m.number().int().min(0),missingAssetUrls:m.array(m.string()).optional()});const Xp=m.object({recordingId:m.uuid(),track:Hp,index:m.number().int().min(0)});m.object({upload:P}),Xp.extend({etag:m.string().min(1).max(200)}),m.object({integrity:Vp}),m.object({canvasId:m.uuid()}),Ro(Up).extend({unreadableCount:m.number().int().min(0)}),m.object({recordingId:m.uuid()}),m.object({recordingId:m.uuid(),discarded:m.literal(!0)}),m.object({canvasId:m.uuid(),recordingId:m.uuid()}),m.object({recordingId:m.uuid(),detachedScreenCount:m.number().int().min(0)}),[`[data-enhance-unsupported]:not([data-enhance-unsupported-hidden]):not([style*="display: none"]) {
20
20
  align-items: center !important;
21
21
  background-color: #f7f7f8 !important;
@@ -36,4 +36,4 @@ Write one visual group at a time. Use --review none for a committed receipt, the
36
36
  Preview first: canvas render --node-id rec_<recording-uuid> --at-ms <integer>, then inspect its PNG. This command persists the accepted moment.
37
37
  `).action(async e=>{let n=m.uuid().nullable().safeParse(e.clientToken??null),r=m.uuid().safeParse(e.recordingId);if(!n.success||!r.success)throw new u(`BAD_REQUEST`,`The recording id or client token is not a UUID.`,"Use the recording id from `recording list`; mint one client token per accepted moment.");t.output.result(await t.invocation.invoke({capability:f(t.catalog(),`recording.snapshot`),arguments:{canvasId:be(e.canvas),recordingId:r.data,atMs:Fg(e.atMs,`--at-ms`,!1),timeoutMs:Fg(e.timeoutMs,`--timeout-ms`,!0)},clientToken:n.data}))})},Lg=(e,t,n)=>{if(e!==`canvas.document.save`||typeof n!=`object`||!n||!(`outcome`in n)||n.outcome!==`conflict`)return n;throw new u(`CONFLICT`,`The canvas document changed before this save landed.`,`Run 'enhance canvas document get --canvas-id ${typeof t==`object`&&t&&`canvasId`in t&&typeof t.canvasId==`string`?t.canvasId:`<canvas-id>`}', merge your change into that document, then retry with its version.`)},Rg=(e,t)=>Rt(e,e=>({[e]:{query:async n=>t.query(e,n),mutate:async n=>Lg(e,n,await t.mutate(e,n))}})),zg=(e,t)=>{let n=e.commands.find(e=>e.name()===`transcript`);if(n===void 0)throw TypeError(`the API router did not supply transcript commands`);n.command(`get`).description(`Read timestamped speech cues as candidate moments; render and inspect candidate PNGs before snapshotting.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID containing the recording.`).requiredOption(`--recording-id <uuid>`,`Recording UUID returned by recording list.`).action(async e=>{let n=m.uuid().safeParse(e.recordingId);if(!n.success)throw new u(`BAD_REQUEST`,`--recording-id must be a UUID.`,"Use the recording id returned by `enhance recording list`.");t.output.result(await t.invocation.invoke({capability:f(t.catalog(),`transcript.read`),arguments:{canvasId:be(e.canvas),recordingId:n.data},clientToken:null}))})},Bg={jsonInput:`auto`,prompts:!1,logger:`ndjson`,errorMapping:`stable-exit-codes`},Vg=e=>{let t=e.state;return{logger:e.output.logger,prompts:Bg.prompts,process:Gh(),formatError:e=>{let n=pe(e,t.pendingParserMessage);return t.exitCode=Ae(n,!1,e),t.pendingParserMessage=null,JSON.stringify(n)}}},Hg=e=>typeof e==`object`&&e&&!Array.isArray(e)?Object.fromEntries(Object.entries(e)):null,Ug=e=>{let t=Hg(e),n=t===null?void 0:t.description;return typeof n==`string`&&n!==``?n:null},Wg=e=>({descriptions:new Map(e.flatMap(([e,t])=>{let n=Ug(t.meta);return n===null?[]:[[e,n]]})),mutationPaths:new Set(e.flatMap(([e,t])=>t.type===`mutation`?[e]:[]))}),Gg=()=>{let e=null;return()=>(e??=De(),e)},Kg=(e,t,n)=>{let r=cn(t.remote),i=qe({remote:t.remote,mutationKey:t.mutationKey,configDirectory:t.configDirectory,now:()=>new Date,progress:t.output.result});pn(e,Ke(t.credentials,t.remote,nt(t.remote)),t.output),vg(e,i,n,t.output),Hh(e,t),Ag(e,{invocation:i,catalog:n,output:t.output}),yg(e,{version:t.version,credentials:t.credentials,remote:t.remote,output:t.output}),kg(e,{screen:r,recording:on(t.remote),world:un(t.remote,r)},t.output),_g(e,t.output,n),ji(e,{remote:t.remote,mutationKey:t.mutationKey,invocation:i,catalog:n,output:t.output,configDirectory:t.configDirectory,now:()=>new Date}),Ig(e,{invocation:i,catalog:n,output:t.output}),Pg(e,i,n,t.output),zg(e,{invocation:i,catalog:n,output:t.output})},qg=e=>{let t=ft({router:xe()}),n=Gg(),{descriptions:r,mutationPaths:i}=Wg(t),a=dt({router:Rg(t,e.remote),name:e.commandName,version:e.version,description:`Operate Enhance as the authenticated person.`,jsonInput:Bg.jsonInput}),o=Vg(e),s=a.buildProgram(o);if(!(s instanceof ut))throw TypeError(`trpc-cli did not return a Commander program`);dg(s),Kg(s,e,n),sg(s,{descriptions:r,mutationPaths:i,mutationKey:e.mutationKey,output:e.output}),s.description(`Operate Enhance as the authenticated person.`);let c=e.state;return{program:s,run:async()=>{try{await a.run(o,s)}catch(t){if(!(t instanceof ge))throw t;if(t.requestedCode!==0&&c.pendingParserMessage!==null){let n=pe(t,c.pendingParserMessage);c.exitCode=Ae(n,!0),c.pendingParserMessage=null,e.output.failure(n)}throw t}}}},Jg=e=>p.exit(e),Yg=36e5,Xg=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Zg=e=>{if(Array.isArray(e))return e.map(e=>JSON.stringify(e));if(!Xg(e)||!Array.isArray(e.items)||`nextCursor`in e)return[JSON.stringify(e)];let t=e.items;if(t.length===0)return[JSON.stringify(e)];let n=e.truncated===!0;return t.map(e=>JSON.stringify(Xg(e)?{...e,truncated:n}:{value:e,truncated:n}))},Qg=e=>{let t=`${e.join(`
38
38
  `)}\n`;if(!(t.length>25e3||e.some(e=>e.length>2e3))){p.stdout.write(t);return}let n=Dt(`sha256`).update(t).digest(`hex`).slice(0,16),r=g.join(mt(),`enhance-${n}.ndjson`);Et(r,t,{mode:384}),p.stdout.write(`${JSON.stringify({path:r,characters:t.length,records:e.length})}\n`)},$g=e=>{try{let t=new URL(e),n=new Set;for(let e of t.searchParams.keys())n.add(e.toLowerCase());return n.has(`x-amz-signature`)||n.has(`x-amz-credential`)||n.has(`x-amz-algorithm`)}catch{return!1}},e_=e=>typeof e==`string`?$g(e):Array.isArray(e)?e.some(e=>e_(e)):Xg(e)?Object.values(e).some(e=>e_(e)):!1,t_=e=>{bt(e,{recursive:!0,mode:448}),gt(e,448)},n_=e=>{if(!vt(e))return;let t=Date.now()-Yg,n=Ct(e,{withFileTypes:!0});for(let r of n){if(!r.isFile()||!r.name.startsWith(`result-`))continue;let n=g.join(e,r.name);yt(n).mtimeMs<t&&Tt(n)}},r_=e=>({...e,sensitive:!0,cleanup:`unlink-after-use`,deleteAfter:new Date(Date.now()+Yg).toISOString()}),i_=(e,t)=>{let n=Zg(e),r=`${n.join(`
39
- `)}\n`;t_(t);let i=g.join(t,`result-${Ot()}.ndjson`);Et(i,r,{mode:384,flag:`wx`}),p.stdout.write(`${JSON.stringify(r_({path:i,characters:r.length,records:n.length,reason:`signed-url`}))}\n`)},a_=e=>Xg(e)?typeof e.token==`string`?{field:`token`,value:e.token}:typeof e.acceptToken==`string`?{field:`acceptToken`,value:e.acceptToken}:null:null,o_=(e,t,n)=>{let r=`${t.value}\n`;t_(n);let i=g.join(n,`result-${Ot()}.token`);Et(i,r,{mode:384,flag:`wx`});let a=Object.fromEntries(Object.entries(e).filter(([e])=>e!==t.field));p.stdout.write(`${JSON.stringify({...a,secret:r_({path:i,field:t.field,characters:r.length})})}\n`)},s_=e=>e.includes(`Usage:`)||e.includes(`Options:`)||e.includes(`Commands:`),c_=Re.omit({fields:!0}).extend({remediation:m.string(),fields:m.array(m.object({path:m.string(),message:m.string()})).optional()}),l_=e=>{try{let t=JSON.parse(e),n=c_.safeParse(t);return n.success?{code:n.data.code,message:n.data.message,remediation:n.data.remediation,...n.data.fields!==void 0&&{fields:n.data.fields}}:null}catch{return null}},u_=(e,t)=>{if(typeof e==`string`&&s_(e)){p.stdout.write(e);return}let n=a_(e);if(n!==null&&Xg(e)){o_(e,n,t);return}if(e_(e)){i_(e,t);return}let r=ke(e);if(r!==null){let e=null;if(r.detail!==null){t_(t);let n=g.join(t,`result-${Ot()}.ndjson`),i=`${JSON.stringify(r.detail)}\n`;Et(n,i,{mode:384,flag:`wx`}),e=r_({path:n,characters:i.length,records:1})}p.stdout.write(`${JSON.stringify({...r.value,...e!==null&&{detail:e}})}\n`);return}Qg(Zg(e))},d_=e=>{p.stderr.write(`${JSON.stringify(e)}\n`)},f_=(e,t,n=`enhance`)=>{let r=e,i=g.join(t,`sensitive`);return n_(i),{result:e=>{u_(Ce(e,n),i)},failure:e=>{d_(Ne(e,n))},logger:{info:(...e)=>{u_(Ce(e.length===1?e[0]:e,n),i)},error:(...e)=>{let t=String(Ce(e.map(String).join(``),n)),i=l_(t);i===null?r.pendingParserMessage=t:d_(i)}}}};rt(),(async()=>{let e=Ge(),t={exitCode:1,pendingParserMessage:null},n=f_(t,e.configDirectory,e.commandName),r=Ze(e.configDirectory),i=et(),a=tt(e.apiUrl,r,i),o=qg({apiUrl:e.apiUrl,version:`0.1.41-dev.sha-2b04fd6f785f`,credentials:r,remote:a,mutationKey:i,output:n,state:t,configDirectory:e.configDirectory,commandName:e.commandName});try{await o.run()}catch(e){e instanceof ge&&Jg(e.requestedCode===0?0:t.exitCode),n.failure(pe(e,null)),Jg(1)}})().catch(e=>{p.stderr.write(`${e instanceof Error?e.message:`CLI startup failed.`}\n`),p.exitCode=1});export{};
39
+ `)}\n`;t_(t);let i=g.join(t,`result-${Ot()}.ndjson`);Et(i,r,{mode:384,flag:`wx`}),p.stdout.write(`${JSON.stringify(r_({path:i,characters:r.length,records:n.length,reason:`signed-url`}))}\n`)},a_=e=>Xg(e)?typeof e.token==`string`?{field:`token`,value:e.token}:typeof e.acceptToken==`string`?{field:`acceptToken`,value:e.acceptToken}:null:null,o_=(e,t,n)=>{let r=`${t.value}\n`;t_(n);let i=g.join(n,`result-${Ot()}.token`);Et(i,r,{mode:384,flag:`wx`});let a=Object.fromEntries(Object.entries(e).filter(([e])=>e!==t.field));p.stdout.write(`${JSON.stringify({...a,secret:r_({path:i,field:t.field,characters:r.length})})}\n`)},s_=e=>e.includes(`Usage:`)||e.includes(`Options:`)||e.includes(`Commands:`),c_=Re.omit({fields:!0}).extend({remediation:m.string(),fields:m.array(m.object({path:m.string(),message:m.string()})).optional()}),l_=e=>{try{let t=JSON.parse(e),n=c_.safeParse(t);return n.success?{code:n.data.code,message:n.data.message,remediation:n.data.remediation,...n.data.fields!==void 0&&{fields:n.data.fields}}:null}catch{return null}},u_=(e,t)=>{if(typeof e==`string`&&s_(e)){p.stdout.write(e);return}let n=a_(e);if(n!==null&&Xg(e)){o_(e,n,t);return}if(e_(e)){i_(e,t);return}let r=ke(e);if(r!==null){let e=null;if(r.detail!==null){t_(t);let n=g.join(t,`result-${Ot()}.ndjson`),i=`${JSON.stringify(r.detail)}\n`;Et(n,i,{mode:384,flag:`wx`}),e=r_({path:n,characters:i.length,records:1})}p.stdout.write(`${JSON.stringify({...r.value,...e!==null&&{detail:e}})}\n`);return}Qg(Zg(e))},d_=e=>{p.stderr.write(`${JSON.stringify(e)}\n`)},f_=(e,t,n=`enhance`)=>{let r=e,i=g.join(t,`sensitive`);return n_(i),{result:e=>{u_(Ce(e,n),i)},failure:e=>{d_(Ne(e,n))},logger:{info:(...e)=>{u_(Ce(e.length===1?e[0]:e,n),i)},error:(...e)=>{let t=String(Ce(e.map(String).join(``),n)),i=l_(t);i===null?r.pendingParserMessage=t:d_(i)}}}};rt(),(async()=>{let e=Ge(),t={exitCode:1,pendingParserMessage:null},n=f_(t,e.configDirectory,e.commandName),r=Ze(e.configDirectory),i=et(),a=tt(e.apiUrl,r,i),o=qg({apiUrl:e.apiUrl,version:`0.1.41-dev.sha-b35a2bec8e72`,credentials:r,remote:a,mutationKey:i,output:n,state:t,configDirectory:e.configDirectory,commandName:e.commandName});try{await o.run()}catch(e){e instanceof ge&&Jg(e.requestedCode===0?0:t.exitCode),n.failure(pe(e,null)),Jg(1)}})().catch(e=>{p.stderr.write(`${e instanceof Error?e.message:`CLI startup failed.`}\n`),p.exitCode=1});export{};