@mindexec/cli 0.2.364 → 0.2.365

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 (25) hide show
  1. package/package.json +1 -1
  2. package/wwwroot/assets/AdminDashboardPage-BzNo67NA.js +1 -0
  3. package/wwwroot/assets/{AppSidebar-Dam9sGMw.js → AppSidebar-DJ5LpVyN.js} +1 -1
  4. package/wwwroot/assets/{AuthPages-DFGWKWuB.css → AuthPages-BrH6kRcv.css} +1 -1
  5. package/wwwroot/assets/AuthPages-DNUq14ip.js +1 -0
  6. package/wwwroot/assets/{CodePage-BM1f1VnB.js → CodePage-CdLvlmFe.js} +1 -1
  7. package/wwwroot/assets/{CompanyCorePage-BSHaECkm.js → CompanyCorePage-OcORhMjC.js} +1 -1
  8. package/wwwroot/assets/{ExecutionModePage-D3oo7YEk.js → ExecutionModePage-CldDMdgz.js} +1 -1
  9. package/wwwroot/assets/{MindCanvas-DH2HgHyT.css → MindCanvas-0T8dFIuQ.css} +1 -1
  10. package/wwwroot/assets/{MindCanvas-CsR85nJo.js → MindCanvas-Bxr4ljkQ.js} +1 -1
  11. package/wwwroot/assets/{PlanMasterPage-Dc9jGdQ6.js → PlanMasterPage-0Vxvgx1w.js} +1 -1
  12. package/wwwroot/assets/PricingPage-C4kIB68J.js +1 -0
  13. package/wwwroot/assets/{ToolPages-CmVbLrAo.js → ToolPages-CPL9J_wS.js} +1 -1
  14. package/wwwroot/assets/{YouTubeSearchPage-DSjCA5Xo.js → YouTubeSearchPage-DNXBcvfY.js} +1 -1
  15. package/wwwroot/assets/canvas-runtime-BDhmTypA.js +44 -0
  16. package/wwwroot/assets/index-D1RMmeVY.js +2 -0
  17. package/wwwroot/assets/{storage-CWUvUZC-.js → storage-vDrcB8Ax.js} +1 -1
  18. package/wwwroot/assets/supabaseAuthAdapter-Dw3pz4Sa.js +44 -0
  19. package/wwwroot/index.html +1 -1
  20. package/wwwroot/assets/AdminDashboardPage-SnjySCKu.js +0 -1
  21. package/wwwroot/assets/AuthPages-Ca7c0s4L.js +0 -1
  22. package/wwwroot/assets/PricingPage-DY2BGaFm.js +0 -1
  23. package/wwwroot/assets/canvas-runtime-hH7qY6Be.js +0 -44
  24. package/wwwroot/assets/index-D-ibZwpF.js +0 -2
  25. package/wwwroot/assets/supabaseAuthAdapter-Bptc9G29.js +0 -44
