videobook 0.2.2 → 0.2.4

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.
Files changed (61) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/README.md +10 -10
  3. package/dist/book-manager.js +40 -2
  4. package/dist/command-reference.js +16 -2
  5. package/dist/env-secrets.js +7 -4
  6. package/dist/image-edit-models.js +1 -0
  7. package/dist/jobs/complete-provider-task.js +7 -1
  8. package/dist/jobs/generate-media.js +4 -0
  9. package/dist/jobs/render-project.js +124 -31
  10. package/dist/media/adapters/index.js +4 -0
  11. package/dist/media/adapters/machgen.js +48 -0
  12. package/dist/media/adapters/types.js +1 -0
  13. package/dist/media/catalog.js +83 -0
  14. package/dist/media/complete.js +1 -1
  15. package/dist/media/cost.js +79 -6
  16. package/dist/media/frontier-gaps.js +49 -0
  17. package/dist/media/frontier.js +30 -0
  18. package/dist/media/json-schema.js +7 -0
  19. package/dist/media/listing.js +9 -2
  20. package/dist/media/machgen.js +261 -0
  21. package/dist/media/model-id.js +1 -1
  22. package/dist/media/preview.js +2 -0
  23. package/dist/media/prompt-dialects.js +2 -0
  24. package/dist/media/ref-fields.js +11 -3
  25. package/dist/media/request.js +49 -0
  26. package/dist/media/seedance-draft.js +48 -0
  27. package/dist/media/wire.js +3 -0
  28. package/dist/notebook-action-catalog.js +5 -0
  29. package/dist/one-password.js +13 -7
  30. package/dist/provider-status-link.js +1 -1
  31. package/dist/provider-task-status.js +6 -3
  32. package/dist/provider-usage.js +24 -10
  33. package/dist/queue.js +3 -0
  34. package/dist/tools/commands.js +1 -1
  35. package/dist/tools/estimate-cost.js +7 -5
  36. package/dist/tools/provider-key-status.js +4 -0
  37. package/dist/tools/reconcile-project-work.js +69 -1
  38. package/dist/usage-providers.js +4 -0
  39. package/dist/workspace-action-catalog.js +1 -1
  40. package/package.json +14 -13
  41. package/ui/assets/{alive-captions-C48o6dfv.js → alive-captions-Bp6dxosy.js} +1 -1
  42. package/ui/assets/confirm-bodies-Ds1HtaGc.js +1 -0
  43. package/ui/assets/{fullscreen-4m0qtZ7w.js → fullscreen-BCeVHjvY.js} +1 -1
  44. package/ui/assets/{goal-ui-2pUWP_B2.js → goal-ui-DbAGwgMN.js} +2 -2
  45. package/ui/assets/index-D1d-F1y9.js +37 -0
  46. package/ui/assets/index-DWfR79lA.css +1 -0
  47. package/ui/assets/{inspector-CnKySYc5.js → inspector-BJTC0luH.js} +1 -1
  48. package/ui/assets/{jobs-ui-lRoS1MbL.js → jobs-ui-C1cbw-xG.js} +1 -1
  49. package/ui/assets/{music-video-BQnnPp-X.js → music-video-CWtxPlxq.js} +1 -1
  50. package/ui/assets/ui-CXDi5Omq.js +2 -0
  51. package/ui/assets/vendor-BFupLz37.js +19 -0
  52. package/ui/assets/{vendor-flow-zBavaNEW.js → vendor-flow-CKiuzaeM.js} +1 -1
  53. package/ui/assets/{vendor-mcp-DQ7EusT9.js → vendor-mcp-DQEeVZH0.js} +1 -1
  54. package/ui/assets/videobook-J-j9bSjM.js +20 -0
  55. package/ui/index.html +12 -12
  56. package/ui/assets/confirm-bodies-aq6Az8Md.js +0 -1
  57. package/ui/assets/index-DmDH4gYr.js +0 -37
  58. package/ui/assets/index-DzPAnCUj.css +0 -1
  59. package/ui/assets/ui-OHFUngrc.js +0 -2
  60. package/ui/assets/vendor-yctIZ9Dz.js +0 -19
  61. package/ui/assets/videobook-DZ58pKW5.js +0 -20
@@ -0,0 +1,20 @@
1
+ import{c as ne,a as _,j as He}from"./vendor-react-Dj7D1fD4.js";import{n as wt,a as Ks,t as Ut,T as Qo,b as ue,N as de,d as X,e as sn,f as ke,S as zs,i as ei,g as Xs,s as ar,h as Ys,j as Ke,k as Dn,l as Js,m as Ee,o as Zs,p as Lr,q as Vn,r as Qs,u as ti,M as ea,v as ni,w as Le,x as ri,y as Bt,z as ta,A as na,B as oi,C as zt,D as ra}from"./vendor-BFupLz37.js";import{o as te,n as V,a as ae,s as j,_ as Ye,l as ii,b as Te,C as oa,S as ia}from"./vendor-mcp-DQEeVZH0.js";import{l as sa,u as aa,a as ca}from"./vendor-remotion-CH1HXrlc.js";const Zb=["x","instagram","tiktok","youtube","other"],Qb=["views","impressions","likes","replies","reposts","quotes","bookmarks","shares","clicks"];function la(e){return e.toLowerCase().replace(/[^a-z0-9]+/gu,"-").replace(/^-+|-+$/gu,"")||"book"}function si(e,t,n){return`${la(e)}/post-${t.replace(/^@/u,"")}-${n.slice(-6)}`}function ua(e){const t=e.trim().replace(/\/+$/u,"");return t?t.startsWith("/")||t.startsWith("~")?"Use a folder inside iCloud Drive › Videobook, like my-book/post-a1.":[...t].some(n=>n.charCodeAt(0)<32||n.charCodeAt(0)===127)?"Use an iCloud folder without control characters.":t.split("/").some(n=>n===".."||n==="."||n==="")?"Use an iCloud folder without empty, . or .. segments.":null:"Choose an iCloud folder."}const da="16:9",fa="2K",ma="jpg",ey=25,pa="16:9",ga="1080p",ha=13,ba="mp4",ya=!0,ty=60,_a={resolution:ga,aspect_ratio:pa,duration:ha,output_format:ba,generate_audio:ya},va={aspect_ratio:da,resolution:fa,output_format:ma},ka=3,wa=2.3,Sa=.3,Ia="th",Aa=["fyp","bkk"],xa={profileUrl:"https://www.tiktok.com/@jtbkk",includePlatformIcon:!0,includeHandleBorder:!0,handlePaddingX:15,handlePaddingY:12,handleRounding:56,handlePlacement:"center",handleVerticalPercent:10,handleStartSeconds:0,handleEndSeconds:ka,handleOpacity:.28,qrLeadSeconds:wa,qrOpacity:.37,fadeSeconds:Sa};function Ea(e,t){const n=Number.isFinite(t)?Math.max(0,t):0,r=Math.min(n,Math.max(0,e.handleStartSeconds)),o=Math.min(n,Math.max(r,e.handleEndSeconds)),i=n,s=e.qrLeadSeconds,a=Math.max(0,n-Math.min(n,Math.max(0,s)));return{handleStartSeconds:r,handleEndSeconds:o,qrStartSeconds:a,qrEndSeconds:i}}const ny=["en","th"],Ca={en:"English",th:"Thai"},Ma={x:280,instagram:2200,tiktok:2200,youtube:5e3,other:2200},ai={x:2,instagram:10,tiktok:5,youtube:15,other:8},cr={x:"X",instagram:"Instagram",tiktok:"TikTok",youtube:"YouTube Shorts",other:"Other"},Ta=/^#[\p{L}\p{M}\p{N}_]+$/u;function Ra(e){return e.trim().replace(/^#+/u,"").replace(/[^\p{L}\p{M}\p{N}_]/gu,"")}function an(e,t=Number.POSITIVE_INFINITY){const n=new Set,r=[];for(const o of e){const i=Ra(o),s=i.toLocaleLowerCase();if(!(!i||n.has(s))&&(n.add(s),r.push(i),r.length>=t))break}return r}function $a(e){const t=e.trim().split(/\s+/u);return t.length>0&&t.every(n=>Ta.test(n))}function Na(e){const n=e.trimEnd().split(`
2
+ `),r=n[n.length-1]??"";return!r.trim()||!$a(r)?{body:e,tags:[]}:{body:n.slice(0,-1).join(`
3
+ `).trimEnd(),tags:an(r.trim().split(/\s+/u))}}function Pa(e,t){const n=an(t).map(o=>`#${o}`).join(" "),r=e.trimEnd();return n?r?`${r}
4
+
5
+ ${n}`:n:r}const ry=[{id:"x",label:"X"},{id:"tiktok",label:"TikTok"},{id:"instagram",label:"Instagram"},{id:"youtube",label:"YT Shorts"},{id:"other",label:"Other"}],oy=["Longer caption","Punchier","More emoji","Fewer tags","Add a call to action"],Oa=/[฀-๿]/u;function La(e){return Oa.test(e)?"th":"en"}function iy(e){const t=e.definition.caption,n=e.definition.platform==="tiktok"&&!t.trim(),r=n?Ia:La(t),o=Na(t),i=t.trim()?{[r]:{versions:[{body:o.body,tags:o.tags,origin:"saved",instruction:null}],index:0}}:n?{th:{versions:[{body:"",tags:[...Aa],origin:"auto",instruction:null}],index:0}}:{};return{language:r,platform:e.definition.platform,tracks:i,prompt:"",drafting:null,error:null}}function tt(e){const t=e.tracks[e.language];return t?.versions[t.index]??null}function Xt(e){const t=tt(e);return t?Pa(t.body,t.tags):""}function Fa(e,t){const n=e.tracks[e.language],r=n?{...n,versions:n.versions.map((o,i)=>i===n.index?t:o)}:{versions:[t],index:0};return{...e,tracks:{...e.tracks,[e.language]:r}}}function ci(e,t){const n=tt(e)??{body:"",tags:[],origin:"edited",instruction:null};return Fa(e,{...n,...t,origin:"edited"})}function sy(e,t){const n=tt(e)?.tags??[],r=an([...n,...t.split(/[\s,]+/u)]);return r.length===n.length?e:ci(e,{tags:r})}function ay(e,t){const n=tt(e)?.tags??[];return ci(e,{tags:n.filter(r=>r!==t)})}function cy(e,t,n,r){const o=e.tracks[t]??{versions:[]},i={body:n.caption,tags:n.tags,origin:r?"astra":"auto",instruction:r},s=[...o.versions,i];return{...e,language:t,tracks:{...e.tracks,[t]:{versions:s,index:s.length-1}},drafting:null,error:null}}function ly(e,t){const n=e.tracks[e.language];if(!n)return e;const r=Math.min(n.versions.length-1,Math.max(0,n.index+t));return{...e,tracks:{...e.tracks,[e.language]:{...n,index:r}}}}function uy(e,t,n){const r=e.tracks[t],o=r?.versions[r.index]?.body.trim()??"";return!n&&!e.drafting&&o.length===0}function dy(e,t,n,r,o){const i=n.tracks[r],s=i?.versions[i.index];return{book_id:e,post_cell_id:t,language:r,platform:n.platform,...o?{instruction:o}:{},...o&&s?{caption:s.body,tags:s.tags}:{}}}function fy(e){const t=e&&typeof e=="object"&&!Array.isArray(e)?e:{},n=typeof t.caption=="string"?t.caption.trim():"";if(!n)throw new Error("Astra returned an empty caption.");const r=Array.isArray(t.tags)?t.tags.filter(o=>typeof o=="string"):[];return{caption:n,tags:an(r)}}function my(e){const t=tt(e),n=Ca[e.language];return t?t.origin==="saved"?"Saved caption":t.origin==="edited"?"Edited by you · Regen keeps this version in history":t.origin==="astra"?`Rewritten by Astra · “${t.instruction??""}”`:t.body.trim()?`Drafted by Astra from the video analysis · ${n}`:`No ${n} caption yet`:`No ${n} caption yet`}function Da(e){const t=Xt(e).length,n=Ma[e.platform],r=tt(e)?.tags.length??0;return{length:t,limit:n,over:t>n,tooManyTags:r>ai[e.platform]}}function Va(e){const t=Da(e),n=cr[e.platform];return t.over?`Over ${n}'s ${t.limit.toLocaleString()}-character limit. Shorten it or regen with Astra.`:t.tooManyTags?`${n} works best with ${ai[e.platform]} tags or fewer.`:null}const ja=new Set(["posting","needs_reconciliation","scheduled"]),Fr=25e3,Ga="iCloud Drive isn't available on this Mac.";function qa(e,t,n){const r=n.replace(/^@/u,"").toLowerCase();return e.id.toLowerCase()===r||e.address.replace(/^@/u,"").toLowerCase()===r?!0:[t.find(s=>s.id===e.id)?.outputArtifactId,e.definition.source?.snapshotArtifactId,e.runtime.outbound?.artifactId].some(s=>s?.toLowerCase()===r)}function py(e,t,n,r){const o=n?.trim();return o?e.find(i=>qa(i,t,o))??null:e.find(i=>i.id===r)??null}const Ua=new Set(["image","video","generate_image","generate_video","concat","splice","split_video"]);function gy(e,t){const n=t.trim().replace(/^@/u,"").toLowerCase();return e.find(r=>r.type!=="post"&&!!r.outputArtifactId&&Ua.has(r.type)&&[r.id,r.outputArtifactId,wt(r.slot)].some(o=>o?.toLowerCase()===n))??null}function hy(e,t){return e.filter(n=>n.definition.source?.cellId===t).reduce((n,r)=>!n||r.definition.createdAt>n.definition.createdAt?r:n,null)}function by(e,t){return e.runtime.icloud?.folder??si(t,e.address,e.id)}function yy(e,t){return e.runtime.dropbox?.folder?e.runtime.dropbox.folder:`/Videobook/${si(t,e.address,e.id)}`}function Ba(e,t){return e==="dropbox"||t&&!t.available?"dropbox":"icloud"}function _y(e,t){return{...e,icloud:t,destination:e.pinnedDestination?e.destination:Ba(e.entry,t)}}function cn(e){return!!e.runtime.outbound}function Ha(e){const t=e.trim();return t?t.startsWith("/")?t.split("/").includes("..")||[...t].some(n=>n.charCodeAt(0)<32)?"Use a Dropbox folder without .. segments or control characters.":null:"Start the Dropbox folder with /, like /Videobook/clips.":"Choose a Dropbox folder."}function Wa(e,t){return t?"Finish connecting Dropbox in the other tab.":e?e.connected?null:e.hasCredentials?"Connect Dropbox to upload.":"Dropbox delivery is not configured. Set DROPBOX_CLIENT_ID on the server.":"Checking the Dropbox connection…"}function Ka(e,t){return e?e.definition.source?.snapshotArtifactId?ja.has(e.runtime.status)?`Resolve or cancel ${e.address}'s current publication first.`:t.length>Fr?`Shorten the caption to ${Fr.toLocaleString()} characters.`:null:`${e.address} has no saved source clip. Choose one in the Post panel.`:"This Post is no longer on the canvas."}function vy(e){return e?.available?e.shared===!0?"Shared with your iPhones":e.shared===!1?"Share iCloud Drive › Videobook with your phones first":null:null}function za(e,t){return!e||cn(e)?null:t.copy.drafting?"Astra is writing the caption…":null}function Dr(e,t){return e&&!cn(e)?Va(t.copy):null}function ky(e,t){const n=Ka(e,Xt(t.copy))??za(e,t);if(t.destination==="dropbox"){const i=n??Ha(t.dropboxFolder)??Wa(t.connection,t.connecting),s=e?.runtime.dropbox&&!e.runtime.dropbox.completedAt&&e.runtime.dropbox.folder===t.dropboxFolder.trim()?"A previous upload to this folder stopped early. Uploading resumes where it left off.":Dr(e,t);return{blocking:i,notice:i?null:s}}const r=t.icloud?t.icloud.available?null:t.icloud.reason??Ga:"Checking iCloud Drive…",o=n??r??ua(t.icloudFolder);return{blocking:o,notice:o?null:Dr(e,t)}}function wy(e,t){const n=(t.destination==="icloud"?t.icloudFolder:t.dropboxFolder).trim().replace(/\/+$/u,"");return{book_id:t.bookId,post_cell_id:e.id,folder:n,...!cn(e)&&Xt(t.copy)!==e.definition.caption?{caption:Xt(t.copy)}:{}}}function Sy(e,t){return cn(e)||t.copy.platform===e.definition.platform?null:{book_id:t.bookId,post_cell_id:e.id,platform:t.copy.platform}}function Iy(e){return e==="icloud"?"save_post_to_icloud":"upload_post_to_dropbox"}function Xa(e){const t=[];return e.runtime.icloud?.completedAt&&t.push("iPhone"),e.runtime.dropbox?.completedAt&&t.push("Dropbox"),t}function li(e){return!e.runtime.url&&Xa(e).length>0}function Ay(e){const t=e.definition.platform;return t==="other"?"Posted it? Paste the link":`Posted on ${cr[t]}? Paste the link`}function Ya(e){return cr[e.definition.platform]}function xy(e){return li(e)?"needs_link":e.runtime.status}function Ey(e){return e.runtime.postedAt||e.runtime.url?null:li(e)?e.definition.platform==="other"?"Paste the published link":`Paste ${Ya(e)} link`:"Save to iPhone next"}function Cy(e){return e.runtime.postedAt?new Date(e.runtime.postedAt).toLocaleDateString(void 0,{month:"short",day:"numeric"}):null}function My(e){const t=e.runtime.metrics.at(-1)?.values;return t?[t.views!=null?"views":"impressions","likes"].filter(r=>t[r]!=null).map(r=>({label:r,value:Ja(t[r])})):[]}function Ja(e){return new Intl.NumberFormat(void 0,{notation:"compact",maximumFractionDigits:1}).format(e)}function Ty(e){return`On iPhone · iCloud Drive › Videobook › ${e}`}function Ry(e,t){if(t==="icloud"){const r=e.runtime.icloud?.folder;return r?`Saved ${e.address} to iCloud · Videobook/${r}`:`Saved ${e.address} to iCloud`}const n=e.runtime.dropbox?.folder;return n?`Uploaded ${e.address} to Dropbox · ${n}`:`Uploaded ${e.address} to Dropbox`}function $y(e,t){return e==="uploading"?"Uploading to iCloud…":e==="uploaded"?"On iCloud":e==="error"?t?.trim()||"iCloud upload failed":null}function Za(e){return e===null||e==="uploading"}function Qa(e){const t=e&&typeof e=="object"&&!Array.isArray(e)?e:{},n=t.phase;return{phase:n==="uploaded"||n==="uploading"||n==="error"||n==="not-icloud"?n:"not-icloud",error:typeof t.error=="string"&&t.error?t.error:null}}function lr(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}async function Vr(e){const t=lr(await e("service_status",{service:"dropbox"}));return{connected:t.connected===!0,pending:t.pending===!0,hasCredentials:t.has_credentials!==!1,error:typeof t.error=="string"&&t.error?t.error:null}}async function Ny(e){const t=lr(await e("service_status",{service:"icloud"})),n=t.role==="owner"||t.role==="participant"?t.role:null;return{available:t.available===!0,root:typeof t.root=="string"?t.root:"",shared:typeof t.shared=="boolean"?t.shared:null,role:n,reason:typeof t.reason=="string"&&t.reason?t.reason:null}}async function Py(e){const t=lr(await e("connect_service",{service:"dropbox"}));if(typeof t.authorize_url!="string")throw new Error("Dropbox did not return an authorization link.");return t.authorize_url}async function Oy(e,t,n){let r=await Vr(e);for(let o=0;o<90&&r.pending&&!r.connected&&n();o+=1)await t(2e3),r=await Vr(e);return r}const ec=3e3,tc=12e4;function Ly(e,t,n,r,o){const i=ne.c(9),s=_.useRef(o);let a,c;i[0]!==o?(a=()=>{s.current=o},c=[o],i[0]=o,i[1]=a,i[2]=c):(a=i[1],c=i[2]),_.useEffect(a,c);let l,u;i[3]!==n||i[4]!==t||i[5]!==e||i[6]!==r?(l=()=>{if(!e||!t||!n||!r)return;let m=!1;const f=Date.now()+tc,d=async()=>{if(!(m||Date.now()>f))try{const g=Qa(await t("post_icloud_sync_status",{book_id:n,post_cell_id:r},{background:!0}));if(m)return;s.current(g),Za(g.phase)||(m=!0)}catch(g){const y=g;if(m)return;m=!0,s.current({phase:"error",error:y instanceof Error?y.message:"iCloud upload failed"})}};d();const p=window.setInterval(()=>{if(m||Date.now()>f){window.clearInterval(p);return}d()},ec);return()=>{m=!0,window.clearInterval(p)}},u=[e,t,n,r],i[3]=n,i[4]=t,i[5]=e,i[6]=r,i[7]=l,i[8]=u):(l=i[7],u=i[8]),_.useEffect(l,u)}function Fy(e,t,n){const[r,o]=_.useState(!1),[i,s]=_.useState(null);return{busy:r,error:i,run:async(c,l={})=>{if(!e||r)return!1;o(!0),s(null);try{return await e(c,{book_id:t,...l}),await n(),!0}catch(u){return s(u instanceof Error?u.message:String(u)),!1}finally{o(!1)}}}}const St=280,jr=25,jn=4,nc=5e3,rc=3600*1e3,Gr=300*1e3;function oc(e){return Array.isArray(e)?e.flatMap(t=>{if(!t||typeof t!="object"||Array.isArray(t))return[];const n=t,r=n.image_asset_ids,o=Array.isArray(r),i=o?r.filter(c=>typeof c=="string"):[],s=typeof n.text=="string",a=s?n.text:"";return s||o?[{text:a,imageAssetIds:i}]:[]}):[]}function Dy(e){const t=Object.hasOwn(e,"scheduled_for")?typeof e.scheduled_for=="string"?e.scheduled_for:"":null,n=e.orientation==="portrait"||e.orientation==="landscape"?e.orientation:null;return{postText:typeof e.text=="string"?e.text:"",scheduledFor:t,orientation:n,followups:oc(e.followups)}}function Vy(e,t){const n={...e};return t.postText!==void 0&&(t.postText?n.text=t.postText:delete n.text),t.scheduledFor!==void 0&&(t.scheduledFor===null?delete n.scheduled_for:n.scheduled_for=t.scheduledFor),t.orientation!==void 0&&(t.orientation===null?delete n.orientation:n.orientation=t.orientation),n}function jy(e,t){const n={...e};return t.length===0?(delete n.followups,n):(n.followups=t.map(r=>({text:r.text,...r.imageAssetIds.length>0?{image_asset_ids:r.imageAssetIds}:{}})),n)}const ic="Add a title for the post.";function sc(e,t=Date.now(),n=St){if(e.postText.trim()==="")return ic;if(e.postText.length>n){const o=e.postText.length-n;return`Title is ${o} character${o===1?"":"s"} too long.`}if(e.followups.length>jr)return`Thread has ${e.followups.length} replies; X posts support at most ${jr} here.`;for(const[o,i]of e.followups.entries()){if(!i.text&&i.imageAssetIds.length===0)return`Follow-up ${o+1} needs text or an image.`;if(i.text.length>n){const s=i.text.length-n;return`Follow-up ${o+1} is ${s} character${s===1?"":"s"} too long.`}if(i.imageAssetIds.length>jn)return`Follow-up ${o+1} has more than ${jn} images.`}if(e.scheduledFor===null)return null;const r=Date.parse(e.scheduledFor);return!e.scheduledFor||Number.isNaN(r)?"Choose a valid date and time.":r-t<=nc?"Scheduled time must be in the future.":null}function Gy(e){const t=new Date(e);if(Number.isNaN(t.getTime()))return"";const n=r=>r.toString().padStart(2,"0");return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())}T${n(t.getHours())}:${n(t.getMinutes())}`}function qy(e){if(!e)return"";const t=new Date(e);return Number.isNaN(t.getTime())?"":t.toISOString()}function Uy(e=Date.now()){const t=e+rc,n=Math.ceil(t/Gr)*Gr;return new Date(n).toISOString()}function ac(e){return e==="fal:minimax/h3-max/insert-video"||e==="minimax/h3-max/insert-video"}function cc(e,t){const n=typeof e.start_time=="string"&&e.start_time.trim()?Number(e.start_time):e.start_time,r=typeof e.resume_time=="string"&&e.resume_time.trim()?Number(e.resume_time):e.resume_time;if(typeof n!="number"||typeof r!="number"||!Number.isFinite(n)||!Number.isFinite(r))return null;if(t!=null&&t>0){const o=Number(t.toFixed(3));if(n>=t)return`Replace from must be before the source video ends at ${o}s (currently ${n}s).`;if(r>t)return`Resume original must be within the ${o}s source video (currently ${r}s).`}return r<=n?"Resume original must be after Replace from. Both times refer to the original video.":null}function lc(e){return e.find(t=>t.targetInput==="video")??e.find(t=>t.type==="video"||t.type==="final")}function By(e,t,n){if(!ac(e))return null;const r=lc(n);if(!r)return"Connect the original video to choose the section to replace.";const o=r.asset?.duration;return!o||!Number.isFinite(o)?"The original video duration is unavailable. Wait for the source to finish processing.":cc(t,o)}const uc=["x","tiktok"],Hy={x:"X",tiktok:"TikTok"},Wy={x:"M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z",tiktok:"M12.525.02c1.31-.02 2.61-.01 3.91-.02.08 1.53.63 3.09 1.75 4.17 1.12 1.11 2.7 1.62 4.24 1.79v4.03c-1.44-.05-2.89-.35-4.2-.97-.57-.26-1.1-.59-1.62-.93-.01 2.92.01 5.84-.02 8.75-.08 1.4-.54 2.79-1.35 3.94-1.31 1.92-3.58 3.17-5.91 3.21-1.43.08-2.86-.31-4.08-1.03-2.02-1.19-3.44-3.37-3.65-5.71-.02-.5-.03-1-.01-1.49.18-1.9 1.12-3.72 2.58-4.96 1.66-1.44 3.98-2.13 6.15-1.72.02 1.48-.04 2.96-.04 4.44-.99-.32-2.15-.23-3.02.37-.63.41-1.11 1.04-1.36 1.75-.21.51-.15 1.07-.14 1.61.24 1.64 1.82 3.02 3.5 2.87 1.12-.01 2.19-.66 2.77-1.61.19-.33.4-.67.41-1.06.1-1.79.06-3.57.07-5.36.01-4.03-.01-8.05.02-12.07z"};function Ky(e,t="x"){return t==="tiktok"?`https://www.tiktok.com/@${e}`:`https://x.com/${e}`}function dc(e){return e==="x"||e==="tiktok"}function ui(e,t,n){return![e,t,n].every(Number.isFinite)||n<.5?"Choose a playable video at least 0.5 seconds long.":e<0||t>n||t-e<.5-1e-6?"Choose a highlight at least 0.5 seconds long within the video.":null}const fc=new Set(["generate_audio","generate_image","generate_video"]),di=["audio","image","video"],mc=new Set([...di,"character"]),pc=new Set(di),gc={analysis:"data",analyze:"data",audio:"audio",character:"data",concat:"video",extract_audio:"audio",generate_audio:"gen",generate_image:"gen",generate_video:"gen",goal:"goal",image:"image",post:"data",prompt:"gen",splice:"video",timeline:"data",split_video:"video",video:"video"};function fi(e){return gc[e]}function It(e){return fc.has(e)}function ur(e){return mc.has(e)}function hc(e){return pc.has(e)}function h(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:null}function A(e){return typeof e=="string"&&e.trim().length>0?e:null}function W(e){return typeof e=="string"&&e.length>0?e:null}function b(e){return typeof e=="string"?e:null}function F(e){return typeof e=="number"&&Number.isFinite(e)?e:null}const bc=[["3:1",3],["21:9",21/9],["2:1",2],["16:9",16/9],["3:2",3/2],["4:3",4/3],["5:4",5/4],["1:1",1],["4:5",4/5],["3:4",3/4],["2:3",2/3],["9:16",9/16],["1:2",1/2],["9:21",9/21],["1:3",1/3]],yc=new Set(["analyzing","archiving","awaiting-output","changing-speed","completing","cropping","deleting","downloading","generating","isolating","loading","processing","queued","render-queued","render-queued-landscape","render-queued-portrait","render-queued-square","rendering","rendering-landscape","rendering-portrait","rendering-square","replacing-audio","reversing","running","splicing","transcribing","trimming","uploading"]),_c={analyze:"Analyze",concat:"Concatenate",extract_audio:"Extract",generate_audio:"Generate",generate_image:"Generate",generate_video:"Generate",prompt:"Rewrite",splice:"Splice",split_video:"Split"};function ut(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function _n(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function vc(e){return e.type!=="analysis"&&!ur(e.type)&&!!(e.operation??e.tool??e.model)}function ln(e){return yc.has(e)}function kc(e,t){return e==="analyzing"?"ANALYZING":e==="archiving"?"ARCHIVING":e==="changing-speed"?"CHANGING SPEED":e==="queued"?"QUEUED":e==="completing"?"FINISHING":e==="cropping"?"CROPPING":e==="deleting"?"DELETING":e==="downloading"?"DOWNLOADING":e==="generating"?"GENERATING":e==="isolating"?"ISOLATING VOCALS":e==="loading"?"LOADING":e==="processing"?"PROCESSING":e.startsWith("render-queued")?"QUEUED TO RENDER":e.startsWith("rendering")?"RENDERING":e==="replacing-audio"?"REPLACING AUDIO":e==="reversing"?"REVERSING":e==="splicing"?"SPLICING":e==="transcribing"?"TRANSCRIBING":e==="trimming"?"TRIMMING":e==="uploading"?"UPLOADING":e==="awaiting-output"||t.startsWith("generate_")?"GENERATING":t==="analyze"?"ANALYZING":t.startsWith("extract_")?"EXTRACTING":t==="split_video"?"SPLITTING":t==="splice"?"SPLICING":t==="concat"?"CONCATENATING":t==="prompt"?"REWRITING":"RUNNING"}const zy=3,wc={1:"QUEUED",2:"PROVIDER GENERATING",3:"DOWNLOAD & COMMIT"};function Sc(e){return e==="queued"?1:e==="running"||e==="generating"||e==="awaiting-output"?2:e==="downloading"||e==="completing"?3:null}function Xy(e){const t=Sc(e);return t===null?null:{step:t,label:wc[t]}}function Ic(e){if(typeof e=="number"&&Number.isFinite(e))return e;if(typeof e!="string"||e.length===0)return null;const t=Date.parse(e);return Number.isFinite(t)?t:null}function Yy(e,t,n){return t==="error"?{overlay:"failed",label:null,startedAt:null,error:n?.error??(ur(e)?"Media processing failed":"Generation failed"),tone:"error"}:ln(t)?{overlay:"clock",label:kc(t,e),startedAt:Ic(n?.startedAt),error:null,tone:t==="queued"?"queued":"active"}:{overlay:null,label:null,startedAt:null,error:null,tone:null}}function Jy(e,t){const n=h(e.execution),r=n&&h(n[t]);return{error:W(r?.error),status:W(r?.status)}}function Ac(e,t,n){const r=h(e.execution),o=r&&h(r[t]);if(!o||W(o.runId)!==n)return{error:null,state:"pending",status:null};const i=W(o.status),s=W(o.error);return s||i==="error"?{error:s,state:"error",status:i}:i==="completed"?{error:null,state:"completed",status:i}:{error:null,state:i&&ln(i)?"active":"pending",status:i}}function Zy(e,t){if(!vc(e))return null;const n=ln(t);return It(e.type)?{disabled:n,label:"Gen"}:{disabled:n,label:e.outputArtifactId||t==="completed"||t==="error"?"Re-run":"Run"}}function Qy(e,t){const n=_c[e];return n?t==="Re-run"?`${n} again`:n:t}function e_(e,t){return ur(e)?null:t}function me(e){const t=Math.round(Math.max(0,e)*100),n=Math.floor(t/6e3),r=t-n*6e3,o=Math.floor(r/100),i=r%100,s=String(o).padStart(2,"0");return i===0?`${n}:${s}`:`${n}:${s}.${String(i).padStart(2,"0")}`}function xc(e,t){let n=Math.abs(Math.round(e)),r=Math.abs(Math.round(t));for(;r>0;){const o=n%r;n=r,r=o}return n}function un(e,t){if(e===null||t===null||!Number.isFinite(e)||!Number.isFinite(t)||e<=0||t<=0)return null;const n=e/t,r=bc.reduce((a,c)=>Math.abs(c[1]-n)<Math.abs(a[1]-n)?c:a);if(Math.abs(r[1]-n)/n<=.03)return r[0];const o=Math.round(e),i=Math.round(t);if(o<1||i<1)return null;const s=xc(o,i);return`${o/s}:${i/s}`}function dr(e){const t=ut(e.inputs?.startSeconds),n=ut(e.inputs?.endSeconds),r=ut(e.inputs?.durationSeconds),o=e.audioInfo?.durationSeconds??e.durationSeconds??r??(t!==null&&n!==null&&n>t?n-t:null),i=e.inputs?.audioRole==="continuous-source"?"Continuous source":e.inputs?.audioRole==="scene"?"Scene audio":e.hasOutput?"Audio output":"Select audio media",s=o!==null&&o>0?o:null;return{role:i,duration:s===null?null:me(s),durationSeconds:s,details:[e.audioInfo?.codec.toUpperCase()??null,e.audioInfo?`${e.audioInfo.sampleRateHz/1e3} kHz`:null,e.audioInfo?.channelLayout??null].filter(a=>!!a)}}function mi(e){const t=e.inputs?.mediaRole;return e.type==="image"&&t==="generate-image-output"||e.type==="video"&&t==="generate-video-output"}function t_(e,t){const n=Array.isArray(e?.outputVersionArtifactIds)?e.outputVersionArtifactIds.filter(r=>typeof r=="string"&&r.length>0):[];return[...new Set([...n,...t?[t]:[]])]}function Ec(e){const t=h(e),n=t&&h(t.text),r=n&&h(n.format),o=W(r?.type);return o?{name:W(r?.name),strict:r?.strict===!0,type:o}:null}function n_(e){const t=h(e);if(!t)return[];const r=(Array.isArray(t.llmExchanges)?t.llmExchanges:[]).flatMap((i,s)=>{const a=h(i);if(!a||!_n(a,"input")||!_n(a,"response"))return[];const c=h(a.input);return[{complete:!0,input:a.input,model:W(a.model)??W(c?.model)??"Unknown",provider:W(a.provider)??"Unknown",response:a.response,responseFormat:Ec(a.input),stage:W(a.stage)??`call_${s+1}`}]});if(r.length>0)return r;const o=h(t.request);return!o||!_n(t,"raw")?[]:[{complete:!1,input:o,model:W(o.model)??"Unknown",provider:W(o.provider)??"Unknown",response:t.raw,responseFormat:null,stage:"legacy_analysis"}]}function Cc(e){return{first:W(e?.firstFrameArtifactId),last:W(e?.lastFrameArtifactId)}}function r_(e){const t=ut(e?.startSeconds),n=ut(e?.endSeconds);return t!==null&&n!==null&&n>t?{startSeconds:t,endSeconds:n}:null}function o_(e){return e.replace(/^generate_/,"gen_").replaceAll("_"," ").toUpperCase()}function ze(e){if(!e||typeof e!="object"||Array.isArray(e))throw new Error("Invalid cold-open response");return e}function Mc(e){const t=ze(e);if(typeof t.sourceArtifactId!="string"||typeof t.sourceObjectHash!="string"||typeof t.durationSeconds!="number"||typeof t.fps!="number"||typeof t.startSeconds!="number"||typeof t.endSeconds!="number"||typeof t.reason!="string"||typeof t.model!="string"||ui(t.startSeconds,t.endSeconds,t.durationSeconds))throw new Error("The server returned an invalid cold-open selection");return t}async function pi(e,t,n,r){if(typeof n!="number")throw new Error("The server did not return a cold-open job ID");for(let o=0;o<1200;o+=1){if(!r())throw new Error("Workspace changed. Reopen the cold-open review.");const i=await e("list_jobs",{book_id:t,job_ids:[n]},{background:!0});if(!Array.isArray(i)||!i.length)throw new Error("The cold-open job could not be found");const s=ze(i[0]);if(s.state==="done")return ze(s.result);if(s.state==="failed"||s.state==="aborted")throw new Error(String(ze(s.error??{}).message??"Cold-open job cancelled"));await new Promise(a=>setTimeout(a,500))}throw new Error("The cold open is still processing. Check Jobs, then retry to reconnect.")}async function i_(e,t,n){const r=ze(await e("prepare_cold_open",{book_id:t.bookId,notebook_id:t.notebookId,asset_id:t.assetId})),o=r.status==="ready"?r:await pi(e,t.bookId,r.job_id,n),i=Mc(o.suggestion);if(!n()||i.sourceArtifactId!==t.assetId)throw new Error("Workspace changed. Reopen the cold-open review.");return{...t,suggestion:i}}async function s_(e,t,n){const r=t.suggestion;if(!r)throw new Error("Find a highlight first");const o=ui(r.startSeconds,r.endSeconds,r.durationSeconds);if(o)throw new Error(o);const i=ze(await e("edit_cold_open",{book_id:t.bookId,notebook_id:t.notebookId,asset_id:t.assetId,source_object_hash:r.sourceObjectHash,start_time:r.startSeconds,end_time:r.endSeconds,request_id:t.requestId})),s=await pi(e,t.bookId,i.job_id,n);if(!n())throw new Error("Workspace changed. The copy is available in its original notebook.");if(typeof s.cell_id!="string"||typeof s.address!="string")throw new Error("The cold-open copy has no notebook cell");return{cellId:s.cell_id,address:s.address}}const gi="nano-banana-2-1";function a_(e){if(!e)return!1;const t=e.toLowerCase().replaceAll(/[_-]+/g," ");return/\b(?:out of|insufficient|not enough|no(?: remaining| more| available)?) credits?\b/.test(t)||/\bcredits? (?:balance )?(?:is |are )?(?:insufficient|exhausted|depleted|too low)\b/.test(t)||/\b(?:insufficient|not enough|low|exhausted) (?:account |credit )?balance\b/.test(t)||/\b(?:account |credit )?balance (?:is )?(?:insufficient|too low|exhausted)\b/.test(t)||/\binsufficient quota\b/.test(t)||/\b(?:exceeds? (?:your|the) (?:remaining |available )?credits?|credits? (?:left|remaining).{0,100}(?:required|requested|needed))\b/.test(t)}function c_(e,t){const n=e.cells.find(o=>o.id===t);if(!n||!["image","video","audio"].includes(n.type))return null;const r=e.edges.find(o=>o.target===n.id&&o.targetInput==="media");return e.cells.find(o=>o.id===r?.source&&o.type===`generate_${n.type}`)??null}function l_(e,t){(!e||e.isCurrent())&&t()}function u_(e,t,n){e&&!e.isCurrent()||(e?.review(t),n())}function mt(e){return["sending","working","queued","review"].includes(e.status)}function d_(e,t=!0){if(!t&&mt(e)&&e.status!=="review")return"Reconnecting…";const n={sending:"Sending",working:"Working",queued:"Queued",review:"Awaiting review",completed:"Completed",failed:"Failed",cancelled:"Cancelled"},r=e.work.filter(o=>o.state==="completed").length;return e.work.length>1&&mt(e)&&e.status!=="review"?`${n[e.status]} · ${r} of ${e.work.length} complete`:n[e.status]}function Gn(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Ge(e){return typeof e=="string"&&e?e:void 0}function dt(e){return e==="failed"||e==="error"?"failed":e==="aborted"||e==="cancelled"?"cancelled":e==="done"||e==="completed"||e==="ready"?"completed":e==="running"||e==="completing"||e==="processing"?"working":"queued"}function Tc(e,t,n){const r=Gn(n);if(!r)return[];const o=r.job_id??r.jobId??r.retry_job_id,i=Ge(o)??Ge(r.operation_id??r.operationId),s=Ge(r.run_id??r.runId),a=Array.isArray(r.cell_ids)?r.cell_ids:Array.isArray(t.cell_ids)?t.cell_ids:[],c=Ge((e==="run_notebook_cell"?r.output_cell_id:void 0)??r.cell_id??r.cellId??t.cell_id??(a.length===1?a[0]:void 0)),l=Ge(r.output_artifact_id??r.outputArtifactId??r.artifact_id??r.artifactId??r.asset_id??r.assetId),u=e.replaceAll("_"," ").replace(/^./u,f=>f.toUpperCase()),m=[];if((typeof o=="number"||i)&&m.push({key:s?`run:${s}`:`job:${o??i}`,label:u,...typeof o=="number"?{jobId:o}:{},operationId:i,runId:s,cellId:c,artifactId:l,state:s?"queued":dt(r.status)}),Array.isArray(r.steps))for(const f of r.steps){const d=Gn(f);if(!(!d||!Array.isArray(d.child_job_ids)))for(const p of d.child_job_ids)typeof p=="number"&&m.push({key:`job:${p}`,jobId:p,label:Ge(d.tool)?.replaceAll("_"," ")??u,state:dt(d.status)})}return m}function Rc(e,t){const n=new Map(e.map(r=>[r.key,r]));for(const r of t){const o=n.get(r.key);n.set(r.key,o&&["completed","failed","cancelled"].includes(o.state)?o:{...o,...r})}return[...n.values()]}function qn(e){if(e.status==="sending"||e.status==="review"||e.status==="failed"||e.status==="cancelled"||!e.work.length)return e;const t=e.work.find(o=>o.state==="failed");if(t)return{...e,status:"failed",reply:t.detail??e.reply};const n=e.work.filter(o=>o.state==="queued"||o.state==="working");if(n.length)return{...e,status:n.some(o=>o.state==="working")?"working":"queued"};if(e.executing)return{...e,status:"working"};const r=e.work.some(o=>o.state==="cancelled")?"cancelled":"completed";return{...e,status:r,reply:e.status==="queued"||e.status==="working"?r==="completed"?"Work completed.":"Work cancelled.":e.reply}}function $c(e,t,n,r=[]){const o=e.work.map(i=>{if(["completed","failed","cancelled"].includes(i.state))return i;const s=t.filter(m=>m.id===i.jobId||m.operationId===i.operationId||i.runId&&m.payload?.runId===i.runId),a=s.find(m=>m.state==="failed"||m.state==="aborted");if(a)return{...i,state:dt(a.state),detail:a.error?.message};if(i.runId&&n?.id===e.notebookId){const f=(i.cellId?[i.cellId]:Object.entries(n.execution??{}).filter(([,p])=>Gn(p)?.runId===i.runId).map(([p])=>p)).map(p=>Ac(n,p,i.runId));if(f.length&&f.every(p=>p.state==="completed"))return{...i,state:"completed"};const d=f.find(p=>p.state==="error");return d?{...i,state:"failed",detail:d.error??void 0}:{...i,state:s.some(p=>p.state!=="queued")?"working":i.state}}const c=s.find(m=>["queued","running","completing"].includes(m.state));if(c)return{...i,state:dt(c.state)};if(!s.length)return i;if(i.runId)return{...i,state:"working"};const l=i.artifactId??s.find(m=>m.artifactId)?.artifactId,u=r.find(m=>m.artifactId===l);return u&&u.status!=="ready"?{...i,state:dt(u.status)}:l&&!u?{...i,artifactId:l,state:"working"}:{...i,state:"completed"}});return qn({...e,work:o})}const f_=2400;function m_(e,t){const n=t.filter(r=>!e.has(r));return n.length===0?e:new Set([...e,...n])}function p_(e,t){const n=[...e].filter(r=>!t.includes(r));return n.length===e.size?e:new Set(n)}const Nc=new Set(["queued","running","completing"]);function hi(e,t,n){const r=n.find(i=>i.target===e.id&&i.targetInput==="media");if(!r)return null;const o=t.find(i=>i.id===r.source);return o&&(o.type==="generate_image"||o.type==="generate_video")?o:null}function Pc(e,t,n){return mi(e)?hi(e,t,n):null}function Oc(e,t,n){const r=(n??[]).filter(o=>{if(o.type!=="await_notebook_output"||!Nc.has(o.state))return!1;const i=o.payload,s=typeof i?.outputCellId=="string"&&i.outputCellId?i.outputCellId:null;if(s)return s===e;const a=typeof i?.cellId=="string"&&i.cellId?i.cellId:null;return t!==null&&a===t});return r.length===0?null:r.reduce((o,i)=>(i.operationId??"")>(o.operationId??"")?i:o)}function qr(e,t){const n=e?.payload?.[t];return typeof n=="string"&&n?n:null}function Ur(e,t,n,r){return{...{startedAt:typeof n?.startedAt=="number"?new Date(n.startedAt).toISOString():null,provider:t?.provider??null,model:t?.model??null,prompt:t?.prompt??e.prompt??null,producerCellId:t?.id??null,jobId:n?.operationId??null,providerArtifactId:qr(n,"providerArtifactId"),runId:qr(n,"runId")},kind:r||n===null||n.state==="queued"?"queued":"generating"}}function g_(e){if(!mi(e.cell))return{kind:"ready"};const t=hi(e.cell,e.cells,e.edges),n=t?.id??null,r=e.runErrors?.[e.cell.id]??e.error;if(r)return{kind:"failed",message:r,producerCellId:n};const o=Oc(e.cell.id,n,e.jobs);return o?Ur(e.cell,t,o,e.queuedCellIds?.has(e.cell.id)??!1):e.queuedCellIds?.has(e.cell.id)?Ur(e.cell,t,null,!0):{kind:"ready"}}function h_(e){return e==="video"||e==="generate_video"?"video":e==="image"||e==="generate_image"?"image":e==="audio"||e==="generate_audio"?"audio":"generation"}function Lc(e,t){const n=[e,t].filter(r=>typeof r=="string"&&r.length>0);return n.length===0?null:n.join(" · ")}function b_(e){const t=e.error.trim()||"the provider rejected the request",n=Lc(e.provider,e.model),r=e.producerAddress?`the ${e.mediaLabel} generated by ${e.producerAddress}`:`the ${e.mediaLabel}`,o=e.producerAddress?` and the settings on ${e.producerAddress}`:" and this cell's settings",i=e.producerAddress?`re-run ${e.producerAddress} into ${e.address}`:`re-run ${e.address}`;return[`Repair ${e.address}: ${r} failed with "${t}".`,n?`Generator: ${n}.`:null,`Inspect the recorded provider request${o}, fix what the provider rejected, and ${i} as a preview.`].filter(s=>s!==null).join(" ")}function y_(e,t){return e==="kie"?"https://kie.ai/logs":e!=="fal"||!t||!/^[a-z0-9_-]+(?:\/[a-z0-9_.-]+)+$/iu.test(t)||t.split("/").some(n=>n==="."||n==="..")?null:`https://fal.ai/models/${t.split("/").map(encodeURIComponent).join("/")}/requests`}function bi(e){if(!e||typeof e!="object"||Array.isArray(e))return null;const t=e;return t.provider!=="kie"&&t.provider!=="fal"&&t.provider!=="machgen"?null:{provider:t.provider,model:typeof t.model=="string"?t.model:null,taskId:typeof t.taskId=="string"?t.taskId:null}}function Je(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Ze(e){return typeof e=="string"&&e?e:null}function Fc(e){const t=Je(e),n=Ze(t?.taskId),r=Ze(t?.submittedAt);return!t||!n||!r?null:{taskId:n,submittedAt:r,completing:t.completing===!0}}function __(e){const t=Je(e)??{},n=bi(t.providerTask);return{payload:t.payload??null,taskType:Ze(t.taskType),task:Fc(t.task),errorMessage:Ze(Je(t.error)?.message),...n?{providerTask:n}:{}}}function yi(e){const t=Je(e);return t?Je(t.input)??t:null}function v_(e){return Ze(yi(e)?.prompt)??Ze(Je(e)?.prompt)}const Dc=new Set(["prompt","model","callBackUrl"]);function Vc(e){return typeof e=="number"||typeof e=="boolean"?String(e):typeof e!="string"||!e||/^https?:\/\//i.test(e)?null:e}function k_(e){const t=yi(e);return t?Object.entries(t).flatMap(([n,r])=>{if(Dc.has(n))return[];const o=Vc(r);return o===null?[]:[{key:n,value:o}]}):[]}function jc(e){return e.runKind==="queued"?["active","pending","pending","pending"]:e.task?e.task.completing?["done","done","done","active"]:["done","done","active","pending"]:["done","active","pending","pending"]}function w_(e){const t=jc(e),n=e.runKind==="failed"?t.findIndex(o=>o==="active"):-1;return[{id:"started",label:"Run started",at:e.startedAt},{id:"submitted",label:"Submitted",at:e.task?.submittedAt??null},{id:"generating",label:"Provider generating",at:e.task?.submittedAt??null},{id:"landing",label:"Download & commit",at:null}].map((o,i)=>({...o,status:i===n?"failed":t[i]??"pending"}))}let Br=0;function Yt(){return Br+=1,Br}function S_(e,t){const n=ne.c(23);let r;n[0]===Symbol.for("react.memo_cache_sentinel")?(r=[],n[0]=r):r=n[0];const[o,i]=_.useState(r),s=_.useRef(o);let a;n[1]!==e||n[2]!==t?(a={bookId:e,notebookId:t},n[1]=e,n[2]=t,n[3]=a):a=n[3];const c=_.useRef(a),l=_.useRef(0);let u;n[4]===Symbol.for("react.memo_cache_sentinel")?(u=new Map,n[4]=u):u=n[4];const m=_.useRef(u),f=_.useRef(null),d=_.useRef(null);let p,g;n[5]!==e||n[6]!==t?(p=()=>{c.current={bookId:e,notebookId:t},l.current=l.current+1,f.current=s.current.filter(M=>M.bookId===e&&M.notebookId===t).at(-1)?.id??null,d.current=null},g=[e,t],n[5]=e,n[6]=t,n[7]=p,n[8]=g):(p=n[7],g=n[8]),_.useLayoutEffect(p,g);let y;n[9]===Symbol.for("react.memo_cache_sentinel")?(y=M=>{const R=M(s.current);JSON.stringify(R)!==JSON.stringify(s.current)&&(s.current=R,i(R))},n[9]=y):y=n[9];const v=y;let S;n[10]===Symbol.for("react.memo_cache_sentinel")?(S=M=>{const R=d.current===null?void 0:m.current.get(d.current);if(/^\/(?:apply|cancel)(?:\s|$)/iu.test(M)&&R?.isInScope())return v(K=>K.map(H=>H.id===R.id?{...H,status:"working",executing:!0}:H)),R;const D={...c.current},z=l.current,q=Yt();f.current=q,d.current=null,v(K=>[...K.map(H=>H.bookId===D.bookId&&H.notebookId===D.notebookId&&H.status==="review"?{...H,status:"cancelled"}:H),{id:q,...D,text:M,status:"sending",reply:"",work:[],executing:!0}].filter(Bc));const J=K=>v(H=>H.map(U=>U.id===q?K(U):U)),pe=()=>l.current===z&&c.current.bookId===D.bookId&&c.current.notebookId===D.notebookId,ge={id:q,isInScope:pe,isCurrent:()=>pe()&&f.current===q&&s.current.find(K=>K.id===q)?.status!=="cancelled",working:()=>J(Uc),review:K=>{K&&ge.isCurrent()?d.current=q:d.current===q&&(d.current=null),J(H=>({...H,status:K?"review":"working"}))},accept:(K,H,U)=>{const we=Tc(K,H,U);we.length&&J(Q=>qn({...Q,work:Rc(Q.work,we)}))},finish:K=>J(H=>H.status==="cancelled"?H:qn({...H,reply:K.message,executing:!1,status:K.status??(d.current===q?"review":K.ok?"completed":"failed")}))};m.current.set(q,ge);for(const K of m.current.keys())s.current.some(H=>H.id===K)||m.current.delete(K);return ge},n[10]=S):S=n[10];const w=S;let k;n[11]===Symbol.for("react.memo_cache_sentinel")?(k=()=>{const M=Yt(),R=l.current;f.current=M;let D=!1;for(const[q,J]of m.current)J.visible===!1&&q!==d.current&&m.current.delete(q);const z={id:M,visible:!1,isInScope:()=>l.current===R,isCurrent:()=>!D&&l.current===R&&f.current===M,working:qc,accept:Gc,finish:q=>{q.status==="cancelled"&&(D=!0)},review:q=>{q&&z.isCurrent()?d.current=M:d.current===M&&(d.current=null)}};return m.current.set(M,z),z},n[11]=k):k=n[11];const I=k;let E;n[12]===Symbol.for("react.memo_cache_sentinel")?(E=(M,R,D,z)=>{v(q=>q.map(J=>J.bookId===M&&(!D||J.notebookId===D.id)&&mt(J)?$c(J,R,D,z):J))},n[12]=E):E=n[12];const C=E;let x;n[13]===Symbol.for("react.memo_cache_sentinel")?(x=()=>{const M=d.current;d.current=null,M!==null&&m.current.get(M)?.finish({ok:!0,status:"cancelled",message:"Pending action cancelled."}),M!==null&&v(R=>R.map(D=>D.id===M?{...D,status:"cancelled"}:D))},n[13]=x):x=n[13];const $=x;let T;if(n[14]!==e||n[15]!==t||n[16]!==o){let M;n[18]!==e||n[19]!==t?(M=R=>R.bookId===e&&R.notebookId===t,n[18]=e,n[19]=t,n[20]=M):M=n[20],T=o.filter(M),n[14]=e,n[15]=t,n[16]=o,n[17]=T}else T=n[17];let N;return n[21]!==T?(N={turns:T,begin:w,observe:C,cancelReview:$,claimVoice:I},n[21]=T,n[22]=N):N=n[22],N}function Gc(){}function qc(){}function Uc(e){return{...e,status:"working"}}function Bc(e,t,n){return t>=n.length-256||mt(e)}const _i="data:text/javascript;base64,Y2xhc3MgVm9pY2VDYXB0dXJlIGV4dGVuZHMgQXVkaW9Xb3JrbGV0UHJvY2Vzc29yIHsKICBjb25zdHJ1Y3RvcigpIHsKICAgIHN1cGVyKCkKICAgIHRoaXMuZnJhbWVTaXplID0gTWF0aC5yb3VuZChzYW1wbGVSYXRlIC8gNTApCiAgICB0aGlzLmZyYW1lID0gbmV3IEFycmF5QnVmZmVyKHRoaXMuZnJhbWVTaXplICogMikKICAgIHRoaXMudmlldyA9IG5ldyBEYXRhVmlldyh0aGlzLmZyYW1lKQogICAgdGhpcy5vZmZzZXQgPSAwCiAgfQoKICBwcm9jZXNzKGlucHV0cykgewogICAgY29uc3Qgc2FtcGxlcyA9IGlucHV0c1swXT8uWzBdCiAgICBpZiAoIXNhbXBsZXMpIHJldHVybiB0cnVlCiAgICBmb3IgKGNvbnN0IHNhbXBsZSBvZiBzYW1wbGVzKSB7CiAgICAgIGNvbnN0IGNsYW1wZWQgPSBNYXRoLm1heCgtMSwgTWF0aC5taW4oMSwgc2FtcGxlKSkKICAgICAgdGhpcy52aWV3LnNldEludDE2KHRoaXMub2Zmc2V0ICogMiwgY2xhbXBlZCAqIChjbGFtcGVkIDwgMCA/IDMyNzY4IDogMzI3NjcpLCB0cnVlKQogICAgICB0aGlzLm9mZnNldCArPSAxCiAgICAgIGlmICh0aGlzLm9mZnNldCA9PT0gdGhpcy5mcmFtZVNpemUpIHsKICAgICAgICB0aGlzLnBvcnQucG9zdE1lc3NhZ2UodGhpcy5mcmFtZSwgW3RoaXMuZnJhbWVdKQogICAgICAgIHRoaXMuZnJhbWUgPSBuZXcgQXJyYXlCdWZmZXIodGhpcy5mcmFtZVNpemUgKiAyKQogICAgICAgIHRoaXMudmlldyA9IG5ldyBEYXRhVmlldyh0aGlzLmZyYW1lKQogICAgICAgIHRoaXMub2Zmc2V0ID0gMAogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHJ1ZQogIH0KfQoKcmVnaXN0ZXJQcm9jZXNzb3IoJ3ZpZGVvYm9vay12b2ljZS1jYXB0dXJlJywgVm9pY2VDYXB0dXJlKQo=";class Hc{socket=null;capture=null;input=null;mute=null;stopped=!1;nextAt=0;sources=new Set;timers=new Set;items=[];completed=new Set;interrupted=new Set;rejectStart=null;options;constructor(t){this.options=t}async start(t,n){if(n.aborted)throw new Error("Voice start cancelled.");const r=new URL(`/api/voice/${t.id}/audio`,window.location.href);r.protocol=r.protocol==="https:"?"wss:":"ws:";const o=new WebSocket(r);this.socket=o;const i=()=>this.stop();n.addEventListener("abort",i,{once:!0});try{if(await new Promise((c,l)=>{this.rejectStart=l,o.addEventListener("open",()=>{this.stopped||o.send(JSON.stringify({type:"authenticate",token:t.token}))}),o.addEventListener("message",u=>{try{if(JSON.parse(String(u.data)).type!=="ready")throw new Error("Unexpected audio response");this.rejectStart=null,c()}catch{this.fail("Voice audio could not authenticate. Start voice again.")}}),o.addEventListener("error",()=>this.fail("Voice audio connection failed. Start voice again.")),o.addEventListener("close",()=>{this.stopped||this.fail("Voice audio connection ended. Start voice to reconnect.")})}),this.stopped)return;const{context:s,microphone:a}=this.options;if(await s.audioWorklet.addModule(_i),this.stopped)return;this.capture=new AudioWorkletNode(s,"videobook-voice-capture"),this.capture.port.onmessage=c=>{if(!(this.stopped||o.readyState!==WebSocket.OPEN)){if(o.bufferedAmount>s.sampleRate*4){this.fail("Voice audio connection is too slow. Start voice to reconnect.");return}o.send(c.data)}},this.input=s.createMediaStreamSource(a),this.mute=s.createGain(),this.mute.gain.value=0,this.input.connect(this.capture),this.capture.connect(this.mute),this.mute.connect(s.destination)}finally{n.removeEventListener("abort",i)}}enqueue(t,n,r){if(this.stopped||this.interrupted.has(n))return;const{context:o,output:i,sampleRate:s}=this.options;if(t.length>256e3||this.nextAt-o.currentTime>30)throw new Error("Voice audio exceeded its buffer limit.");const a=Uint8Array.from(atob(t),p=>p.charCodeAt(0));if(a.length===0||a.length%2!==0)throw new Error("Voice sent an invalid audio frame.");const c=new DataView(a.buffer),l=o.createBuffer(1,a.length/2,s),u=l.getChannelData(0);for(let p=0;p<u.length;p+=1)u[p]=c.getInt16(p*2,!0)/32768;const m=Math.max(o.currentTime+.015,this.nextAt);this.nextAt=m+l.duration;let f=this.items.find(p=>p.itemId===r);if(!f){f={responseId:n,itemId:r,startAt:m,duration:0},this.items.push(f);const p=window.setTimeout(()=>{this.timers.delete(p),this.stopped||this.options.onStarted(n)},Math.max(0,(m-o.currentTime)*1e3));this.timers.add(p)}f.duration+=l.duration;const d=o.createBufferSource();d.buffer=l,d.connect(i),this.sources.add(d),d.onended=()=>{d.disconnect(),this.sources.delete(d),!this.stopped&&this.sources.size===0&&this.completed.has(n)&&(this.options.onFinished(n),this.items=[],this.completed.clear())},d.start(m)}finish(t){this.stopped||this.interrupted.has(t)||(this.completed.add(t),this.sources.size===0&&(this.options.onFinished(t),this.items=[],this.completed.clear()))}interrupt(){const t=this.options.context.currentTime,n=this.items.find(o=>o.startAt+o.duration>t)??this.items.at(-1),r=n?{responseId:n.responseId,itemId:n.itemId,audioEndMs:Math.floor(Math.max(0,Math.min(n.duration,t-n.startAt))*1e3)}:void 0;for(const o of this.items)this.interrupted.add(o.responseId);return this.clear(),r}clear(){for(const t of this.timers)window.clearTimeout(t);this.timers.clear();for(const t of this.sources)t.onended=null,t.stop(),t.disconnect();this.sources.clear(),this.items=[],this.completed.clear(),this.nextAt=this.options.context.currentTime}fail(t){this.stopped||(this.rejectStart?.(new Error(t)),this.rejectStart=null,this.options.onError(t),this.stop())}stop(){this.stopped||(this.stopped=!0,this.rejectStart?.(new Error("Voice start cancelled.")),this.rejectStart=null,this.socket?.close(),this.capture?.port.close(),this.capture?.disconnect(),this.input?.disconnect(),this.mute?.disconnect(),this.clear())}}const Wc="videobook-voice";class Kc{connectAt=0;permissionStartAt=0;permissionEndAt=0;utteranceEndAt=0;turnAt=0;extra={};setSession(t){this.extra={...this.extra,...t}}mark(t,n){performance.mark(Wc,{detail:{stage:t,...this.extra,...n}})}connectStart(){this.connectAt=performance.now(),this.mark("connect-start")}permissionWaitStart(){this.permissionStartAt=performance.now(),this.mark("permission-wait-start")}permissionWaitEnd(){this.permissionEndAt=performance.now(),this.mark("permission-wait-end",{durationMs:this.permissionEndAt-this.permissionStartAt})}sessionRequest(){this.mark("session-request")}providerReady(t){this.setSession({model:t.model,provider:t.provider,transport:t.transport}),this.mark("provider-ready",t),t.fallbackReason&&this.mark("fallback",{reason:t.fallbackReason})}mediaReady(){const t=performance.now();this.mark("media-ready"),this.mark("connection-setup",{durationMs:t-this.connectAt,permissionWaitMs:Math.max(0,this.permissionEndAt-this.permissionStartAt)})}turnDetection(t){this.turnAt=performance.now(),this.utteranceEndAt=t&&t>0?t:this.turnAt,this.mark("turn-detection",{microphoneSignalEndedAt:t})}firstDecodedAudio(t){if(this.turnAt===0){this.mark("activation-audio");return}this.utteranceEndAt===0&&t&&t>0&&(this.utteranceEndAt=t);const n=performance.now();this.mark("first-audio"),this.utteranceEndAt>0&&this.mark("utterance-end-to-decoded-audio",{durationMs:n-this.utteranceEndAt,turnDetectionMs:this.turnAt>0?this.turnAt-this.utteranceEndAt:void 0,generationMs:this.turnAt>0?n-this.turnAt:void 0,microphoneSignalEndedAt:this.utteranceEndAt})}acknowledgement(t){this.mark("acknowledgement",t?{status:t}:void 0)}}function vi(e){return e!=="xai"}function zc(e){const t={bookId:e.bookId,mode:e.mode,sampleRate:e.sampleRate};return e.notebookId&&(t.notebookId=e.notebookId),vi(e.mode)&&e.sdp&&(t.sdp=e.sdp),{url:"/api/voice",body:t}}function vn(e){if(e instanceof DOMException){if(e.name==="NotAllowedError"||e.name==="SecurityError")return"Microphone access is blocked. Allow it in your browser, then start voice again.";if(e.name==="NotFoundError")return"No microphone found. Connect one, then start voice again.";if(e.name==="NotReadableError")return"The microphone is busy or unavailable. Check your audio device, then try again."}return e instanceof Error?e.message:"Voice could not connect. Try again."}class Xc{abort=new AbortController;peer=null;pcm=null;microphone=null;channel=null;context=null;remoteAudio=null;output=null;inputMeter=null;outputMeter=null;descriptor=null;stopped=!1;frame=0;deadline=0;playing=!1;awaitingAudio=!1;awaitingSilence=!1;lastMicrophoneSignalAt=0;outputResponseId=null;review=null;actions=new Set;captionStarts=new Set;outcomes=Promise.resolve();phase="connecting";cleanupListeners=[];timeline=new Kc;options;constructor(t){this.options=t}updatePhase(t,n){this.phase=t,this.options.onPhase(t,n)}mark(t,n){this.timeline.mark(t,{model:this.descriptor?.model,...n})}listen(t,n,r,o=!1){t.addEventListener(n,r,o),this.cleanupListeners.push(()=>t.removeEventListener(n,r,o))}async start(){let t;try{if(this.stopped)return;if(!window.isSecureContext||!navigator.mediaDevices?.getUserMedia||!window.RTCPeerConnection||!window.AudioContext)throw new Error("Voice needs a browser with microphone support on HTTPS or localhost.");this.updatePhase("connecting","Connecting voice"),this.timeline.connectStart(),this.deadline=window.setTimeout(()=>this.stop("Voice connection timed out. Start voice to retry.",!0),this.options.mode==="auto"?8e4:3e4),this.timeline.permissionWaitStart(),this.updatePhase("connecting","Allow microphone access");const n=navigator.mediaDevices.getUserMedia({audio:{echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0},video:!1}).finally(()=>{this.timeline.permissionWaitEnd()});t=()=>{n.then(s=>{this.microphone!==s&&s.getTracks().forEach(a=>a.stop())}).catch(()=>{})},this.context=new AudioContext({latencyHint:"interactive",sampleRate:48e3}),this.context.resume().then(()=>{this.stopped||this.mark("audio-context-running")}).catch(()=>{this.stopped||this.options.onPlaybackBlocked(!0)}),this.output=this.context.createGain(),this.outputMeter=this.context.createAnalyser(),this.outputMeter.fftSize=256,this.output.connect(this.outputMeter),this.outputMeter.connect(this.context.destination);for(const s of document.querySelectorAll("audio, video"))s.pause();this.installAmbientListeners(),this.context.audioWorklet.addModule(_i).catch(()=>{});const r=!vi(this.options.mode);r&&this.timeline.sessionRequest();const o=r?this.requestSession():null,i=await n;if(this.stopped){i.getTracks().forEach(s=>s.stop()),this.mark("microphone-released",{ended:i.getTracks().every(s=>s.readyState==="ended")});return}if(this.microphone=i,this.updatePhase("connecting","Connecting voice"),this.bindMicrophone(i),this.measure(),r){const s=await o;if(!s)return;if(s.transport!=="pcm")throw new Error("Voice returned a WebRTC session for an xAI request.");await this.acceptPcm(s,i);return}await this.startWebRtc(i)}catch(n){t?.(),this.stopped||this.stop(vn(n),!0)}}installAmbientListeners(){this.listen(document,"play",()=>this.stop("Comms paused for media playback. Start voice to resume."),!0),this.listen(document,"visibilitychange",()=>{document.hidden&&this.stop("Comms off while the page is hidden.")}),this.listen(window,"pagehide",()=>this.stop()),this.listen(window,"offline",()=>this.stop("You are offline. Start voice after reconnecting.",!0))}bindMicrophone(t){for(const n of t.getAudioTracks())this.listen(n,"ended",()=>this.stop("Microphone disconnected. Check the device and start voice again.",!0));this.inputMeter=this.context.createAnalyser(),this.inputMeter.fftSize=256,this.context.createMediaStreamSource(t).connect(this.inputMeter)}async requestSession(t){const{url:n,body:r}=zc({bookId:this.options.bookId,notebookId:this.options.notebookId,mode:this.options.mode,sampleRate:this.context.sampleRate,sdp:t}),o=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r),signal:this.abort.signal}),i=await o.json();if(!o.ok)throw new Error(i.error??"Voice could not connect. Try again.");return this.descriptor=i,this.timeline.providerReady({provider:i.provider,transport:i.transport,model:i.model,fallbackReason:i.fallbackReason}),this.stopped?(this.releaseSession(),null):(this.options.onProvider(i.provider,i.fallbackReason),i)}async acceptPcm(t,n){this.pcm=new Hc({context:this.context,microphone:n,output:this.output,sampleRate:t.sampleRate,onStarted:r=>this.mediaEvent({type:"output_audio_buffer.started",response_id:r}),onFinished:r=>this.mediaEvent({type:"output_audio_buffer.stopped",response_id:r}),onError:r=>this.stop(r,!0)}),this.readEvents(t),await this.pcm.start(t,this.abort.signal),this.stopped||this.connected()}connected(){window.clearTimeout(this.deadline),this.mark("connected"),this.timeline.mediaReady(),this.updatePhase("listening"),this.post("ready",{})}async startWebRtc(t){const n=new RTCPeerConnection;this.peer=n;for(const o of t.getAudioTracks())n.addTrack(o,t);if(this.listen(n,"track",o=>{if(this.stopped)return;const i=o.track;this.mark("media-track");const s=new MediaStream([i]);this.remoteAudio=new Audio,this.remoteAudio.muted=!0,this.remoteAudio.srcObject=s,this.remoteAudio.play().catch(()=>{this.stopped||this.options.onPlaybackBlocked(!0)}),this.context.createMediaStreamSource(s).connect(this.output),this.options.onPlaybackBlocked(this.context?.state!=="running")}),this.listen(n,"connectionstatechange",()=>{this.stopped||(n.connectionState==="failed"||n.connectionState==="disconnected"||n.connectionState==="closed")&&this.stop("Voice connection lost. Start voice to reconnect.",!0)}),this.channel=n.createDataChannel("oai-events"),this.listen(this.channel,"message",o=>{if(!this.stopped)try{this.mediaEvent(JSON.parse(String(o.data)))}catch{this.stop("Voice sent an unreadable event. Start voice again.",!0)}}),this.listen(this.channel,"open",()=>{this.stopped||this.connected()}),this.listen(this.channel,"close",()=>{this.stopped||this.stop("Voice channel closed. Start voice again.",!0)}),await n.setLocalDescription(await n.createOffer()),this.stopped)return;this.timeline.sessionRequest();const r=await this.requestSession(n.localDescription?.sdp);if(r){if(r.transport==="pcm"){this.cleanupListeners.splice(0).forEach(o=>o()),this.channel?.close(),this.peer?.close(),this.channel=null,this.peer=null,this.installAmbientListeners(),this.bindMicrophone(t),await this.acceptPcm(r,t);return}this.readEvents(r),await n.setRemoteDescription({type:"answer",sdp:r.sdp})}}mediaEvent(t){if(typeof t.type=="string"&&/audio_buffer\.(started|stopped|cleared)|speech_(started|stopped)/u.test(t.type)&&this.mark(t.type),t.type==="input_audio_buffer.speech_started"){const n=this.pcm?.interrupt();n&&this.post("interrupt",n),this.playing&&(this.mark("barge-in"),this.awaitingSilence=!0,this.outputResponseId&&!n&&this.post("interrupt",{responseId:this.outputResponseId})),this.playing=!1,this.awaitingAudio=!1,this.output&&(this.output.gain.value=0),this.options.onRetrying?.(!1),this.updatePhase(this.review?"review":"listening")}else if(t.type==="input_audio_buffer.speech_stopped")this.mark("speech-stop",{microphoneSignalEndedAt:this.lastMicrophoneSignalAt}),this.timeline.turnDetection(this.lastMicrophoneSignalAt),this.updatePhase(this.review?"review":"thinking");else if(t.type==="output_audio_buffer.started")this.outputResponseId=typeof t.response_id=="string"?t.response_id:null,this.playing=!0,this.awaitingAudio=!0,this.output&&(this.output.gain.value=1),this.updatePhase(this.review?"review":"speaking");else if(t.type==="output_audio_buffer.stopped"||t.type==="output_audio_buffer.cleared"){if(t.response_id&&t.response_id!==this.outputResponseId)return;this.playing=!1,this.output&&(this.output.gain.value=0),this.updatePhase(this.review?"review":"listening")}}measure(){const t=new Float32Array(256),n=new Float32Array(256),r=i=>Math.sqrt(i.reduce((s,a)=>s+a*a,0)/i.length),o=()=>{if(this.stopped)return;this.inputMeter?.getFloatTimeDomainData(t),this.outputMeter?.getFloatTimeDomainData(n),r(t)>.008&&(this.lastMicrophoneSignalAt=performance.now());const i=Math.min(1,Math.max(r(t),this.playing?r(n):0)*5);this.awaitingAudio&&r(n)>.002&&this.context?.state==="running"&&(this.timeline.firstDecodedAudio(this.lastMicrophoneSignalAt),this.awaitingAudio=!1),this.awaitingSilence&&r(n)<.002&&(this.mark("local-silence"),this.awaitingSilence=!1),this.options.onLevel(i),this.frame=requestAnimationFrame(o)};this.frame=requestAnimationFrame(o)}async readEvents(t){try{const n=await fetch(`/api/voice/${t.id}/events`,{headers:{Authorization:`Bearer ${t.token}`},signal:this.abort.signal});if(!n.ok||!n.body)throw new Error("Voice event connection failed. Start voice again.");const r=n.body.getReader(),o=new TextDecoder;let i="";for(;!this.stopped;){const s=await r.read();if(s.done)break;if(i+=o.decode(s.value,{stream:!0}),i.length>512e3)throw new Error("Voice event exceeded its size limit.");const a=i.split(`
6
+ `);i=a.pop()??"";for(const c of a)c&&!this.stopped&&this.receive(JSON.parse(c))}this.stopped||this.stop("Voice connection ended. Start voice to reconnect.",!0)}catch(n){this.stopped||this.stop(vn(n),!0)}}receive(t){t.type==="caption"?(this.captionStarts.has(t.caption.id)||(this.captionStarts.add(t.caption.id),this.mark("caption-first",{role:t.caption.role})),t.caption.final&&!t.caption.interrupted&&this.mark("caption-final",{role:t.caption.role}),t.caption.interrupted&&this.mark("caption-interrupted"),this.options.onCaption(t.caption)):t.type==="error"?this.stop(t.message,!0):t.type==="closed"?this.stop(t.reason):t.type==="audio"?this.pcm?.enqueue(t.audio,t.responseId,t.itemId):t.type==="audio-done"?this.pcm?.finish(t.responseId):t.type==="activity"?(t.interrupt?this.mediaEvent({type:"input_audio_buffer.speech_started"}):this.pcm&&t.phase==="thinking"&&this.mediaEvent({type:"input_audio_buffer.speech_stopped"}),this.options.onRetrying?.(!!t.retry),this.playing||this.updatePhase(this.review?"review":t.phase)):t.type==="action"&&!this.actions.has(t.callId)?(this.actions.add(t.callId),this.action(t)):t.type==="review"&&!this.actions.has(t.callId)&&(this.actions.add(t.callId),this.reviewCommand(t))}async reviewCommand(t){let n;try{n=await this.options.onReviewCommand(t.command)}catch(r){n={status:"failed",message:r instanceof Error?r.message:"The review command failed."}}this.stopped||(n.status!=="review"&&(this.review=null),this.updatePhase(this.review?"review":this.playing?"speaking":"listening"),await this.acknowledge(t.callId,n))}async action(t){let n;try{n=await this.options.onAction(t)}catch(r){n={status:"failed",message:r instanceof Error?r.message:"The action failed."}}this.stopped||(n.status==="review"&&(this.mark("action-review"),this.review=t.callId,this.updatePhase("review")),await this.acknowledge(t.callId,n))}async post(t,n){const r=this.descriptor;if(!(this.stopped||!r))try{if(!(await fetch(`/api/voice/${r.id}/${t}`,{method:"POST",headers:{Authorization:`Bearer ${r.token}`,"Content-Type":"application/json"},body:JSON.stringify(n),signal:this.abort.signal})).ok)throw new Error("Voice could not receive the action outcome. Check the command UI.")}catch(o){this.stopped||this.stop(vn(o),!0)}}reportOutcome(t){if(!this.review)return;const n=this.review;t.status!=="review"&&(this.review=null),this.acknowledge(n,t),this.updatePhase(this.review?"review":this.playing?"speaking":"listening")}acknowledge(t,n){return this.timeline.acknowledgement(n.status),this.outcomes=this.outcomes.then(()=>this.post("outcome",{callId:t,outcome:n})),this.outcomes}shareTypedTurn(t,n){this.post("context",{userText:t.slice(0,8e3),assistantText:n.slice(0,4e3)})}async resumePlayback(){if(!(this.stopped||!this.context))try{await this.context.resume(),await this.remoteAudio?.play(),this.stopped||this.options.onPlaybackBlocked(this.context.state!=="running")}catch{this.stopped||this.options.onPlaybackBlocked(!0)}}releaseSession(){const t=this.descriptor;this.descriptor=null,t&&fetch(`/api/voice/${t.id}`,{method:"DELETE",headers:{Authorization:`Bearer ${t.token}`,"Content-Type":"application/json"},body:JSON.stringify({interruptedResponseId:this.playing?this.outputResponseId:null}),keepalive:!0}).catch(()=>{})}stop(t="Comms off.",n=!1){this.stopped||(this.stopped=!0,this.output?.disconnect(),this.remoteAudio?.pause(),this.remoteAudio&&(this.remoteAudio.srcObject=null),this.microphone?.getTracks().forEach(r=>r.stop()),this.mark("microphone-released",{ended:this.microphone?.getTracks().every(r=>r.readyState==="ended")??!0}),this.microphone=null,this.mark("stopped"),cancelAnimationFrame(this.frame),window.clearTimeout(this.deadline),this.cleanupListeners.splice(0).forEach(r=>r()),this.abort.abort(),this.channel?.close(),this.pcm?.stop(),this.peer?.getReceivers().forEach(r=>r.track.stop()),this.peer?.close(),this.context?.close().catch(()=>{}),this.options.onLevel(0),this.options.onPlaybackBlocked(!1),this.releaseSession(),this.updatePhase(n?"error":"off",t))}get active(){return!this.stopped&&this.phase!=="off"&&this.phase!=="error"}}const Yc=6e4;function Jc(e){return e.text.trim().length>0||!!e.interrupted}function I_(e,t,n=[],r=[]){const o=e.filter(Jc).map(u=>({kind:"caption",sequence:u.sequence??0,caption:u})),i=n.map(u=>({kind:"caption",sequence:u.id,turn:u,caption:{id:`typed:${u.id}`,sequence:u.id,role:"user",text:u.text,final:!0},calls:t.calls.filter(m=>m.turnId===u.id)})),s=t.calls.filter(u=>u.turnId===void 0).map(u=>({kind:"call",sequence:u.id,call:u})),a=[...o,...i,...s,...r].sort((u,m)=>u.sequence!==m.sequence?u.sequence-m.sequence:u.kind===m.kind?0:u.kind==="caption"?-1:1),l=a.flatMap((u,m)=>u.kind==="caption"&&u.caption.role==="user"?[m]:[]).at(-2);return l===void 0?a:a.filter((u,m)=>m>=l||u.kind==="caption"&&u.turn&&mt(u.turn))}function A_(e){return e.at(-1)?.sequence??0}function x_(e){return e.map(t=>t.kind==="status"?`${t.sequence}:${t.text}`:t.kind==="call"?`${t.sequence}:${t.call.phase}`:t.turn?`${t.sequence}:${t.turn.status}:${t.turn.reply}:${t.turn.work.map(n=>n.state).join(":")}`:String(t.sequence)).join(",")}function E_(e){if(e.runningCalls>0)return!0;switch(e.voicePhase){case"connecting":case"thinking":case"speaking":case"review":return!0;default:return!1}}function C_(e){if(!e.open||e.held)return()=>{};const t=e.setTimeoutFn??setTimeout,n=e.clearTimeoutFn??clearTimeout,r=t(e.onClose,e.delayMs??Yc);return()=>{n(r)}}function M_(e,t,n){return t>0?!1:n?e==="off"||e===void 0:!0}const ki="videobook.voice-provider";function Zc(){try{const e=localStorage.getItem(ki);return e==="openai"||e==="xai"?e:"auto"}catch{return"auto"}}function T_(e){const t=ne.c(31),[n,r]=_.useState("off"),[o,i]=_.useState("Voice input + spoken replies");let s;t[0]===Symbol.for("react.memo_cache_sentinel")?(s=[],t[0]=s):s=t[0];const[a,c]=_.useState(s),[l,u]=_.useState(!1),[m,f]=_.useState(!1),[d,p]=_.useState(!1),[g,y]=_.useState(Zc),[v,S]=_.useState(null),[w,k]=_.useState(),I=_.useRef(null),E=_.useRef(null),C=_.useRef(e);let x;t[1]!==e?(x=()=>{C.current=e},t[1]=e,t[2]=x):x=t[2],_.useLayoutEffect(x);let $;t[3]===Symbol.for("react.memo_cache_sentinel")?($=()=>()=>{const U=E.current;E.current=null,U?.stop("Workspace changed. Start voice to resume."),c([]),S(null),k(void 0),f(!1),p(!1)},t[3]=$):$=t[3];let T;t[4]!==e.available||t[5]!==e.bookId||t[6]!==e.notebookId||t[7]!==e.scope?(T=[e.bookId,e.notebookId,e.scope,e.available],t[4]=e.available,t[5]=e.bookId,t[6]=e.notebookId,t[7]=e.scope,t[8]=T):T=t[8],_.useLayoutEffect($,T);let N;t[9]===Symbol.for("react.memo_cache_sentinel")?(N=()=>{f(!1),p(!1),E.current?.stop(),r("off"),i("Comms off."),u(!1),S(null),k(void 0)},t[9]=N):N=t[9];const M=N;let R;t[10]!==g?(R=()=>{if(E.current?.active){M();return}const U=C.current;if(!U.available||U.disabled)return;S(null),k(void 0),p(!1),r("connecting"),i("Connecting voice");const we=new Set,Q=new Xc({bookId:U.bookId,notebookId:U.notebookId,mode:g,onProvider:(B,P)=>{E.current===Q&&(S(B),k(P))},onPhase:(B,P)=>{E.current!==Q&&B!=="off"||(r(B),(B==="off"||B==="error")&&f(!1),B!=="thinking"&&p(!1),P&&i(P))},onRetrying:B=>{E.current===Q&&p(B)},onCaption:B=>{E.current===Q&&(B.role==="user"&&B.final&&B.text.trim()&&!we.has(B.id)&&(we.add(B.id),C.current.onUserTurn?.()),c(P=>{const Y=P.findIndex(Se=>Se.id===B.id);if(Y<0)return[...P,{...B,sequence:B.sequence??Yt()}].slice(-256);const Me=P[Y]?.sequence??B.sequence;return P.map(Se=>Se.id===B.id?{...B,sequence:Me}:Se)}))},onAction:async B=>{if(E.current!==Q||C.current.scope!==U.scope||C.current.bookId!==U.bookId||C.current.notebookId!==U.notebookId||!C.current.available)return{status:"cancelled",message:"Workspace changed. Repeat the command in the current workspace."};f(!0);const P=()=>E.current===Q&&Q.active&&C.current.bookId===U.bookId&&C.current.notebookId===U.notebookId&&C.current.scope===U.scope&&C.current.available,Y=await C.current.onAction(B,P).catch(el);return E.current===Q&&f(Y.status==="review"),Y},onReviewCommand:async B=>{if(E.current!==Q)return{status:"cancelled",message:"Workspace changed. The review is no longer on screen."};const P=await C.current.onReviewCommand(B).catch(Qc);return E.current===Q&&f(P.status==="review"),P},onLevel:B=>I.current?.style.setProperty("--voice-level",String(B)),onPlaybackBlocked:u});E.current=Q,Q.start()},t[10]=g,t[11]=R):R=t[11];const D=R;let z;t[12]!==g?(z=U=>{if(U!==g){f(!1),p(!1),E.current?.stop("Voice provider changed. Start voice to connect."),y(U),S(null),k(void 0);try{localStorage.setItem(ki,U)}catch{return}}},t[12]=g,t[13]=z):z=t[13];const q=e.disabled||!e.available,J=n!=="off"&&n!=="error";let pe,ge,K;t[14]===Symbol.for("react.memo_cache_sentinel")?(K=()=>{E.current?.resumePlayback()},pe=U=>{U.status!=="review"&&f(!1),E.current?.reportOutcome(U)},ge=(U,we)=>E.current?.shareTypedTurn(U,we),t[14]=pe,t[15]=ge,t[16]=K):(pe=t[14],ge=t[15],K=t[16]);let H;return t[17]!==a||t[18]!==w||t[19]!==o||t[20]!==g||t[21]!==m||t[22]!==n||t[23]!==l||t[24]!==v||t[25]!==d||t[26]!==z||t[27]!==q||t[28]!==J||t[29]!==D?(H={phase:n,message:o,captions:a,playbackBlocked:l,pendingReview:m,retrying:d,meterRef:I,toggle:D,stop:M,mode:g,provider:v,fallbackReason:w,selectMode:z,disabled:q,active:J,resumePlayback:K,reportOutcome:pe,shareTypedTurn:ge},t[17]=a,t[18]=w,t[19]=o,t[20]=g,t[21]=m,t[22]=n,t[23]=l,t[24]=v,t[25]=d,t[26]=z,t[27]=q,t[28]=J,t[29]=D,t[30]=H):H=t[30],H}function Qc(e){return{status:"failed",message:e instanceof Error?e.message:"The review command failed."}}function el(e){return{status:"failed",message:e instanceof Error?e.message:"Voice action failed."}}async function tl(e){const{revision:t,...n}=e,r=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(JSON.stringify(n)));return[...new Uint8Array(r)].map(o=>o.toString(16).padStart(2,"0")).join("")}const nl=1;function wi(e){if(e.planVersion!==nl)throw new Error(`Unsupported CommandPlan version: ${e.planVersion}`);if(e.stages.length===0)throw new Error("A CommandPlan requires a stage");for(const t of e.stages){if(t.kind==="edit"){if(t.intent.sourceSurface!==e.sourceSurface)throw new Error("Edit stage source surface must match its CommandPlan");if(t.intent.actor!==e.actor)throw new Error("Edit stage actor must match its CommandPlan")}if(t.kind==="queued"&&t.insertsOutput&&!t.continuation)throw new Error("Queued insert stages require a revision-pinned continuation");if(t.kind==="queued"&&t.jobType==="generation"&&(!t.provider||!t.model))throw new Error("Generation stages require provider and model disclosure");if(t.kind==="queued"&&t.jobType==="generation"&&t.estimatedCostUsd===void 0&&t.estimateUnavailable!==!0)throw new Error("Generation stages require a cost estimate or unavailable warning")}}function R_(e){const{bookId:t,call:n,sequence:r}=e,o=_.useMemo(()=>({bookId:t}),[t]),i=_.useRef({key:o,active:!0,pending:!1}),[s,a]=_.useState({scope:o,busy:!1,error:""}),c=r?.sequenceId,[l,u]=_.useState({sequenceId:c,frame:0,selectedClipId:null}),m=_.useCallback(w=>{u(k=>({sequenceId:c,frame:w,selectedClipId:k.sequenceId===c?k.selectedClipId:null}))},[c]),[f,d]=_.useState(null),p=_.useRef(0);_.useEffect(()=>{const w={key:o,active:!0,pending:!1};return i.current=w,()=>{w.active=!1}},[o]);async function g(w){const k=i.current;if(!e.ready||k.key!==o||!k.active||k.pending)return;const I=()=>k.active&&i.current===k;k.pending=!0,a({scope:o,busy:!0,error:""});try{await w(I),I()&&a({scope:o,busy:!1,error:""})}catch(E){I()&&a({scope:o,busy:!1,error:E instanceof Error?E.message:String(E)})}finally{k.pending=!1}}async function y(w,k,I){const E=++p.current;await g(async C=>{const x=r?.tracks.find(R=>R.trackId===w);if(!x)throw new Error("The track is no longer available");const $=await n("list_assets",{book_id:t,browse_status:"ready",sort:"newest",offset:k,limit:100},{background:!0});if(!C()||E!==p.current)return;const T=e.parseAssets($);e.onAssets(T);const N=T.filter(R=>R.mediaUrl&&R.status==="ready"&&(x.kind==="audio"?R.type==="audio":R.type==="video"||R.type==="final")),M=h(h($)?.page);d(R=>({scope:o,trackId:w,items:I&&R?.scope===o&&R.trackId===w?[...R.items,...N]:N,offset:M?.hasMore===!0?k+100:null}))})}async function v(w){await g(async k=>{if(!r)throw new Error("The timeline is not ready");const I=await n("plan_sequence_edit",{book_id:t,source_surface:"ui",actor:"videobook-user",expected_revision:await tl(r),edits:[w]});if(wi(I),!k())return;const E=I.stages.find(T=>T.kind==="edit");if(!E||E.kind!=="edit")throw new Error("The timeline plan has no edit");const C=await n("preview_edit_intent",{book_id:t,intent:E.intent});if(!C.valid)throw new Error(C.conflicts.map(T=>T.message).join(" · ")||"The timeline changed. Try again.");if(!k())return;const x=h(await n("commit_edit_intent",{book_id:t,intent:E.intent,preview_hash:C.previewHash})),$=e.parseSequence(x?.sequence);if(!$)throw new Error("The server returned an invalid timeline");k()&&(e.onSequence($),d(null))})}async function S(w,k){await g(async I=>{const E=e.parseSequence(await n(w,{book_id:t,...k}));if(!E)throw new Error("The server returned an invalid timeline");I()&&e.onSequence(E)})}return{frame:l.sequenceId===c?l.frame:0,selectedClipId:l.sequenceId===c?l.selectedClipId:null,seek:m,selectClip:w=>u(k=>({sequenceId:c,frame:k.sequenceId===c?k.frame:0,selectedClipId:w})),busy:s.scope===o&&s.busy,error:s.scope===o?s.error:"",picker:f?.scope===o?f:null,openPicker:w=>y(w,0,!1),loadMore:()=>f?.offset!==null&&f?y(f.trackId,f.offset,!0):Promise.resolve(),closePicker:()=>{p.current+=1,d(null)},append:(w,k)=>v({kind:"append",track_id:w,artifact_id:k}),removeClip:w=>v({kind:"remove_clip",clip_id:w,ripple:!0}),addTrack:()=>S("add_sequence_track",{kind:"audio"}),removeTrack:w=>S("remove_sequence_track",{track_id:w})}}const Hr=te({timeSeconds:V().finite().nonnegative(),confidence:V().min(0).max(1).nullable()}),rl=te({algorithmId:j().min(1),algorithmVersion:j().min(1),hopSeconds:V().finite().positive(),values:ae(V().finite().min(0).max(1)).max(2e4)}),ol=te({id:j().min(1).max(100),timeSeconds:V().finite().nonnegative().max(3600),quality:V().min(0).max(1)}),il=te({algorithmId:j().min(1),algorithmVersion:j().min(1),candidates:ae(ol).max(200)}),sl=te({analysisId:j(),artifactId:j().uuid(),objectHash:j(),streamId:j().uuid(),durationSeconds:V().finite().positive().max(3600),analyzerVersion:j(),beats:ae(Hr).max(24e3),bpm:V().finite().positive().nullable(),confidence:V().min(0).max(1).nullable(),bars:ae(Hr).max(24e3).nullable(),beatsPerBar:V().int().min(1).max(16).nullable(),barSource:Ye(["detected","estimated"]).nullable().default(null),waveform:ae(V().finite().min(0).max(1)).max(65536),lowConfidence:Te(),energy:rl.nullable().default(null),sections:il.nullable().default(null)}),al=["intro","verse","chorus","drop","break","bridge","outro"];te({schemaVersion:ii(1),analysisId:j(),artifactId:j().uuid(),objectHash:j(),streamId:j().uuid(),labeler:te({id:j(),version:j(),model:j()}),boundaries:te({algorithmId:j(),algorithmVersion:j()}),status:Ye(["ready","unavailable"]),reason:j().nullable().default(null),createdAt:V().finite().positive(),labels:ae(te({candidateId:j().min(1).max(100),label:Ye(al),confidence:V().min(0).max(1),rationale:j().max(500)})).max(200).default([])});const cl=te({id:j().min(1).max(100),timeSeconds:V().finite().nonnegative().max(3600),bar:Te(),manual:Te()}),ll=te({masterClipId:j().uuid().nullable(),correction:te({objectHash:j(),analysisId:j().nullable(),markers:ae(cl).max(24e3),bpm:V().finite().min(20).max(400).nullable(),beatsPerBar:V().int().min(1).max(16).nullable()}).nullable()});function kn(e,t){const n=new Set(e.tracks.filter(o=>o.kind==="audio").map(o=>o.trackId)),r=e.clips.filter(o=>n.has(o.trackId)&&o.source.kind==="timed");return(t.masterClipId?r.find(o=>o.clipId===t.masterClipId):r.length===1?r[0]:null)??null}function ul(e,t,n){if(!e)return[];if(t.correction)return t.correction.objectHash===e.source.range.objectHash?t.correction.markers:[];if(!n||n.objectHash!==e.source.range.objectHash||n.streamId!==e.source.range.streamId)return[];const r=new Set(n.bars?.map(o=>Math.round(o.timeSeconds*1e6)));return n.beats.map((o,i)=>({id:`${n.analysisId.slice(0,12)}-${i}`,timeSeconds:o.timeSeconds,bar:r.has(Math.round(o.timeSeconds*1e6)),manual:!1}))}function dl(e,t){if(!e.length)return[];const n=t!==null&&Number.isFinite(t)&&t>0?60/t:null,r=[0];for(let o=1;o<e.length;o+=1){const i=e[o].timeSeconds-e[o-1].timeSeconds;r.push(r[o-1]+(n===null?1:Math.max(1,Math.round(i/n))))}return r}function $_(e,t,n,r){const o=[...e].sort((a,c)=>a.timeSeconds-c.timeSeconds),i=o.findIndex(a=>a.id===t);if(i<0||!Number.isInteger(n)||n<1||n>16)throw new Error("Choose a first bar beat and 1–16 beats per bar");const s=dl(o,r);return o.map((a,c)=>({...a,bar:(s[c]-s[i])%n===0,manual:!0}))}function Wr(e,t,n){const r=e.source.range,o=r.timeBase.numerator/r.timeBase.denominator,i=(t-e.timelineStartFrame)/n*e.speed.numerator/e.speed.denominator;return e.reverse?(r.startTick+r.durationTicks)*o-i:r.startTick*o+i}function fl(e,t,n){const r=e.source.range,o=r.timeBase.numerator/r.timeBase.denominator,i=e.reverse?(r.startTick+r.durationTicks)*o-t:t-r.startTick*o;return Math.round(e.timelineStartFrame+i*n*e.speed.denominator/e.speed.numerator)}function ml(e,t,n){if(!e||!e.enabled)return[];const r=n.frameRate.numerator/n.frameRate.denominator,o=e.source.range,i=o.timeBase.numerator/o.timeBase.denominator,s=o.startTick*i,a=(o.startTick+o.durationTicks)*i,c=new Set;return t.filter(l=>l.timeSeconds>=s&&l.timeSeconds<a).map(l=>({...l,frame:fl(e,l.timeSeconds,r)})).filter(l=>l.frame>=e.timelineStartFrame&&l.frame<e.timelineStartFrame+e.durationFrames).sort((l,u)=>l.frame-u.frame||Number(u.bar)-Number(l.bar)).filter(l=>c.has(l.frame)?!1:(c.add(l.frame),!0))}function N_(e,t,n,r=1/0){if(n==="off")return Math.round(e);let o=Math.round(e),i=r;for(const s of t){if(n==="bars"&&!s.bar)continue;const a=Math.abs(s.frame-e);(a<i||a===i&&s.frame<o)&&(o=s.frame,i=a)}return o}function P_(e,t,n,r,o=256){if(e.source.kind!=="timed"||!n||!t.length)return[];const i=e;return Array.from({length:o},(s,a)=>{const c=Wr(i,e.timelineStartFrame+a/o*e.durationFrames,r),l=Wr(i,e.timelineStartFrame+(a+1)/o*e.durationFrames,r),u=Math.max(0,Math.floor(Math.min(c,l)/n*t.length)),m=Math.min(t.length,Math.max(u+1,Math.ceil(Math.max(c,l)/n*t.length)));let f=0;for(let d=u;d<m;d++)f=Math.max(f,t[d]??0);return f})}const Kr={revision:"none",settings:{masterClipId:null,correction:null},canUndo:!1,canRedo:!1};function zr(e){const t=h(e);if(!t||typeof t.revision!="string")throw new Error("Invalid beat map response");return{revision:t.revision,settings:ll.parse(t.settings),canUndo:t.canUndo===!0,canRedo:t.canRedo===!0}}function Xr(e){const t=h(e);if(!t||typeof t.status!="string"||!["missing","queued","analyzing","ready","no-beats","cancelled","failed"].includes(t.status))throw new Error("Invalid music analysis response");return{status:t.status,analysisId:String(t.analysisId),jobId:typeof t.jobId=="number"?t.jobId:null,error:typeof t.error=="string"?t.error:null,analysis:t.analysis?sl.parse(t.analysis):null}}function O_({bookId:e,ready:t,sequence:n,call:r,onSequence:o}){const i=`${e}:${n?.sequenceId??""}`,s=_.useRef(0),[a,c]=_.useState({scope:i,rhythm:Kr,analysis:null}),[l,u]=_.useState({scope:i,busy:!1,error:""});_.useEffect(()=>()=>{s.current+=1},[i]);const m=a.scope===i?a.rhythm:Kr,f=n?kn(n,m.settings):null,d=a.scope===i&&a.analysis?.analysis?.artifactId===f?.source.artifactId?a.analysis?.analysis??null:null,p=_.useMemo(()=>ul(f,m.settings,d),[f,m.settings,d]),g=_.useMemo(()=>n?ml(f,p,n):[],[f,p,n]),y=a.scope===i?a.analysis?.status??"missing":"missing";async function v(x,$=n){if(!$)return null;const T=kn($,x);return T?Xr(await r("get_music_analysis",{book_id:e,asset_id:T.source.artifactId,stream_id:T.source.range.streamId},{background:!0})):null}function S(x,$){const T=kn($,x.settings)?.source;c(N=>{const M=N.scope===i?N.analysis:null,R=M?.analysis&&T&&M.analysis.artifactId===T.artifactId&&M.analysis.objectHash===T.range.objectHash&&M.analysis.streamId===T.range.streamId;return{scope:i,rhythm:x,analysis:R?M:null}})}async function w(x,$,T){for(;x===s.current;){if(c({scope:i,rhythm:$,analysis:T}),u({scope:i,busy:!1,error:""}),T?.status!=="queued"&&T?.status!=="analyzing"||(await new Promise(N=>setTimeout(N,1e3)),x!==s.current))return;T=await v($.settings)}}async function k(){if(!t||!n)return;const x=++s.current;u({scope:i,busy:!0,error:""});try{const $=zr(await r("get_sequence_rhythm",{book_id:e,sequence_id:n.sequenceId},{background:!0}));if(x!==s.current)return;S($,n);const T=await v($.settings);await w(x,$,T)}catch($){x===s.current&&u({scope:i,busy:!1,error:$ instanceof Error?$.message:String($)});return}x===s.current&&u({scope:i,busy:!1,error:""})}async function I(x,$=n){if(!t||!$)return;const T=++s.current;u({scope:i,busy:!0,error:""});try{const N=h(await r("update_sequence_rhythm",{book_id:e,sequence_id:$.sequenceId,expected_revision:m.revision,operation:typeof x=="string"?x:"set",...typeof x=="string"?{}:{settings:x}},{background:!0}));if(T!==s.current)return;const M=zr(N?.state);S(M,$),o(N?.sequence);const R=await v(M.settings,$);await w(T,M,R)}catch(N){T===s.current&&u({scope:i,busy:!1,error:N instanceof Error?N.message:String(N)});return}T===s.current&&u({scope:i,busy:!1,error:""})}async function E(x=!1){if(!t||!f)return;const $=++s.current;u({scope:i,busy:!0,error:""});const T={book_id:e,asset_id:f.source.artifactId,stream_id:f.source.range.streamId};try{const N=Xr(await r("analyze_music",{...T,force:x},{background:!0}));await w($,m,N)}catch(N){$===s.current&&u({scope:i,busy:!1,error:N instanceof Error?N.message:String(N)})}}async function C(){if(!(!t||a.scope!==i||!a.analysis?.jobId)){s.current+=1;try{await r("cancel_job",{book_id:e,job_id:a.analysis.jobId},{background:!0}),await k()}catch(x){u({scope:i,busy:!1,error:x instanceof Error?x.message:String(x)})}}}return{rhythm:m,master:f,analysis:d,markers:p,mapped:g,status:y,load:k,save:I,analyze:E,cancel:C,stop:()=>{s.current+=1},busy:!t||l.scope===i&&l.busy,error:l.scope===i&&(l.error||a.analysis?.error)||""}}const Un=[{kind:"cell.outputArtifact",one:"notebook cell",many:"notebook cells"},{kind:"cell.reference",one:"cell reference",many:"cell references"},{kind:"sequenceClip",one:"sequence clip",many:"sequence clips"},{kind:"pinnedSearchResult",one:"pinned result",many:"pinned results"},{kind:"stream",one:"media stream",many:"media streams"},{kind:"transcript",one:"transcript",many:"transcripts"},{kind:"captionCue",one:"caption cue",many:"caption cues"}];function pl(e,t){const n=Un.find(r=>r.kind===e);return n?`${t} ${t===1?n.one:n.many}`:`${t} ${e}`}function gl(e){return e.length<=1?e[0]??"":`${e.slice(0,-1).join(", ")} and ${e[e.length-1]}`}function hl(e){const t=new Map;for(const o of e)t.set(o.kind,(t.get(o.kind)??0)+1);const r=[...Un.filter(o=>t.has(o.kind)).map(o=>o.kind),...[...t.keys()].filter(o=>!Un.some(i=>i.kind===o))].map(o=>pl(o,t.get(o)??0));return r.length>0?gl(r):"something else in this book"}function bl(e){if(!Number.isFinite(e)||e<=0)return"0 B";const t=["B","KB","MB","GB","TB"],n=Math.min(t.length-1,Math.floor(Math.log(e)/Math.log(1024))),r=e/1024**n;return`${n===0||r>=100?Math.round(r):Math.round(r*10)/10} ${t[n]}`}function L_(e,t){const n=[t.reclaimedBytes>0?`${bl(t.reclaimedBytes)} reclaimed`:"",t.sharedObjects>0?`${t.sharedObjects} file${t.sharedObjects===1?"":"s"} kept for another asset`:"",t.clearedCells>0?`cleared ${t.clearedCells} cell${t.clearedCells===1?"":"s"}`:""].filter(r=>r!=="");return n.length>0?`Forgot ${e} · ${n.join(" · ")}`:`Forgot ${e}`}function F_(e){return`Forget ${e}?
7
+
8
+ This deletes the asset and destroys its stored content. Files shared with another asset are kept. This cannot be undone.`}function D_(e,t){return`${e} is still used by ${hl(t)}.
9
+
10
+ Clear those references and forget it anyway?`}const yl=[{label:"no people",aliases:["empty","unpopulated","nobody","no one"]},{label:"solo subject",aliases:["one person","single person","solo","individual"]},{label:"two people",aliases:["pair","couple","duo","two subjects"]},{label:"small group",aliases:["group","three people","few people","small gathering"]},{label:"crowd",aliases:["crowded","many people","audience","large group"]},{label:"interviewer",aliases:["questioner"]},{label:"interviewee",aliases:["subject being interviewed","respondent"]},{label:"presenter",aliases:["host"]}],_l=[{label:"interior",aliases:["indoors","inside","indoor"]},{label:"exterior",aliases:["outdoors","outside","outdoor"]},{label:"day",aliases:["daytime","daylight","morning","afternoon"]},{label:"night",aliases:["nighttime","after dark","evening"]},{label:"kitchen",aliases:["galley"]},{label:"street",aliases:["sidewalk","roadside","city street"]},{label:"studio",aliases:["soundstage"]},{label:"office",aliases:["workplace"]},{label:"bedroom",aliases:[]},{label:"living room",aliases:["lounge"]},{label:"restaurant",aliases:["cafe","diner","bar"]},{label:"store",aliases:["shop","market","supermarket"]},{label:"car",aliases:["vehicle interior"]},{label:"beach",aliases:["shore","seaside"]},{label:"park",aliases:["garden"]},{label:"forest",aliases:["woods","woodland"]},{label:"stage",aliases:["venue","concert stage"]},{label:"gym",aliases:["fitness studio"]},{label:"rooftop",aliases:["roof"]}],vl=[{label:"wide shot",aliases:["wide","long shot","full shot","establishing wide"]},{label:"medium shot",aliases:["medium","mid shot","waist up"]},{label:"close-up",aliases:["close up","closeup","tight shot","cu"]},{label:"extreme close-up",aliases:["extreme close up","extreme closeup","macro shot"]},{label:"establishing shot",aliases:["establishing","scene setter"]},{label:"insert",aliases:["insert shot","cutaway","detail shot"]},{label:"product shot",aliases:["product","packshot"]},{label:"static",aliases:["locked off","tripod","still camera","fixed camera"]},{label:"pan",aliases:["panning","whip pan"]},{label:"tilt",aliases:["tilting"]},{label:"handheld",aliases:["hand held","shaky","run and gun"]},{label:"tracking",aliases:["dolly","steadicam","follow shot","tracking shot"]},{label:"interview",aliases:["sit down interview"]},{label:"talking head",aliases:[]},{label:"dialogue",aliases:["conversation","speech","talking"]},{label:"ambience",aliases:["ambient","room tone","atmosphere","background sound"]},{label:"music",aliases:["musical","score","soundtrack"]},{label:"voiceover",aliases:["voice over","narration","narrator"]}],kl={people:yl,places:_l,editing:vl,custom:[]},Yr=new Set(["beautiful","stunning","amazing","gorgeous","great","good","nice","cool","epic","dramatic","moody","vibe","vibes","aesthetic","mood","cinematic","masterpiece","high quality","professional","hd","4k","video","footage","clip","content","scene","shot","media","image","photo","picture","frame","camera","misc","other","general","interesting","modern","classic","colorful","bright","dark","atmospheric","emotional","energetic","calm","peaceful","happy","sad"]);function Si(e){return e.normalize("NFKC").toLowerCase().replace(/[_/]+/gu," ").replace(/[^\p{L}\p{N}\s-]+/gu,"").replace(/\s+/gu," ").trim()}const wl=new Map(Object.entries(kl).flatMap(([e,t])=>t.flatMap(n=>[n.label,...n.aliases].map(r=>[`${e}:${Si(r)}`,{facet:e,label:n.label}]))));function Ii(e,t=[]){const n=Ks(e.label),r=Ut(n),o=e.facet?[e.facet]:["people","places","editing"];for(const s of o){const a=Il(s,n);if(a)return{...a,label:Ut(a.label)===r?n:a.label}}const i=!e.facet&&t.find(s=>Ut(s.label)===r);return{facet:e.facet??(i?i.facet:"custom"),label:n}}function Sl(e){if(Yr.has(e))return!1;const t=e.split(" ");return t.length===0||t.length>2?!1:t.every(n=>n.length>=3&&n.length<=20&&/^[\p{L}-]+$/u.test(n)&&!Yr.has(n)&&!["not","without","never","maybe","possibly"].includes(n))}function Il(e,t,n={}){const r=Si(t);if(!r||r.length>40)return null;const o=wl.get(`${e}:${r}`);return o||(n.allowUnlisted&&e==="places"&&Sl(r)?{facet:e,label:r}:null)}const Al={effective:[],manual:[],automatic:[],dismissed:[],analysis:null,fingerprint:""};function fr(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:null}function Re(e){return typeof e=="string"&&e.trim()?e:null}function xl(e){return typeof e=="string"&&Qo.includes(e)?e:null}function Ht(e){const t=fr(e),n=xl(t?.facet),r=Re(t?.key),o=Re(t?.label);return!t||!n||!r||!o?null:{facet:n,key:r,label:o,origin:t.origin==="automatic"?"automatic":"manual",entityId:Re(t.entity_id??t.entityId)}}function El(e){const t=Ht(e);return t?{facet:t.facet,key:t.key,label:t.label}:null}function Tt(e,t){return Array.isArray(e)?e.flatMap(n=>{const r=t(n);return r?[r]:[]}):[]}function Cl(e){const t=fr(e),n=Re(t?.source_hash??t?.sourceHash),r=Re(t?.generator),o=Re(t?.extractor_version??t?.extractorVersion);if(!t||!n||!r||!o)return null;const i=Number(t.tag_count??t.tagCount),s=Number(t.analyzed_at??t.analyzedAt);return{sourceHash:n,generator:r,model:Re(t.model),extractorVersion:o,tagCount:Number.isFinite(i)?i:0,analyzedAt:Number.isFinite(s)?s:0,stale:t.stale===!0}}function Ai(e){const t=fr(e);return t?{effective:Tt(t.effective,Ht),manual:Tt(t.manual,Ht),automatic:Tt(t.automatic,Ht),dismissed:Tt(t.dismissed,El),analysis:Cl(t.analysis),fingerprint:Re(t.fingerprint)??""}:null}function wn(e){const t=new Map(Qo.map((n,r)=>[n,r]));return[...e].sort((n,r)=>(t.get(n.facet)??0)-(t.get(r.facet)??0)||n.label.localeCompare(r.label))}function xi(e,t){return`${e}/${t}`}function Ml(e){return e.trim()?Ut(e):""}function le(e){return xi(e.facet,e.key)}function V_(e){return e.origin==="manual"?"Added by you":"From analysis"}function qe(e,t){return e.filter(n=>le(n)!==t)}function Jr(e,t,n){const r=e??Al;if(!t.label.trim())return r;t=Ii(t,[...r.effective,...r.dismissed]);const o=Ml(t.label);if(!o)return r;const i=t.facet??"custom",s=xi(i,o);if(n==="add"){if(r.manual.some(u=>le(u)===s))return r;const l={facet:i,key:o,label:t.label.trim(),origin:"manual",entityId:null};return{...r,dismissed:qe(r.dismissed,s),manual:wn([...r.manual,l]),effective:wn([...qe(r.effective,s),l])}}if(n==="remove"){const l=r.effective.find(m=>le(m)===s);if(!l)return r;const u=[{facet:l.facet,key:l.key,label:l.label}];return{...r,effective:qe(r.effective,s),manual:qe(r.manual,s),dismissed:[...qe(r.dismissed,s),...u]}}if(!r.dismissed.find(l=>le(l)===s))return r;const c=r.automatic.find(l=>le(l)===s);return{...r,dismissed:qe(r.dismissed,s),effective:c?wn([...r.effective,c]):r.effective}}function j_(e,t){const n=le(t);return e.some(o=>le(o)===n)?e.filter(o=>le(o)!==n):[...e,t]}function G_(e){return{facet:e.facet,key:e.key,label:e.label}}function q_(e){return e.length===0?{}:{tags_all:e.map(t=>({facet:t.facet,label:t.label}))}}function U_(e,t){if(e.length!==t.length)return!1;const n=new Set(e.map(le));return t.every(r=>n.has(le(r)))}function Tl(e,t,n=8){const r=new Set(t.map(le));return e.filter(o=>!r.has(le(o))).slice(0,n)}const B_={calls:[]},H_=420,Zr=140,Qr=400,Rl={chat:"Routing chat",chain:"Running chained actions",list_chat_models:"Loading chat models",list_prompt_history:"Loading prompt history",plan_chat_command:"Planning chat command",record_prompt:"Saving prompt",slash_commands:"Loading commands"},$l=new Set(["get_notebook","list_chat_models","list_jobs","list_prompt_history","list_workspace_actions","slash_commands"]);function W_(e){return!$l.has(e)}function K_(e){const t=Rl[e];return t||e.split("_").filter(Boolean).map(n=>n[0]?.toUpperCase()+n.slice(1)).join(" ")}function Jt(e,t){const n=e.replace(/\s+/g," ").trim();return n.length<=t?n:`${n.slice(0,t)}… (${n.length} chars)`}function Nl(e){if(typeof e=="string")return Jt(e,Zr);if(typeof e=="number"||typeof e=="boolean")return String(e);try{return Jt(JSON.stringify(e)??String(e),Zr)}catch{return String(e)}}function z_(e){return Object.entries(e).filter(([,t])=>t!=null&&t!=="").map(([t,n])=>({name:t,value:Nl(n)}))}function X_(e){if(typeof e=="string")return Jt(e,Qr);if(Array.isArray(e))return e.length===1?"1 item":`${e.length} items`;if(!e||typeof e!="object")return"";const t=e;for(const n of["message","error","status"])if(typeof t[n]=="string"&&t[n])return Jt(t[n],Qr);return""}function Pl(e){const t=Math.max(0,e);return t<1e3?`${Math.round(t)}ms`:t<6e4?`${(t/1e3).toFixed(1)}s`:`${Math.floor(t/6e4)}m ${Math.round(t%6e4/1e3)}s`}function Y_(e){return e.phase==="running"?"working":e.phase==="failed"?"failed":Pl(e.elapsedMs)}function J_(e,t){const n={id:t.id,...t.turnId===void 0?{}:{turnId:t.turnId},tool:t.tool,args:t.args,phase:"running",elapsedMs:0,detail:"",expanded:!1};return{calls:[...e.calls,n].slice(-256)}}function Z_(e,t,n){return e.calls.some(r=>r.id===t)?{calls:e.calls.map(r=>r.id===t?{...r,phase:n.phase,elapsedMs:n.elapsedMs,detail:n.detail}:r)}:e}function Q_(e,t){return e.calls.some(n=>n.id===t)?{calls:e.calls.map(n=>n.id===t?{...n,expanded:!n.expanded}:n)}:e}function ev(e){return e.calls.filter(t=>t.phase==="running").length}function tv(e){switch(e){case"connecting":return"Opening your voice channel…";case"listening":return"Listening… speak anytime.";case"thinking":return"Transcribing…";case"speaking":return"Waiting for captions…";case"review":return"Review is on screen.";case"error":return"No captions. Voice could not connect.";case"off":return"No captions this session."}}function nv(e,t){const n=new Map(e.map(i=>[ue(i.slot),i])),r=new Map(t.map(i=>[i.artifactId,i])),o=new Map;for(let i=0;i<de;i+=1)for(let s=0;s<X;s+=1){const a=ue({row:i,column:s}),c=n.get(a),l=c?.outputArtifactId?r.get(c.outputArtifactId)??null:null,u=c?.label?.trim()||l?.label?.trim()||null;o.set(a,{token:a,cellId:c?.id??null,label:u===l?.artifactId?null:u,type:l?.type??c?.type??"empty",status:l?.status??(c?.outputArtifactId?"missing":c?.status??(c?"":"empty")),asset:l})}return o}function rv(e){if(e.type==="empty")return"Empty grid square";const t=[e.type.replaceAll("_"," ").toUpperCase()],n=e.asset?.duration;return n&&Number.isFinite(n)&&n>0&&t.push(me(n)),e.status&&e.status!=="ready"&&t.push(e.status.replaceAll("_"," ")),t.join(" · ")}function Ei(e,t=e.length,n=t){if(t!==n)return null;const r=sn(e.slice(0,t));if(r===void 0)return null;let o=t;for(;o<e.length&&/[a-z0-9]/iu.test(e[o]);)o+=1;return{start:t-r.length-1,end:o,prefix:r}}function ov(e,t,n=t.length,r=n,o){const i=Ei(t,n,r);return i?[...e.values()].filter(s=>s.token.slice(1).includes(i.prefix)&&(!o||!!(s.asset&&o.has(s.asset.artifactId)))).slice(0,12):[]}function iv(e,t,n=e.length,r=n){const o=Ei(e,n,r);if(!o)return null;const i=`@${ke(t)}`,s=e.slice(o.end),a=!s||/^[\p{L}\p{N}@]/u.test(s)?" ":"";return{value:`${e.slice(0,o.start)}${i}${a}${s}`,caret:o.start+i.length+(a||s.startsWith(" ")?1:0)}}function sv(e,t,n){const r=t&&n?t/n:1.7777777777777777,[o=1,i=1]=e.split(":").map(Number),s=o/i,a=Math.min(1,s/r),c=Math.min(1,r/s);return{ratio:e,x:(1-a)/2,y:(1-c)/2,w:a,h:c}}function av(e){return e.handler.kind==="tool"&&["list_entities","list_notebooks","asset_history","list_book_actions","search_archive"].includes(e.handler.tool)}function mr(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:null}function cv(e){const t=mr(e);if(!Array.isArray(t?.actions)||!Array.isArray(t.tools))throw new Error("The action catalog could not be loaded. Reconnect and try again.");return e}function lv(e,t){const n=new Set(e.flatMap(i=>[i.command,...i.aliases]).map(i=>i.toLowerCase())),r=t.filter(i=>i.category!=="project"||!n.has(i.command.toLowerCase())),o=new Set(r.flatMap(i=>[i.command,...i.aliases??[]]).map(i=>i.toLowerCase()));return[...r,...e.filter(i=>!o.has(i.command.toLowerCase())).map(i=>({command:i.command,description:i.description,aliases:i.aliases,workspaceActionId:i.id,category:"action",icon:"Play",size:"default",variant:"default",chevron:"right",params:Object.entries(i.inputSchema.properties??{}).filter(([s])=>s!=="book_id").map(([s,a])=>({name:s,description:a.description??Ol(s),required:i.inputSchema.required?.includes(s)??!1,type:a.type==="number"||a.type==="integer"?"number":a.type==="boolean"?"boolean":"string"}))}))]}function uv(e,t){return t?[...e,...["apply","cancel"].map(n=>({command:`/${n}`,description:n==="apply"?"Apply the reviewed action":"Cancel the pending action",category:"action",icon:n==="apply"?"Check":"X",size:"default",variant:"default",chevron:"right",params:[]}))]:[...e]}function Ol(e){const t=e.replace(/([a-z])([A-Z])/gu,"$1 $2").replaceAll(/[_-]/gu," ").replace(/\b(?:artifact|asset) (?:id|ref)\b/gu,"media").replace(/\bbook id\b/gu,"project").replace(/\b(notebook|cell|clip|track|entity) id\b/gu,"$1").replace(/\brefs\b/gu,"references").replace(/\bdb\b/gu,"dB");return t.charAt(0).toUpperCase()+t.slice(1)}function Ci(e){const t=e.oneOf??e.anyOf;return t?t.flatMap(n=>{const r=Ci(n);return r.length?r:[n]}):[]}function Ll(e,t){if("const"in e)return e.const===t;if(e.enum)return e.enum.includes(t);if(e.type==="null")return t===null;if(e.type==="array")return Array.isArray(t);if(e.type==="object"){const n=mr(t);return n?Object.entries(e.properties??{}).every(([r,o])=>!("const"in o)||o.const===n[r]):!1}return e.type==="integer"?Number.isInteger(t):!e.type||typeof t===e.type}function Fl(e,t){const n=Ci(e);if(!n.length)return e;const r=n.find(a=>Ll(a,t))??n.find(a=>a.type!=="null")??n[0],{anyOf:o,oneOf:i,...s}=e;return{...s,...r}}function Bn(e,t=!1){if("const"in e)return e.const;if(e.default!==void 0)return structuredClone(e.default);if(!t)return;const n=Fl(e,void 0);if("const"in n)return n.const;if(n.type==="object"){const r=new Set(n.required??[]);return Object.fromEntries(Object.entries(n.properties??{}).map(([o,i])=>[o,Bn(i,r.has(o))]).filter(([,o])=>o!==void 0))}if(n.type==="array")return Array.from({length:n.minItems??0},()=>Bn(n.items??{},!0));if(n.enum?.length===1)return n.enum[0];if(n.type==="boolean")return!1;if(n.type==="null")return null}function dv(e,t){const n=mr(Bn(e.inputSchema,!0))??{},r=e.inputSchema.properties??{},o={...n,...e.initialArgs};r._provider&&e.generation&&(o._provider=e.generation.provider);for(const[i,s]of[["book_id",t.bookId],["notebook_id",t.notebookId],["sequence_id",t.sequenceId],["cell_id",t.cellId],["base_revision",t.sequenceRevision],["sequence_revision",t.sequenceRevision],["source_surface","ui"],["actor","videobook-user"]])s&&r[i]&&(o[i]=s);if(e.target.kind==="asset"&&e.target.argument&&t.assetId){const i=t.choices.asset_id?.find(s=>s.value===t.assetId)?.detail;(!e.target.mediaKinds||e.target.mediaKinds.some(s=>s===i))&&(o[e.target.argument]=e.target.multiple?t.assetIds??[t.assetId]:t.assetId)}return e.target.kind==="cell"&&e.target.multiple&&e.target.argument&&t.cellIds?.length&&(o[e.target.argument]=t.cellIds),e.target.kind==="cell"&&!e.target.multiple&&e.target.argument&&t.cellId&&(o[e.target.argument]=t.cellId),r.object_hash&&t.assetId&&t.media?.[t.assetId]?.objectHash&&(o.object_hash=t.media[t.assetId].objectHash),o}function fv(e,t){return e.scope!=="global"&&!t.bookId?"Open or create a project first.":e.scope==="notebook"&&!t.notebookId?"Open a notebook first.":e.scope==="sequence"&&!t.sequenceId?"Open a project with a sequence first.":null}function mv(e,t){const n=t.trim().toLowerCase().replace(/^\//u,"").split(/\s+/u).filter(Boolean);return e.filter(r=>{const o=[r.title,r.command,r.description,r.group,...r.aliases,...r.keywords].join(" ").toLowerCase();return n.every(i=>o.includes(i))}).sort((r,o)=>{const i=s=>[s.command,...s.aliases].some(a=>a.replace(/^\//u,"").toLowerCase()===n.join(" "));return Number(i(o))-Number(i(r))||r.group.localeCompare(o.group)||r.title.localeCompare(o.title)})}const Rt=new zs({nodes:{doc:{content:"inline*"},text:{group:"inline"},reference:{inline:!0,group:"inline",atom:!0,selectable:!0,attrs:{token:{}},leafText:e=>String(e.attrs.token),toDOM:e=>["span",{"data-reference":String(e.attrs.token),contenteditable:"false"},String(e.attrs.token)],parseDOM:[{tag:"span[data-reference]",getAttrs:e=>{const t=e.getAttribute("data-reference")??"";return ei(t)?{token:t}:!1}}]}}});function Dl(e,t=!0){const n=[];let r=0;if(t)for(const o of ar(e))o.index>r&&n.push(Rt.text(e.slice(r,o.index))),n.push(Rt.nodes.reference.create({token:o.raw})),r=o.end;return r<e.length&&n.push(Rt.text(e.slice(r))),Rt.nodes.doc.create(null,n)}function eo(e,t=0,n=e.content.size){return e.textBetween(t,n,"",r=>String(r.attrs.token??""))}function pv(e,t,n){return{start:eo(e,0,Math.min(t,n)).length,end:eo(e,0,Math.max(t,n)).length,backward:t>n}}function to(e,t,n=1){let r=0,o=e.content.size;return e.forEach((i,s)=>{const a=i.isText?i.text.length:String(i.attrs.token??"").length;t>=r&&t<=r+a&&(o=i.isText?s+t-r:t===r||t<r+a&&n<0?s:s+i.nodeSize),r+=a}),Math.max(0,Math.min(e.content.size,o))}function Vl(e,t,n=1){const r=to(e.doc,t.start,t.start===t.end?n:-1),o=to(e.doc,t.end,n);return e.setSelection(Xs.create(e.doc,t.backward?o:r,t.backward?r:o))}function gv(e,t,n,r=!0){const o=Dl(t,r),i=e.doc.content.findDiffStart(o.content);if(i!==null){const s=e.doc.content.findDiffEnd(o.content),a=Math.max(0,i-Math.min(s.a,s.b));e.replaceWith(i,s.a+a,o.content.cut(i,s.b+a))}return Vl(e,n)}function $t(e,t,n,r){const o=e.slice(0,t)+r+e.slice(n),i=t+r.length;return{value:o,selectionStart:i,selectionEnd:i}}function no(e,t){return e.lastIndexOf(`
11
+ `,Math.max(0,t-1))+1}function ro(e,t){const n=e.indexOf(`
12
+ `,t);return n===-1?e.length:n}function oo(e,t){let n=t;for(;n>0&&/\s/.test(e[n-1]);)n-=1;for(;n>0&&!/\s/.test(e[n-1]);)n-=1;return n}function jl(e,t){let n=t;for(;n<e.length&&/\s/.test(e[n]);)n+=1;for(;n<e.length&&!/\s/.test(e[n]);)n+=1;return n}function hv(e){const{value:t,selectionStart:n,selectionEnd:r,key:o,ctrlKey:i,altKey:s,yankText:a}=e,c=o.toLowerCase();if(s&&c==="b"){const l=oo(t,n);return{value:t,selectionStart:l,selectionEnd:l}}if(s&&c==="f"){const l=jl(t,r);return{value:t,selectionStart:l,selectionEnd:l}}if(!i)return null;if(c==="a"){const l=no(t,n);return{value:t,selectionStart:l,selectionEnd:l}}if(c==="e"){const l=ro(t,r);return{value:t,selectionStart:l,selectionEnd:l}}if(c==="b"){const l=Math.max(0,n-1);return{value:t,selectionStart:l,selectionEnd:l}}if(c==="f"){const l=Math.min(t.length,r+1);return{value:t,selectionStart:l,selectionEnd:l}}if(c==="y")return $t(t,n,r,a);if(c==="k"){const l=n===r?Math.min(t.length,ro(t,r)+1):r;return{...$t(t,n,l,""),killedText:t.slice(n,l)}}if(c==="u"){const l=n===r?no(t,n):n;return{...$t(t,l,r,""),killedText:t.slice(l,r)}}if(c==="w"){const l=n===r?oo(t,n):n;return{...$t(t,l,r,""),killedText:t.slice(l,r)}}return null}const Mi="videobook.elevenlabs-voice",Gl="/speak ";function ql(e){return/^\/speak(\s|$)/.test(e)}function bv(e,t){return t&&e.some(n=>n.voiceId===t)?t:e[0]?.voiceId??""}function io(e,t,n){if(e.length===0)return t;const r=e.findIndex(s=>s.voiceId===t),i=((r<0?0:r)+n+e.length)%e.length;return e[i].voiceId}function yv(){return typeof window>"u"?null:window.localStorage.getItem(Mi)}function _v(e){typeof window>"u"||!e||window.localStorage.setItem(Mi,e)}function vv(e,t,n){return e.key==="ArrowDown"?{type:"select",voiceId:io(t,n,1)}:e.key==="ArrowUp"?{type:"select",voiceId:io(t,n,-1)}:e.key==="Tab"?n?{type:"select",voiceId:n}:{type:"ignore"}:e.ctrlKey&&e.code==="Space"?{type:"toggle"}:e.key==="Escape"?{type:"dismiss"}:{type:"ignore"}}function kv(e,t){if(!(!ql(e)||!t))return{speakVoiceId:t}}function wv(e){if(e.command==="/voices")return{kind:"prefill",nextInput:Gl,message:"Choose a voice, then type the speech text."};if(!e.hasNotebook)return{kind:"error",message:"Open a notebook before speaking."};const t=e.text.trim(),n=e.voiceId?.trim()??"";return t?n?{kind:"generate",text:t,voiceId:n}:{kind:"error",message:"Select a voice before speaking."}:{kind:"error",message:"Type the text to speak after /speak."}}function Sv(e,t){const n=e.trim().toLowerCase();return t.some(r=>[r.label,...r.aliases??[]].some(o=>o.toLowerCase()===n))}function Iv(e,t,n=Number.POSITIVE_INFINITY){const r=t.toLowerCase(),o=e.filter(s=>[s.command,...s.aliases??[],s.description??""].join(" ").toLowerCase().includes(r)).sort((s,a)=>{const c=l=>[l.command,...l.aliases??[]].some(u=>u.slice(1).toLowerCase()===r);return Number(c(a))-Number(c(s))});if(r)return o.slice(0,n);const i=o.find(s=>s.command==="/download");return i?[i,...o.filter(s=>s!==i)].slice(0,n):o.slice(0,n)}function Av(e){const t=e.match(/^\s*\/apply(?:\s+([\s\S]*?))?\s*$/iu);return t?{promptOverride:(t[1]?.trim()??"")||null}:null}function xv(e,t){const n=e.nextInput??(e.ok?void 0:t);return n===void 0?null:{value:n,select:e.selectInput??!e.ok}}function Ev(e,t){return t.ok?e.trim().toLowerCase()==="/cancel"?{status:"cancelled",message:t.message}:t.nextInput?.startsWith("/apply")?{status:"review",message:t.message}:{status:/queued|started|running|processing/i.test(t.message)?"queued":"completed",message:t.message}:{status:"review",message:t.message}}const Wt="videobook.composer-drafts.v1",Ul=50,Ti=1e6;function Ri(e){const t=[],n=new Set;let r=0;for(const o of[...e].reverse()){if(!Array.isArray(o)||o.length!==2)continue;const[i,s]=o;if(!(typeof i!="string"||!i.startsWith("chat:")||i.length<=5||i.length>128||n.has(i))&&(n.add(i),!(typeof s!="string"||!s||r+s.length>Ti)&&(t.push([i,s]),r+=s.length,t.length===Ul)))break}return t.reverse()}function Cv(){if(typeof window>"u")return new Map;try{const e=window.sessionStorage.getItem(Wt);if(!e||e.length>Ti*6+1e4)return new Map;const t=JSON.parse(e);return new Map(Array.isArray(t)?Ri(t):[])}catch{return new Map}}function Mv(e,t,n){if(typeof window>"u")return;const r=new Map(e);r.delete(t),r.set(t,n);const o=Ri([...r]);try{o.length===0?window.sessionStorage.removeItem(Wt):window.sessionStorage.setItem(Wt,JSON.stringify(o))}catch{try{window.sessionStorage.removeItem(Wt)}catch{return}}}const so=new WeakMap,dn='.command-composer [aria-label="Videobook command input"]',$i='input:not([type="file"]), textarea, select, [contenteditable="true"], video[controls], audio[controls]',Bl='dialog[open], :popover-open, [aria-modal="true"], [role="menu"], details.canvas-add-menu[open]';function nt(e){const t=so.get(e);if(t)return t;const n={epoch:0,scope:"",enabled:!1,composerOwnedFocus:!1,modality:"initial",pending:null,frame:null};return so.set(e,n),n}function Hl(e,t){const n=t.pending;if(!n)return;const r=n.resolve();if(!(!t.enabled&&(!(r instanceof HTMLElement)||r.closest(".command-composer")))&&(t.pending=null,!(n.epoch!==t.epoch||n.scope!==t.scope)&&!(!r||e.visibilityState==="hidden"))){if(r instanceof HTMLElement){if(!r.isConnected||r.matches(':disabled, [aria-disabled="true"]')||r.closest("[inert], [hidden]"))return;const o=[...e.querySelectorAll(Bl)].at(-1);if(o&&!o.contains(r))return;const i=e.activeElement;if(i&&i!==r&&i.matches($i)&&!i.closest("[hidden], [inert]")||o&&i instanceof Element&&o.contains(i)&&!i.closest(".command-composer")&&i!==r)return}r.focus({preventScroll:!0}),n.afterFocus?.()}}function pr(e,t){t.frame!==null&&e.defaultView?.cancelAnimationFrame(t.frame),t.frame=e.defaultView?.requestAnimationFrame(()=>{t.frame=null,Hl(e,t)})??null}function Hn(e,t){t.pending={epoch:t.epoch,scope:t.scope,resolve:()=>e.querySelector(dn)},pr(e,t)}function fn(e=()=>document.querySelector(dn),t){const n=document,r=nt(n),o={epoch:r.epoch,scope:r.scope,resolve:e,afterFocus:t};return()=>{r.epoch!==o.epoch||r.scope!==o.scope||(r.pending=o,pr(n,r))}}function Tv(){return nt(document).modality==="pointer"?fn():()=>{}}function Rv(e){const t=nt(document).modality==="pointer",n=!!e?.closest(".command-composer");return fn(()=>{const r=document.querySelector(dn);return!(t||n||e===document.body||!e?.isConnected)||!r||r.closest("[hidden]")?e:r.matches('[aria-disabled="true"]')?r.closest(".command-composer")?.querySelector('button[aria-label="Open actions"]:not(:disabled)')??null:r})}function $v(e,t){const n=ne.c(5);let r;n[0]===Symbol.for("react.memo_cache_sentinel")?(r=[],n[0]=r):r=n[0],_.useLayoutEffect(Wl,r);let o,i;n[1]!==t||n[2]!==e?(o=()=>{const s=nt(document),a=s.scope!==e,c=!s.enabled&&t;if(s.scope=e,s.enabled=t,a&&(s.pending=null),!!t){if(s.pending){pr(document,s);return}if(a||c){if(c&&s.composerOwnedFocus&&s.modality!=="touch"&&document.activeElement===document.body){Hn(document,s);return}s.modality==="initial"&&document.activeElement!==document.body||s.modality!=="initial"&&!(a&&s.modality==="pointer")||window.matchMedia("(pointer: fine)").matches&&Hn(document,s)}}},i=[t,e],n[1]=t,n[2]=e,n[3]=o,n[4]=i):(o=n[3],i=n[4]),_.useLayoutEffect(o,i)}function Wl(){const e=nt(document),t=()=>{e.epoch=e.epoch+1,e.pending=null},n=s=>{t(),e.modality=s.pointerType==="touch"?"touch":"pointer"},r=()=>{t(),e.modality="keyboard"},o=s=>{const a=s.target;e.composerOwnedFocus=a instanceof Element&&a.matches(dn)},i=s=>{if(s.detail===0||e.modality!=="pointer")return;const a=s.target;!(a instanceof Element)||a.closest($i)||a.closest("[data-composer-focus]")?.getAttribute("data-composer-focus")==="return"&&Hn(document,e)};return document.addEventListener("pointerdown",n,!0),document.addEventListener("keydown",r,!0),document.addEventListener("focusin",o,!0),document.addEventListener("click",i,!0),document.defaultView?.addEventListener("blur",t),()=>{t(),document.removeEventListener("pointerdown",n,!0),document.removeEventListener("keydown",r,!0),document.removeEventListener("focusin",o,!0),document.removeEventListener("click",i,!0),document.defaultView?.removeEventListener("blur",t),e.frame!==null&&document.defaultView?.cancelAnimationFrame(e.frame),e.frame=null}}function Kl(){const e=nt(document);e.epoch+=1,e.pending=null}function Nv(e){Kl();const t=e?.getAttribute("aria-label");if(!!t?.includes("fullscreen")){if(e?.isConnected){e.focus();return}t&&document.querySelector(`[aria-label="${CSS.escape(t)}"]`)?.focus();return}if(e?.isConnected){e.focus();return}document.querySelector('[aria-label="Videobook command input"]')?.focus()}function Pv(e,t=n=>window.requestAnimationFrame(n)){if(typeof document>"u"){t(()=>e()?.focus({preventScroll:!0}));return}fn(e)()}function zl(e){const t=h(e),r=(Array.isArray(t?.content)?t.content:[]).map(h).find(o=>o?.type==="text");return typeof r?.text=="string"?r.text:null}function Ov(e){const t=zl(e);let n=e;if(t)try{n=JSON.parse(t)}catch{return{values:[],offset:0,hasMore:!1}}const r=h(n),o=Array.isArray(r?.entries)?r.entries:[],i=h(r?.page);return{values:o.flatMap(s=>{const a=h(s);return typeof a?.prompt=="string"?[a.prompt]:[]}),offset:typeof i?.offset=="number"?i.offset:0,hasMore:i?.has_more===!0}}function Lv(e){if(e.values.length===0)return null;let t=e.cursor,n=e.draft;if(t===-1){if(e.direction===1)return null;n=e.current,t=e.values.length-1}else if(t+=e.direction,t<0&&(t=0),t>=e.values.length)return{cursor:-1,draft:n,value:n};return{cursor:t,draft:n,value:e.values[t]??e.current}}const Xl=/page is hidden|paused for media playback|You are offline/i;function Yl(e,t){return t?e==="connecting"||e==="thinking"||e==="listening"||e==="speaking":!1}function Jl(e){const t=e.voicePhase;return e.sending?{kind:"sending",label:"Sending",busy:!0}:t==="error"?{kind:"error",label:"Connection error",busy:!1}:t==="review"?{kind:"review",label:"Review on screen",busy:!1}:e.retrying?{kind:"retrying",label:"Retrying reply",busy:!0}:e.mcpRunning>0||Yl(t,e.pendingReview)?{kind:"preparing",label:"Preparing an action",busy:!0}:t==="connecting"?/allow microphone/i.test(e.voiceMessage??"")?{kind:"permission",label:"Allow microphone access",busy:!0}:{kind:"connecting",label:"Connecting voice",busy:!0}:t==="thinking"?{kind:"waiting",label:"Waiting for reply",busy:!0}:t==="speaking"?{kind:"speaking",label:"Speaking",busy:!1}:t==="listening"?{kind:"listening",label:"Listening",busy:!1}:t==="off"&&Xl.test(e.voiceMessage??"")?{kind:"paused",label:"Voice paused. Start voice to resume.",busy:!1}:{kind:"idle",label:t==="off"?"Offline":"",busy:!1}}const Zl=new Set(["idle","listening","review"]);function Ql(e){return!Zl.has(e.kind)&&e.label!==""}function Fv(e){if(!e)return null;const t=Jl({sending:!1,mcpRunning:0,voicePhase:e.phase,voiceMessage:e.message,retrying:e.phase!=="off"&&e.retrying,pendingReview:e.pendingReview}),n=Ql(t)&&t.kind!=="connecting"&&t.kind!=="permission",r=n?t.kind==="error"&&e.message||t.label:null,o=e.phase==="off"||e.phase==="error"?null:e.fallbackReason??null;return!r&&!o&&!e.playbackBlocked?null:{message:r,busy:n&&t.busy,error:t.kind==="error",fallbackReason:o,playbackBlocked:e.playbackBlocked}}const Ni=e=>new Audio(e);function eu(e=Ni){let t=null,n=null;const r=new Set,o=()=>{for(const a of r)a(n)},i=()=>{t?.pause(),t=null,n=null,o()};return{get playingVoiceId(){return n},toggle:(a,c)=>{if(!c)return;if(n===a){i();return}t?.pause();const l=e(c);t=l,n=a,o(),l.play().catch(()=>{t===l&&i()}),l.onended=()=>{t===l&&i()}},stop:i,subscribe(a){return r.add(a),()=>{r.delete(a)}},dispose(){t?.pause(),t=null,n=null,r.clear()}}}function Dv(e){const t=ne.c(13),n=Ni;let r;t[0]!==n?(r=()=>eu(n),t[0]=n,t[1]=r):r=t[1];const[o]=_.useState(r),[i,s]=_.useState(null);let a,c;t[2]!==o?(a=()=>{const p=o.subscribe(s);return()=>{p(),o.dispose()}},c=[o],t[2]=o,t[3]=a,t[4]=c):(a=t[3],c=t[4]),_.useEffect(a,c);let l;t[5]!==o?(l=(p,g)=>{o.toggle(p,g)},t[5]=o,t[6]=l):l=t[6];const u=l;let m;t[7]!==o?(m=()=>{o.stop()},t[7]=o,t[8]=m):m=t[8];const f=m;let d;return t[9]!==i||t[10]!==f||t[11]!==u?(d={playingVoiceId:i,toggle:u,stop:f},t[9]=i,t[10]=f,t[11]=u,t[12]=d):d=t[12],d}const tu=["auto","openai","xai"],Pi={auto:"Auto",openai:"OpenAI",xai:"xAI"},nu={auto:"Tries OpenAI, then xAI if it cannot connect",openai:null,xai:null};function Vv(e){return Pi[e]}function ru(e){return e.modelSelectable?e.chatModels.map((t,n)=>({id:`model:${t.id}`,position:n,label:t.label,detail:t.id,note:t.description,checked:t.id===e.selectedModel,choice:{kind:"model",model:t.id}})):[]}function ou(e,t){const n=e.voiceMode;return n?tu.map((r,o)=>({id:`speech:${r}`,position:t+o,label:Pi[r],detail:null,note:nu[r],checked:r===n,choice:{kind:"speech",mode:r}})):[]}function jv(e){const t=[],n=ru(e);n.length>0&&t.push({id:"model",label:"Chat model",items:n});const r=ou(e,n.length);return r.length>0&&t.push({id:"speech",label:"Speech",items:r}),t}function Gv(e){return e.flatMap(t=>t.items)}function qv(e){const t=e.findIndex(n=>n.checked);return t===-1?0:t}function Uv(e,t,n){return e.length===0?null:n==="ArrowDown"?(t+1)%e.length:n==="ArrowUp"?(t-1+e.length)%e.length:n==="Home"?0:n==="End"?e.length-1:null}const Bv="Collapse chat";function Hv(e){return e==="selection"||e==="action"||e==="expand"||e==="reopen"}function Wv(e,t){if(!e||!t||e.id!==t.id)return!1;const n=new Set(e.cells.map(r=>r.id));return t.cells.some(r=>!n.has(r.id))}function Kv(e){return e}function zv(e){e.stopVoice?.(),e.pauseMedia?.(),e.setOpen(!1)}function Xv(e){if(e)for(const t of e.querySelectorAll("video, audio"))t instanceof HTMLMediaElement&&t.pause()}function Yv(e){return e==="applied"||e==="timeline"?"media":"music"}function Jv(e){return e.dockOpen&&e.panelHasHeader&&!e.reviewPriority}function Zv(e){return e.musicSession?!1:e.cellInspector}const O={originX:0,originY:0,squareSize:240,gap:24,columnPitch:264,rowPitch:264,columnCount:X,maximumRowCount:de,minimumRowCount:3,trailingRowCount:1,detailZoomFloor:.5};function Oi(e){return{row:Math.round(e.row),column:Math.round(e.column)}}function Fe(e){const t=Oi(e);return{row:Math.min(de-1,Math.max(0,t.row)),column:Math.min(X-1,Math.max(0,t.column))}}function ve(e){return`${e.row}:${e.column}`}function iu(e){return Fe({row:Math.round((e.y-O.originY)/O.rowPitch),column:Math.round((e.x-O.originX)/O.columnPitch)})}function Qe(e){const t=Fe(e);return{x:O.originX+t.column*O.columnPitch,y:O.originY+t.row*O.rowPitch}}function Qv(e,t,n){const r=e.find(i=>i.id===t),o=Fe(r?.data.kind==="timeline"?{...n,column:0}:n);return e.map(i=>i.id===t?{...i,position:Qe(o)}:i)}function su(e,t,n){const r=e.find(c=>c.id===t);if(!r)return[...e];const o=Fe(r.data.kind==="timeline"?{...n,column:0}:n),i=r.data.slot,s=new Set(Ee({type:String(r.data.kind),slot:o}).map(ve)),a=e.find(c=>c.id!==t&&Ee({type:String(c.data.kind),slot:c.data.slot}).some(l=>s.has(ve(l))));return a&&(r.data.kind==="timeline"||a.data.kind==="timeline")?e.map(c=>c.id===t?{...c,position:Qe(i)}:c):e.map(c=>{const l=c.id===t?o:c.id===a?.id?i:null;return l?{...c,position:Qe(l),data:{...c.data,slot:l}}:c})}function ek(e,t,n,r){const o=new Set(n);o.add(t);const i=e.filter(d=>o.has(d.id));if(i.length<=1)return su(e,t,r);const s=i.find(d=>d.id===t);if(!s)return[...e];const a=Oi(r),c=a.row-s.data.slot.row,l=a.column-s.data.slot.column,u=new Map(i.map(d=>{const p={row:d.data.slot.row+c,column:d.data.slot.column+l};return[d.id,p]})),m=new Set(i.flatMap(d=>Ee({type:String(d.data.kind),slot:u.get(d.id)})).map(ve));return[...u.values()].some(d=>!Zs(d))||i.some(d=>d.data.kind==="timeline"&&l!==0)||e.some(d=>!o.has(d.id)&&Ee({type:String(d.data.kind),slot:d.data.slot}).some(p=>m.has(ve(p))))?e.map(d=>o.has(d.id)?{...d,position:Qe(d.data.slot)}:d):e.map(d=>{const p=u.get(d.id);return p?{...d,position:Qe(p),data:{...d.data,slot:p}}:d})}function tk(e,t){const n=new Map(e.map(r=>[r.id,ve(r.data.slot)]));return t.filter(r=>n.get(r.id)!==ve(r.data.slot))}const au=new Set(["image","generate_image","character"]);function cu(e){return au.has(e)}function gr(e){return e?Fe(e):null}const lu=new Set(["generate_image","generate_audio","extract_audio"]);function hr(e,t=[],n=null){const r=Ke(e);if(t.length>0){const s=Math.max(...t.map(l=>l.row))+1,c=t.every(l=>l.row===0)?0:t[0].column;return Lr(s,c,r)}const o=gr(n);if(o)return Vn(o,r);let i=-1;for(const s of e)cu(s.type)&&s.slot.row>i&&(i=s.slot.row);return Lr(i+1,0,r)}function mn(e,t=[],n=null){const r=Ke(e);if(t.length===0){const a=gr(n);return Dn(a??{row:0,column:0},r)}const o=Math.max(...t.map(a=>a.column)),s={row:Math.min(...t.map(a=>a.row)),column:Math.min(o+1,X-1)};return Dn(s,r)}function nk(e,t,n=null){if(e==="timeline")return Ys(Ke(t));if(e==="generate_video")return hr(t,[],n);if(lu.has(e))return mn(t,[],n);const r=gr(n);return r?Dn(r,Ke(t)):Js(Ke(t))}function pn(e){return Number.isFinite(e)&&e>0?e:1}function rk(e){return 1/Math.max(pn(e),O.detailZoomFloor)}function uu(e,t=0){return!Number.isFinite(e)||e<=0?1:Math.max(Number.isFinite(t)?t:0,e/Li())}function Li(){return O.originX*2+X*O.squareSize+(X-1)*O.gap}function du(e,t){if(!Number.isFinite(e)||e<=0)return O.minimumRowCount;const n=e/pn(t);return Math.max(O.minimumRowCount,Math.ceil((n-O.originY*2+O.gap)/O.rowPitch))}function ok(e,t){const n=pn(t);return{width:e.width*n,height:e.height*n}}function ik(e,t,n=0){return{x:0,y:Number.isFinite(n)?n:0,zoom:pn(t)}}function sk(e,t){return iu(e)}function ak(e,t){const n=e.x-O.originX,r=e.y-O.originY;if(n<0||r<0)return null;const o=Math.floor(n/O.columnPitch),i=Math.floor(r/O.rowPitch);if(o<0||o>=t.columnCount||i<0||i>=t.rowCount)return null;const s=t.minColumn+o;return s>t.maxColumn||n-o*O.columnPitch>=O.squareSize||r-i*O.rowPitch>=O.squareSize?null:{row:i,column:s}}function ck(e,t={}){const n=t.preview?[...e,Fe(t.preview)]:e,r=Math.max(-1,...n.map(a=>Fe(a).row)),o=Math.min(de,Math.max(O.minimumRowCount,du(t.viewportHeight??0,t.zoom??1),r+2)),i=Li(),s=O.originY*2+o*O.squareSize+Math.max(0,o-1)*O.gap;return{rowCount:o,columnCount:X,minColumn:0,maxColumn:X-1,centerX:i/2,width:i,height:s}}const Fi="post_to_x";function Ve(e){return e?.inputs?.sourceOperation===Fi}function fu(){return"X · POSTED"}function mu(e){const t=Date.parse(e);return Number.isFinite(t)?new Date(t).toISOString().replace("T"," ").replace(/\.\d{3}Z$/," UTC"):e}function pu(e){const t=h(e);if(!t)return null;const n=W(t.tweetId??t.tweet_id),r=W(t.tweetUrl??t.tweet_url);return!n||!r?null:{tweetId:n,tweetUrl:r}}function gu(e){const t=h(e);if(!t)return null;const n=typeof t.replyNumber=="number"?t.replyNumber:typeof t.reply_number=="number"?t.reply_number:null,r=W(t.message);return n===null||!r?null:{replyNumber:n,message:r}}function lk(e){if(e?.sourceOperation!==Fi)return null;const t=W(e.tweetId??e.tweet_id),n=W(e.tweetUrl??e.tweet_url),r=W(e.postedAt??e.posted_at);if(!t||!n||!r)return null;const o=Array.isArray(e.replies)?e.replies.flatMap(s=>{const a=pu(s);return a?[a]:[]}):[],i=e.status==="partially_posted"?"partially_posted":"posted";return{badge:"Posted to X",tweetId:t,tweetUrl:n,postedAt:r,postedAtLabel:mu(r),replyCount:o.length,replyLabel:o.length===1?"1 reply":`${o.length} replies`,replies:o,status:i,followupError:gu(e.followupError??e.followup_error)}}const hu={run_notebook:"Run notebook",semantic_index:"Semantic index",extract_waveform:"Extract waveform",extract_video_poster:"Create video poster",extract_audio:"Extract audio",transcribe:"Transcribe"},bu={attention:"Needs attention",running:"Running",queued:"Queued",finished:"Finished"},yu=["attention","running","queued","finished"];function br(e){const t=hu[e];if(t)return t;const n=e.replace(/[_-]+/g," ").trim();return n.length===0?e:n.charAt(0).toUpperCase()+n.slice(1)}function ao(e){const t=Math.max(0,e);if(t<1e4)return`${(t/1e3).toFixed(1)}s`;const n=Math.round(t/1e3);if(n<60)return`${n}s`;const r=Math.floor(n/60),o=n%60;return r<60?`${r}m ${String(o).padStart(2,"0")}s`:`${Math.floor(r/60)}h ${String(r%60).padStart(2,"0")}m`}function yr(e){return e.slice(0,8)}function _u(e){switch(e){case"queued":return"queued";case"running":case"completing":return"running";case"failed":return"failed";case"aborted":return"cancelled";default:return"done"}}function vu(e,t){switch(e){case"awaiting-output":return t?"review":"running";case"failed":return"failed";case"queued":return"queued";case"omitted":return"omitted";default:return"done"}}function Di(e){switch(e){case"review":case"failed":return"attention";case"running":return"running";case"queued":return"queued";default:return"finished"}}function Vi(e){return e.toUpperCase()}function ji(e){return e?{tag:ue(e.slot),label:e.label??e.prompt??null}:{tag:null,label:null}}function ku(e,t){if(!e.artifactId)return{tag:null,label:null};const n=t.find(r=>!Ve(r)&&r.outputArtifactId===e.artifactId);return n?ji(n):{tag:null,label:`artifact ${yr(e.artifactId)}`}}function co(e,t){const n=e?.[t];return typeof n=="string"&&n.trim().length>0?n:null}function wu(e){const t=[co(e.payload,"provider"),co(e.payload,"model")].filter(n=>n!==null);return t.length>0?t.join(" · "):null}function Su(e){return e==="queued"||e==="running"||e==="completing"?["cancel"]:e==="failed"||e==="aborted"?["retry"]:[]}function Iu(e,t){const n=e.startedAt===null?null:ao((e.finishedAt??t)-e.startedAt);switch(e.state){case"queued":return{summary:"Waiting for a worker",note:`waiting ${ao(t-e.enqueuedAt)}`,duration:null,live:!1};case"running":return{summary:`${br(e.type)} in progress`,note:n?`${n} elapsed`:null,duration:null,live:!0};case"completing":return{summary:"Finishing up",note:n?`${n} elapsed`:null,duration:null,live:!0};case"failed":return{summary:e.error?.message??"Failed without an error message",note:null,duration:n,live:!1};case"aborted":return{summary:e.error?.message??"Cancelled",note:"nothing was written",duration:n,live:!1};default:return{summary:"Completed",note:null,duration:n,live:!1}}}function Au(e){const t=e.error?.code??null;return t&&t!=="Error"?t:null}function xu(e,t,n){const r=_u(e.state),o=r==="done"&&e.state!=="done"?e.state.toUpperCase():Vi(r),i=e.error?[`${e.error.code?`${e.error.code} · `:""}${e.error.message}`,`operation ${e.operationId} · enqueued ${new Date(e.enqueuedAt).toLocaleString()}`].join(`
13
+ `):null;return{key:`job:${e.id}`,providerTask:e.providerTask,source:{kind:"job",jobId:e.id},tone:r,band:Di(r),statusLabel:o,title:br(e.type),detail:wu(e),target:ku(e,t),...Iu(e,n),errorCode:Au(e),errorDetail:i,attempt:`${e.attempts}/${e.maxAttempts}`,timestamp:e.enqueuedAt,sortAt:e.finishedAt??e.startedAt??e.enqueuedAt,actions:Su(e.state)}}function Gi(e){const t=e.plan.stages.find(n=>n.kind==="queued"&&n.jobType==="generation");return t?.kind==="queued"?t:null}function Eu(e,t){const n=[];return t&&e.status!=="continued"&&e.status!=="omitted"&&n.push("continue"),(e.status==="failed"||e.status==="awaiting-output"&&t)&&n.push("retry","switch","omit"),n}function Cu(e){const t=Gi(e),n=[];return t?.estimatedCostUsd!==void 0&&n.push(`est. $${t.estimatedCostUsd.toFixed(2)}`),e.outputArtifactId&&n.push(`output ${yr(e.outputArtifactId)}`),n.length>0?n.join(" · "):null}function Mu(e,t){const n=Cu(e);switch(e.status){case"awaiting-output":return{summary:t?"Output ready — review before inserting":"Waiting for generated media",note:n};case"failed":return{summary:e.error??"Generation failed",note:n};case"queued":return{summary:"Generation queued",note:n};case"continued":return{summary:"Generation complete",note:n};case"omitted":return{summary:"Left out of the sequence",note:e.outputArtifactId?`output kept as ${yr(e.outputArtifactId)}`:null};default:return{summary:"Generation finished",note:n}}}function Sn(e){const t=Date.parse(e);return Number.isFinite(t)?t:0}function Tu(e,t,n){return t?.type.startsWith("generate_")?br(t.type):n?"Generate":e.plan.summary}function Ru(e,t,n){const r=n.some(c=>c.artifactId===e.outputArtifactId&&c.status==="ready"&&!!c.mediaUrl),o=vu(e.status,r),i=Gi(e),s=t.find(c=>c.id===e.cellId),a=i?[i.provider,i.model??i.tool].filter(c=>!!c).join(" · "):null;return{key:`plan:${e.planId}`,source:{kind:"plan",planId:e.planId},tone:o,band:Di(o),statusLabel:Vi(o),title:Tu(e,s,i),detail:a&&a.length>0?a:null,target:ji(s),...Mu(e,r),errorCode:null,errorDetail:e.error,attempt:"1/1",timestamp:Sn(e.createdAt),sortAt:Sn(e.updatedAt)||Sn(e.createdAt),duration:null,live:o==="running",actions:Eu(e,r)}}function uk({jobs:e,plans:t,cells:n,assets:r=[],now:o}){return[...t.map(i=>Ru(i,n,r)),...e.map(i=>xu(i,n,o))]}function $u(e){return e.map((t,n)=>({...t,summary:n===0?"Next up":`${n} ahead in queue`}))}function Nu(e,t){switch(e){case"running":return[...t].sort((n,r)=>n.sortAt-r.sortAt);case"queued":return $u([...t].sort((n,r)=>n.timestamp-r.timestamp));default:return[...t].sort((n,r)=>r.sortAt-n.sortAt)}}function dk(e){return yu.map(t=>({id:t,label:bu[t],rows:Nu(t,e.filter(n=>n.band===t))}))}function fk(e){const t=i=>e.find(s=>s.id===i)?.rows.length??0,n=t("attention"),r=t("running")+t("queued"),o=t("finished");return{total:n+r+o,attention:n,active:r,finished:o}}function mk(e,t){if(t==="all")return e.filter(r=>r.rows.length>0);const n=t==="attention"?["attention"]:t==="active"?["running","queued"]:["finished"];return e.filter(r=>n.includes(r.id)&&r.rows.length>0)}const xe=[O.gap*.25,O.gap*.5,O.gap*.75],Pu=[.25,.5,.75],qi={sourceSide:"bottom",sourcePortIndex:1,targetSide:"top",targetPortIndex:1,sourceBusOffset:xe[1],targetBusOffset:xe[1],riverOffset:xe[1],riverSide:"right",directRowGutter:!1,targetPrimary:!0};function At(e,t){return e.sourceRow-t.sourceRow||e.sourceColumn-t.sourceColumn||e.targetRow-t.targetRow||e.targetColumn-t.targetColumn||e.targetInput.localeCompare(t.targetInput)||e.id.localeCompare(t.id)}function _r(e,t){return t===1?1:t===2?e%2===0?0:2:e%xe.length}function Ui(e,t){return xe[_r(e,t)]}function Ou(e,t){const n=new Map;for(const o of e)for(const i of t(o)){const s=n.get(i)??new Map;s.set(o.id,o),n.set(i,s)}const r=new Map;for(const[o,i]of n){const s=[...i.values()].sort(At);r.set(o,new Map(s.map((a,c)=>[a.id,Ui(c,s.length)])))}return r}function xt(e){return e.targetColumn<e.sourceColumn?"left":e.targetColumn>e.sourceColumn?"right":"bottom"}function Lu(e){const t=new Map;for(const r of e){const o=`${r.sourceId}:${xt(r)}`,i=t.get(o)??[];i.push(r),t.set(o,i)}const n=new Map;for(const r of t.values())r.sort(At),r.forEach((o,i)=>{n.set(o.id,_r(i,r.length))});return n}function Zt(e){return e.sourceColumn<e.targetColumn?"left":"top"}function Fu(e){const t=new Map;for(const r of e){const o=`${r.targetId}:${Zt(r)}`,i=t.get(o)??[];i.push(r),t.set(o,i)}const n=new Map;for(const r of t.values())r.sort(At),r.forEach((o,i)=>{n.set(o.id,_r(i,r.length))});return n}function Du(e){const t=new Map;for(const r of e){const o=t.get(r.targetId)??[];o.push(r),t.set(r.targetId,o)}const n=new Set;for(const r of t.values()){r.sort(At);const o=r[0];o&&n.add(o.id)}return n}function Vu(e){const t=new Map;for(const r of e){if(xt(r)!=="bottom")continue;const o=t.get(r.sourceId)??[];o.push(r),t.set(r.sourceId,o)}const n=new Map;for(const r of t.values())r.sort(At),r.forEach((o,i)=>{n.set(o.id,r.length===1||i%2===1?"right":"left")});return n}function Bi(e,t){const n=xt(e);return n==="bottom"?t.get(e.id)??"right":n}function lo(e,t){return Bi(e,t)==="right"?e.sourceColumn:e.sourceColumn-1}function Qt(e){return e.targetRow===e.sourceRow+1&&e.targetColumn===e.sourceColumn}function ju(e){const t=new Map,n=(i,s,a,c,l)=>{const u=t.get(i)??new Map,m=u.get(s)??{id:s,column:a,kind:c,candidates:[]};m.candidates.push(l),u.set(s,m),t.set(i,u)};for(const i of e)xt(i)==="bottom"&&!Qt(i)&&n(i.sourceRow,`source:${i.id}`,i.sourceColumn,"source",i),Zt(i)==="top"&&n(i.targetRow-1,`target:${i.targetId}`,i.targetColumn,"target",i);const r=new Map,o=new Map;for(const i of t.values()){const s=[...i.values()].sort((a,c)=>a.column-c.column||a.kind.localeCompare(c.kind)||a.id.localeCompare(c.id));s.forEach((a,c)=>{const l=Ui(c,s.length);for(const u of a.candidates)a.kind==="source"?r.set(u.id,l):o.set(u.id,l)})}for(const i of e)Qt(i)&&r.set(i.id,o.get(i.id)??xe[1]);return{source:r,target:o}}function Gu(e,t,n){return e.get(String(t))?.get(n)??xe[1]}function Hi(e){const t=new Map(e.cells.map(u=>[u.id,u])),n=e.edges.flatMap(u=>{const m=t.get(u.source),f=t.get(u.target);return!m||!f?[]:[{id:u.id,sourceId:m.id,targetId:f.id,sourceRow:m.slot.row,sourceColumn:m.slot.column,targetRow:f.slot.row,targetColumn:f.slot.column,targetInput:u.targetInput}]}),r=Lu(n),o=Fu(n),i=Du(n),s=Vu(n),a=ju(n),c=Ou(n.filter(u=>!Qt(u)),u=>[String(Zt(u)==="left"?u.targetColumn-1:lo(u,s))]),l=new Map;for(const u of n){const m=Bi(u,s),f=Zt(u),d=f==="left"?u.targetColumn-1:lo(u,s);l.set(u.id,{sourceSide:xt(u),sourcePortIndex:r.get(u.id)??1,targetSide:f,targetPortIndex:o.get(u.id)??1,sourceBusOffset:a.source.get(u.id)??xe[1],targetBusOffset:a.target.get(u.id)??xe[1],riverOffset:Gu(c,d,u.id),riverSide:m,directRowGutter:Qt(u),targetPrimary:i.has(u.id)})}return l}function qu(e,t){const n=e.sourceBottomY+t.sourceBusOffset,r=e.targetTopY-O.gap+t.targetBusOffset,o=t.riverSide==="right"?e.sourceRightX+t.riverOffset:e.sourceLeftX-O.gap+t.riverOffset;if(t.targetSide==="left"){if(e.sourceY===e.targetY)return[{x:e.sourceX,y:e.sourceY},{x:e.targetX,y:e.targetY}];const i=e.targetLeftX-O.gap+t.riverOffset;return[{x:e.sourceX,y:e.sourceY},{x:i,y:e.sourceY},{x:i,y:e.targetY},{x:e.targetX,y:e.targetY}]}if(t.directRowGutter&&e.targetTopY>e.sourceBottomY){const i=e.targetTopY-e.sourceBottomY,s=e.sourceBottomY+i*(t.targetBusOffset/O.gap);return[{x:e.sourceX,y:e.sourceY},{x:e.sourceX,y:s},{x:e.targetX,y:s},{x:e.targetX,y:e.targetY}]}return t.sourceSide!=="bottom"?[{x:e.sourceX,y:e.sourceY},{x:o,y:e.sourceY},{x:o,y:r},{x:e.targetX,y:r},{x:e.targetX,y:e.targetY}]:[{x:e.sourceX,y:e.sourceY},{x:e.sourceX,y:n},{x:o,y:n},{x:o,y:r},{x:e.targetX,y:r},{x:e.targetX,y:e.targetY}]}const Uu=8;function In(e,t){return t.x===e.x?`V ${t.y}`:t.y===e.y?`H ${t.x}`:`L ${t.x} ${t.y}`}function pk(e,t){const n=qu(e,t),r=[`M ${n[0].x} ${n[0].y}`];let o=n[0];for(let i=1;i<n.length-1;i+=1){const s=n[i],a=n[i+1],c=Math.hypot(s.x-o.x,s.y-o.y),l=Math.hypot(a.x-s.x,a.y-s.y),u=Math.min(Uu,c/2,l/2);if(u<1){r.push(In(o,s)),o=s;continue}const m={x:s.x-(s.x-o.x)/c*u,y:s.y-(s.y-o.y)/c*u},f={x:s.x+(a.x-s.x)/l*u,y:s.y+(a.y-s.y)/l*u};r.push(In(o,m),`Q ${s.x} ${s.y} ${f.x} ${f.y}`),o=f}return r.push(In(o,n[n.length-1])),r.join(" ")}function Wi(e,t){return`route-${e}-${t%Pu.length}`}function gk(e){const t=ne.c(8),{bookId:n,notebook:r,ready:o,call:i}=e,[s,a]=_.useState(null),c=_.useRef(null),l=`${n}:${r?.id}`;let u;t[0]!==n||t[1]!==i||t[2]!==r||t[3]!==o?(u=(p,g,y)=>{const v=y===void 0?r:y,S=v?.cells.find(C=>C.id===p);if(!n||!v||!p||g===void 0&&(!S||!It(S.type))){c.current=null,a(null);return}const w=`${n}:${v.id}`,k={scope:w,cellId:p};if(g!==void 0){c.current=null,a({...k,value:g,loading:!1,error:null});return}if(!S||!o)return;const I=JSON.stringify([w,S,v.edges.filter(C=>C.target===p)]);if(c.current?.key===I)return;const E={key:I};c.current=E,a({...k,value:null,loading:!0,error:null}),i("preview_notebook_generation",{book_id:n,notebook_id:v.id,cell_id:S.id},{background:!0}).then(C=>{c.current===E&&a({...k,value:C,loading:!1,error:null})}).catch(C=>{c.current===E&&(c.current=null,a({...k,value:null,loading:!1,error:C instanceof Error?C.message:String(C)}))})},t[0]=n,t[1]=i,t[2]=r,t[3]=o,t[4]=u):u=t[4];const m=u,f=s?.scope===l?s:null;let d;return t[5]!==m||t[6]!==f?(d={preview:f,select:m},t[5]=m,t[6]=f,t[7]=d):d=t[7],d}function hk(e,t){const n=ne.c(11),r=_.useRef(null);let o;n[0]===Symbol.for("react.memo_cache_sentinel")?(o=()=>{r.current!==null&&clearTimeout(r.current),r.current=null},n[0]=o):o=n[0];const i=o;let s;n[1]===Symbol.for("react.memo_cache_sentinel")?(s=()=>i,n[1]=s):s=n[1];let a;n[2]!==t?(a=[i,t],n[2]=t,n[3]=a):a=n[3],_.useEffect(s,a);let c;n[4]!==e?(c=(...d)=>{const p=d;i(),r.current=setTimeout(()=>{r.current=null,e(...p)},350)},n[4]=e,n[5]=c):c=n[5];const l=c;let u;n[6]!==e?(u=(...d)=>{const p=d;i(),e(...p)},n[6]=e,n[7]=u):u=n[7];const m=u;let f;return n[8]!==m||n[9]!==l?(f={schedule:l,cancel:i,run:m},n[8]=m,n[9]=l,n[10]=f):f=n[10],f}const Bu=720;function Ki(e){return Math.abs(e)}function Hu(e,t){const n=[];for(let r=0;r<e.length;r+=t)n.push(Math.max(...e.slice(r,r+t).map(Ki)));return n}function Wu(e,t){const n=[];for(let r=0;r<t;r+=1){const o=Math.floor(r*e.length/t),i=Math.max(o+1,Math.floor((r+1)*e.length/t));n.push(Math.max(...e.slice(o,i).map(Ki)))}return n}function bk(e){if(e.length===0)return"";const t=Math.max(1,Math.ceil(e.length/Bu)),n=Hu(e,t);return n.map((r,o)=>{const i=n.length===1?50:o/(n.length-1)*100,s=Math.max(2,Math.min(46,r*46));return`M${i.toFixed(3)} ${50-s}V${50+s}`}).join("")}function yk(e,t){const{width:n,height:r,pitch:o,minimumBarHeight:i}=t,s=Math.floor(n/o);if(e.length===0||s<1)return"";const a=Wu(e,s),c=Math.max(...a),l=r/2,u=r-i;return a.map((m,f)=>{const d=o*f+o/2,p=c>0?m/c:0,g=Math.max(i,p*u),y=l-g/2,v=l+g/2;return`M${d.toFixed(2)} ${y.toFixed(2)}V${v.toFixed(2)}`}).join("")}function _k(e){const{width:t,height:n,pitch:r,minimumBarHeight:o}=e,i=Math.floor(t/r);if(i<1)return"";const s=n/2,a=(s-o/2).toFixed(2),c=(s+o/2).toFixed(2);return Array.from({length:i},(l,u)=>`M${(r*u+r/2).toFixed(2)} ${a}V${c}`).join("")}function vk(e,t){return Qs(e,t)}function kk(e){if(e.value===null)return{kind:"null"};if(!e.column.endsWith("_json")||typeof e.value!="string")return{kind:"raw",value:e.value};try{return{kind:"json",value:JSON.parse(e.value)}}catch{return{kind:"raw",value:e.value}}}function wk(e){const t=ne.c(3),[n,r]=_.useState(null);let o,i;return t[0]!==e?(o=()=>{if(!e)return;const s=Date.parse(e);if(!Number.isFinite(s))return;const a=()=>r(Math.max(0,Math.round((Date.now()-s)/1e3))),c=window.setTimeout(a,0),l=window.setInterval(a,1e3);return()=>{window.clearTimeout(c),window.clearInterval(l)}},i=[e],t[0]=e,t[1]=o,t[2]=i):(o=t[1],i=t[2]),_.useEffect(o,i),e?n:null}const Ku={image:9/16,video:16/9,audio:16/9},zu={image:"Image",video:"Video",audio:"Audio"};function pt(e){return e!=null&&Number.isFinite(e)&&e>0}function Sk(e){return e==="image"||e==="video"||e==="audio"?e:null}function Ik(e){return zu[e]}function Ak(e,t){return e!=="audio"&&t&&pt(t.width)&&pt(t.height)?t.width/t.height:Ku[e]}function Pe(e,t,n,r="plain"){return n===null?null:{key:e,term:t,value:n,emphasis:r}}function Xu(e){return pt(e.width)&&pt(e.height)?`${e.width} × ${e.height}`:null}function Yu(e){return pt(e)?me(e):null}function xk(e,t,n,r){const o=Pe("address","Address",`@${t}`,"address");if(e==="audio"){const i=dr({audioInfo:n.audioInfo,durationSeconds:n.duration,hasOutput:!0,inputs:r});return[o,Pe("role","Role",i.role),Pe("duration","Duration",i.duration),Pe("format","Format",i.details.length>0?i.details.join(" · "):null)].filter(s=>s!==null)}return[o,Pe("dimensions","Dimensions",Xu(n)),Pe("aspect","Aspect",un(n.width,n.height)),e==="video"?Pe("duration","Duration",Yu(n.duration)):null].filter(i=>i!==null)}async function Ek(e){e.onStarting?.();try{const t=await e.start();return e.onAccepted?.(),t}catch(t){throw e.onRejected?.(),t}}async function Ck(e){return!e.valid||e.dirty&&await e.onUpdate(e.patch)===!1?!1:(await e.onRun(e.cellId),!0)}function An(e){return e!==null&&Number.isFinite(e)&&e>0}function Mk(e,t){const n=new Map(t.map(o=>[o.artifactId,o])),r=new Map;for(const o of e){const i=o.outputArtifactId;if(!i)continue;const s=n.get(i);if(!s)continue;const a=r.get(i);(!a||a.type!==s.type&&o.type===s.type)&&r.set(i,o)}return[...r.entries()].map(([o,i])=>{const s=n.get(o),{id:a,...c}=s;return{...c,cellAddress:wt(i.slot)}})}function Tk(e,t){return ti(e,t.map(n=>({reference:n.cellAddress,replacement:`@${n.artifactId}`})))}function Ju(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function zi(e,t){let n=e;for(const{token:r,replacement:o}of t){const i=ke(r);i&&(n=n.replace(new RegExp(`(?<![\\w./-])@?${Ju(i)}(?![\\w-])`,"giu"),o))}return n}function Rk(e,t){return zi(e,t.map(n=>({token:n.artifactId,replacement:`@${n.cellAddress}`})))}function $k(e,t,n){const r=new Map(n.flatMap(o=>o.outputArtifactId?[[o.outputArtifactId,o]]:[]));return zi(e,t.flatMap(o=>{const i=r.get(o.artifactId);return i?[{token:o.artifactId,replacement:`@${wt(i.slot)}`}]:[]}))}function Xi(e){const t=[e.type.toUpperCase()];An(e.width)&&An(e.height)&&t.push(`${e.width}×${e.height}`),An(e.duration)&&t.push(me(e.duration));const n=e.status.trim().toLowerCase();return n&&n!=="ready"&&t.push(n.replaceAll("_"," ").toUpperCase()),t}function Yi(e){return e.thumbnailUrl??(e.type==="image"?e.mediaUrl:null)}function Wn(e){const t=e.toLowerCase();return t.includes("audio")?"audio":t.includes("image")?"image":t.includes("video")||t==="final"||t==="concat"||t==="splice"?"video":"other"}function Zu(e,t,n=new Set){const r=sn(t);if(r===void 0)return[];const o=t.slice(0,t.lastIndexOf("@")).trim(),i=/\b(?:generate|create|make)\s+(?:an?\s+)?(?:image|photo|picture)s?(?:\s+(?:of|from|using|with))?$/iu.test(o)?"image":null;return e.filter(s=>(!i||s.type.toLowerCase()===i)&&s.cellAddress.toLowerCase().includes(r)&&!n.has(`@${s.cellAddress}`)).sort((s,a)=>/^\s*\/goal\b/u.test(t)?+(a.type==="image")-+(s.type==="image"):0).slice(0,12).map(s=>({value:`@${s.cellAddress}`,label:`@${s.cellAddress}`,asset:s,type:"asset"}))}function Qu(e,t,n=new Set){const r=sn(t);if(r===void 0)return[];const o=new Map(e.flatMap(s=>Ee(s).map(a=>[`${a.row}:${a.column}`,s]))),i=[];for(let s=0;s<de;s+=1)for(let a=0;a<X;a+=1){const c=ue({row:s,column:a});if(!c.slice(1).includes(r)||n.has(c))continue;const l=o.get(`${s}:${a}`);if(!(l?.type==="timeline"&&a!==l.slot.column)&&(i.push({value:c,label:c,description:l?`${l.type.replaceAll("_"," ").toUpperCase()} cell`:"Empty grid square",cellType:l?.type??null,empty:!l,type:"cell"}),i.length===12))return i}return i}const ed=8,td=16;function Nk(e,t,n,r=new Set,o={}){const i=new Map(t.map(c=>[ue(c.slot),c.label?.trim()||null])),s=new Set,a=[];for(const c of Zu(e,n,r))s.has(c.value)||(s.add(c.value),a.push({value:c.value,label:c.label,description:Xi(c.asset).join(" · "),caption:i.get(c.value)??null,thumbnailUrl:Yi(c.asset),mediaKind:Wn(c.asset.type),empty:!1}));for(const c of Qu(t,n,r))s.has(c.value)||(s.add(c.value),a.push({value:c.value,label:c.label,description:c.description,caption:i.get(c.value)??null,thumbnailUrl:null,mediaKind:c.cellType?Wn(c.cellType):null,empty:c.empty}));return[...a.filter(c=>!c.empty).sort((c,l)=>/^\s*\/goal\b/u.test(n)?+(l.mediaKind==="image")-+(c.mediaKind==="image"):0).slice(0,o.rows??ed),...a.filter(c=>c.empty).slice(0,o.empties??td)]}function Pk(e,t,n){const r=sn(n);if(r===void 0)return[];const o=new Map(t.map(i=>[i.cellAddress,i]));return e.filter(({token:i})=>i.includes(r)).map(({token:i,cell:s})=>{const a=wt(s.slot),c=o.get(a);return{value:`@${i}`,label:`@${i}`,description:[`@${a}`,...c?Xi(c):[s.type.replaceAll("_"," ").toUpperCase()]].join(" · "),caption:s.label?.trim()||null,thumbnailUrl:c?Yi(c):null,mediaKind:Wn(c?.type??s.type),empty:!1}})}const Ji={first_frame:"firstframe",last_frame:"lastframe"},nd=new Set(["replace_audio"]),rd=["image","video","audio"];function od(e){return e==="image"||e==="generate_image"?"image":e==="audio"||e==="extract_audio"||e==="generate_audio"?"audio":e==="video"||e==="split_video"||e==="generate_video"||e==="concat"||e==="splice"?"video":null}function uo(e,t){if(e===t)return 1;const n=`${t}_`;if(!e.startsWith(n))return null;const r=e.slice(n.length);return/^\d+$/.test(r)?Number(r):null}function id(e,t){return[...e].sort((n,r)=>{const o=uo(n.targetInput,t)??Number.MAX_SAFE_INTEGER,i=uo(r.targetInput,t)??Number.MAX_SAFE_INTEGER;return o-i})}function sd(e,t,n){const r=new Map(t.map(o=>[o.id,o]));return n.flatMap(o=>{if(o.target!==e)return[];const i=r.get(o.source),s=i?od(i.type):null;return s?[{kind:s,sourceCellId:o.source,targetInput:o.targetInput}]:[]})}function ad(e){return Object.entries(Ji).flatMap(([t,n])=>{const r=e.find(o=>o.kind==="image"&&o.targetInput===t);return r?[{...r,token:n}]:[]})}function cd(e,t,n){const r=e.filter(o=>o.kind===t&&!(n!=="r2v"&&t==="image"&&o.targetInput in Ji)&&!nd.has(o.targetInput));return id(r,t).map((o,i)=>({...o,token:`${t}${i+1}`}))}function ld(e,t,n,r){const o=t.find(a=>a.id===e)?.inputs?.generationMode,i=r??o,s=sd(e,t,n);return[...i==="r2v"?[]:ad(s),...rd.flatMap(a=>cd(s,a,typeof i=="string"?i:void 0))]}function Ok(e,t,n){const r=new Set([...t,...n].map(i=>i.token)),o=new Map(t.map(i=>{const s=n.find(l=>l.sourceCellId===i.sourceCellId&&l.targetInput===i.targetInput)??n.find(l=>l.targetInput===i.targetInput);if(s)return[i.token,s.token];if(!n.some(l=>l.token===i.token))return[i.token,i.token];let a=1;for(;r.has(`${i.kind}${a}`);)a+=1;const c=`${i.kind}${a}`;return r.add(c),[i.token,c]}));return e.replace(/@((?:image|video|audio)\d+|firstframe|lastframe)(?![\w-])/giu,(i,s)=>{const a=o.get(s.toLowerCase());return a&&a!==s.toLowerCase()?`@${a}`:i})}function Zi(e,t,n){return e==="r2v"&&t==="image"&&(n==="first_frame"||n==="last_frame")?"image":n}function ud(e,t){const n=t.map(i=>({...i,target:Zi(e.id,i.kind,i.target)}));if(e.id!=="i2v"||e.slots.some(i=>i.targets.includes("image")))return n;const r=e.slots.flatMap(i=>i.targets).filter(i=>i==="first_frame"||i==="last_frame").filter(i=>!t.some(s=>s.target===i));let o=0;return n.map(i=>{if(i.kind!=="image"||i.target!=="image")return i;const s=r[o++];return s?{...i,target:s}:i})}function Nt(e){return e==="replace_audio"?"replacement audio":e==="first_frame"?"first frame":e==="last_frame"?"last frame":`${e} reference`}function vr(e,t){const n=e.id==="default"||e.id==="text"?"this model":e.id.toUpperCase(),r=n==="this model"?"This model":n,o=new Map(e.slots.map(l=>[l.field,0])),i=ud(e,t).sort((l,u)=>+(u.target!==u.kind)-+(l.target!==l.kind));for(const l of i){const u=e.slots.filter(d=>d.kind===l.kind&&d.targets.includes(l.target));if(u.length===0)return`${r} does not accept ${Nt(l.target)} inputs. Change the type or remove that input.`;const f=u.filter(d=>d.max===null||(o.get(d.field)??0)<d.max).sort((d,p)=>{const g=+((o.get(d.field)??0)<d.min);return+((o.get(p.field)??0)<p.min)-g||d.targets.length-p.targets.length})[0];if(!f){const d=u.reduce((p,g)=>p+(g.max??0),0);return`${r} accepts at most ${d} ${Nt(l.target)} input${d===1?"":"s"}. Remove an input or change the model.`}o.set(f.field,(o.get(f.field)??0)+1)}const s=e.slots.find(l=>(o.get(l.field)??0)<l.min);if(s)return`Add at least ${s.min} ${Nt(s.targets[0]??s.kind)} input${s.min===1?"":"s"} for ${n}.`;const a=e.requiredGroups.find(l=>!l.some(u=>(o.get(u)??0)>0));return a?`Add at least one ${[...new Set(e.slots.filter(l=>a.includes(l.field)).flatMap(l=>l.targets).map(Nt))].join(" or ")} input for ${n}.`:null}function dd(e){const t=h(e),n=h(t?.mentions),r=Array.isArray(n?.prompt_leaks)?n.prompt_leaks.flatMap(i=>{const s=h(i),a=A(s?.token),c=A(s?.code),l=A(s?.message);return a&&c&&l?[{token:a,code:c,message:l}]:[]}):[],o=Array.isArray(n?.url_placeholders)?n.url_placeholders.flatMap(i=>{const s=h(i),a=A(s?.path),c=A(s?.reference),l=A(s?.url);return a&&c&&l?[{path:a,reference:c,url:l}]:[]}):[];return{promptLeaks:r,urlPlaceholders:o}}function Lk(e){const t=dd(e).promptLeaks;return t.length===0?null:`Fix prompt references before generating: ${t.map(r=>r.message).join("; ")}`}function fd(e){return e.length>0&&e.every(t=>t.includes("historical average per call"))}function Fk(e){const t=h(h(e)?.estimate),n=Array.isArray(t?.warnings)?t.warnings.filter(o=>typeof o=="string"):[],r=fd(n);return{usd:typeof t?.usd=="number"?t.usd:null,currency:typeof t?.currency=="string"?t.currency:"USD",warnings:n,unknown:!r&&n.some(o=>/not found|unavailable|no cost adapter|unknown/iu.test(o))}}const Qi=["t2i","i2i","t2v","i2v","r2v","v2v"];function es(e){return Array.isArray(e)?e.filter(t=>{if(!t||typeof t!="object")return!1;const n=t;return Qi.some(r=>r===n.type)&&typeof n.rank=="number"&&Number.isFinite(n.rank)&&n.rank>0&&typeof n.elo=="number"&&Number.isFinite(n.elo)&&typeof n.priceLabel=="string"&&typeof n.sourceUrl=="string"&&typeof n.capturedOn=="string"}):[]}function md(e,t,n,r){const o=Qi.find(s=>s===t);if(o)return o;if(t==="v2v_refs")return"v2v";if(e==="generate_image")return n==="layer_image"?null:r.some(a=>a.type==="image"||a.type==="generate_image")||n==="edit_image"||n==="image_to_image"?"i2i":"t2i";if(e!=="generate_video")return null;const i={text_to_video:"t2v",image_to_video:"i2v",reference_to_video:"r2v",edit_video:"v2v"};return i[n]?n!=="text_to_video"?i[n]:r.some(s=>s.targetInput==="first_frame"||s.targetInput==="last_frame")?"i2v":r.some(s=>s.type==="video"||s.type==="generate_video")?"v2v":r.some(s=>s.type==="image"||s.type==="generate_image")?"r2v":i[n]:null}function pd(e,t){const n=e.map(s=>({action:s,ranking:t?s.frontier?.find(a=>a.type===t):void 0})),r=n.filter(s=>s.ranking&&s.action.available!==!1).sort((s,a)=>s.ranking.rank-a.ranking.rank),o=n.filter(s=>!s.ranking&&s.action.available!==!1),i=n.filter(s=>s.action.available===!1);return[{label:"Frontier models",rows:r},{label:r.length?"Other models":"Models",rows:o},{label:"Unavailable · provider not configured",rows:i}].filter(s=>s.rows.length>0)}function Dk(e,t,n){const r=n.refs&&typeof n.refs=="object"?n.refs:{},o=Object.entries(r).filter(([,a])=>!!a&&(!Array.isArray(a)||a.length>0)).map(([a])=>({type:a==="first_frame"||a==="last_frame"?"image":a,targetInput:a})),i=typeof n.operation=="string"?n.operation:t==="image"?"text_to_image":"text_to_video",s=md(`generate_${t}`,typeof n.mode=="string"?n.mode:"",i,o);return pd(e,s).flatMap(a=>a.rows.map(({action:c,ranking:l})=>({...c,group:a.label,label:`${l?`#${l.rank} · `:""}${c.label}`,detail:[c.detail,l?`Elo ${l.elo} · ${l.priceLabel}`:"",c.available===!1?"unavailable":""].filter(Boolean).join(" · ")})))}function xn(e,t,n){if(t===n)return!0;const r=new Map;for(const s of e){const a=r.get(s.source)??[];a.push(s.target),r.set(s.source,a)}const o=new Set,i=[n];for(;i.length>0;){const s=i.pop();if(!(!s||o.has(s))){if(s===t)return!0;o.add(s),i.push(...r.get(s)??[])}}return!1}function rt(e,t,n,r){if(!xn(t,n,r))return t;const o=e.find(s=>s.id===n);if(n===r||o?.type!=="image"||!o.outputArtifactId)return null;const i=t.filter(s=>s.target!==n||!xn(t,s.source,r));return xn(i,n,r)?null:i}function Vk(e,t,n=[]){const r=t.source,o=t.target;return!r||!o?!1:rt(n,e,r,o)!==null}function jk(e,t,n){return new Set(e.filter(r=>rt(e,t,r.id,n)===null).map(r=>ue(r.slot)))}function ts(e,t){return t[e.name]??e.defaultValue}function Gk(e,t){return Object.fromEntries(e.flatMap(n=>{const r=ts(n,t);return r===void 0?[]:[[n.name,r]]}))}function gd(e,t){return e.minimum===void 0?!1:e.exclusiveMinimum?t<=e.minimum:t<e.minimum}function hd(e,t){return e.maximum===void 0?!1:e.exclusiveMaximum?t>=e.maximum:t>e.maximum}function bd(e,t){const n=ts(e,t);return n===void 0||n===""?e.required?`${e.label}: Required`:null:e.options.length>0&&!e.options.some(r=>r===n)?`${e.label}: Choose one of the listed values`:e.valueType==="number"?typeof n!="number"||!Number.isFinite(n)?`${e.label}: Enter a number`:gd(e,n)?e.exclusiveMinimum?`${e.label}: Must be greater than ${e.minimum}`:`${e.label}: Must be at least ${e.minimum}`:hd(e,n)?e.exclusiveMaximum?`${e.label}: Must be less than ${e.maximum}`:`${e.label}: Must be at most ${e.maximum}`:null:typeof n===e.valueType?null:`${e.label}: Required`}function qk(e,t){const n=e.flatMap(r=>{const o=bd(r,t);return o?[o]:[]});return n.length>0?n.join("; "):null}function gt(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function yd(e){return e==="image"||e==="video"||e==="audio"?e:null}function ns(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"):[]}function fo(e){return typeof e=="string"||typeof e=="number"||typeof e=="boolean"?e:void 0}function _d(e){const t=h(e),n=A(t?.name),r=A(t?.label),o=A(t?.description),i=t?.kind,s=t?.valueType;if(!n||!r||!o||i!=="select"&&i!=="boolean"&&i!=="number"&&i!=="text"||s!=="string"&&s!=="number"&&s!=="boolean")return null;const a=fo(t?.defaultValue),c=Array.isArray(t?.options)?t.options.flatMap(m=>{const f=fo(m);return f===void 0?[]:[f]}):[],l=gt(t?.minimum),u=gt(t?.maximum);return{name:n,label:r,kind:i,valueType:s,required:t?.required===!0,...a===void 0?{}:{defaultValue:a},options:c,...l===null?{}:{minimum:l},...u===null?{}:{maximum:u},...t?.exclusiveMinimum===!0?{exclusiveMinimum:!0}:{},...t?.exclusiveMaximum===!0?{exclusiveMaximum:!0}:{},description:o}}function vd(e){const t=h(e),n=A(t?.field),r=yd(t?.kind),o=ns(t?.targets),i=gt(t?.min),s=t?.max,a=s===null?null:gt(s);return!n||!r||o.length===0||i===null||s!==null&&a===null?null:{field:n,kind:r,targets:o,min:i,max:a}}function kd(e){const t=h(e),n=A(t?.id);if(!n||!Array.isArray(t?.slots))return null;const r=t.slots.map(vd).filter(i=>i!==null),o=Array.isArray(t.requiredGroups)?t.requiredGroups.map(ns).filter(i=>i.length>0):[];return{id:n,slots:r,requiredGroups:o}}function wd(e){const t=h(e);if(!Array.isArray(t?.modes))return null;const n=t.modes.map(kd).filter(r=>r!==null);return n.length>0?{modes:n}:null}function Sd(e){const n=h(e)?.actions;return Array.isArray(n)?n.flatMap(r=>{const o=h(r);if(!o||o.kind!=="generation")return[];const i=A(o.provider),s=A(o.model),a=A(o.operation),c=A(o.tool),l=A(o.title),u=wd(o.inputContract),m=Array.isArray(o.controls)?o.controls.map(_d).filter(p=>p!==null):[],f=Array.isArray(o.cellTypes)?o.cellTypes.filter(p=>typeof p=="string"&&It(p)):[];if(!i||!s||!a||!c||!u||f.length===0)return[];const d=gt(o.defaultPriority);return[{id:A(o.id)??`generation.${c}`,cellTypes:f,provider:i,providerLabel:A(o.providerLabel)??i,model:s,operation:a,tool:c,title:l??c,isDefault:o.isDefault===!0,defaultPriority:d,inputContract:u,controls:m,...typeof o.available=="boolean"?{available:o.available}:{},...Array.isArray(o.frontier)?{frontier:es(o.frontier)}:{},...o.existingCellOnly===!0?{existingCellOnly:!0}:{}}]}):[]}function kr(e,t,n=!1){return e.filter(r=>r.cellTypes.includes(t)&&(n||!r.existingCellOnly))}function Kn(e){return{provider:e.provider,model:e.model,operation:e.operation,tool:e.tool}}function Id(e){return{provider:e.provider?.trim()??"",model:e.model?.trim()??"",operation:e.operation?.trim()??"",tool:e.tool?.trim()??""}}function Pt(e,t){return["provider","model","operation","tool"].reduce((n,r)=>t[r]&&e[r]===t[r]?n+1:n,0)}function rs(e,t,n){const r=kr(e,t,!0).filter(c=>!c.existingCellOnly||c.tool===n.tool&&c.model===n.model),o=n.model?r.find(c=>c.model===n.model&&(!n.tool||c.tool===n.tool)):void 0;if(o)return o;const i=n.tool?r.filter(c=>c.tool===n.tool).sort((c,l)=>Pt(l,n)-Pt(c,n))[0]:void 0;if(i)return i;const s=n.model?r.find(c=>c.tool===n.model):void 0;return s||(n.model?r.filter(c=>c.model===n.model):n.operation?r.filter(c=>c.operation===n.operation):n.provider?r.filter(c=>c.provider===n.provider):[]).reduce((c,l)=>!c||Pt(l,n)>Pt(c,n)?l:c,null)}function zn(e){return e.type==="image"||e.type==="generate_image"?"image":e.type==="video"||e.type==="split_video"||e.type==="generate_video"||e.type==="concat"||e.type==="splice"?"video":e.type==="audio"||e.type==="extract_audio"||e.type==="generate_audio"?"audio":null}function os(e,t){return t==="first_frame"||t==="last_frame"||e==="audio"&&t==="replace_audio"?t:e}function Uk(e,t,n){const r=new Map(t.map(o=>[o.id,o]));return n.flatMap(o=>{if(o.target!==e)return[];const i=r.get(o.source),s=i?zn(i):null;return s?[{kind:s,target:os(s,o.targetInput)}]:[]})}function Ad(e,t){if(!t.has(e))return e;let n=2;for(;t.has(`${e}_${n}`);)n+=1;return`${e}_${n}`}function Bk(e,t,n,r,o){const i=e.inputContract.modes.find(d=>d.id===t);if(!i)return[];const s=new Map(r.map(d=>[d.id,d])),a=o.filter(d=>d.target===n),c=a.flatMap(d=>{const p=s.get(d.source),g=p?zn(p):null;return g?[{sourceCellId:d.source,targetInput:d.targetInput,target:Zi(t,g,os(g,d.targetInput)),kind:g}]:[]}),l=new Set(a.map(d=>d.source)),u=new Set(a.map(d=>d.targetInput)),m=[],f=new Set;for(const d of r.filter(p=>p.id!==n).sort((p,g)=>p.slot.row-g.slot.row||p.slot.column-g.slot.column)){if(l.has(d.id)||rt(r,o,d.id,n)===null)continue;const p=zn(d);if(p)for(const g of i.slots){if(g.kind!==p)continue;const y=c.filter(v=>v.kind===g.kind&&g.targets.includes(v.target)).length;if(!(g.max!==null&&y>=g.max))for(const v of g.targets){const S=`${d.id}:${v}`;f.has(S)||(f.add(S),m.push({sourceCellId:d.id,targetInput:Ad(v,u),target:v,kind:p}))}}}return m}function Et(e,t){return e.inputContract.modes.filter(n=>vr(n,t)===null)}function Hk(e,t,n){const r=e.inputContract.modes.find(o=>o.id===t);return!!(r&&vr(r,n)===null)}function Wk(e,t,n=""){return n&&e.inputContract.modes.some(r=>r.id===n)?n:Et(e,t)[0]?.id??e.inputContract.modes[0]?.id??""}function Kk(e){return{t2v:"T2V · Text to video",i2v:"I2V · Image to video",r2v:"R2V · Reference to video",v2v:"V2V · Video to video",t2i:"T2I · Text to image",i2i:"I2I · Image to image",t2a:"T2A · Text to audio"}[e]??e.replaceAll("-"," ").replace(/^./,n=>n.toUpperCase())}function gn(e,t){return e.inputContract.modes.some(n=>vr(n,t)===null)}function xd(e,t){const n=e.defaultPriority??Number.POSITIVE_INFINITY,r=t.defaultPriority??Number.POSITIVE_INFINITY;if(n!==r)return n-r;const o=e.title.localeCompare(t.title);if(o!==0)return o;const i=e.providerLabel.localeCompare(t.providerLabel);return i!==0?i:e.model.localeCompare(t.model)}function Ed(e,t,n,r=!1){return kr(e,t,r).filter(o=>gn(o,n)).sort(xd)}function Cd(e,t,n=[]){if(!It(e.type))return null;const r=Id(e),o=rs(t,e.type,r);if(o)return Kn(o);if(Object.values(r).every(Boolean))return r;const i=Ed(t,e.type,n)[0];return i?Kn(i):null}function wr(e){return Kn(e)}function Md(e){return e.replace(/\b(image|text|reference|video|audio|frame)[\s-]+to[\s-]+(video|image|audio|text)\b/gi,(t,n,r)=>`${n[0]}2${r[0]}`.toUpperCase())}const zk="Edit video follows the source aspect ratio and duration. Connect one 4–30 second video plus optional image or audio references.";function is(e,t){return e==="kie:bytedance/seedance-2-5"&&t==="v2v"}const En=[{id:"t2v",label:"Text to video",roles:[]},{id:"i2v",label:"Frames",roles:["first_frame","last_frame"],requireAny:["first_frame","last_frame"]},{id:"r2v",label:"References",roles:["image","video","audio"],requireAny:["image","video","audio"]}],Ot=[{id:"i2v",label:"Frames",roles:["first_frame","last_frame"]}],Cn={aspect_ratio:"auto",duration:5,generate_audio:!0,resolution:"720p",reasoning_level:"high"},Td=[{id:"r2v",label:"References",roles:["image","video","audio"],requireAny:["image","video","audio"]},{id:"v2v",label:"Edit video",roles:["video","image","audio"],requireAny:["video"],defaults:{task:"editing"}},{id:"extend",label:"Extend video",roles:["video","image","audio"],requireAny:["video"],defaults:{task:"extension"}}],Rd=[{id:"i2v",label:"Image to video",roles:["first_frame"]},{id:"r2v",label:"References",roles:["image"]},{id:"v2v",label:"Edit video",roles:["video"],requireAny:["video"]}],ot={id:"i2v",label:"Frames",roles:["first_frame","last_frame"],requireAny:["first_frame"]},Lt=["image","video","audio"];function it(e,t,n=t){return[{id:"t2v",label:"Text to video",roles:[]},e,{id:"r2v",label:"References",roles:t,requireAny:n}]}function Ft(e){const t={minimum:2e3,maximum:e*1e3,maximumTotal:e*1e3};return{refDurationMs:{video:t,audio:t}}}const st=["text_to_video","image_to_video","reference_to_video"],en="Speaker 1";function mo(e,t){return{id:e,media:"audio",operations:["speech"],title:t,prompt:"dialogue_turns.0.text",aliases:{voice:"speakers.0.voice_name",accent:"speakers.0.accent",style:"speakers.0.style",pace:"speakers.0.pace"},defaults:{speakers:[{speaker_id:en,voice_name:"Kore",accent:"Neutral"}],dialogue_turns:[{speaker_id:en}]}}}function po(e,t){return{id:e,media:"audio",operations:["speech"],title:t,prompt:"dialogue_turns.0.text",aliases:{voice:"speakers.0.voice_name",style:"dialogue_turns.0.style"},defaults:{speakers:[{speaker_id:en,voice_name:"Fola"}],dialogue_turns:[{speaker_id:en}]}}}function go(e,t){return{id:e,media:"audio",operations:["speech"],title:t,defaults:{voice:"Rachel"}}}function at(e){return{id:`fal:minimax/h3-max/styles/${e}`,media:"video",operations:["text_to_video","image_to_video"],dialect:"strip_frames"}}const $d=[{id:"kie:nano-banana-2-1",media:"image",operations:["text_to_image","edit_image"],dialect:"natural_numbered",defaults:{...va}},{id:"kie:flux-3/klein-text-to-image",media:"image",operations:["text_to_image"],dialect:"natural",defaults:{resolution:"1K"}},{id:"kie:flux-3/klein-edit-image",media:"image",operations:["edit_image"],dialect:"natural",defaults:{resolution:"1K"}},{id:"kie:nano-banana-pro",media:"image",operations:["text_to_image","edit_image"],guide:"nano_banana",dialect:"natural"},{id:"kie:gpt-image-2-5-flare-text-to-image",media:"image",operations:["text_to_image"],guide:"gpt_image",dialect:"natural",defaults:{resolution:"2K"}},{id:"kie:gpt-image-2-5-flare-image-to-image",media:"image",operations:["edit_image"],guide:"gpt_image",dialect:"natural",defaults:{resolution:"2K"}},{id:"kie:gpt-image-2-5-sunburst-text-to-image",media:"image",operations:["text_to_image"],guide:"gpt_image",dialect:"natural",defaults:{resolution:"2K"}},{id:"kie:gpt-image-2-5-sunburst-image-to-image",media:"image",operations:["edit_image"],guide:"gpt_image",dialect:"natural",defaults:{resolution:"2K"}},{id:"kie:gpt-image-2-image-to-image",media:"image",operations:["edit_image"],title:"GPT Image 2 Edit",dialect:"natural",hidden:!0},{id:"kie:seedream/5-pro-image-to-image",media:"image",operations:["edit_image"],dialect:"natural",hidden:!0},{id:"kie:grok-imagine/text-to-image",media:"image",operations:["text_to_image"],guide:"grok_image"},{id:"kie:grok-imagine/image-to-image",media:"image",operations:["edit_image"],guide:"grok_image",dialect:"natural"},{id:"kie:qwen2/image-edit",media:"image",operations:["edit_image"],dialect:"natural"},{id:"kie:qwen3/image-to-image",media:"image",operations:["edit_image"],dialect:"natural"},{id:"kie:qwen2-1/text-to-image",media:"image",operations:["text_to_image"],dialect:"natural"},{id:"kie:qwen2-1/image-to-image",media:"image",operations:["edit_image"],dialect:"natural"},{id:"kie:seedream/5-lite-text-to-image",media:"image",operations:["text_to_image"]},{id:"kie:seedream/5-lite-image-to-image",media:"image",operations:["edit_image"],dialect:"natural"},{id:"kie:seedream/5-flash-text-to-image",media:"image",operations:["text_to_image"]},{id:"kie:seedream/5-flash-image-to-image",media:"image",operations:["edit_image"]},{id:"kie:seedream/5-flash-layer-decomposition",media:"image",operations:["layer_image"]},{id:"alibaba:qwen-image-2.0-pro",media:"image",operations:["text_to_image"],title:"Qwen Image 2.0 Pro (Alibaba)"},{id:"alibaba:qwen-image-edit-plus",media:"image",operations:["edit_image"],title:"Qwen Image Edit Plus (Alibaba)"},{id:"fal:fal-ai/nano-banana",media:"image",operations:["text_to_image"],guide:"nano_banana",hidden:!0},{id:"fal:fal-ai/nano-banana/edit",media:"image",operations:["edit_image"],guide:"nano_banana",hidden:!0},{id:"fal:fal-ai/nano-banana-2",media:"image",operations:["text_to_image"],guide:"nano_banana",hidden:!0},{id:"fal:fal-ai/nano-banana-2/edit",media:"image",operations:["edit_image"],guide:"nano_banana",hidden:!0},{id:"fal:google/nano-banana-2-lite",media:"image",operations:["text_to_image"],guide:"nano_banana",hidden:!0},{id:"fal:google/nano-banana-lite/edit",media:"image",operations:["edit_image"],guide:"nano_banana",hidden:!0},{id:"fal:fal-ai/nano-banana-pro",media:"image",operations:["text_to_image"],guide:"nano_banana",hidden:!0},{id:"fal:fal-ai/nano-banana-pro/edit",media:"image",operations:["edit_image"],guide:"nano_banana",hidden:!0},{id:"fal:google/nano-banana-2.1",media:"image",operations:["text_to_image"],guide:"nano_banana",hidden:!0},{id:"fal:google/nano-banana-2.1/edit",media:"image",operations:["edit_image"],guide:"nano_banana",hidden:!0},{id:"fal:fal-ai/bytedance/seedream/v5/lite/text-to-image",media:"image",operations:["text_to_image"],hidden:!0},{id:"fal:fal-ai/bytedance/seedream/v5/lite/edit",media:"image",operations:["edit_image"],hidden:!0},{id:"fal:xai/grok-imagine-image",media:"image",operations:["text_to_image"],guide:"grok_image",hidden:!0},{id:"fal:xai/grok-imagine-image/edit",media:"image",operations:["edit_image"],guide:"grok_image",hidden:!0},{id:"fal:fal-ai/qwen-image",media:"image",operations:["text_to_image"],hidden:!0},{id:"fal:fal-ai/qwen-image-edit",media:"image",operations:["edit_image"],hidden:!0},{id:"fal:alibaba/qwen-image-3/edit",media:"image",operations:["edit_image"]},{id:"fal:fal-ai/wan/v2.7/edit",media:"image",operations:["edit_image"],rules:{maxPromptChars:500},hidden:!0},{id:"fal:bria/fibo-edit-1.5/product-holding",media:"image",operations:["edit_image"],prompt:"instruction",refs:{image:["person_image_url","product_image_urls"]}},{id:"fal:bria/fibo-edit-1.5/virtual-try-on",media:"image",operations:["edit_image"],prompt:"instruction",refs:{image:["person_image_url","garment_image_urls"]}},{id:"fal:recraft/v4.1/flash/text-to-image",media:"image",operations:["text_to_image"]},{id:"fal:bytedance/seedream/v5/flash/text-to-image",media:"image",operations:["text_to_image"]},{id:"fal:bytedance/seedream/v5/flash/edit",media:"image",operations:["edit_image"]},{id:"fal:bytedance/seedream/v5/flash/layerize",media:"image",operations:["layer_image"]},{id:"fal:ideogram/v4.5",media:"image",operations:["text_to_image"]},{id:"fal:ideogram/v4.5/edit",media:"image",operations:["edit_image"],refs:{image:["image_url","reference_image_urls"]}},{id:"fal:blackforestlabs/flux-3/text-to-image",media:"image",operations:["text_to_image"]},{id:"fal:blackforestlabs/flux-3/edit-image",media:"image",operations:["edit_image"]},{id:"fal:bria/fibo-2/generate",media:"image",operations:["text_to_image"]},{id:"fal:bria/fibo-2/edit",media:"image",operations:["edit_image"],prompt:"instruction"},{id:"fal:fal-ai/flux-2-flex",media:"image",operations:["text_to_image"]},{id:"fal:bria/guided-remove-background",media:"image",operations:["edit_image"]},{id:"fal:bria/fibo-edit-1.5/expand",media:"image",operations:["edit_image"]},{id:"fal:fal-ai/marigold-v2",media:"image",operations:["edit_image"]},{id:"kie:bytedance/seedance-2-5",media:"video",operations:["text_to_video","image_to_video","reference_to_video","edit_video"],guide:"seedance25",dialect:"seedance",modes:[...En,{id:"v2v",label:"Edit video",roles:["video","image","audio"],requireAny:["video"]}],defaults:{..._a},frameOptions:{aspect_ratio:"adaptive"}},{id:"kie:bytedance/seedance-2-5-draft",media:"video",operations:["upscale_video"],title:"Seedance 2.5 Draft Complete",description:"Render the 1080p final of a Seedance 2.5 draft: a 480p kie:bytedance/seedance-2-5 run with draft on. Pass that run's Kie task id as draft_task_id.",defaults:{resolution:"1080p"}},{id:"kie:grok-imagine/image-to-video",media:"video",operations:["image_to_video"],guide:"grok_imagine"},{id:"kie:grok-imagine/text-to-video",media:"video",operations:["text_to_video"],guide:"grok_imagine",defaults:{duration:6,resolution:"480p"}},{id:"kie:grok-imagine/extend",media:"video",operations:["extend_video"],hidden:!0},{id:"kie:grok-imagine/upscale",media:"video",operations:["upscale_video"],hidden:!0},{id:"kie:kling-3.0-omni/text-to-video",media:"video",operations:["text_to_video"],guide:"kling30",dialect:"natural",defaults:{customize_multi_shots:!1}},{id:"kie:kling-3.0-omni/image-to-video",media:"video",operations:["image_to_video"],guide:"kling30",dialect:"natural"},{id:"kie:kling-3.0-omni/reference-to-video",media:"video",operations:["reference_to_video"],guide:"kling30",dialect:"natural",defaults:{audio:!1}},{id:"kie:kling-3.0-omni/transformation",media:"video",operations:["edit_video"],guide:"kling30",dialect:"natural",modes:[{id:"v2v",label:"Edit video",roles:["video"],requireAny:["video"],defaults:{aspect_ratio:"auto"}},{id:"v2v_refs",label:"Edit with references",roles:["video","image"],requireAny:["video"]}]},{id:"kie:kling-3.0/motion-control",media:"video",operations:["motion_control"],guide:"kling30",dialect:"natural",defaults:{mode:"720p"}},{id:"kie:gemini-omni-video",media:"video",operations:["image_to_video","edit_video"],dialect:"natural_source_video",defaults:{duration:"8"},modes:[{id:"i2v",label:"Image to video",roles:["image"]},{id:"v2v",label:"Edit video",roles:["video","image"],requireAny:["video"]}],refItem:{video:{start:0,ends:8}},aliases:{clip_start:"video_list.0.start",clip_end:"video_list.0.ends"}},{id:"kie:wan/3-0-video",media:"video",operations:["text_to_video","image_to_video","reference_to_video"],dialect:"seedance",modes:En},{id:"kie:wan/3-0-video-prime",media:"video",operations:["text_to_video","image_to_video","reference_to_video"],dialect:"seedance",modes:En},{id:"kie:happyhorse-1-1/text-to-video",media:"video",operations:["text_to_video"]},{id:"kie:happyhorse-1-1/image-to-video",media:"video",operations:["image_to_video"],dialect:"strip_frames"},{id:"kie:happyhorse-1-1/reference-to-video",media:"video",operations:["reference_to_video"],dialect:"brackets"},{id:"kie:happyhorse/video-edit",media:"video",operations:["edit_video"],dialect:"happyhorse_edit"},{id:"kie:minimax-h3/text-to-video",media:"video",operations:["text_to_video"]},{id:"kie:minimax-h3/image-to-video",media:"video",operations:["image_to_video"],dialect:"strip_frames"},{id:"kie:minimax-h3/reference-to-video",media:"video",operations:["reference_to_video"],dialect:"natural",rules:{refDurationMs:ea}},{id:"kie:volcengine/video-to-video-lip-sync",media:"video",operations:["lip_sync"]},{id:"kie:omnihuman-1-5",media:"video",operations:["image_to_video","lip_sync"],dialect:"natural"},{id:"kie:vidu-q4/image-to-video",media:"video",operations:["image_to_video"],dialect:"natural_kinds"},{id:"kie:vidu-q4/reference-to-video",media:"video",operations:["reference_to_video"],dialect:"natural_kinds"},{id:"kie:veo3",media:"video",operations:["text_to_video","image_to_video"],title:"Veo 3 (Kie)"},{id:"kie:veo3_fast",media:"video",operations:["text_to_video","image_to_video"],title:"Veo 3 Fast (Kie)"},{id:"xai:grok-imagine-video",media:"video",operations:["text_to_video","image_to_video","reference_to_video","edit_video"],guide:"grok_imagine",title:"Grok Imagine Video (xAI)",dialect:"natural",refs:{first_frame:"image",audio:null},modes:Rd},{id:"fal:xai/grok-imagine-video/image-to-video",media:"video",operations:["image_to_video"],guide:"grok_imagine",hidden:!0},{id:"fal:xai/grok-imagine-video/reference-to-video",media:"video",operations:["reference_to_video"],guide:"grok_imagine",hidden:!0},{id:"fal:xai/grok-imagine-video/extend-video",media:"video",operations:["extend_video"],hidden:!0},{id:"fal:xai/grok-imagine-video/edit-video",media:"video",operations:["edit_video"],guide:"grok_imagine",hidden:!0},{id:"fal:xai/grok-imagine-video/v1.5/lite/image-to-video",media:"video",operations:["image_to_video"]},{id:"fal:xai/grok-imagine-video/v1.5/lite/text-to-video",media:"video",operations:["text_to_video"]},{id:"fal:alibaba/wan-3.0/text-to-video",media:"video",operations:["text_to_video"],hidden:!0},{id:"fal:alibaba/wan-3.0/image-to-video",media:"video",operations:["image_to_video"],hidden:!0},{id:"fal:alibaba/wan-3.0/reference-to-video",media:"video",operations:["reference_to_video"],hidden:!0},{id:"fal:alibaba/wan-3.0-prime/text-to-video",media:"video",operations:["text_to_video"],hidden:!0},{id:"fal:alibaba/wan-3.0-prime/image-to-video",media:"video",operations:["image_to_video"],hidden:!0},{id:"fal:alibaba/wan-3.0-prime/reference-to-video",media:"video",operations:["reference_to_video"],hidden:!0},{id:"fal:blackforestlabs/flux-3-max/text-to-video",media:"video",operations:["text_to_video"],title:"FLUX 3 Max",defaults:Cn},{id:"fal:blackforestlabs/flux-3-max/image-to-video",media:"video",operations:["image_to_video"],title:"FLUX 3 Max Image",refs:{first_frame:"image_url"},modes:Ot,defaults:Cn},{id:"fal:blackforestlabs/flux-3-max/keyframes-to-video",media:"video",operations:["image_to_video"],title:"FLUX 3 Max Keyframes",refs:{image:"keyframes"},keyframeFps:24,defaults:Cn},{id:"fal:minimax/h3-max/reframe-video",media:"video",operations:["edit_video"]},{id:"fal:minimax/h3-max/insert-video",media:"video",operations:["edit_video"],refs:{video:["video_url","reference_video_urls"]}},{id:"fal:minimax/h3-max/recast",media:"video",operations:["edit_video"]},{id:"fal:minimax/h3-max-turbo/extend-video",media:"video",operations:["extend_video"]},{id:"fal:minimax/h3-max/relight",media:"video",operations:["edit_video"]},at("16bit-pixel"),at("hand-drawn"),at("low-poly"),at("retro-toon-70s"),at("vhs"),{id:"fal:bytedance/seedance-2.5/us/text-to-video",media:"video",operations:["text_to_video"],guide:"seedance25",dialect:"seedance",hidden:!0},{id:"fal:bytedance/seedance-2.5/us/image-to-video",media:"video",operations:["image_to_video"],guide:"seedance25",dialect:"seedance",refs:{first_frame:"image_url"},modes:Ot,hidden:!0},{id:"fal:bytedance/seedance-2.5/us/reference-to-video",media:"video",operations:["reference_to_video","edit_video","extend_video"],guide:"seedance25",dialect:"seedance",modes:Td,hidden:!0},{id:"fal:bytedance/seedance-2.5/draft/complete",media:"video",operations:["upscale_video"],title:"Seedance 2.5 Draft Complete",hidden:!0},{id:"fal:bytedance/seedance-2.0/us/text-to-video",media:"video",operations:["text_to_video"],guide:"seedance2",dialect:"seedance"},{id:"fal:bytedance/seedance-2.0/us/image-to-video",media:"video",operations:["image_to_video"],guide:"seedance2",dialect:"seedance",refs:{first_frame:"image_url"},modes:Ot},{id:"fal:bytedance/seedance-2.0/us/reference-to-video",media:"video",operations:["reference_to_video"],guide:"seedance2",dialect:"seedance",modes:[{id:"r2v",label:"References",roles:["image","video","audio"],requireAny:["image","video"]}]},{id:"fal:fal-ai/kling-video/o3/standard/image-to-video",media:"video",operations:["image_to_video"],guide:"kling30",dialect:"strip_frames",refs:{first_frame:"image_url"},modes:Ot},{id:"fal:fal-ai/kandinsky6-pro/text-to-video",media:"video",operations:["text_to_video"]},{id:"fal:fal-ai/kandinsky6-pro/image-to-video",media:"video",operations:["image_to_video"],dialect:"strip_frames"},{id:"fal:fal-ai/kandinsky6-lite/text-to-video",media:"video",operations:["text_to_video"]},{id:"fal:fal-ai/kandinsky6-lite/image-to-video",media:"video",operations:["image_to_video"],dialect:"strip_frames"},{id:"fal:fal-ai/kandinsky6-vsr",media:"video",operations:["upscale_video"]},{id:"fal:fal-ai/kandinsky6-vsr/lite",media:"video",operations:["upscale_video"]},{id:"fal:fal-ai/vidu/q4/image-to-video",media:"video",operations:["image_to_video"],dialect:"natural_kinds",hidden:!0},{id:"fal:fal-ai/vidu/q4/reference-to-video",media:"video",operations:["reference_to_video"],dialect:"vidu",hidden:!0},{id:"fal:pixverse/music-video/vibemv",media:"video",operations:["reference_to_video"],refs:{image:["image_url","style_image_url"]}},{id:"fal:pixelcut/looping-video",media:"video",operations:["image_to_video"],dialect:"strip_frames"},{id:"fal:creatify/boreal",media:"video",operations:["text_to_video","image_to_video","lip_sync"]},{id:"fal:mirelo-ai/sfx2.0/video-to-video",media:"video",operations:["edit_video"],prompt:"text_prompt",defaults:{num_samples:1}},{id:"machgen:MiniMax-H3",media:"video",operations:st,title:"MiniMax H3 (MachGen)",dialect:"natural_strip_frames",modes:it({...ot,requireAny:["first_frame","last_frame"]},Lt),rules:Ft(15)},{id:"machgen:Seedance-2.5",media:"video",operations:st,title:"Seedance 2.5 (MachGen)",guide:"seedance25",dialect:"natural_strip_frames",modes:it(ot,Lt),frameOptions:{aspect_ratio:"adaptive"},rules:Ft(30)},{id:"machgen:Seedance-2.0",media:"video",operations:st,title:"Seedance 2.0 (MachGen)",guide:"seedance2",dialect:"natural_strip_frames",modes:it(ot,Lt,["image","video"]),rules:Ft(15)},{id:"machgen:Alibaba-Wan-3.0",media:"video",operations:st,title:"Wan 3.0 (MachGen)",dialect:"natural_strip_frames",modes:it(ot,Lt),rules:Ft(15)},{id:"machgen:HappyHorse-1.1",media:"video",operations:st,title:"HappyHorse 1.1 (MachGen)",dialect:"natural_strip_frames",modes:it({...ot,roles:["first_frame"]},["image"])},{id:"machgen:Grok-Imagine-Video-1.5",media:"video",operations:["image_to_video"],title:"Grok Imagine Video 1.5 (MachGen)",guide:"grok_imagine",dialect:"natural_strip_frames"},{id:"elevenlabs:text-to-speech",media:"audio",operations:["speech"],title:"ElevenLabs Text to Speech",defaults:{model_id:"eleven_multilingual_v2"}},{id:"elevenlabs:sound-generation",media:"audio",operations:["sfx"],title:"ElevenLabs Sound Effects"},{id:"elevenlabs:music",media:"audio",operations:["music"],title:"ElevenLabs Music",defaults:{force_instrumental:!0}},{id:"elevenlabs:video-to-music",media:"audio",operations:["video_to_music"],title:"ElevenLabs Video to Music"},{id:"kie:elevenlabs/sound-effect-v2",media:"audio",operations:["sfx"]},go("kie:elevenlabs/text-to-speech-multilingual-v2","ElevenLabs Multilingual v2 (Kie)"),go("kie:elevenlabs/text-to-speech-turbo-2-5","ElevenLabs Turbo 2.5 (Kie)"),{id:"kie:elevenlabs/text-to-dialogue-v3",media:"audio",operations:["dialogue"],title:"ElevenLabs v3 Dialogue (Kie)",prompt:"dialogue.0.text",aliases:{voice:"dialogue.0.voice"},defaults:{dialogue:[{voice:"Rachel"}]}},mo("kie:google/gemini-2-5-pro-tts","Gemini 2.5 Pro TTS (Kie)"),mo("kie:google/gemini-3-1-flash-tts","Gemini 3.1 Flash TTS (Kie)"),po("kie:google/gemini-3-8-flash-tts","Gemini 3.8 Flash TTS (Kie)"),po("kie:google/gemini-3-8-flash-lite-tts","Gemini 3.8 Flash Lite TTS (Kie)"),{id:"kie:suno/generate",media:"audio",operations:["music"],title:"Suno (Kie)",defaults:{model:"V5_5",instrumental:!0,customMode:!1}},{id:"kie:suno/sounds-generate",media:"audio",operations:["sfx"],title:"Suno Sounds (Kie)",defaults:{model:"V5_5"}},{id:"fal:elevenlabs/music/v2.5",media:"audio",operations:["music"],defaults:{force_instrumental:!0,output_format:"mp3_48000_192"}},{id:"fal:minimax/music-3",media:"audio",operations:["music"],defaults:{lyrics:"[Instrumental]"}},{id:"fal:elevenlabs/tts/eleven-v4",media:"audio",operations:["speech"],defaults:{voice:"Rachel",output_format:"mp3_44100_128"}},{id:"fal:elevenlabs/tts/eleven-v4-turbo",media:"audio",operations:["speech"],defaults:{voice:"Rachel",output_format:"mp3_44100_128"}},{id:"fal:google/gemini-3.8-flash-tts",media:"audio",operations:["speech"],defaults:{voice:"Kore"}},{id:"fal:google/gemini-3.8-flash-lite-tts",media:"audio",operations:["speech"],defaults:{voice:"Kore"}},{id:"fal:alibaba/qwen-audio-3-tts",media:"audio",operations:["speech"],defaults:{voice:"Cherry",language:"Auto"}},{id:"fal:fal-ai/bytedance/seed-speech/tts/v2",media:"audio",operations:["speech"],defaults:{output_format:"mp3"}}],Nd=new Map($d.map(e=>[e.id,e]));function Pd(e){return Nd.get(e)}const Xk="Frame mode follows the first image’s aspect ratio (adaptive).";function Od(e){if(e===null||typeof e!="object"||Array.isArray(e))return!1;const t=e;return[t.first_frame,t.last_frame].some(n=>typeof n=="string"&&n.trim()!==""||Array.isArray(n)&&n.some(r=>typeof r=="string"&&r.trim()!==""))}function ss(e,t){const n=Pd(e)?.frameOptions?.aspect_ratio;if(typeof n!="string")return;const r=t.generationMode??t.mode;if(r!=="r2v")return r==="i2v"||Od(t.refs)?n:void 0}const Ld=200,Fd={chat:"chat",image_rewrite:"image rewrite",video_rewrite:"video rewrite",script_rewrite:"script rewrite",post:"post",image_generate:"image",video_generate:"video",audio_generate:"audio"};function Dd(e){const t=h(e),r=(Array.isArray(t?.content)?t.content:[]).map(h).find(o=>o?.type==="text");return typeof r?.text=="string"?r.text:null}function Vd(e){const t=Dd(e);if(!t)return e;try{return JSON.parse(t)}catch{return null}}function jd(e){const t=h(e);return typeof t?.model=="string"&&t.model?t.model:typeof t?.tool=="string"&&t.tool?t.tool:""}function Gd(e){const t=h(e);return!t||typeof t.prompt!="string"||!t.prompt.trim()?[]:[{id:String(t.id??""),surface:typeof t.surface=="string"?t.surface:"",prompt:t.prompt,book:typeof t.book=="string"?t.book:"",model:jd(t.params),createdAt:typeof t.created_at=="number"?t.created_at:0}]}function qd(e){const t=h(Vd(e));return(Array.isArray(t?.entries)?t.entries:[]).flatMap(Gd)}function Ud(e){const t=new Set;return e.filter(n=>{const r=n.prompt.trim();return t.has(r)?!1:(t.add(r),!0)})}function Yk(e,t){const n=t.trim().toLowerCase();return n?e.filter(r=>r.prompt.toLowerCase().includes(n)):[...e]}function Jk(e,t){const n=e.filter(o=>t.has(o.prompt)),r=e.filter(o=>!t.has(o.prompt));return[...n,...r]}function Bd(e){return{book_id:e.bookId,scope:e.scope,limit:Ld,...e.surfaceFilter==="surface"?{surface:e.surface}:{}}}function Zk(e){return Fd[e]??e.replaceAll("_"," ")}function Hd(e){return e<1e12?e*1e3:e}function Qk(e,t){if(!e)return"";const n=Math.max(0,Math.floor((t-Hd(e))/6e4));if(n<1)return"just now";if(n<60)return`${n}m ago`;const r=Math.floor(n/60);if(r<24)return`${r}h ago`;const o=Math.floor(r/24);return o===1?"yesterday":`${o}d ago`}function as(e,t){return e.cells.find(n=>n.slot.row===t.row&&n.slot.column===t.column)}function Z(e){return ue(e.slot)}function cs(e){const t=ar(e).map(n=>n.reference);return[...new Set(t)]}function Sr(e,t){const n=ke(t),r=ni(n);if(r){const a=as(e,r);if(!a)throw new Error(`Notebook cell ${ue(r)} is empty`);return a}const o=e.cells.find(a=>a.id.toLowerCase()===n),i=o?[]:e.cells.filter(a=>a.id.toLowerCase().startsWith(n));if(i.length>1)throw new Error(`Cell reference @${n} is ambiguous`);const s=o??i[0];if(!s)throw new Error(`Notebook cell @${n} was not found`);return s}function ls(e){return cs(e)}function Ir(e){return e.type==="image"||e.type==="generate_image"?"image":e.type==="video"||e.type==="split_video"||e.type==="generate_video"||e.type==="concat"||e.type==="splice"?"video":e.type==="audio"||e.type==="extract_audio"||e.type==="generate_audio"?"audio":null}function Wd(e,t){return t==="first_frame"||t==="last_frame"||e==="audio"&&t==="replace_audio"?t:e}function us(e){const t=new Map;return e.map(n=>{const r=(t.get(n.target)??0)+1;return t.set(n.target,r),r===1?n.target:`${n.target}_${r}`})}function ds(e){const t=e.map(s=>({kind:s.kind,target:s.kind})),n=["first_frame","last_frame"],r=e.map((s,a)=>({kind:s.kind,target:s.kind==="image"?n[a]??"image":s.kind})),o=e.map(s=>({kind:s.kind,target:s.kind==="audio"?"replace_audio":s.kind})),i=[t,r,o];return i.filter((s,a)=>i.findIndex(c=>JSON.stringify(c)===JSON.stringify(s))===a)}function fs(e){const t=e.preferredModel?kr(e.actions,e.cellType).find(r=>r.model===e.preferredModel):void 0;if(t&&gn(t,e.connectedInputs))return t;const n=Cd({type:e.cellType},e.actions,e.connectedInputs);return n?rs(e.actions,e.cellType,n):null}function Kd(e,t){if(!t)return{};const n=t.options&&typeof t.options=="object"&&!Array.isArray(t.options)?t.options:{};return Object.fromEntries(e.controls.flatMap(r=>{const o=n[r.name]??t[r.name];return typeof o=="string"||typeof o=="number"||typeof o=="boolean"?[[r.name,o]]:[]}))}function ew(e){return ls(e)}function ho(e){return typeof e=="string"?[e]:Array.isArray(e)?e.filter(t=>typeof t=="string"):[]}function tw(e){const n=[...e.refs&&typeof e.refs=="object"&&!Array.isArray(e.refs)?Object.values(e.refs).flatMap(ho):[],...Object.entries(e).flatMap(([r,o])=>/(?:^|_)(?:ref|refs)$/u.test(r)?ho(o):[])];return ls(n.map(r=>r.startsWith("@")?r:`@${r}`).join(" "))}function nw(e,t,n){const r=n.find(i=>i.tool===e);if(r?.cellTypes[0])return r.cellTypes[0];const o=`${t} ${e}`.toLowerCase();return/audio|music|speech|t2a|voice/iu.test(o)?"generate_audio":/image|photo|picture|qart|qr/iu.test(o)?"generate_image":"generate_video"}function ms(e,t){const n=Ir(t);if(!n)throw new Error(`${Z(t)} is not a media-producing cell`);if(!Le(e,t))throw new Error(`${Z(t)} does not have media output yet`);return{cell:t,kind:n}}function zd(e,t){return t.map(n=>ms(e,Sr(e,n)))}function rw(e,t=[],n){const r=new Set(t);return e.cells.flatMap(o=>{if(r.has(o.id))return[];if(n&&rt(e.cells,e.edges,o.id,n)===null)return[];const i=Ir(o);return!i||!Le(e,o)?[]:[{cell:o,kind:i}]})}function ow(e){const t=zd(e.document,e.command.sourceReferences),n=t.find(p=>rt(e.document.cells,e.document.edges,p.cell.id,e.cellId)===null);if(n)throw new Error(`Connecting ${Z(n.cell)} would create a cycle`);let r=null,o=[];for(const p of ds(t)){const g=fs({actions:e.actions,cellType:e.command.cellType,connectedInputs:p,...e.preferredModel?{preferredModel:e.preferredModel}:{}});if(g){r=g,o=p;break}}if(!r)throw new Error(`No available ${e.command.mediaKind} generation action accepts these references`);const i=wr(r),s=Et(r,o)[0],a=Kd(r,e.routedParams),c={...s?{generationMode:s.id}:{},...Object.keys(a).length>0?{generationSettings:a}:{}},l=t.map(p=>p.cell.slot),u=e.lastWorkSlot??null,m=e.command.cellType==="generate_video"?hr(e.document.cells,l,u):e.command.cellType==="generate_image"||e.command.cellType==="generate_audio"?mn(e.document.cells,l,u):e.fallbackSlot,f={id:e.cellId,type:e.command.cellType,slot:m,prompt:e.command.prompt,...i,...Object.keys(c).length>0?{inputs:c}:{}},d=us(o);return{action:r,cell:f,connections:t.map((p,g)=>({sourceCellId:p.cell.id,targetInput:d[g]??p.kind})),sourceCellIds:t.map(p=>p.cell.id),sourceAddresses:t.map(p=>Z(p.cell))}}function iw(e,t){const n=new Set(e.sourceCellIds);for(const r of cs(e.cell.prompt??"")){const o=Sr(t,r);if(!n.has(o.id))throw new Error(`@${r} is referenced but not connected`)}}function Xd(e,t){const n=e.connections.map(o=>({source:o.sourceCellId,target:e.cell.id,targetInput:o.targetInput})),r=new Map(ld(e.cell.id,t.cells,n,A(e.cell.inputs?.generationMode)??void 0).map(o=>[o.sourceCellId,o.token]));return ti(e.cell.prompt??"",t.cells.flatMap(o=>{const i=r.get(o.id);return i?[{reference:wt(o.slot),replacement:`@${i}`}]:[]}))}function sw(e,t){return e.connections.flatMap(n=>{const r=t.cells.find(i=>i.id===n.sourceCellId),o=r?Ir(r):null;return o?[{kind:o,target:Wd(o,n.targetInput)}]:[]})}function Ar(e){const t=h(e.cell.inputs),n=h(t?.generationSettings),r=Object.fromEntries(Object.entries(n??{}).flatMap(([i,s])=>typeof s=="string"||typeof s=="number"||typeof s=="boolean"?[[i,s]]:[]));if(is(e.action.model,t?.generationMode))return{...r,aspect_ratio:"adaptive",duration:-1};const o=ss(e.action.model,t??{});return o?{...r,aspect_ratio:o}:r}function aw(e,t){return{...e,cell:{...e.cell,prompt:t}}}function cw(e,t,n){if(!t.cellTypes.includes(e.cell.type)||!gn(t,n))throw new Error("The selected generation model does not accept these inputs");const r=Et(t,n),o=h(e.cell.inputs)??{},i=A(o.generationMode),s=r.find(l=>l.id===i)??r[0];if(!s)throw new Error("The selected generation model does not have a compatible mode");const a=Ar(e),c=Object.fromEntries(t.controls.flatMap(l=>{const u=a[l.name];return u===void 0?[]:[[l.name,u]]}));return{...e,action:t,cell:{...e.cell,...wr(t),inputs:{...o,generationMode:s.id,generationSettings:c}}}}function lw(e,t,n){const r=Et(e.action,n).find(o=>o.id===t);if(!r)throw new Error("The selected generation type does not accept these inputs");return{...e,cell:{...e.cell,inputs:{...h(e.cell.inputs)??{},generationMode:r.id}}}}function uw(e,t,n){if(!e.action.controls.some(o=>o.name===t))throw new Error(`The selected generation model does not support ${t}`);const r=Ar(e);return n===void 0?delete r[t]:r[t]=n,{...e,cell:{...e.cell,inputs:{...h(e.cell.inputs)??{},generationSettings:r}}}}function dw(e){const t=e.draft.cell.type,n=[...new Set(e.sourceCellIds)].map(d=>{const p=e.document.cells.find(g=>g.id===d);if(!p)throw new Error("The selected source cell is no longer available");if(rt(e.document.cells,e.document.edges,p.id,e.draft.cell.id)===null)throw new Error(`Connecting ${Z(p)} to ${Z(e.draft.cell)} would create a cycle`);return ms(e.document,p)}),r=ds(n);let o=null,i=[];for(const d of r)if(gn(e.draft.action,d)){o=e.draft.action,i=d;break}if(!o)for(const d of r){const p=fs({actions:e.actions,cellType:t,connectedInputs:d});if(p){o=p,i=d;break}}if(!o){const d=t==="generate_audio"?"audio":t==="generate_image"?"image":"video";throw new Error(`No available ${d} generation action accepts these references`)}const s=Et(o,i),a=h(e.draft.cell.inputs)??{},c=A(a.generationMode),l=s.find(d=>d.id===c)??s[0];if(!l)throw new Error("The selected generation model does not have a compatible mode");const u=Ar(e.draft),m=Object.fromEntries(o.controls.flatMap(d=>{const p=u[d.name];return p===void 0?[]:[[d.name,p]]})),f=us(i);return{action:o,cell:{...e.draft.cell,...wr(o),inputs:{...a,generationMode:l.id,generationSettings:m}},connections:n.map((d,p)=>({sourceCellId:d.cell.id,targetInput:f[p]??d.kind})),sourceCellIds:n.map(d=>d.cell.id),sourceAddresses:n.map(d=>Z(d.cell))}}async function fw(e){let t=!1;try{const n=h(await e.callTool("create_notebook_cell",{book_id:e.bookId,notebook_id:e.document.id,...e.expectedRevision?{expected_revision:e.expectedRevision}:{},cell:{id:e.draft.cell.id,type:e.draft.cell.type,slot:e.draft.cell.slot,prompt:Xd(e.draft,e.document),provider:e.draft.cell.provider,model:e.draft.cell.model,operation:e.draft.cell.operation,tool:e.draft.cell.tool,inputs:e.draft.cell.inputs}})),r=A(n?.id);if(!r||r!==e.draft.cell.id)throw new Error("The server did not preserve the planned generation cell");t=!0;for(const o of e.draft.connections)await e.callTool("connect_notebook_cells",{book_id:e.bookId,notebook_id:e.document.id,source_cell_id:o.sourceCellId,target_cell_id:r,target_input:o.targetInput});return{cellId:r,cellAddress:A(n?.address)??Z(e.draft.cell),sourceCellIds:e.draft.sourceCellIds,sourceAddresses:e.draft.sourceAddresses}}catch(n){throw t&&await e.callTool("delete_notebook_cell",{book_id:e.bookId,notebook_id:e.document.id,cell_id:e.draft.cell.id}).catch(()=>{}),n}}const Yd=new Set(["","text","number","url","search","email","tel","date","time","datetime-local","password"]);function Jd(e){return!e||e.tagName.toLowerCase()!=="input"?!1:Yd.has((e.type??"").toLowerCase())}function mw(e,t){return e.defaultPrevented?"none":e.key==="Escape"?t.busy?"none":"cancel":e.key!=="Enter"||e.altKey||t.busy?"none":e.metaKey||e.ctrlKey||Jd(e.target)?"apply":"none"}const pw={transcribing:!1,analyzing:!1,error:null};function gw(e,t){return e.transcribing}function hw(e,t){return e==="transcript"?{transcribing:t}:{analyzing:t}}const bw="GPT-4o Translation",yw="ElevenLabs Transcript";function Zd(e){return e==="timed"||e==="plain"||e==="silence"?e:null}function bo(e){return Array.isArray(e)?e.flatMap(t=>{const n=A(t);return n?[n]:[]}):[]}function ps(e){return typeof e=="number"&&Number.isFinite(e)&&e>0?Math.trunc(e):0}function Qd(e){return Array.isArray(e)?e.flatMap(t=>{const n=h(t);return!n||typeof n.text!="string"?[]:typeof n.start!="number"||!Number.isFinite(n.start)?[]:typeof n.end!="number"||!Number.isFinite(n.end)?[]:[{text:n.text,start:n.start,end:n.end}]}):[]}function Mn(e){const t=h(e),n=t&&Zd(t.kind);return!t||!n?null:{kind:n,languageCode:A(t.language_code??t.languageCode),text:typeof t.text=="string"?t.text:"",wordCount:ps(t.word_count??t.wordCount),words:Qd(t.words)}}function ef(e){const t=h(e);if(!t)return null;if("elevenlabs"in t||"plain"in t){const r=Mn(t.elevenlabs),o=Mn(t.plain);return!r&&!o?null:{elevenlabs:r,plain:o}}const n=Mn(t);return n?n.kind==="plain"?{elevenlabs:null,plain:n}:{elevenlabs:n,plain:null}:null}function tf(e){const t=h(e);return t?{summary:typeof t.summary=="string"?t.summary:"",mood:A(t.mood),setting:A(t.setting),tags:bo(t.tags),subjects:bo(t.subjects),sceneCount:ps(t.scene_count??t.sceneCount)}:null}function Be(e){return e==="video"||e==="audio"||e==="final"}function _w(e){return!!(e&&e.kind!=="silence"&&e.text.trim())}function nf(e){if(e.kind==="silence")return"No dialog detected";const t=[e.kind==="timed"?"Word-timed":"Plain text",`${e.wordCount} ${e.wordCount===1?"word":"words"}`];return e.languageCode&&t.push(e.languageCode),t.join(" · ")}const rf=.4,of=12;function sf(e){const t=[];let n=[];for(const r of e){const o=n.at(-1),i=o?r.start-o.end:0,s=o?/[.!?]$/.test(o.text.trim()):!1;if(n.length>0&&(i>rf||s||n.length>=of)){const a=n.map(c=>c.text).join(" ").replace(/\s+/g," ").trim();a&&t.push({start:n[0].start,text:a}),n=[]}n.push(r)}if(n.length>0){const r=n.map(o=>o.text).join(" ").replace(/\s+/g," ").trim();r&&t.push({start:n[0].start,text:r})}return t}function af(e){const t=Math.max(0,Math.floor(e)),n=Math.floor(t/60),r=t%60;return`${n}:${String(r).padStart(2,"0")}`}function cf(e){return sf(e).map(t=>`${af(t.start)} ${t.text}`).join(`
14
+ `)}function vw(e,t){return t==="json"&&e?"json":"text"}function lf(e){const t=e.transcript;return!t||t.kind==="silence"?"":e.source==="elevenlabs"&&t.kind==="timed"&&t.words.length>0?cf(t.words):t.text}function uf(e){return e.view==="json"?e.jsonText??"":lf(e)}function kw(e){return uf(e)}function ww(e){return e.view==="json"?e.jsonFile?`Raw sidecar · ${e.jsonFile}`:"Raw sidecar":e.transcript?nf(e.transcript):null}function Sw(e){return e.view==="json"&&e.jsonLoading?"Loading sidecar…":e.view==="json"&&e.jsonError?e.jsonError:e.transcript?.kind==="silence"?"This clip has a transcript but no spoken dialog.":e.body?null:e.source==="plain"?"No GPT-4o translation yet.":"No transcript yet."}function Iw(e){return e?.kind==="timed"}async function df(e,t,n,r){const o=h(await e("export_asset_file",{book_id:n,asset_id:r,to:t==="copy"?"clipboard":"downloads"},{background:!0})),i=t==="copy"?"copied":"exported";if(o?.status!==i||typeof o.path!="string")throw new Error("The server did not confirm the file action. Try again.");return t==="copy"?"File copied to clipboard":`Saved ${o.path}`}function Aw({call:e,bookId:t,artifactId:n}){const[r,o]=_.useState({phase:"idle"}),i=_.useRef(!1),s=!!(e&&t&&n);async function a(c){if(!(!e||!t||!n||i.current)){i.current=!0,o({phase:"running",action:c});try{const l=await df(e,c,t,n);o({phase:"done",message:l})}catch(l){o({phase:"failed",message:l instanceof Error?l.message:String(l)})}finally{i.current=!1}}}return{state:r,available:s,run:a}}function ff(e){const t=e;return t?Ai(t.tags):null}function mf(e){const t=e;return!t||!Array.isArray(t.suggestions)?[]:t.suggestions.flatMap(n=>{const r=n,o=typeof r.facet=="string"?r.facet:null,i=typeof r.key=="string"?r.key:null,s=typeof r.label=="string"?r.label:null;if(!o||!i||!s)return[];const a=Number(r.assets);return[{facet:o,key:i,label:s,assets:Number.isFinite(a)?a:0}]})}function xw({call:e,target:t,tags:n}){const r=t?`${t.bookId}/${t.assetId}`:"",o=JSON.stringify(n),[i,s]=_.useState({targetKey:r,source:o,canonical:n,pending:[],error:null}),[a,c]=_.useState({targetKey:r,tags:[]}),l=_.useRef(Promise.resolve()),u=_.useRef(0),m=_.useRef(0);let f=i;(i.targetKey!==r||i.source!==o)&&(f={targetKey:r,source:o,canonical:n,pending:i.targetKey===r?i.pending:[],error:i.targetKey===r?i.error:null},s(f));const d=f.pending.reduce((I,E)=>Jr(I,E.edit,E.action),f.canonical),p=_.useCallback((I,E)=>{if(!e||!t)return Promise.resolve();let C;try{C=Ii(I,[...d?.effective??[],...d?.dismissed??[],...a.targetKey===r?a.tags:[]])}catch(T){return s(N=>({...N,error:T instanceof Error?T.message:String(T)})),Promise.resolve()}const x=++u.current;s(T=>({...T,pending:[...T.pending,{id:x,edit:C,action:E}],error:null}));const $=l.current.then(async()=>{try{const T=await e("edit_asset_tag",{op:E,book_id:t.bookId,asset_id:t.assetId,facet:C.facet,label:C.label}),N=ff(T);if(!N)throw new Error("The server returned no tag state");s(M=>M.targetKey!==r||!M.pending.some(R=>R.id===x)?M:{...M,canonical:M.source===o?N:Jr(M.canonical,C,E),pending:M.pending.filter(R=>R.id!==x)})}catch(T){s(N=>N.targetKey!==r||!N.pending.some(M=>M.id===x)?N:{...N,pending:N.pending.filter(M=>M.id!==x),error:T instanceof Error?T.message:String(T)})}});return l.current=$,$},[e,d,a,o,t,r]),g=_.useCallback(I=>p(I,"add"),[p]),y=_.useCallback(I=>p(I,"remove"),[p]),v=_.useCallback(I=>p(I,"restore"),[p]),S=_.useCallback(async(I,E)=>{if(!e||!t)return;const C=++m.current;try{const x=await e("suggest_asset_tags",{book_id:t.bookId,...I.trim()?{prefix:I.trim()}:{},...E?{facet:E}:{},limit:20},{background:!0});m.current===C&&c({targetKey:r,tags:mf(x)})}catch{m.current===C&&c({targetKey:r,tags:[]})}},[e,t,r]),w=_.useMemo(()=>Tl(a.targetKey===r?a.tags:[],d?.effective??[]),[d,a,r]),k=_.useCallback(()=>s(I=>({...I,error:null})),[]);return{tags:d,busy:f.pending.length>0,error:f.error,canEdit:!!(e&&t),suggestions:w,addTag:g,removeTag:y,restoreTag:v,loadSuggestions:S,clearError:k}}const gs="videobook.prompt-history.pins";function pf(){try{const e=window.localStorage.getItem(gs),t=e?JSON.parse(e):[];return new Set(Array.isArray(t)?t.filter(n=>typeof n=="string"):[])}catch{return new Set}}function gf(e){try{window.localStorage.setItem(gs,JSON.stringify([...e]))}catch{return}}function hf(e){return e instanceof Error?e.message:String(e)}function Ew({call:e,bookId:t,surface:n,prompt:r,onApply:o}){const[i,s]=_.useState(!1),[a,c]=_.useState(!1),[l,u]=_.useState(null),[m,f]=_.useState(null),[d,p]=_.useState(0),[g,y]=_.useState("book"),[v,S]=_.useState("surface"),[w,k]=_.useState(""),[I,E]=_.useState(pf),[C,x]=_.useState(-1),[$,T]=_.useState(""),N=_.useRef(0),M=!!(e&&t&&n),R=C>=0&&m?.[C]?.prompt===r,D=R?C:-1,z=async(P,Y)=>{if(!e||!t||!n)return null;const Me=N.current+1;N.current=Me;const Se={bookId:t,surface:n,scope:P,surfaceFilter:Y};c(!0),u(null);try{const Mt=Ud(qd(await e("list_prompt_history",Bd(Se))));return N.current!==Me?null:(f(Mt),p(Date.now()),Mt)}catch(Mt){return N.current===Me&&u(hf(Mt)),null}finally{N.current===Me&&c(!1)}},q=(P,Y,Me)=>{if(Y<0){x(-1),o(Me);return}const Se=P[Y];Se&&(x(Y),o(Se.prompt))},J=()=>{if(!M)return;if(D>=0&&m){q(m,D+1,$);return}const P=r;T(P),z(g,v).then(Y=>{Y&&q(Y,0,P)})},pe=()=>{!R||!m||q(m,D-1,$)},ge=()=>{x(-1),o($)},K=()=>{if(i){s(!1);return}s(!0),k(""),z(g,v)},H=P=>{y(P),x(-1),z(P,v)},U=P=>{S(P),x(-1),z(g,P)},we=P=>{const Y=new Set(I);Y.has(P)?Y.delete(P):Y.add(P),E(Y),gf(Y)},Q=P=>{x(-1),s(!1),o(P)},B=P=>P.altKey&&P.key==="ArrowUp"?(P.preventDefault(),J(),!0):P.altKey&&P.key==="ArrowDown"?(P.preventDefault(),pe(),!0):P.key==="Escape"&&R?(P.preventDefault(),P.stopPropagation(),ge(),!0):!1;return{available:M,open:i,loading:a,error:l,entries:m,loadedAt:d,scope:g,surfaceFilter:v,surface:n??"",query:w,pins:I,stepping:R,position:D+1,canOlder:M&&(m===null||!R||D<m.length-1),canNewer:R,toggleOpen:K,close:()=>s(!1),setQuery:k,setScope:H,setSurfaceFilter:U,togglePin:we,use:Q,older:J,newer:pe,handlePromptKeyDown:B}}const bf={generate_image:"image_generate",generate_video:"video_generate",generate_audio:"audio_generate"};function Cw(e){return bf[e]??null}function yf(e){return e==="image-reverse"?"image":"video"}async function Mw(e,{sourceBookId:t,sourceArtifactId:n,mode:r,previewUrl:o,sourceRange:i}){const s=await e("prepare_search_reference",{source_book_id:t,source_artifact_id:n,kind:yf(r),...i?{source_start_seconds:i.startSeconds,source_duration_seconds:i.durationSeconds}:{}});return hs(s,o)}function _f(e,t){if(e.type.startsWith(`${t}/`))return!0;const n=e.name.split(".").at(-1)?.toLowerCase()??"";return t==="image"?["jpg","jpeg","png","webp","heic","heif"].includes(n):["mp4","mov","webm","mkv","avi"].includes(n)}function Tw(e,t,n){const r=Number(e||"0");if(!Number.isFinite(r)||r<0)throw new Error("Reference start must be a non-negative number");const o=t.trim()?Number(t):void 0;if(o!==void 0&&(!Number.isFinite(o)||o<=0))throw new Error("Reference duration must be a positive number");const i=n.durationMs===void 0?void 0:n.durationMs/1e3;if(i!==void 0&&r>=i)throw new Error("Reference start must fall within the video");if(i!==void 0&&o!==void 0&&r+o>i)throw new Error("Reference range extends past the end of the video");if(!(r===0&&o===void 0))return{start_seconds:r,...o===void 0?{}:{duration_seconds:o}}}async function Rw(e,t,n){if(!_f(e,n))throw new Error(`Choose a compatible ${n} file`);const r=e.name.trim()||`${n}-reference.${n==="image"?"png":"mp4"}`,o=new URLSearchParams({filename:r,bookId:t,kind:n}),i=await fetch(`/api/search-references?${o}`,{method:"POST",headers:e.type?{"Content-Type":e.type}:{},body:e}),s=await i.json();if(!i.ok)throw new Error(ct(s,"error")??"Could not prepare search reference");const a=hs(s);return a.previewUrl?a:{...a,previewUrl:URL.createObjectURL(e),localPreview:!0}}async function vf(e){e&&(e.localPreview&&e.previewUrl&&URL.revokeObjectURL(e.previewUrl),await fetch(`/api/search-references/${encodeURIComponent(e.referenceId)}`,{method:"DELETE"}).catch(()=>{}))}function hs(e,t){const n=ct(e,"reference_id"),r=ct(e,"kind"),o=ct(e,"name"),i=yo(e,"expires_at");if(!n||r!=="image"&&r!=="video"||!o||i===null)throw new Error("The server returned an invalid search reference");const s=yo(e,"duration_ms"),a=ct(e,"preview_url")??t;return{referenceId:n,kind:r,name:o,expiresAt:i,...s===null?{}:{durationMs:s},...a?{previewUrl:a}:{}}}function ct(e,t){if(typeof e!="object"||e===null)return null;const n=e[t];return typeof n=="string"?n:null}function yo(e,t){if(typeof e!="object"||e===null)return null;const n=e[t];return typeof n=="number"&&Number.isFinite(n)?n:null}const bs=.25,_o=.01;function Xn(e){return Math.min(1,Math.max(0,e))}function Dt(e){return Math.round(Xn(e)*1e6)/1e6}function kf(e,t){const n=Math.max(e.x,t.x),r=Math.max(e.y,t.y),o=Math.min(e.x+e.width,t.x+t.width),i=Math.min(e.y+e.height,t.y+t.height),s=Math.max(0,o-n)*Math.max(0,i-r),a=e.width*e.height+t.width*t.height-s;return a>0?s/a:0}function $w(e,t){const n=Dt(Math.min(e.x,t.x)),r=Dt(Math.min(e.y,t.y)),o=Dt(Math.min(1-n,Math.abs(t.x-e.x))),i=Dt(Math.min(1-r,Math.abs(t.y-e.y)));return o<_o||i<_o?null:{x:n,y:r,width:o,height:i}}function Nw(e,t,n){return n.width<=0||n.height<=0?{x:0,y:0}:{x:Xn((e-n.left)/n.width),y:Xn((t-n.top)/n.height)}}function wf(e,t,n=bs){return t.flatMap(o=>{if(!o.box)return[];const i=kf(e,o.box);return i>=n?[{subjectId:o.id,iou:i,box:o.box}]:[]}).sort((o,i)=>i.iou-o.iou)[0]??null}function Pw(e,t,n=bs){const r=wf(e.box,t,n);return r?{...e,box:r.box,matchedSubjectId:r.subjectId}:e}function Ow(e,t,n={}){return{subjectIds:[...e],regions:t.map(r=>({id:r.id,box:r.box,...r.matchedSubjectId?{matchedSubjectId:r.matchedSubjectId}:{}})),replacements:{...n}}}const Sf="Mention a replacement image (for example @g7) or assign one in the panel.",If="Mention one image for every region, or one image to use for all of them.",Af="Draw a region or select a person or object to replace.";function ys(e){const t=new Set,n=[];for(const r of e){const o=r.trim();if(!o)continue;const i=o.toLowerCase();t.has(i)||(t.add(i),n.push(o))}return n}function Lw(e,t,n=e){const r=new Set(e.flatMap(s=>s.matchedSubjectId?[s.matchedSubjectId]:[])),o=e.map(s=>({key:s.id,box:s.box,...s.matchedSubjectId?{subjectId:s.matchedSubjectId}:{},label:s.matchedSubjectId?t.find(a=>a.id===s.matchedSubjectId)?.label??`Region ${n.findIndex(a=>a.id===s.id)+1}`:`Region ${n.findIndex(a=>a.id===s.id)+1}`})),i=t.flatMap(s=>r.has(s.id)?[]:[{key:s.id,...s.box?{box:s.box}:{},subjectId:s.id,label:s.label}]);return[...o,...i]}function Fw(e,t){return e.length>0&&e.every(n=>!!t[n.key]?.trim())}function Dw(e,t){return e.flatMap(n=>{const r=t[n.key]?.trim();return r?[{replacementArtifactId:r,...n.box?{box:n.box}:{},...n.subjectId?{subjectId:n.subjectId}:{}}]:[]})}function Vw(e,t,n){if(e.length===0)return{ok:!1,error:Af};const r={};for(const s of e){const a=t[s.key]?.trim();a&&(r[s.key]=a)}const o=ys(n),i=e.filter(s=>!r[s.key]);if(o.length===1){const s=o[0];for(const a of i)r[a.key]=s}else if(o.length>1){if(o.length!==i.length)return{ok:!1,error:If};i.forEach((s,a)=>{r[s.key]=o[a]})}return e.every(s=>!!r[s.key])?{ok:!0,replacements:r}:{ok:!1,error:Sf}}function jw(e,t){const n=new Map(t.map(i=>[i.cellAddress.toLowerCase(),i])),r=[],o=new Set;for(const i of ys(e)){const s=n.get(i.toLowerCase());if(!s)return{ok:!1,error:`@${i.toLowerCase()} is not an image on this notebook.`};if(s.type.toLowerCase()!=="image")return{ok:!1,error:`@${s.cellAddress} is a ${s.type}, not an image.`};o.has(s.artifactId)||(o.add(s.artifactId),r.push(s.artifactId))}return{ok:!0,artifactIds:r}}function Gw(e){return`region-${e.length+1}-${Math.random().toString(36).slice(2,8)}`}function qw(e,t,n=!1){if(t.length>0)return`${t.map(o=>o.label).join(", ")}${n?" · replaced with another image":""}`;if(e.length===0)return null;const r=e.slice(0,3).map(o=>o.label).join(", ");return e.length>3?`${r} +${e.length-3}`:r}function Uw(e,t,n=!1){return n?"Optional notes for the replacement. Pick an image below, or mention one like @g7.":t.length>0?`Describe how to change ${t.map(r=>r.label).join(" and ")}, e.g. "remove the glass door". To replace with an image, pick one below or mention @g7.`:e.length===0?'Describe a whole-image edit, e.g. "make it look like a snowy night", or select a subject to scope the change.':`Describe how to change ${e.slice(0,2).map(r=>r.label).join(" and ")}, e.g. "make it smooth porcelain".`}function xf(e){if(e<60)return`${e.toFixed(1)}s`;const t=Math.floor(e/60),n=Math.round(e%60);return`${t}:${String(n).padStart(2,"0")}`}function Bw(e){const t=[];return e.width&&e.height&&t.push(`${e.width} × ${e.height}`),e.duration&&e.type!=="image"&&t.push(xf(e.duration)),t.push(e.type==="final"?"VIDEO":e.type.toUpperCase()),t}const Ef=["button","input","select","textarea","[href]",'[contenteditable="true"]',"[tabindex]"].join(", ");function Cf(e){const t=e.getAttribute("tabindex");return!e.hidden&&!e.matches(':disabled, [type="hidden"]')&&(t===null||!Number.isFinite(Number(t))||Number(t)>=0)&&e.closest('[hidden], [aria-hidden="true"], [inert]')===null}function Mf(e){return[...e.querySelectorAll(Ef)].filter(Cf)}function Tf(e,t,n){const r=e[0],o=e.at(-1);return!r||!o?null:e.includes(t)?n&&t===r?o:!n&&t===o?r:null:n?o:r}function Hw(e,t){if(e.key==="Escape"){t.busy||(e.preventDefault(),t.onClose());return}if(e.key!=="Tab"||!t.container)return;const n=Mf(t.container),r=t.activeElement===void 0?document.activeElement:t.activeElement,o=Tf(n,r,e.shiftKey);o&&(e.preventDefault(),o.focus())}async function vo(e,t,n,r){await e("delete_notebook_cell",{book_id:t,notebook_id:n,cell_id:r}).catch(()=>{})}function Rf(e){const t=h(e);return A(t?.id)}async function $f(e,t,n,r){const o=h(await e("get_notebook",{book_id:t,notebook_id:n}).catch(()=>null));if(!o)return null;const i=Array.isArray(o.cells)?o.cells:[],s=Array.isArray(o.edges)?o.edges:[];for(const a of s){const c=h(a),l=A(c?.source),u=A(c?.target),m=A(c?.targetInput??c?.target_input);if(l===r&&m==="media"&&u)return u}for(const a of i){const c=h(a);if(A(c?.type)!=="audio")continue;const l=h(c?.inputs);if(A(l?.producerCellId)===r)return Rf(c)}return null}async function Ww(e){const t=e.text.trim(),n=e.voiceId.trim();if(!t)throw new Error("Speak text is required");if(!n)throw new Error("Speak voice is required");const r=mn(e.document.cells,[],e.lastWorkSlot??null);let o=null,i=null;try{const s=h(await e.callTool("create_notebook_cell",{book_id:e.bookId,notebook_id:e.document.id,...e.expectedRevision?{expected_revision:e.expectedRevision}:{},cell:{type:"generate_audio",label:"Speak",slot:r,prompt:t,inputs:{generationSettings:{voice_id:n}}}}));o=A(s?.id),i=A(h(s?.output_cell)?.id);const a=A(s?.address)??ue(r);if(!o)throw new Error("The server did not return the Speak cell");if(!i)throw new Error("The server did not return the Speak output cell");return{cellId:o,cellAddress:a,outputCellId:i}}catch(s){let a=i;throw o&&!a&&(a=await $f(e.callTool,e.bookId,e.document.id,o)),a&&await vo(e.callTool,e.bookId,e.document.id,a),o&&await vo(e.callTool,e.bookId,e.document.id,o),s}}function Nf(e){const t=h(e);return{voices:Array.isArray(t?.voices)?t.voices.flatMap(r=>{const o=h(r),i=A(o?.voice_id)??A(o?.voiceId),s=A(o?.name),a=A(o?.source);if(!i||!s||a!=="custom"&&a!=="generic")return[];const c=A(o?.category),l=A(o?.preview_url)??A(o?.previewUrl);return[{voiceId:i,name:s,source:a,...c?{category:c}:{},...l?{previewUrl:l}:{}}]}):[],status:t?.status==="live"?"live":"fallback",warning:W(t?.warning)}}async function Pf(e){return Nf(await e("list_elevenlabs_voices",{},{background:!0}))}function ko(){return{voices:[],status:"fallback",warning:null,loading:!1,error:null}}function Of(e){let t=e.ready,n=e.load,r=0,o=!1,i=ko(),s=null;const a=new Set,c=m=>{i=m;for(const f of a)f()},l=()=>{r+=1,o=!1,s=null,c(ko())},u=()=>{if(!t)return Promise.resolve(null);if(s)return s;const m=r,f=Promise.resolve().then(()=>n()).then(d=>r!==m||s!==f?null:(o=!0,s=null,c({...d,loading:!1,error:null}),d),d=>(r!==m||s!==f||(o=!1,s=null,c({...i,loading:!1,error:d instanceof Error?d.message:String(d)})),null));return s=f,c({...i,loading:!0,error:null}),f};return{configure(m){t===m.ready&&n===m.load||(t=m.ready,n=m.load,l())},ensureLoaded(){return t?s||(o?Promise.resolve({voices:i.voices,status:i.status,warning:i.warning}):u()):Promise.resolve(null)},getSnapshot(){return i},refresh:u,reset:l,subscribe(m){return a.add(m),()=>a.delete(m)}}}function Kw(e){const t=ne.c(25),{callTool:n,ready:r}=e;let o;t[0]!==n?(o=()=>Pf(n),t[0]=n,t[1]=o):o=t[1];const i=o;let s;t[2]!==i||t[3]!==r?(s=()=>Of({ready:r,load:i}),t[2]=i,t[3]=r,t[4]=s):s=t[4];const[a]=_.useState(s);let c,l;t[5]!==a||t[6]!==i||t[7]!==r?(c=()=>{a.configure({ready:r,load:i})},l=[a,i,r],t[5]=a,t[6]=i,t[7]=r,t[8]=c,t[9]=l):(c=t[8],l=t[9]),_.useEffect(c,l);let u,m;t[10]!==a?(u=()=>()=>a.reset(),m=[a],t[10]=a,t[11]=u,t[12]=m):(u=t[11],m=t[12]),_.useEffect(u,m);const f=_.useSyncExternalStore(a.subscribe,a.getSnapshot,a.getSnapshot);let d;t[13]!==a?(d=()=>a.ensureLoaded(),t[13]=a,t[14]=d):d=t[14];const p=d;let g;t[15]!==a?(g=()=>a.refresh(),t[15]=a,t[16]=g):g=t[16];const y=g;let v;return t[17]!==p||t[18]!==y||t[19]!==f.error||t[20]!==f.loading||t[21]!==f.status||t[22]!==f.voices||t[23]!==f.warning?(v={voices:f.voices,status:f.status,warning:f.warning,loading:f.loading,error:f.error,ensureLoaded:p,refresh:y},t[17]=p,t[18]=y,t[19]=f.error,t[20]=f.loading,t[21]=f.status,t[22]=f.voices,t[23]=f.warning,t[24]=v):v=t[24],v}function Lf(e){const t=h(e);if(!t)return null;const n=r=>t[r]===!0;return{semantic:n("semantic"),regionReplace:n("regionReplace"),wholeImage:n("wholeImage"),exactMask:n("exactMask")}}function Ff(e){const t=h(e),n=Array.isArray(t?.models)?t.models:[],r=[];for(const o of n){const i=h(o),s=A(i?.id),a=A(i?.label),c=A(i?.provider),l=Lf(i?.capabilities);if(!s||!a||c!=="kie"&&c!=="fal"||!l)continue;const u=typeof i?.max_input_images=="number"&&Number.isFinite(i.max_input_images)?i.max_input_images:null;r.push({id:s,label:a,provider:c,capabilities:l,maxInputImages:u,available:i?.available===!0})}return{models:r,defaultModelId:A(t?.default_model)??r[0]?.id??gi,lastUsedModelId:A(t?.last_used_model)}}function zw(e){const t=ne.c(13),{callTool:n,ready:r}=e,[o,i]=_.useState(null),[s,a]=_.useState(!1),[c,l]=_.useState(null),u=_.useRef(null),m=_.useRef(null);let f;t[0]!==n||t[1]!==o||t[2]!==r?(f=S=>{if(!r||u.current||m.current===S&&o)return;a(!0),l(null);const w=n("list_image_edit_models",{book_id:S},{background:!0}).then(k=>{u.current===w&&(u.current=null,m.current=S,i(Ff(k)),a(!1))}).catch(k=>{u.current===w&&(u.current=null,l(k instanceof Error?k.message:String(k)),a(!1))});u.current=w},t[0]=n,t[1]=o,t[2]=r,t[3]=f):f=t[3];const d=f;let p;t[4]!==o?.models?(p=o?.models??[],t[4]=o?.models,t[5]=p):p=t[5];const g=o?.defaultModelId??gi,y=o?.lastUsedModelId??null;let v;return t[6]!==d||t[7]!==c||t[8]!==s||t[9]!==p||t[10]!==g||t[11]!==y?(v={models:p,defaultModelId:g,lastUsedModelId:y,loading:s,error:c,ensureLoaded:d},t[6]=d,t[7]=c,t[8]=s,t[9]=p,t[10]=g,t[11]=y,t[12]=v):v=t[12],v}function Xw(e,t,n){const r=t.find(s=>s.id===e.cell_id)??t.find(s=>s.outputArtifactId!==void 0&&s.outputArtifactId===e.asset_id);if(!r)return{ok:!1,message:"That cell is no longer in this notebook."};const o=ue(r.slot),i=n.find(s=>s.artifactId===r.outputArtifactId);return i?i.type==="audio"?{ok:!1,message:`${o} holds audio; fullscreen shows images and video.`}:!i.mediaUrl&&!i.thumbnailUrl?{ok:!1,message:`${o} is still processing. Try again when it is ready.`}:{ok:!0,cell:r,asset:i,address:o}:{ok:!1,message:`${o} has no media yet.`}}function Yw(e,t,n,r){const o=e?.trim()||t?.outputArtifactId;if(!o)return{ok:!1,message:"Select a video cell or pass a target: /watermark @a1"};const i=n.find(a=>a.artifactId===o);if(!i)return{ok:!1,message:`No asset found for ${o}`};if(i.type!=="video")return{ok:!1,message:`Watermark applies to video assets; ${r.get(o)??o} is ${i.type}`};const s=r.get(o);return{ok:!0,artifactId:o,label:s?`@${s}`:o}}const Df=["top-left","top-center","top-right","middle-left","middle-center","middle-right","bottom-left","bottom-center","bottom-right"],Vf=33,jf=10,Gf=90,qf=.5,Uf=.05,Bf=1,_s=32,Hf=0,Wf=96,Kf=88,zf=26,Jw=480,Xf=100,Yf=0,Jf=100,Zf=["center","above-qr","on-qr","below-qr"];function Zw(e){return Number.isFinite(e)?Math.min(Gf,Math.max(jf,e)):Vf}function Qw(e){return Number.isFinite(e)?Math.min(Bf,Math.max(Uf,e)):qf}function Qf(e){return Number.isFinite(e)?Math.round(Math.min(Wf,Math.max(Hf,e))):_s}function eS(e){const t=Qf(e);return Math.max(zf+4,Kf+2*(t-_s))}function em(e){return typeof e=="string"&&Zf.includes(e)}function tS(e){return Number.isFinite(e)?Math.round(Math.min(Jf,Math.max(Yf,e))):Xf}function tm(e){return e==="auto"||Df.includes(e)}const nm=.5,rm=0,om=2,im=.001;function nS(e){if(!Number.isFinite(e))return nm;const t=Math.min(om,Math.max(rm,e));return Math.round(t*10)/10}function sm(e,t,n,r){const o=Math.max(0,e),s=(t===null?n:Math.min(t,n))-o;if(!(r>0)||!(s>0))return{fadeIn:0,fadeOut:0};const a=Math.min(r,s/2),c=t!==null&&t<n-im;return{fadeIn:o>0?a:0,fadeOut:c?a:0}}function rS(e,t,n,r,o,i){if(e<t||n!==null&&e>n)return 0;const s=sm(t,n,r,i);let a=1;return s.fadeIn>0&&(a=Math.min(a,(e-t)/s.fadeIn)),s.fadeOut>0&&n!==null&&(a=Math.min(a,(n-e)/s.fadeOut)),o*Math.min(1,Math.max(0,a))}const vs="videobook.watermark-review.v1:",ft=new Map;function wo(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:null}function xr(e){const t=wo(e);if(!t)return{};const n={};dc(t.platform)&&(n.platform=t.platform),tm(t.position)&&(n.position=t.position),em(t.handlePlacement)&&(n.handlePlacement=t.handlePlacement),typeof t.url=="string"&&(n.url=t.url);for(const o of["includeQr","includeHandle","includePlatformIcon","includeHandleBorder","saveDefault"])typeof t[o]=="boolean"&&(n[o]=t[o]);for(const o of["handleVerticalPercent","handlePadding","handlePaddingY","handleRounding","qrOpacity","handleOpacity","fadeSeconds","qrStartSeconds","handleStartSeconds"]){const i=t[o];typeof i=="number"&&Number.isFinite(i)&&(n[o]=i)}for(const o of["qrEndSeconds","handleEndSeconds"]){const i=t[o];(i===null||typeof i=="number"&&Number.isFinite(i))&&(n[o]=i)}const r=wo(t.handles);if(r){n.handles={};for(const o of uc)typeof r[o]=="string"&&(n.handles[o]=r[o])}return n}function am(e){if(!e)return{};const t=ft.get(e);if(t)return t;try{const n=window.localStorage.getItem(`${vs}${e}`);if(n!==null)return xr(JSON.parse(n))}catch{return ft.get(e)??{}}return ft.get(e)??{}}function oS(e,t,{handle:n,...r}){if(!e)return;const o=am(e),i={...o,...xr(r),platform:r.platform??t,handles:n===void 0?o.handles:{...o.handles,[t]:n}};try{window.localStorage.setItem(`${vs}${e}`,JSON.stringify(i)),ft.delete(e)}catch{ft.set(e,i)}}function cm(e,t){if(!t||!Number.isFinite(t)||t<=0)return e;const n={...e};for(const[r,o]of[["qrStartSeconds","qrEndSeconds"],["handleStartSeconds","handleEndSeconds"]]){const i=Math.max(0,e[r]??0),s=Math.min(t,e[o]??t);n[r]=i<s?i:0,n[o]=i<s&&e[o]!=null?s:null}return n}function lm(e,t,n){const r=xa,o=n&&n>0?Ea(r,n):null,i={...e},s=a=>e[a]===void 0&&t[a]===void 0;return s("position")&&(i.position="bottom-right"),s("handleVerticalPercent")&&(i.handleVerticalPercent=r.handleVerticalPercent),s("handlePadding")&&(i.handlePadding=r.handlePaddingX),s("handlePaddingY")&&(i.handlePaddingY=r.handlePaddingY),s("handleRounding")&&(i.handleRounding=r.handleRounding),s("qrOpacity")&&(i.qrOpacity=r.qrOpacity),s("handleOpacity")&&(i.handleOpacity=r.handleOpacity),s("fadeSeconds")&&(i.fadeSeconds=r.fadeSeconds),s("includePlatformIcon")&&(i.includePlatformIcon=r.includePlatformIcon),s("includeHandleBorder")&&(i.includeHandleBorder=r.includeHandleBorder),s("handlePlacement")&&(i.handlePlacement=r.handlePlacement),s("url")&&(i.url=r.profileUrl),o&&s("qrStartSeconds")&&s("qrEndSeconds")&&(i.qrStartSeconds=o.qrStartSeconds,i.qrEndSeconds=o.qrEndSeconds),o&&s("handleStartSeconds")&&s("handleEndSeconds")&&(i.handleStartSeconds=o.handleStartSeconds,i.handleEndSeconds=o.handleEndSeconds),i}function iS(e,t,n){const r=t.platform??e.platform??"tiktok",o=r==="tiktok"?lm(e,t,n):e;return{...cm(o,n),...xr(t),platform:r,handles:t.handle===void 0?e.handles:{...e.handles,[r]:t.handle}}}const um=new Set(["queued","running","completing"]);function So(e){return e.state==="failed"||e.state==="aborted"}function sS(e,t,n,r){const o=r.find(a=>a.id===t);if(!o)return{kind:"missing"};if(So(o))return{kind:"failed",message:o.error?.message??"Watermark burn failed"};if(o.state!=="done")return{kind:"continue"};const i=r.filter(a=>a.artifactId===e&&a.id>t),s=i.find(So);return s||n?.status==="error"?{kind:"failed",message:s?.error?.message??"Post-watermark processing failed"}:i.some(a=>um.has(a.state))?{kind:"continue"}:n&&n.status!=="ready"?{kind:"continue"}:{kind:"completed",result:o.result}}function aS(e){const t=e.placementSource==="vision"||e.placementSource==="cached"?" (frame-aware)":"",n=Math.round(e.handleOpacity*100),r=e.includeHandle?e.handlePlacement==="center"?` · handle ${e.handleVerticalPercent}% from top at ${n}%`:` · handle ${e.handlePlacement.replace("-"," ")} at ${n}%`:"",o=e.includeQr?` · QR ${Math.round(e.qrOpacity*100)}%`:"",i=e.corner??e.requestedPosition;return e.includeQr?e.includeHandle?`QR + @${e.handle} watermarks burned in — QR ${i}${t}${o}${r}.`:`QR watermark burned in — ${i}${t}${o}.`:`@${e.handle} watermark burned in${r}.`}function cS(e,t,n,r){return`Burning ${e?t?`QR + @${n} watermarks`:"QR watermark":`@${n} watermark`} into ${r}…`}function lS(e){return e===1?"1 artifact":`${e} artifacts`}function uS(e){return e===1?"1 notebook":`${e} notebooks`}function dS(e,t,n){return n?{mode:e,closeMenu:!1}:t.kind==="close"?{mode:{kind:"idle"},closeMenu:!0}:t.kind==="escape"?e.kind==="idle"?{mode:e,closeMenu:!0}:{mode:{kind:"idle"},closeMenu:!1}:t.kind==="cancel"?e.kind==="idle"?{mode:e,closeMenu:!1}:{mode:{kind:"idle"},closeMenu:!1}:t.kind==="begin-create"?{mode:{kind:"create"},closeMenu:!1}:t.kind==="begin-rename"?{mode:{kind:"rename",bookId:t.bookId},closeMenu:!1}:{mode:{kind:"delete",bookId:t.bookId},closeMenu:!1}}function tn(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:null}function fe(e,t){const n=Array.isArray(e)?e:tn(e)?.[t];return Array.isArray(n)?n.flatMap(r=>{const o=tn(r);return o?[o]:[]}):[]}function ie(e,t,n){return e.flatMap(r=>{const o=t.map(a=>r[a]).find(a=>typeof a=="string"&&!!a);if(!o)return[];const i=n.map(a=>r[a]).find(a=>typeof a=="string"&&!!a)??o,s=[r.type,r.status,r.createdAt??r.date].filter(a=>typeof a=="string").join(" · ");return[{value:o,label:i,...s?{detail:s}:{}}]})}async function fS(e,t,n){const r=e.inputSchema.properties??{},o=e.handler.kind==="tool"?e.handler.tool:"",i={choices:{},entities:{},values:{}};let s=[];const a=[];r.notebook_id&&a.push((async()=>{i.choices.notebook_id=ie(fe(await n("list_notebooks",{}),"notebooks"),["id"],["name"])})()),/^(?:get|update|delete)_entity$/u.test(o)&&a.push((async()=>{const f=fe(await n("list_entities",{}),"entities");i.choices.entity_id=ie(f,["id"],["name"]),i.entities=Object.fromEntries(f.filter(d=>typeof d.id=="string").map(d=>[String(d.id),d])),o.startsWith("update_")&&typeof t.entity_id=="string"&&i.entities[t.entity_id]&&(i.values.entity=i.entities[t.entity_id])})()),r.job_id&&a.push((async()=>{i.choices.job_id=ie(fe(await n("list_jobs",{limit:200}),"jobs"),["id","jobId"],["name","type","tool"])})()),r.archive_ids&&a.push((async()=>{i.choices.archive_ids=ie(fe(await n("search_archive",{limit:100,presign_media:!1}),"results"),["archive_id"],["title","filename"])})());const c=t.asset_id??t.artifact_id,l=typeof c=="string"?c:void 0;(r.commit_hash||r.target_revision||r.action_id||r.target_action_id)&&a.push((async()=>{const f=l&&r.commit_hash?fe(await n("asset_history",{asset_id:l,limit:200}),"commits"):fe(await n("list_book_actions",{limit:200}),"actions"),d=ie(f,["hash","revision"],["message","operation"]);i.choices.commit_hash=d,i.choices.target_revision=d;const p=f.flatMap(y=>{const v=tn(y.details)?.actionId;return typeof v=="string"?[{...y,actionId:v}]:[]}),g=ie(p,["actionId"],["operation","message"]);i.choices.action_id=o==="get_history_action"?ie(f,["hash","revision"],["operation","message"]):g,i.choices.target_action_id=g,o==="read_file_at_commit"&&(s=ie(f.flatMap(y=>{const v=tn(y.details)?.path;return typeof v=="string"?[{name:v}]:[]}),["name"],["name"]))})()),r.filename&&l&&["read_file_at_commit","export_asset_file"].includes(o)&&a.push((async()=>{i.choices.filename=ie(fe(await n("asset_manifest",{asset_id:l}),"files"),["name"],["name"])})()),r.plan_id&&typeof t.notebook_id=="string"&&a.push((async()=>{const f=fe(await n(o.includes("generation")||o==="continue_notebook_generation"?"list_notebook_generation_plans":"list_notebook_run_plans",{notebook_id:t.notebook_id}),"plans");i.choices.plan_id=ie(f,["planId","plan_id"],["prompt","status"])})()),r.model&&e.generation&&a.push((async()=>{const f=fe(await n("list_generation_models",{media:e.generation?.mediaType}),"models");i.choices.model=f.flatMap(d=>ie([d],["id"],["title"]).map(p=>({...p,...typeof d.available=="boolean"?{available:d.available}:{},frontier:es(d.frontier)})))})()),r.voice_id&&a.push((async()=>{i.choices.voice_id=ie(fe(await n("list_elevenlabs_voices",{}),"voices"),["voice_id","id"],["name"])})()),(r.subject_ids||r.subject_id)&&l&&typeof t.object_hash=="string"&&a.push((async()=>{const f=fe(await n("get_image_subject_map",{artifact_id:l,object_hash:t.object_hash}),"subjects");i.choices.subject_id=ie(f,["id","subjectId"],["label","name"]),i.choices.subject_ids=i.choices.subject_id})());const m=(await Promise.allSettled(a)).flatMap(f=>f.status==="rejected"?[f.reason instanceof Error?f.reason.message:String(f.reason)]:[]);if(m.length)throw new Error(`Could not load action choices: ${m.join(" · ")}`);if(s.length){const f=new Map((i.choices.filename??[]).map(d=>[d.value,d]));for(const d of s)f.has(d.value)||f.set(d.value,{...d,detail:"Historical file"});i.choices.filename=[...f.values()]}return i}const mS={open_actions:{kind:"existing"},switch_book:{kind:"existing"},open_projects:{kind:"existing"},open_music_video:{kind:"existing"},start_goal:{kind:"existing"},open_alive_captions:{kind:"existing"},open_cold_open:{kind:"existing"},open_post_dropbox:{kind:"existing"},open_post_icloud:{kind:"existing"},open_watermark:{kind:"existing"},speak_preview:{kind:"existing"},x_connect:{kind:"existing"},open_provider_keys:{kind:"screen",screen:"settings"},open_inbox:{kind:"library"},open_jobs:{kind:"screen",screen:"jobs"},open_status:{kind:"form",tool:"list_book_actions"},open_revisions:{kind:"form",tool:"list_book_actions"},open_diagnostics:{kind:"form",tool:"doctor"},open_entities:{kind:"search",query:"Entities"},open_archive:{kind:"form",tool:"search_archive"},open_rename_all:{kind:"form",tool:"rename_all"},open_crop:{kind:"form",tool:"crop_asset"},open_osg:{kind:"form",tool:"set_video_overlay"},settings_osg:{kind:"form",tool:"set_video_overlay"},settings_audio:{kind:"form",tool:"render_video"},settings_subs:{kind:"form",tool:"render_video"},settings_bg:{kind:"form",tool:"render_video"},viewer_show_settings:{kind:"form",tool:"render_video"},settings_landscape:{kind:"form",tool:"render_video"},settings_portrait:{kind:"form",tool:"render_video"},settings_square:{kind:"form",tool:"render_video"},viewer_focus_file:{kind:"form",tool:"asset_manifest"},open_post_composer:{kind:"form",tool:"post"},timeline_audio_add:{kind:"form",tool:"add_timeline_audio"},timeline_audio_move:{kind:"form",tool:"move_timeline_audio"},timeline_audio_remove:{kind:"form",tool:"remove_timeline_audio"},timeline_audio_update:{kind:"form",tool:"update_timeline_audio"},rewind_activity:{kind:"form",tool:"restore_edit_action"},sidebar_sort:{kind:"form",tool:"list_assets"},run_notebook:{kind:"form",tool:"plan_notebook_run"},open_upload:{kind:"special",action:"upload"},copy_clipboard:{kind:"special",action:"copy"},show_history:{kind:"special",action:"history"},open_asset:{kind:"special",action:"open"},viewer_set_original:{kind:"special",action:"original"},viewer_set_landscape:{kind:"special",action:"landscape"},viewer_set_portrait:{kind:"special",action:"portrait"},viewer_toggle_info:{kind:"form",tool:"read_asset_metadata"},close_viewer:{kind:"special",action:"close"},sidebar_collapse:{kind:"special",action:"collapse"},sidebar_expand:{kind:"special",action:"expand"},save_notebook:{kind:"special",action:"save"},open_notebook:{kind:"special",action:"notebook"},open_slot_player:{kind:"special",action:"play"},extract_skeleton:{kind:"special",action:"skeleton"}};function pS(e,t,n){const r={...t};if(e==="open_osg"&&t.image&&(r.osg_asset_id=t.image),e==="open_post_composer"&&t.asset_ref&&(r.asset_id=t.asset_ref),e==="open_crop"&&t.ratio!==void 0&&t.ratio!==null&&String(t.ratio).trim()!==""&&(r.ratio=bm(t.ratio)),e==="sidebar_sort"&&(r.sort=gm(t.order)),e==="viewer_toggle_info"&&(r.name="original"),e==="settings_bg"){const i=hm(t.mode);i&&(r.background_mode=i)}["settings_landscape","settings_portrait","settings_square"].includes(e)&&(r.orientation=e.slice(9)),e.startsWith("timeline_audio_")&&((e==="timeline_audio_add"||t.start!==void 0)&&(r.start_frame=Math.round(Number(t.start??0)*n)),t.duration!==void 0&&(r.duration_frames=Math.round(Number(t.duration)*n))),e==="rewind_activity"&&t.commit_hash&&(r.target_revision=t.commit_hash);const o=String(t.field??"").trim().toLowerCase();if(e==="settings_subs"&&["on","off"].includes(o)&&(r.subtitles_enabled=o==="on"),["settings_audio","settings_subs","timeline_audio_update"].includes(e)&&o&&t.value!==void 0){const i=e==="timeline_audio_update"?ym(o):e==="settings_audio"?_m(o):ks[o]??o,s=String(t.value),a=Number(s);if(e==="timeline_audio_update"&&!Number.isFinite(a))throw new Error("Usage: /audio-set @clip volume|fade-in|fade-out <value>");r[i]=["on","off","true","false"].includes(s.toLowerCase())?["on","true"].includes(s.toLowerCase()):s.trim()&&Number.isFinite(a)?a:vm(o,i,s)}return r}const dm=["newest","oldest"],fm=["blur","black"],ks={"fade-in":"audio_fade_in","fade-out":"audio_fade_out",volume:"audio_volume",enabled:"subtitles_enabled",style:"highlight_style",size:"font_size",fontsize:"font_size",color:"text_color",textcolor:"text_color",highlight:"highlight_color",highlightcolor:"highlight_color",stroke:"stroke_width",strokewidth:"stroke_width",strokecolor:"stroke_color",shadow:"shadow_blur",shadowblur:"shadow_blur",shadowopacity:"shadow_opacity",language:"subtitle_language"},mm={position:["top","middle","bottom"],highlight_style:["impact","highlight","alive"],font_size:["small","medium","large"]},pm={position:{mid:"middle"},font_size:{s:"small",m:"medium",l:"large"}};function gS(e){if(e==null||e==="")return 1;const t=typeof e=="number"?e:Number(String(e).trim());if(!Number.isInteger(t)||t<1)throw new Error("Usage: /files <position>");return t}function hS(e){const t=(e??"both").trim().toLowerCase();if(t==="left"||t==="right"||t==="both")return t;throw new Error("Choose left, right or both.")}function gm(e){const t=String(e??"newest").trim().toLowerCase();if(t==="newest"||t==="oldest")return t;throw new Error(`Usage: /sort ${dm.join("|")}`)}function hm(e){if(e==null||String(e).trim()==="")return null;const t=String(e).trim().toLowerCase();if(t==="blur"||t==="black")return t;throw new Error(`Usage: /bg ${fm.join("|")}`)}function bm(e){const t=String(e).trim().toLowerCase();if(t==="16:9"||t==="landscape")return"16:9";if(t==="9:16"||t==="portrait")return"9:16";if(t==="1:1"||t==="square")return"1:1";throw new Error("Usage: /crop @asset [16:9|9:16|1:1]")}function ym(e){const t=e.replaceAll("-","_");if(t==="volume"||t==="fade_in"||t==="fade_out")return t;throw new Error("Usage: /audio-set @clip volume|fade-in|fade-out <value>")}function _m(e){const t=ks[e];if(t==="audio_volume"||t==="audio_fade_in"||t==="audio_fade_out")return t;throw new Error("Usage: /audio volume|fade-in|fade-out <value>")}function vm(e,t,n){if(t==="subtitle_language"){const s=n.trim().toLowerCase();if(/^(original|[a-z]{2})$/u.test(s))return s;throw new Error("Usage: /subs language original|en")}const r=mm[t];if(!r)return n;const o=n.trim().toLowerCase(),i=pm[t]?.[o]??o;if(r.includes(i))return i;throw new Error(`Usage: /subs ${e} ${r.join("|")}`)}const km={audio:new Set(["aac","flac","m4a","mp3","ogg","wav","weba"]),image:new Set(["gif","heic","heif","jpeg","jpg","png","svg","webp"]),video:new Set(["avi","mkv","mov","mp4","webm"])},bS={audio:"audio/*,.aac,.flac,.m4a,.mp3,.ogg,.wav,.weba",image:"image/*,.gif,.heic,.heif,.jpeg,.jpg,.png,.svg,.webp",video:"video/*,.avi,.mkv,.mov,.mp4,.webm"};function yS(e){const t=e.type.split("/",1)[0];if(t==="audio"||t==="image"||t==="video")return t;const n=e.name.toLowerCase().split(".").pop()??"";for(const r of["audio","image","video"])if(km[r].has(n))return r;return null}function wm(e){return e==="audio"||e==="image"||e==="video"?e:null}function _S(e,t,n){return wm(e)!==null&&t===void 0&&n===0}function vS(e){return e.types.includes("Files")}const kS=["Media","Text & analysis","Generation","Edit"],Yn=[{type:"audio",label:"Audio",group:"Media"},{type:"image",label:"Image",group:"Media"},{type:"video",label:"Video",group:"Media"},{type:"post",label:"Post",group:"Media"},{type:"character",label:"Character",group:"Media"},{type:"prompt",label:"Prompt",group:"Text & analysis"},{type:"analyze",label:"Analyze",group:"Text & analysis"},{type:"generate_video",label:"Generate video",group:"Generation"},{type:"generate_image",label:"Generate image",group:"Generation"},{type:"generate_audio",label:"Generate audio",group:"Generation"},{type:"extract_audio",label:"Extract audio",group:"Edit"},{type:"split_video",label:"Split video",group:"Edit"},{type:"concat",label:"Concat",group:"Edit"},{type:"splice",label:"Splice",group:"Edit"},{type:"timeline",label:"Timeline",group:"Edit"}],Sm=new Set(Yn.map(e=>e.type));function Io(e){return e.trim().toLocaleLowerCase().replaceAll("_"," ")}function wS(e){const t=Io(e);return t?Yn.filter(n=>Io(`${n.label} ${n.type} ${n.group}`).includes(t)):Yn}function SS(e){return Sm.has(e)}const Im=new Intl.NumberFormat("en-US",{notation:"compact",maximumFractionDigits:1}),Am=new Intl.NumberFormat("en-US"),IS={images:"Images",video:"Video",audio:"Audio",chat:"Chat",voice:"Voice",analysis:"Analysis & transcription"};function AS(e,t=!1){return(t?Am:Im).format(e)}function xm(e){return e>0&&e<.01?"<$0.01":`$${e.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}`}function xS(e){const t=e.reportedUsd+e.estimatedUsd;return t===0&&e.unpriced>0?"— cost":`${e.estimatedUsd>0?"~":""}${xm(t)}`}function Em(e){if(!e||typeof e!="object")throw new Error("Usage is unavailable");const t=e;if(typeof t.trackedSince!="number"||!t.totals||!Array.isArray(t.groups)||!Array.isArray(t.recent))throw new Error("Usage is unavailable");return t}function ES({bookId:e,ready:t,call:n}){const[r,o]=_.useState(null),[i,s]=_.useState(null),[a,c]=_.useState(0),l=_.useEffectEvent(async u=>{try{const m=Em(await n("get_book_usage",{book_id:e},{background:!0}));if(!u())return;o(f=>f?.bookId===e&&JSON.stringify(f.data)===JSON.stringify(m)?f:{bookId:e,data:m}),s(null)}catch{u()&&s(e)}});return _.useEffect(()=>{if(!t||!e)return;let u=!0,m=!1,f=0;const d=async()=>{if(window.clearTimeout(f),!(!u||m||document.visibilityState==="hidden")){m=!0;try{await l(()=>u)}finally{m=!1,u&&(f=window.setTimeout(d,2e3))}}},p=()=>{d()};return f=window.setTimeout(p,0),window.addEventListener("focus",p),document.addEventListener("visibilitychange",p),()=>{u=!1,window.clearTimeout(f),window.removeEventListener("focus",p),document.removeEventListener("visibilitychange",p)}},[e,t,a]),{snapshot:r?.bookId===e?r.data:null,stale:!t||i===e,retry:()=>c(u=>u+1)}}const ws=new Set(["video","generate_video","concat","splice"]);function Cm(e,t){const n=ke(t),r=e.cells.find(o=>o.outputArtifactId?.toLowerCase()===n);return r||(e.cells.find(o=>ws.has(o.type)&&ri(e,o)?.toLowerCase()===n)??null)}function Er(e,t){let n;try{n=Sr(e,t)}catch(r){const o=Cm(e,t);if(!o)throw r;n=o}if(!ws.has(n.type))throw new Error(`${Z(n)} is not a video-producing cell`);if(!ri(e,n))throw new Error(`${Z(n)} does not have a video output yet`);return n}const Mm="[a-z0-9][a-z0-9-]*",Tm=new RegExp(`^(?:please\\s+)?(?:/split|split)\\s+@(${Mm})(?:\\s+([\\s\\S]+?))?(?:\\s+please)?[.!]?$`,"iu"),re=.02;function G(e){return Math.round(e*1e3)/1e3}function _e(e){const t=Math.max(0,Math.round(e*1e3)),n=Math.floor(t/6e4),r=(t-n*6e4)/1e3;return`${n}:${r.toFixed(3).padStart(6,"0")}`}function CS(e){const t=e.pieces[e.selectedIndex]??e.pieces[0];return t?`Cutting ${_e(t.startSeconds)}–${_e(t.endSeconds)} (${t.durationSeconds.toFixed(3)}s)`:"Split video"}function MS(e){return typeof e!="number"||!Number.isFinite(e)||!(e>0)?null:1/e}function Rm(e,t){return(e==="all"?Math.max(1,t):1)+1}function Jn(e){const t=e.trim().toLowerCase(),n=t.match(/^(\d+(?:\.\d+)?)\s*(?:s|secs?|seconds?)?$/u);if(n)return Number(n[1]);const r=t.match(/^(\d+)\s*(?:m|mins?|minutes?)\s*(?:(\d+(?:\.\d+)?)\s*(?:s|secs?|seconds?)?)?$/u);if(r)return Number(r[1])*60+Number(r[2]??0);const o=t.match(/^(?:(\d+):)?(\d+):([0-5]?\d(?:\.\d+)?)$/u);return o?Number(o[1]??0)*3600+Number(o[2])*60+Number(o[3]):null}function $m(e){return e.trim().replace(/^(?:into|at)\s+/iu,"").replace(/\s+(?:and|plus)\s+(?:(?:keep|use)\s+)?(?:the\s+)?(?:remaining|remainder|rest)(?:\s+(?:clip|part|video))?$/iu,"").trim()}function Nm(e){const t=$m(e);return t?t.split(/\s*(?:,|;|\band\b|\bthen\b)\s*/iu).map(n=>n.trim()).filter(Boolean):[]}function Pm(e,t,n){const r=Ke(e),o=Vn(n,r),i=[];let s=o;for(let a=0;a<t;a+=1){const c=Vn(s,[...r,o,...i]);i.push(c),s=c}return{action:o,outputs:i}}function Om(e){const t={id:Bt(),type:"video",label:`Chunk ${String(e.chunkIndex+1).padStart(2,"0")}`,slot:e.slot,inputs:{chunkCount:e.chunkCount,chunkIndex:e.chunkIndex,endSeconds:e.endSeconds,mediaRole:"split-video-output",producerCellId:e.actionCell.id,sourceCellId:e.source.id,startSeconds:e.startSeconds,state:"pending"}};return{chunkIndex:e.chunkIndex,endSeconds:e.endSeconds,outputCell:t,startSeconds:e.startSeconds}}function Lm(e){return{id:e.id,type:e.type,...e.label===void 0?{}:{label:e.label},slot:e.slot,...e.provider===void 0?{}:{provider:e.provider},...e.operation===void 0?{}:{operation:e.operation},...e.tool===void 0?{}:{tool:e.tool},...e.inputs===void 0?{}:{inputs:e.inputs}}}function Fm(e){const t=e.trim().match(/^(keep|remove)\s+([\s\S]+)$/iu);if(!t)return null;const n=t[2].trim().match(/^(.+?)\s*[-–]\s*(.+)$/u);if(!n)throw new Error("Use a keep/remove range, for example: /split @a1 keep 0.03-0.11");const r=Jn(n[1]),o=Jn(n[2]);if(r===null||o===null||!Number.isFinite(r)||!Number.isFinite(o)||!(o>r)||r<0)throw new Error("Use positive split times, for example: /split @a1 keep 0.03-0.11");return{endSeconds:G(o),mode:t[1].toLowerCase()==="remove"?"remove":"keep",startSeconds:G(r)}}function TS(e){const t=e.trim().match(Tm);if(!t)return null;const n=t[2]?.trim()??"";if(n&&/^(keep|remove)\b/iu.test(n)){const i=Fm(n);if(!i)return null;const s=[i.startSeconds,i.endSeconds].filter(a=>a>0).sort((a,c)=>a-c);return{sourceReference:t[1].toLowerCase(),cutPointsSeconds:s,outputMode:i.mode,selectedChunkIndexes:[i.startSeconds>0?1:0]}}const o=(n?Nm(n):[]).map(Jn);if(o.some(i=>!Number.isFinite(i)||!(i>0)))throw new Error("Use positive split times, for example: /split @a3 at 15s, 28.5s");return{sourceReference:t[1].toLowerCase(),cutPointsSeconds:o.map(i=>G(i)).sort((i,s)=>i-s)}}function Kt(e){for(const t of e)if(!(G(t.endSeconds-t.startSeconds)>=re))throw new Error(`Keep at least ${re}s in every output range`)}function hn(e){const t=G(e.sourceDurationSeconds);if(!Number.isFinite(t)||t<re)throw new Error(`Video must be at least ${re}s long to split`);const r=(e.cutPointsSeconds.length>0?e.cutPointsSeconds:[t/2]).map(s=>G(s)).sort((s,a)=>s-a);if(r.some(s=>!Number.isFinite(s)))throw new Error("Split times must be finite numbers");const o=[0,...r,t],i=o.slice(0,-1).map((s,a)=>({endSeconds:o[a+1],startSeconds:s}));for(const s of i)if(!(s.endSeconds>s.startSeconds))throw new Error(`Keep at least ${re}s in every output range`);return i}function RS(e){const t=hn(e);return Kt(t),t.slice(0,-1).map(n=>n.endSeconds)}function Dm(e){const t=hn({cutPointsSeconds:e.cutPointsSeconds,sourceDurationSeconds:e.sourceDurationSeconds}),n=e.outputMode??"all";if(n==="all")return Kt(t),t.map(s=>[s]);const r=new Set((e.selectedChunkIndexes??[0]).filter(s=>Number.isSafeInteger(s)&&s>=0&&s<t.length));if(r.size===0&&r.add(0),n==="keep"){const s=t.filter((a,c)=>r.has(c));if(s.length===0)throw new Error("Keep at least one split piece");return Kt(s),s.map(a=>[a])}const o=t.filter((s,a)=>!r.has(a));if(o.length===0)throw new Error("Remove leaves nothing to keep");const i=o.reduce((s,a)=>s+(a.endSeconds-a.startSeconds),0);return Kt([{startSeconds:o[0].startSeconds,endSeconds:o[0].startSeconds+i}]),[o]}function Vm(e){const t=e.outputMode??"all",n=hn({cutPointsSeconds:e.cutPointsSeconds,sourceDurationSeconds:e.sourceDurationSeconds});if(t==="all")return`Split ${e.sourceAddress} into ${n.length} chunks`;const r=e.selectedChunkIndexes?.[0]??0,o=n[r]??n[0],i=`${_e(o.startSeconds)}-${_e(o.endSeconds)}`;return t==="keep"?`Cut ${i} out of ${e.sourceAddress}`:`Remove ${i} from ${e.sourceAddress}`}function jm(e,t,n){if(e==="all")return`Chunk ${String(n+1).padStart(2,"0")}`;if(e==="keep"){const a=t[0];return`Cut ${_e(a.startSeconds)}-${_e(a.endSeconds)}`}const r=t[0],o=t[t.length-1],i=r.endSeconds,s=o.startSeconds;return t.length>=2&&s>i?`Without ${_e(i)}-${_e(s)}`:`Without ${_e(r.startSeconds)}-${_e(o.endSeconds)}`}function $S(e){const t=Er(e.document,e.command.sourceReference);if(!Number.isFinite(e.sourceDurationSeconds)||e.sourceDurationSeconds<=0)throw new Error(`${Z(t)} does not have a usable duration yet; wait for video processing to finish`);const n=e.command.outputMode??"all",r=e.command.selectedChunkIndexes??[],o=Dm({cutPointsSeconds:e.command.cutPointsSeconds,outputMode:n,selectedChunkIndexes:r,sourceDurationSeconds:e.sourceDurationSeconds}),i=hn({cutPointsSeconds:e.command.cutPointsSeconds,sourceDurationSeconds:e.sourceDurationSeconds}).slice(0,-1).map(f=>f.endSeconds),s=Pm(e.document.cells,o.length,t.slot),a=o.map(f=>f.map(d=>({endSeconds:d.endSeconds,startSeconds:d.startSeconds}))),c={id:Bt(),type:"split_video",label:n==="all"?`Split into ${o.length} chunks`:Vm({cutPointsSeconds:i,outputMode:n,selectedChunkIndexes:r.length>0?r:[0],sourceAddress:Z(t),sourceDurationSeconds:e.sourceDurationSeconds}),slot:s.action,provider:"local",operation:n==="all"?"split_at_points":"split_ranges",tool:"ffmpeg",inputs:{cutPointsSeconds:i,endSeconds:e.sourceDurationSeconds,sourceCellId:t.id,sourceDurationSeconds:e.sourceDurationSeconds,startSeconds:0,state:"ready",...n==="all"?{}:{outputsSeconds:a,selectedChunkIndexes:r}}},l=o.map((f,d)=>{const p=f[0].startSeconds,g=f.reduce((v,S)=>v+(S.endSeconds-S.startSeconds),p),y=Om({actionCell:c,chunkCount:o.length,chunkIndex:d,endSeconds:f.length===1?f[0].endSeconds:g,slot:s.outputs[d],source:t,startSeconds:p});return y.outputCell={...y.outputCell,label:jm(n,f,d)},y}),u=[c,...l.map(f=>f.outputCell)],m=[{id:Bt(),source:t.id,target:c.id,targetInput:"video"},...l.map(f=>({id:Bt(),source:c.id,target:f.outputCell.id,targetInput:"media"}))];return{actionCell:c,createdCellIds:u.map(f=>f.id),cutPointsSeconds:i,document:{...e.document,cells:[...e.document.cells,...u],edges:[...e.document.edges,...m]},outputs:l,sourceCellId:t.id,sourceAddress:Z(t)}}async function NS(e){const t=[];let n=!1;try{const r=[e.draft.actionCell,...e.draft.outputs.map(c=>c.outputCell)];for(const[c,l]of r.entries()){t.push(l.id);const u=await e.callTool("create_notebook_cell",{book_id:e.bookId,notebook_id:e.draft.document.id,...c===0&&e.expectedRevision?{expected_revision:e.expectedRevision}:{},cell:Lm(l)}),m=h(u);if(A(m?.id)!==l.id)throw new Error("The server did not preserve the planned split cell")}await e.callTool("connect_notebook_cells",{book_id:e.bookId,notebook_id:e.draft.document.id,source_cell_id:e.draft.sourceCellId,target_cell_id:e.draft.actionCell.id,target_input:"video"});for(const c of e.draft.outputs)await e.callTool("connect_notebook_cells",{book_id:e.bookId,notebook_id:e.draft.document.id,source_cell_id:e.draft.actionCell.id,target_cell_id:c.outputCell.id,target_input:"media"});n=!0;const o=await e.callTool("run_notebook",{actor:e.actor,book_id:e.bookId,notebook_id:e.draft.document.id,cell_ids:[e.draft.actionCell.id]}),i=h(o),s=A(i?.job_id),a=A(i?.run_id);if(!s||!a)throw new Error("The server did not return a notebook split run");return{actionCellId:e.draft.actionCell.id,actionAddress:Z(e.draft.actionCell),outputs:e.draft.outputs.map(c=>({chunkIndex:c.chunkIndex,outputCellId:c.outputCell.id,outputAddress:Z(c.outputCell)})),cutPointsSeconds:e.draft.cutPointsSeconds,jobId:s,runId:a,sourceCellId:e.draft.sourceCellId,sourceAddress:e.draft.sourceAddress}}catch(r){if(!n)for(const o of t.reverse())await e.callTool("delete_notebook_cell",{book_id:e.bookId,notebook_id:e.draft.document.id,cell_id:o}).catch(()=>{});throw r}}const Gm=1/60;function qm(e,t){return e[t]}function PS(e){const t=e.windows.filter(a=>Number.isFinite(a.startSeconds)&&Number.isFinite(a.endSeconds)&&a.endSeconds>a.startSeconds);if(t.length===0)return{type:"continue"};const n=e.frameDurationSeconds??Gm,r=e.pendingSeekSeconds;if(typeof r=="number"&&Number.isFinite(r)&&Math.abs(e.currentTimeSeconds-r)>n)return{type:"continue"};const o=Math.min(t.length-1,Math.max(0,e.activeWindowIndex)),i=qm(t,o),s=e.currentTimeSeconds;if(s>=i.startSeconds&&s<i.endSeconds)return{type:"continue"};if(s>=i.endSeconds){const a=(o+1)%t.length;return{type:"seek",timeSeconds:t[a].startSeconds,windowIndex:a}}return{type:"seek",timeSeconds:i.startSeconds,windowIndex:o}}function OS(e){return e>0&&e<.25}function Xe(e){return[...new Set(e.map(G))].filter(t=>Number.isFinite(t)).sort((t,n)=>t-n)}function Um(e){return Xe(e.slice(1,-1))}function Bm(e,t){return e.length===t.length&&e.every((n,r)=>n===t[r])}function Ce(e){const t=G(e.sourceDurationSeconds),r=[0,...Xe(e.cutPointsSeconds).filter(o=>o>0&&o<t),t];return r.slice(0,-1).map((o,i)=>{const s=r[i+1];return{durationSeconds:G(s-o),endSeconds:s,index:i,startSeconds:o}})}function LS(e){let t=0;return e.map(n=>(t=G(t+n),t))}function FS(e){const t=e.leadSeconds??1.5,n=G(e.sourceDurationSeconds),r=G(e.segment.startSeconds),o=G(e.segment.endSeconds),i=[],s=Math.max(0,G(r-t));r>s&&i.push({startSeconds:s,endSeconds:r});const a=Math.min(n,G(o+t));return a>o&&i.push({startSeconds:o,endSeconds:a}),{segment:{startSeconds:r,endSeconds:o},surroundings:i}}function Ss(e){const t=G(e.sourceDurationSeconds),n=Ce(e),r=n[e.index];if(!r)return{maxEnd:t,maxStart:0,minEnd:re,minStart:0};const o=n[e.index-1]?.startSeconds??0,i=n[e.index+1]?.endSeconds??t,s=e.index===0?0:G(o+re);return{maxEnd:e.index===n.length-1?t:G(i-re),maxStart:G(r.endSeconds-re),minEnd:G(r.startSeconds+re),minStart:s}}function Cr(e){const t=G(e.sourceDurationSeconds),n=Ce(e),r=n[e.index];if(!r)return{cutPointsSeconds:[...e.cutPointsSeconds],selectedIndex:e.index};const o=Ss(e);let i=G(Math.min(o.maxStart,Math.max(o.minStart,e.startSeconds)));i>0&&i<re&&(i=re);let s=G(Math.min(o.maxEnd,Math.max(Math.max(o.minEnd,i+re),e.endSeconds)));if(s<t&&t-s<re&&(s=G(t-re)),i===r.startSeconds&&s===r.endSeconds)return{cutPointsSeconds:[...e.cutPointsSeconds],selectedIndex:e.index};const a=n[e.index-1],c=n[e.index+1],l=a?Xe(e.cutPointsSeconds.filter(g=>g<=a.startSeconds)):[],u=c?Xe(e.cutPointsSeconds.filter(g=>g>=c.endSeconds)):[],m=[];i>0&&m.push(i),s<t&&m.push(s);const f=Xe([...l,...m,...u]).filter(g=>g>0&&g<t),p=Ce({cutPointsSeconds:f,sourceDurationSeconds:t}).findIndex(g=>g.startSeconds===i&&g.endSeconds===s);return{cutPointsSeconds:f,selectedIndex:p>=0?p:e.index}}function DS(e){const n=Ce(e)[e.index];return n?Cr({...e,endSeconds:n.endSeconds,startSeconds:G(n.startSeconds+e.deltaSeconds)}):{cutPointsSeconds:[...e.cutPointsSeconds],selectedIndex:e.index}}function VS(e){const n=Ce(e)[e.index];return n?Cr({...e,endSeconds:G(n.endSeconds+e.deltaSeconds),startSeconds:n.startSeconds}):{cutPointsSeconds:[...e.cutPointsSeconds],selectedIndex:e.index}}function jS(e){const n=Ce(e)[e.index];if(!n)return{cutPointsSeconds:[...e.cutPointsSeconds],selectedIndex:e.index};const r=n.durationSeconds,o=Ss(e),i=G(Math.min(o.maxEnd-r,Math.max(o.minStart,n.startSeconds+e.deltaSeconds))),s=G(i+r);return i===n.startSeconds&&s===n.endSeconds?{cutPointsSeconds:[...e.cutPointsSeconds],selectedIndex:e.index}:Cr({...e,endSeconds:s,startSeconds:i})}function GS(e){const n=Ce(e)[e.index];if(!n||n.durationSeconds<re*2)return{cutPointsSeconds:[...e.cutPointsSeconds],selectedIndex:e.index};const r=G(n.startSeconds+n.durationSeconds/2),o=Xe([...e.cutPointsSeconds,r]).filter(i=>i>0&&i<G(e.sourceDurationSeconds));return Bm(o,e.cutPointsSeconds)?{cutPointsSeconds:[...e.cutPointsSeconds],selectedIndex:e.index}:{cutPointsSeconds:o,selectedIndex:e.index}}function qS(e){const t=Ce(e),n=t[e.index],r=t[e.index+1];return!n||!r?{cutPointsSeconds:[...e.cutPointsSeconds],selectedIndex:e.index}:{cutPointsSeconds:Um([0,...e.cutPointsSeconds.filter(i=>i!==n.endSeconds),G(e.sourceDurationSeconds)]),selectedIndex:e.index}}const Hm={steps:[],credits:[]};function US(e=Hm,t=St){return{loading:!1,error:null,context:e,options:{enabled:up(e)},promptOverrides:{},creditsOverride:null,maxCharacters:t}}function BS(e,t){return e.maxCharacters===t?e:{...e,maxCharacters:t}}function ht(e,t){return e.slot.row-t.slot.row||e.slot.column-t.slot.column||e.id.localeCompare(t.id)}function Wm(e,t){const n=e.cells.filter(r=>!Ve(r)&&(r.outputArtifactId===t||r.outputEntityId===t));if(n.length>0){const r=n.filter(o=>o.type!=="generate_video");return(r.length>0?r:n).sort(ht)}return e.cells.filter(r=>Le(e,r)===t).sort(ht)}const Ao=new Set(["generate_audio","generate_image","generate_video"]),Km=["sourceArtifactId","source_asset_id","first_asset_id","second_asset_id","additional_asset_ids"];function Tn(e,t){const n=e.inputs?.[t];return typeof n=="string"&&n.trim()?n:null}function Vt(e){return e?.trim()?e:null}function Is(e,t){const n=e.inputs?.[t];return(Array.isArray(n)?n:[n]).filter(o=>typeof o=="string"&&o.trim()!=="")}function zm(e){return Km.flatMap(t=>Is(e,t))}function Xm(e){const t=new Map(e.cells.map(r=>[r.id,r])),n=new Map;for(const r of[...e.cells].sort(ht)){if(Ve(r))continue;const o=Le(e,r);if(!o)continue;const i=n.get(o);(!i||Ao.has(i.type)&&!Ao.has(r.type))&&n.set(o,r)}return{cellsById:t,cellsByArtifactId:n}}function As(e,t,n){const r=e.edges.filter(s=>s.target===n.id).map(s=>s.source),o=Is(n,"sourceCellId"),i=zm(n).flatMap(s=>{const a=t.cellsByArtifactId.get(s);return a?[a.id]:[]});return[...new Set([...r,...o,...i])].filter(s=>s!==n.id)}function xo(e,t,n,r){const o=new Set,i=[],s=[],a=n.map(c=>c.id);for(let c=0;c<a.length;c+=1){const l=a[c];if(!l||o.has(l))continue;o.add(l);const u=t.cellsById.get(l);if(u){if(i.push(u),r(u)){s.push(u);continue}for(const m of As(e,t,u))o.has(m)||a.push(m)}}return{visited:i,stopped:s}}function Ym(e){return e.type==="generate_video"}function xs(e,t){const n=t.flatMap(r=>{const o=Le(e,r);return o?[o]:[]});return[...new Set(n)]}function Jm(e,t,n){const r=ta(e,n.id)?.outputCell??null,o=As(e,t,n).map(i=>t.cellsById.get(i)).filter(i=>i!==void 0).sort(ht);return{id:n.id,producerCellId:n.id,outputCellId:r?.id??null,outputArtifactId:r?Le(e,r)??null:Le(e,n)??null,producerPrompt:Vt(n.prompt)??Tn(n,"prompt"),producerResolvedPrompt:Tn(n,"resolvedPrompt")??Tn(n,"resolved_prompt"),producerTool:Vt(n.tool),producerModel:Vt(n.model),producerProvider:Vt(n.provider),sourceArtifactIds:xs(e,o)}}function HS(e,t){const n=Xm(e),r=Wm(e,t),o=xo(e,n,r,Ym).stopped.sort(ht),i=xo(e,n,r,()=>!1).visited;return{steps:o.map(s=>Jm(e,n,s)),upstreamArtifactIds:xs(e,i)}}function WS(e){const t=e.attempts.find(n=>n.status==="completed"&&n.artifactId===e.outputArtifactId&&n.resolvedPrompt?.trim());return t?.resolvedPrompt?.trim()?t.resolvedPrompt:e.outputAssetPrompt?.trim()?e.outputAssetPrompt:e.producerResolvedPrompt?.trim()?e.producerResolvedPrompt:e.producerPrompt?.trim()?e.producerPrompt:""}function KS(e){const t=e.outputArtifactId?e.attempts.find(s=>s.status==="completed"&&s.artifactId===e.outputArtifactId)??null:null,n=t?.tool?.trim()||e.producerTool,r=n?e.actions.find(s=>s.tool===n):void 0,o=r?.title.trim()||t?.model?.trim()||e.producerModel?.trim()||n?.trim()||"";if(!o)return null;const i=r?.providerLabel.trim()||t?.provider?.trim()||e.producerProvider?.trim()||null;return{label:o,provider:i}}const Es="[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}",Zm=new RegExp(`^${Es}$`,"iu"),Qm=new RegExp(`@(${Es}|${na})(?![\\w-])`,"giu");function ep(e){return e==="video"||e==="final"?"video":e==="image"||e==="audio"?e:"source"}function zS(e,t){const n=new Map(t.map(i=>[ke(i.reference),i.type])),r=new Map,o=new Map;return e.replace(Qm,(i,s)=>{const a=ke(s),c=r.get(a);if(c)return c;const l=n.get(a);if(!l&&!Zm.test(a))return i;const u=ep(l),m=(o.get(u)??0)+1;o.set(u,m);const f=`[${u} ${m}]`;return r.set(a,f),f})}const tp=new Set(["youtube.com","m.youtube.com","music.youtube.com","youtu.be"]),np=new Set(["x.com","mobile.x.com","twitter.com","mobile.twitter.com"]),rp=new Set(["explore","home","i","intent","messages","notifications","search","settings","share"]);function op(e,t){if(t==="youtu.be")return e.pathname.split("/")[1]||null;const n=e.searchParams.get("v");return n||(e.pathname.match(/^\/(?:shorts|embed|live|v)\/([A-Za-z0-9_-]+)/)?.[1]??null)}function ip(e,t){const n=op(e,t);return n&&e.pathname.startsWith("/shorts/")?{kind:"youtube",url:`https://www.youtube.com/shorts/${n}`,videoId:n}:n?{kind:"youtube",url:`https://youtu.be/${n}`,videoId:n}:(e.hash="",{kind:"youtube",url:e.toString(),videoId:null})}function sp(e){const t=e.pathname.match(/^\/([A-Za-z0-9_]{1,15})\/status\/(\d+)/);if(!t)return e.hash="",{kind:"x",url:e.toString(),handle:null,status:!1};const n=t[1],r=rp.has(n.toLowerCase())?null:n;return{kind:"x",url:`https://x.com/${n}/status/${t[2]}`,handle:r,status:!0}}function ap(e){if(typeof e!="string")return null;try{const t=new URL(e);if(t.protocol!=="https:"&&t.protocol!=="http:")return null;const n=t.hostname.toLowerCase().replace(/^www\./,"");return tp.has(n)?ip(t,n):np.has(n)?sp(t):null}catch{return null}}function cp(e){return e.kind==="youtube"?e.videoId!==null:e.status}function lp(e,t){return typeof e.uploader!="string"?t:e.uploader.replaceAll("@","").replace(/\s+/g," ").trim()||t}function XS(e,t){const n=[t.webpage_url,t.webpageUrl,t.source_url,t.sourceUrl].map(ap).filter(o=>o!==null),r=n.find(cp)??n[0];return r?{id:`${e}:${r.url}`,label:lp(t,r.kind==="x"?"X":"YouTube"),url:r.url,xHandle:r.kind==="x"?r.handle:null}:null}function YS(e){const t=new Set;return e.filter(n=>t.has(n.url)?!1:(t.add(n.url),!0))}const JS="The thread has nothing to post. Add a prompt, or turn the thread off.";function up(e){return e.credits.length>0||e.steps.some(t=>t.prompt.trim()!==""||t.images.length>0)}function dp(e){return e.slice(0,jn)}function Cs(e,t){return t>1?` (${e+1}/${t})`:""}function Ms(e,t,n){const r=Cs(t,n);if(!e.model)return`Prompt${r}:
15
+ `;const o=e.model.provider?` via ${e.model.provider}`:"";return`Made with ${e.model.label}${o}${r}. Prompt:
16
+ `}const fp="…",mp=2;function pp(e,t){for(let n=Math.min(t,e.length-1);n>=0;n-=1)if(/\s/u.test(e.charAt(n)))return n;return-1}function gp(e,t){if(e.length<=t)return e;const n=Math.max(0,t-mp),r=pp(e,n),o=r>Math.floor(n/2)?r:n;return`${e.slice(0,o).trimEnd()}${fp}`}function hp(e,t,n,r){const o=Ms(e,t,n);return gp(e.prompt.trim(),r-o.length)}function bp(e,t){const n=e.context.steps.findIndex(r=>r.id===t.id);return n===-1?0:n}function yp(e,t){return e.promptOverrides[t.id]??hp(t,bp(e,t),e.context.steps.length,e.maxCharacters)}function _p(e){return e.xHandle?`@${e.xHandle}`:e.label}function Eo(e){return`${_p(e)}: ${e.url}`}function vp(e,t=St){const n=[...e].sort((i,s)=>+(i.xHandle===null)-+(s.xHandle===null)),r=n[0];if(!r)return"";if(n.length===1)return`Special thanks to ${Eo(r)}`;const o=`Special thanks to:
17
+ ${n.map(Eo).join(`
18
+ `)}`;return o.length<=t?o:`Special thanks to:
19
+ ${n.map(i=>i.url).join(`
20
+ `)}`}function kp(e){return e.creditsOverride??vp(e.context.credits,e.maxCharacters)}function Ts(e,t,n,r){return{id:e,stepId:t,text:n,imageAssetIds:r.map(o=>o.assetId),images:[...r]}}function wp(e,t,n,r){const o=yp(e,t).trim(),i=dp(t.images);if(!o&&i.length===0)return null;const s=o?`${Ms(t,n,r)}${o}`:`Input images for this video${Cs(n,r)}:`;return Ts(`step:${t.id}`,t.id,s,i)}function Sp(e){if(!e.options.enabled)return[];const t=e.context.steps.length,n=e.context.steps.flatMap((o,i)=>{const s=wp(e,o,i,t);return s?[s]:[]}),r=e.context.credits.length>0?kp(e).trim():"";return r&&n.push(Ts("credits",null,r,[])),n}function ZS(e){return Sp(e).map(t=>({text:t.text,imageAssetIds:t.imageAssetIds}))}const Ip=2e3,Ap=6*6e4,QS={status:null,connecting:!1,authorizeUrl:null,error:null};function xp(e){const t=h(e),n=W(t?.username),r=W(t?.subscription_type);return n&&r?{username:n,subscriptionType:r}:null}function Ep(e){return typeof e=="number"&&Number.isInteger(e)&&e>0?e:St}function Cp(e){const t=h(e);return{connected:t?.connected===!0,pending:t?.pending===!0,hasCredentials:t?.has_credentials===!0,error:W(t?.error),expiresAt:W(t?.expires_at),account:xp(t?.account),postMaxCharacters:Ep(t?.post_max_characters)}}function Mp(e){return e?.postMaxCharacters??St}function Tp(e){switch(e){case"Basic":return"X Premium Basic";case"Premium":return"X Premium";case"PremiumPlus":return"X Premium+";case"None":return"No X Premium";default:return e}}function Rp(e){if(!e.account)return null;const t=Mp(e).toLocaleString("en-US");return`${Tp(e.account.subscriptionType)}: posts up to ${t} characters.`}async function Co(e,t={}){return Cp(await e("service_status",{service:"x",...t.refreshAccount?{refresh_account:!0}:{}},{background:!0}))}async function e0(e){const t=h(await e("connect_service",{service:"x"})),n=W(t?.authorize_url);if(!n)throw new Error("X did not return an authorization URL.");return n}async function t0(e,t){const n=t.now??Date.now,r=t.pollMs??Ip,o=t.timeoutMs??Ap,i=n();let s=await Co(e);for(;s.pending;){if(n()-i>=o)return{...s,pending:!1,error:"Timed out waiting for X authorization."};await t.sleep(r),s=await Co(e)}return s}function n0(e){return e.error?{ok:!1,message:e.error}:e.connected?{ok:!0,message:"X account connected"}:{ok:!1,message:"X authorization did not complete."}}function $p(e){return new Date(e).toLocaleString([],{hour:"2-digit",minute:"2-digit",month:"short",day:"numeric"})}function Np(e,t){const n=e?Date.parse(e):Number.NaN;return Number.isFinite(n)?n<=t?"Access token expired; it renews automatically on next use.":`Access token renews automatically; the current one expires ${$p(n)}.`:"Tokens renew automatically."}function r0(e,t={}){if(t.connecting)return{tone:"pending",label:"Waiting for X authorization",detail:"Approve the request in the browser tab that opened.",actionLabel:null};if(!e)return{tone:"unknown",label:"Not checked",detail:"Refresh to check the X connection.",actionLabel:"Connect X"};if(!e.hasCredentials)return{tone:"missing-credentials",label:"App credentials missing",detail:"Save X_CLIENT_ID and X_CLIENT_SECRET as provider keys first. They come from console.x.com → your app → OAuth 2.0.",actionLabel:null};if(e.pending)return{tone:"pending",label:"Waiting for X authorization",detail:"An authorization started elsewhere is still open in a browser tab.",actionLabel:null};if(e.error)return{tone:"error",label:"Connection failed",detail:e.error,actionLabel:e.connected?"Reconnect X":"Connect X"};if(e.connected){const n=Rp(e);return{tone:"connected",label:e.account?`Connected as @${e.account.username}`:"Connected",detail:[n,Np(e.expiresAt,t.now??Date.now())].filter(r=>r!==null).join(" "),actionLabel:"Reconnect X"}}return{tone:"disconnected",label:"Not connected",detail:"Posting needs a one-time browser authorization; tokens renew on their own afterwards.",actionLabel:"Connect X"}}const Pp={DROPBOX_CLIENT_ID:"Dropbox app key",DROPBOX_CLIENT_SECRET:"Dropbox app secret (optional)",X_CLIENT_ID:"X client ID",X_CLIENT_SECRET:"X client secret",B2_ACCESS_KEY_ID:"Access key ID",B2_SECRET_ACCESS_KEY:"Secret access key",B2_REGION:"Region",B2_BUCKET:"Bucket",B2_ENDPOINT:"Endpoint",B2_ARCHIVE_PREFIX:"Archive prefix"};function Op(e){return Pp[e.envKey]??e.label}function Zn(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function o0(e){const t=Zn(e);if(!Array.isArray(t?.providers))throw new Error("Could not read provider settings");return t.providers.flatMap(n=>{const r=Zn(n);return!r||typeof r.envKey!="string"||typeof r.label!="string"||typeof r.provider!="string"?[]:[{envKey:r.envKey,provider:r.provider,label:r.label,keyStatus:typeof r.keyStatus=="string"?r.keyStatus:"missing",maskedKey:typeof r.maskedKey=="string"?r.maskedKey:null,editable:r.editable===!0&&r.source!=="1password",secret:r.secret!==!1,source:typeof r.source=="string"?r.source:"missing"}]})}function i0(e){const t=Zn(e);if(!t||typeof t.state!="string"||typeof t.head!="string"||typeof t.pendingObjects!="number"||!Number.isSafeInteger(t.pendingObjects)||t.pendingObjects<0)throw new Error("Could not read project storage status");return{...t,state:t.state,head:t.head,pendingObjects:t.pendingObjects,...typeof t.lastError=="string"?{lastError:t.lastError}:{}}}function s0(e){const[t,n]=_.useState(null),[r,o]=_.useState(!1),[i,s]=_.useState(null),a=_.useRef(null),c=_.useRef(0),l=()=>{c.current+=1,n(null);const f=a.current;fn(()=>f)()};return{draft:t,saving:r,message:i,edit:(f,d)=>{!f.editable||r||(c.current+=1,a.current=d,s(null),n({key:f.envKey,value:f.secret?"":f.maskedKey??""}))},close:l,save:async f=>{if(!t||t.key!==f.envKey||!t.value.trim()||r||!f.editable)return;const d=c.current;o(!0),s(null);try{if(await e(t.key,t.value),d!==c.current)return;s({key:t.key,text:`${Op(f)} saved`,error:!1}),l()}catch(p){d===c.current&&s({key:t.key,text:p instanceof Error?p.message:String(p),error:!0})}finally{o(!1)}},change:f=>n(d=>d?{...d,value:f}:null)}}const Mr={label:"In place · previous version kept",tone:"warning"};function We(e,t){return Object.prototype.hasOwnProperty.call(e,t)&&e[t]!==void 0&&e[t]!==null}function $e(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function Ae(e){return typeof e=="string"&&e.trim()?e.trim():null}function De(e){const t=$e(e);return t!==null?me(t):Ae(e)}function je(e,t){const n=ar(e).map(o=>o.raw),r=Ae(t.asset_id);return r?.startsWith("@")?r:n.length===1?n[0]:r?`@${r}`:"Not provided"}function L(e,t,n="default",r=!1){return{label:e,value:t,tone:n,wide:r}}function Lp(e,t){const n=$e(e),r=$e(t);return n===null||r===null||r<n?null:me(r-n)}function Fp(e){const t=We(e.params,"start_time")?De(e.params.start_time)??"Not provided":"0:00 (default)",n=De(e.params.end_time)??"Not provided",r=Lp(e.params.start_time??0,e.params.end_time)??"Calculated on apply";return{title:"Extract new video clip",settings:[L("Source",je(e.input,e.params)),L("Start",t),L("End",n),L("Duration",r),L("Output","New clip · source preserved"),L("Name",Ae(e.params.name)??"Automatic")],effect:{label:"New clip · source preserved",tone:"default"}}}function Dp(e){const t=De(e.params.chunk_a_end)??"Not provided",n=We(e.params,"chunk_b_start")?e.params.chunk_b_start:e.params.chunk_a_end,r=De(n)??"Not provided",o=$e(e.params.chunk_a_end),i=$e(n),s=o!==null&&i!==null&&i<o?me(o-i):"None";return{title:"Split video into two clips",settings:[L("Source",je(e.input,e.params)),L("First clip",`0:00 → ${t}`),L("Remaining clip",`${r} → end`),L("Overlap",s),L("Output","Two new clips · source preserved")],effect:{label:"Two new clips · source preserved",tone:"default"}}}function Vp(e){const t=We(e.params,"cut_start")||We(e.params,"cut_end"),n=t?"cut_start":"trim_start",r=t?"cut_end":"trim_end",o=We(e.params,n)?De(e.params[n])??"Not provided":t?"Not provided":"0:00 (default)",i=We(e.params,r)?De(e.params[r])??"Not provided":t?"Not provided":"End of video";return{title:t?"Remove section from video":"Trim video in place",settings:[L("Source",je(e.input,e.params)),L("Operation",t?"Remove range":"Keep range"),L("Start",o),L("End",i),L("Output","Existing source updated in place","warning"),L("Recovery","Previous version retained")],effect:Mr}}function bt(e){const t=e.replaceAll("_"," ").replaceAll("-"," ");return t.charAt(0).toUpperCase()+t.slice(1)}function jp(e){return String(Number(e.toFixed(2)))}function Gp(e){const t=$e(e.sourceDurationSeconds),n=$e(e.params.speed),r=$e(e.params.target_duration_seconds),o=n??(t!==null&&r!==null&&r>0?t/r:null),i=r??(t!==null&&o!==null&&o>0?t/o:null),s=[L("Source",je(e.input,e.params))];return t!==null&&t>0&&s.push(L("Source duration",me(t))),s.push(L("Speed",o!==null?`${jp(o)}×${n===null?" (from target duration)":""}`:"Calculated on apply")),r!==null&&s.push(L("Target duration",me(r))),i!==null&&i>0&&r===null&&s.push(L("Expected duration",me(i))),s.push(L("Output","Existing source updated in place","warning"),L("Recovery","Previous version retained")),{title:"Change video speed",settings:s,effect:Mr}}function qp(e){const t=Ae(e.params.scheduled_for),n=Ae(e.params.orientation);return{title:"Post to X",settings:[L("Destination","X"),L("Source",je(e.input,e.params)),L("Publish",t?`Scheduled · ${t}`:"Now","default",t!==null),L("Orientation",n?bt(n):"Keep source")],effect:{label:t?"Publishes to X · scheduled":"Publishes to X · now",tone:"default"},postText:typeof e.params.text=="string"?e.params.text:""}}const Tr=/api.?key|secret|(?:^|[_-])token(?:$|[_-])|password|credential|authorization/iu;function Up(e,t){return e!=="value"?!1:Object.entries(t).some(([n,r])=>/^(?:env_?)?key$|^(?:variable_?)?name$/iu.test(n)&&typeof r=="string"&&Tr.test(r))}function Qn(e){return Array.isArray(e)?e.map(Qn):typeof e!="object"||e===null?e:Object.fromEntries(Object.entries(e).map(([t,n])=>[t,Tr.test(t)?"Hidden":Qn(n)]))}function Rs(e,t,n){if(Tr.test(e)||Up(e,n))return"Hidden";if(/time|seconds|duration/iu.test(e)){const o=De(t);if(o)return o}if(typeof t=="boolean")return t?"Yes":"No";if(typeof t=="number")return String(t);if(typeof t=="string"&&(/url/iu.test(e)||/^https?:\/\//iu.test(t)))return t;if(typeof t=="string")return t.length>96?`${t.slice(0,93)}…`:t;const r=JSON.stringify(Qn(t));return r?r.length>96?`${r.slice(0,93)}…`:r:"None"}function Bp(e){const t=Array.isArray(e.params.steps)?e.params.steps:[],n=t.flatMap((o,i)=>{const s=Rn(o),a=Ae(s?.tool)??`step ${i+1}`,c=Rn(s?.params)??{},l=Ae(c.asset_id)??Ae(c.audio_asset_id)??je(e.input,c);return[L(`Step ${i+1}`,`${bt(a)} · ${l}`)]}),r=t.some(o=>{const i=Ae(Rn(o)?.tool);return i==="replace_video_audio"||i==="trim_video"});return{title:"Chained actions",settings:n.length>0?n:[L("Tool","chain")],effect:r?Mr:null}}function Mo(e){return e===null?"Unknown":e<.01?`${Math.round(e*100)}¢`:`$${e.toFixed(2)}`}function a0(e,t){const n=[L("Step",`${e.index+1} of ${e.total}`),...e.address?[L("Source",e.address)]:[],...Object.entries(e.params).filter(([r])=>r!=="prompt"&&r!=="_provider").slice(0,5).map(([r,o])=>L(bt(r),Rs(r,o,e.params))),L("Estimated cost",Mo(e.estimateUsd),e.estimateUnavailable?"warning":"default"),L("Remaining steps",t>0?String(t):"None")];return{title:`Step ${e.index+1} of ${e.total} · ${e.title}`,settings:n,effect:{label:e.estimateUnavailable?"Cost unknown for this model":`Spends about ${Mo(e.estimateUsd)}`,tone:"warning"},postText:typeof e.params.prompt=="string"?e.params.prompt:void 0}}function Rn(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Hp(e){const t=Object.entries(e.params).filter(([n])=>n!=="book_id").slice(0,8).map(([n,r])=>L(bt(n),n==="asset_id"?je(e.input,e.params):Rs(n,r,e.params),"default",/url/iu.test(n)&&typeof r=="string"));return{title:bt(e.tool),settings:t.length>0?t:[L("Tool",e.tool)],effect:null}}function c0(e){return e.tool==="extract_video_clip"?Fp(e):e.tool==="split_video"?Dp(e):e.tool==="trim_video"?Vp(e):e.tool==="change_video_speed"?Gp(e):e.tool==="post"?qp(e):e.tool==="chain"?Bp(e):Hp(e)}const Ct={blocking:null,notice:null};function ee(e){return{blocking:e,notice:null}}function $s(e){return{blocking:null,notice:e}}function To(e,t,n){return t!==null?t>e:n<=0||e<n}function Wp(e){return e.trim().replace(/^@/,"").trim()}function l0(e){const t=Wp(e.handle),n=e.url.trim(),r=e.durationSeconds??0;return!e.includeHandle&&!e.includeQr?ee("Include a handle, a QR code, or both."):e.includeHandle&&!t?ee("Include handle is on but no handle is set. Type a handle, or turn Include handle off."):e.includeQr&&!n&&!t?ee("Include QR code is on but there is nothing to link. Enter a QR link, or a handle it can point to."):e.includeQr&&!To(e.qrStartSeconds,e.qrEndSeconds,r)?ee("QR end time must be after its start time."):e.includeHandle&&!To(e.handleStartSeconds,e.handleEndSeconds,r)?ee("Handle end time must be after its start time."):Ct}function u0(e){if(!e.prompt?.trim())return ee("Write a prompt before applying.");if(e.settingsError)return ee(e.settingsError);if(e.previewStale)return Ct;if(e.previewLoading)return ee("Waiting for the server preview.");if(e.previewError!==null)return ee(`Preview failed — ${e.previewError}`);const[t,...n]=e.promptLeaks;if(t){const r=n.length>0?` (+${n.length} more)`:"";return ee(`${t.message}${r}. Add it with Add input, or remove the mention.`)}return $s(e.estimateUnknown?"No cost estimate is available for this model.":null)}function d0(e){const t=Ce({cutPointsSeconds:e.cutPointsSeconds,sourceDurationSeconds:e.sourceDurationSeconds});if(t.length===0)return ee("Nothing to split yet — add a cut point.");if(e.outputMode==="remove"&&t.length<2)return ee("Removing a piece needs at least two pieces. Add a cut first.");const n=Rm(e.outputMode,t.length);return e.availableEmptyCells<n?ee(`This split needs ${n} empty notebook cells; ${e.availableEmptyCells} available.`):Ct}function f0(e){if(e.suggestions&&e.suggestions.every(s=>!s.included))return ee("Include at least one suggestion, or cancel.");const t=e.previews.flatMap(s=>s.conflicts)[0];if(t)return ee(t.message);if(e.previews.some(s=>!s.valid))return ee("A planned edit no longer fits the current sequence. Prepare it again.");const n=e.previews.flatMap(s=>s.warnings),[r,...o]=n;if(!r)return Ct;const i=o.length>0?` (+${o.length} more)`:"";return $s(`${r.message}${i}`)}function m0(e,t,n){const r=sc(e,t,n);return r?ee(r):Ct}function p0(e){return e.busy?{state:"busy",message:e.busyLabel,dismissible:!1}:e.validation.blocking!==null?{state:"blocking",message:e.validation.blocking,dismissible:!1}:e.outcome&&!e.outcome.ok?{state:"failed",message:e.outcome.message,dismissible:!0}:e.notice?.tone==="error"?{state:"failed",message:e.notice.message,dismissible:!0}:e.validation.notice!==null?{state:"notice",message:e.validation.notice,dismissible:!1}:e.outcome?.ok?{state:"info",message:e.outcome.message,dismissible:!0}:e.notice?{state:"info",message:e.notice.message,dismissible:!0}:{state:"ready",message:null,dismissible:!1}}const Kp=1024,g0=`(min-width: ${Kp}px)`;function h0(e){return e.state==="ready"&&!e.hasSecondaryActions&&e.wideEnough}function zp(e){return e==="image"||e==="generate_image"?"image":e==="video"||e==="split_video"||e==="generate_video"||e==="concat"||e==="splice"?"video":e==="audio"||e==="extract_audio"||e==="generate_audio"?"audio":null}function Xp(e,t,n){const r=new Set(e.edges.filter(o=>o.target===t).map(o=>o.targetInput));if(!r.has(n))return n;for(let o=2;;o+=1){const i=`${n}_${o}`;if(!r.has(i))return i}}function Yp(e){return e==="generate_image"||e==="generate_video"||e==="generate_audio"}function b0(e,t){const n=t.targetHandle??"input",r=e.cells.find(s=>s.id===t.source),o=e.cells.find(s=>s.id===t.target);if(!r||!o||!Yp(o.type))return n;const i=zp(r.type);return!i||i==="image"&&(n==="first_frame"||n==="last_frame")||i==="audio"&&(n==="replace_audio"||n==="scene_audio")?n:Xp(e,o.id,i)}function Jp(e){return e==="extract_audio"?["video"]:e==="split_video"?["video","analysis"]:e==="analysis"?["result"]:e==="image"?["media","segment"]:e==="audio"||e==="video"?["media"]:["input"]}function Zp(e,t){if(t.inputs?.mediaRole!=="extract-frame-output")return null;const n=typeof t.inputs.sourceCellId=="string"?t.inputs.sourceCellId:null,r=n?e.get(n):void 0,o=Number(t.inputs.atSeconds??t.inputs.timestampSeconds);return{sourceAddress:r?ue(r.slot):null,atSeconds:Number.isFinite(o)?o:null}}function Qp(e){const t=new Map(e.cells.map(a=>[a.id,a])),n=Hi(e),r=new Map,o=new Map,i=new Map,s=new Map;for(const a of e.edges){const c=r.get(a.target)??[];c.includes(a.targetInput)||c.push(a.targetInput),r.set(a.target,c),o.set(a.target,(o.get(a.target)??0)+1);const l=i.get(a.target)??{};l[a.targetInput]=(l[a.targetInput]??0)+1,i.set(a.target,l);const u=n.get(a.id)??qi,m=Wi(u.sourceSide,u.sourcePortIndex),f=s.get(a.source)??[];f.includes(m)||f.push(m),s.set(a.source,f)}return e.cells.map(a=>{const c=Zp(t,a),l=Pc(a,e.cells,e.edges);return{id:a.id,type:a.type==="timeline"||a.type==="goal"?a.type:"cell",...a.type==="timeline"?{dragHandle:".notebook-timeline-header",connectable:!1}:{},...["goal","post"].includes(a.type)?{connectable:!1}:{},position:Qe(a.slot),data:{kind:a.type,...a.label===void 0?{}:{label:a.label},subtitle:Ve(a)?fu():`${a.type.toUpperCase()} · CELL`,slot:a.slot,status:"ready",targetInputs:r.get(a.id)??Jp(a.type),targetConnectionCount:o.get(a.id)??0,targetInputConnectionCounts:i.get(a.id)??{},sourcePorts:s.get(a.id)??[],...a.prompt===void 0?{}:{prompt:a.prompt},...a.provider===void 0?{}:{provider:a.provider},...a.model===void 0?{}:{model:a.model},...a.operation===void 0?{}:{operation:a.operation},...a.tool===void 0?{}:{tool:a.tool},...a.outputEntityId===void 0?{}:{outputEntityId:a.outputEntityId},...a.outputArtifactId===void 0?{}:{outputArtifactId:a.outputArtifactId},...a.inputs===void 0?{}:{inputs:a.inputs},...c===null?{}:{frameProvenance:c},...l?.provider===void 0?{}:{producerProvider:l.provider},...l?.model===void 0?{}:{producerModel:l.model}}}})}function y0(e,t,n){let r=!1;const o=e.map(i=>i.id!==t||i.data.status===n?i:(r=!0,{...i,data:{...i.data,status:n}}));return r?o:e}function _0(e){const t=Hi(e),n=new Map(e.cells.map(r=>[r.id,fi(r.type)]));return e.edges.map(r=>{const o=t.get(r.id)??qi,i=n.get(r.source)??"data";return{id:r.id,source:r.source,sourceHandle:Wi(o.sourceSide,o.sourcePortIndex),target:r.target,targetHandle:r.targetInput,type:"busRiver",className:`workflow-edge edge-family-${i}`,data:o}})}function v0(e,t){return t?e.map(n=>{const r=new Set((n.className??"").split(/\s+/).filter(Boolean));return r.add(n.source===t||n.target===t?"workflow-edge-cell-focus":"workflow-edge-cell-dim"),{...n,className:[...r].join(" ")}}):e}function eg(e){return e.operation!=="rewrite_prompt"&&It(e.type)}function k0(e){return e.tool==="edit_image_subjects"&&e.provider==="local"?!1:e.operation==="rewrite_prompt"||eg(e)}function lt(e="text"){return{mode:e,reference:null,startSeconds:"0",durationSeconds:"",preparing:!1,error:null}}function Ro(e){return e instanceof Error?e.message:String(e)}function tg({initialMode:e="text",onStateChange:t,release:n}){let r=!0,o=0,i=lt(e);const s=g=>{i=g,r&&t(g)},a=g=>{g&&Promise.resolve(n(g)).catch(()=>{})},c=g=>{o+=1;const y=i.reference;s(lt(g)),a(y)};return{changeMode:g=>{r&&c(g)},clearError:()=>{r&&i.error&&s({...i,error:null})},clearReference:()=>{if(!r)return;o+=1;const g=i.reference;s({...i,reference:null,startSeconds:"0",durationSeconds:"",preparing:!1,error:null}),a(g)},close:()=>{r&&c("text")},getState:()=>i,prepare:async(g,y)=>{if(!r)return{status:"stale"};const v=o+1;if(o=v,i.mode===g)s({...i,preparing:!0,error:null});else{const S=i.reference;s({...lt(g),preparing:!0}),a(S)}try{const S=await y();if(!r||v!==o)return a(S),{status:"stale"};const w=i.reference;return s({mode:g,reference:S,startSeconds:"0",durationSeconds:"",preparing:!1,error:null}),w!==S&&a(w),{status:"ready",mode:g,reference:S}}catch(S){if(!r||v!==o)return{status:"stale"};const w=Ro(S);return s({...i,preparing:!1,error:w}),{status:"error",error:w}}},resetInvalidRange:g=>{const y=Ro(g);return r&&s({...i,startSeconds:"0",durationSeconds:"",error:y}),y},setDurationSeconds:g=>{r&&s({...i,durationSeconds:g,error:null})},setStartSeconds:g=>{r&&s({...i,startSeconds:g,error:null})},stop:()=>{if(!r)return;r=!1,o+=1;const g=i.reference;i=lt(),a(g)}}}function ng(e){if(typeof e!="object"||e===null)return[];const t=e.preparationJobs;return Array.isArray(t)?t.flatMap(n=>{if(typeof n!="object"||n===null)return[];const r=n;return typeof r.bookId=="string"&&typeof r.jobId=="number"&&Number.isSafeInteger(r.jobId)&&r.jobId>0?[{bookId:r.bookId,jobId:r.jobId}]:[]}):[]}async function w0(e){const t=Date.now()+(e.timeoutMs??6e5);try{for(;!e.isCancelled();){const n=await e.search();let r=ng(n);if(e.isCancelled())return;if(r.length===0)return n;for(e.onPreparing(!0);r.length>0;){if(Date.now()>=t)throw new Error("Search preparation is still running. Try searching again shortly.");if(e.isCancelled())return;const o=[];for(const i of new Set(r.map(s=>s.bookId))){const s=r.filter(c=>c.bookId===i),a=await e.listJobs(i,s.map(c=>c.jobId));if(!Array.isArray(a))throw new Error("The server returned an invalid search preparation status");for(const c of s){const l=a.find(u=>typeof u=="object"&&u!==null&&u.id===c.jobId);if(!l)throw new Error("Search preparation could not be found. Try searching again.");if(l.state==="failed"||l.state==="aborted"){const u=l.error;throw new Error(u?.message??"Search preparation failed. Try searching again.")}l.state!=="done"&&o.push(c)}}r=o,r.length>0&&await new Promise(i=>setTimeout(i,e.intervalMs??1e3))}}return}finally{e.onPreparing(!1)}}function Ue(e){if(typeof e!="object"||e===null)throw new Error("Invalid search indexing response");return e}async function S0(e){const t=Ue(await e.start());if(!Array.isArray(t.jobs))throw new Error("Invalid search indexing jobs");let n=t.jobs.map(i=>{const s=Ue(i);if(typeof s.bookId!="string"||typeof s.jobId!="number"||!Number.isSafeInteger(s.jobId)||s.jobId<=0)throw new Error("Invalid search indexing job");return{bookId:s.bookId,jobId:s.jobId}});const r={indexed:0,failed:0,failures:[]},o=Date.now()+(e.timeoutMs??20*6e4);for(;n.length>0;){if(e.isCancelled())return;if(Date.now()>=o)throw new Error("Indexing is still running. Reopen the Library to check coverage.");const i=[];for(const s of new Set(n.map(a=>a.bookId))){if(e.isCancelled())return;const a=n.filter(l=>l.bookId===s),c=await e.listJobs(s,a.map(l=>l.jobId));if(!Array.isArray(c))throw new Error("Invalid search indexing status");for(const l of a){const u=c.map(Ue).find(m=>m.id===l.jobId);if(!u)throw new Error("Indexing job could not be found. Reopen the Library to retry.");if(u.state==="done"){const m=Ue(u.result);if(typeof m.indexed!="number"||typeof m.failed!="number"||!Array.isArray(m.failures))throw new Error("Invalid search indexing result");r.indexed+=m.indexed,r.failed+=m.failed;for(const f of m.failures){const d=Ue(f).message;typeof d=="string"&&r.failures.length<20&&r.failures.push({message:d})}}else if(u.state==="failed"||u.state==="aborted"){r.failed+=1;const m=u.error?Ue(u.error).message:void 0;r.failures.length<20&&r.failures.push({message:typeof m=="string"?m:"Search indexing failed"})}else i.push(l)}}n=i,n.length>0&&await new Promise(s=>setTimeout(s,e.intervalMs??1e3))}return e.isCancelled()?void 0:r}function I0(e){const t=ne.c(10),n="text";let r;t[0]!==n?(r=()=>lt(n),t[0]=n,t[1]=r):r=t[1];const[o,i]=_.useState(r);let s;t[2]!==n?(s=()=>tg({initialMode:n,onStateChange:i,release:vf}),t[2]=n,t[3]=s):s=t[3];const[a]=_.useState(s);let c,l;t[4]!==a?(c=()=>()=>{a.stop()},l=[a],t[4]=a,t[5]=c,t[6]=l):(c=t[5],l=t[6]),_.useEffect(c,l);let u;return t[7]!==a||t[8]!==o?(u={state:o,lifecycle:a},t[7]=a,t[8]=o,t[9]=u):u=t[9],u}const Rr={jobs:{path:"/jobs",name:"Jobs"},settings:{path:"/settings",name:"Settings"}},rg=Object.entries(Rr);function A0(e){const t=e.replace(/\/+$/,"")||"/";return rg.find(([,r])=>r.path===t)?.[0]??"notebook"}function x0(e){return e==="notebook"?"/":Rr[e].path}function E0(e){return e==="notebook"?"VIDEOBOOK":`${Rr[e].name} · VIDEOBOOK`}function og(e,t){return!e||!t?null:`${e}:${t}`}function ig(e,t){return t?e[t]??null:null}function sg(e,t,n){if(!t)return{...e};const r=e[t];return r&&r.row===n.row&&r.column===n.column?e:{...e,[t]:n}}function C0(e,t){const n=ne.c(11);let r;n[0]===Symbol.for("react.memo_cache_sentinel")?(r={},n[0]=r):r=n[0];const[o,i]=_.useState(r);let s,a;n[1]!==e||n[2]!==t||n[3]!==o?(s=og(e,t),a=ig(o,s),n[1]=e,n[2]=t,n[3]=o,n[4]=s,n[5]=a):(s=n[4],a=n[5]);const c=a;let l;n[6]!==s?(l=f=>{i(d=>sg(d,s,f))},n[6]=s,n[7]=l):l=n[7];const u=l;let m;return n[8]!==c||n[9]!==u?(m={lastWorkSlot:c,rememberLastWorkSlot:u},n[8]=c,n[9]=u,n[10]=m):m=n[10],m}function M0(e,t=n=>window.requestAnimationFrame(n)){t(()=>{t(()=>{const n=e();n&&n.scrollTo({top:n.scrollHeight,behavior:"smooth"})})})}function ag(e,t){const n=e();if(!n)return()=>{};const r=n.closest(".app-shell")?.querySelector(".command-composer:not([hidden])");let o=0,i=!1;const s=()=>{i=!0,window.cancelAnimationFrame(o),l.disconnect(),n.scrollTo({top:n.scrollTop,behavior:"instant"}),window.removeEventListener("pointerdown",s,!0),window.removeEventListener("wheel",s,!0),window.removeEventListener("keydown",s,!0),window.removeEventListener("resize",s)},a=()=>{if(i)return;const u=e();if(!u)return s();const m=u.querySelectorAll(".react-flow__node.selected"),f=m.length===1?m[0]:null;if(!f||f.getAttribute("data-id")!==t)return s();const d=u.getBoundingClientRect(),g=Math.min(d.top+u.clientHeight,r?.getBoundingClientRect().top??d.bottom)-d.top;if(g<=0)return;const y=f.getBoundingClientRect(),v=Math.max(16,(g-y.height)/2),S=Math.max(0,Math.min(u.scrollHeight-u.clientHeight,u.scrollTop+y.top-d.top-v));Math.abs(S-u.scrollTop)<=2||u.scrollTo({top:S,behavior:window.matchMedia("(prefers-reduced-motion: reduce)").matches?"auto":"smooth"})},c=()=>{i||(window.cancelAnimationFrame(o),o=window.requestAnimationFrame(()=>{o=window.requestAnimationFrame(a)}))},l=new ResizeObserver(c);return l.observe(n),r&&l.observe(r),window.addEventListener("pointerdown",s,!0),window.addEventListener("wheel",s,{capture:!0,passive:!0}),window.addEventListener("keydown",s,!0),window.addEventListener("resize",s),c(),s}function T0(e,t,n){const r=ne.c(16),o=_.useRef(null);let i;r[0]===Symbol.for("react.memo_cache_sentinel")?(i={width:0,height:0,minimumZoom:0},r[0]=i):i=r[0];const[s,a]=_.useState(i),c=_.useRef(1),l=_.useRef(0),u=_.useRef(null),m=uu(s.width,s.minimumZoom);let f;r[1]===Symbol.for("react.memo_cache_sentinel")?(f=()=>{const I=o.current;I&&(l.current=I.scrollTop/c.current)},r[1]=f):f=r[1];const d=f;let p;r[2]!==n?(p=()=>{const I=o.current;if(!n||!I)return;I.scrollLeft=0,I.scrollTop=0,l.current=0;const E=()=>{d();const x=getComputedStyle(I),$=Math.max(0,I.clientWidth-parseFloat(x.paddingLeft)-parseFloat(x.paddingRight)),T=I.clientHeight,N=parseFloat(x.getPropertyValue("--notebook-minimum-zoom"))||0;a(M=>M.width===$&&M.height===T&&M.minimumZoom===N?M:{width:$,height:T,minimumZoom:N})};E(),I.addEventListener("scroll",d,{passive:!0});const C=new ResizeObserver(E);return C.observe(I),()=>{u.current?.(),I.removeEventListener("scroll",d),C.disconnect()}},r[2]=n,r[3]=p):p=r[3];let g;r[4]!==n||r[5]!==e||r[6]!==t?(g=[n,e,t,d],r[4]=n,r[5]=e,r[6]=t,r[7]=g):g=r[7],_.useLayoutEffect(p,g);let y,v;r[8]!==n||r[9]!==m?(y=()=>{const I=o.current;!n||!I||(I.scrollTop=l.current*m,c.current=m,d())},v=[n,d,m],r[8]=n,r[9]=m,r[10]=y,r[11]=v):(y=r[10],v=r[11]),_.useLayoutEffect(y,v);let S;r[12]===Symbol.for("react.memo_cache_sentinel")?(S=I=>{u.current?.(),u.current=ag(()=>o.current,I)},r[12]=S):S=r[12];const w=S;let k;return r[13]!==s||r[14]!==m?(k={scrollRef:o,surface:s,zoom:m,revealCell:w},r[13]=s,r[14]=m,r[15]=k):k=r[15],k}function R0(e,t){const n=e?t.find(r=>r.artifactId===e||r.id===e):void 0;return!e||!n?{ok:!1,message:"Usage: /music-video @audio"}:n.type!=="audio"?{ok:!1,message:"/music-video requires an audio asset"}:n.status!=="ready"||!n.mediaUrl||!n.audioInfo?{ok:!1,message:"Process the audio asset before opening the music-video editor"}:{ok:!0,asset:n}}const $0=["source","cinematic","ig-influencer"],cg={source:{id:"source",label:"Match source",summary:"Keep the look, camera and lighting of the source screenshot.",briefKeywords:[],defaults:{imageModel:"nano-banana-2-1",imageResolution:"2K",videoResolution:"720p"},planner:"Infer the visual style, framing, lighting and camera from the scene reference. Preserve that look. Identify the scene screenshot, character references and prop references from the actual images and brief. Reference images are not necessarily people. Remove social-media interface overlays from generated pictures.",fragments:{frame:"Match the source scene's framing, lighting and visual style; remove interface overlays",storyboard:"Keep the approved scene's visual style, people and props",ending:"Keep the approved scene's visual style",video:"Match the approved scene's camera and lighting; natural ambient sound",revise:"Preserve the selected image's visual style"},banned:[],options:[]},cinematic:{id:"cinematic",label:"Cinematic",summary:"Photographic live-action with natural proportions, textures and motion.",briefKeywords:["cinematic"],defaults:{},planner:"Photographic live-action. Natural proportions, real skin and material textures, practical light. Restrained expressions and plausible motion. Comedy comes from situations and timing; avoid cartoon rendering, caricature, rubbery movement and exaggerated features.",fragments:{frame:"Photographic live-action, natural proportions, real textures",storyboard:"Photographic live-action, natural proportions, real textures",ending:"Photographic live-action, natural proportions, real textures",video:"Live-action, natural motion, restrained expressions",revise:"Photographic live-action, natural proportions, real textures"},banned:[],options:[]},"ig-influencer":{id:"ig-influencer",label:"IG Influencer",summary:"Hyper-realistic, candid iPhone footage with natural skin and light.",briefKeywords:["ig influencer","instagram influencer","influencer","insta reel","instagram reel"],defaults:{aspectRatio:"9:16",imageModel:"sunburst",imageResolution:"2K",videoResolution:"720p"},planner:"Use a hyper-realistic Instagram phone-camera register: real-world activity in present tense, one location per shot, candid framing with slight imperfection, light grain, unretouched skin with visible pores and texture. Use the selected iPhone camera and lighting; natural daylight or soft indoor light by default. No HDR crunch or beautify. No captions or on-screen text inside pictures or video; storyboard notes go below pictures. Avoid cinematic, masterpiece, editorial, Portra, Cinestill and all film-stock vocabulary. Match the delivery: address the camera for selfies, be caught mid-action when filmed by a friend, hold framing steady on a tripod, or show the reflection for a mirror shot. Make the selected content format explicit in the four beats. Sound is ambient room or street sound with an optional short spoken line.",fragments:{frame:"hyper-realistic, skin pores, light grain",storyboard:"hyper-realistic, skin pores, light grain",ending:"hyper-realistic, skin pores",video:"hyper-realistic skin pores, natural motion, handheld micro-shake, ambient sound",revise:"hyper-realistic, skin pores"},banned:["cinematic","masterpiece","editorial","Portra","Cinestill"],options:[{key:"format",label:"Content format",default:"day-in-the-life",choices:[{value:"grwm",label:"GRWM",prompt:"GRWM",briefKeywords:["grwm","get ready with me"],beats:"skincare, outfit, final look, mirror check"},{value:"ootd",label:"OOTD",prompt:"OOTD",briefKeywords:["ootd","outfit of the day"],beats:"reveal, details, walk, turn"},{value:"day-in-the-life",label:"Day in the life",prompt:"day-in-the-life",briefKeywords:["day in the life","vlog"],beats:"arrive, begin activity, react, finish"},{value:"travel-reel",label:"Travel reel",prompt:"travel",briefKeywords:["travel reel"],beats:"arrive, explore, discover, farewell"},{value:"cafe",label:"Café",prompt:"café",briefKeywords:["brunch","cafe","café"],beats:"order, receive drink, taste, smile"},{value:"gym",label:"Gym",prompt:"gym",briefKeywords:["gym"],beats:"warm up, exercise, effort, recover"},{value:"skincare",label:"Skincare",prompt:"skincare",briefKeywords:["skincare"],beats:"cleanse, apply, massage, reveal"},{value:"haul",label:"Haul",prompt:"haul",briefKeywords:["haul"],beats:"unpack, show item, try on, react"},{value:"storytime",label:"Storytime",prompt:"storytime",briefKeywords:["storytime"],beats:"hook, explain, react, conclude"}]},{key:"delivery",label:"Delivery",default:"selfie-to-camera",choices:[{value:"selfie-to-camera",label:"Selfie to camera",prompt:"selfie",briefKeywords:["selfie","front camera"]},{value:"filmed-by-friend",label:"Filmed by a friend",prompt:"friend-filmed",briefKeywords:["filmed by"]},{value:"tripod",label:"Tripod",prompt:"tripod",briefKeywords:["tripod"]},{value:"mirror",label:"Mirror",prompt:"mirror",briefKeywords:["mirror"]}]},{key:"camera",label:"Camera",default:"iphone-front",choices:[{value:"iphone-front",label:"iPhone front camera",prompt:"iPhone front",briefKeywords:["front camera","iphone front"]},{value:"iphone-main",label:"iPhone main camera",prompt:"iPhone main",briefKeywords:["main camera","iphone main"]}]},{key:"light",label:"Light",default:"soft-daylight",choices:[{value:"soft-daylight",label:"Soft daylight",prompt:"soft daylight",briefKeywords:["soft daylight","natural daylight"]},{value:"golden-hour",label:"Golden hour",prompt:"golden hour",briefKeywords:["golden hour"]},{value:"indoor-warm",label:"Warm indoor light",prompt:"warm indoor",briefKeywords:["warm indoor","indoor warm"]},{value:"night-flash",label:"Night flash",prompt:"night flash",briefKeywords:["night out","flash"]}]}]}};function nn(e){return cg[e]}function er(e,t={}){const n=nn(e);for(const o of Object.keys(t))if(!n.options.some(i=>i.key===o))throw new Error(`Unknown ${n.label} option: ${o}`);const r={};for(const o of n.options){const i=o.key==="camera"&&r.delivery!=="selfie-to-camera"?"iphone-main":o.default,s=t[o.key]??i;if(!o.choices.some(a=>a.value===s))throw new Error(`Invalid ${n.label} ${o.label}: ${s}. Choose ${o.choices.map(a=>a.value).join(", ")}.`);r[o.key]=s}return r}function N0(e,t){const n=nn(e.id),r=er(e.id,e.options);let o=n.fragments[t];if(!o)return"";const i=n.options.map(s=>s.choices.find(a=>a.value===r[s.key]).prompt);return`${i.length?`${i.join(", ")}: `:""}${o}.`}function lg(e,t){if(e.id!==t.id)return!1;const n=er(e.id,e.options),r=er(t.id,t.options);return Object.keys(n).every(o=>n[o]===r[o])}function yt(e){return!!(e&&"version"in e&&e.version===2)}function Ne(e){return!e||!("shots"in e)?[]:e.shots}function P0(e,t){return e.title===t.title&&e.continuity===t.continuity&&e.aspectRatio===t.aspectRatio&&e.imageModel===t.imageModel&&e.imageResolution===t.imageResolution&&e.videoResolution===t.videoResolution&&e.storyboardLayout===t.storyboardLayout&&JSON.stringify(e.referenceRoles??[])===JSON.stringify(t.referenceRoles??[])&&!!e.frameContinuity==!!t.frameContinuity&&lg(e.style??{id:"cinematic",options:{}},t.style??{id:"cinematic",options:{}})&&e.frame.prompt===t.frame.prompt&&e.shots.length===t.shots.length&&e.shots.every((n,r)=>n.title===t.shots[r]?.title&&n.storyboardPrompt===t.shots[r]?.storyboardPrompt&&(n.endingPrompt??null)===(t.shots[r]?.endingPrompt??null)&&n.videoPrompt===t.shots[r]?.videoPrompt&&n.durationSeconds===t.shots[r]?.durationSeconds)}function O0(e,t,n){return e.stages[t]?.outputs.find(r=>r.index===n)?.versions??[]}function L0(e,t,n){return e.stages[t]?.outputs.find(r=>r.index===n)?.stale??null}function F0(e,t,n){const r=e.estimate[t].usd;if(r===null||t==="frame")return r;const o=Ne(e.plan),i=Math.max(1,o.length);if(t==="videos"&&o.length>0){const s=o.reduce((a,c)=>a+c.durationSeconds,0);return r*(o[n]?.durationSeconds??0)/s}return r/(i*(e.plan&&"frameContinuity"in e.plan&&e.plan.frameContinuity?2:1))}function Ns(e){return Object.values(e.stages).flatMap(t=>t.attempts??[]).find(t=>t.chainId===e.chainId&&t.feedback)}function bn(e){const t=Ns(e);if(!t)return null;if(e.planVersion===3){if(t.stage==="frame")return"scene";if(t.stage==="videos")return"video"}if(t.stage==="frame")return"frame";if(t.stage==="videos")return`video ${t.index+1}`;const n=Math.max(1,Ne(e.plan).length);return`${t.index>=n?"ending frame":"storyboard"} ${t.index%n+1}`}function D0(e){return(e.planVersion===2||e.planVersion===3)&&(e.status==="failed"||e.status==="interrupted")}function V0(e){return e.status!=="running"||!e.resumeStage?"Stop goal":Ns(e)?"Stop revision":"Stop regeneration"}function ug(e,t,n,r){if(n.phase!=="review"||!["frame","storyboards"].includes(t.phase)||!e.chainId||!r.stages[t.stage]?.previousChainIds.includes(e.chainId))return null;const o=bn(e);return`${o?`${o[0].toUpperCase()}${o.slice(1)} revision`:t.stage==="frame"?"Frame generation":"Storyboard generation"} stopped`}function Ps(e){if(!e||typeof e!="object"||!("kind"in e)||e.kind!=="video-goal")throw new Error("The server returned an invalid video goal");return e}function dg(e){if(!e||typeof e!="object"||!("goals"in e)||!Array.isArray(e.goals))throw new Error("The server returned an invalid goal list");return e.goals.map(Ps)}function fg(e){return{planned:"Planned",waiting:"Waiting",submitting:"Submitting",generating:"Generating",done:"Ready",failed:"Failed",skipped:"Not started",stopped:"Stopped"}[e]}function _t(e){const t=Math.max(0,Math.floor(e));return`${Math.floor(t/60)}:${String(t%60).padStart(2,"0")}`}function Os(e){return e&&"version"in e&&e.version===3?e.video.durationSeconds:Ne(e).reduce((t,n)=>t+n.durationSeconds,0)}function mg(e,t,n){return t?t.status==="completed"?"done":t.status==="running"?t.address?"generating":"submitting":t.status==="failed"||t.status==="interrupted"?"failed":t.status==="cancelled"||t.status==="rejected"?"stopped":t.status==="skipped"?e.status==="cancelled"?"stopped":"skipped":"waiting":n?"done":e.status==="planning"||e.status==="review"?"planned":"waiting"}function pg(e){return Ne(e).map((t,n)=>({index:n,number:String(n+1).padStart(2,"0"),title:t.title,prompt:"videoPrompt"in t?t.videoPrompt:t.prompt,seconds:t.durationSeconds,state:"planned",startedAt:null,cellId:null,address:null,artifactId:null,error:null}))}function gg(e,t){const n=e.plan,r=n&&"version"in n&&n.version===3?n:null,o=r?[{index:0,number:"01",title:t==="videos"?"Video":"Scene",prompt:t==="videos"?r.video.prompt:r.scene.prompt,seconds:t==="videos"?r.video.durationSeconds:0}]:t==="frame"&&yt(n)?[{index:0,number:"01",title:"Full frame",prompt:n.frame.prompt,seconds:0}]:Ne(n).map((c,l)=>({index:l,number:String(l+1).padStart(2,"0"),title:c.title,prompt:"videoPrompt"in c?t==="storyboards"?c.storyboardPrompt:c.videoPrompt:c.prompt,seconds:t==="videos"?c.durationSeconds:0})),i=!r&&t==="storyboards"&&yt(n)&&n.frameContinuity?[...o,...n.shots.map((c,l)=>({index:l+n.shots.length,number:`${String(l+1).padStart(2,"0")} end`,title:`${c.title} · Ending`,prompt:c.endingPrompt??c.videoPrompt,seconds:0}))]:o,s=e.stages[t],a=new Map((s?.steps??(e.planVersion===1?e.steps:[])).map(c=>[c.id,c]));return i.map(c=>{const l=r?t==="videos"?"video":"scene":t==="frame"?"frame":`${t==="storyboards"?"storyboard":"shot"}${c.index+1}`,u=a.get(l),m=s?.outputs.find(f=>f.index===c.index);return{...c,state:mg(e,u,!!m),startedAt:u?.startedAt??null,cellId:u?.cellId??m?.cellId??null,address:u?.address??m?.address??null,artifactId:u?.status==="completed"?u.artifactId:m?.artifactId??null,error:u?.error??null}})}function hg(e,t){return e.status==="cancelled"?"stopped":e.status==="completed"?"complete":e.status!=="running"?e.status:e.stage==="assembly"||e.steps.some(n=>n.id==="assemble"&&n.status==="running")?"assembling":t}function et(e){const t=e.stage==="assembly"?"videos":e.stage,n=gg(e,t),r=hg(e,t),o=n.find(i=>i.state==="failed")??n.find(i=>i.state==="submitting"||i.state==="generating")??(["frame","storyboards","videos"].includes(r)?n.find(i=>i.state!=="done")??null:null);return{phase:r,stage:t,reviewStage:r==="review"?t:null,shots:n,done:n.filter(i=>i.state==="done").length,total:n.length,active:o,failedStep:e.steps.find(i=>i.status==="failed"||i.status==="interrupted")?.id??null}}function bg(e){return{frame:"Full frame",storyboards:"Storyboards",videos:"Videos"}[e]}function rn(e,t){const n=e.estimate[t];return n.usd===null?"":` · est. $${n.usd.toFixed(2)}`}function yg(e,t){return e.failedStep===null?`Planning ${t}`:e.failedStep==="assemble"?`Assembly ${t}`:e.stage==="frame"?`Full frame ${t}`:`${e.stage==="storyboards"?"Storyboard":"Shot"} ${(e.active?.index??0)+1} ${t}`}function Oe(e,t,n,r,o){return{text:e,short:t,announce:`Goal: ${e}`,action:n,tone:r,busy:o}}function _g(e,t){if(e.planVersion!==3)return null;const n=et(e),r=e.finish;if(r?.status==="running")return Oe("Finishing the cold open and watermark","Finishing",null,"live",!0);if(r?.status==="failed")return Oe("Finishing failed","Finishing failed","Finish","attention",!1);if(n.phase==="review"){if(r){const o=e.coldOpen?` · analysis $${e.coldOpen.analysisUsd.toFixed(2)}`:"";return Oe(`Review finish${o}`,"Review","Review","review",!1)}return e.stage==="videos"?Oe(`Review video${rn(e,"videos")}`,"Review","Review","review",!1):Oe(`Review scene${rn(e,"frame")}`,"Review","Review","review",!1)}if(n.phase==="frame"||n.phase==="videos"){const o=n.active?.state==="generating"?`Generating${t===null?"":` ${_t(t)}`}`:"Submitting",i=bn(e),s=n.phase==="frame"?"Scene":"Video";return Oe(`${i?`Revising ${i}`:s} · ${o}`,s,null,"live",!0)}if(n.phase==="failed"||n.phase==="interrupted"){const o=n.phase==="failed"?"failed":"interrupted",i=e.chainId?`${n.stage==="videos"?"Video":"Scene"} ${o}`:`Planning ${o}`;return Oe(i,n.phase==="failed"?"Failed":"Interrupted","Retry","attention",!1)}return null}function vt(e,t=null){const n=_g(e,t);if(n)return n;const r=et(e),o=yt(e.plan)&&e.plan.storyboardLayout==="six-panel";let i="Stopped",s="Stopped",a=null,c="quiet",l=!1;if(r.phase==="planning")i=s="Planning",c="live",l=!0;else if(r.phase==="review")i=r.stage==="frame"?`Review ${o?"scene":"plan"}${rn(e,"frame")}`:r.stage==="storyboards"?o?"Review scene":"Review full frame":o?"Review storyboard":"Review storyboards",s=a="Review",c="review";else if(["frame","storyboards","videos"].includes(r.phase)){const u=r.active?r.active.index+1:r.done+1,m=r.active?.state==="generating"?`Generating${t===null?"":` ${_t(t)}`}`:"Submitting",f=bn(e);i=`${f?`Revising ${f}`:r.stage==="frame"?o?"Scene":"Full frame":`${r.stage==="storyboards"?"Storyboard":"Shot"} ${u} of ${r.total}`} · ${m}`,s=r.stage==="frame"?"Frame":`${r.stage==="storyboards"?"SB ":""}${u}/${r.total}`,c="live"}else r.phase==="assembling"?(i=`Assembling ${r.total} clips`,s="Combining",c="live",l=!0):r.phase==="complete"?(i=`Complete · ${_t(Os(e.plan))}`,s="Done",a="Preview",c="done"):(r.phase==="failed"||r.phase==="interrupted")&&(i=yg(r,r.phase==="failed"?"failed":"interrupted"),s=r.phase==="failed"?"Failed":"Interrupted",a=e.planVersion===1?null:"Retry",c="attention");return{text:i,short:s,announce:`Goal: ${i}`,action:a,tone:c,busy:l}}function $o(e){const t=et(e);return`${e.goalId}:${e.chainId??""}:${t.phase}:${t.stage}:${t.done}:${t.active?.index??-1}`}function vg(e,t){const n=$o(t);if(e.goalId!==t.goalId||$o(e)===n||t.status==="cancelled")return null;const r=et(e),o=et(t);let i=vt(e).text;const s=bn(t),a=ug(e,r,o,t);return o.phase==="failed"||o.phase==="interrupted"?i=vt(t).text:o.phase==="complete"?i=t.assembly?"Sequence assembled":"Clip ready":r.phase==="planning"&&o.phase==="review"?i="Plan ready":a?i=a:o.phase==="review"&&s?i=`${s[0].toUpperCase()}${s.slice(1)} revised`:o.phase==="review"&&t.planVersion===3&&t.finish?i="Video ready":o.phase==="review"&&t.planVersion===3&&o.stage==="videos"?i="Scene ready":o.phase==="review"&&o.stage==="storyboards"?i="Full frame ready":o.phase==="review"&&o.stage==="videos"?i="Storyboards ready":r.phase==="review"?i=s?`Revising ${s}`:r.stage!=="frame"&&o.stage==="frame"?"Frame regeneration started":r.stage==="videos"&&o.stage==="storyboards"?"Storyboard regeneration started":o.stage==="frame"?"Plan approved":o.stage==="storyboards"?"Frame approved":"Storyboards approved":r.phase==="failed"||r.phase==="interrupted"?i=`Retrying ${bg(o.stage).toLowerCase()}`:o.done>r.done&&(i=`${o.stage==="storyboards"?"Storyboard":"Shot"} ${o.done} ready`),{id:n,from:i,tone:o.phase==="failed"||o.phase==="interrupted"?"attention":"live"}}function j0(e){return e.find(t=>t.status!=="cancelled"&&!t.dismissedAt&&t.cellId)??null}function G0(e){const t=new Map;for(const n of e){n.combined&&t.set(n.combined.cellId,`Combined${n.address?` · ${n.address}`:""}`);const r=Ne(n.plan).length,o=n.planVersion===1?n.steps:Object.values(n.stages).flatMap(i=>i.allSteps);for(const i of o){const s=/^(frame|storyboard|shot)(\d+)?$/.exec(i.id);if(!s)continue;const a=Number(s[2]);let c=s[1]==="frame"?"Frame":s[1]==="storyboard"&&a>r?`End ${a-r}/${r}`:`${s[1]==="storyboard"?"SB ":""}${s[2]}/${r}`;const l=s[1]==="frame"?"frame":s[1]==="storyboard"?"storyboards":"videos",u=n.stages[l]?.attempts?.filter(f=>f.index===(l==="frame"?0:a-1))??[],m=u.findIndex(f=>f.chainId===i.chainId&&f.stepId===i.id);u.length>1&&m>=0&&(c=`${l==="frame"?"Frame":l==="videos"?`Video ${a}`:a>r?`End ${a-r}`:`SB ${a}`} v${m+1}`);for(const f of[i.cellId,i.outputCellId])f&&t.set(f,`${c}${n.address?` · ${n.address}`:""}`)}}return t}const No=5,Po={planning:{label:"Planning",tone:"live"},review:{label:"Review",tone:"review"},frame:{label:"Frame",tone:"live"},storyboards:{label:"Storyboards",tone:"live"},videos:{label:"Videos",tone:"live"},assembling:{label:"Combining",tone:"live"},complete:{label:"Complete",tone:"done"},failed:{label:"Failed",tone:"attention"},interrupted:{label:"Interrupted",tone:"attention"},stopped:{label:"Stopped",tone:"quiet"}};function q0(e){const t=e?.plan;if(!t||typeof t!="object")return null;const n=t;return typeof n.title=="string"&&Array.isArray(n.shots)&&n.shots.every(r=>r&&typeof r=="object"&&typeof r.title=="string"&&typeof r.durationSeconds=="number")?t:null}function kg(e,t){return!e||!t?null:t.phase==="failed"||t.phase==="interrupted"?`${vt(e).text}${e.planVersion===1?" · start a new goal":" · open to retry"}`:t.phase==="planning"?e.brief||null:t.phase==="review"?`${vt(e).text}${t.stage==="frame"?"":rn(e,t.stage)}`:t.phase==="complete"?`${e.assembly?"Added to the timeline":"Clip ready"} · ${_t(Os(e.plan))}`:null}function wg(e,t){if(e.status==="completed")return 100;if(e.planVersion===3){const o=(e.stages.frame?.outputs.length?1:0)+(e.stages.videos?.outputs.length?1:0);return Math.round(o/2*100)}if(e.planVersion===1)return t.total>0?Math.round(t.done/t.total*100):0;const n=1+(yt(e.plan)&&e.plan.frameContinuity?3:2)*Ne(e.plan).length,r=Object.values(e.stages).reduce((o,i)=>o+i.outputs.length,0);return Math.round(r/n*100)}function U0(e,t,n){const r=e?.plan??t,o=e?et(e):null,i=o?.phase??null,s=o&&o.shots.length>0?o.shots:pg(r),a=s.length>No?s.slice(0,No-1):s,c=Ne(r),l=r&&"version"in r&&r.version===3?r:null,u=l?l.video.durationSeconds:c[0]?.durationSeconds??null,m=l||c.length>0&&c.every(d=>d.durationSeconds===u)?u:null,f=e?[...(e.stages.frame?.outputs??[]).map(d=>({...d,label:l?"Scene":"Full frame"})),...(e.stages.storyboards?.outputs??[]).map(d=>({...d,label:d.index>=c.length?`Ending ${d.index+1-c.length}`:`Storyboard ${d.index+1}`}))]:[];return{title:r?.title??(i==="planning"?"Building your shot plan":n??"Video goal"),planning:i==="planning",rows:a.map(d=>({key:`${d.index}`,number:d.number,title:d.title,state:d.state,detail:d.state==="generating"?"":d.state==="submitting"?"Queued":d.seconds>0&&(d.state==="done"||d.state==="planned")?d.state==="done"?_t(d.seconds):`${d.seconds}s`:fg(d.state),startedAt:d.state==="generating"?d.startedAt:null})),hiddenRows:s.length-a.length,note:kg(e,o),noteTone:i?Po[i].tone:"quiet",chip:e?.finish?.status==="running"?{label:"Finishing",tone:"live"}:i?Po[i]:{label:"Goal",tone:"quiet"},progressPercent:e&&o?wg(e,o):0,shotsLabel:r?m===null?`${c.length} clips`:l?`1 × ${m}s`:`${c.length} × ${m}s`:null,aspectRatio:r?.aspectRatio??null,thumbnails:f,styleLabel:yt(r)?nn(r.style?.id??"cinematic").label:e?.requestedStyle?nn(e.requestedStyle.id).label:null}}function Oo(e){const t=e?.startedAt??e?.enqueuedAt;return typeof t=="number"&&Number.isFinite(t)&&t>0?new Date(t).toISOString():void 0}function Sg(e,t,n,r){if(!hc(e)||!t)return r;if(t.status==="ready")return{status:"completed"};const o=n.filter(a=>a.artifactId===t.artifactId),i=o.find(a=>a.state==="queued"||a.state==="running"||a.state==="completing"),s=o.find(a=>a.state==="failed"||a.state==="aborted");return t.status==="error"||!i&&s?{status:"error",error:s?.error?.message??r.error??"Media processing failed"}:{status:t.status,startedAt:Oo(i)??Oo(o[0])??t.createdAt}}function Ig(e,t,n){const r=e.definition.source;if(!r)return null;const o=t.find(s=>s.id===r.cellId),i=n.get(r.snapshotArtifactId??"")??n.get(r.artifactId);return{address:o?ue(o.slot):null,...i?{asset:i}:{}}}function Ag(e,t){return t?e.get(t):void 0}function xg(e,t){const n=h(e.execution),r=n&&h(n[t]),o=e.cells.find(i=>i.id===t);return r?b(r.error)?"error":b(r.status)??b(o?.inputs?.state)??"ready":b(o?.inputs?.state)??(o?.outputArtifactId?"completed":"ready")}function Eg(e,t){const n=h(e.execution),r=n&&h(n[t]);return b(r?.startedAt)??b(r?.updatedAt)??void 0}function Cg(e,t){const n=h(e.execution),r=n&&h(n[t]);return b(r?.error)??void 0}function Lo(e){const t=typeof e=="number"?e:typeof e=="string"&&e.trim()?Number(e):Number.NaN;return Number.isFinite(t)&&t>0?t:null}function Mg(e,t,n){const r=e.cells.find(f=>f.id===t),o=b(r?.inputs?.producerCellId)??e.edges.find(f=>f.target===t&&f.targetInput==="media")?.source??null,i=o?e.cells.find(f=>f.id===o):void 0,s=i?.type==="generate_video"?h(i.inputs?.generationSettings):null,a=is(i?.model??"",i?.inputs?.generationMode),c=a?"adaptive":ss(i?.model??"",i?.inputs??{})??b(r?.inputs?.aspectRatio??r?.inputs?.aspect_ratio)??b(s?.aspect_ratio),l=c&&c!=="adaptive"&&c!=="auto"?c:un(n?.width??null,n?.height??null),u=Lo(n?.duration),m=Lo(r?.inputs?.durationSeconds??r?.inputs?.duration_seconds??s?.duration??s?.duration_seconds);return{aspectRatio:l,durationSeconds:u??(a?null:m)}}function B0(e,t,n){const r=new Map(t.map(o=>[o.artifactId,o]));return Qp(e).map(o=>{const i=e.posts?.find(d=>d.id===o.id),s=i?Ig(i,e.cells,r):null,a=Cc(o.data.inputs),c=Ag(r,o.data.outputArtifactId),l=o.data.kind==="video"?Mg(e,o.id,c):null,u=Eg(e,o.id),m=Cg(e,o.id),f=Sg(o.data.kind,c,n,{status:xg(e,o.id),...u?{startedAt:u}:{},...m?{error:m}:{}});return{...o,data:{...o.data,status:i?.runtime.status??f.status,...i?{post:i}:{},...s?{postSource:s}:{},...f.startedAt?{statusStartedAt:f.startedAt}:{},...f.error?{statusError:f.error}:{},asset:c,...l?.aspectRatio?{videoAspectRatio:l.aspectRatio}:{},...l?.durationSeconds?{videoDurationSeconds:l.durationSeconds}:{},...o.data.kind==="split_video"?{splitFrames:{first:{artifactId:a.first,...a.first&&r.has(a.first)?{asset:r.get(a.first)}:{}},last:{artifactId:a.last,...a.last&&r.has(a.last)?{asset:r.get(a.last)}:{}}}}:{}}}})}function $r(e,t){return Object.is(e,t)?!0:JSON.stringify(e)===JSON.stringify(t)}function H0(e,t){const n=new Map(e.map(i=>[i.id,i])),r=t.map(i=>{const s=n.get(i.id);if(!s)return i;const a={...i,...s.selected!==void 0?{selected:s.selected}:{},...s.measured!==void 0?{measured:s.measured}:{},...s.dragging!==void 0?{dragging:s.dragging}:{},...s.dragging?{position:s.position}:{}};return $r(a,s)?s:a});return r.length===e.length&&r.every((i,s)=>i===e[s])?e:r}function W0(e,t){const n=new Map(e.map(i=>[i.id,i])),r=t.map(i=>{const s=n.get(i.id);if(!s)return i;const a={...i,...s.selected!==void 0?{selected:s.selected}:{}};return $r(a,s)?s:a});return r.length===e.length&&r.every((i,s)=>i===e[s])?e:r}const jt=[],$n=[];function Nn(e){return e?`${e.bookId}:${e.notebookId}`:""}function Tg(e,t){return e.some(n=>n.goalId===t.goalId)?e.map(n=>n.goalId===t.goalId?t:n):[t,...e]}function K0(e,t){const n=ne.c(12);let r;n[0]===Symbol.for("react.memo_cache_sentinel")?(r={key:"",goals:jt,events:$n},n[0]=r):r=n[0];const[o,i]=_.useState(r),s=_.useRef(o),a=Nn(t),c=o.key===a?o.goals:jt,l=o.key===a?o.events:$n;let u;n[1]===Symbol.for("react.memo_cache_sentinel")?(u=(w,k,I)=>{const E=I===void 0?!1:I,C=s.current,x=C.key===w?C.goals:jt,$=k.map(R=>{const D=x.find(z=>z.goalId===R.goalId);return D&&D.updatedAt>R.updatedAt?D:R});if(C.key===w&&$r(C.goals,$))return;const T=$.flatMap(R=>{const D=x.find(q=>q.goalId===R.goalId),z=D?vg(D,R):E&&R.status==="review"?{from:"Plan ready"}:null;return z?[{kind:"status",sequence:Yt(),goalId:R.goalId,text:`Goal woke up · ${z.from} · ${vt(R).text}${R.address?` · ${R.address}`:""}`}]:[]}),N=[...C.key===w?C.events:$n,...T].slice(-256),M={key:w,goals:$,events:N};s.current=M,i(M)},n[1]=u):u=n[1];const m=u;let f;n[2]===Symbol.for("react.memo_cache_sentinel")?(f=(w,k)=>{const I=dg(k),E=Nn(w);m(E,I)},n[2]=f):f=n[2];const d=f;let p;n[3]!==e?(p=async w=>{d(w,await e("video_goal",{book_id:w.bookId,notebook_id:w.notebookId,action:"list"},{background:!0}))},n[3]=e,n[4]=p):p=n[4];const g=p;let y;n[5]!==e?(y=async(w,k,I)=>{const E=Ps(await e("video_goal",{...k,book_id:w.bookId,notebook_id:w.notebookId},I?{chat:I}:{background:!0})),C=Nn(w),x=s.current;return(x.key===C||x.key==="")&&m(C,Tg(x.key===C?x.goals:jt,E),k.action==="create"),E},n[5]=e,n[6]=y):y=n[6];const v=y;let S;return n[7]!==v||n[8]!==l||n[9]!==c||n[10]!==g?(S={goals:c,events:l,accept:d,refresh:g,act:v},n[7]=v,n[8]=l,n[9]=c,n[10]=g,n[11]=S):S=n[11],S}const Rg="Usage: /clip-audio @clip-id gain|mute|fade-in|fade-out <value>",$g=["gain","mute","fade-in","fade-out"];function Ng(e){const[t,n,r,o]=e,i=n?.toLowerCase();if(!t||!i||r===void 0||o!==void 0||!Lg(i))return{ok:!1,message:Rg};const s=r.trim();if(i==="gain"){const c=Number(s);return!Number.isFinite(c)||c<-96||c>24?{ok:!1,message:"Gain must be from -96 to 24 dB"}:{ok:!0,clipRef:t,edit:{field:i,gainDb:c}}}if(i==="mute"){const c=Fg(s);return c===null?{ok:!1,message:"Mute must be on or off"}:{ok:!0,clipRef:t,edit:{field:i,muted:c}}}const a=Number(s);return!Number.isSafeInteger(a)||a<0?{ok:!1,message:"Fade length must be a whole number of frames"}:{ok:!0,clipRef:t,edit:{field:i,frames:a}}}function Pg(e,t){if(!e)return{ok:!1,message:"Load the primary sequence first."};const n=ke(t),r=e.clips.filter(s=>s.clipId.toLowerCase().startsWith(n)),o=r.length===1?r[0]:void 0;return o?e.tracks.find(s=>s.trackId===o.trackId)?.kind!=="audio"?{ok:!1,message:"/clip-audio requires a clip on an audio track"}:{ok:!0,clipId:o.clipId,audio:{gainDb:o.audio?.gainDb??0,muted:o.audio?.muted??!1,fadeInFrames:o.audio?.fadeInFrames??0,fadeOutFrames:o.audio?.fadeOutFrames??0}}:{ok:!1,message:"Choose one audio clip from the current sequence"}}function Og(e,t,n){return{kind:"volume",clip_id:e,gain_db:n.field==="gain"?n.gainDb:t.gainDb,...n.field==="mute"?{muted:n.muted}:{},...n.field==="fade-in"?{fade_in_frames:n.frames}:{},...n.field==="fade-out"?{fade_out_frames:n.frames}:{}}}function Lg(e){return $g.includes(e)}function Fg(e){const t=e.toLowerCase();return t==="on"||t==="true"||t==="yes"?!0:t==="off"||t==="false"||t==="no"?!1:null}const Dg=new Set(["/caption","/move","/split-clip","/clip-delete","/gap","/fit","/reframe","/clip-reverse","/clip-audio","/duck","/insert","/overwrite","/clip-trim","/volume"]);function z0(e,t,n){if(e==="/delete"||e==="/trim"||e==="/reverse"){if(!he(n.sequence,t[0]))return{handled:!1}}else if(!Dg.has(e))return{handled:!1};const r=s=>({handled:!0,ok:!1,message:s}),o=s=>({handled:!0,ok:!0,request:s}),i=n.sequence;if(e==="/caption"){const[s,a,c,...l]=t,u=Number(s),m=Number(a),f=c?.toLowerCase(),d=f==="clean"||f==="bold"||f==="high-contrast"?f:null,p=l.join(" ").trim();return!Number.isSafeInteger(u)||u<0||!Number.isSafeInteger(m)||m<1||!d||!p?r("Usage: /caption <start-frame> <duration-frames> clean|bold|high-contrast <text>"):o({kind:"caption",timeline_start_frame:u,duration_frames:m,text:p,style_id:d})}if(e==="/move"){const[s,a,c]=t,l=he(i,s),u=Fo(i,a),m=Number(c);return!l||!u||!Number.isSafeInteger(m)||m<0?r("Usage: /move @clip-id @track-id <start-frame>"):o({kind:"move",clip_id:l.clipId,track_id:u.trackId,timeline_start_frame:m})}if(e==="/split-clip"){const[s,a]=t,c=he(i,s),l=Number(a);return!c||!Number.isSafeInteger(l)||l<0?r("Usage: /split-clip @clip-id <sequence-frame>"):o({kind:"split",clip_id:c.clipId,split_frame:l})}if(e==="/clip-delete"||e==="/delete"){const s=he(i,t[0]),a=t.slice(1).filter(c=>c!=="--ripple");return!s||a.length>0?r("Usage: /clip-delete @clip-id [--ripple]"):o({kind:"delete",clip_id:s.clipId,ripple:t.includes("--ripple")})}if(e==="/gap"){const s=Number(t[0]),a=Number(t[1]),c=Fo(i,t[2]);return!Number.isSafeInteger(s)||s<0||!Number.isSafeInteger(a)||a<1||t[2]!==void 0&&!c?r("Usage: /gap <start-frame> <duration-frames> [@track-id]"):o({kind:"gap",timeline_start_frame:s,duration_frames:a,...c?{track_ids:[c.trackId]}:{}})}if(e==="/fit"){const s=he(i,t[0]),a=t[1]?.toLowerCase();return!s||a!=="fit"&&a!=="fill"&&a!=="crop"?r("Usage: /fit @clip-id fit|fill|crop"):Gt(i,s)?.kind!=="video"?r("/fit requires a visual clip"):o({kind:"transform",clip_id:s.clipId,fit:a})}if(e==="/reframe"){const s=he(i,t[0]);return s?Gt(i,s)?.kind!=="video"?r("Automatic reframe requires a visual clip"):o({kind:"reframe",clip_id:s.clipId}):r("Usage: /reframe @visual-clip-id")}if(e==="/clip-reverse"||e==="/reverse"){const s=he(i,t[0]);return s?s.source.kind!=="timed"||!s.speed||s.reverse===void 0||!s.audioPolicy?r("/clip-reverse requires a timed clip"):o({kind:"speed",clip_id:s.clipId,numerator:s.speed.numerator,denominator:s.speed.denominator,reverse:!s.reverse,audio_policy:s.audioPolicy}):r("Usage: /clip-reverse @timed-clip-id")}if(e==="/clip-audio"){const s=Ng(t);if(!s.ok)return r(s.message);const a=Pg(i,s.clipRef);return a.ok?o(Og(a.clipId,a.audio,s.edit)):r(a.message)}if(e==="/duck"){const s=he(i,t[0]),a=t[1]===void 0?-12:Number(t[1]);return!s||!Number.isFinite(a)||a<-36||a>-1?r("Usage: /duck @narration-clip-id [reduction-db from -36 to -1]"):Gt(i,s)?.kind!=="audio"?r("Ducking requires a narration clip on an audio track"):o({kind:"duck",narration_clip_id:s.clipId,reduction_db:a})}if(e==="/insert"||e==="/overwrite"||e==="/clip-trim"||e==="/trim"||e==="/volume"){const s=t.map(m=>m.startsWith("@")?m.slice(1):m);if(e==="/insert"||e==="/overwrite"){const[m,f,d]=s,g=n.mentionAssets.find(S=>S.cellAddress.toLowerCase()===m?.toLowerCase())??n.assets.find(S=>S.id===m||S.artifactId===m),y=Number(f),v=d===void 0?void 0:Number(d);return!g||!Number.isSafeInteger(y)||y<0||v!==void 0&&(!Number.isSafeInteger(v)||v<1)?r(`Usage: ${e} @asset <start-frame> [duration-frames]`):o({kind:"insert",mode:e==="/overwrite"?"overwrite":"insert",artifact_id:g.artifactId,timeline_start_frame:y,...v===void 0?{}:{duration_frames:v}})}if(e==="/clip-trim"||e==="/trim"){const[m,f,d]=s,p=he(i,m),g=Number(f),y=Number(d);return!p||!Number.isSafeInteger(g)||g<0||!Number.isSafeInteger(y)||y<1?r("Usage: /clip-trim @clip-id <start-frame> <duration-frames>"):o({kind:"trim",clip_id:p.clipId,timeline_start_frame:g,duration_frames:y})}const[a,c]=s,l=he(i,a),u=Number(c);return!l||!Number.isFinite(u)||u<-96||u>24?r("Usage: /volume @clip-id <gain-db from -96 to 24>"):Gt(i,l)?.kind!=="audio"?r("Volume changes require a clip on an audio track"):o({kind:"volume",clip_id:l.clipId,gain_db:u})}return{handled:!1}}function he(e,t){if(!e||!t)return;const n=ke(t),r=e.clips.filter(o=>o.clipId.toLowerCase().startsWith(n));return r.length===1?r[0]:void 0}function Fo(e,t){if(!e||!t)return;const n=ke(t),r=e.tracks.filter(o=>o.trackId.toLowerCase().startsWith(n)||o.name.toLowerCase()===n);return r.length===1?r[0]:void 0}function Gt(e,t){return e?.tracks.find(n=>n.trackId===t.trackId)}const Vg="Usage: /export-sequence --aspect 16:9|9:16|1:1 --captions burned|sidecar|omit";function X0(e,t){const n=e.findIndex(u=>u.toLowerCase()==="--aspect"),r=e.findIndex(u=>u.toLowerCase()==="--captions"),o=(n>=0?e[n+1]:"16:9")?.trim().toLowerCase(),i=(r>=0?e[r+1]:"burned")?.trim().toLowerCase(),s=o==="9:16"?"portrait":o==="1:1"?"square":o==="16:9"?"landscape":null,a=i==="burned"||i==="burn-in"?"burn-in":i==="sidecar"||i==="omit"?i:null,c=new Set;n>=0&&(c.add(n),c.add(n+1)),r>=0&&(c.add(r),c.add(r+1));const l=e.filter((u,m)=>!c.has(m));return!s||!a||l.some(u=>u!=="@sequence-main"&&u!==`@${t}`)?{ok:!1,message:Vg}:{ok:!0,orientation:s,captions:a}}const jg="Usage: /track-add video|audio|caption [name]";function Y0(e){const[t,...n]=e,r=t?.toLowerCase();return r!=="video"&&r!=="audio"&&r!=="caption"?{ok:!1,message:jg}:{ok:!0,kind:r,name:n.join(" ")}}function J0(e,t){if(!t)return{ok:!1,message:"Open a project with a sequence first."};const n=Gg(t),r=e?.trim()??"";if(!r)return{ok:!0,initialFrame:n[0]?.timelineStartFrame??0};const o=qg(r);if(o===null)return{ok:!1,message:"Usage: /play [@s01]"};const i=n[o];return i?{ok:!0,initialFrame:i.timelineStartFrame}:{ok:!1,message:"Choose an existing sequence slot."}}function Gg(e){const t=e.tracks.filter(n=>n.kind==="video").sort((n,r)=>n.ordinal-r.ordinal)[0];return t?e.clips.filter(n=>n.trackId===t.trackId).sort((n,r)=>n.timelineStartFrame-r.timelineStartFrame||n.clipId.localeCompare(r.clipId)):[]}function qg(e){const t=/^@?(?:s)?(\d+)$/iu.exec(e.trim());if(!t)return null;const n=Number.parseInt(t[1]??"",10)-1;return n>=0?n:null}const Do="Choose a timeline audio clip or the audio asset on the timeline";function Z0(e,t,n,r){if(!t)return{ok:!1,message:"Load the primary sequence first."};const o=ke(e);if(!o)return{ok:!1,message:Do};const i=new Set(t.tracks.filter(m=>m.kind==="audio").map(m=>m.trackId)),s=t.clips.filter(m=>i.has(m.trackId));if(!ei(o)){const m=s.filter(f=>f.clipId.toLowerCase().startsWith(o));if(m.length===1)return{ok:!0,clipId:m[0].clipId};if(m.length>1)return{ok:!1,message:"Choose one timeline audio clip"}}const a=r.find(m=>m.cellAddress.toLowerCase()===o),c=n.find(m=>m.id.toLowerCase()===o||m.artifactId.toLowerCase()===o),l=a?.artifactId??c?.artifactId;if(!l)return{ok:!1,message:Do};const u=s.filter(m=>m.source.artifactId===l);return u.length===1?{ok:!0,clipId:u[0].clipId}:u.length===0?{ok:!1,message:"That audio asset is not on the timeline"}:{ok:!1,message:"Choose one timeline audio clip"}}const Ug=["stack","punch","karaoke"],Bg=["pop","slam","rise"],Hg=1,Vo=j().regex(/^#[0-9a-fA-F]{6}$/),Wg=te({style:Ye(Ug),motion:Ye(Bg),energySizing:Te(),snapToOnsets:Te(),avoidFaces:Te(),avoidText:Te(),textColor:Vo,hitColor:Vo}).strict(),Kg=te({kind:Ye(["face","text","graphic"]),confidence:V().min(0).max(1),x:V().min(0).max(1),y:V().min(0).max(1),width:V().positive().max(1),height:V().positive().max(1)}).strict(),zg=te({text:j().min(1),transcriptStart:V().nonnegative(),transcriptEnd:V().nonnegative(),onsetStart:V().nonnegative(),energy:V().min(0).max(1)}).strict(),Xg=te({id:j().min(1),frameTime:V().nonnegative(),regions:ae(Kg),lines:ae(ae(zg).min(1)).min(1)}).strict(),Yg=te({version:ii(Hg),fingerprint:j().min(1),analyzedAt:j().min(1),durationSeconds:V().nonnegative(),sourceWidth:V().positive(),sourceHeight:V().positive(),envelopeHz:V().positive(),envelope:ae(V().min(0).max(1)),onsets:ae(V().nonnegative()),regionsAnalyzed:Te(),phrases:ae(Xg)}).strict(),Jg=.8,Zg=.5,on=.92,tr=.06,jo=.06,Qg=.5,eh=.18,th=.05,qt=.02,nh=.3;function Nr(e,t){const n=t?e.onsetStart-e.transcriptStart:0,r=e.transcriptStart+n,o=Math.max(r+th,e.transcriptEnd+n);return{text:e.text,start:r,end:o,energy:e.energy}}function rh(e){const{sourceWidth:t,sourceHeight:n,targetWidth:r,targetHeight:o}=e,i=Math.min(r/t,o/n),s=t*i,a=n*i;return{x:(r-s)/2,y:(o-a)/2,width:s,height:a}}function oh(e,t){const n=rh(t);return{x:(n.x+e.x*n.width)/t.targetWidth,y:(n.y+e.y*n.height)/t.targetHeight,width:e.width*n.width/t.targetWidth,height:e.height*n.height/t.targetHeight}}function ih(e){return e.targetHeight>e.targetWidth?[{side:"center",x0:.07,x1:.93}]:[{side:"left",x0:.06,x1:.47},{side:"right",x0:.53,x1:.94}]}function sh(e){return{y0:.08,y1:e.targetHeight>e.targetWidth?.86:.92}}function ah(e,t){return t.filter(n=>n.x-qt<e.x1&&n.x+n.width+qt>e.x0).map(n=>({y0:n.y-qt,y1:n.y+n.height+qt})).sort((n,r)=>n.y0-r.y0)}function ch(e,t){const n=[];let r=e.y0;for(const o of t)if(o.y0>r&&n.push({y0:r,y1:Math.min(o.y0,e.y1)}),r=Math.max(r,o.y1),r>=e.y1)break;return r<e.y1&&n.push({y0:r,y1:e.y1}),n.filter(o=>o.y1-o.y0>0)}function lh(e){return e.reduce((t,n)=>t===null||n.y1-n.y0>t.y1-t.y0?n:t,null)}function uh(e){return e.reduce((t,n)=>t+(n.y1-n.y0),0)}function dh(e,t,n){const r=ah(e,n);return{candidate:e,span:lh(ch(t,r)),blocked:uh(r)}}function Pn(e){return e.span?e.span.y1-e.span.y0:0}function Go(e,t,n){return{side:e.side,x:e.x0*n.targetWidth,y:t.y0*n.targetHeight,width:(e.x1-e.x0)*n.targetWidth,height:(t.y1-t.y0)*n.targetHeight}}function fh(e,t){const n=sh(t),r=ih(t).map(s=>dh(s,n,e)),o=r.reduce((s,a)=>Pn(a)>Pn(s)+.02?a:s);if(o.span&&Pn(o)>=nh)return Go(o.candidate,o.span,t);const i=r.reduce((s,a)=>a.blocked<s.blocked?a:s);return Go(i.candidate,n,t)}function mh(e,t){return e.filter(n=>n.kind==="face"?t.avoidFaces:t.avoidText)}function ph(e){return e.map(t=>t.text).join(" ")}function gh(e){return Math.max(...e.map(t=>t.energy))}function Ls(e,t,n){return Math.min(n,t/(Math.max(e.length,2)*Zg))}function Fs(e){return e.reduce((n,r)=>n+r*(on+tr),0)-(e.length>0?e[e.length-1]*tr:0)}function hh(e){return e*tr}function bh(e,t,n){const r=t.height*.36,o=e.map(a=>Ls(ph(a),t.width,r)),i=n?o.map((a,c)=>a*(.7+.3*gh(e[c]))):o.map(()=>Math.min(...o)),s=Math.min(1,t.height/Fs(i));return e.map((a,c)=>({words:a,fontSize:Math.round(i[c]*s*10)/10}))}function yh(e,t,n){const r=n?.7+.3*e.energy:.85;return Math.min(Ls(e.text,t.width,t.height*.6),t.height*.6)*r}function _h(e,t){const n=e.flat(),r=n[0].start-jo,o=n[n.length-1].end+Qg,i=t===null?o:Math.min(o,t-jo);return{start:r,end:Math.max(i,r+.1)}}function vh(e,t){return Nr(e.lines[0][0],t).start}function Q0(e,t,n){return e.map((r,o)=>{const i=r.lines.map(f=>f.map(d=>Nr(d,t.snapToOnsets))),s=e[o+1],a=_h(i,s?vh(s,t.snapToOnsets):null),c=mh(r.regions,t).map(f=>oh(f,n)),l=fh(c,n),u=bh(i,l,t.energySizing),m=Fs(u.map(f=>f.fontSize));return{id:r.id,start:a.start,end:a.end,column:l,lines:u,blockTop:l.y+(l.height-m)/2}})}function kh(e,t){return e.find(n=>t>=n.start&&t<n.end)??null}function wh(e,t){return Pr((e.end-t)/eh)}function Sh(e,t){return e.lines.flatMap(n=>n.words).filter(n=>n.start<=t).pop()??null}const Ih={pop:{seconds:.14,apply:(e,t,n,r)=>({opacity:e,scale:1+(1-e)*.3*(.6+n),translateY:(1-e)*r*.12})},slam:{seconds:.09,apply:(e,t)=>({opacity:Pr(t*3),scale:1+(1-e)*.9,translateY:0})},rise:{seconds:.22,apply:(e,t,n,r)=>({opacity:e,scale:1,translateY:(1-e)*r*.35})}};function Pr(e){return e<0?0:e>1?1:e}function Ah(e,t,n){const r=t>=e.start;return r&&t<e.end||r&&e.energy>=Jg?n.hitColor:n.textColor}function xh(e,t,n,r,o){const i=t-e.start,s=Ah(e,t,n);if(n.style==="karaoke")return{opacity:(i<0?.3:1)*o,scale:1,translateY:0,color:s};if(i<0)return{opacity:0,scale:1,translateY:0,color:s};const a=Ih[n.motion],c=Pr(i/a.seconds),l=1-Math.pow(1-c,3),u=n.energySizing?e.energy:.5,m=a.apply(l,c,u,r);return{...m,opacity:m.opacity*o,color:s}}const qo=[{id:"landscape",label:"16:9",width:1920,height:1080},{id:"portrait",label:"9:16",width:1080,height:1920},{id:"square",label:"1:1",width:1080,height:1080}],Eh=.03;function eI(e){const t=e&&typeof e=="object"?e:{};return{analysis:Yg.parse(t.analysis),settings:Wg.parse(t.settings),cached:t.cached===!0}}function tI(e,t){return!e||!t?"landscape":t>e?"portrait":e===t?"square":"landscape"}function nI(e,t){const n=qo.find(r=>r.id===t)??qo[0];return{sourceWidth:e.sourceWidth,sourceHeight:e.sourceHeight,targetWidth:n.width,targetHeight:n.height}}function rI(e,t){return e.phrases.flatMap((n,r)=>n.lines.flat().map((o,i)=>{const s=Nr(o,t.snapToOnsets),a=o.transcriptStart-o.onsetStart;return{key:`${n.id}-${i}`,phraseIndex:r,text:o.text,start:s.start,end:s.end,onset:o.onsetStart,driftMs:Math.round(a*1e3),drifted:Math.abs(a)>=Eh}}))}function oI(e){const t=e.filter(n=>n.drifted).map(n=>Math.abs(n.driftMs));return{count:t.length,minMs:t.length>0?Math.min(...t):0,maxMs:t.length>0?Math.max(...t):0}}function iI(e,t){return e.findIndex(n=>t>=n.start&&t<n.end)}function sI(e){return e.column.side==="center"?"stack centered":`stack ${e.column.side}`}function aI(e){const t=Math.max(0,e),n=Math.floor(t/60),r=t-n*60,o=Math.floor(r),i=Math.floor((r-o)*100);return`${String(n).padStart(2,"0")}:${String(o).padStart(2,"0")}.${String(i).padStart(2,"0")}`}function cI(e){if(e.length===0)return"";const t=1e3/e.length;return`M0,100 L${e.map((r,o)=>`${(o*t).toFixed(1)},${(100-r*100).toFixed(1)}`).join(" L")} L1000,100 Z`}function lI(e){const t=e instanceof Error?e.message:String(e);try{const n=JSON.parse(t);return typeof n.message=="string"?n.message:t}catch{return t}}function uI(e){return{style:e.style,motion:e.motion,energy_sizing:e.energySizing,snap_to_onsets:e.snapToOnsets,avoid_faces:e.avoidFaces,avoid_text:e.avoidText,text_color:e.textColor,hit_color:e.hitColor}}function dI(e,t){const n=e?t.find(r=>r.artifactId===e||r.id===e):void 0;return!e||!n?{ok:!1,message:"Usage: /alive @video"}:n.type!=="video"?{ok:!1,message:"/alive requires a video asset"}:n.status!=="ready"||!n.mediaUrl?{ok:!1,message:"Process the video before opening alive captions"}:{ok:!0,asset:n}}const nr=["image","gen","video","audio","work"],Ch={audio:"Audio",gen:"Gen",image:"Images",video:"Videos",work:"Work"},Mh=["image","gen","video"];function Ds(e){const t=fi(e);return t==="data"||t==="goal"?"work":t}function rr(e){return Ch[e]}function Th(e){return e.map(rr).join(" · ")}function Rh(e,t){const n=new Set;for(const r of e)r.slot.row===t&&n.add(Ds(r.type));return nr.filter(r=>n.has(r))}function $h(e,t,n,r){if(t.length===0){const o=r?Mh[e]:void 0;return o?{caption:rr(o),continuation:!1,families:[o],family:o,kind:"starter",row:e}:{caption:"",continuation:!1,families:[],family:null,kind:"empty",row:e}}if(t.length===1){const o=t[0],i=n.length===1&&n[0]===o;return{caption:rr(o),continuation:i,families:t,family:o,kind:"homogeneous",row:e}}return{caption:Th(t),continuation:!1,families:t,family:null,kind:"mixed",row:e}}function fI(e,t){const n=e.length===0,r=[];let o=[];for(let i=0;i<t;i+=1){const s=Rh(e,i),a=$h(i,s,o,n);r.push(a),o=s}return r}function mI(e){const t=[];for(const n of e){if(n.kind==="empty")continue;const r=t.at(-1);if(r&&n.kind==="homogeneous"&&r.kind==="homogeneous"&&r.family===n.family&&r.startRow+r.rowCount===n.row){t[t.length-1]={...r,rowCount:r.rowCount+1};continue}t.push({caption:n.caption,families:n.families,family:n.family,kind:n.kind,rowCount:1,startRow:n.row})}return t}function On(e,t){return e.slot.row-t.slot.row||e.slot.column-t.slot.column||e.id.localeCompare(t.id)}function Nh(e,t={}){const n=e.cells.filter(g=>g.type==="goal").sort(On);if(n.length===0)return e;const r=new Set(n.flatMap(g=>Array.isArray(g.inputs?.characters)?g.inputs.characters.flatMap(y=>y&&typeof y=="object"&&"cellId"in y&&typeof y.cellId=="string"?[y.cellId]:[]):[])),o=new Set(e.edges.filter(g=>e.cells.some(y=>y.id===g.source&&y.type==="generate_image")).map(g=>g.target)),i=[...e.cells].sort((g,y)=>g.id.localeCompare(y.id)),s=e.cells.filter(g=>g.type==="image"&&(r.has(g.id)||!o.has(g.id)&&!g.inputs?.producerCellId&&!g.inputs?.mediaRole)).sort(On),a=new Set(s.map(g=>g.id)),c=i.filter(g=>g.type.startsWith("generate_")||g.type==="prompt"),l=i.filter(g=>g.type==="image"&&!a.has(g.id)),u=i.filter(g=>g.type==="video"),m=e.cells.filter(g=>g.type==="timeline").sort(On),f=new Map;let d=0;const p=(g,y=0,v=1)=>{g.forEach((S,w)=>f.set(S.id,{row:d+Math.floor(w/X),column:w%X})),d+=Math.max(v,Math.ceil((g.length+y)/X))};p(s,0,0),p([...n,...c],t.generators),p(l,t.images),p(u,t.videos);for(const g of m)f.set(g.id,{row:d,column:0}),d+=1;if(d+=t.timelines??0,p(i.filter(g=>!f.has(g.id)),0,0),d>de)throw new Error(`The goal layout needs ${d} rows, but the grid supports ${de}. Remove unused cells before continuing.`);return{...e,cells:e.cells.map(g=>({...g,slot:f.get(g.id)}))}}function Ln(e,t){return{ok:!1,code:e,message:t}}function Ph(e){return[...e].sort((t,n)=>t.slot.row-n.slot.row||t.slot.column-n.slot.column||t.id.localeCompare(n.id))}function Oh(e){return e<=0?0:Math.ceil(e/X)}function pI(e){if(new Map(e.cells.map(c=>[c.id,c])).size!==e.cells.length)return Ln("invalid-edge","Cannot auto-arrange a notebook with duplicate cell IDs.");if(e.cells.some(c=>c.type==="goal"))try{const c=Nh(e);return{ok:!0,rowCount:Math.max(...c.cells.map(l=>l.slot.row+1)),slots:c.cells.map(l=>({id:l.id,...l.slot}))}}catch(c){return Ln("capacity",c instanceof Error?c.message:String(c))}const n={audio:[],gen:[],image:[],video:[],work:[]},r=e.cells.filter(c=>c.type==="timeline"),o=new Set(r.map(c=>c.slot.row));for(const c of Ph(e.cells))c.type!=="timeline"&&n[Ds(c.type)].push(c.id);const i=nr.reduce((c,l)=>c+Oh(n[l].length),0);if(i+o.size>de)return Ln("capacity",`Cannot auto-arrange because the layout needs ${i} rows, but the grid supports ${de}.`);const s=r.map(c=>({id:c.id,...c.slot}));let a=0;for(const c of nr){const l=n[c];if(l.length!==0)for(let u=0;u<l.length;u+=X){for(;o.has(a);)a+=1;for(const[m,f]of l.slice(u,u+X).entries())s.push({id:f,row:a,column:m});a+=1}}return{ok:!0,rowCount:Math.max(a,...r.map(c=>c.slot.row+1)),slots:s}}function gI(e,t=n=>window.requestAnimationFrame(n)){t(()=>{t(()=>{e()?.scrollTo({left:0,top:0,behavior:"smooth"})})})}function Fn(e){return`${e.row}:${e.column}`}function Uo(e){return[...e].sort((t,n)=>t.slot.row-n.slot.row||t.slot.column-n.slot.column)}function Lh(e,t,n){return t==="column"?{row:(e.row+n)%de,column:e.column}:{row:e.row,column:(e.column+n)%X}}function hI(e,t,n,r){const o=Uo(e.cells.filter(g=>t.has(g.id)));if(o.length===0)return{ok:!1,code:"no-videos",message:"No video cells in this notebook to arrange."};const i=r==="column"?de:X;if(o.length>i)return{ok:!1,code:"capacity",message:`Cannot arrange ${o.length} videos in one ${r}: the grid fits ${i}.`};const s=o.map((g,y)=>Lh(n,r,y)),a=new Set(s.map(Fn));if(e.cells.some(g=>g.type==="timeline"&&Ee(g).some(y=>a.has(Fn(y)))))return{ok:!1,code:"capacity",message:"Choose an arrangement that leaves the timeline row free."};const c=Uo(e.cells.filter(g=>!t.has(g.id)&&a.has(Fn(g.slot)))),l=new Set([...o.map(g=>g.id),...c.map(g=>g.id)]),u=[...e.cells.filter(g=>!l.has(g.id)).flatMap(Ee),...s],m=oi(u,c.length),f=[...o.map((g,y)=>({id:g.id,...s[y]})),...c.map((g,y)=>({id:g.id,...m[y]}))],d=new Map(e.cells.map(g=>[g.id,g.slot])),p=f.filter(g=>{const y=d.get(g.id);return y?.row!==g.row||y?.column!==g.column}).length;return{ok:!0,slots:f,movedCount:p,displacedCount:c.length}}function Bo(e){return[...e].sort((t,n)=>t.slot.row-n.slot.row||t.slot.column-n.slot.column)}function Fh(e,t){const n=(e.row*X+e.column+t)%zt;return{row:Math.floor(n/X),column:n%X}}function Dh(e){return zt-new Set(e.map(ve)).size}function bI(e,t,n){const r=Bo(e.cells.filter(d=>t.has(d.id)));if(r.length===0)return{ok:!1,code:"no-images",message:"No image cells in this notebook to group."};if(r.length>zt)return{ok:!1,code:"capacity",message:`Cannot group ${r.length} images: the grid fits ${zt}.`};const o=r.map((d,p)=>Fh(n,p)),i=new Set(o.map(ve));if(e.cells.some(d=>d.type==="timeline"&&Ee(d).some(p=>i.has(ve(p)))))return{ok:!1,code:"capacity",message:"Choose an arrangement that leaves the timeline row free."};const s=Bo(e.cells.filter(d=>!t.has(d.id)&&i.has(ve(d.slot)))),a=new Set([...r.map(d=>d.id),...s.map(d=>d.id)]),c=[...e.cells.filter(d=>!a.has(d.id)).flatMap(Ee),...o];if(s.length>Dh(c))return{ok:!1,code:"grid-full",message:ra};const l=oi(c,s.length),u=[...r.map((d,p)=>({id:d.id,...o[p]})),...s.map((d,p)=>({id:d.id,...l[p]}))],m=new Map(e.cells.map(d=>[d.id,d.slot])),f=u.filter(d=>{const p=m.get(d.id);return p?.row!==d.row||p?.column!==d.column}).length;return{ok:!0,slots:u,movedCount:f,displacedCount:s.length}}function Vh(e,t){return`Generation was interrupted (${e?.trim()||`Notebook run ${t}`}). Clear the slot to reset the cell, then generate again.`}function yI(e){const t=e.jobs.filter(n=>{if(n.type!=="await_notebook_output")return!1;const r=n.payload;return r?r.cellId===e.cellId&&r.runId===e.runId:!1});return t.length>0?t.reduce((r,o)=>{const i=r.operationId??"";return(o.operationId??"")>i?o:r}):e.jobs.find(n=>n.operationId===e.jobOperationId)??null}function _I(e){return e.observation.state==="error"?{kind:"failed",message:e.observation.error??`@${e.address} failed`}:e.observation.state==="completed"?{kind:"completed"}:e.observation.state==="pending"&&e.sawRun?{kind:"superseded"}:e.job?.state==="failed"||e.job?.state==="aborted"?{kind:"failed",message:Vh(e.job.errorMessage,e.job.state)}:{kind:"continue",sawRun:e.sawRun||e.observation.state==="active"}}function vI(e){return{state:e.state,errorMessage:e.error?.message??null,operationId:e.operationId,type:e.type,startedAt:e.startedAt??null,payload:e.payload??null,...typeof e.id=="number"?{id:e.id}:{}}}function kI(e,t,n){const r=h(e),o=A(r?.artifact_id);if(!o)throw new Error("The download did not return an artifact for the board");const i=A(r?.job_id);return{type:"video",slot:n,inputs:{sourceOperation:"download_video",sourceUrl:t,...i?{jobId:i}:{}},output_artifact_id:o}}const jh=new Set(["download_video","process_image","process_video","process_audio","process_upload","complete_kie_task","generate_media"]);function wI(e,t,n,r){const o=n.find(c=>c.artifactId===e&&c.type==="download_video"&&c.state==="done"),i=h(o?.result),s=i?.retyped===!0?A(i.assetId??i.artifact_id):null;if(s&&s!==e)return{kind:"redirected",artifactId:s};if(t?.status==="ready")return{kind:"completed"};const a=n.find(c=>c.artifactId===e&&(c.state==="failed"||c.state==="aborted")&&jh.has(c.type));if(t?.status==="error"||a){const c=t?.status==="error"?n.find(l=>l.artifactId===e&&l.type==="render_project"&&(l.state==="failed"||l.state==="aborted")):void 0;return{kind:"failed",message:a?.error?.message??c?.error?.message??A(r)??"Media processing failed"}}return{kind:"continue"}}function yn(e,t){return Object.fromEntries(t.flatMap(n=>e[n]===void 0?[]:[[n,e[n]]]))}function kt(e,t,n){const r=A(e[t]);if(!r)throw new Error(n);return r}function Gh(e){return{type:"video",artifactId:kt(e,"output_artifact_id","The extracted clip did not return an artifact for the notebook"),inputs:{sourceOperation:"extract_video_clip",...yn(e,["source_asset_id","start_time","end_time","duration","job_id"])}}}function qh(e){const t=yn(e,["source_asset_id","chunk_a_end","chunk_b_start","overlap_sec","job_id"]);return[{type:"video",artifactId:kt(e,"chunk_a_artifact_id","The first split clip did not return an artifact for the notebook"),inputs:{sourceOperation:"split_video",splitOutput:"first",...t}},{type:"video",artifactId:kt(e,"chunk_b_artifact_id","The remaining split clip did not return an artifact for the notebook"),inputs:{sourceOperation:"split_video",splitOutput:"remaining",...t}}]}function Uh(e){return{type:"audio",artifactId:kt(e,"audio_asset_id","The cover song did not return an audio artifact for the notebook"),inputs:{sourceOperation:"make_cover_song",...yn(e,["source_asset_id","source_kind","duration_seconds","job_id"])}}}function Vs(e){const t=e.additional_asset_ids??e.additional;return Array.isArray(t)?t.flatMap(n=>{const r=A(n);return r?[r]:[]}):[]}function Bh(e,t){const n=A(t.first_asset_id)??A(t.first),r=A(t.second_asset_id)??A(t.second);if(!n||!r)throw new Error(`${e} did not return both source artifacts for the notebook`);const o=Vs(t);return{type:"video",artifactId:kt(t,"asset_id",`${e} did not return an artifact for the notebook`),inputs:{sourceOperation:e,first_asset_id:n,second_asset_id:r,...o.length>0?{additional_asset_ids:o}:{},...yn(t,["overlap","transition_seconds","alignment_mode","job_id"])}}}function Hh(e,t,n){const r=A(e.source_asset_id),o=r?t.find(i=>!Ve(i)&&i.outputArtifactId===r):void 0;return mn(t,o?[o.slot]:[],n)}function Wh(e,t,n,r){const o=new Set([A(e.source_asset_id),A(e.first_asset_id)??A(e.first),A(e.second_asset_id)??A(e.second),...Vs(e)].filter(c=>c!==null)),i=t.filter(c=>c.outputArtifactId&&o.has(c.outputArtifactId)&&!Ve(c)).map(c=>c.slot),s=[...t],a=[];for(let c=0;c<n;c+=1){const l=hr(s,i,r);a.push(l),s.push({type:"video",slot:l})}return a}function SI(e,t,n,r=null){if(e!=="extract_video_clip"&&e!=="split_video"&&e!=="make_cover_song"&&e!=="splice_video"&&e!=="smooth_scene_concat")return[];const o=h(t);if(!o)throw new Error(`${e} returned an invalid result`);const s=(e==="extract_video_clip"?[Gh(o)]:e==="split_video"?qh(o):e==="make_cover_song"?[Uh(o)]:[Bh(e,o)]).filter(c=>!n.some(l=>!Ve(l)&&l.outputArtifactId===c.artifactId));if(s.length===0)return[];const a=e==="make_cover_song"?[Hh(o,n,r)]:Wh(o,n,s.length,r);return s.map((c,l)=>({type:c.type,slot:a[l],inputs:c.inputs,output_artifact_id:c.artifactId}))}function Kh(e,t){const n=new Set(e.edges.filter(r=>r.source===t&&(r.targetInput==="video"||r.targetInput==="segment")).map(r=>r.target));return e.cells.find(r=>n.has(r.id)&&(r.type==="extract_audio"||r.inputs?.mediaRole==="extract-audio-output"))??null}function zh(e,t){const n=h(e.execution),r=n?h(n[t]):null,o=A(r?.status),i=A(r?.runId);return o&&i&&ln(o)?i:null}function Ho(e){const t=h(e),n=A(t?.job_id),r=A(t?.run_id);if(!n||!r)throw new Error("The server did not return an Extract Audio run");return{jobId:n,runId:r}}async function II(e){const t=Er(e.document,e.command.sourceReference),n=t.id,r=Z(t),o=e.expectedRevision?{expected_revision:e.expectedRevision}:{},i=Kh(e.document,t.id);if(i){const l={actionCellId:i.id,actionAddress:Z(i),outputCellId:i.id,reusedAction:!0,sourceCellId:n,sourceAddress:r},u=zh(e.document,i.id);if(u)return{...l,jobId:"",runId:u};const m=Ho(await e.callTool("run_notebook_cell",{book_id:e.bookId,notebook_id:e.document.id,cell_id:i.id,actor:e.actor,...o}));return{...l,...m}}const s=h(await e.callTool("extract_notebook_audio",{book_id:e.bookId,notebook_id:e.document.id,source_cell_id:t.id,label:"Extract audio",...o})),a=A(s?.cell_id),c=A(s?.address);if(!a||!c)throw new Error("The server did not return an Extract Audio run");return{actionCellId:a,actionAddress:c,outputCellId:a,...Ho(s),reusedAction:!1,sourceCellId:n,sourceAddress:r}}function Xh(e){const t=Number(e);return Number.isFinite(t)&&t>=0?Math.round(t*1e3)/1e3:null}async function AI(e){const t=e.command.frameMode==="time"?Xh(e.command.timestampSeconds):null;if(e.command.frameMode==="time"&&t===null)throw new Error("A valid timestamp is required for time-mode frame extraction");const n=Er(e.document,e.command.sourceReference),r=h(await e.callTool("extract_notebook_frame",{book_id:e.bookId,notebook_id:e.document.id,source_cell_id:n.id,frame_mode:e.command.frameMode,...t===null?{}:{timestamp_seconds:t},...e.expectedRevision?{expected_revision:e.expectedRevision}:{}})),o=A(r?.cell_id),i=A(r?.address),s=A(r?.job_id),a=A(r?.run_id);if(!o||!i||!s||!a)throw new Error("The server did not return the frame extraction cell");return{actionCellId:o,actionAddress:i,outputCellId:o,jobId:s,runId:a,reusedAction:!1,sourceCellId:n.id,sourceAddress:Z(n)}}const Wo="2026-07-28",Yh=21*6e4;function Jh(e){return e==="apply_watermark"?Yh:void 0}async function js(e,t){const n=new oa({name:t,version:"0.1.0"},{capabilities:{},supportedProtocolVersions:[Wo],versionNegotiation:{mode:{pin:Wo}}});try{return await n.connect(new ia(new URL(e))),n}catch(r){throw await n.close(),r}}function Zh(e,t,n){const r=Jh(t);return e.callTool({name:t,arguments:n},r===void 0?void 0:{timeout:r})}function Qh(e,t){if(t){const n=e.find(r=>r.bookId===t);if(n)return n}return e.find(n=>typeof n.bookId=="string"&&n.bookId.length>0)??null}function eb(e){const t=h(e);if(!t||t.isError)throw new Error("Bootstrap tool failed");const n=t.content?.find(r=>r.type==="text")?.text;if(!n)return null;try{return JSON.parse(n)}catch{return n}}async function Ie(e,t,n){return eb(await e.callTool({name:t,arguments:n}))}function Ko(e){try{return window.localStorage.getItem(e)??""}catch{return""}}async function tb(e){const[t,n,r]=await Promise.all([Ie(e,"list_books",{sort:"newest"}),Ie(e,"slash_commands",{detail:"full"}),Ie(e,"list_chat_models",{})]),o=Array.isArray(t)?t:[],i=Qh(o.map(h).filter(v=>v!==null),Ko("videobook.active-book")),s=typeof i?.bookId=="string"?i.bookId:"";if(!s)return{bookValue:t,commandValue:n,chatModelValue:r,bookId:"",notebookId:"",notebookValue:[],assetValue:[],sequenceValue:null,jobValue:[],ingestStatusValue:[],actionValue:[]};const[a,c,l,u,m,f]=await Promise.all([Ie(e,"list_notebooks",{book_id:s}),Ie(e,"list_assets",{book_id:s,sort:"newest",limit:200,include_referenced:!0}),Ie(e,"get_primary_sequence",{book_id:s}),Ie(e,"list_jobs",{book_id:s,limit:200}),Ie(e,"list_ingest_status",{book_id:s,limit:200}),Ie(e,"list_notebook_actions",{book_id:s})]),d=Array.isArray(a)?a.map(h).filter(v=>v!==null):[],p=Ko(`videobook.active-notebook:${s}`),g=d.find(v=>v.id===p)??d[0],y=typeof g?.id=="string"?g.id:"";return{bookValue:t,commandValue:n,chatModelValue:r,bookId:s,notebookValue:a,notebookId:y,assetValue:c,sequenceValue:l,jobValue:u,ingestStatusValue:m,actionValue:f}}async function xI(){const e=new URL("/mcp",window.location.origin).toString(),t=await js(e,"videobook-bootstrap");try{return await tb(t)}finally{await t.close()}}const or="gpt-6-astra",nb={defaultModel:"gpt-6-astra",models:[{id:or,label:"Astra",description:"Routes every composer request and configures its tools"}]};function rb(e){const t=h(e),n=Array.isArray(t?.models)?t.models.flatMap(i=>{const s=h(i);return typeof s?.id=="string"&&typeof s.label=="string"&&typeof s.description=="string"&&s.id===or?[{id:s.id,label:s.label,description:s.description}]:[]}):[],r=or,o=n.some(i=>i.id===r)?r:n[0]?.id;return o?{defaultModel:o,models:n}:nb}function EI(e,t){return e.models.some(n=>n.id===t)?t:e.defaultModel}function zo(e){return e instanceof Error?e:new Error(String(e))}function ob({callTool:e,cancelTimer:t,connect:n,onStateChange:r,reconnectDelayMs:o,scheduleTimer:i}){let s=!1,a=null,c=0,l=null;const u=v=>{v.onclose=void 0,v.close().catch(()=>{})},m=()=>{l!==null&&(t(l),l=null)},f=async()=>{if(!s)return;const v=++c;r({state:"connecting",error:null});try{const S=await n();if(!s||v!==c){S!==a&&u(S);return}a=S,S.onclose=()=>{!s||a!==S||(S.onclose=void 0,a=null,r({state:"failed",error:new Error("MCP connection closed")}),d())},r({state:"ready",error:null})}catch(S){if(!s||v!==c)return;r({state:"failed",error:zo(S)}),d()}},d=()=>{!s||l!==null||(l=i(()=>{l=null,f()},o))};return{callTool:async(v,S)=>{const w=a;if(!s||!w)throw new Error("MCP server is not ready");try{return await e(w,v,S)}catch(k){const I=zo(k);throw s&&a===w&&(a=null,u(w),r({state:"failed",error:I}),d()),I}},start:()=>{s||(s=!0,f())},stop:()=>{if(!s)return;s=!1,c+=1,m();const v=a;a=null,v&&u(v)}}}function CI(e){const t=ne.c(9),{url:n,clientName:r,reconnectDelayMs:o}=e,i=_.useRef(null),[s,a]=_.useState("connecting"),[c,l]=_.useState(null);let u,m;t[0]!==r||t[1]!==o||t[2]!==n?(u=()=>{const g=ob({connect:()=>js(n,r),callTool:Zh,reconnectDelayMs:o,scheduleTimer:sb,cancelTimer:ib,onStateChange:y=>{a(y.state),l(y.error)}});return i.current=g,g.start(),()=>{i.current===g&&(i.current=null),g.stop()}},m=[r,o,n],t[0]=r,t[1]=o,t[2]=n,t[3]=u,t[4]=m):(u=t[3],m=t[4]),_.useEffect(u,m);let f;t[5]===Symbol.for("react.memo_cache_sentinel")?(f=async(g,y)=>{const v=i.current;if(!v)throw new Error("MCP server is not ready");return v.callTool(g,y)},t[5]=f):f=t[5];const d=f;let p;return t[6]!==c||t[7]!==s?(p={state:s,error:c,callTool:d},t[6]=c,t[7]=s,t[8]=p):p=t[8],p}function ib(e){return window.clearTimeout(e)}function sb(e,t){return window.setTimeout(e,t)}function MI({bookId:e,notebookId:t,enabled:n,refresh:r}){const o=_.useEffectEvent(r);_.useEffect(()=>{if(!n||!e||!t)return;let i=!0,s=!1,a=!1,c=0;const l=async()=>{if(window.clearTimeout(c),!(!i||document.visibilityState==="hidden")){if(s){a=!0;return}s=!0;try{await o(()=>i)}catch{a=!1}finally{s=!1,i&&(c=window.setTimeout(l,a?0:2e3)),a=!1}}},u=()=>{l()};return c=window.setTimeout(l,0),window.addEventListener("focus",u),document.addEventListener("visibilitychange",u),()=>{i=!1,window.clearTimeout(c),window.removeEventListener("focus",u),document.removeEventListener("visibilitychange",u)}},[e,n,t])}const ab=/^[a-z]{2,3}(?:-[a-z0-9]{2,8})*$/iu;function Or(e){return ab.test(e.trim())}function TI(e){const t=e.trim();return Or(t)?{ok:!0,languageCode:t}:{ok:!1,message:"A quick prompt can only set a language code on a pending transcription, for example /apply en."}}function RI(e){return e.assetId?e.languageCode.trim()&&!Or(e.languageCode)?{blocking:"Language must be a code such as en or pt-br, or left blank to auto-detect.",notice:null}:{blocking:null,notice:null}:{blocking:"Choose a video or audio clip.",notice:null}}function $I(e){const t=e.languageCode.trim();return{book_id:e.bookId,asset_id:e.assetId,diarize:e.diarize,tag_audio_events:e.tagAudioEvents,wait:!1,...t?{language_code:t}:{}}}function NI(e){const t=Array.isArray(e?.warnings)?e.warnings.filter(i=>typeof i=="string"):[],n=typeof e?.usd=="number"?e.usd:null,r=t.length>0&&t.every(i=>i.includes("historical average per call")),o=n===null||t.length>0&&!r;return{usd:o?null:n,unavailable:o}}function Gs(e,t){const n=t.get(e.artifactId);return n?`@${n}`:e.label||e.artifactId}function cb(e,t,n){const r=t.find(i=>i.artifactId===e);if(r)return r;const o=e.toLowerCase();for(const[i,s]of n)if(s.toLowerCase()===o)return t.find(a=>a.artifactId===i);return t.find(i=>i.label.toLowerCase()===o)}function PI(e){const t=e.assetRef?.trim()??"",n=t.replace(/^@/,"");if(n){const o=cb(n,e.assets,e.addressByArtifactId);return o?Be(o.type)?{ok:!0,assetId:o.artifactId}:{ok:!1,message:`Transcribe applies to video or audio; ${Gs(o,e.addressByArtifactId)} is ${o.type}`}:{ok:!1,message:`No asset found for ${t}`}}const r=e.selectedCell?.outputArtifactId??null;if(r&&Be(e.selectedCell?.type??"")){const o=e.assets.find(i=>i.artifactId===r);if(o&&Be(o.type))return{ok:!0,assetId:o.artifactId}}if(e.preview&&Be(e.preview.type)){const o=e.assets.find(i=>i.artifactId===e.preview?.assetId);if(o&&Be(o.type))return{ok:!0,assetId:o.artifactId}}return{ok:!0,assetId:null}}function OI(e,t){return e.filter(n=>Be(n.type)).map(n=>({artifactId:n.artifactId,label:Gs(n,t),type:n.type,mediaUrl:n.mediaUrl,thumbnailUrl:n.thumbnailUrl,duration:n.duration})).sort((n,r)=>n.label.localeCompare(r.label))}function be(e,t){return{kind:"refused",outcome:{status:e,message:t}}}function se(e){return e.toLowerCase().replace(/[^a-z0-9]+/gu," ").trim()}function lb(e){return e.map(t=>t.title).join(", ")}function qs(e){return e.length>0?e.map(t=>t.label).join(", "):"no settings"}function ir(e){return e.options.map(String).join(", ")}function ub(e,t){const n=se(e);if(!n)return null;const r=t.find(i=>se(i.name)===n||se(i.label)===n);if(r)return r;const o=t.filter(i=>se(i.label).includes(n)||se(i.name).includes(n));return o.length===1?o[0]:null}function db(e){if(typeof e=="boolean")return e;const t=se(String(e));return["true","on","yes","enable","enabled"].includes(t)?!0:["false","off","no","disable","disabled"].includes(t)?!1:null}function fb(e){return typeof e=="string"&&["default","auto","automatic"].includes(se(e))}function mb(e,t){const n=typeof t=="number"?t:Number(String(t).trim());return typeof t=="boolean"||!Number.isFinite(n)?{error:`${e.label} takes a number, not "${String(t)}".`}:e.minimum!==void 0&&(e.exclusiveMinimum?n<=e.minimum:n<e.minimum)?{error:e.exclusiveMinimum?`${e.label} must be greater than ${e.minimum}.`:`${e.label} does not go below ${e.minimum}.`}:e.maximum!==void 0&&(e.exclusiveMaximum?n>=e.maximum:n>e.maximum)?{error:e.exclusiveMaximum?`${e.label} must be less than ${e.maximum}.`:`${e.label} does not go above ${e.maximum}.`}:e.options.length>0&&!e.options.includes(n)?{error:`${e.label} does not take ${n}. It takes ${ir(e)}.`}:{kind:"setting",name:e.name,value:n}}function pb(e,t,n){const r=ub(e,n);if(!r)return{error:`This review has no "${e}" setting. It has ${qs(n)}.`};if(fb(t))return r.required?{error:`${r.label} has no default. It takes ${ir(r)}.`}:{kind:"setting",name:r.name,value:void 0};if(r.valueType==="boolean"){const s=db(t);return s===null?{error:`${r.label} is on or off, not "${String(t)}".`}:{kind:"setting",name:r.name,value:s}}if(r.valueType==="number")return mb(r,t);const o=String(t).trim(),i=r.options.find(s=>se(String(s))===se(o));return r.options.length>0&&i===void 0?{error:`${r.label} does not take "${o}". It takes ${ir(r)}.`}:{kind:"setting",name:r.name,value:i??o}}function gb(e,t){const n=se(e),r=t.find(o=>se(o.id)===n)??t.find(o=>se(o.title)===n)??t.find(o=>se(o.title).includes(n));return r?{kind:"model",actionId:r.id}:{error:`This review has no "${e}" model. It offers ${lb(t)}.`}}function LI(e,t){if(t.kind==="none")return be("failed","There is no review on screen to act on.");if(e.decision==="cancel")return{kind:"command",input:"/cancel"};const n=e.prompt?.trim(),r=Object.entries(e.settings??{}),o=e.model?.trim();if(e.decision==="apply")return o||r.length>0?be("review","Revise the model and settings first, then apply. Apply only takes a new prompt."):n&&t.kind==="chain-step"?be("review","A chain step can't be rewritten. Apply it as it stands, or cancel the chain."):n&&t.kind==="transcribe"?Or(n)?{kind:"command",input:`/apply ${n.trim()}`}:be("review","A transcription review only takes a language code, for example en. Apply it as it stands, or cancel it."):n&&t.kind!=="generation"?be("review","Only a generation review takes a new prompt. Apply this one as it stands, or cancel it."):{kind:"command",input:n?`/apply ${n}`:"/apply"};if(t.kind==="chain-step")return be("review","A chain step can't be revised. Apply it, or cancel to stop the whole chain.");if(t.kind!=="generation")return be("review","Only a generation review has a prompt, a model and settings to revise.");if(!n&&!o&&r.length===0)return be("review",`Say what to change: the prompt, the model, or one of ${qs(t.action.controls)}.`);const i=[];if(o){const c=gb(o,t.models);if("error"in c)return be("review",c.error);i.push(c)}n&&i.push({kind:"prompt",prompt:n});const s=i.find(c=>c.kind==="model"),a=s?t.models.find(c=>c.id===s.actionId)?.controls??[]:t.action.controls;for(const[c,l]of r){const u=pb(c,l,a);if("error"in u)return be("review",u.error);i.push(u)}return{kind:"revise",edits:i}}const FI={target:null,sources:[]};function DI(e){const t=new Map;for(const n of e.sources)n&&t.set(n,"source");return e.target&&t.set(e.target,"target"),t}function hb(e){if(!Number.isFinite(e.row)||e.row<0)return 0;const t=Number.isFinite(e.zoom)&&e.zoom>0?e.zoom:1,n=O.originY+e.row*O.rowPitch+O.squareSize/2,r=Math.max(0,e.scrollHeight-e.clientHeight),o=n*t-e.clientHeight/2;return Math.min(r,Math.max(0,Math.round(o)))}const bb=2;function VI(e,t,n={}){(n.scheduleFrame??(o=>window.requestAnimationFrame(o)))(()=>{const o=e();if(!o)return;const i=hb({...t,clientHeight:o.clientHeight,scrollHeight:o.scrollHeight});Math.abs(i-o.scrollTop)<=bb||o.scrollTo({top:i,behavior:n.reducedMotion?"auto":"smooth"})})}function jI(e,t){return t.some(n=>{const r=ni(n.address);return r?(as(e,r)?.id??null)!==n.cellId:!0})}const Xo=["#65e6a5","#ffbd5c","#69b7ff","#ff7f9c","#c58cff","#50d7dc","#f38d58","#d2e466"];function ce(e){return typeof e=="string"&&e.length>0?e:null}function oe(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function Yo(e,t){return typeof e=="boolean"?e:t}function ye(e){const t=e>1?e/1e3:e;return Math.min(1,Math.max(0,t))}function yb(e){if(Array.isArray(e)&&e.length>=4){const f=oe(e[0]),d=oe(e[1]),p=oe(e[2]),g=oe(e[3]);if(f===null||d===null||p===null||g===null)return null;const y=ye(f),v=ye(d);return{x:y,y:v,width:Math.max(0,ye(p)-y),height:Math.max(0,ye(g)-v)}}const t=h(e);if(!t)return null;const n=oe(t.x??t.left??t.x1),r=oe(t.y??t.top??t.y1),o=oe(t.width),i=oe(t.height),s=oe(t.right??t.x2),a=oe(t.bottom??t.y2);if(n===null||r===null)return null;const c=ye(n),l=ye(r),u=o===null?s===null?null:ye(s)-c:ye(o),m=i===null?a===null?null:ye(a)-l:ye(i);return u===null||m===null?null:{x:c,y:l,width:Math.max(0,Math.min(1-c,u)),height:Math.max(0,Math.min(1-l,m))}}function _b(e,t){let n=t;for(const r of e)n=(n<<5)-n+r.charCodeAt(0)|0;return Xo[Math.abs(n)%Xo.length]}function vb(e,t){const n=h(e);if(!n)return null;const r=ce(n.id??n.subject_id??n.region_id)??(oe(n.index)===null?null:`subject-${oe(n.index)}`);if(!r)return null;const o=h(n.capabilities),i=h(n.bounding_box??n.boundingBox);return{id:r,label:ce(n.label??n.name)??`Subject ${t+1}`,description:ce(n.description),color:ce(n.color)??_b(r,t),box:yb(n.normalized_box??n.normalizedBox??i?.normalized??n.box),layerUrl:ce(n.layer_url??n.layerUrl??n.mask_url??n.maskUrl??n.url),thumbnailUrl:ce(n.thumbnail_url??n.thumbnailUrl),zIndex:oe(n.z_index??n.zIndex)??t+1,removable:Yo(o?.remove??n.removable,!0),exactEdit:Yo(o?.exact_edit??o?.exactEdit??n.exact_edit,!1)}}function kb(e,t){return e==="idle"||e==="analyzing"||e==="ready"||e==="failed"?e:t}function GI(e){const t=h(e),r=h(t?.subject_map??t?.subjectMap??t?.map)??t,i=(Array.isArray(r?.subjects)?r.subjects:Array.isArray(r?.regions)?r.regions:Array.isArray(r?.layers)?r.layers:[]).flatMap((c,l)=>{const u=vb(c,l);return u?[u]:[]}).sort((c,l)=>c.zIndex-l.zIndex),s=ce(r?.error??t?.error),a=s?"failed":i.length>0?"ready":"idle";return{status:kb(r?.status??t?.status,a),artifactId:ce(r?.artifact_id??r?.artifactId??t?.artifact_id??t?.artifactId),objectHash:ce(r?.object_hash??r?.objectHash??t?.object_hash??t?.objectHash),width:oe(r?.width??t?.width),height:oe(r?.height??t?.height),baseUrl:ce(r?.base_url??r?.baseUrl??t?.base_url??t?.baseUrl),jobId:ce(r?.job_id??r?.jobId??t?.job_id??t?.jobId),startedAt:ce(r?.started_at??r?.startedAt??t?.started_at??t?.startedAt),error:s,subjects:i}}async function wb(e,t){if(!t())return{kind:"stale"};try{const n=await e();return t()?{kind:"current",value:n}:{kind:"stale"}}catch(n){return t()?{kind:"error",error:n}:{kind:"stale"}}}const Sb=3e3,Ib=27*6e4;function Ab(e){return new Promise(t=>window.setTimeout(t,e))}function xb(e,t){if(!e)return t;const n=Date.parse(e);return Number.isFinite(n)?n:t}async function qI({initialMap:e,read:t,publish:n,isCurrent:r,now:o=Date.now,wait:i=Ab,intervalMs:s=Sb,timeoutMs:a=Ib}){if(!r())return{kind:"stale"};if(e.status!=="analyzing")return{kind:"terminal",map:e};let c=e;const l=xb(e.startedAt,o())+a;for(;r();){const u=l-o();if(u<=0)return{kind:"timeout",map:c};if(await i(Math.min(s,u)),!r())return{kind:"stale"};if(o()>=l)return{kind:"timeout",map:c};const m=await wb(t,r);if(m.kind==="stale")return m;if(m.kind==="error")return{kind:"error",map:c,error:m.error};if(c=m.value,n(c),c.status!=="analyzing")return{kind:"terminal",map:c}}return{kind:"stale"}}const Eb={transcript:["transcribe","transcribe_video_audio"],analysis:["analyze_video"]};function Cb(e){return e==="transcript"?"Transcription failed":"Video analysis failed"}function UI(e){const t=e.jobs.filter(r=>r.artifactId===e.artifactId&&Eb[e.insight].includes(r.type)&&r.enqueuedAt>=e.since),n=t.find(r=>r.state==="failed"||r.state==="aborted");return n?{kind:"failed",message:n.error?.message??Cb(e.insight)}:t.some(r=>r.state==="done")?{kind:"ready"}:e.hasInsight&&!e.hadInsight?{kind:"ready"}:{kind:"continue"}}const Mb=new Set(["audio","image","video","extract_audio","split_video","prompt","character","analyze","analysis","generate_video","generate_image","generate_audio","concat","splice","timeline","goal","post"]);function BI(e){if(!Array.isArray(e))throw new Error("The server returned invalid asset history");return e.map(t=>{const n=h(t),r=n&&b(n.hash),o=n&&b(n.message),i=n&&b(n.date);if(!n||!r||o===null||!i)throw new Error("The server returned an invalid asset revision");return{hash:r,message:o,date:i,...b(n.author)?{author:b(n.author)}:{},...b(n.operation)?{operation:b(n.operation)}:{}}})}function Tb(e){return e.content?.find(n=>n.type==="text")?.text??null}function HI(e){const t=e,n=Tb(e);if(t.isError)throw new Error(n??"MCP tool failed");if(!n)return null;try{return JSON.parse(n)}catch{return n}}function WI(e,t){if(typeof e=="string")return e;const n=h(e);if(!n)return t;for(const r of["message","job_id","notebook_id","address","bookId"]){const o=b(n[r]);if(o)return`${t}: ${o}`}return t}function Rb(e){const t=h(e),n=b(t?.stepId),r=b(t?.tool),o=b(t?.title),i=b(t?.reason);return!n||!r||!o||!i?null:{stepId:n,index:typeof t?.index=="number"?t.index:0,total:typeof t?.total=="number"?t.total:1,tool:r,title:o,address:b(t?.address),params:h(t?.params)??{},estimateUsd:typeof t?.estimateUsd=="number"?t.estimateUsd:null,estimateUnavailable:t?.estimateUnavailable!==!1,reason:i}}function KI(e){const t=h(e),n=b(t?.chain_id),r=b(t?.status);if(b(t?.kind)!=="chain-run"||!n||!r)return null;const o=Array.isArray(t?.steps)?t.steps.flatMap(i=>{const s=h(i),a=b(s?.id),c=b(s?.tool),l=b(s?.status);return!a||!c||!l?[]:[{id:a,tool:c,status:l,error:b(s?.error),requiresApproval:s?.requires_approval===!0,review:Rb(s?.review)}]}):[];return{chainId:n,status:r,error:b(t?.error),awaitingStepId:b(t?.awaiting_step_id),steps:o}}function zI(e){const t=h(e);return b(t?.artifact_id)!==null&&b(t?.assetId)!==null&&b(t?.job_id)?.startsWith("download-")===!0}function XI(e){const t=h(e),n=h(t?.params),r=h(t?.confirmation),o=b(t?.kind),i=b(t?.planId),s=b(t?.bookId),a=b(t?.prompt),c=b(t?.routedTool),l=b(t?.tool),u=b(t?.message)??"",m=b(t?.summary),f=b(t?.effect),d=b(r?.reason),p=r?.required;if(o!=="chat-action-plan"||!i||!s||!a||!c||!l||!n||!m||f!=="mutation"&&f!=="generation"&&f!=="view"||typeof p!="boolean"||!d)throw new Error("The server returned an invalid chat action plan");return{kind:o,planId:i,bookId:s,prompt:a,routedTool:c,tool:l,params:n,message:u,summary:m,effect:f,confirmation:{required:p,reason:d}}}function Us(e){return Array.isArray(e)?e.flatMap(t=>{const n=h(t),r=n&&b(n.bookId),o=n&&b(n.name),i=n&&F(n.createdAt);return!n||!r||!o||i===null?[]:[{bookId:r,name:o,createdAt:i,artifactCount:F(n.artifactCount)??0,notebookCount:F(n.notebookCount)??0}]}):[]}function YI(e){return Us([e])[0]??null}function $b(e){const t=h(e),n=t&&b(t.id),r=t&&b(t.type),o=t&&b(t.label),i=t&&h(t.slot),s=i&&F(i.row),a=i&&F(i.column);if(!t||!n||s===null||a===null||!Number.isInteger(s)||!Number.isInteger(a)||s<0||s>=de||a<0||a>=X||!Mb.has(r??""))return null;const c=h(t.inputs),l=Array.isArray(t.references)?t.references:void 0,u=Array.isArray(t.pinned_results??t.pinnedResults)?t.pinned_results??t.pinnedResults:void 0;return{id:n,type:r,...o?{label:o}:{},slot:{row:s,column:a},...b(t.output_entity_id)?{outputEntityId:b(t.output_entity_id)}:{},...b(t.prompt)!==null?{prompt:b(t.prompt)}:{},...b(t.provider)!==null?{provider:b(t.provider)}:{},...b(t.model)!==null?{model:b(t.model)}:{},...b(t.operation)!==null?{operation:b(t.operation)}:{},...b(t.tool)!==null?{tool:b(t.tool)}:{},...c?{inputs:c}:{},...l?{references:l}:{},...u?{pinnedResults:u}:{},...b(t.output_artifact_id??t.outputArtifactId)?{outputArtifactId:b(t.output_artifact_id??t.outputArtifactId)}:{}}}function Nb(e){const t=h(e),n=t&&b(t.id),r=t&&b(t.name),o=t&&b(t.created_at??t.createdAt);if(!t||!n||!r||!o)return null;const i=Array.isArray(t.cells)?t.cells.flatMap(a=>{const c=$b(a);return c?[c]:[]}):[],s=Array.isArray(t.edges)?t.edges.flatMap(a=>{const c=h(a),l=c&&b(c.id),u=c&&b(c.source),m=c&&b(c.target),f=c&&b(c.targetInput??c.target_input);return l&&u&&m&&f?[{id:l,source:u,target:m,targetInput:f}]:[]}):[];return{id:n,name:r,createdAt:o,...b(t.revision)?{revision:b(t.revision)}:{},...b(t.description)?{description:b(t.description)}:{},...b(t.lifecycleState??t.lifecycle_state)?{lifecycleState:b(t.lifecycleState??t.lifecycle_state)}:{},...F(t.workflowVersion??t.workflow_version)!==null?{workflowVersion:F(t.workflowVersion??t.workflow_version)}:{},...b(t.analysisRevision??t.analysis_revision)?{analysisRevision:b(t.analysisRevision??t.analysis_revision)}:{},...h(t.fixture)?{fixture:h(t.fixture)}:{},...h(t.execution)?{execution:h(t.execution)}:{},...Array.isArray(t.generationPlans??t.generation_plans)?{generationPlans:t.generationPlans??t.generation_plans}:{},...Array.isArray(t.notebookRunPlans??t.notebook_run_plans)?{notebookRunPlans:t.notebookRunPlans??t.notebook_run_plans}:{},...Array.isArray(t.posts)?{posts:t.posts}:{},cells:i,edges:s}}function Pb(e){return Array.isArray(e)?e.flatMap(t=>{const n=Nb(t);return n?[n]:[]}):[]}function Bs(e){const t=h(e),n=t&&b(t.id),r=t&&b(t.artifact_id??t.artifactId),o=t&&b(t.type);if(!t||!n||!r||!o)return null;const i=h(t.audio_info),s=i&&b(i.codec),a=i&&F(i.sample_rate_hz),c=i&&F(i.channels),l=i&&b(i.channel_layout),u=i&&F(i.duration_seconds),m=s&&a!==null&&c!==null&&l&&u!==null?{codec:s,sampleRateHz:a,channels:c,channelLayout:l,durationSeconds:u}:null,f=h(t.analysis_info??t.analysisInfo),d=f&&F(f.source_duration_seconds??f.sourceDurationSeconds),p=Array.isArray(f?.shots)?f.shots.flatMap(w=>{const k=h(w),I=k&&F(k.ordinal),E=k&&b(k.label),C=k&&F(k.start_seconds??k.startSeconds),x=k&&F(k.end_seconds??k.endSeconds),$=k&&F(k.duration_seconds??k.durationSeconds);return I!==null&&E!==null&&C!==null&&x!==null&&$!==null?[{ordinal:I,label:E,startSeconds:C,endSeconds:x,durationSeconds:$}]:[]}):[],g=f?.llm_exchanges??f?.llmExchanges,y=Array.isArray(g)?g.flatMap(w=>{const k=h(w),I=k&&b(k.provider),E=k&&b(k.model),C=k&&b(k.stage),x=k&&h(k.response_format??k.responseFormat),$=x&&b(x.type);return I&&E&&C?[{provider:I,model:E,responseFormat:$?{name:b(x?.name),strict:x?.strict===!0,type:$}:null,stage:C}]:[]}):[],v=d!==null?{sourceDurationSeconds:d,llmExchanges:y,outputJson:f?.output_json??f?.outputJson??null,outputUrl:b(f?.output_url??f?.outputUrl),shots:p}:null,S=Array.isArray(t.waveform)?t.waveform.flatMap(w=>typeof w=="number"&&Number.isFinite(w)?[Math.max(-1,Math.min(1,w))]:[]):null;return{id:n,artifactId:r,label:b(t.label)??n,objectHash:b(t.object_hash??t.objectHash),type:o,createdAt:b(t.created_at??t.createdAt)??"",mediaUrl:b(t.media_url??t.mediaUrl),thumbnailUrl:b(t.thumbnail_url??t.thumbnailUrl),status:b(t.status)??"ready",origin:b(t.origin),prompt:b(t.prompt),width:F(t.width),height:F(t.height),duration:F(t.duration),fps:F(t.fps),waveform:S,audioInfo:m,analysisInfo:v,transcript:ef(t.transcript),visionAnalysis:tf(t.vision_analysis??t.visionAnalysis),tags:Ai(t.tags)}}function Ob(e){const t=h(e);return(Array.isArray(e)?e:Array.isArray(t?.assets)?t.assets:[]).flatMap(r=>{const o=Bs(r);return o?[o]:[]})}function Lb(e){const t=h(e);return{ready:Math.max(0,F(t?.ready)??0),processing:Math.max(0,F(t?.processing)??0),error:Math.max(0,F(t?.error)??0)}}function JI(e,t){const n=h(e),r=Array.isArray(n?.assets)?n.assets:[],o=h(n?.page),i=F(o?.offset)??0,s=F(o?.limit)??24,a=F(o?.total)??0,c=Array.isArray(n?.books_with_errors)?n.books_with_errors:[];return{unindexedVisualAssets:Math.max(0,F(n?.unindexed_visual_assets)??0),receivedCount:r.length,assets:r.flatMap(l=>{const u=h(l),m=Bs(u);if(!m)return[];const f=(u&&b(u.owning_book_id))??t?.owningBookId,d=(u&&b(u.owning_book_name))??t?.owningBookName,p=h(u?.assetWork),g=h(p?.meta),y=b(h(g?.error)?.message),v=(u&&b(u.last_used_at))??null;return f&&d?[{...m,owningBookId:f,owningBookName:d,errorMessage:y,lastUsedAt:v}]:[]}),page:{offset:i,limit:s,total:a,hasMore:o?.hasMore===!0},statusCounts:Lb(n?.status_counts??n?.statusCounts),booksWithErrors:c.flatMap(l=>{const u=h(l),m=u&&b(u.book_id),f=u&&b(u.message);return m&&f?[{bookId:m,message:f}]:[]})}}function ZI(e){const t=h(e),n=b(t?.status)==="in_use"?"in_use":"forgotten",r=Array.isArray(t?.references)?t.references:[];return{status:n,artifactId:b(t?.artifact_id)??"",label:b(t?.label),references:r.flatMap(o=>{const i=h(o),s=i&&b(i.kind),a=i&&b(i.id);return s&&a?[{kind:s,id:a}]:[]}),clearedCells:F(t?.cleared_cells)??0,forgottenObjects:F(t?.forgotten_objects)??0,sharedObjects:F(t?.shared_objects)??0,reclaimedBytes:F(t?.reclaimed_bytes)??0}}function Fb(e){return Array.isArray(e)?e.flatMap(t=>{const n=h(t),r=n&&b(n.artifactId),o=n&&b(n.state),i=n&&h(n.phases);return!r||!o||!i?[]:[{artifactId:r,state:o,missingOutputs:Array.isArray(n.missingOutputs)?n.missingOutputs.flatMap(s=>typeof s=="string"?[s]:[]):[],phases:Object.fromEntries(Object.entries(i).flatMap(([s,a])=>typeof a=="string"?[[s,a]]:[]))}]}):[]}function Db(e){const t=h(e);return t&&b(t.sequenceId)&&b(t.revision)&&Array.isArray(t.tracks)&&Array.isArray(t.clips)&&Array.isArray(t.captions)?e:null}function Vb(e){const t=h(e);if(!t||t.planVersion!==1||!b(t.planId)||!Array.isArray(t.stages))throw new Error("The server returned an invalid CommandPlan");const n=e;return wi(n),n}function jb(e){return Array.isArray(e)?e.flatMap(t=>{const n=h(t),r=n&&F(n.id),o=n&&b(n.type),i=n&&b(n.state),s=n&&b(n.operationId??n.operation_id);if(!n||r===null||!o||!i||!s)return[];const a=h(n.error),c=n.payload,l=c&&typeof c=="object"&&!Array.isArray(c)?c:null,u=h(n.result);return[{id:r,operationId:s,type:o,state:i,artifactId:b(n.artifactId??n.artifact_id),attempts:F(n.attempts)??0,maxAttempts:F(n.maxAttempts??n.max_attempts)??1,error:a&&b(a.message)?{message:b(a.message),code:b(a.code)}:null,payload:l,result:u,providerTask:bi(n.providerTask),enqueuedAt:F(n.enqueuedAt??n.enqueued_at)??0,startedAt:F(n.startedAt??n.started_at),finishedAt:F(n.finishedAt??n.finished_at)}]}):[]}function QI(e){return Array.isArray(e)?e.flatMap(t=>{const n=h(t),r=b(n?.planId),o=b(n?.cellId),i=b(n?.status),s=b(n?.createdAt),a=b(n?.updatedAt);if(!n||!r||!o||!i||!s||!a)return[];try{return[{planId:r,cellId:o,status:i,plan:Vb(n.plan),outputArtifactId:b(n.outputArtifactId),error:b(n.error),createdAt:s,updatedAt:a}]}catch{return[]}}):[]}function Gb(e){return Array.isArray(e)?e.filter(t=>{const n=h(t);return n!==null&&typeof n.command=="string"&&typeof n.description=="string"}):[]}function eA(e){if(!e)return null;const t=Us(e.bookValue),n=Pb(e.notebookValue);return{books:t,bookId:e.bookId,notebook:n.find(r=>r.id===e.notebookId)??null,assets:Ob(e.assetValue),ingestStatuses:Fb(e.ingestStatusValue),sequence:Db(e.sequenceValue),jobs:jb(e.jobValue),commands:Gb(e.commandValue),chatModelCatalog:rb(e.chatModelValue),generationActions:Sd(e.actionValue)}}function sr(e){return e!==null&&Number.isFinite(e)&&e>0}function qb(e,t){return sr(e)&&sr(t)?`${e}×${t}`:null}function Hs(e,t){const n=e??t;if(!n)return null;const r=Md(n);return{key:"generator",label:r,title:r,announce:`Generator ${r}`,emphasis:"generator"}}function Ws(e){return e?{key:"provenance",label:e,title:`Extracted from ${e}`,announce:`Extracted from ${e}`,emphasis:"generator"}:null}function tA(e){const t=qb(e.width,e.height),n=un(e.width,e.height);return[t?{key:"dimensions",label:t,title:"Dimensions",announce:`Dimensions ${t}`,emphasis:"plain"}:null,n?{key:"aspect",label:n,title:"Aspect ratio",announce:`Aspect ratio ${n}`,emphasis:"plain"}:null,Hs(e.tool,e.model),Ws(e.provenance)].filter(r=>r!==null)}function nA(e){const t=e.aspectRatio??un(e.width,e.height);return[t?{key:"aspect",label:t,title:"Aspect ratio",announce:`Aspect ratio ${t}`,emphasis:"plain"}:null,Hs(e.tool,e.model),Ws(e.provenance)].filter(n=>n!==null)}function rA(e){const t=dr(e);return[{key:"role",label:t.role,title:"Audio role",announce:`Audio role ${t.role}`,emphasis:"generator"},...t.details.map((r,o)=>({key:`detail-${o}`,label:r,title:r,announce:r,emphasis:"plain"}))]}function Ub(e){return sr(e)?{label:me(Math.floor(e)),seconds:e}:null}function oA(e){return Ub(dr(e).durationSeconds)}function iA(e,t,n,r){return[`${e} metadata`,...t.map(o=>o.announce),n?`Duration ${n.label}`:null,r?`Prompt: ${r}`:null].filter(o=>!!o).join(". ")}const sA={title:6,continuity:30,frame:20,storyboard:32,ending:12,video:12};function aA(e){return e.trim().split(/\s+/u).filter(Boolean).length}function cA(e,t){const n=Math.max(0,e/t),r=Math.floor(n/60),o=n-r*60;return`${r}:${o.toFixed(2).padStart(5,"0")}`}function lA(e,t){const n=e.trim(),r=/^f(\d+)$/i.exec(n);if(r)return Number(r[1]);const o=/^(?:(\d+):)?(\d+(?:\.\d+)?)$/.exec(n);if(!o)return null;const i=o[1]?Number(o[1]):0,s=Number(o[2]);return o[1]&&s>=60?null:Math.round((i*60+s)*t)}const{fontFamily:Bb}=sa();function Hb(e){return e==="left"?"flex-start":e==="right"?"flex-end":"center"}function Wb(e){return e==="left"?"left bottom":e==="right"?"right bottom":"center bottom"}function Kb(e,t){const n=`0 ${Math.round(t*.04)}px ${Math.round(t*.3)}px rgba(0,0,0,0.5)`;if(e.shadowBlur<=0)return n;const r=Math.round(e.shadowBlur/2);return`${r}px ${r}px ${e.shadowBlur}px rgba(0,0,0,${e.shadowOpacity/100}), ${n}`}const Jo=e=>{const t=ne.c(33),{words:n,fontSize:r,time:o,fade:i,settings:s,side:a,finish:c,last:l}=e,u=Math.min(c.strokeWidth,r*.035);let m;t[0]!==a?(m=Hb(a),t[0]=a,t[1]=m):m=t[1];let f;t[2]!==r?(f=Math.round(r*.2),t[2]=r,t[3]=f):f=t[3];const d=r*on;let p;t[4]!==r||t[5]!==l?(p=l?0:hh(r),t[4]=r,t[5]=l,t[6]=p):p=t[6];let g;t[7]!==r||t[8]!==m||t[9]!==f||t[10]!==d||t[11]!==p?(g={display:"flex",justifyContent:m,gap:f,fontSize:r,lineHeight:on,height:d,marginBottom:p,whiteSpace:"nowrap"},t[7]=r,t[8]=m,t[9]=f,t[10]=d,t[11]=p,t[12]=g):g=t[12];let y;if(t[13]!==i||t[14]!==c||t[15]!==r||t[16]!==s||t[17]!==a||t[18]!==u||t[19]!==o||t[20]!==n){let S;t[22]!==i||t[23]!==c||t[24]!==r||t[25]!==s||t[26]!==a||t[27]!==u||t[28]!==o?(S=(w,k)=>{const I=xh(w,o,s,r,i);return He.jsx("span",{style:{display:"inline-block",opacity:I.opacity,color:I.color,transform:`translateY(${I.translateY}px) scale(${I.scale})`,transformOrigin:Wb(a),WebkitTextStroke:u>0?`${u}px ${c.strokeColor}`:void 0,paintOrder:u>0?"stroke fill":void 0,textShadow:Kb(c,r)},children:w.text.toUpperCase()},`${w.start}-${k}`)},t[22]=i,t[23]=c,t[24]=r,t[25]=s,t[26]=a,t[27]=u,t[28]=o,t[29]=S):S=t[29],y=n.map(S),t[13]=i,t[14]=c,t[15]=r,t[16]=s,t[17]=a,t[18]=u,t[19]=o,t[20]=n,t[21]=y}else y=t[21];let v;return t[30]!==g||t[31]!==y?(v=He.jsx("div",{style:g,children:y}),t[30]=g,t[31]=y,t[32]=v):v=t[32],v};function Zo(e,t){return{position:"absolute",left:e.x,top:t,width:e.width,display:"flex",flexDirection:"column",fontFamily:Bb,fontWeight:400,userSelect:"none",pointerEvents:"none"}}const uA=e=>{const t=ne.c(14);let n,r,o;t[0]!==e?({cues:n,settings:o,...r}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=o):(n=t[1],r=t[2],o=t[3]);const i=aa(),{fps:s}=ca(),a=i/s;let c,l,u;if(t[4]!==n||t[5]!==r||t[6]!==o||t[7]!==a){u=Symbol.for("react.early_return_sentinel");e:{const f=kh(n,a);if(!f){u=null;break e}const d=wh(f,a);if(o.style==="punch"){const p=Sh(f,a);if(!p){u=null;break e}const g=yh(p,f.column,o.energySizing),y=f.column.y+(f.column.height-g*on)/2;u=He.jsx("div",{style:Zo(f.column,y),children:He.jsx(Jo,{words:[p],fontSize:g,time:a,fade:d,settings:o,side:f.column.side,finish:r,last:!0})});break e}c=Zo(f.column,f.blockTop),l=f.lines.map((p,g)=>He.jsx(Jo,{words:p.words,fontSize:p.fontSize,time:a,fade:d,settings:o,side:f.column.side,finish:r,last:g===f.lines.length-1},`${f.id}-${g}`))}t[4]=n,t[5]=r,t[6]=o,t[7]=a,t[8]=c,t[9]=l,t[10]=u}else c=t[8],l=t[9],u=t[10];if(u!==Symbol.for("react.early_return_sentinel"))return u;let m;return t[11]!==c||t[12]!==l?(m=He.jsx("div",{style:c,children:l}),t[11]=c,t[12]=l,t[13]=m):m=t[13],m};export{Sv as $,Vv as A,Cv as B,ql as C,yv as D,Dv as E,I_ as F,A_ as G,x_ as H,Fv as I,ev as J,E_ as K,Mv as L,C_ as M,bv as N,Xv as O,Qb as P,Iv as Q,ov as R,mv as S,fn as T,Bv as U,Kv as V,zv as W,Jv as X,_v as Y,iv as Z,vv as _,Ly as a,sv as a$,kv as a0,xv as a1,hv as a2,Lv as a3,Ov as a4,y_ as a5,Pu as a6,pk as a7,O as a8,Qe as a9,uf as aA,Sw as aB,vw as aC,Aw as aD,wn as aE,V_ as aF,G_ as aG,yf as aH,_f as aI,Lw as aJ,Fw as aK,cs as aL,wf as aM,qw as aN,Uw as aO,$w as aP,Gw as aQ,Pw as aR,Ow as aS,Nw as aT,lS as aU,uS as aV,dS as aW,Ci as aX,Fl as aY,Ol as aZ,Bn as a_,ve as aa,yk as ab,_k as ac,me as ad,vk as ae,kk as af,v_ as ag,w_ as ah,k_ as ai,wk as aj,ts as ak,lc as al,By as am,qk as an,Jk as ao,Yk as ap,Zk as aq,Qk as ar,mw as as,lk as at,bw as au,yw as av,_w as aw,Iw as ax,kw as ay,ww as az,Ty as b,cA as b$,Rv as b0,dv as b1,ss as b2,is as b3,Dk as b4,zk as b5,Xk as b6,av as b7,bS as b8,wS as b9,wm as bA,_S as bB,Zy as bC,xy as bD,e_ as bE,It as bF,mi as bG,b as bH,Md as bI,h as bJ,o_ as bK,rA as bL,oA as bM,tA as bN,nA as bO,Ub as bP,ln as bQ,t_ as bR,Ya as bS,F as bT,iA as bU,Ds as bV,fi as bW,r_ as bX,vS as bY,Wr as bZ,$_ as b_,kS as ba,AS as bb,xS as bc,xm as bd,IS as be,r0 as bf,s0 as bg,Op as bh,g0 as bi,p0 as bj,h0 as bk,Xa as bl,Ey as bm,My as bn,Cy as bo,zy as bp,Yy as bq,Xy as br,a_ as bs,ur as bt,P_ as bu,bk as bv,N_ as bw,Nv as bx,Hw as by,Wi as bz,Zb as c,Gf as c$,lA as c0,ui as c1,ua as c2,Ha as c3,vy as c4,li as c5,cn as c6,Da as c7,tt as c8,Ca as c9,Cr as cA,GS as cB,qS as cC,PS as cD,Mp as cE,Rp as cF,Sp as cG,up as cH,qy as cI,yp as cJ,kp as cK,JS as cL,dp as cM,Uy as cN,jp as cO,Wp as cP,Hy as cQ,Ky as cR,rS as cS,Wf as cT,Hf as cU,Jf as cV,Yf as cW,Bf as cX,Uf as cY,Df as cZ,Zf as c_,cr as ca,ci as cb,my as cc,oy as cd,Fr as ce,ry as cf,ny as cg,ly as ch,sy as ci,ay as cj,md as ck,pd as cl,Ar as cm,ac as cn,Fk as co,dd as cp,Kk as cq,fd as cr,Ce as cs,FS as ct,OS as cu,_e as cv,DS as cw,VS as cx,jS as cy,MS as cz,Y_ as d,L0 as d$,jf as d0,Wy as d1,Jw as d2,Kf as d3,eS as d4,To as d5,dc as d6,uc as d7,om as d8,rm as d9,Qy as dA,hk as dB,Ew as dC,Cw as dD,Zi as dE,n_ as dF,xk as dG,Cd as dH,Gk as dI,Ck as dJ,wr as dK,rt as dL,xw as dM,Bw as dN,Tv as dO,Mf as dP,U0 as dQ,q0 as dR,_t as dS,et as dT,vt as dU,$o as dV,vg as dW,aA as dX,sA as dY,Ne as dZ,O0 as d_,dk as da,uk as db,fk as dc,mk as dd,g_ as de,Sk as df,Pc as dg,pw as dh,Ik as di,Be as dj,Ak as dk,Uk as dl,Ok as dm,ld as dn,Ed as dp,rs as dq,gn as dr,Et as ds,Wk as dt,Hk as du,vr as dv,Bk as dw,jk as dx,Pk as dy,Nk as dz,tv as e,ES as e$,F0 as e0,P0 as e1,nn as e2,N0 as e3,$0 as e4,er as e5,Os as e6,ey as e7,ty as e8,D0 as e9,QS as eA,C0 as eB,I0 as eC,T0 as eD,S_ as eE,B_ as eF,Mk as eG,nv as eH,c0 as eI,Dy as eJ,ZS as eK,m0 as eL,sc as eM,sw as eN,FI as eO,DI as eP,rw as eQ,QI as eR,W_ as eS,HI as eT,J_ as eU,z_ as eV,X_ as eW,K0 as eX,G0 as eY,j0 as eZ,zw as e_,lg as ea,yt as eb,V0 as ec,bg as ed,fg as ee,Yv as ef,kh as eg,rh as eh,uA as ei,mh as ej,oh as ek,aI as el,cI as em,sI as en,tI as eo,nI as ep,Q0 as eq,rI as er,oI as es,iI as et,qo as eu,eA as ev,CI as ew,A0 as ex,nb as ey,EI as ez,mt as f,D_ as f$,R_ as f0,O_ as f1,gk as f2,Q_ as f3,$r as f4,m_ as f5,p_ as f6,f_ as f7,Pv as f8,Vb as f9,ik as fA,M0 as fB,Vy as fC,jy as fD,BS as fE,Vm as fF,Xd as fG,aw as fH,cw as fI,lw as fJ,uw as fK,dw as fL,VI as fM,Ag as fN,Jy as fO,Er as fP,__ as fQ,UI as fR,wb as fS,Pb as fT,Db as fU,Sd as fV,qI as fW,gi as fX,Us as fY,F_ as fZ,ZI as f_,u_ as fa,l_ as fb,B0 as fc,_0 as fd,H0 as fe,W0 as ff,MI as fg,Nb as fh,jb as fi,vI as fj,yI as fk,Ac as fl,_I as fm,Ob as fn,wI as fo,Cg as fp,k0 as fq,eg as fr,Ek as fs,y0 as ft,v0 as fu,ck as fv,ok as fw,mI as fx,fI as fy,rk as fz,d_ as g,SS as g$,L_ as g0,cv as g1,lv as g2,Gb as g3,rb as g4,Qh as g5,x0 as g6,E0 as g7,YI as g8,Kw as g9,Z_ as gA,vc as gB,GI as gC,ow as gD,XI as gE,$I as gF,NI as gG,Vr as gH,Py as gI,Oy as gJ,uy as gK,e0 as gL,t0 as gM,n0 as gN,j_ as gO,U_ as gP,S0 as gQ,Mw as gR,Rw as gS,py as gT,pI as gU,gI as gV,sk as gW,fS as gX,c_ as gY,b_ as gZ,h_ as g_,sS as ga,T_ as gb,$v as gc,cm as gd,oS as ge,l0 as gf,f0 as gg,OI as gh,RI as gi,u0 as gj,ky as gk,d0 as gl,CS as gm,Ct as gn,a0 as go,uv as gp,yS as gq,nk as gr,Vk as gs,ek as gt,iu as gu,tk as gv,Hv as gw,Qv as gx,Yt as gy,H_ as gz,M_ as h,am as h$,b0 as h0,ak as h1,o0 as h2,i0 as h3,tl as h4,eI as h5,lI as h6,uI as h7,jw as h8,Vw as h9,Tk as hA,TS as hB,Y0 as hC,X0 as hD,z0 as hE,R0 as hF,dI as hG,wv as hH,kI as hI,Co as hJ,df as hK,fw as hL,RS as hM,hn as hN,Rm as hO,bI as hP,Wv as hQ,mS as hR,pS as hS,Z0 as hT,gS as hU,hS as hV,J0 as hW,SI as hX,gy as hY,hy as hZ,iS as h_,Dw as ha,Av as hb,Zv as hc,LI as hd,Ev as he,Xw as hf,Yw as hg,LS as hh,nw as hi,Rk as hj,tw as hk,ew as hl,fy as hm,dy as hn,cy as ho,Tw as hp,w0 as hq,q_ as hr,JI as hs,BI as ht,iy as hu,yy as hv,by as hw,PI as hx,zI as hy,WI as hz,$y as i,nm as i0,qf as i1,Xf as i2,_s as i3,Vf as i4,nS as i5,Qw as i6,tS as i7,Qf as i8,Zw as i9,Ww as iA,II as iB,AI as iC,gw as iD,hw as iE,Lk as iF,$S as iG,NS as iH,em as iI,tm as iJ,xI as iK,$k as ia,iw as ib,KI as ic,HS as id,zS as ie,WS as ig,KS as ih,XS as ii,YS as ij,US as ik,Ny as il,_y as im,cS as io,aS as ip,i_ as iq,s_ as ir,Sy as is,Iy as it,wy as iu,Ry as iv,TI as iw,jI as ix,as as iy,hI as iz,eo as j,Rt as k,Dl as l,K_ as m,pv as n,rv as o,Ay as p,fv as q,gv as r,Vl as s,Jl as t,Fy as u,jv as v,Gv as w,Gy as x,qv as y,Uv as z};