@enhance-eng/enhance-dev 0.1.41-dev.sha-9bd1f7fdd251 → 0.1.41-dev.sha-8645e9fc82bb
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/{cli-output-identity.lib-jw8VjWoI.mjs → cli-output-identity.lib-Dnk4Pkxd.mjs} +2 -2
- package/dist/main.mjs +3 -3
- package/dist/mcp-main.mjs +2 -2
- package/dist/{mcp-server.adapter-D8B5a7mO.mjs → mcp-server.adapter-Bi5W5yDz.mjs} +1 -1
- package/dist/mcp.mjs +1 -1
- package/dist/{mutation-key.adapter-k6VeTwzQ.mjs → mutation-key.adapter-C4A4MgMs.mjs} +1 -1
- package/package.json +1 -1
package/dist/main.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{$t as e,A as t,At as n,Bt as r,Dt as i,Ft as a,It as o,Lt as s,Mn as c,Mr as l,Mt as u,Nn as ee,Ot as te,Pt as ne,Qn as re,Rt as ie,Tt as ae,Xn as oe,Zn as se,_ as ce,_t as le,a as ue,ar as de,at as fe,c as pe,ct as me,f as he,fr as ge,gr as _e,h as ve,hr as ye,jt as be,kt as xe,m as Se,mr as Ce,n as we,nn as Te,o as Ee,p as De,pr as Oe,r as ke,s as Ae,t as je,tn as Me,tt as Ne,u as Pe,ur as Fe,ut as Ie,wn as Le,wt as Re,y as ze}from"./cli-output-identity.lib-
|
|
2
|
+
import{$t as e,A as t,At as n,Bt as r,Dt as i,Ft as a,It as o,Lt as s,Mn as c,Mr as l,Mt as u,Nn as ee,Ot as te,Pt as ne,Qn as re,Rt as ie,Tt as ae,Xn as oe,Zn as se,_ as ce,_t as le,a as ue,ar as de,at as fe,c as pe,ct as me,f as he,fr as ge,gr as _e,h as ve,hr as ye,jt as be,kt as xe,m as Se,mr as Ce,n as we,nn as Te,o as Ee,p as De,pr as Oe,r as ke,s as Ae,t as je,tn as Me,tt as Ne,u as Pe,ur as Fe,ut as Ie,wn as Le,wt as Re,y as ze}from"./cli-output-identity.lib-Dnk4Pkxd.mjs";import{C as Be,E as Ve,S as He,T as Ue,_ as We,b as Ge,c as Ke,f as d,g as qe,h as Je,i as Ye,l as Xe,m as Ze,n as Qe,o as $e,p as et,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"./mutation-key.adapter-C4A4MgMs.mjs";import{t as lt}from"./capability-inventory.mapper-B_GMS9z3.mjs";import f from"node:process";import{Command as ut}from"commander";import{createCli as dt,parseRouter as ft}from"trpc-cli";import{z as p}from"zod";import{z as m}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 h 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`:Ue(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=r.parse(await e.mutate(an[0],{sourceUrl:t.sourceUrl,viewport:t.viewport,pageTitle:t.pageTitle,audio:null})),i=n.upload;try{let r=rn(t.entries,8388608);for(let[t,a]of r.entries()){let r=new TextEncoder().encode(a.body),o=await e.upload({url:i.url,headers:i.headers,body:r});i=s.parse(await e.mutate(an[1],{recordingId:n.recordingId,index:t,firstEventMs:a.firstEventMs,lastEventMs:a.lastEventMs,eventCount:a.eventCount,continues:a.continues,bytes:r.byteLength,etag:o})).upload}let a=Math.max(0,...t.entries.map(e=>e.atMs));return ie.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 be(`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=o.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}),i=a.parse(await e.mutate(sn[1],{screenId:n.screenId,etag:r}));return{screenId:i.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:i.storedBytes}}catch{throw new be(`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=(t,n)=>async r=>{let i=e.parse(await t.mutate(ln[0],{name:r.organisationName})).organisation,a=l.parse(await t.mutate(ln[1],{title:r.canvasTitle,organisationId:i.id,sourceUrl:null}));try{let e=[];for(let t of r.screens)e.push(await n(t));let o=se.parse(await t.query(ln[4],{canvasId:a.id})),s=Me();for(let[t,n]of e.entries())s=Te(s,{id:`fixture-screen-${String(t+1)}`,label:`Fixture screen ${String(t+1)}`,screenId:n.screenId,viewport:r.screens[t]?.viewport??{width:1440,height:900},at:{x:48+t*48,y:48+t*48}});let c=oe.parse(await t.mutate(ln[5],{canvasId:a.id,baseVersion:o.version,document:s,screenIds:e.map(e=>e.screenId)}));if(c.outcome===`conflict`)throw new be(`World canvas ${a.id} was created, but another writer changed its document.`,`Read 'enhance canvas document get --canvas-id ${a.id}' before adding the screens.`);return{organisationId:i.id,canvasId:a.id,screenIds:e.map(e=>e.screenId),documentVersion:c.version}}catch(e){throw e instanceof be?e:new be(`Organisation ${i.id} and canvas ${a.id} exist, but the world is incomplete.`,`Inspect 'enhance canvas get --canvas-id ${a.id}' before retrying any missing steps.`)}},dn=async(e,t)=>{if(e!==void 0&&e!==``)return e.trim();if(f.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:f.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(f.stdin.isTTY)return null;let t=ht({input:f.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=p.coerce.number().int().positive(),hn=p.coerce.number().positive(),gn=p.uuid(),_n=p.union([p.string(),p.number(),p.null()]),vn=p.record(p.string(),_n),yn=p.array(p.object({nodeId:p.string().min(1).max(200),textContent:p.string()})).min(1),bn=p.array(p.object({nodeId:p.string().min(1).max(200),name:p.string()})).min(1),xn=p.array(p.object({nodeIds:p.array(p.string().min(1).max(200)).min(1),styles:vn})).min(1),Sn=p.array(p.object({id:p.string().min(1).max(200),parentId:p.string().min(1).max(200).optional()})).min(1),Cn=p.array(p.union([p.object({nodeId:p.string().min(1).max(200),before:p.string().min(1).max(200)}),p.object({nodeId:p.string().min(1).max(200),after:p.string().min(1).max(200)}),p.object({nodeId:p.string().min(1).max(200),parentId:p.string().min(1).max(200),index:p.number().int().nonnegative().optional()})])).min(1),wn=p.array(p.string().min(1).max(200)).min(1),Tn=p.coerce.number().int().min(0),En=p.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,r,i)=>{kn(e,t.clientToken,!1);let a=n(t.canvas),o=On(t.baseVersion);return xe(a)&&Ze(a,await Je(e,a.canvasId,o),i),qe(e.remote).execute({canvasId:a.canvasId,mutationId:An(e,r),baseVersion:o,operations:[...i]})},Mn=async(e,t,r,i)=>{kn(e,t.clientToken,!1);let a=n(t.canvas);return et(e.remote).execute({...a,baseVersion:On(t.baseVersion),mutationId:An(e,`canvas.edit`),edits:r,...i!==void 0&&{idPrefix:i}})},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=h.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=p.array(re).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=p.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=p.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 r=n(e.canvas),i=Rn(e.baseVersion),a=In(e.operations);xe(r)&&Ze(r,await Je(t,r.canvasId,i),a);let o=await t.invocation.invoke({capability:d(t.catalog(),`canvas.apply`),arguments:{canvasId:r.canvasId,baseVersion:i,operations:[...a]},clientToken:e.clientToken??null});t.output.result(o)})},Vn=e=>{try{return JSON.parse(e)}catch{return}},Hn=e=>{if(e===void 0)return null;let t=de.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=ee.safeParse(e.phase);if(!n.success)throw new u(`BAD_REQUEST`,`--phase is invalid.`,`Use reading, writing, creating, deleting, or rendering.`);let r=te(e.canvas),i=c.parse(await t.remote.mutate(`canvas.realtime.activity.begin`,{canvasId:r,phase:n.data,nodeIds:Un(e.nodeIds),bounds:Hn(e.bounds)}));t.output.result({...i,next:[`enhance canvas work update --canvas ${r} --activity-id ${i.activityId} --phase ${n.data}`,`enhance canvas finish-working-on-nodes --canvas ${r} --activity-id ${i.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(c.parse(await t.remote.mutate(`canvas.realtime.activity.renew`,{canvasId:te(e.canvas),activityId:gn.parse(e.activityId),phase:ee.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 We(t.remote).finish(te(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)},g=(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=g(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=g(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=g(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=g(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=se.parse(await e.remote.query(`canvas.document.get`,{canvasId:t}));return{held:n,document:Fe.parse(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 r=n(e.canvas),i=r.canvasId,{held:a,document:o}=await Hr(t,i);ae(r,o,[e.nodeId]),t.output.result({canvasId:i,version:a.version,nodeId:e.nodeId,jsx:zr(o,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 r=n(e.canvas),i=r.canvasId,{held:a,document:o}=await Hr(t,i),s=g(e.nodeIds,wn,`--node-ids`);ae(r,o,s),t.output.result({canvasId:i,version:a.version,nodes:Br(o,s),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 p.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=d(e.catalog(),`canvas.duplicateNodes`);e.output.result(await e.invocation.invoke({capability:n,arguments:g(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=g(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,g(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 r=t.mode===`replace`?`replace`:`insert-children`,i=n(t.canvas),a=On(t.baseVersion);e.output.result(await e.invocation.invoke({capability:d(e.catalog(),`canvas.writeHtml`),arguments:{canvasId:i.canvasId,...i.pageId!==void 0&&{pageId:i.pageId},...i.nodeIds.length>0&&{selectionNodeIds:[...i.nodeIds]},targetNodeId:t.targetNodeId,mode:r,html:Yr(t.html),...t.idPrefix!==void 0&&{idPrefix:t.idPrefix},baseVersion:a,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(`&`,`&`).replaceAll(`"`,`"`),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=g(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=te(e.canvas),i=On(e.baseVersion),a=await Je(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(`&`,`&`).replaceAll(`"`,`"`);t.output.result(await it(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.arrange`]){let r=d(t.catalog(),n),i=n===`canvas.insertHtml`?`insert-html`:n===`canvas.makeEditable`?`make-editable`: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:g(e.input,r.inputSchema,`--input`),clientToken:p.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:d(t.catalog(),`canvas.remove`),arguments:g(e.input,fe,`--input`),clientToken:p.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}}:g(e.input,me,`--input`);t.output.result(await t.invocation.invoke({capability:d(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:d(t.catalog(),`canvas.find`),arguments:g(e.input,le,`--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=g(e.input,Ie,`--input`);t.output.result(await t.invocation.invoke({capability:d(t.catalog(),`canvas.updateHtml`),arguments:n,clientToken:p.uuid().parse(e.clientToken)}))})},li=(e,t)=>{let n=d(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:g(e.input,n.inputSchema,`--input`),clientToken:p.uuid().parse(e.clientToken)}))})},ui=(e,t)=>{let n=d(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:g(e.input,n.inputSchema,`--input`),clientToken:p.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`),r=e.getOptionValue(`canvasId`);if(t!==void 0&&r!==void 0)throw new u(`BAD_REQUEST`,`--canvas and --canvas-id cannot be combined.`,`Pass the pasted URL or UUID through --canvas.`);let i=t??r;if(typeof i!=`string`)throw TypeError(`The required-option check let canvas ${e.name()} run without --canvas.`);return{reference:n(i),url:i}},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 Xe(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=xe(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:g(e.input,Ne,`--input`),clientToken:Wr(e.clientToken)}},_i=`canvas render --canvas 0b9f4c1e-5d2a-4e8b-9c3f-7a6d1e2b4c50`,vi={"canvas render":_i},yi=p.coerce.number().int().positive(),bi=p.coerce.number().int().nonnegative(),xi=p.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=de.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 p.uuid().safeParse(e.slice(4)).data},Ei=(e,t)=>{let n=p.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=n(e.canvas??``),a=wi(e.nodeId,Ci(e.bounds)),o=e.expectedVersion===void 0?null:Si(yi,e.expectedVersion,`--expected-version`);if(!xe(r))return{target:a,expectedVersion:o};let s=se.parse(await t.remote.query(`canvas.document.get`,{canvasId:r.canvasId}));if(o!==null&&o!==s.version)throw new u(`CONFLICT`,`The canvas changed before rendering.`,`Read the linked page or selection and render its current version.`);return{target:i(r,Fe.parse(s.document),a),expectedVersion:s.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 r=await Di(e,t),i=r.target.kind===`node`?r.target.nodeId:void 0;if(i===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 a=e.atMs===void 0?null:Ti(i);if(a===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 o=await t.invocation.invoke({capability:d(t.catalog(),`canvas.render`),arguments:{canvasId:n(e.canvas).canvasId,...r,sourceState:a==null?null:{kind:`recording`,recordingId:a,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(o)},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:d(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=at(t.remote,Ke(t.configDirectory),t.now,t.output.result);Bn(n,t),di(n,{...t,render:i}),hi(n,t),Ai(r,t)},v=p.string().trim().min(1).max(160),Mi=p.string().regex(/^[a-f0-9]{64}$/u),Ni=p.number().int().positive(),Pi=p.strictObject({source:v,journey:v,step:v,variant:v}),Fi=p.strictObject({sha256:Mi,bytes:p.number().int().positive(),mediaType:p.string().min(1).max(200)}),Ii=p.strictObject({organisationId:p.uuid().optional()}),Li=p.strictObject({key:p.string().min(1),label:p.string().min(1),url:p.url().optional(),sequence:p.number().int().nonnegative(),attempt:p.number().int().nonnegative().default(0)}),Ri=p.union([p.strictObject({runId:p.uuid()}),p.strictObject({reference:p.string().min(1),revision:p.string().min(1).optional()})]),zi=p.strictObject({destination:Ii,context:Li.optional(),revision:p.string().min(1).optional(),baselineRunId:p.uuid().nullable(),compareTo:Ri.optional()}),Bi=p.enum([`awaiting-review`,`approved`,`changes-requested`]),Vi=p.strictObject({format:p.literal(`enhance-capture`),version:p.literal(1),key:Pi,label:v,journeyLabel:v,order:p.number().int().nonnegative(),page:p.string().min(1).optional(),viewport:p.strictObject({width:Ni,height:Ni,deviceScaleFactor:p.number().positive()}),extent:p.enum([`viewport`,`full-page`]),source:p.strictObject({format:p.literal(`rrweb-screen`),version:p.literal(1),blob:Fi}),preview:p.strictObject({blob:Fi,width:Ni,height:Ni,pixelRatio:p.number().positive()}),assets:p.array(p.strictObject({url:p.url(),blob:Fi})),provenance:p.strictObject({adapter:v,sdkVersion:v,kernelVersion:v,browser:v,capturedAt:p.iso.datetime(),sourceUrl:p.url().optional(),commit:p.string().min(1).max(200).optional()}),issues:p.array(p.strictObject({code:v,message:p.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=p.strictObject({id:p.uuid(),canvasId:p.uuid(),source:v,runKey:v,generation:p.number().int().nonnegative(),participants:p.array(v).min(1),expiresAt:p.iso.datetime(),formatVersion:p.literal(1),review:zi.optional()}),Ui={participant:v,retry:p.number().int().nonnegative(),status:p.enum([`passed`,`failed`,`skipped`,`interrupted`,`timedOut`]),title:p.string().min(1).optional(),location:p.strictObject({file:p.string().min(1),line:p.number().int()}).optional(),captures:p.array(Vi)},Wi=p.strictObject({runner:p.literal(`playwright`).optional(),testId:v,project:v,...Ui}),Gi=p.strictObject({runner:p.literal(`script`),...Ui}),Ki=p.union([Wi,Gi]),qi=p.strictObject({key:Pi.optional(),testId:v.optional(),message:p.string().min(1).max(500)}),Ji=p.strictObject({format:p.literal(`enhance-capture-run`),version:p.literal(1),run:Hi,participants:p.array(p.strictObject({id:v,status:p.enum([`passed`,`failed`,`interrupted`])})).min(1),attempts:p.array(Ki),ordering:p.enum([`partial`,`complete`]),leftOut:p.array(qi).optional()}),Yi=p.strictObject({runId:p.uuid(),canvasId:p.uuid(),canvasUrl:p.url(),version:p.number().int().positive(),manifestDigest:Mi,frames:p.array(p.strictObject({key:Pi,frameId:v,captureId:p.uuid()})),issues:p.array(p.strictObject({code:v,message:p.string().max(500)}))}),Xi=p.strictObject({canvasId:p.uuid().optional(),destination:Ii.optional(),title:p.string().trim().min(1).optional(),context:Li.optional(),revision:p.string().min(1).optional(),compareTo:Ri.optional(),source:v.default(`default`),runKey:v,participants:p.array(v).min(1).default([`local`]),formatVersion:p.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=p.strictObject({run:Hi});p.strictObject({runId:p.uuid()});const Qi=p.enum([`collecting`,`sealed`,`converting`,`committed`,`failed`,`cancelled`]),$i=p.strictObject({run:Hi,state:Qi,receipt:Yi.nullable(),verdict:Bi.optional(),failure:p.strictObject({code:v,message:p.string().max(1e3)}).nullable()});p.strictObject({runId:p.uuid(),blobs:p.array(Fi).min(1).max(400)});const ea=p.strictObject({uploads:p.array(p.strictObject({sha256:Mi,upload:p.strictObject({url:p.url(),headers:p.record(p.string(),p.string()),expiresAt:p.iso.datetime()}).nullable()})).max(400)});p.strictObject({canvasId:p.uuid(),frameId:p.string().min(1),captureId:p.uuid()});const ta=p.strictObject({captureId:p.uuid(),capturedAt:p.iso.datetime(),commit:p.string().max(200).optional(),url:p.string().min(1),width:p.number().positive(),height:p.number().positive(),pixelRatio:p.number().positive()});p.strictObject({frameId:p.string(),before:ta,after:ta});const na=m.array(m.object({code:m.string().check(m.minLength(1),m.maxLength(160)),message:m.string().check(m.minLength(1),m.maxLength(500))})).check(m.maxLength(32));m.object({issues:m.optional(na),prototype:m.optional(m.object({prototypeId:m.uuid(),deploymentId:m.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,y=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([y(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(y(a));(o===void 0||o.retry<a.retry)&&i.set(y(a),a)}return e.attempts.filter(e=>i.get(y(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(y(e.attempt),y(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=>y(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(y(e),y(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:p.array(p.unknown())},Pa=Ji.extend({attempts:p.array(p.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}}});p.strictObject({manifest:Pa}),p.strictObject({canvasId:p.uuid()}).extend({verdict:Bi});const Fa=p.strictObject({canvasId:p.uuid(),name:p.string().min(1)}),Ia=p.strictObject({runId:p.uuid(),revision:p.string(),version:p.number().int().positive()}),La=Fa.extend({expectedVersion:p.number().int().nonnegative(),revision:p.string().min(1)}),Ra=p.strictObject({current:$i,latest:Hi,related:p.array(p.strictObject({run:Hi,verdict:Bi})),changes:p.array(p.strictObject({key:Pi,frameId:p.string(),label:p.string(),journeyLabel:p.string(),page:p.string().optional(),change:p.enum([`new`,`changed`,`unchanged`,`uncompared`])}))}),b=(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 b(`artifact`,`Invalid capture blob digest.`);return h.join(h.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 b(`artifact`,`Capture blob bytes do not match their descriptor.`);await At(h.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 b(`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)},x={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={[x.v1]:`layout`,[x.v2]:`layout`,[x.v3]:`typography`,[x.v4]:`typography`,[x.v5]:`typography`,[x.v6]:`geometry`,[x.v7]:`geometry`,[x.v8]:`geometry`,[x.v9]:`geometry`,[x.v10]:`geometry`,[x.v11]:`css`,[x.v12]:`text-shadow-blend`,[x.v13]:`format-number`,[x.v14]:`format-number`},$a=[`appearance-unsupported-component`,`styles-unsupported-component`,`text-shadow-blend-unsupported`,`recording-aspect-not-preserved`],S=e=>typeof e==`object`&&!!e&&!Array.isArray(e),eo=e=>Array.isArray(e)?e:void 0,C=(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(!S(e)||!S(e.compositing))return;let t=e.compositing.mask;return typeof t==`string`?no[t]:void 0},io=e=>S(e)?C(e,`blendMode`,`blendSource`):e,ao=e=>S(e)&&`paint`in e?{...C(e,`paint`,`alignment`),paints:[e.paint]}:e,oo=e=>{if(!S(e)||!S(e.progression))return e;let t=e.progression.startValue,n=e.value;return{...C(e,`progression`),value:typeof t==`number`&&typeof n==`number`?Math.max(t,n):n}},so=e=>S(e)&&e.kind===`image`?C(e,`adjustments`):e,co=e=>eo(e)?.filter(e=>!S(e)||e.kind!==`inner`).map(e=>S(e)?{...e,spread:0}:e)??e,lo=e=>{if(!S(e))return e;let t={...e,paint:io(e.paint)};return e.alignment===`inside`?{...t,alignment:`center`}:t},uo=e=>{if(!S(e)||e.kind!==`span`)return e;let t=C(e,`decorationBlendMode`),n=eo(e.fills);n!==void 0&&(t.fills=n.map(e=>io(e))),S(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=S(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(!S(t)||!S(t.paintFallback))return{...e};let n=t.paintFallback.mask;if(n===void 0)return{...e};let r=C(t.paintFallback,`mask`),i=Object.keys(r).length===0?C(t,`paintFallback`):{...t,paintFallback:r},a=e.styles,o=C(e,`props`);return S(n)&&S(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 S(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)),S(e.decoration)&&(t.decoration=C(e.decoration,`blendMode`)),t},_o=e=>{if(!S(e))return e;let t=C(mo(e),`compositing`);ho(e)&&S(t.styles)&&(t.styles={...t.styles,isolation:`isolate`});let n=e.component===`text`;if(S(e.appearance)&&(t.appearance=po(e.appearance,n)),!n)return t;S(e.typography)&&(t.typography=go(e.typography));let r=t.props,i=S(r)?eo(r.richText):void 0;return i!==void 0&&S(r)&&(t.props={...r,richText:i.map(e=>uo(e))}),t},vo=e=>S(e)&&typeof e.sortKey==`string`?e.sortKey:``,yo=e=>{let t=new Map;for(let[n,r]of Object.entries(e)){if(!S(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!==``&&S(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&&S(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(!S(t))return e;let n=Object.fromEntries(Object.entries(t).map(([e,t])=>[e,_o(t)]));if(!S(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(x),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===x.v13||e.version===x.v14?t:Oo(e.version===x.v12?t:Co(t))};p.strictObject({}),p.object({firstAgentWorkAt:p.iso.datetime().nullable()});const Io=p.object({cursor:p.string().nullable().default(null),limit:p.number().int().min(1).max(100).default(20)}),Lo=e=>p.object({items:p.array(e),truncated:p.boolean()}),Ro=2048,zo=p.enum([`never-captured`,`capture-pending`,`extension-unavailable`,`capture-failed`,`source-mismatch`,`upload-incomplete`,`blob-missing`,`image-load-failed`,`unsupported-legacy-state`]),Bo=p.object({background:p.string().optional(),documentVersion:p.number().int().positive().optional(),thumbnailId:p.uuid(),url:p.string(),width:p.literal(528),height:p.literal(312),bytes:p.number().int().min(1).max(1048576)});p.object({canvasId:p.uuid(),thumbnailId:p.uuid(),clientReleaseIdentity:p.string().min(1).max(100),attemptedOperation:p.literal(`thumbnail-download`),recoveryOutcome:p.literal(`fallback-shown`)}),p.object({recorded:p.literal(!0)});const Vo=p.enum([`invite-only`,`link-view`,`link-comment`,`link-edit`]),Ho=p.enum([`owner`,`can-edit`,`can-comment`,`can-view`]),Uo=p.enum([`can-edit`,`can-comment`,`can-view`]),Wo=p.object({read:p.boolean(),comment:p.enum([`yes`,`sign-in`,`no`]),edit:p.enum([`yes`,`sign-in`,`no`]).default(`no`),grants:p.array(p.object({source:p.enum([`direct`,`team`,`link`]),accessLevel:Ho})).default([]),grantableAccessLevels:p.array(Uo).default([]),share:p.boolean(),manage:p.boolean(),readHistory:p.boolean().default(!1)}),Go=p.object({id:p.uuid(),title:p.string().min(1),accessState:Vo,organisationId:p.uuid().nullable(),sourceUrl:p.string().nullable(),unresolvedCount:p.number().int().min(0),viewerCan:Wo,createdAt:p.iso.datetime(),lastActivityAt:p.iso.datetime()});p.object({title:p.string().trim().min(1),organisationId:p.uuid().nullable().default(null),sourceUrl:p.string().nullable().default(null)}),Go.extend({version:p.number().int().positive()}),p.object({canvasId:p.uuid()});const Ko=p.union([p.literal(`own`),p.literal(`everything`),p.uuid()]);p.object({collection:Ko.default(`own`),title:p.string().trim().min(1).optional().describe(`Title text to match before returning canvas ids.`),deleted:p.boolean().default(!1),accessState:Vo.optional(),scope:p.enum([`all`,`mine`,`shared`]).default(`all`),hasUnresolved:p.boolean().default(!1)});const qo=Go.extend({screenCount:p.number().int().min(0),hasRecording:p.boolean(),lastViewedAt:p.iso.datetime().nullable()});Lo(p.union([qo.extend({thumbnail:Bo}),qo.extend({thumbnail:p.null(),thumbnailFallbackReason:zo})])),p.object({canvasId:p.uuid(),title:p.string().trim().min(1)}),p.object({canvasId:p.uuid()}),p.object({canvasId:p.uuid(),deletedAt:p.iso.datetime()}),p.object({canvasId:p.uuid(),organisationId:p.union([p.uuid(),p.literal(`personal`)])}),p.object({canvas:Go}),p.object({canvasId:p.uuid(),organisationId:p.union([p.uuid(),p.literal(`personal`)]),title:p.string().trim().min(1).optional()}),p.object({canvas:Go}),p.object({canvasId:p.uuid(),sourceCanvasId:p.uuid().optional(),organisationId:p.union([p.uuid(),p.literal(`personal`)]),title:p.string().trim().min(1),document:p.record(p.string(),p.unknown()),screenIds:p.array(p.uuid())}),p.object({canvas:Go,document:p.record(p.string(),p.unknown())}),p.object({canvasId:p.uuid(),confirmation:p.string().min(1)}),p.object({canvasId:p.uuid()}),p.object({canvasId:p.uuid(),accessState:Vo}),p.object({canvas:Go,widened:p.boolean()}),p.object({canvasId:p.uuid()}),p.object({lastViewedAt:p.iso.datetime().nullable()}),p.object({canvasId:p.uuid()}),p.object({canvasId:p.uuid()});const Jo=/javascript|vbscript|data\s*:\s*text\/html|expression\s*\(|@import/iu,Yo=p.string().refine(e=>!Jo.test(e),`unsafe CSS value`),w=p.number(),T=p.number().nonnegative(),E=w,Xo=T,D=p.number().min(0).max(1),O=p.string().min(1),Zo=p.object({space:p.enum([`srgb`,`display-p3`]),red:D,green:D,blue:D,alpha:D,definitionId:O.optional()}),Qo=p.object({id:O,position:D,color:Zo}),$o=p.object({id:O,visible:p.boolean()}),es=$o.extend({kind:p.literal(`blur`),value:Xo,parameter:p.enum([`radius`,`standard-deviation`]).optional()}),ts=[$o.extend({kind:p.literal(`brightness`),value:Xo}),$o.extend({kind:p.literal(`contrast`),value:Xo}),$o.extend({kind:p.literal(`grayscale`),value:D}),$o.extend({kind:p.literal(`hue-rotate`),value:E}),$o.extend({kind:p.literal(`invert`),value:D}),$o.extend({kind:p.literal(`saturate`),value:Xo}),$o.extend({kind:p.literal(`sepia`),value:D})],ns=p.discriminatedUnion(`kind`,[es,...ts]),rs=p.discriminatedUnion(`kind`,[es.extend({progression:p.object({startValue:Xo,start:p.object({x:E,y:E}),end:p.object({x:E,y:E})}).optional()}),...ts]),is=p.tuple([E,E,E,E,E,E]).refine(([e,t,n,r])=>e*r!==t*n,`paint transform must be invertible`),as=p.enum([`normal`,`multiply`,`screen`,`overlay`,`darken`,`lighten`,`plus-lighter`,`color-dodge`,`color-burn`,`hard-light`,`soft-light`,`difference`,`exclusion`,`hue`,`saturation`,`color`,`luminosity`]),os=p.object({kind:p.literal(`figma`),originalMode:p.string(),mappedMode:as,sourceGuid:p.string().optional(),path:p.array(p.string())}),ss=p.object({id:O,blendMode:as.optional(),blendSource:os.optional(),visible:p.boolean(),opacity:D}),cs=p.discriminatedUnion(`kind`,[ss.extend({kind:p.literal(`solid`),color:Zo}),ss.extend({kind:p.literal(`linear-gradient`),angle:E,transform:is.optional(),stops:p.array(Qo).min(2)}),ss.extend({kind:p.literal(`radial-gradient`),center:p.object({x:E,y:E}),radius:p.object({x:Xo,y:Xo}),transform:is.optional(),stops:p.array(Qo).min(2)}),ss.extend({kind:p.literal(`angular-gradient`),transform:is,stops:p.array(Qo).min(2)}),ss.extend({kind:p.literal(`diamond-gradient`),transform:is,stops:p.array(Qo).min(2)}),ss.extend({kind:p.literal(`image`),assetId:p.string().min(1),fit:p.enum([`fill`,`cover`,`fit`,`crop`,`tile`]),tileScale:E.positive().optional(),tileOrigin:p.enum([`center`,`top-left`]).optional(),rotation:p.union([p.literal(0),p.literal(90),p.literal(180),p.literal(270)]).optional(),crop:p.object({x:D,y:D,width:D,height:D}).optional(),transform:is.optional(),filters:p.array(ns).optional(),naturalSize:p.object({width:E.positive(),height:E.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`]})]),ls=p.intersection(cs,p.object({alternatives:p.partialRecord(p.enum([`solid`,`linear-gradient`,`radial-gradient`,`angular-gradient`,`diamond-gradient`,`image`]),cs).optional(),recentGradient:p.enum([`linear-gradient`,`radial-gradient`,`angular-gradient`,`diamond-gradient`]).optional()})),us=p.object({id:O,name:p.string().trim().min(1),value:p.union([Zo.omit({definitionId:!0}),p.object({definitionId:O})]),source:p.object({kind:p.literal(`figma`),key:O,modeId:O.optional()}).optional()}),ds=p.object({op:p.literal(`setArtworkColor`),nodeId:p.literal(`root`),colorId:p.string().min(1),definition:us.nullable()}).refine(e=>e.definition===null||e.definition.id===e.colorId,`colour identity must match`),fs=p.object({ratio:T,offset:w.optional()}),ps=p.object({min:T.optional(),max:T.optional(),minParent:fs.optional(),maxParent:fs.optional()}).refine(({min:e,max:t})=>e===void 0||t===void 0||e<=t,`size minimum cannot exceed maximum`),ms=p.discriminatedUnion(`mode`,[p.object({mode:p.literal(`fixed`),value:T}).strict(),ps.extend({mode:p.literal(`hug`),implicitExtent:T.optional()}).strict(),ps.extend({mode:p.literal(`fill`),offset:w.optional()}).strict()]),hs=p.object({top:T,right:T,bottom:T,left:T}),gs=p.union([p.literal(`auto`),w]),_s=p.object({top:gs,right:gs,bottom:gs,left:gs}),vs=p.object({mode:p.enum([`auto-fill`,`auto-fit`]),minimum:p.number().positive()}),ys=p.object({x:w,y:w}),bs=p.object({direction:p.enum([`row`,`column`]),alignItems:p.enum([`start`,`center`,`end`,`stretch`]),alignContent:p.enum([`start`,`center`,`end`,`stretch`,`space-between`,`space-around`,`space-evenly`]).optional(),justifyContent:p.enum([`start`,`center`,`end`,`space-between`,`space-around`,`space-evenly`]),gap:w,rowGap:w.optional(),columnGap:w.optional(),crossGapMode:p.literal(`auto`).optional(),wrap:p.enum([`nowrap`,`wrap`]).optional(),gridColumns:p.number().int().positive().optional(),gridAutoRepeat:vs.optional(),padding:hs}).strict(),xs=p.object({button:p.literal(!0).optional(),overflowClip:p.literal(!0).optional(),lineAboveBorderBottom:w.optional()}).strict(),Ss=p.object({top:T.optional(),right:T.optional(),bottom:T.optional(),left:T.optional()}).strict(),Cs=p.object({ratio:w,offset:w.optional()}).strict(),ws=p.object({x:Cs.optional(),y:Cs.optional()}).strict(),Ts=p.object({rotation:w.optional(),flipHorizontal:p.boolean().optional(),flipVertical:p.boolean().optional(),aspectRatioLocked:p.boolean().optional(),aspectRatio:p.number().positive().optional(),horizontal:ms.optional(),vertical:ms.optional(),position:p.enum([`flow`,`absolute`]).optional(),retainedIgnore:p.literal(!0).optional(),gridParticipation:p.literal(`unassigned`).optional(),gridEmptyPlacement:p.literal(`manual`).optional(),gridAutoTrackPolicy:p.object({rows:p.literal(`extend-last`).optional(),columns:p.literal(`extend-last`).optional()}).strict().optional(),retainedFlexSpacing:p.object({gap:p.union([w,Yo.min(1)]),counterGap:p.union([w,Yo.min(1)]),crossGapMode:p.literal(`auto`).optional()}).strict().optional(),alignSelf:p.enum([`auto`,`start`,`center`,`end`,`stretch`]).optional(),flexGrow:T.optional(),flexShrink:T.optional(),flexBasis:p.union([p.literal(`auto`),T,fs]).optional(),flowOffset:ys.optional(),positionParent:ws.optional(),order:w.int().optional(),margin:_s.partial().optional(),clipContent:p.boolean().optional(),baselineSource:xs.optional(),scrollbarGutter:Ss.optional(),container:bs.partial().extend({padding:hs.partial().optional()}).optional()}).strict(),Es=w,k=T,Ds=p.number().min(0).max(1),Os=p.string().min(1),ks=p.object({topLeft:k,topRight:k,bottomRight:k,bottomLeft:k,smoothing:Ds.optional()}),As=p.array(k).min(1),js=p.enum([`none`,`round`,`square`]),Ms=p.object({visible:p.boolean(),layoutInclusion:p.enum([`always`,`visible`,`none`]).optional(),width:p.object({top:k,right:k,bottom:k,left:k}),style:p.enum([`solid`,`dashed`,`dotted`]),paints:p.array(ls),dashPattern:As.optional(),dashCap:js.optional(),dashOrigin:p.literal(`css`).optional(),alignment:p.enum([`inside`,`center`,`outside`]).optional()}),Ns=Ms.pick({width:!0,style:!0,layoutInclusion:!0}),Ps=p.object({visible:p.boolean(),width:k,offset:Es,style:p.enum([`solid`,`dashed`,`dotted`]),paints:p.array(ls),dashPattern:As.optional(),dashCap:js.optional()}),Fs=p.object({id:Os,visible:p.boolean(),kind:p.enum([`outer`,`inner`]),color:Zo,offsetX:Es,offsetY:Es,blur:k,spread:Es,blendMode:as.optional(),blendSource:os.optional(),isShownBehindNode:p.boolean().optional()}),Is=p.object({opacity:Ds,blendMode:as,fills:p.array(ls),border:Ms,retainedBorder:Ns.optional(),outline:Ps,radius:ks,shadows:p.array(Fs),filters:p.array(ns),backdropFilters:p.array(rs)}),Ls=Is.partial().refine(e=>Object.keys(e).length>0,`appearance values cannot be empty`),Rs=[`opacity`,`blendMode`,`fills`,`border`,`retainedBorder`,`outline`,`radius`,`shadows`,`filters`,`backdropFilters`],zs=p.enum(Rs),Bs=Is.partial().extend({clear:p.array(zs).min(1).max(Rs.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=p.number(),j=p.number().nonnegative(),Vs=p.string().regex(/^[\u{20}-\u{7E}]{4}$/u),Hs=Vs.refine(e=>![`wght`,`opsz`].includes(e)),M=p.object({family:p.string().min(1),fallbackFamilies:p.array(p.string().min(1)),size:j,weight:p.number().min(1).max(1e3),variations:p.record(Hs,A).optional(),features:p.record(Vs,p.number().int().nonnegative().max(65535)).optional(),opticalSize:p.discriminatedUnion(`mode`,[p.object({mode:p.literal(`auto`)}),p.object({mode:p.literal(`font-default`)}),p.object({mode:p.literal(`fixed`),value:A})]).optional(),style:p.enum([`normal`,`italic`,`oblique`]),lineHeight:p.discriminatedUnion(`mode`,[p.object({mode:p.literal(`normal`)}),p.object({mode:p.literal(`fixed`),value:j}),p.object({mode:p.literal(`percent`),value:j})]),letterSpacing:p.union([A,p.object({mode:p.literal(`percent`),value:A})]),align:p.enum([`left`,`center`,`right`,`justify`]),direction:p.enum([`auto`,`ltr`,`rtl`]).optional(),verticalAlign:p.enum([`top`,`middle`,`bottom`]),verticalTrim:p.enum([`none`,`cap-height`]).optional(),transform:p.enum([`none`,`uppercase`,`lowercase`,`capitalize`]),decoration:p.object({line:p.enum([`none`,`underline`,`line-through`]),style:p.enum([`solid`,`double`,`dotted`,`dashed`,`wavy`]),color:Zo.optional(),blendMode:as.optional(),thickness:p.union([j,p.object({mode:p.literal(`percent`),value:j}),p.object({mode:p.literal(`font-default`)})]).optional(),offset:p.union([A,p.object({mode:p.literal(`percent`),value:A})]).optional(),skipInk:p.enum([`auto`,`none`,`all`]).optional()}),stroke:p.object({width:j,paint:ls,alignment:p.enum([`center`,`outside`]).optional()}).optional(),wrapping:p.enum([`wrap`,`nowrap`,`pre`,`pre-line`,`pre-wrap`,`break-spaces`]),wrapStyle:p.enum([`auto`,`pretty`,`balance`]).optional(),paragraphSpacing:j.optional(),paragraphIndent:j.optional(),listStyle:p.enum([`none`,`bulleted`,`numbered`]).optional(),listSpacing:j.optional(),hangingList:p.boolean().optional(),hangingPunctuation:p.boolean().optional(),truncation:p.object({mode:p.enum([`none`,`ellipsis`]),maxLines:p.number().int().min(1).nullable()}).optional(),insets:p.object({top:A,right:A,bottom:A,left:A}).optional()}),Us=M.pick({align:!0,direction:!0,wrapStyle:!0,paragraphSpacing:!0,paragraphIndent:!0,listStyle:!0,listSpacing:!0,hangingList:!0}).partial().extend({listLevel:p.number().int().min(1).optional(),listStart:p.number().int().min(1).optional()}).strict(),Ws=M.partial().strict(),Gs=M.keyof().options,Ks=Ws.extend({featureChanges:p.object({set:M.shape.features,clear:p.array(Vs).optional(),removeIfEmpty:p.boolean().optional()}).strict().optional(),variationChanges:p.object({set:M.shape.variations,clear:p.array(Hs).optional(),removeIfEmpty:p.boolean().optional()}).strict().optional(),clear:p.array(M.keyof()).max(Gs.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`),qs={"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`]},Js=/^(?:behavior|-moz-binding)$/iu,Ys=p.string().min(1).regex(/^(?:--[\w-]+|-(?:webkit|moz|ms|o)-[a-z][a-z\d-]*|[a-z][a-z\d-]*)$/iu).refine(e=>!Js.test(e),`unsafe CSS property`),N=p.object({id:p.string().min(1),property:Ys,value:Yo,enabled:p.boolean()}),Xs=p.object({declarations:p.array(N)}).refine(({declarations:e})=>new Set(e.map(e=>e.id)).size===e.length,`additional style ids must be unique`),Zs=p.array(N.shape.id).refine(e=>new Set(e).size===e.length,`declaration ids must be unique`),Qs=p.object({set:p.array(N).refine(e=>new Set(e.map(e=>e.id)).size===e.length,`declaration ids must be unique`).optional(),clear:Zs.optional(),order:Zs.optional(),empty:p.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`),$s=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(),ec=$s.keyof().options,tc=p.object({id:p.string().min(1),name:p.string().trim().min(1),description:p.string().max(2e3),sortKey:p.string().min(1).optional(),sourceStyleId:p.string().min(1).optional(),sourceCanvasId:p.uuid().optional(),sourceRevision:p.number().int().positive().optional(),typography:$s.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`]});p.object({id:tc.shape.id,position:p.enum([`normal`,`subscript`,`superscript`]).optional(),overrides:p.partialRecord(p.enum([`fontWeight`,`fontStyle`,`fontVariationSettings`,`fontOpticalSizing`,`textDecorationLine`,`textDecorationStyle`,`textDecorationColor`,`textDecorationThickness`,`textUnderlineOffset`,`textDecorationSkipInk`]),p.union([p.string().max(1e3),p.number()])).optional()}).strict();const nc=ls.array().optional();p.object({fills:nc}),Us.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:as.optional()}).strip();const P=p.object({url:p.url(),expiresAt:p.iso.datetime(),headers:p.record(p.string(),p.string())}),rc=p.object({url:p.url(),expiresAt:p.iso.datetime(),bytes:p.number().int().min(0)}),ic=`/v1/canvas-assets/`,ac=[`image/avif`,`image/gif`,`image/jpeg`,`image/png`,`image/webp`],oc=p.string().regex(/^image\/[a-z0-9.+-]+$/u);p.object({canvasId:p.uuid(),contentType:p.enum(ac),bytes:p.number().int().positive()}),p.object({assetId:p.uuid(),path:p.string().startsWith(`/v1/canvas-assets/`),upload:P});const sc=(e,t)=>`${ic}${encodeURIComponent(e)}/${encodeURIComponent(t)}`,cc=p.tuple([p.uuid(),p.uuid()]),lc=e=>{if(!e.startsWith(`/v1/canvas-assets/`))return null;let t=cc.safeParse(e.slice(18).split(`/`)).data;return t===void 0?null:{canvasId:t[0],assetId:t[1]}},uc=[`font/ttf`,`font/otf`,`font/woff`,`font/woff2`,`font/collection`],dc=p.object({canvasId:p.uuid(),sha256:p.string().regex(/^[a-f0-9]{64}$/u)});dc.extend({bytes:p.number().int().positive()}).extend({contentType:p.enum(uc)}),p.object({path:p.string().startsWith(`/v1/canvas-assets/`)}).extend({upload:P});const fc=(e,t)=>`${ic}${encodeURIComponent(e)}/fonts/${encodeURIComponent(t)}`;p.object({canvasId:p.uuid(),sources:p.array(dc).min(1)}),p.object({resources:p.array(p.object({source:dc,path:p.string()}))});const pc=1e3,mc=new Set(uc),hc=(e,t)=>e===`image`?oc.safeParse(t).success:mc.has(t),gc=p.strictObject({canvasId:p.uuid(),clientToken:p.uuid()});p.discriminatedUnion(`kind`,[gc.extend({kind:p.literal(`image`),contentType:p.enum(ac),bytes:p.number().int().positive(),sha256:p.string().regex(/^[a-f0-9]{64}$/u)}),gc.extend({kind:p.literal(`font`),contentType:p.enum(uc),bytes:p.number().int().positive(),sha256:p.string().regex(/^[a-f0-9]{64}$/u)})]);const _c=p.discriminatedUnion(`kind`,[p.strictObject({kind:p.literal(`image`),width:p.number().int().positive(),height:p.number().int().positive()}),p.strictObject({kind:p.literal(`font`),family:p.string().min(1),subfamily:p.string(),style:p.enum([`normal`,`italic`,`oblique`]),minimumWeight:p.number().min(1).max(pc),maximumWeight:p.number().min(1).max(pc)}).refine(e=>e.minimumWeight<=e.maximumWeight,`Font weight bounds must be ordered.`)]);p.strictObject({canvasId:p.uuid(),clientToken:p.uuid(),assetId:p.uuid(),kind:p.enum([`image`,`font`]),contentType:p.string(),bytes:p.number().int().positive(),sha256:p.string().regex(/^[a-f0-9]{64}$/u),path:p.string().startsWith(`/v1/canvas-assets/`),state:p.enum([`awaiting_upload`,`ready`]),metadata:_c.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=>hc(e.kind,e.contentType),`Content type must match the asset kind.`).refine(e=>e.path===(e.kind===`image`?sc(e.canvasId,e.assetId):fc(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 vc=[`top`,`right`,`bottom`,`left`];vc.map(e=>`padding-${e}`),vc.map(e=>`margin-${e}`);const yc=p.enum([`png`,`jpeg`]),bc=p.number().positive(),xc=p.strictObject({format:yc.optional(),scale:bc.optional()}),Sc=p.strictObject({format:yc.nullable().optional(),scale:bc.nullable().optional()}).refine(e=>e.format!==void 0||e.scale!==void 0),Cc=p.number(),wc=Cc.nonnegative(),Tc=p.string().min(1).max(200),Ec=p.string().regex(/^[MmLlHhVvCcSsQqTtAaZzEe\d\s.,+-]*$/u),Dc=p.strictObject({x:Cc,y:Cc,width:wc,height:wc}),Oc=p.strictObject({kind:p.literal(`path`),path:Ec.min(1),fillRule:p.enum([`nonzero`,`evenodd`]),viewBox:Dc.extend({width:wc.positive(),height:wc.positive()})}),kc=p.strictObject({kind:p.literal(`polygon`),count:p.number().int().min(3),innerRatio:p.number().min(0).max(1).optional(),cornerRadius:wc,cornerSmoothing:p.number().min(0).max(1)}),Ac=p.enum([`union`,`subtract`,`intersect`,`exclude`]),jc=p.strictObject({kind:p.literal(`boolean`),operation:Ac,operandIds:p.array(Tc).min(1).refine(e=>new Set(e).size===e.length),result:p.strictObject({path:Ec,fillRule:p.literal(`nonzero`),isEmpty:p.boolean(),bounds:Dc,inputKey:p.string().regex(/^[a-f0-9]{16}$/u)}).refine(e=>e.isEmpty===(e.path===``))}),Mc=p.discriminatedUnion(`kind`,[Oc,kc,p.strictObject({kind:p.literal(`mask`),maskId:Tc,mode:p.enum([`alpha`,`luminance`,`outline`]).optional()}),jc]),Nc=`Update Enhance: compositing is no longer supported. Use the isolation style or a mask group.`,Pc=p.literal(15,{error:`This editor uses an unsupported document format. Update the editor before changing this canvas.`});p.object({signature:p.string().regex(/^[a-f0-9]{16}$/u),image:p.string().refine(e=>e.startsWith(`data:image/jpeg;base64,`)||lc(e)!==null),families:p.array(p.string().min(1)).min(1)});const F=p.object({x:p.number(),y:p.number(),width:p.number().nonnegative(),height:p.number().nonnegative()}),Fc=p.enum([`start`,`center`,`end`,`stretch`,`scale`]),Ic=p.object({x:Fc,y:Fc}),Lc=p.enum([`source`,`generated`,`content`,`user`]),I=p.looseObject({id:p.string().min(1),label:p.string(),component:p.string().min(1),labelOrigin:Lc.optional(),visible:p.boolean().optional(),locked:p.boolean().optional(),constraints:Ic.optional(),styles:p.record(p.string(),p.union([p.string(),p.number()])),layout:Ts.optional(),responsive:p.never().optional(),appearance:Ls.optional(),exportSettings:xc.optional(),typography:Ws.optional(),additionalStyles:Xs.optional(),geometry:Mc.optional(),compositing:p.never({error:Nc}).optional(),props:p.record(p.string(),p.unknown()).optional(),box:F.optional()}),Rc=p.object({version:p.literal(15),nodes:p.record(p.string(),I),relationships:p.record(p.string(),p.object({parentId:p.string().min(1),sortKey:p.string().min(1)})),tombstones:p.record(p.string(),p.literal(!0)).default({})}),zc=p.record(p.string(),p.unknown());p.preprocess(e=>{let t=zc.safeParse(e).data;return t===void 0?e:Object.keys(t).length===0?Bc():Fo(t)},Rc);const Bc=()=>({version:15,nodes:{root:{id:`root`,label:`Canvas`,component:`root`,labelOrigin:`generated`,visible:!0,locked:!1,styles:{}}},relationships:{},tombstones:{}}),Vc=p.string().min(1),Hc=p.object({code:p.enum([`asset-unavailable`,`content-omitted`,`cross-origin-frame`,`nodes-truncated`,`responsive-behavior-not-editable`,`style-degraded`,`unsupported-surface`]),message:p.string().min(1),temporaryId:Vc.optional()}),Uc=p.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`]),Wc=p.object({nodeCount:p.number().int().positive(),unsupportedFeatures:p.array(p.object({feature:Uc,count:p.number().int().positive()})).optional(),sourceNodeCount:p.number().int().positive().optional(),collapsedNodeCount:p.number().int().nonnegative().optional(),collapsedWrapperNodeCount:p.number().int().nonnegative().optional(),collapsedNeutralWrapperNodeCount:p.number().int().nonnegative().optional(),collapsedTransferredWrapperNodeCount:p.number().int().nonnegative().optional(),layoutContainerCount:p.number().int().nonnegative().optional(),removedLeafNodeCount:p.number().int().nonnegative().optional(),retainedSemanticOwnerNodeCount:p.number().int().nonnegative().optional(),truncatedNodeCount:p.number().int().nonnegative().optional(),addedLayoutNodeCount:p.number().int().nonnegative().optional(),issues:p.array(Hc)}),Gc=I.omit({id:!0}).extend({temporaryId:Vc}),Kc=p.object({temporaryId:Vc,parentTemporaryId:Vc,sortKey:p.string().min(1)}),qc=p.object({version:p.literal(1),rootTemporaryId:Vc,nodes:p.array(Gc).min(1),relationships:p.array(Kc),report:Wc.catch({nodeCount:0,issues:[]})}).transform(e=>({...e,report:{...e.report,nodeCount:e.nodes.length}})),Jc=p.object({screenId:p.string().min(1),pageId:p.string().min(1)}),Yc={canvasId:p.uuid(),documentFormatVersion:Pc,mutationId:p.uuid(),baseVersion:p.number().int().positive(),draft:qc};p.union([p.strictObject({...Yc,screenNodeId:p.string().min(1).describe(`The screen layer to convert beside itself.`)}),p.strictObject({...Yc,capture:Jc.describe(`The stored page a new capture lands from, and the page its frame goes on.`)})]);const Xc=p.object({canvasId:p.uuid(),mutationId:p.uuid(),previousVersion:p.number().int().positive(),version:p.number().int().positive(),rootNodeId:p.string().min(1),idMap:p.record(Vc,p.string().min(1)),insertedNodeIds:p.array(p.string().min(1)),removedNodeIds:p.array(p.string().min(1)),boxes:p.record(p.string().min(1),F),affectedBounds:F}),Zc=[`queued`,`claimed`,`grant`,`navigate`,`document`,`sources`,`fonts`,`layout`,`target`,`capture`,`serialize`,`compile`,`commit`,`upload`,`complete`],Qc=[`queued`,`running`,`succeeded`,`failed`,`cancelled`,`expired`],$c=[`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`],el=[`ASSET_UNAVAILABLE`,`FONT_FALLBACK`,`LOCAL_FONT_FALLBACK`,`SOURCE_FALLBACK`,`SCALE_REDUCED`,`LAYOUT_FALLBACK`],tl=p.number().int().positive(),nl=p.object({x:p.number(),y:p.number(),width:p.number().positive(),height:p.number().positive()}),rl=p.discriminatedUnion(`kind`,[p.object({kind:p.literal(`content`)}),p.object({kind:p.literal(`page`),pageId:p.string().min(1)}),p.object({kind:p.literal(`node`),nodeId:p.string().min(1)}),p.object({kind:p.literal(`bounds`),bounds:nl})]),il=p.object({kind:p.literal(`recording`),recordingId:p.uuid(),atMs:p.number().int().nonnegative()}),al=p.object({kind:p.literal(`recording`),recordingId:p.uuid(),requestedAtMs:p.number().int().nonnegative(),settledAtMs:p.number().int().nonnegative()}),ol=p.object({recordingId:p.uuid(),atMs:p.number().int().nonnegative(),screenId:p.uuid(),screenNodeId:p.string().min(1).nullable(),pageId:p.string().min(1).optional(),viewport:p.object({width:p.number().int().positive(),height:p.number().int().positive()}),box:nl,version:p.number().int().positive(),alreadyPresent:p.boolean()}),sl=p.object({canvasId:p.uuid(),expectedVersion:p.number().int().positive().optional(),scope:p.strictObject({pageId:p.string().min(1).optional(),nodeIds:p.array(p.string().min(1))}).optional(),target:rl.default({kind:`content`}),sourceState:il.optional(),scale:p.number().positive().default(1),maxOutputPixels:tl.optional(),format:p.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`]}),cl=p.enum(Zc);p.enum(Qc);const ll=p.enum($c),ul=p.enum(el),dl=p.object({code:ul,message:p.string().min(1).max(500),sourceId:p.string().min(1).nullable()}),L=p.object({reason:ll,phase:cl,message:p.string().min(1).max(500),retryable:p.boolean(),sourceId:p.string().min(1).nullable()}),fl=p.object({phase:cl,durationMs:p.number().int().min(0)}),pl=p.object({canvasId:p.uuid(),requestedVersion:p.number().int().positive(),loadedVersion:p.number().int().positive(),target:rl,sourceState:al.optional(),snapshot:ol.optional(),bounds:nl,width:p.number().int().positive(),height:p.number().int().positive(),scale:p.number().positive(),contentType:p.literal(`image/png`),bytes:p.number().int().positive(),warnings:p.array(dl),timings:p.array(fl),expiresAt:p.iso.datetime()}),ml=p.object({id:p.uuid(),canvasId:p.uuid(),purpose:p.enum([`inspection`,`snapshot`,`thumbnail`,`export`]),phase:cl,requestedVersion:p.number().int().positive(),target:rl,sourceState:il.optional(),scale:p.number().positive(),maxOutputPixels:tl.optional(),format:p.literal(`png`),attempt:p.number().int().min(0),lastFailure:L.optional(),createdAt:p.iso.datetime(),updatedAt:p.iso.datetime()}),hl=p.discriminatedUnion(`state`,[ml.extend({state:p.literal(`queued`),result:p.null(),failure:p.null()}),ml.extend({state:p.literal(`running`),result:p.null(),failure:p.null()}),ml.extend({state:p.literal(`succeeded`),phase:p.literal(`complete`),result:pl,failure:p.null()}),ml.extend({state:p.literal(`failed`),result:p.null(),failure:L}),ml.extend({state:p.literal(`cancelled`),result:p.null(),failure:L.extend({reason:p.literal(`CANCELLED`)})}),ml.extend({state:p.literal(`expired`),result:p.null(),failure:L.extend({reason:p.literal(`EXPIRED`)})})]);p.object({job:hl,alreadyExists:p.boolean()}),p.object({jobId:p.uuid()}).extend({waitMs:p.number().int().min(0).max(1e4).optional()}),p.object({job:hl}),p.object({jobId:p.uuid()}),p.object({job:hl});const gl=p.discriminatedUnion(`status`,[p.object({status:p.literal(`available`),version:p.number().int().positive(),format:p.literal(`enhance-scene-json`),code:p.string(),prototypes:p.array(p.object({nodeId:p.string(),prototypeId:p.uuid(),deploymentId:p.uuid(),capability:p.literal(`canvas.read`),canvasPath:p.string(),input:p.object({canvasRef:p.uuid(),view:p.literal(`source`),nodeId:p.string()}),guidance:p.string()})),guidance:p.string()}),p.object({status:p.literal(`unavailable`),guidance:p.string()})]);p.object({canvasId:p.uuid(),nodeId:p.string().min(1),expectedVersion:p.number().int().positive(),scale:p.number().positive()}),p.object({jobId:p.uuid()}),p.object({jobId:p.uuid(),download:rc,source:gl.optional()});const _l=p.strictObject({previewJobId:p.uuid(),scope:p.strictObject({pageId:p.string().min(1).optional(),nodeIds:p.array(p.string().min(1))}),placement:p.strictObject({kind:p.enum([`below-source`,`editable-below-source`])})});p.object({canvasId:p.uuid(),recordingId:p.uuid(),atMs:p.number().int().nonnegative(),context:p.strictObject({expectedVersion:p.number().int().positive(),request:_l}).optional()}),p.object({job:hl,alreadyExists:p.boolean()});const vl=p.object({rootIds:p.array(p.string().min(1))}),yl=p.discriminatedUnion(`kind`,[p.object({kind:p.literal(`adjacent`)}),p.object({kind:p.literal(`insert-children`),pageId:p.string().min(1).optional(),targetNodeId:p.string().min(1)}),p.object({kind:p.literal(`replace`),targetNodeId:p.string().min(1)})]),bl=p.discriminatedUnion(`kind`,[p.object({kind:p.literal(`screen`),nodeId:p.string().min(1)}),p.object({kind:p.literal(`html`),html:p.string().min(1),label:p.string().min(1),idPrefix:p.string().min(1).regex(/^[\w-]+$/u).optional()})]),xl=p.object({source:bl,destination:yl,revisionPolicy:p.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`]})}),Sl=p.discriminatedUnion(`kind`,[p.object({kind:p.literal(`screen`),nodeId:p.string().min(1)}),p.object({kind:p.literal(`html`),label:p.string().min(1)})]),Cl=p.object({id:p.uuid(),canvasId:p.uuid(),source:Sl,destination:yl,phase:cl,requestedVersion:p.number().int().positive(),attempt:p.number().int().nonnegative(),createdAt:p.iso.datetime(),updatedAt:p.iso.datetime()}),wl=p.discriminatedUnion(`state`,[Cl.extend({state:p.literal(`queued`),result:p.null(),failure:p.null()}),Cl.extend({state:p.literal(`running`),result:p.null(),failure:p.null()}),Cl.extend({state:p.literal(`succeeded`),phase:p.literal(`complete`),result:Xc.extend({report:Wc}),failure:p.null()}),Cl.extend({state:p.literal(`failed`),result:p.null(),failure:L}),Cl.extend({state:p.literal(`cancelled`),result:p.null(),failure:L.extend({reason:p.literal(`CANCELLED`)})}),Cl.extend({state:p.literal(`expired`),result:p.null(),failure:L.extend({reason:p.literal(`EXPIRED`)})})]);xl.and(p.object({canvasId:p.uuid(),expectedVersion:p.number().int().positive().optional(),mutationId:p.uuid().optional(),writeScope:vl.optional(),scope:sl.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`]}),p.object({job:wl,alreadyExists:p.boolean()}),p.object({jobId:p.uuid()}),p.object({job:wl}),p.object({jobId:p.uuid()}),p.object({job:wl}),p.discriminatedUnion(`state`,[p.object({state:p.literal(`loading`),jobId:p.uuid()}),p.object({state:p.literal(`ready`),jobId:p.uuid(),loadedVersion:p.number().int().positive(),draft:qc}),p.object({state:p.literal(`failed`),jobId:p.uuid(),message:p.string().min(1)})]);const Tl=p.object({add:p.array(p.object({resourceId:p.string().min(1)}).catchall(p.unknown())),remove:p.array(p.string().min(1))}),R=p.union([p.string(),w]),z=p.union([N.shape.value,w]).nullable().optional(),El=p.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":p.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()}),Dl=p.string().regex(/^(?:\d+(?:\.\d+)?|\.\d+)px$/u),Ol=p.string().regex(/^-?(?:\d+(?:\.\d+)?|\.\d+)px$/u),kl=N.shape.value.refine(e=>!/\burl\s*\(/iu.test(e),`invalid text colour`),Al=p.union([M.shape.weight,p.enum([`normal`,`bold`,`bolder`,`lighter`]),p.string().regex(/^\d+(?:\.\d+)?$/u).refine(e=>M.shape.weight.safeParse(Number(e)).success)]),B={color:kl,"font-family":N.shape.value,"font-size":p.union([T,Dl]),"font-weight":Al,"font-style":p.enum([`normal`,`italic`,`oblique`]),"letter-spacing":w,"line-height":p.union([p.number().positive(),p.string().regex(/^(?:\d+(?:\.\d+)?(?:px|em|rem|%)?|normal)$/u)]),"text-align":p.enum([`left`,`center`,`right`]),"white-space":p.enum([`normal`,`nowrap`,`pre`,`pre-wrap`,`pre-line`,`break-spaces`])},jl=p.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()}),Ml=p.enum([`start`,`end`,`left`,`right`,`center`,`justify`,`justify-all`,`match-parent`,`-webkit-left`,`-webkit-right`,`-webkit-center`]),Nl=p.union([B[`font-style`],p.string().regex(/^oblique -?(?:\d+(?:\.\d+)?|\.\d+)deg$/u)]),V=p.union([N.shape.value,w]).nullable().optional(),Pl=p.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":p.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":Nl.nullable().optional(),"font-stretch":p.union([p.enum([`normal`,`ultra-condensed`,`extra-condensed`,`condensed`,`semi-condensed`,`semi-expanded`,`expanded`,`extra-expanded`,`ultra-expanded`]),p.string().regex(/^\d+(?:\.\d+)?%$/u)]).nullable().optional(),"letter-spacing":p.union([w,Ol,p.literal(`normal`)]).nullable().optional(),"line-height":B[`line-height`].nullable().optional(),"text-align":Ml.nullable().optional(),"text-indent":p.union([w,Ol]).nullable().optional(),"white-space":B[`white-space`].nullable().optional(),"word-spacing":p.union([w,Ol,p.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}),Fl=N.shape.value,H=p.union([p.string(),w]),U=p.union([N.shape.value,w]).nullable().optional(),Il=Pl.extend(El.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:p.string().nullable().optional(),"background-color":p.string().nullable().optional(),"background-image":U,"background-size":U,"background-position":U,"background-repeat":U,"background-origin":U,"background-blend-mode":U,"box-shadow":p.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:p.union([p.string(),p.number()]).nullable().optional(),overflow:Fl.nullable().optional(),"overflow-x":Fl.nullable().optional(),"overflow-y":Fl.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()}),Ll=p.union([Il.keyof(),N.shape.property.refine(e=>e.startsWith(`--`))]),Rl=Il.catchall(U).refine(e=>Object.keys(e).every(e=>Ll.safeParse(e).success)),zl=p.record(p.string(),p.unknown()),Bl=p.number().int().positive(),Vl=p.discriminatedUnion(`kind`,[p.object({kind:p.literal(`retain`),count:Bl,attributes:zl.optional(),shouldPreserveParagraph:p.boolean().optional()}),p.object({kind:p.literal(`delete`),count:Bl}),p.object({kind:p.literal(`insert`),text:p.string().min(1).refine(e=>e.isWellFormed()),attributes:zl.optional(),shouldPreserveParagraph:p.boolean().optional()})]),Hl=p.object({baseLength:p.number().int().nonnegative(),representation:p.enum([`plain`,`rich`,`links`]).optional(),steps:p.array(Vl),endAttributes:zl.optional(),properties:zl.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`})}),Ul=p.object({actionId:p.string().min(1),baseVersion:p.number().int().nonnegative(),isActive:p.boolean()}),Wl=p.object({baseVersion:p.number().int().nonnegative(),after:p.array(p.string().min(1)),change:Hl}),Gl=p.object({actionId:p.string().min(1),baseVersion:p.number().int().nonnegative(),originalChange:Hl,inverse:Hl,history:Ul.optional(),source:Wl.optional()}),Kl=p.object({op:p.literal(`editText`),nodeId:p.string().min(1),change:Hl,actionId:p.string().min(1).optional(),revision:Gl.optional(),history:Ul.optional(),source:Wl.optional()}),ql=2e3,Jl=p.object({title:p.string().trim().min(1).max(200)}).strict(),Yl=p.array(tc.shape.id),Xl=p.object({canvasId:p.uuid()}),Zl=p.object({definition:tc.refine(e=>e.sourceStyleId===void 0),revision:p.number().int().positive(),fontFaces:p.array(p.record(p.string(),p.unknown()))}),Ql=p.object({styles:p.array(Zl).refine(e=>new Set(e.map(e=>e.definition.id)).size===e.length)});Xl.extend({revision:p.number().int().positive(),documentVersion:p.number().int().positive(),description:p.string().max(ql),publishedAt:p.iso.datetime(),...Ql.shape}),Xl.extend({mutationId:p.uuid(),expectedRevision:p.number().int().nonnegative(),documentVersion:p.number().int().positive(),publish:Yl,remove:Yl,description:p.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 $l=p.object({canvasId:p.uuid(),title:p.string().max(200)});p.object({search:p.string().trim().max(200).default(``),cursor:$l.nullable().default(null),limit:p.number().int().min(1).max(50).default(20)});const eu=p.object({canvasId:p.uuid(),title:p.string(),organisationId:p.uuid().nullable(),revision:p.number().int().positive(),styleCount:p.number().int().positive(),publishedAt:p.iso.datetime()});p.object({items:p.array(eu).max(50),nextCursor:$l.nullable()});const tu=p.object({parentId:p.string().min(1),sortKey:p.string().min(1)}),nu=p.object({op:p.literal(`insertConvertedSubtree`),destination:yl,sourceNodeId:p.string().min(1).optional(),rootNodeId:p.string().min(1),nodes:p.record(p.string().min(1),I),relationships:p.record(p.string().min(1),tu)}),W=p.string().min(1),ru=F.extend({width:p.number().positive(),height:p.number().positive()}),iu=p.object({parentId:W,afterId:W.optional()}),au=tu,ou=p.object({op:p.literal(`setStyles`),nodeId:W,styles:Rl,clear:p.array(Ll).min(1).refine(e=>new Set(e).size===e.length).optional()}).refine(e=>(e.clear??[]).every(t=>!Object.hasOwn(e.styles,t))),su=p.discriminatedUnion(`op`,[nu,p.object({op:p.literal(`insertNode`),node:I,parentage:au,prototypeSource:p.object({canvasId:p.uuid(),nodeId:W,documentVersion:p.number().int().nonnegative(),versionEntryId:p.uuid().optional()}).optional(),screenSource:p.object({canvasId:p.uuid()}).optional(),pageCopyBase:p.string().refine(e=>e.trim()!==``).optional()}),iu.extend({op:p.literal(`insertText`),nodeId:W,label:p.string().default(`Text`),text:p.string(),box:ru,styles:jl.default({})}),iu.extend({op:p.literal(`insertPrototype`),nodeId:W,label:p.string().default(`Prototype`),prototypeId:p.uuid(),deploymentId:p.uuid(),box:ru,canvasPageId:W.optional()}),p.object({op:p.literal(`setPrototypeDeployment`),nodeId:W,prototypeId:p.uuid(),deploymentId:p.uuid(),expected:p.object({prototypeId:p.uuid(),deploymentId:p.uuid()}).optional()}),Kl,p.object({op:p.literal(`setText`),nodeId:W,text:p.string()}),p.object({op:p.literal(`setBox`),nodeId:W,box:p.union([F,p.literal(`default`)])}),p.object({op:p.literal(`setLabel`),nodeId:W,label:p.string().trim().min(1),labelOrigin:Lc.nullable().optional()}),p.object({op:p.literal(`setContainerKind`),nodeId:W,component:p.enum([`frame`,`group`])}),p.object({op:p.literal(`setVisibility`),nodeId:W,visible:p.boolean().nullable()}),p.object({op:p.literal(`setLocked`),nodeId:W,locked:p.boolean().nullable()}),p.object({op:p.literal(`setConstraints`),nodeId:W,constraints:Ic.nullable()}),ou,p.object({op:p.literal(`patchExportSettings`),nodeId:W,exportSettings:Sc}),p.object({op:p.literal(`setAppearance`),nodeId:W,appearance:Bs}),p.object({op:p.literal(`setLayout`),nodeId:W,layout:p.union([Ts,p.literal(`default`)]),fields:p.array(Ts.keyof()).optional()}),p.object({op:p.literal(`patchTypography`),nodeId:W,typography:Ks}),p.object({op:p.literal(`setTypography`),nodeId:W,typography:p.union([Ws,p.literal(`default`)])}),p.object({op:p.literal(`patchAdditionalStyles`),nodeId:W,additionalStyles:Qs}),p.object({op:p.literal(`setAdditionalStyles`),nodeId:W,additionalStyles:p.union([Xs,p.literal(`default`)])}),ds,p.object({op:p.literal(`setTextStyleLibrary`),nodeId:p.literal(`root`),sourceCanvasId:p.uuid(),library:Jl.nullable()}),p.object({op:p.literal(`patchFontLibrary`),nodeId:p.literal(`root`),fonts:Tl}),p.object({op:p.literal(`setTextStyle`),nodeId:p.literal(`root`),styleId:tc.shape.id,textStyle:tc.nullable(),changedTextNodeIds:p.array(W).optional()}).refine(e=>e.textStyle===null||e.textStyle.id===e.styleId,`text style identity must match`),p.object({op:p.literal(`setGeometry`),nodeId:W,geometry:p.union([Mc,p.literal(`default`)])}),p.object({op:p.literal(`setProps`),nodeId:W,props:p.union([p.record(p.string(),p.unknown()),p.literal(`default`)])}),p.object({op:p.literal(`setParentage`),nodeId:W,parentage:au}),iu.extend({op:p.literal(`move`),nodeId:W}),p.object({op:p.literal(`remove`),nodeId:W,removedText:p.record(W,I.pick({props:!0})).optional()})]),cu=su.options.map(e=>e.shape.op.value),lu=p.preprocess((e,t)=>typeof e!=`object`||!e||Reflect.get(e,`op`)!==`setCompositing`?e:(t.issues.push({code:`custom`,message:Nc,input:e}),p.NEVER),su);Xc.extend({operation:nu,next:p.array(p.string().min(1))});const uu=p.record(p.string(),p.unknown());p.object({canvasId:p.uuid(),afterVersion:p.number().int().positive().optional()});const du=p.object({screenId:p.uuid(),clientToken:p.uuid(),route:p.string().nullable(),title:p.string().nullable(),viewport:p.object({width:p.number().int().positive(),height:p.number().int().positive()}),atMs:p.number().int().min(0).nullable(),sourceRecordingId:p.uuid().nullable(),assetBundle:p.object({assetBundleId:p.uuid(),sourceUrl:p.string(),assets:p.array(p.object({url:p.string(),contentType:p.string(),path:p.string().startsWith(`/v1/recording-assets/`)})),missingAssetCount:p.number().int().min(0)}).nullable(),download:rc.nullable()}),fu=p.object({mutationId:p.uuid(),previousVersion:p.number().int().positive(),version:p.number().int().positive(),operations:p.array(lu)});p.object({mutations:p.array(fu).optional(),version:p.number().int().min(1),restoreFenceVersion:p.number().int().positive().optional(),document:uu.optional(),screens:p.array(du)}).extend({document:uu}),p.object({canvasId:p.uuid(),baseVersion:p.number().int().min(1),document:uu.refine(e=>Rc.safeParse(e).success,`A save requires a valid current-format canvas document.`),screenIds:p.array(p.uuid())}),p.discriminatedUnion(`outcome`,[p.object({outcome:p.literal(`saved`),version:p.number().int().min(1)}),p.object({outcome:p.literal(`conflict`),version:p.number().int().min(1),document:uu})]);const pu=p.object({start:p.number().int().nonnegative(),end:p.number().int().positive(),href:p.url().refine(e=>[`http:`,`https:`].includes(new URL(e).protocol))});p.object({text:p.string(),links:p.array(pu).optional()});const mu=p.enum([`position`,`layout`,`clip`,`cornerRadius`,`blending`,`typography`,`nativeControl`,`textDecoration`,`fill`,`outline`,`textStroke`,`border`,`outerShadow`,`innerShadow`,`filters`,`additionalStyles`,`vector`,`export`,`source`]),hu=p.object({id:p.string().min(1),label:p.string().max(500),kind:p.string().min(1).max(100),parentId:p.string().min(1).nullable(),childCount:p.number().int().min(0),box:F.nullable(),propertySections:p.array(mu)});p.object({canvasId:p.uuid()}),p.object({canvasId:p.uuid(),openUrl:p.url(),title:p.string().min(1),version:p.number().int().positive(),nodeCount:p.number().int().min(0),rootChildCount:p.number().int().min(0),bounds:F.nullable(),kinds:p.record(p.string(),p.number().int().min(0)),next:p.array(p.string().min(1))}),p.object({canvasId:p.uuid()}),p.object({canvasId:p.uuid(),version:p.number().int().positive(),nodes:p.array(hu)}),p.object({canvasId:p.uuid(),nodeId:p.string().min(1)}),p.object({canvasId:p.uuid(),version:p.number().int().positive(),node:hu.extend({styles:p.record(p.string(),p.union([p.string(),p.number()])),layout:Ts.optional(),appearance:Ls.optional(),geometry:Mc.optional(),typography:Ws.optional(),additionalStyles:Xs.optional(),props:p.record(p.string(),p.unknown()),children:p.array(p.string().min(1))}),next:p.array(p.string().min(1))});const gu=I.shape.id,_u=F.extend({width:p.number().positive(),height:p.number().positive()}),vu=p.record(gu,gu),yu=p.strictObject({fingerprint:p.string().regex(/^[a-f0-9]{64}$/u),revisionPolicy:p.enum([`strict`,`rebase`]),copiedNodeIds:vu.optional()});p.object({canvasId:p.uuid(),mutationId:p.uuid(),documentFormatVersion:Pc,baseVersion:p.number().int().positive(),operations:p.array(lu).min(1),requestContext:yu.optional(),writeScope:vl.optional()});const bu=p.object({canvasId:p.uuid(),mutationId:p.uuid(),previousVersion:p.number().int().positive(),version:p.number().int().positive(),operations:p.array(lu),insertedNodeIds:p.array(gu),changedNodeIds:p.array(gu),removedNodeIds:p.array(gu),boxes:p.record(gu,F),affectedBounds:_u.nullable(),copiedNodeIds:vu.optional(),next:p.array(p.string().min(1))});p.strictObject({canvasId:p.uuid(),mutationId:p.uuid(),fingerprint:yu.shape.fingerprint}),p.discriminatedUnion(`state`,[p.strictObject({state:p.literal(`not-found`)}),p.strictObject({state:p.literal(`committed`),result:bu})]);const xu={nodes:1e3,fields:20,id:200,label:500,value:1e3},Su=p.object({available:p.boolean(),omittedNodes:p.number().int().nonnegative(),nodes:p.array(p.object({nodeId:p.string().min(1),label:p.string().max(xu.label),kind:p.enum([`inserted`,`removed`,`changed`,`unchanged`,`unavailable`]),omittedFields:p.number().int().nonnegative(),fields:p.array(p.object({label:p.string().max(xu.id),before:p.string().max(xu.value).nullable(),after:p.string().max(xu.value).nullable(),truncated:p.boolean()})).max(xu.fields)})).max(xu.nodes)}),Cu=[`position`,`layout`,`cornerRadius`,`blending`,`fill`,`outline`,`border`,`outerShadow`,`innerShadow`,`filters`,`additionalStyles`,`export`],wu=[`position`,`layout`,`clip`,...Cu.filter(e=>e!==`position`&&e!==`layout`)],Tu=[...Cu,`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:wu},{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:Cu},{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:Cu},{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:Tu},{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:Tu},{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,Eu=p.array(G).min(1),Du=p.strictObject({x:p.number(),y:p.number()}),Ou=p.strictObject({width:p.number().positive().optional(),height:p.number().positive().optional()}).refine(e=>e.width!==void 0||e.height!==void 0,{message:`Specify width, height, or both.`}),ku=p.discriminatedUnion(`kind`,[p.strictObject({kind:p.literal(`position`),nodeId:G,parentPosition:Du}),p.strictObject({kind:p.literal(`resize`),nodeId:G,size:Ou}),p.strictObject({kind:p.literal(`relative-position`),nodeId:G,referenceNodeId:G,side:p.enum([`above`,`below`,`left`,`right`]),gap:p.number().nonnegative(),align:p.enum([`start`,`center`,`end`])}),p.strictObject({kind:p.literal(`move`),nodeIds:Eu,targetNodeId:G,position:p.enum([`before`,`inside`,`after`])}),p.strictObject({kind:p.literal(`group`),nodeIds:Eu,label:p.string().min(1).optional()}),p.strictObject({kind:p.literal(`ungroup`),nodeIds:Eu}),p.strictObject({kind:p.literal(`label`),nodeId:G,label:p.string().min(1)}),p.strictObject({kind:p.literal(`visibility`),nodeId:G,visible:p.boolean()}),p.strictObject({kind:p.literal(`lock`),nodeId:G,locked:p.boolean()})]),Au=p.strictObject({kind:p.literal(`arrange`),changes:p.array(ku).min(1)}),ju=p.strictObject({kind:p.literal(`duplicate`),nodeIds:Eu,destination:p.discriminatedUnion(`kind`,[p.strictObject({kind:p.literal(`native`)}),p.strictObject({kind:p.literal(`inside`),parentId:G})])}),Mu=p.discriminatedUnion(`kind`,[p.strictObject({kind:p.literal(`compile-screens`),sources:p.array(p.strictObject({screenId:p.uuid(),captureId:p.uuid(),label:p.string().min(1)})).min(1)}),Au,ju,p.strictObject({kind:p.literal(`compile-html`),contextOperations:p.array(lu).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:p.array(p.strictObject({id:G,parentNodeId:G,html:p.string().min(1)})).min(1).refine(e=>new Set(e.map(e=>e.id)).size===e.length,`HTML fragment ids must be unique.`)})]),Nu=p.strictObject({pageId:G.optional(),nodeIds:p.array(G)}),Pu=p.strictObject({request:Mu,scope:Nu}),Fu=p.strictObject({operations:p.array(lu),idMap:p.record(G,G),rootNodeIds:p.array(G)}),Iu=Fu.extend({compilations:p.array(p.strictObject({id:G,draft:qc,warnings:p.array(dl).optional()})).optional()});p.discriminatedUnion(`state`,[p.object({state:p.literal(`loading`),jobId:p.uuid()}),p.object({state:p.literal(`ready`),jobId:p.uuid(),loadedVersion:p.number().int().positive(),plan:Iu}),p.object({state:p.literal(`failed`),jobId:p.uuid(),message:p.string().min(1),reason:p.enum([`SOURCE_FAILED`,`PREPARATION_FAILED`]).optional(),retryable:p.boolean().optional()})]);const Lu=p.object({id:p.uuid(),canvasId:p.uuid(),requestedVersion:p.number().int().positive(),request:Mu,scope:Nu,phase:cl,attempt:p.number().int().nonnegative(),createdAt:p.iso.datetime(),updatedAt:p.iso.datetime()}),Ru=p.discriminatedUnion(`state`,[Lu.extend({state:p.enum([`queued`,`running`]),result:p.null(),failure:p.null()}),Lu.extend({state:p.literal(`succeeded`),phase:p.literal(`complete`),result:Fu.extend({loadedVersion:p.number().int().positive()}),failure:p.null()}),Lu.extend({state:p.enum([`failed`,`cancelled`,`expired`]),result:p.null(),failure:L})]);p.strictObject({canvasId:p.uuid(),expectedVersion:p.number().int().positive(),request:Mu,scope:Nu}),p.object({job:Ru,alreadyExists:p.boolean()}),p.object({jobId:p.uuid()}),p.object({job:Ru});const zu=p.string().trim().min(1).max(80).regex(/^[\w .+/-]+$/u),Bu=p.strictObject({path:p.enum([`local_mcp`,`hosted_mcp`,`direct_cli`]),name:zu.optional(),version:zu.optional()});Bu.pick({path:!0}).strip();const Vu=p.strictObject({agent_client:p.enum([`claude_code`,`codex`,`cursor`,`unknown`]),connection_path:Bu.shape.path,identity_source:p.enum([`mcp_client_info`,`documented_cli_fallback`,`unavailable`]),auth_method:p.enum([`personal_agent_token`,`mcp_oauth`]),agent_client_version:zu.optional()}),Hu=p.enum([`green`,`blue`,`indigo`,`amber`,`lime`,`teal`,`cyan`,`sky`,`violet`,`purple`,`fuchsia`,`pink`]),Uu=p.string().regex(/^[0-9a-f]{32}$/),Wu=p.object({viewKey:Uu.optional(),admissionOrder:p.number().int().nonnegative().optional(),followColour:Hu.optional()}),Gu=p.object({pageId:p.string().min(1).nullable().optional(),followingViewKey:Uu.nullable().optional()}),Ku=`enhance3.canvas.v1`,qu=16384,Ju=p.enum([`blue`,`violet`,`green`,`amber`,`magenta`,`teal`,`red`,`orange`]),Yu=p.object({kind:p.literal(`person`),connectionId:p.uuid(),personId:p.uuid(),displayName:p.string().min(1).max(100),initials:p.string().min(1).max(8),avatarUrl:p.string().max(Ro).nullable().optional(),colour:Ju}),Xu=Yu.extend(Wu.shape),Zu=p.object({kind:p.literal(`guest`),connectionId:p.uuid(),displayName:p.string().min(1).max(100),initials:p.string().min(1).max(8),colour:Ju,...Wu.shape}),Qu=p.discriminatedUnion(`kind`,[Xu,Zu]),$u=p.object({kind:p.literal(`agent`),personId:p.uuid(),displayName:p.string().min(1).max(100),initials:p.string().min(1).max(8),tokenLabel:p.string().min(1).max(100),agentAttribution:Vu.optional(),colour:Ju}),ed=p.discriminatedUnion(`kind`,[Yu.omit({connectionId:!0,avatarUrl:!0}),$u]),td=p.object({x:p.number(),y:p.number()}),nd=F.extend({width:p.number().positive(),height:p.number().positive()}),rd=p.object({count:p.number().int().positive(),bounds:nd.nullable()}),id=p.object({kind:p.enum([`drag`,`resize`]),baseVersion:p.number().int().positive(),boxes:p.record(p.string().min(1),nd).refine(e=>Object.keys(e).length<=100&&new TextEncoder().encode(JSON.stringify(e)).byteLength<=16384),summary:rd.optional()}),ad=p.object({cursor:td.nullable().optional(),input:p.enum([`pointer`,`touch`,`keyboard`]).optional(),focused:p.boolean().optional(),selectedNodeIds:p.array(p.string().min(1)).max(100).refine(e=>new TextEncoder().encode(JSON.stringify(e)).byteLength<=qu).optional(),selectionSummary:rd.nullable().optional(),visibleWorldBox:nd.optional(),gesture:id.nullable().optional(),cursorChat:p.string().max(140).nullable().optional(),...Gu.shape}).refine(e=>Object.keys(e).length>0,`presence patch cannot be empty`),od=p.object({actor:Qu,seq:p.number().int().nonnegative(),cursor:td.nullable(),input:p.enum([`pointer`,`touch`,`keyboard`]),focused:p.boolean(),selectedNodeIds:p.array(p.string().min(1)).max(100).refine(e=>new TextEncoder().encode(JSON.stringify(e)).byteLength<=qu),selectionSummary:rd.nullable().optional(),visibleWorldBox:nd.nullable(),gesture:id.nullable(),cursorChat:p.string().max(140).nullable().default(null),...Gu.shape,followOrder:p.number().int().nonnegative().optional(),expiresAt:p.iso.datetime()}),sd=p.enum([`reading`,`writing`,`creating`,`deleting`,`rendering`]),cd=p.object({activityId:p.uuid(),canvasId:p.uuid(),actor:$u,phase:sd,nodeIds:p.array(p.string().min(1)).max(100),bounds:nd.nullable(),expiresAt:p.iso.datetime()}),ld=p.object({canvasId:p.uuid(),phase:sd,nodeIds:p.array(p.string().min(1)).max(100).default([]),bounds:nd.nullable().default(null)});p.object({activityId:p.uuid(),expiresAt:p.iso.datetime(),renewAfterMs:p.number().int().positive()}),ld.extend({activityId:p.uuid()}),p.object({canvasId:p.uuid(),activityId:p.uuid()}),p.object({ended:p.literal(!0)});const K={v:p.literal(1),seq:p.number().int().nonnegative()};p.discriminatedUnion(`type`,[p.object({...K,type:p.literal(`access.changed`),payload:p.object({})}),p.object({...K,type:p.literal(`comments.changed`),payload:p.object({threadId:p.uuid()})}),p.object({...K,type:p.literal(`resources.changed`),payload:p.object({})}),p.object({...K,type:p.literal(`room.snapshot`),payload:p.object({connectionId:p.uuid(),viewKey:Wu.shape.viewKey,peers:p.array(od),activities:p.array(cd),documentVersion:p.number().int().positive()})}),p.object({...K,type:p.literal(`presence.patch`),payload:od}),p.object({...K,type:p.literal(`presence.left`),payload:p.object({connectionId:p.uuid()})}),p.object({...K,type:p.literal(`agent.activity`),payload:p.object({activityId:p.uuid(),activity:cd.nullable()})}),p.object({...K,type:p.literal(`document.committed`),payload:p.object({mutationId:p.uuid(),actor:ed,previousVersion:p.number().int().positive(),version:p.number().int().positive(),operations:p.array(lu).min(1)})}),p.object({...K,type:p.literal(`sync.required`),payload:p.object({version:p.number().int().positive(),reason:p.enum([`gap`,`relay`,`replace`,`history-restored`])})}),p.object({...K,type:p.literal(`room.ping`),payload:p.object({pingId:p.uuid(),sentAt:p.iso.datetime()})}),p.object({...K,type:p.literal(`room.error`),payload:p.object({code:p.enum([`auth`,`permission`,`protocol`,`payload`,`rate`,`unavailable`]),message:p.string().min(1).max(200)})})]),p.discriminatedUnion(`type`,[p.object({v:p.literal(1),type:p.literal(`presence.patch`),seq:p.number().int().nonnegative(),payload:ad}),p.object({v:p.literal(1),type:p.literal(`selection.chunk`),seq:p.number().int().nonnegative(),payload:p.object({transferId:p.uuid(),offset:p.number().int().nonnegative(),total:p.number().int().positive(),nodeIds:p.array(p.string().min(1)).min(1).max(1e3)})}),p.object({v:p.literal(1),type:p.literal(`selection.unavailable`),seq:p.number().int().nonnegative(),payload:p.object({count:p.number().int().positive()})}),p.object({v:p.literal(1),type:p.literal(`room.pong`),seq:p.number().int().nonnegative(),payload:p.object({pingId:p.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),p.object({canvasId:p.uuid(),protocols:p.array(p.literal(Ku)).min(1).max(1),viewId:p.uuid().optional()}),p.object({endpoint:p.url(),ticket:p.string().min(1).max(4096),protocol:p.literal(Ku),expiresAt:p.iso.datetime()}),p.uuid();const ud=I.shape.id;p.array(ud),p.object({jobId:p.uuid()});const dd=p.object({jobId:p.uuid(),canvasId:p.uuid(),requestedVersion:p.number().int().positive(),target:rl,sourceState:il.optional()});p.discriminatedUnion(`purpose`,[dd.extend({purpose:p.literal(`preparation`),preparation:Pu,screens:p.array(du).optional(),attempts:p.strictObject({counted:p.number().int().nonnegative(),limit:p.number().int().positive()}).optional(),deadlineAt:p.iso.datetime().optional(),sourceState:p.undefined().optional(),scale:p.literal(1),format:p.literal(`json`)}),dd.extend({purpose:p.enum([`inspection`,`snapshot`,`thumbnail`,`export`]),scale:p.number().positive(),maxOutputPixels:tl.optional(),format:p.literal(`png`)}),dd.extend({purpose:p.literal(`conversion`),target:p.object({kind:p.literal(`node`),nodeId:p.string().min(1)}),sourceState:p.undefined().optional(),conversion:xl,scale:p.literal(1),format:p.literal(`json`)})]),p.object({jobId:p.uuid()}),p.object({jobId:p.uuid()});const fd=p.object({jobId:p.uuid(),canvasId:p.uuid(),requestedVersion:p.number().int().positive(),grantToken:p.string().startsWith(`rgr_`).min(40).max(100),grantCookieName:p.string().min(1).max(100),renderUrl:p.url(),deadlineAt:p.iso.datetime().optional(),releaseIdentity:p.string().min(1).max(100)});p.discriminatedUnion(`purpose`,[fd.extend({purpose:p.literal(`preparation`),target:rl,preparation:Pu,sourceState:p.undefined().optional(),scale:p.literal(1)}),fd.extend({purpose:p.enum([`inspection`,`snapshot`,`thumbnail`,`export`]),target:rl,sourceState:il.optional(),scale:p.number().positive(),maxOutputPixels:tl.optional(),outputKey:p.string().min(1).max(500)}),fd.extend({purpose:p.literal(`conversion`),target:p.object({kind:p.literal(`node`),nodeId:p.string().min(1).max(200)}),sourceState:p.undefined().optional(),conversion:xl,scale:p.literal(1)})]),p.object({jobId:p.uuid(),loadedVersion:p.number().int().positive(),bounds:nl,width:p.number().int().positive(),height:p.number().int().positive(),scale:p.number().positive(),bytes:p.number().int().positive(),storageKey:p.string().min(1).max(500),warnings:p.array(dl),timings:p.array(fl),sourceState:al.optional(),snapshot:p.object({artifactBytes:p.number().int().positive(),artifactStorageKey:p.string().min(1).max(500),route:p.string().optional(),title:p.string().optional(),viewport:p.object({width:p.number().int().positive(),height:p.number().int().positive()})}).optional()}),p.object({accepted:p.literal(!0)}),p.object({jobId:p.uuid(),loadedVersion:p.number().int().positive(),draft:qc}),p.object({accepted:p.literal(!0)}),p.object({recordingId:p.uuid(),requestedAtMs:p.number().int().nonnegative(),settledAtMs:p.number().int().nonnegative(),artifact:p.string().min(1),route:p.string().optional(),title:p.string().optional(),viewport:p.object({width:p.number().int().positive(),height:p.number().int().positive()})}),p.object({jobId:p.uuid(),failure:L}),p.object({accepted:p.literal(!0),willRetry:p.boolean()}),p.object({workerId:p.string().regex(/^[\w.-]+$/u).min(1).max(100),releaseIdentity:p.string().min(1).max(100),timestamp:p.coerce.number().int().nonnegative(),nonce:p.uuid(),mac:p.base64().min(32).max(200)});const pd=p.object({total:p.number().int().nonnegative(),loading:p.number().int().nonnegative(),unavailable:p.number().int().nonnegative()}),md=p.object({jobId:p.uuid(),canvasId:p.uuid().nullable(),requestedVersion:p.number().int().positive().nullable(),loadedVersion:p.number().int().positive().nullable(),phase:cl.exclude([`queued`,`claimed`,`capture`,`upload`,`complete`]),sources:pd,warnings:p.array(dl),timings:p.array(fl),sourceState:al.optional()}),hd=p.object({selector:p.string().min(1).max(500),contentSelector:p.string().min(1).max(500).optional(),expectsPaint:p.boolean().optional(),bounds:nl,width:p.number().int().positive(),height:p.number().int().positive(),scale:p.number().positive()});p.discriminatedUnion(`state`,[md.extend({state:p.literal(`loading`),capture:p.null(),failure:p.null()}),md.extend({state:p.literal(`ready`),phase:p.literal(`target`),canvasId:p.uuid(),requestedVersion:p.number().int().positive(),loadedVersion:p.number().int().positive(),capture:hd,failure:p.null()}),md.extend({state:p.literal(`failed`),failure:p.object({reason:ll,message:p.string().min(1).max(500),sourceId:p.string().min(1).max(200).nullable(),overtaken:p.boolean().optional()}),capture:p.null()})]),p.object({jobId:p.uuid(),loadedVersion:p.number().int().positive(),plan:Iu});const gd=p.string().min(1);p.object({canvasId:p.uuid()}),p.object({canvasId:p.uuid(),status:p.enum([`selected`,`none`,`offline`,`stale`,`updating`,`unsupported`]),documentVersion:p.number().int().positive(),selectionRevision:p.number().int().positive().nullable(),selectionChangedAt:p.iso.datetime().nullable(),selectedNodeIds:p.array(gd),missingNodeIds:p.array(gd),nodes:p.array(hu),contextRootId:gd.nullable(),visibleWorldBox:nl.nullable(),next:p.array(p.string().min(1)).max(12)});const _d=p.discriminatedUnion(`kind`,[p.object({kind:p.literal(`recording`),recordingId:p.string()})]);p.object({html:p.string().optional(),viewport:p.object({width:p.number(),height:p.number()}),atMs:p.number(),screenId:p.string().nullable().default(null),sourceNodeId:p.string().optional(),provenance:_d.optional()}),p.object({provenance:_d.optional(),report:Wc.optional()}),p.object({recordingId:p.string()}),p.object({prototypeId:p.uuid(),deploymentId:p.uuid()}),p.object({preparedExperience:p.enum([`agent-connection`,`whisper-prototype`]),ownerPersonId:p.uuid(),resources:p.array(p.string().min(1))});const vd=new Set(ec);new Set(Object.entries(qs).flatMap(([e,t])=>t.some(e=>vd.has(e))?[e.replaceAll(/-([a-z])/gu,(e,t)=>t.toUpperCase())]:[]));const yd=new Set(ec);new Set(Object.entries(qs).flatMap(([e,t])=>t.some(e=>yd.has(e))?[e]:[]));const bd=1e3,xd=p.discriminatedUnion(`kind`,[p.object({kind:p.literal(`person`),personId:p.uuid(),displayName:p.string().min(1).max(200),initials:p.string().min(1).max(2)}),p.object({kind:p.literal(`agent`),personId:p.uuid(),displayName:p.string().min(1).max(200),initials:p.string().min(1).max(2),tokenLabel:p.string().min(1).max(200)})]),Sd=p.object({id:p.uuid(),canvasId:p.uuid(),documentVersion:p.number().int().positive(),origin:p.enum([`automatic`,`manual`,`restore`]),restoreRole:p.enum([`before`,`result`]).nullable(),retention:p.enum([`automatic`,`named`,`restore-boundary`]),title:p.string().min(1).nullable(),description:p.string().max(bd).nullable(),actor:xd,sourceVersionEntryId:p.uuid().nullable(),expiresAt:p.iso.datetime().nullable(),checkpointAt:p.iso.datetime(),createdAt:p.iso.datetime(),updatedAt:p.iso.datetime(),screenCount:p.number().int().min(0)});p.object({canvasId:p.uuid(),limit:p.number().int().min(1).max(100).default(50),cursor:p.string().min(1).max(1e3).optional(),includeAutomatic:p.boolean().default(!1),actor:p.enum([`all`,`mine`]).default(`all`)}),p.object({current:p.object({documentVersion:p.number().int().positive(),updatedAt:p.iso.datetime()}),items:p.array(Sd),nextCursor:p.string().min(1).nullable(),hasExpiredHistory:p.boolean()}),p.object({canvasId:p.uuid(),versionId:p.uuid()});const Cd=p.object({outcome:p.literal(`ready`),entry:Sd,document:uu,screens:p.array(du)}),wd=p.object({outcome:p.literal(`missing-resources`),entry:Sd,document:uu,screens:p.array(du),missingScreenIds:p.array(p.uuid()).min(1)});p.discriminatedUnion(`outcome`,[Cd,wd,p.object({outcome:p.literal(`corrupt`),entry:Sd})]);const Td=p.discriminatedUnion(`kind`,[p.object({kind:p.literal(`current`),expectedVersion:p.number().int().positive()}),p.object({kind:p.literal(`version`),versionId:p.uuid()})]);p.object({canvasId:p.uuid(),target:Td,title:p.string().trim().min(1),description:p.string().trim().max(bd).nullable().default(null)}),p.object({canvasId:p.uuid(),versionId:p.uuid(),title:p.string().trim().min(1),description:p.string().trim().max(bd).nullable().default(null)}),p.object({canvasId:p.uuid(),versionId:p.uuid()}),p.object({entry:Sd}),p.object({canvasId:p.uuid(),documentFormatVersion:Pc,versionId:p.uuid(),expectedVersion:p.number().int().positive()}),p.object({canvasId:p.uuid(),version:p.number().int().positive(),beforeVersionId:p.uuid(),restoredVersionId:p.uuid(),restoreFenceVersion:p.number().int().positive()}),p.object({canvasId:p.uuid(),documentFormatVersion:Pc,versionId:p.uuid(),organisationId:p.union([p.uuid(),p.literal(`personal`)]),title:p.string().trim().min(1).optional()}),p.object({canvasId:p.uuid(),title:p.string().min(1),version:p.literal(1)}),p.object({canvasId:p.uuid(),sourceCanvasId:p.uuid(),recordingIds:p.array(p.uuid()).min(1)}),p.object({copies:p.array(p.object({sourceRecordingId:p.uuid(),recordingId:p.uuid()}))});const Ed=(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))},Dd=p.string().regex(/^[a-f0-9]{64}$/u),Od=p.string().trim().min(1),kd=p.object({organisationId:p.uuid().nullable()}),Ad=p.object({family:p.string().regex(/^uploaded-font-[a-f0-9]{64}(?:-[a-f0-9]{12})?$/u),familyName:Od,subfamilyName:Od,version:Od,weight:p.string().regex(/^\d+(?:\.\d+)?(?: \d+(?:\.\d+)?)?$/u).refine(e=>Ed(e,1,1e3)),style:p.enum([`normal`,`italic`,`oblique`]),stretch:p.union([p.enum([`normal`,`ultra-condensed`,`extra-condensed`,`condensed`,`semi-condensed`,`semi-expanded`,`expanded`,`extra-expanded`,`ultra-expanded`]),p.string().regex(/^\d+(?:\.\d+)?%(?: \d+(?:\.\d+)?%)?$/u).refine(e=>Ed(e,0))]),format:p.enum([`truetype`,`opentype`,`woff`,`woff2`])}),jd=p.object({kind:p.enum([`personal`,`team`]),ownerId:p.uuid(),sha256:Dd}),Md=kd.extend({sha256:Dd,bytes:p.number().int().positive(),contentType:p.enum(uc)});p.object({upload:P}),Md.extend({metadata:Ad,hasSharingRights:p.literal(!0)});const Nd=jd.extend({bytes:p.number().int().positive(),metadata:Ad,createdAt:p.iso.datetime(),path:p.string().startsWith(`/v1/font-catalog/`)});p.object({entries:p.array(Nd),canManage:p.boolean()}),kd.extend({sha256:Dd}),kd.extend({canvasId:p.uuid(),sha256:p.array(Dd).min(1)}),p.object({resources:p.array(p.object({entry:Nd,path:p.string().startsWith(`/v1/canvas-assets/`)}))});const Pd=p.object({inviteId:p.uuid(),email:p.string().max(254),accessLevel:Uo,sendCount:p.number().int().min(1),lastSentAt:p.iso.datetime(),expiresAt:p.iso.datetime(),state:p.enum([`pending`,`expired`]),deliveryState:p.enum([`queued`,`accepted`,`failed`]),deliveryError:p.string()});p.object({canvasTitle:p.string().min(1),invitedBy:p.string().min(1),email:p.string().max(254).pipe(p.email()),accessLevel:Uo,expiresAt:p.iso.datetime(),state:p.enum([`pending`,`accepted`]),hasAccount:p.boolean()}),p.object({canvasId:p.uuid(),email:p.string().max(254).transform(e=>e.trim().toLowerCase()).pipe(p.email()),accessLevel:Uo}),p.object({invite:Pd,acceptToken:p.string().max(512).optional()}),p.object({canvasId:p.uuid()}),Lo(Pd),p.object({canvasId:p.uuid(),inviteId:p.uuid()}),p.object({canvasId:p.uuid(),inviteId:p.uuid()});const Fd=p.string().min(1).max(512);p.object({token:Fd}),p.object({token:Fd}),p.object({canvasId:p.uuid(),accessLevel:Ho});const Id=p.object({personId:p.uuid().nullable(),email:p.string().max(254).nullable(),displayName:p.string().max(120).nullable(),initials:p.string().max(4).nullable(),avatarUrl:p.string().max(Ro).nullable(),accessLevel:Ho,isPending:p.boolean(),reviewState:p.enum([`not-started`,`in-progress`,`done`]).nullable(),lastViewedAt:p.iso.datetime().nullable()});p.object({canvasId:p.uuid()}),Lo(Id),p.object({canvasId:p.uuid(),personId:p.uuid(),accessLevel:Uo}),p.object({canvasId:p.uuid(),personId:p.uuid()}),p.object({personId:p.uuid(),revoked:p.boolean()});const Ld=p.object({canvasId:p.uuid(),reviewState:p.enum([`not-started`,`in-progress`,`done`])});p.object({reviewState:Ld.shape.reviewState.nullable()});const Rd=Io.extend({cursor:p.string().max(2048).nullable().default(null)}),zd=p.object({selector:p.string().min(1),tagName:p.string().min(1),label:p.string().nullable(),source:p.object({file:p.string().min(1),line:p.number().int().min(0).nullable()}).nullable()}),Bd=p.object({x:p.number(),y:p.number()}),Vd=p.object({x:p.number().min(0).max(1),y:p.number().min(0).max(1)}),Hd=p.object({x:p.number().min(0).max(1),y:p.number().min(0).max(1),width:p.number().min(0).max(1),height:p.number().min(0).max(1)}),Ud=zd.extend({role:p.string().min(1).optional()}),Wd=p.object({path:p.array(p.number().int().min(0)),offset:p.number().int().min(0)}),Gd=p.object({version:p.literal(1),kind:p.literal(`element`),locator:Ud,attachment:Vd,fallbackBounds:Hd}),Kd=p.object({version:p.literal(1),kind:p.literal(`text`),root:Ud,quote:p.object({exact:p.string().min(1),prefix:p.string(),suffix:p.string()}),range:p.object({start:Wd,end:Wd}),attachment:Vd,fallbackBounds:Hd}),qd=p.object({version:p.literal(1),kind:p.literal(`elements`),members:p.array(Ud).min(2),truncated:p.boolean(),attachment:Vd,fallbackBounds:Hd}),Jd=p.object({version:p.literal(1),kind:p.literal(`area`),bounds:Hd,attachment:Vd}),Yd=p.discriminatedUnion(`kind`,[Gd,Kd,qd,Jd]),Xd=p.discriminatedUnion(`on`,[p.object({on:p.literal(`canvas`),point:Bd,pageId:p.string().min(1).max(256).optional()}),p.object({on:p.literal(`node`),nodeId:p.string().min(1),point:Bd,element:p.null()}),p.object({on:p.literal(`screen`),nodeId:p.string().min(1),screenId:p.uuid(),point:Bd,element:zd.nullable(),target:Yd.optional()})]),Zd=p.object({kind:p.enum([`person`,`agent`]),personId:p.uuid(),name:p.string().min(1).max(120),initials:p.string().min(1).max(4),avatarUrl:p.string().max(Ro).nullable(),tokenLabel:p.string().max(120).nullable()}),Qd=p.object({personId:p.uuid(),name:p.string().min(1).max(120)}),$d=p.object({emoji:p.string().min(1).max(16),people:p.array(Qd).min(1)}),ef=p.object({messageId:p.uuid(),seq:p.number().int().min(1),body:p.string().min(1),isDeleted:p.boolean(),author:Zd,createdAt:p.iso.datetime(),editedAt:p.iso.datetime().nullable(),mentions:p.array(Qd),reactions:p.array($d)}),tf=p.object({kind:p.enum([`person`,`agent`]),personId:p.uuid(),name:p.string().min(1).max(120),tokenLabel:p.string().max(120).nullable()}),nf=p.object({revision:p.number().int().positive(),threadId:p.uuid(),canvasId:p.uuid(),anchor:Xd,author:Zd,messages:p.array(ef).min(1).max(50),messageCount:p.number().int().min(1),hasMoreMessages:p.boolean(),isResolved:p.boolean(),resolvedAt:p.iso.datetime().nullable(),resolvedBy:tf.nullable(),createdAt:p.iso.datetime(),lastMessageAt:p.iso.datetime()}),rf=p.strictObject({canvasRef:p.string().min(1),expectedVersion:p.number().int().positive()}),af=rf.extend({coordinateSpace:p.enum([`canvas-world`,`node-normalized`,`screen-normalized`])});p.object({context:rf.optional(),page:Rd.optional(),canvasId:p.uuid(),filter:p.enum([`open`,`resolved`,`all`]).default(`open`),authorPersonId:p.uuid().optional(),agentActionable:p.boolean().default(!1),query:p.string().trim().max(200).optional()}),Lo(nf).extend({nextCursor:p.string().nullable().optional()}),Rd.extend({context:rf.optional(),canvasId:p.uuid(),threadId:p.uuid(),expectedRevision:p.number().int().positive().optional()}),p.object({thread:nf.omit({messages:!0,hasMoreMessages:!0}),messages:p.array(ef).max(100),nextCursor:p.string().nullable()}),p.object({context:af.optional(),canvasId:p.uuid(),clientThreadId:p.uuid(),anchor:Xd,body:p.string().trim().min(1),mentionedPersonIds:p.array(p.uuid()).default([])}),p.object({context:rf.optional(),canvasId:p.uuid(),threadId:p.uuid(),clientMessageId:p.uuid(),body:p.string().trim().min(1),mentionedPersonIds:p.array(p.uuid()).default([])}),nf.extend({postedMessage:ef}),p.object({canvasId:p.uuid(),threadId:p.uuid(),messageId:p.uuid(),body:p.string().trim().min(1),mentionedPersonIds:p.array(p.uuid()).default([])}),p.object({canvasId:p.uuid(),threadId:p.uuid(),messageId:p.uuid(),emoji:p.string().trim().min(1).max(16),reacted:p.boolean()}),p.object({canvasId:p.uuid(),threadId:p.uuid(),anchor:Xd}),p.object({context:rf.optional(),expectedRevision:p.number().int().positive().optional(),canvasId:p.uuid(),threadId:p.uuid(),resolved:p.boolean()}),p.object({canvasId:p.uuid(),threadId:p.uuid(),messageId:p.uuid().optional()}),p.object({deletedThreadIds:p.array(p.uuid()),deletedMessageIds:p.array(p.uuid())});const q={shortText:200,name:100,label:500,page:50,cursor:64,questionOptions:3},J=p.uuid(),of=p.string().min(1),sf=p.object({id:J,name:p.string().trim().min(1).max(q.name),content:p.string().trim().min(1),version:p.string().min(1).max(q.name)}),cf=p.object({canvasId:J,nodeId:of,label:p.string(),role:p.enum([`target`,`reference`])}),lf=p.discriminatedUnion(`type`,[p.object({type:p.literal(`text`),text:p.string()}),cf.extend({type:p.literal(`object`)})]),uf=p.object({revision:p.number().int().nonnegative(),text:p.string(),task:p.enum([`chat`,`rewrite`,`shorten`,`translate`,`replace`,`rename`]).default(`chat`),references:p.array(cf),contentVersion:p.literal(1).default(1),parts:p.array(lf).optional(),attachmentIds:p.array(J),model:p.enum([`default`,`sonnet`,`opus`,`haiku`]).default(`default`),effort:p.enum([`default`,`low`,`medium`,`high`]).default(`default`),instructions:p.array(p.object({name:p.string().max(q.name),content:p.string(),version:p.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(`&`,`&`).replaceAll(`"`,`"`),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=g(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=te(e.canvas),i=On(e.baseVersion),a=await Je(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(`&`,`&`).replaceAll(`"`,`"`);t.output.result(await it(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.arrange`]){let r=d(t.catalog(),n),i=n===`canvas.insertHtml`?`insert-html`:n===`canvas.makeEditable`?`make-editable`: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:g(e.input,r.inputSchema,`--input`),clientToken:p.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:d(t.catalog(),`canvas.remove`),arguments:g(e.input,fe,`--input`),clientToken:p.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}}:g(e.input,me,`--input`);t.output.result(await t.invocation.invoke({capability:d(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:d(t.catalog(),`canvas.find`),arguments:g(e.input,le,`--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=g(e.input,Ie,`--input`);t.output.result(await t.invocation.invoke({capability:d(t.catalog(),`canvas.updateHtml`),arguments:n,clientToken:p.uuid().parse(e.clientToken)}))})},li=(e,t)=>{let n=d(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:g(e.input,n.inputSchema,`--input`),clientToken:p.uuid().parse(e.clientToken)}))})},ui=(e,t)=>{let n=d(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:g(e.input,n.inputSchema,`--input`),clientToken:p.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`),r=e.getOptionValue(`canvasId`);if(t!==void 0&&r!==void 0)throw new u(`BAD_REQUEST`,`--canvas and --canvas-id cannot be combined.`,`Pass the pasted URL or UUID through --canvas.`);let i=t??r;if(typeof i!=`string`)throw TypeError(`The required-option check let canvas ${e.name()} run without --canvas.`);return{reference:n(i),url:i}},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 Xe(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=xe(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:g(e.input,Ne,`--input`),clientToken:Wr(e.clientToken)}},_i=`canvas render --canvas 0b9f4c1e-5d2a-4e8b-9c3f-7a6d1e2b4c50`,vi={"canvas render":_i},yi=p.coerce.number().int().positive(),bi=p.coerce.number().int().nonnegative(),xi=p.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=de.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 p.uuid().safeParse(e.slice(4)).data},Ei=(e,t)=>{let n=p.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=n(e.canvas??``),a=wi(e.nodeId,Ci(e.bounds)),o=e.expectedVersion===void 0?null:Si(yi,e.expectedVersion,`--expected-version`);if(!xe(r))return{target:a,expectedVersion:o};let s=se.parse(await t.remote.query(`canvas.document.get`,{canvasId:r.canvasId}));if(o!==null&&o!==s.version)throw new u(`CONFLICT`,`The canvas changed before rendering.`,`Read the linked page or selection and render its current version.`);return{target:i(r,Fe.parse(s.document),a),expectedVersion:s.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 r=await Di(e,t),i=r.target.kind===`node`?r.target.nodeId:void 0;if(i===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 a=e.atMs===void 0?null:Ti(i);if(a===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 o=await t.invocation.invoke({capability:d(t.catalog(),`canvas.render`),arguments:{canvasId:n(e.canvas).canvasId,...r,sourceState:a==null?null:{kind:`recording`,recordingId:a,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(o)},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:d(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=at(t.remote,Ke(t.configDirectory),t.now,t.output.result);Bn(n,t),di(n,{...t,render:i}),hi(n,t),Ai(r,t)},v=p.string().trim().min(1).max(160),Mi=p.string().regex(/^[a-f0-9]{64}$/u),Ni=p.number().int().positive(),Pi=p.strictObject({source:v,journey:v,step:v,variant:v}),Fi=p.strictObject({sha256:Mi,bytes:p.number().int().positive(),mediaType:p.string().min(1).max(200)}),Ii=p.strictObject({organisationId:p.uuid().optional()}),Li=p.strictObject({key:p.string().min(1),label:p.string().min(1),url:p.url().optional(),sequence:p.number().int().nonnegative(),attempt:p.number().int().nonnegative().default(0)}),Ri=p.union([p.strictObject({runId:p.uuid()}),p.strictObject({reference:p.string().min(1),revision:p.string().min(1).optional()})]),zi=p.strictObject({destination:Ii,context:Li.optional(),revision:p.string().min(1).optional(),baselineRunId:p.uuid().nullable(),compareTo:Ri.optional()}),Bi=p.enum([`awaiting-review`,`approved`,`changes-requested`]),Vi=p.strictObject({format:p.literal(`enhance-capture`),version:p.literal(1),key:Pi,label:v,journeyLabel:v,order:p.number().int().nonnegative(),page:p.string().min(1).optional(),viewport:p.strictObject({width:Ni,height:Ni,deviceScaleFactor:p.number().positive()}),extent:p.enum([`viewport`,`full-page`]),source:p.strictObject({format:p.literal(`rrweb-screen`),version:p.literal(1),blob:Fi}),preview:p.strictObject({blob:Fi,width:Ni,height:Ni,pixelRatio:p.number().positive()}),assets:p.array(p.strictObject({url:p.url(),blob:Fi})),provenance:p.strictObject({adapter:v,sdkVersion:v,kernelVersion:v,browser:v,capturedAt:p.iso.datetime(),sourceUrl:p.url().optional(),commit:p.string().min(1).max(200).optional()}),issues:p.array(p.strictObject({code:v,message:p.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=p.strictObject({id:p.uuid(),canvasId:p.uuid(),source:v,runKey:v,generation:p.number().int().nonnegative(),participants:p.array(v).min(1),expiresAt:p.iso.datetime(),formatVersion:p.literal(1),review:zi.optional()}),Ui={participant:v,retry:p.number().int().nonnegative(),status:p.enum([`passed`,`failed`,`skipped`,`interrupted`,`timedOut`]),title:p.string().min(1).optional(),location:p.strictObject({file:p.string().min(1),line:p.number().int()}).optional(),captures:p.array(Vi)},Wi=p.strictObject({runner:p.literal(`playwright`).optional(),testId:v,project:v,...Ui}),Gi=p.strictObject({runner:p.literal(`script`),...Ui}),Ki=p.union([Wi,Gi]),qi=p.strictObject({key:Pi.optional(),testId:v.optional(),message:p.string().min(1).max(500)}),Ji=p.strictObject({format:p.literal(`enhance-capture-run`),version:p.literal(1),run:Hi,participants:p.array(p.strictObject({id:v,status:p.enum([`passed`,`failed`,`interrupted`])})).min(1),attempts:p.array(Ki),ordering:p.enum([`partial`,`complete`]),leftOut:p.array(qi).optional()}),Yi=p.strictObject({runId:p.uuid(),canvasId:p.uuid(),canvasUrl:p.url(),version:p.number().int().positive(),manifestDigest:Mi,frames:p.array(p.strictObject({key:Pi,frameId:v,captureId:p.uuid()})),issues:p.array(p.strictObject({code:v,message:p.string().max(500)}))}),Xi=p.strictObject({canvasId:p.uuid().optional(),destination:Ii.optional(),title:p.string().trim().min(1).optional(),context:Li.optional(),revision:p.string().min(1).optional(),compareTo:Ri.optional(),source:v.default(`default`),runKey:v,participants:p.array(v).min(1).default([`local`]),formatVersion:p.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=p.strictObject({run:Hi});p.strictObject({runId:p.uuid()});const Qi=p.enum([`collecting`,`sealed`,`converting`,`committed`,`failed`,`cancelled`]),$i=p.strictObject({run:Hi,state:Qi,receipt:Yi.nullable(),verdict:Bi.optional(),failure:p.strictObject({code:v,message:p.string().max(1e3)}).nullable()});p.strictObject({runId:p.uuid(),blobs:p.array(Fi).min(1).max(400)});const ea=p.strictObject({uploads:p.array(p.strictObject({sha256:Mi,upload:p.strictObject({url:p.url(),headers:p.record(p.string(),p.string()),expiresAt:p.iso.datetime()}).nullable()})).max(400)});p.strictObject({canvasId:p.uuid(),frameId:p.string().min(1),captureId:p.uuid()});const ta=p.strictObject({captureId:p.uuid(),capturedAt:p.iso.datetime(),commit:p.string().max(200).optional(),url:p.string().min(1),width:p.number().positive(),height:p.number().positive(),pixelRatio:p.number().positive()});p.strictObject({frameId:p.string(),before:ta,after:ta});const na=m.array(m.object({code:m.string().check(m.minLength(1),m.maxLength(160)),message:m.string().check(m.minLength(1),m.maxLength(500))})).check(m.maxLength(32));m.object({issues:m.optional(na),prototype:m.optional(m.object({prototypeId:m.uuid(),deploymentId:m.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,y=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([y(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(y(a));(o===void 0||o.retry<a.retry)&&i.set(y(a),a)}return e.attempts.filter(e=>i.get(y(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(y(e.attempt),y(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=>y(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(y(e),y(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:p.array(p.unknown())},Pa=Ji.extend({attempts:p.array(p.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}}});p.strictObject({manifest:Pa}),p.strictObject({canvasId:p.uuid()}).extend({verdict:Bi});const Fa=p.strictObject({canvasId:p.uuid(),name:p.string().min(1)}),Ia=p.strictObject({runId:p.uuid(),revision:p.string(),version:p.number().int().positive()}),La=Fa.extend({expectedVersion:p.number().int().nonnegative(),revision:p.string().min(1)}),Ra=p.strictObject({current:$i,latest:Hi,related:p.array(p.strictObject({run:Hi,verdict:Bi})),changes:p.array(p.strictObject({key:Pi,frameId:p.string(),label:p.string(),journeyLabel:p.string(),page:p.string().optional(),change:p.enum([`new`,`changed`,`unchanged`,`uncompared`])}))}),b=(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 b(`artifact`,`Invalid capture blob digest.`);return h.join(h.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 b(`artifact`,`Capture blob bytes do not match their descriptor.`);await At(h.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 b(`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)},x={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={[x.v1]:`layout`,[x.v2]:`layout`,[x.v3]:`typography`,[x.v4]:`typography`,[x.v5]:`typography`,[x.v6]:`geometry`,[x.v7]:`geometry`,[x.v8]:`geometry`,[x.v9]:`geometry`,[x.v10]:`geometry`,[x.v11]:`css`,[x.v12]:`text-shadow-blend`,[x.v13]:`format-number`,[x.v14]:`format-number`},$a=[`appearance-unsupported-component`,`styles-unsupported-component`,`text-shadow-blend-unsupported`,`recording-aspect-not-preserved`],S=e=>typeof e==`object`&&!!e&&!Array.isArray(e),eo=e=>Array.isArray(e)?e:void 0,C=(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(!S(e)||!S(e.compositing))return;let t=e.compositing.mask;return typeof t==`string`?no[t]:void 0},io=e=>S(e)?C(e,`blendMode`,`blendSource`):e,ao=e=>S(e)&&`paint`in e?{...C(e,`paint`,`alignment`),paints:[e.paint]}:e,oo=e=>{if(!S(e)||!S(e.progression))return e;let t=e.progression.startValue,n=e.value;return{...C(e,`progression`),value:typeof t==`number`&&typeof n==`number`?Math.max(t,n):n}},so=e=>S(e)&&e.kind===`image`?C(e,`adjustments`):e,co=e=>eo(e)?.filter(e=>!S(e)||e.kind!==`inner`).map(e=>S(e)?{...e,spread:0}:e)??e,lo=e=>{if(!S(e))return e;let t={...e,paint:io(e.paint)};return e.alignment===`inside`?{...t,alignment:`center`}:t},uo=e=>{if(!S(e)||e.kind!==`span`)return e;let t=C(e,`decorationBlendMode`),n=eo(e.fills);n!==void 0&&(t.fills=n.map(e=>io(e))),S(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=S(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(!S(t)||!S(t.paintFallback))return{...e};let n=t.paintFallback.mask;if(n===void 0)return{...e};let r=C(t.paintFallback,`mask`),i=Object.keys(r).length===0?C(t,`paintFallback`):{...t,paintFallback:r},a=e.styles,o=C(e,`props`);return S(n)&&S(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 S(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)),S(e.decoration)&&(t.decoration=C(e.decoration,`blendMode`)),t},_o=e=>{if(!S(e))return e;let t=C(mo(e),`compositing`);ho(e)&&S(t.styles)&&(t.styles={...t.styles,isolation:`isolate`});let n=e.component===`text`;if(S(e.appearance)&&(t.appearance=po(e.appearance,n)),!n)return t;S(e.typography)&&(t.typography=go(e.typography));let r=t.props,i=S(r)?eo(r.richText):void 0;return i!==void 0&&S(r)&&(t.props={...r,richText:i.map(e=>uo(e))}),t},vo=e=>S(e)&&typeof e.sortKey==`string`?e.sortKey:``,yo=e=>{let t=new Map;for(let[n,r]of Object.entries(e)){if(!S(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!==``&&S(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&&S(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(!S(t))return e;let n=Object.fromEntries(Object.entries(t).map(([e,t])=>[e,_o(t)]));if(!S(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(x),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===x.v13||e.version===x.v14?t:Oo(e.version===x.v12?t:Co(t))};p.strictObject({}),p.object({firstAgentWorkAt:p.iso.datetime().nullable()});const Io=p.object({cursor:p.string().nullable().default(null),limit:p.number().int().min(1).max(100).default(20)}),Lo=e=>p.object({items:p.array(e),truncated:p.boolean()}),Ro=2048,zo=p.enum([`never-captured`,`capture-pending`,`extension-unavailable`,`capture-failed`,`source-mismatch`,`upload-incomplete`,`blob-missing`,`image-load-failed`,`unsupported-legacy-state`]),Bo=p.object({background:p.string().optional(),documentVersion:p.number().int().positive().optional(),thumbnailId:p.uuid(),url:p.string(),width:p.literal(528),height:p.literal(312),bytes:p.number().int().min(1).max(1048576)});p.object({canvasId:p.uuid(),thumbnailId:p.uuid(),clientReleaseIdentity:p.string().min(1).max(100),attemptedOperation:p.literal(`thumbnail-download`),recoveryOutcome:p.literal(`fallback-shown`)}),p.object({recorded:p.literal(!0)});const Vo=p.enum([`invite-only`,`link-view`,`link-comment`,`link-edit`]),Ho=p.enum([`owner`,`can-edit`,`can-comment`,`can-view`]),Uo=p.enum([`can-edit`,`can-comment`,`can-view`]),Wo=p.object({read:p.boolean(),comment:p.enum([`yes`,`sign-in`,`no`]),edit:p.enum([`yes`,`sign-in`,`no`]).default(`no`),grants:p.array(p.object({source:p.enum([`direct`,`team`,`link`]),accessLevel:Ho})).default([]),grantableAccessLevels:p.array(Uo).default([]),share:p.boolean(),manage:p.boolean(),readHistory:p.boolean().default(!1)}),Go=p.object({id:p.uuid(),title:p.string().min(1),accessState:Vo,organisationId:p.uuid().nullable(),sourceUrl:p.string().nullable(),unresolvedCount:p.number().int().min(0),viewerCan:Wo,createdAt:p.iso.datetime(),lastActivityAt:p.iso.datetime()});p.object({title:p.string().trim().min(1),organisationId:p.uuid().nullable().default(null),sourceUrl:p.string().nullable().default(null)}),Go.extend({version:p.number().int().positive()}),p.object({canvasId:p.uuid()});const Ko=p.union([p.literal(`own`),p.literal(`everything`),p.uuid()]);p.object({collection:Ko.default(`own`),title:p.string().trim().min(1).optional().describe(`Title text to match before returning canvas ids.`),deleted:p.boolean().default(!1),accessState:Vo.optional(),scope:p.enum([`all`,`mine`,`shared`]).default(`all`),hasUnresolved:p.boolean().default(!1)});const qo=Go.extend({screenCount:p.number().int().min(0),hasRecording:p.boolean(),lastViewedAt:p.iso.datetime().nullable()});Lo(p.union([qo.extend({thumbnail:Bo}),qo.extend({thumbnail:p.null(),thumbnailFallbackReason:zo})])),p.object({canvasId:p.uuid(),title:p.string().trim().min(1)}),p.object({canvasId:p.uuid()}),p.object({canvasId:p.uuid(),deletedAt:p.iso.datetime()}),p.object({canvasId:p.uuid(),organisationId:p.union([p.uuid(),p.literal(`personal`)])}),p.object({canvas:Go}),p.object({canvasId:p.uuid(),organisationId:p.union([p.uuid(),p.literal(`personal`)]),title:p.string().trim().min(1).optional()}),p.object({canvas:Go}),p.object({canvasId:p.uuid(),sourceCanvasId:p.uuid().optional(),organisationId:p.union([p.uuid(),p.literal(`personal`)]),title:p.string().trim().min(1),document:p.record(p.string(),p.unknown()),screenIds:p.array(p.uuid())}),p.object({canvas:Go,document:p.record(p.string(),p.unknown())}),p.object({canvasId:p.uuid(),confirmation:p.string().min(1)}),p.object({canvasId:p.uuid()}),p.object({canvasId:p.uuid(),accessState:Vo}),p.object({canvas:Go,widened:p.boolean()}),p.object({canvasId:p.uuid()}),p.object({lastViewedAt:p.iso.datetime().nullable()}),p.object({canvasId:p.uuid()}),p.object({canvasId:p.uuid()});const Jo=/javascript|vbscript|data\s*:\s*text\/html|expression\s*\(|@import/iu,Yo=p.string().refine(e=>!Jo.test(e),`unsafe CSS value`),w=p.number(),T=p.number().nonnegative(),E=w,Xo=T,D=p.number().min(0).max(1),O=p.string().min(1),Zo=p.object({space:p.enum([`srgb`,`display-p3`]),red:D,green:D,blue:D,alpha:D,definitionId:O.optional()}),Qo=p.object({id:O,position:D,color:Zo}),$o=p.object({id:O,visible:p.boolean()}),es=$o.extend({kind:p.literal(`blur`),value:Xo,parameter:p.enum([`radius`,`standard-deviation`]).optional()}),ts=[$o.extend({kind:p.literal(`brightness`),value:Xo}),$o.extend({kind:p.literal(`contrast`),value:Xo}),$o.extend({kind:p.literal(`grayscale`),value:D}),$o.extend({kind:p.literal(`hue-rotate`),value:E}),$o.extend({kind:p.literal(`invert`),value:D}),$o.extend({kind:p.literal(`saturate`),value:Xo}),$o.extend({kind:p.literal(`sepia`),value:D})],ns=p.discriminatedUnion(`kind`,[es,...ts]),rs=p.discriminatedUnion(`kind`,[es.extend({progression:p.object({startValue:Xo,start:p.object({x:E,y:E}),end:p.object({x:E,y:E})}).optional()}),...ts]),is=p.tuple([E,E,E,E,E,E]).refine(([e,t,n,r])=>e*r!==t*n,`paint transform must be invertible`),as=p.enum([`normal`,`multiply`,`screen`,`overlay`,`darken`,`lighten`,`plus-lighter`,`color-dodge`,`color-burn`,`hard-light`,`soft-light`,`difference`,`exclusion`,`hue`,`saturation`,`color`,`luminosity`]),os=p.object({kind:p.literal(`figma`),originalMode:p.string(),mappedMode:as,sourceGuid:p.string().optional(),path:p.array(p.string())}),ss=p.object({id:O,blendMode:as.optional(),blendSource:os.optional(),visible:p.boolean(),opacity:D}),cs=p.discriminatedUnion(`kind`,[ss.extend({kind:p.literal(`solid`),color:Zo}),ss.extend({kind:p.literal(`linear-gradient`),angle:E,transform:is.optional(),stops:p.array(Qo).min(2)}),ss.extend({kind:p.literal(`radial-gradient`),center:p.object({x:E,y:E}),radius:p.object({x:Xo,y:Xo}),transform:is.optional(),stops:p.array(Qo).min(2)}),ss.extend({kind:p.literal(`angular-gradient`),transform:is,stops:p.array(Qo).min(2)}),ss.extend({kind:p.literal(`diamond-gradient`),transform:is,stops:p.array(Qo).min(2)}),ss.extend({kind:p.literal(`image`),assetId:p.string().min(1),fit:p.enum([`fill`,`cover`,`fit`,`crop`,`tile`]),tileScale:E.positive().optional(),tileOrigin:p.enum([`center`,`top-left`]).optional(),rotation:p.union([p.literal(0),p.literal(90),p.literal(180),p.literal(270)]).optional(),crop:p.object({x:D,y:D,width:D,height:D}).optional(),transform:is.optional(),filters:p.array(ns).optional(),naturalSize:p.object({width:E.positive(),height:E.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`]})]),ls=p.intersection(cs,p.object({alternatives:p.partialRecord(p.enum([`solid`,`linear-gradient`,`radial-gradient`,`angular-gradient`,`diamond-gradient`,`image`]),cs).optional(),recentGradient:p.enum([`linear-gradient`,`radial-gradient`,`angular-gradient`,`diamond-gradient`]).optional()})),us=p.object({id:O,name:p.string().trim().min(1),value:p.union([Zo.omit({definitionId:!0}),p.object({definitionId:O})]),source:p.object({kind:p.literal(`figma`),key:O,modeId:O.optional()}).optional()}),ds=p.object({op:p.literal(`setArtworkColor`),nodeId:p.literal(`root`),colorId:p.string().min(1),definition:us.nullable()}).refine(e=>e.definition===null||e.definition.id===e.colorId,`colour identity must match`),fs=p.object({ratio:T,offset:w.optional()}),ps=p.object({min:T.optional(),max:T.optional(),minParent:fs.optional(),maxParent:fs.optional()}).refine(({min:e,max:t})=>e===void 0||t===void 0||e<=t,`size minimum cannot exceed maximum`),ms=p.discriminatedUnion(`mode`,[p.object({mode:p.literal(`fixed`),value:T}).strict(),ps.extend({mode:p.literal(`hug`),implicitExtent:T.optional()}).strict(),ps.extend({mode:p.literal(`fill`),offset:w.optional()}).strict()]),hs=p.object({top:T,right:T,bottom:T,left:T}),gs=p.union([p.literal(`auto`),w]),_s=p.object({top:gs,right:gs,bottom:gs,left:gs}),vs=p.object({mode:p.enum([`auto-fill`,`auto-fit`]),minimum:p.number().positive()}),ys=p.object({x:w,y:w}),bs=p.object({direction:p.enum([`row`,`column`]),alignItems:p.enum([`start`,`center`,`end`,`stretch`]),alignContent:p.enum([`start`,`center`,`end`,`stretch`,`space-between`,`space-around`,`space-evenly`]).optional(),justifyContent:p.enum([`start`,`center`,`end`,`space-between`,`space-around`,`space-evenly`]),gap:w,rowGap:w.optional(),columnGap:w.optional(),crossGapMode:p.literal(`auto`).optional(),wrap:p.enum([`nowrap`,`wrap`]).optional(),gridColumns:p.number().int().positive().optional(),gridAutoRepeat:vs.optional(),padding:hs}).strict(),xs=p.object({button:p.literal(!0).optional(),overflowClip:p.literal(!0).optional(),lineAboveBorderBottom:w.optional()}).strict(),Ss=p.object({top:T.optional(),right:T.optional(),bottom:T.optional(),left:T.optional()}).strict(),Cs=p.object({ratio:w,offset:w.optional()}).strict(),ws=p.object({x:Cs.optional(),y:Cs.optional()}).strict(),Ts=p.object({rotation:w.optional(),flipHorizontal:p.boolean().optional(),flipVertical:p.boolean().optional(),aspectRatioLocked:p.boolean().optional(),aspectRatio:p.number().positive().optional(),horizontal:ms.optional(),vertical:ms.optional(),position:p.enum([`flow`,`absolute`]).optional(),retainedIgnore:p.literal(!0).optional(),gridParticipation:p.literal(`unassigned`).optional(),gridEmptyPlacement:p.literal(`manual`).optional(),gridAutoTrackPolicy:p.object({rows:p.literal(`extend-last`).optional(),columns:p.literal(`extend-last`).optional()}).strict().optional(),retainedFlexSpacing:p.object({gap:p.union([w,Yo.min(1)]),counterGap:p.union([w,Yo.min(1)]),crossGapMode:p.literal(`auto`).optional()}).strict().optional(),alignSelf:p.enum([`auto`,`start`,`center`,`end`,`stretch`]).optional(),flexGrow:T.optional(),flexShrink:T.optional(),flexBasis:p.union([p.literal(`auto`),T,fs]).optional(),flowOffset:ys.optional(),positionParent:ws.optional(),order:w.int().optional(),margin:_s.partial().optional(),clipContent:p.boolean().optional(),baselineSource:xs.optional(),scrollbarGutter:Ss.optional(),container:bs.partial().extend({padding:hs.partial().optional()}).optional()}).strict(),Es=w,k=T,Ds=p.number().min(0).max(1),Os=p.string().min(1),ks=p.object({topLeft:k,topRight:k,bottomRight:k,bottomLeft:k,smoothing:Ds.optional()}),As=p.array(k).min(1),js=p.enum([`none`,`round`,`square`]),Ms=p.object({visible:p.boolean(),layoutInclusion:p.enum([`always`,`visible`,`none`]).optional(),width:p.object({top:k,right:k,bottom:k,left:k}),style:p.enum([`solid`,`dashed`,`dotted`]),paints:p.array(ls),dashPattern:As.optional(),dashCap:js.optional(),dashOrigin:p.literal(`css`).optional(),alignment:p.enum([`inside`,`center`,`outside`]).optional()}),Ns=Ms.pick({width:!0,style:!0,layoutInclusion:!0}),Ps=p.object({visible:p.boolean(),width:k,offset:Es,style:p.enum([`solid`,`dashed`,`dotted`]),paints:p.array(ls),dashPattern:As.optional(),dashCap:js.optional()}),Fs=p.object({id:Os,visible:p.boolean(),kind:p.enum([`outer`,`inner`]),color:Zo,offsetX:Es,offsetY:Es,blur:k,spread:Es,blendMode:as.optional(),blendSource:os.optional(),isShownBehindNode:p.boolean().optional()}),Is=p.object({opacity:Ds,blendMode:as,fills:p.array(ls),border:Ms,retainedBorder:Ns.optional(),outline:Ps,radius:ks,shadows:p.array(Fs),filters:p.array(ns),backdropFilters:p.array(rs)}),Ls=Is.partial().refine(e=>Object.keys(e).length>0,`appearance values cannot be empty`),Rs=[`opacity`,`blendMode`,`fills`,`border`,`retainedBorder`,`outline`,`radius`,`shadows`,`filters`,`backdropFilters`],zs=p.enum(Rs),Bs=Is.partial().extend({clear:p.array(zs).min(1).max(Rs.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=p.number(),j=p.number().nonnegative(),Vs=p.string().regex(/^[\u{20}-\u{7E}]{4}$/u),Hs=Vs.refine(e=>![`wght`,`opsz`].includes(e)),M=p.object({family:p.string().min(1),fallbackFamilies:p.array(p.string().min(1)),size:j,weight:p.number().min(1).max(1e3),variations:p.record(Hs,A).optional(),features:p.record(Vs,p.number().int().nonnegative().max(65535)).optional(),opticalSize:p.discriminatedUnion(`mode`,[p.object({mode:p.literal(`auto`)}),p.object({mode:p.literal(`font-default`)}),p.object({mode:p.literal(`fixed`),value:A})]).optional(),style:p.enum([`normal`,`italic`,`oblique`]),lineHeight:p.discriminatedUnion(`mode`,[p.object({mode:p.literal(`normal`)}),p.object({mode:p.literal(`fixed`),value:j}),p.object({mode:p.literal(`percent`),value:j})]),letterSpacing:p.union([A,p.object({mode:p.literal(`percent`),value:A})]),align:p.enum([`left`,`center`,`right`,`justify`]),direction:p.enum([`auto`,`ltr`,`rtl`]).optional(),verticalAlign:p.enum([`top`,`middle`,`bottom`]),verticalTrim:p.enum([`none`,`cap-height`]).optional(),transform:p.enum([`none`,`uppercase`,`lowercase`,`capitalize`]),decoration:p.object({line:p.enum([`none`,`underline`,`line-through`]),style:p.enum([`solid`,`double`,`dotted`,`dashed`,`wavy`]),color:Zo.optional(),blendMode:as.optional(),thickness:p.union([j,p.object({mode:p.literal(`percent`),value:j}),p.object({mode:p.literal(`font-default`)})]).optional(),offset:p.union([A,p.object({mode:p.literal(`percent`),value:A})]).optional(),skipInk:p.enum([`auto`,`none`,`all`]).optional()}),stroke:p.object({width:j,paint:ls,alignment:p.enum([`center`,`outside`]).optional()}).optional(),wrapping:p.enum([`wrap`,`nowrap`,`pre`,`pre-line`,`pre-wrap`,`break-spaces`]),wrapStyle:p.enum([`auto`,`pretty`,`balance`]).optional(),paragraphSpacing:j.optional(),paragraphIndent:j.optional(),listStyle:p.enum([`none`,`bulleted`,`numbered`]).optional(),listSpacing:j.optional(),hangingList:p.boolean().optional(),hangingPunctuation:p.boolean().optional(),truncation:p.object({mode:p.enum([`none`,`ellipsis`]),maxLines:p.number().int().min(1).nullable()}).optional(),insets:p.object({top:A,right:A,bottom:A,left:A}).optional()}),Us=M.pick({align:!0,direction:!0,wrapStyle:!0,paragraphSpacing:!0,paragraphIndent:!0,listStyle:!0,listSpacing:!0,hangingList:!0}).partial().extend({listLevel:p.number().int().min(1).optional(),listStart:p.number().int().min(1).optional()}).strict(),Ws=M.partial().strict(),Gs=M.keyof().options,Ks=Ws.extend({featureChanges:p.object({set:M.shape.features,clear:p.array(Vs).optional(),removeIfEmpty:p.boolean().optional()}).strict().optional(),variationChanges:p.object({set:M.shape.variations,clear:p.array(Hs).optional(),removeIfEmpty:p.boolean().optional()}).strict().optional(),clear:p.array(M.keyof()).max(Gs.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`),qs={"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`]},Js=/^(?:behavior|-moz-binding)$/iu,Ys=p.string().min(1).regex(/^(?:--[\w-]+|-(?:webkit|moz|ms|o)-[a-z][a-z\d-]*|[a-z][a-z\d-]*)$/iu).refine(e=>!Js.test(e),`unsafe CSS property`),N=p.object({id:p.string().min(1),property:Ys,value:Yo,enabled:p.boolean()}),Xs=p.object({declarations:p.array(N)}).refine(({declarations:e})=>new Set(e.map(e=>e.id)).size===e.length,`additional style ids must be unique`),Zs=p.array(N.shape.id).refine(e=>new Set(e).size===e.length,`declaration ids must be unique`),Qs=p.object({set:p.array(N).refine(e=>new Set(e.map(e=>e.id)).size===e.length,`declaration ids must be unique`).optional(),clear:Zs.optional(),order:Zs.optional(),empty:p.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`),$s=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(),ec=$s.keyof().options,tc=p.object({id:p.string().min(1),name:p.string().trim().min(1),description:p.string().max(2e3),sortKey:p.string().min(1).optional(),sourceStyleId:p.string().min(1).optional(),sourceCanvasId:p.uuid().optional(),sourceRevision:p.number().int().positive().optional(),typography:$s.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`]});p.object({id:tc.shape.id,position:p.enum([`normal`,`subscript`,`superscript`]).optional(),overrides:p.partialRecord(p.enum([`fontWeight`,`fontStyle`,`fontVariationSettings`,`fontOpticalSizing`,`textDecorationLine`,`textDecorationStyle`,`textDecorationColor`,`textDecorationThickness`,`textUnderlineOffset`,`textDecorationSkipInk`]),p.union([p.string().max(1e3),p.number()])).optional()}).strict();const nc=ls.array().optional();p.object({fills:nc}),Us.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:as.optional()}).strip();const P=p.object({url:p.url(),expiresAt:p.iso.datetime(),headers:p.record(p.string(),p.string())}),rc=p.object({url:p.url(),expiresAt:p.iso.datetime(),bytes:p.number().int().min(0)}),ic=`/v1/canvas-assets/`,ac=[`image/avif`,`image/gif`,`image/jpeg`,`image/png`,`image/webp`],oc=p.string().regex(/^image\/[a-z0-9.+-]+$/u);p.object({canvasId:p.uuid(),contentType:p.enum(ac),bytes:p.number().int().positive()}),p.object({assetId:p.uuid(),path:p.string().startsWith(`/v1/canvas-assets/`),upload:P});const sc=(e,t)=>`${ic}${encodeURIComponent(e)}/${encodeURIComponent(t)}`,cc=p.tuple([p.uuid(),p.uuid()]),lc=e=>{if(!e.startsWith(`/v1/canvas-assets/`))return null;let t=cc.safeParse(e.slice(18).split(`/`)).data;return t===void 0?null:{canvasId:t[0],assetId:t[1]}},uc=[`font/ttf`,`font/otf`,`font/woff`,`font/woff2`,`font/collection`],dc=p.object({canvasId:p.uuid(),sha256:p.string().regex(/^[a-f0-9]{64}$/u)});dc.extend({bytes:p.number().int().positive()}).extend({contentType:p.enum(uc)}),p.object({path:p.string().startsWith(`/v1/canvas-assets/`)}).extend({upload:P});const fc=(e,t)=>`${ic}${encodeURIComponent(e)}/fonts/${encodeURIComponent(t)}`;p.object({canvasId:p.uuid(),sources:p.array(dc).min(1)}),p.object({resources:p.array(p.object({source:dc,path:p.string()}))});const pc=1e3,mc=new Set(uc),hc=(e,t)=>e===`image`?oc.safeParse(t).success:mc.has(t),gc=p.strictObject({canvasId:p.uuid(),clientToken:p.uuid()});p.discriminatedUnion(`kind`,[gc.extend({kind:p.literal(`image`),contentType:p.enum(ac),bytes:p.number().int().positive(),sha256:p.string().regex(/^[a-f0-9]{64}$/u)}),gc.extend({kind:p.literal(`font`),contentType:p.enum(uc),bytes:p.number().int().positive(),sha256:p.string().regex(/^[a-f0-9]{64}$/u)})]);const _c=p.discriminatedUnion(`kind`,[p.strictObject({kind:p.literal(`image`),width:p.number().int().positive(),height:p.number().int().positive()}),p.strictObject({kind:p.literal(`font`),family:p.string().min(1),subfamily:p.string(),style:p.enum([`normal`,`italic`,`oblique`]),minimumWeight:p.number().min(1).max(pc),maximumWeight:p.number().min(1).max(pc)}).refine(e=>e.minimumWeight<=e.maximumWeight,`Font weight bounds must be ordered.`)]);p.strictObject({canvasId:p.uuid(),clientToken:p.uuid(),assetId:p.uuid(),kind:p.enum([`image`,`font`]),contentType:p.string(),bytes:p.number().int().positive(),sha256:p.string().regex(/^[a-f0-9]{64}$/u),path:p.string().startsWith(`/v1/canvas-assets/`),state:p.enum([`awaiting_upload`,`ready`]),metadata:_c.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=>hc(e.kind,e.contentType),`Content type must match the asset kind.`).refine(e=>e.path===(e.kind===`image`?sc(e.canvasId,e.assetId):fc(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 vc=[`top`,`right`,`bottom`,`left`];vc.map(e=>`padding-${e}`),vc.map(e=>`margin-${e}`);const yc=p.enum([`png`,`jpeg`]),bc=p.number().positive(),xc=p.strictObject({format:yc.optional(),scale:bc.optional()}),Sc=p.strictObject({format:yc.nullable().optional(),scale:bc.nullable().optional()}).refine(e=>e.format!==void 0||e.scale!==void 0),Cc=p.number(),wc=Cc.nonnegative(),Tc=p.string().min(1).max(200),Ec=p.string().regex(/^[MmLlHhVvCcSsQqTtAaZzEe\d\s.,+-]*$/u),Dc=p.strictObject({x:Cc,y:Cc,width:wc,height:wc}),Oc=p.strictObject({kind:p.literal(`path`),path:Ec.min(1),fillRule:p.enum([`nonzero`,`evenodd`]),viewBox:Dc.extend({width:wc.positive(),height:wc.positive()})}),kc=p.strictObject({kind:p.literal(`polygon`),count:p.number().int().min(3),innerRatio:p.number().min(0).max(1).optional(),cornerRadius:wc,cornerSmoothing:p.number().min(0).max(1)}),Ac=p.enum([`union`,`subtract`,`intersect`,`exclude`]),jc=p.strictObject({kind:p.literal(`boolean`),operation:Ac,operandIds:p.array(Tc).min(1).refine(e=>new Set(e).size===e.length),result:p.strictObject({path:Ec,fillRule:p.literal(`nonzero`),isEmpty:p.boolean(),bounds:Dc,inputKey:p.string().regex(/^[a-f0-9]{16}$/u)}).refine(e=>e.isEmpty===(e.path===``))}),Mc=p.discriminatedUnion(`kind`,[Oc,kc,p.strictObject({kind:p.literal(`mask`),maskId:Tc,mode:p.enum([`alpha`,`luminance`,`outline`]).optional()}),jc]),Nc=`Update Enhance: compositing is no longer supported. Use the isolation style or a mask group.`,Pc=p.literal(15,{error:`This editor uses an unsupported document format. Update the editor before changing this canvas.`});p.object({signature:p.string().regex(/^[a-f0-9]{16}$/u),image:p.string().refine(e=>e.startsWith(`data:image/jpeg;base64,`)||lc(e)!==null),families:p.array(p.string().min(1)).min(1)});const F=p.object({x:p.number(),y:p.number(),width:p.number().nonnegative(),height:p.number().nonnegative()}),Fc=p.enum([`start`,`center`,`end`,`stretch`,`scale`]),Ic=p.object({x:Fc,y:Fc}),Lc=p.enum([`source`,`generated`,`content`,`user`]),I=p.looseObject({id:p.string().min(1),label:p.string(),component:p.string().min(1),labelOrigin:Lc.optional(),visible:p.boolean().optional(),locked:p.boolean().optional(),constraints:Ic.optional(),styles:p.record(p.string(),p.union([p.string(),p.number()])),layout:Ts.optional(),responsive:p.never().optional(),appearance:Ls.optional(),exportSettings:xc.optional(),typography:Ws.optional(),additionalStyles:Xs.optional(),geometry:Mc.optional(),compositing:p.never({error:Nc}).optional(),props:p.record(p.string(),p.unknown()).optional(),box:F.optional()}),Rc=p.object({version:p.literal(15),nodes:p.record(p.string(),I),relationships:p.record(p.string(),p.object({parentId:p.string().min(1),sortKey:p.string().min(1)})),tombstones:p.record(p.string(),p.literal(!0)).default({})}),zc=p.record(p.string(),p.unknown());p.preprocess(e=>{let t=zc.safeParse(e).data;return t===void 0?e:Object.keys(t).length===0?Bc():Fo(t)},Rc);const Bc=()=>({version:15,nodes:{root:{id:`root`,label:`Canvas`,component:`root`,labelOrigin:`generated`,visible:!0,locked:!1,styles:{}}},relationships:{},tombstones:{}}),Vc=p.string().min(1),Hc=p.object({code:p.enum([`asset-unavailable`,`content-omitted`,`cross-origin-frame`,`nodes-truncated`,`responsive-behavior-not-editable`,`style-degraded`,`unsupported-surface`]),message:p.string().min(1),temporaryId:Vc.optional()}),Uc=p.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`]),Wc=p.object({nodeCount:p.number().int().positive(),unsupportedFeatures:p.array(p.object({feature:Uc,count:p.number().int().positive()})).optional(),sourceNodeCount:p.number().int().positive().optional(),collapsedNodeCount:p.number().int().nonnegative().optional(),collapsedWrapperNodeCount:p.number().int().nonnegative().optional(),collapsedNeutralWrapperNodeCount:p.number().int().nonnegative().optional(),collapsedTransferredWrapperNodeCount:p.number().int().nonnegative().optional(),layoutContainerCount:p.number().int().nonnegative().optional(),removedLeafNodeCount:p.number().int().nonnegative().optional(),retainedSemanticOwnerNodeCount:p.number().int().nonnegative().optional(),truncatedNodeCount:p.number().int().nonnegative().optional(),addedLayoutNodeCount:p.number().int().nonnegative().optional(),issues:p.array(Hc)}),Gc=I.omit({id:!0}).extend({temporaryId:Vc}),Kc=p.object({temporaryId:Vc,parentTemporaryId:Vc,sortKey:p.string().min(1)}),qc=p.object({version:p.literal(1),rootTemporaryId:Vc,nodes:p.array(Gc).min(1),relationships:p.array(Kc),report:Wc.catch({nodeCount:0,issues:[]})}).transform(e=>({...e,report:{...e.report,nodeCount:e.nodes.length}})),Jc=p.object({screenId:p.string().min(1),pageId:p.string().min(1)}),Yc={canvasId:p.uuid(),documentFormatVersion:Pc,mutationId:p.uuid(),baseVersion:p.number().int().positive(),draft:qc};p.union([p.strictObject({...Yc,screenNodeId:p.string().min(1).describe(`The screen layer to convert beside itself.`)}),p.strictObject({...Yc,capture:Jc.describe(`The stored page a new capture lands from, and the page its frame goes on.`)})]);const Xc=p.object({canvasId:p.uuid(),mutationId:p.uuid(),previousVersion:p.number().int().positive(),version:p.number().int().positive(),rootNodeId:p.string().min(1),idMap:p.record(Vc,p.string().min(1)),insertedNodeIds:p.array(p.string().min(1)),removedNodeIds:p.array(p.string().min(1)),boxes:p.record(p.string().min(1),F),affectedBounds:F}),Zc=[`queued`,`claimed`,`grant`,`navigate`,`document`,`sources`,`fonts`,`layout`,`target`,`capture`,`serialize`,`compile`,`commit`,`upload`,`complete`],Qc=[`queued`,`running`,`succeeded`,`failed`,`cancelled`,`expired`],$c=[`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`],el=[`ASSET_UNAVAILABLE`,`FONT_FALLBACK`,`LOCAL_FONT_FALLBACK`,`SOURCE_FALLBACK`,`SCALE_REDUCED`,`LAYOUT_FALLBACK`],tl=p.number().int().positive(),nl=p.object({x:p.number(),y:p.number(),width:p.number().positive(),height:p.number().positive()}),rl=p.discriminatedUnion(`kind`,[p.object({kind:p.literal(`content`)}),p.object({kind:p.literal(`page`),pageId:p.string().min(1)}),p.object({kind:p.literal(`node`),nodeId:p.string().min(1)}),p.object({kind:p.literal(`bounds`),bounds:nl})]),il=p.object({kind:p.literal(`recording`),recordingId:p.uuid(),atMs:p.number().int().nonnegative()}),al=p.object({kind:p.literal(`recording`),recordingId:p.uuid(),requestedAtMs:p.number().int().nonnegative(),settledAtMs:p.number().int().nonnegative()}),ol=p.object({recordingId:p.uuid(),atMs:p.number().int().nonnegative(),screenId:p.uuid(),screenNodeId:p.string().min(1).nullable(),pageId:p.string().min(1).optional(),viewport:p.object({width:p.number().int().positive(),height:p.number().int().positive()}),box:nl,version:p.number().int().positive(),alreadyPresent:p.boolean()}),sl=p.object({canvasId:p.uuid(),expectedVersion:p.number().int().positive().optional(),scope:p.strictObject({pageId:p.string().min(1).optional(),nodeIds:p.array(p.string().min(1))}).optional(),target:rl.default({kind:`content`}),sourceState:il.optional(),scale:p.number().positive().default(1),maxOutputPixels:tl.optional(),format:p.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`]}),cl=p.enum(Zc);p.enum(Qc);const ll=p.enum($c),ul=p.enum(el),dl=p.object({code:ul,message:p.string().min(1).max(500),sourceId:p.string().min(1).nullable()}),L=p.object({reason:ll,phase:cl,message:p.string().min(1).max(500),retryable:p.boolean(),sourceId:p.string().min(1).nullable()}),fl=p.object({phase:cl,durationMs:p.number().int().min(0)}),pl=p.object({canvasId:p.uuid(),requestedVersion:p.number().int().positive(),loadedVersion:p.number().int().positive(),target:rl,sourceState:al.optional(),snapshot:ol.optional(),bounds:nl,width:p.number().int().positive(),height:p.number().int().positive(),scale:p.number().positive(),contentType:p.literal(`image/png`),bytes:p.number().int().positive(),warnings:p.array(dl),timings:p.array(fl),expiresAt:p.iso.datetime()}),ml=p.object({id:p.uuid(),canvasId:p.uuid(),purpose:p.enum([`inspection`,`snapshot`,`thumbnail`,`export`]),phase:cl,requestedVersion:p.number().int().positive(),target:rl,sourceState:il.optional(),scale:p.number().positive(),maxOutputPixels:tl.optional(),format:p.literal(`png`),attempt:p.number().int().min(0),lastFailure:L.optional(),createdAt:p.iso.datetime(),updatedAt:p.iso.datetime()}),hl=p.discriminatedUnion(`state`,[ml.extend({state:p.literal(`queued`),result:p.null(),failure:p.null()}),ml.extend({state:p.literal(`running`),result:p.null(),failure:p.null()}),ml.extend({state:p.literal(`succeeded`),phase:p.literal(`complete`),result:pl,failure:p.null()}),ml.extend({state:p.literal(`failed`),result:p.null(),failure:L}),ml.extend({state:p.literal(`cancelled`),result:p.null(),failure:L.extend({reason:p.literal(`CANCELLED`)})}),ml.extend({state:p.literal(`expired`),result:p.null(),failure:L.extend({reason:p.literal(`EXPIRED`)})})]);p.object({job:hl,alreadyExists:p.boolean()}),p.object({jobId:p.uuid()}).extend({waitMs:p.number().int().min(0).max(1e4).optional()}),p.object({job:hl}),p.object({jobId:p.uuid()}),p.object({job:hl});const gl=p.discriminatedUnion(`status`,[p.object({status:p.literal(`available`),version:p.number().int().positive(),format:p.literal(`enhance-scene-json`),code:p.string(),prototypes:p.array(p.object({nodeId:p.string(),prototypeId:p.uuid(),deploymentId:p.uuid(),capability:p.literal(`canvas.read`),canvasPath:p.string(),input:p.object({canvasRef:p.uuid(),view:p.literal(`source`),nodeId:p.string()}),guidance:p.string()})),guidance:p.string()}),p.object({status:p.literal(`unavailable`),guidance:p.string()})]);p.object({canvasId:p.uuid(),nodeId:p.string().min(1),expectedVersion:p.number().int().positive(),scale:p.number().positive()}),p.object({jobId:p.uuid()}),p.object({jobId:p.uuid(),download:rc,source:gl.optional()});const _l=p.strictObject({previewJobId:p.uuid(),scope:p.strictObject({pageId:p.string().min(1).optional(),nodeIds:p.array(p.string().min(1))}),placement:p.strictObject({kind:p.enum([`below-source`,`editable-below-source`])})});p.object({canvasId:p.uuid(),recordingId:p.uuid(),atMs:p.number().int().nonnegative(),context:p.strictObject({expectedVersion:p.number().int().positive(),request:_l}).optional()}),p.object({job:hl,alreadyExists:p.boolean()});const vl=p.object({rootIds:p.array(p.string().min(1))}),yl=p.discriminatedUnion(`kind`,[p.object({kind:p.literal(`adjacent`)}),p.object({kind:p.literal(`insert-children`),pageId:p.string().min(1).optional(),targetNodeId:p.string().min(1)}),p.object({kind:p.literal(`replace`),targetNodeId:p.string().min(1)})]),bl=p.discriminatedUnion(`kind`,[p.object({kind:p.literal(`screen`),nodeId:p.string().min(1)}),p.object({kind:p.literal(`html`),html:p.string().min(1),label:p.string().min(1),idPrefix:p.string().min(1).regex(/^[\w-]+$/u).optional()})]),xl=p.object({source:bl,destination:yl,revisionPolicy:p.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`]})}),Sl=p.discriminatedUnion(`kind`,[p.object({kind:p.literal(`screen`),nodeId:p.string().min(1)}),p.object({kind:p.literal(`html`),label:p.string().min(1)})]),Cl=p.object({id:p.uuid(),canvasId:p.uuid(),source:Sl,destination:yl,phase:cl,requestedVersion:p.number().int().positive(),attempt:p.number().int().nonnegative(),createdAt:p.iso.datetime(),updatedAt:p.iso.datetime()}),wl=p.discriminatedUnion(`state`,[Cl.extend({state:p.literal(`queued`),result:p.null(),failure:p.null()}),Cl.extend({state:p.literal(`running`),result:p.null(),failure:p.null()}),Cl.extend({state:p.literal(`succeeded`),phase:p.literal(`complete`),result:Xc.extend({report:Wc}),failure:p.null()}),Cl.extend({state:p.literal(`failed`),result:p.null(),failure:L}),Cl.extend({state:p.literal(`cancelled`),result:p.null(),failure:L.extend({reason:p.literal(`CANCELLED`)})}),Cl.extend({state:p.literal(`expired`),result:p.null(),failure:L.extend({reason:p.literal(`EXPIRED`)})})]);xl.and(p.object({canvasId:p.uuid(),expectedVersion:p.number().int().positive().optional(),mutationId:p.uuid().optional(),writeScope:vl.optional(),scope:sl.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`]}),p.object({job:wl,alreadyExists:p.boolean()}),p.object({jobId:p.uuid()}),p.object({job:wl}),p.object({jobId:p.uuid()}),p.object({job:wl}),p.discriminatedUnion(`state`,[p.object({state:p.literal(`loading`),jobId:p.uuid()}),p.object({state:p.literal(`ready`),jobId:p.uuid(),loadedVersion:p.number().int().positive(),draft:qc}),p.object({state:p.literal(`failed`),jobId:p.uuid(),message:p.string().min(1)})]);const Tl=p.object({add:p.array(p.object({resourceId:p.string().min(1)}).catchall(p.unknown())),remove:p.array(p.string().min(1))}),R=p.union([p.string(),w]),z=p.union([N.shape.value,w]).nullable().optional(),El=p.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":p.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()}),Dl=p.string().regex(/^(?:\d+(?:\.\d+)?|\.\d+)px$/u),Ol=p.string().regex(/^-?(?:\d+(?:\.\d+)?|\.\d+)px$/u),kl=N.shape.value.refine(e=>!/\burl\s*\(/iu.test(e),`invalid text colour`),Al=p.union([M.shape.weight,p.enum([`normal`,`bold`,`bolder`,`lighter`]),p.string().regex(/^\d+(?:\.\d+)?$/u).refine(e=>M.shape.weight.safeParse(Number(e)).success)]),B={color:kl,"font-family":N.shape.value,"font-size":p.union([T,Dl]),"font-weight":Al,"font-style":p.enum([`normal`,`italic`,`oblique`]),"letter-spacing":w,"line-height":p.union([p.number().positive(),p.string().regex(/^(?:\d+(?:\.\d+)?(?:px|em|rem|%)?|normal)$/u)]),"text-align":p.enum([`left`,`center`,`right`]),"white-space":p.enum([`normal`,`nowrap`,`pre`,`pre-wrap`,`pre-line`,`break-spaces`])},jl=p.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()}),Ml=p.enum([`start`,`end`,`left`,`right`,`center`,`justify`,`justify-all`,`match-parent`,`-webkit-left`,`-webkit-right`,`-webkit-center`]),Nl=p.union([B[`font-style`],p.string().regex(/^oblique -?(?:\d+(?:\.\d+)?|\.\d+)deg$/u)]),V=p.union([N.shape.value,w]).nullable().optional(),Pl=p.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":p.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":Nl.nullable().optional(),"font-stretch":p.union([p.enum([`normal`,`ultra-condensed`,`extra-condensed`,`condensed`,`semi-condensed`,`semi-expanded`,`expanded`,`extra-expanded`,`ultra-expanded`]),p.string().regex(/^\d+(?:\.\d+)?%$/u)]).nullable().optional(),"letter-spacing":p.union([w,Ol,p.literal(`normal`)]).nullable().optional(),"line-height":B[`line-height`].nullable().optional(),"text-align":Ml.nullable().optional(),"text-indent":p.union([w,Ol]).nullable().optional(),"white-space":B[`white-space`].nullable().optional(),"word-spacing":p.union([w,Ol,p.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}),Fl=N.shape.value,H=p.union([p.string(),w]),U=p.union([N.shape.value,w]).nullable().optional(),Il=Pl.extend(El.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:p.string().nullable().optional(),"background-color":p.string().nullable().optional(),"background-image":U,"background-size":U,"background-position":U,"background-repeat":U,"background-origin":U,"background-blend-mode":U,"box-shadow":p.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:p.union([p.string(),p.number()]).nullable().optional(),overflow:Fl.nullable().optional(),"overflow-x":Fl.nullable().optional(),"overflow-y":Fl.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()}),Ll=p.union([Il.keyof(),N.shape.property.refine(e=>e.startsWith(`--`))]),Rl=Il.catchall(U).refine(e=>Object.keys(e).every(e=>Ll.safeParse(e).success)),zl=p.record(p.string(),p.unknown()),Bl=p.number().int().positive(),Vl=p.discriminatedUnion(`kind`,[p.object({kind:p.literal(`retain`),count:Bl,attributes:zl.optional(),shouldPreserveParagraph:p.boolean().optional()}),p.object({kind:p.literal(`delete`),count:Bl}),p.object({kind:p.literal(`insert`),text:p.string().min(1).refine(e=>e.isWellFormed()),attributes:zl.optional(),shouldPreserveParagraph:p.boolean().optional()})]),Hl=p.object({baseLength:p.number().int().nonnegative(),representation:p.enum([`plain`,`rich`,`links`]).optional(),steps:p.array(Vl),endAttributes:zl.optional(),properties:zl.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`})}),Ul=p.object({actionId:p.string().min(1),baseVersion:p.number().int().nonnegative(),isActive:p.boolean()}),Wl=p.object({baseVersion:p.number().int().nonnegative(),after:p.array(p.string().min(1)),change:Hl}),Gl=p.object({actionId:p.string().min(1),baseVersion:p.number().int().nonnegative(),originalChange:Hl,inverse:Hl,history:Ul.optional(),source:Wl.optional()}),Kl=p.object({op:p.literal(`editText`),nodeId:p.string().min(1),change:Hl,actionId:p.string().min(1).optional(),revision:Gl.optional(),history:Ul.optional(),source:Wl.optional()}),ql=2e3,Jl=p.object({title:p.string().trim().min(1).max(200)}).strict(),Yl=p.array(tc.shape.id),Xl=p.object({canvasId:p.uuid()}),Zl=p.object({definition:tc.refine(e=>e.sourceStyleId===void 0),revision:p.number().int().positive(),fontFaces:p.array(p.record(p.string(),p.unknown()))}),Ql=p.object({styles:p.array(Zl).refine(e=>new Set(e.map(e=>e.definition.id)).size===e.length)});Xl.extend({revision:p.number().int().positive(),documentVersion:p.number().int().positive(),description:p.string().max(ql),publishedAt:p.iso.datetime(),...Ql.shape}),Xl.extend({mutationId:p.uuid(),expectedRevision:p.number().int().nonnegative(),documentVersion:p.number().int().positive(),publish:Yl,remove:Yl,description:p.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 $l=p.object({canvasId:p.uuid(),title:p.string().max(200)});p.object({search:p.string().trim().max(200).default(``),cursor:$l.nullable().default(null),limit:p.number().int().min(1).max(50).default(20)});const eu=p.object({canvasId:p.uuid(),title:p.string(),organisationId:p.uuid().nullable(),revision:p.number().int().positive(),styleCount:p.number().int().positive(),publishedAt:p.iso.datetime()});p.object({items:p.array(eu).max(50),nextCursor:$l.nullable()});const tu=p.object({parentId:p.string().min(1),sortKey:p.string().min(1)}),nu=p.object({op:p.literal(`insertConvertedSubtree`),destination:yl,sourceNodeId:p.string().min(1).optional(),rootNodeId:p.string().min(1),nodes:p.record(p.string().min(1),I),relationships:p.record(p.string().min(1),tu)}),W=p.string().min(1),ru=F.extend({width:p.number().positive(),height:p.number().positive()}),iu=p.object({parentId:W,afterId:W.optional()}),au=tu,ou=p.object({op:p.literal(`setStyles`),nodeId:W,styles:Rl,clear:p.array(Ll).min(1).refine(e=>new Set(e).size===e.length).optional()}).refine(e=>(e.clear??[]).every(t=>!Object.hasOwn(e.styles,t))),su=p.discriminatedUnion(`op`,[nu,p.object({op:p.literal(`insertNode`),node:I,parentage:au,prototypeSource:p.object({canvasId:p.uuid(),nodeId:W,documentVersion:p.number().int().nonnegative(),versionEntryId:p.uuid().optional()}).optional(),screenSource:p.object({canvasId:p.uuid()}).optional(),pageCopyBase:p.string().refine(e=>e.trim()!==``).optional()}),iu.extend({op:p.literal(`insertText`),nodeId:W,label:p.string().default(`Text`),text:p.string(),box:ru,styles:jl.default({})}),iu.extend({op:p.literal(`insertPrototype`),nodeId:W,label:p.string().default(`Prototype`),prototypeId:p.uuid(),deploymentId:p.uuid(),box:ru,canvasPageId:W.optional()}),p.object({op:p.literal(`setPrototypeDeployment`),nodeId:W,prototypeId:p.uuid(),deploymentId:p.uuid(),expected:p.object({prototypeId:p.uuid(),deploymentId:p.uuid()}).optional()}),Kl,p.object({op:p.literal(`setText`),nodeId:W,text:p.string()}),p.object({op:p.literal(`setBox`),nodeId:W,box:p.union([F,p.literal(`default`)])}),p.object({op:p.literal(`setLabel`),nodeId:W,label:p.string().trim().min(1),labelOrigin:Lc.nullable().optional()}),p.object({op:p.literal(`setContainerKind`),nodeId:W,component:p.enum([`frame`,`group`])}),p.object({op:p.literal(`setVisibility`),nodeId:W,visible:p.boolean().nullable()}),p.object({op:p.literal(`setLocked`),nodeId:W,locked:p.boolean().nullable()}),p.object({op:p.literal(`setConstraints`),nodeId:W,constraints:Ic.nullable()}),ou,p.object({op:p.literal(`patchExportSettings`),nodeId:W,exportSettings:Sc}),p.object({op:p.literal(`setAppearance`),nodeId:W,appearance:Bs}),p.object({op:p.literal(`setLayout`),nodeId:W,layout:p.union([Ts,p.literal(`default`)]),fields:p.array(Ts.keyof()).optional()}),p.object({op:p.literal(`patchTypography`),nodeId:W,typography:Ks}),p.object({op:p.literal(`setTypography`),nodeId:W,typography:p.union([Ws,p.literal(`default`)])}),p.object({op:p.literal(`patchAdditionalStyles`),nodeId:W,additionalStyles:Qs}),p.object({op:p.literal(`setAdditionalStyles`),nodeId:W,additionalStyles:p.union([Xs,p.literal(`default`)])}),ds,p.object({op:p.literal(`setTextStyleLibrary`),nodeId:p.literal(`root`),sourceCanvasId:p.uuid(),library:Jl.nullable()}),p.object({op:p.literal(`patchFontLibrary`),nodeId:p.literal(`root`),fonts:Tl}),p.object({op:p.literal(`setTextStyle`),nodeId:p.literal(`root`),styleId:tc.shape.id,textStyle:tc.nullable(),changedTextNodeIds:p.array(W).optional()}).refine(e=>e.textStyle===null||e.textStyle.id===e.styleId,`text style identity must match`),p.object({op:p.literal(`setGeometry`),nodeId:W,geometry:p.union([Mc,p.literal(`default`)])}),p.object({op:p.literal(`setProps`),nodeId:W,props:p.union([p.record(p.string(),p.unknown()),p.literal(`default`)])}),p.object({op:p.literal(`setParentage`),nodeId:W,parentage:au}),iu.extend({op:p.literal(`move`),nodeId:W}),p.object({op:p.literal(`remove`),nodeId:W,removedText:p.record(W,I.pick({props:!0})).optional()})]),cu=su.options.map(e=>e.shape.op.value),lu=p.preprocess((e,t)=>typeof e!=`object`||!e||Reflect.get(e,`op`)!==`setCompositing`?e:(t.issues.push({code:`custom`,message:Nc,input:e}),p.NEVER),su);Xc.extend({operation:nu,next:p.array(p.string().min(1))});const uu=p.record(p.string(),p.unknown());p.object({canvasId:p.uuid(),afterVersion:p.number().int().positive().optional()});const du=p.object({screenId:p.uuid(),clientToken:p.uuid(),route:p.string().nullable(),title:p.string().nullable(),viewport:p.object({width:p.number().int().positive(),height:p.number().int().positive()}),atMs:p.number().int().min(0).nullable(),sourceRecordingId:p.uuid().nullable(),assetBundle:p.object({assetBundleId:p.uuid(),sourceUrl:p.string(),assets:p.array(p.object({url:p.string(),contentType:p.string(),path:p.string().startsWith(`/v1/recording-assets/`)})),missingAssetCount:p.number().int().min(0)}).nullable(),download:rc.nullable()}),fu=p.object({mutationId:p.uuid(),previousVersion:p.number().int().positive(),version:p.number().int().positive(),operations:p.array(lu)});p.object({mutations:p.array(fu).optional(),version:p.number().int().min(1),restoreFenceVersion:p.number().int().positive().optional(),document:uu.optional(),screens:p.array(du)}).extend({document:uu}),p.object({canvasId:p.uuid(),baseVersion:p.number().int().min(1),document:uu.refine(e=>Rc.safeParse(e).success,`A save requires a valid current-format canvas document.`),screenIds:p.array(p.uuid())}),p.discriminatedUnion(`outcome`,[p.object({outcome:p.literal(`saved`),version:p.number().int().min(1)}),p.object({outcome:p.literal(`conflict`),version:p.number().int().min(1),document:uu})]);const pu=p.object({start:p.number().int().nonnegative(),end:p.number().int().positive(),href:p.url().refine(e=>[`http:`,`https:`].includes(new URL(e).protocol))});p.object({text:p.string(),links:p.array(pu).optional()});const mu=p.enum([`position`,`layout`,`clip`,`cornerRadius`,`blending`,`typography`,`nativeControl`,`textDecoration`,`fill`,`outline`,`textStroke`,`border`,`outerShadow`,`innerShadow`,`filters`,`additionalStyles`,`vector`,`export`,`source`]),hu=p.object({id:p.string().min(1),label:p.string().max(500),kind:p.string().min(1).max(100),parentId:p.string().min(1).nullable(),childCount:p.number().int().min(0),box:F.nullable(),propertySections:p.array(mu)});p.object({canvasId:p.uuid()}),p.object({canvasId:p.uuid(),openUrl:p.url(),title:p.string().min(1),version:p.number().int().positive(),nodeCount:p.number().int().min(0),rootChildCount:p.number().int().min(0),bounds:F.nullable(),kinds:p.record(p.string(),p.number().int().min(0)),next:p.array(p.string().min(1))}),p.object({canvasId:p.uuid()}),p.object({canvasId:p.uuid(),version:p.number().int().positive(),nodes:p.array(hu)}),p.object({canvasId:p.uuid(),nodeId:p.string().min(1)}),p.object({canvasId:p.uuid(),version:p.number().int().positive(),node:hu.extend({styles:p.record(p.string(),p.union([p.string(),p.number()])),layout:Ts.optional(),appearance:Ls.optional(),geometry:Mc.optional(),typography:Ws.optional(),additionalStyles:Xs.optional(),props:p.record(p.string(),p.unknown()),children:p.array(p.string().min(1))}),next:p.array(p.string().min(1))});const gu=I.shape.id,_u=F.extend({width:p.number().positive(),height:p.number().positive()}),vu=p.record(gu,gu),yu=p.strictObject({fingerprint:p.string().regex(/^[a-f0-9]{64}$/u),revisionPolicy:p.enum([`strict`,`rebase`]),copiedNodeIds:vu.optional()});p.object({canvasId:p.uuid(),mutationId:p.uuid(),documentFormatVersion:Pc,baseVersion:p.number().int().positive(),operations:p.array(lu).min(1),requestContext:yu.optional(),writeScope:vl.optional()});const bu=p.object({canvasId:p.uuid(),mutationId:p.uuid(),previousVersion:p.number().int().positive(),version:p.number().int().positive(),operations:p.array(lu),insertedNodeIds:p.array(gu),changedNodeIds:p.array(gu),removedNodeIds:p.array(gu),boxes:p.record(gu,F),affectedBounds:_u.nullable(),copiedNodeIds:vu.optional(),next:p.array(p.string().min(1))});p.strictObject({canvasId:p.uuid(),mutationId:p.uuid(),fingerprint:yu.shape.fingerprint}),p.discriminatedUnion(`state`,[p.strictObject({state:p.literal(`not-found`)}),p.strictObject({state:p.literal(`committed`),result:bu})]);const xu={nodes:1e3,fields:20,id:200,label:500,value:1e3},Su=p.object({available:p.boolean(),omittedNodes:p.number().int().nonnegative(),nodes:p.array(p.object({nodeId:p.string().min(1),label:p.string().max(xu.label),kind:p.enum([`inserted`,`removed`,`changed`,`unchanged`,`unavailable`]),omittedFields:p.number().int().nonnegative(),fields:p.array(p.object({label:p.string().max(xu.id),before:p.string().max(xu.value).nullable(),after:p.string().max(xu.value).nullable(),truncated:p.boolean()})).max(xu.fields)})).max(xu.nodes)}),Cu=[`position`,`layout`,`cornerRadius`,`blending`,`fill`,`outline`,`border`,`outerShadow`,`innerShadow`,`filters`,`additionalStyles`,`export`],wu=[`position`,`layout`,`clip`,...Cu.filter(e=>e!==`position`&&e!==`layout`)],Tu=[...Cu,`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:wu},{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:Cu},{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:Cu},{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:Tu},{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:Tu},{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,Eu=p.array(G).min(1),Du=p.strictObject({x:p.number(),y:p.number()}),Ou=p.strictObject({width:p.number().positive().optional(),height:p.number().positive().optional()}).refine(e=>e.width!==void 0||e.height!==void 0,{message:`Specify width, height, or both.`}),ku=p.discriminatedUnion(`kind`,[p.strictObject({kind:p.literal(`position`),nodeId:G,parentPosition:Du}),p.strictObject({kind:p.literal(`resize`),nodeId:G,size:Ou}),p.strictObject({kind:p.literal(`relative-position`),nodeId:G,referenceNodeId:G,side:p.enum([`above`,`below`,`left`,`right`]),gap:p.number().nonnegative(),align:p.enum([`start`,`center`,`end`])}),p.strictObject({kind:p.literal(`move`),nodeIds:Eu,targetNodeId:G,position:p.enum([`before`,`inside`,`after`])}),p.strictObject({kind:p.literal(`group`),nodeIds:Eu,label:p.string().min(1).optional()}),p.strictObject({kind:p.literal(`ungroup`),nodeIds:Eu}),p.strictObject({kind:p.literal(`label`),nodeId:G,label:p.string().min(1)}),p.strictObject({kind:p.literal(`visibility`),nodeId:G,visible:p.boolean()}),p.strictObject({kind:p.literal(`lock`),nodeId:G,locked:p.boolean()})]),Au=p.strictObject({kind:p.literal(`arrange`),changes:p.array(ku).min(1)}),ju=p.strictObject({kind:p.literal(`duplicate`),nodeIds:Eu,destination:p.discriminatedUnion(`kind`,[p.strictObject({kind:p.literal(`native`)}),p.strictObject({kind:p.literal(`inside`),parentId:G})])}),Mu=p.discriminatedUnion(`kind`,[p.strictObject({kind:p.literal(`compile-screens`),sources:p.array(p.strictObject({screenId:p.uuid(),captureId:p.uuid(),label:p.string().min(1)})).min(1),landing:p.literal(`editable-frame`).optional().describe(`Lands the page as an ordinary editable frame. Without it, the layers belong to a capture run.`)}),Au,ju,p.strictObject({kind:p.literal(`compile-html`),contextOperations:p.array(lu).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:p.array(p.strictObject({id:G,parentNodeId:G,html:p.string().min(1)})).min(1).refine(e=>new Set(e.map(e=>e.id)).size===e.length,`HTML fragment ids must be unique.`)})]),Nu=p.strictObject({pageId:G.optional(),nodeIds:p.array(G)}),Pu=p.strictObject({request:Mu,scope:Nu}),Fu=p.strictObject({operations:p.array(lu),idMap:p.record(G,G),rootNodeIds:p.array(G)}),Iu=Fu.extend({compilations:p.array(p.strictObject({id:G,draft:qc,warnings:p.array(dl).optional()})).optional()});p.discriminatedUnion(`state`,[p.object({state:p.literal(`loading`),jobId:p.uuid()}),p.object({state:p.literal(`ready`),jobId:p.uuid(),loadedVersion:p.number().int().positive(),plan:Iu}),p.object({state:p.literal(`failed`),jobId:p.uuid(),message:p.string().min(1),reason:p.enum([`SOURCE_FAILED`,`PREPARATION_FAILED`]).optional(),retryable:p.boolean().optional()})]);const Lu=p.object({id:p.uuid(),canvasId:p.uuid(),requestedVersion:p.number().int().positive(),request:Mu,scope:Nu,phase:cl,attempt:p.number().int().nonnegative(),createdAt:p.iso.datetime(),updatedAt:p.iso.datetime()}),Ru=p.discriminatedUnion(`state`,[Lu.extend({state:p.enum([`queued`,`running`]),result:p.null(),failure:p.null()}),Lu.extend({state:p.literal(`succeeded`),phase:p.literal(`complete`),result:Fu.extend({loadedVersion:p.number().int().positive()}),failure:p.null()}),Lu.extend({state:p.enum([`failed`,`cancelled`,`expired`]),result:p.null(),failure:L})]);p.strictObject({canvasId:p.uuid(),expectedVersion:p.number().int().positive(),request:Mu,scope:Nu}),p.object({job:Ru,alreadyExists:p.boolean()}),p.object({jobId:p.uuid()}),p.object({job:Ru});const zu=p.string().trim().min(1).max(80).regex(/^[\w .+/-]+$/u),Bu=p.strictObject({path:p.enum([`local_mcp`,`hosted_mcp`,`direct_cli`]),name:zu.optional(),version:zu.optional()});Bu.pick({path:!0}).strip();const Vu=p.strictObject({agent_client:p.enum([`claude_code`,`codex`,`cursor`,`unknown`]),connection_path:Bu.shape.path,identity_source:p.enum([`mcp_client_info`,`documented_cli_fallback`,`unavailable`]),auth_method:p.enum([`personal_agent_token`,`mcp_oauth`]),agent_client_version:zu.optional()}),Hu=p.enum([`green`,`blue`,`indigo`,`amber`,`lime`,`teal`,`cyan`,`sky`,`violet`,`purple`,`fuchsia`,`pink`]),Uu=p.string().regex(/^[0-9a-f]{32}$/),Wu=p.object({viewKey:Uu.optional(),admissionOrder:p.number().int().nonnegative().optional(),followColour:Hu.optional()}),Gu=p.object({pageId:p.string().min(1).nullable().optional(),followingViewKey:Uu.nullable().optional()}),Ku=`enhance3.canvas.v1`,qu=16384,Ju=p.enum([`blue`,`violet`,`green`,`amber`,`magenta`,`teal`,`red`,`orange`]),Yu=p.object({kind:p.literal(`person`),connectionId:p.uuid(),personId:p.uuid(),displayName:p.string().min(1).max(100),initials:p.string().min(1).max(8),avatarUrl:p.string().max(Ro).nullable().optional(),colour:Ju}),Xu=Yu.extend(Wu.shape),Zu=p.object({kind:p.literal(`guest`),connectionId:p.uuid(),displayName:p.string().min(1).max(100),initials:p.string().min(1).max(8),colour:Ju,...Wu.shape}),Qu=p.discriminatedUnion(`kind`,[Xu,Zu]),$u=p.object({kind:p.literal(`agent`),personId:p.uuid(),displayName:p.string().min(1).max(100),initials:p.string().min(1).max(8),tokenLabel:p.string().min(1).max(100),agentAttribution:Vu.optional(),colour:Ju}),ed=p.discriminatedUnion(`kind`,[Yu.omit({connectionId:!0,avatarUrl:!0}),$u]),td=p.object({x:p.number(),y:p.number()}),nd=F.extend({width:p.number().positive(),height:p.number().positive()}),rd=p.object({count:p.number().int().positive(),bounds:nd.nullable()}),id=p.object({kind:p.enum([`drag`,`resize`]),baseVersion:p.number().int().positive(),boxes:p.record(p.string().min(1),nd).refine(e=>Object.keys(e).length<=100&&new TextEncoder().encode(JSON.stringify(e)).byteLength<=16384),summary:rd.optional()}),ad=p.object({cursor:td.nullable().optional(),input:p.enum([`pointer`,`touch`,`keyboard`]).optional(),focused:p.boolean().optional(),selectedNodeIds:p.array(p.string().min(1)).max(100).refine(e=>new TextEncoder().encode(JSON.stringify(e)).byteLength<=qu).optional(),selectionSummary:rd.nullable().optional(),visibleWorldBox:nd.optional(),gesture:id.nullable().optional(),cursorChat:p.string().max(140).nullable().optional(),...Gu.shape}).refine(e=>Object.keys(e).length>0,`presence patch cannot be empty`),od=p.object({actor:Qu,seq:p.number().int().nonnegative(),cursor:td.nullable(),input:p.enum([`pointer`,`touch`,`keyboard`]),focused:p.boolean(),selectedNodeIds:p.array(p.string().min(1)).max(100).refine(e=>new TextEncoder().encode(JSON.stringify(e)).byteLength<=qu),selectionSummary:rd.nullable().optional(),visibleWorldBox:nd.nullable(),gesture:id.nullable(),cursorChat:p.string().max(140).nullable().default(null),...Gu.shape,followOrder:p.number().int().nonnegative().optional(),expiresAt:p.iso.datetime()}),sd=p.enum([`reading`,`writing`,`creating`,`deleting`,`rendering`]),cd=p.object({activityId:p.uuid(),canvasId:p.uuid(),actor:$u,phase:sd,nodeIds:p.array(p.string().min(1)).max(100),bounds:nd.nullable(),expiresAt:p.iso.datetime()}),ld=p.object({canvasId:p.uuid(),phase:sd,nodeIds:p.array(p.string().min(1)).max(100).default([]),bounds:nd.nullable().default(null)});p.object({activityId:p.uuid(),expiresAt:p.iso.datetime(),renewAfterMs:p.number().int().positive()}),ld.extend({activityId:p.uuid()}),p.object({canvasId:p.uuid(),activityId:p.uuid()}),p.object({ended:p.literal(!0)});const K={v:p.literal(1),seq:p.number().int().nonnegative()};p.discriminatedUnion(`type`,[p.object({...K,type:p.literal(`access.changed`),payload:p.object({})}),p.object({...K,type:p.literal(`comments.changed`),payload:p.object({threadId:p.uuid()})}),p.object({...K,type:p.literal(`resources.changed`),payload:p.object({})}),p.object({...K,type:p.literal(`room.snapshot`),payload:p.object({connectionId:p.uuid(),viewKey:Wu.shape.viewKey,peers:p.array(od),activities:p.array(cd),documentVersion:p.number().int().positive()})}),p.object({...K,type:p.literal(`presence.patch`),payload:od}),p.object({...K,type:p.literal(`presence.left`),payload:p.object({connectionId:p.uuid()})}),p.object({...K,type:p.literal(`agent.activity`),payload:p.object({activityId:p.uuid(),activity:cd.nullable()})}),p.object({...K,type:p.literal(`document.committed`),payload:p.object({mutationId:p.uuid(),actor:ed,previousVersion:p.number().int().positive(),version:p.number().int().positive(),operations:p.array(lu).min(1)})}),p.object({...K,type:p.literal(`sync.required`),payload:p.object({version:p.number().int().positive(),reason:p.enum([`gap`,`relay`,`replace`,`history-restored`])})}),p.object({...K,type:p.literal(`room.ping`),payload:p.object({pingId:p.uuid(),sentAt:p.iso.datetime()})}),p.object({...K,type:p.literal(`room.error`),payload:p.object({code:p.enum([`auth`,`permission`,`protocol`,`payload`,`rate`,`unavailable`]),message:p.string().min(1).max(200)})})]),p.discriminatedUnion(`type`,[p.object({v:p.literal(1),type:p.literal(`presence.patch`),seq:p.number().int().nonnegative(),payload:ad}),p.object({v:p.literal(1),type:p.literal(`selection.chunk`),seq:p.number().int().nonnegative(),payload:p.object({transferId:p.uuid(),offset:p.number().int().nonnegative(),total:p.number().int().positive(),nodeIds:p.array(p.string().min(1)).min(1).max(1e3)})}),p.object({v:p.literal(1),type:p.literal(`selection.unavailable`),seq:p.number().int().nonnegative(),payload:p.object({count:p.number().int().positive()})}),p.object({v:p.literal(1),type:p.literal(`room.pong`),seq:p.number().int().nonnegative(),payload:p.object({pingId:p.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),p.object({canvasId:p.uuid(),protocols:p.array(p.literal(Ku)).min(1).max(1),viewId:p.uuid().optional()}),p.object({endpoint:p.url(),ticket:p.string().min(1).max(4096),protocol:p.literal(Ku),expiresAt:p.iso.datetime()}),p.uuid();const ud=I.shape.id;p.array(ud),p.object({jobId:p.uuid()});const dd=p.object({jobId:p.uuid(),canvasId:p.uuid(),requestedVersion:p.number().int().positive(),target:rl,sourceState:il.optional()});p.discriminatedUnion(`purpose`,[dd.extend({purpose:p.literal(`preparation`),preparation:Pu,screens:p.array(du).optional(),attempts:p.strictObject({counted:p.number().int().nonnegative(),limit:p.number().int().positive()}).optional(),deadlineAt:p.iso.datetime().optional(),sourceState:p.undefined().optional(),scale:p.literal(1),format:p.literal(`json`)}),dd.extend({purpose:p.enum([`inspection`,`snapshot`,`thumbnail`,`export`]),scale:p.number().positive(),maxOutputPixels:tl.optional(),format:p.literal(`png`)}),dd.extend({purpose:p.literal(`conversion`),target:p.object({kind:p.literal(`node`),nodeId:p.string().min(1)}),sourceState:p.undefined().optional(),conversion:xl,scale:p.literal(1),format:p.literal(`json`)})]),p.object({jobId:p.uuid()}),p.object({jobId:p.uuid()});const fd=p.object({jobId:p.uuid(),canvasId:p.uuid(),requestedVersion:p.number().int().positive(),grantToken:p.string().startsWith(`rgr_`).min(40).max(100),grantCookieName:p.string().min(1).max(100),renderUrl:p.url(),deadlineAt:p.iso.datetime().optional(),releaseIdentity:p.string().min(1).max(100)});p.discriminatedUnion(`purpose`,[fd.extend({purpose:p.literal(`preparation`),target:rl,preparation:Pu,sourceState:p.undefined().optional(),scale:p.literal(1)}),fd.extend({purpose:p.enum([`inspection`,`snapshot`,`thumbnail`,`export`]),target:rl,sourceState:il.optional(),scale:p.number().positive(),maxOutputPixels:tl.optional(),outputKey:p.string().min(1).max(500)}),fd.extend({purpose:p.literal(`conversion`),target:p.object({kind:p.literal(`node`),nodeId:p.string().min(1).max(200)}),sourceState:p.undefined().optional(),conversion:xl,scale:p.literal(1)})]),p.object({jobId:p.uuid(),loadedVersion:p.number().int().positive(),bounds:nl,width:p.number().int().positive(),height:p.number().int().positive(),scale:p.number().positive(),bytes:p.number().int().positive(),storageKey:p.string().min(1).max(500),warnings:p.array(dl),timings:p.array(fl),sourceState:al.optional(),snapshot:p.object({artifactBytes:p.number().int().positive(),artifactStorageKey:p.string().min(1).max(500),route:p.string().optional(),title:p.string().optional(),viewport:p.object({width:p.number().int().positive(),height:p.number().int().positive()})}).optional()}),p.object({accepted:p.literal(!0)}),p.object({jobId:p.uuid(),loadedVersion:p.number().int().positive(),draft:qc}),p.object({accepted:p.literal(!0)}),p.object({recordingId:p.uuid(),requestedAtMs:p.number().int().nonnegative(),settledAtMs:p.number().int().nonnegative(),artifact:p.string().min(1),route:p.string().optional(),title:p.string().optional(),viewport:p.object({width:p.number().int().positive(),height:p.number().int().positive()})}),p.object({jobId:p.uuid(),failure:L}),p.object({accepted:p.literal(!0),willRetry:p.boolean()}),p.object({workerId:p.string().regex(/^[\w.-]+$/u).min(1).max(100),releaseIdentity:p.string().min(1).max(100),timestamp:p.coerce.number().int().nonnegative(),nonce:p.uuid(),mac:p.base64().min(32).max(200)});const pd=p.object({total:p.number().int().nonnegative(),loading:p.number().int().nonnegative(),unavailable:p.number().int().nonnegative()}),md=p.object({jobId:p.uuid(),canvasId:p.uuid().nullable(),requestedVersion:p.number().int().positive().nullable(),loadedVersion:p.number().int().positive().nullable(),phase:cl.exclude([`queued`,`claimed`,`capture`,`upload`,`complete`]),sources:pd,warnings:p.array(dl),timings:p.array(fl),sourceState:al.optional()}),hd=p.object({selector:p.string().min(1).max(500),contentSelector:p.string().min(1).max(500).optional(),expectsPaint:p.boolean().optional(),bounds:nl,width:p.number().int().positive(),height:p.number().int().positive(),scale:p.number().positive()});p.discriminatedUnion(`state`,[md.extend({state:p.literal(`loading`),capture:p.null(),failure:p.null()}),md.extend({state:p.literal(`ready`),phase:p.literal(`target`),canvasId:p.uuid(),requestedVersion:p.number().int().positive(),loadedVersion:p.number().int().positive(),capture:hd,failure:p.null()}),md.extend({state:p.literal(`failed`),failure:p.object({reason:ll,message:p.string().min(1).max(500),sourceId:p.string().min(1).max(200).nullable(),overtaken:p.boolean().optional()}),capture:p.null()})]),p.object({jobId:p.uuid(),loadedVersion:p.number().int().positive(),plan:Iu});const gd=p.string().min(1);p.object({canvasId:p.uuid()}),p.object({canvasId:p.uuid(),status:p.enum([`selected`,`none`,`offline`,`stale`,`updating`,`unsupported`]),documentVersion:p.number().int().positive(),selectionRevision:p.number().int().positive().nullable(),selectionChangedAt:p.iso.datetime().nullable(),selectedNodeIds:p.array(gd),missingNodeIds:p.array(gd),nodes:p.array(hu),contextRootId:gd.nullable(),visibleWorldBox:nl.nullable(),next:p.array(p.string().min(1)).max(12)});const _d=p.discriminatedUnion(`kind`,[p.object({kind:p.literal(`recording`),recordingId:p.string()})]);p.object({html:p.string().optional(),viewport:p.object({width:p.number(),height:p.number()}),atMs:p.number(),screenId:p.string().nullable().default(null),sourceNodeId:p.string().optional(),provenance:_d.optional()}),p.object({provenance:_d.optional(),report:Wc.optional()}),p.object({recordingId:p.string()}),p.object({prototypeId:p.uuid(),deploymentId:p.uuid()}),p.object({preparedExperience:p.enum([`agent-connection`,`whisper-prototype`]),ownerPersonId:p.uuid(),resources:p.array(p.string().min(1))});const vd=new Set(ec);new Set(Object.entries(qs).flatMap(([e,t])=>t.some(e=>vd.has(e))?[e.replaceAll(/-([a-z])/gu,(e,t)=>t.toUpperCase())]:[]));const yd=new Set(ec);new Set(Object.entries(qs).flatMap(([e,t])=>t.some(e=>yd.has(e))?[e]:[]));const bd=1e3,xd=p.discriminatedUnion(`kind`,[p.object({kind:p.literal(`person`),personId:p.uuid(),displayName:p.string().min(1).max(200),initials:p.string().min(1).max(2)}),p.object({kind:p.literal(`agent`),personId:p.uuid(),displayName:p.string().min(1).max(200),initials:p.string().min(1).max(2),tokenLabel:p.string().min(1).max(200)})]),Sd=p.object({id:p.uuid(),canvasId:p.uuid(),documentVersion:p.number().int().positive(),origin:p.enum([`automatic`,`manual`,`restore`]),restoreRole:p.enum([`before`,`result`]).nullable(),retention:p.enum([`automatic`,`named`,`restore-boundary`]),title:p.string().min(1).nullable(),description:p.string().max(bd).nullable(),actor:xd,sourceVersionEntryId:p.uuid().nullable(),expiresAt:p.iso.datetime().nullable(),checkpointAt:p.iso.datetime(),createdAt:p.iso.datetime(),updatedAt:p.iso.datetime(),screenCount:p.number().int().min(0)});p.object({canvasId:p.uuid(),limit:p.number().int().min(1).max(100).default(50),cursor:p.string().min(1).max(1e3).optional(),includeAutomatic:p.boolean().default(!1),actor:p.enum([`all`,`mine`]).default(`all`)}),p.object({current:p.object({documentVersion:p.number().int().positive(),updatedAt:p.iso.datetime()}),items:p.array(Sd),nextCursor:p.string().min(1).nullable(),hasExpiredHistory:p.boolean()}),p.object({canvasId:p.uuid(),versionId:p.uuid()});const Cd=p.object({outcome:p.literal(`ready`),entry:Sd,document:uu,screens:p.array(du)}),wd=p.object({outcome:p.literal(`missing-resources`),entry:Sd,document:uu,screens:p.array(du),missingScreenIds:p.array(p.uuid()).min(1)});p.discriminatedUnion(`outcome`,[Cd,wd,p.object({outcome:p.literal(`corrupt`),entry:Sd})]);const Td=p.discriminatedUnion(`kind`,[p.object({kind:p.literal(`current`),expectedVersion:p.number().int().positive()}),p.object({kind:p.literal(`version`),versionId:p.uuid()})]);p.object({canvasId:p.uuid(),target:Td,title:p.string().trim().min(1),description:p.string().trim().max(bd).nullable().default(null)}),p.object({canvasId:p.uuid(),versionId:p.uuid(),title:p.string().trim().min(1),description:p.string().trim().max(bd).nullable().default(null)}),p.object({canvasId:p.uuid(),versionId:p.uuid()}),p.object({entry:Sd}),p.object({canvasId:p.uuid(),documentFormatVersion:Pc,versionId:p.uuid(),expectedVersion:p.number().int().positive()}),p.object({canvasId:p.uuid(),version:p.number().int().positive(),beforeVersionId:p.uuid(),restoredVersionId:p.uuid(),restoreFenceVersion:p.number().int().positive()}),p.object({canvasId:p.uuid(),documentFormatVersion:Pc,versionId:p.uuid(),organisationId:p.union([p.uuid(),p.literal(`personal`)]),title:p.string().trim().min(1).optional()}),p.object({canvasId:p.uuid(),title:p.string().min(1),version:p.literal(1)}),p.object({canvasId:p.uuid(),sourceCanvasId:p.uuid(),recordingIds:p.array(p.uuid()).min(1)}),p.object({copies:p.array(p.object({sourceRecordingId:p.uuid(),recordingId:p.uuid()}))});const Ed=(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))},Dd=p.string().regex(/^[a-f0-9]{64}$/u),Od=p.string().trim().min(1),kd=p.object({organisationId:p.uuid().nullable()}),Ad=p.object({family:p.string().regex(/^uploaded-font-[a-f0-9]{64}(?:-[a-f0-9]{12})?$/u),familyName:Od,subfamilyName:Od,version:Od,weight:p.string().regex(/^\d+(?:\.\d+)?(?: \d+(?:\.\d+)?)?$/u).refine(e=>Ed(e,1,1e3)),style:p.enum([`normal`,`italic`,`oblique`]),stretch:p.union([p.enum([`normal`,`ultra-condensed`,`extra-condensed`,`condensed`,`semi-condensed`,`semi-expanded`,`expanded`,`extra-expanded`,`ultra-expanded`]),p.string().regex(/^\d+(?:\.\d+)?%(?: \d+(?:\.\d+)?%)?$/u).refine(e=>Ed(e,0))]),format:p.enum([`truetype`,`opentype`,`woff`,`woff2`])}),jd=p.object({kind:p.enum([`personal`,`team`]),ownerId:p.uuid(),sha256:Dd}),Md=kd.extend({sha256:Dd,bytes:p.number().int().positive(),contentType:p.enum(uc)});p.object({upload:P}),Md.extend({metadata:Ad,hasSharingRights:p.literal(!0)});const Nd=jd.extend({bytes:p.number().int().positive(),metadata:Ad,createdAt:p.iso.datetime(),path:p.string().startsWith(`/v1/font-catalog/`)});p.object({entries:p.array(Nd),canManage:p.boolean()}),kd.extend({sha256:Dd}),kd.extend({canvasId:p.uuid(),sha256:p.array(Dd).min(1)}),p.object({resources:p.array(p.object({entry:Nd,path:p.string().startsWith(`/v1/canvas-assets/`)}))});const Pd=p.object({inviteId:p.uuid(),email:p.string().max(254),accessLevel:Uo,sendCount:p.number().int().min(1),lastSentAt:p.iso.datetime(),expiresAt:p.iso.datetime(),state:p.enum([`pending`,`expired`]),deliveryState:p.enum([`queued`,`accepted`,`failed`]),deliveryError:p.string()});p.object({canvasTitle:p.string().min(1),invitedBy:p.string().min(1),email:p.string().max(254).pipe(p.email()),accessLevel:Uo,expiresAt:p.iso.datetime(),state:p.enum([`pending`,`accepted`]),hasAccount:p.boolean()}),p.object({canvasId:p.uuid(),email:p.string().max(254).transform(e=>e.trim().toLowerCase()).pipe(p.email()),accessLevel:Uo}),p.object({invite:Pd,acceptToken:p.string().max(512).optional()}),p.object({canvasId:p.uuid()}),Lo(Pd),p.object({canvasId:p.uuid(),inviteId:p.uuid()}),p.object({canvasId:p.uuid(),inviteId:p.uuid()});const Fd=p.string().min(1).max(512);p.object({token:Fd}),p.object({token:Fd}),p.object({canvasId:p.uuid(),accessLevel:Ho});const Id=p.object({personId:p.uuid().nullable(),email:p.string().max(254).nullable(),displayName:p.string().max(120).nullable(),initials:p.string().max(4).nullable(),avatarUrl:p.string().max(Ro).nullable(),accessLevel:Ho,isPending:p.boolean(),reviewState:p.enum([`not-started`,`in-progress`,`done`]).nullable(),lastViewedAt:p.iso.datetime().nullable()});p.object({canvasId:p.uuid()}),Lo(Id),p.object({canvasId:p.uuid(),personId:p.uuid(),accessLevel:Uo}),p.object({canvasId:p.uuid(),personId:p.uuid()}),p.object({personId:p.uuid(),revoked:p.boolean()});const Ld=p.object({canvasId:p.uuid(),reviewState:p.enum([`not-started`,`in-progress`,`done`])});p.object({reviewState:Ld.shape.reviewState.nullable()});const Rd=Io.extend({cursor:p.string().max(2048).nullable().default(null)}),zd=p.object({selector:p.string().min(1),tagName:p.string().min(1),label:p.string().nullable(),source:p.object({file:p.string().min(1),line:p.number().int().min(0).nullable()}).nullable()}),Bd=p.object({x:p.number(),y:p.number()}),Vd=p.object({x:p.number().min(0).max(1),y:p.number().min(0).max(1)}),Hd=p.object({x:p.number().min(0).max(1),y:p.number().min(0).max(1),width:p.number().min(0).max(1),height:p.number().min(0).max(1)}),Ud=zd.extend({role:p.string().min(1).optional()}),Wd=p.object({path:p.array(p.number().int().min(0)),offset:p.number().int().min(0)}),Gd=p.object({version:p.literal(1),kind:p.literal(`element`),locator:Ud,attachment:Vd,fallbackBounds:Hd}),Kd=p.object({version:p.literal(1),kind:p.literal(`text`),root:Ud,quote:p.object({exact:p.string().min(1),prefix:p.string(),suffix:p.string()}),range:p.object({start:Wd,end:Wd}),attachment:Vd,fallbackBounds:Hd}),qd=p.object({version:p.literal(1),kind:p.literal(`elements`),members:p.array(Ud).min(2),truncated:p.boolean(),attachment:Vd,fallbackBounds:Hd}),Jd=p.object({version:p.literal(1),kind:p.literal(`area`),bounds:Hd,attachment:Vd}),Yd=p.discriminatedUnion(`kind`,[Gd,Kd,qd,Jd]),Xd=p.discriminatedUnion(`on`,[p.object({on:p.literal(`canvas`),point:Bd,pageId:p.string().min(1).max(256).optional()}),p.object({on:p.literal(`node`),nodeId:p.string().min(1),point:Bd,element:p.null()}),p.object({on:p.literal(`screen`),nodeId:p.string().min(1),screenId:p.uuid(),point:Bd,element:zd.nullable(),target:Yd.optional()})]),Zd=p.object({kind:p.enum([`person`,`agent`]),personId:p.uuid(),name:p.string().min(1).max(120),initials:p.string().min(1).max(4),avatarUrl:p.string().max(Ro).nullable(),tokenLabel:p.string().max(120).nullable()}),Qd=p.object({personId:p.uuid(),name:p.string().min(1).max(120)}),$d=p.object({emoji:p.string().min(1).max(16),people:p.array(Qd).min(1)}),ef=p.object({messageId:p.uuid(),seq:p.number().int().min(1),body:p.string().min(1),isDeleted:p.boolean(),author:Zd,createdAt:p.iso.datetime(),editedAt:p.iso.datetime().nullable(),mentions:p.array(Qd),reactions:p.array($d)}),tf=p.object({kind:p.enum([`person`,`agent`]),personId:p.uuid(),name:p.string().min(1).max(120),tokenLabel:p.string().max(120).nullable()}),nf=p.object({revision:p.number().int().positive(),threadId:p.uuid(),canvasId:p.uuid(),anchor:Xd,author:Zd,messages:p.array(ef).min(1).max(50),messageCount:p.number().int().min(1),hasMoreMessages:p.boolean(),isResolved:p.boolean(),resolvedAt:p.iso.datetime().nullable(),resolvedBy:tf.nullable(),createdAt:p.iso.datetime(),lastMessageAt:p.iso.datetime()}),rf=p.strictObject({canvasRef:p.string().min(1),expectedVersion:p.number().int().positive()}),af=rf.extend({coordinateSpace:p.enum([`canvas-world`,`node-normalized`,`screen-normalized`])});p.object({context:rf.optional(),page:Rd.optional(),canvasId:p.uuid(),filter:p.enum([`open`,`resolved`,`all`]).default(`open`),authorPersonId:p.uuid().optional(),agentActionable:p.boolean().default(!1),query:p.string().trim().max(200).optional()}),Lo(nf).extend({nextCursor:p.string().nullable().optional()}),Rd.extend({context:rf.optional(),canvasId:p.uuid(),threadId:p.uuid(),expectedRevision:p.number().int().positive().optional()}),p.object({thread:nf.omit({messages:!0,hasMoreMessages:!0}),messages:p.array(ef).max(100),nextCursor:p.string().nullable()}),p.object({context:af.optional(),canvasId:p.uuid(),clientThreadId:p.uuid(),anchor:Xd,body:p.string().trim().min(1),mentionedPersonIds:p.array(p.uuid()).default([])}),p.object({context:rf.optional(),canvasId:p.uuid(),threadId:p.uuid(),clientMessageId:p.uuid(),body:p.string().trim().min(1),mentionedPersonIds:p.array(p.uuid()).default([])}),nf.extend({postedMessage:ef}),p.object({canvasId:p.uuid(),threadId:p.uuid(),messageId:p.uuid(),body:p.string().trim().min(1),mentionedPersonIds:p.array(p.uuid()).default([])}),p.object({canvasId:p.uuid(),threadId:p.uuid(),messageId:p.uuid(),emoji:p.string().trim().min(1).max(16),reacted:p.boolean()}),p.object({canvasId:p.uuid(),threadId:p.uuid(),anchor:Xd}),p.object({context:rf.optional(),expectedRevision:p.number().int().positive().optional(),canvasId:p.uuid(),threadId:p.uuid(),resolved:p.boolean()}),p.object({canvasId:p.uuid(),threadId:p.uuid(),messageId:p.uuid().optional()}),p.object({deletedThreadIds:p.array(p.uuid()),deletedMessageIds:p.array(p.uuid())});const q={shortText:200,name:100,label:500,page:50,cursor:64,questionOptions:3},J=p.uuid(),of=p.string().min(1),sf=p.object({id:J,name:p.string().trim().min(1).max(q.name),content:p.string().trim().min(1),version:p.string().min(1).max(q.name)}),cf=p.object({canvasId:J,nodeId:of,label:p.string(),role:p.enum([`target`,`reference`])}),lf=p.discriminatedUnion(`type`,[p.object({type:p.literal(`text`),text:p.string()}),cf.extend({type:p.literal(`object`)})]),uf=p.object({revision:p.number().int().nonnegative(),text:p.string(),task:p.enum([`chat`,`rewrite`,`shorten`,`translate`,`replace`,`rename`]).default(`chat`),references:p.array(cf),contentVersion:p.literal(1).default(1),parts:p.array(lf).optional(),attachmentIds:p.array(J),model:p.enum([`default`,`sonnet`,`opus`,`haiku`]).default(`default`),effort:p.enum([`default`,`low`,`medium`,`high`]).default(`default`),instructions:p.array(p.object({name:p.string().max(q.name),content:p.string(),version:p.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}}),df=p.object({state:p.enum([`checking`,`not-installed`,`unsupported`,`signed-out`,`signing-in`,`connected`,`usage-limited`,`auth-expired`,`unavailable`]),version:p.string().nullable(),account:p.string().nullable(),issue:p.string().nullable()}),ff=p.object({canvasId:J,mutationId:J,previousVersion:p.number().int().positive(),version:p.number().int().positive(),nodeIds:p.array(of),reverted:p.boolean().default(!1),review:Su.optional()}),pf=p.object({prompt:p.string().trim().min(1),options:p.array(p.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:p.string().min(1).max(q.name),state:p.enum([`pending`,`answered`,`cancelled`]),answer:p.string().nullable()}),mf=p.object({jobId:J,version:p.number().int().positive(),target:rl,state:p.enum([`rendered`,`checked`,`needs-review`]),summary:p.string().max(q.label)}),hf=p.object({parts:p.array(lf).optional(),id:p.string().min(1).max(q.shortText),role:p.enum([`user`,`assistant`,`tool`]),text:p.string(),tool:p.string().nullable().default(null),outcome:p.enum([`running`,`completed`,`denied`,`failed`]).nullable().default(null)}),gf=p.object({id:p.string().min(1).max(q.shortText),tool:p.string().max(q.shortText),digest:p.string().max(q.name),input:p.record(p.string(),p.unknown())}),_f=p.object({mutationId:J,canvasId:J,procedure:p.enum([`canvas.applyOperations`,`canvas.render.importSource`]),input:p.record(p.string(),p.unknown()),state:p.enum([`recorded`,`accepted`,`unknown`,`refused`])}),vf=p.object({id:J,name:p.string().max(q.shortText),mediaType:p.enum([`image/png`,`image/jpeg`,`image/webp`]),width:p.number().int().positive(),height:p.number().int().positive(),bytes:p.number().int().positive(),preview:p.string().regex(/^data:image\/(?:png|jpeg|webp);base64,[A-Za-z0-9+/=]+$/u)}),yf=p.object({id:J,state:p.enum([`preparing`,`starting`,`running`,`waiting`,`stopping`,`reconciling`,`completed`,`stopped`,`failed`,`interrupted`,`needs-review`]),submittedDraft:uf,attachments:p.array(vf).optional(),model:p.string().nullable().default(null),runtimeVersion:p.string().nullable().default(null),lastActivityAt:p.iso.datetime().optional(),stillWorking:p.boolean().default(!1),preparedContext:p.string().default(``),baseVersion:p.number().int().positive(),startedAt:p.iso.datetime(),endedAt:p.iso.datetime().nullable(),messages:p.array(hf),receipts:p.array(ff),inspections:p.array(mf).default([]),questions:p.array(pf).optional(),intents:p.array(_f).default([]),pending:gf.nullable(),recoveryIssue:p.string().nullable().optional(),issue:p.string().nullable()}),bf=p.object({id:J,canvasId:J,ownerId:J,title:p.string().trim().min(1).max(q.shortText),titleSource:p.enum([`automatic`,`manual`]).optional(),visibility:p.enum([`private`,`shared`]),createdAt:p.iso.datetime(),updatedAt:p.iso.datetime(),sessionId:J,hasSession:p.boolean(),draft:uf,turns:p.array(yf),earlierMessages:p.number().int().nonnegative().optional(),sequence:p.number().int().nonnegative()}),Y=p.uuid(),xf=yf.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}),Sf=p.object({canvasId:Y,chatId:Y,title:p.string().trim().min(1).max(q.shortText),visibility:p.enum([`private`,`shared`]),sequence:p.number().int().nonnegative(),mergeTurns:p.boolean().optional(),createdAt:p.iso.datetime(),updatedAt:p.iso.datetime(),turns:p.array(xf)}).omit({mergeTurns:!0}).extend({earlierMessages:p.number().int().nonnegative().optional(),ownerId:Y,ownerName:p.string().optional(),readSequence:p.number().int().nonnegative().optional(),unread:p.boolean().optional()});p.object({canvasId:Y,search:p.string().max(q.shortText).default(``),ownerId:Y.optional(),sort:p.enum([`date`,`unread`]).default(`date`),cursor:p.object({updatedAt:p.iso.datetime(),chatId:Y,unread:p.boolean().optional()}).optional(),limit:p.number().int().min(1).max(q.page).default(q.page)}),p.object({items:p.array(Sf),next:p.object({updatedAt:p.iso.datetime(),chatId:Y,unread:p.boolean().optional()}).nullable()});const Cf=p.object({canvasId:Y,chatId:Y});Cf.extend({before:p.number().int().nonnegative().optional()}),p.object({chat:Sf.nullable(),next:p.number().int().nonnegative().nullable()}),Cf.extend({sequence:p.number().int().nonnegative()}),p.object({saved:p.boolean()}),p.object({canvasId:Y,cursor:p.string().max(q.cursor).default(``)}),p.object({cursor:p.string(),changed:p.boolean()});const wf=p.string().min(1),X=p.uuid();p.object({protocol:p.literal(4),shellVersion:p.string(),hostId:X.optional(),eventSequence:p.number().int().nonnegative().default(0),installationId:X,profileId:X.nullable(),credential:p.object({tokenId:X,expiresAt:p.iso.datetime()}).nullable().default(null),connection:df,chats:p.array(bf),chatPages:p.array(p.object({canvasId:X,hasMore:p.boolean()})).default([]),attachments:p.array(vf),instructions:p.array(sf).default([]),issue:p.string().nullable(),capabilities:p.object({images:p.boolean(),dictation:p.boolean()})});const Tf=p.object({personId:X,tokenId:X,token:p.string().startsWith(`enh_`).max(q.label),expiresAt:p.iso.datetime()}),Ef=p.object({canvasId:X,rootIds:p.array(wf),version:p.number().int().positive()});p.discriminatedUnion(`kind`,[p.object({kind:p.literal(`desktop.describe`)}),p.object({kind:p.literal(`claude.status`)}),p.object({kind:p.literal(`claude.connect`)}),p.object({kind:p.literal(`claude.cancelConnection`)}),p.object({kind:p.literal(`claude.chooseExecutable`)}),p.object({kind:p.literal(`profile.connect`),profile:Tf}),p.object({kind:p.literal(`profile.disconnect`)}),p.object({kind:p.literal(`instruction.import`),name:p.string().trim().min(1).max(q.name),content:p.string().trim().min(1)}),p.object({kind:p.literal(`instruction.remove`),instructionId:X}),p.object({kind:p.literal(`chat.list`),canvasId:X,more:p.boolean().optional()}),p.object({kind:p.literal(`chat.read`),chatId:X,more:p.boolean().optional()}),p.object({kind:p.literal(`chat.create`),canvasId:X,visibility:p.enum([`private`,`shared`])}),p.object({kind:p.literal(`chat.saveDraft`),chatId:X,expectedRevision:p.number().int().nonnegative(),draft:uf}),p.object({kind:p.literal(`chat.rename`),chatId:X,title:p.string().trim().min(1).max(q.shortText)}),p.object({kind:p.literal(`chat.visibility`),chatId:X,visibility:p.enum([`private`,`shared`])}),p.object({kind:p.literal(`chat.delete`),chatId:X,stop:p.boolean()}),p.object({kind:p.literal(`turn.start`),chatId:X,draftRevision:p.number().int().nonnegative(),scope:Ef}),p.object({kind:p.literal(`turn.stop`),chatId:X,turnId:X}),p.object({kind:p.literal(`turn.checkChanges`),chatId:X,turnId:X}),p.object({kind:p.literal(`turn.undo`),chatId:X,turnId:X}),p.object({kind:p.literal(`question.respond`),chatId:X,turnId:X,questionId:X,digest:p.string().min(1).max(q.name),answer:p.string().trim().min(1).nullable()}),p.object({kind:p.literal(`request.respond`),chatId:X,turnId:X,requestId:p.string().max(q.shortText),digest:p.string().max(q.name),allow:p.boolean()}),p.object({kind:p.literal(`attachment.choose`),chatId:X}),p.object({kind:p.literal(`attachment.prepare`),chatId:X,name:p.string().max(q.shortText),bytes:p.string()}),p.object({kind:p.literal(`attachment.remove`),chatId:X,attachmentId:X}),p.object({kind:p.literal(`desktop.update`)}),p.object({kind:p.literal(`desktop.retryHost`)}),p.object({kind:p.literal(`desktop.openHistory`)})]);const Df=p.string().trim().min(1).max(2e3);p.object({message:Df,diagnostics:p.unknown().optional(),workspaceId:p.uuid().optional(),canvasId:p.uuid().optional()}),p.object({status:p.enum([`sent`,`unavailable`,`unconfirmed`]),attemptId:p.uuid(),retryAfterSeconds:p.number().int().min(1).max(3600).optional()});const Of=p.enum([`home`,`recents`,`shared`,`trash`,`team`,`canvas`,`invite`,`sign-in`,`sign-up`,`other`]),kf=p.enum([`Error`,`TypeError`,`RangeError`,`ReferenceError`,`SyntaxError`,`URIError`,`AbortError`,`NetworkError`,`SecurityError`,`UnhandledRejection`]),Af=1e6,jf=p.number().int().min(0).max(864e5),Mf=p.object({name:kf,atMs:jf,source:p.enum([`application`,`external`,`unknown`]),line:p.number().int().min(0).max(Af).optional(),column:p.number().int().min(0).max(Af).optional()}),Nf=p.object({path:p.string().max(256).regex(/^(?:canvas|comment|organisation|person|prototype|recording|recordingAsset|screen|transcript|telemetry)(?:\.[A-Za-z]+){1,4}$/u),status:p.enum([`ok`,`refused`,`unavailable`,`cancelled`]),durationMs:jf,atMs:jf,correlationId:p.uuid().optional()}),Pf=p.object({action:p.enum([`navigate`,`feedback.open`]),route:Of,atMs:jf}),Ff=p.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`||!p.uuid().safeParse(r).success||!p.uuid().safeParse(i).success||!/^[\da-f]{32}$/iu.test(a)?(t.addIssue({code:`custom`,message:`unsupported replay reference`}),p.NEVER):`https://mixpanel.com/projects/replay-redirect?${new URLSearchParams({replay_id:r??``,distinct_id:i??``,token:a}).toString()}`});p.object({route:Of,environment:p.object({browser:p.enum([`Chrome`,`Edge`,`Firefox`,`Safari`,`Other`]),os:p.enum([`macOS`,`Windows`,`Linux`,`iOS`,`Android`,`Other`]),release:p.string().max(256).regex(/^[\w.+-]+$/u)}),errors:p.array(Mf).max(10),api:p.array(Nf).max(10),activity:p.array(Pf).max(20),replayUrl:Ff.optional().catch(void 0)});const If=p.enum([`owner`,`admin`,`member`]),Lf=p.enum([`can-view`,`can-comment`,`can-edit`]),Rf=p.object({id:p.uuid(),name:p.string().min(1).max(120),role:If});p.object({}),Lo(Rf),p.object({name:p.string().trim().min(1).max(120)}),p.object({organisation:Rf}),p.object({organisationId:p.uuid(),name:p.string().trim().min(1).max(120)}),p.object({organisationId:p.uuid()}),p.object({organisationId:p.uuid(),movedCanvasCount:p.number().int().min(0)});const zf=p.object({personId:p.uuid(),displayName:p.string().max(120),initials:p.string().max(4),avatarUrl:p.string().max(Ro).nullable().optional(),email:p.string().max(254).nullable(),contentAccess:Lf.default(`can-comment`),role:If});p.object({organisationId:p.uuid()}),Lo(zf),p.object({organisationId:p.uuid(),email:p.email().trim().toLowerCase().max(254),role:p.enum([`admin`,`member`]).default(`member`),contentAccess:Lf.default(`can-comment`)}),p.object({personId:p.uuid()}),p.object({organisationId:p.uuid(),personId:p.uuid(),role:p.enum([`admin`,`member`])}).pick({personId:!0,role:!0}),p.object({organisationId:p.uuid(),personId:p.uuid(),contentAccess:Lf}).pick({personId:!0,contentAccess:!0}),p.object({organisationId:p.uuid(),personId:p.uuid()}),p.object({personId:p.uuid(),removed:p.literal(!0)}),p.object({organisationId:p.uuid(),personId:p.uuid()}),p.object({ownerPersonId:p.uuid()});const Bf=p.object({inviteId:p.uuid(),email:p.string().max(254).pipe(p.email()),contentAccess:Lf.default(`can-comment`),role:p.enum([`admin`,`member`]),sendCount:p.number().int().min(1),lastSentAt:p.iso.datetime(),expiresAt:p.iso.datetime(),state:p.enum([`pending`,`expired`]),deliveryState:p.enum([`queued`,`accepted`,`failed`]),deliveryError:p.string()});p.object({organisationId:p.uuid(),email:p.string().trim().toLowerCase().max(254).pipe(p.email()),role:p.enum([`admin`,`member`]).default(`member`),contentAccess:Lf.default(`can-comment`)}),p.discriminatedUnion(`kind`,[p.object({kind:p.literal(`member`),personId:p.uuid()}),p.object({kind:p.literal(`invitation`),invite:Bf})]),p.object({invite:Bf}),p.object({organisationId:p.uuid()}),Lo(Bf),p.object({organisationId:p.uuid(),inviteId:p.uuid()}).extend({});const Vf=p.string().min(1).max(512);p.object({token:Vf}),p.object({token:Vf}),p.object({teamName:p.string().min(1).max(120),invitedBy:p.string().min(1).max(120),email:p.string().max(254).pipe(p.email()),contentAccess:Lf.default(`can-comment`),role:p.enum([`admin`,`member`]),expiresAt:p.iso.datetime(),state:p.enum([`pending`,`accepted`]),hasAccount:p.boolean()}),p.object({organisationId:p.uuid()});const Hf=p.object({id:p.uuid(),label:p.string().min(1).max(120),createdAt:p.iso.datetime(),lastUsedAt:p.iso.datetime().nullable(),expiresAt:p.iso.datetime().nullable(),revoked:p.boolean()});p.object({label:p.string().trim().min(1).max(120).describe(`Label naming the agent.`),expiresAt:p.iso.datetime().nullable().describe(`Expiry timestamp, or null for a token that does not expire.`)}),p.object({token:p.string().startsWith(`enh_`),agentToken:Hf}),p.object({}),p.object({items:p.array(Hf),isConnected:p.boolean()}),p.object({tokenId:p.uuid()}),p.object({tokenId:p.uuid(),revoked:p.literal(!0)}),p.discriminatedUnion(`method`,[p.object({method:p.literal(`token`)}),p.object({method:p.literal(`browser`),issuer:p.url(),clientId:p.string().min(1),scope:p.literal(`openid`)})]);const Uf=p.object({id:p.uuid(),preparedCanvasId:p.uuid(),displayName:p.string().min(1).max(120),initials:p.string().min(1).max(4),avatarUrl:p.string().max(Ro).nullable(),email:p.string().max(254).nullable(),createdAt:p.iso.datetime()});p.object({}),p.object({person:Uf.nullable(),authentication:p.discriminatedUnion(`kind`,[p.object({kind:p.literal(`anonymous`)}),p.object({kind:p.literal(`person`)}),p.object({kind:p.literal(`agent`),tokenId:p.uuid(),tokenLabel:p.string(),expiresAt:p.iso.datetime().nullable()}),p.object({kind:p.literal(`oauth-agent`),tokenId:p.uuid(),tokenLabel:p.string(),clientId:p.string().min(1),scopes:p.array(p.string()),expiresAt:p.iso.datetime(),resource:p.url()})])}),p.object({displayName:p.string().trim().min(1).max(120)}),p.object({person:Uf});const Wf=p.string().trim().toLowerCase().min(3).max(40).regex(/^[a-z0-9][a-z0-9._-]*$/,`letters, digits, dot, underscore and dash only`),Gf=p.enum([`cookie`,`token`]).default(`cookie`);p.object({username:Wf,password:p.string().min(10).max(200),displayName:p.string().trim().min(1).max(120),deliver:Gf,email:p.string().max(254).transform(e=>e.trim().toLowerCase()).pipe(p.email())}),p.object({username:Wf,password:p.string().min(1).max(200),deliver:Gf}),p.object({person:Uf,token:p.string().nullable()}).extend({preparedCanvasId:p.uuid()}),p.object({}),p.object({signedOut:p.literal(!0)});const Kf=p.enum([`image/jpeg`,`image/png`,`image/webp`]);p.object({contentType:Kf,bytes:p.number().int().positive()}),p.object({assetId:p.uuid(),upload:p.object({url:p.url(),headers:p.record(p.string(),p.string()),expiresAt:p.iso.datetime()})}),p.object({assetId:p.uuid()}),p.object({assetId:p.uuid(),previewUrl:p.url()}),p.object({abandoned:p.boolean()}),p.object({requestId:p.uuid(),displayName:p.string().trim().min(1).max(120),photoAssetId:p.uuid().optional()}),p.object({person:Uf});const qf=p.string().max(254).pipe(p.email()),Jf=p.discriminatedUnion(`kind`,[p.object({kind:p.literal(`person`),personId:p.uuid(),displayName:p.string().min(1).max(120),initials:p.string().min(1).max(4),avatarUrl:p.string().max(Ro).nullable().optional(),email:qf}),p.object({kind:p.literal(`email`),email:qf})]);p.object({query:p.string().trim().min(1).max(200)});const Yf=p.object({recipients:p.array(Jf).max(5)});p.object({}),Yf.extend({});const Xf=`enhance3:session-handoff`;p.union([p.object({kind:p.literal(Xf),body:p.object({token:p.string().min(1),displayName:p.string().min(1)})}),p.object({kind:p.literal(Xf),signedOut:p.literal(!0)})]);const Zf=p.string().length(64).refine(e=>{for(let t of e)if(!/[\da-f]/u.test(t))return!1;return!0}),Qf=e=>{for(let t of e){let e=t.codePointAt(0);if(e!==void 0&&(e===127||e<=31))return!0}return!1},$f=p.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(`\\`)&&!Qf(e)&&!e.startsWith(`__enhance/`)&&e.split(`/`).every(e=>e!==``&&e!==`.`&&e!==`..`),{message:`prototype paths must be portable relative file paths`}),ep=p.object({path:$f,contentType:p.string().trim().min(1).max(200).refine(e=>!Qf(e)),bytes:p.number().int().nonnegative().max(2**53-1),sha256:Zf});p.object({version:p.literal(1),entryPath:$f,files:p.array(ep).min(1)});const tp=p.object({artifactBytes:p.number().int().positive().max(2**53-1),expandedBytes:p.number().int().positive().optional(),fileBytes:p.number().int().positive().max(2**53-1),manifestBytes:p.number().int().positive().optional(),fileCount:p.number().int().positive().optional(),pathBytes:p.number().int().positive().max(2**53-1)});p.object({}),p.object({attachmentProtocolVersion:p.literal(1).optional(),protocolVersion:p.literal(1),format:p.literal(`zip`),limits:tp});const np=p.object({protocolVersion:p.literal(1),format:p.literal(`zip`),bytes:p.number().int().positive().max(2**53-1),sha256:Zf,fileCount:p.number().int().positive().max(2**53-1),expandedBytes:p.number().int().positive().max(2**53-1)});p.object({canvasId:p.uuid(),targetMode:p.enum([`node`,`prototype`]).optional(),canvasPageId:p.string().min(1).optional(),prototypeId:p.uuid().optional(),clientToken:p.uuid(),nodeId:p.string().min(1),title:p.string().trim().min(1).max(200),entryPath:$f,artifact:np,box:F.extend({width:p.number().positive(),height:p.number().positive()})});const rp=p.enum([`uploading`,`queued`,`ingesting`,`ready`,`failed`,`abandoned`]),ip=p.array(p.object({path:p.string().min(1),code:p.string().min(1)})),ap=p.object({prototypeId:p.uuid(),deploymentId:p.uuid(),nodeId:p.string().min(1),alreadyExists:p.boolean(),artifact:np});p.discriminatedUnion(`state`,[ap.extend({state:p.literal(`uploading`),upload:P}),ap.extend({state:p.enum([`queued`,`ingesting`,`ready`,`failed`,`abandoned`])})]);const op=p.object({canvasId:p.uuid(),deploymentId:p.uuid()});p.object({deploymentId:p.uuid(),state:rp}),p.object(op.shape);const sp=p.object({prototypeId:p.uuid(),deploymentId:p.uuid(),nodeId:p.string().min(1),fileCount:p.number().int().nonnegative(),totalBytes:p.number().int().nonnegative().max(2**53-1),processedFiles:p.number().int().nonnegative(),unavailableFiles:ip.optional()});p.discriminatedUnion(`state`,[sp.extend({state:p.literal(`failed`),failure:p.object({code:p.string().min(1),message:p.string().min(1),path:$f.optional()})}),sp.extend({state:p.enum([`uploading`,`queued`,`ingesting`,`ready`,`abandoned`])})]),p.object({canvasId:p.uuid(),deploymentId:p.uuid(),baseVersion:p.number().int().positive(),canvasPageId:p.string().min(1).optional(),attachment:p.object({clientToken:p.uuid(),scope:p.object({pageId:p.string().min(1).optional(),nodeIds:p.array(p.string().min(1))})}).optional()}),p.object({canvasId:p.uuid(),prototypeId:p.uuid(),deploymentId:p.uuid(),nodeId:p.string().min(1),version:p.number().int().positive(),state:p.literal(`ready`),origin:p.url(),openUrl:p.string().startsWith(`/c/`),canvasUrl:p.url().optional(),unavailableFiles:ip.optional(),attachment:p.discriminatedUnion(`outcome`,[p.object({outcome:p.literal(`committed`),mutationId:p.uuid(),previousVersion:p.number().int().positive(),version:p.number().int().positive()}),p.object({outcome:p.literal(`no_op`),version:p.number().int().positive()})]).optional()});const cp=p.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`}),lp=p.object({path:cp,contentType:p.string().min(1).max(200),bytes:p.number().int().nonnegative()}),up=p.enum([`uploading`,`verifying`,`ready`,`failed`,`abandoned`]);p.object({canvasId:p.uuid(),prototypeId:p.uuid().optional(),clientToken:p.uuid(),nodeId:p.string().min(1),targetMode:p.enum([`node`,`prototype`]).optional(),canvasPageId:p.string().min(1).optional(),title:p.string().trim().min(1).max(200),entryPath:cp.default(`index.html`),files:p.array(lp).min(1),box:F.extend({width:p.number().positive(),height:p.number().positive()})}),p.object({prototypeId:p.uuid(),deploymentId:p.uuid(),nodeId:p.string().min(1),state:up,alreadyExists:p.boolean(),fileCount:p.number().int().positive(),totalBytes:p.number().int().positive()}),p.object({canvasId:p.uuid(),deploymentId:p.uuid(),cursor:p.number().int().min(0).default(0)});const dp=p.object({path:cp,upload:P});p.object({deploymentId:p.uuid(),uploads:p.array(dp).max(50),nextCursor:p.number().int().min(0).optional()}),p.object({canvasId:p.uuid(),deploymentId:p.uuid(),baseVersion:p.number().int().positive(),canvasPageId:p.string().min(1).optional()}),p.object({canvasId:p.uuid(),prototypeId:p.uuid(),deploymentId:p.uuid(),nodeId:p.string().min(1),version:p.number().int().positive(),state:p.literal(`ready`),origin:p.url(),openUrl:p.string().startsWith(`/c/`),canvasUrl:p.url().optional(),unavailableFiles:ip.optional()}),p.object({context:p.discriminatedUnion(`kind`,[p.object({kind:p.literal(`live`),nodeId:p.string().min(1)}),p.object({kind:p.literal(`version`),nodeId:p.string().min(1),versionEntryId:p.uuid()})]).optional(),canvasId:p.uuid(),prototypeId:p.uuid(),deploymentId:p.uuid()}),p.object({deploymentId:p.uuid(),origin:p.url(),bootUrl:p.url(),expiresAt:p.iso.datetime()});const fp=m.int().check(m.minimum(0),m.maximum(6e5)),pp=m.enum([`none`,`completed`,`background`,`failed`]);m.object({protocol:m.literal(1),type:m.literal(`enhance.prototype.gate`),generation:m.uuid(),nonce:m.uuid(),outcome:m.enum([`opening`,`migrating`,`accepted`,`expired-or-used`,`temporary-error`,`denied`]),timing:m.optional(m.object({exchangeMs:fp,migration:pp,migrationWaitMs:fp}))}),m.object({protocol:m.literal(1),type:m.literal(`enhance.prototype.capture`),requestId:m.uuid(),connectionId:m.optional(m.uuid()),documentId:m.optional(m.uuid()),format:m.optional(m.literal(`menu-svg`))});const mp=m.object({protocol:m.literal(1),type:m.literal(`enhance.prototype.connect`),connectionId:m.uuid()});m.extend(mp,{type:m.literal(`enhance.prototype.connected`),documentId:m.uuid(),capabilities:m.array(m.string()),release:m.string().check(m.minLength(1))}),m.extend(mp,{type:m.literal(`enhance.prototype.capture-blocked`)}),m.object({protocol:m.literal(1),type:m.literal(`enhance.prototype.unloading`),documentId:m.uuid()}),m.object({protocol:m.literal(1),type:m.literal(`enhance.prototype.ready`),inputVersion:m.optional(m.int()),build:m.optional(m.string()),capabilities:m.optional(m.array(m.string()))});const hp=m.object({protocol:m.literal(1),type:m.literal(`enhance.prototype.present`),generation:m.uuid(),nonce:m.uuid()});m.extend(hp,{type:m.literal(`enhance.prototype.presented`),documentId:m.uuid()}),m.object({protocol:m.literal(1),type:m.literal(`enhance.prototype.escape`)}),m.object({protocol:m.literal(1),type:m.literal(`enhance.prototype.zoom`),deltaX:m.number(),deltaY:m.number(),deltaMode:m.union([m.literal(0),m.literal(1),m.literal(2)]),anchorX:m.number().check(m.minimum(0),m.maximum(1)),anchorY:m.number().check(m.minimum(0),m.maximum(1))}),m.object({protocol:m.literal(1),type:m.literal(`enhance.prototype.navigate`),direction:m.enum([`back`,`forward`,`reload`])}),m.object({protocol:m.literal(1),type:m.literal(`enhance.prototype.navigation`),path:m.optional(m.string()),canGoBack:m.boolean(),canGoForward:m.boolean(),isNavigating:m._default(m.boolean(),!1)});const gp=m.object({artifact:m.string().check(m.minLength(1)),viewport:m.object({width:m.number().check(m.positive()),height:m.number().check(m.positive())}),title:m.string(),files:m.optional(m.object({named:m.array(m.string()),fetched:m.array(m.object({url:m.string(),contentType:m.string(),bytes:m.custom(e=>Object.prototype.toString.call(e)===`[object ArrayBuffer]`)}))}))}),_p=m.object({protocol:m.literal(1),type:m.literal(`enhance.prototype.captured`),requestId:m.uuid(),connectionId:m.optional(m.uuid()),documentId:m.optional(m.uuid())});m.discriminatedUnion(`outcome`,[m.extend(_p,{outcome:m.literal(`captured`),screen:gp,issues:m.optional(na)}),m.extend(_p,{outcome:m.literal(`menu-svg`),markup:m.string().check(m.startsWith(`data:image/svg+xml`))}),m.extend(_p,{outcome:m.literal(`failed`),error:m.string().check(m.minLength(1)),code:m.optional(m.enum([`capture-failed`,`capture-busy`]))})]);const vp=m.number().check(m.minimum(0),m.maximum(6e4)),yp={wheelQuietMs:280,pointerSlopPx:4,singleAxisRatio:1.2,momentumTailSpeed:100,axisRatio:1.25,openingSamplePx:4,openingWindowMs:35},bp=m.object({directionConfirmation:m._default(m.literal(`next-sample`),`next-sample`),openingSamplePx:m._default(m.number().check(m.minimum(0),m.maximum(16)),yp.openingSamplePx),openingWindowMs:m._default(m.number().check(m.minimum(0),m.maximum(50)),yp.openingWindowMs),canvasProtection:m._default(m.literal(`slow-tail`),`slow-tail`),momentumTailSpeed:m._default(m.number().check(m.minimum(0),m.maximum(1e3)),yp.momentumTailSpeed),wheelQuietMs:m._default(vp,yp.wheelQuietMs),pointerSlopPx:m._default(m.number().check(m.minimum(0),m.maximum(50)),yp.pointerSlopPx),singleAxisRatio:m._default(m.number().check(m.minimum(.25),m.maximum(4)),yp.singleAxisRatio),axisRatio:m._default(m.number().check(m.minimum(1),m.maximum(4)),yp.axisRatio)});bp.parse({});const xp=m.object({inputVersion:m.literal(2)});m.extend(xp,{type:m.literal(`enhance.prototype.input-context`),settings:bp,navigationAt:m.number(),canvasPhysicalAt:m._default(m.number(),0),canvasSubstantialAt:m._default(m.number(),0),canvasSpeed:m._default(m.number().check(m.nonnegative()),0),canvasWheelUntil:m.number(),canvasMomentum:m.nullable(m.boolean()),escapeAt:m._default(m.number(),0),escapePending:m._default(m.boolean(),!1),appWheelUntil:m._default(m.number(),0),appMomentum:m._default(m.nullable(m.boolean()),null),toolOwnsInput:m.boolean(),interactive:m._default(m.boolean(),!0),pointerPan:m.optional(m.boolean()),pointerPanId:m.optional(m.int().check(m.nonnegative())),pointer:m.nullable(m.object({x:m.number(),y:m.number()})),cursor:m.optional(m.nullable(m.object({anchor:m.nullable(m.object({x:m.number(),y:m.number()})),fallback:m.string(),pointerTime:m.number()}))),visible:m.boolean()});const Sp=m.extend(xp,{type:m.literal(`enhance.prototype.wheel`),deltaX:m.number(),deltaY:m.number(),zoom:m.boolean(),momentum:m.nullable(m.boolean()),openingHandoff:m.optional(m.boolean()),anchorX:m.number().check(m.minimum(0),m.maximum(1)),anchorY:m.number().check(m.minimum(0),m.maximum(1))}),Cp=m.extend(xp,{type:m.literal(`enhance.prototype.pan`),phase:m.enum([`start`,`move`,`end`,`cancel`]),pointerId:m.int().check(m.nonnegative()),clientPoint:m.optional(m.object({x:m.number(),y:m.number()})),screenX:m.number(),screenY:m.number(),anchorX:m.number().check(m.minimum(0),m.maximum(1)),anchorY:m.number().check(m.minimum(0),m.maximum(1))}),wp=m.extend(xp,{type:m.literal(`enhance.prototype.input-activity`),owner:m.enum([`app`,`canvas`,`none`]),reason:m.string().check(m.maxLength(120)),momentum:m.nullable(m.boolean()),focused:m.boolean(),hovered:m._default(m.boolean(),!1),suppressed:m._default(m.boolean(),!1),protected:m.boolean(),screenX:m.number(),screenY:m.number(),pointerAnchor:m._default(m.nullable(m.object({x:m.number(),y:m.number()})),null),pointerTime:m._default(m.number(),0),kind:m.enum([`pointer`,`interaction`,`wheel`,`focus`,`protection`,`escape`,`select`])}),Tp=m.extend(xp,{type:m.literal(`enhance.prototype.input-ready`),build:m.string().check(m.maxLength(120))}),Ep=m.extend(xp,{type:m.literal(`enhance.prototype.context-menu`),anchorX:m.number().check(m.minimum(0),m.maximum(1)),anchorY:m.number().check(m.minimum(0),m.maximum(1)),keyboard:m.boolean(),ctrlKey:m.boolean(),metaKey:m.boolean()});m.discriminatedUnion(`type`,[Sp,wp,Tp,Cp,Ep]);const Dp=2166136261,Op=Number.parseInt(`9e3779b9`,16),kp=Number.parseInt(`85ebca6b`,16),Ap=Number.parseInt(`c2b2ae35`,16);Dp^Op,Dp^kp,Dp^Ap;const jp=p.object({width:p.number().int().positive(),height:p.number().int().positive()}),Mp=p.object({mimeType:p.string().min(1).max(100),sampleRate:p.number().int().min(8e3).max(192e3)});p.object({sourceUrl:p.string(),viewport:jp,pageTitle:p.string().nullable(),audio:Mp.nullable().default(null)}),p.object({recordingId:p.uuid(),ownerPersonId:p.uuid(),chunkIndex:p.literal(0),upload:P,audioUpload:P.nullable()}),p.object({recordingId:p.uuid(),index:p.number().int().min(0),firstEventMs:p.number().int().min(0),lastEventMs:p.number().int().min(0),eventCount:p.number().int().min(0),continues:p.boolean().default(!1),bytes:p.number().int().min(1),etag:p.string().min(1).max(200).optional()}),p.object({nextChunkIndex:p.number().int().min(1),upload:P}),p.object({recordingId:p.uuid(),index:p.number().int().min(0),firstMs:p.number().int().min(0),lastMs:p.number().int().min(0),bytes:p.number().int().min(1),epoch:p.number().int().min(0).default(0),startsEpoch:p.boolean().default(!1),etag:p.string().min(1).max(200).optional()}),p.object({nextChunkIndex:p.number().int().min(1),upload:P}),p.object({recordingId:p.uuid(),durationMs:p.number().int().min(0),viewport:jp,sourceUrl:p.string(),interrupted:p.boolean().default(!1),canvasId:p.uuid().optional(),organisationId:p.uuid().optional(),audioChunkCount:p.number().int().min(0).default(0),hasRecoverableBytes:p.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 Np=p.enum([`whole`,`recovering`,`partial`]),Pp=p.enum([`dom`,`audio`]);p.object({recordingId:p.uuid(),canvasId:p.uuid(),canvasTitle:p.string().min(1),isNewCanvas:p.boolean(),storedChunkCount:p.number().int().min(0),missingChunkIndexes:p.array(p.number().int().min(0)).max(64),missingChunkCount:p.number().int().min(0),storedAudioChunkCount:p.number().int().min(0),missingAudioChunkIndexes:p.array(p.number().int().min(0)).max(64),missingAudioChunkCount:p.number().int().min(0),integrity:Np});const Fp=p.object({recordingId:p.uuid(),durationMs:p.number().int().min(0),viewport:jp,interrupted:p.boolean(),chunkCount:p.number().int().min(0),startedAt:p.iso.datetime(),isCopy:p.boolean()}),Ip=p.array(p.object({url:p.url(),contentType:p.string().min(1).max(200),byteSize:p.number().int().min(1),sha256:p.string().regex(/^[a-f0-9]{64}$/u).optional()})).max(400);p.union([p.object({recordingId:p.uuid(),assets:Ip}),p.object({screenId:p.uuid(),assets:Ip})]),p.object({reserved:p.array(p.object({url:p.string(),upload:P}))});const Lp=p.array(p.object({url:p.url(),etag:p.string().min(1).max(200),byteSize:p.number().int().min(1)})).max(400);p.union([p.object({recordingId:p.uuid(),arrived:Lp}),p.object({screenId:p.uuid(),arrived:Lp})]),p.object({missingAssetCount:p.number().int().min(0)}),p.object({canvasId:p.uuid(),recordingId:p.uuid()});const Rp=p.object({seq:p.number().int().min(0),firstEventMs:p.number().int().min(0),lastEventMs:p.number().int().min(0),continues:p.boolean()}),zp=p.discriminatedUnion(`state`,[Rp.extend({state:p.literal(`available`),download:rc}),Rp.extend({state:p.literal(`missing`)})]),Bp=p.object({seq:p.number().int().min(0),firstMs:p.number().int().min(0),lastMs:p.number().int().min(0),epoch:p.number().int().min(0),startsEpoch:p.boolean()}),Vp=p.discriminatedUnion(`state`,[Bp.extend({state:p.literal(`available`),download:rc}),Bp.extend({state:p.literal(`missing`)})]);p.object({recordingId:p.uuid(),durationMs:p.number().int().min(0),viewport:jp,sourceUrl:p.string(),interrupted:p.boolean(),integrity:Np,chunks:p.array(zp),audio:p.object({mimeType:p.string(),chunks:p.array(Vp)}).nullable(),assets:p.array(p.object({url:p.string(),contentType:p.string(),path:p.string().startsWith(`/v1/recording-assets/`)})),missingAssetCount:p.number().int().min(0),missingAssetUrls:p.array(p.string()).optional()});const Hp=p.object({recordingId:p.uuid(),track:Pp,index:p.number().int().min(0)});p.object({upload:P}),Hp.extend({etag:p.string().min(1).max(200)}),p.object({integrity:Np}),p.object({canvasId:p.uuid()}),Lo(Fp).extend({unreadableCount:p.number().int().min(0)}),p.object({recordingId:p.uuid()}),p.object({recordingId:p.uuid(),discarded:p.literal(!0)}),p.object({canvasId:p.uuid(),recordingId:p.uuid()}),p.object({recordingId:p.uuid(),detachedScreenCount:p.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=p.uuid().nullable().safeParse(e.clientToken??null),r=p.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:d(t.catalog(),`recording.snapshot`),arguments:{canvasId:te(e.canvas),recordingId:r.data,atMs:Dg(e.atMs,`--at-ms`,!1),timeoutMs:Dg(e.timeoutMs,`--timeout-ms`,!0)},clientToken:n.data}))})},kg=(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.`)},Ag=(e,t)=>Rt(e,e=>({[e]:{query:async n=>t.query(e,n),mutate:async n=>kg(e,n,await t.mutate(e,n))}})),jg=(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=p.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:d(t.catalog(),`transcript.read`),arguments:{canvasId:te(e.canvas),recordingId:n.data},clientToken:null}))})},Mg={jsonInput:`auto`,prompts:!1,logger:`ndjson`,errorMapping:`stable-exit-codes`},Ng=e=>{let t=e.state;return{logger:e.output.logger,prompts:Mg.prompts,process:Lh(),formatError:e=>{let n=pe(e,t.pendingParserMessage);return t.exitCode=Ae(n,!1,e),t.pendingParserMessage=null,JSON.stringify(n)}}},Pg=e=>typeof e==`object`&&e&&!Array.isArray(e)?Object.fromEntries(Object.entries(e)):null,Fg=e=>{let t=Pg(e),n=t===null?void 0:t.description;return typeof n==`string`&&n!==``?n:null},Ig=e=>({descriptions:new Map(e.flatMap(([e,t])=>{let n=Fg(t.meta);return n===null?[]:[[e,n]]})),mutationPaths:new Set(e.flatMap(([e,t])=>t.type===`mutation`?[e]:[]))}),Lg=()=>{let e=null;return()=>(e??=De(),e)},Rg=(e,t,n)=>{let r=cn(t.remote),i=nt({remote:t.remote,mutationKey:t.mutationKey,configDirectory:t.configDirectory,now:()=>new Date,progress:t.output.result});pn(e,ct(t.credentials,t.remote,$e(t.remote)),t.output),ug(e,i,n,t.output),Ph(e,t),Sg(e,{invocation:i,catalog:n,output:t.output}),dg(e,{version:t.version,credentials:t.credentials,remote:t.remote,output:t.output}),xg(e,{screen:r,recording:on(t.remote),world:un(t.remote,r)},t.output),lg(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}),Og(e,{invocation:i,catalog:n,output:t.output}),Eg(e,i,n,t.output),jg(e,{invocation:i,catalog:n,output:t.output})},zg=e=>{let t=ft({router:Se()}),n=Lg(),{descriptions:r,mutationPaths:i}=Ig(t),a=dt({router:Ag(t,e.remote),name:e.commandName,version:e.version,description:`Operate Enhance as the authenticated person.`,jsonInput:Mg.jsonInput}),o=Ng(e),s=a.buildProgram(o);if(!(s instanceof ut))throw TypeError(`trpc-cli did not return a Commander program`);rg(s),Rg(s,e,n),$h(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 he))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}}}},Bg=e=>f.exit(e),Vg=36e5,Hg=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Ug=e=>{if(Array.isArray(e))return e.map(e=>JSON.stringify(e));if(!Hg(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(Hg(e)?{...e,truncated:n}:{value:e,truncated:n}))},Wg=e=>{let t=`${e.join(`
|
|
38
38
|
`)}\n`;if(!(t.length>25e3||e.some(e=>e.length>2e3))){f.stdout.write(t);return}let n=Dt(`sha256`).update(t).digest(`hex`).slice(0,16),r=h.join(mt(),`enhance-${n}.ndjson`);Et(r,t,{mode:384}),f.stdout.write(`${JSON.stringify({path:r,characters:t.length,records:e.length})}\n`)},Gg=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}},Kg=e=>typeof e==`string`?Gg(e):Array.isArray(e)?e.some(e=>Kg(e)):Hg(e)?Object.values(e).some(e=>Kg(e)):!1,qg=e=>{bt(e,{recursive:!0,mode:448}),gt(e,448)},Jg=e=>{if(!vt(e))return;let t=Date.now()-Vg,n=Ct(e,{withFileTypes:!0});for(let r of n){if(!r.isFile()||!r.name.startsWith(`result-`))continue;let n=h.join(e,r.name);yt(n).mtimeMs<t&&Tt(n)}},Yg=e=>({...e,sensitive:!0,cleanup:`unlink-after-use`,deleteAfter:new Date(Date.now()+Vg).toISOString()}),Xg=(e,t)=>{let n=Ug(e),r=`${n.join(`
|
|
39
|
-
`)}\n`;qg(t);let i=h.join(t,`result-${Ot()}.ndjson`);Et(i,r,{mode:384,flag:`wx`}),f.stdout.write(`${JSON.stringify(Yg({path:i,characters:r.length,records:n.length,reason:`signed-url`}))}\n`)},Zg=e=>Hg(e)?typeof e.token==`string`?{field:`token`,value:e.token}:typeof e.acceptToken==`string`?{field:`acceptToken`,value:e.acceptToken}:null:null,Qg=(e,t,n)=>{let r=`${t.value}\n`;qg(n);let i=h.join(n,`result-${Ot()}.token`);Et(i,r,{mode:384,flag:`wx`});let a=Object.fromEntries(Object.entries(e).filter(([e])=>e!==t.field));f.stdout.write(`${JSON.stringify({...a,secret:Yg({path:i,field:t.field,characters:r.length})})}\n`)},$g=e=>e.includes(`Usage:`)||e.includes(`Options:`)||e.includes(`Commands:`),e_=ne.omit({fields:!0}).extend({remediation:p.string(),fields:p.array(p.object({path:p.string(),message:p.string()})).optional()}),t_=e=>{try{let t=JSON.parse(e),n=e_.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}},n_=(e,t)=>{if(typeof e==`string`&&$g(e)){f.stdout.write(e);return}let n=Zg(e);if(n!==null&&Hg(e)){Qg(e,n,t);return}if(Kg(e)){Xg(e,t);return}let r=ke(e);if(r!==null){let e=null;if(r.detail!==null){qg(t);let n=h.join(t,`result-${Ot()}.ndjson`),i=`${JSON.stringify(r.detail)}\n`;Et(n,i,{mode:384,flag:`wx`}),e=Yg({path:n,characters:i.length,records:1})}f.stdout.write(`${JSON.stringify({...r.value,...e!==null&&{detail:e}})}\n`);return}Wg(Ug(e))},r_=e=>{f.stderr.write(`${JSON.stringify(e)}\n`)},i_=(e,t,n=`enhance`)=>{let r=e,i=h.join(t,`sensitive`);return Jg(i),{result:e=>{n_(we(e,n),i)},failure:e=>{r_(je(e,n))},logger:{info:(...e)=>{n_(we(e.length===1?e[0]:e,n),i)},error:(...e)=>{let t=String(we(e.map(String).join(``),n)),i=t_(t);i===null?r.pendingParserMessage=t:r_(i)}}}};(async()=>{let e=Ye(),t={exitCode:1,pendingParserMessage:null},n=i_(t,e.configDirectory,e.commandName),r=tt(e.configDirectory),i=rt(),a=Qe(e.apiUrl,r,i),o=zg({apiUrl:e.apiUrl,version:`0.1.41-dev.sha-
|
|
39
|
+
`)}\n`;qg(t);let i=h.join(t,`result-${Ot()}.ndjson`);Et(i,r,{mode:384,flag:`wx`}),f.stdout.write(`${JSON.stringify(Yg({path:i,characters:r.length,records:n.length,reason:`signed-url`}))}\n`)},Zg=e=>Hg(e)?typeof e.token==`string`?{field:`token`,value:e.token}:typeof e.acceptToken==`string`?{field:`acceptToken`,value:e.acceptToken}:null:null,Qg=(e,t,n)=>{let r=`${t.value}\n`;qg(n);let i=h.join(n,`result-${Ot()}.token`);Et(i,r,{mode:384,flag:`wx`});let a=Object.fromEntries(Object.entries(e).filter(([e])=>e!==t.field));f.stdout.write(`${JSON.stringify({...a,secret:Yg({path:i,field:t.field,characters:r.length})})}\n`)},$g=e=>e.includes(`Usage:`)||e.includes(`Options:`)||e.includes(`Commands:`),e_=ne.omit({fields:!0}).extend({remediation:p.string(),fields:p.array(p.object({path:p.string(),message:p.string()})).optional()}),t_=e=>{try{let t=JSON.parse(e),n=e_.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}},n_=(e,t)=>{if(typeof e==`string`&&$g(e)){f.stdout.write(e);return}let n=Zg(e);if(n!==null&&Hg(e)){Qg(e,n,t);return}if(Kg(e)){Xg(e,t);return}let r=ke(e);if(r!==null){let e=null;if(r.detail!==null){qg(t);let n=h.join(t,`result-${Ot()}.ndjson`),i=`${JSON.stringify(r.detail)}\n`;Et(n,i,{mode:384,flag:`wx`}),e=Yg({path:n,characters:i.length,records:1})}f.stdout.write(`${JSON.stringify({...r.value,...e!==null&&{detail:e}})}\n`);return}Wg(Ug(e))},r_=e=>{f.stderr.write(`${JSON.stringify(e)}\n`)},i_=(e,t,n=`enhance`)=>{let r=e,i=h.join(t,`sensitive`);return Jg(i),{result:e=>{n_(we(e,n),i)},failure:e=>{r_(je(e,n))},logger:{info:(...e)=>{n_(we(e.length===1?e[0]:e,n),i)},error:(...e)=>{let t=String(we(e.map(String).join(``),n)),i=t_(t);i===null?r.pendingParserMessage=t:r_(i)}}}};(async()=>{let e=Ye(),t={exitCode:1,pendingParserMessage:null},n=i_(t,e.configDirectory,e.commandName),r=tt(e.configDirectory),i=rt(),a=Qe(e.apiUrl,r,i),o=zg({apiUrl:e.apiUrl,version:`0.1.41-dev.sha-8645e9fc82bb`,credentials:r,remote:a,mutationKey:i,output:n,state:t,configDirectory:e.configDirectory,commandName:e.commandName});try{await o.run()}catch(e){e instanceof he&&Bg(e.requestedCode===0?0:t.exitCode),n.failure(pe(e,null)),Bg(1)}})().catch(e=>{f.stderr.write(`${e instanceof Error?e.message:`CLI startup failed.`}\n`),f.exitCode=1});export{};
|