@@ -1,4 +1,4 @@
1
- var qu=Object.defineProperty;var Ju=(e,t,o)=>t in e?qu(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var ld=(e,t,o)=>Ju(e,typeof t!="symbol"?t+"":t,o);import{j as n,r as g,a as Zu}from"./vendor-react-BXzpOyCS.js";import{l as Qu,a as ft,s as zt,b as em,d as tm,r as am,c as nm,e as om,i as cd}from"./storage-CWUvUZC-.js";import{r as Yr,g as xs,w as sm,a as Ks,d as ud,b as rm,t as Xr,p as vl,v as im,R as dm,c as lm,u as cm,e as um,f as md,s as bt,i as an,l as qs,h as Gn,j as Uo,k as Kn,m as qn,n as Ho,o as Aa,q as pd,x as mm,y as Jn,z as pm,A as gm,B as hm,C as fm,D as jl,E as bm,F as ym,G as oo,H as Sr,I as xm,J as Cm,K as gd,L as kr,M as wr,N as Il,O as Wo,P as ts,Q as so,S as hd,T as U,U as Js,V as ro,W as Sm,X as km,Y as wm,Z as fd,_ as Zs,$ as vm,a0 as jm,a1 as Im,a2 as Nm,a3 as vr,a4 as Am,a5 as Mm,a6 as Tm,a7 as Rm,a8 as bd}from"./canvas-runtime-hH7qY6Be.js";import{e as Lm,d as Em}from"./vendor-msgpack-BE8aAsr3.js";import{R as f}from"./app-runtime-xD2Z3NdN.js";import{g as Qs,A as yd,a as as}from"./index-D-ibZwpF.js";import{g as Cs,r as Nl}from"./supabaseAuthAdapter-Bptc9G29.js";import{c as Pm,a as _m,r as xd}from"./toolHandoff-D5e5f7t5.js";import{a as Cd,s as Dm}from"./executionModeSettings-NJqurj-o.js";import{a as Sd,p as Bm}from"./runtimeSettingsPersistenceProjection-BoNWmYjU.js";import{A as Ut,W as Om,c as Al,D as Fm,E as Gr,R as cn,J as Kr,X as yt,N as jr,O as $m,Q as un,w as mn,I as pn,V as gn,l as us,F as xt,Y as zm,Z as Ir,_ as ms,$ as hn,a0 as Ml,a1 as Um,a2 as Tl,a3 as Hm,i as co,a4 as Rl,a5 as Wm,a6 as kd,a7 as Vm,a8 as ia,a9 as wd,T as ps,aa as vd,ab as po,ac as Ym,ad as ns,ae as Ll,af as Nr,ag as Xm,ah as Gm,f as Km,ai as qm,h as io,x as Jm,aj as Zm,ak as Qm,al as jd,am as Id,an as Nd,g as Ad,ao as Vo,H as Zn,ap as Yo,s as er,aq as Md,ar as ep,as as tr,at as Td,au as Xo,av as ar,aw as Rd,ax as Ld,ay as Ed,az as tp,aA as ap,aB as np,aC as op,n as sp,o as Qn,aD as rp,aE as ip,aF as dp,aG as lp,aH as cp,aI as up,aJ as mp,aK as pp}from"./vendor-icons-D0xKCnZS.js";const gp=1200,Pa="LocalBridgeOriginalNodeId";function Ct(e){return typeof e=="object"&&e!==null}function sa(e,t){const o=Number(e);return Number.isFinite(o)?o:t}function W(e){return typeof e=="string"?e:""}function El(){return typeof window<"u"?{width:window.innerWidth||1280,height:window.innerHeight||720}:{width:1280,height:720}}function Ar(e,t,o){const r=Number(e),l=Number(t),m=Number(o);if(!Number.isFinite(r)||!Number.isFinite(l)||!Number.isFinite(m)||m<=0)return null;const p=1400/m,b=El();return{x:b.width/2-r*p,y:b.height/2-l*p,scale:p}}function hp(e){return Ct(e)?Ar(e.x??e.X,e.y??e.Y,e.z??e.Z):null}function fp(e){if(!Ct(e))return null;const t=Number(e.x),o=Number(e.y),r=Number(e.scale);if(!Number.isFinite(t)||!Number.isFinite(o)||!Number.isFinite(r)||r<=0)return null;const l=El();return{x:(l.width/2-t)/r,y:(l.height/2-o)/r,z:1400/r}}function bp(e){const t=String(e||"").trim();if(t)try{const o=JSON.parse(t);if(!Ct(o))return;const r={};for(const[l,m]of Object.entries(o)){const p=hp(m);p&&(r[l]=p)}return Object.keys(r).length>0?r:void 0}catch{return}}function yp(e){if(!e||Object.keys(e).length===0)return null;const t={};for(const[o,r]of Object.entries(e)){const l=fp(r);l&&(t[o]=l)}return Object.keys(t).length>0?JSON.stringify(t):null}function gs(e){return/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(e)}function Ss(){return crypto.randomUUID()}function qr(e){return Ct(e)?"ContentType"in e||"Prompt"in e||"Response"in e||"PositionX"in e||"PositionY"in e||"SourceFilePath"in e||"ImageStack"in e:!1}function Pd(e){const t=W(e).trim();if(!t)return null;try{return JSON.parse(t)}catch{return null}}function Mr(e){if(Array.isArray(e))return e;if(!Ct(e))return[];for(const t of["Nodes","nodes","Items","items","Content","content","Upserts","upserts"])if(t in e){const o=e[t];if(Array.isArray(o))return o;const r=Pd(o);if(r)return Mr(r)}for(const t of["ContentJson","contentJson","content_json"])if(t in e){const o=Pd(e[t]);if(o)return Mr(o)}return qr(e)?[e]:[]}function Jr(e){return Ct(e)?"BoardId"in e&&("Upserts"in e||"upserts"in e||"Deletes"in e||"deletes"in e):!1}function Pl(e){if(!Ct(e))return 0;for(const t of["Deletes","deletes"]){const o=e[t];if(Array.isArray(o))return o.length}return 0}function hs(e){return Mr(e).filter(qr)}function _l(e){return hs(e).length}function xp(e,t){var m;const o=[...hs(e)];if(!Jr(t))return o;const r=new Set;for(const p of["Deletes","deletes"]){const b=t[p];if(Array.isArray(b))for(const c of b){const y=W(c).trim();y&&r.add(y)}}if(r.size>0)for(let p=o.length-1;p>=0;p-=1){const b=W((m=o[p])==null?void 0:m.Id).trim();b&&r.has(b)&&o.splice(p,1)}const l=new Map;o.forEach((p,b)=>{const c=W(p.Id).trim();c&&l.set(c,b)});for(const p of hs(t)){const b=W(p.Id).trim(),c=b?l.get(b):void 0;if(c!==void 0){o[c]=p;continue}b&&l.set(b,o.length),o.push(p)}return o}function Dl(e){const t=Array.isArray(e)?e.filter(Ct):[];return new Map(t.filter(o=>o.NodeId).map(o=>[String(o.NodeId),o]))}async function Tr(e,t){for(const o of e)try{const r=await Yr(o,t);return{payload:JSON.parse(r.content),path:o}}catch{}return null}async function Cp(e,t){const o=`.mindexec/boards/${e}.msgpack`,r=`boards/${e}.msgpack`;for(const b of[o,r])try{const c=await rm(b,t);return{payload:Em(c),format:b===o?"msgpack":"legacy-msgpack",path:b}}catch{}const l=`.mindexec/boards/${e}.json`,m=`boards/${e}.json`,p=await Tr([l,m],t);if(p)return{payload:p.payload,format:p.path===l?"json":"legacy-json",path:p.path};throw new Error(`LocalBridge board file not found: ${o}, ${r}, ${l}, ${m}`)}function Rr(e){const t=W(e.Id).trim()||W(e.BoardId).trim();return t?{Id:t,Title:W(e.Title)||null,Description:W(e.Description)||null,ThumbnailUrl:W(e.ThumbnailUrl)||null,CreatedAt:W(e.CreatedAt)||null,UpdatedAt:W(e.UpdatedAt)||null,LastCameraX:Number.isFinite(Number(e.LastCameraX))?Number(e.LastCameraX):null,LastCameraY:Number.isFinite(Number(e.LastCameraY))?Number(e.LastCameraY):null,LastCameraZ:Number.isFinite(Number(e.LastCameraZ))?Number(e.LastCameraZ):null,LastCursorX:Number.isFinite(Number(e.LastCursorX))?Number(e.LastCursorX):null,LastCursorY:Number.isFinite(Number(e.LastCursorY))?Number(e.LastCursorY):null,CameraBookmarks:W(e.CameraBookmarks)||null}:null}function _d(e){return!Ct(e)||qr(e)?!1:"Title"in e||"Description"in e||"ThumbnailUrl"in e||"IsPublic"in e||"LastCameraX"in e||"LastCameraY"in e||"LastCameraZ"in e||"CameraBookmarks"in e||"BoardId"in e||"Upserts"in e||"upserts"in e||"Deletes"in e||"deletes"in e||"ContentJson"in e||"content_json"in e}function Zr(e){if(Array.isArray(e))return e.filter(_d).map(t=>Rr(t)).filter(t=>!!t);if(_d(e)){const t=Rr(e);return t?[t]:[]}return[]}function Sp(e){const t=e.toLowerCase();return kp(t)?"remote-control":wp(t)?"remote-monitor":t==="templatelauncher"||t==="template-launcher"||t.includes("template launcher")?"template-launcher":t.includes("directory")?"directory":t.includes("pdf")?"pdf":t.includes("file")?"file":t.includes("mask")?"mask":t.includes("image")?"image":t.includes("video")?"video":t.includes("embed")?"embed":t==="csv-table"||t.includes("csv-table")||t.includes("csv table")?"csv-table":t.includes("markdown")?"markdown":t.includes("code")?"code":t==="text"||t==="text/plain"||t.includes("plain-text")||t.includes("plain text")?"text":t.includes("ai")||t.includes("task")?"ai-task":t.includes("memo")?"memo":"note"}function kp(e){const t=e.trim().toLowerCase();if(!t)return!1;if(["remote-control","remote.control","remotecontrol","remote-device","remote.device","remotedevice","remote-fleet-device","remotefleet.device"].includes(t))return!0;const o=t.replace(/[^a-z0-9]+/g,"");return o.includes("remotecontrol")||o.includes("remotedevice")||o.includes("remotefleetdevice")}function wp(e){const t=e.trim().toLowerCase();if(!t)return!1;if(["remote-monitor","remote.monitor","remotemonitor","remote-hub-monitor","remotehub.monitor","remotehub-monitor","multi-desktop-monitor","multidesktop.monitor","smartview.monitor"].includes(t))return!0;const o=t.replace(/[^a-z0-9]+/g,"");return o.includes("remotemonitor")||o.includes("remotehubmonitor")||o.includes("multidesktopmonitor")||o.includes("smartviewmonitor")}function vp(e,t){const o=e.Metadata||{},r=o.ThumbnailUrl,l=o.OriginalUrl,m=o.OriginalPath;return Xr(W(r)||W(l)||W(m)||W(e.Response),t)}function jp(e,t,o){const r=e.ImageStack,l=Array.isArray(r==null?void 0:r.Variants)?r.Variants:[];if(l.length===0)return;const m=l.map((b,c)=>{const y=W(b.AssetId).trim(),w=Xr(y,o)||t;return w?{variantId:W(b.VariantId)||`variant-${W(e.Id)||c}`,imageUrl:w,assetId:y||void 0,caption:W(b.Caption)||void 0,sourceNodeId:W(e.Id)||void 0,createdAtUtc:W(b.CreatedAtUtc)||void 0}:null}).filter(b=>!!b);if(m.length===0)return;const p=W(r==null?void 0:r.ActiveVariantId);return{activeVariantId:m.some(b=>b.variantId===p)?p:m[0].variantId,variants:m,kind:W(r==null?void 0:r.Kind)||"versions",title:W(r==null?void 0:r.Title)||void 0,updatedAtUtc:W(r==null?void 0:r.UpdatedAtUtc)||void 0}}function Ip(e,t){return!e||e.variants.length===0?t:(e.variants.find(r=>r.variantId===e.activeVariantId)??e.variants[0]).imageUrl||t}function Np(e,t,o){var p,b,c,y,w,L;const r=(b=(p=e.imageStack)==null?void 0:p.variants)!=null&&b.length?e.imageStack.variants:e.imageUrl?[{variantId:`${e.id}:image`,imageUrl:e.imageUrl,assetId:go(e.imageUrl,t)||e.imageUrl,title:e.title,sourceNodeId:e.id,createdAtUtc:o}]:[];if(r.length===0)return null;const l=r.map(I=>({VariantId:I.variantId||Ss(),AssetId:I.assetId||go(I.imageUrl,t)||I.imageUrl,CreatedAtUtc:I.createdAtUtc||o,Caption:I.caption||I.title||null}));return{ActiveVariantId:(c=e.imageStack)!=null&&c.activeVariantId&&l.some(I=>{var D;return I.VariantId===((D=e.imageStack)==null?void 0:D.activeVariantId)})?e.imageStack.activeVariantId:l[0].VariantId||"",Variants:l,Kind:((y=e.imageStack)==null?void 0:y.kind)||(l.length>1?"pile":"versions"),Title:((w=e.imageStack)==null?void 0:w.title)||e.title||null,UpdatedAtUtc:((L=e.imageStack)==null?void 0:L.updatedAtUtc)||o}}function Ap(e,t){const o=e.Metadata||{};return Xr(W(o.OriginalUrl)||W(o.OriginalPath)||W(o.SourceFilePath)||W(e.SourceFilePath)||W(e.Response),t)}function Mp(e){const t={};for(const[o,r]of Object.entries(e??{}))typeof r=="string"?t[o]=r:r!=null&&(t[o]=String(r));return t}function Tp(e){switch(e){case"remote-monitor":return"remote-monitor";case"remote-control":return"remote-control";case"template-launcher":return"templateLauncher";case"directory":return"directory";case"pdf":return"pdf";case"file":return"file";case"image":return"image";case"mask":return"mask";case"video":return"video";case"embed":return"embed";case"code":return"code";case"markdown":return"markdown";case"csv-table":return"csv-table";case"memo":return"memo";case"text":return"text";case"ai-task":return"note";default:return"note"}}function go(e,t){const o=String(e||"").trim();if(!o)return"";const r=t.replace(/\/+$/,"");return o.startsWith(`${r}/`)?o.slice(r.length+1):o.replace(/^\/+/,"")}function Rp(e,t){const o=new Map;for(const r of e){const l=t.get(r.from),m=t.get(r.to);!l||!m||o.has(m)||o.set(m,l)}return o}function Lp(e){const t=new Set;return e.map(o=>{var c,y;const r=((c=o.metadata)==null?void 0:c[Pa])||"",l=gs(r)?r:gs(o.id)?o.id:"",m=!!(l&&t.has(l)),p=l&&!m?l:Ss(),b=((y=o.metadata)==null?void 0:y[Pa])!==p;return t.add(p),{node:b?{...o,metadata:{...o.metadata??{},[Pa]:p}}:o,originalId:p,assignedNodeId:!l||m,metadataStamped:b,duplicateOriginalId:m}})}function Ep(e,t,o,r,l){var y,w,L;const m=Tp(e.kind),p=m==="image"||m==="mask"?go(e.imageUrl,l):"",b=["video","pdf","file","directory","embed"].includes(m)?go(e.assetUrl||e.sourceFilePath||e.body,l):"",c={...e.metadata??{},[Pa]:t,ReactNodeId:e.id,ReactKind:e.kind};if(e.kind==="remote-monitor"&&(c.RemoteHub??(c.RemoteHub="Gated"),c.RemoteRoute??(c.RemoteRoute="Gated"),c.RemoteConnected??(c.RemoteConnected="0"),c.RemoteTotal??(c.RemoteTotal="30"),c.RemotePage??(c.RemotePage="1/1"),c.AdapterState??(c.AdapterState="adapter-gated")),e.kind==="remote-control"&&(c.SemanticType??(c.SemanticType="RemoteFleetDevice"),c.RemoteFleetSchemaVersion??(c.RemoteFleetSchemaVersion="remote-fleet-device@1"),c.RemoteRoute??(c.RemoteRoute="Gated"),c.RemoteInput??(c.RemoteInput="Off"),c.AdapterState??(c.AdapterState="adapter-gated")),e.kind==="mask"&&(c.ImageRouterMask??(c.ImageRouterMask="true"),c.SemanticType??(c.SemanticType="ImageEditMask")),e.kind==="embed"){const I=e.assetUrl||e.body||e.sourceFilePath||"";c.source??(c.source="embed"),c.renderMode??(c.renderMode="card"),c.provider??(c.provider="web"),c.sourceUrl??(c.sourceUrl=I),c.url??(c.url=I),c.AdapterState??(c.AdapterState="local-reference")}return e.kind==="video"&&(c.assetKind??(c.assetKind="video"),c.videoMode??(c.videoMode=(y=e.assetUrl)!=null&&y.startsWith(l)?"local_bridge":"local_reference"),c.AdapterState??(c.AdapterState=((w=e.metadata)==null?void 0:w.PromptOnly)==="true"?"adapter-gated":"local-reference")),(L=e.tags)!=null&&L.length&&(c.ReactTags=JSON.stringify(e.tags)),p&&(c.OriginalUrl=p,c.ThumbnailUrl=p),b&&(c.OriginalPath=b,c.SourceFilePath=b),{Id:t,ContentType:m,Prompt:e.title||m,Response:m==="image"||m==="mask"?p||e.body||null:m==="remote-monitor"?e.body||"RemoteHub monitor node. Frames and input stay adapter-gated until LocalBridge is connected.":m==="remote-control"?e.body||"Remote device control node. Frames and input stay adapter-gated until LocalBridge is connected.":b||e.body||null,PositionX:e.x,PositionY:e.y,PositionZ:0,IsLoading:e.status==="running",Width:Math.round(e.width),Height:Math.round(e.height),Children:[],ParentId:o||null,IsExpanded:!!e.isExpanded,OriginalHeight:Math.round(e.originalHeight??0),IsAiEnabled:e.aiEnabled!==!1,IsChunkedText:!!e.isChunkedText,TotalLineCount:Math.round(e.totalLineCount??0),SourceFilePath:e.sourceFilePath||b||null,ScrollOffset:e.scrollOffset??0,MaxScroll:e.maxScroll??0,CreatedAt:r,UpdatedAt:r,IsWordWrap:e.wordWrap??e.kind!=="code",Metadata:c,ImageStack:m==="image"?Np(e,l,r):null}}function Pp(e,t){return{NodeId:t,PositionX:e.x,PositionY:e.y,PositionZ:0,Width:Math.round(e.width),Height:Math.round(e.height),IsExpanded:!!e.isExpanded,OriginalHeight:Math.round(e.originalHeight??0)}}function _p(e,t,o){const r=W(e.ContentType)||"note",l=W(e.Prompt).trim(),m=W(e.Response).trim(),p=Mp(e.Metadata),b=W(e.Id).trim();b&&(p[Pa]??(p[Pa]=b));const y=["true","1","yes"].includes(String(p.ImageRouterMask||p.IsMask||"").trim().toLowerCase())?"mask":Sp(r),w=y==="memo"&&["mindcanvasagent","agentcommand"].includes(String(p.SemanticType||p.semanticType||"").trim().toLowerCase()),L=y==="memo"&&["codenote","code-note"].includes(String(p.SemanticType||p.semanticType||"").trim().toLowerCase()),I=W(e.SourceFilePath)||p.OriginalPath||p.SourceFilePath||"",D=y==="video"||y==="pdf"||y==="file"||y==="directory"||y==="embed"?Ap(e,o):void 0,q=l||e.SourceFilePath||r||"LocalBridge node",$=y==="image"?m||l||"Image asset":y==="mask"?m||l||"Image mask asset":y==="remote-monitor"?m||l||"RemoteHub monitor node. Frames and input stay adapter-gated until LocalBridge is connected.":y==="remote-control"?m||l||I||"Remote device control node. Frames and input stay adapter-gated until LocalBridge is connected.":y==="pdf"||y==="file"||y==="directory"||y==="embed"?m||I||l||r:m||l||I||"",O=w?500:L?400:y==="remote-monitor"?860:y==="remote-control"||y==="template-launcher"?560:y==="csv-table"?720:y==="embed"?460:y==="video"?420:y==="markdown"?380:y==="text"||y==="image"||y==="mask"?360:320,G=w||L?300:y==="remote-monitor"?640:y==="remote-control"?390:y==="template-launcher"?620:y==="csv-table"?420:y==="embed"?260:y==="video"?236:y==="markdown"?240:y==="text"?210:y==="image"||y==="mask"?260:180,V=y==="image"||y==="mask"?vp(e,o):void 0,re=y==="image"?jp(e,V,o):void 0,oe=!!(e.IsChunkedText||p.IsChunkedText==="true"),Ae=sa(e.TotalLineCount??p.TotalLineCount,0),be=sa(e.ScrollOffset,0),Ue=sa(e.MaxScroll,0);return{id:String(e.Id||crypto.randomUUID()),kind:y,title:y==="remote-monitor"?l||"Multi Desktop Monitor":y==="remote-control"?l||p.RemoteFleetDeviceName||"Remote Device":y==="template-launcher"?l||"Template Launcher":q,body:$,x:sa((t==null?void 0:t.PositionX)??e.PositionX,0),y:sa((t==null?void 0:t.PositionY)??e.PositionY,0),width:Math.max(160,Math.min(900,sa((t==null?void 0:t.Width)??e.Width,O))),height:Math.max(120,Math.min(900,sa((t==null?void 0:t.Height)??e.Height,G))),status:e.IsLoading?"running":y==="ai-task"?"idle":void 0,imageUrl:Ip(re,V),imageStack:re,assetUrl:D,sourceFilePath:I||void 0,isChunkedText:oe||void 0,totalLineCount:oe?Ae:void 0,scrollOffset:oe?be:void 0,maxScroll:oe?Ue:void 0,isExpanded:typeof e.IsExpanded=="boolean"?e.IsExpanded:void 0,originalHeight:sa(e.OriginalHeight,0)||void 0,tags:w?["Agent Command",p.AgentCommandRequestedRole||"Researcher",p.AgentCommandStatus||"Draft"]:L?["Code Note",p.CodeNoteStatus||"Draft",p.CodeNoteSyncState||"Unlinked"]:y==="remote-monitor"?["Remote","Monitor","LocalBridge"]:y==="remote-control"?["Remote","Control","LocalBridge"]:["LocalBridge",r],metadata:y==="remote-monitor"?Dp(p):y==="remote-control"?Bp(p):p,role:e.IsAiEnabled?"ai-enabled":void 0,aiEnabled:typeof e.IsAiEnabled=="boolean"?e.IsAiEnabled:void 0,wordWrap:typeof e.IsWordWrap=="boolean"?e.IsWordWrap:void 0}}function Dp(e){return{RemoteHub:"Gated",RemoteRoute:"Gated",RemoteConnected:"0",RemoteTotal:"30",RemotePage:"1/1",AdapterState:"adapter-gated",...e}}function Bp(e){return{SemanticType:"RemoteFleetDevice",RemoteFleetSchemaVersion:"remote-fleet-device@1",RemoteFleetDeviceId:"",RemoteFleetDeviceName:"Remote Device",RemoteFleetDevicePlatform:"unknown",RemoteFleetDeviceConnected:"false",RemoteInput:"Off",RemoteHub:"Gated",RemoteRoute:"Gated",RemoteBaseUrl:"http://127.0.0.1:5147",AdapterState:"adapter-gated",...e}}function Op(e,t){const o=[];for(const r of e){const l=String(r.Id||""),m=String(r.ParentId||"");!l||!m||!t.has(l)||!t.has(m)||o.push({id:`edge-local-${m}-${l}`,from:m,to:l,kind:"context"})}return o}async function Fp(e=xs()){const t=await Yr(".mindexec/boards/_metadata.json",e),o=JSON.parse(t.content);return(Array.isArray(o)?o.filter(Ct):[]).map(m=>Rr(m)).filter(m=>!!m).sort((m,p)=>String(p.UpdatedAt||"").localeCompare(String(m.UpdatedAt||"")))}async function $p(e){try{const t=await Yr(".mindexec/boards/_metadata.json",e),o=JSON.parse(t.content);return Array.isArray(o)?o.filter(Ct):[]}catch{return[]}}async function zp(e,t,o,r=xs(),l=null){var lt,Me,le,Tt,me,He;if((lt=e.source)!=null&&lt.partialImport)throw new Error("This board was imported from a partial original payload. Export is blocked to avoid data loss.");if((Me=e.source)!=null&&Me.truncated)throw new Error("This board was truncated during import. Export is blocked to avoid data loss.");const m=(le=e.source)!=null&&le.exportedByReact?String(e.source.boardId||""):"",p=gs(m),b=gs(m)?m:Ss(),c=new Date().toISOString(),y=Lp(e.nodes),w=y.map(ee=>ee.node),L=new Map(y.map(ee=>[ee.node.id,ee.originalId])),I=Rp(e.edges,L),D=y.map(({node:ee,originalId:ct})=>Ep(ee,ct,I.get(ct),c,r)),q=y.map(({node:ee,originalId:ct})=>Pp(ee,ct)),$=t.scale>0?t.scale:1,O=(window.innerWidth/2-t.x)/$,G=(window.innerHeight/2-t.y)/$,V=1400/$,re=Number((l==null?void 0:l.x)??((Tt=e.viewState)==null?void 0:Tt.cursorX)??0),oe=Number((l==null?void 0:l.y)??((me=e.viewState)==null?void 0:me.cursorY)??0),Ae=(He=e.nodes.find(ee=>ee.kind==="image"&&ee.imageUrl))==null?void 0:He.imageUrl,be={Id:b,UserId:"00000000-0000-0000-0000-000000000000",Title:e.name||"Untitled Board",Description:"Exported from MindExec React",ThumbnailUrl:go(Ae,r)||"",IsPublic:!1,CreatedAt:c,SyncedCloudBoardId:null,LastSyncedAt:null,LastCloudCopyStatus:null,UpdatedAt:c,LastCameraX:O,LastCameraY:G,LastCameraZ:V,LastCursorX:Number.isFinite(re)?re:0,LastCursorY:Number.isFinite(oe)?oe:0,CameraBookmarks:yp(e.settings.cameraBookmarks)},Ue=`.mindexec/boards/${b}.msgpack`,et=`.mindexec/boards/${b}.json`,tt=`.mindexec/boards/${b}.layout.json`,he=`.mindexec/boards/${b}.delta.json`,J=`boards/${b}.delta.json`,ie=await $p(r),se=[be,...ie.filter(ee=>W(ee.Id)!==b)],St=Lm(D);await sm(Ue,St,o,r),await Ks(et,JSON.stringify(D,null,2),o,r),await Ks(tt,JSON.stringify(q,null,2),o,r),await Ks(".mindexec/boards/_metadata.json",JSON.stringify(se,null,2),o,r);const F=await Promise.allSettled([ud(he,o,r),ud(J,o,r)]);return f.emit("localBridge.board.exported",{boardId:b,nodes:D.length,edges:e.edges.length,snapshotFormat:"msgpack",msgpackBytes:St.byteLength,jsonMirror:!0,deltaCleared:F.some(ee=>ee.status==="fulfilled"&&ee.value.success),reusedBoardId:p,stableNodeIds:y.length,assignedNodeIds:y.filter(ee=>ee.assignedNodeId).length,metadataStampedNodeIds:y.filter(ee=>ee.metadataStamped).length,duplicateOriginalNodeIds:y.filter(ee=>ee.duplicateOriginalId).length}),{metadata:be,source:{kind:"localBridge",boardId:b,loadedAt:c,originalNodeCount:D.length,renderedNodeCount:D.length,truncated:!1,exportedByReact:!0,snapshotFormat:"msgpack"},nodes:w,msgpackPath:Ue,boardPath:et,layoutPath:tt}}async function Up(e,t,o=xs()){const r=await Cp(e.Id,o);let l=new Map;const m=await Tr([`.mindexec/boards/${e.Id}.layout.json`,`boards/${e.Id}.layout.json`],o);m&&(l=Dl(m.payload));let p=null;const b=await Tr([`.mindexec/boards/${e.Id}.delta.json`,`boards/${e.Id}.delta.json`],o);b&&(p=b.payload);const c=p?Zr(p)[0]:null,y=!!(p&&Jr(p)),w=y?xp(r.payload,p):r.payload;return Bl(w,t,{boardId:(c==null?void 0:c.Id)??e.Id,title:(c==null?void 0:c.Title)||e.Title||"LocalBridge Board",updatedAt:(c==null?void 0:c.UpdatedAt)??e.UpdatedAt,layoutPayload:Array.from(l.values()),baseUrl:o,cameraBookmarks:(c==null?void 0:c.CameraBookmarks)??e.CameraBookmarks,lastCursorX:(c==null?void 0:c.LastCursorX)??e.LastCursorX,lastCursorY:(c==null?void 0:c.LastCursorY)??e.LastCursorY,deltaApplied:y,deltaUpserts:p?_l(p):0,deltaDeletes:p?Pl(p):0,snapshotFormat:r.format})}function Bl(e,t,o={}){const r=hs(e),l=Jr(e),m=o.deltaUpserts??(l?r.length:0),p=o.deltaDeletes??(l?Pl(e):0),b=o.layoutPayload?Dl(o.layoutPayload):new Map,c=r.slice(0,gp),y=c.map(oe=>_p(oe,b.get(String(oe.Id||"")),o.baseUrl??xs())),w=new Set(y.map(oe=>oe.id)),L=Op(c,w),I=r.length>y.length,D=l,q=o.deltaApplied===!0,$=o.boardId||Ss(),O=o.updatedAt||new Date().toISOString(),G=Number(o.lastCursorX),V=Number(o.lastCursorY),re=Number.isFinite(G)&&Number.isFinite(V);return f.emit("localBridge.board.loaded",{boardId:$,nodes:y.length,originalNodes:r.length,truncated:I,snapshotFormat:o.snapshotFormat,partialImport:D,deltaImport:l,deltaApplied:q,deltaUpserts:m,deltaDeletes:p}),{id:`localBridge:${$}`,name:o.title||"LocalBridge Board",nodes:y,edges:L,settings:{...t,cameraBookmarks:bp(o.cameraBookmarks)},viewState:re?{cursorX:G,cursorY:V}:void 0,updatedAt:O,source:{kind:"localBridge",boardId:$,loadedAt:new Date().toISOString(),snapshotFormat:o.snapshotFormat,originalNodeCount:r.length,renderedNodeCount:y.length,truncated:I,partialImport:D,deltaImport:l,deltaApplied:q}}}const Qr=["id","user_id","title","description","content_json","thumbnail_url","is_public","created_at","updated_at","last_camera_x","last_camera_y","last_camera_z","last_cursor_x","last_cursor_y","camera_bookmarks"].join(","),Hp=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;function Wp(e){if(Hp.test(e))return e;if(typeof crypto<"u"&&"randomUUID"in crypto)return crypto.randomUUID();throw new Error("A browser crypto.randomUUID implementation is required to create cloud boards.")}function Ol(e){if(!e)return{};if(Array.isArray(e))return{nodes:e};if(typeof e=="object")return e;if(typeof e!="string"||!e.trim())return{};try{const t=JSON.parse(e);if(Array.isArray(t))return{nodes:t};if(t&&typeof t=="object")return t}catch{return{}}return{}}function Vp(e){return JSON.stringify({id:e.id,name:e.name,nodes:e.nodes,edges:e.edges,settings:e.settings,viewState:e.viewState,updatedAt:e.updatedAt})}function Lr(e,t=new Date().toISOString()){return e&&!Number.isNaN(Date.parse(e))?e:t}function ei(e){return(e==null?void 0:e.trim().slice(0,90))||"Untitled Board"}function Fl(e){const t=Ol(e.content_json),o=Lr(e.updated_at??t.updatedAt);return{id:e.id,name:ei(e.title??t.name),updatedAt:o,createdAt:Lr(e.created_at,o),nodeCount:Array.isArray(t.nodes)?t.nodes.length:0,edgeCount:Array.isArray(t.edges)?t.edges.length:0,sourceKind:"cloud"}}function Yp(e,t){var w,L;const o=Ol(e.content_json),r=Lr(e.updated_at??o.updatedAt),l=Number((w=o.viewState)==null?void 0:w.cursorX),m=Number((L=o.viewState)==null?void 0:L.cursorY),p=Number(e.last_cursor_x),b=Number(e.last_cursor_y),c=Number.isFinite(l)&&Number.isFinite(m),y=Number.isFinite(p)&&Number.isFinite(b);return{id:e.id,name:ei(e.title??o.name),nodes:Array.isArray(o.nodes)?o.nodes:[],edges:Array.isArray(o.edges)?o.edges:[],settings:o.settings??t,viewState:c?{cursorX:l,cursorY:m}:y?{cursorX:p,cursorY:b}:void 0,updatedAt:r,source:{kind:"cloud",boardId:e.id,loadedAt:new Date().toISOString(),snapshotFormat:"supabase.boards.content_json",originalNodeCount:Array.isArray(o.nodes)?o.nodes.length:0,renderedNodeCount:Array.isArray(o.nodes)?o.nodes.length:0}}}async function ti(e){var c;const t=Nl(e);if(!t.cloudBoards.canAttempt)return f.emit("projectStorage.cloud.provider.skipped",{mode:t.cloudBoards.mode}),{userId:null,config:t,reason:t.cloudBoards.mode};const o=Cs(e);if(!o)return f.emit("projectStorage.cloud.provider.skipped",{mode:"config-missing"}),{userId:null,config:t,reason:"missing-client"};const{data:r,error:l}=await o.auth.getSession();if(l||!r.session)return f.emit("projectStorage.cloud.provider.sessionMissing",{message:(l==null?void 0:l.message)??"missing-session"}),{userId:null,config:t,reason:"missing-session"};const{data:m,error:p}=await o.auth.getUser(),b=((c=m.user)==null?void 0:c.id)??null;return p||!b?(f.emit("projectStorage.cloud.provider.sessionMissing",{message:(p==null?void 0:p.message)??"missing-user"}),{userId:null,config:t,reason:"missing-user"}):{userId:b,config:t,reason:"provider-ready"}}async function Xp(e){const t=await ti(e);if(!t.userId)return[];const o=Cs(e);if(!o)return[];f.emit("projectStorage.cloud.list.requested");const{data:r,error:l}=await o.from("boards").select(Qr).eq("user_id",t.userId).order("updated_at",{ascending:!1}).limit(50);if(l)throw f.emit("projectStorage.cloud.provider.failed",{operation:"list",message:l.message}),l;const m=(r??[]).map(Fl);return f.emit("projectStorage.cloud.list.loaded",{count:m.length}),m}async function Gp(e,t,o){const r=await ti(e);if(!r.userId)return null;const l=Cs(e);if(!l)return null;f.emit("projectStorage.cloud.load.requested",{boardId:t});const{data:m,error:p}=await l.from("boards").select(Qr).eq("user_id",r.userId).eq("id",t).maybeSingle();if(p)throw f.emit("projectStorage.cloud.provider.failed",{operation:"load",boardId:t,message:p.message}),p;if(!m)return null;const b=Yp(m,o);return f.emit("projectStorage.cloud.load.loaded",{boardId:t,nodes:b.nodes.length,edges:b.edges.length}),b}async function Kp(e,t,o,r=null){var re,oe;const l=await ti(e);if(!l.userId)return null;const m=Cs(e);if(!m)return null;const p=Wp(t.id),b=new Date().toISOString(),c=ei(t.name),y=Number((r==null?void 0:r.x)??((re=t.viewState)==null?void 0:re.cursorX)??0),w=Number((r==null?void 0:r.y)??((oe=t.viewState)==null?void 0:oe.cursorY)??0),L={...t.viewState??{},cursorX:Number.isFinite(y)?y:0,cursorY:Number.isFinite(w)?w:0},I={...t,id:p,name:c,viewState:L,updatedAt:b},D={p_board_id:p,p_title:c,p_description:null,p_thumbnail_url:null,p_is_public:!1,p_created_at:null,p_updated_at:b,p_last_camera_x:o.x,p_last_camera_y:o.y,p_last_camera_z:o.scale,p_last_cursor_x:L.cursorX,p_last_cursor_y:L.cursorY,p_camera_bookmarks:JSON.stringify(t.settings.cameraBookmarks??{}),p_nodes:[],p_include_json_mirror:!0};f.emit("projectStorage.cloud.save.requested",{boardId:p,sourceBoardId:t.id,nodes:t.nodes.length,edges:t.edges.length});const{error:q}=await m.rpc("save_board_snapshot",D);if(q)throw f.emit("projectStorage.cloud.provider.failed",{operation:"save-rpc",boardId:p,message:q.message}),q;const $={content_json:Vp(I),updated_at:b},{data:O,error:G}=await m.from("boards").update($).eq("id",p).eq("user_id",l.userId).select(Qr).maybeSingle();if(G)throw f.emit("projectStorage.cloud.provider.failed",{operation:"save-json-mirror",boardId:p,message:G.message}),G;const V=O?Fl(O):{id:p,name:c,updatedAt:b,createdAt:b,nodeCount:t.nodes.length,edgeCount:t.edges.length,sourceKind:"cloud"};return f.emit("projectStorage.cloud.save.saved",{boardId:V.id,nodes:V.nodeCount,edges:V.edgeCount}),V}function Er(e){return e.length===0?{minX:0,minY:0,maxX:0,maxY:0}:e.reduce((t,o)=>({minX:Math.min(t.minX,o.x),minY:Math.min(t.minY,o.y),maxX:Math.max(t.maxX,o.x+o.width),maxY:Math.max(t.maxY,o.y+o.height)}),{minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY,maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY})}function qp(e,t={},o=Er(e),r){if(e.length===0)return{after:new Map,boundsAfter:o};const l=pg(t.mode),m=gg(t.order),p=hg(t.anchor),b=fg(t.sizeMode),c=Math.max(0,t.gapX??24),y=Math.max(0,t.gapY??24),w=Math.max(1,t.maxColumns??12),L=Pr(t.quantile??.75,.05,.95),I=e.map(Jp),D=dg(I,m),q=D.map(be=>be.width),$=D.map(be=>be.height),O=Math.max(1,t.cellWidth??Bd(q,L)),G=Math.max(1,t.cellHeight??Bd($,L)),V=Math.max(1,t.targetWidth??O),re=Math.max(1,t.targetHeight??G),oe=ig(p,o);if(l==="grid"){ng(D,b,V,re,O,G);const be=Dd(t.columns,w,o.maxX-o.minX,O,c);Qp(D,oe.x,oe.y,be,O,G,c,y)}else if(l==="masonry"){og(D,b==="preserve"?"uniformWidth":b,V);const Ue=Dd(t.columns,w,o.maxX-o.minX,V,c);eg(D,oe.x,oe.y,Ue,V,c,y)}else l==="stripHorizontal"?(sg(D,b==="preserve"?"uniformHeight":b,re),tg(D,oe.x,oe.y,c,re)):(rg(D,b==="preserve"?"uniformWidth":b,V),ag(D,oe.x,oe.y,y,V));let Ae=new Map(D.map(be=>[be.id,Zp(be)]));return p==="selectionBoundsCenter"&&(Ae=cg(o,Ae)),t.snapToGrid&&(Ae=ug(Ae,Math.max(1,t.gridSize??8))),{after:Ae,boundsAfter:Er(Array.from(Ae.values()))}}function Jp(e){return{...e,width:Math.max(1,e.width),height:Math.max(1,e.height)}}function Zp(e){return{x:e.x,y:e.y,width:Math.max(1,e.width),height:Math.max(1,e.height)}}function Qp(e,t,o,r,l,m,p,b){e.forEach((c,y)=>{const w=Math.floor(y/r),L=y%r,I=t+L*(l+p),D=o+w*(m+b);c.x=I+(l-c.width)/2,c.y=D+(m-c.height)/2})}function eg(e,t,o,r,l,m,p){const b=Array.from({length:r},()=>0);for(const c of e){const y=mg(b),w=t+y*(l+m);c.x=w+(l-c.width)/2,c.y=o+b[y],b[y]+=c.height+p}}function tg(e,t,o,r,l){let m=t;for(const p of e)p.x=m,p.y=o+(l-p.height)/2,m+=p.width+r}function ag(e,t,o,r,l){let m=o;for(const p of e)p.x=t+(l-p.width)/2,p.y=m,m+=p.height+r}function ng(e,t,o,r,l,m){if(t==="fitCellDownOnly")for(const p of e){const b=Math.min(1,l/p.width,m/p.height);p.width*=b,p.height*=b}else t==="uniformWidth"?ai(e,o):t==="uniformHeight"&&$l(e,r)}function og(e,t,o){if(t==="fitCellDownOnly"){for(const r of e){const l=Math.min(1,o/r.width);r.width*=l,r.height*=l}return}ai(e,o)}function sg(e,t,o){if(t==="fitCellDownOnly"){for(const r of e){const l=Math.min(1,o/r.height);r.width*=l,r.height*=l}return}$l(e,o)}function rg(e,t,o){if(t==="fitCellDownOnly"){for(const r of e){const l=Math.min(1,o/r.width);r.width*=l,r.height*=l}return}ai(e,o)}function ai(e,t){for(const o of e){if(o.width<=0)continue;const r=t/o.width;o.width=t,o.height=Math.max(1,o.height*r)}}function $l(e,t){for(const o of e){if(o.height<=0)continue;const r=t/o.height;o.height=t,o.width=Math.max(1,o.width*r)}}function Dd(e,t,o,r,l){if(typeof e=="number"&&e>0)return Math.round(Pr(e,1,t));if(o<=1||r<=1)return 1;const m=Math.floor((o+l)/(r+l));return!Number.isFinite(m)||m<1?1:Math.round(Pr(m,1,t))}function ig(e,t,o){return{x:t.minX,y:t.minY}}function dg(e,t){return t==="selectionOrder"?[...e].sort((o,r)=>o.selectionIndex-r.selectionIndex):lg(e)}function lg(e){const t=[...e].sort((c,y)=>c.y-y.y||c.x-y.x);if(t.length<=2)return t;const o=t.map(c=>c.height).sort((c,y)=>c-y),r=o[Math.floor(o.length/2)]??1,l=Math.max(16,r*.35),m=[];let p=[],b=Number.NaN;for(const c of t)p.length===0?(p=[c],b=c.y):Math.abs(c.y-b)<=l?(p.push(c),b=(b*(p.length-1)+c.y)/p.length):(m.push([...p].sort((y,w)=>y.x-w.x)),p=[c],b=c.y);return p.length>0&&m.push([...p].sort((c,y)=>c.x-y.x)),m.flat()}function cg(e,t){if(t.size===0)return t;const o=Er(Array.from(t.values())),r=e.minX+(e.maxX-e.minX)/2,l=e.minY+(e.maxY-e.minY)/2,m=o.minX+(o.maxX-o.minX)/2,p=o.minY+(o.maxY-o.minY)/2,b=r-m,c=l-p;return new Map(Array.from(t.entries()).map(([y,w])=>[y,{...w,x:w.x+b,y:w.y+c}]))}function ug(e,t){return new Map(Array.from(e.entries()).map(([o,r])=>[o,{...r,x:Od(r.x,t),y:Od(r.y,t)}]))}function Bd(e,t){if(e.length===0)return 1;const o=[...e].sort((b,c)=>b-c),r=(o.length-1)*t,l=Math.floor(r),m=Math.min(o.length-1,l+1),p=r-l;return o[l]*(1-p)+o[m]*p}function mg(e){let t=0;for(let o=1;o<e.length;o+=1)e[o]<e[t]&&(t=o);return t}function Od(e,t){return Math.round(e/t)*t}function pg(e){const t=ks(e);return t==="grid"?"grid":t==="striphorizontal"||t==="striph"?"stripHorizontal":t==="stripvertical"||t==="stripv"?"stripVertical":"masonry"}function gg(e){return ks(e)==="selectionorder"?"selectionOrder":"spatialReading"}function hg(e){const t=ks(e);return t==="selectionboundscenter"?"selectionBoundsCenter":t==="viewporttopleft"?"viewportTopLeft":"selectionBoundsTopLeft"}function fg(e){const t=ks(e);return t==="fitcelldownonly"?"fitCellDownOnly":t==="uniformwidth"?"uniformWidth":t==="uniformheight"?"uniformHeight":"preserve"}function ks(e){return String(e??"").trim().toLowerCase().replace(/[^a-z0-9]/g,"")}function Pr(e,t,o){return Math.min(o,Math.max(t,e))}const zl=300,Ul=50*1024*1024,bg=800;function ke(e){return typeof e=="string"?e.length*2:0}function yg(e){let t=256;if(t+=ke(e.id),t+=ke(e.kind),t+=ke(e.title),t+=ke(e.body),t+=ke(e.result),t+=ke(e.imageUrl),t+=ke(e.assetUrl),t+=ke(e.sourceFilePath),t+=(e.tags??[]).reduce((o,r)=>o+ke(r),0),e.metadata)for(const[o,r]of Object.entries(e.metadata))t+=ke(o)+ke(r);return e.imageStack&&(t+=128+ke(e.imageStack.title),t+=e.imageStack.variants.reduce((o,r)=>o+96+ke(r.variantId)+ke(r.imageUrl)+ke(r.assetId)+ke(r.title)+ke(r.caption),0)),t}function xg(e){let t=1024+ke(e.id)+ke(e.name)+ke(e.updatedAt);return t+=e.nodes.reduce((o,r)=>o+yg(r),0),t+=e.edges.length*128,t+=Object.entries(e.settings).reduce((o,[r,l])=>o+ke(r)+ke(typeof l=="string"?l:JSON.stringify(l)),0),t}function Hl(e,t={}){var o,r;return{board:e,description:((o=t.description)==null?void 0:o.trim())||"Board change",mergeKey:((r=t.mergeKey)==null?void 0:r.trim())||null,timestampMs:t.timestampMs??Date.now(),estimatedBytes:xg(e)}}function Fd(e,t={}){const o=t.maxEntries??zl,r=t.maxBytes??Ul;let l=e.slice(Math.max(0,e.length-o)),m=l.reduce((p,b)=>p+b.estimatedBytes,0);for(;l.length>1&&m>r;){const[p,...b]=l;m-=(p==null?void 0:p.estimatedBytes)??0,l=b}return l}function Ma(e,t,o={}){const r=Hl(t,o),l=o.mergeWindowMs??bg,m=e.slice(),p=m.at(-1);return p&&r.mergeKey&&p.mergeKey===r.mergeKey&&r.timestampMs-p.timestampMs<l?(m[m.length-1]={...p,description:r.description,timestampMs:r.timestampMs,estimatedBytes:Math.max(p.estimatedBytes,r.estimatedBytes)},Fd(m,o)):(m.push(r),Fd(m,o))}function Cg(e,t,o={}){const r=Hl(t,o),l=o.maxEntries??zl,m=o.maxBytes??Ul;let p=[r,...e].slice(0,l),b=p.reduce((c,y)=>c+y.estimatedBytes,0);for(;p.length>1&&b>m;){const c=p.at(-1);b-=(c==null?void 0:c.estimatedBytes)??0,p=p.slice(0,-1)}return p}function ws(e,...t){const o=e==null?void 0:e.metadata;if(!o)return"";for(const r of t){const l=o[r];if(typeof l=="string"&&l.trim())return l.trim()}return""}function eo(e,t){return!!ws(e,t)}function Wl(e){if(!e||!e.trim())return!1;const t=e.trim();return/^(https?:|blob:|data:|file:)/i.test(t)}function Vl(e){if(!e)return"";const t=ws(e,"OriginalPath");if(t)return t;const o=String(e.body||"").trim();return Wl(o)?"":o}function Yl(e){return e?Vl(e)||String(e.sourceFilePath||"").trim()||String(e.assetUrl||"").trim()||String(e.imageUrl||"").trim()||String(e.body||"").trim():""}function Xl(e){return ws(e,"ThumbnailUrl","thumbnailUrl")}function Sg(e){if(!e||e.kind!=="image")return!1;if(eo(e,"ImageGenerationProvider")||eo(e,"GeneratedImageSourceWidth")||eo(e,"GeneratedImageSourceHeight")||eo(e,"CodexImageQuality")||eo(e,"ImageRouterRevisedPrompt"))return!0;const t=ws(e,"RequestedMediaOperation");return["text2image","image2image","inpaint"].includes(t.toLowerCase())}function ni(e){if(!e)return"";if(e.kind==="image"||e.kind==="mask"){const t=Sg(e)?Vl(e):"",o=Xl(e),r=String(e.body||"").trim();return t||o||String(e.imageUrl||"").trim()||String(e.assetUrl||"").trim()||String(e.sourceFilePath||"").trim()||(Wl(r)?r:"")}return Yl(e)||String(e.assetUrl||"").trim()||String(e.sourceFilePath||"").trim()}function Gl(e){if(!e)return"";const t=Yl(e)||e.title||e.kind;return String(t||"").replace(/\\/g,"/").replace(/\/+$/,"").split("/").filter(Boolean).pop()||e.title||e.kind}const kg=2048,wg=16e3,nr=1024,or=64,vg=2048,sr=3,jg=16,Ig=256,Ng=new Set(["text","note","memo","markdown","code","directory"]),Ag=/[\p{L}\p{M}\p{N}]{2,}/gu,$d=4,Mg=8,zd=1.35;function Tg(e){return Ng.has(String(e||"").trim().toLowerCase())}function Rg(e){const t=e.map(Eg),o=new Map,r=new Map,l=new Map,m=new Map;for(const p of t){o.set(p.id,p);for(const b of p.tokens)rr(r,b,p.id);for(const b of p.prefixes)rr(l,b,p.id);for(const b of p.ngrams)rr(m,b,p.id)}return{documents:t,documentById:o,tokenIndex:r,prefixIndex:l,ngramIndex:m}}function Lg(e,t,o={}){const r=Math.max(1,Math.trunc(Number(o.limit||30))),l=rn(t),m=Ud(e,0,0,o.viewport,0);if(!l)return{hits:[],profile:m};const p=Array.from(Kl(l)),b=Array.from(ql(p)),c=Zl(l),y=Array.from(Jl(c)),w=new Map;for(const $ of p)ir(e.tokenIndex,$,w,8);for(const $ of b)ir(e.prefixIndex,$,w,$.length<=3?4:2);for(const $ of y)ir(e.ngramIndex,$,w,1.15);const L=Bg(e,w,r),I=Og(o.allowedContentTypes),D=[];for(const $ of L){const O=e.documentById.get($);if(!O||I&&!I.has(O.contentType))continue;const G=_g(O,l,p,y);if(G<=0)continue;const V=Dg(O,o.viewport??null);D.push({nodeId:O.id,score:G+V,textScore:G,viewportBoost:V})}D.sort(($,O)=>O.score-$.score||$.nodeId.localeCompare(O.nodeId));const q=D.slice(0,r);return{hits:q,profile:Ud(e,L.length,q.length,o.viewport,q.filter($=>$.viewportBoost>0).length)}}function rn(e){const t=String(e??"");if(!t.trim())return"";let o=t;try{o=t.normalize("NFKC")}catch{o=t}o=o.toLowerCase();let r="",l=!1;for(const m of o){if(/\s/u.test(m)){l||(r+=" ",l=!0);continue}Fg(m)||(r+=m,l=!1)}return r.trim()}function Kl(e){return new Set(e.match(Ag)??[])}function ql(e){const t=new Set;for(const o of e){if(!o.trim())continue;const r=Math.min(8,o.length);for(let l=2;l<=r;l+=1)t.add(o.slice(0,l))}return t}function Jl(e){const t=new Set;if(!e.trim())return t;if(e.length<=sr)return t.add(e),t;for(let o=0;o<=e.length-sr;o+=1)t.add(e.slice(o,o+sr));return t}function Eg(e){const t=String(e.kind??"").trim().toLowerCase(),o=La(e.prompt??e.title,kg),r=Tg(t)?La(e.response??e.body,wg):"",l=Pg(e.metadata,e.tags,e.metadataText),m=La(e.sourceFilePath||e.assetUrl,vg),p=rn(o),b=rn(r),c=rn(l),y=rn(m),w=rn(t),L=[p,c,y,b,w].filter(Boolean).join(" "),I=Kl(L);return{id:String(e.id),contentType:t,normalizedPrompt:p,normalizedResponse:b,normalizedMetadata:c,normalizedSourcePath:y,normalizedContentType:w,tokens:I,prefixes:ql(I),ngrams:Jl(Zl(L)),x:Number.isFinite(e.x)?e.x:0,y:Number.isFinite(e.y)?e.y:0,width:Number.isFinite(e.width)?e.width:1,height:Number.isFinite(e.height)?e.height:1}}function Pg(e,t,o){const r=[];let l=0;if(e)for(const[m,p]of Object.entries(e)){if(l>=or)break;!String(m??"").trim()&&!String(p??"").trim()||(r.push(La(m,128)),String(p??"").trim()&&r.push(La(p,nr)),l+=1)}return l<or&&(t!=null&&t.length)&&(r.push("tags",La(t.join(" "),nr)),l+=1),l<or&&(o!=null&&o.trim())&&r.push("metadata",La(o,nr)),r.join(" ")}function _g(e,t,o,r){let l=0;e.normalizedPrompt===t?l+=120:to(e.normalizedPrompt,t)&&(l+=54),to(e.normalizedMetadata,t)&&(l+=26),to(e.normalizedSourcePath,t)&&(l+=18),to(e.normalizedResponse,t)&&(l+=14),to(e.normalizedContentType,t)&&(l+=8);for(const m of o)e.tokens.has(m)&&(l+=7),e.normalizedPrompt.startsWith(m)&&(l+=10);for(const m of r)e.ngrams.has(m)&&(l+=.85);return l}function Dg(e,t){if(!t)return 0;const o=e.x+Math.max(1,e.width)/2,r=e.y+Math.max(1,e.height)/2,l=Math.abs(o-t.centerX)/Math.max(1,t.halfWidth),m=Math.abs(r-t.centerY)/Math.max(1,t.halfHeight),p=Math.sqrt(l*l+m*m);if(p<=1)return $d+(1-p)*Mg;if(p<=zd){const b=1-(p-1)/Math.max(.001,zd-1);return Math.max(0,b)*($d*.75)}return 0}function Bg(e,t,o){return t.size===0?e.documents.map(r=>r.id):Array.from(t.entries()).sort((r,l)=>l[1]-r[1]||r[0].localeCompare(l[0])).slice(0,Math.max(o*jg,Ig)).map(([r])=>r)}function Og(e){if(!e)return null;const t=new Set(Array.from(e,o=>String(o||"").trim().toLowerCase()).filter(Boolean));return t.size>0?t:null}function Ud(e,t,o,r,l){return{documentCount:e.documents.length,candidateCount:t,rankedCount:o,viewportBoosted:!!r,boostedCount:l,indexedTokenCount:e.tokenIndex.size,indexedPrefixCount:e.prefixIndex.size,indexedNGramCount:e.ngramIndex.size}}function rr(e,t,o){const r=e.get(t);if(r){r.add(o);return}e.set(t,new Set([o]))}function ir(e,t,o,r){const l=e.get(t);if(l)for(const m of l)o.set(m,(o.get(m)??0)+r)}function Zl(e){let t="";for(const o of e)/\s/u.test(o)||(t+=o);return t}function La(e,t){const o=String(e??"");return o.length<=t?o:o.slice(0,t)}function to(e,t){return!!(e&&t&&e.includes(t))}function Fg(e){const t=e.codePointAt(0)??0;return t<=31||t>=127&&t<=159}const $g=2147483647,zg="LocalBridge access is enabled, but the bridge is not reachable. Restart LocalBridge, allow Chrome local-network access, then reload MindCanvas.",Ug="Local storage is unavailable in the hosted app until browser local storage or LocalBridge access is available.",Hg="Local storage is unavailable. Check the browser-local storage state or LocalBridge connection.",Wg="Cloud projects are unavailable until Supabase and Cloudflare R2 are configured.",Vg="Login is required before cloud projects can be used.",Yg="Cloud projects are unavailable.";function Xg(e){return e.bridgeProviderConfigured||e.browserProviderConfigured||e.embeddedProviderConfigured}function _r(e,t=!0){const o={isAvailable:!1,bridgeReachable:!1,browserLocalAvailable:!1,embeddedLocalAvailable:!1,providerKind:"none",canBrowseWorkspace:!1};return e.bridgeProviderConfigured&&e.bridgeReachable?{...o,isAvailable:!0,bridgeReachable:!0,providerKind:"bridge",canBrowseWorkspace:!0}:e.hostedWebApp&&e.hostedLocalBridgeAccessEnabled&&e.bridgeProviderConfigured?{...o,providerKind:"bridge"}:e.browserProviderConfigured&&(e.browserLocalAvailable||t&&e.browserLocalAvailableWhenEmpty===!0)?{...o,isAvailable:!0,browserLocalAvailable:!0,providerKind:"browser"}:e.embeddedProviderConfigured&&e.supportsEmbeddedLocal?{...o,isAvailable:!0,embeddedLocalAvailable:!0,providerKind:"embedded"}:o}function Gg(e){return _r(e,!1).isAvailable?"local":oi(e)?"cloud":_r(e,!0).isAvailable?"local":e.cloudConfigured?"cloud":"local"}function oi(e){return e.cloudConfigured&&e.cloudSessionAvailable}function Kg(e,t){return t.providerKind==="bridge"&&!t.bridgeReachable?zg:e.hostedWebApp?Ug:Hg}function qg(e){return e.cloudConfigured?oi(e)?Yg:Vg:Wg}function Jg(e){var w,L,I;const t=oi(e),o=_r(e,!0),r=Xg(e),l=e.cloudConfigured,m=o.isAvailable,p=t;let b=e.storedMode??Gg(e);b==="cloud"&&(!l||!p&&m)?b=m?"local":"cloud":b==="local"&&(!r&&l||!m&&p)&&(b="cloud");const c=e.cloudAccess,y=((w=c==null?void 0:c.denialReason)==null?void 0:w.trim())||void 0;return{currentMode:b,showLocalTab:r,showCloudTab:l,isLocalAvailable:o.isAvailable,isCloudAvailable:t,requiresCloudSignIn:e.cloudConfigured&&!t,canUseLocalProjects:m,canBrowseLocalWorkspace:o.canBrowseWorkspace,localProviderKind:o.providerKind,canUseCloudProjects:p,canSyncLocalToCloud:m&&p,cloudPlanKey:((L=c==null?void 0:c.planKey)==null?void 0:L.trim())||"free",cloudEntitlementStatus:((I=c==null?void 0:c.entitlementStatus)==null?void 0:I.trim())||(c?"active":"inactive"),currentCloudBoardCount:(c==null?void 0:c.currentBoardCount)??0,cloudBoardLimit:(c==null?void 0:c.cloudBoardLimit)??$g,lockedCloudBoardCount:(c==null?void 0:c.lockedBoardCount)??0,canCreateCloudBoards:(c==null?void 0:c.canCreateBoard)??p,canUseManagedAi:(c==null?void 0:c.canUseManagedAi)??!1,canGenerateImage:(c==null?void 0:c.canGenerateImage)??!1,canUseContextPack:(c==null?void 0:c.canUseContextPack)??!1,cloudLimitMessage:y,localStatusMessage:o.isAvailable?void 0:Kg(e,o),cloudStatusMessage:p?void 0:qg(e)}}function Zg(){const e=new Error("Queued operation was cancelled before it started.");return e.name="AbortError",e}class Qg{constructor(){ld(this,"tails",new Map)}isBusy(t){return this.tails.has(t)}enqueue(t,o,r){if(typeof o!="function")throw new TypeError("KeyedAsyncQueue operation is required.");const l=this.tails.get(t)??Promise.resolve();let m;return m=(async()=>{try{try{await l}catch{}if(r!=null&&r.aborted)throw Zg();return await o(r)}finally{this.tails.get(t)===m&&this.tails.delete(t)}})(),this.tails.set(t,m),m}clear(t){if(typeof t>"u"){this.tails.clear();return}this.tails.delete(t)}}const Dr="mindexec-local-mode-warning-dismissed-v1";function eh(){try{return window.localStorage.getItem(Dr)==="true"}catch{return!1}}function Ql(e,t){var o,r;if(e==="checking")return"Checking bridge";if(e==="connected"){const l=(r=(o=t==null?void 0:t.exec)==null?void 0:o.model)==null?void 0:r.trim();return l?`Bridge / ${l}`:"Bridge connected"}return e==="blocked"?"Bridge gated":e==="unavailable"?"Bridge unavailable":"Bridge idle"}function th(e,t,o){var l,m,p,b,c;if(e!=="connected")return t||Ql(e,o);const r=[o!=null&&o.version?`version ${o.version}`:null,(l=o==null?void 0:o.exec)!=null&&l.model?`model ${o.exec.model}`:null,(m=o==null?void 0:o.exec)!=null&&m.reasoningEffort?`reasoning ${o.exec.reasoningEffort}`:null,(p=o==null?void 0:o.exec)!=null&&p.serviceTier?`tier ${o.exec.serviceTier}`:null,(b=o==null?void 0:o.exec)!=null&&b.preferredProviderKind?`codex ${o.exec.preferredProviderKind}`:null,(c=o==null?void 0:o.project)!=null&&c.isOpen?"project open":null].filter(Boolean);return r.length>0?`LocalBridge connected. ${r.join(" / ")}`:"LocalBridge connected."}function ah({state:e,message:t,status:o,hostedBridgeAccessEnabled:r,onRefresh:l,onEnableHostedBridge:m}){const p=g.useMemo(()=>e==="checking"?n.jsx(Ut,{size:14,className:"spin-icon"}):e==="connected"?n.jsx(Om,{size:14}):e==="blocked"?n.jsx(Al,{size:14}):e==="unavailable"?n.jsx(Fm,{size:14}):n.jsx(Gr,{size:14}),[e]);return n.jsxs("div",{className:`runtime-status-pill runtime-status-pill--${e}`,title:th(e,t,o),"data-testid":"bridge-status-pill","data-bridge-state":e,"data-bridge-access":r?"enabled":"gated",children:[n.jsx("span",{className:"runtime-status-pill__icon","aria-hidden":"true",children:p}),n.jsx("span",{children:Ql(e,o)}),e==="blocked"&&!r&&n.jsx("button",{type:"button",className:"runtime-status-pill__action",onClick:m,children:"Enable"}),n.jsx("button",{type:"button",className:"runtime-status-pill__button",title:"Refresh LocalBridge","data-testid":"bridge-status-refresh",onClick:()=>void l(),disabled:e==="checking",children:n.jsx(cn,{size:13})})]})}function nh({status:e,message:t}){const r={ready:{icon:n.jsx(jr,{size:14}),label:"Saved locally",title:"Board state is saved in this browser."},syncing:{icon:n.jsx(Ut,{size:14,className:"spin-icon"}),label:"Saving",title:"Saving board state to this browser."},error:{icon:n.jsx(Kr,{size:14}),label:"Save error",title:"Board state could not be saved locally."},offline:{icon:n.jsx(Gr,{size:14}),label:"Offline",title:"No sync adapter is connected."}}[e];return n.jsxs("div",{className:`runtime-status-pill runtime-status-pill--sync-${e}`,title:t||r.title,"data-testid":"sync-status-indicator","data-sync-status":e,children:[n.jsx("span",{className:"runtime-status-pill__icon","aria-hidden":"true",children:r.icon}),n.jsx("span",{children:r.label})]})}function oh({visible:e}){const[t,o]=g.useState(eh);if(!e||t)return null;const r=()=>{o(!0);try{window.localStorage.setItem(Dr,"true")}catch{}f.emit("runtimeStatus.localMode.dismissed")};return n.jsxs("section",{className:"runtime-local-warning",role:"status","data-testid":"local-mode-warning","data-local-mode-dismissed-key":Dr,children:[n.jsx("div",{className:"runtime-local-warning__icon","aria-hidden":"true",children:n.jsx(Kr,{size:16})}),n.jsxs("div",{className:"runtime-local-warning__copy",children:[n.jsx("strong",{children:"Local Mode"}),n.jsx("span",{children:"Boards are saved in this browser. LocalBridge export creates a file-backed copy."})]}),n.jsx("button",{type:"button",title:"Dismiss local mode warning","data-testid":"local-mode-dismiss",onClick:r,children:n.jsx(yt,{size:14})})]})}function sh({bridgeState:e,bridgeMessage:t,bridgeStatus:o,syncStatus:r,syncMessage:l,hostedBridgeAccessEnabled:m,onRefreshBridge:p,onEnableHostedBridge:b,showLocalModeWarning:c=!0}){return n.jsxs("aside",{className:"runtime-status-cluster","aria-label":"Runtime status","data-testid":"runtime-status-cluster","data-local-mode-visible":c?"true":"false",children:[n.jsxs("div",{className:"runtime-status-row",children:[n.jsx(ah,{state:e,message:t,status:o,hostedBridgeAccessEnabled:m,onRefresh:p,onEnableHostedBridge:b}),n.jsx(nh,{status:r,message:l})]}),n.jsx(oh,{visible:c})]})}const rh=/^data:image\//i;function ih(e){const t=String(e||"").trim();if(!t)return{src:null,reason:"empty",urlKind:"empty"};const o=t.toLowerCase();return rh.test(t)?{src:t,reason:null,urlKind:"data"}:o.startsWith("blob:")?{src:t,reason:null,urlKind:"blob"}:o.startsWith("https://")?{src:t,reason:null,urlKind:"https"}:o.startsWith("http://")?{src:t,reason:null,urlKind:"http"}:t.startsWith("//")?{src:t,reason:null,urlKind:"protocol-relative"}:t.startsWith("/")||t.startsWith("./")||t.startsWith("../")?{src:t,reason:null,urlKind:"relative"}:/^[a-z][a-z0-9+.-]*:/i.test(t)?{src:null,reason:"unsupported-protocol",urlKind:t.split(":",1)[0].toLowerCase()}:{src:t,reason:null,urlKind:"relative"}}function dr({src:e,alt:t="",className:o="",testId:r="secure-image",traceId:l,kind:m="image",title:p}){const b=g.useMemo(()=>ih(e),[e]),[c,y]=g.useState(b.src?"loading":"blocked");g.useEffect(()=>{const D=b.src?"loading":"blocked";y(D),b.src||f.emit("secureImage.blocked",{id:l,kind:m,reason:b.reason,urlKind:b.urlKind})},[m,b.reason,b.src,b.urlKind,l]);const w=()=>{y("loaded"),f.emit("secureImage.loaded",{id:l,kind:m,urlKind:b.urlKind})},L=()=>{y("error"),f.emit("secureImage.error",{id:l,kind:m,urlKind:b.urlKind})},I=c==="blocked"?`Image blocked: ${b.reason||"unsupported source"}`:"Image failed to load";return n.jsxs("div",{className:`secure-image secure-image--${c} ${o}`.trim(),"data-testid":r,"data-secure-image-state":c,"data-secure-image-kind":m,title:c==="loaded"?p:I,children:[b.src&&n.jsx("img",{src:b.src,alt:t,loading:"lazy",decoding:"async",draggable:!1,onLoad:w,onError:L}),c==="loading"&&n.jsx("span",{className:"secure-image__loading","aria-hidden":"true",children:n.jsx("span",{})}),(c==="blocked"||c==="error")&&n.jsx("span",{className:"secure-image__fallback",role:"img","aria-label":I,children:c==="blocked"?n.jsx($m,{size:18}):n.jsx(Kr,{size:18})})]})}const dh={note:ms,text:xt,"ai-task":un,image:pn,mask:pn,video:gn,embed:hn,code:mn,markdown:xt,"csv-table":xt,memo:ms,pdf:xt,file:Ir,directory:zm,"template-launcher":xt,"remote-monitor":us,"remote-control":us},lr=[{key:"Auto",label:"Auto Detect",description:"Infer whether this note is growth, revenue, build, or research work."},{key:"GeneralCompany",label:"General AI Company",description:"Balanced planning, practical work, and artifact production."},{key:"GrowthValidation",label:"Growth Validation",description:"Marketing loops, signals, messaging, distribution, and experiments."},{key:"RevenueAffiliate",label:"Revenue / Affiliate",description:"Affiliate discovery, keywords, content assets, and revenue experiments."},{key:"ProductBuild",label:"Product Build",description:"Specs, implementation-oriented work, artifacts, and approval gates."},{key:"ResearchOnly",label:"Research Only",description:"Evidence gathering, risks, synthesis, and recommendations."}],Hd=500,lh=48,ch=new Set(["mindcanvasagent","agentcommand"]),uh=new Set(["codenote","code-note"]),mh=["multidesktopmonitor","remotehubmonitor","remotefleetmonitor","smartviewmonitor"],ph=["remotedevice","remotefleetdevice","remotecontrol"];function gh(e){const t=fn(e,"SemanticType","semanticType","RemoteFleetSemanticType").trim().toLowerCase(),o=fn(e,"RemoteFleetNodeRole","remoteFleetNodeRole").trim().toLowerCase(),r=fn(e,"RemoteFleetSchemaVersion","remoteFleetSchemaVersion").trim().toLowerCase();return e.kind==="remote-monitor"||t==="remotefleetmonitor"||o==="fleet-monitor"||r==="remote-fleet@1"||tc(e,["RemoteFleetViewMode","RemoteFleetHubStatus","RemoteFleetDevicesJson","RemoteFleetDeviceCount","RemoteFleetConnectedDeviceCount","RemoteFleetProjectionMode","RemoteFleetCanvasPagination","RemoteHub","RemoteRoute","RemotePage","RemoteVisibleBudget"])||ec(e,mh,["remote","monitor"])}function hh(e){const t=fn(e,"SemanticType","semanticType","RemoteFleetSemanticType").trim().toLowerCase(),o=fn(e,"RemoteFleetNodeRole","remoteFleetNodeRole").trim().toLowerCase(),r=fn(e,"RemoteFleetSchemaVersion","remoteFleetSchemaVersion").trim().toLowerCase();return e.kind==="remote-control"||t==="remotefleetdevice"||o==="fleet-device"||r==="remote-fleet-device@1"||tc(e,["RemoteFleetDeviceId","RemoteFleetDeviceName","RemoteFleetDevicePlatform","RemoteFleetDeviceConnected","RemoteFleetDeviceCanControl","RemoteFleetSourceMonitorNodeId"])||ec(e,ph,["remote","control"])}function ec(e,t,o){const r=(e.tags??[]).map(b=>b.trim().toLowerCase()).filter(Boolean),l=o.every(b=>r.includes(b)),p=[e.title,e.body,e.sourceFilePath,e.assetUrl,...r].join(" ").toLowerCase().replace(/[^a-z0-9]+/g,"");return l||t.some(b=>p.includes(b))}function fn(e,...t){const o=e.metadata??{};for(const l of t){const m=o[l];if(m!=null)return String(m)}const r=new Set(t.map(l=>l.toLowerCase()));for(const[l,m]of Object.entries(o))if(r.has(l.toLowerCase())&&m!==void 0&&m!==null)return String(m);return""}function tc(e,t){const o=e.metadata??{},r=new Set(t.map(l=>l.toLowerCase()));return Object.entries(o).some(([l,m])=>r.has(l.toLowerCase())&&m!==void 0&&m!==null&&String(m).trim()!=="")}const Br=[{key:"coral",label:"Coral",swatch:"#ff8052",ring:"rgba(255, 128, 82, 0.22)",surface:"#fff2eb",border:"rgba(255, 128, 82, 0.42)",ink:"#7c2d12"},{key:"amber",label:"Amber",swatch:"#f59e0b",ring:"rgba(245, 158, 11, 0.22)",surface:"#fffbeb",border:"rgba(245, 158, 11, 0.42)",ink:"#78350f"},{key:"sun",label:"Sun",swatch:"#ca8a04",ring:"rgba(202, 138, 4, 0.22)",surface:"#fef9c3",border:"rgba(202, 138, 4, 0.38)",ink:"#713f12"},{key:"sage",label:"Sage",swatch:"#65a30d",ring:"rgba(101, 163, 13, 0.22)",surface:"#f7fee7",border:"rgba(101, 163, 13, 0.38)",ink:"#365314"},{key:"mint",label:"Mint",swatch:"#10b981",ring:"rgba(16, 185, 129, 0.22)",surface:"#ecfdf5",border:"rgba(16, 185, 129, 0.36)",ink:"#064e3b"},{key:"sky",label:"Sky",swatch:"#3b82f6",ring:"rgba(59, 130, 246, 0.22)",surface:"#eff6ff",border:"rgba(59, 130, 246, 0.36)",ink:"#1e3a8a"},{key:"indigo",label:"Indigo",swatch:"#6366f1",ring:"rgba(99, 102, 241, 0.22)",surface:"#eef2ff",border:"rgba(99, 102, 241, 0.36)",ink:"#312e81"},{key:"violet",label:"Violet",swatch:"#8b5cf6",ring:"rgba(139, 92, 246, 0.22)",surface:"#f5f3ff",border:"rgba(139, 92, 246, 0.36)",ink:"#4c1d95"},{key:"rose",label:"Rose",swatch:"#f43f5e",ring:"rgba(244, 63, 94, 0.22)",surface:"#fff1f2",border:"rgba(244, 63, 94, 0.36)",ink:"#881337"},{key:"gray",label:"Gray",swatch:"#6b7280",ring:"rgba(107, 114, 128, 0.22)",surface:"#f9fafb",border:"rgba(107, 114, 128, 0.32)",ink:"#374151"},{key:"slate",label:"Slate",swatch:"#64748b",ring:"rgba(100, 116, 139, 0.22)",surface:"#f8fafc",border:"rgba(100, 116, 139, 0.32)",ink:"#334155"}],fh=g.memo(function({node:t,selected:o,pulsing:r,connectionDraft:l,onSelect:m,onDragStart:p,onResizeStart:b,onPatch:c,onDelete:y,onDuplicate:w,onRun:L,onPin:I,onOpenResult:D,onToggleAiReference:q,onCopyNode:$,onCopyEmbedReference:O,onFitNodeHeight:G,onToggleNodeExpanded:V,onToggleWordWrap:re,onStageCompany:oe,onOpenCompanyGraph:Ae,onSyncCompanyGoal:be,onRefreshCompany:Ue,onSetCompanyStatus:et,onRemoveCompany:tt,onOpenAsset:he,onOpenDirectorySettings:J,onScanDirectory:ie,onCreateRemoteControl:se,onGenerateTemplateCard:St}){var Tn,wo,rt,Bt,ya,Va,Qt,Ya,te,Ye,Xa,Rn,v,Y,ae,Xe,Ln,Ot,Ga,Ka,En,Pn,qa,_n,xa,Dn,Ja,Ca,ea,De,Pe,Za,Bn,vo,Sa;const F=String(((Tn=t.metadata)==null?void 0:Tn.AutomationNodeKind)||((wo=t.metadata)==null?void 0:wo.AutomationTemplateKey)||((rt=t.metadata)==null?void 0:rt.AutomationInferredKind)||"").trim().toLowerCase(),lt=String(((Bt=t.metadata)==null?void 0:Bt.SemanticType)||((ya=t.metadata)==null?void 0:ya.semanticType)||"").trim().toLowerCase(),Me=t.kind==="memo"&&ch.has(lt),le=t.kind==="memo"&&uh.has(lt),Tt=String(((Va=t.metadata)==null?void 0:Va.AgentCommandStatus)||"Draft"),me=String(((Qt=t.metadata)==null?void 0:Qt.AgentCommandMode)||"Task"),He=String(((Ya=t.metadata)==null?void 0:Ya.AgentCommandRequestedRole)||"Researcher"),ee=String(((te=t.metadata)==null?void 0:te.CodeNoteStatus)||"Draft"),ct=String(((Ye=t.metadata)==null?void 0:Ye.CodeNoteSyncState)||"Unlinked"),Wt=String(((Xa=t.metadata)==null?void 0:Xa.CodeNoteKind)||"Feature"),_a=Me?un:le?mn:F==="image-generate"?pn:F==="video-generate"?gn:dh[t.kind],Cn=l&&l.from!==t.id,ho=t.kind==="ai-task",Re=t.kind==="pdf"||t.kind==="file"||t.kind==="directory",Da=gh(t),Vt=hh(t),Oe=Da||Vt,Te=Da?"monitor":Vt?"control":"",ce=t.kind==="template-launcher"||String(((Rn=t.metadata)==null?void 0:Rn.semanticType)||((v=t.metadata)==null?void 0:v.SemanticType)||"").toLowerCase()==="templatelauncher",kt=t.kind==="video",we=t.kind==="embed",wt=t.kind==="mask",ye=t.kind==="memo",at=t.kind==="markdown",nt=t.kind==="csv-table",Fe=ye?jh(t):null,pe=g.useRef(null),Sn=kt?ac(t):"",qe=kt?Nh(t):"",$e=we?Ah(t):"",vt=we?Mh(t):"",fo=we?Th(t,$e):"",_e=we?Rh(t):"",Le=(((Y=t.imageStack)==null?void 0:Y.variants)??[]).filter(x=>!!x.imageUrl),ut=Le.find(x=>{var P;return x.variantId===((P=t.imageStack)==null?void 0:P.activeVariantId)})??Le[0]??null,Rt=t.kind==="image"||wt?(ut==null?void 0:ut.imageUrl)||ni(t):"",la=ut?Le.findIndex(x=>x.variantId===ut.variantId):-1,Ba=!Rt&&!Re&&!Oe&&!ce&&!kt&&!we,bo=Ba&&!ye,Yt=t.isExpanded===!1&&Number(t.originalHeight??0)>t.height+1,kn=!Oe&&!["image","mask","video","embed","pdf","file","directory","template-launcher","remote-monitor","remote-control"].includes(t.kind),ot=t.aiEnabled!==!1,We=Ih(t),Je=!!(t.isChunkedText||((ae=t.metadata)==null?void 0:ae.IsChunkedText)==="true"),ca=Number(t.totalLineCount??((Xe=t.metadata)==null?void 0:Xe.TotalLineCount)??0),yo=t.sourceFilePath||((Ln=t.metadata)==null?void 0:Ln.FileName)||t.title,xe=Je?n.jsxs("div",{className:"node-chunked-text-state","data-testid":"node-chunked-text-state",title:yo,children:[n.jsx(xt,{size:12}),n.jsx("strong",{children:"Chunked text"}),Number.isFinite(ca)&&ca>0&&n.jsxs("span",{children:[ca.toLocaleString()," lines"]})]}):null,Xt=t.kind==="directory"?(Ot=t.metadata)==null?void 0:Ot.Include:null,Oa=t.kind==="directory"?(Ga=t.metadata)==null?void 0:Ga.Exclude:null,wn=t.kind==="directory"?(Ka=t.metadata)==null?void 0:Ka.DirectoryFileCount:null,Ee=t.kind==="directory"?(En=t.metadata)==null?void 0:En.DirectoryDirCount:null,jt=t.kind==="directory"?(Pn=t.metadata)==null?void 0:Pn.DirectoryLastScanUtc:null,[Fa,$a]=g.useState(!1),[za,Ve]=g.useState(null),[vs,vn]=g.useState(((qa=t.metadata)==null?void 0:qa.CompanyExecutionMode)||"Auto"),[ua,Ua]=g.useState(((_n=t.metadata)==null?void 0:_n.CompanySubAgents)!=="false"),[Gt,ma]=g.useState(!1),[It,Ha]=g.useState(null),pa=g.useMemo(()=>nt?Ch(t.body,It):null,[It,nt,t.body]),de=g.useMemo(()=>ce?vl(t.body):null,[ce,t.body]),mt=(de==null?void 0:de.options.find(x=>x.id===de.selectedOptionId))??(de==null?void 0:de.options[0])??null,Kt=im(de),Lt=lr.find(x=>x.key===vs)||lr[0],Et=String(((xa=t.metadata)==null?void 0:xa.CompanyStatus)||(t.companyMode?"Staged":"")).trim(),Pt=Et.toLowerCase(),qt=Pt==="paused",pt=Pt==="archived",js=x=>{x.stopPropagation();const P=x.currentTarget.getBoundingClientRect();Ve(yh(P)),$a(ne=>!ne)},Is=x=>{x.stopPropagation(),oe(t.id,{executionMode:Lt.key,enableSubAgents:ua}),$a(!1)},xo=x=>{x.stopPropagation(),Ae(t.id)},ga=(x,P)=>{P.stopPropagation();const ne=Le.find(ht=>ht.variantId===x);!ne||!t.imageStack||ne.variantId===t.imageStack.activeVariantId||(f.emit("node.imageStack.variant",{nodeId:t.id,variantId:ne.variantId,variantCount:Le.length}),c(t.id,{imageUrl:ne.imageUrl,imageStack:{...t.imageStack,activeVariantId:ne.variantId,variants:Le,updatedAtUtc:new Date().toISOString()},metadata:{...t.metadata??{},ImageStackActiveVariantId:ne.variantId}}))},Ns=(x,P)=>{if(P.stopPropagation(),!!ye){if((Fe==null?void 0:Fe.key)===x){ma(!1);return}f.emit("node.memoColor.changed",{id:t.id,colorKey:x}),c(t.id,{metadata:{...t.metadata??{},memoColor:x,memoColorIsCustom:"true"}}),ma(!1)}},jn=x=>{var Be,jo;if(x.stopPropagation(),!Me)return;const P=(t.body||t.title||"Agent command objective").trim(),ne=["Clarify the objective and constraints.","Collect linked canvas context or code notes.","Draft an execution plan before external adapter use."],ht=["canvas-context","agent-command-planning","adapter-gated-execution"],ze=["Canvas.ListAgentCommands","Canvas.UpdateAgentCommand","Canvas.PlanAgentCommand","Canvas.SetAgentCommandState"],Nt=["MindCanvasAgent",me,He],z=["Local React plan staged for this Agent Command.",`Role: ${He}`,`Mode: ${me}`,`Objective: ${P.slice(0,220)}`,"External execution remains adapter-gated until LocalBridge/agent runtime is available."].join(`
1
+ var qu=Object.defineProperty;var Ju=(e,t,o)=>t in e?qu(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var ld=(e,t,o)=>Ju(e,typeof t!="symbol"?t+"":t,o);import{j as n,r as g,a as Zu}from"./vendor-react-BXzpOyCS.js";import{l as Qu,a as ft,s as zt,b as em,d as tm,r as am,c as nm,e as om,i as cd}from"./storage-vDrcB8Ax.js";import{r as Yr,g as xs,w as sm,a as Ks,d as ud,b as rm,t as Xr,p as vl,v as im,R as dm,c as lm,u as cm,e as um,f as md,s as bt,i as an,l as qs,h as Gn,j as Uo,k as Kn,m as qn,n as Ho,o as Aa,q as pd,x as mm,y as Jn,z as pm,A as gm,B as hm,C as fm,D as jl,E as bm,F as ym,G as oo,H as Sr,I as xm,J as Cm,K as gd,L as kr,M as wr,N as Il,O as Wo,P as ts,Q as so,S as hd,T as U,U as Js,V as ro,W as Sm,X as km,Y as wm,Z as fd,_ as Zs,$ as vm,a0 as jm,a1 as Im,a2 as Nm,a3 as vr,a4 as Am,a5 as Mm,a6 as Tm,a7 as Rm,a8 as bd}from"./canvas-runtime-BDhmTypA.js";import{e as Lm,d as Em}from"./vendor-msgpack-BE8aAsr3.js";import{R as f}from"./app-runtime-xD2Z3NdN.js";import{g as Qs,A as yd,a as as}from"./index-D1RMmeVY.js";import{g as Cs,r as Nl}from"./supabaseAuthAdapter-Dw3pz4Sa.js";import{c as Pm,a as _m,r as xd}from"./toolHandoff-D5e5f7t5.js";import{a as Cd,s as Dm}from"./executionModeSettings-NJqurj-o.js";import{a as Sd,p as Bm}from"./runtimeSettingsPersistenceProjection-BoNWmYjU.js";import{A as Ut,W as Om,c as Al,D as Fm,E as Gr,R as cn,J as Kr,X as yt,N as jr,O as $m,Q as un,w as mn,I as pn,V as gn,l as us,F as xt,Y as zm,Z as Ir,_ as ms,$ as hn,a0 as Ml,a1 as Um,a2 as Tl,a3 as Hm,i as co,a4 as Rl,a5 as Wm,a6 as kd,a7 as Vm,a8 as ia,a9 as wd,T as ps,aa as vd,ab as po,ac as Ym,ad as ns,ae as Ll,af as Nr,ag as Xm,ah as Gm,f as Km,ai as qm,h as io,x as Jm,aj as Zm,ak as Qm,al as jd,am as Id,an as Nd,g as Ad,ao as Vo,H as Zn,ap as Yo,s as er,aq as Md,ar as ep,as as tr,at as Td,au as Xo,av as ar,aw as Rd,ax as Ld,ay as Ed,az as tp,aA as ap,aB as np,aC as op,n as sp,o as Qn,aD as rp,aE as ip,aF as dp,aG as lp,aH as cp,aI as up,aJ as mp,aK as pp}from"./vendor-icons-D0xKCnZS.js";const gp=1200,Pa="LocalBridgeOriginalNodeId";function Ct(e){return typeof e=="object"&&e!==null}function sa(e,t){const o=Number(e);return Number.isFinite(o)?o:t}function W(e){return typeof e=="string"?e:""}function El(){return typeof window<"u"?{width:window.innerWidth||1280,height:window.innerHeight||720}:{width:1280,height:720}}function Ar(e,t,o){const r=Number(e),l=Number(t),m=Number(o);if(!Number.isFinite(r)||!Number.isFinite(l)||!Number.isFinite(m)||m<=0)return null;const p=1400/m,b=El();return{x:b.width/2-r*p,y:b.height/2-l*p,scale:p}}function hp(e){return Ct(e)?Ar(e.x??e.X,e.y??e.Y,e.z??e.Z):null}function fp(e){if(!Ct(e))return null;const t=Number(e.x),o=Number(e.y),r=Number(e.scale);if(!Number.isFinite(t)||!Number.isFinite(o)||!Number.isFinite(r)||r<=0)return null;const l=El();return{x:(l.width/2-t)/r,y:(l.height/2-o)/r,z:1400/r}}function bp(e){const t=String(e||"").trim();if(t)try{const o=JSON.parse(t);if(!Ct(o))return;const r={};for(const[l,m]of Object.entries(o)){const p=hp(m);p&&(r[l]=p)}return Object.keys(r).length>0?r:void 0}catch{return}}function yp(e){if(!e||Object.keys(e).length===0)return null;const t={};for(const[o,r]of Object.entries(e)){const l=fp(r);l&&(t[o]=l)}return Object.keys(t).length>0?JSON.stringify(t):null}function gs(e){return/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(e)}function Ss(){return crypto.randomUUID()}function qr(e){return Ct(e)?"ContentType"in e||"Prompt"in e||"Response"in e||"PositionX"in e||"PositionY"in e||"SourceFilePath"in e||"ImageStack"in e:!1}function Pd(e){const t=W(e).trim();if(!t)return null;try{return JSON.parse(t)}catch{return null}}function Mr(e){if(Array.isArray(e))return e;if(!Ct(e))return[];for(const t of["Nodes","nodes","Items","items","Content","content","Upserts","upserts"])if(t in e){const o=e[t];if(Array.isArray(o))return o;const r=Pd(o);if(r)return Mr(r)}for(const t of["ContentJson","contentJson","content_json"])if(t in e){const o=Pd(e[t]);if(o)return Mr(o)}return qr(e)?[e]:[]}function Jr(e){return Ct(e)?"BoardId"in e&&("Upserts"in e||"upserts"in e||"Deletes"in e||"deletes"in e):!1}function Pl(e){if(!Ct(e))return 0;for(const t of["Deletes","deletes"]){const o=e[t];if(Array.isArray(o))return o.length}return 0}function hs(e){return Mr(e).filter(qr)}function _l(e){return hs(e).length}function xp(e,t){var m;const o=[...hs(e)];if(!Jr(t))return o;const r=new Set;for(const p of["Deletes","deletes"]){const b=t[p];if(Array.isArray(b))for(const c of b){const y=W(c).trim();y&&r.add(y)}}if(r.size>0)for(let p=o.length-1;p>=0;p-=1){const b=W((m=o[p])==null?void 0:m.Id).trim();b&&r.has(b)&&o.splice(p,1)}const l=new Map;o.forEach((p,b)=>{const c=W(p.Id).trim();c&&l.set(c,b)});for(const p of hs(t)){const b=W(p.Id).trim(),c=b?l.get(b):void 0;if(c!==void 0){o[c]=p;continue}b&&l.set(b,o.length),o.push(p)}return o}function Dl(e){const t=Array.isArray(e)?e.filter(Ct):[];return new Map(t.filter(o=>o.NodeId).map(o=>[String(o.NodeId),o]))}async function Tr(e,t){for(const o of e)try{const r=await Yr(o,t);return{payload:JSON.parse(r.content),path:o}}catch{}return null}async function Cp(e,t){const o=`.mindexec/boards/${e}.msgpack`,r=`boards/${e}.msgpack`;for(const b of[o,r])try{const c=await rm(b,t);return{payload:Em(c),format:b===o?"msgpack":"legacy-msgpack",path:b}}catch{}const l=`.mindexec/boards/${e}.json`,m=`boards/${e}.json`,p=await Tr([l,m],t);if(p)return{payload:p.payload,format:p.path===l?"json":"legacy-json",path:p.path};throw new Error(`LocalBridge board file not found: ${o}, ${r}, ${l}, ${m}`)}function Rr(e){const t=W(e.Id).trim()||W(e.BoardId).trim();return t?{Id:t,Title:W(e.Title)||null,Description:W(e.Description)||null,ThumbnailUrl:W(e.ThumbnailUrl)||null,CreatedAt:W(e.CreatedAt)||null,UpdatedAt:W(e.UpdatedAt)||null,LastCameraX:Number.isFinite(Number(e.LastCameraX))?Number(e.LastCameraX):null,LastCameraY:Number.isFinite(Number(e.LastCameraY))?Number(e.LastCameraY):null,LastCameraZ:Number.isFinite(Number(e.LastCameraZ))?Number(e.LastCameraZ):null,LastCursorX:Number.isFinite(Number(e.LastCursorX))?Number(e.LastCursorX):null,LastCursorY:Number.isFinite(Number(e.LastCursorY))?Number(e.LastCursorY):null,CameraBookmarks:W(e.CameraBookmarks)||null}:null}function _d(e){return!Ct(e)||qr(e)?!1:"Title"in e||"Description"in e||"ThumbnailUrl"in e||"IsPublic"in e||"LastCameraX"in e||"LastCameraY"in e||"LastCameraZ"in e||"CameraBookmarks"in e||"BoardId"in e||"Upserts"in e||"upserts"in e||"Deletes"in e||"deletes"in e||"ContentJson"in e||"content_json"in e}function Zr(e){if(Array.isArray(e))return e.filter(_d).map(t=>Rr(t)).filter(t=>!!t);if(_d(e)){const t=Rr(e);return t?[t]:[]}return[]}function Sp(e){const t=e.toLowerCase();return kp(t)?"remote-control":wp(t)?"remote-monitor":t==="templatelauncher"||t==="template-launcher"||t.includes("template launcher")?"template-launcher":t.includes("directory")?"directory":t.includes("pdf")?"pdf":t.includes("file")?"file":t.includes("mask")?"mask":t.includes("image")?"image":t.includes("video")?"video":t.includes("embed")?"embed":t==="csv-table"||t.includes("csv-table")||t.includes("csv table")?"csv-table":t.includes("markdown")?"markdown":t.includes("code")?"code":t==="text"||t==="text/plain"||t.includes("plain-text")||t.includes("plain text")?"text":t.includes("ai")||t.includes("task")?"ai-task":t.includes("memo")?"memo":"note"}function kp(e){const t=e.trim().toLowerCase();if(!t)return!1;if(["remote-control","remote.control","remotecontrol","remote-device","remote.device","remotedevice","remote-fleet-device","remotefleet.device"].includes(t))return!0;const o=t.replace(/[^a-z0-9]+/g,"");return o.includes("remotecontrol")||o.includes("remotedevice")||o.includes("remotefleetdevice")}function wp(e){const t=e.trim().toLowerCase();if(!t)return!1;if(["remote-monitor","remote.monitor","remotemonitor","remote-hub-monitor","remotehub.monitor","remotehub-monitor","multi-desktop-monitor","multidesktop.monitor","smartview.monitor"].includes(t))return!0;const o=t.replace(/[^a-z0-9]+/g,"");return o.includes("remotemonitor")||o.includes("remotehubmonitor")||o.includes("multidesktopmonitor")||o.includes("smartviewmonitor")}function vp(e,t){const o=e.Metadata||{},r=o.ThumbnailUrl,l=o.OriginalUrl,m=o.OriginalPath;return Xr(W(r)||W(l)||W(m)||W(e.Response),t)}function jp(e,t,o){const r=e.ImageStack,l=Array.isArray(r==null?void 0:r.Variants)?r.Variants:[];if(l.length===0)return;const m=l.map((b,c)=>{const y=W(b.AssetId).trim(),w=Xr(y,o)||t;return w?{variantId:W(b.VariantId)||`variant-${W(e.Id)||c}`,imageUrl:w,assetId:y||void 0,caption:W(b.Caption)||void 0,sourceNodeId:W(e.Id)||void 0,createdAtUtc:W(b.CreatedAtUtc)||void 0}:null}).filter(b=>!!b);if(m.length===0)return;const p=W(r==null?void 0:r.ActiveVariantId);return{activeVariantId:m.some(b=>b.variantId===p)?p:m[0].variantId,variants:m,kind:W(r==null?void 0:r.Kind)||"versions",title:W(r==null?void 0:r.Title)||void 0,updatedAtUtc:W(r==null?void 0:r.UpdatedAtUtc)||void 0}}function Ip(e,t){return!e||e.variants.length===0?t:(e.variants.find(r=>r.variantId===e.activeVariantId)??e.variants[0]).imageUrl||t}function Np(e,t,o){var p,b,c,y,w,L;const r=(b=(p=e.imageStack)==null?void 0:p.variants)!=null&&b.length?e.imageStack.variants:e.imageUrl?[{variantId:`${e.id}:image`,imageUrl:e.imageUrl,assetId:go(e.imageUrl,t)||e.imageUrl,title:e.title,sourceNodeId:e.id,createdAtUtc:o}]:[];if(r.length===0)return null;const l=r.map(I=>({VariantId:I.variantId||Ss(),AssetId:I.assetId||go(I.imageUrl,t)||I.imageUrl,CreatedAtUtc:I.createdAtUtc||o,Caption:I.caption||I.title||null}));return{ActiveVariantId:(c=e.imageStack)!=null&&c.activeVariantId&&l.some(I=>{var D;return I.VariantId===((D=e.imageStack)==null?void 0:D.activeVariantId)})?e.imageStack.activeVariantId:l[0].VariantId||"",Variants:l,Kind:((y=e.imageStack)==null?void 0:y.kind)||(l.length>1?"pile":"versions"),Title:((w=e.imageStack)==null?void 0:w.title)||e.title||null,UpdatedAtUtc:((L=e.imageStack)==null?void 0:L.updatedAtUtc)||o}}function Ap(e,t){const o=e.Metadata||{};return Xr(W(o.OriginalUrl)||W(o.OriginalPath)||W(o.SourceFilePath)||W(e.SourceFilePath)||W(e.Response),t)}function Mp(e){const t={};for(const[o,r]of Object.entries(e??{}))typeof r=="string"?t[o]=r:r!=null&&(t[o]=String(r));return t}function Tp(e){switch(e){case"remote-monitor":return"remote-monitor";case"remote-control":return"remote-control";case"template-launcher":return"templateLauncher";case"directory":return"directory";case"pdf":return"pdf";case"file":return"file";case"image":return"image";case"mask":return"mask";case"video":return"video";case"embed":return"embed";case"code":return"code";case"markdown":return"markdown";case"csv-table":return"csv-table";case"memo":return"memo";case"text":return"text";case"ai-task":return"note";default:return"note"}}function go(e,t){const o=String(e||"").trim();if(!o)return"";const r=t.replace(/\/+$/,"");return o.startsWith(`${r}/`)?o.slice(r.length+1):o.replace(/^\/+/,"")}function Rp(e,t){const o=new Map;for(const r of e){const l=t.get(r.from),m=t.get(r.to);!l||!m||o.has(m)||o.set(m,l)}return o}function Lp(e){const t=new Set;return e.map(o=>{var c,y;const r=((c=o.metadata)==null?void 0:c[Pa])||"",l=gs(r)?r:gs(o.id)?o.id:"",m=!!(l&&t.has(l)),p=l&&!m?l:Ss(),b=((y=o.metadata)==null?void 0:y[Pa])!==p;return t.add(p),{node:b?{...o,metadata:{...o.metadata??{},[Pa]:p}}:o,originalId:p,assignedNodeId:!l||m,metadataStamped:b,duplicateOriginalId:m}})}function Ep(e,t,o,r,l){var y,w,L;const m=Tp(e.kind),p=m==="image"||m==="mask"?go(e.imageUrl,l):"",b=["video","pdf","file","directory","embed"].includes(m)?go(e.assetUrl||e.sourceFilePath||e.body,l):"",c={...e.metadata??{},[Pa]:t,ReactNodeId:e.id,ReactKind:e.kind};if(e.kind==="remote-monitor"&&(c.RemoteHub??(c.RemoteHub="Gated"),c.RemoteRoute??(c.RemoteRoute="Gated"),c.RemoteConnected??(c.RemoteConnected="0"),c.RemoteTotal??(c.RemoteTotal="30"),c.RemotePage??(c.RemotePage="1/1"),c.AdapterState??(c.AdapterState="adapter-gated")),e.kind==="remote-control"&&(c.SemanticType??(c.SemanticType="RemoteFleetDevice"),c.RemoteFleetSchemaVersion??(c.RemoteFleetSchemaVersion="remote-fleet-device@1"),c.RemoteRoute??(c.RemoteRoute="Gated"),c.RemoteInput??(c.RemoteInput="Off"),c.AdapterState??(c.AdapterState="adapter-gated")),e.kind==="mask"&&(c.ImageRouterMask??(c.ImageRouterMask="true"),c.SemanticType??(c.SemanticType="ImageEditMask")),e.kind==="embed"){const I=e.assetUrl||e.body||e.sourceFilePath||"";c.source??(c.source="embed"),c.renderMode??(c.renderMode="card"),c.provider??(c.provider="web"),c.sourceUrl??(c.sourceUrl=I),c.url??(c.url=I),c.AdapterState??(c.AdapterState="local-reference")}return e.kind==="video"&&(c.assetKind??(c.assetKind="video"),c.videoMode??(c.videoMode=(y=e.assetUrl)!=null&&y.startsWith(l)?"local_bridge":"local_reference"),c.AdapterState??(c.AdapterState=((w=e.metadata)==null?void 0:w.PromptOnly)==="true"?"adapter-gated":"local-reference")),(L=e.tags)!=null&&L.length&&(c.ReactTags=JSON.stringify(e.tags)),p&&(c.OriginalUrl=p,c.ThumbnailUrl=p),b&&(c.OriginalPath=b,c.SourceFilePath=b),{Id:t,ContentType:m,Prompt:e.title||m,Response:m==="image"||m==="mask"?p||e.body||null:m==="remote-monitor"?e.body||"RemoteHub monitor node. Frames and input stay adapter-gated until LocalBridge is connected.":m==="remote-control"?e.body||"Remote device control node. Frames and input stay adapter-gated until LocalBridge is connected.":b||e.body||null,PositionX:e.x,PositionY:e.y,PositionZ:0,IsLoading:e.status==="running",Width:Math.round(e.width),Height:Math.round(e.height),Children:[],ParentId:o||null,IsExpanded:!!e.isExpanded,OriginalHeight:Math.round(e.originalHeight??0),IsAiEnabled:e.aiEnabled!==!1,IsChunkedText:!!e.isChunkedText,TotalLineCount:Math.round(e.totalLineCount??0),SourceFilePath:e.sourceFilePath||b||null,ScrollOffset:e.scrollOffset??0,MaxScroll:e.maxScroll??0,CreatedAt:r,UpdatedAt:r,IsWordWrap:e.wordWrap??e.kind!=="code",Metadata:c,ImageStack:m==="image"?Np(e,l,r):null}}function Pp(e,t){return{NodeId:t,PositionX:e.x,PositionY:e.y,PositionZ:0,Width:Math.round(e.width),Height:Math.round(e.height),IsExpanded:!!e.isExpanded,OriginalHeight:Math.round(e.originalHeight??0)}}function _p(e,t,o){const r=W(e.ContentType)||"note",l=W(e.Prompt).trim(),m=W(e.Response).trim(),p=Mp(e.Metadata),b=W(e.Id).trim();b&&(p[Pa]??(p[Pa]=b));const y=["true","1","yes"].includes(String(p.ImageRouterMask||p.IsMask||"").trim().toLowerCase())?"mask":Sp(r),w=y==="memo"&&["mindcanvasagent","agentcommand"].includes(String(p.SemanticType||p.semanticType||"").trim().toLowerCase()),L=y==="memo"&&["codenote","code-note"].includes(String(p.SemanticType||p.semanticType||"").trim().toLowerCase()),I=W(e.SourceFilePath)||p.OriginalPath||p.SourceFilePath||"",D=y==="video"||y==="pdf"||y==="file"||y==="directory"||y==="embed"?Ap(e,o):void 0,q=l||e.SourceFilePath||r||"LocalBridge node",$=y==="image"?m||l||"Image asset":y==="mask"?m||l||"Image mask asset":y==="remote-monitor"?m||l||"RemoteHub monitor node. Frames and input stay adapter-gated until LocalBridge is connected.":y==="remote-control"?m||l||I||"Remote device control node. Frames and input stay adapter-gated until LocalBridge is connected.":y==="pdf"||y==="file"||y==="directory"||y==="embed"?m||I||l||r:m||l||I||"",O=w?500:L?400:y==="remote-monitor"?860:y==="remote-control"||y==="template-launcher"?560:y==="csv-table"?720:y==="embed"?460:y==="video"?420:y==="markdown"?380:y==="text"||y==="image"||y==="mask"?360:320,G=w||L?300:y==="remote-monitor"?640:y==="remote-control"?390:y==="template-launcher"?620:y==="csv-table"?420:y==="embed"?260:y==="video"?236:y==="markdown"?240:y==="text"?210:y==="image"||y==="mask"?260:180,V=y==="image"||y==="mask"?vp(e,o):void 0,re=y==="image"?jp(e,V,o):void 0,oe=!!(e.IsChunkedText||p.IsChunkedText==="true"),Ae=sa(e.TotalLineCount??p.TotalLineCount,0),be=sa(e.ScrollOffset,0),Ue=sa(e.MaxScroll,0);return{id:String(e.Id||crypto.randomUUID()),kind:y,title:y==="remote-monitor"?l||"Multi Desktop Monitor":y==="remote-control"?l||p.RemoteFleetDeviceName||"Remote Device":y==="template-launcher"?l||"Template Launcher":q,body:$,x:sa((t==null?void 0:t.PositionX)??e.PositionX,0),y:sa((t==null?void 0:t.PositionY)??e.PositionY,0),width:Math.max(160,Math.min(900,sa((t==null?void 0:t.Width)??e.Width,O))),height:Math.max(120,Math.min(900,sa((t==null?void 0:t.Height)??e.Height,G))),status:e.IsLoading?"running":y==="ai-task"?"idle":void 0,imageUrl:Ip(re,V),imageStack:re,assetUrl:D,sourceFilePath:I||void 0,isChunkedText:oe||void 0,totalLineCount:oe?Ae:void 0,scrollOffset:oe?be:void 0,maxScroll:oe?Ue:void 0,isExpanded:typeof e.IsExpanded=="boolean"?e.IsExpanded:void 0,originalHeight:sa(e.OriginalHeight,0)||void 0,tags:w?["Agent Command",p.AgentCommandRequestedRole||"Researcher",p.AgentCommandStatus||"Draft"]:L?["Code Note",p.CodeNoteStatus||"Draft",p.CodeNoteSyncState||"Unlinked"]:y==="remote-monitor"?["Remote","Monitor","LocalBridge"]:y==="remote-control"?["Remote","Control","LocalBridge"]:["LocalBridge",r],metadata:y==="remote-monitor"?Dp(p):y==="remote-control"?Bp(p):p,role:e.IsAiEnabled?"ai-enabled":void 0,aiEnabled:typeof e.IsAiEnabled=="boolean"?e.IsAiEnabled:void 0,wordWrap:typeof e.IsWordWrap=="boolean"?e.IsWordWrap:void 0}}function Dp(e){return{RemoteHub:"Gated",RemoteRoute:"Gated",RemoteConnected:"0",RemoteTotal:"30",RemotePage:"1/1",AdapterState:"adapter-gated",...e}}function Bp(e){return{SemanticType:"RemoteFleetDevice",RemoteFleetSchemaVersion:"remote-fleet-device@1",RemoteFleetDeviceId:"",RemoteFleetDeviceName:"Remote Device",RemoteFleetDevicePlatform:"unknown",RemoteFleetDeviceConnected:"false",RemoteInput:"Off",RemoteHub:"Gated",RemoteRoute:"Gated",RemoteBaseUrl:"http://127.0.0.1:5147",AdapterState:"adapter-gated",...e}}function Op(e,t){const o=[];for(const r of e){const l=String(r.Id||""),m=String(r.ParentId||"");!l||!m||!t.has(l)||!t.has(m)||o.push({id:`edge-local-${m}-${l}`,from:m,to:l,kind:"context"})}return o}async function Fp(e=xs()){const t=await Yr(".mindexec/boards/_metadata.json",e),o=JSON.parse(t.content);return(Array.isArray(o)?o.filter(Ct):[]).map(m=>Rr(m)).filter(m=>!!m).sort((m,p)=>String(p.UpdatedAt||"").localeCompare(String(m.UpdatedAt||"")))}async function $p(e){try{const t=await Yr(".mindexec/boards/_metadata.json",e),o=JSON.parse(t.content);return Array.isArray(o)?o.filter(Ct):[]}catch{return[]}}async function zp(e,t,o,r=xs(),l=null){var lt,Me,le,Tt,me,He;if((lt=e.source)!=null&&lt.partialImport)throw new Error("This board was imported from a partial original payload. Export is blocked to avoid data loss.");if((Me=e.source)!=null&&Me.truncated)throw new Error("This board was truncated during import. Export is blocked to avoid data loss.");const m=(le=e.source)!=null&&le.exportedByReact?String(e.source.boardId||""):"",p=gs(m),b=gs(m)?m:Ss(),c=new Date().toISOString(),y=Lp(e.nodes),w=y.map(ee=>ee.node),L=new Map(y.map(ee=>[ee.node.id,ee.originalId])),I=Rp(e.edges,L),D=y.map(({node:ee,originalId:ct})=>Ep(ee,ct,I.get(ct),c,r)),q=y.map(({node:ee,originalId:ct})=>Pp(ee,ct)),$=t.scale>0?t.scale:1,O=(window.innerWidth/2-t.x)/$,G=(window.innerHeight/2-t.y)/$,V=1400/$,re=Number((l==null?void 0:l.x)??((Tt=e.viewState)==null?void 0:Tt.cursorX)??0),oe=Number((l==null?void 0:l.y)??((me=e.viewState)==null?void 0:me.cursorY)??0),Ae=(He=e.nodes.find(ee=>ee.kind==="image"&&ee.imageUrl))==null?void 0:He.imageUrl,be={Id:b,UserId:"00000000-0000-0000-0000-000000000000",Title:e.name||"Untitled Board",Description:"Exported from MindExec React",ThumbnailUrl:go(Ae,r)||"",IsPublic:!1,CreatedAt:c,SyncedCloudBoardId:null,LastSyncedAt:null,LastCloudCopyStatus:null,UpdatedAt:c,LastCameraX:O,LastCameraY:G,LastCameraZ:V,LastCursorX:Number.isFinite(re)?re:0,LastCursorY:Number.isFinite(oe)?oe:0,CameraBookmarks:yp(e.settings.cameraBookmarks)},Ue=`.mindexec/boards/${b}.msgpack`,et=`.mindexec/boards/${b}.json`,tt=`.mindexec/boards/${b}.layout.json`,he=`.mindexec/boards/${b}.delta.json`,J=`boards/${b}.delta.json`,ie=await $p(r),se=[be,...ie.filter(ee=>W(ee.Id)!==b)],St=Lm(D);await sm(Ue,St,o,r),await Ks(et,JSON.stringify(D,null,2),o,r),await Ks(tt,JSON.stringify(q,null,2),o,r),await Ks(".mindexec/boards/_metadata.json",JSON.stringify(se,null,2),o,r);const F=await Promise.allSettled([ud(he,o,r),ud(J,o,r)]);return f.emit("localBridge.board.exported",{boardId:b,nodes:D.length,edges:e.edges.length,snapshotFormat:"msgpack",msgpackBytes:St.byteLength,jsonMirror:!0,deltaCleared:F.some(ee=>ee.status==="fulfilled"&&ee.value.success),reusedBoardId:p,stableNodeIds:y.length,assignedNodeIds:y.filter(ee=>ee.assignedNodeId).length,metadataStampedNodeIds:y.filter(ee=>ee.metadataStamped).length,duplicateOriginalNodeIds:y.filter(ee=>ee.duplicateOriginalId).length}),{metadata:be,source:{kind:"localBridge",boardId:b,loadedAt:c,originalNodeCount:D.length,renderedNodeCount:D.length,truncated:!1,exportedByReact:!0,snapshotFormat:"msgpack"},nodes:w,msgpackPath:Ue,boardPath:et,layoutPath:tt}}async function Up(e,t,o=xs()){const r=await Cp(e.Id,o);let l=new Map;const m=await Tr([`.mindexec/boards/${e.Id}.layout.json`,`boards/${e.Id}.layout.json`],o);m&&(l=Dl(m.payload));let p=null;const b=await Tr([`.mindexec/boards/${e.Id}.delta.json`,`boards/${e.Id}.delta.json`],o);b&&(p=b.payload);const c=p?Zr(p)[0]:null,y=!!(p&&Jr(p)),w=y?xp(r.payload,p):r.payload;return Bl(w,t,{boardId:(c==null?void 0:c.Id)??e.Id,title:(c==null?void 0:c.Title)||e.Title||"LocalBridge Board",updatedAt:(c==null?void 0:c.UpdatedAt)??e.UpdatedAt,layoutPayload:Array.from(l.values()),baseUrl:o,cameraBookmarks:(c==null?void 0:c.CameraBookmarks)??e.CameraBookmarks,lastCursorX:(c==null?void 0:c.LastCursorX)??e.LastCursorX,lastCursorY:(c==null?void 0:c.LastCursorY)??e.LastCursorY,deltaApplied:y,deltaUpserts:p?_l(p):0,deltaDeletes:p?Pl(p):0,snapshotFormat:r.format})}function Bl(e,t,o={}){const r=hs(e),l=Jr(e),m=o.deltaUpserts??(l?r.length:0),p=o.deltaDeletes??(l?Pl(e):0),b=o.layoutPayload?Dl(o.layoutPayload):new Map,c=r.slice(0,gp),y=c.map(oe=>_p(oe,b.get(String(oe.Id||"")),o.baseUrl??xs())),w=new Set(y.map(oe=>oe.id)),L=Op(c,w),I=r.length>y.length,D=l,q=o.deltaApplied===!0,$=o.boardId||Ss(),O=o.updatedAt||new Date().toISOString(),G=Number(o.lastCursorX),V=Number(o.lastCursorY),re=Number.isFinite(G)&&Number.isFinite(V);return f.emit("localBridge.board.loaded",{boardId:$,nodes:y.length,originalNodes:r.length,truncated:I,snapshotFormat:o.snapshotFormat,partialImport:D,deltaImport:l,deltaApplied:q,deltaUpserts:m,deltaDeletes:p}),{id:`localBridge:${$}`,name:o.title||"LocalBridge Board",nodes:y,edges:L,settings:{...t,cameraBookmarks:bp(o.cameraBookmarks)},viewState:re?{cursorX:G,cursorY:V}:void 0,updatedAt:O,source:{kind:"localBridge",boardId:$,loadedAt:new Date().toISOString(),snapshotFormat:o.snapshotFormat,originalNodeCount:r.length,renderedNodeCount:y.length,truncated:I,partialImport:D,deltaImport:l,deltaApplied:q}}}const Qr=["id","user_id","title","description","content_json","thumbnail_url","is_public","created_at","updated_at","last_camera_x","last_camera_y","last_camera_z","last_cursor_x","last_cursor_y","camera_bookmarks"].join(","),Hp=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;function Wp(e){if(Hp.test(e))return e;if(typeof crypto<"u"&&"randomUUID"in crypto)return crypto.randomUUID();throw new Error("A browser crypto.randomUUID implementation is required to create cloud boards.")}function Ol(e){if(!e)return{};if(Array.isArray(e))return{nodes:e};if(typeof e=="object")return e;if(typeof e!="string"||!e.trim())return{};try{const t=JSON.parse(e);if(Array.isArray(t))return{nodes:t};if(t&&typeof t=="object")return t}catch{return{}}return{}}function Vp(e){return JSON.stringify({id:e.id,name:e.name,nodes:e.nodes,edges:e.edges,settings:e.settings,viewState:e.viewState,updatedAt:e.updatedAt})}function Lr(e,t=new Date().toISOString()){return e&&!Number.isNaN(Date.parse(e))?e:t}function ei(e){return(e==null?void 0:e.trim().slice(0,90))||"Untitled Board"}function Fl(e){const t=Ol(e.content_json),o=Lr(e.updated_at??t.updatedAt);return{id:e.id,name:ei(e.title??t.name),updatedAt:o,createdAt:Lr(e.created_at,o),nodeCount:Array.isArray(t.nodes)?t.nodes.length:0,edgeCount:Array.isArray(t.edges)?t.edges.length:0,sourceKind:"cloud"}}function Yp(e,t){var w,L;const o=Ol(e.content_json),r=Lr(e.updated_at??o.updatedAt),l=Number((w=o.viewState)==null?void 0:w.cursorX),m=Number((L=o.viewState)==null?void 0:L.cursorY),p=Number(e.last_cursor_x),b=Number(e.last_cursor_y),c=Number.isFinite(l)&&Number.isFinite(m),y=Number.isFinite(p)&&Number.isFinite(b);return{id:e.id,name:ei(e.title??o.name),nodes:Array.isArray(o.nodes)?o.nodes:[],edges:Array.isArray(o.edges)?o.edges:[],settings:o.settings??t,viewState:c?{cursorX:l,cursorY:m}:y?{cursorX:p,cursorY:b}:void 0,updatedAt:r,source:{kind:"cloud",boardId:e.id,loadedAt:new Date().toISOString(),snapshotFormat:"supabase.boards.content_json",originalNodeCount:Array.isArray(o.nodes)?o.nodes.length:0,renderedNodeCount:Array.isArray(o.nodes)?o.nodes.length:0}}}async function ti(e){var c;const t=Nl(e);if(!t.cloudBoards.canAttempt)return f.emit("projectStorage.cloud.provider.skipped",{mode:t.cloudBoards.mode}),{userId:null,config:t,reason:t.cloudBoards.mode};const o=Cs(e);if(!o)return f.emit("projectStorage.cloud.provider.skipped",{mode:"config-missing"}),{userId:null,config:t,reason:"missing-client"};const{data:r,error:l}=await o.auth.getSession();if(l||!r.session)return f.emit("projectStorage.cloud.provider.sessionMissing",{message:(l==null?void 0:l.message)??"missing-session"}),{userId:null,config:t,reason:"missing-session"};const{data:m,error:p}=await o.auth.getUser(),b=((c=m.user)==null?void 0:c.id)??null;return p||!b?(f.emit("projectStorage.cloud.provider.sessionMissing",{message:(p==null?void 0:p.message)??"missing-user"}),{userId:null,config:t,reason:"missing-user"}):{userId:b,config:t,reason:"provider-ready"}}async function Xp(e){const t=await ti(e);if(!t.userId)return[];const o=Cs(e);if(!o)return[];f.emit("projectStorage.cloud.list.requested");const{data:r,error:l}=await o.from("boards").select(Qr).eq("user_id",t.userId).order("updated_at",{ascending:!1}).limit(50);if(l)throw f.emit("projectStorage.cloud.provider.failed",{operation:"list",message:l.message}),l;const m=(r??[]).map(Fl);return f.emit("projectStorage.cloud.list.loaded",{count:m.length}),m}async function Gp(e,t,o){const r=await ti(e);if(!r.userId)return null;const l=Cs(e);if(!l)return null;f.emit("projectStorage.cloud.load.requested",{boardId:t});const{data:m,error:p}=await l.from("boards").select(Qr).eq("user_id",r.userId).eq("id",t).maybeSingle();if(p)throw f.emit("projectStorage.cloud.provider.failed",{operation:"load",boardId:t,message:p.message}),p;if(!m)return null;const b=Yp(m,o);return f.emit("projectStorage.cloud.load.loaded",{boardId:t,nodes:b.nodes.length,edges:b.edges.length}),b}async function Kp(e,t,o,r=null){var re,oe;const l=await ti(e);if(!l.userId)return null;const m=Cs(e);if(!m)return null;const p=Wp(t.id),b=new Date().toISOString(),c=ei(t.name),y=Number((r==null?void 0:r.x)??((re=t.viewState)==null?void 0:re.cursorX)??0),w=Number((r==null?void 0:r.y)??((oe=t.viewState)==null?void 0:oe.cursorY)??0),L={...t.viewState??{},cursorX:Number.isFinite(y)?y:0,cursorY:Number.isFinite(w)?w:0},I={...t,id:p,name:c,viewState:L,updatedAt:b},D={p_board_id:p,p_title:c,p_description:null,p_thumbnail_url:null,p_is_public:!1,p_created_at:null,p_updated_at:b,p_last_camera_x:o.x,p_last_camera_y:o.y,p_last_camera_z:o.scale,p_last_cursor_x:L.cursorX,p_last_cursor_y:L.cursorY,p_camera_bookmarks:JSON.stringify(t.settings.cameraBookmarks??{}),p_nodes:[],p_include_json_mirror:!0};f.emit("projectStorage.cloud.save.requested",{boardId:p,sourceBoardId:t.id,nodes:t.nodes.length,edges:t.edges.length});const{error:q}=await m.rpc("save_board_snapshot",D);if(q)throw f.emit("projectStorage.cloud.provider.failed",{operation:"save-rpc",boardId:p,message:q.message}),q;const $={content_json:Vp(I),updated_at:b},{data:O,error:G}=await m.from("boards").update($).eq("id",p).eq("user_id",l.userId).select(Qr).maybeSingle();if(G)throw f.emit("projectStorage.cloud.provider.failed",{operation:"save-json-mirror",boardId:p,message:G.message}),G;const V=O?Fl(O):{id:p,name:c,updatedAt:b,createdAt:b,nodeCount:t.nodes.length,edgeCount:t.edges.length,sourceKind:"cloud"};return f.emit("projectStorage.cloud.save.saved",{boardId:V.id,nodes:V.nodeCount,edges:V.edgeCount}),V}function Er(e){return e.length===0?{minX:0,minY:0,maxX:0,maxY:0}:e.reduce((t,o)=>({minX:Math.min(t.minX,o.x),minY:Math.min(t.minY,o.y),maxX:Math.max(t.maxX,o.x+o.width),maxY:Math.max(t.maxY,o.y+o.height)}),{minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY,maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY})}function qp(e,t={},o=Er(e),r){if(e.length===0)return{after:new Map,boundsAfter:o};const l=pg(t.mode),m=gg(t.order),p=hg(t.anchor),b=fg(t.sizeMode),c=Math.max(0,t.gapX??24),y=Math.max(0,t.gapY??24),w=Math.max(1,t.maxColumns??12),L=Pr(t.quantile??.75,.05,.95),I=e.map(Jp),D=dg(I,m),q=D.map(be=>be.width),$=D.map(be=>be.height),O=Math.max(1,t.cellWidth??Bd(q,L)),G=Math.max(1,t.cellHeight??Bd($,L)),V=Math.max(1,t.targetWidth??O),re=Math.max(1,t.targetHeight??G),oe=ig(p,o);if(l==="grid"){ng(D,b,V,re,O,G);const be=Dd(t.columns,w,o.maxX-o.minX,O,c);Qp(D,oe.x,oe.y,be,O,G,c,y)}else if(l==="masonry"){og(D,b==="preserve"?"uniformWidth":b,V);const Ue=Dd(t.columns,w,o.maxX-o.minX,V,c);eg(D,oe.x,oe.y,Ue,V,c,y)}else l==="stripHorizontal"?(sg(D,b==="preserve"?"uniformHeight":b,re),tg(D,oe.x,oe.y,c,re)):(rg(D,b==="preserve"?"uniformWidth":b,V),ag(D,oe.x,oe.y,y,V));let Ae=new Map(D.map(be=>[be.id,Zp(be)]));return p==="selectionBoundsCenter"&&(Ae=cg(o,Ae)),t.snapToGrid&&(Ae=ug(Ae,Math.max(1,t.gridSize??8))),{after:Ae,boundsAfter:Er(Array.from(Ae.values()))}}function Jp(e){return{...e,width:Math.max(1,e.width),height:Math.max(1,e.height)}}function Zp(e){return{x:e.x,y:e.y,width:Math.max(1,e.width),height:Math.max(1,e.height)}}function Qp(e,t,o,r,l,m,p,b){e.forEach((c,y)=>{const w=Math.floor(y/r),L=y%r,I=t+L*(l+p),D=o+w*(m+b);c.x=I+(l-c.width)/2,c.y=D+(m-c.height)/2})}function eg(e,t,o,r,l,m,p){const b=Array.from({length:r},()=>0);for(const c of e){const y=mg(b),w=t+y*(l+m);c.x=w+(l-c.width)/2,c.y=o+b[y],b[y]+=c.height+p}}function tg(e,t,o,r,l){let m=t;for(const p of e)p.x=m,p.y=o+(l-p.height)/2,m+=p.width+r}function ag(e,t,o,r,l){let m=o;for(const p of e)p.x=t+(l-p.width)/2,p.y=m,m+=p.height+r}function ng(e,t,o,r,l,m){if(t==="fitCellDownOnly")for(const p of e){const b=Math.min(1,l/p.width,m/p.height);p.width*=b,p.height*=b}else t==="uniformWidth"?ai(e,o):t==="uniformHeight"&&$l(e,r)}function og(e,t,o){if(t==="fitCellDownOnly"){for(const r of e){const l=Math.min(1,o/r.width);r.width*=l,r.height*=l}return}ai(e,o)}function sg(e,t,o){if(t==="fitCellDownOnly"){for(const r of e){const l=Math.min(1,o/r.height);r.width*=l,r.height*=l}return}$l(e,o)}function rg(e,t,o){if(t==="fitCellDownOnly"){for(const r of e){const l=Math.min(1,o/r.width);r.width*=l,r.height*=l}return}ai(e,o)}function ai(e,t){for(const o of e){if(o.width<=0)continue;const r=t/o.width;o.width=t,o.height=Math.max(1,o.height*r)}}function $l(e,t){for(const o of e){if(o.height<=0)continue;const r=t/o.height;o.height=t,o.width=Math.max(1,o.width*r)}}function Dd(e,t,o,r,l){if(typeof e=="number"&&e>0)return Math.round(Pr(e,1,t));if(o<=1||r<=1)return 1;const m=Math.floor((o+l)/(r+l));return!Number.isFinite(m)||m<1?1:Math.round(Pr(m,1,t))}function ig(e,t,o){return{x:t.minX,y:t.minY}}function dg(e,t){return t==="selectionOrder"?[...e].sort((o,r)=>o.selectionIndex-r.selectionIndex):lg(e)}function lg(e){const t=[...e].sort((c,y)=>c.y-y.y||c.x-y.x);if(t.length<=2)return t;const o=t.map(c=>c.height).sort((c,y)=>c-y),r=o[Math.floor(o.length/2)]??1,l=Math.max(16,r*.35),m=[];let p=[],b=Number.NaN;for(const c of t)p.length===0?(p=[c],b=c.y):Math.abs(c.y-b)<=l?(p.push(c),b=(b*(p.length-1)+c.y)/p.length):(m.push([...p].sort((y,w)=>y.x-w.x)),p=[c],b=c.y);return p.length>0&&m.push([...p].sort((c,y)=>c.x-y.x)),m.flat()}function cg(e,t){if(t.size===0)return t;const o=Er(Array.from(t.values())),r=e.minX+(e.maxX-e.minX)/2,l=e.minY+(e.maxY-e.minY)/2,m=o.minX+(o.maxX-o.minX)/2,p=o.minY+(o.maxY-o.minY)/2,b=r-m,c=l-p;return new Map(Array.from(t.entries()).map(([y,w])=>[y,{...w,x:w.x+b,y:w.y+c}]))}function ug(e,t){return new Map(Array.from(e.entries()).map(([o,r])=>[o,{...r,x:Od(r.x,t),y:Od(r.y,t)}]))}function Bd(e,t){if(e.length===0)return 1;const o=[...e].sort((b,c)=>b-c),r=(o.length-1)*t,l=Math.floor(r),m=Math.min(o.length-1,l+1),p=r-l;return o[l]*(1-p)+o[m]*p}function mg(e){let t=0;for(let o=1;o<e.length;o+=1)e[o]<e[t]&&(t=o);return t}function Od(e,t){return Math.round(e/t)*t}function pg(e){const t=ks(e);return t==="grid"?"grid":t==="striphorizontal"||t==="striph"?"stripHorizontal":t==="stripvertical"||t==="stripv"?"stripVertical":"masonry"}function gg(e){return ks(e)==="selectionorder"?"selectionOrder":"spatialReading"}function hg(e){const t=ks(e);return t==="selectionboundscenter"?"selectionBoundsCenter":t==="viewporttopleft"?"viewportTopLeft":"selectionBoundsTopLeft"}function fg(e){const t=ks(e);return t==="fitcelldownonly"?"fitCellDownOnly":t==="uniformwidth"?"uniformWidth":t==="uniformheight"?"uniformHeight":"preserve"}function ks(e){return String(e??"").trim().toLowerCase().replace(/[^a-z0-9]/g,"")}function Pr(e,t,o){return Math.min(o,Math.max(t,e))}const zl=300,Ul=50*1024*1024,bg=800;function ke(e){return typeof e=="string"?e.length*2:0}function yg(e){let t=256;if(t+=ke(e.id),t+=ke(e.kind),t+=ke(e.title),t+=ke(e.body),t+=ke(e.result),t+=ke(e.imageUrl),t+=ke(e.assetUrl),t+=ke(e.sourceFilePath),t+=(e.tags??[]).reduce((o,r)=>o+ke(r),0),e.metadata)for(const[o,r]of Object.entries(e.metadata))t+=ke(o)+ke(r);return e.imageStack&&(t+=128+ke(e.imageStack.title),t+=e.imageStack.variants.reduce((o,r)=>o+96+ke(r.variantId)+ke(r.imageUrl)+ke(r.assetId)+ke(r.title)+ke(r.caption),0)),t}function xg(e){let t=1024+ke(e.id)+ke(e.name)+ke(e.updatedAt);return t+=e.nodes.reduce((o,r)=>o+yg(r),0),t+=e.edges.length*128,t+=Object.entries(e.settings).reduce((o,[r,l])=>o+ke(r)+ke(typeof l=="string"?l:JSON.stringify(l)),0),t}function Hl(e,t={}){var o,r;return{board:e,description:((o=t.description)==null?void 0:o.trim())||"Board change",mergeKey:((r=t.mergeKey)==null?void 0:r.trim())||null,timestampMs:t.timestampMs??Date.now(),estimatedBytes:xg(e)}}function Fd(e,t={}){const o=t.maxEntries??zl,r=t.maxBytes??Ul;let l=e.slice(Math.max(0,e.length-o)),m=l.reduce((p,b)=>p+b.estimatedBytes,0);for(;l.length>1&&m>r;){const[p,...b]=l;m-=(p==null?void 0:p.estimatedBytes)??0,l=b}return l}function Ma(e,t,o={}){const r=Hl(t,o),l=o.mergeWindowMs??bg,m=e.slice(),p=m.at(-1);return p&&r.mergeKey&&p.mergeKey===r.mergeKey&&r.timestampMs-p.timestampMs<l?(m[m.length-1]={...p,description:r.description,timestampMs:r.timestampMs,estimatedBytes:Math.max(p.estimatedBytes,r.estimatedBytes)},Fd(m,o)):(m.push(r),Fd(m,o))}function Cg(e,t,o={}){const r=Hl(t,o),l=o.maxEntries??zl,m=o.maxBytes??Ul;let p=[r,...e].slice(0,l),b=p.reduce((c,y)=>c+y.estimatedBytes,0);for(;p.length>1&&b>m;){const c=p.at(-1);b-=(c==null?void 0:c.estimatedBytes)??0,p=p.slice(0,-1)}return p}function ws(e,...t){const o=e==null?void 0:e.metadata;if(!o)return"";for(const r of t){const l=o[r];if(typeof l=="string"&&l.trim())return l.trim()}return""}function eo(e,t){return!!ws(e,t)}function Wl(e){if(!e||!e.trim())return!1;const t=e.trim();return/^(https?:|blob:|data:|file:)/i.test(t)}function Vl(e){if(!e)return"";const t=ws(e,"OriginalPath");if(t)return t;const o=String(e.body||"").trim();return Wl(o)?"":o}function Yl(e){return e?Vl(e)||String(e.sourceFilePath||"").trim()||String(e.assetUrl||"").trim()||String(e.imageUrl||"").trim()||String(e.body||"").trim():""}function Xl(e){return ws(e,"ThumbnailUrl","thumbnailUrl")}function Sg(e){if(!e||e.kind!=="image")return!1;if(eo(e,"ImageGenerationProvider")||eo(e,"GeneratedImageSourceWidth")||eo(e,"GeneratedImageSourceHeight")||eo(e,"CodexImageQuality")||eo(e,"ImageRouterRevisedPrompt"))return!0;const t=ws(e,"RequestedMediaOperation");return["text2image","image2image","inpaint"].includes(t.toLowerCase())}function ni(e){if(!e)return"";if(e.kind==="image"||e.kind==="mask"){const t=Sg(e)?Vl(e):"",o=Xl(e),r=String(e.body||"").trim();return t||o||String(e.imageUrl||"").trim()||String(e.assetUrl||"").trim()||String(e.sourceFilePath||"").trim()||(Wl(r)?r:"")}return Yl(e)||String(e.assetUrl||"").trim()||String(e.sourceFilePath||"").trim()}function Gl(e){if(!e)return"";const t=Yl(e)||e.title||e.kind;return String(t||"").replace(/\\/g,"/").replace(/\/+$/,"").split("/").filter(Boolean).pop()||e.title||e.kind}const kg=2048,wg=16e3,nr=1024,or=64,vg=2048,sr=3,jg=16,Ig=256,Ng=new Set(["text","note","memo","markdown","code","directory"]),Ag=/[\p{L}\p{M}\p{N}]{2,}/gu,$d=4,Mg=8,zd=1.35;function Tg(e){return Ng.has(String(e||"").trim().toLowerCase())}function Rg(e){const t=e.map(Eg),o=new Map,r=new Map,l=new Map,m=new Map;for(const p of t){o.set(p.id,p);for(const b of p.tokens)rr(r,b,p.id);for(const b of p.prefixes)rr(l,b,p.id);for(const b of p.ngrams)rr(m,b,p.id)}return{documents:t,documentById:o,tokenIndex:r,prefixIndex:l,ngramIndex:m}}function Lg(e,t,o={}){const r=Math.max(1,Math.trunc(Number(o.limit||30))),l=rn(t),m=Ud(e,0,0,o.viewport,0);if(!l)return{hits:[],profile:m};const p=Array.from(Kl(l)),b=Array.from(ql(p)),c=Zl(l),y=Array.from(Jl(c)),w=new Map;for(const $ of p)ir(e.tokenIndex,$,w,8);for(const $ of b)ir(e.prefixIndex,$,w,$.length<=3?4:2);for(const $ of y)ir(e.ngramIndex,$,w,1.15);const L=Bg(e,w,r),I=Og(o.allowedContentTypes),D=[];for(const $ of L){const O=e.documentById.get($);if(!O||I&&!I.has(O.contentType))continue;const G=_g(O,l,p,y);if(G<=0)continue;const V=Dg(O,o.viewport??null);D.push({nodeId:O.id,score:G+V,textScore:G,viewportBoost:V})}D.sort(($,O)=>O.score-$.score||$.nodeId.localeCompare(O.nodeId));const q=D.slice(0,r);return{hits:q,profile:Ud(e,L.length,q.length,o.viewport,q.filter($=>$.viewportBoost>0).length)}}function rn(e){const t=String(e??"");if(!t.trim())return"";let o=t;try{o=t.normalize("NFKC")}catch{o=t}o=o.toLowerCase();let r="",l=!1;for(const m of o){if(/\s/u.test(m)){l||(r+=" ",l=!0);continue}Fg(m)||(r+=m,l=!1)}return r.trim()}function Kl(e){return new Set(e.match(Ag)??[])}function ql(e){const t=new Set;for(const o of e){if(!o.trim())continue;const r=Math.min(8,o.length);for(let l=2;l<=r;l+=1)t.add(o.slice(0,l))}return t}function Jl(e){const t=new Set;if(!e.trim())return t;if(e.length<=sr)return t.add(e),t;for(let o=0;o<=e.length-sr;o+=1)t.add(e.slice(o,o+sr));return t}function Eg(e){const t=String(e.kind??"").trim().toLowerCase(),o=La(e.prompt??e.title,kg),r=Tg(t)?La(e.response??e.body,wg):"",l=Pg(e.metadata,e.tags,e.metadataText),m=La(e.sourceFilePath||e.assetUrl,vg),p=rn(o),b=rn(r),c=rn(l),y=rn(m),w=rn(t),L=[p,c,y,b,w].filter(Boolean).join(" "),I=Kl(L);return{id:String(e.id),contentType:t,normalizedPrompt:p,normalizedResponse:b,normalizedMetadata:c,normalizedSourcePath:y,normalizedContentType:w,tokens:I,prefixes:ql(I),ngrams:Jl(Zl(L)),x:Number.isFinite(e.x)?e.x:0,y:Number.isFinite(e.y)?e.y:0,width:Number.isFinite(e.width)?e.width:1,height:Number.isFinite(e.height)?e.height:1}}function Pg(e,t,o){const r=[];let l=0;if(e)for(const[m,p]of Object.entries(e)){if(l>=or)break;!String(m??"").trim()&&!String(p??"").trim()||(r.push(La(m,128)),String(p??"").trim()&&r.push(La(p,nr)),l+=1)}return l<or&&(t!=null&&t.length)&&(r.push("tags",La(t.join(" "),nr)),l+=1),l<or&&(o!=null&&o.trim())&&r.push("metadata",La(o,nr)),r.join(" ")}function _g(e,t,o,r){let l=0;e.normalizedPrompt===t?l+=120:to(e.normalizedPrompt,t)&&(l+=54),to(e.normalizedMetadata,t)&&(l+=26),to(e.normalizedSourcePath,t)&&(l+=18),to(e.normalizedResponse,t)&&(l+=14),to(e.normalizedContentType,t)&&(l+=8);for(const m of o)e.tokens.has(m)&&(l+=7),e.normalizedPrompt.startsWith(m)&&(l+=10);for(const m of r)e.ngrams.has(m)&&(l+=.85);return l}function Dg(e,t){if(!t)return 0;const o=e.x+Math.max(1,e.width)/2,r=e.y+Math.max(1,e.height)/2,l=Math.abs(o-t.centerX)/Math.max(1,t.halfWidth),m=Math.abs(r-t.centerY)/Math.max(1,t.halfHeight),p=Math.sqrt(l*l+m*m);if(p<=1)return $d+(1-p)*Mg;if(p<=zd){const b=1-(p-1)/Math.max(.001,zd-1);return Math.max(0,b)*($d*.75)}return 0}function Bg(e,t,o){return t.size===0?e.documents.map(r=>r.id):Array.from(t.entries()).sort((r,l)=>l[1]-r[1]||r[0].localeCompare(l[0])).slice(0,Math.max(o*jg,Ig)).map(([r])=>r)}function Og(e){if(!e)return null;const t=new Set(Array.from(e,o=>String(o||"").trim().toLowerCase()).filter(Boolean));return t.size>0?t:null}function Ud(e,t,o,r,l){return{documentCount:e.documents.length,candidateCount:t,rankedCount:o,viewportBoosted:!!r,boostedCount:l,indexedTokenCount:e.tokenIndex.size,indexedPrefixCount:e.prefixIndex.size,indexedNGramCount:e.ngramIndex.size}}function rr(e,t,o){const r=e.get(t);if(r){r.add(o);return}e.set(t,new Set([o]))}function ir(e,t,o,r){const l=e.get(t);if(l)for(const m of l)o.set(m,(o.get(m)??0)+r)}function Zl(e){let t="";for(const o of e)/\s/u.test(o)||(t+=o);return t}function La(e,t){const o=String(e??"");return o.length<=t?o:o.slice(0,t)}function to(e,t){return!!(e&&t&&e.includes(t))}function Fg(e){const t=e.codePointAt(0)??0;return t<=31||t>=127&&t<=159}const $g=2147483647,zg="LocalBridge access is enabled, but the bridge is not reachable. Restart LocalBridge, allow Chrome local-network access, then reload MindCanvas.",Ug="Local storage is unavailable in the hosted app until browser local storage or LocalBridge access is available.",Hg="Local storage is unavailable. Check the browser-local storage state or LocalBridge connection.",Wg="Cloud projects are unavailable until Supabase and Cloudflare R2 are configured.",Vg="Login is required before cloud projects can be used.",Yg="Cloud projects are unavailable.";function Xg(e){return e.bridgeProviderConfigured||e.browserProviderConfigured||e.embeddedProviderConfigured}function _r(e,t=!0){const o={isAvailable:!1,bridgeReachable:!1,browserLocalAvailable:!1,embeddedLocalAvailable:!1,providerKind:"none",canBrowseWorkspace:!1};return e.bridgeProviderConfigured&&e.bridgeReachable?{...o,isAvailable:!0,bridgeReachable:!0,providerKind:"bridge",canBrowseWorkspace:!0}:e.hostedWebApp&&e.hostedLocalBridgeAccessEnabled&&e.bridgeProviderConfigured?{...o,providerKind:"bridge"}:e.browserProviderConfigured&&(e.browserLocalAvailable||t&&e.browserLocalAvailableWhenEmpty===!0)?{...o,isAvailable:!0,browserLocalAvailable:!0,providerKind:"browser"}:e.embeddedProviderConfigured&&e.supportsEmbeddedLocal?{...o,isAvailable:!0,embeddedLocalAvailable:!0,providerKind:"embedded"}:o}function Gg(e){return _r(e,!1).isAvailable?"local":oi(e)?"cloud":_r(e,!0).isAvailable?"local":e.cloudConfigured?"cloud":"local"}function oi(e){return e.cloudConfigured&&e.cloudSessionAvailable}function Kg(e,t){return t.providerKind==="bridge"&&!t.bridgeReachable?zg:e.hostedWebApp?Ug:Hg}function qg(e){return e.cloudConfigured?oi(e)?Yg:Vg:Wg}function Jg(e){var w,L,I;const t=oi(e),o=_r(e,!0),r=Xg(e),l=e.cloudConfigured,m=o.isAvailable,p=t;let b=e.storedMode??Gg(e);b==="cloud"&&(!l||!p&&m)?b=m?"local":"cloud":b==="local"&&(!r&&l||!m&&p)&&(b="cloud");const c=e.cloudAccess,y=((w=c==null?void 0:c.denialReason)==null?void 0:w.trim())||void 0;return{currentMode:b,showLocalTab:r,showCloudTab:l,isLocalAvailable:o.isAvailable,isCloudAvailable:t,requiresCloudSignIn:e.cloudConfigured&&!t,canUseLocalProjects:m,canBrowseLocalWorkspace:o.canBrowseWorkspace,localProviderKind:o.providerKind,canUseCloudProjects:p,canSyncLocalToCloud:m&&p,cloudPlanKey:((L=c==null?void 0:c.planKey)==null?void 0:L.trim())||"free",cloudEntitlementStatus:((I=c==null?void 0:c.entitlementStatus)==null?void 0:I.trim())||(c?"active":"inactive"),currentCloudBoardCount:(c==null?void 0:c.currentBoardCount)??0,cloudBoardLimit:(c==null?void 0:c.cloudBoardLimit)??$g,lockedCloudBoardCount:(c==null?void 0:c.lockedBoardCount)??0,canCreateCloudBoards:(c==null?void 0:c.canCreateBoard)??p,canUseManagedAi:(c==null?void 0:c.canUseManagedAi)??!1,canGenerateImage:(c==null?void 0:c.canGenerateImage)??!1,canUseContextPack:(c==null?void 0:c.canUseContextPack)??!1,cloudLimitMessage:y,localStatusMessage:o.isAvailable?void 0:Kg(e,o),cloudStatusMessage:p?void 0:qg(e)}}function Zg(){const e=new Error("Queued operation was cancelled before it started.");return e.name="AbortError",e}class Qg{constructor(){ld(this,"tails",new Map)}isBusy(t){return this.tails.has(t)}enqueue(t,o,r){if(typeof o!="function")throw new TypeError("KeyedAsyncQueue operation is required.");const l=this.tails.get(t)??Promise.resolve();let m;return m=(async()=>{try{try{await l}catch{}if(r!=null&&r.aborted)throw Zg();return await o(r)}finally{this.tails.get(t)===m&&this.tails.delete(t)}})(),this.tails.set(t,m),m}clear(t){if(typeof t>"u"){this.tails.clear();return}this.tails.delete(t)}}const Dr="mindexec-local-mode-warning-dismissed-v1";function eh(){try{return window.localStorage.getItem(Dr)==="true"}catch{return!1}}function Ql(e,t){var o,r;if(e==="checking")return"Checking bridge";if(e==="connected"){const l=(r=(o=t==null?void 0:t.exec)==null?void 0:o.model)==null?void 0:r.trim();return l?`Bridge / ${l}`:"Bridge connected"}return e==="blocked"?"Bridge gated":e==="unavailable"?"Bridge unavailable":"Bridge idle"}function th(e,t,o){var l,m,p,b,c;if(e!=="connected")return t||Ql(e,o);const r=[o!=null&&o.version?`version ${o.version}`:null,(l=o==null?void 0:o.exec)!=null&&l.model?`model ${o.exec.model}`:null,(m=o==null?void 0:o.exec)!=null&&m.reasoningEffort?`reasoning ${o.exec.reasoningEffort}`:null,(p=o==null?void 0:o.exec)!=null&&p.serviceTier?`tier ${o.exec.serviceTier}`:null,(b=o==null?void 0:o.exec)!=null&&b.preferredProviderKind?`codex ${o.exec.preferredProviderKind}`:null,(c=o==null?void 0:o.project)!=null&&c.isOpen?"project open":null].filter(Boolean);return r.length>0?`LocalBridge connected. ${r.join(" / ")}`:"LocalBridge connected."}function ah({state:e,message:t,status:o,hostedBridgeAccessEnabled:r,onRefresh:l,onEnableHostedBridge:m}){const p=g.useMemo(()=>e==="checking"?n.jsx(Ut,{size:14,className:"spin-icon"}):e==="connected"?n.jsx(Om,{size:14}):e==="blocked"?n.jsx(Al,{size:14}):e==="unavailable"?n.jsx(Fm,{size:14}):n.jsx(Gr,{size:14}),[e]);return n.jsxs("div",{className:`runtime-status-pill runtime-status-pill--${e}`,title:th(e,t,o),"data-testid":"bridge-status-pill","data-bridge-state":e,"data-bridge-access":r?"enabled":"gated",children:[n.jsx("span",{className:"runtime-status-pill__icon","aria-hidden":"true",children:p}),n.jsx("span",{children:Ql(e,o)}),e==="blocked"&&!r&&n.jsx("button",{type:"button",className:"runtime-status-pill__action",onClick:m,children:"Enable"}),n.jsx("button",{type:"button",className:"runtime-status-pill__button",title:"Refresh LocalBridge","data-testid":"bridge-status-refresh",onClick:()=>void l(),disabled:e==="checking",children:n.jsx(cn,{size:13})})]})}function nh({status:e,message:t}){const r={ready:{icon:n.jsx(jr,{size:14}),label:"Saved locally",title:"Board state is saved in this browser."},syncing:{icon:n.jsx(Ut,{size:14,className:"spin-icon"}),label:"Saving",title:"Saving board state to this browser."},error:{icon:n.jsx(Kr,{size:14}),label:"Save error",title:"Board state could not be saved locally."},offline:{icon:n.jsx(Gr,{size:14}),label:"Offline",title:"No sync adapter is connected."}}[e];return n.jsxs("div",{className:`runtime-status-pill runtime-status-pill--sync-${e}`,title:t||r.title,"data-testid":"sync-status-indicator","data-sync-status":e,children:[n.jsx("span",{className:"runtime-status-pill__icon","aria-hidden":"true",children:r.icon}),n.jsx("span",{children:r.label})]})}function oh({visible:e}){const[t,o]=g.useState(eh);if(!e||t)return null;const r=()=>{o(!0);try{window.localStorage.setItem(Dr,"true")}catch{}f.emit("runtimeStatus.localMode.dismissed")};return n.jsxs("section",{className:"runtime-local-warning",role:"status","data-testid":"local-mode-warning","data-local-mode-dismissed-key":Dr,children:[n.jsx("div",{className:"runtime-local-warning__icon","aria-hidden":"true",children:n.jsx(Kr,{size:16})}),n.jsxs("div",{className:"runtime-local-warning__copy",children:[n.jsx("strong",{children:"Local Mode"}),n.jsx("span",{children:"Boards are saved in this browser. LocalBridge export creates a file-backed copy."})]}),n.jsx("button",{type:"button",title:"Dismiss local mode warning","data-testid":"local-mode-dismiss",onClick:r,children:n.jsx(yt,{size:14})})]})}function sh({bridgeState:e,bridgeMessage:t,bridgeStatus:o,syncStatus:r,syncMessage:l,hostedBridgeAccessEnabled:m,onRefreshBridge:p,onEnableHostedBridge:b,showLocalModeWarning:c=!0}){return n.jsxs("aside",{className:"runtime-status-cluster","aria-label":"Runtime status","data-testid":"runtime-status-cluster","data-local-mode-visible":c?"true":"false",children:[n.jsxs("div",{className:"runtime-status-row",children:[n.jsx(ah,{state:e,message:t,status:o,hostedBridgeAccessEnabled:m,onRefresh:p,onEnableHostedBridge:b}),n.jsx(nh,{status:r,message:l})]}),n.jsx(oh,{visible:c})]})}const rh=/^data:image\//i;function ih(e){const t=String(e||"").trim();if(!t)return{src:null,reason:"empty",urlKind:"empty"};const o=t.toLowerCase();return rh.test(t)?{src:t,reason:null,urlKind:"data"}:o.startsWith("blob:")?{src:t,reason:null,urlKind:"blob"}:o.startsWith("https://")?{src:t,reason:null,urlKind:"https"}:o.startsWith("http://")?{src:t,reason:null,urlKind:"http"}:t.startsWith("//")?{src:t,reason:null,urlKind:"protocol-relative"}:t.startsWith("/")||t.startsWith("./")||t.startsWith("../")?{src:t,reason:null,urlKind:"relative"}:/^[a-z][a-z0-9+.-]*:/i.test(t)?{src:null,reason:"unsupported-protocol",urlKind:t.split(":",1)[0].toLowerCase()}:{src:t,reason:null,urlKind:"relative"}}function dr({src:e,alt:t="",className:o="",testId:r="secure-image",traceId:l,kind:m="image",title:p}){const b=g.useMemo(()=>ih(e),[e]),[c,y]=g.useState(b.src?"loading":"blocked");g.useEffect(()=>{const D=b.src?"loading":"blocked";y(D),b.src||f.emit("secureImage.blocked",{id:l,kind:m,reason:b.reason,urlKind:b.urlKind})},[m,b.reason,b.src,b.urlKind,l]);const w=()=>{y("loaded"),f.emit("secureImage.loaded",{id:l,kind:m,urlKind:b.urlKind})},L=()=>{y("error"),f.emit("secureImage.error",{id:l,kind:m,urlKind:b.urlKind})},I=c==="blocked"?`Image blocked: ${b.reason||"unsupported source"}`:"Image failed to load";return n.jsxs("div",{className:`secure-image secure-image--${c} ${o}`.trim(),"data-testid":r,"data-secure-image-state":c,"data-secure-image-kind":m,title:c==="loaded"?p:I,children:[b.src&&n.jsx("img",{src:b.src,alt:t,loading:"lazy",decoding:"async",draggable:!1,onLoad:w,onError:L}),c==="loading"&&n.jsx("span",{className:"secure-image__loading","aria-hidden":"true",children:n.jsx("span",{})}),(c==="blocked"||c==="error")&&n.jsx("span",{className:"secure-image__fallback",role:"img","aria-label":I,children:c==="blocked"?n.jsx($m,{size:18}):n.jsx(Kr,{size:18})})]})}const dh={note:ms,text:xt,"ai-task":un,image:pn,mask:pn,video:gn,embed:hn,code:mn,markdown:xt,"csv-table":xt,memo:ms,pdf:xt,file:Ir,directory:zm,"template-launcher":xt,"remote-monitor":us,"remote-control":us},lr=[{key:"Auto",label:"Auto Detect",description:"Infer whether this note is growth, revenue, build, or research work."},{key:"GeneralCompany",label:"General AI Company",description:"Balanced planning, practical work, and artifact production."},{key:"GrowthValidation",label:"Growth Validation",description:"Marketing loops, signals, messaging, distribution, and experiments."},{key:"RevenueAffiliate",label:"Revenue / Affiliate",description:"Affiliate discovery, keywords, content assets, and revenue experiments."},{key:"ProductBuild",label:"Product Build",description:"Specs, implementation-oriented work, artifacts, and approval gates."},{key:"ResearchOnly",label:"Research Only",description:"Evidence gathering, risks, synthesis, and recommendations."}],Hd=500,lh=48,ch=new Set(["mindcanvasagent","agentcommand"]),uh=new Set(["codenote","code-note"]),mh=["multidesktopmonitor","remotehubmonitor","remotefleetmonitor","smartviewmonitor"],ph=["remotedevice","remotefleetdevice","remotecontrol"];function gh(e){const t=fn(e,"SemanticType","semanticType","RemoteFleetSemanticType").trim().toLowerCase(),o=fn(e,"RemoteFleetNodeRole","remoteFleetNodeRole").trim().toLowerCase(),r=fn(e,"RemoteFleetSchemaVersion","remoteFleetSchemaVersion").trim().toLowerCase();return e.kind==="remote-monitor"||t==="remotefleetmonitor"||o==="fleet-monitor"||r==="remote-fleet@1"||tc(e,["RemoteFleetViewMode","RemoteFleetHubStatus","RemoteFleetDevicesJson","RemoteFleetDeviceCount","RemoteFleetConnectedDeviceCount","RemoteFleetProjectionMode","RemoteFleetCanvasPagination","RemoteHub","RemoteRoute","RemotePage","RemoteVisibleBudget"])||ec(e,mh,["remote","monitor"])}function hh(e){const t=fn(e,"SemanticType","semanticType","RemoteFleetSemanticType").trim().toLowerCase(),o=fn(e,"RemoteFleetNodeRole","remoteFleetNodeRole").trim().toLowerCase(),r=fn(e,"RemoteFleetSchemaVersion","remoteFleetSchemaVersion").trim().toLowerCase();return e.kind==="remote-control"||t==="remotefleetdevice"||o==="fleet-device"||r==="remote-fleet-device@1"||tc(e,["RemoteFleetDeviceId","RemoteFleetDeviceName","RemoteFleetDevicePlatform","RemoteFleetDeviceConnected","RemoteFleetDeviceCanControl","RemoteFleetSourceMonitorNodeId"])||ec(e,ph,["remote","control"])}function ec(e,t,o){const r=(e.tags??[]).map(b=>b.trim().toLowerCase()).filter(Boolean),l=o.every(b=>r.includes(b)),p=[e.title,e.body,e.sourceFilePath,e.assetUrl,...r].join(" ").toLowerCase().replace(/[^a-z0-9]+/g,"");return l||t.some(b=>p.includes(b))}function fn(e,...t){const o=e.metadata??{};for(const l of t){const m=o[l];if(m!=null)return String(m)}const r=new Set(t.map(l=>l.toLowerCase()));for(const[l,m]of Object.entries(o))if(r.has(l.toLowerCase())&&m!==void 0&&m!==null)return String(m);return""}function tc(e,t){const o=e.metadata??{},r=new Set(t.map(l=>l.toLowerCase()));return Object.entries(o).some(([l,m])=>r.has(l.toLowerCase())&&m!==void 0&&m!==null&&String(m).trim()!=="")}const Br=[{key:"coral",label:"Coral",swatch:"#ff8052",ring:"rgba(255, 128, 82, 0.22)",surface:"#fff2eb",border:"rgba(255, 128, 82, 0.42)",ink:"#7c2d12"},{key:"amber",label:"Amber",swatch:"#f59e0b",ring:"rgba(245, 158, 11, 0.22)",surface:"#fffbeb",border:"rgba(245, 158, 11, 0.42)",ink:"#78350f"},{key:"sun",label:"Sun",swatch:"#ca8a04",ring:"rgba(202, 138, 4, 0.22)",surface:"#fef9c3",border:"rgba(202, 138, 4, 0.38)",ink:"#713f12"},{key:"sage",label:"Sage",swatch:"#65a30d",ring:"rgba(101, 163, 13, 0.22)",surface:"#f7fee7",border:"rgba(101, 163, 13, 0.38)",ink:"#365314"},{key:"mint",label:"Mint",swatch:"#10b981",ring:"rgba(16, 185, 129, 0.22)",surface:"#ecfdf5",border:"rgba(16, 185, 129, 0.36)",ink:"#064e3b"},{key:"sky",label:"Sky",swatch:"#3b82f6",ring:"rgba(59, 130, 246, 0.22)",surface:"#eff6ff",border:"rgba(59, 130, 246, 0.36)",ink:"#1e3a8a"},{key:"indigo",label:"Indigo",swatch:"#6366f1",ring:"rgba(99, 102, 241, 0.22)",surface:"#eef2ff",border:"rgba(99, 102, 241, 0.36)",ink:"#312e81"},{key:"violet",label:"Violet",swatch:"#8b5cf6",ring:"rgba(139, 92, 246, 0.22)",surface:"#f5f3ff",border:"rgba(139, 92, 246, 0.36)",ink:"#4c1d95"},{key:"rose",label:"Rose",swatch:"#f43f5e",ring:"rgba(244, 63, 94, 0.22)",surface:"#fff1f2",border:"rgba(244, 63, 94, 0.36)",ink:"#881337"},{key:"gray",label:"Gray",swatch:"#6b7280",ring:"rgba(107, 114, 128, 0.22)",surface:"#f9fafb",border:"rgba(107, 114, 128, 0.32)",ink:"#374151"},{key:"slate",label:"Slate",swatch:"#64748b",ring:"rgba(100, 116, 139, 0.22)",surface:"#f8fafc",border:"rgba(100, 116, 139, 0.32)",ink:"#334155"}],fh=g.memo(function({node:t,selected:o,pulsing:r,connectionDraft:l,onSelect:m,onDragStart:p,onResizeStart:b,onPatch:c,onDelete:y,onDuplicate:w,onRun:L,onPin:I,onOpenResult:D,onToggleAiReference:q,onCopyNode:$,onCopyEmbedReference:O,onFitNodeHeight:G,onToggleNodeExpanded:V,onToggleWordWrap:re,onStageCompany:oe,onOpenCompanyGraph:Ae,onSyncCompanyGoal:be,onRefreshCompany:Ue,onSetCompanyStatus:et,onRemoveCompany:tt,onOpenAsset:he,onOpenDirectorySettings:J,onScanDirectory:ie,onCreateRemoteControl:se,onGenerateTemplateCard:St}){var Tn,wo,rt,Bt,ya,Va,Qt,Ya,te,Ye,Xa,Rn,v,Y,ae,Xe,Ln,Ot,Ga,Ka,En,Pn,qa,_n,xa,Dn,Ja,Ca,ea,De,Pe,Za,Bn,vo,Sa;const F=String(((Tn=t.metadata)==null?void 0:Tn.AutomationNodeKind)||((wo=t.metadata)==null?void 0:wo.AutomationTemplateKey)||((rt=t.metadata)==null?void 0:rt.AutomationInferredKind)||"").trim().toLowerCase(),lt=String(((Bt=t.metadata)==null?void 0:Bt.SemanticType)||((ya=t.metadata)==null?void 0:ya.semanticType)||"").trim().toLowerCase(),Me=t.kind==="memo"&&ch.has(lt),le=t.kind==="memo"&&uh.has(lt),Tt=String(((Va=t.metadata)==null?void 0:Va.AgentCommandStatus)||"Draft"),me=String(((Qt=t.metadata)==null?void 0:Qt.AgentCommandMode)||"Task"),He=String(((Ya=t.metadata)==null?void 0:Ya.AgentCommandRequestedRole)||"Researcher"),ee=String(((te=t.metadata)==null?void 0:te.CodeNoteStatus)||"Draft"),ct=String(((Ye=t.metadata)==null?void 0:Ye.CodeNoteSyncState)||"Unlinked"),Wt=String(((Xa=t.metadata)==null?void 0:Xa.CodeNoteKind)||"Feature"),_a=Me?un:le?mn:F==="image-generate"?pn:F==="video-generate"?gn:dh[t.kind],Cn=l&&l.from!==t.id,ho=t.kind==="ai-task",Re=t.kind==="pdf"||t.kind==="file"||t.kind==="directory",Da=gh(t),Vt=hh(t),Oe=Da||Vt,Te=Da?"monitor":Vt?"control":"",ce=t.kind==="template-launcher"||String(((Rn=t.metadata)==null?void 0:Rn.semanticType)||((v=t.metadata)==null?void 0:v.SemanticType)||"").toLowerCase()==="templatelauncher",kt=t.kind==="video",we=t.kind==="embed",wt=t.kind==="mask",ye=t.kind==="memo",at=t.kind==="markdown",nt=t.kind==="csv-table",Fe=ye?jh(t):null,pe=g.useRef(null),Sn=kt?ac(t):"",qe=kt?Nh(t):"",$e=we?Ah(t):"",vt=we?Mh(t):"",fo=we?Th(t,$e):"",_e=we?Rh(t):"",Le=(((Y=t.imageStack)==null?void 0:Y.variants)??[]).filter(x=>!!x.imageUrl),ut=Le.find(x=>{var P;return x.variantId===((P=t.imageStack)==null?void 0:P.activeVariantId)})??Le[0]??null,Rt=t.kind==="image"||wt?(ut==null?void 0:ut.imageUrl)||ni(t):"",la=ut?Le.findIndex(x=>x.variantId===ut.variantId):-1,Ba=!Rt&&!Re&&!Oe&&!ce&&!kt&&!we,bo=Ba&&!ye,Yt=t.isExpanded===!1&&Number(t.originalHeight??0)>t.height+1,kn=!Oe&&!["image","mask","video","embed","pdf","file","directory","template-launcher","remote-monitor","remote-control"].includes(t.kind),ot=t.aiEnabled!==!1,We=Ih(t),Je=!!(t.isChunkedText||((ae=t.metadata)==null?void 0:ae.IsChunkedText)==="true"),ca=Number(t.totalLineCount??((Xe=t.metadata)==null?void 0:Xe.TotalLineCount)??0),yo=t.sourceFilePath||((Ln=t.metadata)==null?void 0:Ln.FileName)||t.title,xe=Je?n.jsxs("div",{className:"node-chunked-text-state","data-testid":"node-chunked-text-state",title:yo,children:[n.jsx(xt,{size:12}),n.jsx("strong",{children:"Chunked text"}),Number.isFinite(ca)&&ca>0&&n.jsxs("span",{children:[ca.toLocaleString()," lines"]})]}):null,Xt=t.kind==="directory"?(Ot=t.metadata)==null?void 0:Ot.Include:null,Oa=t.kind==="directory"?(Ga=t.metadata)==null?void 0:Ga.Exclude:null,wn=t.kind==="directory"?(Ka=t.metadata)==null?void 0:Ka.DirectoryFileCount:null,Ee=t.kind==="directory"?(En=t.metadata)==null?void 0:En.DirectoryDirCount:null,jt=t.kind==="directory"?(Pn=t.metadata)==null?void 0:Pn.DirectoryLastScanUtc:null,[Fa,$a]=g.useState(!1),[za,Ve]=g.useState(null),[vs,vn]=g.useState(((qa=t.metadata)==null?void 0:qa.CompanyExecutionMode)||"Auto"),[ua,Ua]=g.useState(((_n=t.metadata)==null?void 0:_n.CompanySubAgents)!=="false"),[Gt,ma]=g.useState(!1),[It,Ha]=g.useState(null),pa=g.useMemo(()=>nt?Ch(t.body,It):null,[It,nt,t.body]),de=g.useMemo(()=>ce?vl(t.body):null,[ce,t.body]),mt=(de==null?void 0:de.options.find(x=>x.id===de.selectedOptionId))??(de==null?void 0:de.options[0])??null,Kt=im(de),Lt=lr.find(x=>x.key===vs)||lr[0],Et=String(((xa=t.metadata)==null?void 0:xa.CompanyStatus)||(t.companyMode?"Staged":"")).trim(),Pt=Et.toLowerCase(),qt=Pt==="paused",pt=Pt==="archived",js=x=>{x.stopPropagation();const P=x.currentTarget.getBoundingClientRect();Ve(yh(P)),$a(ne=>!ne)},Is=x=>{x.stopPropagation(),oe(t.id,{executionMode:Lt.key,enableSubAgents:ua}),$a(!1)},xo=x=>{x.stopPropagation(),Ae(t.id)},ga=(x,P)=>{P.stopPropagation();const ne=Le.find(ht=>ht.variantId===x);!ne||!t.imageStack||ne.variantId===t.imageStack.activeVariantId||(f.emit("node.imageStack.variant",{nodeId:t.id,variantId:ne.variantId,variantCount:Le.length}),c(t.id,{imageUrl:ne.imageUrl,imageStack:{...t.imageStack,activeVariantId:ne.variantId,variants:Le,updatedAtUtc:new Date().toISOString()},metadata:{...t.metadata??{},ImageStackActiveVariantId:ne.variantId}}))},Ns=(x,P)=>{if(P.stopPropagation(),!!ye){if((Fe==null?void 0:Fe.key)===x){ma(!1);return}f.emit("node.memoColor.changed",{id:t.id,colorKey:x}),c(t.id,{metadata:{...t.metadata??{},memoColor:x,memoColorIsCustom:"true"}}),ma(!1)}},jn=x=>{var Be,jo;if(x.stopPropagation(),!Me)return;const P=(t.body||t.title||"Agent command objective").trim(),ne=["Clarify the objective and constraints.","Collect linked canvas context or code notes.","Draft an execution plan before external adapter use."],ht=["canvas-context","agent-command-planning","adapter-gated-execution"],ze=["Canvas.ListAgentCommands","Canvas.UpdateAgentCommand","Canvas.PlanAgentCommand","Canvas.SetAgentCommandState"],Nt=["MindCanvasAgent",me,He],z=["Local React plan staged for this Agent Command.",`Role: ${He}`,`Mode: ${me}`,`Objective: ${P.slice(0,220)}`,"External execution remains adapter-gated until LocalBridge/agent runtime is available."].join(`
2
2
  `);f.emit("mindcanvas.agentCommand.planned",{id:t.id,mode:me,requestedRole:He,adapterState:((Be=t.metadata)==null?void 0:Be.AdapterState)??"adapter-gated"}),c(t.id,{tags:["Agent Command",He,"Planned"],metadata:{...t.metadata??{},AgentCommandStatus:"Planned",AgentCommandPlannerSummary:z,AgentCommandPlanSteps:JSON.stringify(ne),AgentCommandPlannedSkills:JSON.stringify(ht),AgentCommandPlannedTools:JSON.stringify(ze),AgentCommandPlannedConcepts:JSON.stringify(Nt),AgentCommandLastExplorationPhase:"planned-local",AdapterState:((jo=t.metadata)==null?void 0:jo.AdapterState)??"adapter-gated"}})},ha=x=>{var ze,Nt;if(x.stopPropagation(),!Me)return;const P=new Date().toISOString(),ne=[`Agent Command: ${t.title||"Agent"}`,`Status: Completed locally at ${P}`,"","This React MindCanvas node preserves the original Agent Command workflow shape.","No external agent runtime was invoked; execution remains adapter-gated.","","Next action:","Connect LocalBridge/agent runtime or move this command into CodeMaster for a deeper implementation run."].join(`
3
3
  `),ht=[`${P} Local React execution staged.`,`${P} Adapter gated; no external tools invoked.`];f.emit("mindcanvas.agentCommand.executed.local",{id:t.id,mode:me,requestedRole:He,adapterState:((ze=t.metadata)==null?void 0:ze.AdapterState)??"adapter-gated"}),c(t.id,{status:"done",result:ne,tags:["Agent Command",He,"Completed"],metadata:{...t.metadata??{},AgentCommandStatus:"Completed",AgentCommandLastExecutedAtUtc:P,AgentCommandConsoleLogs:JSON.stringify(ht),AgentCommandResultLinks:JSON.stringify([]),AdapterState:((Nt=t.metadata)==null?void 0:Nt.AdapterState)??"adapter-gated"}})},fa=(x,P,ne,ht)=>{var Nt,z,Be;if(x.stopPropagation(),!le)return;const ze=P==="Implemented"?JSON.stringify([`local-code-note://${t.id}/implementation-handoff.md`]):((Nt=t.metadata)==null?void 0:Nt.CodeNoteOutputArtifacts)||"[]";f.emit("mindcanvas.codeNote.state",{id:t.id,status:P,syncState:ne,reason:ht,adapterState:((z=t.metadata)==null?void 0:z.AdapterState)??"local-canvas-only"}),c(t.id,{tags:["Code Note",P,ne],metadata:{...t.metadata??{},CodeNoteStatus:P,CodeNoteSyncState:ne,CodeNoteOutputArtifacts:ze,...P==="Implemented"||P==="Reviewed"?{CodeNoteLastAppliedAtUtc:new Date().toISOString()}:{},AdapterState:((Be=t.metadata)==null?void 0:Be.AdapterState)??"local-canvas-only"}})},_t=()=>{Ua(x=>!x)},Co=async x=>{if(x.stopPropagation(),!qe||!pe.current){f.emit("node.video.unavailable",{id:t.id,reason:qe?"element-missing":"source-missing"});return}try{await pe.current.play(),f.emit("node.video.play",{id:t.id,sourceKind:Vd(qe)})}catch(P){f.emit("node.video.unavailable",{id:t.id,reason:P instanceof Error?P.message:String(P)})}},ba=x=>{if(x.stopPropagation(),!qe||!pe.current){f.emit("node.video.unavailable",{id:t.id,reason:qe?"element-missing":"source-missing"});return}pe.current.pause(),f.emit("node.video.pause",{id:t.id,sourceKind:Vd(qe)})},Jt=x=>{x.stopPropagation(),$e&&O(t.id,$e)},In=x=>{c(t.id,{body:JSON.stringify(x),metadata:{...t.metadata??{},templateLauncherSelectedOptionId:x.selectedOptionId??""}})},st=(x,P)=>{if(P.stopPropagation(),!de)return;const ne=cm(de,x);In(ne),f.emit("templateCard.option.select",{nodeId:t.id,optionId:ne.selectedOptionId??null})},Nn=(x,P)=>{if(!de)return;const ne=um(de,x,P);In(ne),f.emit("templateCard.input.patch",{nodeId:t.id,key:x})},Dt=x=>{x.stopPropagation(),!(!de||Kt)&&St(t.id,de.selectedOptionId??null,de.inputValues)},Zt=kn&&Fa?n.jsxs("div",{className:"node-company-launcher","data-testid":"node-company-launcher",style:za?{left:za.left,top:za.top}:void 0,onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:[n.jsx("div",{className:"node-company-launcher__eyebrow",children:"Run As Company"}),n.jsx("h4",{children:"Turn this note into a background AI company"}),n.jsx("p",{children:"Pick the operating mode to stage on this node. External CompanyCore execution stays adapter-gated."}),n.jsx("div",{className:"node-company-mode-list",children:lr.map(x=>n.jsxs("button",{type:"button",className:x.key===Lt.key?"is-selected":"","data-company-mode":x.key,onClick:()=>vn(x.key),children:[n.jsx("strong",{children:x.label}),n.jsx("span",{children:x.description})]},x.key))}),n.jsxs("button",{type:"button",className:"node-company-subagents","aria-pressed":ua,onClick:x=>{x.stopPropagation(),_t()},children:[n.jsx("span",{className:"node-company-toggle-indicator","aria-hidden":"true",children:ua?"On":"Off"}),n.jsxs("span",{children:[n.jsx(Ml,{size:13}),"Enable sub-agents for exploration waves and specialist handoff"]})]}),n.jsxs("div",{className:"node-company-launcher__actions",children:[n.jsx("button",{type:"button",className:"btn btn-ghost",onClick:()=>$a(!1),children:"Cancel"}),n.jsx("button",{type:"button",className:"btn btn-primary","data-testid":"node-company-run-confirm",onClick:Is,children:"Stage Company"})]})]}):null,An={width:t.width,height:t.height,transform:`translate3d(${t.x}px, ${t.y}px, 0)`,...Fe?{"--memo-bg":Fe.surface,"--memo-border":Fe.border,"--memo-ink":Fe.ink,"--memo-ring":Fe.ring,"--memo-accent":Fe.swatch}:{}},gt=n.jsxs(n.Fragment,{children:[bo&&n.jsx("button",{type:"button",title:ot?"Disable AI reference":"Enable AI reference","aria-label":ot?"Disable AI reference":"Enable AI reference",className:ot?"is-active-ai":"is-inactive-ai",onPointerDown:x=>x.stopPropagation(),onClick:()=>q(t.id),children:n.jsx(Um,{size:13})}),ye&&n.jsx("button",{type:"button",title:"Change memo color","aria-label":"Change memo color","aria-pressed":Gt,className:"is-memo-color-action","data-testid":"node-memo-color-open",onPointerDown:x=>x.stopPropagation(),onClick:x=>{x.stopPropagation(),ma(P=>!P)},children:n.jsx(Tl,{size:13})}),t.kind==="code"&&n.jsx("button",{type:"button",title:t.wordWrap===!1?"Enable word wrap":"Disable word wrap","aria-label":t.wordWrap===!1?"Enable word wrap":"Disable word wrap",onPointerDown:x=>x.stopPropagation(),onClick:()=>re(t.id),children:n.jsx(Hm,{size:13})}),n.jsx("button",{type:"button",title:Rt?"Copy image to clipboard":"Copy content","aria-label":Rt?"Copy image to clipboard":"Copy content",onPointerDown:x=>x.stopPropagation(),onClick:()=>$(t.id),children:n.jsx(co,{size:13})}),n.jsx("button",{type:"button",title:"Duplicate node","aria-label":"Duplicate node","data-testid":"node-duplicate",onPointerDown:x=>x.stopPropagation(),onClick:()=>w(t.id),children:n.jsx(Rl,{size:13})}),Ba&&n.jsx("button",{type:"button",title:"Fit text height","aria-label":"Fit text height",onPointerDown:x=>x.stopPropagation(),onClick:()=>G(t.id),children:n.jsx(Wm,{size:13})}),Ba&&n.jsx("button",{type:"button",title:Yt?"Expand node":"Collapse node","aria-label":Yt?"Expand node":"Collapse node","aria-pressed":Yt,onPointerDown:x=>x.stopPropagation(),onClick:()=>V(t.id),children:Yt?n.jsx(kd,{size:13}):n.jsx(Vm,{size:13})}),ho&&n.jsx("button",{type:"button",title:"Run node",onPointerDown:x=>x.stopPropagation(),onClick:()=>L(t.id),children:n.jsx(ia,{size:13})}),kn&&n.jsx("button",{type:"button",title:t.companyMode?"Open Company graph":"Run this note as Company","aria-label":t.companyMode?"Open Company graph":"Run this note as Company",className:t.companyMode?"is-company-action":"","data-testid":t.companyMode?"node-company-graph-open":"node-company-run-open",onPointerDown:x=>x.stopPropagation(),onClick:t.companyMode?xo:js,children:n.jsx(wd,{size:13})}),n.jsx("button",{type:"button",title:"Delete node","aria-label":"Delete node","data-testid":"node-delete",onPointerDown:x=>x.stopPropagation(),onClick:()=>y(t.id),children:n.jsx(ps,{size:13})})]}),Wa=ho?n.jsxs("div",{className:"node-result-row","data-testid":"node-external-pins",children:[n.jsxs("button",{className:`node-pin node-pin--context ${Cn?"can-receive":""}`,type:"button",title:"Context input",onPointerDown:x=>x.stopPropagation(),onClick:x=>{x.stopPropagation(),I(t.id,"context")},children:[n.jsx(vd,{size:10}),"Context"]}),n.jsxs("button",{className:`node-pin node-pin--result ${t.result?"has-result":""}`,type:"button",title:"Drag to connect this result to an input pin. Click to view the result.","data-testid":"node-result-open",onPointerDown:x=>x.stopPropagation(),onClick:x=>{x.stopPropagation(),t.result?D(t.id):I(t.id,"result")},children:[n.jsx(kd,{size:11}),"Result"]})]}):n.jsxs("button",{className:`node-context-source ${l?"can-receive":""}`,type:"button",title:"Use this node as AI Task context",onPointerDown:x=>x.stopPropagation(),onClick:x=>{x.stopPropagation(),I(t.id,"context")},children:[n.jsx(vd,{size:10}),n.jsx("span",{children:"Context"})]}),je=wt||Le.length>1||we||kt?n.jsxs("div",{className:"node-surface-badges","data-testid":"node-surface-badges",children:[wt&&n.jsx("span",{className:"node-mask-badge",title:"Image edit mask reference",children:"Mask"}),Le.length>1&&n.jsxs("span",{className:"node-image-stack-badge",title:"Image stack variants",children:[Math.max(1,la+1),"/",Le.length]}),we&&n.jsx("span",{className:"node-embed-badge",children:vt==="youtube"?"YouTube":"Embed"}),kt&&n.jsx("span",{className:"node-video-badge",children:((Dn=t.metadata)==null?void 0:Dn.MediaModel)||((Ja=t.metadata)==null?void 0:Ja.MediaProvider)||"Video"})]}):null,fe=Le.length>1||we||kt||Re?n.jsxs("div",{className:"node-surface-actions","data-testid":"node-surface-actions",children:[Le.length>1&&n.jsx("div",{className:"node-image-stack-rail","aria-label":"Image stack variants",children:Le.map((x,P)=>n.jsx("button",{type:"button",className:x.variantId===(ut==null?void 0:ut.variantId)?"is-active":"",title:x.title||x.caption||`Variant ${P+1}`,"aria-label":`Show image variant ${P+1}`,onPointerDown:ne=>ne.stopPropagation(),onClick:ne=>ga(x.variantId,ne),children:n.jsx(dr,{src:x.imageUrl,traceId:`${t.id}:${x.variantId||P}`,kind:"image-stack-variant",testId:"node-image-stack-thumb"})},x.variantId||`${x.imageUrl}-${P}`))}),we&&n.jsxs("div",{className:"node-embed-actions",children:[n.jsxs("button",{type:"button",title:"Open embed","aria-label":"Open embed",onPointerDown:x=>x.stopPropagation(),onClick:x=>{x.stopPropagation(),$e&&he(t,"external")},children:[n.jsx(hn,{size:13}),n.jsx("span",{children:"Open"})]}),n.jsxs("button",{type:"button",title:"Copy URL","aria-label":"Copy URL",onPointerDown:x=>x.stopPropagation(),onClick:Jt,children:[n.jsx(co,{size:13}),n.jsx("span",{children:"Copy URL"})]})]}),kt&&n.jsxs("div",{className:"node-video-actions",children:[n.jsxs("button",{type:"button",title:"Play video","aria-label":"Play video","data-testid":"node-video-play",onPointerDown:x=>x.stopPropagation(),onClick:Co,children:[n.jsx(ia,{size:13}),n.jsx("span",{children:"Play"})]}),n.jsxs("button",{type:"button",title:"Pause video","aria-label":"Pause video","data-testid":"node-video-pause",onPointerDown:x=>x.stopPropagation(),onClick:ba,children:[n.jsx(po,{size:13}),n.jsx("span",{children:"Pause"})]})]}),Re&&n.jsxs("div",{className:"node-asset-actions",children:[t.kind==="pdf"&&n.jsxs("button",{type:"button",title:"Preview PDF","data-testid":"node-pdf-preview",onPointerDown:x=>x.stopPropagation(),onClick:()=>he(t,"preview"),children:[n.jsx(Ym,{size:13}),n.jsx("span",{children:"Preview"})]}),t.kind!=="directory"&&n.jsxs("button",{type:"button",title:"Open in new tab",onPointerDown:x=>x.stopPropagation(),onClick:()=>he(t,"external"),children:[n.jsx(hn,{size:13}),n.jsx("span",{children:"Open"})]}),t.kind==="directory"&&n.jsxs("button",{type:"button",title:"Scan folder","data-testid":"directory-scan",onPointerDown:x=>x.stopPropagation(),onClick:()=>ie(t.id),children:[n.jsx(cn,{size:13}),n.jsx("span",{children:"Scan"})]}),t.kind==="directory"&&n.jsxs("button",{type:"button",title:"Folder scan settings","data-testid":"directory-settings-open",onPointerDown:x=>x.stopPropagation(),onClick:()=>J(t.id),children:[n.jsx(ns,{size:13}),n.jsx("span",{children:"Settings"})]})]})]}):null,Ze=Oe?null:n.jsxs("div",{className:"node-external-action-rail","data-testid":"node-external-action-rail",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:[fe,n.jsx("div",{className:"node-external-rail__pins",children:Wa}),n.jsx("div",{className:"node-actions","data-testid":"node-actions",children:gt}),Me&&n.jsxs("div",{className:"node-agent-command-actions","data-testid":"node-agent-command-actions",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:[n.jsx("button",{type:"button","data-testid":"node-agent-command-plan","data-agent-command-action":"plan",onClick:jn,children:"Plan"}),n.jsx("button",{type:"button","data-testid":"node-agent-command-execute","data-agent-command-action":"execute",disabled:Tt==="Running",onClick:ha,children:"Execute"})]}),le&&n.jsxs("div",{className:"node-code-note-actions","data-testid":"node-code-note-actions",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:[n.jsx("button",{type:"button","data-testid":"node-code-note-approve","data-code-note-action":"approve",onClick:x=>fa(x,"Approved","Planned","approve-local"),children:"Approve"}),n.jsx("button",{type:"button","data-testid":"node-code-note-review","data-code-note-action":"review",onClick:x=>fa(x,"Reviewed","InSync","review-local"),children:"Review"}),n.jsx("button",{type:"button","data-testid":"node-code-note-out-of-sync","data-code-note-action":"out-of-sync",onClick:x=>fa(x,ee,"OutOfSync","mark-out-of-sync-local"),children:"Out of sync"})]}),t.companyMode&&n.jsxs("div",{className:"node-company-quick-actions","data-testid":"node-company-quick-actions","data-company-status":Et||"Staged",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:[n.jsx("button",{type:"button",title:"Update Company goal from this note","aria-label":"Update Company goal from this note","data-testid":"node-company-sync-goal",disabled:pt,onClick:()=>be(t.id),children:n.jsx(Ll,{size:12})}),n.jsx("button",{type:"button",title:"Refresh Company status","aria-label":"Refresh Company status","data-testid":"node-company-refresh",onClick:()=>Ue(t.id),children:n.jsx(cn,{size:12})}),pt?n.jsx("button",{type:"button",title:"Company is archived","aria-label":"Company is archived","data-testid":"node-company-archived",disabled:!0,children:n.jsx(Nr,{size:12})}):qt?n.jsx("button",{type:"button",title:"Resume Company","aria-label":"Resume Company","data-testid":"node-company-resume",onClick:()=>et(t.id,"Staged"),children:n.jsx(ia,{size:12})}):n.jsx("button",{type:"button",title:"Pause Company","aria-label":"Pause Company","data-testid":"node-company-pause",onClick:()=>et(t.id,"Paused"),children:n.jsx(po,{size:12})}),!pt&&n.jsx("button",{type:"button",title:"Archive Company","aria-label":"Archive Company","data-testid":"node-company-archive",onClick:()=>et(t.id,"Archived"),children:n.jsx(Nr,{size:12})}),n.jsx("button",{type:"button",title:"Remove Company from this note","aria-label":"Remove Company from this note","data-testid":"node-company-remove",onClick:()=>tt(t.id),children:n.jsx(yt,{size:12})})]})]}),ko=Oe?null:n.jsx("div",{className:"node-external-rail","data-testid":"node-external-rail",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:n.jsxs("div",{className:"node-external-rail__meta",children:[n.jsxs("div",{className:"node-tags","data-testid":"node-external-tags",children:[(t.tags??[t.kind]).slice(0,3).map(x=>n.jsx("span",{children:x},x)),t.status&&n.jsx("span",{className:`node-status node-status--${t.status}`,children:t.status})]}),je,xe,Me&&n.jsxs("div",{className:"node-agent-command-state","data-testid":"node-agent-command-state","data-agent-command-status":Tt,"data-agent-command-mode":me,"data-agent-command-role":He,"data-agent-command-adapter-state":((Ca=t.metadata)==null?void 0:Ca.AdapterState)||"adapter-gated",children:[n.jsx(un,{size:12}),n.jsx("strong",{children:"AC"}),n.jsx("span",{children:Tt}),n.jsx("span",{children:me}),n.jsx("span",{children:He})]}),le&&n.jsxs("div",{className:"node-code-note-state","data-testid":"node-code-note-state","data-code-note-status":ee,"data-code-note-sync-state":ct,"data-code-note-kind":Wt,"data-code-note-adapter-state":((ea=t.metadata)==null?void 0:ea.AdapterState)||"local-canvas-only",children:[n.jsx(mn,{size:12}),n.jsx("strong",{children:"CN"}),n.jsx("span",{children:ee}),n.jsx("span",{children:ct}),n.jsx("span",{children:Wt})]}),t.companyMode&&n.jsxs("div",{className:"node-company-state","data-testid":"node-company-state",children:[n.jsx(wd,{size:12}),n.jsx("strong",{children:((De=t.metadata)==null?void 0:De.CompanyExecutionModeLabel)||"Company staged"}),n.jsx("span",{children:((Pe=t.metadata)==null?void 0:Pe.CompanySubAgents)==="false"?"single-agent":"sub-agents"})]})]})});return n.jsxs("article",{className:`canvas-node canvas-node--${t.kind} ${Oe?"canvas-node--remote-surface":""} ${Da?"canvas-node--remote-monitor-surface":""} ${Vt?"canvas-node--remote-control-surface":""} ${F?`canvas-node--automation-${F}`:""} ${Me?"canvas-node--agent-command":""} ${le?"canvas-node--code-note":""} ${o?"is-selected":""} ${r?"is-pulsing":""} ${ot?"":"is-ai-disabled"} ${t.wordWrap===!1?"is-nowrap":""} ${Yt?"is-collapsed":""} ${t.companyMode?`is-company-${t.companyMode}`:""}`,style:An,"data-node-id":t.id,"data-automation-node-kind":F||void 0,"data-automation-external-policy":((Za=t.metadata)==null?void 0:Za.AutomationExternalActionPolicy)||void 0,"data-media-generation-contract":((Bn=t.metadata)==null?void 0:Bn.MediaGenerationContract)||void 0,"data-agent-command-node":Me?"true":void 0,"data-agent-command-status":Me?Tt:void 0,"data-agent-command-mode":Me?me:void 0,"data-agent-command-role":Me?He:void 0,"data-code-note-node":le?"true":void 0,"data-code-note-status":le?ee:void 0,"data-code-note-sync-state":le?ct:void 0,"data-code-note-kind":le?Wt:void 0,"data-remote-surface-chrome":Oe?"self-contained":void 0,"data-remote-surface-kind":Te||void 0,"data-remote-surface-title-owner":Oe?"inner-remote-view":void 0,"data-remote-surface-scroll-owner":Oe?"remote-page-rail":void 0,onPointerDown:x=>{m(t.id,x.shiftKey||x.metaKey||x.ctrlKey),p(t.id,x)},onDoubleClick:x=>{if(t.kind!=="directory")return;const P=x.target instanceof HTMLElement?x.target:null;P!=null&&P.closest('button,input,textarea,select,[contenteditable="true"],[contenteditable=""]')||(x.stopPropagation(),ie(t.id))},children:[!Oe&&n.jsxs("div",{className:"node-header",children:[n.jsx("span",{className:"node-kind",children:n.jsx(_a,{size:14})}),n.jsx("input",{value:t.title,"aria-label":"Node title",readOnly:ce,onPointerDown:x=>x.stopPropagation(),onChange:x=>{ce||c(t.id,{title:x.target.value})}})]}),Zt&&typeof document<"u"?Zu.createPortal(Zt,document.body):Zt,ye&&Gt&&Fe&&n.jsx("div",{className:"node-memo-palette","data-testid":"node-memo-palette",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:Br.map(x=>n.jsx("button",{type:"button",className:x.key===Fe.key?"is-active":"",title:`${x.label} memo color`,"aria-label":`${x.label} memo color`,"aria-pressed":x.key===Fe.key,"data-memo-color":x.key,style:{"--memo-swatch":x.swatch,"--memo-swatch-ring":x.ring},onPointerDown:P=>P.stopPropagation(),onClick:P=>Ns(x.key,P)},x.key))}),Rt?n.jsx("div",{className:`node-image-wrap ${Le.length>1?"node-image-wrap--stack":""} ${wt?"node-image-wrap--mask":""}`,"data-testid":wt?"node-mask-preview":Le.length>1?"node-image-stack":void 0,children:n.jsx(dr,{src:Rt,traceId:t.id,kind:wt?"mask":"node-image",testId:"node-secure-image"})}):Da?n.jsx(dm,{node:t,onPatch:c,onCreateRemoteControl:se}):Vt?n.jsx(lm,{node:t,onPatch:c}):ce?n.jsx("div",{className:"node-template-card","data-testid":"node-template-card",children:de&&mt?n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"node-template-card__summary",children:[n.jsx("strong",{children:de.prompt||de.description}),n.jsx("span",{children:mt.description||de.description})]}),n.jsx("div",{className:"node-template-card__options","data-testid":"node-template-card-options",children:de.options.map(x=>n.jsxs("button",{type:"button",className:x.id===mt.id?"is-active":"","data-testid":"node-template-card-option","data-option-id":x.id,onPointerDown:P=>P.stopPropagation(),onClick:P=>st(x.id,P),children:[n.jsx("strong",{children:x.label}),n.jsx("span",{children:x.description})]},x.id||x.templateId))}),n.jsxs("div",{className:"node-template-card__inputs","data-testid":"node-template-card-inputs",children:[mt.inputs.map(x=>n.jsx(bh,{input:x,value:de.inputValues[x.key]??"",onChange:P=>Nn(x.key,P)},x.key)),mt.inputs.length===0&&n.jsx("p",{className:"node-template-card__empty",children:de.noInputsLabel||"No inputs needed."})]}),Kt&&n.jsx("div",{className:"node-template-card__validation",children:Kt}),n.jsxs("button",{type:"button",className:"node-template-card__generate","data-testid":"node-template-card-generate",disabled:!!Kt,onPointerDown:Dt,onClick:x=>x.stopPropagation(),children:[n.jsx(ia,{size:13}),n.jsx("span",{children:de.generateLabel||de.actionLabel||"Generate"})]})]}):n.jsx("div",{className:"node-template-card__missing",children:"Template card payload is unavailable."})}):we?n.jsxs("div",{className:`node-embed-card ${_e?"has-embed-thumbnail":"is-embed-link"}`,"data-testid":"node-embed-card",children:[n.jsx("div",{className:"node-embed-preview",children:_e?n.jsx(dr,{src:_e,traceId:t.id,kind:"embed-thumbnail",testId:"node-embed-thumbnail"}):n.jsxs("div",{className:"node-embed-placeholder",children:[n.jsx(hn,{size:24}),n.jsx("strong",{children:vt==="youtube"?"YouTube":"Web embed"}),n.jsx("span",{children:fo||$e||"External link"})]})}),n.jsx("textarea",{value:t.body,"aria-label":"Embed URL or description",spellCheck:!1,onPointerDown:x=>x.stopPropagation(),onChange:x=>{const P=x.target.value;c(t.id,{body:P,assetUrl:P,metadata:{...t.metadata??{},sourceUrl:P,url:P}})}}),$e&&n.jsx("span",{className:"node-embed-source",title:$e,children:$e})]}):kt?n.jsxs("div",{className:`node-video-card ${qe?"has-video-source":"is-video-prompt"}`,"data-testid":"node-video-card",children:[qe?n.jsx("video",{ref:pe,src:qe,className:"node-video-player","data-testid":"node-video-player",controls:!0,preload:"metadata",onPointerDown:x=>x.stopPropagation()}):n.jsxs("div",{className:"node-video-placeholder",children:[n.jsx(gn,{size:24}),n.jsx("strong",{children:"Video prompt"}),n.jsx("span",{children:((vo=t.metadata)==null?void 0:vo.MediaModel)||((Sa=t.metadata)==null?void 0:Sa.MediaProvider)||"Adapter gated"})]}),n.jsx("textarea",{value:t.body,"aria-label":"Video prompt or source",spellCheck:!1,onPointerDown:x=>x.stopPropagation(),onChange:x=>c(t.id,{body:x.target.value})}),qe&&n.jsx("span",{className:"node-video-source",title:Sn,children:Sn})]}):Re?n.jsxs("div",{className:`node-asset-card node-asset-card--${t.kind}`,"data-testid":"node-asset-card",children:[n.jsx("div",{className:"node-asset-icon",children:n.jsx(_a,{size:28})}),n.jsxs("div",{className:"node-asset-copy",children:[n.jsx("strong",{title:We,children:We}),n.jsx("span",{children:t.kind==="directory"?"Directory reference":t.kind==="pdf"?"PDF document":"File reference"}),t.kind==="directory"&&(Xt||Oa||wn||Ee||jt)&&n.jsxs("dl",{className:"node-asset-meta","data-testid":"node-directory-meta",children:[(wn||Ee)&&n.jsxs(n.Fragment,{children:[n.jsx("dt",{children:"Scanned"}),n.jsxs("dd",{children:[Number(wn??0).toLocaleString()," files / ",Number(Ee??0).toLocaleString()," folders"]})]}),Xt&&n.jsxs(n.Fragment,{children:[n.jsx("dt",{children:"Include"}),n.jsx("dd",{children:Xt})]}),Oa&&n.jsxs(n.Fragment,{children:[n.jsx("dt",{children:"Exclude"}),n.jsx("dd",{children:Oa})]}),jt&&n.jsxs(n.Fragment,{children:[n.jsx("dt",{children:"Updated"}),n.jsx("dd",{children:new Date(jt).toLocaleString()})]})]})]})]}):nt?n.jsxs("div",{className:"node-csv-card","data-testid":"node-csv-card",children:[n.jsx(xh,{preview:pa,sort:It,onSort:x=>{const P=(It==null?void 0:It.columnIndex)===x&&It.direction==="asc"?"desc":"asc";Ha({columnIndex:x,direction:P}),f.emit("node.csvTable.sort",{id:t.id,columnIndex:x,direction:P})}}),n.jsx("textarea",{value:t.body,"aria-label":"CSV source",spellCheck:!1,wrap:"off",onPointerDown:x=>x.stopPropagation(),onChange:x=>c(t.id,{body:x.target.value})})]}):at?n.jsxs("div",{className:"node-markdown-card","data-testid":"node-markdown-card",children:[n.jsx("div",{className:"node-markdown-preview mindcanvas-text-scrollable-view","data-testid":"node-markdown-preview","aria-label":"Markdown preview",children:n.jsx(wh,{value:t.body})}),n.jsx("textarea",{value:t.body,"aria-label":"Markdown source",spellCheck:!1,wrap:t.wordWrap===!1?"off":"soft",onPointerDown:x=>x.stopPropagation(),onChange:x=>c(t.id,{body:x.target.value})})]}):n.jsx(n.Fragment,{children:n.jsx("textarea",{value:t.body,"aria-label":"Node body",spellCheck:!1,wrap:t.wordWrap===!1?"off":"soft",onPointerDown:x=>x.stopPropagation(),onChange:x=>c(t.id,{body:x.target.value})})}),ko,Ze,n.jsx("button",{type:"button",className:"node-resize-handle",title:"Resize node","aria-label":"Resize node",onPointerDown:x=>b(t.id,x)})]})});function bh({input:e,value:t,onChange:o}){return n.jsxs("label",{className:"node-template-card__field",children:[n.jsxs("span",{children:[n.jsx("strong",{children:e.label}),e.description&&n.jsx("small",{children:e.description})]}),e.type==="textarea"?n.jsx("textarea",{value:t,placeholder:e.placeholder,onPointerDown:r=>r.stopPropagation(),onChange:r=>o(r.target.value)}):e.type==="select"?n.jsx("select",{value:t,onPointerDown:r=>r.stopPropagation(),onChange:r=>o(r.target.value),children:(e.options??[]).map(r=>n.jsx("option",{value:r.value,children:r.label},r.value))}):n.jsx("input",{type:"text",value:t,placeholder:e.placeholder,onPointerDown:r=>r.stopPropagation(),onChange:r=>o(r.target.value)})]})}function yh(e){const r=Math.min(430,window.innerHeight-24),l=Math.max(12,window.innerWidth-332-12),m=Math.min(Math.max(e.right-332,12),l),p=e.bottom+8,b=e.top-r-8,c=Math.max(12,window.innerHeight-r-12),y=p<=c?p:Math.max(12,b);return{left:m,top:Math.min(y,c)}}function xh({preview:e,sort:t,onSort:o}){return!e||e.headers.length===0?n.jsx("div",{className:"csv-table-scroll mindcanvas-text-scrollable-view","data-testid":"csv-table-preview","aria-label":"CSV table preview",children:n.jsx("p",{className:"node-md-empty",children:"Paste CSV source to preview a table."})}):n.jsxs("div",{className:"csv-table-scroll mindcanvas-text-scrollable-view","data-testid":"csv-table-preview","data-sort-column":(t==null?void 0:t.columnIndex)??"","data-sort-direction":(t==null?void 0:t.direction)??"","data-total-rows":e.totalRows,"data-rendered-rows":e.renderedRows,"aria-label":"CSV table preview",onPointerDown:r=>r.stopPropagation(),children:[n.jsxs("table",{className:"csv-table",children:[n.jsx("thead",{children:n.jsx("tr",{children:e.headers.map((r,l)=>{const m=(t==null?void 0:t.columnIndex)===l,p=m&&t.direction==="asc"?"descending":"ascending";return n.jsx("th",{"aria-sort":m?t.direction==="asc"?"ascending":"descending":"none",children:n.jsxs("button",{type:"button",className:`csv-table-header-button ${m?"is-active":""}`,"data-testid":`csv-table-sort-${l}`,"aria-label":`Sort CSV by ${r||`Column ${l+1}`} ${p}`,onClick:()=>o(l),children:[n.jsx("span",{children:r||`Column ${l+1}`}),m&&n.jsx("small",{children:t.direction==="asc"?"Asc":"Desc"})]})},`${r}-${l}`)})})}),n.jsx("tbody",{children:e.rows.map((r,l)=>n.jsx("tr",{children:e.headers.map((m,p)=>n.jsx("td",{className:"csv-table-cell",children:r[p]??""},`csv-cell-${l}-${p}`))},`csv-row-${l}`))})]}),n.jsxs("div",{className:"csv-table-status",children:[n.jsxs("span",{children:[e.totalRows.toLocaleString()," rows"]}),n.jsxs("span",{children:[e.columnCount.toLocaleString()," columns"]}),e.truncated&&n.jsxs("span",{children:["showing ",e.renderedRows.toLocaleString()]})]})]})}function Ch(e,t){const o=Sh(e,Hd+1);if(o.length===0)return null;const r=Math.min(lh,Math.max(...o.map(c=>c.length),1)),l=Wd(o[0],r).map((c,y)=>c.trim()||`Column ${y+1}`),m=o.slice(1,Hd+1).map(c=>Wd(c,r)),p=t?[...m].sort((c,y)=>kh(c[t.columnIndex]??"",y[t.columnIndex]??"",t.direction)):m,b=Math.max(0,String(e||"").split(/\r\n|\n|\r/).filter(c=>c.length>0).length-1);return{headers:l,rows:p,totalRows:b,columnCount:r,renderedRows:p.length,truncated:b>p.length}}function Sh(e,t){const o=[];let r=[],l="",m=!1;const p=String(e||"").replace(/\r\n/g,`
4
4
  `).replace(/\r/g,`
@@ -1,4 +1,4 @@
1
- import{r,j as e}from"./vendor-react-BXzpOyCS.js";import{l as Re,i as Le}from"./storage-CWUvUZC-.js";import{a9 as ee,s as Q,aa as Te,a8 as Y,ab as $e}from"./canvas-runtime-hH7qY6Be.js";import{R as j}from"./app-runtime-xD2Z3NdN.js";import{aJ as Ee,Q as te,g as ze,aL as q,N as se,aM as De,A as ae,aN as Ie,aO as Be,J as re,aP as Fe,aQ as ne,R as Oe,c as Ue,F as Ge,T as _e,h as Je,aC as He,aR as Ke}from"./vendor-icons-D0xKCnZS.js";import"./runtimeSettingsPersistenceProjection-BoNWmYjU.js";const ie="mindexec-react-planmaster-v1",le=["Planning","Product","Marketing","Monetization","Ops","Growth"],oe=["Pending","Running","Done","Blocked","Failed"],Qe=["Canvas.ListMindMapNodes","Plan.ListSteps","Plan.SetStepStatus","Plan.CreateNote"],Ye=["Pending","Running","Done","Failed"],ce=["all","artifact","reflection","next_action","blocker","evidence","decision"],S="Launch MindExec React with a clear global USD path and one proof-producing user workflow.";function R(a){return typeof crypto<"u"&&"randomUUID"in crypto?`${a}-${crypto.randomUUID()}`:`${a}-${Date.now()}-${Math.random().toString(36).slice(2,8)}`}function p(){return new Date().toISOString()}function I(){const a=p();return{goal:S,steps:de(S,0),notes:[{id:R("note"),kind:"reflection",agentName:"PlanMaster Local Planner",title:"Initial plan restored",body:"This React PlanMaster keeps the original planning habit alive without loading the Blazor PlanAgent surface.",metrics:"6 steps / local state",updatedAt:a}],updatedAt:a}}function qe(){try{const a=window.localStorage.getItem(ie);if(!a)return I();const n=JSON.parse(a);return!Array.isArray(n.steps)||!Array.isArray(n.notes)?I():{goal:String(n.goal||S),steps:Ve(n.steps),notes:Xe(n.notes),updatedAt:String(n.updatedAt||p())}}catch{return I()}}function Ve(a){return a.map((n,o)=>{const i=n,L=le.includes(i.category)?i.category:"Planning",m=oe.includes(i.status)?i.status:"Pending",f=i.priority==="High"||i.priority==="Medium"||i.priority==="Low"?i.priority:"Medium";return{id:String(i.id||R("step")),stepNumber:Number(i.stepNumber||o+1),category:L,title:String(i.title||`Step ${o+1}`),detail:String(i.detail||""),status:m,note:i.note?String(i.note):void 0,priority:f,updatedAt:String(i.updatedAt||p())}}).sort((n,o)=>n.stepNumber-o.stepNumber)}function Xe(a){return a.map(n=>{const o=n,i=ce.includes(o.kind)?o.kind:"reflection";return{id:String(o.id||R("note")),kind:i,agentName:String(o.agentName||"PlanMaster Local Planner"),title:String(o.title||"Untitled note"),body:String(o.body||""),metrics:String(o.metrics||""),updatedAt:String(o.updatedAt||p())}}).sort((n,o)=>Date.parse(o.updatedAt)-Date.parse(n.updatedAt))}function We(a){window.localStorage.setItem(ie,JSON.stringify(a))}function Ze(a){const n=a.toLowerCase();return n.includes("talkagent")?"TalkAgent":n.includes("code")?"CodeGraph":n.includes("pricing")||n.includes("revenue")||n.includes("usd")?"USD offer":n.includes("tool")?"free-tool funnel":"MindExec"}function de(a,n){const o=Ze(a),i=p();return[{category:"Planning",title:"Define the success contract",detail:`Turn "${a.trim()||S}" into a measurable launch contract with proof, channel, risk, and finish criteria.`,priority:"High"},{category:"Product",title:`Ship the smallest useful ${o} workflow`,detail:"Keep the first workflow complete enough to prove value, but narrow enough to verify in one browser session.",priority:"High"},{category:"Marketing",title:"Publish one English-first proof asset",detail:"Create a short public artifact that shows before/after value and links directly to the working product surface.",priority:"High"},{category:"Monetization",title:"Connect the proof to a USD offer",detail:"Make the next paid step visible without blocking free utility value or local-first trust.",priority:"Medium"},{category:"Ops",title:"Verify runtime and rollback evidence",detail:"Run build, hosted route checks, console checks, and record the exact deployed bundle evidence.",priority:"Medium"},{category:"Growth",title:"Reuse the result as the next launch input",detail:"Capture learnings, customer language, and next actions back into MindCanvas or PlanMaster memory.",priority:"Low"}].map((m,f)=>({...m,id:R("step"),stepNumber:n+f+1,status:"Pending",updatedAt:i}))}function et(a,n,o){return["You are the MindExec PlanMaster local planner.",Y(n),"Create categorized execution steps, concise evidence notes, and next actions.",o?"Use the current MindCanvas board context when it is available.":"Plan from the goal only; do not assume MindCanvas board context.","",`Goal: ${a.trim()||S}`].join(`
1
+ import{r,j as e}from"./vendor-react-BXzpOyCS.js";import{l as Re,i as Le}from"./storage-vDrcB8Ax.js";import{a9 as ee,s as Q,aa as Te,a8 as Y,ab as $e}from"./canvas-runtime-BDhmTypA.js";import{R as j}from"./app-runtime-xD2Z3NdN.js";import{aJ as Ee,Q as te,g as ze,aL as q,N as se,aM as De,A as ae,aN as Ie,aO as Be,J as re,aP as Fe,aQ as ne,R as Oe,c as Ue,F as Ge,T as _e,h as Je,aC as He,aR as Ke}from"./vendor-icons-D0xKCnZS.js";import"./runtimeSettingsPersistenceProjection-BoNWmYjU.js";const ie="mindexec-react-planmaster-v1",le=["Planning","Product","Marketing","Monetization","Ops","Growth"],oe=["Pending","Running","Done","Blocked","Failed"],Qe=["Canvas.ListMindMapNodes","Plan.ListSteps","Plan.SetStepStatus","Plan.CreateNote"],Ye=["Pending","Running","Done","Failed"],ce=["all","artifact","reflection","next_action","blocker","evidence","decision"],S="Launch MindExec React with a clear global USD path and one proof-producing user workflow.";function R(a){return typeof crypto<"u"&&"randomUUID"in crypto?`${a}-${crypto.randomUUID()}`:`${a}-${Date.now()}-${Math.random().toString(36).slice(2,8)}`}function p(){return new Date().toISOString()}function I(){const a=p();return{goal:S,steps:de(S,0),notes:[{id:R("note"),kind:"reflection",agentName:"PlanMaster Local Planner",title:"Initial plan restored",body:"This React PlanMaster keeps the original planning habit alive without loading the Blazor PlanAgent surface.",metrics:"6 steps / local state",updatedAt:a}],updatedAt:a}}function qe(){try{const a=window.localStorage.getItem(ie);if(!a)return I();const n=JSON.parse(a);return!Array.isArray(n.steps)||!Array.isArray(n.notes)?I():{goal:String(n.goal||S),steps:Ve(n.steps),notes:Xe(n.notes),updatedAt:String(n.updatedAt||p())}}catch{return I()}}function Ve(a){return a.map((n,o)=>{const i=n,L=le.includes(i.category)?i.category:"Planning",m=oe.includes(i.status)?i.status:"Pending",f=i.priority==="High"||i.priority==="Medium"||i.priority==="Low"?i.priority:"Medium";return{id:String(i.id||R("step")),stepNumber:Number(i.stepNumber||o+1),category:L,title:String(i.title||`Step ${o+1}`),detail:String(i.detail||""),status:m,note:i.note?String(i.note):void 0,priority:f,updatedAt:String(i.updatedAt||p())}}).sort((n,o)=>n.stepNumber-o.stepNumber)}function Xe(a){return a.map(n=>{const o=n,i=ce.includes(o.kind)?o.kind:"reflection";return{id:String(o.id||R("note")),kind:i,agentName:String(o.agentName||"PlanMaster Local Planner"),title:String(o.title||"Untitled note"),body:String(o.body||""),metrics:String(o.metrics||""),updatedAt:String(o.updatedAt||p())}}).sort((n,o)=>Date.parse(o.updatedAt)-Date.parse(n.updatedAt))}function We(a){window.localStorage.setItem(ie,JSON.stringify(a))}function Ze(a){const n=a.toLowerCase();return n.includes("talkagent")?"TalkAgent":n.includes("code")?"CodeGraph":n.includes("pricing")||n.includes("revenue")||n.includes("usd")?"USD offer":n.includes("tool")?"free-tool funnel":"MindExec"}function de(a,n){const o=Ze(a),i=p();return[{category:"Planning",title:"Define the success contract",detail:`Turn "${a.trim()||S}" into a measurable launch contract with proof, channel, risk, and finish criteria.`,priority:"High"},{category:"Product",title:`Ship the smallest useful ${o} workflow`,detail:"Keep the first workflow complete enough to prove value, but narrow enough to verify in one browser session.",priority:"High"},{category:"Marketing",title:"Publish one English-first proof asset",detail:"Create a short public artifact that shows before/after value and links directly to the working product surface.",priority:"High"},{category:"Monetization",title:"Connect the proof to a USD offer",detail:"Make the next paid step visible without blocking free utility value or local-first trust.",priority:"Medium"},{category:"Ops",title:"Verify runtime and rollback evidence",detail:"Run build, hosted route checks, console checks, and record the exact deployed bundle evidence.",priority:"Medium"},{category:"Growth",title:"Reuse the result as the next launch input",detail:"Capture learnings, customer language, and next actions back into MindCanvas or PlanMaster memory.",priority:"Low"}].map((m,f)=>({...m,id:R("step"),stepNumber:n+f+1,status:"Pending",updatedAt:i}))}function et(a,n,o){return["You are the MindExec PlanMaster local planner.",Y(n),"Create categorized execution steps, concise evidence notes, and next actions.",o?"Use the current MindCanvas board context when it is available.":"Plan from the goal only; do not assume MindCanvas board context.","",`Goal: ${a.trim()||S}`].join(`
2
2
  `)}function z(a,n,o,i=""){return{id:R("note"),kind:a,agentName:"PlanMaster Local Planner",title:n,body:o,metrics:i,updatedAt:p()}}function B(a){if(!a)return"-";const n=new Date(a);return Number.isNaN(n.getTime())?"-":n.toLocaleString(void 0,{month:"short",day:"2-digit",hour:"2-digit",minute:"2-digit"})}function tt(a){return a==="Running"?"next_action":a==="Done"?"evidence":a==="Blocked"||a==="Failed"?"blocker":"reflection"}function at(a){return a.timestamp||a.timestamp===""?a.timestamp:void 0}function pt({navigate:a}){const[n,o]=r.useState(()=>qe()),[i,L]=r.useState(()=>ee()),[m,f]=r.useState(()=>n.goal),[v,ue]=r.useState(!0),[F,pe]=r.useState(!0),[b,me]=r.useState(!0),[y,k]=r.useState(!1),[O,T]=r.useState(0),[N,he]=r.useState(10),[U,ge]=r.useState(!0),[$,xe]=r.useState("all"),[G,be]=r.useState(""),[C,je]=r.useState(1),[M,fe]=r.useState("Running"),[E,ye]=r.useState("Local PlanMaster tool contract run."),[Ne,P]=r.useState("Run a PlanMaster tool to inspect the local contract output."),[V,_]=r.useState([]),[Se,J]=r.useState(()=>Q()?"Not refreshed yet":"Access gated"),[X,W]=r.useState(!1),H=r.useRef(),w=r.useMemo(()=>Te(i),[i]);r.useEffect(()=>{const t=()=>L(ee());return window.addEventListener("storage",t),window.addEventListener("focus",t),()=>{window.removeEventListener("storage",t),window.removeEventListener("focus",t)}},[]),r.useEffect(()=>(window.clearTimeout(H.current),H.current=window.setTimeout(()=>We(n),250),()=>window.clearTimeout(H.current)),[n]);const h=r.useCallback(t=>{o(s=>({...t(s),updatedAt:p()}))},[]),A=r.useMemo(()=>{const t=new Map;for(const l of oe)t.set(l,0);for(const l of n.steps)t.set(l.status,(t.get(l.status)||0)+1);const s=t.get("Done")||0,c=n.steps.length||1;return{total:n.steps.length,done:s,running:t.get("Running")||0,blocked:t.get("Blocked")||0,progress:Math.round(s/c*100)}},[n.steps]),ve=r.useMemo(()=>le.map(t=>({category:t,steps:n.steps.filter(s=>s.category===t)})),[n.steps]),Z=r.useMemo(()=>{const t=G.trim().toLowerCase();return n.notes.filter(s=>$!=="all"&&s.kind!==$?!1:t?`${s.title} ${s.body} ${s.metrics} ${s.agentName}`.toLowerCase().includes(t):!0)},[$,G,n.notes]),K=r.useCallback(()=>{const t=m.trim()||S,s=et(t,i,v),c=Y(i);h(l=>{const u=b?l.steps.length:0,d=de(t,u),x=z("decision",b?"Appended a new plan session":"Generated a fresh plan",[`Goal: ${t}`,c].join(`
3
3
  `),[`${d.length} steps`,v?"MindCanvas context enabled":"Standalone plan",`Language ${w.label}`].join(" / "));return j.emit("planmaster.plan.generated",{append:b,stepCount:d.length,appLanguage:i,promptChars:s.length}),{goal:t,steps:b?[...l.steps,...d]:d,notes:[x,...b?l.notes:[]],updatedAt:p()}}),T(0),k(!1)},[i,w.label,m,b,h,v]),g=r.useCallback((t,s,c)=>{h(l=>{const u=l.steps.find(x=>x.id===t);if(!u)return l;const d=z(tt(s),`Step ${u.stepNumber} marked ${s}`,c||u.detail,`${u.category} / ${u.priority}`);return j.emit("planmaster.step.status",{stepNumber:u.stepNumber,status:s}),j.emit("planmaster.execution.note",{kind:d.kind,title:d.title}),{...l,steps:l.steps.map(x=>x.id===t?{...x,status:s,note:c||x.note,updatedAt:p()}:x),notes:[d,...l.notes]}})},[h]),ke=r.useCallback(t=>{const s=Y(i);if(j.emit("planmaster.tool.run",{toolName:t,appLanguage:i}),t==="Canvas.ListMindMapNodes"){const l=Re(Le),u=l.nodes.slice(0,60).map(d=>({id:d.id,contentType:d.kind,prompt:d.title,response:String(d.result||d.body||"").slice(0,500),isAiEnabled:d.aiEnabled!==!1}));P(JSON.stringify({boardId:l.id,boardTitle:l.name,appLanguage:i,languageInstruction:s,count:u.length,nodes:u},null,2));return}if(t==="Plan.ListSteps"){P(JSON.stringify({appLanguage:i,languageInstruction:s,steps:n.steps.map(l=>({stepNumber:l.stepNumber,category:l.category,title:l.title,status:l.status,note:l.note||""}))},null,2));return}if(t==="Plan.SetStepStatus"){const l=n.steps.find(u=>u.stepNumber===C);if(!l){P(`Error: stepNumber ${C} was not found.`);return}g(l.id,M,E.trim()||`Plan.SetStepStatus -> ${M}`),P(`Updated step ${C} status to '${M}'.`);return}const c=z("artifact","Plan.CreateNote local artifact",[E.trim()||"Created by the local PlanMaster tool contract panel.",s].join(`
4
4
  `),`Plan.CreateNote / local shell / Language ${w.label}`);h(l=>({...l,notes:[c,...l.notes]})),j.emit("planmaster.execution.note",{kind:c.kind,title:c.title,source:"Plan.CreateNote"}),P(`Created PlanMaster note node: ${c.id}`)},[i,w.label,g,n.steps,E,M,C,h]),Ce=r.useCallback(()=>{if(F&&n.steps.length===0){K();return}const t=n.steps.find(s=>s.status==="Pending")||n.steps.find(s=>s.status==="Blocked");t&&(k(!0),T(s=>Math.min(N,s+1)),g(t.id,"Running","Local PlanMaster run selected this as the next active step."))},[F,K,N,g,n.steps]),Me=r.useCallback(()=>{const t=n.steps.find(c=>c.status==="Running");t&&g(t.id,"Done","Completed in the local PlanMaster run.");const s=n.steps.find(c=>c.status==="Pending");s&&O<N?(T(c=>c+1),g(s.id,"Running","Advanced to the next local execution step.")):k(!1)},[O,N,g,n.steps]),Pe=r.useCallback(()=>{k(!1),h(t=>({...t,notes:[z("reflection","Stopped local PlanMaster run","The local execution loop was stopped by the user."),...t.notes]}))},[h]),we=r.useCallback(()=>{const t=I();o(t),f(t.goal),k(!1),T(0),j.emit("planmaster.plan.generated",{reset:!0,stepCount:t.steps.length})},[]),Ae=r.useCallback(async()=>{if(!Q()){J("Access gated"),_([]);return}W(!0);try{const s=((await $e()).items||[]).slice(-12).reverse();_(s),J(s.length>0?`Updated ${new Date().toLocaleTimeString()}`:"No change feed items yet"),j.emit("planmaster.bridgeFeed.refreshed",{count:s.length})}catch(t){J(t instanceof Error?t.message:String(t)),_([])}finally{W(!1)}},[]);return e.jsxs("div",{className:"page planmaster-page","data-testid":"planmaster-app-language","data-app-language":i,"data-app-language-label":w.label,children:[e.jsxs("section",{className:"planmaster-hero",children:[e.jsxs("div",{children:[e.jsx("div",{className:"eyebrow",children:"PlanAgent / PlanMaster"}),e.jsx("h1",{children:"Turn a goal into an executable plan board."}),e.jsx("p",{children:"A React replacement for the original PlanMaster surface: goal intake, categorized steps, execution memory, and bridge feed visibility without loading the Blazor 3D agent canvas."})]}),e.jsxs("div",{className:"planmaster-hero-actions",children:[e.jsx("button",{className:"btn btn-secondary",type:"button",onClick:()=>a("/mindcanvas"),children:"Open MindCanvas"}),e.jsxs("button",{className:"btn btn-ghost",type:"button",onClick:we,children:[e.jsx(Ee,{size:16}),"Reset"]})]})]}),e.jsxs("section",{className:"planmaster-layout",children:[e.jsxs("aside",{className:"planmaster-control-panel",children:[e.jsxs("div",{className:"planmaster-panel-head",children:[e.jsx(te,{size:18}),e.jsx("strong",{children:"Agent control"})]}),e.jsxs("label",{className:"planmaster-field",children:[e.jsx("span",{children:"Goal"}),e.jsx("textarea",{"data-testid":"planmaster-goal-input",value:m,onChange:t=>f(t.target.value),placeholder:"Enter the agent goal..."})]}),e.jsxs("label",{className:"planmaster-check",children:[e.jsx("input",{type:"checkbox",checked:v,onChange:t=>ue(t.target.checked)}),e.jsx("span",{children:"Use current MindCanvas board as context"})]}),e.jsxs("label",{className:"planmaster-check",children:[e.jsx("input",{type:"checkbox",checked:F,disabled:!v,onChange:t=>pe(t.target.checked)}),e.jsx("span",{children:"Generate or update a plan before running"})]}),e.jsxs("label",{className:"planmaster-check",children:[e.jsx("input",{type:"checkbox",checked:b,onChange:t=>me(t.target.checked)}),e.jsx("span",{children:"Preserve canvas memory and append this run"})]}),e.jsxs("label",{className:"planmaster-field planmaster-field--compact",children:[e.jsx("span",{children:"Max iterations"}),e.jsx("input",{type:"number",min:1,max:30,value:N,onChange:t=>he(Math.max(1,Math.min(30,Number(t.target.value)||1)))})]}),e.jsxs("div",{className:"planmaster-command-grid",children:[e.jsxs("button",{className:"btn btn-primary",type:"button","data-testid":"planmaster-generate-plan",onClick:K,disabled:!m.trim(),children:[e.jsx(ze,{size:16}),"Generate plan"]}),e.jsxs("button",{className:"btn btn-secondary",type:"button",onClick:Ce,disabled:n.steps.length===0||y,children:[e.jsx(q,{size:16}),"Start"]}),e.jsxs("button",{className:"btn btn-secondary",type:"button",onClick:Me,disabled:!y,children:[e.jsx(se,{size:16}),"Advance"]}),e.jsxs("button",{className:"btn btn-ghost",type:"button",onClick:Pe,disabled:!y,children:[e.jsx(De,{size:16}),"Stop"]})]}),e.jsxs("div",{className:`planmaster-agent-status ${y?"is-running":""}`,children:[y?e.jsx(ae,{size:17,className:"spin-icon"}):e.jsx(Ie,{size:17}),e.jsx("span",{children:y?"Running local plan loop":"Idle"}),e.jsxs("b",{children:[O," / ",N]})]})]}),e.jsxs("main",{className:"planmaster-board",children:[e.jsxs("div",{className:"planmaster-board-head",children:[e.jsxs("div",{children:[e.jsx("span",{className:"card-label",children:"Plan canvas"}),e.jsx("h2",{"data-testid":"planmaster-board-goal",children:n.goal})]}),e.jsxs("div",{className:"planmaster-progress",children:[e.jsxs("strong",{children:[A.progress,"%"]}),e.jsxs("span",{children:[A.done," done"]})]})]}),e.jsxs("div",{className:"planmaster-metric-strip",children:[e.jsx(D,{icon:Be,label:"Steps",value:String(A.total)}),e.jsx(D,{icon:q,label:"Running",value:String(A.running)}),e.jsx(D,{icon:re,label:"Blocked",value:String(A.blocked)}),e.jsx(D,{icon:Fe,label:"Updated",value:B(n.updatedAt)})]}),e.jsx("div",{className:"planmaster-lanes",children:ve.map(t=>e.jsxs("section",{className:"planmaster-lane",children:[e.jsxs("div",{className:"planmaster-lane-head",children:[e.jsx("strong",{children:t.category}),e.jsx("span",{children:t.steps.length})]}),t.steps.length>0?t.steps.map(s=>e.jsx(nt,{step:s,onStatus:g},s.id)):e.jsx("div",{className:"planmaster-empty-lane",children:"No step yet"})]},t.category))})]}),e.jsxs("aside",{className:"planmaster-side",children:[e.jsxs("section",{className:"planmaster-tool-panel",children:[e.jsxs("div",{className:"planmaster-panel-head",children:[e.jsx(te,{size:18}),e.jsx("strong",{children:"Tool Contract"})]}),e.jsx("p",{children:"Original PlanMaster agent tools, simulated against local React state."}),e.jsx("div",{className:"planmaster-tool-grid",children:Qe.map(t=>e.jsx("button",{type:"button","data-tool-name":t,onClick:()=>ke(t),children:t},t))}),e.jsxs("div",{className:"planmaster-tool-form",children:[e.jsxs("label",{children:[e.jsx("span",{children:"stepNumber"}),e.jsx("input",{"data-testid":"planmaster-tool-step-number",type:"number",min:1,value:C,onChange:t=>je(Math.max(1,Number(t.target.value)||1))})]}),e.jsxs("label",{children:[e.jsx("span",{children:"status"}),e.jsx("select",{"data-testid":"planmaster-tool-status",value:M,onChange:t=>fe(t.target.value),children:Ye.map(t=>e.jsx("option",{value:t,children:t},t))})]})]}),e.jsxs("label",{className:"planmaster-tool-note",children:[e.jsx("span",{children:"note/content"}),e.jsx("textarea",{"data-testid":"planmaster-tool-note",value:E,onChange:t=>ye(t.target.value)})]}),e.jsx("pre",{className:"planmaster-tool-output","data-testid":"planmaster-tool-output",children:Ne})]}),e.jsxs("section",{className:"planmaster-bridge-panel",children:[e.jsxs("div",{className:"planmaster-panel-head",children:[e.jsx(ne,{size:18}),e.jsx("strong",{children:"Bridge Feed"}),e.jsx("button",{type:"button",title:"Refresh bridge feed",onClick:Ae,disabled:X,children:X?e.jsx(ae,{size:15,className:"spin-icon"}):e.jsx(Oe,{size:15})})]}),e.jsxs("div",{className:"planmaster-bridge-status",children:[Q()?e.jsx(ne,{size:15}):e.jsx(Ue,{size:15}),Se]}),e.jsx("div",{className:"planmaster-feed-list",children:V.length>0?V.map((t,s)=>e.jsxs("article",{className:"planmaster-feed-item",children:[e.jsxs("div",{children:[e.jsx("strong",{children:t.changeType||"change"}),e.jsx("span",{children:B(at(t))})]}),e.jsx("p",{children:t.message||t.path||"(no details)"})]},`${t.timestamp||s}-${t.path||t.message||""}`)):e.jsx("div",{className:"planmaster-empty-lane",children:"No bridge feed items loaded."})})]}),e.jsxs("section",{className:`planmaster-memory-panel ${U?"":"is-collapsed"}`,children:[e.jsxs("div",{className:"planmaster-panel-head",children:[e.jsx(Ge,{size:18}),e.jsx("strong",{children:"Execution Memory"}),e.jsx("button",{type:"button",onClick:()=>ge(t=>!t),children:U?e.jsx(_e,{size:15}):e.jsx(Je,{size:15})})]}),U&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"planmaster-memory-filters",children:ce.map(t=>e.jsx("button",{className:$===t?"is-selected":"",type:"button",onClick:()=>xe(t),children:t.replace("_"," ")},t))}),e.jsxs("label",{className:"planmaster-memory-search",children:[e.jsx(He,{size:15}),e.jsx("input",{value:G,onChange:t=>be(t.target.value),placeholder:"Search memory notes..."})]}),e.jsx("div",{className:"planmaster-memory-list","data-testid":"planmaster-memory-list",children:Z.length>0?Z.map(t=>e.jsx(rt,{note:t},t.id)):e.jsx("div",{className:"planmaster-empty-lane",children:"No execution memory notes match the current filter."})})]})]})]})]})]})}function D({icon:a,label:n,value:o}){return e.jsxs("article",{className:"planmaster-metric",children:[e.jsx(a,{size:17}),e.jsx("span",{children:n}),e.jsx("strong",{children:o})]})}function nt({step:a,onStatus:n}){return e.jsxs("article",{className:`plan-step-card plan-step-card--${a.status.toLowerCase()}`,"data-testid":"planmaster-step-card","data-step-number":a.stepNumber,"data-step-status":a.status,children:[e.jsxs("div",{className:"plan-step-top",children:[e.jsxs("span",{children:["Step ",a.stepNumber]}),e.jsx(st,{status:a.status})]}),e.jsx("h3",{children:a.title}),e.jsx("p",{children:a.detail}),a.note&&e.jsx("div",{className:"plan-step-note",children:a.note}),e.jsxs("div",{className:"plan-step-footer",children:[e.jsx("span",{children:a.priority}),e.jsx("span",{children:B(a.updatedAt)})]}),e.jsxs("div",{className:"plan-step-actions",children:[e.jsx("button",{type:"button",onClick:()=>n(a.id,"Running"),children:"Run"}),e.jsx("button",{type:"button",onClick:()=>n(a.id,"Done"),children:"Done"}),e.jsx("button",{type:"button",onClick:()=>n(a.id,"Blocked"),children:"Block"}),e.jsx("button",{type:"button",onClick:()=>n(a.id,"Failed"),children:"Fail"})]})]})}function st({status:a}){const n=a==="Done"?se:a==="Blocked"||a==="Failed"?re:a==="Running"?q:Ke;return e.jsxs("span",{className:`plan-status-pill plan-status-pill--${a.toLowerCase()}`,children:[e.jsx(n,{size:13}),a]})}function rt({note:a}){return e.jsxs("article",{className:`execution-memory-item execution-memory-item--${a.kind.replace("_","-")}`,children:[e.jsxs("div",{className:"execution-memory-item-top",children:[e.jsx("span",{children:a.kind.replace("_"," ")}),e.jsx("time",{children:B(a.updatedAt)})]}),e.jsx("strong",{children:a.title}),a.metrics&&e.jsx("small",{children:a.metrics}),e.jsx("p",{children:a.body})]})}export{pt as PlanMasterPage};
@@ -0,0 +1 @@
1
+ import{r as h,j as t}from"./vendor-react-BXzpOyCS.js";import{L as M}from"./LaunchLeadCapture-DhMxzfOQ.js";import{g as C,a as P}from"./index-D1RMmeVY.js";import{p as E,P as N,r as _,c as x}from"./pricingCheckoutShell-O-DnwmbU.js";import{r as A,g as U}from"./supabaseAuthAdapter-Dw3pz4Sa.js";import{R as m}from"./app-runtime-xD2Z3NdN.js";import{A as I,aS as L,c as D,N as $}from"./vendor-icons-D0xKCnZS.js";import"./canvas-runtime-BDhmTypA.js";function f(e){return typeof e=="string"&&e.trim()?e.trim():null}function B(e){const o=Number(e);return Number.isFinite(o)?Math.max(1,Math.round(o)):1}function T(e){const o=B(e.quantity);return{price_id:e.priceId,return_url:e.returnUrl,email:e.email,quantity:o,source:"mindexec-react",sale_kind:"first_party",entitlement_kind:e.planKey,package_kind:e.planKey==="ltd"?"ltd":"subscription",plan_key:e.planKey,plan_code:e.planCode,price_stage:e.priceStage,metadata:{source:"mindexec-react",price_stage:e.priceStage,plan_key:e.planKey,plan_code:e.planCode,checkout_surface:"pricing"}}}async function O(e,o){var s;const u=A(e);if(!u.checkout.canAttempt)throw m.emit("pricing.checkout.provider.skipped",{mode:u.checkout.mode}),new Error(`Secure checkout adapter is not ready: ${u.checkout.mode}`);const l=U(e);if(!l)throw m.emit("pricing.checkout.provider.skipped",{mode:"config-missing"}),new Error("Supabase browser client is not available for checkout.");const{data:n,error:c}=await l.auth.getSession();if(c)throw m.emit("pricing.checkout.provider.sessionFailed",{message:c.message}),c;if(!((s=n.session)!=null&&s.access_token))throw m.emit("pricing.checkout.provider.sessionMissing"),new Error("Secure checkout requires a Supabase-authenticated session.");const p=T(o);m.emit("pricing.checkout.provider.started",{provider:"dodo",functionName:"dodo-create-checkout",priceStage:o.priceStage,priceId:o.priceId});const{data:r,error:a}=await l.functions.invoke("dodo-create-checkout",{body:p});if(a)throw m.emit("pricing.checkout.provider.failed",{provider:"dodo",message:a.message}),a;const g=f(r==null?void 0:r.checkout_url);if(!g){const i=f(r==null?void 0:r.reason)??f(r==null?void 0:r.error)??"checkout-url-missing";throw m.emit("pricing.checkout.provider.failed",{provider:"dodo",message:i}),new Error(`Dodo checkout did not return a checkout URL: ${i}`)}return m.emit("pricing.checkout.provider.ready",{provider:"dodo",hasSessionId:!!f(r==null?void 0:r.session_id)}),{mode:u.checkout.mode,canAttempt:!0,provider:"dodo",sessionId:f(r==null?void 0:r.session_id),checkoutUrl:g,userId:f(r==null?void 0:r.user_id)}}const d={currentStage:"STANDARD",ltdLimit:100,ltdSold:0,ltdRemaining:100,isLtdAvailable:!1,isClosed:!1,freeCloudBoardLimit:2,proMonthlyIncludedCredits:1e4,proMonthlyPriceUsd:12,proAnnualPriceUsd:96,ltdPriceUsd:149,managedAiMarkupMultiplier:1.7,localModeFreeEnabled:!0,byokFreeEnabled:!0};function b(e){return`$${e.toLocaleString("en-US",{maximumFractionDigits:2})}`}function R(e){return e?"Start Pro":"Sign in to continue"}function F(){return`${b(d.proMonthlyPriceUsd)} starting point`}function K(){return"Standard paid access should feel like a continuation of the free workflow, not a forced first step."}function z(){return[`Monthly Pro starts at ${b(d.proMonthlyPriceUsd)}`,`Annual target pricing is ${b(d.proAnnualPriceUsd)} per year`,`${d.freeCloudBoardLimit} cloud boards are available before paid limits matter`]}function H(){return A(P())}function Y(e){return"dodo_pro_monthly_v1"}function G(e){return"pro"}function k(e,o,u){const l=document.head.querySelector(e),n=l??o(),c=n.getAttribute("content"),p=!l;return p&&document.head.appendChild(n),n.setAttribute("content",u),()=>{p?n.remove():c===null?n.removeAttribute("content"):n.setAttribute("content",c)}}function j(e){const o=document.createElement("meta");return o.setAttribute("name",e),o}function w(e){const o=document.createElement("meta");return o.setAttribute("property",e),o}function J(){const e=document.title,o="MindExec Pricing",u="MindExec pricing for free local tools and MindCanvas projects. Start free with local tools, then upgrade when saved boards, cloud workflows, and AI support become important.",l="https://mindexec.pages.dev/pricing",n=document.head.querySelector('link[rel="canonical"]')??document.createElement("link"),c=!n.parentElement,p=n.getAttribute("href");n.setAttribute("rel","canonical"),n.setAttribute("href",l),c&&document.head.appendChild(n);const r={"@context":"https://schema.org","@type":"SoftwareApplication",name:"MindExec",applicationCategory:"ProductivityApplication",operatingSystem:"Web",description:"Local-first visual workspace with free markdown tools and paid MindCanvas project workflows.",url:l,offers:[{"@type":"Offer",name:"Free local tools",price:"0",priceCurrency:"USD"},{"@type":"Offer",name:"MindCanvas Pro",price:String(d.proMonthlyPriceUsd),priceCurrency:"USD"}]},a=document.head.querySelector("#pricing-structured-data")??document.createElement("script"),g=!a.parentElement,s=a.textContent;a.id="pricing-structured-data",a.type="application/ld+json",a.setAttribute("data-testid","pricing-structured-data"),a.textContent=JSON.stringify(r),g&&document.head.appendChild(a),document.title=o;const i=[k('meta[name="description"]',()=>j("description"),u),k('meta[name="robots"]',()=>j("robots"),"index,follow"),k('meta[property="og:title"]',()=>w("og:title"),o),k('meta[property="og:description"]',()=>w("og:description"),"Compare free local tools, MindCanvas Pro, and the current checkout offer."),k('meta[property="og:type"]',()=>w("og:type"),"website"),k('meta[property="og:url"]',()=>w("og:url"),l)];return()=>{document.title=e,i.forEach(y=>y()),c?n.remove():p===null?n.removeAttribute("href"):n.setAttribute("href",p),g?a.remove():a.textContent=s}}function re({navigate:e}){const[o,u]=h.useState(()=>C()),[l,n]=h.useState(!1),c=h.useMemo(()=>H(),[]),[p,r]=h.useState(()=>{const s=C(),i=E();return s&&i?`Signed in as ${s.email}. Continue checkout when ready; payment remains adapter-gated.`:""}),a=h.useMemo(()=>z(),[]);h.useEffect(()=>J(),[]);const g=async()=>{const s=C();if(u(s),m.emit("pricing.checkout.requested",{stage:d.currentStage,signedIn:!!s}),!s){_(d.currentStage,"/pricing"),r("Sign in first to continue to secure checkout."),e("/login");return}if(n(!0),c.checkout.canAttempt)try{const i=G(d.currentStage),y=await O(P(),{priceId:Y(d.currentStage),priceStage:d.currentStage,planKey:i,planCode:i.toUpperCase(),email:s.email,returnUrl:new URL("/pricing?checkout=return",window.location.origin).toString()});x("pricing-checkout-provider-started"),r("Opening secure Dodo checkout..."),window.location.assign(y.checkoutUrl);return}catch(i){n(!1),r(`Secure checkout could not start: ${i instanceof Error?i.message:String(i)}`),m.emit("pricing.checkout.provider.failed",{stage:d.currentStage,message:i instanceof Error?i.message:String(i)});return}window.setTimeout(()=>{x("pricing-checkout-adapter-gated"),n(!1),r(`Checkout policy is ready for ${s.email}; secure payment adapter wiring is the remaining backend step.`),m.emit("pricing.checkout.adapter.gated",{stage:d.currentStage,signedIn:!0})},650)};return t.jsxs("div",{className:"page pricing-page","data-testid":"pricing-shell","data-pricing-stage":d.currentStage,"data-pricing-checkout-intent-key":N,"data-production-adapter-state":c.overallState,"data-pricing-checkout-provider-mode":c.checkout.mode,"data-pricing-checkout-provider-ready":c.checkout.canAttempt?"true":"false","data-client-secret-blocked":c.forbiddenClientSecretKeys.length>0?"true":"false",children:[t.jsxs("section",{className:"pricing-hero",children:[t.jsx("div",{className:"eyebrow",children:"Pricing"}),t.jsx("h1",{children:"Start free. Pay when the work becomes worth keeping."}),t.jsx("p",{children:"Free tools stay fast and local. MindCanvas becomes valuable when saved projects, cloud workflows, and AI-supported organization matter across larger boards."}),t.jsxs("div",{className:"action-row",children:[t.jsx("button",{className:"btn btn-primary",type:"button",onClick:()=>e("/tools"),"data-testid":"pricing-browse-tools",children:"Browse free tools"}),t.jsx("button",{className:"btn btn-secondary",type:"button",onClick:()=>e("/mindcanvas"),"data-testid":"pricing-open-mindcanvas",children:"Open MindCanvas"})]})]}),t.jsxs("section",{className:"pricing-grid pricing-grid--detailed",children:[t.jsx(v,{label:"Free local tools",price:"$0",body:"Best for quick markdown, notes, clipboard work, and no-login utility tasks.",lines:["Markdown preview, outline, and README tools","Browser notepad and clipboard board","Local-first use with no required upload","Great for one-off jobs before a project exists"],action:"Use the free tools",onAction:()=>e("/tools")}),t.jsx(v,{label:"MindCanvas Pro",price:b(d.proMonthlyPriceUsd),suffix:"/month",body:"For saved boards, cloud projects, and AI-assisted organization once the work grows beyond a disposable tool session.",note:`Annual planning target: ${b(d.proAnnualPriceUsd)} per year`,lines:["Saved project workflows instead of one-off tool output","Cloud access when local-only is no longer enough",`${d.proMonthlyIncludedCredits.toLocaleString()} included monthly credits`,"Better fit for repeat work, larger docs, and visual organization"],action:R(o==null?void 0:o.email),icon:l?I:L,actionClass:"btn-primary",busy:l,onAction:g,status:p,testId:"pricing-pro-checkout"}),t.jsx(v,{label:"Current offer",price:F(),body:K(),lines:a,action:"Open MindCanvas first",onAction:()=>e("/mindcanvas")})]}),t.jsxs("section",{className:"pricing-compare",children:[t.jsxs("div",{children:[t.jsx("div",{className:"eyebrow",children:"Why pay later"}),t.jsx("h2",{children:"The free entry point should stay frictionless."}),t.jsx("p",{children:"Pricing works when it appears after the user already understands value. Public tools are for instant utility. Pro is for keeping the work alive after it becomes important."})]}),t.jsxs("div",{className:"pricing-compare-grid",children:[t.jsxs("article",{children:[t.jsx(D,{size:20}),t.jsx("h3",{children:"Stay free when"}),t.jsx("p",{children:"You only need a quick preview, outline, conversion, note, or snippet board with no ongoing project state."})]}),t.jsxs("article",{children:[t.jsx($,{size:20}),t.jsx("h3",{children:"Upgrade when"}),t.jsx("p",{children:"You want saved boards, repeat workflows, cloud access, or AI-assisted organization across bigger visual projects."})]})]})]}),t.jsx(M,{compact:!0,eyebrow:"Launch list",headline:"Not ready to buy today?",body:"Join the English launch list for checkout openings, launch offers, and short examples of serious MindCanvas workflows.",buttonText:"Notify me",sourceTag:"pricing"})]})}function v({label:e,price:o,suffix:u,body:l,note:n,lines:c,action:p,icon:r,actionClass:a,busy:g,status:s,testId:i,onAction:y}){return t.jsxs("article",{className:"pricing-card pricing-card--detailed",children:[t.jsx("div",{className:"card-label",children:e}),t.jsxs("h2",{children:[o,u&&t.jsx("span",{children:u})]}),t.jsx("p",{children:l}),n&&t.jsx("div",{className:"pricing-note",children:n}),t.jsx("ul",{children:c.map(S=>t.jsx("li",{children:S},S))}),t.jsxs("button",{className:`btn pricing-card-action ${a||"btn-secondary"}`,type:"button",disabled:g,onClick:y,"data-testid":i,children:[r&&t.jsx(r,{size:16,className:g?"spin-icon":void 0}),p]}),s&&t.jsx("p",{className:"pricing-status","data-testid":i?`${i}-status`:void 0,children:s})]})}export{re as PricingPage};
@@ -1,4 +1,4 @@
1
- import{j as t,r as m}from"./vendor-react-BXzpOyCS.js";import{g as te,a as q,d as ne,b as se,c as re}from"./marketingTools-DN_rnHeB.js";import{V as oe}from"./canvas-runtime-hH7qY6Be.js";import{R as f}from"./app-runtime-xD2Z3NdN.js";import{b as ie}from"./toolHandoff-D5e5f7t5.js";import{u as ae,aW as Q,aX as le,aY as ce,aZ as de,F as ue,a_ as pe,$ as R,ag as he,a$ as me,T as Y,i as K,g as fe,f as _,an as xe}from"./vendor-icons-D0xKCnZS.js";const U=2*1024*1024,ke=".md,.markdown,.txt,text/markdown,text/plain",G={"markdown-preview":ue,"markdown-outline":de,"markdown-table":ce,"markdown-links":le,notepad:Q,clipboard:ae};function $(e,n,r){const s=document.head.querySelector(e),o=s??n(),l=o.getAttribute("content"),i=!s;return i&&document.head.appendChild(o),o.setAttribute("content",r),()=>{i?o.remove():l===null?o.removeAttribute("content"):o.setAttribute("content",l)}}function je(e){const n=document.createElement("meta");return n.setAttribute("name",e),n}function M(e){const n=document.createElement("meta");return n.setAttribute("property",e),n}function be(e,n){const r=document.title,s=n?e.liveUrl:`https://mindexec.pages.dev/tools/${e.key}`,o=n?`${e.title} - Free local browser tool`:`${e.title} | MindExec`,l=n?e.heroSubtitle:e.description,i=document.head.querySelector('link[rel="canonical"]')??document.createElement("link"),c=!i.parentElement,d=i.getAttribute("href");i.setAttribute("rel","canonical"),i.setAttribute("href",s),c&&document.head.appendChild(i),document.title=o;const p=[$('meta[name="description"]',()=>je("description"),l),$('meta[property="og:title"]',()=>M("og:title"),o),$('meta[property="og:description"]',()=>M("og:description"),l),$('meta[property="og:url"]',()=>M("og:url"),s)];return()=>{document.title=r,p.forEach(h=>h()),c?i.remove():d===null?i.removeAttribute("href"):i.setAttribute("href",d)}}function We({navigate:e}){const n=te();return t.jsxs("div",{className:"page tools-directory-page",children:[t.jsxs("section",{className:"section-head",children:[t.jsx("div",{className:"eyebrow",children:"Free local-first tools"}),t.jsx("h1",{children:"Markdown, notes, and clipboard tools from MindExec"}),t.jsx("p",{children:"Use lightweight browser tools with no login and no database save. When the work gets bigger, move into MindCanvas for saved projects, AI workflows, and visual organization."})]}),t.jsx("div",{className:"tools-directory-groups",children:n.map(r=>t.jsxs("section",{className:"tools-directory-section",children:[t.jsxs("div",{className:"tools-directory-head",children:[t.jsx("h2",{children:r.title}),t.jsx("p",{children:r.description})]}),t.jsx("div",{className:"tools-directory-grid",children:r.entries.map(s=>{const o=G[s.kind];return t.jsxs("article",{className:"tools-directory-card","data-testid":"tool-directory-card","data-tool-key":s.key,children:[t.jsxs("div",{className:"tool-card-topline",children:[t.jsx("span",{children:s.label}),t.jsx(o,{size:18})]}),t.jsx("h3",{children:s.title}),t.jsx("p",{children:s.description}),t.jsxs("button",{type:"button",className:"btn btn-secondary",onClick:()=>e(`/tools/${s.key}`),children:["Open tool",t.jsx(pe,{size:16})]}),t.jsxs("a",{className:"tool-live-link",href:s.liveUrl,target:"_blank",rel:"noreferrer",children:[t.jsx(R,{size:14}),"Standalone"]})]},s.key)})})]},r.id))}),t.jsxs("section",{className:"tools-directory-cta",children:[t.jsxs("div",{children:[t.jsx("h2",{children:"Need a bigger workspace?"}),t.jsx("p",{children:"MindCanvas is where these small tasks turn into saved canvases, larger document sets, AI workflows, and cloud projects inside MindExec."})]}),t.jsx("button",{type:"button",className:"btn btn-primary",onClick:()=>e("/mindcanvas"),children:"Open MindCanvas"})]})]})}function De({toolKey:e,navigate:n,miniHost:r=!1}){const s=q(e);return s?t.jsx(ge,{tool:s,navigate:n,miniHost:r}):t.jsx("div",{className:"page tools-directory-page",children:t.jsxs("section",{className:"section-head",children:[t.jsx("div",{className:"eyebrow",children:"Tool not found"}),t.jsx("h1",{children:"This local tool is not enabled."}),t.jsx("p",{children:"Open the tools directory and pick one of the current MindExec browser tools."}),t.jsx("div",{className:"action-row",children:t.jsx("button",{className:"btn btn-primary",type:"button",onClick:()=>n("/tools"),children:"Back to tools"})})]})})}function ge({tool:e,navigate:n,miniHost:r}){const[s,o]=m.useState(()=>S(e.kind)),[l,i]=m.useState(""),[c,d]=m.useState(["Pricing proof from a user conversation","Demo clip idea for English-first launch","Competitor headline worth comparing"]),[p,h]=m.useState(null),[B,y]=m.useState(""),T=m.useRef(null),C=m.useRef(null),b=m.useMemo(()=>Ne(e,s,c),[c,s,e]),V=G[e.kind],X=e.relatedKeys.map(a=>q(a)).filter(a=>!!a),z=ve(e.kind),w=e.key==="bulk-markdown-viewer";m.useEffect(()=>{const a=be(e,r);return f.emit("tool.meta.applied",{toolKey:e.key,host:window.location.hostname,miniHost:r,canonical:r?e.liveUrl:`https://mindexec.pages.dev/tools/${e.key}`}),r&&f.emit("tool.hostProfile.applied",{toolKey:e.key,host:window.location.hostname}),a},[r,e]),m.useEffect(()=>{o(S(e.kind)),y(""),h(null)},[e.key,e.kind]);const P=async(a,x,k)=>{try{const u=await oe(x);h(a),f.emit("tool.copy",{toolKey:e.key,ok:!0,method:u,chars:x.length}),window.setTimeout(()=>h(null),1400)}catch(u){const j=k==="source"?T.current:C.current;if(j){j.focus(),j.select(),h(k==="source"?"Source selected":"Output selected"),f.emit("tool.copy",{toolKey:e.key,ok:!1,selected:!0,target:k,message:u instanceof Error?u.message:String(u)});return}h("Copy failed"),f.emit("tool.copy",{toolKey:e.key,ok:!1,target:k,message:u instanceof Error?u.message:String(u)})}},Z=()=>{o(S(e.kind)),y("Sample loaded."),f.emit("tool.sample.loaded",{toolKey:e.key})},J=()=>{o(""),y(""),f.emit("tool.source.cleared",{toolKey:e.key})},O=()=>{ie({toolKey:e.key,toolTitle:e.title,sourceTitle:`${e.label} source`,sourceBody:e.kind==="clipboard"?c.join(`
1
+ import{j as t,r as m}from"./vendor-react-BXzpOyCS.js";import{g as te,a as q,d as ne,b as se,c as re}from"./marketingTools-DN_rnHeB.js";import{V as oe}from"./canvas-runtime-BDhmTypA.js";import{R as f}from"./app-runtime-xD2Z3NdN.js";import{b as ie}from"./toolHandoff-D5e5f7t5.js";import{u as ae,aW as Q,aX as le,aY as ce,aZ as de,F as ue,a_ as pe,$ as R,ag as he,a$ as me,T as Y,i as K,g as fe,f as _,an as xe}from"./vendor-icons-D0xKCnZS.js";const U=2*1024*1024,ke=".md,.markdown,.txt,text/markdown,text/plain",G={"markdown-preview":ue,"markdown-outline":de,"markdown-table":ce,"markdown-links":le,notepad:Q,clipboard:ae};function $(e,n,r){const s=document.head.querySelector(e),o=s??n(),l=o.getAttribute("content"),i=!s;return i&&document.head.appendChild(o),o.setAttribute("content",r),()=>{i?o.remove():l===null?o.removeAttribute("content"):o.setAttribute("content",l)}}function je(e){const n=document.createElement("meta");return n.setAttribute("name",e),n}function M(e){const n=document.createElement("meta");return n.setAttribute("property",e),n}function be(e,n){const r=document.title,s=n?e.liveUrl:`https://mindexec.pages.dev/tools/${e.key}`,o=n?`${e.title} - Free local browser tool`:`${e.title} | MindExec`,l=n?e.heroSubtitle:e.description,i=document.head.querySelector('link[rel="canonical"]')??document.createElement("link"),c=!i.parentElement,d=i.getAttribute("href");i.setAttribute("rel","canonical"),i.setAttribute("href",s),c&&document.head.appendChild(i),document.title=o;const p=[$('meta[name="description"]',()=>je("description"),l),$('meta[property="og:title"]',()=>M("og:title"),o),$('meta[property="og:description"]',()=>M("og:description"),l),$('meta[property="og:url"]',()=>M("og:url"),s)];return()=>{document.title=r,p.forEach(h=>h()),c?i.remove():d===null?i.removeAttribute("href"):i.setAttribute("href",d)}}function We({navigate:e}){const n=te();return t.jsxs("div",{className:"page tools-directory-page",children:[t.jsxs("section",{className:"section-head",children:[t.jsx("div",{className:"eyebrow",children:"Free local-first tools"}),t.jsx("h1",{children:"Markdown, notes, and clipboard tools from MindExec"}),t.jsx("p",{children:"Use lightweight browser tools with no login and no database save. When the work gets bigger, move into MindCanvas for saved projects, AI workflows, and visual organization."})]}),t.jsx("div",{className:"tools-directory-groups",children:n.map(r=>t.jsxs("section",{className:"tools-directory-section",children:[t.jsxs("div",{className:"tools-directory-head",children:[t.jsx("h2",{children:r.title}),t.jsx("p",{children:r.description})]}),t.jsx("div",{className:"tools-directory-grid",children:r.entries.map(s=>{const o=G[s.kind];return t.jsxs("article",{className:"tools-directory-card","data-testid":"tool-directory-card","data-tool-key":s.key,children:[t.jsxs("div",{className:"tool-card-topline",children:[t.jsx("span",{children:s.label}),t.jsx(o,{size:18})]}),t.jsx("h3",{children:s.title}),t.jsx("p",{children:s.description}),t.jsxs("button",{type:"button",className:"btn btn-secondary",onClick:()=>e(`/tools/${s.key}`),children:["Open tool",t.jsx(pe,{size:16})]}),t.jsxs("a",{className:"tool-live-link",href:s.liveUrl,target:"_blank",rel:"noreferrer",children:[t.jsx(R,{size:14}),"Standalone"]})]},s.key)})})]},r.id))}),t.jsxs("section",{className:"tools-directory-cta",children:[t.jsxs("div",{children:[t.jsx("h2",{children:"Need a bigger workspace?"}),t.jsx("p",{children:"MindCanvas is where these small tasks turn into saved canvases, larger document sets, AI workflows, and cloud projects inside MindExec."})]}),t.jsx("button",{type:"button",className:"btn btn-primary",onClick:()=>e("/mindcanvas"),children:"Open MindCanvas"})]})]})}function De({toolKey:e,navigate:n,miniHost:r=!1}){const s=q(e);return s?t.jsx(ge,{tool:s,navigate:n,miniHost:r}):t.jsx("div",{className:"page tools-directory-page",children:t.jsxs("section",{className:"section-head",children:[t.jsx("div",{className:"eyebrow",children:"Tool not found"}),t.jsx("h1",{children:"This local tool is not enabled."}),t.jsx("p",{children:"Open the tools directory and pick one of the current MindExec browser tools."}),t.jsx("div",{className:"action-row",children:t.jsx("button",{className:"btn btn-primary",type:"button",onClick:()=>n("/tools"),children:"Back to tools"})})]})})}function ge({tool:e,navigate:n,miniHost:r}){const[s,o]=m.useState(()=>S(e.kind)),[l,i]=m.useState(""),[c,d]=m.useState(["Pricing proof from a user conversation","Demo clip idea for English-first launch","Competitor headline worth comparing"]),[p,h]=m.useState(null),[B,y]=m.useState(""),T=m.useRef(null),C=m.useRef(null),b=m.useMemo(()=>Ne(e,s,c),[c,s,e]),V=G[e.kind],X=e.relatedKeys.map(a=>q(a)).filter(a=>!!a),z=ve(e.kind),w=e.key==="bulk-markdown-viewer";m.useEffect(()=>{const a=be(e,r);return f.emit("tool.meta.applied",{toolKey:e.key,host:window.location.hostname,miniHost:r,canonical:r?e.liveUrl:`https://mindexec.pages.dev/tools/${e.key}`}),r&&f.emit("tool.hostProfile.applied",{toolKey:e.key,host:window.location.hostname}),a},[r,e]),m.useEffect(()=>{o(S(e.kind)),y(""),h(null)},[e.key,e.kind]);const P=async(a,x,k)=>{try{const u=await oe(x);h(a),f.emit("tool.copy",{toolKey:e.key,ok:!0,method:u,chars:x.length}),window.setTimeout(()=>h(null),1400)}catch(u){const j=k==="source"?T.current:C.current;if(j){j.focus(),j.select(),h(k==="source"?"Source selected":"Output selected"),f.emit("tool.copy",{toolKey:e.key,ok:!1,selected:!0,target:k,message:u instanceof Error?u.message:String(u)});return}h("Copy failed"),f.emit("tool.copy",{toolKey:e.key,ok:!1,target:k,message:u instanceof Error?u.message:String(u)})}},Z=()=>{o(S(e.kind)),y("Sample loaded."),f.emit("tool.sample.loaded",{toolKey:e.key})},J=()=>{o(""),y(""),f.emit("tool.source.cleared",{toolKey:e.key})},O=()=>{ie({toolKey:e.key,toolTitle:e.title,sourceTitle:`${e.label} source`,sourceBody:e.kind==="clipboard"?c.join(`
2
2
 
3
3
  `):s,resultTitle:b.title,resultBody:b.text,taskBody:`Review this ${e.title} output and propose the next concrete step for a global MindExec launch workflow.`}),n("/mindcanvas")},ee=async a=>{const x=Array.from(a.currentTarget.files??[]);if(a.currentTarget.value="",!z||x.length===0)return;const k=x.slice(0,w?12:1),u=k.filter(g=>g.size>U),j=k.filter(g=>g.size<=U);if(j.length===0){y("Selected file is over the 2 MB local preview limit."),f.emit("tool.file.rejected",{toolKey:e.key,reason:"size-limit",count:k.length});return}try{const v=(await Promise.all(j.map(async F=>{const I=(await F.text()).trim();return w?[`# ${F.name}`,"",I].join(`
4
4
  `):I}))).filter(Boolean).join(`