@enhance-eng/enhance-dev 0.1.41-dev.sha-e57eae05dcd7 → 0.1.41-dev.sha-548ac35f52fa

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/main.mjs CHANGED
@@ -1,7 +1,7 @@
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-CmtzrtJ1.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-BZ7RNz7w.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
- `),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
- `)).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`,`
2
+ import{A as e,An as t,At as n,Bn as r,Bt as i,Cr as a,Dt as o,Ft as s,Gt as c,Ht as l,It as u,Mt as ee,Nt as d,Ot as te,Pt as ne,Sr as re,Tr as ie,Ut as ae,Vn as oe,Vr as se,Vt as ce,_ as le,a as ue,ar as de,bt as fe,c as pe,ct as me,dt as he,f as ge,h as _e,in as ve,it as ye,jt as be,m as xe,mr as Se,n as Ce,o as we,on as Te,or as Ee,p as De,pt as Oe,r as ke,s as Ae,sn as je,sr as Me,t as Ne,u as Pe,wr as Fe,xr as Ie,y as Le,zt as Re}from"./cli-output-identity.lib-CjRqgKQ4.mjs";import{C as ze,D as Be,E as Ve,S as He,T as Ue,_ as We,a as Ge,b as Ke,c as qe,d as Je,g as Ye,h as Xe,i as Ze,l as Qe,m as $e,n as et,p as f,r as tt,s as nt,t as rt,u as it,v as at,w as ot,x as st,y as ct}from"./zod-messages.lib-7mBmzE7A.mjs";import{t as lt}from"./capability-inventory.mapper-B_GMS9z3.mjs";import p from"node:process";import{Command as ut}from"commander";import{createCli as dt,parseRouter as ft}from"trpc-cli";import{z as m}from"zod";import{z as h}from"zod/mini";import{hostname as pt,tmpdir as mt}from"node:os";import{createInterface as ht}from"node:readline";import{chmodSync as gt,createReadStream as _t,existsSync as vt,lstatSync as yt,mkdirSync as bt,openAsBlob as xt,readFileSync as St,readdirSync as Ct,statSync as wt,unlinkSync as Tt,writeFileSync as Et}from"node:fs";import g from"node:path";import{createHash as Dt,randomUUID as Ot}from"node:crypto";import{link as kt,mkdir as At,readFile as jt,rename as Mt,rm as Nt,stat as Pt,writeFile as Ft}from"node:fs/promises";import{pipeline as It}from"node:stream/promises";import{channel as Lt}from"node:diagnostics_channel";import{proxify as Rt}from"trpc-cli/dist/proxify.js";const zt=new Set([`cursive`,`emoji`,`fantasy`,`fangsong`,`math`,`monospace`,`sans-serif`,`serif`,`system-ui`,`ui-monospace`,`ui-rounded`,`ui-sans-serif`,`ui-serif`]),Bt=/^-?[_a-z][-\w]*$/iu,Vt=/^var\(--[-\w]+\)$/iu,Ht=e=>zt.has(e.toLowerCase()),Ut=e=>e.replaceAll(/\\(?:([\da-f]{1,6})(?:\r\n|[\t\n\f\r ])?|(\r\n|[\n\r\f])|([^\da-f]))/giu,(e,t,n,r)=>{if(n!==void 0)return``;if(t===void 0)return r??``;let i=Number.parseInt(t,16);return String.fromCodePoint(i===0||i>1114111||i>=55296&&i<=57343?65533:i)}),Wt=e=>{let t=e.trim(),n=t.startsWith(`"`)&&t.endsWith(`"`)||t.startsWith(`'`)&&t.endsWith(`'`);return Ut(n?t.slice(1,-1):t)},Gt=e=>e.startsWith(`"`)&&Ht(Wt(e))?JSON.stringify(Wt(e)):Bt.test(e)||Vt.test(e)?e:JSON.stringify(e),Kt=e=>e===void 0?{}:{...e!==`auto`&&{direction:e},"unicode-bidi":e===`auto`?`plaintext`:`isolate`},qt={Inter:`Inter Variable`,"JetBrains Mono":`JetBrains Mono Variable`},Jt=e=>[...new Set([e.family,...Object.hasOwn(qt,e.family)?[qt[e.family]??e.family]:[],...e.fallbackFamilies])].map(e=>Gt(e)).join(`, `),Yt=e=>Object.entries({...e.variations,...e.weight!==void 0&&{wght:e.weight},...e.opticalSize?.mode===`fixed`&&{opsz:e.opticalSize.value}}).toSorted(([e],[t])=>e.localeCompare(t,`en`,{caseFirst:`upper`})).map(([e,t])=>`${JSON.stringify(e)} ${String(t)}`).join(`, `),Xt=e=>{let t=Object.entries(e??{}).toSorted(([e],[t])=>e.localeCompare(t,`en`)).map(([e,t])=>`${JSON.stringify(e)} ${String(t)}`).join(`, `);return t===``?`normal`:t},Zt=e=>e.mode===`normal`?`normal`:e.mode===`percent`?String(e.value/100):e.value;function Qt(e){return{...e.lineHeight!==void 0&&{"line-height":Zt(e.lineHeight)},...e.letterSpacing!==void 0&&{"letter-spacing":typeof e.letterSpacing==`number`?e.letterSpacing:`${String(e.letterSpacing.value/100)}em`}}}const $t=e=>e===void 0?`auto`:typeof e==`number`?e:e.mode===`font-default`?`from-font`:`${String(e.value)}%`,en=e=>({"text-decoration-line":e.line,"text-decoration-style":e.style,"text-decoration-color":e.color===void 0?`currentColor`:Ve(e.color),"text-decoration-thickness":$t(e.thickness),"text-underline-offset":$t(e.offset),"text-decoration-skip-ink":e.skipInk??`auto`}),tn=e=>`${JSON.stringify(e)}\n`,nn=e=>{if(e<1)throw RangeError(`a chunk has to be able to hold at least one character`);let t=``,n=[],r=!1,i=!1,a=()=>{let e={body:t,continues:r,eventCount:n.length-+!!r,firstEventMs:n.length===0?0:Math.min(...n),lastEventMs:n.length===0?0:Math.max(...n)};return r=!t.endsWith(`
3
+ `),t=``,n=r?[n.at(-1)??0]:[],e};return{pending:()=>t.length,add:r=>{let o=[],s=tn(r.event);for(n.push(r.atMs),i=!0;t.length+s.length>=e;){let n=e-t.length;t+=s.slice(0,n),s=s.slice(n),o.push(a())}return t+=s,o},drain:()=>!i||t.length>0?[a()]:[]}},rn=(e,t)=>{let n=nn(t);return[...e.flatMap(e=>n.add(e)),...n.drain()]},an=[`recording.start`,`recording.appendChunk`,`recording.complete`],on=e=>async t=>{let n=c.parse(await e.mutate(an[0],{sourceUrl:t.sourceUrl,viewport:t.viewport,pageTitle:t.pageTitle,audio:null})),r=n.upload;try{let i=rn(t.entries,8388608);for(let[t,a]of i.entries()){let i=new TextEncoder().encode(a.body),o=await e.upload({url:r.url,headers:r.headers,body:i});r=l.parse(await e.mutate(an[1],{recordingId:n.recordingId,index:t,firstEventMs:a.firstEventMs,lastEventMs:a.lastEventMs,eventCount:a.eventCount,continues:a.continues,bytes:i.byteLength,etag:o})).upload}let a=Math.max(0,...t.entries.map(e=>e.atMs));return ae.parse(await e.mutate(an[2],{recordingId:n.recordingId,durationMs:a,viewport:t.viewport,sourceUrl:t.sourceUrl,interrupted:!1,...t.canvasId!==void 0&&{canvasId:t.canvasId},audioChunkCount:0,hasRecoverableBytes:!1}))}catch{throw new s(`Recording ${n.recordingId} began, but not every chunk was committed.`,`Run 'enhance recording discard --recording-id ${n.recordingId}' to remove the incomplete attempt before retrying the fixture.`)}},sn=[`screen.create`,`screen.complete`],cn=e=>async t=>{let n=ce.parse(await e.mutate(sn[0],{clientToken:t.clientToken,provenance:t.provenance,route:t.route,pageTitle:t.pageTitle,viewport:t.viewport,bytes:t.body.byteLength}));try{let r=await e.upload({url:n.upload.url,headers:n.upload.headers,body:t.body}),a=i.parse(await e.mutate(sn[1],{screenId:n.screenId,etag:r}));return{screenId:a.screenId,clientToken:t.clientToken,route:t.route,title:t.pageTitle,viewport:t.viewport,atMs:t.provenance?.atMs??null,sourceRecordingId:t.provenance?.sourceRecordingId??null,assetBundle:null,download:null,storedBytes:a.storedBytes}}catch{throw new s(`Screen ${n.screenId} was reserved, but its upload did not complete.`,`Retry 'enhance fixture screen' with the same --client-token ${t.clientToken}.`)}},ln=[`organisation.create`,`canvas.create`,`screen.create`,`screen.complete`,`canvas.document.get`,`canvas.document.save`],un=(e,t)=>async n=>{let r=ve.parse(await e.mutate(ln[0],{name:n.organisationName})).organisation,i=se.parse(await e.mutate(ln[1],{title:n.canvasTitle,organisationId:r.id,sourceUrl:null}));try{let a=[];for(let e of n.screens)a.push(await t(e));let o=Ee.parse(await e.query(ln[4],{canvasId:i.id})),c=Te();for(let[e,t]of a.entries())c=je(c,{id:`fixture-screen-${String(e+1)}`,label:`Fixture screen ${String(e+1)}`,screenId:t.screenId,viewport:n.screens[e]?.viewport??{width:1440,height:900},at:{x:48+e*48,y:48+e*48}});let l=de.parse(await e.mutate(ln[5],{canvasId:i.id,baseVersion:o.version,document:c,screenIds:a.map(e=>e.screenId)}));if(l.outcome===`conflict`)throw new s(`World canvas ${i.id} was created, but another writer changed its document.`,`Read 'enhance canvas document get --canvas-id ${i.id}' before adding the screens.`);return{organisationId:r.id,canvasId:i.id,screenIds:a.map(e=>e.screenId),documentVersion:l.version}}catch(e){throw e instanceof s?e:new s(`Organisation ${r.id} and canvas ${i.id} exist, but the world is incomplete.`,`Inspect 'enhance canvas get --canvas-id ${i.id}' before retrying any missing steps.`)}},dn=async(e,t)=>{if(e!==void 0&&e!==``)return e.trim();if(p.stdin.isTTY)throw new u(`BAD_REQUEST`,`A token is required and interactive prompting is disabled.`,`Pass '--token <token>' or pipe one line to '${t}'.`);let n=ht({input:p.stdin,crlfDelay:1/0});for await(let e of n){n.close();let t=e.trim();if(t!==``)return t;break}throw new u(`BAD_REQUEST`,`A token is required.`,`Pass '--token <token>' or pipe one line to '${t}'.`)},fn=async e=>{if(e!==void 0)return e.trim();if(p.stdin.isTTY)return null;let t=ht({input:p.stdin,crlfDelay:1/0});for await(let e of t){t.close();let n=e.trim();return n===``?null:n}return null},pn=(e,t,n)=>{let r=e.command(`auth`).description(`Store and inspect the agent credential.`);r.command(`login`).description(`Authenticate in a browser, then store a revocable agent credential.`).option(`--token <token>`,`Use an existing agent token instead of browser authentication.`).option(`--no-open`,`Print the authorization URL without opening the browser.`).action(async e=>{let r=await fn(e.token);if(r!==null){n.result(await t.loginWithToken(r));return}n.result(await t.loginWithBrowser({label:`CLI on ${pt()}`.slice(0,120),openBrowser:e.open,onReady:e=>{n.result({status:`waiting_for_browser`,url:e})}}))}),r.command(`status`).description(`Resolve the stored token to its person, label, and expiry.`).action(async()=>{n.result(await t.status())}),r.command(`logout`).description(`Delete the local credential file; this does not revoke the server token.`).action(async()=>{n.result(await t.logout())})},mn=m.coerce.number().int().positive(),hn=m.coerce.number().positive(),gn=m.uuid(),_n=m.union([m.string(),m.number(),m.null()]),vn=m.record(m.string(),_n),yn=m.array(m.object({nodeId:m.string().min(1).max(200),textContent:m.string()})).min(1),bn=m.array(m.object({nodeId:m.string().min(1).max(200),name:m.string()})).min(1),xn=m.array(m.object({nodeIds:m.array(m.string().min(1).max(200)).min(1),styles:vn})).min(1),Sn=m.array(m.object({id:m.string().min(1).max(200),parentId:m.string().min(1).max(200).optional()})).min(1),Cn=m.array(m.union([m.object({nodeId:m.string().min(1).max(200),before:m.string().min(1).max(200)}),m.object({nodeId:m.string().min(1).max(200),after:m.string().min(1).max(200)}),m.object({nodeId:m.string().min(1).max(200),parentId:m.string().min(1).max(200),index:m.number().int().nonnegative().optional()})])).min(1),wn=m.array(m.string().min(1).max(200)).min(1),Tn=m.coerce.number().int().min(0),En=m.uuid().nullable(),Dn=(e,t,n)=>{let r=e.safeParse(t);if(r.success)return r.data;throw new u(`BAD_REQUEST`,`${n} is invalid.`,`Run the command with --help.`)},On=e=>Dn(mn,e,`--base-version`),kn=(e,t,n)=>{let r=En.safeParse(t??null);if(!r.success)throw new u(`BAD_REQUEST`,`--client-token must be a UUID.`,`Mint one UUID and reuse it only when retrying the exact same command.`);e.mutationKey.select(r.data,n)},An=(e,t)=>e.mutationKey.current(`canvas.applyOperations`,{purpose:t}),jn=async(e,t,n,r)=>{kn(e,t.clientToken,!1);let i=d(t.canvas),a=On(t.baseVersion);return ee(i)&&Xe(i,await Ye(e,i.canvasId,a),r),We(e.remote).execute({canvasId:i.canvasId,mutationId:An(e,n),baseVersion:a,operations:[...r]})},Mn=async(e,t,n,r)=>{kn(e,t.clientToken,!1);let i=d(t.canvas);return $e(e.remote).execute({...i,baseVersion:On(t.baseVersion),mutationId:An(e,`canvas.edit`),edits:n,...r!==void 0&&{idPrefix:r}})},Nn=(e,t)=>{if(!e.startsWith(`@`))return e;let n=e.slice(1);if(n===``)throw new u(`BAD_REQUEST`,`${t} @ must name a file.`,`Pass ${t} @/absolute/path/to/file or an inline value.`);let r=g.resolve(n);try{if(!wt(r).isFile())throw Error(`not a regular file`);return St(r,`utf8`)}catch{throw new u(`BAD_REQUEST`,`Could not read the file at ${r}.`,`Use a readable regular UTF-8 file.`)}},Pn=m.array(Me).min(1),Fn=e=>{try{return JSON.parse(Nn(e,`--operations`))}catch(e){throw e instanceof u?e:new u(`BAD_REQUEST`,`--operations must be one valid JSON array.`,`Pass inline JSON or @/absolute/path/layout.json; run 'enhance canvas apply --help' for examples.`)}},In=e=>{let t=Fn(e),n=Pn.safeParse(t);if(!n.success){let e=n.error.issues[0];throw new u(`BAD_REQUEST`,`The canvas operation batch is invalid${e===void 0||e.path.length===0?``:` at ${e.path.join(`.`)}`}.`,`Correct the named operation; run 'enhance canvas apply --help' for the supported vocabulary.`)}return n.data},Ln=m.coerce.number().int().positive(),Rn=e=>{let t=Ln.safeParse(e);if(t.success)return t.data;throw new u(`BAD_REQUEST`,`--base-version is invalid.`,`Run 'enhance canvas apply --help'.`)},zn=(e,t)=>{let n=m.uuid().nullable().safeParse(t??null);if(!n.success)throw new u(`BAD_REQUEST`,`--client-token must be a UUID.`,`Mint one UUID and reuse it only when retrying this exact operation batch.`);return e.mutationKey.select(n.data,!1),e.mutationKey.current(`canvas.applyOperations`,{})},Bn=(e,t)=>{e.command(`apply`).description(`Apply an atomic canvas edit batch and return its affected bounds.`).summary(`Apply edits and return affected bounds.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID to edit.`).requiredOption(`--base-version <integer>`,`Exact version returned by canvas inspect or tree.`).requiredOption(`--operations <json-or-@path>`,`JSON operation array inline, or @path to a JSON file.`).option(`--client-token <uuid>`,`Stable UUID to reuse only when retrying this exact batch.`).addHelpText(`after`,[``,`Supported operations: insertNode, insertText, insertPrototype, setText, editText, setBox, setLabel, setVisibility, setLocked, setConstraints, setStyles, setAppearance, setLayout, patchTypography, setTypography, patchAdditionalStyles, setAdditionalStyles, setProps, setParentage, move, remove.`,`Use editText for revision-aware character or range changes. setText replaces the whole text and is rejected if it conflicts with a newer text edit.`,`Example:`,` enhance canvas apply --canvas <url-or-id> --base-version 3 --operations '[{"op":"insertText","nodeId":"txt_summary","parentId":"root","text":"Checkout needs an address.","box":{"x":120,"y":594,"width":720,"height":80},"styles":{"font-size":24}}]'`].join(`
4
+ `)).action(async e=>{zn(t,e.clientToken);let n=d(e.canvas),r=Rn(e.baseVersion),i=In(e.operations);ee(n)&&Xe(n,await Ye(t,n.canvasId,r),i);let a=await t.invocation.invoke({capability:f(t.catalog(),`canvas.apply`),arguments:{canvasId:n.canvasId,baseVersion:r,operations:[...i]},clientToken:e.clientToken??null});t.output.result(a)})},Vn=e=>{try{return JSON.parse(e)}catch{return}},Hn=e=>{if(e===void 0)return null;let t=Se.safeParse(Vn(e));if(t.success)return t.data;throw new u(`BAD_REQUEST`,`--bounds must be a positive world rectangle.`,`Pass JSON with x, y, width and height.`)},Un=e=>e===void 0?[]:e.split(`,`).map(e=>e.trim()).filter(e=>e!==``).slice(0,100),Wn=(e,t)=>{e.command(`begin`).description(`Start visible agent activity.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID.`).requiredOption(`--phase <phase>`,`reading, writing, creating, deleting, or rendering.`).option(`--node-ids <ids>`,`Comma-separated stable node ids.`).option(`--bounds <json>`,`Optional world rectangle for not-yet-created content.`).action(async e=>{let n=oe.safeParse(e.phase);if(!n.success)throw new u(`BAD_REQUEST`,`--phase is invalid.`,`Use reading, writing, creating, deleting, or rendering.`);let i=be(e.canvas),a=r.parse(await t.remote.mutate(`canvas.realtime.activity.begin`,{canvasId:i,phase:n.data,nodeIds:Un(e.nodeIds),bounds:Hn(e.bounds)}));t.output.result({...a,next:[`enhance canvas work update --canvas ${i} --activity-id ${a.activityId} --phase ${n.data}`,`enhance canvas finish-working-on-nodes --canvas ${i} --activity-id ${a.activityId}`]})})},Gn=(e,t)=>{e.command(`update`).description(`Move visible agent activity.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID.`).requiredOption(`--activity-id <uuid>`,`Lease id returned by work begin.`).requiredOption(`--phase <phase>`,`Current agent phase.`).option(`--node-ids <ids>`,`Comma-separated current stable node ids.`).option(`--bounds <json>`,`Optional current world rectangle.`).action(async e=>{t.output.result(r.parse(await t.remote.mutate(`canvas.realtime.activity.renew`,{canvasId:be(e.canvas),activityId:gn.parse(e.activityId),phase:oe.parse(e.phase),nodeIds:Un(e.nodeIds),bounds:Hn(e.bounds)})))})},Kn=(e,t)=>{e.command(`finish-working-on-nodes`).description(`End visible agent activity.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID.`).requiredOption(`--activity-id <uuid>`,`Lease id returned by canvas work begin.`).action(async e=>{if(!await at(t.remote).finish(be(e.canvas),gn.parse(e.activityId)))throw new u(`NOT_FOUND`,`The activity could not be finished.`,`It may already have expired; run canvas work begin for new work.`);t.output.result({ended:!0,activityId:e.activityId})})},qn=(e,t)=>{let n=e.command(`work`).description(`Manage visible agent activity.`);Wn(n,t),Gn(n,t),Kn(e,t)},_=(e,t,n)=>{let r=(()=>{try{return JSON.parse(Nn(e,n))}catch(e){throw e instanceof u?e:new u(`BAD_REQUEST`,`${n} must be valid JSON.`,`Pass inline JSON or @/absolute/path/to/input.json; run the command with --help.`)}})(),i=t.safeParse(r);if(i.success)return i.data;let a=i.error.issues[0];throw new u(`BAD_REQUEST`,`${n} is invalid${a===void 0||a.path.length===0?``:` at ${a.path.join(`.`)}`}.`,a?.message??`Correct the JSON shape and retry.`)},Jn=(e,t)=>{e.command(`set-text-content`).description(`Set Text node values.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID to edit.`).requiredOption(`--base-version <integer>`,`Exact current canvas version.`).requiredOption(`--updates <json-or-@path>`,`Array of {nodeId,textContent} updates.`).option(`--client-token <uuid>`,`Stable UUID for retrying this exact batch.`).action(async e=>{let n=_(e.updates,yn,`--updates`).map(e=>({kind:`set_text`,nodeId:e.nodeId,text:e.textContent}));t.output.result(await Mn(t,e,n))})},Yn=(e,t)=>{e.command(`rename-nodes`).description(`Rename layers.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID to edit.`).requiredOption(`--base-version <integer>`,`Exact current canvas version.`).requiredOption(`--updates <json-or-@path>`,`Array of {nodeId,name} updates.`).option(`--client-token <uuid>`,`Stable UUID for retrying this exact batch.`).action(async e=>{let n=_(e.updates,bn,`--updates`).map(e=>({kind:`rename`,nodeId:e.nodeId,name:e.name}));t.output.result(await Mn(t,e,n))})},Xn=(e,t)=>{e.command(`delete-nodes`).description(`Delete node subtrees.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID to edit.`).requiredOption(`--base-version <integer>`,`Exact current canvas version.`).requiredOption(`--node-ids <json-or-@path>`,`JSON array of stable node ids.`).option(`--client-token <uuid>`,`Stable UUID for retrying this exact batch.`).action(async e=>{let n=_(e.nodeIds,wn,`--node-ids`);t.output.result(await jn(t,e,`delete-nodes`,n.map(e=>({op:`remove`,nodeId:e}))))})},Zn=(e,t)=>{e.command(`update-styles`).description(`Update visual and layout styles.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID to edit.`).requiredOption(`--base-version <integer>`,`Exact current canvas version.`).requiredOption(`--updates <json-or-@path>`,`Array of {nodeIds,styles} updates.`).option(`--client-token <uuid>`,`Stable UUID for retrying this exact batch.`).action(async e=>{let n=_(e.updates,xn,`--updates`);t.output.result(await Mn(t,e,n.map(e=>({kind:`set_styles`,...e}))))})},Qn=(e,t)=>{e.command(`edit`).description(`Apply an atomic canvas edit batch.`).requiredOption(`--canvas <url-or-id>`,`Canvas or selection URL, or canvas UUID.`).requiredOption(`--base-version <integer>`,`Canvas version to edit; use the previous write result to continue.`).requiredOption(`--edits <json-or-@path>`,`Array of edits with kind set_text, set_styles, rename, duplicate or move.`).option(`--client-token <uuid>`,`Stable UUID for retrying this exact batch.`).addHelpText(`after`,`
5
5
  Edit shapes (combine related edits in one array):
6
6
  {"kind":"set_text","nodeId":"title","text":"Your day"}
7
7
  {"kind":"set_styles","nodeIds":["button"],"styles":{"background":"#0f766e"}}
@@ -10,13 +10,13 @@ Edit shapes (combine related edits in one array):
10
10
  {"kind":"move","nodeId":"card","destination":{"kind":"before","nodeId":"other"}}
11
11
  Move destinations also accept {"kind":"after","nodeId":"other"} or {"kind":"parent","parentId":"screen","index":0}.
12
12
  Use input-version IDs. Duplicate mappings are returned for a subsequent call.
13
- `).action(async e=>{let n=g(e.edits,Re,`--edits`);t.output.result(await Mn(t,e,n))})},$n=(e,t)=>{Qn(e,t),Jn(e,t),Yn(e,t),Xn(e,t),Zn(e,t)},er=new Set([`flex-grow`,`flex-shrink`,`order`,`aspect-ratio`]),tr=e=>e===`start`||e===`end`?`flex-${e}`:e,nr=e=>{let t=`${String(e.ratio*100)}%`,n=e.offset??0;return n===0?t:`calc(${t} ${n<0?`-`:`+`} ${String(Math.abs(n))}px)`},rr=(e,t)=>{let n=e[t],r=e[t===`min`?`minParent`:`maxParent`];if(r===void 0)return n;let i=nr(r);return n===void 0?i:`${t===`min`?`max`:`min`}(${String(n)}px, ${i})`},ir=(e,t,n)=>{if(t===void 0)return{};if(t.mode===`fixed`)return{[e]:t.value};let r={};for(let n of[`min`,`max`]){let i=rr(t,n);i!==void 0&&(r[`${n}-${e}`]=i)}if(t.mode===`hug`)return{[e]:`max-content`,...r};let i=t.offset??0,a=i===0?`100%`:`calc(100% + ${String(i)}px)`;return{[e]:n&&i===0?`auto`:a,...r}},ar=(e,t)=>{let n=e.box;if(n===void 0)return{};let r=Oe(e),i=e.layout?.position??ge(e,`position`),a=i===void 0||[`absolute`,`fixed`].includes(i),o=e=>(e===`horizontal`?[`left`,`right`,`inset`,`inset-inline`,`inset-inline-start`,`inset-inline-end`]:[`top`,`bottom`,`inset`,`inset-block`,`inset-block-start`,`inset-block-end`]).some(e=>r[e]!==void 0),s=n=>Ce(e,n,t).some(t=>r[t]!==void 0||e.additionalStyles?.declarations.some(e=>e.property.toLowerCase()===t)===!0);return{...r[`box-sizing`]===void 0&&{"box-sizing":`border-box`},...a&&r.position===void 0&&{position:`absolute`},...a&&!o(`horizontal`)&&{left:n.x},...a&&!o(`vertical`)&&{top:n.y},...a&&e.layout?.horizontal===void 0&&!s(`horizontal`)&&{width:n.width},...a&&e.layout?.vertical===void 0&&!s(`vertical`)&&{height:n.height}}},or=e=>{if(e.gridColumns!==void 0)return`repeat(${String(e.gridColumns)}, minmax(0, 1fr))`;if(e.gridAutoRepeat!==void 0)return`repeat(${e.gridAutoRepeat.mode}, minmax(${String(e.gridAutoRepeat.minimum)}px, 1fr))`},sr=e=>{let t=e.layout,n=t?.container,r=t?.clipContent===void 0?{}:{overflow:t.clipContent?`hidden`:`visible`};if(n===void 0)return r;let i=or(n),a=n.rowGap??n.gap,o=n.columnGap??n.gap;return{...r,...ge(e,`display`)===void 0&&{display:i===void 0?`flex`:`grid`},...i!==void 0&&{"grid-template-columns":i},...n.direction!==void 0&&{"flex-direction":n.direction},...n.wrap!==void 0&&{"flex-wrap":n.wrap},...n.alignItems!==void 0&&{"align-items":tr(n.alignItems)},...n.alignContent!==void 0&&{"align-content":tr(n.alignContent)},...n.justifyContent!==void 0&&{"justify-content":tr(n.justifyContent)},...a!==void 0&&{"row-gap":a},...o!==void 0&&{"column-gap":o},...Object.fromEntries(Object.entries(n.padding??{}).map(([e,t])=>[`padding-${e}`,t]))}},cr=(e,t)=>{let n=e.layout??{},r=n=>t!==void 0&&ge(e,n)===void 0,i=n.flexBasis??(t?.mode===`fill`?0:`auto`);return{...(r(`flex-basis`)||n.flexBasis!==void 0)&&{"flex-basis":typeof i==`object`?nr(i):i},...(r(`flex-grow`)||n.flexGrow!==void 0)&&{"flex-grow":n.flexGrow??+(t?.mode===`fill`)},...(r(`flex-shrink`)||n.flexShrink!==void 0)&&{"flex-shrink":n.flexShrink??+(t?.mode===`fill`)},...n.flowOffset!==void 0&&{left:n.flowOffset.x,top:n.flowOffset.y},...n.order!==void 0&&{order:n.order},...Object.fromEntries(Object.entries(n.margin??{}).map(([e,t])=>[`margin-${e}`,t]))}},lr=e=>{let t=[...e.rotation===void 0||e.rotation===0?[]:[`rotate(${String(e.rotation)}deg)`],...e.flipHorizontal===!0?[`scaleX(-1)`]:[],...e.flipVertical===!0?[`scaleY(-1)`]:[]];return t.length===0?{}:{transform:t.join(` `)}},ur=(e,t)=>e.alignSelf===void 0||e.alignSelf===`auto`?t?.mode===`fill`?`stretch`:void 0:tr(e.alignSelf),dr=(e,t)=>{if(t===void 0)return{};let n=e.layout?.[t],r=t===`horizontal`?`min-width`:`min-height`;return n?.mode!==`fill`||n.min!==void 0||n.minParent!==void 0||Oe(e)[r]!==void 0?{}:{[r]:0}},fr=(e,t)=>{let n=e.layout;if(n===void 0)return{};let r=t?.relationships[e.id]?.parentId,i=ye(r===void 0?void 0:t?.nodes[r],t),a=n.position??ge(e,`position`),o=a===`flow`||a!==`absolute`&&a!==`fixed`&&(a!==void 0||e.box===void 0),s=i===`horizontal`?n.horizontal:n.vertical,c=i===`horizontal`?n.vertical:n.horizontal,l=ur(n,c);return{...n.position!==void 0&&{position:o?`relative`:`absolute`},...ir(`width`,n.horizontal,o&&(i===`horizontal`||l===`stretch`)),...ir(`height`,n.vertical,o&&(i===`vertical`||l===`stretch`)),...o&&i!==void 0&&cr(e,s),...o&&l!==void 0&&{"align-self":l},...o&&dr(e,i),...l===`stretch`&&c?.mode===`hug`&&i!==void 0&&{[i===`horizontal`?`height`:`width`]:`auto`},...n.aspectRatio!==void 0&&{"aspect-ratio":n.aspectRatio},...lr(n)}},pr=(e,t)=>Object.fromEntries(Object.entries({...ar(e,t),..._e(e,{...fr(e,t),...sr(e)})}).map(([e,t])=>[e,typeof t==`number`&&!er.has(e)?`${String(t)}px`:t])),mr=e=>e.space===`display-p3`?`color(display-p3 ${String(e.red)} ${String(e.green)} ${String(e.blue)} / ${String(e.alpha)})`:`rgba(${String(Math.round(e.red*255))}, ${String(Math.round(e.green*255))}, ${String(Math.round(e.blue*255))}, ${String(e.alpha)})`,hr=e=>{if(!e.visible)return null;if(e.kind===`solid`)return mr(e.color);if(e.kind===`image`)return`url(${JSON.stringify(e.assetId)})`;if(e.kind===`angular-gradient`||e.kind===`diamond-gradient`){let t=e.kind===`angular-gradient`?ot(e):Be(e);return`url("data:image/svg+xml,${encodeURIComponent(t)}") 0 0 / 100% 100% no-repeat`}let t=e.stops.map(e=>`${mr(e.color)} ${String(e.position*100)}%`).join(`, `);return e.kind===`linear-gradient`?e.transform===void 0?`linear-gradient(${String(e.angle)}deg, ${t})`:`url("data:image/svg+xml,${encodeURIComponent(st({...e,transform:e.transform}))}") 0 0 / 100% 100% no-repeat`:e.transform===void 0?`radial-gradient(at ${String(e.center.x*100)}% ${String(e.center.y*100)}%, ${t})`:`url("data:image/svg+xml,${encodeURIComponent(Ge(e))}") 0 0 / 100% 100% no-repeat`},gr=e=>e?.flatMap(e=>{let t=hr(e);return t===null?[]:[t]})??[],_r=e=>{let t=e.filter(e=>e.visible);return t.length===1&&t[0]!==void 0?hr(t[0]):null},vr=e=>{if(e?.visible!==!0)return{};let t=_r(e.paints);return{"border-width":[e.width.top,e.width.right,e.width.bottom,e.width.left].map(e=>`${String(e)}px`).join(` `),"border-style":e.style,...t!==null&&{"border-color":t}}},yr=e=>{if(e?.visible!==!0)return{};let t=_r(e.paints);return{"outline-width":`${String(e.width)}px`,"outline-offset":`${String(e.offset)}px`,"outline-style":e.style,...t!==null&&{"outline-color":t}}},br=e=>{let t=e.shadows?.filter(e=>e.visible).map(e=>`${e.kind===`inner`?`inset `:``}${String(e.offsetX)}px ${String(e.offsetY)}px ${String(e.blur)}px ${String(e.spread)}px ${mr(e.color)}`),n=He(e.filters??[]),r=He(e.backdropFilters??[]);return{...t!==void 0&&t.length>0&&{"box-shadow":t.join(`, `)},...n!==``&&{filter:n},...r!==``&&{"backdrop-filter":r}}},xr=e=>{if(e===void 0)return{};let t=gr(e.fills),n=e.radius;return{...e.opacity!==void 0&&{opacity:e.opacity},...e.blendMode!==void 0&&{"mix-blend-mode":e.blendMode},...t.length>0&&{background:t.join(`, `)},...n!==void 0&&{"border-radius":[n.topLeft,n.topRight,n.bottomRight,n.bottomLeft].map(e=>`${String(e)}px`).join(` `)},...vr(e.border),...yr(e.outline),...br(e)}},Sr=(e,t)=>{let n={},r=Oe(e),i=String(r[`font-family`]??`sans-serif`).split(`,`).map(e=>e.trim().replaceAll(/^(?:"|')|(?:"|')$/gu,``));if(t.family!==void 0||t.fallbackFamilies!==void 0){let[e=`sans-serif`,...r]=i;n[`font-family`]=Jt({family:t.family??e,fallbackFamilies:t.fallbackFamilies??r})}return n},Cr=e=>{let t={};return e.size!==void 0&&(t[`font-size`]=`${String(e.size)}px`),e.weight!==void 0&&(t[`font-weight`]=e.weight),e.style!==void 0&&(t[`font-style`]=e.style),(e.variations!==void 0||e.opticalSize!==void 0)&&(t[`font-variation-settings`]=Yt({...e.weight!==void 0&&{weight:e.weight},...e.variations!==void 0&&{variations:e.variations},...e.opticalSize!==void 0&&{opticalSize:e.opticalSize}})),e.opticalSize!==void 0&&(t[`font-optical-sizing`]=e.opticalSize.mode===`auto`?`auto`:`none`),e.features!==void 0&&(t[`font-feature-settings`]=Xt(e.features)),Object.assign(t,Qt(e)),t},wr=e=>{let t={};return e.align!==void 0&&(t[`text-align`]=e.align),e.transform!==void 0&&(t[`text-transform`]=e.transform),Object.assign(t,Kt(e.direction)),e.paragraphIndent!==void 0&&(t[`text-indent`]=`${String(e.paragraphIndent)}px each-line`),e.hangingPunctuation!==void 0&&(t[`hanging-punctuation`]=`none`),t},Tr=e=>{let t={};return e.verticalAlign!==void 0&&e.verticalAlign!==`top`&&(t.display=`flex`,t[`flex-direction`]=`column`,t[`justify-content`]=e.verticalAlign===`middle`?`center`:`flex-end`),e.verticalTrim!==void 0&&(t[`text-box-trim`]=e.verticalTrim===`cap-height`?`trim-both`:`none`,t[`text-box-edge`]=`cap alphabetic`),t},Er=e=>{let t={};return e.decoration!==void 0&&Object.assign(t,en(e.decoration)),e.wrapping!==void 0&&(t[`white-space`]=e.wrapping===`wrap`?`normal`:e.wrapping),e.wrapStyle!==void 0&&(t[`text-wrap-style`]=e.wrapStyle),t},Dr=e=>{let t=e.typography??{};return{...Sr(e,t),...Cr(t),...wr(t),...Tr(t),...Er(t)}},Or=(e,t)=>({...Object.fromEntries(Object.entries(Oe(e)).filter(([t])=>e.layout?.clipContent===void 0||![`overflow`,`overflow-x`,`overflow-y`].includes(t))),...Dr(e),...xr(e.appearance),...pr(e,t),...e.visible===!1&&{display:`none`}}),kr=(e,t)=>Object.entries(e.relationships).filter(([,e])=>e.parentId===t).toSorted(([e,t],[n,r])=>t.sortKey===r.sortKey?e.localeCompare(n):Ve(t.sortKey,r.sortKey)).map(([e])=>e),Ar=(e,t)=>{let n=e.nodes[t];if(n===void 0)throw new u(`NOT_FOUND`,`Canvas node ${t} does not exist.`,`Run canvas tree and use a current stable node id.`);return n},jr=(e,t)=>{let n=e.props?.[t];return typeof n==`string`?n:``},Mr=e=>`{${JSON.stringify(e)}}`,_=(e,t)=>e===void 0?[]:[t(e)],Nr=(e,t)=>{let n=` `.repeat(t),r=`${n}${Mr(e.text)}`;return e.sourcePath===void 0?r:`${n}<span data-source-path=${JSON.stringify(e.sourcePath)}>${Mr(e.text)}</span>`},Pr=(e,t)=>{let n=` `.repeat(t),r=_(e.sourcePath,e=>`data-source-path=${JSON.stringify(e)}`).join(``);return`${n}<br data-text-break="${e.soft===!0?`line`:`paragraph`}"${r===``?``:` ${r}`} />`},Fr=(e,t)=>{let n=` `.repeat(t),r=[..._(e.sourcePath,e=>`data-source-path=${JSON.stringify(e)}`),..._(e.href,e=>`href={${JSON.stringify(e)}}`),..._(e.href,()=>`rel="noreferrer" target="_blank"`),..._(Object.keys(e.styles).length===0?void 0:e.styles,e=>`style={${JSON.stringify(e)}}`),..._(e.textStyle,e=>`data-text-style={${JSON.stringify(e)}}`),..._(e.paragraph,e=>`data-text-paragraph={${JSON.stringify(e)}}`),..._(e.fills,e=>`data-text-fills={${JSON.stringify(e)}}`),..._(e.paragraphSpacing,e=>`data-paragraph-spacing=${JSON.stringify(e)}`),..._(e.paragraphIndent,e=>`data-paragraph-indent=${JSON.stringify(e)}`),..._(e.listSpacing,e=>`data-list-spacing=${JSON.stringify(e)}`),..._(e.hangingPunctuation,e=>`data-hanging-punctuation=${JSON.stringify(e)}`),..._(e.verticalTrim,e=>`data-vertical-trim=${JSON.stringify(e)}`),..._(e.wrapStyle,e=>`data-wrap-style=${JSON.stringify(e)}`)],i=e.href===void 0?`span`:`a`,a=e.children.map(e=>Ir(e,t+1));return[`${n}<${i}${r.length===0?``:` ${r.join(` `)}`}>`,...a,`${n}</${i}>`].join(`
14
- `)},Ir=(e,t)=>e.kind===`text`?Nr(e,t):e.kind===`break`?Pr(e,t):Fr(e,t),Lr=(e,t)=>Le(e).map(e=>Ir(e,t)).join(`
13
+ `).action(async e=>{let n=_(e.edits,o,`--edits`);t.output.result(await Mn(t,e,n))})},$n=(e,t)=>{Qn(e,t),Jn(e,t),Yn(e,t),Xn(e,t),Zn(e,t)},er=new Set([`flex-grow`,`flex-shrink`,`order`,`aspect-ratio`]),tr=e=>e===`start`||e===`end`?`flex-${e}`:e,nr=e=>{let t=`${String(e.ratio*100)}%`,n=e.offset??0;return n===0?t:`calc(${t} ${n<0?`-`:`+`} ${String(Math.abs(n))}px)`},rr=(e,t)=>{let n=e[t],r=e[t===`min`?`minParent`:`maxParent`];if(r===void 0)return n;let i=nr(r);return n===void 0?i:`${t===`min`?`max`:`min`}(${String(n)}px, ${i})`},ir=(e,t,n)=>{if(t===void 0)return{};if(t.mode===`fixed`)return{[e]:t.value};let r={};for(let n of[`min`,`max`]){let i=rr(t,n);i!==void 0&&(r[`${n}-${e}`]=i)}if(t.mode===`hug`)return{[e]:`max-content`,...r};let i=t.offset??0,a=i===0?`100%`:`calc(100% + ${String(i)}px)`;return{[e]:n&&i===0?`auto`:a,...r}},ar=(e,t)=>{let n=e.box;if(n===void 0)return{};let r=re(e),i=e.layout?.position??Ie(e,`position`),o=i===void 0||[`absolute`,`fixed`].includes(i),s=e=>(e===`horizontal`?[`left`,`right`,`inset`,`inset-inline`,`inset-inline-start`,`inset-inline-end`]:[`top`,`bottom`,`inset`,`inset-block`,`inset-block-start`,`inset-block-end`]).some(e=>r[e]!==void 0),c=n=>a(e,n,t).some(t=>r[t]!==void 0||e.additionalStyles?.declarations.some(e=>e.property.toLowerCase()===t)===!0);return{...r[`box-sizing`]===void 0&&{"box-sizing":`border-box`},...o&&r.position===void 0&&{position:`absolute`},...o&&!s(`horizontal`)&&{left:n.x},...o&&!s(`vertical`)&&{top:n.y},...o&&e.layout?.horizontal===void 0&&!c(`horizontal`)&&{width:n.width},...o&&e.layout?.vertical===void 0&&!c(`vertical`)&&{height:n.height}}},or=e=>{if(e.gridColumns!==void 0)return`repeat(${String(e.gridColumns)}, minmax(0, 1fr))`;if(e.gridAutoRepeat!==void 0)return`repeat(${e.gridAutoRepeat.mode}, minmax(${String(e.gridAutoRepeat.minimum)}px, 1fr))`},sr=e=>{let t=e.layout,n=t?.container,r=t?.clipContent===void 0?{}:{overflow:t.clipContent?`hidden`:`visible`};if(n===void 0)return r;let i=or(n),a=n.rowGap??n.gap,o=n.columnGap??n.gap;return{...r,...Ie(e,`display`)===void 0&&{display:i===void 0?`flex`:`grid`},...i!==void 0&&{"grid-template-columns":i},...n.direction!==void 0&&{"flex-direction":n.direction},...n.wrap!==void 0&&{"flex-wrap":n.wrap},...n.alignItems!==void 0&&{"align-items":tr(n.alignItems)},...n.alignContent!==void 0&&{"align-content":tr(n.alignContent)},...n.justifyContent!==void 0&&{"justify-content":tr(n.justifyContent)},...a!==void 0&&{"row-gap":a},...o!==void 0&&{"column-gap":o},...Object.fromEntries(Object.entries(n.padding??{}).map(([e,t])=>[`padding-${e}`,t]))}},cr=(e,t)=>{let n=e.layout??{},r=n=>t!==void 0&&Ie(e,n)===void 0,i=n.flexBasis??(t?.mode===`fill`?0:`auto`);return{...(r(`flex-basis`)||n.flexBasis!==void 0)&&{"flex-basis":typeof i==`object`?nr(i):i},...(r(`flex-grow`)||n.flexGrow!==void 0)&&{"flex-grow":n.flexGrow??+(t?.mode===`fill`)},...(r(`flex-shrink`)||n.flexShrink!==void 0)&&{"flex-shrink":n.flexShrink??+(t?.mode===`fill`)},...n.flowOffset!==void 0&&{left:n.flowOffset.x,top:n.flowOffset.y},...n.order!==void 0&&{order:n.order},...Object.fromEntries(Object.entries(n.margin??{}).map(([e,t])=>[`margin-${e}`,t]))}},lr=e=>{let t=[...e.rotation===void 0||e.rotation===0?[]:[`rotate(${String(e.rotation)}deg)`],...e.flipHorizontal===!0?[`scaleX(-1)`]:[],...e.flipVertical===!0?[`scaleY(-1)`]:[]];return t.length===0?{}:{transform:t.join(` `)}},ur=(e,t)=>e.alignSelf===void 0||e.alignSelf===`auto`?t?.mode===`fill`?`stretch`:void 0:tr(e.alignSelf),dr=(e,t)=>{if(t===void 0)return{};let n=e.layout?.[t],r=t===`horizontal`?`min-width`:`min-height`;return n?.mode!==`fill`||n.min!==void 0||n.minParent!==void 0||re(e)[r]!==void 0?{}:{[r]:0}},fr=(e,t)=>{let n=e.layout;if(n===void 0)return{};let r=t?.relationships[e.id]?.parentId,i=Fe(r===void 0?void 0:t?.nodes[r],t),a=n.position??Ie(e,`position`),o=a===`flow`||a!==`absolute`&&a!==`fixed`&&(a!==void 0||e.box===void 0),s=i===`horizontal`?n.horizontal:n.vertical,c=i===`horizontal`?n.vertical:n.horizontal,l=ur(n,c);return{...n.position!==void 0&&{position:o?`relative`:`absolute`},...ir(`width`,n.horizontal,o&&(i===`horizontal`||l===`stretch`)),...ir(`height`,n.vertical,o&&(i===`vertical`||l===`stretch`)),...o&&i!==void 0&&cr(e,s),...o&&l!==void 0&&{"align-self":l},...o&&dr(e,i),...l===`stretch`&&c?.mode===`hug`&&i!==void 0&&{[i===`horizontal`?`height`:`width`]:`auto`},...n.aspectRatio!==void 0&&{"aspect-ratio":n.aspectRatio},...lr(n)}},pr=(e,t)=>Object.fromEntries(Object.entries({...ar(e,t),...ie(e,{...fr(e,t),...sr(e)})}).map(([e,t])=>[e,typeof t==`number`&&!er.has(e)?`${String(t)}px`:t])),mr=e=>e.space===`display-p3`?`color(display-p3 ${String(e.red)} ${String(e.green)} ${String(e.blue)} / ${String(e.alpha)})`:`rgba(${String(Math.round(e.red*255))}, ${String(Math.round(e.green*255))}, ${String(Math.round(e.blue*255))}, ${String(e.alpha)})`,hr=e=>{if(!e.visible)return null;if(e.kind===`solid`)return mr(e.color);if(e.kind===`image`)return`url(${JSON.stringify(e.assetId)})`;if(e.kind===`angular-gradient`||e.kind===`diamond-gradient`){let t=e.kind===`angular-gradient`?Ue(e):ot(e);return`url("data:image/svg+xml,${encodeURIComponent(t)}") 0 0 / 100% 100% no-repeat`}let t=e.stops.map(e=>`${mr(e.color)} ${String(e.position*100)}%`).join(`, `);return e.kind===`linear-gradient`?e.transform===void 0?`linear-gradient(${String(e.angle)}deg, ${t})`:`url("data:image/svg+xml,${encodeURIComponent(He({...e,transform:e.transform}))}") 0 0 / 100% 100% no-repeat`:e.transform===void 0?`radial-gradient(at ${String(e.center.x*100)}% ${String(e.center.y*100)}%, ${t})`:`url("data:image/svg+xml,${encodeURIComponent(st(e))}") 0 0 / 100% 100% no-repeat`},gr=e=>e?.flatMap(e=>{let t=hr(e);return t===null?[]:[t]})??[],_r=e=>{let t=e.filter(e=>e.visible);return t.length===1&&t[0]!==void 0?hr(t[0]):null},vr=e=>{if(e?.visible!==!0)return{};let t=_r(e.paints);return{"border-width":[e.width.top,e.width.right,e.width.bottom,e.width.left].map(e=>`${String(e)}px`).join(` `),"border-style":e.style,...t!==null&&{"border-color":t}}},yr=e=>{if(e?.visible!==!0)return{};let t=_r(e.paints);return{"outline-width":`${String(e.width)}px`,"outline-offset":`${String(e.offset)}px`,"outline-style":e.style,...t!==null&&{"outline-color":t}}},br=e=>{let t=e.shadows?.filter(e=>e.visible).map(e=>`${e.kind===`inner`?`inset `:``}${String(e.offsetX)}px ${String(e.offsetY)}px ${String(e.blur)}px ${String(e.spread)}px ${mr(e.color)}`),n=ze(e.filters??[]),r=ze(e.backdropFilters??[]);return{...t!==void 0&&t.length>0&&{"box-shadow":t.join(`, `)},...n!==``&&{filter:n},...r!==``&&{"backdrop-filter":r}}},xr=e=>{if(e===void 0)return{};let t=gr(e.fills),n=e.radius;return{...e.opacity!==void 0&&{opacity:e.opacity},...e.blendMode!==void 0&&{"mix-blend-mode":e.blendMode},...t.length>0&&{background:t.join(`, `)},...n!==void 0&&{"border-radius":[n.topLeft,n.topRight,n.bottomRight,n.bottomLeft].map(e=>`${String(e)}px`).join(` `)},...vr(e.border),...yr(e.outline),...br(e)}},Sr=(e,t)=>{let n={},r=re(e),i=String(r[`font-family`]??`sans-serif`).split(`,`).map(e=>e.trim().replaceAll(/^(?:"|')|(?:"|')$/gu,``));if(t.family!==void 0||t.fallbackFamilies!==void 0){let[e=`sans-serif`,...r]=i;n[`font-family`]=Jt({family:t.family??e,fallbackFamilies:t.fallbackFamilies??r})}return n},Cr=e=>{let t={};return e.size!==void 0&&(t[`font-size`]=`${String(e.size)}px`),e.weight!==void 0&&(t[`font-weight`]=e.weight),e.style!==void 0&&(t[`font-style`]=e.style),(e.variations!==void 0||e.opticalSize!==void 0)&&(t[`font-variation-settings`]=Yt({...e.weight!==void 0&&{weight:e.weight},...e.variations!==void 0&&{variations:e.variations},...e.opticalSize!==void 0&&{opticalSize:e.opticalSize}})),e.opticalSize!==void 0&&(t[`font-optical-sizing`]=e.opticalSize.mode===`auto`?`auto`:`none`),e.features!==void 0&&(t[`font-feature-settings`]=Xt(e.features)),Object.assign(t,Qt(e)),t},wr=e=>{let t={};return e.align!==void 0&&(t[`text-align`]=e.align),e.transform!==void 0&&(t[`text-transform`]=e.transform),Object.assign(t,Kt(e.direction)),e.paragraphIndent!==void 0&&(t[`text-indent`]=`${String(e.paragraphIndent)}px each-line`),e.hangingPunctuation!==void 0&&(t[`hanging-punctuation`]=`none`),t},Tr=e=>{let t={};return e.verticalAlign!==void 0&&e.verticalAlign!==`top`&&(t.display=`flex`,t[`flex-direction`]=`column`,t[`justify-content`]=e.verticalAlign===`middle`?`center`:`flex-end`),e.verticalTrim!==void 0&&(t[`text-box-trim`]=e.verticalTrim===`cap-height`?`trim-both`:`none`,t[`text-box-edge`]=`cap alphabetic`),t},Er=e=>{let t={};return e.decoration!==void 0&&Object.assign(t,en(e.decoration)),e.wrapping!==void 0&&(t[`white-space`]=e.wrapping===`wrap`?`normal`:e.wrapping),e.wrapStyle!==void 0&&(t[`text-wrap-style`]=e.wrapStyle),t},Dr=e=>{let t=e.typography??{};return{...Sr(e,t),...Cr(t),...wr(t),...Tr(t),...Er(t)}},Or=(e,t)=>({...Object.fromEntries(Object.entries(re(e)).filter(([t])=>e.layout?.clipContent===void 0||![`overflow`,`overflow-x`,`overflow-y`].includes(t))),...Dr(e),...xr(e.appearance),...pr(e,t),...e.visible===!1&&{display:`none`}}),kr=(e,t)=>Object.entries(e.relationships).filter(([,e])=>e.parentId===t).toSorted(([e,t],[n,r])=>t.sortKey===r.sortKey?e.localeCompare(n):Be(t.sortKey,r.sortKey)).map(([e])=>e),Ar=(e,t)=>{let n=e.nodes[t];if(n===void 0)throw new u(`NOT_FOUND`,`Canvas node ${t} does not exist.`,`Run canvas tree and use a current stable node id.`);return n},jr=(e,t)=>{let n=e.props?.[t];return typeof n==`string`?n:``},Mr=e=>`{${JSON.stringify(e)}}`,v=(e,t)=>e===void 0?[]:[t(e)],Nr=(e,t)=>{let n=` `.repeat(t),r=`${n}${Mr(e.text)}`;return e.sourcePath===void 0?r:`${n}<span data-source-path=${JSON.stringify(e.sourcePath)}>${Mr(e.text)}</span>`},Pr=(e,t)=>{let n=` `.repeat(t),r=v(e.sourcePath,e=>`data-source-path=${JSON.stringify(e)}`).join(``);return`${n}<br data-text-break="${e.soft===!0?`line`:`paragraph`}"${r===``?``:` ${r}`} />`},Fr=(e,t)=>{let n=` `.repeat(t),r=[...v(e.sourcePath,e=>`data-source-path=${JSON.stringify(e)}`),...v(e.href,e=>`href={${JSON.stringify(e)}}`),...v(e.href,()=>`rel="noreferrer" target="_blank"`),...v(Object.keys(e.styles).length===0?void 0:e.styles,e=>`style={${JSON.stringify(e)}}`),...v(e.textStyle,e=>`data-text-style={${JSON.stringify(e)}}`),...v(e.paragraph,e=>`data-text-paragraph={${JSON.stringify(e)}}`),...v(e.fills,e=>`data-text-fills={${JSON.stringify(e)}}`),...v(e.paragraphSpacing,e=>`data-paragraph-spacing=${JSON.stringify(e)}`),...v(e.paragraphIndent,e=>`data-paragraph-indent=${JSON.stringify(e)}`),...v(e.listSpacing,e=>`data-list-spacing=${JSON.stringify(e)}`),...v(e.hangingPunctuation,e=>`data-hanging-punctuation=${JSON.stringify(e)}`),...v(e.verticalTrim,e=>`data-vertical-trim=${JSON.stringify(e)}`),...v(e.wrapStyle,e=>`data-wrap-style=${JSON.stringify(e)}`)],i=e.href===void 0?`span`:`a`,a=e.children.map(e=>Ir(e,t+1));return[`${n}<${i}${r.length===0?``:` ${r.join(` `)}`}>`,...a,`${n}</${i}>`].join(`
14
+ `)},Ir=(e,t)=>e.kind===`text`?Nr(e,t):e.kind===`break`?Pr(e,t):Fr(e,t),Lr=(e,n)=>t(e).map(e=>Ir(e,n)).join(`
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
- `)},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`,`
16
+ `)},zr=(e,t,n)=>Rr(e,t,0,n),Br=(e,t)=>t.map(t=>{let n=Ar(e,t);return{nodeId:t,name:n.label,component:n.component,box:n.box,css:Or(n,e),layout:n.layout,appearance:n.appearance,typography:n.typography}}),Vr={topic:`canvas-agent-authoring`,workflow:[`Keep the complete selection link as --canvas; only selected nodes and descendants are in scope.`,`Unknown state: canvas inspect. When nodeCount=0, use target root and its version to create a populated screen using write-html --review none. No blank pre-render or empty shell.`,`Multiple screens: publish each populated screen before authoring the next so users see progress. Prepare only what that screen needs; do not prepare the whole set before the first write.`,`Existing content: read only missing subtree structure or ids. Reuse useful context and product styles.`,`Batch related text, style, rename, duplicate and move changes with canvas edit --edits. Existing focused commands also work.`,`Use the version from the latest successful read or write as --base-version. After a conflict, reread and recompute the requested edit.`,`Render the affected screen when ready for review and inspect the PNG. Repeat after changes or a concrete discrepancy.`],html:{modes:[`insert-children`,`replace`],rules:[`Use inline concrete CSS; flex, padding and gap. Avoid margin, grid, tables and inline layout.`,`Give screen rows, cards and buttons explicit dimensions; avoid relying on implicit stretch. Use block frames for colored badges.`,`Name meaningful groups with layer-name; include content and structure together.`,`Styled text controls become frames with editable text children.`,`Scripts, event handlers, embedded documents, executable URLs and CSS imports are rejected.`]},completion:[`Natural hierarchy with the fewest useful editable primitives.`,`The committed version and affected ids match the request.`,`Inspect the final PNG for hierarchy, alignment, clipping and overflow.`,`Keep text, layout and appearance editable in the ordinary inspector.`]},Hr=async(e,t)=>{let n=Ee.parse(await e.remote.query(`canvas.document.get`,{canvasId:t}));return{held:n,document:ne(n.document)}},Ur=(e,t)=>{e.command(`guide`).description(`Agent design workflow.`).action(()=>{t.output.result(Vr)}),e.command(`get-jsx`).description(`Read concise subtree JSX.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID to inspect.`).requiredOption(`--node-id <id>`,`Stable subtree root id.`).option(`--depth <integer>`,`Maximum descendant depth from 0 to 20.`,`8`).action(async e=>{let n=d(e.canvas),r=n.canvasId,{held:i,document:a}=await Hr(t,r);te(n,a,[e.nodeId]),t.output.result({canvasId:r,version:i.version,nodeId:e.nodeId,jsx:zr(a,e.nodeId,Dn(Tn,e.depth,`--depth`)),warning:`This is a structural reading projection. Use canvas render as the pixel authority.`})}),e.command(`get-computed-styles`).description(`Read effective node CSS.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID to inspect.`).requiredOption(`--node-ids <json-or-@path>`,`JSON array of stable node ids.`).action(async e=>{let n=d(e.canvas),r=n.canvasId,{held:i,document:a}=await Hr(t,r),o=_(e.nodeIds,wn,`--node-ids`);te(n,a,o),t.output.result({canvasId:r,version:i.version,nodes:Br(a,o),warning:`These are authored CSS instructions, not measured browser dimensions. Use canvas render as the pixel authority.`})})},Wr=e=>{if(e===void 0)throw new u(`BAD_REQUEST`,`--client-token is required with --input.`,`Mint one UUID for this request and reuse it only when retrying the same --input.`);return m.uuid().parse(e)},Gr=async(e,t)=>{if(t.input!==void 0){if([t.canvas,t.baseVersion,t.nodes,t.idPrefix].some(e=>e!==void 0))throw new u(`BAD_REQUEST`,`Choose --input or the individual duplicate options.`,`Use --input with --client-token for native measured duplication.`);let n=f(e.catalog(),`canvas.duplicateNodes`);e.output.result(await e.invocation.invoke({capability:n,arguments:_(t.input,n.inputSchema,`--input`),clientToken:Wr(t.clientToken)}));return}if(t.canvas===void 0||t.baseVersion===void 0||t.nodes===void 0)throw TypeError(`The required-option check let duplicate-nodes run without --canvas, --base-version or --nodes.`);let n=_(t.nodes,Sn,`--nodes`).map(e=>({kind:`duplicate`,nodeIds:[e.id],...e.parentId!==void 0&&{parentId:e.parentId}})),r=await Mn(e,{canvas:t.canvas,baseVersion:t.baseVersion,...t.clientToken!==void 0&&{clientToken:t.clientToken}},n,t.idPrefix),{duplicatedNodes:i,...a}=r;e.output.result({...r,duplicatedNodes:i,apply:a})},Kr=(e,t)=>{e.command(`duplicate-nodes`).description(`Deep-clone node subtrees; --input uses native measured layout and durable copy receipts.`).option(`--input <json-or-@path>`,`Scoped native duplication request; requires --client-token.`).option(`--canvas <url-or-id>`,`Canvas URL or UUID to edit.`).option(`--base-version <integer>`,`Exact current canvas version.`).option(`--nodes <json-or-@path>`,`Array of {id,parentId?} requests.`).option(`--id-prefix <prefix>`,`Stable namespace for cloned ids.`).option(`--client-token <uuid>`,`Stable UUID for retrying this exact batch.`).action(async e=>Gr(t,e))},qr=(e,t)=>{e.command(`move-nodes`).description(`Reorder or reparent nodes.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID to edit.`).requiredOption(`--base-version <integer>`,`Exact current canvas version.`).requiredOption(`--moves <json-or-@path>`,`Sequential before, after, or parent/index moves.`).option(`--client-token <uuid>`,`Stable UUID for retrying this exact batch.`).action(async e=>{let n=await Mn(t,e,_(e.moves,Cn,`--moves`).map(e=>({kind:`move`,nodeId:e.nodeId,destination:`before`in e?{kind:`before`,nodeId:e.before}:`after`in e?{kind:`after`,nodeId:e.after}:{kind:`parent`,parentId:e.parentId,...e.index!==void 0&&{index:e.index}}}))),{moves:r,affectedParents:i,...a}=n;t.output.result({...n,moves:r,affectedParents:i,apply:a})})},Jr=(e,t)=>{Kr(e,t),qr(e,t)},Yr=e=>Nn(e,`--html`),Xr=new Set([`flex-grow`,`flex-shrink`,`font-weight`,`opacity`,`order`,`z-index`]),Zr=async(e,t)=>{if(![`insert-children`,`replace`].includes(t.mode))throw new u(`BAD_REQUEST`,`--mode must be insert-children or replace.`,`Choose one of the two documented modes.`);if(![`none`,`render`].includes(t.review))throw new u(`BAD_REQUEST`,`--review must be none or render.`,`Choose one of the documented review modes.`);kn(e,t.clientToken,!0);let n=t.mode===`replace`?`replace`:`insert-children`,r=d(t.canvas),i=On(t.baseVersion);e.output.result(await e.invocation.invoke({capability:f(e.catalog(),`canvas.writeHtml`),arguments:{canvasId:r.canvasId,...r.pageId!==void 0&&{pageId:r.pageId},...r.nodeIds.length>0&&{selectionNodeIds:[...r.nodeIds]},targetNodeId:t.targetNodeId,mode:n,html:Yr(t.html),...t.idPrefix!==void 0&&{idPrefix:t.idPrefix},baseVersion:i,review:t.review,renderOutputPath:t.output??null,overwriteRender:t.force===!0,renderScale:Dn(hn,t.scale,`--scale`),renderTimeoutMs:Dn(mn,t.timeoutMs,`--timeout-ms`)},clientToken:t.clientToken??null}))},Qr=(e,t)=>{e.command(`write-html`).description(`Compile HTML/CSS primitives.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID to edit.`).requiredOption(`--base-version <integer>`,`Exact current canvas version.`).requiredOption(`--target-node-id <id>`,`Container receiving children, or node to replace.`).requiredOption(`--html <html-or-@path>`,`Inline HTML fragment or @path to a UTF-8 file.`).option(`--mode <mode>`,`insert-children or replace.`,`insert-children`).option(`--review <mode>`,`none to return after commitment; render to include review pixels.`,`render`).option(`--id-prefix <prefix>`,`Fresh namespace for a new import/replacement; reuse only for an identical retry.`).option(`--client-token <uuid>`,`Stable UUID for retrying this exact write and review.`).option(`--output <path>`,`Write the review PNG to this path.`).option(`--force`,`Replace an existing --output file deliberately.`,!1).option(`--scale <number>`,`Review pixels per canvas unit, from 0.1 to 4.`,`1`).option(`--timeout-ms <integer>`,`Review render polling deadline.`,`120000`).addHelpText(`after`,`
17
17
  Write one visual group at a time. Use --review none for a committed receipt, then render its version and inspect the PNG. Use flex, padding and gap; use targeted commands for later edits.
18
- `).action(async e=>Zr(t,e))},$r=e=>e.replaceAll(/([a-z\d])([A-Z])/gu,`$1-$2`).toLowerCase(),ei=(e,t)=>typeof t==`number`&&!Xr.has(e)?`${String(t)}px`:String(t),ti=e=>Object.entries(e).filter(([,e])=>e!==null).map(([e,t])=>{let n=$r(e);return`${n}:${ei(n,t??``)}`}).join(`;`).replaceAll(`&`,`&amp;`).replaceAll(`"`,`&quot;`),ni=e=>e.length===0?0:Math.max(...e.map(e=>e.x+e.width))+80,ri=(e,t)=>{e.command(`create-artboard`).description(`Create a top-level frame.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID to edit.`).requiredOption(`--base-version <integer>`,`Exact current canvas version.`).requiredOption(`--name <name>`,`Meaningful layer name.`).requiredOption(`--styles <json-or-@path>`,`CSSProperties with width and height.`).option(`--client-token <uuid>`,`Stable UUID for retrying this exact creation and review.`).option(`--output <path>`,`Review PNG path.`).option(`--force`,`Replace an existing review PNG.`,!1).action(async e=>{let n=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(`&`,`&amp;`).replaceAll(`"`,`&quot;`);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
- `}]),{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()}),p.object({bytes:p.number().int().positive().max(2**53-1)}),p.object({id:p.uuid(),upload:P}),p.object({id:p.uuid()});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"]) {
18
+ `).action(async e=>Zr(t,e))},$r=e=>e.replaceAll(/([a-z\d])([A-Z])/gu,`$1-$2`).toLowerCase(),ei=(e,t)=>typeof t==`number`&&!Xr.has(e)?`${String(t)}px`:String(t),ti=e=>Object.entries(e).filter(([,e])=>e!==null).map(([e,t])=>{let n=$r(e);return`${n}:${ei(n,t??``)}`}).join(`;`).replaceAll(`&`,`&amp;`).replaceAll(`"`,`&quot;`),ni=e=>e.length===0?0:Math.max(...e.map(e=>e.x+e.width))+80,ri=(e,t)=>{e.command(`create-artboard`).description(`Create a top-level frame.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID to edit.`).requiredOption(`--base-version <integer>`,`Exact current canvas version.`).requiredOption(`--name <name>`,`Meaningful layer name.`).requiredOption(`--styles <json-or-@path>`,`CSSProperties with width and height.`).option(`--client-token <uuid>`,`Stable UUID for retrying this exact creation and review.`).option(`--output <path>`,`Review PNG path.`).option(`--force`,`Replace an existing review PNG.`,!1).action(async e=>{let n=_(e.styles,vn,`--styles`);if(n.width===void 0||n.height===void 0)throw new u(`BAD_REQUEST`,`--styles must include width and height.`,`Use explicit whole-pixel dimensions such as 1440px and 900px.`);kn(t,e.clientToken,!0);let r=be(e.canvas),i=On(e.baseVersion),a=await Ye(t,r,i),o=Object.entries(a.relationships).flatMap(([e,t])=>{let n=a.nodes[e]?.box;return n!==void 0&&t.parentId===`root`?[n]:[]}),s={display:`flex`,flexDirection:`column`,left:ni(o),top:0,...n,position:`absolute`},c=e.name.replaceAll(`&`,`&amp;`).replaceAll(`"`,`&quot;`);t.output.result(await Je(t.remote,t.render).execute({canvasId:r,targetNodeId:`root`,mode:`insert-children`,html:`<div layer-name="${c}" data-enhance-kind="frame" style="${ti(s)}"></div>`,idPrefix:`artboard_${t.mutationKey.current(`canvas.render.importSource`,{canvasId:r})}`,baseVersion:i,renderClientToken:t.mutationKey.current(`canvas.render.create`,{purpose:`create-artboard-review`}),renderOutputPath:e.output??null,overwriteRender:e.force===!0,renderScale:1,renderTimeoutMs:12e4}))})},ii=(e,t)=>{Qr(e,t),ri(e,t)},ai=(e,t)=>{for(let n of[`canvas.insertHtml`,`canvas.makeEditable`,`canvas.capture`,`canvas.capturePage`,`canvas.arrange`]){let r=f(t.catalog(),n),i=n===`canvas.insertHtml`?`insert-html`:n===`canvas.makeEditable`?`make-editable`:n===`canvas.capturePage`?`capture-page`:n.slice(7);e.command(i).description(r.guide.summary).requiredOption(`--input <json-or-@path>`,`Canvas reference, base version and explicit native authoring request.`).requiredOption(`--client-token <uuid>`,`Stable intent ID; reuse unchanged after an uncertain outcome.`).action(async e=>{t.output.result(await t.invocation.invoke({capability:r,arguments:_(e.input,r.inputSchema,`--input`),clientToken:m.uuid().parse(e.clientToken)}))})}},oi=(e,t)=>{e.command(`remove`).description(`Remove explicitly named canvas subtrees with scope, lock and revision checks.`).requiredOption(`--input <json-or-@path>`,`Request containing canvasRef, baseVersion and rootNodeIds.`).requiredOption(`--client-token <uuid>`,`Stable intent ID; reuse unchanged after an uncertain outcome.`).action(async e=>{t.output.result(await t.invocation.invoke({capability:f(t.catalog(),`canvas.remove`),arguments:_(e.input,me,`--input`),clientToken:m.uuid().parse(e.clientToken)}))})},si=(e,t)=>{e.command(`read`).description(`Read complete editable content, bounded evidence, or the supplied reference.`).summary(`Read linked canvas content.`).option(`--input <json-or-@path>`,`Bounded read request containing canvasRef, view and target options.`).option(`--canvas <url-or-id>`,`Complete canvas, page or selection URL for comprehensive reads.`).option(`--node-id <id>`,`Subtree within --canvas; unavailable with --input.`).action(async e=>{if(e.input===void 0==(e.canvas===void 0)||e.input!==void 0&&e.nodeId!==void 0)throw new u(`BAD_REQUEST`,`Choose exactly one of --input or --canvas; --node-id requires --canvas.`,`Use --input for bounded views, or --canvas with an optional --node-id for comprehensive reads.`);let n=e.input===void 0?{canvas:e.canvas,...e.nodeId!==void 0&&{nodeId:e.nodeId}}:_(e.input,he,`--input`);t.output.result(await t.invocation.invoke({capability:f(t.catalog(),`canvas.read`),arguments:n,clientToken:null}))})},ci=(e,t)=>{e.command(`find`).description(`Find accessible canvases and existing creation destinations with bounded results.`).option(`--input <json-or-@path>`,`Search title, collection, limit and continuation cursor.`,`{}`).action(async e=>{t.output.result(await t.invocation.invoke({capability:f(t.catalog(),`canvas.find`),arguments:_(e.input,fe,`--input`),clientToken:null}))}),oi(e,t),si(e,t),e.command(`update-html`).description(`Apply an identity-preserving edit from a complete HTML snapshot.`).requiredOption(`--input <json-or-@path>`,`Request containing canvasRef, snapshotToken, html and removeNodeIds.`).requiredOption(`--client-token <uuid>`,`Stable intent ID; reuse unchanged after an uncertain outcome.`).action(async e=>{let n=_(e.input,Oe,`--input`);t.output.result(await t.invocation.invoke({capability:f(t.catalog(),`canvas.updateHtml`),arguments:n,clientToken:m.uuid().parse(e.clientToken)}))})},li=(e,t)=>{let n=f(t.catalog(),`prototype.publishCanvas`);e.command(`publish-prototype`).description(n.guide.summary).requiredOption(`--input <json-or-@path>`,`Complete canvas reference, baseVersion, unpacked build directory or existing deployment, and bounded waitMs.`).requiredOption(`--client-token <uuid>`,`Stable attachment intent; reuse the same arguments after uncertainty, use a new token after replanning.`).action(async e=>{t.output.result(await t.invocation.invoke({capability:n,arguments:_(e.input,n.inputSchema,`--input`),clientToken:m.uuid().parse(e.clientToken)}))})},ui=(e,t)=>{let n=f(t.catalog(),`canvas.importAsset`);e.command(`import-asset`).description(n.guide.summary).requiredOption(`--input <json-or-@path>`,`Canvas reference and selected local file source.`).requiredOption(`--client-token <uuid>`,`Stable import intent; reuse after uncertainty.`).action(async e=>{t.output.result(await t.invocation.invoke({capability:n,arguments:_(e.input,n.inputSchema,`--input`),clientToken:m.uuid().parse(e.clientToken)}))})},di=(e,t)=>{ci(e,t),li(e,t),ui(e,t),ai(e,t),Ur(e,t),ii(e,t),$n(e,t),Jr(e,t),qn(e,t)},fi=e=>{let t=e.getOptionValue(`canvas`),n=e.getOptionValue(`canvasId`);if(t!==void 0&&n!==void 0)throw new u(`BAD_REQUEST`,`--canvas and --canvas-id cannot be combined.`,`Pass the pasted URL or UUID through --canvas.`);let r=t??n;if(typeof r!=`string`)throw TypeError(`The required-option check let canvas ${e.name()} run without --canvas.`);return{reference:d(r),url:r}},pi=(e,t)=>{let n=e.getOptionValue(`nodeId`)??(t.nodeIds.length===1?t.nodeIds[0]:void 0);if(typeof n!=`string`||n===``)throw new u(`BAD_REQUEST`,`--node-id or a single-node selection link is required.`,`Choose one node, or use canvas tree to inspect the linked selection.`);return n},mi=async(e,t,n,r)=>{let i=e.name()===`node`?pi(e,n):void 0,a=await it(t.remote,{canvas:r,...i!==void 0&&{nodeId:i}});if(i===void 0)return a;let{nodes:o,...s}=a;return{...s,node:o.find(e=>e.id===i)}},hi=(e,t)=>{for(let n of[`inspect`,`tree`,`node`,`selection`]){let r=e.commands.find(e=>e.name()===n),i=r?.options.find(e=>e.long===`--canvas-id`);r!==void 0&&i!==void 0&&(i.makeOptionMandatory(!1),r.options.find(e=>e.long===`--node-id`)?.makeOptionMandatory(!1),r.option(`--canvas <url-or-id>`,`Pasted canvas URL or UUID. Selection links limit reads and edits to the linked subtree.`),r.action(async()=>{let{reference:e,url:i}=fi(r),a=ee(e)?await mi(r,t,e,i):await t.remote.query(`canvas.${n}`,{canvasId:e.canvasId,...n===`node`&&{nodeId:pi(r,e)}});t.output.result(a)}))}},gi=e=>{if(e.input===void 0)return null;if(e.canvas!==void 0||e.nodeId!==void 0||e.bounds!==void 0||e.expectedVersion!==void 0||e.atMs!==void 0||e.output!==void 0||e.force===!0||e.scale!==`1`||e.timeoutMs!==`120000`)throw new u(`BAD_REQUEST`,`The bounded --input request cannot be combined with individual render options.`,`Put the entire scoped render request in --input.`);return{arguments:_(e.input,ye,`--input`),clientToken:Wr(e.clientToken)}},_i=`canvas render --canvas 0b9f4c1e-5d2a-4e8b-9c3f-7a6d1e2b4c50`,vi={"canvas render":_i},yi=m.coerce.number().int().positive(),bi=m.coerce.number().int().nonnegative(),xi=m.coerce.number().positive(),Si=(e,t,n,r=`canvas render`)=>{let i=e.safeParse(t);if(!i.success)throw new u(`BAD_REQUEST`,`${n} is invalid.`,`Run 'enhance ${r} --help'.`);return i.data},Ci=e=>{if(e===void 0)return null;try{let t=Se.safeParse(JSON.parse(e));if(t.success)return t.data}catch{}throw new u(`BAD_REQUEST`,`--bounds must be a finite positive world rectangle.`,`Pass JSON such as '{"x":0,"y":0,"width":800,"height":600}'.`)},wi=(e,t)=>e===void 0?t===null?{kind:`content`}:{kind:`bounds`,bounds:t}:{kind:`node`,nodeId:e},Ti=e=>{if(!(typeof e!=`string`||!e.startsWith(`rec_`)))return m.uuid().safeParse(e.slice(4)).data},Ei=(e,t)=>{let n=m.uuid().nullable().safeParse(t??null);if(!n.success)throw new u(`BAD_REQUEST`,`--client-token must be a UUID.`,`Mint one UUID and reuse it only when retrying this exact render.`);return e.mutationKey.select(n.data,!1),e.mutationKey.current(`canvas.render.create`,{})},Di=async(e,t)=>{let r=d(e.canvas??``),i=wi(e.nodeId,Ci(e.bounds)),a=e.expectedVersion===void 0?null:Si(yi,e.expectedVersion,`--expected-version`);if(!ee(r))return{target:i,expectedVersion:a};let o=Ee.parse(await t.remote.query(`canvas.document.get`,{canvasId:r.canvasId}));if(a!==null&&a!==o.version)throw new u(`CONFLICT`,`The canvas changed before rendering.`,`Read the linked page or selection and render its current version.`);return{target:n(r,ne(o.document),i),expectedVersion:o.version}},Oi=async(e,t)=>{if(e.canvas===void 0)throw TypeError(`The required-option check let canvas render run without --canvas.`);if(e.nodeId!==void 0&&e.bounds!==void 0)throw new u(`BAD_REQUEST`,`--node-id and --bounds cannot be combined.`,`Choose one focused target, or omit both to render all authored content.`);let n=await Di(e,t),r=n.target.kind===`node`?n.target.nodeId:void 0;if(r===void 0&&e.atMs!==void 0)throw new u(`BAD_REQUEST`,`--at-ms requires --node-id.`,"Render the stable recording node returned by `enhance canvas tree`.");let i=e.atMs===void 0?null:Ti(r);if(i===void 0&&e.atMs!==void 0)throw new u(`BAD_REQUEST`,`--at-ms requires a stable recording node id such as rec_<recording-uuid>.`,"Run `enhance canvas tree --canvas <url-or-id>` and choose a recording node.");Ei(t,e.clientToken);let a=await t.invocation.invoke({capability:f(t.catalog(),`canvas.render`),arguments:{canvasId:d(e.canvas).canvasId,...n,sourceState:i==null?null:{kind:`recording`,recordingId:i,atMs:Si(bi,e.atMs??``,`--at-ms`)},scale:Si(xi,e.scale,`--scale`),outputPath:e.output??null,overwrite:e.force===!0,timeoutMs:Si(yi,e.timeoutMs,`--timeout-ms`)},clientToken:e.clientToken??null});t.output.result(a)},ki=e=>e.parent===null?e:ki(e.parent),Ai=(e,t)=>{e.option(`--input <json-or-@path>`,`Bounded scoped render request; requires --client-token.`).option(`--canvas <url-or-id>`,`Canvas URL or UUID to render.`).option(`--node-id <id>`,`Render one stable canvas node instead of all authored content.`).option(`--bounds <json>`,`Render an explicit rectangle in canvas world coordinates.`).option(`--expected-version <integer>`,`Refuse pixels from any other document version.`).option(`--at-ms <integer>`,`Pause a recording node at this millisecond; inspect the PNG before snapshotting it.`).option(`--scale <number>`,`Output pixels per canvas unit, from 0.1 to 4.`,`1`).option(`--output <path>`,`Write the PNG to this path instead of a protected temporary file.`).option(`--force`,`Replace an existing --output file deliberately.`,!1).option(`--timeout-ms <integer>`,`Local polling deadline in milliseconds.`,`120000`).option(`--client-token <uuid>`,`Stable UUID to reuse only when retrying this render request.`).addHelpText(`after`,()=>`\nExample:\n ${ki(e).name()} ${_i}\n\nFor transcript-led selection, inspect nearby --at-ms renders and reject transitions or duplicate states before running recording snapshot.\n`).action(async e=>{let n=gi(e);if(n===null)return Oi(e,t);t.output.result(await t.invocation.invoke({capability:f(t.catalog(),`canvas.render`),...n}))})},ji=(e,t)=>{let n=e.commands.find(e=>e.name()===`canvas`);if(n===void 0)throw TypeError(`the API router did not supply canvas commands`);n.configureHelp({subcommandTerm:e=>e.name()});let r=n.commands.find(e=>e.name()===`render`);if(r===void 0)throw TypeError(`the API router did not supply canvas render`);let i=ct(t.remote,Qe(t.configDirectory),t.now,t.output.result);Bn(n,t),di(n,{...t,render:i}),hi(n,t),Ai(r,t)},y=m.string().trim().min(1).max(160),Mi=m.string().regex(/^[a-f0-9]{64}$/u),Ni=m.number().int().positive(),Pi=m.strictObject({source:y,journey:y,step:y,variant:y}),Fi=m.strictObject({sha256:Mi,bytes:m.number().int().positive(),mediaType:m.string().min(1).max(200)}),Ii=m.strictObject({organisationId:m.uuid().optional()}),Li=m.strictObject({key:m.string().min(1),label:m.string().min(1),url:m.url().optional(),sequence:m.number().int().nonnegative(),attempt:m.number().int().nonnegative().default(0)}),Ri=m.union([m.strictObject({runId:m.uuid()}),m.strictObject({reference:m.string().min(1),revision:m.string().min(1).optional()})]),zi=m.strictObject({destination:Ii,context:Li.optional(),revision:m.string().min(1).optional(),baselineRunId:m.uuid().nullable(),compareTo:Ri.optional()}),Bi=m.enum([`awaiting-review`,`approved`,`changes-requested`]),Vi=m.strictObject({format:m.literal(`enhance-capture`),version:m.literal(1),key:Pi,label:y,journeyLabel:y,order:m.number().int().nonnegative(),page:m.string().min(1).optional(),viewport:m.strictObject({width:Ni,height:Ni,deviceScaleFactor:m.number().positive()}),extent:m.enum([`viewport`,`full-page`]),source:m.strictObject({format:m.literal(`rrweb-screen`),version:m.literal(1),blob:Fi}),preview:m.strictObject({blob:Fi,width:Ni,height:Ni,pixelRatio:m.number().positive()}),assets:m.array(m.strictObject({url:m.url(),blob:Fi})),provenance:m.strictObject({adapter:y,sdkVersion:y,kernelVersion:y,browser:y,capturedAt:m.iso.datetime(),sourceUrl:m.url().optional(),commit:m.string().min(1).max(200).optional()}),issues:m.array(m.strictObject({code:y,message:m.string().min(1).max(500)}))}).superRefine((e,t)=>{(e.preview.width/e.preview.pixelRatio!==e.viewport.width||e.preview.height/e.preview.pixelRatio!==e.viewport.height)&&t.addIssue({code:`custom`,path:[`preview`],message:`The preview and captured CSS extent must match.`}),e.source.blob.mediaType!==`application/json`&&t.addIssue({code:`custom`,path:[`source`,`blob`,`mediaType`],message:`Capture sources must be frozen JSON.`}),e.preview.blob.mediaType!==`image/png`&&t.addIssue({code:`custom`,path:[`preview`,`blob`,`mediaType`],message:`Capture previews must be PNG.`}),new Set(e.assets.map(e=>e.url)).size!==e.assets.length&&t.addIssue({code:`custom`,path:[`assets`],message:`Capture resource URLs must be unique.`})}),Hi=m.strictObject({id:m.uuid(),canvasId:m.uuid(),source:y,runKey:y,generation:m.number().int().nonnegative(),participants:m.array(y).min(1),expiresAt:m.iso.datetime(),formatVersion:m.literal(1),review:zi.optional()}),Ui={participant:y,retry:m.number().int().nonnegative(),status:m.enum([`passed`,`failed`,`skipped`,`interrupted`,`timedOut`]),title:m.string().min(1).optional(),location:m.strictObject({file:m.string().min(1),line:m.number().int()}).optional(),captures:m.array(Vi)},Wi=m.strictObject({runner:m.literal(`playwright`).optional(),testId:y,project:y,...Ui}),Gi=m.strictObject({runner:m.literal(`script`),...Ui}),Ki=m.union([Wi,Gi]),qi=m.strictObject({key:Pi.optional(),testId:y.optional(),message:m.string().min(1).max(500)}),Ji=m.strictObject({format:m.literal(`enhance-capture-run`),version:m.literal(1),run:Hi,participants:m.array(m.strictObject({id:y,status:m.enum([`passed`,`failed`,`interrupted`])})).min(1),attempts:m.array(Ki),ordering:m.enum([`partial`,`complete`]),leftOut:m.array(qi).optional()}),Yi=m.strictObject({runId:m.uuid(),canvasId:m.uuid(),canvasUrl:m.url(),version:m.number().int().positive(),manifestDigest:Mi,frames:m.array(m.strictObject({key:Pi,frameId:y,captureId:m.uuid()})),issues:m.array(m.strictObject({code:y,message:m.string().max(500)}))}),Xi=m.strictObject({canvasId:m.uuid().optional(),destination:Ii.optional(),title:m.string().trim().min(1).optional(),context:Li.optional(),revision:m.string().min(1).optional(),compareTo:Ri.optional(),source:y.default(`default`),runKey:y,participants:m.array(y).min(1).default([`local`]),formatVersion:m.literal(1).default(1)}).superRefine((e,t)=>{e.canvasId===void 0==(e.destination===void 0)&&t.addIssue({code:`custom`,message:`Choose either a canvas or a destination for this run.`}),e.canvasId!==void 0&&(e.context!==void 0||e.compareTo!==void 0)&&t.addIssue({code:`custom`,message:`Run review requires a destination.`})}),Zi=m.strictObject({run:Hi});m.strictObject({runId:m.uuid()});const Qi=m.enum([`collecting`,`sealed`,`converting`,`committed`,`failed`,`cancelled`]),$i=m.strictObject({run:Hi,state:Qi,receipt:Yi.nullable(),verdict:Bi.optional(),failure:m.strictObject({code:y,message:m.string().max(1e3)}).nullable()});m.strictObject({runId:m.uuid(),blobs:m.array(Fi).min(1).max(400)});const ea=m.strictObject({uploads:m.array(m.strictObject({sha256:Mi,upload:m.strictObject({url:m.url(),headers:m.record(m.string(),m.string()),expiresAt:m.iso.datetime()}).nullable()})).max(400)});m.strictObject({canvasId:m.uuid(),frameId:m.string().min(1),captureId:m.uuid()});const ta=m.strictObject({captureId:m.uuid(),capturedAt:m.iso.datetime(),commit:m.string().max(200).optional(),url:m.string().min(1),width:m.number().positive(),height:m.number().positive(),pixelRatio:m.number().positive()});m.strictObject({frameId:m.string(),before:ta,after:ta});const na=h.array(h.object({code:h.string().check(h.minLength(1),h.maxLength(160)),message:h.string().check(h.minLength(1),h.maxLength(500))})).check(h.maxLength(32));h.object({issues:h.optional(na),prototype:h.optional(h.object({prototypeId:h.uuid(),deploymentId:h.uuid()}))});const ra={unreadable:`its saved capture could not be read`,notACapture:`it is not an Enhance capture`,pictureMismatch:`its picture does not match the size of its page`,nothingArrived:`none of its files arrived`,notSaved:`it could not be saved on this machine`,noPicture:`it could not be compiled and has no picture`,anotherSource:`it was captured for another source`,outsideShards:`its test ran outside this run's shards`},ia=(e,t)=>e<t?-1:e===t?0:1,aa=(e,t)=>{let n=Object.keys(e).toSorted(ia);t.output.push(`{`),t.pending.push({text:`}`});for(let r=n.length-1;r>=0;r--){let i=n[r];i!==void 0&&(t.pending.push({value:Reflect.get(e,i)},{text:`${JSON.stringify(i)}:`}),r>0&&t.pending.push({text:`,`}))}},oa=(e,t)=>{if(e===null||typeof e==`boolean`||typeof e==`string`||typeof e==`number`&&Number.isFinite(e))return t.output.push(JSON.stringify(e)),!0;if(typeof e!=`object`||t.active.has(e)||!Array.isArray(e)&&Object.getPrototypeOf(e)!==Object.prototype)return!1;if(t.active.add(e),t.pending.push({leave:e}),Array.isArray(e)){t.output.push(`[`),t.pending.push({text:`]`});for(let n=e.length-1;n>=0;n--)t.pending.push({value:e[n]}),n>0&&t.pending.push({text:`,`})}else aa(e,t);return!0},sa=e=>{let t={pending:[{value:e}],active:new Set,output:[]};for(;t.pending.length>0;){let e=t.pending.pop();if(e===void 0)break;if(`text`in e)t.output.push(e.text);else if(`leave`in e)t.active.delete(e.leave);else if(!oa(e.value,t))return null}return t.output.join(``)},ca=e=>{let t=2166136261;for(let n of e)t^=n.codePointAt(0)??0,t=Math.imul(t,16777619)>>>0;return t.toString(16).padStart(8,`0`)},la=e=>{let t=e.trim();return t.length<=160?t:`${t.slice(0,151).trimEnd()} ${ca(t)}`},ua=e=>JSON.stringify([e.source,e.journey,e.step,e.variant]),da=(e,t)=>e<t?-1:e===t?0:1,fa=e=>{let t=new Set,n=[];for(let r of e)for(let e of[r.source.blob,r.preview.blob,...r.assets.map(e=>e.blob)])t.has(e.sha256)||(t.add(e.sha256),n.push(e));return n.toSorted((e,t)=>da(e.sha256,t.sha256))},pa=`node`,ma=e=>`testId`in e&&e.testId!==pa?e.testId:void 0,b=e=>`testId`in e&&e.testId!==pa?JSON.stringify([e.participant,e.project,e.testId]):JSON.stringify([e.participant,`script`]),ha=(e,t)=>{let n=ma(e);return e.captures.map(e=>({key:e.key,...n!==void 0&&{testId:n},message:t}))},ga=(e,t)=>{let n=new Set(e.run.participants),r=new Set,i=new Map;for(let a of e.attempts){let e=JSON.stringify([b(a),a.retry]);if(!n.has(a.participant)){t.push(...ha(a,ra.outsideShards));continue}if(r.has(e)||(r.add(e),a.captures.length===0))continue;let o=i.get(b(a));(o===void 0||o.retry<a.retry)&&i.set(b(a),a)}return e.attempts.filter(e=>i.get(b(e))===e)},_a=e=>JSON.stringify([e.key.journey,e.key.variant]),va=(...e)=>e.find(e=>e!==0)??0,ya=(e,t)=>va(da(e.artifact.key.journey,t.artifact.key.journey),da(e.artifact.key.variant,t.artifact.key.variant),e.artifact.order-t.artifact.order,da(e.attempt.location?.file??``,t.attempt.location?.file??``),(e.attempt.location?.line??0)-(t.attempt.location?.line??0),da(b(e.attempt),b(t.attempt)),e.index-t.index),ba=e=>{let t=Map.groupBy(e,e=>ua(e.artifact.key)),n=new Map;for(let e of t.values()){let t=Map.groupBy(e,e=>b(e.attempt));for(let e of t.values())for(let[r,i]of e.entries()){let e=t.size>1?` · ${i.attempt.title??ma(i.attempt)??`script`}`:``,a=r>0?` (${String(r+1)})`:``;n.set(i,`${e}${a}`)}}return n},xa=e=>{let t=ba(e),n=new Map(fa(e.map(e=>e.artifact)).map(e=>[e.sha256,e])),r=e=>n.get(e.sha256)??e,i=new Map,a=new Map;return e.map(e=>{let{artifact:n}=e,o=_a(n);i.has(o)||i.set(o,n.page);let s=a.get(o)??0;a.set(o,s+1);let c=t.get(e)??``,l=i.get(o),u={...n};return delete u.page,{...u,...l!==void 0&&{page:l},key:{...n.key,step:la(`${n.key.step}${c}`)},label:la(`${n.label}${c}`),order:s,source:{...n.source,blob:r(n.source.blob)},preview:{...n.preview,blob:r(n.preview.blob)},assets:n.assets.map(e=>({...e,blob:r(e.blob)}))}})},Sa=e=>{let t=Ji.safeParse(e);if(!t.success)return{refusal:`Invalid capture manifest.`,leftOut:[]};let n=t.data,r=[...n.leftOut??[]],i=ga(n,r).flatMap(e=>e.captures.map((t,n)=>({artifact:t,attempt:e,index:n}))).filter(e=>{if(e.artifact.key.source===n.run.source)return!0;let t=ma(e.attempt);return r.push({key:e.artifact.key,...t!==void 0&&{testId:t},message:ra.anotherSource}),!1}).toSorted(ya);return i.length===0?{refusal:`A run must contain at least one capture.`,leftOut:r}:{captures:xa(i),leftOut:r}},Ca=(e,t)=>sa({...e,expiresAt:``})===sa({...t,expiresAt:``}),wa=e=>{let t=sa(e);return t===null?null:`enhance-capture-run:v1\0${t}`},Ta=(e,t)=>va(da(b(e),b(t)),e.retry-t.retry),Ea=e=>{let t=e[0];if(t===void 0)return`At least one participant manifest is required.`;let n=new Map,r=[],i=[];for(let a of e){if(!Ca(a.run,t.run)||a.ordering!==t.ordering)return`Participant manifests must belong to the same reserved run and ordering.`;if(!a.participants.some(e=>n.has(e.id))){for(let e of a.participants)n.set(e.id,e);i.push(...a.leftOut??[]);for(let e of a.attempts)a.participants.some(t=>t.id===e.participant)?r.push(e):i.push(...ha(e,ra.outsideShards))}}let a={...t};return delete a.leftOut,{...a,participants:Array.from(n,([,e])=>e).toSorted((e,t)=>da(e.id,t.id)),attempts:r.toSorted(Ta),...i.length>0&&{leftOut:i}}},Da=[`journey`,`step`,`variant`],Oa=[`label`,`journeyLabel`],ka=e=>typeof e==`string`?la(e):e,Aa=e=>{if(typeof e!=`object`||!e||Array.isArray(e))return e;let t={...e};for(let e of Oa)t[e]=ka(t[e]);let n=t.key;if(typeof n==`object`&&n&&!Array.isArray(n)){let e={...n};for(let t of Da)e[t]=ka(e[t]);t.key=e}return t},ja=e=>e.length>0&&e.every(e=>e.path.length===1&&e.path[0]===`preview`),Ma=(e,t,n)=>{let r=typeof e==`object`&&e?Pi.safeParse(Reflect.get(e,`key`)):null;return{...r?.success===!0&&{key:r.data},...t!==void 0&&{testId:t},message:ja(n)?ra.pictureMismatch:ra.notACapture}},Na={captures:m.array(m.unknown())},Pa=Ji.extend({attempts:m.array(m.union([Wi.extend(Na),Gi.extend(Na)]))}).transform(e=>{let t=[...e.leftOut??[]],n=e.attempts.map(e=>({...e,captures:e.captures.flatMap(n=>{let r=Aa(n),i=Vi.safeParse(r);return i.success?[i.data]:(t.push(Ma(r,`testId`in e?e.testId:void 0,i.error.issues)),[])})}));return{...e,attempts:n,...t.length>0&&{leftOut:t}}});m.strictObject({manifest:Pa}),m.strictObject({canvasId:m.uuid()}).extend({verdict:Bi});const Fa=m.strictObject({canvasId:m.uuid(),name:m.string().min(1)}),Ia=m.strictObject({runId:m.uuid(),revision:m.string(),version:m.number().int().positive()}),La=Fa.extend({expectedVersion:m.number().int().nonnegative(),revision:m.string().min(1)}),Ra=m.strictObject({current:$i,latest:Hi,related:m.array(m.strictObject({run:Hi,verdict:Bi})),changes:m.array(m.strictObject({key:Pi,frameId:m.string(),label:m.string(),journeyLabel:m.string(),page:m.string().optional(),change:m.enum([`new`,`changed`,`unchanged`,`uncompared`])}))}),x=(e,t,n,r)=>Object.assign(Error(t),{code:e,...n!==void 0&&{runId:n},...r}),za=e=>e instanceof Error&&typeof Reflect.get(e,`code`)==`string`,Ba=e=>Dt(`sha256`).update(e).digest(`hex`),Va=async e=>{let t=Dt(`sha256`);return await It(_t(e),async e=>{for await(let n of e)t.update(n)}),t.digest(`hex`)},Ha=e=>{let t=wa(e);if(t===null)throw Error(`A capture manifest must contain only finite JSON values.`);return Dt(`sha256`).update(t).digest(`hex`)},Ua=Lt(`enhance.capture.resources`),Wa=(e,t)=>{if(!/^[a-f0-9]{64}$/u.test(t))throw x(`artifact`,`Invalid capture blob digest.`);return g.join(g.resolve(e),`blobs`,t)},Ga=async(e,t)=>{for(let n of e)try{let e=Wa(n,t.sha256),r=await Pt(e);if(r.isFile()&&r.size===t.bytes&&await Va(e)===t.sha256)return e}catch(e){Ua.publish({stage:`local-read`,sha256:t.sha256,error:e})}return null},Ka=e=>e instanceof Error&&Reflect.get(e,`code`)===`EEXIST`,qa=async(e,t)=>{try{await kt(e,t)}catch(e){if(!Ka(e)||!(await Pt(t)).isFile())throw e}finally{await Nt(e,{force:!0})}},Ja=async(e,t,n)=>{try{if(t.bytes!==n.byteLength||Ba(n)!==t.sha256)throw x(`artifact`,`Capture blob bytes do not match their descriptor.`);await At(g.join(e,`blobs`),{recursive:!0});let r=Wa(e,t.sha256),i=`${r}.${globalThis.crypto.randomUUID()}.tmp`;return await Ft(i,n,{flag:`wx`,mode:384}),await qa(i,r),!0}catch(e){return Ua.publish({stage:`local-write`,sha256:t.sha256,error:e}),!1}},Ya=async(e,t)=>{let n=Vi.parse(t);if(await Ga([e],n.source.blob)===null&&await Ga([e],n.preview.blob)===null)throw x(`artifact`,`Neither the snapshot nor the preview of a capture is on disk.`);return n},Xa=async(e,t)=>{let n=`${e}.${globalThis.crypto.randomUUID()}.tmp`;await Ft(n,JSON.stringify(t),{mode:384}),await Mt(n,e)},Za=async e=>{let t=JSON.parse(await jt(e,`utf8`));return Pa.parse(t)},S={unversioned:void 0,v1:1,v2:2,v3:3,v4:4,v5:5,v6:6,v7:7,v8:8,v9:9,v10:10,v11:11,v12:12,v13:13,v14:14},Qa={[S.v1]:`layout`,[S.v2]:`layout`,[S.v3]:`typography`,[S.v4]:`typography`,[S.v5]:`typography`,[S.v6]:`geometry`,[S.v7]:`geometry`,[S.v8]:`geometry`,[S.v9]:`geometry`,[S.v10]:`geometry`,[S.v11]:`css`,[S.v12]:`text-shadow-blend`,[S.v13]:`format-number`,[S.v14]:`format-number`},$a=[`appearance-unsupported-component`,`styles-unsupported-component`,`text-shadow-blend-unsupported`,`recording-aspect-not-preserved`],C=e=>typeof e==`object`&&!!e&&!Array.isArray(e),eo=e=>Array.isArray(e)?e:void 0,w=(e,...t)=>Object.fromEntries(Object.entries(e).filter(([e])=>!t.includes(e))),to=e=>`${e}~mask`,no={alpha:`alpha`,luminance:`luminance`,vector:`outline`},ro=e=>{if(!C(e)||!C(e.compositing))return;let t=e.compositing.mask;return typeof t==`string`?no[t]:void 0},io=e=>C(e)?w(e,`blendMode`,`blendSource`):e,ao=e=>C(e)&&`paint`in e?{...w(e,`paint`,`alignment`),paints:[e.paint]}:e,oo=e=>{if(!C(e)||!C(e.progression))return e;let t=e.progression.startValue,n=e.value;return{...w(e,`progression`),value:typeof t==`number`&&typeof n==`number`?Math.max(t,n):n}},so=e=>C(e)&&e.kind===`image`?w(e,`adjustments`):e,co=e=>eo(e)?.filter(e=>!C(e)||e.kind!==`inner`).map(e=>C(e)?{...e,spread:0}:e)??e,lo=e=>{if(!C(e))return e;let t={...e,paint:io(e.paint)};return e.alignment===`inside`?{...t,alignment:`center`}:t},uo=e=>{if(!C(e)||e.kind!==`span`)return e;let t=w(e,`decorationBlendMode`),n=eo(e.fills);n!==void 0&&(t.fills=n.map(e=>io(e))),C(e.stroke)&&(t.stroke=lo(e.stroke));let r=eo(e.children);return r!==void 0&&(t.children=r.map(e=>uo(e))),t},fo=(e,t)=>{let n=eo(t.fills);if(n===void 0)return;let[r]=n,i=C(r)?r.blendMode:void 0;typeof i==`string`&&n.length===1&&(e.blendMode??`normal`)===`normal`&&(t.blendMode=i),t.fills=n.map(e=>io(e))},po=(e,t)=>{let n={...e};`border`in e&&(n.border=ao(e.border)),`outline`in e&&(n.outline=ao(e.outline));let r=eo(e.fills);r!==void 0&&(n.fills=r.map(e=>so(e)));let i=eo(e.filters);return i!==void 0&&(n.filters=i.map(e=>oo(e))),t?(`shadows`in e&&(n.shadows=co(e.shadows)),fo(e,n),n):n},mo=e=>{let t=e.props;if(!C(t)||!C(t.paintFallback))return{...e};let n=t.paintFallback.mask;if(n===void 0)return{...e};let r=w(t.paintFallback,`mask`),i=Object.keys(r).length===0?w(t,`paintFallback`):{...t,paintFallback:r},a=e.styles,o=w(e,`props`);return C(n)&&C(a)&&(o.styles=Object.fromEntries(Object.entries(a).filter(([e,t])=>n[e]!==t))),Object.keys(i).length>0&&(o.props=i),o},ho=e=>{let t=e.compositing;return C(t)?t.groupMode===void 0?t.paintSemantics===`web`&&(e.component===`frame`||e.component===`group`):t.groupMode===`isolated`:!1},go=e=>{let t={...e};return`stroke`in e&&(t.stroke=lo(e.stroke)),C(e.decoration)&&(t.decoration=w(e.decoration,`blendMode`)),t},_o=e=>{if(!C(e))return e;let t=w(mo(e),`compositing`);ho(e)&&C(t.styles)&&(t.styles={...t.styles,isolation:`isolate`});let n=e.component===`text`;if(C(e.appearance)&&(t.appearance=po(e.appearance,n)),!n)return t;C(e.typography)&&(t.typography=go(e.typography));let r=t.props,i=C(r)?eo(r.richText):void 0;return i!==void 0&&C(r)&&(t.props={...r,richText:i.map(e=>uo(e))}),t},vo=e=>C(e)&&typeof e.sortKey==`string`?e.sortKey:``,yo=e=>{let t=new Map;for(let[n,r]of Object.entries(e)){if(!C(r)||typeof r.parentId!=`string`)continue;let e=t.get(r.parentId);e===void 0?t.set(r.parentId,[n]):e.push(n)}let n=t=>vo(e[t]),r=(e,t)=>n(e)<n(t)?-1:Number(n(e)>n(t));for(let e of t.values())e.sort(r);return t},bo=(e,t,n)=>({id:e,label:`Mask`,labelOrigin:`generated`,component:`group`,styles:{},geometry:{kind:`mask`,maskId:t,mode:n}}),xo=(e,t,n,r)=>{let i=``;for(let a of t){let t=ro(e[a]);t!==void 0&&(i=to(a),n[i]=bo(i,a,t),r[i]=r[a]);let o=r[a];i!==``&&C(o)&&(r[a]={...o,parentId:i})}},So=(e,t,n)=>{for(let[r,i]of yo(n)){let a=i.filter(t=>ro(e[t])!==void 0),[o]=i,s=t[r],c=ro(e[o]);c!==void 0&&a.length===1&&C(s)&&s.component===`group`&&s.geometry===void 0?t[r]={...s,geometry:{kind:`mask`,maskId:o,mode:c}}:xo(e,i,t,n)}},Co=e=>{let t=e.nodes;if(!C(t))return e;let n=Object.fromEntries(Object.entries(t).map(([e,t])=>[e,_o(t)]));if(!C(e.relationships))return{...e,nodes:n};let r={...e.relationships};return So(t,n,r),{...e,nodes:n,relationships:r}},wo=e=>typeof e==`object`&&!!e&&!Array.isArray(e),To=e=>Array.isArray(e),Eo=e=>{if(!wo(e))return e;let t={...e};return Reflect.deleteProperty(t,`blendMode`),Reflect.deleteProperty(t,`blendSource`),t},Do=e=>{if(!wo(e)||e.component!==`text`||!wo(e.appearance))return e;let t=e.appearance.shadows;return To(t)?{...e,appearance:{...e.appearance,shadows:t.map(e=>Eo(e))}}:e},Oo=e=>{let t=e.nodes;return wo(t)?{...e,nodes:Object.fromEntries(Object.entries(t).map(([e,t])=>[e,Do(t)]))}:e},ko=new Set([...Object.values(S),15]),Ao=e=>ko.has(e),jo=new Set([`format-number`,`text-shadow-blend`,`css`,`geometry`]),Mo=e=>typeof e==`object`&&!!e&&!Array.isArray(e),No=e=>{if(!Mo(e))return e;let t=Object.fromEntries(Object.entries(e).filter(([e])=>e!==`gridTrack`)),n=t.container;Mo(n)&&(t.container=Object.fromEntries(Object.entries(n).filter(([e])=>e!==`materialized`)));for(let e of[`horizontal`,`vertical`]){let n=t[e];Mo(n)&&n.mode===`hug`&&(t[e]=Object.fromEntries(Object.entries(n).filter(([e])=>e!==`basis`)))}return t},Po=e=>{let t=e.version;if(!Ao(t))return null;if(t===15||!Mo(e.nodes))return e;let n=Object.entries(Qa).find(([e])=>Number(e)===t)?.[1];return jo.has(n)?{...e,version:15}:Object.values(e.nodes).some(e=>Mo(e)&&e.geometry!==void 0)?null:n===`typography`?{...e,version:15}:{...e,version:15,nodes:Object.fromEntries(Object.entries(e.nodes).map(([e,t])=>[e,Mo(t)&&t.layout!==void 0?{...t,layout:No(t.layout)}:t]))}},Fo=e=>{let t=Po(e);return t===null||t===e||e.version===S.v13||e.version===S.v14?t:Oo(e.version===S.v12?t:Co(t))},Io=e=>{if(e===15)return`current`;if(typeof e!=`number`||!Number.isSafeInteger(e)||e<1)return`refused`;if(e>15)return`ahead`;let t=new Map(Object.entries(Qa).map(([e,t])=>[Number(e),t]));for(let n=e;n<15;n+=1)if(t.get(n)!==`format-number`)return`refused`;return`number-only`};m.strictObject({}),m.object({firstAgentWorkAt:m.iso.datetime().nullable()});const Lo=m.object({cursor:m.string().nullable().default(null),limit:m.number().int().min(1).max(100).default(20)}),Ro=e=>m.object({items:m.array(e),truncated:m.boolean()}),zo=2048,Bo=m.enum([`never-captured`,`capture-pending`,`extension-unavailable`,`capture-failed`,`source-mismatch`,`upload-incomplete`,`blob-missing`,`image-load-failed`,`unsupported-legacy-state`]),Vo=m.object({background:m.string().optional(),documentVersion:m.number().int().positive().optional(),thumbnailId:m.uuid(),url:m.string(),width:m.literal(528),height:m.literal(312),bytes:m.number().int().min(1).max(1048576)});m.object({canvasId:m.uuid(),thumbnailId:m.uuid(),clientReleaseIdentity:m.string().min(1).max(100),attemptedOperation:m.literal(`thumbnail-download`),recoveryOutcome:m.literal(`fallback-shown`)}),m.object({recorded:m.literal(!0)});const Ho=m.enum([`invite-only`,`link-view`,`link-comment`,`link-edit`]),Uo=m.enum([`owner`,`can-edit`,`can-comment`,`can-view`]),Wo=m.enum([`can-edit`,`can-comment`,`can-view`]),Go=m.object({read:m.boolean(),comment:m.enum([`yes`,`sign-in`,`no`]),edit:m.enum([`yes`,`sign-in`,`no`]).default(`no`),grants:m.array(m.object({source:m.enum([`direct`,`team`,`link`]),accessLevel:Uo})).default([]),grantableAccessLevels:m.array(Wo).default([]),share:m.boolean(),manage:m.boolean(),readHistory:m.boolean().default(!1)}),Ko=m.object({id:m.uuid(),title:m.string().min(1),accessState:Ho,organisationId:m.uuid().nullable(),sourceUrl:m.string().nullable(),unresolvedCount:m.number().int().min(0),viewerCan:Go,createdAt:m.iso.datetime(),lastActivityAt:m.iso.datetime()});m.object({title:m.string().trim().min(1),organisationId:m.uuid().nullable().default(null),sourceUrl:m.string().nullable().default(null)}),Ko.extend({version:m.number().int().positive()}),m.object({canvasId:m.uuid()});const qo=m.union([m.literal(`own`),m.literal(`everything`),m.uuid()]);m.object({collection:qo.default(`own`),title:m.string().trim().min(1).optional().describe(`Title text to match before returning canvas ids.`),deleted:m.boolean().default(!1),accessState:Ho.optional(),scope:m.enum([`all`,`mine`,`shared`]).default(`all`),hasUnresolved:m.boolean().default(!1)});const Jo=Ko.extend({screenCount:m.number().int().min(0),hasRecording:m.boolean(),lastViewedAt:m.iso.datetime().nullable()});Ro(m.union([Jo.extend({thumbnail:Vo}),Jo.extend({thumbnail:m.null(),thumbnailFallbackReason:Bo})])),m.object({canvasId:m.uuid(),title:m.string().trim().min(1)}),m.object({canvasId:m.uuid()}),m.object({canvasId:m.uuid(),deletedAt:m.iso.datetime()}),m.object({canvasId:m.uuid(),organisationId:m.union([m.uuid(),m.literal(`personal`)])}),m.object({canvas:Ko}),m.object({canvasId:m.uuid(),organisationId:m.union([m.uuid(),m.literal(`personal`)]),title:m.string().trim().min(1).optional()}),m.object({canvas:Ko}),m.object({canvasId:m.uuid(),sourceCanvasId:m.uuid().optional(),organisationId:m.union([m.uuid(),m.literal(`personal`)]),title:m.string().trim().min(1),document:m.record(m.string(),m.unknown()),screenIds:m.array(m.uuid())}),m.object({canvas:Ko,document:m.record(m.string(),m.unknown())}),m.object({canvasId:m.uuid(),confirmation:m.string().min(1)}),m.object({canvasId:m.uuid()}),m.object({canvasId:m.uuid(),accessState:Ho}),m.object({canvas:Ko,widened:m.boolean()}),m.object({canvasId:m.uuid()}),m.object({lastViewedAt:m.iso.datetime().nullable()}),m.object({canvasId:m.uuid()}),m.object({canvasId:m.uuid()});const Yo=/javascript|vbscript|data\s*:\s*text\/html|expression\s*\(|@import/iu,Xo=m.string().refine(e=>!Yo.test(e),`unsafe CSS value`),T=m.number(),E=m.number().nonnegative(),D=T,Zo=E,O=m.number().min(0).max(1),Qo=m.string().min(1),$o=m.object({space:m.enum([`srgb`,`display-p3`]),red:O,green:O,blue:O,alpha:O,definitionId:Qo.optional()}),es=m.object({id:Qo,position:O,color:$o}),ts=m.object({id:Qo,visible:m.boolean()}),ns=ts.extend({kind:m.literal(`blur`),value:Zo,parameter:m.enum([`radius`,`standard-deviation`]).optional()}),rs=[ts.extend({kind:m.literal(`brightness`),value:Zo}),ts.extend({kind:m.literal(`contrast`),value:Zo}),ts.extend({kind:m.literal(`grayscale`),value:O}),ts.extend({kind:m.literal(`hue-rotate`),value:D}),ts.extend({kind:m.literal(`invert`),value:O}),ts.extend({kind:m.literal(`saturate`),value:Zo}),ts.extend({kind:m.literal(`sepia`),value:O})],is=m.discriminatedUnion(`kind`,[ns,...rs]),as=m.discriminatedUnion(`kind`,[ns.extend({progression:m.object({startValue:Zo,start:m.object({x:D,y:D}),end:m.object({x:D,y:D})}).optional()}),...rs]),os=m.tuple([D,D,D,D,D,D]).refine(([e,t,n,r])=>e*r!==t*n,`paint transform must be invertible`),ss=m.enum([`normal`,`multiply`,`screen`,`overlay`,`darken`,`lighten`,`plus-lighter`,`color-dodge`,`color-burn`,`hard-light`,`soft-light`,`difference`,`exclusion`,`hue`,`saturation`,`color`,`luminosity`]),cs=m.object({kind:m.literal(`figma`),originalMode:m.string(),mappedMode:ss,sourceGuid:m.string().optional(),path:m.array(m.string())}),ls=m.object({id:Qo,blendMode:ss.optional(),blendSource:cs.optional(),visible:m.boolean(),opacity:O}),us=m.discriminatedUnion(`kind`,[ls.extend({kind:m.literal(`solid`),color:$o}),ls.extend({kind:m.literal(`linear-gradient`),angle:D,transform:os.optional(),stops:m.array(es).min(2)}),ls.extend({kind:m.literal(`radial-gradient`),center:m.object({x:D,y:D}),radius:m.object({x:Zo,y:Zo}),transform:os.optional(),stops:m.array(es).min(2)}),ls.extend({kind:m.literal(`angular-gradient`),transform:os,stops:m.array(es).min(2)}),ls.extend({kind:m.literal(`diamond-gradient`),transform:os,stops:m.array(es).min(2)}),ls.extend({kind:m.literal(`image`),assetId:m.string().min(1),fit:m.enum([`fill`,`cover`,`fit`,`crop`,`tile`]),tileScale:D.positive().optional(),tileOrigin:m.enum([`center`,`top-left`]).optional(),rotation:m.union([m.literal(0),m.literal(90),m.literal(180),m.literal(270)]).optional(),crop:m.object({x:O,y:O,width:O,height:O}).optional(),transform:os.optional(),filters:m.array(is).optional(),naturalSize:m.object({width:D.positive(),height:D.positive()}).optional()}).refine(e=>e.crop===void 0||e.transform===void 0,{message:`image paint cannot have both a crop rectangle and an affine transform`,path:[`transform`]})]),ds=m.intersection(us,m.object({alternatives:m.partialRecord(m.enum([`solid`,`linear-gradient`,`radial-gradient`,`angular-gradient`,`diamond-gradient`,`image`]),us).optional(),recentGradient:m.enum([`linear-gradient`,`radial-gradient`,`angular-gradient`,`diamond-gradient`]).optional()})),fs=m.object({id:Qo,name:m.string().trim().min(1),value:m.union([$o.omit({definitionId:!0}),m.object({definitionId:Qo})]),source:m.object({kind:m.literal(`figma`),key:Qo,modeId:Qo.optional()}).optional()}),ps=m.object({op:m.literal(`setArtworkColor`),nodeId:m.literal(`root`),colorId:m.string().min(1),definition:fs.nullable()}).refine(e=>e.definition===null||e.definition.id===e.colorId,`colour identity must match`),ms=m.object({ratio:E,offset:T.optional()}),hs=m.object({min:E.optional(),max:E.optional(),minParent:ms.optional(),maxParent:ms.optional()}).refine(({min:e,max:t})=>e===void 0||t===void 0||e<=t,`size minimum cannot exceed maximum`),gs=m.discriminatedUnion(`mode`,[m.object({mode:m.literal(`fixed`),value:E}).strict(),hs.extend({mode:m.literal(`hug`),implicitExtent:E.optional()}).strict(),hs.extend({mode:m.literal(`fill`),offset:T.optional()}).strict()]),_s=m.object({top:E,right:E,bottom:E,left:E}),vs=m.union([m.literal(`auto`),T]),ys=m.object({top:vs,right:vs,bottom:vs,left:vs}),bs=m.object({mode:m.enum([`auto-fill`,`auto-fit`]),minimum:m.number().positive()}),xs=m.object({x:T,y:T}),Ss=m.object({direction:m.enum([`row`,`column`]),alignItems:m.enum([`start`,`center`,`end`,`stretch`]),alignContent:m.enum([`start`,`center`,`end`,`stretch`,`space-between`,`space-around`,`space-evenly`]).optional(),justifyContent:m.enum([`start`,`center`,`end`,`space-between`,`space-around`,`space-evenly`]),gap:T,rowGap:T.optional(),columnGap:T.optional(),crossGapMode:m.literal(`auto`).optional(),wrap:m.enum([`nowrap`,`wrap`]).optional(),gridColumns:m.number().int().positive().optional(),gridAutoRepeat:bs.optional(),padding:_s}).strict(),Cs=m.object({button:m.literal(!0).optional(),overflowClip:m.literal(!0).optional(),lineAboveBorderBottom:T.optional()}).strict(),ws=m.object({top:E.optional(),right:E.optional(),bottom:E.optional(),left:E.optional()}).strict(),Ts=m.object({ratio:T,offset:T.optional()}).strict(),Es=m.object({x:Ts.optional(),y:Ts.optional()}).strict(),Ds=m.object({rotation:T.optional(),flipHorizontal:m.boolean().optional(),flipVertical:m.boolean().optional(),aspectRatioLocked:m.boolean().optional(),aspectRatio:m.number().positive().optional(),horizontal:gs.optional(),vertical:gs.optional(),position:m.enum([`flow`,`absolute`]).optional(),retainedIgnore:m.literal(!0).optional(),gridParticipation:m.literal(`unassigned`).optional(),gridEmptyPlacement:m.literal(`manual`).optional(),gridAutoTrackPolicy:m.object({rows:m.literal(`extend-last`).optional(),columns:m.literal(`extend-last`).optional()}).strict().optional(),retainedFlexSpacing:m.object({gap:m.union([T,Xo.min(1)]),counterGap:m.union([T,Xo.min(1)]),crossGapMode:m.literal(`auto`).optional()}).strict().optional(),alignSelf:m.enum([`auto`,`start`,`center`,`end`,`stretch`]).optional(),flexGrow:E.optional(),flexShrink:E.optional(),flexBasis:m.union([m.literal(`auto`),E,ms]).optional(),flowOffset:xs.optional(),positionParent:Es.optional(),order:T.int().optional(),margin:ys.partial().optional(),clipContent:m.boolean().optional(),baselineSource:Cs.optional(),scrollbarGutter:ws.optional(),container:Ss.partial().extend({padding:_s.partial().optional()}).optional()}).strict(),Os=T,k=E,ks=m.number().min(0).max(1),As=m.string().min(1),js=m.object({topLeft:k,topRight:k,bottomRight:k,bottomLeft:k,smoothing:ks.optional()}),Ms=m.array(k).min(1),Ns=m.enum([`none`,`round`,`square`]),Ps=m.object({visible:m.boolean(),layoutInclusion:m.enum([`always`,`visible`,`none`]).optional(),width:m.object({top:k,right:k,bottom:k,left:k}),style:m.enum([`solid`,`dashed`,`dotted`]),paints:m.array(ds),dashPattern:Ms.optional(),dashCap:Ns.optional(),dashOrigin:m.literal(`css`).optional(),alignment:m.enum([`inside`,`center`,`outside`]).optional()}),Fs=Ps.pick({width:!0,style:!0,layoutInclusion:!0}),Is=m.object({visible:m.boolean(),width:k,offset:Os,style:m.enum([`solid`,`dashed`,`dotted`]),paints:m.array(ds),dashPattern:Ms.optional(),dashCap:Ns.optional()}),Ls=m.object({id:As,visible:m.boolean(),kind:m.enum([`outer`,`inner`]),color:$o,offsetX:Os,offsetY:Os,blur:k,spread:Os,blendMode:ss.optional(),blendSource:cs.optional(),isShownBehindNode:m.boolean().optional()}),Rs=m.object({opacity:ks,blendMode:ss,fills:m.array(ds),border:Ps,retainedBorder:Fs.optional(),outline:Is,radius:js,shadows:m.array(Ls),filters:m.array(is),backdropFilters:m.array(as)}),zs=Rs.partial().refine(e=>Object.keys(e).length>0,`appearance values cannot be empty`),Bs=[`opacity`,`blendMode`,`fills`,`border`,`retainedBorder`,`outline`,`radius`,`shadows`,`filters`,`backdropFilters`],Vs=m.enum(Bs),Hs=Rs.partial().extend({clear:m.array(Vs).min(1).max(Bs.length).optional()}).refine(e=>Object.keys(e).length>0,`appearance patch cannot be empty`).refine(({clear:e,...t})=>e===void 0||e.every(e=>t[e]===void 0),`appearance patch cannot set and clear the same property`),A=m.number(),j=m.number().nonnegative(),Us=m.string().regex(/^[\u{20}-\u{7E}]{4}$/u),Ws=Us.refine(e=>![`wght`,`opsz`].includes(e)),M=m.object({family:m.string().min(1),fallbackFamilies:m.array(m.string().min(1)),size:j,weight:m.number().min(1).max(1e3),variations:m.record(Ws,A).optional(),features:m.record(Us,m.number().int().nonnegative().max(65535)).optional(),opticalSize:m.discriminatedUnion(`mode`,[m.object({mode:m.literal(`auto`)}),m.object({mode:m.literal(`font-default`)}),m.object({mode:m.literal(`fixed`),value:A})]).optional(),style:m.enum([`normal`,`italic`,`oblique`]),lineHeight:m.discriminatedUnion(`mode`,[m.object({mode:m.literal(`normal`)}),m.object({mode:m.literal(`fixed`),value:j}),m.object({mode:m.literal(`percent`),value:j})]),letterSpacing:m.union([A,m.object({mode:m.literal(`percent`),value:A})]),align:m.enum([`left`,`center`,`right`,`justify`]),direction:m.enum([`auto`,`ltr`,`rtl`]).optional(),verticalAlign:m.enum([`top`,`middle`,`bottom`]),verticalTrim:m.enum([`none`,`cap-height`]).optional(),transform:m.enum([`none`,`uppercase`,`lowercase`,`capitalize`]),decoration:m.object({line:m.enum([`none`,`underline`,`line-through`]),style:m.enum([`solid`,`double`,`dotted`,`dashed`,`wavy`]),color:$o.optional(),blendMode:ss.optional(),thickness:m.union([j,m.object({mode:m.literal(`percent`),value:j}),m.object({mode:m.literal(`font-default`)})]).optional(),offset:m.union([A,m.object({mode:m.literal(`percent`),value:A})]).optional(),skipInk:m.enum([`auto`,`none`,`all`]).optional()}),stroke:m.object({width:j,paint:ds,alignment:m.enum([`center`,`outside`]).optional()}).optional(),wrapping:m.enum([`wrap`,`nowrap`,`pre`,`pre-line`,`pre-wrap`,`break-spaces`]),wrapStyle:m.enum([`auto`,`pretty`,`balance`]).optional(),paragraphSpacing:j.optional(),paragraphIndent:j.optional(),listStyle:m.enum([`none`,`bulleted`,`numbered`]).optional(),listSpacing:j.optional(),hangingList:m.boolean().optional(),hangingPunctuation:m.boolean().optional(),truncation:m.object({mode:m.enum([`none`,`ellipsis`]),maxLines:m.number().int().min(1).nullable()}).optional(),insets:m.object({top:A,right:A,bottom:A,left:A}).optional()}),Gs=M.pick({align:!0,direction:!0,wrapStyle:!0,paragraphSpacing:!0,paragraphIndent:!0,listStyle:!0,listSpacing:!0,hangingList:!0}).partial().extend({listLevel:m.number().int().min(1).optional(),listStart:m.number().int().min(1).optional()}).strict(),Ks=M.partial().strict(),qs=M.keyof().options,Js=Ks.extend({featureChanges:m.object({set:M.shape.features,clear:m.array(Us).optional(),removeIfEmpty:m.boolean().optional()}).strict().optional(),variationChanges:m.object({set:M.shape.variations,clear:m.array(Ws).optional(),removeIfEmpty:m.boolean().optional()}).strict().optional(),clear:m.array(M.keyof()).max(qs.length).optional()}).refine(e=>e.clear?.every(t=>e[t]===void 0)??!0,`a typography property cannot be set and cleared in the same patch`).refine(e=>[`features`,`variations`].every(t=>{let n=e[t===`features`?`featureChanges`:`variationChanges`];return n===void 0||e[t]===void 0&&e.clear?.includes(t)!==!0&&(n.clear?.every(e=>n.set?.[e]===void 0)??!0)}),`font settings cannot be replaced and patched, or set and cleared, together`),Ys={"font-family":[`family`,`fallbackFamilies`],"font-size":[`size`],"font-weight":[`weight`],"font-variation-settings":[`weight`,`variations`,`opticalSize`],"font-optical-sizing":[`opticalSize`],"font-feature-settings":[`features`],"font-style":[`style`],"line-height":[`lineHeight`],"letter-spacing":[`letterSpacing`],"text-align":[`align`],direction:[`direction`],"unicode-bidi":[`direction`],"text-indent":[`paragraphIndent`],"hanging-punctuation":[`hangingPunctuation`],"align-content":[`verticalAlign`],"text-box":[`verticalTrim`],"text-box-trim":[`verticalTrim`],"text-box-edge":[`verticalTrim`],"text-transform":[`transform`],"text-decoration":[`decoration`],"text-decoration-line":[`decoration`],"text-decoration-style":[`decoration`],"text-decoration-color":[`decoration`],"text-decoration-thickness":[`decoration`],"text-underline-offset":[`decoration`],"text-decoration-skip-ink":[`decoration`],"-webkit-text-stroke":[`stroke`],"-webkit-text-stroke-width":[`stroke`],"-webkit-text-stroke-color":[`stroke`],"--canvas-text-stroke-alignment":[`stroke`],"paint-order":[`stroke`],"white-space":[`wrapping`],"text-wrap-style":[`wrapStyle`],"text-wrap":[`wrapStyle`]},Xs=/^(?:behavior|-moz-binding)$/iu,Zs=m.string().min(1).regex(/^(?:--[\w-]+|-(?:webkit|moz|ms|o)-[a-z][a-z\d-]*|[a-z][a-z\d-]*)$/iu).refine(e=>!Xs.test(e),`unsafe CSS property`),N=m.object({id:m.string().min(1),property:Zs,value:Xo,enabled:m.boolean()}),Qs=m.object({declarations:m.array(N)}).refine(({declarations:e})=>new Set(e.map(e=>e.id)).size===e.length,`additional style ids must be unique`),$s=m.array(N.shape.id).refine(e=>new Set(e).size===e.length,`declaration ids must be unique`),ec=m.object({set:m.array(N).refine(e=>new Set(e.map(e=>e.id)).size===e.length,`declaration ids must be unique`).optional(),clear:$s.optional(),order:$s.optional(),empty:m.enum([`keep`,`remove`]).optional()}).strict().refine(e=>e.set?.every(t=>e.clear?.includes(t.id)!==!0)??!0,`a declaration cannot be set and cleared in the same patch`),tc=M.pick({family:!0,fallbackFamilies:!0,size:!0,weight:!0,style:!0,variations:!0,opticalSize:!0,features:!0,lineHeight:!0,letterSpacing:!0,transform:!0,decoration:!0,paragraphSpacing:!0,paragraphIndent:!0,listSpacing:!0,hangingList:!0,hangingPunctuation:!0,verticalTrim:!0,wrapStyle:!0}).extend({decoration:M.shape.decoration.omit({blendMode:!0})}).strict(),nc=tc.keyof().options,rc=m.object({id:m.string().min(1),name:m.string().trim().min(1),description:m.string().max(2e3),sortKey:m.string().min(1).optional(),sourceStyleId:m.string().min(1).optional(),sourceCanvasId:m.uuid().optional(),sourceRevision:m.number().int().positive().optional(),typography:tc.extend({listStyle:M.shape.listStyle}).transform(e=>(Reflect.deleteProperty(e,`listStyle`),e))}).strict().refine(e=>e.sourceCanvasId===void 0||e.sourceStyleId!==void 0,{message:`A source canvas belongs to a reference snapshot.`,path:[`sourceCanvasId`]}).refine(e=>e.sourceRevision===void 0||e.sourceCanvasId!==void 0&&e.sourceStyleId!==void 0,{message:`A published revision belongs to a source style and canvas.`,path:[`sourceRevision`]});m.object({id:rc.shape.id,position:m.enum([`normal`,`subscript`,`superscript`]).optional(),overrides:m.partialRecord(m.enum([`fontWeight`,`fontStyle`,`fontVariationSettings`,`fontOpticalSizing`,`textDecorationLine`,`textDecorationStyle`,`textDecorationColor`,`textDecorationThickness`,`textUnderlineOffset`,`textDecorationSkipInk`]),m.union([m.string().max(1e3),m.number()])).optional()}).strict();const ic=ds.array().optional();m.object({fills:ic}),Gs.pick({paragraphSpacing:!0,paragraphIndent:!0,listSpacing:!0,wrapStyle:!0}).extend({hangingPunctuation:M.shape.hangingPunctuation,verticalTrim:M.shape.verticalTrim,stroke:M.shape.stroke.nullable(),decorationBlendMode:M.shape.decoration.shape.blendMode,backgroundBlendMode:ss.optional()}).strip();const P=m.object({url:m.url(),expiresAt:m.iso.datetime(),headers:m.record(m.string(),m.string())}),ac=m.object({url:m.url(),expiresAt:m.iso.datetime(),bytes:m.number().int().min(0)}),oc=`/v1/canvas-assets/`,sc=[`image/avif`,`image/gif`,`image/jpeg`,`image/png`,`image/webp`],cc=m.string().regex(/^image\/[a-z0-9.+-]+$/u);m.object({canvasId:m.uuid(),contentType:m.enum(sc),bytes:m.number().int().positive()}),m.object({assetId:m.uuid(),path:m.string().startsWith(`/v1/canvas-assets/`),upload:P});const lc=(e,t)=>`${oc}${encodeURIComponent(e)}/${encodeURIComponent(t)}`,uc=m.tuple([m.uuid(),m.uuid()]),dc=e=>{if(!e.startsWith(`/v1/canvas-assets/`))return null;let t=uc.safeParse(e.slice(18).split(`/`)).data;return t===void 0?null:{canvasId:t[0],assetId:t[1]}},fc=[`font/ttf`,`font/otf`,`font/woff`,`font/woff2`,`font/collection`],pc=m.object({canvasId:m.uuid(),sha256:m.string().regex(/^[a-f0-9]{64}$/u)});pc.extend({bytes:m.number().int().positive()}).extend({contentType:m.enum(fc)}),m.object({path:m.string().startsWith(`/v1/canvas-assets/`)}).extend({upload:P});const mc=(e,t)=>`${oc}${encodeURIComponent(e)}/fonts/${encodeURIComponent(t)}`;m.object({canvasId:m.uuid(),sources:m.array(pc).min(1)}),m.object({resources:m.array(m.object({source:pc,path:m.string()}))});const hc=1e3,gc=new Set(fc),_c=(e,t)=>e===`image`?cc.safeParse(t).success:gc.has(t),vc=m.strictObject({canvasId:m.uuid(),clientToken:m.uuid()});m.discriminatedUnion(`kind`,[vc.extend({kind:m.literal(`image`),contentType:m.enum(sc),bytes:m.number().int().positive(),sha256:m.string().regex(/^[a-f0-9]{64}$/u)}),vc.extend({kind:m.literal(`font`),contentType:m.enum(fc),bytes:m.number().int().positive(),sha256:m.string().regex(/^[a-f0-9]{64}$/u)})]);const yc=m.discriminatedUnion(`kind`,[m.strictObject({kind:m.literal(`image`),width:m.number().int().positive(),height:m.number().int().positive()}),m.strictObject({kind:m.literal(`font`),family:m.string().min(1),subfamily:m.string(),style:m.enum([`normal`,`italic`,`oblique`]),minimumWeight:m.number().min(1).max(hc),maximumWeight:m.number().min(1).max(hc)}).refine(e=>e.minimumWeight<=e.maximumWeight,`Font weight bounds must be ordered.`)]);m.strictObject({canvasId:m.uuid(),clientToken:m.uuid(),assetId:m.uuid(),kind:m.enum([`image`,`font`]),contentType:m.string(),bytes:m.number().int().positive(),sha256:m.string().regex(/^[a-f0-9]{64}$/u),path:m.string().startsWith(`/v1/canvas-assets/`),state:m.enum([`awaiting_upload`,`ready`]),metadata:yc.nullable()}).refine(e=>e.state===`ready`==(e.metadata!==null),`Readiness must match verified metadata.`).refine(e=>e.metadata===null||e.metadata.kind===e.kind,`Metadata must describe the reserved asset kind.`).refine(e=>_c(e.kind,e.contentType),`Content type must match the asset kind.`).refine(e=>e.path===(e.kind===`image`?lc(e.canvasId,e.assetId):mc(e.canvasId,e.sha256)),`The resource path must match its native identity.`).safeExtend({upload:P.nullable()}).refine(e=>e.state===`awaiting_upload`==(e.upload!==null),`Only pending uploads receive upload access.`);const bc=[`top`,`right`,`bottom`,`left`];bc.map(e=>`padding-${e}`),bc.map(e=>`margin-${e}`);const xc=m.enum([`png`,`jpeg`]),Sc=m.number().positive(),Cc=m.strictObject({format:xc.optional(),scale:Sc.optional()}),wc=m.strictObject({format:xc.nullable().optional(),scale:Sc.nullable().optional()}).refine(e=>e.format!==void 0||e.scale!==void 0),Tc=m.number(),Ec=Tc.nonnegative(),Dc=m.string().min(1).max(200),Oc=m.string().regex(/^[MmLlHhVvCcSsQqTtAaZzEe\d\s.,+-]*$/u),kc=m.strictObject({x:Tc,y:Tc,width:Ec,height:Ec}),Ac=m.strictObject({kind:m.literal(`path`),path:Oc.min(1),fillRule:m.enum([`nonzero`,`evenodd`]),viewBox:kc.extend({width:Ec.positive(),height:Ec.positive()})}),jc=m.strictObject({kind:m.literal(`polygon`),count:m.number().int().min(3),innerRatio:m.number().min(0).max(1).optional(),cornerRadius:Ec,cornerSmoothing:m.number().min(0).max(1)}),Mc=m.enum([`union`,`subtract`,`intersect`,`exclude`]),Nc=m.strictObject({kind:m.literal(`boolean`),operation:Mc,operandIds:m.array(Dc).min(1).refine(e=>new Set(e).size===e.length),result:m.strictObject({path:Oc,fillRule:m.literal(`nonzero`),isEmpty:m.boolean(),bounds:kc,inputKey:m.string().regex(/^[a-f0-9]{16}$/u)}).refine(e=>e.isEmpty===(e.path===``))}),Pc=m.discriminatedUnion(`kind`,[Ac,jc,m.strictObject({kind:m.literal(`mask`),maskId:Dc,mode:m.enum([`alpha`,`luminance`,`outline`]).optional()}),Nc]),Fc=`Update Enhance: compositing is no longer supported. Use the isolation style or a mask group.`,Ic=`This change needs a newer version of Enhance. Refresh the editor, or update the Enhance plugin or command-line tool, then try again.`,Lc={forCaller:!0},Rc=m.number({error:Ic}).int({error:Ic}).positive({error:Ic}).meta({description:`The document format this client writes. The current format is 15.`,examples:[15]}),zc=(e,t,n)=>{let r=Io(e);r===`current`||r===`number-only`&&t===`names`||n.addIssue({code:`custom`,path:[`documentFormatVersion`],message:r===`ahead`?`Enhance is being updated. Try again in a minute.`:Ic,params:Lc,input:e})};m.object({signature:m.string().regex(/^[a-f0-9]{16}$/u),image:m.string().refine(e=>e.startsWith(`data:image/jpeg;base64,`)||dc(e)!==null),families:m.array(m.string().min(1)).min(1)});const F=m.object({x:m.number(),y:m.number(),width:m.number().nonnegative(),height:m.number().nonnegative()}),Bc=m.enum([`start`,`center`,`end`,`stretch`,`scale`]),Vc=m.object({x:Bc,y:Bc}),Hc=m.enum([`source`,`generated`,`content`,`user`]),I=m.looseObject({id:m.string().min(1),label:m.string(),component:m.string().min(1),labelOrigin:Hc.optional(),visible:m.boolean().optional(),locked:m.boolean().optional(),constraints:Vc.optional(),styles:m.record(m.string(),m.union([m.string(),m.number()])),layout:Ds.optional(),responsive:m.never().optional(),appearance:zs.optional(),exportSettings:Cc.optional(),typography:Ks.optional(),additionalStyles:Qs.optional(),geometry:Pc.optional(),compositing:m.never({error:Fc}).optional(),props:m.record(m.string(),m.unknown()).optional(),box:F.optional()}),Uc=m.object({version:m.literal(15),nodes:m.record(m.string(),I),relationships:m.record(m.string(),m.object({parentId:m.string().min(1),sortKey:m.string().min(1)})),tombstones:m.record(m.string(),m.literal(!0)).default({})}),Wc=m.record(m.string(),m.unknown());m.preprocess(e=>{let t=Wc.safeParse(e).data;return t===void 0?e:Object.keys(t).length===0?Gc():Fo(t)},Uc);const Gc=()=>({version:15,nodes:{root:{id:`root`,label:`Canvas`,component:`root`,labelOrigin:`generated`,visible:!0,locked:!1,styles:{}}},relationships:{},tombstones:{}}),Kc=m.string().min(1),qc=m.object({code:m.enum([`asset-unavailable`,`content-omitted`,`cross-origin-frame`,`nodes-truncated`,`responsive-behavior-not-editable`,`style-degraded`,`unsupported-surface`]),message:m.string().min(1),temporaryId:Kc.optional()}),Jc=m.enum([`text-stroke-inside`,`text-stroke-outside-translucent`,`text-stroke-paints`,`text-inner-shadow`,`text-shadow-spread`,`text-shadow-blend`,`text-background-blur`,`progressive-layer-blur`,`progressive-background-blur`,`blend-plus-darker`,`blend-linear-burn`,`image-exposure`,`image-contrast`,`image-saturation`,`image-temperature`,`image-tint`,`image-highlights`,`image-shadows`,`effect-noise`,`effect-texture`,`effect-glass`]),Yc=m.object({nodeCount:m.number().int().positive(),unsupportedFeatures:m.array(m.object({feature:Jc,count:m.number().int().positive()})).optional(),sourceNodeCount:m.number().int().positive().optional(),collapsedNodeCount:m.number().int().nonnegative().optional(),collapsedWrapperNodeCount:m.number().int().nonnegative().optional(),collapsedNeutralWrapperNodeCount:m.number().int().nonnegative().optional(),collapsedTransferredWrapperNodeCount:m.number().int().nonnegative().optional(),layoutContainerCount:m.number().int().nonnegative().optional(),removedLeafNodeCount:m.number().int().nonnegative().optional(),retainedSemanticOwnerNodeCount:m.number().int().nonnegative().optional(),truncatedNodeCount:m.number().int().nonnegative().optional(),addedLayoutNodeCount:m.number().int().nonnegative().optional(),issues:m.array(qc)}),Xc=I.omit({id:!0}).extend({temporaryId:Kc}),Zc=m.object({temporaryId:Kc,parentTemporaryId:Kc,sortKey:m.string().min(1)}),Qc=m.object({version:m.literal(1),rootTemporaryId:Kc,nodes:m.array(Xc).min(1),relationships:m.array(Zc),report:Yc.catch({nodeCount:0,issues:[]})}).transform(e=>({...e,report:{...e.report,nodeCount:e.nodes.length}})),$c=m.object({screenId:m.string().min(1),pageId:m.string().min(1)}),el={canvasId:m.uuid(),documentFormatVersion:Rc,mutationId:m.uuid(),baseVersion:m.number().int().positive(),draft:Qc};m.union([m.strictObject({...el,screenNodeId:m.string().min(1).describe(`The screen layer to convert beside itself.`)}),m.strictObject({...el,capture:$c.describe(`The stored page a new capture lands from, and the page its frame goes on.`)})]).superRefine((e,t)=>{zc(e.documentFormatVersion,`whole`,t)});const tl=m.object({canvasId:m.uuid(),mutationId:m.uuid(),previousVersion:m.number().int().positive(),version:m.number().int().positive(),rootNodeId:m.string().min(1),idMap:m.record(Kc,m.string().min(1)),insertedNodeIds:m.array(m.string().min(1)),removedNodeIds:m.array(m.string().min(1)),boxes:m.record(m.string().min(1),F),affectedBounds:F}),nl=[`queued`,`claimed`,`grant`,`navigate`,`document`,`sources`,`fonts`,`layout`,`target`,`capture`,`serialize`,`compile`,`commit`,`upload`,`complete`],rl=[`queued`,`running`,`succeeded`,`failed`,`cancelled`,`expired`],il=[`VERSION_CHANGED`,`TARGET_NOT_FOUND`,`TARGET_INVALID`,`OUTPUT_TOO_LARGE`,`READINESS_TIMEOUT`,`SOURCE_FAILED`,`BROWSER_CRASH`,`CAPTURE_FAILED`,`CONVERSION_FAILED`,`PREPARATION_FAILED`,`UPLOAD_FAILED`,`WORKER_UNAVAILABLE`,`CANCELLED`,`EXPIRED`,`INTERNAL`],al=[`ASSET_UNAVAILABLE`,`FONT_FALLBACK`,`LOCAL_FONT_FALLBACK`,`SOURCE_FALLBACK`,`SCALE_REDUCED`,`LAYOUT_FALLBACK`],ol=m.number().int().positive(),sl=m.object({x:m.number(),y:m.number(),width:m.number().positive(),height:m.number().positive()}),cl=m.discriminatedUnion(`kind`,[m.object({kind:m.literal(`content`)}),m.object({kind:m.literal(`page`),pageId:m.string().min(1)}),m.object({kind:m.literal(`node`),nodeId:m.string().min(1)}),m.object({kind:m.literal(`bounds`),bounds:sl})]),ll=m.object({kind:m.literal(`recording`),recordingId:m.uuid(),atMs:m.number().int().nonnegative()}),ul=m.object({kind:m.literal(`recording`),recordingId:m.uuid(),requestedAtMs:m.number().int().nonnegative(),settledAtMs:m.number().int().nonnegative()}),dl=m.object({recordingId:m.uuid(),atMs:m.number().int().nonnegative(),screenId:m.uuid(),screenNodeId:m.string().min(1).nullable(),pageId:m.string().min(1).optional(),viewport:m.object({width:m.number().int().positive(),height:m.number().int().positive()}),box:sl,version:m.number().int().positive(),alreadyPresent:m.boolean()}),fl=m.object({canvasId:m.uuid(),expectedVersion:m.number().int().positive().optional(),scope:m.strictObject({pageId:m.string().min(1).optional(),nodeIds:m.array(m.string().min(1))}).optional(),target:cl.default({kind:`content`}),sourceState:ll.optional(),scale:m.number().positive().default(1),maxOutputPixels:ol.optional(),format:m.literal(`png`).default(`png`)}).refine(e=>e.sourceState===void 0||e.target.kind===`node`,{message:`a source state requires a node render target`,path:[`sourceState`]}),pl=m.enum(nl);m.enum(rl);const ml=m.enum(il),hl=m.enum(al),gl=m.object({code:hl,message:m.string().min(1).max(500),sourceId:m.string().min(1).nullable()}),L=m.object({reason:ml,phase:pl,message:m.string().min(1).max(500),retryable:m.boolean(),sourceId:m.string().min(1).nullable()}),_l=m.object({phase:pl,durationMs:m.number().int().min(0)}),vl=m.object({canvasId:m.uuid(),requestedVersion:m.number().int().positive(),loadedVersion:m.number().int().positive(),target:cl,sourceState:ul.optional(),snapshot:dl.optional(),bounds:sl,width:m.number().int().positive(),height:m.number().int().positive(),scale:m.number().positive(),contentType:m.literal(`image/png`),bytes:m.number().int().positive(),warnings:m.array(gl),timings:m.array(_l),expiresAt:m.iso.datetime()}),yl=m.object({id:m.uuid(),canvasId:m.uuid(),purpose:m.enum([`inspection`,`snapshot`,`thumbnail`,`export`]),phase:pl,requestedVersion:m.number().int().positive(),target:cl,sourceState:ll.optional(),scale:m.number().positive(),maxOutputPixels:ol.optional(),format:m.literal(`png`),attempt:m.number().int().min(0),lastFailure:L.optional(),createdAt:m.iso.datetime(),updatedAt:m.iso.datetime()}),bl=m.discriminatedUnion(`state`,[yl.extend({state:m.literal(`queued`),result:m.null(),failure:m.null()}),yl.extend({state:m.literal(`running`),result:m.null(),failure:m.null()}),yl.extend({state:m.literal(`succeeded`),phase:m.literal(`complete`),result:vl,failure:m.null()}),yl.extend({state:m.literal(`failed`),result:m.null(),failure:L}),yl.extend({state:m.literal(`cancelled`),result:m.null(),failure:L.extend({reason:m.literal(`CANCELLED`)})}),yl.extend({state:m.literal(`expired`),result:m.null(),failure:L.extend({reason:m.literal(`EXPIRED`)})})]);m.object({job:bl,alreadyExists:m.boolean()}),m.object({jobId:m.uuid()}).extend({waitMs:m.number().int().min(0).max(1e4).optional()}),m.object({job:bl}),m.object({jobId:m.uuid()}),m.object({job:bl});const xl=m.discriminatedUnion(`status`,[m.object({status:m.literal(`available`),version:m.number().int().positive(),format:m.literal(`enhance-scene-json`),code:m.string(),prototypes:m.array(m.object({nodeId:m.string(),prototypeId:m.uuid(),deploymentId:m.uuid(),capability:m.literal(`canvas.read`),canvasPath:m.string(),input:m.object({canvasRef:m.uuid(),view:m.literal(`source`),nodeId:m.string()}),guidance:m.string()})),guidance:m.string()}),m.object({status:m.literal(`unavailable`),guidance:m.string()})]);m.object({canvasId:m.uuid(),nodeId:m.string().min(1),expectedVersion:m.number().int().positive(),scale:m.number().positive()}),m.object({jobId:m.uuid()}),m.object({jobId:m.uuid(),download:ac,source:xl.optional()});const Sl=m.strictObject({previewJobId:m.uuid(),scope:m.strictObject({pageId:m.string().min(1).optional(),nodeIds:m.array(m.string().min(1))}),placement:m.strictObject({kind:m.enum([`below-source`,`editable-below-source`])})});m.object({canvasId:m.uuid(),recordingId:m.uuid(),atMs:m.number().int().nonnegative(),context:m.strictObject({expectedVersion:m.number().int().positive(),request:Sl}).optional()}),m.object({job:bl,alreadyExists:m.boolean()});const Cl=m.object({rootIds:m.array(m.string().min(1))}),wl=m.discriminatedUnion(`kind`,[m.object({kind:m.literal(`adjacent`)}),m.object({kind:m.literal(`insert-children`),pageId:m.string().min(1).optional(),targetNodeId:m.string().min(1)}),m.object({kind:m.literal(`replace`),targetNodeId:m.string().min(1),onlyPicture:m.literal(!0).optional()})]),Tl=m.discriminatedUnion(`kind`,[m.object({kind:m.literal(`screen`),nodeId:m.string().min(1)}),m.object({kind:m.literal(`html`),html:m.string().min(1),label:m.string().min(1),idPrefix:m.string().min(1).regex(/^[\w-]+$/u).optional()})]),El=m.object({source:Tl,destination:wl,revisionPolicy:m.enum([`strict`,`rebase`]).optional()}).superRefine((e,t)=>{e.source.kind===`screen`&&e.destination.kind!==`adjacent`&&t.addIssue({code:`custom`,message:`stored screens convert beside their source`,path:[`destination`]}),e.source.kind===`html`&&e.destination.kind===`adjacent`&&t.addIssue({code:`custom`,message:`authored HTML requires an editable destination`,path:[`destination`]})}),Dl=m.discriminatedUnion(`kind`,[m.object({kind:m.literal(`screen`),nodeId:m.string().min(1)}),m.object({kind:m.literal(`html`),label:m.string().min(1)})]),Ol=m.object({id:m.uuid(),canvasId:m.uuid(),source:Dl,destination:wl,phase:pl,requestedVersion:m.number().int().positive(),attempt:m.number().int().nonnegative(),createdAt:m.iso.datetime(),updatedAt:m.iso.datetime()}),kl=m.discriminatedUnion(`state`,[Ol.extend({state:m.literal(`queued`),result:m.null(),failure:m.null()}),Ol.extend({state:m.literal(`running`),result:m.null(),failure:m.null()}),Ol.extend({state:m.literal(`succeeded`),phase:m.literal(`complete`),result:tl.extend({report:Yc}),failure:m.null()}),Ol.extend({state:m.literal(`failed`),result:m.null(),failure:L}),Ol.extend({state:m.literal(`cancelled`),result:m.null(),failure:L.extend({reason:m.literal(`CANCELLED`)})}),Ol.extend({state:m.literal(`expired`),result:m.null(),failure:L.extend({reason:m.literal(`EXPIRED`)})})]);El.and(m.object({canvasId:m.uuid(),expectedVersion:m.number().int().positive().optional(),mutationId:m.uuid().optional(),writeScope:Cl.optional(),scope:fl.shape.scope})).refine(e=>e.scope===void 0&&e.revisionPolicy!==`strict`||e.expectedVersion!==void 0,{message:`scoped or strict conversion requires an expected version`,path:[`expectedVersion`]}),m.object({job:kl,alreadyExists:m.boolean()}),m.object({jobId:m.uuid()}),m.object({job:kl}),m.object({jobId:m.uuid()}),m.object({job:kl}),m.discriminatedUnion(`state`,[m.object({state:m.literal(`loading`),jobId:m.uuid()}),m.object({state:m.literal(`ready`),jobId:m.uuid(),loadedVersion:m.number().int().positive(),draft:Qc}),m.object({state:m.literal(`failed`),jobId:m.uuid(),message:m.string().min(1)})]);const Al=m.object({add:m.array(m.object({resourceId:m.string().min(1)}).catchall(m.unknown())),remove:m.array(m.string().min(1))}),R=m.union([m.string(),T]),z=m.union([N.shape.value,T]).nullable().optional(),jl=m.strictObject({border:z,"border-block":z,"border-block-color":z,"border-block-style":z,"border-block-width":z,"border-block-end":z,"border-block-end-color":z,"border-block-end-style":z,"border-block-end-width":z,"border-block-start":z,"border-block-start-color":z,"border-block-start-style":z,"border-block-start-width":z,"border-bottom":z,"border-bottom-color":z,"border-bottom-style":z,"border-bottom-left-radius":R.optional(),"border-bottom-right-radius":R.optional(),"border-bottom-width":R.optional(),"border-color":m.string().nullable().optional(),"border-image":z,"border-image-source":z,"border-image-slice":z,"border-image-width":z,"border-image-outset":z,"border-image-repeat":z,"border-inline":z,"border-inline-color":z,"border-inline-style":z,"border-inline-width":z,"border-inline-end":z,"border-inline-end-color":z,"border-inline-end-style":z,"border-inline-end-width":z,"border-inline-start":z,"border-inline-start-color":z,"border-inline-start-style":z,"border-inline-start-width":z,"border-left":z,"border-left-color":z,"border-left-style":z,"border-left-width":R.optional(),"border-radius":R.nullable().optional(),"border-right":z,"border-right-color":z,"border-right-style":z,"border-right-width":R.optional(),"border-style":z,"border-top":z,"border-top-color":z,"border-top-style":z,"border-top-left-radius":R.optional(),"border-top-right-radius":R.optional(),"border-top-width":R.optional(),"border-width":R.nullable().optional(),outline:z,"outline-color":z,"outline-style":z,"outline-offset":R.optional(),"outline-width":R.optional()}),Ml=m.string().regex(/^(?:\d+(?:\.\d+)?|\.\d+)px$/u),Nl=m.string().regex(/^-?(?:\d+(?:\.\d+)?|\.\d+)px$/u),Pl=N.shape.value.refine(e=>!/\burl\s*\(/iu.test(e),`invalid text colour`),Fl=m.union([M.shape.weight,m.enum([`normal`,`bold`,`bolder`,`lighter`]),m.string().regex(/^\d+(?:\.\d+)?$/u).refine(e=>M.shape.weight.safeParse(Number(e)).success)]),B={color:Pl,"font-family":N.shape.value,"font-size":m.union([E,Ml]),"font-weight":Fl,"font-style":m.enum([`normal`,`italic`,`oblique`]),"letter-spacing":T,"line-height":m.union([m.number().positive(),m.string().regex(/^(?:\d+(?:\.\d+)?(?:px|em|rem|%)?|normal)$/u)]),"text-align":m.enum([`left`,`center`,`right`]),"white-space":m.enum([`normal`,`nowrap`,`pre`,`pre-wrap`,`pre-line`,`break-spaces`])},Il=m.strictObject({color:B.color.optional(),"font-family":B[`font-family`].optional(),"font-size":B[`font-size`].optional(),"font-weight":B[`font-weight`].optional(),"font-style":B[`font-style`].optional(),"letter-spacing":B[`letter-spacing`].optional(),"line-height":B[`line-height`].optional(),"text-align":B[`text-align`].optional(),"white-space":B[`white-space`].optional()}),Ll=m.enum([`start`,`end`,`left`,`right`,`center`,`justify`,`justify-all`,`match-parent`,`-webkit-left`,`-webkit-right`,`-webkit-center`]),Rl=m.union([B[`font-style`],m.string().regex(/^oblique -?(?:\d+(?:\.\d+)?|\.\d+)deg$/u)]),V=m.union([N.shape.value,T]).nullable().optional(),zl=m.strictObject({"text-decoration":V,"text-decoration-line":V,"text-decoration-style":V,"text-decoration-color":V,"text-decoration-thickness":V,"text-underline-offset":V,"text-decoration-skip-ink":V,color:B.color.nullable().optional(),"font-family":B[`font-family`].nullable().optional(),"font-size":B[`font-size`].nullable().optional(),"font-weight":B[`font-weight`].nullable().optional(),"font-optical-sizing":m.enum([`auto`,`none`]).nullable().optional(),"font-variation-settings":N.shape.value.nullable().optional(),"font-feature-settings":N.shape.value.nullable().optional(),"text-wrap":N.shape.value.nullable().optional(),"text-wrap-mode":N.shape.value.nullable().optional(),"text-wrap-style":N.shape.value.nullable().optional(),"text-box":N.shape.value.nullable().optional(),"text-box-trim":N.shape.value.nullable().optional(),"text-box-edge":N.shape.value.nullable().optional(),"font-style":Rl.nullable().optional(),"font-stretch":m.union([m.enum([`normal`,`ultra-condensed`,`extra-condensed`,`condensed`,`semi-condensed`,`semi-expanded`,`expanded`,`extra-expanded`,`ultra-expanded`]),m.string().regex(/^\d+(?:\.\d+)?%$/u)]).nullable().optional(),"letter-spacing":m.union([T,Nl,m.literal(`normal`)]).nullable().optional(),"line-height":B[`line-height`].nullable().optional(),"text-align":Ll.nullable().optional(),"text-indent":m.union([T,Nl]).nullable().optional(),"white-space":B[`white-space`].nullable().optional(),"word-spacing":m.union([T,Nl,m.literal(`normal`)]).nullable().optional(),direction:V,"unicode-bidi":V,"hanging-punctuation":V,"text-transform":V,"-webkit-text-stroke":V,"-webkit-text-stroke-width":V,"-webkit-text-stroke-color":V,"paint-order":V}),Bl=N.shape.value,H=m.union([m.string(),T]),U=m.union([N.shape.value,T]).nullable().optional(),Vl=zl.extend(jl.shape).extend({"align-content":U,"align-items":U,"align-self":U,"aspect-ratio":U,"block-size":U,bottom:U,"box-sizing":U,display:U,flex:U,"flex-basis":U,"flex-direction":U,"flex-grow":U,"flex-shrink":U,"flex-wrap":U,grid:U,"grid-template":U,"grid-template-columns":U,"grid-template-rows":U,"grid-template-areas":U,"grid-auto-columns":U,"grid-auto-rows":U,"grid-auto-flow":U,"grid-row":U,"grid-column":U,"grid-area":U,"grid-row-start":U,"grid-row-end":U,"grid-column-start":U,"grid-column-end":U,"justify-items":U,"justify-self":U,"place-items":U,"place-self":U,"place-content":U,height:U,"inline-size":U,inset:U,"inset-block":U,"inset-block-end":U,"inset-block-start":U,"inset-inline":U,"inset-inline-end":U,"inset-inline-start":U,isolation:U,"justify-content":U,left:U,margin:U,"margin-block":U,"margin-block-end":U,"margin-block-start":U,"margin-inline":U,"margin-inline-end":U,"margin-inline-start":U,"max-block-size":U,"max-height":U,"max-inline-size":U,"max-width":U,"min-block-size":U,"min-height":U,"min-inline-size":U,"min-width":U,order:U,padding:U,"padding-block":U,"padding-block-end":U,"padding-block-start":U,"padding-inline":U,"padding-inline-end":U,"padding-inline-start":U,position:U,right:U,top:U,width:U,background:m.string().nullable().optional(),"background-color":m.string().nullable().optional(),"background-image":U,"background-size":U,"background-position":U,"background-repeat":U,"background-origin":U,"background-blend-mode":U,"box-shadow":m.string().nullable().optional(),"column-gap":H.optional(),gap:H.optional(),"margin-bottom":H.optional(),"margin-left":H.optional(),"margin-right":H.optional(),"margin-top":H.optional(),opacity:m.union([m.string(),m.number()]).nullable().optional(),overflow:Bl.nullable().optional(),"overflow-x":Bl.nullable().optional(),"overflow-y":Bl.nullable().optional(),"padding-bottom":H.optional(),"padding-left":H.optional(),"padding-right":H.optional(),"padding-top":H.optional(),"row-gap":H.optional(),"stroke-width":H.optional()}),Hl=m.union([Vl.keyof(),N.shape.property.refine(e=>e.startsWith(`--`))]),Ul=Vl.catchall(U).refine(e=>Object.keys(e).every(e=>Hl.safeParse(e).success)),Wl=m.record(m.string(),m.unknown()),Gl=m.number().int().positive(),Kl=m.discriminatedUnion(`kind`,[m.object({kind:m.literal(`retain`),count:Gl,attributes:Wl.optional(),shouldPreserveParagraph:m.boolean().optional()}),m.object({kind:m.literal(`delete`),count:Gl}),m.object({kind:m.literal(`insert`),text:m.string().min(1).refine(e=>e.isWellFormed()),attributes:Wl.optional(),shouldPreserveParagraph:m.boolean().optional()})]),ql=m.object({baseLength:m.number().int().nonnegative(),representation:m.enum([`plain`,`rich`,`links`]).optional(),steps:m.array(Kl),endAttributes:Wl.optional(),properties:Wl.refine(e=>[`text`,`richText`,`links`].every(t=>!Object.hasOwn(e,t))).optional()}).superRefine((e,t)=>{let n=0;for(let t of e.steps)t.kind!==`insert`&&(n+=t.count);n!==e.baseLength&&t.addIssue({code:`custom`,message:`text change must consume its exact base`})}),Jl=m.object({actionId:m.string().min(1),baseVersion:m.number().int().nonnegative(),isActive:m.boolean()}),Yl=m.object({baseVersion:m.number().int().nonnegative(),after:m.array(m.string().min(1)),change:ql}),Xl=m.object({actionId:m.string().min(1),baseVersion:m.number().int().nonnegative(),originalChange:ql,inverse:ql,history:Jl.optional(),source:Yl.optional()}),Zl=m.object({op:m.literal(`editText`),nodeId:m.string().min(1),change:ql,actionId:m.string().min(1).optional(),revision:Xl.optional(),history:Jl.optional(),source:Yl.optional()}),Ql=2e3,$l=m.object({title:m.string().trim().min(1).max(200)}).strict(),eu=m.array(rc.shape.id),tu=m.object({canvasId:m.uuid()}),nu=m.object({definition:rc.refine(e=>e.sourceStyleId===void 0),revision:m.number().int().positive(),fontFaces:m.array(m.record(m.string(),m.unknown()))}),ru=m.object({styles:m.array(nu).refine(e=>new Set(e.map(e=>e.definition.id)).size===e.length)});tu.extend({revision:m.number().int().positive(),documentVersion:m.number().int().positive(),description:m.string().max(Ql),publishedAt:m.iso.datetime(),...ru.shape}),tu.extend({mutationId:m.uuid(),expectedRevision:m.number().int().nonnegative(),documentVersion:m.number().int().positive(),publish:eu,remove:eu,description:m.string().trim().max(Ql)}).strict().refine(e=>{let t=[...e.publish,...e.remove];return t.length>0&&new Set(t).size===t.length},{message:`Select each changed style once.`});const iu=m.object({canvasId:m.uuid(),title:m.string().max(200)});m.object({search:m.string().trim().max(200).default(``),cursor:iu.nullable().default(null),limit:m.number().int().min(1).max(50).default(20)});const au=m.object({canvasId:m.uuid(),title:m.string(),organisationId:m.uuid().nullable(),revision:m.number().int().positive(),styleCount:m.number().int().positive(),publishedAt:m.iso.datetime()});m.object({items:m.array(au).max(50),nextCursor:iu.nullable()});const ou=m.object({parentId:m.string().min(1),sortKey:m.string().min(1)}),su=m.object({op:m.literal(`insertConvertedSubtree`),destination:wl,sourceNodeId:m.string().min(1).optional(),rootNodeId:m.string().min(1),nodes:m.record(m.string().min(1),I),relationships:m.record(m.string().min(1),ou)}),W=m.string().min(1),cu=F.extend({width:m.number().positive(),height:m.number().positive()}),lu=m.object({parentId:W,afterId:W.optional()}),uu=ou,du=m.object({op:m.literal(`setStyles`),nodeId:W,styles:Ul,clear:m.array(Hl).min(1).refine(e=>new Set(e).size===e.length).optional()}).refine(e=>(e.clear??[]).every(t=>!Object.hasOwn(e.styles,t))),fu=m.discriminatedUnion(`op`,[su,m.object({op:m.literal(`insertNode`),node:I,parentage:uu,prototypeSource:m.object({canvasId:m.uuid(),nodeId:W,documentVersion:m.number().int().nonnegative(),versionEntryId:m.uuid().optional()}).optional(),screenSource:m.object({canvasId:m.uuid()}).optional(),pageCopyBase:m.string().refine(e=>e.trim()!==``).optional()}),lu.extend({op:m.literal(`insertText`),nodeId:W,label:m.string().default(`Text`),text:m.string(),box:cu,styles:Il.default({})}),lu.extend({op:m.literal(`insertPrototype`),nodeId:W,label:m.string().default(`Prototype`),prototypeId:m.uuid(),deploymentId:m.uuid(),box:cu,canvasPageId:W.optional()}),m.object({op:m.literal(`setPrototypeDeployment`),nodeId:W,prototypeId:m.uuid(),deploymentId:m.uuid(),expected:m.object({prototypeId:m.uuid(),deploymentId:m.uuid()}).optional()}),Zl,m.object({op:m.literal(`setText`),nodeId:W,text:m.string()}),m.object({op:m.literal(`setBox`),nodeId:W,box:m.union([F,m.literal(`default`)])}),m.object({op:m.literal(`setLabel`),nodeId:W,label:m.string().trim().min(1),labelOrigin:Hc.nullable().optional()}),m.object({op:m.literal(`setContainerKind`),nodeId:W,component:m.enum([`frame`,`group`])}),m.object({op:m.literal(`setVisibility`),nodeId:W,visible:m.boolean().nullable()}),m.object({op:m.literal(`setLocked`),nodeId:W,locked:m.boolean().nullable()}),m.object({op:m.literal(`setConstraints`),nodeId:W,constraints:Vc.nullable()}),du,m.object({op:m.literal(`patchExportSettings`),nodeId:W,exportSettings:wc}),m.object({op:m.literal(`setAppearance`),nodeId:W,appearance:Hs}),m.object({op:m.literal(`setLayout`),nodeId:W,layout:m.union([Ds,m.literal(`default`)]),fields:m.array(Ds.keyof()).optional()}),m.object({op:m.literal(`patchTypography`),nodeId:W,typography:Js}),m.object({op:m.literal(`setTypography`),nodeId:W,typography:m.union([Ks,m.literal(`default`)])}),m.object({op:m.literal(`patchAdditionalStyles`),nodeId:W,additionalStyles:ec}),m.object({op:m.literal(`setAdditionalStyles`),nodeId:W,additionalStyles:m.union([Qs,m.literal(`default`)])}),ps,m.object({op:m.literal(`setTextStyleLibrary`),nodeId:m.literal(`root`),sourceCanvasId:m.uuid(),library:$l.nullable()}),m.object({op:m.literal(`patchFontLibrary`),nodeId:m.literal(`root`),fonts:Al}),m.object({op:m.literal(`setTextStyle`),nodeId:m.literal(`root`),styleId:rc.shape.id,textStyle:rc.nullable(),changedTextNodeIds:m.array(W).optional()}).refine(e=>e.textStyle===null||e.textStyle.id===e.styleId,`text style identity must match`),m.object({op:m.literal(`setGeometry`),nodeId:W,geometry:m.union([Pc,m.literal(`default`)])}),m.object({op:m.literal(`setProps`),nodeId:W,props:m.union([m.record(m.string(),m.unknown()),m.literal(`default`)])}),m.object({op:m.literal(`setParentage`),nodeId:W,parentage:uu}),lu.extend({op:m.literal(`move`),nodeId:W}),m.object({op:m.literal(`remove`),nodeId:W,removedText:m.record(W,I.pick({props:!0})).optional()})]),pu=fu.options.map(e=>e.shape.op.value),mu=m.preprocess((e,t)=>typeof e!=`object`||!e||Reflect.get(e,`op`)!==`setCompositing`?e:(t.issues.push({code:`custom`,message:Fc,input:e}),m.NEVER),fu);tl.extend({operation:su,next:m.array(m.string().min(1))});const hu=m.record(m.string(),m.unknown());m.object({canvasId:m.uuid(),afterVersion:m.number().int().positive().optional()});const gu=m.object({screenId:m.uuid(),clientToken:m.uuid(),route:m.string().nullable(),title:m.string().nullable(),viewport:m.object({width:m.number().int().positive(),height:m.number().int().positive()}),atMs:m.number().int().min(0).nullable(),sourceRecordingId:m.uuid().nullable(),assetBundle:m.object({assetBundleId:m.uuid(),sourceUrl:m.string(),assets:m.array(m.object({url:m.string(),contentType:m.string(),path:m.string().startsWith(`/v1/recording-assets/`)})),missingAssetCount:m.number().int().min(0)}).nullable(),download:ac.nullable()}),_u=m.object({mutationId:m.uuid(),previousVersion:m.number().int().positive(),version:m.number().int().positive(),operations:m.array(mu)});m.object({mutations:m.array(_u).optional(),version:m.number().int().min(1),restoreFenceVersion:m.number().int().positive().optional(),document:hu.optional(),screens:m.array(gu)}).extend({document:hu}),m.object({canvasId:m.uuid(),baseVersion:m.number().int().min(1),document:hu.refine(e=>Uc.safeParse(e).success,`A save requires a valid current-format canvas document.`),screenIds:m.array(m.uuid())}),m.discriminatedUnion(`outcome`,[m.object({outcome:m.literal(`saved`),version:m.number().int().min(1)}),m.object({outcome:m.literal(`conflict`),version:m.number().int().min(1),document:hu})]);const vu=m.object({start:m.number().int().nonnegative(),end:m.number().int().positive(),href:m.url().refine(e=>[`http:`,`https:`].includes(new URL(e).protocol))});m.object({text:m.string(),links:m.array(vu).optional()});const yu=m.enum([`position`,`layout`,`clip`,`cornerRadius`,`blending`,`typography`,`nativeControl`,`textDecoration`,`fill`,`outline`,`textStroke`,`border`,`outerShadow`,`innerShadow`,`filters`,`additionalStyles`,`vector`,`export`,`source`]),bu=m.object({id:m.string().min(1),label:m.string().max(500),kind:m.string().min(1).max(100),parentId:m.string().min(1).nullable(),childCount:m.number().int().min(0),box:F.nullable(),propertySections:m.array(yu)});m.object({canvasId:m.uuid()}),m.object({canvasId:m.uuid(),openUrl:m.url(),title:m.string().min(1),version:m.number().int().positive(),nodeCount:m.number().int().min(0),rootChildCount:m.number().int().min(0),bounds:F.nullable(),kinds:m.record(m.string(),m.number().int().min(0)),next:m.array(m.string().min(1))}),m.object({canvasId:m.uuid()}),m.object({canvasId:m.uuid(),version:m.number().int().positive(),nodes:m.array(bu)}),m.object({canvasId:m.uuid(),nodeId:m.string().min(1)}),m.object({canvasId:m.uuid(),version:m.number().int().positive(),node:bu.extend({styles:m.record(m.string(),m.union([m.string(),m.number()])),layout:Ds.optional(),appearance:zs.optional(),geometry:Pc.optional(),typography:Ks.optional(),additionalStyles:Qs.optional(),props:m.record(m.string(),m.unknown()),children:m.array(m.string().min(1))}),next:m.array(m.string().min(1))});const xu={insertConvertedSubtree:`whole`,insertNode:`whole`,insertText:`names`,insertPrototype:`names`,setPrototypeDeployment:`names`,editText:`names`,setText:`names`,setBox:`names`,setLabel:`names`,setContainerKind:`names`,setVisibility:`names`,setLocked:`names`,setConstraints:`names`,setStyles:`names`,patchExportSettings:`names`,setAppearance:`names`,setLayout:`whole`,patchTypography:`names`,setTypography:`whole`,patchAdditionalStyles:`names`,setAdditionalStyles:`whole`,setArtworkColor:`whole`,setTextStyleLibrary:`whole`,patchFontLibrary:`names`,setTextStyle:`whole`,setGeometry:`whole`,setProps:`whole`,setParentage:`names`,move:`names`,remove:`names`},Su=I.shape.id,Cu=F.extend({width:m.number().positive(),height:m.number().positive()}),wu=m.record(Su,Su),Tu=m.strictObject({fingerprint:m.string().regex(/^[a-f0-9]{64}$/u),revisionPolicy:m.enum([`strict`,`rebase`]),copiedNodeIds:wu.optional()});m.object({canvasId:m.uuid(),mutationId:m.uuid(),documentFormatVersion:Rc,baseVersion:m.number().int().positive(),operations:m.array(mu).min(1),requestContext:Tu.optional(),writeScope:Cl.optional()}).superRefine((e,t)=>{zc(e.documentFormatVersion,e.operations.every(e=>xu[e.op]===`names`)?`names`:`whole`,t)});const Eu=m.object({canvasId:m.uuid(),mutationId:m.uuid(),previousVersion:m.number().int().positive(),version:m.number().int().positive(),operations:m.array(mu),insertedNodeIds:m.array(Su),changedNodeIds:m.array(Su),removedNodeIds:m.array(Su),boxes:m.record(Su,F),affectedBounds:Cu.nullable(),copiedNodeIds:wu.optional(),next:m.array(m.string().min(1))});m.strictObject({canvasId:m.uuid(),mutationId:m.uuid(),fingerprint:Tu.shape.fingerprint}),m.discriminatedUnion(`state`,[m.strictObject({state:m.literal(`not-found`)}),m.strictObject({state:m.literal(`committed`),result:Eu})]);const Du={nodes:1e3,fields:20,id:200,label:500,value:1e3},Ou=m.object({available:m.boolean(),omittedNodes:m.number().int().nonnegative(),nodes:m.array(m.object({nodeId:m.string().min(1),label:m.string().max(Du.label),kind:m.enum([`inserted`,`removed`,`changed`,`unchanged`,`unavailable`]),omittedFields:m.number().int().nonnegative(),fields:m.array(m.object({label:m.string().max(Du.id),before:m.string().max(Du.value).nullable(),after:m.string().max(Du.value).nullable(),truncated:m.boolean()})).max(Du.fields)})).max(Du.nodes)}),ku=[`position`,`layout`,`cornerRadius`,`blending`,`fill`,`outline`,`border`,`outerShadow`,`innerShadow`,`filters`,`additionalStyles`,`export`],Au=[`position`,`layout`,`clip`,...ku.filter(e=>e!==`position`&&e!==`layout`)],ju=[...ku,`vector`];Object.fromEntries([{objectKind:`prototype`,label:`Prototype`,category:`import`,capabilities:{canSelect:!0,canContainChildren:!1,canEditProperties:!0,commentAnchor:`node`},capture:{preservesHtmlCssAssets:!0},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`reflow`,preservesAspect:!1,canLockAspectRatio:!0},propertySections:[`position`,`layout`,`cornerRadius`,`blending`,`outline`,`outerShadow`,`innerShadow`,`filters`]},{objectKind:`root`,label:`Canvas`,category:`container`,capabilities:{canSelect:!1,canContainChildren:!0,canEditProperties:!1},selectionBehavior:{hitTarget:`children`},propertySections:[]},{objectKind:`page`,label:`Page`,category:`container`,capabilities:{canSelect:!1,canContainChildren:!1,canEditProperties:!1},selectionBehavior:{hitTarget:`children`},propertySections:[]},{objectKind:`screen`,label:`Screen`,category:`import`,capabilities:{canSelect:!0,canContainChildren:!1,canEditProperties:!1,commentAnchor:`screen`},capture:{preservesHtmlCssAssets:!0},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`reflow`,preservesAspect:!1,canLockAspectRatio:!0},propertySections:[`position`,`layout`,`source`]},{objectKind:`frame`,label:`Frame`,category:`container`,capabilities:{canSelect:!0,canContainChildren:!0,canEditProperties:!0,commentAnchor:`node`},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`reflow`,preservesAspect:!1,canLockAspectRatio:!0},propertySections:Au},{objectKind:`group`,label:`Group`,category:`container`,capabilities:{canSelect:!0,canContainChildren:!0,canEditProperties:!0,commentAnchor:`node`},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`reflow`,preservesAspect:!1,canLockAspectRatio:!0},propertySections:[`position`,`layout`,`blending`,`filters`,`additionalStyles`,`export`]},{objectKind:`rectangle`,label:`Rectangle`,category:`primitive`,capabilities:{canSelect:!0,canContainChildren:!1,canEditProperties:!0,commentAnchor:`node`},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`reflow`,preservesAspect:!1,canLockAspectRatio:!0},propertySections:ku},{objectKind:`image`,label:`Image`,category:`media`,capabilities:{canSelect:!0,canContainChildren:!1,canEditProperties:!0,commentAnchor:`node`},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`scale`,preservesAspect:!0,canLockAspectRatio:!0},propertySections:ku},{objectKind:`svg`,label:`SVG`,category:`primitive`,capabilities:{canSelect:!0,canContainChildren:!1,canEditProperties:!0,commentAnchor:`node`},capture:{preservesVectorData:!0},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`scale`,preservesAspect:!0,canLockAspectRatio:!0},propertySections:ju},{objectKind:`boolean`,label:`Boolean`,category:`container`,capabilities:{canSelect:!0,canContainChildren:!0,canEditProperties:!0,commentAnchor:`node`},capture:{preservesVectorData:!0},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`scale`,preservesAspect:!1,canLockAspectRatio:!0},propertySections:ju},{objectKind:`recording`,label:`Recording`,category:`media`,capabilities:{canSelect:!0,canContainChildren:!1,canEditProperties:!1},capture:{preservesAssets:!0},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`scale`,preservesAspect:!0,canLockAspectRatio:!0},propertySections:[]},{objectKind:`text`,label:`Text`,category:`primitive`,capabilities:{canSelect:!0,canContainChildren:!1,canEditProperties:!0,commentAnchor:`node`},selectionBehavior:{hitTarget:`text`},resizeBehavior:{mode:`reflow`,preservesAspect:!1,canLockAspectRatio:!1},propertySections:[`position`,`layout`,`typography`,`nativeControl`,`textDecoration`,`textStroke`,`blending`,`fill`,`outerShadow`,`filters`,`additionalStyles`,`export`]}].map(e=>[e.objectKind,e]));const G=I.shape.id,Mu=m.array(G).min(1),Nu=m.strictObject({x:m.number(),y:m.number()}),Pu=m.strictObject({width:m.number().positive().optional(),height:m.number().positive().optional()}).refine(e=>e.width!==void 0||e.height!==void 0,{message:`Specify width, height, or both.`}),Fu=m.discriminatedUnion(`kind`,[m.strictObject({kind:m.literal(`position`),nodeId:G,parentPosition:Nu}),m.strictObject({kind:m.literal(`resize`),nodeId:G,size:Pu}),m.strictObject({kind:m.literal(`relative-position`),nodeId:G,referenceNodeId:G,side:m.enum([`above`,`below`,`left`,`right`]),gap:m.number().nonnegative(),align:m.enum([`start`,`center`,`end`])}),m.strictObject({kind:m.literal(`move`),nodeIds:Mu,targetNodeId:G,position:m.enum([`before`,`inside`,`after`])}),m.strictObject({kind:m.literal(`group`),nodeIds:Mu,label:m.string().min(1).optional()}),m.strictObject({kind:m.literal(`ungroup`),nodeIds:Mu}),m.strictObject({kind:m.literal(`label`),nodeId:G,label:m.string().min(1)}),m.strictObject({kind:m.literal(`visibility`),nodeId:G,visible:m.boolean()}),m.strictObject({kind:m.literal(`lock`),nodeId:G,locked:m.boolean()})]),Iu=m.strictObject({kind:m.literal(`arrange`),changes:m.array(Fu).min(1)}),Lu=m.strictObject({kind:m.literal(`duplicate`),nodeIds:Mu,destination:m.discriminatedUnion(`kind`,[m.strictObject({kind:m.literal(`native`)}),m.strictObject({kind:m.literal(`inside`),parentId:G})])}),Ru=m.discriminatedUnion(`kind`,[m.strictObject({kind:m.literal(`compile-screens`),sources:m.array(m.strictObject({screenId:m.uuid(),captureId:m.uuid(),label:m.string().min(1)})).min(1),landing:m.literal(`editable-frame`).optional().describe(`Lands the page as an ordinary editable frame. Without it, the layers belong to a capture run.`)}),Iu,Lu,m.strictObject({kind:m.literal(`compile-html`),contextOperations:m.array(mu).refine(e=>e.every(e=>`nodeId`in e&&![`remove`,`move`,`setParentage`,`insertText`,`insertPrototype`,`insertNode`,`insertConvertedSubtree`].includes(e.op)),`Compilation context may update retained fields only.`),fragments:m.array(m.strictObject({id:G,parentNodeId:G,html:m.string().min(1)})).min(1).refine(e=>new Set(e.map(e=>e.id)).size===e.length,`HTML fragment ids must be unique.`)})]),zu=m.strictObject({pageId:G.optional(),nodeIds:m.array(G)}),Bu=m.strictObject({request:Ru,scope:zu}),Vu=m.strictObject({operations:m.array(mu),idMap:m.record(G,G),rootNodeIds:m.array(G)}),Hu=Vu.extend({compilations:m.array(m.strictObject({id:G,draft:Qc,warnings:m.array(gl).optional()})).optional()});m.discriminatedUnion(`state`,[m.object({state:m.literal(`loading`),jobId:m.uuid()}),m.object({state:m.literal(`ready`),jobId:m.uuid(),loadedVersion:m.number().int().positive(),plan:Hu}),m.object({state:m.literal(`failed`),jobId:m.uuid(),message:m.string().min(1),reason:m.enum([`SOURCE_FAILED`,`PREPARATION_FAILED`]).optional(),retryable:m.boolean().optional()})]);const Uu=m.object({id:m.uuid(),canvasId:m.uuid(),requestedVersion:m.number().int().positive(),request:Ru,scope:zu,phase:pl,attempt:m.number().int().nonnegative(),createdAt:m.iso.datetime(),updatedAt:m.iso.datetime()}),Wu=m.discriminatedUnion(`state`,[Uu.extend({state:m.enum([`queued`,`running`]),result:m.null(),failure:m.null()}),Uu.extend({state:m.literal(`succeeded`),phase:m.literal(`complete`),result:Vu.extend({loadedVersion:m.number().int().positive()}),failure:m.null()}),Uu.extend({state:m.enum([`failed`,`cancelled`,`expired`]),result:m.null(),failure:L})]);m.strictObject({canvasId:m.uuid(),expectedVersion:m.number().int().positive(),request:Ru,scope:zu}),m.object({job:Wu,alreadyExists:m.boolean()}),m.object({jobId:m.uuid()}),m.object({job:Wu});const Gu=m.string().trim().min(1).max(80).regex(/^[\w .+/-]+$/u),Ku=m.strictObject({path:m.enum([`local_mcp`,`hosted_mcp`,`direct_cli`]),name:Gu.optional(),version:Gu.optional()});Ku.pick({path:!0}).strip();const qu=m.strictObject({agent_client:m.enum([`claude_code`,`codex`,`cursor`,`unknown`]),connection_path:Ku.shape.path,identity_source:m.enum([`mcp_client_info`,`documented_cli_fallback`,`unavailable`]),auth_method:m.enum([`personal_agent_token`,`mcp_oauth`]),agent_client_version:Gu.optional()}),Ju=m.enum([`green`,`blue`,`indigo`,`amber`,`lime`,`teal`,`cyan`,`sky`,`violet`,`purple`,`fuchsia`,`pink`]),Yu=m.string().regex(/^[0-9a-f]{32}$/),Xu=m.object({viewKey:Yu.optional(),admissionOrder:m.number().int().nonnegative().optional(),followColour:Ju.optional()}),Zu=m.object({pageId:m.string().min(1).nullable().optional(),followingViewKey:Yu.nullable().optional()}),Qu=`enhance3.canvas.v1`,$u=16384,ed=m.enum([`blue`,`violet`,`green`,`amber`,`magenta`,`teal`,`red`,`orange`]),td=m.object({kind:m.literal(`person`),connectionId:m.uuid(),personId:m.uuid(),displayName:m.string().min(1).max(100),initials:m.string().min(1).max(8),avatarUrl:m.string().max(zo).nullable().optional(),colour:ed}),nd=td.extend(Xu.shape),rd=m.object({kind:m.literal(`guest`),connectionId:m.uuid(),displayName:m.string().min(1).max(100),initials:m.string().min(1).max(8),colour:ed,...Xu.shape}),id=m.discriminatedUnion(`kind`,[nd,rd]),ad=m.object({kind:m.literal(`agent`),personId:m.uuid(),displayName:m.string().min(1).max(100),initials:m.string().min(1).max(8),tokenLabel:m.string().min(1).max(100),agentAttribution:qu.optional(),colour:ed}),od=m.discriminatedUnion(`kind`,[td.omit({connectionId:!0,avatarUrl:!0}),ad]),sd=m.object({x:m.number(),y:m.number()}),cd=F.extend({width:m.number().positive(),height:m.number().positive()}),ld=m.object({count:m.number().int().positive(),bounds:cd.nullable()}),ud=m.object({kind:m.enum([`drag`,`resize`]),baseVersion:m.number().int().positive(),boxes:m.record(m.string().min(1),cd).refine(e=>Object.keys(e).length<=100&&new TextEncoder().encode(JSON.stringify(e)).byteLength<=16384),summary:ld.optional()}),dd=m.object({cursor:sd.nullable().optional(),input:m.enum([`pointer`,`touch`,`keyboard`]).optional(),focused:m.boolean().optional(),selectedNodeIds:m.array(m.string().min(1)).max(100).refine(e=>new TextEncoder().encode(JSON.stringify(e)).byteLength<=$u).optional(),selectionSummary:ld.nullable().optional(),visibleWorldBox:cd.optional(),gesture:ud.nullable().optional(),cursorChat:m.string().max(140).nullable().optional(),...Zu.shape}).refine(e=>Object.keys(e).length>0,`presence patch cannot be empty`),fd=m.object({actor:id,seq:m.number().int().nonnegative(),cursor:sd.nullable(),input:m.enum([`pointer`,`touch`,`keyboard`]),focused:m.boolean(),selectedNodeIds:m.array(m.string().min(1)).max(100).refine(e=>new TextEncoder().encode(JSON.stringify(e)).byteLength<=$u),selectionSummary:ld.nullable().optional(),visibleWorldBox:cd.nullable(),gesture:ud.nullable(),cursorChat:m.string().max(140).nullable().default(null),...Zu.shape,followOrder:m.number().int().nonnegative().optional(),expiresAt:m.iso.datetime()}),pd=m.enum([`reading`,`writing`,`creating`,`deleting`,`rendering`]),md=m.object({activityId:m.uuid(),canvasId:m.uuid(),actor:ad,phase:pd,nodeIds:m.array(m.string().min(1)).max(100),bounds:cd.nullable(),expiresAt:m.iso.datetime()}),hd=m.object({canvasId:m.uuid(),phase:pd,nodeIds:m.array(m.string().min(1)).max(100).default([]),bounds:cd.nullable().default(null)});m.object({activityId:m.uuid(),expiresAt:m.iso.datetime(),renewAfterMs:m.number().int().positive()}),hd.extend({activityId:m.uuid()}),m.object({canvasId:m.uuid(),activityId:m.uuid()}),m.object({ended:m.literal(!0)});const K={v:m.literal(1),seq:m.number().int().nonnegative()};m.discriminatedUnion(`type`,[m.object({...K,type:m.literal(`access.changed`),payload:m.object({})}),m.object({...K,type:m.literal(`comments.changed`),payload:m.object({threadId:m.uuid()})}),m.object({...K,type:m.literal(`resources.changed`),payload:m.object({})}),m.object({...K,type:m.literal(`room.snapshot`),payload:m.object({connectionId:m.uuid(),viewKey:Xu.shape.viewKey,peers:m.array(fd),activities:m.array(md),documentVersion:m.number().int().positive()})}),m.object({...K,type:m.literal(`presence.patch`),payload:fd}),m.object({...K,type:m.literal(`presence.left`),payload:m.object({connectionId:m.uuid()})}),m.object({...K,type:m.literal(`agent.activity`),payload:m.object({activityId:m.uuid(),activity:md.nullable()})}),m.object({...K,type:m.literal(`document.committed`),payload:m.object({mutationId:m.uuid(),actor:od,previousVersion:m.number().int().positive(),version:m.number().int().positive(),operations:m.array(mu).min(1)})}),m.object({...K,type:m.literal(`sync.required`),payload:m.object({version:m.number().int().positive(),reason:m.enum([`gap`,`relay`,`replace`,`history-restored`])})}),m.object({...K,type:m.literal(`room.ping`),payload:m.object({pingId:m.uuid(),sentAt:m.iso.datetime()})}),m.object({...K,type:m.literal(`room.error`),payload:m.object({code:m.enum([`auth`,`permission`,`protocol`,`payload`,`rate`,`unavailable`]),message:m.string().min(1).max(200)})})]),m.discriminatedUnion(`type`,[m.object({v:m.literal(1),type:m.literal(`presence.patch`),seq:m.number().int().nonnegative(),payload:dd}),m.object({v:m.literal(1),type:m.literal(`selection.chunk`),seq:m.number().int().nonnegative(),payload:m.object({transferId:m.uuid(),offset:m.number().int().nonnegative(),total:m.number().int().positive(),nodeIds:m.array(m.string().min(1)).min(1).max(1e3)})}),m.object({v:m.literal(1),type:m.literal(`selection.unavailable`),seq:m.number().int().nonnegative(),payload:m.object({count:m.number().int().positive()})}),m.object({v:m.literal(1),type:m.literal(`room.pong`),seq:m.number().int().nonnegative(),payload:m.object({pingId:m.uuid()})})]).refine(e=>e.type!==`selection.chunk`||e.payload.offset+e.payload.nodeIds.length<=e.payload.total&&new TextEncoder().encode(JSON.stringify(e)).byteLength<=49152),m.object({canvasId:m.uuid(),protocols:m.array(m.literal(Qu)).min(1).max(1),viewId:m.uuid().optional()}),m.object({endpoint:m.url(),ticket:m.string().min(1).max(4096),protocol:m.literal(Qu),expiresAt:m.iso.datetime()}),m.uuid();const gd=I.shape.id;m.array(gd),m.object({jobId:m.uuid()});const _d=m.object({jobId:m.uuid(),canvasId:m.uuid(),requestedVersion:m.number().int().positive(),target:cl,sourceState:ll.optional()});m.discriminatedUnion(`purpose`,[_d.extend({purpose:m.literal(`preparation`),preparation:Bu,screens:m.array(gu).optional(),attempts:m.strictObject({counted:m.number().int().nonnegative(),limit:m.number().int().positive()}).optional(),deadlineAt:m.iso.datetime().optional(),sourceState:m.undefined().optional(),scale:m.literal(1),format:m.literal(`json`)}),_d.extend({purpose:m.enum([`inspection`,`snapshot`,`thumbnail`,`export`]),scale:m.number().positive(),maxOutputPixels:ol.optional(),format:m.literal(`png`)}),_d.extend({purpose:m.literal(`conversion`),target:m.object({kind:m.literal(`node`),nodeId:m.string().min(1)}),sourceState:m.undefined().optional(),conversion:El,scale:m.literal(1),format:m.literal(`json`)})]),m.object({jobId:m.uuid()}),m.object({jobId:m.uuid()});const vd=m.object({jobId:m.uuid(),canvasId:m.uuid(),requestedVersion:m.number().int().positive(),grantToken:m.string().startsWith(`rgr_`).min(40).max(100),grantCookieName:m.string().min(1).max(100),renderUrl:m.url(),deadlineAt:m.iso.datetime().optional(),releaseIdentity:m.string().min(1).max(100)});m.discriminatedUnion(`purpose`,[vd.extend({purpose:m.literal(`preparation`),target:cl,preparation:Bu,sourceState:m.undefined().optional(),scale:m.literal(1)}),vd.extend({purpose:m.enum([`inspection`,`snapshot`,`thumbnail`,`export`]),target:cl,sourceState:ll.optional(),scale:m.number().positive(),maxOutputPixels:ol.optional(),outputKey:m.string().min(1).max(500)}),vd.extend({purpose:m.literal(`conversion`),target:m.object({kind:m.literal(`node`),nodeId:m.string().min(1).max(200)}),sourceState:m.undefined().optional(),conversion:El,scale:m.literal(1)})]),m.object({jobId:m.uuid(),loadedVersion:m.number().int().positive(),bounds:sl,width:m.number().int().positive(),height:m.number().int().positive(),scale:m.number().positive(),bytes:m.number().int().positive(),storageKey:m.string().min(1).max(500),warnings:m.array(gl),timings:m.array(_l),sourceState:ul.optional(),snapshot:m.object({artifactBytes:m.number().int().positive(),artifactStorageKey:m.string().min(1).max(500),route:m.string().optional(),title:m.string().optional(),viewport:m.object({width:m.number().int().positive(),height:m.number().int().positive()})}).optional()}),m.object({accepted:m.literal(!0)}),m.object({jobId:m.uuid(),loadedVersion:m.number().int().positive(),draft:Qc}),m.object({accepted:m.literal(!0)}),m.object({recordingId:m.uuid(),requestedAtMs:m.number().int().nonnegative(),settledAtMs:m.number().int().nonnegative(),artifact:m.string().min(1),route:m.string().optional(),title:m.string().optional(),viewport:m.object({width:m.number().int().positive(),height:m.number().int().positive()})}),m.object({jobId:m.uuid(),failure:L}),m.object({accepted:m.literal(!0),willRetry:m.boolean()}),m.object({workerId:m.string().regex(/^[\w.-]+$/u).min(1).max(100),releaseIdentity:m.string().min(1).max(100),timestamp:m.coerce.number().int().nonnegative(),nonce:m.uuid(),mac:m.base64().min(32).max(200)});const yd=m.object({total:m.number().int().nonnegative(),loading:m.number().int().nonnegative(),unavailable:m.number().int().nonnegative()}),bd=m.object({jobId:m.uuid(),canvasId:m.uuid().nullable(),requestedVersion:m.number().int().positive().nullable(),loadedVersion:m.number().int().positive().nullable(),phase:pl.exclude([`queued`,`claimed`,`capture`,`upload`,`complete`]),sources:yd,warnings:m.array(gl),timings:m.array(_l),sourceState:ul.optional()}),xd=m.object({selector:m.string().min(1).max(500),contentSelector:m.string().min(1).max(500).optional(),expectsPaint:m.boolean().optional(),bounds:sl,width:m.number().int().positive(),height:m.number().int().positive(),scale:m.number().positive()});m.discriminatedUnion(`state`,[bd.extend({state:m.literal(`loading`),capture:m.null(),failure:m.null()}),bd.extend({state:m.literal(`ready`),phase:m.literal(`target`),canvasId:m.uuid(),requestedVersion:m.number().int().positive(),loadedVersion:m.number().int().positive(),capture:xd,failure:m.null()}),bd.extend({state:m.literal(`failed`),failure:m.object({reason:ml,message:m.string().min(1).max(500),sourceId:m.string().min(1).max(200).nullable(),overtaken:m.boolean().optional()}),capture:m.null()})]),m.object({jobId:m.uuid(),loadedVersion:m.number().int().positive(),plan:Hu});const Sd=m.string().min(1);m.object({canvasId:m.uuid()}),m.object({canvasId:m.uuid(),status:m.enum([`selected`,`none`,`offline`,`stale`,`updating`,`unsupported`]),documentVersion:m.number().int().positive(),selectionRevision:m.number().int().positive().nullable(),selectionChangedAt:m.iso.datetime().nullable(),selectedNodeIds:m.array(Sd),missingNodeIds:m.array(Sd),nodes:m.array(bu),contextRootId:Sd.nullable(),visibleWorldBox:sl.nullable(),next:m.array(m.string().min(1)).max(12)});const Cd=m.discriminatedUnion(`kind`,[m.object({kind:m.literal(`recording`),recordingId:m.string()})]),wd=m.discriminatedUnion(`state`,[m.object({state:m.literal(`converting`)}),m.object({state:m.literal(`failed`),reason:m.string().min(1).max(200)})]);m.object({html:m.string().optional(),viewport:m.object({width:m.number(),height:m.number()}),atMs:m.number(),screenId:m.string().nullable().default(null),sourceNodeId:m.string().optional(),provenance:Cd.optional(),landing:wd.optional()}),m.object({provenance:Cd.optional(),report:Yc.optional()}),m.object({recordingId:m.string()}),m.object({prototypeId:m.uuid(),deploymentId:m.uuid()}),m.object({preparedExperience:m.enum([`agent-connection`,`whisper-prototype`]),ownerPersonId:m.uuid(),resources:m.array(m.string().min(1))});const Td=new Set(nc);new Set(Object.entries(Ys).flatMap(([e,t])=>t.some(e=>Td.has(e))?[e.replaceAll(/-([a-z])/gu,(e,t)=>t.toUpperCase())]:[]));const Ed=new Set(nc);new Set(Object.entries(Ys).flatMap(([e,t])=>t.some(e=>Ed.has(e))?[e]:[]));const Dd=1e3,Od=m.discriminatedUnion(`kind`,[m.object({kind:m.literal(`person`),personId:m.uuid(),displayName:m.string().min(1).max(200),initials:m.string().min(1).max(2)}),m.object({kind:m.literal(`agent`),personId:m.uuid(),displayName:m.string().min(1).max(200),initials:m.string().min(1).max(2),tokenLabel:m.string().min(1).max(200)})]),kd=m.object({id:m.uuid(),canvasId:m.uuid(),documentVersion:m.number().int().positive(),origin:m.enum([`automatic`,`manual`,`restore`]),restoreRole:m.enum([`before`,`result`]).nullable(),retention:m.enum([`automatic`,`named`,`restore-boundary`]),title:m.string().min(1).nullable(),description:m.string().max(Dd).nullable(),actor:Od,sourceVersionEntryId:m.uuid().nullable(),expiresAt:m.iso.datetime().nullable(),checkpointAt:m.iso.datetime(),createdAt:m.iso.datetime(),updatedAt:m.iso.datetime(),screenCount:m.number().int().min(0)});m.object({canvasId:m.uuid(),limit:m.number().int().min(1).max(100).default(50),cursor:m.string().min(1).max(1e3).optional(),includeAutomatic:m.boolean().default(!1),actor:m.enum([`all`,`mine`]).default(`all`)}),m.object({current:m.object({documentVersion:m.number().int().positive(),updatedAt:m.iso.datetime()}),items:m.array(kd),nextCursor:m.string().min(1).nullable(),hasExpiredHistory:m.boolean()}),m.object({canvasId:m.uuid(),versionId:m.uuid()});const Ad=m.object({outcome:m.literal(`ready`),entry:kd,document:hu,screens:m.array(gu)}),jd=m.object({outcome:m.literal(`missing-resources`),entry:kd,document:hu,screens:m.array(gu),missingScreenIds:m.array(m.uuid()).min(1)});m.discriminatedUnion(`outcome`,[Ad,jd,m.object({outcome:m.literal(`corrupt`),entry:kd})]);const Md=m.discriminatedUnion(`kind`,[m.object({kind:m.literal(`current`),expectedVersion:m.number().int().positive()}),m.object({kind:m.literal(`version`),versionId:m.uuid()})]);m.object({canvasId:m.uuid(),target:Md,title:m.string().trim().min(1),description:m.string().trim().max(Dd).nullable().default(null)}),m.object({canvasId:m.uuid(),versionId:m.uuid(),title:m.string().trim().min(1),description:m.string().trim().max(Dd).nullable().default(null)}),m.object({canvasId:m.uuid(),versionId:m.uuid()}),m.object({entry:kd});const Nd=(e,t)=>{zc(e.documentFormatVersion,`names`,t)};m.object({canvasId:m.uuid(),documentFormatVersion:Rc,versionId:m.uuid(),expectedVersion:m.number().int().positive()}).superRefine(Nd),m.object({canvasId:m.uuid(),version:m.number().int().positive(),beforeVersionId:m.uuid(),restoredVersionId:m.uuid(),restoreFenceVersion:m.number().int().positive()}),m.object({canvasId:m.uuid(),documentFormatVersion:Rc,versionId:m.uuid(),organisationId:m.union([m.uuid(),m.literal(`personal`)]),title:m.string().trim().min(1).optional()}).superRefine(Nd),m.object({canvasId:m.uuid(),title:m.string().min(1),version:m.literal(1)}),m.object({canvasId:m.uuid(),sourceCanvasId:m.uuid(),recordingIds:m.array(m.uuid()).min(1)}),m.object({copies:m.array(m.object({sourceRecordingId:m.uuid(),recordingId:m.uuid()}))});const Pd=(e,t,n=1/0)=>{let r=e.split(` `).map(e=>Number(e.replace(`%`,``)));return r.every(e=>Number.isFinite(e)&&e>=t&&e<=n)&&(r.length===1||(r[0]??0)<=(r[1]??0))},Fd=m.string().regex(/^[a-f0-9]{64}$/u),Id=m.string().trim().min(1),Ld=m.object({organisationId:m.uuid().nullable()}),Rd=m.object({family:m.string().regex(/^uploaded-font-[a-f0-9]{64}(?:-[a-f0-9]{12})?$/u),familyName:Id,subfamilyName:Id,version:Id,weight:m.string().regex(/^\d+(?:\.\d+)?(?: \d+(?:\.\d+)?)?$/u).refine(e=>Pd(e,1,1e3)),style:m.enum([`normal`,`italic`,`oblique`]),stretch:m.union([m.enum([`normal`,`ultra-condensed`,`extra-condensed`,`condensed`,`semi-condensed`,`semi-expanded`,`expanded`,`extra-expanded`,`ultra-expanded`]),m.string().regex(/^\d+(?:\.\d+)?%(?: \d+(?:\.\d+)?%)?$/u).refine(e=>Pd(e,0))]),format:m.enum([`truetype`,`opentype`,`woff`,`woff2`])}),zd=m.object({kind:m.enum([`personal`,`team`]),ownerId:m.uuid(),sha256:Fd}),Bd=Ld.extend({sha256:Fd,bytes:m.number().int().positive(),contentType:m.enum(fc)});m.object({upload:P}),Bd.extend({metadata:Rd,hasSharingRights:m.literal(!0)});const Vd=zd.extend({bytes:m.number().int().positive(),metadata:Rd,createdAt:m.iso.datetime(),path:m.string().startsWith(`/v1/font-catalog/`)});m.object({entries:m.array(Vd),canManage:m.boolean()}),Ld.extend({sha256:Fd}),Ld.extend({canvasId:m.uuid(),sha256:m.array(Fd).min(1)}),m.object({resources:m.array(m.object({entry:Vd,path:m.string().startsWith(`/v1/canvas-assets/`)}))});const Hd=m.object({inviteId:m.uuid(),email:m.string().max(254),accessLevel:Wo,sendCount:m.number().int().min(1),lastSentAt:m.iso.datetime(),expiresAt:m.iso.datetime(),state:m.enum([`pending`,`expired`]),deliveryState:m.enum([`queued`,`accepted`,`failed`]),deliveryError:m.string()});m.object({canvasTitle:m.string().min(1),invitedBy:m.string().min(1),email:m.string().max(254).pipe(m.email()),accessLevel:Wo,expiresAt:m.iso.datetime(),state:m.enum([`pending`,`accepted`]),hasAccount:m.boolean()}),m.object({canvasId:m.uuid(),email:m.string().max(254).transform(e=>e.trim().toLowerCase()).pipe(m.email()),accessLevel:Wo}),m.object({invite:Hd,acceptToken:m.string().max(512).optional()}),m.object({canvasId:m.uuid()}),Ro(Hd),m.object({canvasId:m.uuid(),inviteId:m.uuid()}),m.object({canvasId:m.uuid(),inviteId:m.uuid()});const Ud=m.string().min(1).max(512);m.object({token:Ud}),m.object({token:Ud}),m.object({canvasId:m.uuid(),accessLevel:Uo});const Wd=m.object({personId:m.uuid().nullable(),email:m.string().max(254).nullable(),displayName:m.string().max(120).nullable(),initials:m.string().max(4).nullable(),avatarUrl:m.string().max(zo).nullable(),accessLevel:Uo,isPending:m.boolean(),reviewState:m.enum([`not-started`,`in-progress`,`done`]).nullable(),lastViewedAt:m.iso.datetime().nullable()});m.object({canvasId:m.uuid()}),Ro(Wd),m.object({canvasId:m.uuid(),personId:m.uuid(),accessLevel:Wo}),m.object({canvasId:m.uuid(),personId:m.uuid()}),m.object({personId:m.uuid(),revoked:m.boolean()});const Gd=m.object({canvasId:m.uuid(),reviewState:m.enum([`not-started`,`in-progress`,`done`])});m.object({reviewState:Gd.shape.reviewState.nullable()}),m.object({canvasId:m.uuid()}),m.object({pass:m.string().min(1),expiresAt:m.iso.datetime(),scriptUrl:m.url(),apiUrl:m.url()});const Kd=Lo.extend({cursor:m.string().max(2048).nullable().default(null)}),qd=m.object({selector:m.string().min(1),tagName:m.string().min(1),label:m.string().nullable(),source:m.object({file:m.string().min(1),line:m.number().int().min(0).nullable()}).nullable()}),Jd=m.object({x:m.number(),y:m.number()}),Yd=m.object({x:m.number().min(0).max(1),y:m.number().min(0).max(1)}),Xd=m.object({x:m.number().min(0).max(1),y:m.number().min(0).max(1),width:m.number().min(0).max(1),height:m.number().min(0).max(1)}),Zd=qd.extend({role:m.string().min(1).optional()}),Qd=m.object({path:m.array(m.number().int().min(0)),offset:m.number().int().min(0)}),$d=m.object({version:m.literal(1),kind:m.literal(`element`),locator:Zd,attachment:Yd,fallbackBounds:Xd}),ef=m.object({version:m.literal(1),kind:m.literal(`text`),root:Zd,quote:m.object({exact:m.string().min(1),prefix:m.string(),suffix:m.string()}),range:m.object({start:Qd,end:Qd}),attachment:Yd,fallbackBounds:Xd}),tf=m.object({version:m.literal(1),kind:m.literal(`elements`),members:m.array(Zd).min(2),truncated:m.boolean(),attachment:Yd,fallbackBounds:Xd}),nf=m.object({version:m.literal(1),kind:m.literal(`area`),bounds:Xd,attachment:Yd}),rf=m.discriminatedUnion(`kind`,[$d,ef,tf,nf]),af=m.discriminatedUnion(`on`,[m.object({on:m.literal(`canvas`),point:Jd,pageId:m.string().min(1).max(256).optional()}),m.object({on:m.literal(`node`),nodeId:m.string().min(1),point:Jd,element:m.null()}),m.object({on:m.literal(`screen`),nodeId:m.string().min(1),screenId:m.uuid(),point:Jd,element:qd.nullable(),target:rf.optional()})]),of=m.object({kind:m.enum([`person`,`agent`]),personId:m.uuid(),name:m.string().min(1).max(120),initials:m.string().min(1).max(4),avatarUrl:m.string().max(zo).nullable(),tokenLabel:m.string().max(120).nullable()}),sf=m.object({personId:m.uuid(),name:m.string().min(1).max(120)}),cf=m.object({emoji:m.string().min(1).max(16),people:m.array(sf).min(1)}),lf=m.object({messageId:m.uuid(),seq:m.number().int().min(1),body:m.string().min(1),isDeleted:m.boolean(),author:of,createdAt:m.iso.datetime(),editedAt:m.iso.datetime().nullable(),mentions:m.array(sf),reactions:m.array(cf)}),uf=m.object({kind:m.enum([`person`,`agent`]),personId:m.uuid(),name:m.string().min(1).max(120),tokenLabel:m.string().max(120).nullable()}),df=m.object({revision:m.number().int().positive(),threadId:m.uuid(),canvasId:m.uuid(),anchor:af,author:of,messages:m.array(lf).min(1).max(50),messageCount:m.number().int().min(1),hasMoreMessages:m.boolean(),isResolved:m.boolean(),resolvedAt:m.iso.datetime().nullable(),resolvedBy:uf.nullable(),createdAt:m.iso.datetime(),lastMessageAt:m.iso.datetime()}),ff=m.strictObject({canvasRef:m.string().min(1),expectedVersion:m.number().int().positive()}),pf=ff.extend({coordinateSpace:m.enum([`canvas-world`,`node-normalized`,`screen-normalized`])});m.object({context:ff.optional(),page:Kd.optional(),canvasId:m.uuid(),filter:m.enum([`open`,`resolved`,`all`]).default(`open`),authorPersonId:m.uuid().optional(),agentActionable:m.boolean().default(!1),query:m.string().trim().max(200).optional()}),Ro(df).extend({nextCursor:m.string().nullable().optional()}),Kd.extend({context:ff.optional(),canvasId:m.uuid(),threadId:m.uuid(),expectedRevision:m.number().int().positive().optional()}),m.object({thread:df.omit({messages:!0,hasMoreMessages:!0}),messages:m.array(lf).max(100),nextCursor:m.string().nullable()}),m.object({context:pf.optional(),canvasId:m.uuid(),clientThreadId:m.uuid(),anchor:af,body:m.string().trim().min(1),mentionedPersonIds:m.array(m.uuid()).default([])}),m.object({context:ff.optional(),canvasId:m.uuid(),threadId:m.uuid(),clientMessageId:m.uuid(),body:m.string().trim().min(1),mentionedPersonIds:m.array(m.uuid()).default([])}),df.extend({postedMessage:lf}),m.object({canvasId:m.uuid(),threadId:m.uuid(),messageId:m.uuid(),body:m.string().trim().min(1),mentionedPersonIds:m.array(m.uuid()).default([])}),m.object({canvasId:m.uuid(),threadId:m.uuid(),messageId:m.uuid(),emoji:m.string().trim().min(1).max(16),reacted:m.boolean()}),m.object({canvasId:m.uuid(),threadId:m.uuid(),anchor:af}),m.object({context:ff.optional(),expectedRevision:m.number().int().positive().optional(),canvasId:m.uuid(),threadId:m.uuid(),resolved:m.boolean()}),m.object({canvasId:m.uuid(),threadId:m.uuid(),messageId:m.uuid().optional()}),m.object({deletedThreadIds:m.array(m.uuid()),deletedMessageIds:m.array(m.uuid())});const q={shortText:200,name:100,label:500,page:50,cursor:64,questionOptions:3},J=m.uuid(),mf=m.string().min(1),hf=m.object({id:J,name:m.string().trim().min(1).max(q.name),content:m.string().trim().min(1),version:m.string().min(1).max(q.name)}),gf=m.object({canvasId:J,nodeId:mf,label:m.string(),role:m.enum([`target`,`reference`])}),_f=m.discriminatedUnion(`type`,[m.object({type:m.literal(`text`),text:m.string()}),gf.extend({type:m.literal(`object`)})]),vf=m.object({revision:m.number().int().nonnegative(),text:m.string(),task:m.enum([`chat`,`rewrite`,`shorten`,`translate`,`replace`,`rename`]).default(`chat`),references:m.array(gf),contentVersion:m.literal(1).default(1),parts:m.array(_f).optional(),attachmentIds:m.array(J),model:m.enum([`default`,`sonnet`,`opus`,`haiku`]).default(`default`),effort:m.enum([`default`,`low`,`medium`,`high`]).default(`default`),instructions:m.array(m.object({name:m.string().max(q.name),content:m.string(),version:m.string().max(q.name)})).default([])}).transform(e=>{let t=e.parts??[...e.references.flatMap(e=>[{type:`object`,...e},{type:`text`,text:`
19
+ `}]),{type:`text`,text:e.text}],n=t.map(e=>e.type===`text`?e.text:e.label).join(``),r=new Map;for(let e of t){if(e.type===`text`)continue;let t=`${e.canvasId}:${e.nodeId}`,n=r.get(t);r.set(t,{canvasId:e.canvasId,nodeId:e.nodeId,label:e.label,role:n?.role===`target`?`target`:e.role})}return{...e,text:n,references:Array.from(r,([,e])=>e),parts:t}}),yf=m.object({state:m.enum([`checking`,`not-installed`,`unsupported`,`signed-out`,`signing-in`,`connected`,`usage-limited`,`auth-expired`,`unavailable`]),version:m.string().nullable(),account:m.string().nullable(),issue:m.string().nullable()}),bf=m.object({canvasId:J,mutationId:J,previousVersion:m.number().int().positive(),version:m.number().int().positive(),nodeIds:m.array(mf),reverted:m.boolean().default(!1),review:Ou.optional()}),xf=m.object({prompt:m.string().trim().min(1),options:m.array(m.string().trim().min(1).max(q.shortText)).max(q.questionOptions).refine(e=>new Set(e).size===e.length,`Options must be distinct.`).default([])}).extend({id:J,digest:m.string().min(1).max(q.name),state:m.enum([`pending`,`answered`,`cancelled`]),answer:m.string().nullable()}),Sf=m.object({jobId:J,version:m.number().int().positive(),target:cl,state:m.enum([`rendered`,`checked`,`needs-review`]),summary:m.string().max(q.label)}),Cf=m.object({parts:m.array(_f).optional(),id:m.string().min(1).max(q.shortText),role:m.enum([`user`,`assistant`,`tool`]),text:m.string(),tool:m.string().nullable().default(null),outcome:m.enum([`running`,`completed`,`denied`,`failed`]).nullable().default(null)}),wf=m.object({id:m.string().min(1).max(q.shortText),tool:m.string().max(q.shortText),digest:m.string().max(q.name),input:m.record(m.string(),m.unknown())}),Tf=m.object({mutationId:J,canvasId:J,procedure:m.enum([`canvas.applyOperations`,`canvas.render.importSource`]),input:m.record(m.string(),m.unknown()),state:m.enum([`recorded`,`accepted`,`unknown`,`refused`])}),Ef=m.object({id:J,name:m.string().max(q.shortText),mediaType:m.enum([`image/png`,`image/jpeg`,`image/webp`]),width:m.number().int().positive(),height:m.number().int().positive(),bytes:m.number().int().positive(),preview:m.string().regex(/^data:image\/(?:png|jpeg|webp);base64,[A-Za-z0-9+/=]+$/u)}),Df=m.object({id:J,state:m.enum([`preparing`,`starting`,`running`,`waiting`,`stopping`,`reconciling`,`completed`,`stopped`,`failed`,`interrupted`,`needs-review`]),submittedDraft:vf,attachments:m.array(Ef).optional(),model:m.string().nullable().default(null),runtimeVersion:m.string().nullable().default(null),lastActivityAt:m.iso.datetime().optional(),stillWorking:m.boolean().default(!1),preparedContext:m.string().default(``),baseVersion:m.number().int().positive(),startedAt:m.iso.datetime(),endedAt:m.iso.datetime().nullable(),messages:m.array(Cf),receipts:m.array(bf),inspections:m.array(Sf).default([]),questions:m.array(xf).optional(),intents:m.array(Tf).default([]),pending:wf.nullable(),recoveryIssue:m.string().nullable().optional(),issue:m.string().nullable()}),Of=m.object({id:J,canvasId:J,ownerId:J,title:m.string().trim().min(1).max(q.shortText),titleSource:m.enum([`automatic`,`manual`]).optional(),visibility:m.enum([`private`,`shared`]),createdAt:m.iso.datetime(),updatedAt:m.iso.datetime(),sessionId:J,hasSession:m.boolean(),draft:vf,turns:m.array(Df),earlierMessages:m.number().int().nonnegative().optional(),sequence:m.number().int().nonnegative()}),Y=m.uuid(),kf=Df.pick({id:!0,state:!0,model:!0,runtimeVersion:!0,stillWorking:!0,startedAt:!0,endedAt:!0,messages:!0,attachments:!0,receipts:!0,inspections:!0,questions:!0,recoveryIssue:!0,issue:!0}),Af=m.object({canvasId:Y,chatId:Y,title:m.string().trim().min(1).max(q.shortText),visibility:m.enum([`private`,`shared`]),sequence:m.number().int().nonnegative(),mergeTurns:m.boolean().optional(),createdAt:m.iso.datetime(),updatedAt:m.iso.datetime(),turns:m.array(kf)}).omit({mergeTurns:!0}).extend({earlierMessages:m.number().int().nonnegative().optional(),ownerId:Y,ownerName:m.string().optional(),readSequence:m.number().int().nonnegative().optional(),unread:m.boolean().optional()});m.object({canvasId:Y,search:m.string().max(q.shortText).default(``),ownerId:Y.optional(),sort:m.enum([`date`,`unread`]).default(`date`),cursor:m.object({updatedAt:m.iso.datetime(),chatId:Y,unread:m.boolean().optional()}).optional(),limit:m.number().int().min(1).max(q.page).default(q.page)}),m.object({items:m.array(Af),next:m.object({updatedAt:m.iso.datetime(),chatId:Y,unread:m.boolean().optional()}).nullable()});const jf=m.object({canvasId:Y,chatId:Y});jf.extend({before:m.number().int().nonnegative().optional()}),m.object({chat:Af.nullable(),next:m.number().int().nonnegative().nullable()}),jf.extend({sequence:m.number().int().nonnegative()}),m.object({saved:m.boolean()}),m.object({canvasId:Y,cursor:m.string().max(q.cursor).default(``)}),m.object({cursor:m.string(),changed:m.boolean()});const Mf=m.string().min(1),X=m.uuid();m.object({protocol:m.literal(4),shellVersion:m.string(),hostId:X.optional(),eventSequence:m.number().int().nonnegative().default(0),installationId:X,profileId:X.nullable(),credential:m.object({tokenId:X,expiresAt:m.iso.datetime()}).nullable().default(null),connection:yf,chats:m.array(Of),chatPages:m.array(m.object({canvasId:X,hasMore:m.boolean()})).default([]),attachments:m.array(Ef),instructions:m.array(hf).default([]),issue:m.string().nullable(),capabilities:m.object({images:m.boolean(),dictation:m.boolean()})});const Nf=m.object({personId:X,tokenId:X,token:m.string().startsWith(`enh_`).max(q.label),expiresAt:m.iso.datetime()}),Pf=m.object({canvasId:X,rootIds:m.array(Mf),version:m.number().int().positive()});m.discriminatedUnion(`kind`,[m.object({kind:m.literal(`desktop.describe`)}),m.object({kind:m.literal(`claude.status`)}),m.object({kind:m.literal(`claude.connect`)}),m.object({kind:m.literal(`claude.cancelConnection`)}),m.object({kind:m.literal(`claude.chooseExecutable`)}),m.object({kind:m.literal(`profile.connect`),profile:Nf}),m.object({kind:m.literal(`profile.disconnect`)}),m.object({kind:m.literal(`instruction.import`),name:m.string().trim().min(1).max(q.name),content:m.string().trim().min(1)}),m.object({kind:m.literal(`instruction.remove`),instructionId:X}),m.object({kind:m.literal(`chat.list`),canvasId:X,more:m.boolean().optional()}),m.object({kind:m.literal(`chat.read`),chatId:X,more:m.boolean().optional()}),m.object({kind:m.literal(`chat.create`),canvasId:X,visibility:m.enum([`private`,`shared`])}),m.object({kind:m.literal(`chat.saveDraft`),chatId:X,expectedRevision:m.number().int().nonnegative(),draft:vf}),m.object({kind:m.literal(`chat.rename`),chatId:X,title:m.string().trim().min(1).max(q.shortText)}),m.object({kind:m.literal(`chat.visibility`),chatId:X,visibility:m.enum([`private`,`shared`])}),m.object({kind:m.literal(`chat.delete`),chatId:X,stop:m.boolean()}),m.object({kind:m.literal(`turn.start`),chatId:X,draftRevision:m.number().int().nonnegative(),scope:Pf}),m.object({kind:m.literal(`turn.stop`),chatId:X,turnId:X}),m.object({kind:m.literal(`turn.checkChanges`),chatId:X,turnId:X}),m.object({kind:m.literal(`turn.undo`),chatId:X,turnId:X}),m.object({kind:m.literal(`question.respond`),chatId:X,turnId:X,questionId:X,digest:m.string().min(1).max(q.name),answer:m.string().trim().min(1).nullable()}),m.object({kind:m.literal(`request.respond`),chatId:X,turnId:X,requestId:m.string().max(q.shortText),digest:m.string().max(q.name),allow:m.boolean()}),m.object({kind:m.literal(`attachment.choose`),chatId:X}),m.object({kind:m.literal(`attachment.prepare`),chatId:X,name:m.string().max(q.shortText),bytes:m.string()}),m.object({kind:m.literal(`attachment.remove`),chatId:X,attachmentId:X}),m.object({kind:m.literal(`desktop.update`)}),m.object({kind:m.literal(`desktop.retryHost`)}),m.object({kind:m.literal(`desktop.openHistory`)})]);const Ff=m.string().trim().min(1).max(2e3);m.object({message:Ff,diagnostics:m.unknown().optional(),workspaceId:m.uuid().optional(),canvasId:m.uuid().optional()}),m.object({status:m.enum([`sent`,`unavailable`,`unconfirmed`]),attemptId:m.uuid(),retryAfterSeconds:m.number().int().min(1).max(3600).optional()});const If=m.enum([`home`,`recents`,`shared`,`trash`,`team`,`canvas`,`invite`,`sign-in`,`sign-up`,`other`]),Lf=m.enum([`Error`,`TypeError`,`RangeError`,`ReferenceError`,`SyntaxError`,`URIError`,`AbortError`,`NetworkError`,`SecurityError`,`UnhandledRejection`]),Rf=1e6,zf=m.number().int().min(0).max(864e5),Bf=m.object({name:Lf,atMs:zf,source:m.enum([`application`,`external`,`unknown`]),line:m.number().int().min(0).max(Rf).optional(),column:m.number().int().min(0).max(Rf).optional()}),Vf=m.object({path:m.string().max(256).regex(/^(?:canvas|comment|organisation|person|prototype|recording|recordingAsset|screen|transcript|telemetry)(?:\.[A-Za-z]+){1,4}$/u),status:m.enum([`ok`,`refused`,`unavailable`,`cancelled`]),durationMs:zf,atMs:zf,correlationId:m.uuid().optional()}),Hf=m.object({action:m.enum([`navigate`,`feedback.open`]),route:If,atMs:zf}),Uf=m.string().max(512).transform((e,t)=>{let n=URL.parse(e),r=n?.searchParams.get(`replay_id`),i=n?.searchParams.get(`distinct_id`),a=n?.searchParams.get(`token`);return typeof a!=`string`||n?.origin!==`https://mixpanel.com`||n.pathname!==`/projects/replay-redirect`||!m.uuid().safeParse(r).success||!m.uuid().safeParse(i).success||!/^[\da-f]{32}$/iu.test(a)?(t.addIssue({code:`custom`,message:`unsupported replay reference`}),m.NEVER):`https://mixpanel.com/projects/replay-redirect?${new URLSearchParams({replay_id:r??``,distinct_id:i??``,token:a}).toString()}`});m.object({route:If,environment:m.object({browser:m.enum([`Chrome`,`Edge`,`Firefox`,`Safari`,`Other`]),os:m.enum([`macOS`,`Windows`,`Linux`,`iOS`,`Android`,`Other`]),release:m.string().max(256).regex(/^[\w.+-]+$/u)}),errors:m.array(Bf).max(10),api:m.array(Vf).max(10),activity:m.array(Hf).max(20),replayUrl:Uf.optional().catch(void 0)});const Wf=m.enum([`owner`,`admin`,`member`]),Gf=m.enum([`can-view`,`can-comment`,`can-edit`]),Kf=m.object({id:m.uuid(),name:m.string().min(1).max(120),role:Wf});m.object({}),Ro(Kf),m.object({name:m.string().trim().min(1).max(120)}),m.object({organisation:Kf}),m.object({organisationId:m.uuid(),name:m.string().trim().min(1).max(120)}),m.object({organisationId:m.uuid()}),m.object({organisationId:m.uuid(),movedCanvasCount:m.number().int().min(0)});const qf=m.object({personId:m.uuid(),displayName:m.string().max(120),initials:m.string().max(4),avatarUrl:m.string().max(zo).nullable().optional(),email:m.string().max(254).nullable(),contentAccess:Gf.default(`can-comment`),role:Wf});m.object({organisationId:m.uuid()}),Ro(qf),m.object({organisationId:m.uuid(),email:m.email().trim().toLowerCase().max(254),role:m.enum([`admin`,`member`]).default(`member`),contentAccess:Gf.default(`can-comment`)}),m.object({personId:m.uuid()}),m.object({organisationId:m.uuid(),personId:m.uuid(),role:m.enum([`admin`,`member`])}).pick({personId:!0,role:!0}),m.object({organisationId:m.uuid(),personId:m.uuid(),contentAccess:Gf}).pick({personId:!0,contentAccess:!0}),m.object({organisationId:m.uuid(),personId:m.uuid()}),m.object({personId:m.uuid(),removed:m.literal(!0)}),m.object({organisationId:m.uuid(),personId:m.uuid()}),m.object({ownerPersonId:m.uuid()});const Jf=m.object({inviteId:m.uuid(),email:m.string().max(254).pipe(m.email()),contentAccess:Gf.default(`can-comment`),role:m.enum([`admin`,`member`]),sendCount:m.number().int().min(1),lastSentAt:m.iso.datetime(),expiresAt:m.iso.datetime(),state:m.enum([`pending`,`expired`]),deliveryState:m.enum([`queued`,`accepted`,`failed`]),deliveryError:m.string()});m.object({organisationId:m.uuid(),email:m.string().trim().toLowerCase().max(254).pipe(m.email()),role:m.enum([`admin`,`member`]).default(`member`),contentAccess:Gf.default(`can-comment`)}),m.discriminatedUnion(`kind`,[m.object({kind:m.literal(`member`),personId:m.uuid()}),m.object({kind:m.literal(`invitation`),invite:Jf})]),m.object({invite:Jf}),m.object({organisationId:m.uuid()}),Ro(Jf),m.object({organisationId:m.uuid(),inviteId:m.uuid()}).extend({});const Yf=m.string().min(1).max(512);m.object({token:Yf}),m.object({token:Yf}),m.object({teamName:m.string().min(1).max(120),invitedBy:m.string().min(1).max(120),email:m.string().max(254).pipe(m.email()),contentAccess:Gf.default(`can-comment`),role:m.enum([`admin`,`member`]),expiresAt:m.iso.datetime(),state:m.enum([`pending`,`accepted`]),hasAccount:m.boolean()}),m.object({organisationId:m.uuid()});const Xf=m.object({id:m.uuid(),label:m.string().min(1).max(120),createdAt:m.iso.datetime(),lastUsedAt:m.iso.datetime().nullable(),expiresAt:m.iso.datetime().nullable(),revoked:m.boolean()});m.object({label:m.string().trim().min(1).max(120).describe(`Label naming the agent.`),expiresAt:m.iso.datetime().nullable().describe(`Expiry timestamp, or null for a token that does not expire.`)}),m.object({token:m.string().startsWith(`enh_`),agentToken:Xf}),m.object({}),m.object({items:m.array(Xf),isConnected:m.boolean()}),m.object({tokenId:m.uuid()}),m.object({tokenId:m.uuid(),revoked:m.literal(!0)}),m.discriminatedUnion(`method`,[m.object({method:m.literal(`token`)}),m.object({method:m.literal(`browser`),issuer:m.url(),clientId:m.string().min(1),scope:m.literal(`openid`)})]);const Zf=m.object({id:m.uuid(),preparedCanvasId:m.uuid(),displayName:m.string().min(1).max(120),initials:m.string().min(1).max(4),avatarUrl:m.string().max(zo).nullable(),email:m.string().max(254).nullable(),createdAt:m.iso.datetime()});m.object({}),m.object({person:Zf.nullable(),authentication:m.discriminatedUnion(`kind`,[m.object({kind:m.literal(`anonymous`)}),m.object({kind:m.literal(`person`)}),m.object({kind:m.literal(`agent`),tokenId:m.uuid(),tokenLabel:m.string(),expiresAt:m.iso.datetime().nullable()}),m.object({kind:m.literal(`oauth-agent`),tokenId:m.uuid(),tokenLabel:m.string(),clientId:m.string().min(1),scopes:m.array(m.string()),expiresAt:m.iso.datetime(),resource:m.url()})])}),m.object({displayName:m.string().trim().min(1).max(120)}),m.object({person:Zf});const Qf=m.string().trim().toLowerCase().min(3).max(40).regex(/^[a-z0-9][a-z0-9._-]*$/,`letters, digits, dot, underscore and dash only`),$f=m.enum([`cookie`,`token`]).default(`cookie`);m.object({username:Qf,password:m.string().min(10).max(200),displayName:m.string().trim().min(1).max(120),deliver:$f,email:m.string().max(254).transform(e=>e.trim().toLowerCase()).pipe(m.email())}),m.object({username:Qf,password:m.string().min(1).max(200),deliver:$f}),m.object({person:Zf,token:m.string().nullable()}).extend({preparedCanvasId:m.uuid()}),m.object({}),m.object({signedOut:m.literal(!0)});const ep=m.enum([`image/jpeg`,`image/png`,`image/webp`]);m.object({contentType:ep,bytes:m.number().int().positive()}),m.object({assetId:m.uuid(),upload:m.object({url:m.url(),headers:m.record(m.string(),m.string()),expiresAt:m.iso.datetime()})}),m.object({assetId:m.uuid()}),m.object({assetId:m.uuid(),previewUrl:m.url()}),m.object({abandoned:m.boolean()}),m.object({requestId:m.uuid(),displayName:m.string().trim().min(1).max(120),photoAssetId:m.uuid().optional()}),m.object({person:Zf});const tp=m.string().max(254).pipe(m.email()),np=m.discriminatedUnion(`kind`,[m.object({kind:m.literal(`person`),personId:m.uuid(),displayName:m.string().min(1).max(120),initials:m.string().min(1).max(4),avatarUrl:m.string().max(zo).nullable().optional(),email:tp}),m.object({kind:m.literal(`email`),email:tp})]);m.object({query:m.string().trim().min(1).max(200)});const rp=m.object({recipients:m.array(np).max(5)});m.object({}),rp.extend({});const ip=`enhance3:session-handoff`;m.union([m.object({kind:m.literal(ip),body:m.object({token:m.string().min(1),displayName:m.string().min(1)})}),m.object({kind:m.literal(ip),signedOut:m.literal(!0)})]);const ap=m.string().length(64).refine(e=>{for(let t of e)if(!/[\da-f]/u.test(t))return!1;return!0}),op=e=>{for(let t of e){let e=t.codePointAt(0);if(e!==void 0&&(e===127||e<=31))return!0}return!1},sp=m.string().min(1).refine(e=>e===e.normalize(`NFC`),{message:`prototype paths must use NFC Unicode normalization`}).refine(e=>!e.startsWith(`/`)&&!/^[A-Za-z]:\//u.test(e)&&!e.endsWith(`/`)&&!e.includes(`\\`)&&!op(e)&&!e.startsWith(`__enhance/`)&&e.split(`/`).every(e=>e!==``&&e!==`.`&&e!==`..`),{message:`prototype paths must be portable relative file paths`}),cp=m.object({path:sp,contentType:m.string().trim().min(1).max(200).refine(e=>!op(e)),bytes:m.number().int().nonnegative().max(2**53-1),sha256:ap});m.object({version:m.literal(1),entryPath:sp,files:m.array(cp).min(1)});const lp=m.object({artifactBytes:m.number().int().positive().max(2**53-1),expandedBytes:m.number().int().positive().optional(),fileBytes:m.number().int().positive().max(2**53-1),manifestBytes:m.number().int().positive().optional(),fileCount:m.number().int().positive().optional(),pathBytes:m.number().int().positive().max(2**53-1)});m.object({}),m.object({attachmentProtocolVersion:m.literal(1).optional(),protocolVersion:m.literal(1),format:m.literal(`zip`),limits:lp});const up=m.object({protocolVersion:m.literal(1),format:m.literal(`zip`),bytes:m.number().int().positive().max(2**53-1),sha256:ap,fileCount:m.number().int().positive().max(2**53-1),expandedBytes:m.number().int().positive().max(2**53-1)});m.object({canvasId:m.uuid(),targetMode:m.enum([`node`,`prototype`]).optional(),canvasPageId:m.string().min(1).optional(),prototypeId:m.uuid().optional(),clientToken:m.uuid(),nodeId:m.string().min(1),title:m.string().trim().min(1).max(200),entryPath:sp,artifact:up,box:F.extend({width:m.number().positive(),height:m.number().positive()})});const dp=m.enum([`uploading`,`queued`,`ingesting`,`ready`,`failed`,`abandoned`]),fp=m.array(m.object({path:m.string().min(1),code:m.string().min(1)})),pp=m.object({prototypeId:m.uuid(),deploymentId:m.uuid(),nodeId:m.string().min(1),alreadyExists:m.boolean(),artifact:up});m.discriminatedUnion(`state`,[pp.extend({state:m.literal(`uploading`),upload:P}),pp.extend({state:m.enum([`queued`,`ingesting`,`ready`,`failed`,`abandoned`])})]);const mp=m.object({canvasId:m.uuid(),deploymentId:m.uuid()});m.object({deploymentId:m.uuid(),state:dp}),m.object(mp.shape);const hp=m.object({prototypeId:m.uuid(),deploymentId:m.uuid(),nodeId:m.string().min(1),fileCount:m.number().int().nonnegative(),totalBytes:m.number().int().nonnegative().max(2**53-1),processedFiles:m.number().int().nonnegative(),unavailableFiles:fp.optional()});m.discriminatedUnion(`state`,[hp.extend({state:m.literal(`failed`),failure:m.object({code:m.string().min(1),message:m.string().min(1),path:sp.optional()})}),hp.extend({state:m.enum([`uploading`,`queued`,`ingesting`,`ready`,`abandoned`])})]),m.object({canvasId:m.uuid(),deploymentId:m.uuid(),baseVersion:m.number().int().positive(),canvasPageId:m.string().min(1).optional(),attachment:m.object({clientToken:m.uuid(),scope:m.object({pageId:m.string().min(1).optional(),nodeIds:m.array(m.string().min(1))})}).optional()}),m.object({canvasId:m.uuid(),prototypeId:m.uuid(),deploymentId:m.uuid(),nodeId:m.string().min(1),version:m.number().int().positive(),state:m.literal(`ready`),origin:m.url(),openUrl:m.string().startsWith(`/c/`),canvasUrl:m.url().optional(),unavailableFiles:fp.optional(),attachment:m.discriminatedUnion(`outcome`,[m.object({outcome:m.literal(`committed`),mutationId:m.uuid(),previousVersion:m.number().int().positive(),version:m.number().int().positive()}),m.object({outcome:m.literal(`no_op`),version:m.number().int().positive()})]).optional()}),m.object({bytes:m.number().int().positive().max(2**53-1)}),m.object({id:m.uuid(),upload:P}),m.object({id:m.uuid()});const gp=m.string().min(1).refine(e=>!e.startsWith(`/`)&&!e.endsWith(`/`)&&!e.includes(`\\`)&&!e.includes(`\0`)&&e.split(`/`).every(e=>e!==``&&e!==`.`&&e!==`..`),{message:`prototype paths must be portable relative file paths`}),_p=m.object({path:gp,contentType:m.string().min(1).max(200),bytes:m.number().int().nonnegative()}),vp=m.enum([`uploading`,`verifying`,`ready`,`failed`,`abandoned`]);m.object({canvasId:m.uuid(),prototypeId:m.uuid().optional(),clientToken:m.uuid(),nodeId:m.string().min(1),targetMode:m.enum([`node`,`prototype`]).optional(),canvasPageId:m.string().min(1).optional(),title:m.string().trim().min(1).max(200),entryPath:gp.default(`index.html`),files:m.array(_p).min(1),box:F.extend({width:m.number().positive(),height:m.number().positive()})}),m.object({prototypeId:m.uuid(),deploymentId:m.uuid(),nodeId:m.string().min(1),state:vp,alreadyExists:m.boolean(),fileCount:m.number().int().positive(),totalBytes:m.number().int().positive()}),m.object({canvasId:m.uuid(),deploymentId:m.uuid(),cursor:m.number().int().min(0).default(0)});const yp=m.object({path:gp,upload:P});m.object({deploymentId:m.uuid(),uploads:m.array(yp).max(50),nextCursor:m.number().int().min(0).optional()}),m.object({canvasId:m.uuid(),deploymentId:m.uuid(),baseVersion:m.number().int().positive(),canvasPageId:m.string().min(1).optional()}),m.object({canvasId:m.uuid(),prototypeId:m.uuid(),deploymentId:m.uuid(),nodeId:m.string().min(1),version:m.number().int().positive(),state:m.literal(`ready`),origin:m.url(),openUrl:m.string().startsWith(`/c/`),canvasUrl:m.url().optional(),unavailableFiles:fp.optional()}),m.object({context:m.discriminatedUnion(`kind`,[m.object({kind:m.literal(`live`),nodeId:m.string().min(1)}),m.object({kind:m.literal(`version`),nodeId:m.string().min(1),versionEntryId:m.uuid()})]).optional(),canvasId:m.uuid(),prototypeId:m.uuid(),deploymentId:m.uuid()}),m.object({deploymentId:m.uuid(),origin:m.url(),bootUrl:m.url(),expiresAt:m.iso.datetime()});const bp=h.int().check(h.minimum(0),h.maximum(6e5)),xp=h.enum([`none`,`completed`,`background`,`failed`]);h.object({protocol:h.literal(1),type:h.literal(`enhance.prototype.gate`),generation:h.uuid(),nonce:h.uuid(),outcome:h.enum([`opening`,`migrating`,`accepted`,`expired-or-used`,`temporary-error`,`denied`]),timing:h.optional(h.object({exchangeMs:bp,migration:xp,migrationWaitMs:bp}))}),h.object({protocol:h.literal(1),type:h.literal(`enhance.prototype.capture`),requestId:h.uuid(),connectionId:h.optional(h.uuid()),documentId:h.optional(h.uuid()),format:h.optional(h.literal(`menu-svg`))});const Sp=h.object({protocol:h.literal(1),type:h.literal(`enhance.prototype.connect`),connectionId:h.uuid()});h.extend(Sp,{type:h.literal(`enhance.prototype.connected`),documentId:h.uuid(),capabilities:h.array(h.string()),release:h.string().check(h.minLength(1))}),h.extend(Sp,{type:h.literal(`enhance.prototype.capture-blocked`)}),h.object({protocol:h.literal(1),type:h.literal(`enhance.prototype.unloading`),documentId:h.uuid()}),h.object({protocol:h.literal(1),type:h.literal(`enhance.prototype.ready`),inputVersion:h.optional(h.int()),build:h.optional(h.string()),capabilities:h.optional(h.array(h.string()))});const Cp=h.object({protocol:h.literal(1),type:h.literal(`enhance.prototype.present`),generation:h.uuid(),nonce:h.uuid()});h.extend(Cp,{type:h.literal(`enhance.prototype.presented`),documentId:h.uuid()}),h.object({protocol:h.literal(1),type:h.literal(`enhance.prototype.escape`)}),h.object({protocol:h.literal(1),type:h.literal(`enhance.prototype.zoom`),deltaX:h.number(),deltaY:h.number(),deltaMode:h.union([h.literal(0),h.literal(1),h.literal(2)]),anchorX:h.number().check(h.minimum(0),h.maximum(1)),anchorY:h.number().check(h.minimum(0),h.maximum(1))}),h.object({protocol:h.literal(1),type:h.literal(`enhance.prototype.navigate`),direction:h.enum([`back`,`forward`,`reload`])}),h.object({protocol:h.literal(1),type:h.literal(`enhance.prototype.navigation`),path:h.optional(h.string()),canGoBack:h.boolean(),canGoForward:h.boolean(),isNavigating:h._default(h.boolean(),!1)});const wp=h.object({artifact:h.string().check(h.minLength(1)),viewport:h.object({width:h.number().check(h.positive()),height:h.number().check(h.positive())}),title:h.string(),files:h.optional(h.object({named:h.array(h.string()),fetched:h.array(h.object({url:h.string(),contentType:h.string(),bytes:h.custom(e=>Object.prototype.toString.call(e)===`[object ArrayBuffer]`)}))}))}),Tp=h.object({protocol:h.literal(1),type:h.literal(`enhance.prototype.captured`),requestId:h.uuid(),connectionId:h.optional(h.uuid()),documentId:h.optional(h.uuid())});h.discriminatedUnion(`outcome`,[h.extend(Tp,{outcome:h.literal(`captured`),screen:wp,issues:h.optional(na)}),h.extend(Tp,{outcome:h.literal(`menu-svg`),markup:h.string().check(h.startsWith(`data:image/svg+xml`))}),h.extend(Tp,{outcome:h.literal(`failed`),error:h.string().check(h.minLength(1)),code:h.optional(h.enum([`capture-failed`,`capture-busy`]))})]);const Ep=h.number().check(h.minimum(0),h.maximum(6e4)),Dp={wheelQuietMs:280,pointerSlopPx:4,singleAxisRatio:1.2,momentumTailSpeed:100,axisRatio:1.25,openingSamplePx:4,openingWindowMs:35},Op=h.object({directionConfirmation:h._default(h.literal(`next-sample`),`next-sample`),openingSamplePx:h._default(h.number().check(h.minimum(0),h.maximum(16)),Dp.openingSamplePx),openingWindowMs:h._default(h.number().check(h.minimum(0),h.maximum(50)),Dp.openingWindowMs),canvasProtection:h._default(h.literal(`slow-tail`),`slow-tail`),momentumTailSpeed:h._default(h.number().check(h.minimum(0),h.maximum(1e3)),Dp.momentumTailSpeed),wheelQuietMs:h._default(Ep,Dp.wheelQuietMs),pointerSlopPx:h._default(h.number().check(h.minimum(0),h.maximum(50)),Dp.pointerSlopPx),singleAxisRatio:h._default(h.number().check(h.minimum(.25),h.maximum(4)),Dp.singleAxisRatio),axisRatio:h._default(h.number().check(h.minimum(1),h.maximum(4)),Dp.axisRatio)});Op.parse({});const kp=h.object({inputVersion:h.literal(2)});h.extend(kp,{type:h.literal(`enhance.prototype.input-context`),settings:Op,navigationAt:h.number(),canvasPhysicalAt:h._default(h.number(),0),canvasSubstantialAt:h._default(h.number(),0),canvasSpeed:h._default(h.number().check(h.nonnegative()),0),canvasWheelUntil:h.number(),canvasMomentum:h.nullable(h.boolean()),escapeAt:h._default(h.number(),0),escapePending:h._default(h.boolean(),!1),appWheelUntil:h._default(h.number(),0),appMomentum:h._default(h.nullable(h.boolean()),null),toolOwnsInput:h.boolean(),interactive:h._default(h.boolean(),!0),pointerPan:h.optional(h.boolean()),pointerPanId:h.optional(h.int().check(h.nonnegative())),pointer:h.nullable(h.object({x:h.number(),y:h.number()})),cursor:h.optional(h.nullable(h.object({anchor:h.nullable(h.object({x:h.number(),y:h.number()})),fallback:h.string(),pointerTime:h.number()}))),visible:h.boolean()});const Ap=h.extend(kp,{type:h.literal(`enhance.prototype.wheel`),deltaX:h.number(),deltaY:h.number(),zoom:h.boolean(),momentum:h.nullable(h.boolean()),openingHandoff:h.optional(h.boolean()),anchorX:h.number().check(h.minimum(0),h.maximum(1)),anchorY:h.number().check(h.minimum(0),h.maximum(1))}),jp=h.extend(kp,{type:h.literal(`enhance.prototype.pan`),phase:h.enum([`start`,`move`,`end`,`cancel`]),pointerId:h.int().check(h.nonnegative()),clientPoint:h.optional(h.object({x:h.number(),y:h.number()})),screenX:h.number(),screenY:h.number(),anchorX:h.number().check(h.minimum(0),h.maximum(1)),anchorY:h.number().check(h.minimum(0),h.maximum(1))}),Mp=h.extend(kp,{type:h.literal(`enhance.prototype.input-activity`),owner:h.enum([`app`,`canvas`,`none`]),reason:h.string().check(h.maxLength(120)),momentum:h.nullable(h.boolean()),focused:h.boolean(),hovered:h._default(h.boolean(),!1),suppressed:h._default(h.boolean(),!1),protected:h.boolean(),screenX:h.number(),screenY:h.number(),pointerAnchor:h._default(h.nullable(h.object({x:h.number(),y:h.number()})),null),pointerTime:h._default(h.number(),0),kind:h.enum([`pointer`,`interaction`,`wheel`,`focus`,`protection`,`escape`,`select`])}),Np=h.extend(kp,{type:h.literal(`enhance.prototype.input-ready`),build:h.string().check(h.maxLength(120))}),Pp=h.extend(kp,{type:h.literal(`enhance.prototype.context-menu`),anchorX:h.number().check(h.minimum(0),h.maximum(1)),anchorY:h.number().check(h.minimum(0),h.maximum(1)),keyboard:h.boolean(),ctrlKey:h.boolean(),metaKey:h.boolean()});h.discriminatedUnion(`type`,[Ap,Mp,Np,jp,Pp]);const Fp=2166136261,Ip=Number.parseInt(`9e3779b9`,16),Lp=Number.parseInt(`85ebca6b`,16),Rp=Number.parseInt(`c2b2ae35`,16);Fp^Ip,Fp^Lp,Fp^Rp;const zp=m.object({width:m.number().int().positive(),height:m.number().int().positive()}),Bp=m.object({mimeType:m.string().min(1).max(100),sampleRate:m.number().int().min(8e3).max(192e3)});m.object({sourceUrl:m.string(),viewport:zp,pageTitle:m.string().nullable(),audio:Bp.nullable().default(null)}),m.object({recordingId:m.uuid(),ownerPersonId:m.uuid(),chunkIndex:m.literal(0),upload:P,audioUpload:P.nullable()}),m.object({recordingId:m.uuid(),index:m.number().int().min(0),firstEventMs:m.number().int().min(0),lastEventMs:m.number().int().min(0),eventCount:m.number().int().min(0),continues:m.boolean().default(!1),bytes:m.number().int().min(1),etag:m.string().min(1).max(200).optional()}),m.object({nextChunkIndex:m.number().int().min(1),upload:P}),m.object({recordingId:m.uuid(),index:m.number().int().min(0),firstMs:m.number().int().min(0),lastMs:m.number().int().min(0),bytes:m.number().int().min(1),epoch:m.number().int().min(0).default(0),startsEpoch:m.boolean().default(!1),etag:m.string().min(1).max(200).optional()}),m.object({nextChunkIndex:m.number().int().min(1),upload:P}),m.object({recordingId:m.uuid(),durationMs:m.number().int().min(0),viewport:zp,sourceUrl:m.string(),interrupted:m.boolean().default(!1),canvasId:m.uuid().optional(),organisationId:m.uuid().optional(),audioChunkCount:m.number().int().min(0).default(0),hasRecoverableBytes:m.boolean().default(!1)}).refine(e=>e.canvasId===void 0||e.organisationId===void 0,{message:`choose an existing canvas or a team for a new canvas, not both`});const Vp=m.enum([`whole`,`recovering`,`partial`]),Hp=m.enum([`dom`,`audio`]);m.object({recordingId:m.uuid(),canvasId:m.uuid(),canvasTitle:m.string().min(1),isNewCanvas:m.boolean(),storedChunkCount:m.number().int().min(0),missingChunkIndexes:m.array(m.number().int().min(0)).max(64),missingChunkCount:m.number().int().min(0),storedAudioChunkCount:m.number().int().min(0),missingAudioChunkIndexes:m.array(m.number().int().min(0)).max(64),missingAudioChunkCount:m.number().int().min(0),integrity:Vp});const Up=m.object({recordingId:m.uuid(),durationMs:m.number().int().min(0),viewport:zp,interrupted:m.boolean(),chunkCount:m.number().int().min(0),startedAt:m.iso.datetime(),isCopy:m.boolean()}),Wp=m.array(m.object({url:m.url(),contentType:m.string().min(1).max(200),byteSize:m.number().int().min(1),sha256:m.string().regex(/^[a-f0-9]{64}$/u).optional()})).max(400);m.union([m.object({recordingId:m.uuid(),assets:Wp}),m.object({screenId:m.uuid(),assets:Wp})]),m.object({reserved:m.array(m.object({url:m.string(),upload:P}))});const Gp=m.array(m.object({url:m.url(),etag:m.string().min(1).max(200),byteSize:m.number().int().min(1)})).max(400);m.union([m.object({recordingId:m.uuid(),arrived:Gp}),m.object({screenId:m.uuid(),arrived:Gp})]),m.object({missingAssetCount:m.number().int().min(0)}),m.object({canvasId:m.uuid(),recordingId:m.uuid()});const Kp=m.object({seq:m.number().int().min(0),firstEventMs:m.number().int().min(0),lastEventMs:m.number().int().min(0),continues:m.boolean()}),qp=m.discriminatedUnion(`state`,[Kp.extend({state:m.literal(`available`),download:ac}),Kp.extend({state:m.literal(`missing`)})]),Jp=m.object({seq:m.number().int().min(0),firstMs:m.number().int().min(0),lastMs:m.number().int().min(0),epoch:m.number().int().min(0),startsEpoch:m.boolean()}),Yp=m.discriminatedUnion(`state`,[Jp.extend({state:m.literal(`available`),download:ac}),Jp.extend({state:m.literal(`missing`)})]);m.object({recordingId:m.uuid(),durationMs:m.number().int().min(0),viewport:zp,sourceUrl:m.string(),interrupted:m.boolean(),integrity:Vp,chunks:m.array(qp),audio:m.object({mimeType:m.string(),chunks:m.array(Yp)}).nullable(),assets:m.array(m.object({url:m.string(),contentType:m.string(),path:m.string().startsWith(`/v1/recording-assets/`)})),missingAssetCount:m.number().int().min(0),missingAssetUrls:m.array(m.string()).optional()});const Xp=m.object({recordingId:m.uuid(),track:Hp,index:m.number().int().min(0)});m.object({upload:P}),Xp.extend({etag:m.string().min(1).max(200)}),m.object({integrity:Vp}),m.object({canvasId:m.uuid()}),Ro(Up).extend({unreadableCount:m.number().int().min(0)}),m.object({recordingId:m.uuid()}),m.object({recordingId:m.uuid(),discarded:m.literal(!0)}),m.object({canvasId:m.uuid(),recordingId:m.uuid()}),m.object({recordingId:m.uuid(),detachedScreenCount:m.number().int().min(0)}),[`[data-enhance-unsupported]:not([data-enhance-unsupported-hidden]):not([style*="display: none"]) {
20
20
  align-items: center !important;
21
21
  background-color: #f7f7f8 !important;
22
22
  background-image: linear-gradient(to top right, transparent calc(50% - 1px), #a8a8b0 50%, transparent calc(50% + 1px)), linear-gradient(to bottom right, transparent calc(50% - 1px), #a8a8b0 50%, transparent calc(50% + 1px)) !important;
@@ -31,9 +31,9 @@ Write one visual group at a time. Use --review none for a committed receipt, the
31
31
  }`,`[data-enhance-unsupported-hidden], [data-enhance-unsupported][style*="display: none"] {
32
32
  display: none !important;
33
33
  }`].join(`
34
- `),p.object({clientToken:p.uuid(),isRecordingMark:p.boolean().default(!0),provenance:p.object({sourceRecordingId:p.uuid(),atMs:p.number().int().min(0)}).nullable(),route:p.string().nullable(),pageTitle:p.string().nullable(),viewport:p.object({width:p.number().int().positive(),height:p.number().int().positive()}),bytes:p.number().int().min(1).max(2**53-1),sha256:p.string().regex(/^[a-f0-9]{64}$/u).optional()}),p.object({screenId:p.uuid(),assetBundleId:p.uuid().nullable(),upload:P,alreadyExists:p.boolean(),state:p.enum([`pending`,`stored`])}),p.object({screenId:p.uuid(),etag:p.string().min(1).max(200)}),p.object({screenId:p.uuid(),storedBytes:p.number().int().min(1),uploadedAt:p.iso.datetime()}),p.object({screenId:p.uuid()}),p.object({screenId:p.uuid(),deletedThreadCount:p.number().int().min(0)}),p.object({code:p.enum([`BAD_REQUEST`,`UNAUTHORIZED`,`FORBIDDEN`,`NOT_FOUND`,`CONFLICT`,`RATE_LIMITED`,`INTERNAL`]),message:p.string().min(1),fields:p.record(p.string(),p.string()).optional()}),p.object({canvasId:p.uuid(),attemptId:p.uuid(),sourceNodeId:p.string().min(1),releaseIdentity:p.string().min(1).max(100),outcome:p.enum([`started`,`succeeded`,`blocked`,`failed`]),reason:p.enum([`none`,`pending-changes`,`editor-busy`,`editor-stale`,`editor-read-only`,`source-missing`,`editor-changed`,`cancelled`,`source-invalid-box`,`source-loading`,`source-unavailable`,`source-unreadable`,`source-changed`,`source-unsettled`,`captured-fonts-unavailable`,`conversion-failed`]),durationMs:p.number().int().min(0).max(18e5)}),p.object({accepted:p.literal(!0)});const Up=p.enum([`answered`,`skipped`,`none`]),Z=p.number().int().min(0).max(18e5),Q=p.number().int().min(0).max(1e6),Wp={canvasId:p.uuid(),clientViewId:p.uuid(),releaseIdentity:p.string().min(1).max(100),capabilityVersion:p.number().int().min(1).max(16)},Gp={longTaskCount:Q,longTaskTotalMs:Z,longestTaskMs:Z,loafCount:Q,loafTotalBlockingMs:Z,loafLongestBlockingMs:Z,loafStyleAndLayoutMs:Z,loafTopScriptMs:Z,loafTopScriptSource:p.enum([`app`,`extension`,`third-party`,`unknown`])};p.discriminatedUnion(`name`,[p.object({...Wp,...Gp,name:p.literal(`canvas_load`),outcome:p.enum([`ready`,`slow`,`degraded`,`timed-out`,`unavailable`]),bottleneck:p.enum([`metadata`,`details`,`document`,`walkthrough-list`,`restore`,`projection`,`sources`,`replays`]),browserCopyCheck:Up.optional(),durationMs:Z,shellMs:Z,projectionMs:Z,sourcesMs:Z,replaysMs:Z,nodeCount:Q,recordingCount:Q,screenCount:Q,replayCount:Q,unavailableSourceCount:Q,assetFailureCount:Q,apiRequestCount:Q,apiLongestMs:Z,mirroredAssetRequestCount:Q,mirroredAssetUniqueCount:Q,mirroredAssetTransferBytes:p.number().int().min(0).max(1073741824)}),p.object({...Wp,...Gp,name:p.literal(`canvas_interaction`),kind:p.enum([`pan`,`zoom`,`drag`,`edit`]),outcome:p.enum([`smooth`,`janky`,`refused`]),pendingCandidateCount:Q.optional(),durationMs:Z,frameCount:Q,slowFrameCount:Q,worstFrameMs:Z,nodeCount:Q,replayCount:Q}),p.object({...Wp,name:p.literal(`canvas_measurement`),outcome:p.literal(`drift`),layerCount:Q}),p.object({...Wp,name:p.literal(`prototype_open`),kind:p.enum([`open`,`recovered`,`capabilities`]).optional(),navigationId:p.uuid().optional(),captureReady:p.boolean().optional(),deploymentId:p.uuid(),outcome:p.enum([`loaded`,`still-opening`,`failed`]),reason:p.enum([`none`,`ticket-refused`,`ticket-failed`,`denied`,`expired-or-used`,`temporary-error`,`deadline`,`ticket-held`,`gate-silent`,`exchange-held`,`document-held`,`document-unconfirmed`]),attempts:p.number().int().min(1).max(16),durationMs:Z,ticketMs:Z,exchangeMs:Z.nullable(),migration:p.enum([`none`,`completed`,`background`,`failed`,`unknown`]),migrationWaitMs:Z.nullable(),liveMs:Z.nullable(),inputReady:p.boolean()}),p.object({...Wp,name:p.literal(`canvas_realtime`),kind:p.enum([`room-ready`,`reconnect`,`recovery`]),outcome:p.enum([`succeeded`,`failed`]),reason:p.enum([`initial`,`transport`,`snapshot`,`gap`,`replace`,`relay`,`history-restored`]),durationMs:Z})]),p.object({accepted:p.literal(!0)});const Kp=1e7,qp=p.number().int().min(0).max(1e3),Jp=p.strictObject({version:p.literal(1),severity:p.enum([`fatal`,`contained`,`recovered`]),boundary:p.enum([`application`,`properties`,`layers`,`stage`]),phase:p.enum([`render`,`bootstrap`,`event`,`async`,`empty`,`startup`]),errorCode:p.enum([`select-value-unavailable`,`select-options-duplicate`,`render-loop`,`resize-observer-loop`,`unexpected-error`,`application-empty`,`startup-stalled`,`export-incomplete`,`export-image-refused`,`export-image-unreachable`,`export-image-not-an-image`,`export-font-unread`,`clipboard-unavailable`,`clipboard-image-pending`,`clipboard-image-unavailable`,`edit-target-unsupported`,`edit-result-invalid`,`react-hook-order`,`menu-rows-unsupported`]),controlId:p.enum([`canvas-stacking`,`canvas-export`,`styles-copy`,`styles-paste`,`unknown`]),outcome:p.enum([`failed`,`displayed`,`shown`,`retried`,`recovered`]),frames:p.array(p.strictObject({asset:p.string().max(128).regex(/^[\w-][\w.-]*\.js$/u),line:p.number().int().min(1).max(Kp),column:p.number().int().min(1).max(Kp)})).max(8),occurredAt:p.iso.datetime().optional(),clientBuild:p.string().regex(/^[\w-]{1,64}$/u).optional(),frameStatus:p.enum([`recorded`,`no-stack`,`no-application-frames`,`malformed-stack`,`no-asset-list`,`kept-local`]).optional(),subsystem:p.enum([`menu`,`menu-picture`,`unknown`]).optional(),repeats:qp.optional(),resourceCount:qp.optional(),httpStatus:p.number().int().min(100).max(599).optional(),deliveryGap:p.strictObject({refused:qp,expired:qp,evicted:qp,exhausted:qp}).optional()}),Yp={incidentId:p.uuid(),releaseIdentity:p.string().min(1).max(100),reason:p.enum([`render-loop`,`render-error`]),details:Jp.optional()};p.discriminatedUnion(`surface`,[p.object({...Yp,surface:p.literal(`canvas`),canvasId:p.uuid()}),p.object({...Yp,surface:p.literal(`application`)})]),p.object({accepted:p.literal(!0)});const Xp=[`root`,`page`,`screen`,`frame`,`group`,`rectangle`,`image`,`svg`,`boolean`,`recording`,`prototype`,`text`],Zp=[`text-layer-missing`,`text-history-mismatch`,`text-action-identity`,`text-history-resolution`,`text-history-unavailable`,`resync-failed`,`unexpected`],Qp=[`refused`,`fault`,`sign-in`,`no-edit-access`,`gone`,`restored`,`replan`,`deleted-target`,`whole-value-text`,`retrying`,`recovery`,`trace`],$p=[...Zp,`request-too-large`,`server-refused`,`repeated-server-error`,`mutation-id-reused`,`base-ahead`,`upload-not-kept`,`preview-conflict`,`competing-edits`,`invalid-reconciliation`,`invalid-recovery-plan`,`history-restored`,`local-changes`,`no-edit-access`,`saved-canvas-unavailable`,`image-unreadable`,`storage-refused`,`unknown-baseline`,`invalid-text-source`,`session-expired`],em=[`saved`,`saving`,`review`,`retrying`,`upload`,`reconnecting`,`offline`,`not-kept`,`view-only`,`sign-in`,`gone`,`restored`],tm=[`new`,`reopened`],nm=[`started`,`resolved`,`superseded`,`shown`,`held-back`,`dismissed`,`action-started`,`action-outcome`,`long-wait`,`long-wait-ended`,`reported`],rm=[`departure-protection`,`retained-copy-review`,`host-priority`,`owner-reentry`,`new-edit-while-blocked`,`restored-work`,`new-blocker`,`unknown`],im=[`offline`,`retrying`,`upload`,`missing-image`,`missing-capture`,`review`,`view-only`,`not-backed-up`,`gone`,`refused`,`copy-refused`,`copy-preview`,`unknown`],am=[`critical`,`warning`,`info`],om=[`kept`,`writing`,`unprotected`],sm=[`try-again`,`sync`,`overwrite`,`review`,`save-copy`,`save-separate-copy`,`send-feedback`,`retry-upload`,`choose-file`,`remove-screen`,`go-to-canvases`],cm=[`saved`,`kept-copy`,`still-blocked`],lm=[`active`,`disabled`,`unavailable`],um=[`in-flight`,`retry-wait`,`device-write`,`upload`,`read`,`recovery`,`decision`,`offline`,`paused`,`not-held`],dm=[`current-changes-unresolved`,`checking-saved-canvas`,`offline`,`saved-canvas-unavailable`,`sign-in`,`request-unsettled`,`no-edit-access`,`missing-file`,`local-copy-unsaved`,`file-unavailable`,`invalid-review`,`too-large`],fm=[`unknown`,`unclassified`,...$a],pm=p.string().max(256).regex(/^[\w:.-]*$/u),mm=p.number().int().nonnegative(),hm=e=>p.string().refine(t=>t===`unknown`||e.includes(t)),gm=hm(cu),_m=p.strictObject({schema:p.literal(1),eventId:p.uuid(),occurredAt:p.number().int().nonnegative(),kind:p.enum(nm),episodeKey:pm.optional(),nextEpisodeKey:pm.optional(),appearanceId:p.uuid().optional(),trigger:p.enum(rm).optional(),cause:p.enum(im).optional(),severity:p.enum(am),command:p.literal(`unknown`),operationKinds:p.array(gm).max(64),refusalCode:p.enum(fm).optional(),operation:gm.optional(),component:hm(Xp).optional(),deviceProtection:p.enum(om),uploadsWaiting:mm,uploadsBlocked:mm,saveHold:p.enum(um).optional(),actions:p.array(p.enum(sm)).max(sm.length),syncBlock:p.enum(dm).optional(),overwriteBlock:p.enum(dm).optional(),outcome:p.enum(cm).optional(),action:p.enum(sm).optional(),replay:p.enum(lm),lostRecords:mm});p.strictObject({canvasId:p.uuid(),releaseIdentity:p.string().min(1).max(100),report:p.enum(Qp),detail:p.enum($p).optional(),mutationId:p.uuid().optional(),version:p.number().int().nonnegative(),attempts:p.number().int().nonnegative(),durationMs:p.number().int().nonnegative(),pendingChanges:p.number().int().nonnegative(),reason:p.enum($p).optional(),status:p.enum(em).optional(),episode:p.enum(tm).optional(),trace:_m.optional()}),p.object({accepted:p.literal(!0),analytics:p.enum([`delivered`,`failed`,`disabled`,`no-identity`,`expired`]).optional()}),p.discriminatedUnion(`type`,[p.object({type:p.literal(`enhance3:extension-probe`)}).strict(),p.object({type:p.literal(`enhance3:extension-present`)}).strict()]);const vm=p.enum([`content`,`popup`,`worker`,`offscreen`,`synthetic`]),ym=p.uuid(),bm=p.string().regex(/^[\w.-]{1,64}$/u),xm=p.enum([`0`,`1`,`2-5`,`6-25`,`26+`]),Sm=p.number().int().min(0).max(18e5),$={correlationId:ym,extensionRelease:bm,capabilityVersion:p.number().int().min(1).max(16),context:vm};p.discriminatedUnion(`name`,[p.object({...$,name:p.literal(`context_lifecycle`),outcome:p.enum([`opened`,`ready`,`closed`,`open-failed`,`close-failed`])}),p.object({...$,name:p.literal(`screen_preview`),outcome:p.enum([`ready`,`unavailable`,`failed`]),source:p.enum([`button`,`shortcut`]),durationMs:Sm,messageBytes:p.number().int().min(0).max(67108864)}),p.object({...$,name:p.literal(`authentication`),state:p.enum([`signed-in`,`signed-out`,`invalid`,`unknown`])}),p.object({...$,name:p.literal(`destination_request`),outcome:p.enum([`succeeded`,`empty`,`failed`]),latencyMs:Sm,resultCountBucket:xm,retryOutcome:p.enum([`not-retried`,`retry-succeeded`,`retry-failed`])}),p.object({...$,name:p.literal(`destination_picker`),outcome:p.enum([`options`,`blank`,`error`]),optionCountBucket:xm}),p.object({...$,name:p.literal(`recording_transition`),state:p.enum([`starting`,`recording`,`stopping`,`landed`,`failed`,`cancelled`,`reloaded`]),terminalReason:p.enum([`none`,`completed`,`failed`,`cancelled`,`tab-closed`,`worker-reloaded`,`start-timeout`,`session-rejected`])}),p.object({...$,name:p.literal(`microphone_session`),outcome:p.enum([`opened`,`refused`,`closed`,`still-active`]),durationMs:Sm,activeAudioTrackCount:p.number().int().min(0).max(8)}),p.object({...$,name:p.literal(`microphone_permission`),standing:p.enum([`prompt`,`granted`,`denied`,`unknown`]),outcome:p.enum([`observed`,`request-started`,`granted`,`denied`,`refused`,`no-device`,`in-use`,`unavailable`,`settings-opened`])}),p.object({...$,name:p.literal(`recording_cleanup`),outcome:p.enum([`released`,`still-active`,`incomplete`]),terminalReason:p.enum([`completed`,`failed`,`cancelled`,`tab-closed`,`worker-reloaded`,`start-timeout`,`session-rejected`]),mediaRecorderState:p.enum([`not-created`,`inactive`,`recording`,`paused`,`unknown`]),activeAudioTrackCount:p.number().int().min(0).max(8),audioContextState:p.enum([`not-created`,`closed`,`running`,`suspended`,`interrupted`,`unknown`]),offscreenDocumentState:p.enum([`open`,`closed`,`not-open`,`unknown`])}),p.object({...$,name:p.literal(`synthetic_stage`),stage:p.enum([`release-identity`,`authentication`,`destination-list`,`recording-start`,`recording-landed`,`microphone-release`]),outcome:p.enum([`passed`,`failed`]),durationMs:Sm})]),p.object({accepted:p.literal(!0)});const Cm=(e,t)=>typeof t==`string`&&e.includes(t)?t:null,wm=e=>{let{refusalCode:t,operation:n,component:r}=e.fields??{};if(t===void 0&&n===void 0&&r===void 0)return;let i=fm.find(e=>e===t);return{refusalCode:t===void 0?`unclassified`:i??`unknown`,operation:Cm(cu,n)??`unknown`,component:Cm(Xp,r)??`unknown`}},Tm=`mutation-id-reused`,Em=`request-too-large`,Dm=/^\d+$/u,Om=e=>{let t=e.fields?.reason;return t===`session-expired`||t===`session-invalid`?t:`signed-out`},km=e=>{let t=e.fields??{},n=String(t.restoreFenceVersion);return Dm.test(n)?{kind:`restored`,fenceVersion:Number(n)}:t.retry===`later`?{kind:`transient`,retryAfterMs:null}:t.reason===`mutation-id-reused`?{kind:`fault`,detail:Tm}:t.recovery===`required`?{kind:`replan`}:{kind:`refused`,reason:e.message}},Am=e=>{let t=e.fields?.reason;if(t===`mutation-id-reused`)return{kind:`fault`,detail:Tm};if(t===`request-too-large`)return{kind:`refused`,reason:Em};let n=wm(e);return{kind:`refused`,reason:e.message,...n!==void 0&&{refusal:n}}},jm=(e,t)=>{switch(e.code){case`UNAUTHORIZED`:return{kind:`sign-in`,reason:Om(e)};case`FORBIDDEN`:return{kind:`no-edit-access`};case`NOT_FOUND`:return{kind:`gone`};case`CONFLICT`:return km(e);case`RATE_LIMITED`:case`INTERNAL`:return{kind:`transient`,retryAfterMs:t};case`BAD_REQUEST`:return Am(e)}},Mm=(e,t)=>e===401?{kind:`sign-in`,reason:`signed-out`}:e===403?{kind:`no-edit-access`}:e===404?{kind:`gone`}:e===413?{kind:`refused`,reason:Em}:e===408||e===429||e===460||e>=500?{kind:`transient`,retryAfterMs:t}:{kind:`refused`,reason:`the server answered ${String(e)}`},Nm=e=>e.kind===`no-response`?{kind:`transient`,retryAfterMs:null}:e.appError===null?Mm(e.status,e.retryAfterMs):jm(e.appError,e.retryAfterMs),Pm=/^\d+$/u,Fm=e=>{let t=e?.headers.get(`retry-after`)?.trim()??``;if(Pm.test(t))return Number(t)*1e3;let n=t.endsWith(` GMT`)?Date.parse(t):NaN;return Number.isNaN(n)?null:Math.max(0,n-Date.now())},Im=.2,Lm=(e,t=Math.random)=>{let n=Math.min(3e4,1e3*2**Math.max(0,e-1));return Math.round(n*(1-Im+2*Im*t()))},Rm=async e=>{try{return{value:await e}}catch(e){return{error:e}}},zm=async e=>{if(`error`in e)throw e.error;return e.value},Bm=async(e,t)=>{for(let n=0;;n++){let r=await Rm(e(n)),i=t.failureOf(r),a=i===null?null:Nm(i);if(a?.kind!==`transient`||n+1>=3)return zm(r);let o=a.retryAfterMs??Lm(n+1);if(t.deadline!==void 0&&Date.now()+o>=t.deadline)return zm(r);`value`in r&&await t.release?.(r.value),await t.wait(o)}};p.object({canvasId:p.uuid(),recordingId:p.uuid()});const Vm=p.object({sequence:p.number().int().min(0),startMs:p.number().int().min(0),endMs:p.number().int().min(0),text:p.string().min(1)}),Hm=p.object({state:p.literal(`processing`),hasPublishedTranscript:p.boolean()}),Um=p.object({state:p.literal(`ready`),languageCode:p.string().min(1),integrity:p.enum([`whole`,`partial`]),isRefreshing:p.boolean(),cues:p.array(Vm)}),Wm=p.object({state:p.literal(`empty`),reason:p.enum([`no-audio`,`too-short`,`audio-missing`,`no-speech`])}),Gm=p.object({state:p.literal(`failed`),canRetry:p.boolean()});p.discriminatedUnion(`state`,[Hm,Um,Wm,Gm]);const Km=async(e,t)=>{try{await e.cancel(t)}catch{}},qm=(e,t)=>{let{signal:n,arm:r,stop:i}=t,a=e.getReader();return new ReadableStream({start:e=>{n.addEventListener(`abort`,()=>{e.error(n.reason),Km(a,n.reason)},{once:!0})},pull:async e=>{try{let t=await a.read();if(n.aborted)return;if(t.done){i(),e.close();return}r(),e.enqueue(t.value)}catch(t){i(),n.aborted||e.error(t)}},cancel:async e=>{i(),await a.cancel(e)}})},Jm=(e,t=6e4)=>{let n=new AbortController,r=null,i=()=>{r!==null&&clearTimeout(r),r=null},a=()=>{i();let e=performance.now()+t;r=setTimeout(()=>{performance.now()-e>1e3?a():n.abort(new DOMException(`The transfer made no progress`,`TimeoutError`))},t)},o=e==null?n.signal:AbortSignal.any([e,n.signal]);return o.addEventListener(`abort`,i,{once:!0}),a(),{signal:o,stop:i,progress:()=>{o.aborted||a()},watchedBody:e=>(a(),qm(e,{signal:o,arm:a,stop:i})),watchBody:e=>e.body===null?(i(),e):(a(),new Response(qm(e.body,{signal:o,arm:a,stop:i}),{status:e.status,statusText:e.statusText,headers:e.headers}))}},Ym=e=>`Enhance: ${e}\n`,Xm=(e,t)=>{if(e.key!==void 0)return`${e.key.journey} › ${e.key.step}`;let n=t.find(t=>`testId`in t&&t.testId===e.testId)?.title??e.testId;return n===void 0?`a capture`:`a capture of "${n}"`},Zm=e=>e.map(e=>Ym(`${e.code}: ${e.address}: ${e.reason}`)).join(``),Qm=(e,t)=>(e.leftOut??[]).map(e=>Ym(`capture-left-out: ${Xm(e,t)}: ${e.message}`)).join(``)+Zm(e.notUploaded??[]),$m=(e,t)=>(e.runId===t?``:Ym(`run ${t} had expired, so its captures were published through run ${e.runId}.`))+Ym(e.canvasUrl)+e.issues.map(e=>Ym(`${e.code}: ${e.message}`)).join(``)+Zm(e.notUploaded),eh={unreadable:`it could not be read on this machine`,refused:`Enhance's storage refused it`},th=2147483647,nh=new Map([[401,`authorization`],[403,`authorization`],[409,`conflict`],[400,`artifact`]]),rh=e=>`error`in e?{kind:`no-response`}:e.value.ok?null:{kind:`response`,status:e.value.status,appError:null,retryAfterMs:Fm(e.value)},ih=async(e,t)=>Bm(e,{failureOf:rh,deadline:t,wait:async e=>{await new Promise(t=>{setTimeout(t,e)})},release:async e=>{await e.body?.cancel()}}),ah=async(e,t,n,r)=>{try{return await ih(async()=>fetch(e,{...t,signal:AbortSignal.timeout(n)}),r)}catch{throw b(`transport`,`Enhance did not confirm the request. Resume the same run to recover its result.`)}},oh=async e=>{try{return await e.json()}catch{return null}},sh=async(e,t,n,r)=>{let{procedure:i,timeoutMs:a,publicationTimeoutMs:o}=r,s=await ah(e,t,a,Date.now()+o),c=await oh(s);if(!s.ok){let e=typeof c==`object`&&c?Reflect.get(c,`error`):null,t=typeof e==`object`&&e?Reflect.get(e,`message`):null;throw b(nh.get(s.status)??`transport`,typeof t==`string`?t.slice(0,1e3):`Enhance rejected ${i} (HTTP ${String(s.status)}).`)}let l=typeof c==`object`&&c?Reflect.get(c,`result`):null,u=typeof l==`object`&&l?Reflect.get(l,`data`):void 0,ee=n.safeParse(u);if(!ee.success)throw b(`transport`,`Enhance returned an incompatible ${i} response.`);return ee.data},ch=e=>{let t=URL.parse(e.apiUrl);if(t===null||![`http:`,`https:`].includes(t.protocol)||t.username!==``||t.password!==``||e.token.trim()===``)throw b(`configuration`,`Enhance needs an HTTP API URL and an explicit token.`);let n=e.timeoutMs??3e4,r=e.publicationTimeoutMs??6e5;if(!Number.isSafeInteger(r)||r<1)throw b(`configuration`,`Enhance publication timeout must be a positive integer in milliseconds.`);if(!Number.isSafeInteger(n)||n<1||n>th)throw b(`configuration`,`Enhance timeout must fit the Node timer range of 1 to 2147483647 milliseconds.`);return{timeoutMs:n,publicationTimeoutMs:r,request:async(i,a,o,{isQuery:s=!1,timeoutMs:c=n}={})=>{let l=new URL(`${t.pathname.replace(/\/$/u,``)}/trpc/${i}`,t.origin);return s&&l.searchParams.set(`input`,JSON.stringify(a)),sh(l,{method:s?`GET`:`POST`,headers:{authorization:`Bearer ${e.token}`,"content-type":`application/json`},...!s&&{body:JSON.stringify(a)},redirect:`error`},o,{procedure:i,timeoutMs:Math.max(1,Math.min(c,th)),publicationTimeoutMs:r})}}},lh=e=>{let t=new Map;for(let n of e){let e=`${n.key.journey} › ${n.key.step}`;for(let[r,i]of[[n.source.blob,`the snapshot of ${e}`],[n.preview.blob,`the picture of ${e}`],...n.assets.map(e=>[e.blob,e.url])])t.has(r.sha256)||t.set(r.sha256,i)}return t},uh=async e=>{try{return{value:await e}}catch(e){return{error:e}}},dh=async(e,t)=>{let n=Jm();try{let r=await xt(e),i={method:`PUT`,headers:t.headers,body:n.watchedBody(r.stream()),duplex:`half`,signal:n.signal,redirect:`error`};return await fetch(t.url,i)}finally{n.stop()}},fh=async(e,t,n)=>{let r=await uh(ih(async()=>dh(t,n),Date.now()+e.publicationTimeoutMs));if(`error`in r)return Ua.publish({stage:`upload`,error:r.error}),`retry`;let i=r.value;if(i.ok)return`stored`;let a=await i.text();return Ua.publish({stage:`upload`,status:i.status,answer:a}),i.status===403&&a.includes(`Request has expired`)?`expired`:Nm({kind:`response`,status:i.status,appError:null,retryAfterMs:null}).kind===`transient`?`retry`:`refused`},ph=async(e,t,n)=>{let r=await e.request(`captureRun.reserveAssets`,{runId:t,blobs:n},ea);return new Map(r.uploads.map(e=>[e.sha256,e]))},mh=async(e,t,n,r)=>{if(r?.upload===null)return`stored`;if(r===void 0)return`retry`;let i=await fh(e,n.path,r.upload);if(i!==`expired`)return i;let a=(await ph(e,t,[n.blob])).get(n.blob.sha256);if(a?.upload===null)return`stored`;if(a===void 0)return`retry`;let o=await fh(e,n.path,a.upload);return o===`expired`?`retry`:o},hh=async(e,t,n,r)=>{let i=t.run.id,a=lh(r),o=[],s=(e,t)=>{o.push({code:`file-not-uploaded`,address:a.get(e.sha256)??e.sha256,reason:t})},c=[];for(let e of fa(r)){let t=await Ga(n,e);t===null?s(e,eh.unreadable):c.push({blob:e,path:t})}let l=!0;for(let t=0;t<c.length;t+=400){let n=c.slice(t,t+400),r=await ph(e,i,n.map(e=>e.blob));for(let t of n){let n=await mh(e,i,t,r.get(t.blob.sha256));n===`refused`?s(t.blob,eh.refused):n!==`stored`&&(l=!1)}}return{notUploaded:o,isComplete:l}},gh=new Set([`sealed`,`converting`,`committed`]),_h=e=>b(`transport`,`Enhance could not take every file of this run yet. Resume the same manifest from this machine to finish it.`,e),vh=async(e,t)=>e.request(`captureRun.get`,{runId:t},$i,{isQuery:!0}),yh=async(e,t)=>{try{return await vh(e,t)}catch{throw _h(t)}},bh=async(e,t,n)=>{let r=t.run.id;try{await e.request(`captureRun.seal`,{manifest:t},$i,{timeoutMs:e.publicationTimeoutMs});return}catch(e){if(!za(e))throw e;if(e.code===`conflict`&&e.message===`None of this run’s screens arrived.`)throw b(`artifact`,e.message,r,n);if((e.code!==`conflict`||e.message!==`This capture run changed while it was being sealed.`)&&e.code!==`transport`)throw e}let i=await yh(e,r);if(!gh.has(i.state))throw i.state===`failed`?b(`conversion`,i.failure?.message??`The capture run failed.`,r,n):_h(r)},xh=async(e,t)=>{let n=t.run.id,r=()=>b(`pending`,`Capture run ${n} is still publishing to canvas ${t.run.canvasId}. It appears there when done.`,n),i=async()=>{try{return await e.request(`captureRun.publish`,{runId:n},$i)}catch(e){throw za(e)&&e.code===`transport`?r():e}},a=await i(),o=Date.now()+e.publicationTimeoutMs;for(;a.receipt===null&&a.failure===null&&![`cancelled`,`failed`].includes(a.state);){if(Date.now()>=o)throw r();await new Promise(e=>{setTimeout(e,250)}),a=await i()}if(a.receipt===null)throw b(a.failure?.code===`conflict`?`conflict`:`conversion`,a.failure?.message??`The capture run was cancelled.`,n);return a.receipt},Sh=(e,t)=>{if(e.runId!==t.run.id||e.canvasId!==t.run.canvasId||e.manifestDigest!==Ha(t))throw b(`conflict`,`This run committed a different manifest.`,t.run.id);return e},Ch=async(e,t)=>{let{review:n}=t.run,r=n===void 0?{canvasId:t.run.canvasId}:{destination:n.destination,...n.context!==void 0&&{context:n.context},...n.revision!==void 0&&{revision:n.revision},...n.compareTo!==void 0&&{compareTo:n.compareTo}},{run:i}=await e.transport.request(`captureRun.begin`,{...r,source:t.run.source,runKey:globalThis.crypto.randomUUID(),participants:t.run.participants},Zi);if(i.canvasId!==t.run.canvasId)throw b(`conflict`,`Capture run ${t.run.id} expired, and a new run for its review would publish to another canvas, so nothing was published. Capture again to publish this review.`,t.run.id);let a={...t,run:i};return await Xa(h.join(e.directory,`manifest-${i.id}.json`),a),a},wh=async(e,t,n)=>{let{transport:r,directory:i}=e,a=t.run.id,o=Sa(t);if(`refusal`in o)throw b(`artifact`,o.refusal,a,{leftOut:o.leftOut,notUploaded:[]});let s=await vh(r,a);if(s.receipt!==null){let e=Sh(s.receipt,t);return await Xa(h.join(i,`receipt.json`),e),{...e,notUploaded:[]}}if(s.state===`collecting`&&Date.parse(s.run.expiresAt)<=Date.now()){if(!n)throw _h(a);return wh(e,await Ch(e,t),!1)}let c=[];if(s.state===`collecting`){let n=await hh(r,t,e.blobDirectories,o.captures);if(!n.isComplete)throw _h(a);({notUploaded:c}=n)}gh.has(s.state)||await bh(r,t,{leftOut:o.leftOut,notUploaded:c});let l=Sh(await xh(r,t),t);return await Xa(h.join(i,`receipt.json`),l),{...l,notUploaded:c}},Th=async(e,t,n,r=[n])=>{try{return await wh({transport:e,directory:n,blobDirectories:r},t,!0)}catch(e){if(e instanceof Error){let n=Reflect.get(e,`runId`);throw Object.assign(e,{runId:typeof n==`string`?n:t.run.id})}throw b(`transport`,`Capture publication was not confirmed. Resume the same manifest.`,t.run.id)}},Eh=(e,t)=>{let n=e.participants[0];if(n===void 0)throw b(`configuration`,`No capture participant was reserved.`);return{format:`enhance-capture-run`,version:1,run:e,ordering:`partial`,participants:[{id:n,status:`passed`}],attempts:[{runner:`script`,participant:n,retry:0,status:`passed`,captures:t}]}},Dh=async(e,t)=>{for(let n of t.blobs)await Ja(e,n.description,n.bytes);return Ya(e,t.artifact)},Oh=(e,t,n)=>{let r=Hi.parse(t),i=[],a=!1;return{descriptor:r,directory:n,add:async e=>{if(a)throw b(`configuration`,`This run no longer accepts captures.`);let t=Dh(n,e);i.push(t),await t},publish:async()=>{a=!0;let t=await Promise.all(i);if(r.participants.length!==1)throw b(`configuration`,`Multi-participant runs must publish a complete merged manifest.`);let o=Eh(r,t);return await At(n,{recursive:!0}),await Xa(h.join(n,`manifest.json`),o),Th(e,o,n)},cancel:async()=>(a=!0,(await e.request(`captureRun.cancel`,{runId:r.id},$i)).receipt)}},kh=async(e,t)=>{let n=Xi.parse({canvasId:t.canvas,destination:t.destination,title:t.title,context:t.context,revision:t.revision,compareTo:t.compareTo,source:t.source,runKey:t.runKey,participants:t.participants}),{run:r}=await e.request(`captureRun.begin`,n,Zi),i=t.directory??h.join(`.enhance`,`captures`,r.id);return await At(i,{recursive:!0}),await Xa(h.join(i,`run.json`),r),Oh(e,r,i)},Ah=async(e,t,n)=>{try{let r=await n();return t($m(r,e.run.id)),r}catch(n){throw za(n)&&t(Qm(n,e.attempts)),n}},jh=e=>f.stderr.write(e),Mh=e=>{let t=ch(e);return{captures:{review:async e=>t.request(`captureRun.review`,{canvasId:e},Ra.nullable(),{isQuery:!0}),decide:async(e,n)=>{await t.request(`captureRun.decide`,{canvasId:e,verdict:n},p.object({accepted:p.literal(!0)}))},reference:async(e,n)=>t.request(`captureRun.reference`,{canvasId:e,name:n},Ia.nullable(),{isQuery:!0}),promote:async e=>t.request(`captureRun.promote`,La.parse(e),Ia),publishManifests:async(e,n={})=>{let r=Ea(await Promise.all(e.map(async e=>Za(e))));if(typeof r==`string`)throw b(`artifact`,r);let i=h.dirname(e[0]??`.`);return await Xa(h.join(i,`merged-manifest.json`),r),Ah(r,n.write??jh,async()=>Th(t,r,i,e.map(e=>h.dirname(e))))},begin:async e=>kh(t,e),publishManifest:async(e,n={})=>{let r=await Za(e);return Ah(r,n.write??jh,async()=>Th(t,r,h.dirname(e)))},get:async e=>t.request(`captureRun.get`,{runId:e},$i,{isQuery:!0})}}},Nh=(e,t)=>{let n=e instanceof Error?Reflect.get(e,`code`):void 0;return new u(n===`authorization`?`UNAUTHORIZED`:n===`conflict`?`CONFLICT`:[`configuration`,`artifact`].includes(String(n))?`BAD_REQUEST`:`INTERNAL`,e instanceof Error?e.message:`Capture publication was not confirmed.`,`Retry enhance captures publish with the same manifest: ${t}`)},Ph=(e,t)=>{e.command(`captures`).description(`Publish SDK captures as editable canvas journeys.`).command(`publish <manifest>`).description(`Publish or resume a reserved capture manifest and print its durable receipt.`).action(async e=>{let n=await t.credentials.read();if(n===null)throw new u(`UNAUTHORIZED`,`Capture publication requires an agent token.`,`Run enhance auth login, then retry the same manifest.`);let r=Mh({apiUrl:t.apiUrl,token:n});try{t.output.result(await r.captures.publishManifest(e))}catch(t){throw Nh(t,e)}})},Fh={"captureRun.review":`Read product review for a run canvas.`,"canvas chats":`Chat history.`,"canvas.createEditableFrame":`Make a screen editable.`,"canvas.create":`Create a canvas.`,"canvas.get":`Read a canvas and access.`,"canvas.setAccess":`Change canvas link access.`,"canvas.list":`List canvases.`,"canvas.rename":`Rename a canvas.`,"canvas.setReviewState":`Set review state.`,"canvas.delete":`Bin a canvas.`,"canvas.move":`Move between shelves.`,"canvas.duplicate":`Copy a canvas.`,"canvas.copyWalkthroughs":`Copy walkthroughs between canvases.`,"canvas.deletePermanently":`Permanently delete a canvas.`,"canvas.restore":`Restore a binned canvas.`,"canvas.inspect":`Inspect a canvas.`,"canvas.tree":`Read the node hierarchy.`,"canvas.node":`Read a node and children.`,"canvas.selection":`Read the live selection.`,"canvas asset":`Manage uploaded assets.`,"canvas mutation":`Read mutation receipts.`,"canvas apply":`Apply canvas operations.`,"canvas find":`Find accessible canvases.`,"canvas remove":`Remove scoped subtrees.`,"canvas read":`Read linked content.`,"canvas update-html":`Update an HTML snapshot.`,"canvas publish-prototype":`Publish a static build.`,"canvas import-asset":`Import an image or font.`,"canvas insert-html":`Insert compiled HTML.`,"canvas make-editable":`Convert a captured screen.`,"canvas capture":`Capture a recording moment.`,"canvas arrange":`Arrange canvas objects.`,"canvas duplicate-nodes":`Duplicate node subtrees.`,"canvas text-style-library":`Manage text styles.`,"canvas realtime":`Canvas presence and activity.`,"canvas document":`Read or replace documents.`,"canvas version":`Retained canvas history.`,"canvas render":`Render canvas pixels.`,"canvas participants":`Manage participants.`,"canvas invites":`Invite people to a canvas.`},Ih=(e,t=!1)=>{let n=Symbol(`explicit-null`),r=e.parseArg;return r===void 0?()=>!1:(e.argParser((e,i)=>{if(t&&e===`null`)return n;try{return r(e,i)}catch(t){try{return r(JSON.stringify(e),i)}catch{throw t}}}),e=>e===n)},Lh=()=>({exit:e=>{throw new he(e)}}),Rh=new Map([[`comment.resolve --resolved`,null],[`recording.start --page-title`,null],[`recording.start --viewport`,null],[`screen.create --page-title`,null],[`screen.create --provenance`,null],[`screen.create --route`,null],[`screen.create --viewport`,null],[`canvas render --canvas`,`--input`],[`canvas.inspect --canvas`,`--canvas-id`],[`canvas.tree --canvas`,`--canvas-id`],[`canvas.node --canvas`,`--canvas-id`],[`canvas.selection --canvas`,`--canvas-id`],[`canvas read --canvas`,`--input`],[`canvas duplicate-nodes --canvas`,`--input`],[`canvas duplicate-nodes --base-version`,`--input`],[`canvas duplicate-nodes --nodes`,`--input`]]),zh=(e,t)=>Rh.get(`${e} ${t??``}`),Bh=(e,t)=>e.options.flatMap(n=>{let r=zh(t,n.long);if(r===void 0)return[];if(r===null)return[{option:n,replacement:null}];let i=e.options.find(e=>e.long===r);if(i===void 0)throw TypeError(`${t} has no ${r} to replace ${n.flags}.`);return[{option:n,replacement:i}]}),Vh=({option:e,replacement:t})=>{let n=e.long??e.flags;return t===null?new u(`BAD_REQUEST`,`${n} is required unless --json supplies the complete input.`,`Pass ${n} explicitly, including false or null when that is the intended value.`):new u(`BAD_REQUEST`,`${n} is required unless ${t.long??t.flags} is given.`,`Pass ${n}, or use ${t.long??t.flags} instead.`)},Hh=(e,t)=>{let n=Bh(e,t);if(n.length!==0){for(let{option:e,replacement:t}of n)t!==null&&(e.description=`${e.description} Required unless ${t.long??t.flags} is given.`);e.hook(`preAction`,(t,r)=>{if(r!==e||r.getOptionValueSource(`json`)===`cli`)return;let i=e=>r.getOptionValueSource(e.attributeName())===`cli`,a=n.find(({option:e,replacement:t})=>!i(e)&&(t===null||!i(t)));if(a!==void 0)throw Vh(a)})}},Uh={"canvas text-style-library":`Find, read, and publish reusable text styles across canvases.`,"canvas chats":`Inspect and manage authorized canvas chat history.`,canvas:`Create, find, share and manage canvases.`,"canvas render":`Render production-faithful canvas pixels after inspecting exact structure and geometry.`,"canvas version":`Inspect and name retained canvas history.`,"canvas document":`Read or replace the opaque document stored on a canvas.`,"canvas invites":`Invite people to a canvas and manage pending invitations.`,"canvas participants":`List and change the people who can reach a canvas.`,comment:`Comment threads and replies anchored to canvas content.`,organisation:`Teams the authenticated person belongs to or creates.`,"organisation invites":`Invite people to a team and manage pending invitations.`,"organisation people":`Team roster membership and roles.`,person:`The current person, sharing recipients, and agent tokens.`,"person recipients":`People available when choosing sharing recipients.`,recording:`Recorded walkthroughs, chunks, recovery, and completion.`,"recording-asset":`External page assets mirrored for durable replay.`,screen:`Captured pages uploaded for placement on a canvas.`},Wh=new Set([`canvas.invites.accept`,`canvas.invites.preview`,`organisation.invites.accept`,`organisation.invites.preview`]),Gh=new Set([`canvas.create --organisation-id`,`canvas.create --source-url`,`recording.start --audio`,`recording.start --page-title`,`screen.create --page-title`,`screen.create --provenance`,`screen.create --route`]),Kh=e=>typeof e==`object`&&e&&!Array.isArray(e)?Object.fromEntries(Object.entries(e)):null,qh=e=>{let t=Kh(Reflect.get(e,`__trpcCli`)),n=t===null?void 0:t.path;return typeof n==`string`?n:null},Jh=(e,t,n,r)=>{let i=t.long,a=qh(e)??r.join(` `),o=a===``||i===void 0?void 0:ce[`${a} ${i}`];if(o!==void 0)return o;if(i!==void 0&&ce[i]!==void 0)return ce[i];let s=(n.split(/Any of:|One of:/u,1)[0]?.trim()??``).split(`;`).map(e=>e.trim()).filter(e=>e!==``&&[`Format:`,`Pattern:`,`Min length:`,`Max length:`].every(t=>!e.startsWith(t))).join(`; `);return s===``?`Value for ${i??t.attributeName()} on ${e.name()}.`:s},Yh=(e,t,n)=>{let r=Lh();e.exitOverride(e=>r.exit(e.exitCode)),e.configureOutput({writeOut:e=>t.output.logger.info?.(e),writeErr:e=>t.output.logger.error?.(e)}),e.showHelpAfterError(!1).showSuggestionAfterError(!1);let i=[],a=qh(e)??n.join(` `);for(let t of e.options){t.description=Jh(e,t,t.description,n);let r=Gh.has(`${a} ${t.long??``}`),o=Ih(t,r);r&&i.push({name:t.attributeName(),matches:o})}i.length>0&&e.hook(`preAction`,e=>{for(let t of i)t.matches(e.getOptionValue(t.name))&&e.setOptionValueWithSource(t.name,null,`cli`)}),Hh(e,a)},Xh=(e,t,n,r)=>{(n!==null&&r.mutationPaths.has(n)||t[0]===`fixture`)&&(e.options.every(e=>e.long!==`--client-token`)&&e.option(`--client-token <uuid>`,ce[`--client-token`]),e.hook(`preAction`,e=>{let n=e.getOptionValue(`clientToken`),i=p.uuid().nullable().safeParse(n??null);if(!i.success)throw new u(`BAD_REQUEST`,`--client-token must be a UUID.`,`Mint one UUID and reuse it only when retrying this exact command.`);r.mutationKey.select(i.data,t[0]===`fixture`)}))},Zh=(e,t,n)=>{n===null||!Wh.has(n)||(e.options.find(e=>e.long===`--token`)?.makeOptionMandatory(!1),e.hook(`preAction`,async e=>{let n=e.getOptionValue(`token`);if(n===void 0&&e.getOptionValue(`json`)!==void 0)return;let r=await dn(typeof n==`string`?n:void 0,`enhance ${t.join(` `)}`);e.setOptionValueWithSource(`token`,r,`cli`)}))},Qh=(e,t,n,r)=>{let i=Uh[t.join(` `)];i===void 0?n!==null&&e.description(ze[n]??r.get(n)??`Run the ${n} API operation.`):e.description(i);let a=Fh[t.join(` `)]??(n===null?void 0:Fh[n]);a!==void 0&&e.summary(a)},$h=(e,t,n=[])=>{Yh(e,t,n);for(let r of e.commands){let e=[...n,r.name()],i=qh(r);Xh(r,e,i,t),Qh(r,e,i,t.descriptions),Zh(r,e,i),$h(r,t,e)}},eg=ve().excludedProcedures,tg=new Set([`canvas thumbnail`,`canvas font-catalog`,`telemetry`]),ng=e=>{let t=Reflect.get(e,`__trpcCli`);if(typeof t!=`object`||!t)return null;let n=Reflect.get(t,`path`);return typeof n==`string`?n:null},rg=(e,t=[])=>{let n=e.commands.filter(e=>{let n=ng(e),r=[...t,e.name()].join(` `);return!tg.has(r)&&(n===null||!eg.has(n))});Reflect.set(e,`commands`,n);for(let e of n)rg(e,[...t,e.name()])},ig=e=>{let t=Reflect.get(e,`__trpcCli`);if(typeof t!=`object`||!t)return null;let n=Reflect.get(t,`path`);return typeof n==`string`?n:null},ag=(e,t=[])=>e.commands.filter(e=>e.name()!==`help`).flatMap(e=>{let n=[...t,e.name()];return[{command:e,path:n.join(` `)},...ag(e,n)]}),og=(e,t=[])=>e.commands.filter(e=>e.name()!==`help`).flatMap(e=>{let n=[...t,e.name()],r=ig(e);return[{path:n.join(` `),procedure:r,description:e.description(),kind:r===null?e.commands.length>0?`namespace`:`utility`:`derived`,helpCharacters:e.helpInformation().length},...og(e,n)]}),sg=(e,t)=>({...t.describe(e.id),outputSchema:p.toJSONSchema(e.outputSchema,{unrepresentable:`any`,io:`output`}),exampleOutput:e.guide.examples[0]?.output??null}),cg=(e,t)=>{let n=t(),r=Ee(n),i=Pe();return ag(e).flatMap(({command:e,path:t})=>{let a=ig(e),o=n.find(({cli:e})=>e?.path===t);return o===void 0&&a===null&&e.commands.length>0?[]:[{path:t,description:e.description(),usage:`${t} ${e.usage()}`,arguments:e.registeredArguments.map(e=>({name:e.name(),required:e.required,variadic:e.variadic,description:e.description})),options:e.options.filter(e=>!e.hidden).map(e=>{let n=zh(a??t,e.long);return{flags:e.flags,description:e.description,required:n!==void 0||e.mandatory,...typeof n==`string`&&{requiredUnless:n},...e.defaultValue!==void 0&&{defaultValue:e.defaultValue}}}),...vi[t]!==void 0&&{example:vi[t]},capability:o===void 0?null:sg(o,r),exitCodes:i}]})},lg=(e,t,n)=>{e.command(`commands`).description(`Emit the command inventory as NDJSON without walking the help tree.`).option(`--namespace <path>`,`Keep commands at or below this space-separated path.`).option(`--capabilities`,`Emit the transport-neutral capability inventory.`,!1).option(`--reference`,`Emit complete shared capability contracts for documentation.`,!1).option(`--records`,`Emit the complete contract of each listed command for documentation.`,!1).action(r=>{if(r.reference){let e=ue(n()),r=Ee(e);t.result({items:e.map(e=>sg(e,r)),truncated:!1});return}if(r.records){t.result({items:cg(e,n),truncated:!1});return}if(r.capabilities){t.result({items:lt(n()),truncated:!1});return}let i=r.namespace?.trim(),a=og(e).filter(e=>i===void 0||e.path===i||e.path.startsWith(`${i} `));t.result({items:a,truncated:!1})})},ug=(e,t,n,r)=>{let i=e.commands.find(e=>e.name()===`comment`);if(i===void 0)throw TypeError(`derived comment namespace is missing`);i.command(`attention`).description(`List every open comment needing attention; source metadata is included when a capture has it.`).argument(`<canvas-url-or-id>`,`A pasted Enhance canvas URL shaped /c/<UUID>, or a bare canvas UUID.`).action(async e=>{r.result(await t.invoke({capability:d(n(),`comment.attention`),arguments:{canvasId:te(e)},clientToken:null}))})},dg=(e,t)=>{let{version:n,credentials:r,remote:i,output:a}=t;e.command(`doctor`).description(`Check the installed binary, API reachability, and credential file without changes.`).action(async()=>{let[e,t]=await Promise.all([i.health(),r.read()]);a.result({status:t!==null&&e.reachable?`ok`:`degraded`,binary:f.argv[1]??`enhance`,version:n,api:e,credential:{path:r.path,present:t!==null}})})},fg=e=>p.coerce.number().int().positive().parse(e),pg=p.record(p.string(),p.unknown()),mg=(e,t)=>{let n=pg.safeParse(e);if(!n.success)return 0;let r=n.data.atMs;if(typeof r==`number`&&Number.isFinite(r))return Math.max(0,Math.round(r));let i=n.data.timestamp;return typeof i==`number`&&Number.isFinite(i)?Math.max(0,Math.round(i-t)):0},hg=async e=>{let t=(await jt(e,`utf8`)).split(`
35
- `).filter(e=>e.trim()!==``).map(e=>JSON.parse(e)),n=t.map(e=>pg.safeParse(e).data?.timestamp).find(e=>typeof e==`number`&&Number.isFinite(e));return t.map(e=>({atMs:mg(e,n??0),event:e}))},gg=async e=>({clientToken:e.clientToken??Ot(),body:await jt(e.file),route:e.route??null,pageTitle:e.pageTitle??h.basename(e.file),viewport:{width:e.width,height:e.height},provenance:null}),_g=e=>e.option(`--width <pixels>`,`Captured viewport width.`,fg,1440).option(`--height <pixels>`,`Captured viewport height.`,fg,900),vg=(e,t,n)=>{_g(e.command(`screen`).description(`Upload one captured page and return its reusable screen id.`).requiredOption(`--file <path>`,`File containing the captured HTML bytes.`).option(`--client-token <uuid>`,`Stable UUID to reuse when retrying the same upload.`).option(`--route <url>`,`Original browser route, when it is safe to retain.`).option(`--page-title <title>`,`Captured page title.`)).action(async e=>{n.result(await t(await gg(e)))})},yg=(e,t,n)=>{_g(e.command(`recording`).description(`Upload NDJSON rrweb events as a walkthrough; chunk offsets start at the first event.`).requiredOption(`--file <path>`,'NDJSON with one rrweb event per line; minimum example: `{"type":2,"timestamp":1000}`.').requiredOption(`--source-url <url>`,`Required route the recording represents.`).option(`--page-title <title>`,`Title for a newly created walkthrough canvas.`).option(`--canvas-id <uuid>`,`Existing canvas to receive the walkthrough.`)).action(async e=>{n.result(await t({entries:await hg(e.file),sourceUrl:e.sourceUrl,pageTitle:e.pageTitle??null,viewport:{width:e.width,height:e.height},...e.canvasId!==void 0&&{canvasId:e.canvasId}}))})},bg=(e,t,n)=>{_g(e.command(`world`).description(`Create a team, a canvas, and zero or more attached screen fixtures.`).requiredOption(`--organisation-name <name>`,`Name of the team to create.`).requiredOption(`--canvas-title <title>`,`Title of the canvas to create.`).option(`--screen <path...>`,`Captured HTML files to upload and attach.`)).action(async e=>{let r=[],i=e.screen??[];for(let t of i)r.push(await gg({file:t,width:e.width,height:e.height}));n.result(await t({organisationName:e.organisationName,canvasTitle:e.canvasTitle,screens:r}))})},xg=(e,t,n)=>{let r=e.command(`fixture`).description(`Build deterministic product fixtures.`);vg(r,t.screen,n),yg(r,t.recording,n),bg(r,t.world,n)},Sg=(e,n)=>{e.command(`operation`).description(`Read existing domain-owned operation outcomes.`).command(`status`).description(`Recover an existing outcome without creating or resuming work.`).requiredOption(`--input <json-or-@path>`,`Operation reference and optional detail offset/limit.`).action(async e=>{n.output.result(await n.invocation.invoke({capability:d(n.catalog(),`operation.status`),arguments:g(e.input,t,`--input`),clientToken:null}))})},Cg=e=>p.coerce.number().parse(e),wg=e=>p.coerce.number().positive().parse(e),Tg=e=>p.coerce.number().int().positive().parse(e),Eg=(e,t,n,r)=>{(e.commands.find(e=>e.name()===`prototype`)??e.command(`prototype`).description(`Publish static frontend prototypes.`)).command(`publish`).description(`Package and publish an unpacked static build directory. The CLI creates the upload artifact. To update a prototype, publish to its owner node: pass --prototype-id and that node as --node-id. Any other node that shows it forks into its own prototype. An update keeps the title the node shows; --title only names a new node.`).requiredOption(`--canvas-id <uuid>`,`Canvas that receives the prototype.`).requiredOption(`--directory <path>`,`Unpacked static build directory; do not pass a ZIP file.`).requiredOption(`--title <title>`,`Label above the prototype frame.`).requiredOption(`--base-version <number>`,`Current canvas document version.`,Tg).option(`--prototype-id <uuid>`,`Existing prototype identity to publish a new deployment.`).option(`--client-token <uuid>`,`Stable retry token for this exact build.`).option(`--node-id <id>`,`Exact canvas node to create, update, or fork when it is a copy.`).option(`--entry <path>`,`HTML entry relative to the uploaded directory.`,`index.html`).option(`--x <pixels>`,`Canvas x coordinate.`,Cg,48).option(`--y <pixels>`,`Canvas y coordinate.`,Cg,48).option(`--width <pixels>`,`Prototype viewport width.`,wg,1440).option(`--height <pixels>`,`Prototype viewport height.`,wg,900).action(async e=>{let i=e.clientToken??Ot();r.result(await t.invoke({capability:d(n(),`prototype.publish`),arguments:{canvasId:e.canvasId,prototypeId:e.prototypeId??null,targetMode:e.prototypeId!==void 0&&e.nodeId===void 0?`prototype`:`node`,nodeId:e.nodeId??`proto_${i.replaceAll(`-`,``)}`,title:e.title,directory:e.directory,entryPath:e.entry,baseVersion:e.baseVersion,box:{x:e.x,y:e.y,width:e.width,height:e.height}},clientToken:i}))})},Dg=(e,t,n)=>{let r=(n?p.coerce.number().int().positive():p.coerce.number().int().nonnegative()).safeParse(e);if(!r.success)throw new u(`BAD_REQUEST`,`${t} is invalid.`,`Run 'enhance recording snapshot --help'.`);return r.data},Og=(e,t)=>{let n=e.commands.find(e=>e.name()===`recording`);if(n===void 0)throw TypeError(`the API router did not supply recording commands`);n.command(`snapshot`).description(`Persist one visually accepted recording moment as an ordinary screen and frame.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID containing the recording.`).requiredOption(`--recording-id <uuid>`,`Recording UUID returned by recording list.`).requiredOption(`--at-ms <integer>`,`Accepted recording timestamp in milliseconds.`).option(`--timeout-ms <integer>`,`Local polling deadline in milliseconds.`,`120000`).option(`--client-token <uuid>`,`Stable UUID to reuse only when retrying this exact snapshot.`).addHelpText(`after`,`
34
+ `),m.object({clientToken:m.uuid(),isRecordingMark:m.boolean().default(!0),provenance:m.object({sourceRecordingId:m.uuid(),atMs:m.number().int().min(0)}).nullable(),route:m.string().nullable(),pageTitle:m.string().nullable(),viewport:m.object({width:m.number().int().positive(),height:m.number().int().positive()}),bytes:m.number().int().min(1).max(2**53-1),sha256:m.string().regex(/^[a-f0-9]{64}$/u).optional()}),m.object({screenId:m.uuid(),assetBundleId:m.uuid().nullable(),upload:P,alreadyExists:m.boolean(),state:m.enum([`pending`,`stored`])}),m.object({screenId:m.uuid(),etag:m.string().min(1).max(200)}),m.object({screenId:m.uuid(),storedBytes:m.number().int().min(1),uploadedAt:m.iso.datetime()}),m.object({screenId:m.uuid()}),m.object({screenId:m.uuid(),deletedThreadCount:m.number().int().min(0)}),m.object({code:m.enum([`BAD_REQUEST`,`UNAUTHORIZED`,`FORBIDDEN`,`NOT_FOUND`,`CONFLICT`,`RATE_LIMITED`,`INTERNAL`]),message:m.string().min(1),fields:m.record(m.string(),m.string()).optional()}),m.object({canvasId:m.uuid(),attemptId:m.uuid(),sourceNodeId:m.string().min(1),releaseIdentity:m.string().min(1).max(100),outcome:m.enum([`started`,`succeeded`,`blocked`,`failed`]),reason:m.enum([`none`,`pending-changes`,`editor-busy`,`editor-stale`,`editor-read-only`,`source-missing`,`editor-changed`,`cancelled`,`source-invalid-box`,`source-loading`,`source-unavailable`,`source-unreadable`,`source-changed`,`source-unsettled`,`captured-fonts-unavailable`,`conversion-failed`]),durationMs:m.number().int().min(0).max(18e5)}),m.object({accepted:m.literal(!0)});const Zp=m.enum([`answered`,`skipped`,`none`]),Z=m.number().int().min(0).max(18e5),Q=m.number().int().min(0).max(1e6),Qp={canvasId:m.uuid(),clientViewId:m.uuid(),releaseIdentity:m.string().min(1).max(100),capabilityVersion:m.number().int().min(1).max(16)},$p={longTaskCount:Q,longTaskTotalMs:Z,longestTaskMs:Z,loafCount:Q,loafTotalBlockingMs:Z,loafLongestBlockingMs:Z,loafStyleAndLayoutMs:Z,loafTopScriptMs:Z,loafTopScriptSource:m.enum([`app`,`extension`,`third-party`,`unknown`])};m.discriminatedUnion(`name`,[m.object({...Qp,...$p,name:m.literal(`canvas_load`),outcome:m.enum([`ready`,`slow`,`degraded`,`timed-out`,`unavailable`]),bottleneck:m.enum([`metadata`,`details`,`document`,`walkthrough-list`,`restore`,`projection`,`sources`,`replays`]),browserCopyCheck:Zp.optional(),durationMs:Z,shellMs:Z,projectionMs:Z,sourcesMs:Z,replaysMs:Z,nodeCount:Q,recordingCount:Q,screenCount:Q,replayCount:Q,unavailableSourceCount:Q,assetFailureCount:Q,apiRequestCount:Q,apiLongestMs:Z,mirroredAssetRequestCount:Q,mirroredAssetUniqueCount:Q,mirroredAssetTransferBytes:m.number().int().min(0).max(1073741824)}),m.object({...Qp,...$p,name:m.literal(`canvas_interaction`),kind:m.enum([`pan`,`zoom`,`drag`,`edit`]),outcome:m.enum([`smooth`,`janky`,`refused`]),pendingCandidateCount:Q.optional(),durationMs:Z,frameCount:Q,slowFrameCount:Q,worstFrameMs:Z,nodeCount:Q,replayCount:Q}),m.object({...Qp,name:m.literal(`canvas_measurement`),outcome:m.literal(`drift`),layerCount:Q}),m.object({...Qp,name:m.literal(`prototype_open`),kind:m.enum([`open`,`recovered`,`capabilities`]).optional(),navigationId:m.uuid().optional(),captureReady:m.boolean().optional(),deploymentId:m.uuid(),outcome:m.enum([`loaded`,`still-opening`,`failed`]),reason:m.enum([`none`,`ticket-refused`,`ticket-failed`,`denied`,`expired-or-used`,`temporary-error`,`deadline`,`ticket-held`,`gate-silent`,`exchange-held`,`document-held`,`document-unconfirmed`]),attempts:m.number().int().min(1).max(16),durationMs:Z,ticketMs:Z,exchangeMs:Z.nullable(),migration:m.enum([`none`,`completed`,`background`,`failed`,`unknown`]),migrationWaitMs:Z.nullable(),liveMs:Z.nullable(),inputReady:m.boolean()}),m.object({...Qp,name:m.literal(`canvas_realtime`),kind:m.enum([`room-ready`,`reconnect`,`recovery`]),outcome:m.enum([`succeeded`,`failed`]),reason:m.enum([`initial`,`transport`,`snapshot`,`gap`,`replace`,`relay`,`history-restored`]),durationMs:Z})]),m.object({accepted:m.literal(!0)});const em=1e7,tm=m.number().int().min(0).max(1e3),nm=m.strictObject({version:m.literal(1),severity:m.enum([`fatal`,`contained`,`recovered`]),boundary:m.enum([`application`,`properties`,`layers`,`stage`]),phase:m.enum([`render`,`bootstrap`,`event`,`async`,`empty`,`startup`]),errorCode:m.enum([`select-value-unavailable`,`select-options-duplicate`,`render-loop`,`resize-observer-loop`,`unexpected-error`,`application-empty`,`startup-stalled`,`export-incomplete`,`export-image-refused`,`export-image-unreachable`,`export-image-not-an-image`,`export-font-unread`,`clipboard-unavailable`,`clipboard-image-pending`,`clipboard-image-unavailable`,`edit-target-unsupported`,`edit-result-invalid`,`react-hook-order`,`menu-rows-unsupported`]),controlId:m.enum([`canvas-stacking`,`canvas-export`,`styles-copy`,`styles-paste`,`unknown`]),outcome:m.enum([`failed`,`displayed`,`shown`,`retried`,`recovered`]),frames:m.array(m.strictObject({asset:m.string().max(128).regex(/^[\w-][\w.-]*\.js$/u),line:m.number().int().min(1).max(em),column:m.number().int().min(1).max(em)})).max(8),occurredAt:m.iso.datetime().optional(),clientBuild:m.string().regex(/^[\w-]{1,64}$/u).optional(),frameStatus:m.enum([`recorded`,`no-stack`,`no-application-frames`,`malformed-stack`,`no-asset-list`,`kept-local`]).optional(),subsystem:m.enum([`menu`,`menu-picture`,`unknown`]).optional(),repeats:tm.optional(),resourceCount:tm.optional(),httpStatus:m.number().int().min(100).max(599).optional(),deliveryGap:m.strictObject({refused:tm,expired:tm,evicted:tm,exhausted:tm}).optional()}),rm={incidentId:m.uuid(),releaseIdentity:m.string().min(1).max(100),reason:m.enum([`render-loop`,`render-error`]),details:nm.optional()};m.discriminatedUnion(`surface`,[m.object({...rm,surface:m.literal(`canvas`),canvasId:m.uuid()}),m.object({...rm,surface:m.literal(`application`)})]),m.object({accepted:m.literal(!0)});const im=[`root`,`page`,`screen`,`frame`,`group`,`rectangle`,`image`,`svg`,`boolean`,`recording`,`prototype`,`text`],am=[`text-layer-missing`,`text-history-mismatch`,`text-action-identity`,`text-history-resolution`,`text-history-unavailable`,`resync-failed`,`unexpected`],om=[`refused`,`fault`,`sign-in`,`no-edit-access`,`gone`,`restored`,`replan`,`deleted-target`,`whole-value-text`,`retrying`,`recovery`,`trace`],sm=[...am,`request-too-large`,`server-refused`,`repeated-server-error`,`mutation-id-reused`,`base-ahead`,`upload-not-kept`,`preview-conflict`,`competing-edits`,`invalid-reconciliation`,`invalid-recovery-plan`,`history-restored`,`local-changes`,`no-edit-access`,`saved-canvas-unavailable`,`image-unreadable`,`storage-refused`,`unknown-baseline`,`invalid-text-source`,`session-expired`],cm=[`saved`,`saving`,`review`,`retrying`,`upload`,`reconnecting`,`offline`,`not-kept`,`view-only`,`sign-in`,`gone`,`restored`],lm=[`new`,`reopened`],um=[`started`,`resolved`,`superseded`,`shown`,`held-back`,`dismissed`,`action-started`,`action-outcome`,`long-wait`,`long-wait-ended`,`reported`],dm=[`departure-protection`,`retained-copy-review`,`host-priority`,`owner-reentry`,`new-edit-while-blocked`,`restored-work`,`new-blocker`,`unknown`],fm=[`offline`,`retrying`,`upload`,`missing-image`,`missing-capture`,`review`,`view-only`,`not-backed-up`,`gone`,`refused`,`copy-refused`,`copy-preview`,`unknown`],pm=[`critical`,`warning`,`info`],mm=[`kept`,`writing`,`unprotected`],hm=[`try-again`,`sync`,`overwrite`,`review`,`save-copy`,`save-separate-copy`,`send-feedback`,`retry-upload`,`choose-file`,`remove-screen`,`go-to-canvases`],gm=[`saved`,`kept-copy`,`still-blocked`],_m=[`active`,`disabled`,`unavailable`],vm=[`in-flight`,`retry-wait`,`device-write`,`upload`,`read`,`recovery`,`decision`,`offline`,`paused`,`not-held`],ym=[`current-changes-unresolved`,`checking-saved-canvas`,`offline`,`saved-canvas-unavailable`,`sign-in`,`request-unsettled`,`no-edit-access`,`missing-file`,`local-copy-unsaved`,`file-unavailable`,`invalid-review`,`too-large`],bm=[`unknown`,`unclassified`,...$a],xm=m.string().max(256).regex(/^[\w:.-]*$/u),Sm=m.number().int().nonnegative(),Cm=e=>m.string().refine(t=>t===`unknown`||e.includes(t)),wm=Cm(pu),Tm=m.strictObject({schema:m.literal(1),eventId:m.uuid(),occurredAt:m.number().int().nonnegative(),kind:m.enum(um),episodeKey:xm.optional(),nextEpisodeKey:xm.optional(),appearanceId:m.uuid().optional(),trigger:m.enum(dm).optional(),cause:m.enum(fm).optional(),severity:m.enum(pm),command:m.literal(`unknown`),operationKinds:m.array(wm).max(64),refusalCode:m.enum(bm).optional(),operation:wm.optional(),component:Cm(im).optional(),deviceProtection:m.enum(mm),uploadsWaiting:Sm,uploadsBlocked:Sm,saveHold:m.enum(vm).optional(),actions:m.array(m.enum(hm)).max(hm.length),syncBlock:m.enum(ym).optional(),overwriteBlock:m.enum(ym).optional(),outcome:m.enum(gm).optional(),action:m.enum(hm).optional(),replay:m.enum(_m),lostRecords:Sm});m.strictObject({canvasId:m.uuid(),releaseIdentity:m.string().min(1).max(100),report:m.enum(om),detail:m.enum(sm).optional(),mutationId:m.uuid().optional(),version:m.number().int().nonnegative(),attempts:m.number().int().nonnegative(),durationMs:m.number().int().nonnegative(),pendingChanges:m.number().int().nonnegative(),reason:m.enum(sm).optional(),status:m.enum(cm).optional(),episode:m.enum(lm).optional(),trace:Tm.optional()}),m.object({accepted:m.literal(!0),analytics:m.enum([`delivered`,`failed`,`disabled`,`no-identity`,`expired`]).optional()}),m.discriminatedUnion(`type`,[m.object({type:m.literal(`enhance3:extension-probe`)}).strict(),m.object({type:m.literal(`enhance3:extension-present`)}).strict()]);const Em=m.enum([`content`,`popup`,`worker`,`offscreen`,`synthetic`]),Dm=m.uuid(),Om=m.string().regex(/^[\w.-]{1,64}$/u),km=m.enum([`0`,`1`,`2-5`,`6-25`,`26+`]),Am=m.number().int().min(0).max(18e5),$={correlationId:Dm,extensionRelease:Om,capabilityVersion:m.number().int().min(1).max(16),context:Em};m.discriminatedUnion(`name`,[m.object({...$,name:m.literal(`context_lifecycle`),outcome:m.enum([`opened`,`ready`,`closed`,`open-failed`,`close-failed`])}),m.object({...$,name:m.literal(`screen_preview`),outcome:m.enum([`ready`,`unavailable`,`failed`]),source:m.enum([`button`,`shortcut`]),durationMs:Am,messageBytes:m.number().int().min(0).max(67108864)}),m.object({...$,name:m.literal(`authentication`),state:m.enum([`signed-in`,`signed-out`,`invalid`,`unknown`])}),m.object({...$,name:m.literal(`destination_request`),outcome:m.enum([`succeeded`,`empty`,`failed`]),latencyMs:Am,resultCountBucket:km,retryOutcome:m.enum([`not-retried`,`retry-succeeded`,`retry-failed`])}),m.object({...$,name:m.literal(`destination_picker`),outcome:m.enum([`options`,`blank`,`error`]),optionCountBucket:km}),m.object({...$,name:m.literal(`recording_transition`),state:m.enum([`starting`,`recording`,`stopping`,`landed`,`failed`,`cancelled`,`reloaded`]),terminalReason:m.enum([`none`,`completed`,`failed`,`cancelled`,`tab-closed`,`worker-reloaded`,`start-timeout`,`session-rejected`])}),m.object({...$,name:m.literal(`microphone_session`),outcome:m.enum([`opened`,`refused`,`closed`,`still-active`]),durationMs:Am,activeAudioTrackCount:m.number().int().min(0).max(8)}),m.object({...$,name:m.literal(`microphone_permission`),standing:m.enum([`prompt`,`granted`,`denied`,`unknown`]),outcome:m.enum([`observed`,`request-started`,`granted`,`denied`,`refused`,`no-device`,`in-use`,`unavailable`,`settings-opened`])}),m.object({...$,name:m.literal(`recording_cleanup`),outcome:m.enum([`released`,`still-active`,`incomplete`]),terminalReason:m.enum([`completed`,`failed`,`cancelled`,`tab-closed`,`worker-reloaded`,`start-timeout`,`session-rejected`]),mediaRecorderState:m.enum([`not-created`,`inactive`,`recording`,`paused`,`unknown`]),activeAudioTrackCount:m.number().int().min(0).max(8),audioContextState:m.enum([`not-created`,`closed`,`running`,`suspended`,`interrupted`,`unknown`]),offscreenDocumentState:m.enum([`open`,`closed`,`not-open`,`unknown`])}),m.object({...$,name:m.literal(`synthetic_stage`),stage:m.enum([`release-identity`,`authentication`,`destination-list`,`recording-start`,`recording-landed`,`microphone-release`]),outcome:m.enum([`passed`,`failed`]),durationMs:Am})]),m.object({accepted:m.literal(!0)});const jm=(e,t)=>typeof t==`string`&&e.includes(t)?t:null,Mm=e=>{let{refusalCode:t,operation:n,component:r}=e.fields??{};if(t===void 0&&n===void 0&&r===void 0)return;let i=bm.find(e=>e===t);return{refusalCode:t===void 0?`unclassified`:i??`unknown`,operation:jm(pu,n)??`unknown`,component:jm(im,r)??`unknown`}},Nm=`mutation-id-reused`,Pm=`request-too-large`,Fm=/^\d+$/u,Im=e=>{let t=e.fields?.reason;return t===`session-expired`||t===`session-invalid`?t:`signed-out`},Lm=e=>{let t=e.fields??{},n=String(t.restoreFenceVersion);return Fm.test(n)?{kind:`restored`,fenceVersion:Number(n)}:t.retry===`later`?{kind:`transient`,retryAfterMs:null}:t.reason===`mutation-id-reused`?{kind:`fault`,detail:Nm}:t.recovery===`required`?{kind:`replan`}:{kind:`refused`,reason:e.message}},Rm=e=>{let t=e.fields?.reason;if(t===`mutation-id-reused`)return{kind:`fault`,detail:Nm};if(t===`request-too-large`)return{kind:`refused`,reason:Pm};let n=Mm(e);return{kind:`refused`,reason:e.message,...n!==void 0&&{refusal:n}}},zm=(e,t)=>{switch(e.code){case`UNAUTHORIZED`:return{kind:`sign-in`,reason:Im(e)};case`FORBIDDEN`:return{kind:`no-edit-access`};case`NOT_FOUND`:return{kind:`gone`};case`CONFLICT`:return Lm(e);case`RATE_LIMITED`:case`INTERNAL`:return{kind:`transient`,retryAfterMs:t};case`BAD_REQUEST`:return Rm(e)}},Bm=(e,t)=>e===401?{kind:`sign-in`,reason:`signed-out`}:e===403?{kind:`no-edit-access`}:e===404?{kind:`gone`}:e===413?{kind:`refused`,reason:Pm}:e===408||e===429||e===460||e>=500?{kind:`transient`,retryAfterMs:t}:{kind:`refused`,reason:`the server answered ${String(e)}`},Vm=e=>e.kind===`no-response`?{kind:`transient`,retryAfterMs:null}:e.appError===null?Bm(e.status,e.retryAfterMs):zm(e.appError,e.retryAfterMs),Hm=/^\d+$/u,Um=e=>{let t=e?.headers.get(`retry-after`)?.trim()??``;if(Hm.test(t))return Number(t)*1e3;let n=t.endsWith(` GMT`)?Date.parse(t):NaN;return Number.isNaN(n)?null:Math.max(0,n-Date.now())},Wm=.2,Gm=(e,t=Math.random)=>{let n=Math.min(3e4,1e3*2**Math.max(0,e-1));return Math.round(n*(1-Wm+2*Wm*t()))},Km=async e=>{try{return{value:await e}}catch(e){return{error:e}}},qm=async e=>{if(`error`in e)throw e.error;return e.value},Jm=async(e,t)=>{for(let n=0;;n++){let r=await Km(e(n)),i=t.failureOf(r),a=i===null?null:Vm(i);if(a?.kind!==`transient`||n+1>=3)return qm(r);let o=a.retryAfterMs??Gm(n+1);if(t.deadline!==void 0&&Date.now()+o>=t.deadline)return qm(r);`value`in r&&await t.release?.(r.value),await t.wait(o)}};m.object({canvasId:m.uuid(),recordingId:m.uuid()});const Ym=m.object({sequence:m.number().int().min(0),startMs:m.number().int().min(0),endMs:m.number().int().min(0),text:m.string().min(1)}),Xm=m.object({state:m.literal(`processing`),hasPublishedTranscript:m.boolean()}),Zm=m.object({state:m.literal(`ready`),languageCode:m.string().min(1),integrity:m.enum([`whole`,`partial`]),isRefreshing:m.boolean(),cues:m.array(Ym)}),Qm=m.object({state:m.literal(`empty`),reason:m.enum([`no-audio`,`too-short`,`audio-missing`,`no-speech`])}),$m=m.object({state:m.literal(`failed`),canRetry:m.boolean()});m.discriminatedUnion(`state`,[Xm,Zm,Qm,$m]);const eh=async(e,t)=>{try{await e.cancel(t)}catch{}},th=(e,t)=>{let{signal:n,arm:r,stop:i}=t,a=e.getReader();return new ReadableStream({start:e=>{n.addEventListener(`abort`,()=>{e.error(n.reason),eh(a,n.reason)},{once:!0})},pull:async e=>{try{let t=await a.read();if(n.aborted)return;if(t.done){i(),e.close();return}r(),e.enqueue(t.value)}catch(t){i(),n.aborted||e.error(t)}},cancel:async e=>{i(),await a.cancel(e)}})},nh=(e,t=6e4)=>{let n=new AbortController,r=null,i=()=>{r!==null&&clearTimeout(r),r=null},a=()=>{i();let e=performance.now()+t;r=setTimeout(()=>{performance.now()-e>1e3?a():n.abort(new DOMException(`The transfer made no progress`,`TimeoutError`))},t)},o=e==null?n.signal:AbortSignal.any([e,n.signal]);return o.addEventListener(`abort`,i,{once:!0}),a(),{signal:o,stop:i,progress:()=>{o.aborted||a()},watchedBody:e=>(a(),th(e,{signal:o,arm:a,stop:i})),watchBody:e=>e.body===null?(i(),e):(a(),new Response(th(e.body,{signal:o,arm:a,stop:i}),{status:e.status,statusText:e.statusText,headers:e.headers}))}},rh=e=>`Enhance: ${e}\n`,ih=(e,t)=>{if(e.key!==void 0)return`${e.key.journey} › ${e.key.step}`;let n=t.find(t=>`testId`in t&&t.testId===e.testId)?.title??e.testId;return n===void 0?`a capture`:`a capture of "${n}"`},ah=e=>e.map(e=>rh(`${e.code}: ${e.address}: ${e.reason}`)).join(``),oh=(e,t)=>(e.leftOut??[]).map(e=>rh(`capture-left-out: ${ih(e,t)}: ${e.message}`)).join(``)+ah(e.notUploaded??[]),sh=(e,t)=>(e.runId===t?``:rh(`run ${t} had expired, so its captures were published through run ${e.runId}.`))+rh(e.canvasUrl)+e.issues.map(e=>rh(`${e.code}: ${e.message}`)).join(``)+ah(e.notUploaded),ch={unreadable:`it could not be read on this machine`,refused:`Enhance's storage refused it`},lh=2147483647,uh=new Map([[401,`authorization`],[403,`authorization`],[409,`conflict`],[400,`artifact`]]),dh=e=>`error`in e?{kind:`no-response`}:e.value.ok?null:{kind:`response`,status:e.value.status,appError:null,retryAfterMs:Um(e.value)},fh=async(e,t)=>Jm(e,{failureOf:dh,deadline:t,wait:async e=>{await new Promise(t=>{setTimeout(t,e)})},release:async e=>{await e.body?.cancel()}}),ph=async(e,t,n,r)=>{try{return await fh(async()=>fetch(e,{...t,signal:AbortSignal.timeout(n)}),r)}catch{throw x(`transport`,`Enhance did not confirm the request. Resume the same run to recover its result.`)}},mh=async e=>{try{return await e.json()}catch{return null}},hh=async(e,t,n,r)=>{let{procedure:i,timeoutMs:a,publicationTimeoutMs:o}=r,s=await ph(e,t,a,Date.now()+o),c=await mh(s);if(!s.ok){let e=typeof c==`object`&&c?Reflect.get(c,`error`):null,t=typeof e==`object`&&e?Reflect.get(e,`message`):null;throw x(uh.get(s.status)??`transport`,typeof t==`string`?t.slice(0,1e3):`Enhance rejected ${i} (HTTP ${String(s.status)}).`)}let l=typeof c==`object`&&c?Reflect.get(c,`result`):null,u=typeof l==`object`&&l?Reflect.get(l,`data`):void 0,ee=n.safeParse(u);if(!ee.success)throw x(`transport`,`Enhance returned an incompatible ${i} response.`);return ee.data},gh=e=>{let t=URL.parse(e.apiUrl);if(t===null||![`http:`,`https:`].includes(t.protocol)||t.username!==``||t.password!==``||e.token.trim()===``)throw x(`configuration`,`Enhance needs an HTTP API URL and an explicit token.`);let n=e.timeoutMs??3e4,r=e.publicationTimeoutMs??6e5;if(!Number.isSafeInteger(r)||r<1)throw x(`configuration`,`Enhance publication timeout must be a positive integer in milliseconds.`);if(!Number.isSafeInteger(n)||n<1||n>lh)throw x(`configuration`,`Enhance timeout must fit the Node timer range of 1 to 2147483647 milliseconds.`);return{timeoutMs:n,publicationTimeoutMs:r,request:async(i,a,o,{isQuery:s=!1,timeoutMs:c=n}={})=>{let l=new URL(`${t.pathname.replace(/\/$/u,``)}/trpc/${i}`,t.origin);return s&&l.searchParams.set(`input`,JSON.stringify(a)),hh(l,{method:s?`GET`:`POST`,headers:{authorization:`Bearer ${e.token}`,"content-type":`application/json`},...!s&&{body:JSON.stringify(a)},redirect:`error`},o,{procedure:i,timeoutMs:Math.max(1,Math.min(c,lh)),publicationTimeoutMs:r})}}},_h=e=>{let t=new Map;for(let n of e){let e=`${n.key.journey} › ${n.key.step}`;for(let[r,i]of[[n.source.blob,`the snapshot of ${e}`],[n.preview.blob,`the picture of ${e}`],...n.assets.map(e=>[e.blob,e.url])])t.has(r.sha256)||t.set(r.sha256,i)}return t},vh=async e=>{try{return{value:await e}}catch(e){return{error:e}}},yh=async(e,t)=>{let n=nh();try{let r=await xt(e),i={method:`PUT`,headers:t.headers,body:n.watchedBody(r.stream()),duplex:`half`,signal:n.signal,redirect:`error`};return await fetch(t.url,i)}finally{n.stop()}},bh=async(e,t,n)=>{let r=await vh(fh(async()=>yh(t,n),Date.now()+e.publicationTimeoutMs));if(`error`in r)return Ua.publish({stage:`upload`,error:r.error}),`retry`;let i=r.value;if(i.ok)return`stored`;let a=await i.text();return Ua.publish({stage:`upload`,status:i.status,answer:a}),i.status===403&&a.includes(`Request has expired`)?`expired`:Vm({kind:`response`,status:i.status,appError:null,retryAfterMs:null}).kind===`transient`?`retry`:`refused`},xh=async(e,t,n)=>{let r=await e.request(`captureRun.reserveAssets`,{runId:t,blobs:n},ea);return new Map(r.uploads.map(e=>[e.sha256,e]))},Sh=async(e,t,n,r)=>{if(r?.upload===null)return`stored`;if(r===void 0)return`retry`;let i=await bh(e,n.path,r.upload);if(i!==`expired`)return i;let a=(await xh(e,t,[n.blob])).get(n.blob.sha256);if(a?.upload===null)return`stored`;if(a===void 0)return`retry`;let o=await bh(e,n.path,a.upload);return o===`expired`?`retry`:o},Ch=async(e,t,n,r)=>{let i=t.run.id,a=_h(r),o=[],s=(e,t)=>{o.push({code:`file-not-uploaded`,address:a.get(e.sha256)??e.sha256,reason:t})},c=[];for(let e of fa(r)){let t=await Ga(n,e);t===null?s(e,ch.unreadable):c.push({blob:e,path:t})}let l=!0;for(let t=0;t<c.length;t+=400){let n=c.slice(t,t+400),r=await xh(e,i,n.map(e=>e.blob));for(let t of n){let n=await Sh(e,i,t,r.get(t.blob.sha256));n===`refused`?s(t.blob,ch.refused):n!==`stored`&&(l=!1)}}return{notUploaded:o,isComplete:l}},wh=new Set([`sealed`,`converting`,`committed`]),Th=e=>x(`transport`,`Enhance could not take every file of this run yet. Resume the same manifest from this machine to finish it.`,e),Eh=async(e,t)=>e.request(`captureRun.get`,{runId:t},$i,{isQuery:!0}),Dh=async(e,t)=>{try{return await Eh(e,t)}catch{throw Th(t)}},Oh=async(e,t,n)=>{let r=t.run.id;try{await e.request(`captureRun.seal`,{manifest:t},$i,{timeoutMs:e.publicationTimeoutMs});return}catch(e){if(!za(e))throw e;if(e.code===`conflict`&&e.message===`None of this run’s screens arrived.`)throw x(`artifact`,e.message,r,n);if((e.code!==`conflict`||e.message!==`This capture run changed while it was being sealed.`)&&e.code!==`transport`)throw e}let i=await Dh(e,r);if(!wh.has(i.state))throw i.state===`failed`?x(`conversion`,i.failure?.message??`The capture run failed.`,r,n):Th(r)},kh=async(e,t)=>{let n=t.run.id,r=()=>x(`pending`,`Capture run ${n} is still publishing to canvas ${t.run.canvasId}. It appears there when done.`,n),i=async()=>{try{return await e.request(`captureRun.publish`,{runId:n},$i)}catch(e){throw za(e)&&e.code===`transport`?r():e}},a=await i(),o=Date.now()+e.publicationTimeoutMs;for(;a.receipt===null&&a.failure===null&&![`cancelled`,`failed`].includes(a.state);){if(Date.now()>=o)throw r();await new Promise(e=>{setTimeout(e,250)}),a=await i()}if(a.receipt===null)throw x(a.failure?.code===`conflict`?`conflict`:`conversion`,a.failure?.message??`The capture run was cancelled.`,n);return a.receipt},Ah=(e,t)=>{if(e.runId!==t.run.id||e.canvasId!==t.run.canvasId||e.manifestDigest!==Ha(t))throw x(`conflict`,`This run committed a different manifest.`,t.run.id);return e},jh=async(e,t)=>{let{review:n}=t.run,r=n===void 0?{canvasId:t.run.canvasId}:{destination:n.destination,...n.context!==void 0&&{context:n.context},...n.revision!==void 0&&{revision:n.revision},...n.compareTo!==void 0&&{compareTo:n.compareTo}},{run:i}=await e.transport.request(`captureRun.begin`,{...r,source:t.run.source,runKey:globalThis.crypto.randomUUID(),participants:t.run.participants},Zi);if(i.canvasId!==t.run.canvasId)throw x(`conflict`,`Capture run ${t.run.id} expired, and a new run for its review would publish to another canvas, so nothing was published. Capture again to publish this review.`,t.run.id);let a={...t,run:i};return await Xa(g.join(e.directory,`manifest-${i.id}.json`),a),a},Mh=async(e,t,n)=>{let{transport:r,directory:i}=e,a=t.run.id,o=Sa(t);if(`refusal`in o)throw x(`artifact`,o.refusal,a,{leftOut:o.leftOut,notUploaded:[]});let s=await Eh(r,a);if(s.receipt!==null){let e=Ah(s.receipt,t);return await Xa(g.join(i,`receipt.json`),e),{...e,notUploaded:[]}}if(s.state===`collecting`&&Date.parse(s.run.expiresAt)<=Date.now()){if(!n)throw Th(a);return Mh(e,await jh(e,t),!1)}let c=[];if(s.state===`collecting`){let n=await Ch(r,t,e.blobDirectories,o.captures);if(!n.isComplete)throw Th(a);({notUploaded:c}=n)}wh.has(s.state)||await Oh(r,t,{leftOut:o.leftOut,notUploaded:c});let l=Ah(await kh(r,t),t);return await Xa(g.join(i,`receipt.json`),l),{...l,notUploaded:c}},Nh=async(e,t,n,r=[n])=>{try{return await Mh({transport:e,directory:n,blobDirectories:r},t,!0)}catch(e){if(e instanceof Error){let n=Reflect.get(e,`runId`);throw Object.assign(e,{runId:typeof n==`string`?n:t.run.id})}throw x(`transport`,`Capture publication was not confirmed. Resume the same manifest.`,t.run.id)}},Ph=(e,t)=>{let n=e.participants[0];if(n===void 0)throw x(`configuration`,`No capture participant was reserved.`);return{format:`enhance-capture-run`,version:1,run:e,ordering:`partial`,participants:[{id:n,status:`passed`}],attempts:[{runner:`script`,participant:n,retry:0,status:`passed`,captures:t}]}},Fh=async(e,t)=>{for(let n of t.blobs)await Ja(e,n.description,n.bytes);return Ya(e,t.artifact)},Ih=(e,t,n)=>{let r=Hi.parse(t),i=[],a=!1;return{descriptor:r,directory:n,add:async e=>{if(a)throw x(`configuration`,`This run no longer accepts captures.`);let t=Fh(n,e);i.push(t),await t},publish:async()=>{a=!0;let t=await Promise.all(i);if(r.participants.length!==1)throw x(`configuration`,`Multi-participant runs must publish a complete merged manifest.`);let o=Ph(r,t);return await At(n,{recursive:!0}),await Xa(g.join(n,`manifest.json`),o),Nh(e,o,n)},cancel:async()=>(a=!0,(await e.request(`captureRun.cancel`,{runId:r.id},$i)).receipt)}},Lh=async(e,t)=>{let n=Xi.parse({canvasId:t.canvas,destination:t.destination,title:t.title,context:t.context,revision:t.revision,compareTo:t.compareTo,source:t.source,runKey:t.runKey,participants:t.participants}),{run:r}=await e.request(`captureRun.begin`,n,Zi),i=t.directory??g.join(`.enhance`,`captures`,r.id);return await At(i,{recursive:!0}),await Xa(g.join(i,`run.json`),r),Ih(e,r,i)},Rh=async(e,t,n)=>{try{let r=await n();return t(sh(r,e.run.id)),r}catch(n){throw za(n)&&t(oh(n,e.attempts)),n}},zh=e=>p.stderr.write(e),Bh=e=>{let t=gh(e);return{captures:{review:async e=>t.request(`captureRun.review`,{canvasId:e},Ra.nullable(),{isQuery:!0}),decide:async(e,n)=>{await t.request(`captureRun.decide`,{canvasId:e,verdict:n},m.object({accepted:m.literal(!0)}))},reference:async(e,n)=>t.request(`captureRun.reference`,{canvasId:e,name:n},Ia.nullable(),{isQuery:!0}),promote:async e=>t.request(`captureRun.promote`,La.parse(e),Ia),publishManifests:async(e,n={})=>{let r=Ea(await Promise.all(e.map(async e=>Za(e))));if(typeof r==`string`)throw x(`artifact`,r);let i=g.dirname(e[0]??`.`);return await Xa(g.join(i,`merged-manifest.json`),r),Rh(r,n.write??zh,async()=>Nh(t,r,i,e.map(e=>g.dirname(e))))},begin:async e=>Lh(t,e),publishManifest:async(e,n={})=>{let r=await Za(e);return Rh(r,n.write??zh,async()=>Nh(t,r,g.dirname(e)))},get:async e=>t.request(`captureRun.get`,{runId:e},$i,{isQuery:!0})}}},Vh=(e,t)=>{let n=e instanceof Error?Reflect.get(e,`code`):void 0;return new u(n===`authorization`?`UNAUTHORIZED`:n===`conflict`?`CONFLICT`:[`configuration`,`artifact`].includes(String(n))?`BAD_REQUEST`:`INTERNAL`,e instanceof Error?e.message:`Capture publication was not confirmed.`,`Retry enhance captures publish with the same manifest: ${t}`)},Hh=(e,t)=>{e.command(`captures`).description(`Publish SDK captures as editable canvas journeys.`).command(`publish <manifest>`).description(`Publish or resume a reserved capture manifest and print its durable receipt.`).action(async e=>{let n=await t.credentials.read();if(n===null)throw new u(`UNAUTHORIZED`,`Capture publication requires an agent token.`,`Run enhance auth login, then retry the same manifest.`);let r=Bh({apiUrl:t.apiUrl,token:n});try{t.output.result(await r.captures.publishManifest(e))}catch(t){throw Vh(t,e)}})},Uh={"captureRun.review":`Read product review for a run canvas.`,"canvas chats":`Chat history.`,"canvas.createEditableFrame":`Make a screen editable.`,"canvas.create":`Create a canvas.`,"canvas.get":`Read a canvas and access.`,"canvas.setAccess":`Change canvas link access.`,"canvas.list":`List canvases.`,"canvas.rename":`Rename a canvas.`,"canvas.setReviewState":`Set review state.`,"canvas.delete":`Bin a canvas.`,"canvas.move":`Move between shelves.`,"canvas.duplicate":`Copy a canvas.`,"canvas.copyWalkthroughs":`Copy walkthroughs between canvases.`,"canvas.deletePermanently":`Permanently delete a canvas.`,"canvas.restore":`Restore a binned canvas.`,"canvas.inspect":`Inspect a canvas.`,"canvas.tree":`Read the node hierarchy.`,"canvas.node":`Read a node and children.`,"canvas.selection":`Read the live selection.`,"canvas asset":`Manage uploaded assets.`,"canvas mutation":`Read mutation receipts.`,"canvas apply":`Apply canvas operations.`,"canvas find":`Find accessible canvases.`,"canvas remove":`Remove scoped subtrees.`,"canvas read":`Read linked content.`,"canvas update-html":`Update an HTML snapshot.`,"canvas publish-prototype":`Publish a static build.`,"canvas import-asset":`Import an image or font.`,"canvas insert-html":`Insert compiled HTML.`,"canvas make-editable":`Convert a captured screen.`,"canvas capture":`Capture a recording moment.`,"canvas capture-page":`Capture a page you opened.`,"canvas arrange":`Arrange canvas objects.`,"canvas duplicate-nodes":`Duplicate node subtrees.`,"canvas text-style-library":`Manage text styles.`,"canvas realtime":`Canvas presence and activity.`,"canvas document":`Read or replace documents.`,"canvas version":`Retained canvas history.`,"canvas render":`Render canvas pixels.`,"canvas participants":`Manage participants.`,"canvas invites":`Invite people to a canvas.`},Wh=(e,t=!1)=>{let n=Symbol(`explicit-null`),r=e.parseArg;return r===void 0?()=>!1:(e.argParser((e,i)=>{if(t&&e===`null`)return n;try{return r(e,i)}catch(t){try{return r(JSON.stringify(e),i)}catch{throw t}}}),e=>e===n)},Gh=()=>({exit:e=>{throw new ge(e)}}),Kh=new Map([[`comment.resolve --resolved`,null],[`recording.start --page-title`,null],[`recording.start --viewport`,null],[`screen.create --page-title`,null],[`screen.create --provenance`,null],[`screen.create --route`,null],[`screen.create --viewport`,null],[`canvas render --canvas`,`--input`],[`canvas.inspect --canvas`,`--canvas-id`],[`canvas.tree --canvas`,`--canvas-id`],[`canvas.node --canvas`,`--canvas-id`],[`canvas.selection --canvas`,`--canvas-id`],[`canvas read --canvas`,`--input`],[`canvas duplicate-nodes --canvas`,`--input`],[`canvas duplicate-nodes --base-version`,`--input`],[`canvas duplicate-nodes --nodes`,`--input`]]),qh=(e,t)=>Kh.get(`${e} ${t??``}`),Jh=(e,t)=>e.options.flatMap(n=>{let r=qh(t,n.long);if(r===void 0)return[];if(r===null)return[{option:n,replacement:null}];let i=e.options.find(e=>e.long===r);if(i===void 0)throw TypeError(`${t} has no ${r} to replace ${n.flags}.`);return[{option:n,replacement:i}]}),Yh=({option:e,replacement:t})=>{let n=e.long??e.flags;return t===null?new u(`BAD_REQUEST`,`${n} is required unless --json supplies the complete input.`,`Pass ${n} explicitly, including false or null when that is the intended value.`):new u(`BAD_REQUEST`,`${n} is required unless ${t.long??t.flags} is given.`,`Pass ${n}, or use ${t.long??t.flags} instead.`)},Xh=(e,t)=>{let n=Jh(e,t);if(n.length!==0){for(let{option:e,replacement:t}of n)t!==null&&(e.description=`${e.description} Required unless ${t.long??t.flags} is given.`);e.hook(`preAction`,(t,r)=>{if(r!==e||r.getOptionValueSource(`json`)===`cli`)return;let i=e=>r.getOptionValueSource(e.attributeName())===`cli`,a=n.find(({option:e,replacement:t})=>!i(e)&&(t===null||!i(t)));if(a!==void 0)throw Yh(a)})}},Zh={"canvas text-style-library":`Find, read, and publish reusable text styles across canvases.`,"canvas chats":`Inspect and manage authorized canvas chat history.`,canvas:`Create, find, share and manage canvases.`,"canvas render":`Render production-faithful canvas pixels after inspecting exact structure and geometry.`,"canvas version":`Inspect and name retained canvas history.`,"canvas document":`Read or replace the opaque document stored on a canvas.`,"canvas invites":`Invite people to a canvas and manage pending invitations.`,"canvas participants":`List and change the people who can reach a canvas.`,comment:`Comment threads and replies anchored to canvas content.`,organisation:`Teams the authenticated person belongs to or creates.`,"organisation invites":`Invite people to a team and manage pending invitations.`,"organisation people":`Team roster membership and roles.`,person:`The current person, sharing recipients, and agent tokens.`,"person recipients":`People available when choosing sharing recipients.`,recording:`Recorded walkthroughs, chunks, recovery, and completion.`,"recording-asset":`External page assets mirrored for durable replay.`,screen:`Captured pages uploaded for placement on a canvas.`},Qh=new Set([`canvas.invites.accept`,`canvas.invites.preview`,`organisation.invites.accept`,`organisation.invites.preview`]),$h=new Set([`canvas.create --organisation-id`,`canvas.create --source-url`,`recording.start --audio`,`recording.start --page-title`,`screen.create --page-title`,`screen.create --provenance`,`screen.create --route`]),eg=e=>typeof e==`object`&&e&&!Array.isArray(e)?Object.fromEntries(Object.entries(e)):null,tg=e=>{let t=eg(Reflect.get(e,`__trpcCli`)),n=t===null?void 0:t.path;return typeof n==`string`?n:null},ng=(e,t,n,r)=>{let i=t.long,a=tg(e)??r.join(` `),o=a===``||i===void 0?void 0:le[`${a} ${i}`];if(o!==void 0)return o;if(i!==void 0&&le[i]!==void 0)return le[i];let s=(n.split(/Any of:|One of:/u,1)[0]?.trim()??``).split(`;`).map(e=>e.trim()).filter(e=>e!==``&&[`Format:`,`Pattern:`,`Min length:`,`Max length:`].every(t=>!e.startsWith(t))).join(`; `);return s===``?`Value for ${i??t.attributeName()} on ${e.name()}.`:s},rg=(e,t,n)=>{let r=Gh();e.exitOverride(e=>r.exit(e.exitCode)),e.configureOutput({writeOut:e=>t.output.logger.info?.(e),writeErr:e=>t.output.logger.error?.(e)}),e.showHelpAfterError(!1).showSuggestionAfterError(!1);let i=[],a=tg(e)??n.join(` `);for(let t of e.options){t.description=ng(e,t,t.description,n);let r=$h.has(`${a} ${t.long??``}`),o=Wh(t,r);r&&i.push({name:t.attributeName(),matches:o})}i.length>0&&e.hook(`preAction`,e=>{for(let t of i)t.matches(e.getOptionValue(t.name))&&e.setOptionValueWithSource(t.name,null,`cli`)}),Xh(e,a)},ig=(e,t,n,r)=>{(n!==null&&r.mutationPaths.has(n)||t[0]===`fixture`)&&(e.options.every(e=>e.long!==`--client-token`)&&e.option(`--client-token <uuid>`,le[`--client-token`]),e.hook(`preAction`,e=>{let n=e.getOptionValue(`clientToken`),i=m.uuid().nullable().safeParse(n??null);if(!i.success)throw new u(`BAD_REQUEST`,`--client-token must be a UUID.`,`Mint one UUID and reuse it only when retrying this exact command.`);r.mutationKey.select(i.data,t[0]===`fixture`)}))},ag=(e,t,n)=>{n===null||!Qh.has(n)||(e.options.find(e=>e.long===`--token`)?.makeOptionMandatory(!1),e.hook(`preAction`,async e=>{let n=e.getOptionValue(`token`);if(n===void 0&&e.getOptionValue(`json`)!==void 0)return;let r=await dn(typeof n==`string`?n:void 0,`enhance ${t.join(` `)}`);e.setOptionValueWithSource(`token`,r,`cli`)}))},og=(e,t,n,r)=>{let i=Zh[t.join(` `)];i===void 0?n!==null&&e.description(Le[n]??r.get(n)??`Run the ${n} API operation.`):e.description(i);let a=Uh[t.join(` `)]??(n===null?void 0:Uh[n]);a!==void 0&&e.summary(a)},sg=(e,t,n=[])=>{rg(e,t,n);for(let r of e.commands){let e=[...n,r.name()],i=tg(r);ig(r,e,i,t),og(r,e,i,t.descriptions),ag(r,e,i),sg(r,t,e)}},cg=_e().excludedProcedures,lg=new Set([`canvas thumbnail`,`canvas font-catalog`,`telemetry`]),ug=e=>{let t=Reflect.get(e,`__trpcCli`);if(typeof t!=`object`||!t)return null;let n=Reflect.get(t,`path`);return typeof n==`string`?n:null},dg=(e,t=[])=>{let n=e.commands.filter(e=>{let n=ug(e),r=[...t,e.name()].join(` `);return!lg.has(r)&&(n===null||!cg.has(n))});Reflect.set(e,`commands`,n);for(let e of n)dg(e,[...t,e.name()])},fg=e=>{let t=Reflect.get(e,`__trpcCli`);if(typeof t!=`object`||!t)return null;let n=Reflect.get(t,`path`);return typeof n==`string`?n:null},pg=(e,t=[])=>e.commands.filter(e=>e.name()!==`help`).flatMap(e=>{let n=[...t,e.name()];return[{command:e,path:n.join(` `)},...pg(e,n)]}),mg=(e,t=[])=>e.commands.filter(e=>e.name()!==`help`).flatMap(e=>{let n=[...t,e.name()],r=fg(e);return[{path:n.join(` `),procedure:r,description:e.description(),kind:r===null?e.commands.length>0?`namespace`:`utility`:`derived`,helpCharacters:e.helpInformation().length},...mg(e,n)]}),hg=(e,t)=>({...t.describe(e.id),outputSchema:m.toJSONSchema(e.outputSchema,{unrepresentable:`any`,io:`output`}),exampleOutput:e.guide.examples[0]?.output??null}),gg=(e,t)=>{let n=t(),r=we(n),i=Pe();return pg(e).flatMap(({command:e,path:t})=>{let a=fg(e),o=n.find(({cli:e})=>e?.path===t);return o===void 0&&a===null&&e.commands.length>0?[]:[{path:t,description:e.description(),usage:`${t} ${e.usage()}`,arguments:e.registeredArguments.map(e=>({name:e.name(),required:e.required,variadic:e.variadic,description:e.description})),options:e.options.filter(e=>!e.hidden).map(e=>{let n=qh(a??t,e.long);return{flags:e.flags,description:e.description,required:n!==void 0||e.mandatory,...typeof n==`string`&&{requiredUnless:n},...e.defaultValue!==void 0&&{defaultValue:e.defaultValue}}}),...vi[t]!==void 0&&{example:vi[t]},capability:o===void 0?null:hg(o,r),exitCodes:i}]})},_g=(e,t,n)=>{e.command(`commands`).description(`Emit the command inventory as NDJSON without walking the help tree.`).option(`--namespace <path>`,`Keep commands at or below this space-separated path.`).option(`--capabilities`,`Emit the transport-neutral capability inventory.`,!1).option(`--reference`,`Emit complete shared capability contracts for documentation.`,!1).option(`--records`,`Emit the complete contract of each listed command for documentation.`,!1).action(r=>{if(r.reference){let e=ue(n()),r=we(e);t.result({items:e.map(e=>hg(e,r)),truncated:!1});return}if(r.records){t.result({items:gg(e,n),truncated:!1});return}if(r.capabilities){t.result({items:lt(n()),truncated:!1});return}let i=r.namespace?.trim(),a=mg(e).filter(e=>i===void 0||e.path===i||e.path.startsWith(`${i} `));t.result({items:a,truncated:!1})})},vg=(e,t,n,r)=>{let i=e.commands.find(e=>e.name()===`comment`);if(i===void 0)throw TypeError(`derived comment namespace is missing`);i.command(`attention`).description(`List every open comment needing attention; source metadata is included when a capture has it.`).argument(`<canvas-url-or-id>`,`A pasted Enhance canvas URL shaped /c/<UUID>, or a bare canvas UUID.`).action(async e=>{r.result(await t.invoke({capability:f(n(),`comment.attention`),arguments:{canvasId:be(e)},clientToken:null}))})},yg=(e,t)=>{let{version:n,credentials:r,remote:i,output:a}=t;e.command(`doctor`).description(`Check the installed binary, API reachability, and credential file without changes.`).action(async()=>{let[e,t]=await Promise.all([i.health(),r.read()]);a.result({status:t!==null&&e.reachable?`ok`:`degraded`,binary:p.argv[1]??`enhance`,version:n,api:e,credential:{path:r.path,present:t!==null}})})},bg=e=>m.coerce.number().int().positive().parse(e),xg=m.record(m.string(),m.unknown()),Sg=(e,t)=>{let n=xg.safeParse(e);if(!n.success)return 0;let r=n.data.atMs;if(typeof r==`number`&&Number.isFinite(r))return Math.max(0,Math.round(r));let i=n.data.timestamp;return typeof i==`number`&&Number.isFinite(i)?Math.max(0,Math.round(i-t)):0},Cg=async e=>{let t=(await jt(e,`utf8`)).split(`
35
+ `).filter(e=>e.trim()!==``).map(e=>JSON.parse(e)),n=t.map(e=>xg.safeParse(e).data?.timestamp).find(e=>typeof e==`number`&&Number.isFinite(e));return t.map(e=>({atMs:Sg(e,n??0),event:e}))},wg=async e=>({clientToken:e.clientToken??Ot(),body:await jt(e.file),route:e.route??null,pageTitle:e.pageTitle??g.basename(e.file),viewport:{width:e.width,height:e.height},provenance:null}),Tg=e=>e.option(`--width <pixels>`,`Captured viewport width.`,bg,1440).option(`--height <pixels>`,`Captured viewport height.`,bg,900),Eg=(e,t,n)=>{Tg(e.command(`screen`).description(`Upload one captured page and return its reusable screen id.`).requiredOption(`--file <path>`,`File containing the captured HTML bytes.`).option(`--client-token <uuid>`,`Stable UUID to reuse when retrying the same upload.`).option(`--route <url>`,`Original browser route, when it is safe to retain.`).option(`--page-title <title>`,`Captured page title.`)).action(async e=>{n.result(await t(await wg(e)))})},Dg=(e,t,n)=>{Tg(e.command(`recording`).description(`Upload NDJSON rrweb events as a walkthrough; chunk offsets start at the first event.`).requiredOption(`--file <path>`,'NDJSON with one rrweb event per line; minimum example: `{"type":2,"timestamp":1000}`.').requiredOption(`--source-url <url>`,`Required route the recording represents.`).option(`--page-title <title>`,`Title for a newly created walkthrough canvas.`).option(`--canvas-id <uuid>`,`Existing canvas to receive the walkthrough.`)).action(async e=>{n.result(await t({entries:await Cg(e.file),sourceUrl:e.sourceUrl,pageTitle:e.pageTitle??null,viewport:{width:e.width,height:e.height},...e.canvasId!==void 0&&{canvasId:e.canvasId}}))})},Og=(e,t,n)=>{Tg(e.command(`world`).description(`Create a team, a canvas, and zero or more attached screen fixtures.`).requiredOption(`--organisation-name <name>`,`Name of the team to create.`).requiredOption(`--canvas-title <title>`,`Title of the canvas to create.`).option(`--screen <path...>`,`Captured HTML files to upload and attach.`)).action(async e=>{let r=[],i=e.screen??[];for(let t of i)r.push(await wg({file:t,width:e.width,height:e.height}));n.result(await t({organisationName:e.organisationName,canvasTitle:e.canvasTitle,screens:r}))})},kg=(e,t,n)=>{let r=e.command(`fixture`).description(`Build deterministic product fixtures.`);Eg(r,t.screen,n),Dg(r,t.recording,n),Og(r,t.world,n)},Ag=(t,n)=>{t.command(`operation`).description(`Read existing domain-owned operation outcomes.`).command(`status`).description(`Recover an existing outcome without creating or resuming work.`).requiredOption(`--input <json-or-@path>`,`Operation reference and optional detail offset/limit.`).action(async t=>{n.output.result(await n.invocation.invoke({capability:f(n.catalog(),`operation.status`),arguments:_(t.input,e,`--input`),clientToken:null}))})},jg=e=>m.coerce.number().parse(e),Mg=e=>m.coerce.number().positive().parse(e),Ng=e=>m.coerce.number().int().positive().parse(e),Pg=(e,t,n,r)=>{(e.commands.find(e=>e.name()===`prototype`)??e.command(`prototype`).description(`Publish static frontend prototypes.`)).command(`publish`).description(`Package and publish an unpacked static build directory. The CLI creates the upload artifact. To update a prototype, publish to its owner node: pass --prototype-id and that node as --node-id. Any other node that shows it forks into its own prototype. An update keeps the title the node shows; --title only names a new node.`).requiredOption(`--canvas-id <uuid>`,`Canvas that receives the prototype.`).requiredOption(`--directory <path>`,`Unpacked static build directory; do not pass a ZIP file.`).requiredOption(`--title <title>`,`Label above the prototype frame.`).requiredOption(`--base-version <number>`,`Current canvas document version.`,Ng).option(`--prototype-id <uuid>`,`Existing prototype identity to publish a new deployment.`).option(`--client-token <uuid>`,`Stable retry token for this exact build.`).option(`--node-id <id>`,`Exact canvas node to create, update, or fork when it is a copy.`).option(`--entry <path>`,`HTML entry relative to the uploaded directory.`,`index.html`).option(`--x <pixels>`,`Canvas x coordinate.`,jg,48).option(`--y <pixels>`,`Canvas y coordinate.`,jg,48).option(`--width <pixels>`,`Prototype viewport width.`,Mg,1440).option(`--height <pixels>`,`Prototype viewport height.`,Mg,900).action(async e=>{let i=e.clientToken??Ot();r.result(await t.invoke({capability:f(n(),`prototype.publish`),arguments:{canvasId:e.canvasId,prototypeId:e.prototypeId??null,targetMode:e.prototypeId!==void 0&&e.nodeId===void 0?`prototype`:`node`,nodeId:e.nodeId??`proto_${i.replaceAll(`-`,``)}`,title:e.title,directory:e.directory,entryPath:e.entry,baseVersion:e.baseVersion,box:{x:e.x,y:e.y,width:e.width,height:e.height}},clientToken:i}))})},Fg=(e,t,n)=>{let r=(n?m.coerce.number().int().positive():m.coerce.number().int().nonnegative()).safeParse(e);if(!r.success)throw new u(`BAD_REQUEST`,`${t} is invalid.`,`Run 'enhance recording snapshot --help'.`);return r.data},Ig=(e,t)=>{let n=e.commands.find(e=>e.name()===`recording`);if(n===void 0)throw TypeError(`the API router did not supply recording commands`);n.command(`snapshot`).description(`Persist one visually accepted recording moment as an ordinary screen and frame.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID containing the recording.`).requiredOption(`--recording-id <uuid>`,`Recording UUID returned by recording list.`).requiredOption(`--at-ms <integer>`,`Accepted recording timestamp in milliseconds.`).option(`--timeout-ms <integer>`,`Local polling deadline in milliseconds.`,`120000`).option(`--client-token <uuid>`,`Stable UUID to reuse only when retrying this exact snapshot.`).addHelpText(`after`,`
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
- `).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
- `)}\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-e57eae05dcd7`,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{};
37
+ `).action(async e=>{let n=m.uuid().nullable().safeParse(e.clientToken??null),r=m.uuid().safeParse(e.recordingId);if(!n.success||!r.success)throw new u(`BAD_REQUEST`,`The recording id or client token is not a UUID.`,"Use the recording id from `recording list`; mint one client token per accepted moment.");t.output.result(await t.invocation.invoke({capability:f(t.catalog(),`recording.snapshot`),arguments:{canvasId:be(e.canvas),recordingId:r.data,atMs:Fg(e.atMs,`--at-ms`,!1),timeoutMs:Fg(e.timeoutMs,`--timeout-ms`,!0)},clientToken:n.data}))})},Lg=(e,t,n)=>{if(e!==`canvas.document.save`||typeof n!=`object`||!n||!(`outcome`in n)||n.outcome!==`conflict`)return n;throw new u(`CONFLICT`,`The canvas document changed before this save landed.`,`Run 'enhance canvas document get --canvas-id ${typeof t==`object`&&t&&`canvasId`in t&&typeof t.canvasId==`string`?t.canvasId:`<canvas-id>`}', merge your change into that document, then retry with its version.`)},Rg=(e,t)=>Rt(e,e=>({[e]:{query:async n=>t.query(e,n),mutate:async n=>Lg(e,n,await t.mutate(e,n))}})),zg=(e,t)=>{let n=e.commands.find(e=>e.name()===`transcript`);if(n===void 0)throw TypeError(`the API router did not supply transcript commands`);n.command(`get`).description(`Read timestamped speech cues as candidate moments; render and inspect candidate PNGs before snapshotting.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID containing the recording.`).requiredOption(`--recording-id <uuid>`,`Recording UUID returned by recording list.`).action(async e=>{let n=m.uuid().safeParse(e.recordingId);if(!n.success)throw new u(`BAD_REQUEST`,`--recording-id must be a UUID.`,"Use the recording id returned by `enhance recording list`.");t.output.result(await t.invocation.invoke({capability:f(t.catalog(),`transcript.read`),arguments:{canvasId:be(e.canvas),recordingId:n.data},clientToken:null}))})},Bg={jsonInput:`auto`,prompts:!1,logger:`ndjson`,errorMapping:`stable-exit-codes`},Vg=e=>{let t=e.state;return{logger:e.output.logger,prompts:Bg.prompts,process:Gh(),formatError:e=>{let n=pe(e,t.pendingParserMessage);return t.exitCode=Ae(n,!1,e),t.pendingParserMessage=null,JSON.stringify(n)}}},Hg=e=>typeof e==`object`&&e&&!Array.isArray(e)?Object.fromEntries(Object.entries(e)):null,Ug=e=>{let t=Hg(e),n=t===null?void 0:t.description;return typeof n==`string`&&n!==``?n:null},Wg=e=>({descriptions:new Map(e.flatMap(([e,t])=>{let n=Ug(t.meta);return n===null?[]:[[e,n]]})),mutationPaths:new Set(e.flatMap(([e,t])=>t.type===`mutation`?[e]:[]))}),Gg=()=>{let e=null;return()=>(e??=De(),e)},Kg=(e,t,n)=>{let r=cn(t.remote),i=qe({remote:t.remote,mutationKey:t.mutationKey,configDirectory:t.configDirectory,now:()=>new Date,progress:t.output.result});pn(e,Ke(t.credentials,t.remote,nt(t.remote)),t.output),vg(e,i,n,t.output),Hh(e,t),Ag(e,{invocation:i,catalog:n,output:t.output}),yg(e,{version:t.version,credentials:t.credentials,remote:t.remote,output:t.output}),kg(e,{screen:r,recording:on(t.remote),world:un(t.remote,r)},t.output),_g(e,t.output,n),ji(e,{remote:t.remote,mutationKey:t.mutationKey,invocation:i,catalog:n,output:t.output,configDirectory:t.configDirectory,now:()=>new Date}),Ig(e,{invocation:i,catalog:n,output:t.output}),Pg(e,i,n,t.output),zg(e,{invocation:i,catalog:n,output:t.output})},qg=e=>{let t=ft({router:xe()}),n=Gg(),{descriptions:r,mutationPaths:i}=Wg(t),a=dt({router:Rg(t,e.remote),name:e.commandName,version:e.version,description:`Operate Enhance as the authenticated person.`,jsonInput:Bg.jsonInput}),o=Vg(e),s=a.buildProgram(o);if(!(s instanceof ut))throw TypeError(`trpc-cli did not return a Commander program`);dg(s),Kg(s,e,n),sg(s,{descriptions:r,mutationPaths:i,mutationKey:e.mutationKey,output:e.output}),s.description(`Operate Enhance as the authenticated person.`);let c=e.state;return{program:s,run:async()=>{try{await a.run(o,s)}catch(t){if(!(t instanceof ge))throw t;if(t.requestedCode!==0&&c.pendingParserMessage!==null){let n=pe(t,c.pendingParserMessage);c.exitCode=Ae(n,!0),c.pendingParserMessage=null,e.output.failure(n)}throw t}}}},Jg=e=>p.exit(e),Yg=36e5,Xg=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Zg=e=>{if(Array.isArray(e))return e.map(e=>JSON.stringify(e));if(!Xg(e)||!Array.isArray(e.items)||`nextCursor`in e)return[JSON.stringify(e)];let t=e.items;if(t.length===0)return[JSON.stringify(e)];let n=e.truncated===!0;return t.map(e=>JSON.stringify(Xg(e)?{...e,truncated:n}:{value:e,truncated:n}))},Qg=e=>{let t=`${e.join(`
38
+ `)}\n`;if(!(t.length>25e3||e.some(e=>e.length>2e3))){p.stdout.write(t);return}let n=Dt(`sha256`).update(t).digest(`hex`).slice(0,16),r=g.join(mt(),`enhance-${n}.ndjson`);Et(r,t,{mode:384}),p.stdout.write(`${JSON.stringify({path:r,characters:t.length,records:e.length})}\n`)},$g=e=>{try{let t=new URL(e),n=new Set;for(let e of t.searchParams.keys())n.add(e.toLowerCase());return n.has(`x-amz-signature`)||n.has(`x-amz-credential`)||n.has(`x-amz-algorithm`)}catch{return!1}},e_=e=>typeof e==`string`?$g(e):Array.isArray(e)?e.some(e=>e_(e)):Xg(e)?Object.values(e).some(e=>e_(e)):!1,t_=e=>{bt(e,{recursive:!0,mode:448}),gt(e,448)},n_=e=>{if(!vt(e))return;let t=Date.now()-Yg,n=Ct(e,{withFileTypes:!0});for(let r of n){if(!r.isFile()||!r.name.startsWith(`result-`))continue;let n=g.join(e,r.name);yt(n).mtimeMs<t&&Tt(n)}},r_=e=>({...e,sensitive:!0,cleanup:`unlink-after-use`,deleteAfter:new Date(Date.now()+Yg).toISOString()}),i_=(e,t)=>{let n=Zg(e),r=`${n.join(`
39
+ `)}\n`;t_(t);let i=g.join(t,`result-${Ot()}.ndjson`);Et(i,r,{mode:384,flag:`wx`}),p.stdout.write(`${JSON.stringify(r_({path:i,characters:r.length,records:n.length,reason:`signed-url`}))}\n`)},a_=e=>Xg(e)?typeof e.token==`string`?{field:`token`,value:e.token}:typeof e.acceptToken==`string`?{field:`acceptToken`,value:e.acceptToken}:null:null,o_=(e,t,n)=>{let r=`${t.value}\n`;t_(n);let i=g.join(n,`result-${Ot()}.token`);Et(i,r,{mode:384,flag:`wx`});let a=Object.fromEntries(Object.entries(e).filter(([e])=>e!==t.field));p.stdout.write(`${JSON.stringify({...a,secret:r_({path:i,field:t.field,characters:r.length})})}\n`)},s_=e=>e.includes(`Usage:`)||e.includes(`Options:`)||e.includes(`Commands:`),c_=Re.omit({fields:!0}).extend({remediation:m.string(),fields:m.array(m.object({path:m.string(),message:m.string()})).optional()}),l_=e=>{try{let t=JSON.parse(e),n=c_.safeParse(t);return n.success?{code:n.data.code,message:n.data.message,remediation:n.data.remediation,...n.data.fields!==void 0&&{fields:n.data.fields}}:null}catch{return null}},u_=(e,t)=>{if(typeof e==`string`&&s_(e)){p.stdout.write(e);return}let n=a_(e);if(n!==null&&Xg(e)){o_(e,n,t);return}if(e_(e)){i_(e,t);return}let r=ke(e);if(r!==null){let e=null;if(r.detail!==null){t_(t);let n=g.join(t,`result-${Ot()}.ndjson`),i=`${JSON.stringify(r.detail)}\n`;Et(n,i,{mode:384,flag:`wx`}),e=r_({path:n,characters:i.length,records:1})}p.stdout.write(`${JSON.stringify({...r.value,...e!==null&&{detail:e}})}\n`);return}Qg(Zg(e))},d_=e=>{p.stderr.write(`${JSON.stringify(e)}\n`)},f_=(e,t,n=`enhance`)=>{let r=e,i=g.join(t,`sensitive`);return n_(i),{result:e=>{u_(Ce(e,n),i)},failure:e=>{d_(Ne(e,n))},logger:{info:(...e)=>{u_(Ce(e.length===1?e[0]:e,n),i)},error:(...e)=>{let t=String(Ce(e.map(String).join(``),n)),i=l_(t);i===null?r.pendingParserMessage=t:d_(i)}}}};rt(),(async()=>{let e=Ge(),t={exitCode:1,pendingParserMessage:null},n=f_(t,e.configDirectory,e.commandName),r=Ze(e.configDirectory),i=et(),a=tt(e.apiUrl,r,i),o=qg({apiUrl:e.apiUrl,version:`0.1.41-dev.sha-548ac35f52fa`,credentials:r,remote:a,mutationKey:i,output:n,state:t,configDirectory:e.configDirectory,commandName:e.commandName});try{await o.run()}catch(e){e instanceof ge&&Jg(e.requestedCode===0?0:t.exitCode),n.failure(pe(e,null)),Jg(1)}})().catch(e=>{p.stderr.write(`${e instanceof Error?e.message:`CLI startup failed.`}\n`),p.exitCode=1});export{};