@mindexec/cli 0.2.348 → 0.2.350

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.
@@ -40,5 +40,5 @@ Base genre: {{musicGenre}}`,"template.music-core.node.references.title":"Referen
40
40
  本次目标:{{launchGoal}}`,"template.launch-core.node.landing.title":"落地页文案","template.launch-core.node.landing.body":"快速起草标题、副文案、CTA 和信任元素。","template.launch-core.node.channelCopy.title":"渠道文案","template.launch-core.node.channelCopy.body":"分别为 Product Hunt、X、LinkedIn 和社区写不同文案。","template.launch-core.node.community.title":"社区帖子","template.launch-core.node.community.body":"改写成问题解决经验分享,而不是广告。","template.launch-core.node.demoChecklist.title":"演示视频检查清单","template.launch-core.node.demoChecklist.body":"按问题、解决方案演示和 CTA 顺序整理所需场景。","template.launch-core.node.assets.title":"截图素材","template.launch-core.node.assets.body":"收集代表页面、对比场景、评价和证明图片。","template.launch-core.node.schedule.title":"发布日程","template.launch-core.node.schedule.body":"写下今天、明天和一周内要发布的渠道与时间。","template.launch-core.node.metrics.title":"成果记录","template.launch-core.node.metrics.body":"集中记录访问、注册、支付和表现好的消息。","template.content-core.boardTitle":"内容制作 - {{contentTheme}}","template.content-core.input.contentTheme.label":"要制作什么内容?","template.content-core.input.contentTheme.desc":"写下视频或帖子的核心主题。","template.content-core.input.contentTheme.placeholder":"例如:AI 会议总结工具介绍视频","template.content-core.input.contentChannel.label":"主要渠道","template.content-core.input.contentChannel.desc":"选择第一版内容要面向的渠道。","template.content-core.input.contentChannel.option.youtube":"YouTube","template.content-core.input.contentChannel.option.shorts":"Shorts / Reels","template.content-core.input.contentChannel.option.blog":"博客 / 文章","template.content-core.node.contentPlan.title":"内容计划","template.content-core.node.contentPlan.body":`{{contentTheme}}
41
41
  主要渠道:{{contentChannel}}`,"template.content-core.node.script.title":"脚本","template.content-core.node.script.body":"写下开场钩子、核心要点和 CTA。","template.content-core.node.scenes.title":"场景结构","template.content-core.node.scenes.body":"拆分每个场景的信息和所需视觉素材。","template.content-core.node.imagePrompts.title":"图片提示词","template.content-core.node.imagePrompts.body":"为缩略图和转场画面编写图片提示词。","template.content-core.node.videoPrompts.title":"视频提示词","template.content-core.node.videoPrompts.body":"定义镜头运动、氛围和时长。","template.content-core.node.distribution.title":"发布检查","template.content-core.node.distribution.body":"检查标题、说明、缩略图和上传日程。","template.learn-core.boardTitle":"面向发布的学习 - {{learningGoal}}","template.learn-core.input.learningGoal.label":"你为了什么成果而学习?","template.learn-core.input.learningGoal.desc":"写下想做出的东西,而不只是语法或理论。","template.learn-core.input.learningGoal.placeholder":"例如:发布我的第一个 SaaS MVP","template.learn-core.node.goal.title":"学习目标","template.learn-core.node.goal.body":"{{learningGoal}}","template.learn-core.node.basics.title":"核心概念","template.learn-core.node.basics.body":"写下目前缺少的语法和概念,并排序优先级。","template.learn-core.node.smallFeature.title":"做一个小功能","template.learn-core.node.smallFeature.body":"拆成足够小、能完成的功能单位。","template.learn-core.node.api.title":"API 使用","template.learn-core.node.api.body":"整理要连接的 API 和测试场景。","template.learn-core.node.dbAuth.title":"DB / Auth","template.learn-core.node.dbAuth.body":"简单设计存储结构和登录流程。","template.learn-core.node.ship.title":"部署","template.learn-core.node.ship.body":"只写部署所需的最小检查清单。","template.book-core.boardTitle":"书籍 / 电子书 - {{bookTopic}}","template.book-core.input.bookTopic.label":"要做什么书?","template.book-core.input.bookTopic.desc":"写下主题或暂定书名。","template.book-core.input.bookTopic.placeholder":"例如:面向独立创始人的 AI 执行指南","template.book-core.input.readerType.label":"这本书写给谁?","template.book-core.input.readerType.desc":"用一行写下代表读者。","template.book-core.input.readerType.placeholder":"例如:正在做第一个产品的独立创始人","template.book-core.node.bookConcept.title":"书籍概念","template.book-core.node.bookConcept.body":`{{bookTopic}}
42
42
  代表读者:{{readerType}}`,"template.book-core.node.toc.title":"目录","template.book-core.node.toc.body":"先整理大章和小节流程。","template.book-core.node.chapters.title":"章节草稿","template.book-core.node.chapters.body":"按章节记录核心信息和案例。","template.book-core.node.cover.title":"插图 / 封面","template.book-core.node.cover.body":"整理需要的视觉素材清单。","template.book-core.node.edit.title":"校对 / 编辑","template.book-core.node.edit.body":"写下语气、重复、流程和 CTA 检查点。","template.book-core.node.export.title":"Export","template.book-core.node.export.body":"完成 PDF、EPUB 和发布渠道的收尾工作。","template.music-core.boardTitle":"音乐制作 - {{trackMood}}","template.music-core.input.trackMood.label":"想做什么氛围的曲子?","template.music-core.input.trackMood.desc":"简短写下情绪或使用场景。","template.music-core.input.trackMood.placeholder":"例如:夜间工作用的 lo-fi 专注曲","template.music-core.input.musicGenre.label":"基础风格","template.music-core.input.musicGenre.desc":"选择最接近的起始风格。","template.music-core.input.musicGenre.option.lofi":"Lo-fi","template.music-core.input.musicGenre.option.ambient":"Ambient","template.music-core.input.musicGenre.option.pop":"Pop","template.music-core.input.musicGenre.option.cinematic":"Cinematic","template.music-core.node.musicConcept.title":"音乐概念","template.music-core.node.musicConcept.body":`{{trackMood}}
43
- 基础风格:{{musicGenre}}`,"template.music-core.node.references.title":"参考","template.music-core.node.references.body":"列出参考曲和想借鉴的点。","template.music-core.node.vocals.title":"人声 / 乐器","template.music-core.node.vocals.body":"写下人声类型和核心乐器配置。","template.music-core.node.lyrics.title":"歌词","template.music-core.node.lyrics.body":"整理主题、重复钩子和禁用表达。","template.music-core.node.generationPrompt.title":"生成提示词","template.music-core.node.generationPrompt.body":"收集音色、结构和氛围指令。","template.music-core.node.versions.title":"版本比较","template.music-core.node.versions.body":"记录 mp3 结果和修改点。"}},Ce={studioNodeType:"studioNodeType",templateNodeId:"templateNodeId",templateRole:"templateRole",compileTarget:"compileTarget",inputKey:"inputKey",inputType:"inputType",inputDescription:"inputDescription",inputPlaceholder:"inputPlaceholder",inputDefaultValue:"inputDefaultValue",inputRequired:"inputRequired",inputOptions:"inputOptions"},rs=[{studioNodeType:"template.note",label:"Template Note",shortLabel:"Note"},{studioNodeType:"template.input",label:"Template Input",shortLabel:"Input"},{studioNodeType:"template.prompt",label:"Template Prompt",shortLabel:"Prompt"},{studioNodeType:"template.output",label:"Template Output",shortLabel:"Output"},{studioNodeType:"template.knowledge",label:"Knowledge Reference",shortLabel:"Know"},{studioNodeType:"template.section",label:"Section",shortLabel:"Sect"},{studioNodeType:"template.checklist",label:"Checklist",shortLabel:"List"}],Oc=["note","memo","markdown","aiPrompt","output","section","checklist","input"],q={contentType:"templateLauncher",semanticTypeKey:"semanticType",semanticTypeValue:"TemplateLauncher",launcherIdKey:"templateLauncherId",selectedOptionIdKey:"templateLauncherSelectedOptionId",cardVersionKey:"templateCardVersion",cardLockedKey:"templateCardLocked",controllerNodeIdKey:"sourceTemplateControllerNodeId",runIdKey:"sourceTemplateRunId",cardGeneratedKey:"sourceTemplateCardGenerated",localizationManagedKey:"templateLocalizationManaged",localizationLanguageKey:"templateLanguageCode",sourceInputValuesJsonKey:"sourceTemplateInputValuesJson",width:560,height:620,resultTopGap:90},ct=as,is=new Set(["en","ko","ja","zh"]);function ft(e){if(typeof e!="string")return"en";const t=e.trim().toLowerCase();return!t||t==="auto"?"en":is.has(t)?t:"en"}function ce(e,t="",o){const n=ft(o),r=ia[n],s=ia.en,c=r[e];if(c!==void 0)return c;const i=s[e];return n!=="ko"&&i!==void 0?i:t}function Xt(e,t){const o=Xe(e.id);return{...e,label:ce(`launcher.${o}.title`,e.label,t),description:ce(`launcher.${o}.desc`,e.description,t),prompt:ce(`launcher.${o}.prompt`,e.prompt,t),options:e.options.map(n=>vs(e.id,n,t))}}function Vt(e,t){const o=Xe(e.id);return{...e,boardTitle:ce(`template.${o}.boardTitle`,e.boardTitle,t),inputs:e.inputs.map(n=>Ts(e.id,n,t)),nodes:e.nodes.map(n=>Is(e.id,n,t))}}function _c(e){return ct.launchers.map(t=>Xt(t,e))}function ss(e,t){const o=ct.launchers.find(n=>H(n.id,e));return o?Xt(o,t):null}function So(e,t){if(e.options.length!==0)return e.options.find(o=>H(o.id,t||""))??e.options[0]}function ls(e,t,o){const n=So(e,t),r=(n==null?void 0:n.templateId)||e.quickCreateTemplateId||"",s=ct.templates.find(c=>H(c.id,r));return s?Vt(s,o):null}function Fc(e){const t={};for(const o of(e==null?void 0:e.inputs)??[])t[o.key]=kn(o);return t}function Bc(e,t){if(!e)return"Template is unavailable.";const o=e.inputs.find(n=>n.required&&!String(t[n.key]||"").trim());return o?`${o.label} is required.`:null}function cs(e,t,o,n){const r=ft(n.appLanguage),s=Xt(e,r),c=So(s,t),i=ls(s,c==null?void 0:c.id,r);return i?ds(s,c,i,o,n):null}function ds(e,t,o,n,r){const s=Mo(o,n),c=_a(e,t,s),i=new Date().toISOString(),m=Ga("template-board"),f=Mt(o.boardTitle,c).trim()||e.label,k=o.nodes.map((T,x)=>ps(T,e,t,o,c,m,x));return{launcher:e,option:t,template:o,board:{id:m,name:f,updatedAt:i,settings:r,source:{kind:"localStorage",loadedAt:i},nodes:k,edges:[]}}}function Na(e,t,o={},n){const r=ft(n),s=Xt(e,r),c=Cs(r),i=As(s,t),m={launcherId:s.id,title:s.label,description:s.description,prompt:s.prompt,iconClass:s.iconClass,selectedOptionId:i??void 0,options:[],inputValues:{},generateLabel:c.generateLabel,noInputsLabel:c.noInputsLabel,generatingMessage:c.generatingMessage,generatedMessageFormat:c.generatedMessageFormat,generationFailedMessage:c.generationFailedMessage,requiredMessageFormat:c.requiredMessageFormat,actionLabel:c.generateLabel};if(s.options.length===0){const k=s.quickCreateTemplateId?ct.templates.find(T=>H(T.id,e.quickCreateTemplateId)):null;if(k){const T=Vt(k,r);m.options.push({id:"",label:s.label,description:s.description,templateId:T.id,inputs:tn(T.inputs)})}}else for(const k of s.options){const T=ct.templates.find(B=>H(B.id,k.templateId)),x=T?Vt(T,r):null;m.options.push({id:k.id,label:k.label,description:k.description,templateId:k.templateId,inputs:tn((x==null?void 0:x.inputs)??[])})}const f=m.options.find(k=>H(k.id,m.selectedOptionId))??m.options[0];return m.selectedOptionId=f==null?void 0:f.id,m.inputValues=Fa((f==null?void 0:f.inputs)??[],o),m}function Gc(e,t,o,n,r={},s){const c=ft(s),i=Na(e,t,r,c),m=i.options.find(k=>H(k.id,i.selectedOptionId)),f={[q.semanticTypeKey]:q.semanticTypeValue,[q.launcherIdKey]:e.id,[q.selectedOptionIdKey]:i.selectedOptionId??"",[q.cardVersionKey]:"1.0",[q.cardLockedKey]:"True",[q.localizationLanguageKey]:c,IsNew:"true"};return{id:Ga("template-card"),kind:"template-launcher",title:i.title,body:JSON.stringify(i),x:o,y:n,width:q.width,height:q.height,tags:["Template","Launcher",e.label,m==null?void 0:m.label].filter(k=>!!k),metadata:f,aiEnabled:!1}}function yn(e){var t;return e?e.kind==="template-launcher"?!0:H((t=e.metadata)==null?void 0:t[q.semanticTypeKey],q.semanticTypeValue):!1}function Da(e){try{const t=JSON.parse(String(e||""));return!t||typeof t!="object"||!t.launcherId||!Array.isArray(t.options)?null:{launcherId:String(t.launcherId||""),title:String(t.title||""),description:String(t.description||""),prompt:String(t.prompt||""),iconClass:String(t.iconClass||""),selectedOptionId:t.selectedOptionId===void 0?void 0:String(t.selectedOptionId),options:t.options.map(o=>({id:String(o.id||""),label:String(o.label||""),description:String(o.description||""),templateId:String(o.templateId||""),inputs:tn(o.inputs??[])})),inputValues:Object.fromEntries(Object.entries(t.inputValues??{}).map(([o,n])=>[o,String(n??"")])),generateLabel:String(t.generateLabel||t.actionLabel||"Generate"),noInputsLabel:String(t.noInputsLabel||"No inputs needed."),generatingMessage:String(t.generatingMessage||"Generating nodes..."),generatedMessageFormat:String(t.generatedMessageFormat||"Generated {0} nodes below."),generationFailedMessage:String(t.generationFailedMessage||"Template generation failed."),requiredMessageFormat:String(t.requiredMessageFormat||"{0} is required."),actionLabel:String(t.actionLabel||t.generateLabel||"Generate")}}catch{return null}}function Uc(e,t){const o=e.options.find(n=>H(n.id,t))??e.options[0];return{...e,selectedOptionId:o==null?void 0:o.id,inputValues:Fa((o==null?void 0:o.inputs)??[],e.inputValues)}}function zc(e,t,o){return{...e,inputValues:{...e.inputValues,[t]:o}}}function $c(e){if(!e)return"Template card payload is unavailable.";const t=e.options.find(n=>H(n.id,e.selectedOptionId))??e.options[0];if(!t)return"Template card option is unavailable.";const o=t.inputs.find(n=>n.required&&!String(e.inputValues[n.key]||"").trim());return o?Ms(e.requiredMessageFormat||"{0} is required.",o.label):null}function Vc(e,t,o,n,r=Ps()){var X;if(!yn(e))return null;const s=(X=e.metadata)==null?void 0:X[q.launcherIdKey],c=ft(n.appLanguage),i=s?ss(s,c):null;if(!i)return null;const m=So(i,t),f=cs(i,(m==null?void 0:m.id)??null,o,n);if(!f)return null;const k=Mo(f.template,o),T=JSON.stringify(k),x=Math.min(...f.board.nodes.map(P=>P.x)),B=Math.min(...f.board.nodes.map(P=>P.y)),w=e.x,z=e.y+Math.max(e.height,q.height)+q.resultTopGap,ee=f.board.nodes.map(P=>({...P,x:w+(P.x-x),y:z+(P.y-B),metadata:{...P.metadata??{},[q.controllerNodeIdKey]:e.id,[q.runIdKey]:r,[q.cardGeneratedKey]:"True",[q.localizationManagedKey]:"True",[q.localizationLanguageKey]:c,[q.sourceInputValuesJsonKey]:T}}));return{launcher:i,option:f.option,template:f.template,runId:r,nodes:ee}}function qc(e,t){const o=ft(t),n=new Map(e.map(c=>[c.id,c]));let r=!1;const s=e.map(c=>{const i=xs(c,o);if(i)return r=!0,i;const m=ws(c,n,o);return m?(r=!0,m):c});return{nodes:r?s:e,changed:r,language:o}}function Wc(e){const t=String(e||"").trim()||"Template Studio Draft";return{templateId:Ro(t),templateTitle:t,category:"custom",boardTitle:t,version:"0.1.0",tier:"draft",status:"draft"}}function Kc(e,t){const o=[],n=ms(e),r=t.filter(k=>!!xe(k,Ce.studioNodeType)).sort((k,T)=>k.y-T.y||k.x-T.x||k.id.localeCompare(T.id)),s=r.filter(k=>H(xe(k,Ce.studioNodeType),"template.input")),c=r.filter(k=>!H(xe(k,Ce.studioNodeType),"template.input")),i=hs(s,o),m=gs(c,o);r.length===0&&o.push({code:"studio.nodes.empty",message:"Add at least one Template Studio node before compiling."});const f={id:n.templateId,version:n.version,tier:n.tier,status:n.status,boardTitle:n.boardTitle,inputs:i,nodes:m};return bs(f,o),{template:f,manifestJson:JSON.stringify(f,null,2),issues:o}}function Ro(e){return String(e||"").trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"")||"template-studio-draft"}function us(e,t){switch(String(e||"").trim().toLowerCase()||Oa(t)){case"template.input":return"input";case"template.prompt":return"aiPrompt";case"template.output":return"output";case"template.knowledge":return"memo";case"template.section":return"section";case"template.checklist":return"checklist";default:return t?Ba(t.kind):"note"}}function Oa(e){if(!e)return"template.note";switch(e.kind){case"ai-task":return"template.prompt";case"markdown":return"template.section";case"memo":return"template.knowledge";default:return"template.note"}}function Hc(e){const t=rs.find(o=>H(o.studioNodeType,e));return(t==null?void 0:t.shortLabel)??"Note"}function ps(e,t,o,n,r,s,c){const i={};for(const[f,k]of Object.entries(e.metadata??{}))i[f]=Mt(k,r);i.IsNew="true",i.sourceLauncherId=t.id,i.sourceTemplateId=n.id,i.sourceTemplateVersion=n.version,i.sourceTemplateNodeId=e.id,i.templateRole=i.templateRole||e.id,i.templateLauncher=t.id,i.templateId=n.id,i.templateVersion=n.version,i.templateNodeId=e.id,o!=null&&o.id&&(i.sourceOptionId=o.id,i.templateOption=o.id);const m=Es(e.contentType);return{id:`${s}-${e.id||c}`,kind:m,title:Mt(e.title,r),body:Mt(e.body,r),x:Number(e.x)||0,y:Number(e.y)||0,width:Math.max(180,Number(e.width)||340),height:Math.max(120,Number(e.height)||220),tags:["Template",t.label,(o==null?void 0:o.label)||n.tier].filter(Boolean),metadata:i}}function Mo(e,t){const o={};for(const n of e.inputs){const r=String(t[n.key]??"").trim();o[n.key]=r||kn(n)}return o}function _a(e,t,o){const n=(t==null?void 0:t.label)||e.label,r=(t==null?void 0:t.description)||e.description,s={launcherId:e.id,launcherLabel:e.label,launcherDescription:e.description,optionId:(t==null?void 0:t.id)||"",optionLabel:n,optionDescription:r,selectionLabel:n,timestampShort:js(new Date)};for(const[c,i]of Object.entries(o))s[c]=i;return s}function Mt(e,t){let o=e||"";for(const[n,r]of Object.entries(t))o=o.replace(new RegExp(`{{\\s*${Ls(n)}\\s*}}`,"gi"),r);return o}function kn(e){var t,o;return e.defaultValue?e.defaultValue:e.type==="select"&&((o=(t=e.options)==null?void 0:t[0])==null?void 0:o.value)||""}function ms(e){const t=String(e.templateTitle||"").trim()||"Template Studio Draft";return{templateId:Ro(e.templateId||t),templateTitle:t,category:String(e.category||"").trim()||"custom",boardTitle:String(e.boardTitle||"").trim()||t,version:String(e.version||"").trim()||"0.1.0",tier:String(e.tier||"").trim()||"draft",status:String(e.status||"").trim()||"draft"}}function hs(e,t){const o=[],n=new Set;for(const r of e){const s=r.title.trim()||"Input",c=Ro(xe(r,Ce.inputKey)||s),i=c.toLowerCase();if(n.has(i)){t.push({code:"studio.input.duplicate",message:`Template Studio input '${c}' is duplicated.`});continue}n.add(i),o.push({key:c,type:fs(xe(r,Ce.inputType)),label:s,description:xe(r,Ce.inputDescription)||r.body,placeholder:xe(r,Ce.inputPlaceholder),defaultValue:xe(r,Ce.inputDefaultValue),required:ys(xe(r,Ce.inputRequired)),options:ks(xe(r,Ce.inputOptions))})}return o}function gs(e,t){const o=[],n=new Set;for(const r of e){const s=xe(r,Ce.studioNodeType)||Oa(r);let c=Ro(xe(r,Ce.templateNodeId)||r.title);const i=c.toLowerCase();if(n.has(i)){t.push({code:"studio.node.duplicate",message:`Template Studio node '${c}' is duplicated.`});continue}n.add(i);const m=xe(r,Ce.compileTarget)||us(s,r),f=xe(r,Ce.templateRole)||s.replace(/^template\./i,"");o.push({id:c,contentType:m,title:r.title.trim(),body:r.body,x:Math.round(r.x),y:Math.round(r.y),width:Math.max(180,Math.round(r.width||340)),height:Math.max(120,Math.round(r.height||220)),metadata:{templateRole:f,studioNodeType:s,compileTarget:m,studioSourceContentType:Ba(r.kind)}})}return o}function bs(e,t){const o=new Set;for(const r of e.inputs)r.key||t.push({code:"template.input.key",message:`Template '${e.id}' contains an input with no key.`}),r.label||t.push({code:"template.input.label",message:`Template '${e.id}' input '${r.key}' must define a label.`}),o.has(r.key.toLowerCase())&&t.push({code:"template.inputs.duplicate",message:`Template '${e.id}' contains duplicate input key '${r.key}'.`}),o.add(r.key.toLowerCase());const n=new Set;for(const r of e.nodes)r.id||t.push({code:"template.node.id",message:`Template '${e.id}' contains a node with no id.`}),n.has(r.id.toLowerCase())&&t.push({code:"template.nodes.duplicate",message:`Template '${e.id}' contains duplicate node id '${r.id}'.`}),n.add(r.id.toLowerCase())}function xe(e,t){var n;const o=(n=e.metadata)==null?void 0:n[t];return typeof o=="string"?o.trim():""}function fs(e){const t=e.trim().toLowerCase();return t==="textarea"||t==="select"?t:"text"}function ys(e){return e.trim().toLowerCase()==="true"}function ks(e){const t=[];for(const o of e.split(/\r?\n/)){const n=o.trim();if(!n)continue;const[r,s]=n.split("|",2).map(c=>c.trim());r&&t.push({value:r,label:s||r})}return t}function vs(e,t,o){const n=Xe(e),r=Xe(t.id);return{...t,label:ce(`launcher.${n}.option.${r}.title`,t.label,o),description:ce(`launcher.${n}.option.${r}.desc`,t.description,o)}}function Ts(e,t,o){var s;const n=Xe(e),r=Xe(t.key);return{...t,label:ce(`template.${n}.input.${r}.label`,t.label,o),description:ce(`template.${n}.input.${r}.desc`,t.description,o),placeholder:ce(`template.${n}.input.${r}.placeholder`,t.placeholder,o),options:(s=t.options)==null?void 0:s.map(c=>({...c,label:ce(`template.${n}.input.${r}.option.${Xe(c.value)}`,c.label,o)}))}}function Is(e,t,o){const n=Xe(e),r=Xe(t.id);return{...t,title:ce(`template.${n}.node.${r}.title`,t.title,o),body:ce(`template.${n}.node.${r}.body`,t.body,o),metadata:{...t.metadata??{}}}}function Cs(e){return{generateLabel:ce("templateCard.generate","Generate",e),noInputsLabel:ce("templateCard.noInputs","No inputs needed.",e),generatingMessage:ce("templateCard.generating","Generating nodes...",e),generatedMessageFormat:ce("templateCard.generated","Generated {0} nodes below.",e),generationFailedMessage:ce("templateCard.failed","Template generation failed.",e),requiredMessageFormat:ce("templateCard.required","{0} is required.",e)}}function xs(e,t){var i,m,f,k;if(!yn(e))return null;const o=Da(e.body),n=((i=e.metadata)==null?void 0:i[q.launcherIdKey])||(o==null?void 0:o.launcherId),r=n?ct.launchers.find(T=>H(T.id,n)):null;if(!r)return null;const s=(o==null?void 0:o.selectedOptionId)||((m=e.metadata)==null?void 0:m[q.selectedOptionIdKey])||null,c=Na(r,s,(o==null?void 0:o.inputValues)??{},t);return e.title===c.title&&e.body===JSON.stringify(c)&&((f=e.metadata)==null?void 0:f[q.localizationLanguageKey])===t?null:{...e,title:c.title,body:JSON.stringify(c),tags:["Template","Launcher",c.title,(k=c.options.find(T=>T.id===c.selectedOptionId))==null?void 0:k.label].filter(T=>!!T),metadata:{...e.metadata??{},[q.launcherIdKey]:r.id,[q.selectedOptionIdKey]:c.selectedOptionId??"",[q.localizationLanguageKey]:t}}}function ws(e,t,o){if(yn(e))return null;const n=co(Oe(e,"sourceTemplateId"),Oe(e,"templateId")),r=co(Oe(e,"sourceTemplateNodeId"),Oe(e,"templateNodeId")),s=co(Oe(e,"sourceLauncherId"),Oe(e,"templateLauncher"));if(!n||!r||!s)return null;const c=ct.launchers.find(X=>H(X.id,s)),i=ct.templates.find(X=>H(X.id,n));if(!c||!i)return null;const m=co(Oe(e,"sourceOptionId"),Oe(e,"templateOption")),f=Ss(e,t),k=Mo(Vt(i,o),f),T=Vo(c,i,r,m,k,"ko"),x=ft(Oe(e,q.localizationLanguageKey)||"ko"),B=Vo(c,i,r,m,k,x),w=Vo(c,i,r,m,k,o);if(!T||!B||!w)return null;const z=e.title===T.title||e.title===B.title,ee=e.body===T.body||e.body===B.body;return!z&&!ee?null:{...e,title:z?w.title:e.title,body:ee?w.body:e.body,tags:["Template",w.launcherLabel,w.optionLabel].filter(Boolean),metadata:{...e.metadata??{},[q.localizationManagedKey]:"True",[q.localizationLanguageKey]:o,[q.sourceInputValuesJsonKey]:JSON.stringify(k)}}}function Vo(e,t,o,n,r,s){const c=Xt(e,s),i=Vt(t,s),m=So(c,n),f=i.nodes.find(x=>H(x.id,o));if(!f)return null;const k=Mo(i,r),T=_a(c,m,k);return{title:Mt(f.title,T),body:Mt(f.body,T),launcherLabel:c.label,optionLabel:(m==null?void 0:m.label)||c.label}}function Ss(e,t){const o=Rs(Oe(e,q.sourceInputValuesJsonKey));if(Object.keys(o).length>0)return o;const n=Oe(e,q.controllerNodeIdKey),r=n?t.get(n):null,s=Da(r==null?void 0:r.body);return(s==null?void 0:s.inputValues)??{}}function Rs(e){if(!e)return{};try{const t=JSON.parse(e);return Object.fromEntries(Object.entries(t??{}).map(([o,n])=>[o,String(n??"")]))}catch{return{}}}function Oe(e,t){var n;const o=(n=e.metadata)==null?void 0:n[t];return typeof o=="string"&&o.trim()?o.trim():null}function co(...e){var t;return((t=e.find(o=>typeof o=="string"&&o.trim()))==null?void 0:t.trim())??null}function Xe(e){const t=String(e||"").trim();return t?t.replace(/:/g,"."):"unknown"}function Ms(e,t){return e.includes("{0}")?e.replace("{0}",t):`${t} is required.`}function As(e,t){var o,n,r;return String(t||"").trim()?((n=e.options.find(s=>H(s.id,t)))==null?void 0:n.id)??((r=e.options[0])==null?void 0:r.id):(o=e.options[0])==null?void 0:o.id}function tn(e){return e.map(t=>{var o;return{...t,options:(o=t.options)==null?void 0:o.map(n=>({...n}))}})}function Fa(e,t){const o={};for(const n of e)o[n.key]=String(t[n.key]??kn(n));return o}function Ps(){const e=new Date,t=(o,n=2)=>`${o}`.padStart(n,"0");return[e.getFullYear(),t(e.getMonth()+1),t(e.getDate()),t(e.getHours()),t(e.getMinutes()),t(e.getSeconds()),t(e.getMilliseconds(),3)].join("")}function Ba(e){return e==="ai-task"?"aiPrompt":e==="template-launcher"?q.contentType:e}function Es(e){return H(e,"directory")?"directory":H(e,"pdf")?"pdf":H(e,"file")?"file":H(e,"memo")?"memo":H(e,"markdown")?"markdown":H(e,"csv-table")?"csv-table":H(e,"text")?"text":H(e,"code")?"code":H(e,"mask")?"mask":H(e,"image")?"image":H(e,"embed")?"embed":H(e,"aiPrompt")?"ai-task":H(e,q.contentType)?"template-launcher":"note"}function js(e){const t=`${e.getMonth()+1}`.padStart(2,"0"),o=`${e.getDate()}`.padStart(2,"0"),n=`${e.getHours()}`.padStart(2,"0"),r=`${e.getMinutes()}`.padStart(2,"0");return`${t}.${o} ${n}:${r}`}function Ga(e){return`${e}-${Math.random().toString(36).slice(2,9)}`}function H(e,t){return String(e||"").toLowerCase()===String(t||"").toLowerCase()}function Ls(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}const Ye=Object.freeze({status:"/api/remote/status",devices:"/api/remote/devices",frames:"/api/remote/frames",hostTarget:"/api/remote/host-target",agentStatus:"/api/remote/agent/status",agentConnect:"/api/remote/agent/connect",agentDisconnect:"/api/remote/agent/disconnect",deviceTasksTemplate:"/api/remote/devices/{deviceId}/tasks",taskBatch:"/api/remote/tasks"}),Ua=Object.freeze({frames:"/api/remote/frames/ws",input:"/api/remote/input/ws"});function Ns(e){return Ye.deviceTasksTemplate.replace("{deviceId}",encodeURIComponent(e))}function za(e){return Va(e==null?void 0:e.remoteFrameWsPath,Ua.frames)}function $a(e){return Va(e==null?void 0:e.remoteInputWsPath,Ua.input)}function Va(e,t){return typeof e=="string"?e.trim():t}const qo={},Ds="http://127.0.0.1:5147",qa="MindExec.AllowHostedLocalBridge",Os=new Set(["4173","5173"]);function Yt(e){return e.replace(/\/+$/,"")}function _s(){return((qo==null?void 0:qo.VITE_LOCAL_BRIDGE_URL)||"").trim()}function Fs(){if(typeof window>"u")return"";const{protocol:e,hostname:t,port:o,origin:n}=window.location,r=t.toLowerCase();return(e==="http:"||e==="https:")&&(r==="localhost"||r==="127.0.0.1"||r==="::1")&&o&&!Os.has(o)?n:""}function L(){return Yt(_s()||Fs()||Ds)}function Bs(){const e=window.location.hostname.toLowerCase();return e==="localhost"||e==="127.0.0.1"||e==="::1"}function Gs(){try{return window.localStorage.getItem(qa)==="true"}catch{return!1}}function Wa(e){try{e&&window.localStorage.setItem(qa,"true")}catch{}}function At(){return Bs()||Gs()}function Ka(e){const t=String((e==null?void 0:e.bridgeToken)||"").trim();if(t)return{header:(e==null?void 0:e.bridgeTokenHeader)||"X-Bridge-Token",token:t}}async function _(e,t,o={}){const n=new AbortController,r=window.setTimeout(()=>n.abort(),o.timeoutMs??4200),s=new Headers;s.set("Accept","application/json"),s.set("Cache-Control","no-store"),s.set("Pragma","no-cache"),o.body!==void 0&&s.set("Content-Type","application/json"),o.auth&&s.set(o.auth.header,o.auth.token);try{const c=await fetch(`${Yt(e)}${t}`,{method:o.method||(o.body===void 0?"GET":"POST"),headers:s,body:o.body===void 0?void 0:JSON.stringify(o.body),cache:"no-store",signal:n.signal}),i=await c.text(),m=i?JSON.parse(i):null;if(!c.ok){const f=(m==null?void 0:m.error)||(m==null?void 0:m.message)||`LocalBridge request failed: ${c.status}`;throw new Error(f)}return m}finally{window.clearTimeout(r)}}function Us(e){return e instanceof DOMException&&e.name==="AbortError"?"LocalBridge probe timed out.":e instanceof SyntaxError?"LocalBridge returned a non-JSON response.":e instanceof Error?e.message||"LocalBridge is unavailable.":String(e||"LocalBridge is unavailable.")}async function vn(e=L()){var t;try{const o=await _(e,"/api/status?refresh=1",{timeoutMs:4200});return h.emit("localBridge.status",{baseUrl:e,connected:!0,projectOpen:((t=o.project)==null?void 0:t.isOpen)===!0}),{state:"connected",baseUrl:e,status:o}}catch(o){const n=Us(o);return h.emit("localBridge.status",{baseUrl:e,connected:!1,message:n}),{state:"unavailable",baseUrl:e,message:n}}}async function Xc(e,t,o=L()){return _(o,"/project/open",{method:"POST",body:{path:e},auth:t,timeoutMs:15e3})}async function Yc(e=L(),t=18,o=1200){var r,s;let n={state:"idle",baseUrl:e};for(let c=0;c<t;c+=1){if(n=await vn(e),n.state==="connected"&&((s=(r=n.status)==null?void 0:r.project)!=null&&s.isOpen))return n;await new Promise(i=>{window.setTimeout(i,o)})}return n}async function Qc(e,t=L()){return _(t,"/project/symbols",{auth:e,timeoutMs:12e3})}async function Jc(e,t=L()){return _(t,"/project/graph",{auth:e,timeoutMs:12e3})}async function Zc(e="standard",t,o=L()){const n=`?level=${encodeURIComponent(e)}`;return _(o,`/project/ai-context${n}`,{auth:t,timeoutMs:14e3})}async function ed(e,t=L()){return h.emit("localBridge.codex.capabilities.request",{baseUrl:t}),_(t,"/api/codex/capabilities",{auth:e,timeoutMs:12e3})}async function td(e,t=5,o,n=L()){return h.emit("localBridge.web.search.request",{baseUrl:n,maxResults:t}),_(n,"/api/web/search",{method:"POST",body:{query:e,maxResults:t},auth:o,timeoutMs:24e3})}async function od(e,t=6e3,o,n=L()){return h.emit("localBridge.web.fetch.request",{baseUrl:n,maxChars:t}),_(n,"/api/web/fetch",{method:"POST",body:{url:e,maxChars:t},auth:o,timeoutMs:24e3})}async function nd(e,t,o=L()){return h.emit("localBridge.browser.open.request",{baseUrl:o}),_(o,"/api/browser/open",{method:"POST",body:{url:e},auth:t,timeoutMs:24e3})}async function ad(e,t=4e3,o,n=L()){return h.emit("localBridge.browser.snapshot.request",{baseUrl:n,maxChars:t}),_(n,"/api/browser/snapshot",{method:"POST",body:{sessionId:e,maxChars:t},auth:o,timeoutMs:18e3})}async function rd(e,t="hero",o=3e3,n,r=L()){return h.emit("localBridge.browser.extract.request",{baseUrl:r,scope:t,maxChars:o}),_(r,"/api/browser/extract",{method:"POST",body:{sessionId:e,scope:t,maxChars:o},auth:n,timeoutMs:18e3})}async function id(e,t,o=L()){return h.emit("localBridge.evidence.save.request",{baseUrl:o,kind:e.kind||"evidence"}),_(o,"/api/evidence/save",{method:"POST",body:e,auth:t,timeoutMs:18e3})}async function sd(e,t,o=L()){var n;return h.emit("localBridge.concept.defineComposite.request",{baseUrl:o,hasSignature:!!((n=e.signature)!=null&&n.trim())}),_(o,"/api/concept/define-composite",{method:"POST",body:e,auth:t,timeoutMs:18e3})}async function ld(e,t=L()){return h.emit("localBridge.concept.status.request",{baseUrl:t}),_(t,"/api/concept/status",{method:"GET",auth:e,timeoutMs:12e3})}async function cd(e,t,o=L()){return h.emit("localBridge.concept.row.request",{baseUrl:o,id:e}),_(o,`/api/concept/row?id=${encodeURIComponent(e)}`,{method:"GET",auth:t,timeoutMs:12e3})}async function dd(e,t=L()){return h.emit("localBridge.concept.embed.readiness.request",{baseUrl:t}),_(t,"/api/concept/embed/readiness",{method:"GET",auth:e,timeoutMs:12e3})}async function ud(e,t=L()){return _(t,"/project/close",{method:"POST",auth:e,timeoutMs:12e3})}async function pd(e=L()){return _(e,"/api/workspace",{timeoutMs:4200})}async function md(e,t,o=L()){return _(o,"/api/workspace/browse",{method:"POST",body:{initialPath:e||""},auth:t,timeoutMs:12e4})}async function hd(e,t,o=L()){return _(o,"/api/workspace/set",{method:"POST",body:{path:e},auth:t,timeoutMs:3e4})}async function gd(e,t,o=L()){return h.emit("localBridge.dir.list.request",{baseUrl:o}),_(o,"/api/dir/list",{method:"POST",body:{path:e},auth:t,timeoutMs:12e3})}async function bd(e=L()){return _(e,"/project/change-feed",{timeoutMs:4200})}async function Ha(e,t=L()){return _(t,Ye.status,{auth:e,timeoutMs:4200})}async function zs(e,t=L()){return _(t,Ye.agentStatus,{auth:e,timeoutMs:4200})}async function Xa(e,t=L(),o={}){const n=o.includeDataUrl?"?includeDataUrl=true":"";return _(t,`${Ye.devices}${n}`,{auth:e,timeoutMs:6500})}async function Ya(e,t,o=L()){return _(o,Ye.frames,{method:"POST",body:{deviceIds:e,includeThumbnail:!0,includeLive:!0},auth:t,timeoutMs:6500})}async function sa(e,t,o,n=L(),r={}){return _(n,Ye.hostTarget,{method:"POST",body:{nodeId:e,enabled:t,leaseMs:r.leaseMs??6e4},auth:o,timeoutMs:6500})}async function $s(e,t,o=L()){return _(o,Ye.agentConnect,{method:"POST",body:e,auth:t,timeoutMs:3e4})}async function Vs(e="react-remote-monitor",t,o=L()){return _(o,Ye.agentDisconnect,{method:"POST",body:{reason:e},auth:t,timeoutMs:12e3})}async function Qa(e,t,o,n=L()){return _(n,Ns(e),{method:"POST",body:t,auth:o,timeoutMs:12e3})}async function qs(e,t,o=L()){return _(o,Ye.taskBatch,{method:"POST",body:e,auth:t,timeoutMs:16e3})}async function fd(e,t=L()){const o=new URLSearchParams;return o.set("q",e.q),o.set("order",e.order||"relevance"),o.set("publishedWithin",e.publishedWithin||"any"),o.set("videoDuration",e.videoDuration||"any"),o.set("eventType",e.eventType||"any"),o.set("safeSearch",e.safeSearch||"moderate"),e.relevanceLanguage&&o.set("relevanceLanguage",e.relevanceLanguage),e.regionCode&&o.set("regionCode",e.regionCode),e.maxResults&&o.set("maxResults",String(e.maxResults)),e.pageToken&&o.set("pageToken",e.pageToken),_(t,`/api/youtube/search?${o.toString()}`,{timeoutMs:16e3})}function $e(e){return`/api/company-core${e.startsWith("/")?e:`/${e}`}`}async function yd(e,t=L()){return h.emit("companyCore.bridge.request",{method:"GET",path:"/health"}),_(t,$e("/health"),{auth:e,timeoutMs:6500})}async function kd(e,t=L()){return h.emit("companyCore.bridge.request",{method:"GET",path:"/api/companies"}),_(t,$e("/api/companies"),{auth:e,timeoutMs:12e3})}async function vd(e=20,t,o=L()){const n=Math.max(1,Math.min(100,Math.round(e)));return h.emit("companyCore.bridge.request",{method:"GET",path:"/api/company-runs",limit:n}),_(o,$e(`/api/company-runs?limit=${n}`),{auth:t,timeoutMs:12e3})}async function Td(e,t,o=L()){const n=encodeURIComponent(e);return h.emit("companyCore.bridge.request",{method:"GET",path:"/api/companies/:id/snapshot"}),_(o,$e(`/api/companies/${n}/snapshot`),{auth:t,timeoutMs:12e3})}async function Id(e,t,o=L()){const n=encodeURIComponent(e);return h.emit("companyCore.bridge.request",{method:"GET",path:"/api/companies/:id/approvals"}),_(o,$e(`/api/companies/${n}/approvals?pendingOnly=false`),{auth:t,timeoutMs:12e3})}async function Cd(e,t,o=L()){const n=encodeURIComponent(e);return h.emit("companyCore.bridge.request",{method:"GET",path:"/api/companies/:id/artifacts"}),_(o,$e(`/api/companies/${n}/artifacts`),{auth:t,timeoutMs:12e3})}async function xd(e,t,o=L()){const n=encodeURIComponent(e);return h.emit("companyCore.bridge.request",{method:"GET",path:"/api/companies/:id/publishing-jobs"}),_(o,$e(`/api/companies/${n}/publishing-jobs?limit=100`),{auth:t,timeoutMs:12e3})}async function wd(e,t,o=L()){const n=encodeURIComponent(e);return h.emit("companyCore.bridge.request",{method:"GET",path:"/api/companies/:id/growth"}),_(o,$e(`/api/companies/${n}/growth?limit=100`),{auth:t,timeoutMs:12e3})}async function Sd(e,t,o=L()){const n=encodeURIComponent(e);return h.emit("companyCore.bridge.request",{method:"GET",path:"/api/companies/:id/revenue"}),_(o,$e(`/api/companies/${n}/revenue?limit=100`),{auth:t,timeoutMs:12e3})}async function Rd(e,t,o=L()){const n=encodeURIComponent(e);return h.emit("companyCore.bridge.request",{method:"GET",path:"/api/companies/:id/reflections"}),_(o,$e(`/api/companies/${n}/reflections?limit=50`),{auth:t,timeoutMs:12e3})}async function Md(e,t,o=L()){return _(o,"/api/codex/thread/run",{method:"POST",body:e,auth:t,timeoutMs:18e4})}async function Ad(e,t=L()){return _(t,"/api/file/read",{method:"POST",body:{path:e},timeoutMs:3e4})}async function Pd(e,t=L()){const o=new AbortController,n=window.setTimeout(()=>o.abort(),3e4);try{const r=await fetch(`${Yt(t)}/api/file/read-raw?path=${encodeURIComponent(e)}`,{method:"GET",headers:{Accept:"application/octet-stream","Cache-Control":"no-store",Pragma:"no-cache"},cache:"no-store",signal:o.signal});if(!r.ok)throw new Error(`LocalBridge raw file read failed: ${r.status}`);return new Uint8Array(await r.arrayBuffer())}finally{window.clearTimeout(n)}}async function Ed(e,t,o,n=L()){return _(n,"/api/file/write",{method:"POST",body:{path:e,content:t,encoding:"utf8"},auth:o,timeoutMs:3e4})}async function jd(e,t,o,n=L()){const r=new AbortController,s=window.setTimeout(()=>r.abort(),3e4),c=new Headers;c.set("Accept","application/json"),c.set("Content-Type","application/octet-stream"),c.set("Cache-Control","no-store"),c.set("Pragma","no-cache"),c.set(o.header,o.token);try{const i=new ArrayBuffer(t.byteLength);new Uint8Array(i).set(t);const m=await fetch(`${Yt(n)}/api/file/write-raw?path=${encodeURIComponent(e)}`,{method:"PUT",headers:c,body:i,cache:"no-store",signal:r.signal}),f=await m.json().catch(()=>null);if(!m.ok){const k=(f==null?void 0:f.error)||(f==null?void 0:f.message)||`LocalBridge raw file write failed: ${m.status}`;throw new Error(k)}return f}finally{window.clearTimeout(s)}}async function Ld(e,t,o=L()){return _(o,"/api/file/delete",{method:"POST",body:{path:e},auth:t,timeoutMs:3e4})}function Ws(e,t=L()){const o=String(e||"").trim();if(!o)return;if(/^https?:\/\//i.test(o)||o.startsWith("data:"))return o;const n=o.replace(/\\/g,"/").replace(/^\/+/,"");return`${Yt(t)}/${n}`}async function Tn(e){var r;let t=null;if(typeof navigator<"u"&&((r=navigator.clipboard)!=null&&r.writeText))try{return await navigator.clipboard.writeText(e),"clipboard"}catch(s){t=s}if(typeof document>"u"||!document.body||typeof document.execCommand!="function")throw t instanceof Error?t:new Error("clipboard-unavailable");const o=document.createElement("textarea"),n=document.activeElement instanceof HTMLElement?document.activeElement:null;o.value=e,o.setAttribute("readonly",""),o.style.position="fixed",o.style.left="-9999px",o.style.top="0",o.style.opacity="0",document.body.appendChild(o),o.focus(),o.select(),o.setSelectionRange(0,e.length);try{if(!document.execCommand("copy"))throw t instanceof Error?t:new Error("clipboard-unavailable");return"fallback"}finally{o.remove(),n==null||n.focus({preventScroll:!0})}}const Ja="mindexec.app.language",ko="auto",qt=[{code:ko,label:"Auto",nativeLabel:"Auto",englishName:"the user's input language",htmlLang:"auto",isAuto:!0,description:"Match the user's input language unless a prompt asks otherwise."},{code:"en",label:"English",nativeLabel:"English",englishName:"English",htmlLang:"en",isAuto:!1,description:"Prefer English for user-facing AI output."},{code:"ko",label:"Korean",nativeLabel:"한국어",englishName:"Korean",htmlLang:"ko",isAuto:!1,description:"Prefer Korean for user-facing AI output."},{code:"ja",label:"Japanese",nativeLabel:"日本語",englishName:"Japanese",htmlLang:"ja",isAuto:!1,description:"Prefer Japanese for user-facing AI output."},{code:"zh",label:"Chinese",nativeLabel:"中文",englishName:"Chinese",htmlLang:"zh",isAuto:!1,description:"Prefer Chinese for user-facing AI output."}];function Et(e){if(typeof e!="string")return ko;const t=e.trim().toLowerCase();return qt.some(o=>o.code===t)?t:ko}function In(e){const t=Et(e);return qt.find(o=>o.code===t)??qt[0]}function Za(){if(typeof window>"u")return null;try{const e=window.localStorage.getItem(Ja);return e===null?null:Et(e)}catch{return null}}function Nd(e){return Et(Za()??e??ko)}function Dd(e){const t=Et(e);if(typeof window>"u")return t;try{window.localStorage.setItem(Ja,t)}catch{}return t}function Od(e){const t=Za()??Et(e.settings.appLanguage);return{...e,settings:{...e.settings,appLanguage:t}}}function _d(e){const t=In(e);return t.isAuto?"Language preference: match the user's input language unless the user explicitly asks for a different language.":`Language preference: respond in ${t.englishName} unless the user explicitly asks for a different language.`}function Fd(e){const t=In(e);return t.isAuto?"Language preference: if the generated asset includes visible text, captions, labels, or UI copy, match the user's input language unless the prompt explicitly asks for another language.":`Language preference: if the generated asset includes visible text, captions, labels, or UI copy, use ${t.englishName} unless the prompt explicitly asks for another language.`}const Wo=[{id:"general",label:"General",icon:ni},{id:"language",label:"Language",icon:ai},{id:"connection",label:"Connection",icon:ri},{id:"media",label:"Media",icon:Ca},{id:"agent",label:"Agent",icon:ii},{id:"system",label:"System",icon:si},{id:"about",label:"About",icon:li}],Ks=["Managed Cloud","BYOK","OpenAI Codex","Local Ollama"];function Hs(e,t,o){return Number.isFinite(e)?Math.min(o,Math.max(t,Math.round(e))):t}function Bd({settings:e,onPatchSettings:t,onClose:o}){const[n,r]=d.useState("general"),[s,c]=d.useState("idle"),[i,m]=d.useState(null),f=Wo.find(g=>g.id===n)??Wo[0],k=Gi(e),T=Ht(e.model),x=e.aiProvider??"OpenAI Codex",B=Ys(T),w=In(e.appLanguage),z=la("Image",e),ee=la("Video",e),X=Object.fromEntries(qt.map(g=>[g.code,g.isAuto?g.label:`${g.nativeLabel} / ${g.label}`])),P=(g,Q)=>t(g,Q),ke=async()=>{try{const g=await Tn(B);c("copied"),h.emit("settings.providerCommand.copy",{provider:x,command:"dataset-generator",method:g,redacted:!0})}catch(g){if(Qs(i)){c("selected"),h.emit("settings.providerCommand.selectFallback",{provider:x,command:"dataset-generator",message:g instanceof Error?g.message:String(g),redacted:!0});return}c("failed"),h.emit("settings.providerCommand.copyFailed",{provider:x,command:"dataset-generator",message:g instanceof Error?g.message:String(g)})}},F=(g,Q)=>{const pe=ja(g,Q),E=wo(g).find(J=>J.id===pe);if(!E)return;const ve=g==="Image"?e.imageRouterImageAspectPresetId:e.imageRouterVideoAspectPresetId,me=Zo(g,E,ve);P(g==="Image"?{imageRouterImageModel:E.id,imageRouterImageAspectPresetId:me.id}:{imageRouterVideoModel:E.id,imageRouterVideoAspectPresetId:me.id},`media.${g.toLowerCase()}.model`),h.emit("media.model.select",{mode:g,model:E.id,aspectPresetId:me.id,requestedSize:en(me),source:"settings-dialog"})},ue=(g,Q)=>{const pe=g==="Image"?z.model:ee.model,E=Zo(g,pe,Q);P(g==="Image"?{imageRouterImageAspectPresetId:E.id}:{imageRouterVideoAspectPresetId:E.id},`media.${g.toLowerCase()}.aspect`),h.emit("media.aspect.select",{mode:g,model:pe.id,aspectPresetId:E.id,requestedSize:en(E),source:"settings-dialog"})};return a.jsx("div",{className:"ai-settings-backdrop","data-testid":"ai-settings-dialog",onMouseDown:o,children:a.jsxs("section",{className:"ai-settings-dialog","aria-label":"AI settings","data-disable-mindcanvas-hotkeys":"true",onMouseDown:g=>g.stopPropagation(),children:[a.jsx("aside",{className:"ai-settings-tabs","aria-label":"Settings sections",children:Wo.map(g=>{const Q=g.icon;return a.jsxs("button",{type:"button",className:n===g.id?"is-active":"","data-testid":`ai-settings-tab-${g.id}`,onClick:()=>r(g.id),children:[a.jsx(Q,{size:15}),a.jsx("span",{children:g.label})]},g.id)})}),a.jsxs("main",{className:"ai-settings-main",children:[a.jsxs("header",{className:"ai-settings-head",children:[a.jsxs("div",{children:[a.jsx("strong",{children:f.label}),a.jsx("span",{children:n==="connection"?"Provider choices stay adapter-gated in this React shell.":n==="media"?"Default model and aspect hints shared with the bottom input.":n==="language"?"Shared by AI runs and media prompt hints.":"Saved with the current board."})]}),a.jsx("button",{type:"button",title:"Close settings",onClick:o,children:a.jsx(xo,{size:16})})]}),a.jsxs("div",{className:"ai-settings-body",children:[n==="general"&&a.jsxs("div",{className:"settings-grid",children:[a.jsx(Ct,{label:"Grid snap",description:"Align new movement to the canvas grid.",checked:e.gridSnap??!0,onChange:g=>P({gridSnap:g},"general.gridSnap")}),a.jsx(Ee,{label:"Grid type",description:"Background grid rendering mode.",value:e.gridType??"dot",options:["dot","line","particles","spirit"],onChange:g=>P({gridType:g},"general.gridType")}),a.jsx(Ee,{label:"Cursor position",description:"Where new nodes are placed by default.",value:e.cursorMode??"center",options:["center","lastNode"],onChange:g=>P({cursorMode:g},"general.cursorMode")}),a.jsx(Ee,{label:"Cursor direction",description:"Direction for sequential node placement.",value:e.cursorDirection,options:["right","down"],onChange:g=>P({cursorDirection:g},"general.cursorDirection")}),a.jsx(Ee,{label:"Camera trace mode",description:"Whether the camera follows new work.",value:e.cameraTraceMode??"none",options:["none","cursor"],onChange:g=>P({cameraTraceMode:g},"general.cameraTraceMode")}),a.jsx(Ee,{label:"Image load size",description:"Image nodes use fixed or original sizing.",value:e.imageLoadSize??"default",options:["default","original"],onChange:g=>P({imageLoadSize:g},"general.imageLoadSize")}),a.jsx(Gt,{label:"AI node width",description:"Default width for new AI task nodes.",value:e.aiNodeDefaultWidth??340,min:220,max:1200,onChange:g=>P({aiNodeDefaultWidth:g},"general.aiNodeDefaultWidth")}),a.jsx(Gt,{label:"AI node height",description:"Default height for new AI task nodes.",value:e.aiNodeDefaultHeight??196,min:120,max:900,onChange:g=>P({aiNodeDefaultHeight:g},"general.aiNodeDefaultHeight")}),a.jsx(Ct,{label:"Show full AI response",description:"Allow AI result nodes to expand for long output.",checked:e.showFullAiResponse??!1,onChange:g=>P({showFullAiResponse:g},"general.showFullAiResponse")}),a.jsx(Ct,{label:"Minimap",description:"Display a small navigation minimap in the bottom-right of the canvas.",checked:e.minimapEnabled??!1,onChange:g=>P({minimapEnabled:g},"general.minimapEnabled")}),a.jsx(Ct,{label:"Mouse wheel mode",description:"Swap wheel zoom and scroll behavior.",checked:e.wheelMode,onChange:g=>P({wheelMode:g},"general.wheelMode")})]}),n==="language"&&a.jsx("div",{className:"settings-grid settings-grid--compact",children:a.jsx(Ee,{label:"App Language",description:`Controls the language preference passed into AI runs. ${w.description}`,value:w.code,options:qt.map(g=>g.code),optionLabels:X,testId:"app-language-select",onChange:g=>P({appLanguage:Et(g)},"language.appLanguage")})}),n==="connection"&&a.jsxs("div",{className:"settings-stack",children:[a.jsx("section",{className:"settings-radio-group","aria-label":"AI Provider",children:Ks.map(g=>a.jsxs("label",{className:x===g?"is-selected":"",children:[a.jsx("input",{type:"radio",name:"ai-provider",checked:x===g,onChange:()=>P({aiProvider:g},"connection.provider")}),a.jsxs("span",{children:[a.jsx("strong",{children:g}),a.jsx("small",{children:er(g)})]})]},g))}),a.jsx(Js,{provider:x,datasetGeneratorCommand:B,copyState:s,onCommandTextAreaRef:m,onCopyDatasetGeneratorCommand:ke}),a.jsxs("div",{className:"settings-grid settings-grid--compact",children:[a.jsx(Ee,{label:"Text model",description:Xs(T),value:T,options:k.map(g=>g.id),optionLabels:Object.fromEntries(k.map(g=>[g.id,`${Pa(g.provider)} · ${g.label}`])),onChange:g=>P({model:g},"connection.model")}),a.jsx(Ee,{label:"Reasoning effort",description:"Mapped to LocalBridge Codex reasoning effort.",value:e.effort,options:["Fast","Normal","Deep"],onChange:g=>P({effort:g},"connection.effort")}),(e.aiProvider??"OpenAI Codex")==="Local Ollama"&&a.jsx(Zs,{label:"Ollama URL",description:"Local Ollama endpoint.",value:e.ollamaEndpoint??"http://localhost:11434",onChange:g=>P({ollamaEndpoint:g},"connection.ollamaEndpoint")}),a.jsx(Ct,{label:"ImageRouter mode",description:"Key material remains outside this React board snapshot.",checked:e.imageRouterEnabled??!1,onChange:g=>P({imageRouterEnabled:g},"connection.imageRouterEnabled")}),a.jsx(Ct,{label:"Parallel insight bundles",description:"Preserves the original CodeMaster insight bundle switch.",checked:e.codeMasterInsightBundlesEnabled??!0,onChange:g=>P({codeMasterInsightBundlesEnabled:g},"connection.codeMasterInsightBundlesEnabled")}),a.jsx(Gt,{label:"Bundle timeout",description:"Per insight bundle timeout in milliseconds.",value:e.codeMasterInsightBundleTimeoutMs??18e3,min:5e3,max:6e4,onChange:g=>P({codeMasterInsightBundleTimeoutMs:g},"connection.codeMasterInsightBundleTimeoutMs")}),a.jsx(Gt,{label:"Retry Count (Std)",description:"Retries for lite and standard CodeMaster insight bundle calls.",value:e.codeMasterInsightBundleRetryCount??2,min:1,max:4,step:1,testId:"codemaster-insight-retry-std",onChange:g=>P({codeMasterInsightBundleRetryCount:g},"connection.codeMasterInsightBundleRetryCount")}),a.jsx(Gt,{label:"Retry Count (Deep)",description:"Retries for deep CodeMaster insight bundle calls.",value:e.codeMasterInsightBundleRetryCountDeep??3,min:1,max:5,step:1,testId:"codemaster-insight-retry-deep",onChange:g=>P({codeMasterInsightBundleRetryCountDeep:g},"connection.codeMasterInsightBundleRetryCountDeep")})]}),a.jsxs("div",{className:"settings-note",children:[a.jsx(na,{size:15}),a.jsx("span",{children:"API keys are intentionally not stored in this React board. Live provider adapters must supply and verify secrets separately."})]})]}),n==="media"&&a.jsxs("div",{className:"settings-stack","data-testid":"ai-settings-media-tab",children:[a.jsx(ca,{mode:"Image",icon:a.jsx(Ca,{size:17}),selection:z,onModelChange:g=>F("Image",g),onAspectChange:g=>ue("Image",g)}),a.jsx(ca,{mode:"Video",icon:a.jsx(ci,{size:17}),selection:ee,onModelChange:g=>F("Video",g),onAspectChange:g=>ue("Video",g)}),a.jsxs("div",{className:"settings-note",children:[a.jsx(na,{size:15}),a.jsx("span",{children:"These are adapter hints only. Selecting a media model does not store an API key, invoke ImageRouter, or claim live generation availability."})]})]}),n==="agent"&&a.jsx("div",{className:"settings-grid settings-grid--compact",children:a.jsx(Ee,{label:"Direct instruction queue",description:"How selected agents receive direct instructions.",value:e.directInstructionQueueMode??"Append",options:["Append","Next","ReplacePending"],onChange:g=>P({directInstructionQueueMode:g},"agent.directInstructionQueueMode")})}),n==="system"&&a.jsxs("div",{className:"settings-grid settings-grid--compact",children:[a.jsx(Ee,{label:"Execution mode",description:"Concept parses IR locally; PureLLM is direct chat adapter mode.",value:e.executionMode??"Concept",options:["Concept","PureLLM"],onChange:g=>P({executionMode:g},"system.executionMode")}),a.jsxs("div",{className:"settings-note",children:[a.jsx(di,{size:15}),a.jsx("span",{children:"Changing this setting affects the next run only. It does not claim a live agent has executed."})]})]}),n==="about"&&a.jsxs("div",{className:"settings-about",children:[a.jsx(ui,{size:34}),a.jsx("strong",{children:"MindExec React"}),a.jsx("span",{children:"Fast local-first MindCanvas shell, rebuilt without Blazor in the render loop."}),a.jsx("small",{children:"AI settings parity slice"})]})]}),a.jsxs("footer",{className:"ai-settings-footer",children:[a.jsx("span",{children:"Changes are persisted with the current board."}),a.jsx("button",{type:"button","data-testid":"ai-settings-done",onClick:o,children:"Done"})]})]})]})})}function la(e,t){const o=Jo(e,t),n=e==="Image"?t.imageRouterImageAspectPresetId:t.imageRouterVideoAspectPresetId,r=Zo(e,o,n);return{model:o,aspect:r,aspectOptions:La(o,e),requestedSize:en(r)}}function Xs(e){const t=_i(e);return t?`${Pa(t.provider)} text model used by bottom input and AI Task runs.`:"Custom text model id preserved with this board."}function er(e){switch(e){case"Managed Cloud":return"Reserved for the hosted paid adapter.";case"BYOK":return"Use a separately configured user key.";case"Local Ollama":return"Local LLM server endpoint.";case"Gemini CLI":return"Hidden Gemini CLI compatibility path.";case"OpenAI Codex":default:return"LocalBridge Codex execution path."}}function Ys(e){return["dotnet run --project MindExecution.Tools -c Debug -- --count 50 --out finetune_dataset.jsonl","--baseUrl https://openrouter.ai/api/v1",`--model "${(e.trim()||"openai/gpt-4o-mini").replace(/"/g,'\\"')}"`,'--key "OPENROUTER_API_KEY"',"--httpReferer http://localhost",'--xTitle "MindExec DatasetGenerator"'].join(" ")}function Qs(e){return!e||e.value.length===0?!1:(e.focus({preventScroll:!0}),e.select(),e.setSelectionRange(0,e.value.length),!0)}function Js({provider:e,datasetGeneratorCommand:t,copyState:o,onCommandTextAreaRef:n,onCopyDatasetGeneratorCommand:r}){const s=e==="BYOK"?"BYOK Settings":e==="Local Ollama"?"Ollama Settings":e==="Managed Cloud"?"Managed Cloud":e==="Gemini CLI"?"Gemini CLI":"OpenAI Codex";return a.jsxs("section",{className:"settings-provider-card","data-testid":"ai-settings-provider-guidance","data-provider":e,children:[a.jsx("header",{children:a.jsxs("div",{children:[a.jsx("strong",{"data-testid":"ai-settings-provider-title",children:s}),a.jsx("span",{children:er(e)})]})}),e==="Managed Cloud"&&a.jsx("div",{className:"settings-provider-card__notice",children:"Managed Cloud is coming soon in this build. Switch to BYOK, OpenAI Codex, or Local Ollama for local execution."}),e==="Gemini CLI"&&a.jsx("div",{className:"settings-provider-card__notice","data-testid":"ai-settings-gemini-hidden-provider",children:"Gemini CLI is hidden in this company build. Switch to BYOK, OpenAI Codex, or Local Ollama to manage connection settings here."}),e==="BYOK"&&a.jsxs("div",{className:"settings-provider-card__section",children:[a.jsx("p",{children:"API key material stays outside this React board. Configure the BYOK adapter or environment before running live OpenRouter calls."}),a.jsxs("div",{className:"settings-provider-card__command-head",children:[a.jsx("strong",{children:"DatasetGenerator Export"}),a.jsx("button",{type:"button","data-testid":"ai-settings-provider-copy-command","data-provider-copy-state":o,onClick:()=>void r(),children:o==="copied"?"Copied":o==="selected"?"Selected":o==="failed"?"Copy failed":"Copy command"})]}),a.jsx("textarea",{readOnly:!0,ref:n,value:t,"data-testid":"ai-settings-provider-dataset-command",className:"settings-provider-card__command","aria-label":"Redacted DatasetGenerator command"}),a.jsx("div",{className:"settings-provider-card__note",children:"This command is redacted; no API key is stored in the board. Replace OPENROUTER_API_KEY only in a trusted shell."})]}),e==="OpenAI Codex"&&a.jsxs("div",{className:"settings-provider-card__section",children:[a.jsx("strong",{children:"Connection Requirements"}),a.jsxs("ol",{children:[a.jsxs("li",{children:["Install MindExec LocalBridge dependencies: ",a.jsx("code",{children:"npm install"})]}),a.jsxs("li",{children:["Sign in once: ",a.jsx("code",{children:"codex login"})]}),a.jsx("li",{children:"Runtime: Codex SDK first, Legacy Exec fallback when SDK is unavailable."})]})]}),e==="Local Ollama"&&a.jsxs("div",{className:"settings-provider-card__section",children:[a.jsx("p",{children:"Ollama model selection is handled from the bottom AI input bar. Keep the local endpoint editable below."}),a.jsxs("div",{className:"settings-provider-card__note",children:["Requires ",a.jsx("code",{children:'OLLAMA_ORIGINS="*"'})," when running Ollama for browser access."]})]}),a.jsxs("div",{className:"settings-provider-card__section settings-provider-card__section--image",children:[a.jsx("strong",{children:"Image Generation"}),a.jsx("p",{children:"Text AI provider and image generation provider are configured separately. ImageRouter API key is adapter-owned and used only for image mode."}),a.jsx("span",{children:"ImageRouter API key: not stored in this React board."})]})]})}function ca({mode:e,icon:t,selection:o,onModelChange:n,onAspectChange:r}){const s=wo(e),c=Object.fromEntries(s.map(m=>[m.id,`${m.provider} · ${m.label}`])),i=Object.fromEntries(o.aspectOptions.map(m=>[m.id,`${m.label} · ${m.resolvedSize??"auto"}`]));return a.jsxs("section",{className:"settings-media-section","data-testid":`ai-settings-media-${e.toLowerCase()}`,children:[a.jsxs("header",{children:[a.jsx("span",{className:"settings-media-section__icon",children:t}),a.jsxs("span",{children:[a.jsxs("strong",{children:[e," defaults"]}),a.jsxs("small",{children:[o.model.provider," · ",o.requestedSize]})]})]}),a.jsxs("div",{className:"settings-grid settings-grid--compact",children:[a.jsx(Ee,{label:`${e} model`,description:"Shared with the bottom input model selector.",value:o.model.id,options:s.map(m=>m.id),optionLabels:c,testId:`ai-settings-${e.toLowerCase()}-model`,onChange:n}),a.jsx(Ee,{label:`${e} aspect`,description:o.aspect.note,value:o.aspect.id,options:o.aspectOptions.map(m=>m.id),optionLabels:i,testId:`ai-settings-${e.toLowerCase()}-aspect`,swatchClassName:Hi(o.aspect.id),onChange:r})]})]})}function Ct({label:e,description:t,checked:o,onChange:n}){return a.jsxs("label",{className:"setting-row setting-row--toggle",children:[a.jsxs("span",{children:[a.jsx("strong",{children:e}),a.jsx("small",{children:t})]}),a.jsx("input",{type:"checkbox",checked:o,onChange:r=>n(r.target.checked)})]})}function Ee({label:e,description:t,value:o,options:n,optionLabels:r,testId:s,swatchClassName:c,onChange:i}){return a.jsxs("label",{className:"setting-row",children:[a.jsxs("span",{children:[a.jsx("strong",{children:e}),a.jsx("small",{children:t})]}),a.jsxs("span",{className:"setting-row__select-wrap",children:[c&&a.jsx("span",{className:`aspect-select__swatch ${c}`}),a.jsx("select",{value:o,"data-testid":s,onChange:m=>i(m.target.value),children:n.map(m=>a.jsx("option",{value:m,children:(r==null?void 0:r[m])??m},m))})]})]})}function Gt({label:e,description:t,value:o,min:n,max:r,step:s=1,testId:c,onChange:i}){return a.jsxs("label",{className:"setting-row",children:[a.jsxs("span",{children:[a.jsx("strong",{children:e}),a.jsx("small",{children:t})]}),a.jsx("input",{type:"number",min:n,max:r,step:s,"data-testid":c,value:o,onChange:m=>i(Hs(m.target.valueAsNumber,n,r))})]})}function Zs({label:e,description:t,value:o,onChange:n}){return a.jsxs("label",{className:"setting-row",children:[a.jsxs("span",{children:[a.jsx("strong",{children:e}),a.jsx("small",{children:t})]}),a.jsx("input",{type:"text",value:o,onChange:r=>n(r.target.value.slice(0,160))})]})}const el=1e3,da=1536*1024,tl=3*1024*1024*3/4,ol=24,nl=.65,al=16,rl=.92;function vo(e){if(e.byteLength<5)return null;try{const o=new DataView(e).getUint32(0,!1);if(o<2||o>e.byteLength-4)return null;const n=new TextDecoder().decode(new Uint8Array(e,4,o));return{metadata:il(JSON.parse(n)),payload:e.slice(4+o)}}catch{return null}}function il(e){const t=sl(e)?e:{};return{type:Pe(t.type)||"remote.frame.binary",kind:Pe(t.kind)||"live",deviceId:Pe(t.deviceId),frameSeq:be(t.frameSeq),streamId:Pe(t.streamId),width:be(t.width),height:be(t.height),mimeType:Pe(t.mimeType)||"image/jpeg",mode:Pe(t.mode),fps:be(t.fps),capturedAt:Pe(t.capturedAt),receivedAt:Pe(t.receivedAt),byteLength:be(t.byteLength),transport:Pe(t.transport),contentHash:Pe(t.contentHash),captureMs:be(t.captureMs),sameContentStreak:be(t.sameContentStreak),droppedByAgent:be(t.droppedByAgent),dirtyRectCount:ll(t.dirtyRectCount??t.dirtyRects??t.dirtyRegionCount),dirtyPixelRatio:or(t.dirtyPixelRatio??t.dirtyRatio??t.dirtyAreaRatio??t.changedPixelRatio),codec:Pe(t.codec??t.encoder??t.encoding),deltaEncoded:nr(t.deltaEncoded??t.isDeltaEncoded??t.deltaFrame)}}function tr(e,t=0){const o=be(e.captureMs),n=Math.max(be(e.byteLength),be(t)),r=be(e.sameContentStreak),s=be(e.droppedByAgent),c=be(e.dirtyRectCount),i=or(e.dirtyPixelRatio),m=Pe(e.codec),f=nr(e.deltaEncoded),k={captureMs:o,byteLength:n,sameContentStreak:r,droppedByAgent:s,dirtyRectCount:c,dirtyPixelRatio:i,codec:m,deltaEncoded:f};return n>=tl?{level:"oversized-frame",overBudget:!0,reason:"RemoteFast frame is near the agent binary frame ceiling.",...k}:o>=el?{level:"slow-capture",overBudget:!0,reason:"RemoteFast reported a slow screen capture.",...k}:i>=rl&&n>=da?{level:"inefficient-full-frame",overBudget:!0,reason:"RemoteFast dirty-region metadata shows a near-full-frame update with a large payload.",...k}:i>=nl&&c>=al?{level:"dirty-region-heavy",overBudget:!0,reason:"RemoteFast dirty-region metadata shows many changed regions in one frame.",...k}:n>=da?{level:"large-frame",overBudget:!0,reason:"RemoteFast frame payload is large enough to create decode or transport pressure.",...k}:r>=ol?{level:"stable-duplicate",overBudget:!1,reason:"RemoteFast reports repeated identical content that may be eligible for future delta or skip optimization.",...k}:{level:"nominal",overBudget:!1,reason:"",...k}}function sl(e){return!!(e&&typeof e=="object"&&!Array.isArray(e))}function Pe(e){return typeof e=="string"?e:typeof e=="number"||typeof e=="boolean"?String(e):""}function be(e){const t=Number(e);return Number.isFinite(t)&&t>=0?t:0}function ll(e){return Array.isArray(e)?e.length:Math.round(be(e))}function or(e){const t=be(e);return t<=1?t:t<=100?t/100:1}function nr(e){return typeof e=="boolean"?e:typeof e=="number"?e>0:typeof e=="string"?/^(1|true|yes|on|delta)$/i.test(e.trim()):!1}function ar(e){const t=He(e.deviceId,256),o=cl({...e.input,controlLeaseId:e.input.controlLeaseId||e.controlLeaseId});return!t||!o.type?null:{type:"input",requestId:He(e.requestId,160),deviceId:t,ack:dl(o.type,e.ack),input:o}}function cl(e={}){const t=Number(e.normalizedX),o=Number(e.normalizedY),n=Number(e.deltaX),r=Number(e.deltaY);return{type:He(e.type,48),normalizedX:Number.isFinite(t)?rt(t,0,1):void 0,normalizedY:Number.isFinite(o)?rt(o,0,1):void 0,button:He(e.button,24),deltaX:Number.isFinite(n)?rt(n,-4096,4096):0,deltaY:Number.isFinite(r)?rt(r,-4096,4096):0,key:He(e.key,80),code:He(e.code,80),text:pl(e.text,256),repeat:e.repeat===!0,controlLeaseId:He(e.controlLeaseId,128),issuedAt:He(e.issuedAt,80)}}function dl(e,t){return t===!0||!/^pointermove$/i.test(String(e||"").trim())}function rr(e){let t;try{const n=typeof e=="string"?JSON.parse(e||"{}"):e;if(!ir(n))return null;t=n}catch{return null}const o=xt(t.type||t.Type);return o==="RemoteInputSocketReady"?{type:o,ok:!0,requestId:"",deviceId:"",inputType:"",commandId:"",error:""}:o!=="RemoteInputResult"&&o!=="RemoteInputError"?null:{type:o,ok:t.ok===!0||t.Ok===!0,requestId:xt(t.requestId||t.RequestId),deviceId:xt(t.deviceId||t.DeviceId),inputType:xt(t.inputType||t.InputType),commandId:xt(t.commandId||t.CommandId),error:xt(t.error||t.Error)}}function ul(e,t,o,n=!1){if(!ua(t))return null;const r=ua(o)?o:{left:0,top:0,width:t.width,height:t.height};let s=Number(e.clientX)-t.left-r.left,c=Number(e.clientY)-t.top-r.top;return!Number.isFinite(s)||!Number.isFinite(c)||(s<0||c<0||s>r.width||c>r.height)&&!n?null:(s=rt(s,0,r.width),c=rt(c,0,r.height),{normalizedX:rt(s/r.width,0,1),normalizedY:rt(c/r.height,0,1)})}function rt(e,t,o){return Math.max(t,Math.min(o,e))}function ua(e){if(!ir(e))return!1;const t=Number(e.width),o=Number(e.height);return Number.isFinite(Number(e.left))&&Number.isFinite(Number(e.top))&&Number.isFinite(t)&&Number.isFinite(o)&&t>0&&o>0}function He(e,t){return String(e??"").replace(/\0/g,"").trim().slice(0,t)}function pl(e,t){return He(e,t)}function xt(e){return typeof e=="string"?e:typeof e=="number"||typeof e=="boolean"?String(e):""}function ir(e){return!!(e&&typeof e=="object"&&!Array.isArray(e))}function ml(e,t){const o=Math.max(1,Math.floor(t.visibleBudget)),n=t.searchText.trim(),r=n.length>0||t.visibilityFilter!=="connected"||t.capabilityFilter!=="all",s=hl(e,t.visibilityFilter,n,t.capabilityFilter),c=gl(s,t.groupMode),i=c.length,m=Math.max(1,Math.ceil(Math.max(0,i)/o)),f=Number.isFinite(t.pageIndex)?Math.floor(t.pageIndex):0,k=Math.max(0,Math.min(f,m-1)),T=k*o,x=c.slice(T,T+o),B=x.map(it).filter(Boolean),w=x.filter(P=>P.connected===!0).map(it).filter(Boolean),z=new Set(x.map(P=>on(P,t.groupMode))).size,ee=c.filter(P=>P.connected===!0&&_e(P,"taskDispatch")).map(it).filter(Boolean),X=c.filter(P=>P.connected===!0&&_e(P,"taskDispatch")&&_e(P,"aiAssist")).map(it).filter(Boolean);return{filterActive:r,filteredDevices:s,projectedDevices:c,visibleDevices:x,visibleDeviceIds:B,visibleConnectedDeviceIds:w,frameSubscriptionDeviceIdSignature:w.join(","),visibleGroupCount:z,projectedCount:i,filteredCount:s.length,pageCount:m,pageIndex:k,pageStart:T,placeholderSlots:Math.max(0,o-x.length),taskDispatchDeviceIds:ee,aiTaskDeviceIds:X}}function hl(e,t,o,n){const r=o.trim().toLocaleLowerCase();return e.filter(s=>bl(s,t)&&fl(s,n)&&yl(s,r))}function gl(e,t){return[...e].sort((o,n)=>{const r=on(o,t),s=on(n,t);if(r!==s)return r.localeCompare(s);const c=nn(o).toLocaleLowerCase(),i=nn(n).toLocaleLowerCase();return c!==i?c.localeCompare(i):it(o).localeCompare(it(n))})}function on(e,t){switch(t){case"activity":return lr(e);case"platform":return sr(e).toLocaleLowerCase()||"unknown";case"capability":return cr(e);default:return e.connected===!0?"online":"offline"}}function it(e){return String(e.deviceId||e.sessionId||e.deviceName||"").trim()}function nn(e){return String(e.deviceName||e.hostname||it(e)||"Remote device").trim()}function sr(e){var t;return String(((t=e.status)==null?void 0:t.platform)||e.platform||"unknown").trim()}function _e(e,t){var n;const o=(n=e.capabilities)==null?void 0:n[t];return typeof o=="boolean"?o:typeof o=="number"?o!==0:typeof o=="string"?/^(1|true|yes|on)$/i.test(o):!1}function bl(e,t){return t==="all"?!0:t==="offline"?e.connected!==!0:e.connected===!0}function fl(e,t){switch(t){case"control":return _e(e,"control");case"task":return _e(e,"taskDispatch");case"ai":return _e(e,"aiAssist");default:return!0}}function yl(e,t){var n;return t?[it(e),nn(e),sr(e),an(e.arch),an((n=e.latestTask)==null?void 0:n.status),lr(e),cr(e),e.connected===!0?"online live connected":"offline disconnected"].join(" ").toLocaleLowerCase().includes(t):!0}function lr(e){var o,n,r,s;const t=an((o=e.latestTask)==null?void 0:o.status).toLocaleLowerCase();return t==="running"||t==="queued"?`task-${t}`:((n=e.activeLiveStream)==null?void 0:n.active)===!0?"live":Number(((r=e.counters)==null?void 0:r.liveFramesReceived)||0)>0?"live-recent":Number(((s=e.counters)==null?void 0:s.thumbnailFramesReceived)||0)>0?"thumbnail":e.lastStatusAt||e.lastSeenAt?"heartbeat":"idle"}function cr(e){return _e(e,"aiAssist")?"ai-assist":_e(e,"taskDispatch")?"task-dispatch":_e(e,"control")?"control":_e(e,"thumbnail")||_e(e,"screen")?"screen":"view-only"}function an(e){return typeof e=="string"?e:typeof e=="number"||typeof e=="boolean"?String(e):""}const we=30,kl=1200,vl=4200,pa=12,dr=8e3,Tl=1.5,ur=42,ma="mindexec:remote-monitor-input-smoke",Ko="connected-screen-wall",rn=90,pr=240,mr=1e4,Ut=6e4,uo=25e3,Il=250,bo=2e3,St=60,ha=2,Cl=96,xl=58,zt=[1,1.5,2.25,3.375],ga=1,ba="240px",sn="MindExec.RemoteFleet.AutoHost",ln="MindExec.RemoteFleet.AutoHostNodeId",hr=["status","activity","platform","capability"],gr=["connected","all","offline"],br=["all","control","task","ai"],Rt=new Map,Qt=new WeakMap;function fa(e,t=0){if(typeof window>"u")return!0;const o=window.innerWidth||document.documentElement.clientWidth||0,n=window.innerHeight||document.documentElement.clientHeight||0;return o<=0||n<=0?!0:e.right>=-t&&e.bottom>=-t&&e.left<=o+t&&e.top<=n+t}function fr(e,t,o){const[n,r]=d.useState(()=>typeof document>"u"?!0:document.visibilityState==="visible"),[s,c]=d.useState(!0),i=d.useRef(null);d.useEffect(()=>{if(typeof document>"u")return;const f=()=>r(document.visibilityState==="visible");return f(),document.addEventListener("visibilitychange",f),()=>document.removeEventListener("visibilitychange",f)},[]),d.useEffect(()=>{const f=e.current;if(!f||typeof IntersectionObserver>"u"){c(!0);return}const k=new IntersectionObserver(T=>{const x=T[0],B=!!(x!=null&&x.isIntersecting||((x==null?void 0:x.intersectionRatio)??0)>0),w=fa(x?x.boundingClientRect:f.getBoundingClientRect(),240);c(B||w)},{root:null,rootMargin:ba,threshold:0});return k.observe(f),()=>k.disconnect()},[e]);const m=n&&s;return d.useEffect(()=>{if(i.current===m)return;i.current=m;const f={nodeId:t,visible:m,pageVisible:n,viewportVisible:s,rootMargin:ba};o==="monitor"?h.emit("remoteMonitor.node.transportVisibility",f):h.emit("remoteControl.node.transportVisibility",f)},[t,n,o,s,m]),m}function Gd({node:e,onPatch:t,onCreateRemoteControl:o}){var $n,Vn,qn,Wn,Kn,Hn,Xn,Yn,Qn,Jn,Zn,ea;const n=cn(($n=e.metadata)==null?void 0:$n.RemoteTotal,we),r=cn((Vn=e.metadata)==null?void 0:Vn.RemoteConnected,0),s=d.useRef(null),c=fr(s,e.id,"monitor"),[i,m]=d.useState(()=>({source:At()?"loading":"blocked",loading:!1,message:At()?"RemoteHub not checked yet.":"Hosted LocalBridge access is gated.",baseUrl:L(),devices:po(n,r)})),f=d.useRef(new Map),k=d.useRef(new Set),T=d.useRef(new Map),x=d.useRef(new Map),B=d.useRef(new Map),w=d.useRef(null),z=d.useRef(0),ee=d.useRef(0),X=d.useRef(0),P=d.useRef(!1),ke=d.useRef(0),F=d.useRef(0),ue=d.useRef(!1),g=d.useRef(!1),Q=d.useRef(!1),pe=d.useRef(""),E=d.useRef(0),ve=d.useRef(""),me=d.useRef(0),J=d.useRef(e.metadata??{}),[Ve,qe]=d.useState(""),[Z,R]=d.useState(!1),[Se,ae]=d.useState("locked"),[j,U]=d.useState("Remote input locked."),[te,ie]=d.useState(""),[ut,Qe]=d.useState(""),[Po,je]=d.useState(""),[fe,jt]=d.useState(""),[Fe,Le]=d.useState(""),[Je,Be]=d.useState(""),[yt,Ze]=d.useState(0),[et,Eo]=d.useState(ga),[Ge,jo]=d.useState("status"),[Jt,Lo]=d.useState(""),[Ne,Zt]=d.useState("connected"),[Re,eo]=d.useState("all"),[he,pt]=d.useState(()=>Ho(e.id)),tt=i.source==="bridge"?i.devices.length:i.devices.length||n,De=Jt.trim(),se=d.useMemo(()=>ml(i.devices,{groupMode:Ge,visibilityFilter:Ne,searchText:De,capabilityFilter:Re,pageIndex:yt,visibleBudget:we}),[Re,Ge,yt,De,i.devices,Ne]),kt=se.filterActive,Lt=se.filteredDevices,y=se.projectedDevices,C=se.projectedCount,A=se.pageCount,N=se.pageIndex,$=se.pageStart,D=se.visibleDevices,O=se.visibleDeviceIds,W=se.visibleConnectedDeviceIds,Y=se.frameSubscriptionDeviceIdSignature,We=se.visibleGroupCount,vt=se.placeholderSlots,mt=`${N+1}/${A}`,Pn=A<=1?100:Math.max(12,100/A),jr=A<=1?0:N/Math.max(1,A-1)*(100-Pn),Nt=zt[et]??zt[ga],En=Math.round(Cl*Nt),jn=Math.round(xl*Nt),oe=d.useMemo(()=>D.find(l=>at(l)===Ve)||D.find(l=>l.connected===!0)||D[0],[Ve,D]),K=oe?at(oe):"",Dt=i.devices.filter(l=>l.connected===!0).length,No=i.devices.reduce((l,p)=>{var u;return l+Number(((u=p.counters)==null?void 0:u.tasksQueued)||0)},0),to=se.taskDispatchDeviceIds,oo=se.aiTaskDeviceIds,Do=to.length,Ot=oo.length,Oo=i.source==="bridge"?(qn=i.hub)!=null&&qn.started?"Online":((Wn=i.hub)==null?void 0:Wn.enabled)===!1?"Off":"Ready":i.source==="blocked"?"Gated":i.source,no=i.source==="bridge"?"Local":i.source==="blocked"?"Gated":"Preview",_o=za((Kn=i.bridge)==null?void 0:Kn.status),Fo=$a((Hn=i.bridge)==null?void 0:Hn.status),Ln=i.source==="bridge"&&!!Fo,Nn=oe?de(oe,"control"):!1,Bo=oe?de(oe,"taskDispatch"):!1,ot=d.useMemo(()=>oe?i.source!=="bridge"?"LocalBridge is not connected.":Ln?oe.connected!==!0?"Selected device is offline.":Nn?"":"RemoteAgent control capability is disabled.":"Remote input adapter is unavailable.":"No screen selected.",[Ln,Nn,oe,i.source]),Me=ot==="",Go=Z?Ir(Se):Me?"Locked":"Off",re=i.source==="bridge"&&((Xn=i.hub)==null?void 0:Xn.hostTargetActive)===!0&&i.hub.hostTargetNodeId===e.id,ne=d.useMemo(()=>Rl(i.hub,re),[re,i.hub]),_t=Dl(i.agent,i.source),ao=wr(i.agent),Uo=Sr(i.agent),Ft=d.useMemo(()=>jl(i.hub,e.id),[e.id,i.hub]),ro=Ol({source:i.source,hasAuth:!!i.auth,isHostActiveForNode:re,request:Ft,busy:ut}),io=ro==="",so=i.source==="bridge"&&!!i.auth&&ao&&!ut,Dn=i.source==="bridge"&&!!K&&(oe==null?void 0:oe.connected)===!0&&Bo&&!!fe.trim()&&!Fe,On=i.source==="bridge"&&Do>0&&!!fe.trim()&&!Fe,_n=i.source==="bridge"&&Ot>0&&!!fe.trim()&&!Fe,Lr=Je||Po||te||(i.source==="bridge"&&oe?`${gt(oe)}: ${j}`:i.message),Fn=d.useMemo(()=>Pl(i.latestTaskBatch,i.recentTaskBatches),[i.latestTaskBatch,i.recentTaskBatches]),Te=El(Fn),ht=i.source==="bridge"&&!!(Fn&&Te);d.useEffect(()=>{J.current=e.metadata??{}},[e.metadata]);const Bn=d.useCallback((l,p)=>{const u=J.current??{},b=Object.entries(p).filter(([S,M])=>u[S]!==M).map(([S])=>S);if(b.length===0)return;const v={...u,...p};J.current=v,t(e.id,{metadata:v}),h.emit("remoteMonitor.node.metadata.patch",{nodeId:e.id,reason:l,keys:b})},[e.id,t]);d.useEffect(()=>{i.loading||Bn("snapshot",Sl({source:i.source,hub:i.hub,baseUrl:i.baseUrl,hubLabel:Oo,routeLabel:no,connected:Dt,total:tt,taskCount:No,taskDispatchCount:Do,aiCount:Ot,pageLabel:mt,pageStart:$,pageIndex:N,pageCount:A,projectionMode:Ko,projectedCount:C,visibleBudget:we,selectedDeviceId:K,inputLabel:Go,devices:i.devices,latestTaskBatch:i.latestTaskBatch,recentTaskBatches:i.recentTaskBatches,taskFollowActive:ht,taskFollowKey:Te,isHostActiveForNode:re,registryRouteInfo:ne,hostTargetRenewMs:re?uo:0,autoHostEnabled:he,agent:i.agent,agentStatusLabel:_t,agentRunning:ao,agentReady:Uo,message:i.message}))},[Ot,he,N,Dt,Uo,ao,_t,Oo,Go,re,A,mt,$,Bn,C,ne,no,K,i.agent,i.baseUrl,i.devices,i.hub,i.latestTaskBatch,i.loading,i.message,i.recentTaskBatches,i.source,ht,Te,No,Do,tt]),d.useEffect(()=>{yt!==N&&Ze(N)},[N,yt]),d.useEffect(()=>{const l=new Set(O);for(const p of f.current.keys())l.has(p)||f.current.delete(p)},[O]),d.useEffect(()=>{h.emit("remoteMonitor.node.frameSubscription",{nodeId:e.id,deviceCount:c?W.length:0,visibleDeviceCount:W.length,transportVisible:c,pageIndex:N,pageStart:$,visibleBudget:we,transportKey:Y})},[N,e.id,$,c,W.length,Y]),d.useEffect(()=>{if(i.source!=="bridge")return;const l=[ne.status,ne.reason,ne.accountRouteReady?"ready":"local",ne.migrationBlocked?"migration":"",re?"hosting":"inactive"].join("|");ve.current!==l&&(ve.current=l,h.emit("remoteMonitor.node.registryRoute",{nodeId:e.id,status:ne.status,reason:ne.reason,accountRouteReady:ne.accountRouteReady,migrationBlocked:ne.migrationBlocked,hostTargetActive:re}))},[re,e.id,ne,i.source]),d.useEffect(()=>{pt(Ho(e.id))},[e.id]);const Gn=d.useCallback((l,p)=>{l.stopPropagation(),Ze(u=>{const b=Math.max(0,Math.min(A-1,u+p));return b!==u&&h.emit("remoteMonitor.node.page",{nodeId:e.id,from:u,to:b,pageCount:A,visibleBudget:we}),b})},[e.id,A]),Un=d.useCallback((l,p)=>{l.preventDefault(),l.stopPropagation(),Eo(u=>{const b=Math.max(0,Math.min(zt.length-1,u+p));return b!==u&&h.emit("remoteMonitor.node.tileScale",{nodeId:e.id,from:u,to:b,scale:zt[b],visibleBudget:we}),b})},[e.id]),Nr=d.useCallback(l=>{l.stopPropagation();const p=_l(l.target.value);jo(u=>u===p?u:(h.emit("remoteMonitor.node.groupMode",{nodeId:e.id,from:u,to:p,projectedCount:y.length,visibleBudget:we}),p)),Ze(0)},[y.length,e.id]),Dr=d.useCallback(l=>{l.stopPropagation();const p=l.target.value.slice(0,64);Lo(u=>u===p?u:(h.emit("remoteMonitor.node.filter",{nodeId:e.id,reason:"search",searchText:p.trim(),visibilityFilter:Ne,capabilityFilter:Re,projectedCount:y.length,visibleBudget:we}),p)),Ze(0)},[Re,y.length,e.id,Ne]),Or=d.useCallback(l=>{l.stopPropagation();const p=Fl(l.target.value);Zt(u=>u===p?u:(h.emit("remoteMonitor.node.filter",{nodeId:e.id,reason:"visibility",searchText:De,from:u,to:p,visibilityFilter:p,capabilityFilter:Re,projectedCount:y.length,visibleBudget:we}),p)),Ze(0)},[Re,y.length,e.id,De]),_r=d.useCallback(l=>{l.stopPropagation();const p=Bl(l.target.value);eo(u=>u===p?u:(h.emit("remoteMonitor.node.filter",{nodeId:e.id,reason:"capability",searchText:De,visibilityFilter:Ne,from:u,to:p,capabilityFilter:p,projectedCount:y.length,visibleBudget:we}),p)),Ze(0)},[y.length,e.id,De,Ne]),Fr=d.useCallback((l,p)=>{l.stopPropagation();const u=at(p);if(!u||!o)return;const b=$t(p);o({sourceNodeId:e.id,deviceId:u,deviceName:gt(p),platform:Wt(p),connected:p.connected===!0,baseUrl:i.baseUrl,framePath:b==null?void 0:b.framePath,frameUrl:b==null?void 0:b.frameUrl,dataUrl:b==null?void 0:b.dataUrl,frameSeq:b==null?void 0:b.frameSeq}),h.emit("remoteMonitor.node.controlNode.create",{nodeId:e.id,deviceId:u,source:i.source})},[e.id,o,i.baseUrl,i.source]),le=d.useCallback(async(l="manual")=>{const p=++me.current,u=L();if(m(b=>({...b,loading:!0,baseUrl:u})),!At()){const b=po(n,r);m({source:"blocked",loading:!1,message:"Hosted LocalBridge access is gated.",baseUrl:u,devices:b}),h.emit("remoteMonitor.node.preview",{nodeId:e.id,reason:"hosted-localbridge-gated",total:b.length});return}try{const b=await vn(u);if(p!==me.current)return;if(b.state!=="connected"){const Ie=po(n,r);m({source:"unavailable",loading:!1,message:b.message||"LocalBridge is unavailable.",baseUrl:u,bridge:b,devices:Ie}),h.emit("remoteMonitor.node.preview",{nodeId:e.id,reason:"localbridge-unavailable",total:Ie.length});return}const v=Ka(b.status),S=zs(v,u).catch(Ie=>{h.emit("remoteMonitor.node.agent.status",{nodeId:e.id,reason:l,ok:!1,error:Ie instanceof Error?Ie.message:String(Ie)})}),[M,V,G]=await Promise.all([Ha(v,u),Xa(v,u,{includeDataUrl:!1}),S]);if(p!==me.current)return;const ge=Array.isArray(V.devices)?V.devices:[];m({source:"bridge",loading:!1,message:M.started?"RemoteHub online.":M.enabled===!1?M.lastError||"RemoteHub adapter is not configured.":"RemoteHub available.",baseUrl:u,bridge:b,auth:v,hub:M,agent:G,latestTaskBatch:V.latestTaskBatch,recentTaskBatches:Array.isArray(V.recentTaskBatches)?V.recentTaskBatches:[],devices:ge}),h.emit("remoteMonitor.node.refresh",{nodeId:e.id,reason:l,total:V.total??ge.length,connected:ge.filter(Ie=>Ie.connected===!0).length,agentStatus:I(G==null?void 0:G.status),agentRunning:(G==null?void 0:G.running)===!0}),G&&h.emit("remoteMonitor.node.agent.status",{nodeId:e.id,reason:l,ok:!0,status:I(G.status),running:G.running===!0,ready:G.ready===!0})}catch(b){if(p!==me.current)return;const v=po(n,r);m({source:"unavailable",loading:!1,message:b instanceof Error?b.message:String(b),baseUrl:u,devices:v}),h.emit("remoteMonitor.node.preview",{nodeId:e.id,reason:"remotehub-error",total:v.length})}},[r,n,e.id]);d.useEffect(()=>{le("mount")},[le]);const Bt=d.useCallback((l,p,u)=>{const b=Pr(B.current,l);if(!b)return!1;const{cached:v,scope:S}=b;return Io(p,v,k.current,T.current).then(M=>{M&&h.emit("remoteMonitor.node.frameCache",{nodeId:e.id,deviceId:l,frameSeq:dt(v.metadata),scope:S,reason:u})}),!0},[e.id]),Br=d.useCallback((l,p)=>{l&&(p?(f.current.set(l,p),Bt(l,p,"canvas-attach")):f.current.delete(l))},[Bt]);d.useEffect(()=>{for(const l of D){const p=at(l),u=f.current.get(p);if(!u)continue;const b=$t(l),v=xn(b);i.source==="bridge"&&v?dn(u,p,b,i.baseUrl,k.current,T.current,B.current).then(S=>{S.painted||S.busy||(S.staleDropped&&h.emit("remoteMonitor.node.frameStaleDropped",{nodeId:e.id,deviceId:p,frameSeq:S.frameSeq,previous:S.previous,source:"projection"}),!(i.source==="bridge"&&Bt(p,u,"projection-rerender"))&&Co(u,l,i.source))}):i.source==="bridge"&&Bt(p,u,"projection-rerender")||Co(u,l,i.source)}},[e.id,Bt,i.baseUrl,i.source,D]);const zo=d.useCallback(async(l,p)=>{const u=I(l.deviceId).trim();if(!u)return;const b=I(l.streamId).trim(),v=Number(l.frameSeq||0)||0,S=wn(T.current,B.current,u),M=x.current.get(u)||"",V=!!(b&&M&&b!==M);if(V&&(T.current.delete(u),h.emit("remoteMonitor.node.frameStreamReset",{nodeId:e.id,deviceId:u,fromStreamId:M,toStreamId:b,previous:S,frameSeq:v})),!V&&v>0&&v<=S){h.emit("remoteMonitor.node.frameStaleDropped",{nodeId:e.id,deviceId:u,frameSeq:v,previous:S,source:"ws"});return}const G=tr(l,p.byteLength);G.level!=="nominal"&&h.emit("remoteMonitor.node.framePressure",{nodeId:e.id,deviceId:u,frameSeq:v,streamId:b,...G});const ge=Mr(B.current,u,l,p),Ie=f.current.get(u);if(Ie){if(k.current.has(u)){h.emit("remoteMonitor.node.frameCache",{nodeId:e.id,deviceId:u,frameSeq:v,scope:"local",reason:"decode-pending"});return}k.current.add(u);try{await Sn(Ie,ge.metadata,ge.payload)&&(v>0&&T.current.set(u,v),b&&x.current.set(u,b),X.current+=1,X.current%12===1&&h.emit("remoteMonitor.node.framePainted",{nodeId:e.id,deviceId:u,frameSeq:v,streamId:l.streamId||"",painted:X.current,source:"ws"}))}catch{}finally{k.current.delete(u);const Ae=B.current.get(u),Ke=dt(Ae==null?void 0:Ae.metadata),ta=T.current.get(u)||0,oa=f.current.get(u);Ae&&oa&&(Ke<=0?ta<=0:Ke>ta)&&Io(oa,Ae,k.current,T.current).then(oi=>{oi&&(X.current+=1,h.emit("remoteMonitor.node.frameCache",{nodeId:e.id,deviceId:u,frameSeq:Ke,scope:"local",reason:"latest-pending"}),h.emit("remoteMonitor.node.framePainted",{nodeId:e.id,deviceId:u,frameSeq:Ke,streamId:Ae.metadata.streamId||"",painted:X.current,source:"ws-cache"}))})}}},[e.id]);d.useEffect(()=>{if(i.source!=="bridge"||!c||!_o)return;const l=ya(Y);if(l.length===0)return;let p=!1,u=null,b=0;const v=()=>{var S,M;if(!p){P.current=!1;try{u=new WebSocket(Tr(i.baseUrl,_o,(M=(S=i.bridge)==null?void 0:S.status)==null?void 0:M.bridgeToken,l)),u.binaryType="arraybuffer"}catch(V){h.emit("remoteMonitor.node.frameWs",{nodeId:e.id,ok:!1,error:V instanceof Error?V.message:String(V)});return}u.onopen=()=>{P.current=!0,ke.current=performance.now(),h.emit("remoteMonitor.node.frameWs",{nodeId:e.id,ok:!0,deviceCount:l.length,fps:pa}),u==null||u.send(JSON.stringify({type:"subscribe",deviceIds:l,autoStartLive:!0,fps:pa,maxWidth:640,maxHeight:360,quality:55,mode:"remote-fast"}))},u.onmessage=async V=>{if(!p){if(ke.current=performance.now(),V.data instanceof ArrayBuffer){const G=vo(V.data);G&&await zo(G.metadata,G.payload);return}if(V.data instanceof Blob){const G=vo(await V.data.arrayBuffer());G&&await zo(G.metadata,G.payload)}}},u.onerror=()=>{h.emit("remoteMonitor.node.frameWs",{nodeId:e.id,ok:!1,reason:"socket-error"})},u.onclose=()=>{P.current=!1,p||(b=window.setTimeout(v,1500))}}};return v(),()=>{p=!0,P.current=!1,window.clearTimeout(b),u==null||u.close()}},[e.id,zo,_o,i.baseUrl,(Qn=(Yn=i.bridge)==null?void 0:Yn.status)==null?void 0:Qn.bridgeToken,i.source,c,Y]),d.useEffect(()=>{if(i.source!=="bridge"||!c)return;const l=ya(Y);if(l.length===0)return;let p=!1,u=!1;const b=async()=>{var M;if(!(p||u)&&!(P.current&&performance.now()-ke.current<dr)){u=!0;try{const V=await Ya(l,i.auth,i.baseUrl);if(p||V.ok===!1)return;let G=0,ge=0;for(const Ie of V.frames||[]){const Ae=String(Ie.deviceId||"").trim();if(!Ae)continue;const Ke=await dn(f.current.get(Ae),Ae,Rr(Ie),i.baseUrl,k.current,T.current,B.current);Ke.painted&&(G+=1),Ke.staleDropped&&(ge+=1,h.emit("remoteMonitor.node.frameStaleDropped",{nodeId:e.id,deviceId:Ae,frameSeq:Ke.frameSeq,previous:Ke.previous,source:"snapshot"}))}h.emit("remoteMonitor.node.frameSnapshot",{nodeId:e.id,deviceCount:l.length,frameCount:((M=V.frames)==null?void 0:M.length)||0,painted:G,staleDropped:ge})}catch{}finally{u=!1}}},v=window.setTimeout(b,200),S=window.setInterval(b,vl);return()=>{p=!0,window.clearTimeout(v),window.clearInterval(S)}},[e.id,i.auth,i.baseUrl,i.source,c,Y]),d.useEffect(()=>{R(!1),ae("locked"),U("Remote input locked.")},[K,i.source]),d.useEffect(()=>{!Z||Me||(R(!1),ae("unavailable"),U(ot||"Remote input unavailable."),h.emit("remoteMonitor.node.input.lock",{nodeId:e.id,unlocked:!1,reason:"control-unavailable",deviceId:K}))},[Me,ot,Z,e.id,K]),d.useEffect(()=>{var u,b,v;if(!Z){(u=w.current)==null||u.close(),w.current=null,ae("locked");return}if(!Me||!K){ae("unavailable"),U(ot||"Remote input unavailable.");return}let l=!1,p=null;ae("connecting"),U("Connecting remote input adapter...");try{p=new WebSocket(kr(i.baseUrl,Fo,(v=(b=i.bridge)==null?void 0:b.status)==null?void 0:v.bridgeToken)),w.current=p}catch(S){const M=S instanceof Error?S.message:String(S);ae("error"),U(M),h.emit("remoteMonitor.node.input.ws",{nodeId:e.id,ok:!1,deviceId:K,error:M});return}return p.onopen=()=>{l||(ae("ready"),U("Remote input ready."),h.emit("remoteMonitor.node.input.ws",{nodeId:e.id,ok:!0,deviceId:K}))},p.onmessage=S=>{if(l)return;const M=rr(String(S.data||"{}"));if(M){if(M.type==="RemoteInputSocketReady"){ae("ready");return}h.emit("remoteMonitor.node.input.result",{nodeId:e.id,ok:M.ok,deviceId:M.deviceId||K,inputType:M.inputType,error:M.error}),!M.ok||M.error?U(M.error||"Remote input failed."):/^pointermove$/i.test(M.inputType)||U(`${M.inputType||"Input"} queued.`)}},p.onerror=()=>{l||(ae("error"),U("Remote input socket error."),h.emit("remoteMonitor.node.input.ws",{nodeId:e.id,ok:!1,deviceId:K,reason:"socket-error"}))},p.onclose=()=>{l||(w.current=null,ae("error"),U("Remote input socket closed."),h.emit("remoteMonitor.node.input.ws",{nodeId:e.id,ok:!1,deviceId:K,reason:"socket-closed"}))},()=>{l=!0,w.current===p&&(w.current=null),p==null||p.close()}},[Me,ot,Z,e.id,Fo,K,i.baseUrl,(Zn=(Jn=i.bridge)==null?void 0:Jn.status)==null?void 0:Zn.bridgeToken]),d.useEffect(()=>{if(!Z)return;const l=p=>{p.key==="Escape"&&(p.preventDefault(),R(!1),U("Remote input locked."),h.emit("remoteMonitor.node.input.lock",{nodeId:e.id,unlocked:!1,reason:"escape",deviceId:K}))};return window.addEventListener("keydown",l,!0),()=>window.removeEventListener("keydown",l,!0)},[Z,e.id,K]);const Gr=d.useCallback(l=>{l.stopPropagation(),Wa(!0),h.emit("remoteMonitor.node.hostedAccess.enabled",{nodeId:e.id}),le("hosted-access-enabled")},[e.id,le]),zn=d.useCallback(l=>{l.stopPropagation(),le("manual")},[le]),Ur=d.useCallback(async l=>{var p,u,b;if(l.stopPropagation(),!io){je(ro||"RemoteAgent connect unavailable.");return}Qe("connect"),je("Connecting RemoteAgent...");try{const v=await $s(Ft,i.auth,i.baseUrl);v.agent&&m(M=>M.source==="bridge"?{...M,agent:v.agent,message:M.message}:M);const S=v.ok===!0;je(S?v.alreadyRunning===!0?"RemoteAgent already running.":v.skipped===!0?v.reason||"RemoteAgent connect skipped.":"RemoteAgent connect requested.":v.error||"RemoteAgent connect failed."),h.emit("remoteMonitor.node.agent.connect",{nodeId:e.id,ok:S,alreadyRunning:v.alreadyRunning===!0,skipped:v.skipped===!0,reason:v.reason||"",status:I((p=v.agent)==null?void 0:p.status),managerCount:((u=Ft.managerCandidates)==null?void 0:u.length)??0,error:v.error||""}),S&&await le("agent-connect")}catch(v){const S=v instanceof Error?v.message:String(v);je(S),h.emit("remoteMonitor.node.agent.connect",{nodeId:e.id,ok:!1,managerCount:((b=Ft.managerCandidates)==null?void 0:b.length)??0,error:S})}finally{Qe("")}},[io,e.id,le,ro,Ft,i.auth,i.baseUrl]),zr=d.useCallback(async l=>{var p;if(l.stopPropagation(),!so){je("RemoteAgent is not running.");return}Qe("disconnect"),je("Stopping RemoteAgent...");try{const u=await Vs("react-remote-monitor-manual",i.auth,i.baseUrl);u.agent&&m(v=>v.source==="bridge"?{...v,agent:u.agent,message:v.message}:v);const b=u.ok===!0;je(b?"RemoteAgent stopped.":u.error||"RemoteAgent stop failed."),h.emit("remoteMonitor.node.agent.disconnect",{nodeId:e.id,ok:b,status:I((p=u.agent)==null?void 0:p.status),error:u.error||""}),b&&await le("agent-disconnect")}catch(u){const b=u instanceof Error?u.message:String(u);je(b),h.emit("remoteMonitor.node.agent.disconnect",{nodeId:e.id,ok:!1,error:b})}finally{Qe("")}},[so,e.id,le,i.auth,i.baseUrl]),$r=d.useCallback(async l=>{var u;l.stopPropagation();const p=xr(i.hub);try{const b=await Tn(p);ie("Connect command copied."),h.emit("remoteMonitor.node.connectCommand.copy",{nodeId:e.id,ok:!0,method:b,source:i.source,hasPairPreview:!!((u=i.hub)!=null&&u.pairTokenPreview)})}catch(b){ie(b instanceof Error?b.message:"Clipboard is unavailable."),h.emit("remoteMonitor.node.connectCommand.copy",{nodeId:e.id,ok:!1})}},[e.id,i.hub,i.source]),Tt=d.useCallback(async(l,p)=>{if(i.source!=="bridge"||ue.current)return!1;ue.current=!0,ie(l?"Requesting host target...":"Clearing host target...");try{const u=await sa(e.id,l,i.auth,i.baseUrl,{leaseMs:Ut});if(u.ok===!0){const b=l&&u.active===!0;ka(e.id,b),pt(b)}return ie(u.ok===!0?u.active?"This monitor node is the host target.":"Host target cleared.":u.error||"Host target update failed."),h.emit("remoteMonitor.node.hostTarget",{nodeId:e.id,reason:p,autoHost:he,ok:u.ok===!0,active:u.active===!0}),await le("host-target"),u.ok===!0&&(l?u.active===!0:u.active!==!0)}catch(u){return ie(u instanceof Error?u.message:String(u)),h.emit("remoteMonitor.node.hostTarget",{nodeId:e.id,reason:p,autoHost:he,ok:!1}),!1}finally{ue.current=!1}},[he,e.id,le,i.auth,i.baseUrl,i.source]),Vr=d.useCallback(l=>{l.stopPropagation(),Tt(!re,"manual")},[re,Tt]),qr=d.useCallback(l=>{l.stopPropagation();const p=!he;ka(e.id,p),pt(p),ie(p?"Auto Host enabled for this monitor.":"Auto Host disabled."),h.emit("remoteMonitor.node.autoHost",{nodeId:e.id,enabled:p,source:i.source}),!p&&re&&Tt(!1,"auto-host-disabled")},[he,re,e.id,Tt,i.source]);d.useEffect(()=>{if(i.source!=="bridge"||!he||re||Q.current)return;if(!Ho(e.id)){pt(!1);return}let l=!1;return Q.current=!0,ie("Restoring Auto Host..."),h.emit("remoteMonitor.node.autoHost.restore",{nodeId:e.id,requested:!0,source:i.source}),Tt(!0,"auto-host-restore").then(p=>{l||(h.emit("remoteMonitor.node.autoHost.restore",{nodeId:e.id,ok:p,source:i.source}),p||ie("Auto Host restore failed."))}).finally(()=>{Q.current=!1}),()=>{l=!0}},[he,re,e.id,Tt,i.source]),d.useEffect(()=>{if(i.source!=="bridge"||!re)return;let l=!1;const p=async()=>{if(!(l||g.current)){g.current=!0;try{const b=await sa(e.id,!0,i.auth,i.baseUrl,{leaseMs:Ut});h.emit("remoteMonitor.node.hostTarget.renew",{nodeId:e.id,ok:b.ok===!0,active:b.active===!0,leaseMs:Ut}),!l&&(b.ok!==!0||b.active!==!0)&&(ie(b.error||"Host target renewal lost ownership."),await le("host-target-renew"))}catch(b){h.emit("remoteMonitor.node.hostTarget.renew",{nodeId:e.id,ok:!1,active:!1,leaseMs:Ut,error:b instanceof Error?b.message:String(b)}),l||ie(b instanceof Error?b.message:String(b))}finally{g.current=!1}}},u=window.setInterval(()=>{p()},uo);return h.emit("remoteMonitor.node.hostTarget.renew.timer",{nodeId:e.id,active:!0,intervalMs:uo,leaseMs:Ut}),()=>{l=!0,window.clearInterval(u),h.emit("remoteMonitor.node.hostTarget.renew.timer",{nodeId:e.id,active:!1})}},[re,e.id,le,i.auth,i.baseUrl,i.source]),d.useEffect(()=>{if(i.source!=="bridge"||!ht||!Te){ht||(pe.current="",E.current=0);return}let l=!1,p=0;pe.current!==Te&&(pe.current=Te,E.current=0);const u=b=>{window.clearTimeout(p),p=window.setTimeout(async()=>{if(l||pe.current!==Te)return;const v=E.current;if(v>=St){h.emit("remoteMonitor.node.task.follow",{nodeId:e.id,active:!1,batchKey:Te,tick:v,maxTicks:St,reason:"max-ticks"});return}const S=v+1;E.current=S,h.emit("remoteMonitor.node.task.follow",{nodeId:e.id,active:!0,batchKey:Te,tick:S,maxTicks:St}),await le("task-follow"),!l&&pe.current===Te&&E.current<St&&u(bo)},Math.max(0,b))};return h.emit("remoteMonitor.node.task.follow",{nodeId:e.id,active:!0,batchKey:Te,intervalMs:bo,maxTicks:St,reason:"start"}),u(Il),()=>{l=!0,window.clearTimeout(p),h.emit("remoteMonitor.node.task.follow",{nodeId:e.id,active:!1,batchKey:Te,tick:E.current,reason:"cleanup"})}},[e.id,le,i.source,ht,Te]);const Wr=d.useCallback(l=>{if(l.stopPropagation(),Z){R(!1),U("Remote input locked."),h.emit("remoteMonitor.node.input.lock",{nodeId:e.id,unlocked:!1,reason:"manual",deviceId:K});return}if(!Me){ae("unavailable"),U(ot||"Remote input unavailable."),h.emit("remoteMonitor.node.input.lock",{nodeId:e.id,unlocked:!1,reason:"unavailable",deviceId:K});return}R(!0),U("Connecting remote input adapter..."),h.emit("remoteMonitor.node.input.lock",{nodeId:e.id,unlocked:!0,reason:"manual",deviceId:K})},[Me,ot,Z,e.id,K]),Ue=d.useCallback(l=>{var V;const p=w.current;if(!Z||!Me||!K||(p==null?void 0:p.readyState)!==WebSocket.OPEN){l.ack&&U(Z?"Remote input socket is not ready.":"Remote input locked.");return}const u=`remote-node-input-${Date.now()}-${++z.current}`,{ack:b,...v}=l,S=ar({requestId:u,deviceId:K,ack:b,controlLeaseId:(V=i.hub)==null?void 0:V.hostTargetLeaseId,input:v});if(!S){b&&U("Remote input payload is invalid.");return}const M=I(S.input.type);try{p.send(JSON.stringify(S));const G=++ee.current;(S.ack||G%24===1)&&h.emit("remoteMonitor.node.input.sent",{nodeId:e.id,deviceId:K,inputType:M,sampled:!S.ack,sent:G})}catch(G){const ge=G instanceof Error?G.message:String(G);ae("error"),U(ge),h.emit("remoteMonitor.node.input.ws",{nodeId:e.id,ok:!1,deviceId:K,error:ge})}},[Me,Z,e.id,K,(ea=i.hub)==null?void 0:ea.hostTargetLeaseId]);d.useEffect(()=>{if(typeof document>"u")return;const l=p=>{const u=p.detail;if(!u||typeof u!="object")return;const b=I(u.nodeId);if(b&&b!==e.id)return;const v=I(u.deviceId);if(v&&v!==K)return;const S=u.input;!S||typeof S!="object"||Array.isArray(S)||Ue({...S,ack:u.ack!==!1})};return document.addEventListener(ma,l),()=>document.removeEventListener(ma,l)},[e.id,K,Ue]);const It=d.useCallback((l,p,u,b=!1)=>{const v=To(l,b);return v?(Ue({type:p,...v,button:vr(l.button),ack:u}),!0):!1},[Ue]),Kr=d.useCallback((l,p,u)=>{if(l.stopPropagation(),qe(p),!(!u||!It(l,"pointerDown",!0,!1))){l.preventDefault(),l.currentTarget.focus();try{l.currentTarget.setPointerCapture(l.pointerId)}catch{}}},[It]),Hr=d.useCallback((l,p)=>{var S,M;if(!p)return;const u=performance.now();if(u-F.current<ur)return;F.current=u;const b=((M=(S=l.currentTarget).hasPointerCapture)==null?void 0:M.call(S,l.pointerId))===!0;It(l,"pointerMove",!1,b)&&(l.preventDefault(),l.stopPropagation())},[It]),Xr=d.useCallback((l,p)=>{if(p){l.preventDefault(),l.stopPropagation();try{l.currentTarget.releasePointerCapture(l.pointerId)}catch{}It(l,"pointerUp",!0,!0)}},[It]),Yr=d.useCallback((l,p)=>{if(!p)return;const u=To(l,!1);u&&(Ue({type:"wheel",...u,deltaX:l.deltaX,deltaY:l.deltaY,ack:!0}),l.preventDefault(),l.stopPropagation())},[Ue]),Qr=d.useCallback((l,p,u)=>{if(!u){(l.key==="Enter"||l.key===" ")&&(l.preventDefault(),l.stopPropagation(),qe(p));return}l.key!=="Escape"&&(l.preventDefault(),l.stopPropagation(),Ue({type:"keyDown",key:l.key,code:l.code,repeat:l.repeat,ack:!0}))},[Ue]),Jr=d.useCallback((l,p)=>{!p||l.key==="Escape"||(l.preventDefault(),l.stopPropagation(),Ue({type:"keyUp",key:l.key,code:l.code,repeat:!1,ack:!0}))},[Ue]),$o=d.useCallback(async(l,p="selected")=>{var M;if(l.preventDefault(),l.stopPropagation(),i.source!=="bridge"){Be("LocalBridge is not connected.");return}const u=fe.trim();if(!u){Be("Remote task is empty.");return}if(p==="selected"&&(!K||!Bo||(oe==null?void 0:oe.connected)!==!0)){Be("Selected device cannot accept remote tasks.");return}if(p==="all"&&to.length<=0){Be("No task-capable connected devices are available.");return}if(p==="ai"&&oo.length<=0){Be("No AI assist devices are connected.");return}const b=p==="ai"?"ai-assist":"task-only",v=((M=u.split(/\r?\n/)[0])==null?void 0:M.slice(0,96))||"Remote task",S=p==="ai"?oo:to;Le(p),Be(p==="selected"?"Queueing selected task...":"Queueing fleet task...");try{const V=p==="selected"?await Qa(K,{instruction:u,title:v,approvalLevel:b},i.auth,i.baseUrl):await qs({instruction:u,title:v,approvalLevel:b,deviceIds:S,allConnected:!1},i.auth,i.baseUrl),G=V.ok===!0,ge=p==="selected"?G?1:0:Number("queued"in V?V.queued:0);Be(G?`Queued ${ge||1} remote task${(ge||1)===1?"":"s"}.`:V.error||"Remote task queue failed."),h.emit("remoteMonitor.node.task.queue",{nodeId:e.id,mode:p,ok:G,queued:ge,approvalLevel:b,deviceId:p==="selected"?K:"",targetCount:p==="selected"?1:S.length,batchId:"batchId"in V?V.batchId:"",error:V.error||""}),G&&(jt(""),await le("task-queued"))}catch(V){const G=V instanceof Error?V.message:String(V);Be(G),h.emit("remoteMonitor.node.task.queue",{nodeId:e.id,mode:p,ok:!1,approvalLevel:b,deviceId:p==="selected"?K:"",targetCount:p==="selected"?1:S.length,error:G})}finally{Le("")}},[Ot,oo,e.id,le,Bo,oe==null?void 0:oe.connected,K,i.auth,i.baseUrl,i.source,to,fe]),Zr=a.jsxs("div",{className:"node-remote-monitor__head-actions",children:[a.jsx("i",{"aria-label":`Remote route ${no}`}),a.jsxs("span",{className:"node-remote-monitor__head-status","data-testid":"remote-monitor-node-agent-status","data-agent-status":_t,children:["AGENT ",a.jsx("strong",{children:_t})]}),a.jsxs("span",{className:`node-remote-monitor__head-status node-remote-monitor__route-status is-${ne.tone}`,"data-testid":"remote-monitor-node-registry-route","data-registry-route":ne.status,"data-account-route-ready":ne.accountRouteReady?"true":"false","data-registry-migration-blocked":ne.migrationBlocked?"true":"false",title:ne.title,children:["ROUTE ",a.jsx("strong",{children:ne.value})]}),i.source==="bridge"?a.jsxs(a.Fragment,{children:[a.jsxs("button",{type:"button","data-testid":"remote-monitor-node-host",onClick:Vr,children:[a.jsx(ho,{size:12}),re?"Clear Host":"Set Host"]}),a.jsxs("button",{type:"button",className:he?"is-active":"","data-testid":"remote-monitor-node-auto-host","data-auto-host-active":he?"true":"false",onClick:qr,title:he?"Disable Auto Host restore for this monitor":"Remember this monitor as the Auto Host target",children:[a.jsx(ho,{size:12}),"Auto"]}),a.jsxs("button",{type:"button","data-testid":"remote-monitor-node-agent-connect",onClick:Ur,disabled:!io,title:io?"Connect managed RemoteAgent":ro,children:[a.jsx(pi,{size:12,className:ut==="connect"?"spin-icon":""}),"Start"]}),a.jsxs("button",{type:"button","data-testid":"remote-monitor-node-agent-disconnect",onClick:zr,disabled:!so,title:so?"Stop managed RemoteAgent":"RemoteAgent is not running",children:[a.jsx(mi,{size:12,className:ut==="disconnect"?"spin-icon":""}),"Stop"]})]}):i.source==="blocked"?a.jsxs("button",{type:"button",onClick:Gr,children:[a.jsx(ho,{size:12}),"Enable"]}):a.jsxs("button",{type:"button",onClick:zn,children:[a.jsx(fo,{size:12,className:i.loading?"spin-icon":""}),"Refresh"]})]}),ei=a.jsxs("form",{className:"node-remote-monitor__taskbar","data-testid":"remote-monitor-node-taskbar",onSubmit:l=>$o(l,"selected"),children:[a.jsx("input",{"aria-label":"Remote task",value:fe,maxLength:1200,onChange:l=>jt(l.target.value),onPointerDown:l=>l.stopPropagation(),placeholder:oe?`Task for ${gt(oe)}`:"Remote task"}),a.jsxs("button",{type:"submit",disabled:!Dn,title:Dn?"Queue task for selected device":"Selected device cannot accept remote tasks",children:[a.jsx(Yo,{size:12,className:Fe==="selected"?"spin-icon":""}),"Selected"]}),a.jsxs("button",{type:"button",disabled:!On,title:On?"Queue task for connected devices":"No connected devices can accept tasks",onClick:l=>$o(l,"all"),children:[a.jsx(Yo,{size:12,className:Fe==="all"?"spin-icon":""}),"All"]}),a.jsxs("button",{type:"button",disabled:!_n,title:_n?"Queue AI assist task for connected AI devices":"No AI assist device is connected",onClick:l=>$o(l,"ai"),children:[a.jsx(hi,{size:12,className:Fe==="ai"?"spin-icon":""}),"AI"]})]}),ti=a.jsxs("div",{className:"node-remote-monitor__footer",children:[a.jsxs("div",{className:"node-remote-monitor__footer-scale","data-testid":"remote-monitor-node-tile-scale","data-tile-scale-index":et,"data-tile-scale":Nt,children:[a.jsx("button",{type:"button","aria-label":"Shrink remote monitor tiles","data-testid":"remote-monitor-node-tile-shrink",disabled:et<=0,onClick:l=>Un(l,-1),children:a.jsx(gi,{size:12})}),a.jsx("button",{type:"button","aria-label":"Grow remote monitor tiles","data-testid":"remote-monitor-node-tile-grow",disabled:et>=zt.length-1,onClick:l=>Un(l,1),children:a.jsx(xa,{size:12})})]}),a.jsxs("label",{className:"node-remote-monitor__footer-group","data-testid":"remote-monitor-node-group","data-group-mode":Ge,children:[a.jsx("span",{children:"GROUP"}),a.jsx("select",{"aria-label":"Remote monitor grouping","data-testid":"remote-monitor-node-group-mode",value:Ge,onPointerDown:l=>l.stopPropagation(),onChange:Nr,children:hr.map(l=>a.jsx("option",{value:l,children:Gl(l)},l))})]}),a.jsxs("label",{className:"node-remote-monitor__footer-filter","data-testid":"remote-monitor-node-filter","data-filter-active":kt?"true":"false",children:[a.jsx("span",{children:"FILTER"}),a.jsx("input",{"aria-label":"Remote monitor search","data-testid":"remote-monitor-node-filter-text",value:Jt,maxLength:64,onPointerDown:l=>l.stopPropagation(),onChange:Dr,placeholder:"Any"}),a.jsx("select",{"aria-label":"Remote monitor visibility filter","data-testid":"remote-monitor-node-visibility-filter",value:Ne,onPointerDown:l=>l.stopPropagation(),onChange:Or,children:gr.map(l=>a.jsx("option",{value:l,children:Ul(l)},l))}),a.jsx("select",{"aria-label":"Remote monitor capability filter","data-testid":"remote-monitor-node-capability-filter",value:Re,onPointerDown:l=>l.stopPropagation(),onChange:_r,children:br.map(l=>a.jsx("option",{value:l,children:zl(l)},l))})]}),a.jsxs("div",{className:"node-remote-monitor__footer-status",children:[a.jsxs("span",{children:[a.jsx("i",{})," HUB ",a.jsx("strong",{children:Oo})]}),a.jsxs("span",{children:["CONNECTED ",a.jsxs("strong",{children:[Dt,"/",tt]})]}),a.jsxs("span",{children:["TASK ",a.jsx("strong",{children:No})]}),a.jsxs("span",{children:["AI ",a.jsx("strong",{children:Ot})]}),a.jsxs("span",{children:["INPUT ",a.jsx("strong",{children:Go})]}),a.jsxs("span",{children:["PAGE ",a.jsx("strong",{children:mt})]}),a.jsxs("span",{children:[a.jsx("i",{})," ROUTE ",a.jsx("strong",{children:no})]}),a.jsxs("button",{type:"button","data-testid":"remote-monitor-node-copy-connect",onClick:$r,children:[a.jsx(wa,{size:12}),"Connect"]}),a.jsxs("button",{type:"button","data-testid":"remote-monitor-node-refresh",onClick:zn,children:[a.jsx(fo,{size:12,className:i.loading?"spin-icon":""}),"Refresh"]}),i.source==="bridge"&&a.jsxs("button",{type:"button","data-testid":"remote-monitor-node-input",onClick:Wr,disabled:!Me&&!Z,title:Z||Me?j:ot,children:[Z?a.jsx(Sa,{size:12}):a.jsx(Ra,{size:12}),Z?"Lock":"Unlock"]})]})]});return a.jsxs("div",{ref:s,className:"node-remote-monitor","data-testid":"remote-monitor-node","data-remote-source":i.source,"data-remote-canonical-total":tt,"data-remote-connected":Dt,"data-remote-projection":Ko,"data-remote-projected-count":C,"data-remote-visible-budget":we,"data-remote-page-index":N,"data-remote-page-count":A,"data-remote-page-start":$,"data-remote-host-active":re?"true":"false","data-remote-registry-route":ne.status,"data-remote-registry-ready":ne.accountRouteReady?"true":"false","data-remote-registry-migration-blocked":ne.migrationBlocked?"true":"false","data-remote-registry-reason":ne.reason,"data-remote-host-renew-ms":re?uo:0,"data-remote-auto-host":he?"true":"false","data-remote-agent-status":_t,"data-remote-agent-running":ao?"true":"false","data-remote-agent-ready":Uo?"true":"false","data-remote-task-follow-active":ht?"true":"false","data-remote-task-follow-key":Te,"data-remote-task-follow-refresh-ms":ht?bo:0,"data-remote-transport-visible":c?"true":"false","data-remote-frame-subscription-active":c&&W.length>0?"true":"false","data-remote-tile-scale-index":et,"data-remote-tile-scale":Nt,"data-remote-tile-min-width":En,"data-remote-tile-min-height":jn,"data-remote-group-mode":Ge,"data-remote-visible-group-count":We,"data-remote-filter-text":De,"data-remote-filter-active":kt?"true":"false","data-remote-visibility-filter":Ne,"data-remote-capability-filter":Re,"data-remote-filtered-count":Lt.length,onPointerDown:l=>l.stopPropagation(),children:[a.jsxs("div",{className:"node-remote-monitor__surface",children:[a.jsx("div",{className:"node-remote-monitor__head",children:a.jsxs("div",{className:"node-remote-monitor__titlemark",children:[a.jsx("span",{children:a.jsx(bi,{size:15})}),a.jsxs("div",{children:[a.jsx("small",{children:"REMOTE"}),a.jsx("strong",{children:"Multi Desktop Monitor"})]})]})}),a.jsxs("div",{className:"node-remote-monitor__wall-shell",children:[a.jsxs("div",{className:"node-remote-monitor__wall","data-testid":"remote-monitor-node-wall","data-page-index":N,"data-page-count":A,"data-page-start":$,"data-visible-devices":D.length,"data-visible-device-ids":O.join(","),"data-visible-connected-devices":W.length,"data-frame-subscription-device-ids":Y,"data-frame-subscription-active":c&&W.length>0?"true":"false","data-transport-visible":c?"true":"false","data-canonical-device-count":tt,"data-connected-device-count":Dt,"data-wall-projection":Ko,"data-projected-device-count":C,"data-visible-budget":we,"data-tile-scale-index":et,"data-tile-scale":Nt,"data-group-mode":Ge,"data-visible-group-count":We,"data-filter-text":De,"data-filter-active":kt?"true":"false","data-visibility-filter":Ne,"data-capability-filter":Re,"data-filtered-device-count":Lt.length,style:{"--remote-node-tile-min-width":`${En}px`,"--remote-node-tile-min-height":`${jn}px`},children:[D.map(l=>{const p=at(l),u=gt(l),b=$t(l),v=p===K,S=Z&&Me&&v;return a.jsxs("span",{className:`${l.connected===!0?"is-online":""} ${v?"is-selected":""} ${S?"is-input-active":""}`,"aria-label":`${u} remote desktop`,title:`${u} / ${Wt(l)}`,role:"button",tabIndex:S||v?0:-1,"data-device-id":p,"data-connected":l.connected===!0?"true":"false","data-frame-seq":(b==null?void 0:b.frameSeq)??0,"data-can-control":de(l,"control")?"true":"false","data-can-dispatch-task":de(l,"taskDispatch")?"true":"false","data-ai-assist":de(l,"aiAssist")?"true":"false","data-input-active":S?"true":"false","data-group-mode":Ge,"data-group-key":$l(l,Ge),onClick:M=>{M.stopPropagation(),qe(p)},onDoubleClick:M=>Fr(M,l),onPointerDown:M=>Kr(M,p,S),onPointerMove:M=>Hr(M,S),onPointerUp:M=>Xr(M,S),onWheel:M=>Yr(M,S),onKeyDown:M=>Qr(M,p,S),onKeyUp:M=>Jr(M,S),children:[a.jsx("canvas",{ref:M=>Br(p,M)}),S&&a.jsxs("em",{children:[a.jsx(Ma,{size:10}),"input"]}),a.jsx("small",{children:u})]},p)}),Array.from({length:vt},(l,p)=>a.jsx("span",{"aria-label":`Remote desktop slot ${$+D.length+p+1}`,"data-placeholder-slot":"true"},`empty-${N}-${p}`))]}),a.jsxs("div",{className:"node-remote-monitor__pager","aria-label":"Monitor page controls",children:[a.jsx("button",{type:"button","aria-label":"Previous monitor page",disabled:N<=0,onClick:l=>Gn(l,-1),children:a.jsx(fi,{size:12})}),a.jsx("span",{className:"node-remote-monitor__pager-track",style:{"--remote-node-page-top":`${jr}%`,"--remote-node-page-height":`${Pn}%`},children:a.jsx("strong",{})}),a.jsx("button",{type:"button","aria-label":"Next monitor page",disabled:N>=A-1,onClick:l=>Gn(l,1),children:a.jsx(yi,{size:12})})]})]})]}),a.jsxs("div",{className:"node-remote-monitor__external-rail","data-testid":"remote-monitor-node-external-rail",onPointerDown:l=>l.stopPropagation(),onClick:l=>l.stopPropagation(),children:[Zr,ei,ti,a.jsx("p",{className:"node-remote-monitor__message",children:Lr})]})]})}function Ud({node:e,onPatch:t}){var Zt,Re,eo,he,pt,tt,De,se,kt,Lt;const o=yr(e),n=d.useRef(null),r=fr(n,e.id,"control"),[s,c]=d.useState(()=>{var y;return{source:At()?"loading":"blocked",loading:!1,message:At()?"Remote device not checked yet.":"Hosted LocalBridge access is gated.",baseUrl:((y=e.metadata)==null?void 0:y.RemoteBaseUrl)||L(),device:wt(e)}}),i=d.useRef(null),m=d.useRef(new Set),f=d.useRef(new Map),k=d.useRef(new Map),T=d.useRef(null),x=d.useRef(0),B=d.useRef(0),w=d.useRef(!1),z=d.useRef(0),ee=d.useRef(0),X=d.useRef(0),P=d.useRef(0),ke=d.useRef(e.metadata??{}),[F,ue]=d.useState(!1),[g,Q]=d.useState("locked"),[pe,E]=d.useState("Remote input locked."),[ve,me]=d.useState(""),[J,Ve]=d.useState(!1),[qe,Z]=d.useState(""),R=s.device,Se=R?gt(R):e.title||"Remote device",ae=R?Wt(R):((Zt=e.metadata)==null?void 0:Zt.RemoteFleetDevicePlatform)||"unknown",j=za((Re=s.bridge)==null?void 0:Re.status),U=$a((eo=s.bridge)==null?void 0:eo.status),te=s.source==="bridge"&&!!o&&(R==null?void 0:R.connected)===!0&&!!U&&de(R,"control"),ie=R?de(R,"taskDispatch"):!1,ut=s.source==="bridge"&&!!o&&(R==null?void 0:R.connected)===!0&&ie&&!!ve.trim()&&!J,Qe=F?Ir(g):te?"Locked":"Off",Po=qe||pe||s.message;d.useEffect(()=>{ke.current=e.metadata??{}},[e.metadata]);const je=d.useCallback((y,C)=>{const A=ke.current??{},N=Object.entries(C).filter(([D,O])=>A[D]!==O).map(([D])=>D);if(N.length===0)return;const $={...A,...C};ke.current=$,t(e.id,{metadata:$}),h.emit("remoteControl.node.metadata.patch",{nodeId:e.id,reason:y,keys:N})},[e.id,t]),fe=d.useCallback(async(y="manual")=>{const C=++P.current,A=L();if(c(N=>({...N,loading:!0,baseUrl:A})),!o){c({source:"unavailable",loading:!1,message:"Remote control node has no device id.",baseUrl:A,device:wt(e)});return}if(!At()){c({source:"blocked",loading:!1,message:"Hosted LocalBridge access is gated.",baseUrl:A,device:wt(e)}),h.emit("remoteControl.node.preview",{nodeId:e.id,reason:"hosted-localbridge-gated",deviceId:o});return}try{const N=await vn(A);if(C!==P.current)return;if(N.state!=="connected"){c({source:"unavailable",loading:!1,message:N.message||"LocalBridge is unavailable.",baseUrl:A,bridge:N,device:wt(e)});return}const $=Ka(N.status),[D,O]=await Promise.all([Ha($,A),Xa($,A,{includeDataUrl:!1})]);if(C!==P.current)return;const W=(Array.isArray(O.devices)?O.devices:[]).find(We=>at(We)===o),Y=W||wt(e);c({source:W?"bridge":"unavailable",loading:!1,message:W?`${gt(Y)} ${Y.connected===!0?"online.":"offline."}`:"Selected remote device is not in the current RemoteHub inventory.",baseUrl:A,bridge:N,auth:$,hub:D,device:Y}),h.emit("remoteControl.node.refresh",{nodeId:e.id,reason:y,deviceId:o,found:!!W,connected:Y.connected===!0})}catch(N){if(C!==P.current)return;c({source:"unavailable",loading:!1,message:N instanceof Error?N.message:String(N),baseUrl:A,device:wt(e)})}},[o,e]);d.useEffect(()=>{fe("mount")},[fe]),d.useEffect(()=>{var y,C,A;je("snapshot",{SemanticType:"RemoteFleetDevice",RemoteFleetSchemaVersion:"remote-fleet-device@1",RemoteFleetDeviceId:o,RemoteFleetDeviceName:Se,RemoteFleetDevicePlatform:ae,RemoteFleetDeviceConnected:String((R==null?void 0:R.connected)===!0),RemoteFleetDeviceCanControl:String(te),RemoteFleetDeviceCanDispatchTask:String(ie),RemoteFleetDeviceTasksQueued:String(((y=R==null?void 0:R.counters)==null?void 0:y.tasksQueued)||0),RemoteFleetSourceMonitorNodeId:((C=e.metadata)==null?void 0:C.RemoteFleetSourceMonitorNodeId)||"",RemoteInput:Qe,RemoteTask:ie?"available":"unavailable",RemoteHub:s.source==="bridge"?((A=s.hub)==null?void 0:A.started)===!0?"Online":"Ready":s.source==="blocked"?"Gated":s.source,RemoteRoute:s.source==="bridge"?"Local":s.source==="blocked"?"Gated":"Preview",RemoteBaseUrl:s.baseUrl,AdapterState:s.source==="bridge"?"localbridge-connected":s.source==="blocked"?"adapter-gated":s.source})},[te,ie,R==null?void 0:R.connected,(he=R==null?void 0:R.counters)==null?void 0:he.tasksQueued,o,Se,Qe,e.metadata,je,ae,s.baseUrl,(pt=s.hub)==null?void 0:pt.started,s.source]);const jt=d.useCallback((y,C)=>{if(!o)return!1;const A=Pr(k.current,o);if(!A)return!1;const{cached:N,scope:$}=A;return Io(y,N,m.current,f.current).then(D=>{D&&h.emit("remoteControl.node.frameCache",{nodeId:e.id,deviceId:o,frameSeq:dt(N.metadata),scope:$,reason:C})}),!0},[o,e.id]);d.useEffect(()=>{const y=i.current;if(!y||!R)return;const C=$t(R),A=xn(C);s.source==="bridge"&&A?Er(y,A,s.baseUrl).catch(()=>Co(y,R,s.source)):s.source==="bridge"&&jt(y,"projection-rerender")||Co(y,R,s.source)},[R,jt,s.baseUrl,s.source]);const Fe=d.useCallback(async(y,C)=>{if(!o||I(y.deviceId).trim()!==o)return;const A=Number(y.frameSeq||0)||0,N=wn(f.current,k.current,o);if(A>0&&A<=N){h.emit("remoteControl.node.frameStaleDropped",{nodeId:e.id,deviceId:o,frameSeq:A,previous:N,source:"ws"});return}const $=tr(y,C.byteLength);$.level!=="nominal"&&h.emit("remoteControl.node.framePressure",{nodeId:e.id,deviceId:o,frameSeq:A,...$});const D=Mr(k.current,o,y,C),O=i.current;if(O){if(m.current.has(o)){h.emit("remoteControl.node.frameCache",{nodeId:e.id,deviceId:o,frameSeq:A,scope:"local",reason:"decode-pending"});return}m.current.add(o);try{await Sn(O,D.metadata,D.payload)&&(A>0&&f.current.set(o,A),ee.current+=1,h.emit("remoteControl.node.framePainted",{nodeId:e.id,deviceId:o,frameSeq:A,painted:ee.current,source:"ws"}))}catch{}finally{m.current.delete(o);const W=k.current.get(o),Y=dt(W==null?void 0:W.metadata),We=f.current.get(o)||0,vt=i.current;W&&vt&&(Y<=0?We<=0:Y>We)&&Io(vt,W,m.current,f.current).then(mt=>{mt&&(ee.current+=1,h.emit("remoteControl.node.frameCache",{nodeId:e.id,deviceId:o,frameSeq:Y,scope:"local",reason:"latest-pending"}),h.emit("remoteControl.node.framePainted",{nodeId:e.id,deviceId:o,frameSeq:Y,painted:ee.current,source:"ws-cache"}))})}}},[o,e.id]);d.useEffect(()=>{if(s.source!=="bridge"||!o||(R==null?void 0:R.connected)!==!0||!r)return;let y=!1,C=null,A=0;w.current=!1;const N=()=>{var $,D;if(!y){try{C=new WebSocket(Tr(s.baseUrl,j,(D=($=s.bridge)==null?void 0:$.status)==null?void 0:D.bridgeToken,[o])),C.binaryType="arraybuffer"}catch(O){h.emit("remoteControl.node.frameWs",{nodeId:e.id,ok:!1,error:O instanceof Error?O.message:String(O)});return}C.onopen=()=>{w.current=!0,z.current=performance.now(),h.emit("remoteControl.node.frameWs",{nodeId:e.id,ok:!0,deviceId:o,fps:20}),C==null||C.send(JSON.stringify({type:"subscribe",deviceIds:[o],autoStartLive:!0,fps:20,maxWidth:960,maxHeight:540,quality:62,mode:"remote-fast-control"}))},C.onmessage=async O=>{if(!y){if(z.current=performance.now(),O.data instanceof ArrayBuffer){const W=vo(O.data);W&&await Fe(W.metadata,W.payload)}else if(O.data instanceof Blob){const W=vo(await O.data.arrayBuffer());W&&await Fe(W.metadata,W.payload)}}},C.onerror=()=>{w.current=!1,h.emit("remoteControl.node.frameWs",{nodeId:e.id,ok:!1,deviceId:o,reason:"socket-error"})},C.onclose=()=>{w.current=!1,y||(A=window.setTimeout(N,1500))}}};return N(),()=>{y=!0,w.current=!1,window.clearTimeout(A),C==null||C.close()}},[R==null?void 0:R.connected,o,e.id,Fe,j,s.baseUrl,(De=(tt=s.bridge)==null?void 0:tt.status)==null?void 0:De.bridgeToken,s.source,r]),d.useEffect(()=>{if(s.source!=="bridge"||!o||(R==null?void 0:R.connected)!==!0||!r)return;let y=!1,C=!1;const A=async()=>{var D;if(!(y||C)&&!(w.current&&performance.now()-z.current<dr)){C=!0;try{const O=await Ya([o],s.auth,s.baseUrl);if(y||O.ok===!1)return;const W=(D=O.frames)==null?void 0:D.find(mt=>mt.deviceId===o),Y=await dn(i.current??void 0,o,W?Rr(W):void 0,s.baseUrl,m.current,f.current,k.current),We=Y.painted?1:0,vt=Y.staleDropped?1:0;Y.staleDropped&&h.emit("remoteControl.node.frameStaleDropped",{nodeId:e.id,deviceId:o,frameSeq:Y.frameSeq,previous:Y.previous,source:"snapshot"}),h.emit("remoteControl.node.frameSnapshot",{nodeId:e.id,deviceId:o,frameCount:W?1:0,painted:We,staleDropped:vt})}catch{}finally{C=!1}}},N=window.setTimeout(A,250),$=window.setInterval(A,2500);return()=>{y=!0,window.clearTimeout(N),window.clearInterval($)}},[R==null?void 0:R.connected,o,e.id,s.auth,s.baseUrl,s.source,r]),d.useEffect(()=>{!F||te||(ue(!1),Q("unavailable"),E("Remote input unavailable."),h.emit("remoteControl.node.input.lock",{nodeId:e.id,unlocked:!1,reason:"control-unavailable",deviceId:o}))},[te,o,F,e.id]),d.useEffect(()=>{var A,N,$;if(!F){(A=T.current)==null||A.close(),T.current=null,Q("locked");return}if(!te||!o){Q("unavailable"),E("Remote input unavailable.");return}let y=!1,C=null;Q("connecting"),E("Connecting remote input adapter...");try{C=new WebSocket(kr(s.baseUrl,U,($=(N=s.bridge)==null?void 0:N.status)==null?void 0:$.bridgeToken)),T.current=C}catch(D){Q("error");const O=D instanceof Error?D.message:String(D);E(O),h.emit("remoteControl.node.input.ws",{nodeId:e.id,ok:!1,deviceId:o,error:O});return}return C.onopen=()=>{y||(Q("ready"),E("Remote input ready."),h.emit("remoteControl.node.input.ws",{nodeId:e.id,ok:!0,deviceId:o}))},C.onmessage=D=>{if(y)return;const O=rr(String(D.data||"{}"));if(O){if(O.type==="RemoteInputSocketReady"){Q("ready");return}h.emit("remoteControl.node.input.result",{nodeId:e.id,ok:O.ok,deviceId:O.deviceId||o,inputType:O.inputType,error:O.error}),!O.ok||O.error?E(O.error||"Remote input failed."):/^pointermove$/i.test(O.inputType)||E(`${O.inputType||"Input"} queued.`)}},C.onerror=()=>{y||(Q("error"),E("Remote input socket error."),h.emit("remoteControl.node.input.ws",{nodeId:e.id,ok:!1,deviceId:o,reason:"socket-error"}))},C.onclose=()=>{y||(T.current=null,Q("error"),E("Remote input socket closed."),h.emit("remoteControl.node.input.ws",{nodeId:e.id,ok:!1,deviceId:o,reason:"socket-closed"}))},()=>{y=!0,T.current===C&&(T.current=null),C==null||C.close()}},[te,o,F,e.id,U,s.baseUrl,(kt=(se=s.bridge)==null?void 0:se.status)==null?void 0:kt.bridgeToken]),d.useEffect(()=>{if(!F)return;const y=C=>{C.key==="Escape"&&(C.preventDefault(),ue(!1),E("Remote input locked."),h.emit("remoteControl.node.input.lock",{nodeId:e.id,unlocked:!1,reason:"escape",deviceId:o}))};return window.addEventListener("keydown",y,!0),()=>window.removeEventListener("keydown",y,!0)},[o,F,e.id]);const Le=d.useCallback(y=>{var W;const C=T.current;if(!F||!te||!o||(C==null?void 0:C.readyState)!==WebSocket.OPEN){y.ack&&E(F?"Remote input socket is not ready.":"Remote input locked.");return}const A=`remote-control-input-${Date.now()}-${++x.current}`,{ack:N,...$}=y,D=ar({requestId:A,deviceId:o,ack:N,controlLeaseId:(W=s.hub)==null?void 0:W.hostTargetLeaseId,input:$});if(!D){N&&E("Remote input payload is invalid.");return}const O=I(D.input.type);try{C.send(JSON.stringify(D));const Y=++B.current;(D.ack||Y%24===1)&&h.emit("remoteControl.node.input.sent",{nodeId:e.id,deviceId:o,inputType:O,sampled:!D.ack,sent:Y})}catch(Y){Q("error"),E(Y instanceof Error?Y.message:String(Y))}},[te,o,F,e.id,(Lt=s.hub)==null?void 0:Lt.hostTargetLeaseId]),Je=d.useCallback((y,C,A,N=!1)=>{const $=To(y,N);return $?(Le({type:C,...$,button:vr(y.button),ack:A}),!0):!1},[Le]),Be=d.useCallback(y=>{if(!(!F||!Je(y,"pointerDown",!0,!1))){y.preventDefault(),y.stopPropagation(),y.currentTarget.focus();try{y.currentTarget.setPointerCapture(y.pointerId)}catch{}}},[Je,F]),yt=d.useCallback(y=>{var $,D;if(!F)return;const C=performance.now();if(C-X.current<ur)return;X.current=C;const A=((D=($=y.currentTarget).hasPointerCapture)==null?void 0:D.call($,y.pointerId))===!0;Je(y,"pointerMove",!1,A)&&(y.preventDefault(),y.stopPropagation())},[Je,F]),Ze=d.useCallback(y=>{if(F){y.preventDefault(),y.stopPropagation();try{y.currentTarget.releasePointerCapture(y.pointerId)}catch{}Je(y,"pointerUp",!0,!0)}},[Je,F]),et=d.useCallback(y=>{if(!F)return;const C=To(y,!1);C&&(Le({type:"wheel",...C,deltaX:y.deltaX,deltaY:y.deltaY,ack:!0}),y.preventDefault(),y.stopPropagation())},[F,Le]),Eo=d.useCallback(y=>{!F||y.key==="Escape"||(y.preventDefault(),y.stopPropagation(),Le({type:"keyDown",key:y.key,code:y.code,repeat:y.repeat,ack:!0}))},[F,Le]),Ge=d.useCallback(y=>{!F||y.key==="Escape"||(y.preventDefault(),y.stopPropagation(),Le({type:"keyUp",key:y.key,code:y.code,repeat:!1,ack:!0}))},[F,Le]),jo=d.useCallback(y=>{y.stopPropagation(),Wa(!0),fe("hosted-access-enabled")},[fe]),Jt=d.useCallback(y=>{if(y.stopPropagation(),F){ue(!1),E("Remote input locked."),h.emit("remoteControl.node.input.lock",{nodeId:e.id,unlocked:!1,reason:"manual",deviceId:o});return}if(!te){Q("unavailable"),E("Remote input unavailable."),h.emit("remoteControl.node.input.lock",{nodeId:e.id,unlocked:!1,reason:"unavailable",deviceId:o});return}ue(!0),E("Connecting remote input adapter..."),h.emit("remoteControl.node.input.lock",{nodeId:e.id,unlocked:!0,reason:"manual",deviceId:o})},[te,o,F,e.id]),Lo=d.useCallback(y=>{y.stopPropagation(),fe("manual")},[fe]),Ne=d.useCallback(async y=>{var $;if(y.preventDefault(),y.stopPropagation(),s.source!=="bridge"){Z("LocalBridge is not connected.");return}const C=ve.trim();if(!C){Z("Remote task is empty.");return}if(!o||(R==null?void 0:R.connected)!==!0||!ie){Z("This device cannot accept remote tasks.");return}const A="task-only",N=(($=C.split(/\r?\n/)[0])==null?void 0:$.slice(0,96))||"Remote task";Ve(!0),Z("Queueing device task...");try{const D=await Qa(o,{instruction:C,title:N,approvalLevel:A},s.auth,s.baseUrl),O=D.ok===!0;Z(O?"Queued remote task.":D.error||"Remote task queue failed."),h.emit("remoteControl.node.task.queue",{nodeId:e.id,ok:O,deviceId:o,approvalLevel:A,queued:O?1:0,taskId:D.taskId||"",commandId:D.commandId||"",error:D.error||""}),O&&(me(""),await fe("task-queued"))}catch(D){const O=D instanceof Error?D.message:String(D);Z(O),h.emit("remoteControl.node.task.queue",{nodeId:e.id,ok:!1,deviceId:o,approvalLevel:A,queued:0,error:O})}finally{Ve(!1)}},[ie,R==null?void 0:R.connected,o,e.id,fe,s.auth,s.baseUrl,s.source,ve]);return a.jsxs("div",{ref:n,className:"node-remote-control","data-testid":"remote-control-node","data-remote-source":s.source,"data-remote-transport-visible":r?"true":"false","data-remote-frame-subscription-active":r&&s.source==="bridge"&&(R==null?void 0:R.connected)===!0?"true":"false",onPointerDown:y=>y.stopPropagation(),children:[a.jsxs("div",{className:"node-remote-control__bar",children:[a.jsx("strong",{title:Se,children:Se}),a.jsx("span",{children:ae}),a.jsx("button",{type:"button",title:"Refresh remote device",onClick:Lo,children:a.jsx(fo,{size:12,className:s.loading?"spin-icon":""})}),s.source==="blocked"?a.jsxs("button",{type:"button",onClick:jo,children:[a.jsx(ho,{size:12}),"Enable"]}):a.jsxs("button",{type:"button",disabled:!te&&!F,onClick:Jt,children:[F?a.jsx(Sa,{size:12}):a.jsx(Ra,{size:12}),F?"Lock":"Unlock"]})]}),a.jsxs("div",{className:`node-remote-control__screen ${F&&te?"is-input-active":""}`,tabIndex:F&&te?0:-1,onPointerDown:Be,onPointerMove:yt,onPointerUp:Ze,onWheel:et,onKeyDown:Eo,onKeyUp:Ge,children:[a.jsx("canvas",{ref:i}),F&&te&&a.jsxs("em",{children:[a.jsx(Ma,{size:11}),"input"]})]}),a.jsxs("form",{className:"node-remote-control__taskbar","data-testid":"remote-control-node-taskbar",onSubmit:Ne,children:[a.jsx("input",{"aria-label":"Remote control task",value:ve,maxLength:1200,onChange:y=>me(y.target.value),onPointerDown:y=>y.stopPropagation(),placeholder:ie?`Task for ${Se}`:"Task unavailable"}),a.jsxs("button",{type:"submit",disabled:!ut,title:ut?"Queue task for this device":"This device cannot accept remote tasks",children:[a.jsx(Yo,{size:12,className:J?"spin-icon":""}),"Queue"]})]}),a.jsxs("div",{className:"node-remote-control__footer",children:[a.jsxs("span",{children:["DEVICE ",a.jsx("strong",{children:o||"missing"})]}),a.jsxs("span",{children:["STATE ",a.jsx("strong",{children:(R==null?void 0:R.connected)===!0?"online":"offline"})]}),a.jsxs("span",{children:["INPUT ",a.jsx("strong",{children:Qe})]}),a.jsxs("span",{children:["TASK ",a.jsx("strong",{children:ie?"ready":"off"})]}),a.jsxs("span",{children:["ROUTE ",a.jsx("strong",{children:s.source==="bridge"?"Local":s.source==="blocked"?"Gated":"Preview"})]})]}),a.jsx("p",{className:"node-remote-control__message",children:Po})]})}function yr(e){var t,o,n;return I(((t=e.metadata)==null?void 0:t.RemoteFleetDeviceId)||((o=e.metadata)==null?void 0:o.RemoteSelectedDeviceId)||((n=e.metadata)==null?void 0:n.DeviceId)).trim()}function wt(e){var n,r,s,c,i,m,f,k,T,x,B,w,z;const t=new Date().toISOString();return{deviceId:yr(e)||"remote-control-preview",deviceName:((n=e.metadata)==null?void 0:n.RemoteFleetDeviceName)||e.title||"Remote device",platform:((r=e.metadata)==null?void 0:r.RemoteFleetDevicePlatform)||"unknown",arch:((s=e.metadata)==null?void 0:s.RemoteFleetDeviceArch)||"",connected:/^(1|true|yes|online)$/i.test(((c=e.metadata)==null?void 0:c.RemoteFleetDeviceConnected)||""),lastSeenAt:t,capabilities:{control:/^(1|true|yes|on)$/i.test(((i=e.metadata)==null?void 0:i.RemoteFleetDeviceCanControl)||""),taskDispatch:/^(1|true|yes|on)$/i.test(((m=e.metadata)==null?void 0:m.RemoteFleetDeviceCanDispatchTask)||"")},latestLiveFrame:(f=e.metadata)!=null&&f.RemoteFleetLatestFramePath||(k=e.metadata)!=null&&k.RemoteFleetLatestFrameUrl||(T=e.metadata)!=null&&T.RemoteFleetLatestFrameDataUrl?{framePath:(x=e.metadata)==null?void 0:x.RemoteFleetLatestFramePath,frameUrl:(B=e.metadata)==null?void 0:B.RemoteFleetLatestFrameUrl,dataUrl:(w=e.metadata)==null?void 0:w.RemoteFleetLatestFrameDataUrl,frameSeq:cn((z=e.metadata)==null?void 0:z.RemoteFleetLatestFrameSeq,0)}:void 0}}function cn(e,t){const o=Number(e);return Number.isFinite(o)&&o>=0?o:t}function I(e){return typeof e=="string"?e:typeof e=="number"||typeof e=="boolean"?String(e):""}function ye(e,t){const o=Number(e);return Number.isFinite(o)?o:t}function de(e,t){var n;const o=(n=e.capabilities)==null?void 0:n[t];return typeof o=="boolean"?o:typeof o=="number"?o!==0:typeof o=="string"?/^(1|true|yes|on)$/i.test(o):!1}function kr(e,t,o){const n=e.replace(/^http:/i,"ws:").replace(/^https:/i,"wss:").replace(/\/+$/,""),r=t||"/api/remote/input/ws",s=new URLSearchParams;o&&s.set("token",o);const c=s.toString();return c?`${n}${r}?${c}`:`${n}${r}`}function vr(e){return e===2?"right":e===1?"middle":"left"}function To(e,t=!1){const o=wl(e.currentTarget);if(!o)return null;const n=o.getBoundingClientRect();if(n.width<=0||n.height<=0)return null;const r=Qt.get(o)??{left:0,top:0,width:n.width,height:n.height};return ul(e,n,r,t)}function wl(e){return e instanceof HTMLCanvasElement?e:e.querySelector("canvas")}function ya(e){return e.split(",").map(t=>t.trim()).filter(Boolean)}function Tr(e,t,o,n){const r=e.replace(/^http:/i,"ws:").replace(/^https:/i,"wss:").replace(/\/+$/,""),s=t||"/api/remote/frames/ws",c=new URLSearchParams;o&&c.set("token",o),n.length>0&&c.set("devices",n.join(","));const i=c.toString();return i?`${r}${s}?${i}`:`${r}${s}`}function Ir(e){switch(e){case"ready":return"ready";case"connecting":return"connecting";case"unavailable":return"unavailable";case"error":return"error";default:return"locked"}}function po(e,t){const o=new Date().toISOString(),n=Math.max(12,Math.min(kl,Math.floor(e||we)));return Array.from({length:n},(r,s)=>({deviceId:`remote-node-preview-${s+1}`,deviceName:`Remote ${String(s+1).padStart(2,"0")}`,platform:s%4===0?"linux":"win32",arch:"x64",connected:s<t,lastSeenAt:o,capabilities:{control:!1}}))}function Ho(e){if(typeof window>"u")return!1;try{const t=window.localStorage.getItem(sn);if(String(t||"").trim().toLowerCase()!=="true")return!1;const o=String(window.localStorage.getItem(ln)||"").trim(),n=String(e||"").trim();return!o||o===n}catch{return!1}}function ka(e,t){if(!(typeof window>"u"))try{t?(window.localStorage.setItem(sn,"true"),window.localStorage.setItem(ln,String(e||"").trim())):(window.localStorage.removeItem(sn),window.localStorage.removeItem(ln))}catch{}}function Sl({source:e,hub:t,baseUrl:o,hubLabel:n,routeLabel:r,connected:s,total:c,taskCount:i,taskDispatchCount:m,aiCount:f,pageLabel:k,pageStart:T,pageIndex:x,pageCount:B,projectionMode:w,projectedCount:z,visibleBudget:ee,selectedDeviceId:X,inputLabel:P,devices:ke,latestTaskBatch:F,recentTaskBatches:ue,taskFollowActive:g,taskFollowKey:Q,isHostActiveForNode:pe,registryRouteInfo:E,hostTargetRenewMs:ve,autoHostEnabled:me,agent:J,agentStatusLabel:Ve,agentRunning:qe,agentReady:Z,message:R}){const Se=Cn(t),ae=pe?"hosting":(t==null?void 0:t.hostTargetActive)===!0?"other-monitor":"inactive",j=Al(ke);return{SemanticType:"RemoteFleetMonitor",RemoteFleetSchemaVersion:"remote-fleet@1",RemoteFleetViewMode:"all-devices",RemoteFleetLastRefreshAtUtc:new Date().toISOString(),RemoteFleetHubStatus:(t==null?void 0:t.started)===!0?"online":e==="blocked"?"gated":e==="bridge"?"ready":e,RemoteFleetHubEndpoint:Se,RemoteFleetManagerPackage:I(t==null?void 0:t.managerPackage)||"@mindexec/cli",RemoteFleetManagerVersion:I(t==null?void 0:t.managerVersion),RemoteFleetAgentPackage:I(t==null?void 0:t.agentPackage)||"@mindexec/remote",RemoteFleetPairTokenPreview:I(t==null?void 0:t.pairTokenPreview)||"<pair-token>",RemoteFleetConnectCommand:xr(t),RemoteFleetDeviceCount:String(c),RemoteFleetConnectedDeviceCount:String(s),RemoteFleetDevicesJson:JSON.stringify(j),RemoteFleetLatestTaskBatchJson:F?JSON.stringify(va(F)):"",RemoteFleetRecentTaskBatchesJson:JSON.stringify((ue??[]).slice(0,6).map(va)),RemoteFleetTaskFollowActive:String(g),RemoteFleetTaskFollowKey:Q,RemoteFleetTaskFollowRefreshMs:String(g?bo:0),RemoteFleetTaskFollowMaxTicks:String(St),RemoteFleetProjectionMode:w,RemoteFleetProjectedDeviceCount:String(z),RemoteFleetCanvasPagination:`${w}:${x+1}/${B}`,RemoteFleetHostTargetState:ae,RemoteFleetHostTargetNodeId:I(t==null?void 0:t.hostTargetNodeId),RemoteFleetHostTargetLeaseId:I(t==null?void 0:t.hostTargetLeaseId),RemoteFleetRegistryStatus:E.status,RemoteFleetRegistryReason:E.reason,RemoteFleetAccountRouteReady:String(E.accountRouteReady),RemoteFleetRegistryMigrationBlocked:String(E.migrationBlocked),RemoteFleetHostTargetRenewMs:String(ve),RemoteFleetAutoHost:String(me),RemoteFleetHostTargetEndpoint:I(t==null?void 0:t.hostTargetEndpoint)||Se,RemoteFleetHostTargetActivatedAtUtc:I(t==null?void 0:t.hostTargetActivatedAt),RemoteFleetHostTargetUpdatedAtUtc:I(t==null?void 0:t.hostTargetUpdatedAt),RemoteFleetHostTargetExpiresAtUtc:I(t==null?void 0:t.hostTargetExpiresAt),RemoteAgentStatus:Ve,RemoteAgentRunning:String(qe),RemoteAgentReady:String(Z),RemoteAgentManager:I(J==null?void 0:J.manager),RemoteAgentLeaseId:I(J==null?void 0:J.leaseId),RemoteAgentNodeId:I(J==null?void 0:J.nodeId),RemoteAgentUpdatedAtUtc:I(J==null?void 0:J.updatedAt),RemoteAgentLastError:I((J==null?void 0:J.lastError)||(J==null?void 0:J.reconnectReason)),RemoteFleetLastError:e==="bridge"?I(t==null?void 0:t.lastError):R,RemoteHub:n,RemoteRoute:r,RemoteRegistryRoute:E.status,RemoteRegistryReason:E.reason,RemoteConnected:String(s),RemoteTotal:String(c),RemoteProjected:String(z),RemoteProjection:w,RemotePage:k,RemotePageStart:String(T),RemoteVisibleBudget:String(ee),RemoteSelectedDeviceId:X,RemoteInput:P,RemoteTasksQueued:String(i),RemoteTaskDevices:String(m),RemoteAiDevices:String(f),RemoteBaseUrl:o,AdapterState:e==="bridge"?"localbridge-connected":e==="blocked"?"adapter-gated":e}}function Rl(e,t){const o=I(e==null?void 0:e.agentEndpointRouteReason).trim(),n=(e==null?void 0:e.agentEndpointAccountRouteReady)===!0,r=Cr(o);return(t?"account":(e==null?void 0:e.hostTargetActive)===!0?"other-monitor":"idle")==="other-monitor"?{status:"other-monitor",value:"Other",tone:"default",reason:o,accountRouteReady:n,migrationBlocked:r,title:o||"Another monitor currently owns the host route."}:t?n?{status:"account",value:"Account",tone:"online",reason:o||"ok",accountRouteReady:!0,migrationBlocked:!1,title:"Published to the account route registry for same-account agent pairing."}:Ml(o)?{status:"blocked",value:"Blocked",tone:"warn",reason:o,accountRouteReady:!1,migrationBlocked:r,title:r?"Account route registry needs the Supabase remote_host_targets migration.":o||"The local host is active, but account route publishing failed."}:{status:"local",value:"Local",tone:"warn",reason:o,accountRouteReady:!1,migrationBlocked:r,title:o||"The local host is active, but account route publishing is not available."}:{status:"idle",value:"Idle",tone:"default",reason:o,accountRouteReady:n,migrationBlocked:r,title:o||"No active host route."}}function Cr(e){return/registry-table-unavailable|PGRST20[25]|remote_host_targets|set_remote_host_target|clear_remote_host_target/i.test(String(e||""))}function Ml(e){return Cr(e)||/invalid-manager-endpoint|blocked|failed|error|unavailable|unauthori[sz]ed|forbidden/i.test(String(e||""))}function Cn(e){const t=I(e==null?void 0:e.agentEndpoint).trim();if(t)return t;const o=I((e==null?void 0:e.agentHost)||(e==null?void 0:e.host)).trim()||"127.0.0.1",n=Number((e==null?void 0:e.port)||5197);return`${o}:${Number.isFinite(n)&&n>0?n:5197}`}function xr(e){const t=Cn(e),o=I(e==null?void 0:e.pairTokenPreview).trim()||"<pair-token>";return`npx @mindexec/remote connect --manager ${t} --pair ${o}`}function Al(e){return e.filter(t=>t.connected===!0).map(t=>{var r,s,c,i,m,f,k,T,x,B,w;const o=$t(t),n=t.latestTask;return{deviceId:at(t),sessionId:I(t.sessionId),name:gt(t),hostname:I(t.hostname),platform:Wt(t),arch:I(t.arch),agentVersion:I(t.agentVersion),connected:t.connected===!0,lastSeenAt:I(t.lastSeenAt),lastStatusAt:I(t.lastStatusAt),computerAgentEnabled:de(t,"taskDispatch"),controlEnabled:de(t,"control"),thumbnailEnabled:de(t,"thumbnail")||de(t,"screen"),liveStreamEnabled:de(t,"liveStream"),aiAssistEnabled:de(t,"aiAssist"),aiModel:I((r=t.capabilities)==null?void 0:r.aiModel),aiProvider:I((s=t.capabilities)==null?void 0:s.aiProvider),thumbnailFrameUrl:I(((c=t.latestThumbnail)==null?void 0:c.frameUrl)||((i=t.latestThumbnail)==null?void 0:i.framePath)),liveFrameUrl:I(((m=t.latestLiveFrame)==null?void 0:m.frameUrl)||((f=t.latestLiveFrame)==null?void 0:f.framePath)),latestFrameSeq:dt(o),liveStreamActive:((k=t.activeLiveStream)==null?void 0:k.active)===!0,liveStreamId:I((T=t.activeLiveStream)==null?void 0:T.streamId),liveStreamFps:ye((x=t.activeLiveStream)==null?void 0:x.fps,0),latestTaskBatchId:I(n==null?void 0:n.batchId),latestTaskId:I(n==null?void 0:n.taskId),latestTaskStatus:I(n==null?void 0:n.status),latestTaskApprovalLevel:I(n==null?void 0:n.approvalLevel),latestTaskResultModel:I(n==null?void 0:n.resultModel),latestTaskResultResponseId:I(n==null?void 0:n.resultResponseId),latestTaskResultSummary:I(n==null?void 0:n.resultSummary),tasksQueued:ye((B=t.counters)==null?void 0:B.tasksQueued,0),taskResultsReceived:ye((w=t.counters)==null?void 0:w.taskResultsReceived,0)}})}function va(e){return{batchId:I(e.batchId),title:I(e.title),instructionPreview:I(e.instructionPreview),approvalLevel:I(e.approvalLevel),status:I(e.status),requestedAt:I(e.requestedAt),updatedAt:I(e.updatedAt),total:ye(e.total,0),queued:ye(e.queued,0),pending:ye(e.pending,0),completed:ye(e.completed,0),failed:ye(e.failed,0),timedOut:ye(e.timedOut,0)}}function Pl(e,t){return Ta(e)?e:(t??[]).find(Ta)}function El(e){if(!e)return"";const t=I(e.batchId).trim();return t||[I(e.title).trim(),I(e.requestedAt).trim(),I(e.updatedAt).trim(),String(ye(e.total,0)||"")].filter(Boolean).join(":")}function Ta(e){if(!e)return!1;const t=I(e.status).trim().toLocaleLowerCase(),o=ye(e.pending,0),n=ye(e.total,0),r=ye(e.completed,0),s=ye(e.failed,0),c=ye(e.timedOut,0);return["completed","completed-with-failures","failed","cancelled","canceled","done"].includes(t)?!1:o>0||["running","queued","pending","targeted","dispatching","in-progress"].includes(t)?!0:n>0&&r+s+c<n}function jl(e,t){const o=Ll(e);return{manager:o[0]||"",managerCandidates:o,pairToken:I(e==null?void 0:e.pairToken).trim(),leaseId:I(e==null?void 0:e.hostTargetLeaseId).trim(),nodeId:t,engine:"auto",source:"react-remote-monitor"}}function Ll(e){const t=Array.isArray(e==null?void 0:e.agentEndpointCandidateDetails)?e.agentEndpointCandidateDetails:[],o=[e==null?void 0:e.hostTargetEndpoint,...Array.isArray(e==null?void 0:e.hostTargetEndpointCandidates)?e.hostTargetEndpointCandidates:[],e==null?void 0:e.agentEndpoint,...Array.isArray(e==null?void 0:e.agentEndpointCandidates)?e.agentEndpointCandidates:[],...t.map(s=>s.endpoint||s.address),Cn(e)],n=new Set,r=[];for(const s of o){const c=Nl(s),i=c.toLowerCase();if(!(!c||n.has(i))&&(n.add(i),r.push(c),r.length>=12))break}return r}function Nl(e){const t=I(e).trim(),o=t.match(/^(\[[^\]]+\]|[^:\s]+):(\d{1,5})$/);if(!o)return"";const n=Number(o[2]);return!Number.isInteger(n)||n<=0||n>65535?"":t}function Dl(e,t){if(t==="blocked")return"gated";if(t!=="bridge")return t;if(!e)return"unknown";const o=I(e.status).trim().toLowerCase();return Sr(e)?"ready":o||(wr(e)?"running":"idle")}function wr(e){const t=I(e==null?void 0:e.status).trim().toLowerCase();return(e==null?void 0:e.running)===!0||t==="running"||t==="starting"}function Sr(e){const t=I(e==null?void 0:e.status).trim().toLowerCase();return(e==null?void 0:e.ready)===!0||t==="ready"}function Ol({source:e,hasAuth:t,isHostActiveForNode:o,request:n,busy:r}){return r?"RemoteAgent action is already running.":e!=="bridge"?"LocalBridge is not connected.":t?o?"This monitor is already the active host target.":n.manager?n.pairToken?"":"RemoteAgent pair token is missing.":"RemoteAgent manager endpoint is missing.":"LocalBridge auth token is not available."}function at(e){return String(e.deviceId||e.sessionId||e.deviceName||"").trim()}function gt(e){return String(e.deviceName||e.hostname||at(e)||"Remote device").trim()}function Wt(e){var t;return String(((t=e.status)==null?void 0:t.platform)||e.platform||"unknown").trim()}function _l(e){return hr.includes(e)?e:"status"}function Fl(e){return gr.includes(e)?e:"connected"}function Bl(e){return br.includes(e)?e:"all"}function Gl(e){switch(e){case"activity":return"Activity";case"platform":return"Platform";case"capability":return"Capability";default:return"Status"}}function Ul(e){switch(e){case"all":return"All";case"offline":return"Offline";default:return"Live"}}function zl(e){switch(e){case"control":return"Control";case"task":return"Task";case"ai":return"AI";default:return"Any"}}function $l(e,t){switch(t){case"activity":return Vl(e);case"platform":return Wt(e).toLocaleLowerCase()||"unknown";case"capability":return ql(e);default:return e.connected===!0?"online":"offline"}}function Vl(e){var o,n,r,s;const t=I((o=e.latestTask)==null?void 0:o.status).toLocaleLowerCase();return t==="running"||t==="queued"?`task-${t}`:((n=e.activeLiveStream)==null?void 0:n.active)===!0?"live":Number(((r=e.counters)==null?void 0:r.liveFramesReceived)||0)>0?"live-recent":Number(((s=e.counters)==null?void 0:s.thumbnailFramesReceived)||0)>0?"thumbnail":e.lastStatusAt||e.lastSeenAt?"heartbeat":"idle"}function ql(e){return de(e,"aiAssist")?"ai-assist":de(e,"taskDispatch")?"task-dispatch":de(e,"control")?"control":de(e,"thumbnail")||de(e,"screen")?"screen":"view-only"}function $t(e){return e.latestLiveFrame||e.latestThumbnail}function xn(e){return(e==null?void 0:e.dataUrl)||(e==null?void 0:e.frameUrl)||(e==null?void 0:e.framePath)||""}function Rr(e){return e.live||e.thumbnail}function dt(e){const t=Number((e==null?void 0:e.frameSeq)||0);return Number.isFinite(t)&&t>0?t:0}function wn(e,t,o){var n,r;return Math.max(e.get(o)||0,dt((n=t.get(o))==null?void 0:n.metadata),dt((r=Ar(o))==null?void 0:r.metadata))}function Mr(e,t,o,n){e.has(t)&&e.delete(t);const r={metadata:{...o,deviceId:t},payload:n.slice(0),cachedAt:Date.now()};return e.set(t,r),Kt(e,rn),Wl(t,r),r}function Kt(e,t,o=Number.POSITIVE_INFINITY){const n=Date.now();for(const[r,s]of e)(!s||!s.payload||Number.isFinite(o)&&n-s.cachedAt>o)&&e.delete(r);for(;e.size>t;){const r=e.keys().next().value;if(!r)break;e.delete(r)}}function Wl(e,t){e&&(Rt.has(e)&&Rt.delete(e),Rt.set(e,{metadata:{...t.metadata,deviceId:e},payload:t.payload,cachedAt:t.cachedAt}),Kt(Rt,pr,mr))}function Ar(e){return Kt(Rt,pr,mr),Rt.get(e)}function Pr(e,t){Kt(e,rn);const o=e.get(t);if(o)return{cached:o,scope:"local"};const n=Ar(t);return n?(e.set(t,n),Kt(e,rn),{cached:n,scope:"global"}):null}async function Io(e,t,o,n){const r=I(t.metadata.deviceId).trim();if(!r||o.has(r))return!1;const s=dt(t.metadata),c=n.get(r)||0;if(s>0&&s<=c)return!1;o.add(r);try{const i=await Sn(e,t.metadata,t.payload);return i&&s>0&&n.set(r,s),i}catch{return!1}finally{o.delete(r)}}function Ao(e){const t=e.getBoundingClientRect(),o=Math.max(64,Math.round(t.width||120)),n=Math.max(42,Math.round(t.height||72)),r=Math.min(Tl,Math.max(1,window.devicePixelRatio||1)),s=Math.round(o*r),c=Math.round(n*r),i=Math.abs(e.width-s),m=Math.abs(e.height-c);(e.width<=0||e.height<=0||i>ha||m>ha)&&(e.width=s,e.height=c);const k=e.getContext("2d",{alpha:!1});return k?(k.setTransform(r,0,0,r,0,0),{ctx:k,width:o,height:n}):null}function Co(e,t,o){const n=Ao(e);if(!n)return;const{ctx:r,width:s,height:c}=n;Qt.set(e,{left:0,top:0,width:s,height:c});const i=t.connected===!0;r.fillStyle=i?"#ffffff":"#f8fafc",r.fillRect(0,0,s,c),r.strokeStyle=i?"#dbeafe":"#e2e8f0",r.lineWidth=1,r.strokeRect(.5,.5,s-1,c-1),r.fillStyle=i?"#bfdbfe":"#e2e8f0",r.fillRect(8,8,Math.max(12,s*.34),5),r.fillRect(8,18,Math.max(20,s*.52),5),r.fillStyle=o==="blocked"?"#94a3b8":"#cbd5e1",r.font="700 9px Inter, sans-serif",r.fillText(o==="bridge"?"waiting":o,8,c-8)}async function Er(e,t,o){const n=t.startsWith("data:")?t:Ws(t,o);if(!n)return!1;const r=new Image;r.decoding="async",r.loading="eager",r.src=n,await r.decode();const s=Ao(e);if(!s)return!1;const{ctx:c,width:i,height:m}=s;return c.fillStyle="#020617",c.fillRect(0,0,i,m),Qt.set(e,Rn(c,r,i,m)),!0}async function Sn(e,t,o){const n=new Blob([o],{type:t.mimeType||"image/jpeg"});let r=null;try{r=await createImageBitmap(n);const s=Ao(e);if(!s)return!1;const{ctx:c,width:i,height:m}=s;return c.fillStyle="#020617",c.fillRect(0,0,i,m),Qt.set(e,Rn(c,r,i,m)),!0}catch{return Kl(e,t,n)}finally{r==null||r.close()}}async function Kl(e,t,o){const n=URL.createObjectURL(o);try{const r=new Image;r.decoding="async",r.loading="eager",r.src=n,await r.decode();const s=Ao(e);if(!s)return!1;const{ctx:c,width:i,height:m}=s;return c.fillStyle="#020617",c.fillRect(0,0,i,m),Qt.set(e,Rn(c,r,i,m)),!0}catch{return h.emit("remoteMonitor.node.frameDecodeFailed",{deviceId:I(t.deviceId),frameSeq:Number(t.frameSeq||0)||0,mimeType:t.mimeType||"",byteLength:Number(t.byteLength||o.size||0)||0}),!1}finally{URL.revokeObjectURL(n)}}async function dn(e,t,o,n,r,s,c){const i=xn(o),m={painted:!1,busy:!1,staleDropped:!1,frameSeq:0,previous:0};if(!e||!i)return m;if(r.has(t))return{...m,busy:!0};const f=Number((o==null?void 0:o.frameSeq)||0)||0,k=wn(s,c,t);if(f>0&&f<=k||f<=0&&k>0)return{painted:!1,busy:!1,staleDropped:!0,frameSeq:f,previous:k};r.add(t);try{const T=await Er(e,i,n);return T&&f>0&&s.set(t,f),{painted:T,busy:!1,staleDropped:!1,frameSeq:f,previous:k}}catch{return{painted:!1,busy:!1,staleDropped:!1,frameSeq:f,previous:k}}finally{r.delete(t)}}function Rn(e,t,o,n){const r="width"in t?Number(t.width):o,s="height"in t?Number(t.height):n,c=Math.min(o/Math.max(1,r),n/Math.max(1,s)),i=r*c,m=s*c,f=(o-i)/2,k=(n-m)/2;return e.drawImage(t,f,k,i,m),{left:f,top:k,width:i,height:m}}function zd({launchers:e,activeLauncher:t,template:o,selectedOptionId:n,values:r,validationMessage:s,canCreate:c,primaryLabel:i="Create board",onLauncherSelected:m,onOptionSelected:f,onInputChanged:k,onCreate:T,onClose:x}){const B=(o==null?void 0:o.inputs)??[];return a.jsx("div",{className:"template-launcher-backdrop","data-testid":"template-launcher-panel",onMouseDown:x,children:a.jsxs("section",{className:"template-launcher-panel floating-panel",onMouseDown:w=>w.stopPropagation(),children:[a.jsxs("header",{className:"template-launcher-head",children:[a.jsxs("div",{children:[a.jsx("span",{children:"Execution Canvas"}),a.jsx("strong",{children:t.label})]}),a.jsx("button",{type:"button",title:"Close template launcher",onClick:x,children:a.jsx(xo,{size:16})})]}),a.jsx("div",{className:"template-launcher-tabs","aria-label":"Template launchers",children:e.map(w=>a.jsxs("button",{type:"button",className:w.id===t.id?"is-active":"","data-testid":"template-launcher-tab","data-launcher-id":w.id,onClick:()=>m(w.id),children:[a.jsx(ki,{size:14}),a.jsx("span",{children:w.label})]},w.id))}),a.jsx("p",{className:"template-launcher-description",children:t.description}),t.options.length>0&&a.jsxs("div",{className:"template-launcher-option-block",children:[a.jsx("div",{className:"template-launcher-prompt",children:t.prompt||"Choose the board to create."}),a.jsx("div",{className:"template-launcher-chips",children:t.options.map(w=>a.jsxs("button",{type:"button",className:n===w.id?"is-active":"","data-testid":"template-option","data-option-id":w.id,onClick:()=>f(w.id),children:[a.jsx("strong",{children:w.label}),a.jsx("span",{children:w.description})]},w.id))})]}),B.length>0&&a.jsx("div",{className:"template-launcher-form",children:B.map(w=>a.jsx(Hl,{input:w,value:r[w.key]??"",onChange:z=>k(w.key,z)},w.key))}),s&&a.jsx("div",{className:"template-launcher-validation",children:s}),a.jsxs("footer",{className:"template-launcher-footer",children:[a.jsx("button",{type:"button",className:"template-launcher-secondary",onClick:x,children:"Cancel"}),a.jsxs("button",{type:"button",className:"template-launcher-primary","data-testid":"template-create",disabled:!c,onClick:T,children:[a.jsx(xa,{size:15}),a.jsx("span",{children:i})]})]})]})})}function Hl({input:e,value:t,onChange:o}){return a.jsxs("label",{className:"template-launcher-field",children:[a.jsxs("span",{children:[a.jsx("strong",{children:e.label}),e.description&&a.jsx("small",{children:e.description})]}),e.type==="textarea"?a.jsx("textarea",{placeholder:e.placeholder,value:t,onChange:n=>o(n.target.value)}):e.type==="select"?a.jsx("select",{value:t,onChange:n=>o(n.target.value),children:(e.options??[]).map(n=>a.jsx("option",{value:n.value,children:n.label},n.value))}):a.jsx("input",{type:"text",placeholder:e.placeholder,value:t,onChange:n=>o(n.target.value)})]})}function $d({node:e,onSave:t,onClose:o}){var f,k,T,x,B,w;const[n,r]=d.useState(((f=e.metadata)==null?void 0:f.DirectoryPath)??e.sourceFilePath??""),[s,c]=d.useState(((k=e.metadata)==null?void 0:k.Include)??""),[i,m]=d.useState(((T=e.metadata)==null?void 0:T.Exclude)??"");return d.useEffect(()=>{var z,ee,X;r(((z=e.metadata)==null?void 0:z.DirectoryPath)??e.sourceFilePath??""),c(((ee=e.metadata)==null?void 0:ee.Include)??""),m(((X=e.metadata)==null?void 0:X.Exclude)??"")},[e.id,(x=e.metadata)==null?void 0:x.DirectoryPath,(B=e.metadata)==null?void 0:B.Exclude,(w=e.metadata)==null?void 0:w.Include,e.sourceFilePath]),a.jsx("div",{className:"directory-settings-backdrop","data-testid":"directory-settings-dialog",onMouseDown:o,children:a.jsxs("section",{className:"directory-settings-dialog","aria-label":"Folder scan settings","data-disable-mindcanvas-hotkeys":"true",onMouseDown:z=>z.stopPropagation(),children:[a.jsxs("header",{className:"directory-settings-head",children:[a.jsxs("div",{children:[a.jsxs("span",{children:[a.jsx(vi,{size:15}),"Folder scan settings"]}),a.jsx("strong",{title:e.sourceFilePath||e.title,children:e.title})]}),a.jsx("button",{type:"button",title:"Close folder scan settings","aria-label":"Close folder scan settings","data-testid":"directory-settings-close",onClick:o,children:a.jsx(xo,{size:16})})]}),a.jsxs("div",{className:"directory-settings-body",children:[a.jsxs("label",{className:"directory-setting-row",children:[a.jsxs("span",{children:[a.jsx(Ti,{size:14}),"LocalBridge path"]}),a.jsx("input",{value:n,placeholder:"E:\\\\Dev@Work\\\\Project or relative/path","data-testid":"directory-settings-path",onChange:z=>r(z.target.value)})]}),a.jsxs("label",{className:"directory-setting-row",children:[a.jsxs("span",{children:[a.jsx(Ii,{size:14}),"Extensions to include"]}),a.jsx("input",{value:s,placeholder:".cs, .js, .razor, .css","data-testid":"directory-settings-include",onChange:z=>c(z.target.value)})]}),a.jsxs("label",{className:"directory-setting-row",children:[a.jsxs("span",{children:[a.jsx(Ci,{size:14}),"Paths/files to exclude"]}),a.jsx("input",{value:i,placeholder:"bin, obj, .git, node_modules","data-testid":"directory-settings-exclude",onChange:z=>m(z.target.value)})]})]}),a.jsxs("footer",{className:"directory-settings-footer",children:[a.jsx("button",{type:"button","data-testid":"directory-settings-cancel",onClick:o,children:"Cancel"}),a.jsxs("button",{type:"button",className:"is-primary","data-testid":"directory-settings-save",onClick:()=>t(e.id,{DirectoryPath:n.trim(),Include:s.trim(),Exclude:i.trim()}),children:[a.jsx(Aa,{size:15}),"Save"]})]})]})})}const Mn=.001,Xl=1,Yl=5,Ql=1.35,Jl=1.3,Zl=1.45,ec=.002,tc=.01,oc=.03,nc=.002,ac=.015,rc=.05,ic=5,sc=20,lc=100,cc=2,Ia=2500,dc=800,uc=1200,pc=1800,mc=2600,hc={"deepseek/deepseek-v4-flash":{promptUsdPerToken:14e-8,completionUsdPerToken:28e-8,source:"openrouter"},"deepseek/deepseek-v4-pro":{promptUsdPerToken:435e-9,completionUsdPerToken:87e-8,source:"openrouter"},"deepseek/deepseek-chat-v3-0324":{promptUsdPerToken:14e-8,completionUsdPerToken:28e-8,source:"openrouter"},"gpt-image-2":{averageUsd:.02,source:"imagerouter"},"Tongyi-MAI/Z-Image-Turbo:free":{averageUsd:.02,source:"imagerouter"},"google/veo-2":{averageUsd:.25,maxUsd:.25,source:"imagerouter"},"runway/gen-3":{averageUsd:.2,maxUsd:.2,source:"imagerouter"}};function gc(e){const t=wc(e.reasoningEffort);return e.mode==="Text"?vc(e.provider,t,e.vendorPricing):e.mode==="Image"&&e.provider==="openai-codex"&&Rc(e.modelId)?st("Free",0,"Codex Responses image generation",void 0,"codex",!1):e.mode==="Image"?Ic(e.vendorPricing):e.mode==="Video"?Cc(e.vendorPricing):Pt("Unavailable")}function bc(e){const t=e.settings.inputMode==="Image"||e.settings.inputMode==="Video"?e.settings.inputMode:"Text",o=kc(e.settings,t);return gc({mode:t,provider:yc(e.settings),modelId:o,reasoningEffort:e.settings.effort,vendorPricing:fc(o)})}function fc(e){const t=Mc(e);return hc[t]??null}function yc(e){switch(e.aiProvider??"OpenAI Codex"){case"Local Ollama":return"local-ollama";case"BYOK":return"byok";case"Managed Cloud":return"managed-cloud";case"Gemini CLI":return"google-gemini-cli";case"OpenAI Codex":default:return"openai-codex"}}function kc(e,t){return t==="Image"?Jo("Image",e).id:t==="Video"?Jo("Video",e).id:e.model}function vc(e,t,o){switch(e){case"local-ollama":return st("Free",0,"Local execution",void 0,"ollama",!1);case"byok":return st("ServiceFeeOnly",cc,"BYOK platform fee",void 0,"byok",!1);case"openai-codex":return st("Free",0,"Codex CLI local execution",void 0,"codex",!1);case"google-gemini-cli":return st("Free",0,"Gemini CLI local execution",void 0,"gemini-cli",!1);case"managed-cloud":default:return Tc(t,o)}}function Tc(e,t){if(!bt(t==null?void 0:t.promptUsdPerToken)||!bt(t==null?void 0:t.completionUsdPerToken))return Pt("Pricing unavailable");const o=xc(e),n=((t==null?void 0:t.requestUsd)??0)+t.promptUsdPerToken*Ia+t.completionUsdPerToken*o,r=n*Ql+ec+nc,s=An(Math.max(r/Mn,ic),Xl);return st("FixedPoints",s,`Base run (${un(Ia)} in / ${un(o)} out)`,n,t.source,!0)}function Ic(e){if(!e)return Pt("Pricing unavailable");let t=e.averageUsd??e.maxUsd??e.minUsd;if(!bt(t))return Pt("Pricing unavailable");bt(e.minUsd)&&(t=Math.max(t,e.minUsd*1.15));const o=t*Jl+tc+ac,n=An(Math.max(o/Mn,sc),Yl);return st("FixedPoints",n,"Base image generation",t,e.source,!0)}function Cc(e){if(!e)return Pt("Pricing unavailable");let t=0;if(bt(e.maxUsd)&&(t=Math.max(t,e.maxUsd)),bt(e.averageUsd)&&(t=Math.max(t,e.averageUsd*1.25)),bt(e.minUsd)&&(t=Math.max(t,e.minUsd)),t<=0)return Pt("Pricing unavailable");const o=t*Zl+oc+rc,n=An(Math.max(o/Mn,lc),10);return st("FixedPoints",n,"Base video generation",t,e.source,!0)}function xc(e){switch(e){case"low":return dc;case"high":return pc;case"xhigh":return mc;case"medium":default:return uc}}function wc(e){switch(String(e??"").trim().toLowerCase()){case"fast":case"low":return"low";case"deep":case"xhigh":return"xhigh";case"high":return"high";case"normal":case"medium":default:return"medium"}}function An(e,t){return t<=1?Math.ceil(e):Math.ceil(e/t)*t}function st(e,t,o,n,r,s){return{billingKind:e,displayPoints:t,displayLabel:Sc(t),basisLabel:o,isEstimatedFromCatalog:s,vendorCostUsdSnapshot:n,vendorPricingSource:r}}function Pt(e){return{billingKind:"Unavailable",displayPoints:0,displayLabel:e,basisLabel:"Pricing unavailable",isEstimatedFromCatalog:!1}}function Sc(e){return`${un(e)}P`}function un(e){return e.toLocaleString("en-US",{maximumFractionDigits:0})}function Rc(e){return String(e??"").trim().toLowerCase().startsWith("codex-image:")}function Mc(e){return String(e??"").trim()}function bt(e){return typeof e=="number"&&Number.isFinite(e)}const Xo=[{id:"frame",label:"Frame Perf",icon:xi},{id:"render",label:"Render Debug",icon:wi},{id:"prompt",label:"Prompt Debug",icon:Si},{id:"points",label:"Points",icon:Ri},{id:"dev",label:"Dev",icon:Mi}],mo=[{key:"frameProbe",label:"Frame profiler",description:"Tracks local React frame budget and viewport pressure.",defaultValue:!0},{key:"motionGuard",label:"Motion guard",description:"Highlights pan and zoom paths that must stay patch-only.",defaultValue:!0},{key:"overlayAudit",label:"Overlay debug",description:"Checks floating panels, popovers, and result overlays.",defaultValue:!0},{key:"bridgeGate",label:"LocalBridge gate monitor",description:"Keeps hosted loopback access explicit and visible.",defaultValue:!0},{key:"storageTrace",label:"Storage trace",description:"Surfaces local save and restore evidence for this board.",defaultValue:!0}],Ac=[{route:"/code",label:"CodeGraph",description:"Repository graph, agent commands, and code notes."},{route:"/planmaster",label:"PlanMaster",description:"Goal planning, step states, and execution memory."},{route:"/youtube",label:"YouTube Capture",description:"Local YouTube search flow and MindCanvas handoff."},{route:"/company-core",label:"CompanyCore",description:"Company cockpit, approvals, artifacts, and publishing jobs."},{route:"/admin/dashboard",label:"Admin Dashboard",description:"Billing, entitlement, refund, and audit shell."},{route:"/tools",label:"Free Tools",description:"Markdown, note, and clipboard mini workflows."}];function Pc(e,t,o){const n=(0-t.x)/t.scale,r=(0-t.y)/t.scale,s=(o.width-t.x)/t.scale,c=(o.height-t.y)/t.scale;return e.nodes.filter(i=>{const m=i.x+i.width,f=i.y+i.height;return m>=n&&i.x<=s&&f>=r&&i.y<=c}).length}function Ec(e,t){const o=e.trim().split(/\s+/).filter(Boolean).length,n=Math.max(1,Math.ceil(o/120)),r=t==="Deep"?3:t==="Fast"?1:2;return{words:o,estimatedTokens:Math.max(8,Math.ceil(e.length/4)),points:n*r}}function jc(e,t,o){return[`Board: ${e.name}`,`Nodes: ${e.nodes.length}`,`Edges: ${e.edges.length}`,`Selected: ${t?`${t.title} (${t.kind})`:"none"}`,`Model: ${e.settings.model}`,`Effort: ${e.settings.effort}`,"",o].join(`
43
+ 基础风格:{{musicGenre}}`,"template.music-core.node.references.title":"参考","template.music-core.node.references.body":"列出参考曲和想借鉴的点。","template.music-core.node.vocals.title":"人声 / 乐器","template.music-core.node.vocals.body":"写下人声类型和核心乐器配置。","template.music-core.node.lyrics.title":"歌词","template.music-core.node.lyrics.body":"整理主题、重复钩子和禁用表达。","template.music-core.node.generationPrompt.title":"生成提示词","template.music-core.node.generationPrompt.body":"收集音色、结构和氛围指令。","template.music-core.node.versions.title":"版本比较","template.music-core.node.versions.body":"记录 mp3 结果和修改点。"}},Ce={studioNodeType:"studioNodeType",templateNodeId:"templateNodeId",templateRole:"templateRole",compileTarget:"compileTarget",inputKey:"inputKey",inputType:"inputType",inputDescription:"inputDescription",inputPlaceholder:"inputPlaceholder",inputDefaultValue:"inputDefaultValue",inputRequired:"inputRequired",inputOptions:"inputOptions"},rs=[{studioNodeType:"template.note",label:"Template Note",shortLabel:"Note"},{studioNodeType:"template.input",label:"Template Input",shortLabel:"Input"},{studioNodeType:"template.prompt",label:"Template Prompt",shortLabel:"Prompt"},{studioNodeType:"template.output",label:"Template Output",shortLabel:"Output"},{studioNodeType:"template.knowledge",label:"Knowledge Reference",shortLabel:"Know"},{studioNodeType:"template.section",label:"Section",shortLabel:"Sect"},{studioNodeType:"template.checklist",label:"Checklist",shortLabel:"List"}],Oc=["note","memo","markdown","aiPrompt","output","section","checklist","input"],q={contentType:"templateLauncher",semanticTypeKey:"semanticType",semanticTypeValue:"TemplateLauncher",launcherIdKey:"templateLauncherId",selectedOptionIdKey:"templateLauncherSelectedOptionId",cardVersionKey:"templateCardVersion",cardLockedKey:"templateCardLocked",controllerNodeIdKey:"sourceTemplateControllerNodeId",runIdKey:"sourceTemplateRunId",cardGeneratedKey:"sourceTemplateCardGenerated",localizationManagedKey:"templateLocalizationManaged",localizationLanguageKey:"templateLanguageCode",sourceInputValuesJsonKey:"sourceTemplateInputValuesJson",width:560,height:620,resultTopGap:90},ct=as,is=new Set(["en","ko","ja","zh"]);function ft(e){if(typeof e!="string")return"en";const t=e.trim().toLowerCase();return!t||t==="auto"?"en":is.has(t)?t:"en"}function ce(e,t="",o){const n=ft(o),r=ia[n],s=ia.en,c=r[e];if(c!==void 0)return c;const i=s[e];return n!=="ko"&&i!==void 0?i:t}function Xt(e,t){const o=Xe(e.id);return{...e,label:ce(`launcher.${o}.title`,e.label,t),description:ce(`launcher.${o}.desc`,e.description,t),prompt:ce(`launcher.${o}.prompt`,e.prompt,t),options:e.options.map(n=>vs(e.id,n,t))}}function Vt(e,t){const o=Xe(e.id);return{...e,boardTitle:ce(`template.${o}.boardTitle`,e.boardTitle,t),inputs:e.inputs.map(n=>Ts(e.id,n,t)),nodes:e.nodes.map(n=>Is(e.id,n,t))}}function _c(e){return ct.launchers.map(t=>Xt(t,e))}function ss(e,t){const o=ct.launchers.find(n=>H(n.id,e));return o?Xt(o,t):null}function So(e,t){if(e.options.length!==0)return e.options.find(o=>H(o.id,t||""))??e.options[0]}function ls(e,t,o){const n=So(e,t),r=(n==null?void 0:n.templateId)||e.quickCreateTemplateId||"",s=ct.templates.find(c=>H(c.id,r));return s?Vt(s,o):null}function Fc(e){const t={};for(const o of(e==null?void 0:e.inputs)??[])t[o.key]=kn(o);return t}function Bc(e,t){if(!e)return"Template is unavailable.";const o=e.inputs.find(n=>n.required&&!String(t[n.key]||"").trim());return o?`${o.label} is required.`:null}function cs(e,t,o,n){const r=ft(n.appLanguage),s=Xt(e,r),c=So(s,t),i=ls(s,c==null?void 0:c.id,r);return i?ds(s,c,i,o,n):null}function ds(e,t,o,n,r){const s=Mo(o,n),c=_a(e,t,s),i=new Date().toISOString(),m=Ga("template-board"),f=Mt(o.boardTitle,c).trim()||e.label,k=o.nodes.map((T,x)=>ps(T,e,t,o,c,m,x));return{launcher:e,option:t,template:o,board:{id:m,name:f,updatedAt:i,settings:r,source:{kind:"localStorage",loadedAt:i},nodes:k,edges:[]}}}function Na(e,t,o={},n){const r=ft(n),s=Xt(e,r),c=Cs(r),i=As(s,t),m={launcherId:s.id,title:s.label,description:s.description,prompt:s.prompt,iconClass:s.iconClass,selectedOptionId:i??void 0,options:[],inputValues:{},generateLabel:c.generateLabel,noInputsLabel:c.noInputsLabel,generatingMessage:c.generatingMessage,generatedMessageFormat:c.generatedMessageFormat,generationFailedMessage:c.generationFailedMessage,requiredMessageFormat:c.requiredMessageFormat,actionLabel:c.generateLabel};if(s.options.length===0){const k=s.quickCreateTemplateId?ct.templates.find(T=>H(T.id,e.quickCreateTemplateId)):null;if(k){const T=Vt(k,r);m.options.push({id:"",label:s.label,description:s.description,templateId:T.id,inputs:tn(T.inputs)})}}else for(const k of s.options){const T=ct.templates.find(B=>H(B.id,k.templateId)),x=T?Vt(T,r):null;m.options.push({id:k.id,label:k.label,description:k.description,templateId:k.templateId,inputs:tn((x==null?void 0:x.inputs)??[])})}const f=m.options.find(k=>H(k.id,m.selectedOptionId))??m.options[0];return m.selectedOptionId=f==null?void 0:f.id,m.inputValues=Fa((f==null?void 0:f.inputs)??[],o),m}function Gc(e,t,o,n,r={},s){const c=ft(s),i=Na(e,t,r,c),m=i.options.find(k=>H(k.id,i.selectedOptionId)),f={[q.semanticTypeKey]:q.semanticTypeValue,[q.launcherIdKey]:e.id,[q.selectedOptionIdKey]:i.selectedOptionId??"",[q.cardVersionKey]:"1.0",[q.cardLockedKey]:"True",[q.localizationLanguageKey]:c,IsNew:"true"};return{id:Ga("template-card"),kind:"template-launcher",title:i.title,body:JSON.stringify(i),x:o,y:n,width:q.width,height:q.height,tags:["Template","Launcher",e.label,m==null?void 0:m.label].filter(k=>!!k),metadata:f,aiEnabled:!1}}function yn(e){var t;return e?e.kind==="template-launcher"?!0:H((t=e.metadata)==null?void 0:t[q.semanticTypeKey],q.semanticTypeValue):!1}function Da(e){try{const t=JSON.parse(String(e||""));return!t||typeof t!="object"||!t.launcherId||!Array.isArray(t.options)?null:{launcherId:String(t.launcherId||""),title:String(t.title||""),description:String(t.description||""),prompt:String(t.prompt||""),iconClass:String(t.iconClass||""),selectedOptionId:t.selectedOptionId===void 0?void 0:String(t.selectedOptionId),options:t.options.map(o=>({id:String(o.id||""),label:String(o.label||""),description:String(o.description||""),templateId:String(o.templateId||""),inputs:tn(o.inputs??[])})),inputValues:Object.fromEntries(Object.entries(t.inputValues??{}).map(([o,n])=>[o,String(n??"")])),generateLabel:String(t.generateLabel||t.actionLabel||"Generate"),noInputsLabel:String(t.noInputsLabel||"No inputs needed."),generatingMessage:String(t.generatingMessage||"Generating nodes..."),generatedMessageFormat:String(t.generatedMessageFormat||"Generated {0} nodes below."),generationFailedMessage:String(t.generationFailedMessage||"Template generation failed."),requiredMessageFormat:String(t.requiredMessageFormat||"{0} is required."),actionLabel:String(t.actionLabel||t.generateLabel||"Generate")}}catch{return null}}function Uc(e,t){const o=e.options.find(n=>H(n.id,t))??e.options[0];return{...e,selectedOptionId:o==null?void 0:o.id,inputValues:Fa((o==null?void 0:o.inputs)??[],e.inputValues)}}function zc(e,t,o){return{...e,inputValues:{...e.inputValues,[t]:o}}}function $c(e){if(!e)return"Template card payload is unavailable.";const t=e.options.find(n=>H(n.id,e.selectedOptionId))??e.options[0];if(!t)return"Template card option is unavailable.";const o=t.inputs.find(n=>n.required&&!String(e.inputValues[n.key]||"").trim());return o?Ms(e.requiredMessageFormat||"{0} is required.",o.label):null}function Vc(e,t,o,n,r=Ps()){var X;if(!yn(e))return null;const s=(X=e.metadata)==null?void 0:X[q.launcherIdKey],c=ft(n.appLanguage),i=s?ss(s,c):null;if(!i)return null;const m=So(i,t),f=cs(i,(m==null?void 0:m.id)??null,o,n);if(!f)return null;const k=Mo(f.template,o),T=JSON.stringify(k),x=Math.min(...f.board.nodes.map(P=>P.x)),B=Math.min(...f.board.nodes.map(P=>P.y)),w=e.x,z=e.y+Math.max(e.height,q.height)+q.resultTopGap,ee=f.board.nodes.map(P=>({...P,x:w+(P.x-x),y:z+(P.y-B),metadata:{...P.metadata??{},[q.controllerNodeIdKey]:e.id,[q.runIdKey]:r,[q.cardGeneratedKey]:"True",[q.localizationManagedKey]:"True",[q.localizationLanguageKey]:c,[q.sourceInputValuesJsonKey]:T}}));return{launcher:i,option:f.option,template:f.template,runId:r,nodes:ee}}function qc(e,t){const o=ft(t),n=new Map(e.map(c=>[c.id,c]));let r=!1;const s=e.map(c=>{const i=xs(c,o);if(i)return r=!0,i;const m=ws(c,n,o);return m?(r=!0,m):c});return{nodes:r?s:e,changed:r,language:o}}function Wc(e){const t=String(e||"").trim()||"Template Studio Draft";return{templateId:Ro(t),templateTitle:t,category:"custom",boardTitle:t,version:"0.1.0",tier:"draft",status:"draft"}}function Kc(e,t){const o=[],n=ms(e),r=t.filter(k=>!!xe(k,Ce.studioNodeType)).sort((k,T)=>k.y-T.y||k.x-T.x||k.id.localeCompare(T.id)),s=r.filter(k=>H(xe(k,Ce.studioNodeType),"template.input")),c=r.filter(k=>!H(xe(k,Ce.studioNodeType),"template.input")),i=hs(s,o),m=gs(c,o);r.length===0&&o.push({code:"studio.nodes.empty",message:"Add at least one Template Studio node before compiling."});const f={id:n.templateId,version:n.version,tier:n.tier,status:n.status,boardTitle:n.boardTitle,inputs:i,nodes:m};return bs(f,o),{template:f,manifestJson:JSON.stringify(f,null,2),issues:o}}function Ro(e){return String(e||"").trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"")||"template-studio-draft"}function us(e,t){switch(String(e||"").trim().toLowerCase()||Oa(t)){case"template.input":return"input";case"template.prompt":return"aiPrompt";case"template.output":return"output";case"template.knowledge":return"memo";case"template.section":return"section";case"template.checklist":return"checklist";default:return t?Ba(t.kind):"note"}}function Oa(e){if(!e)return"template.note";switch(e.kind){case"ai-task":return"template.prompt";case"markdown":return"template.section";case"memo":return"template.knowledge";default:return"template.note"}}function Hc(e){const t=rs.find(o=>H(o.studioNodeType,e));return(t==null?void 0:t.shortLabel)??"Note"}function ps(e,t,o,n,r,s,c){const i={};for(const[f,k]of Object.entries(e.metadata??{}))i[f]=Mt(k,r);i.IsNew="true",i.sourceLauncherId=t.id,i.sourceTemplateId=n.id,i.sourceTemplateVersion=n.version,i.sourceTemplateNodeId=e.id,i.templateRole=i.templateRole||e.id,i.templateLauncher=t.id,i.templateId=n.id,i.templateVersion=n.version,i.templateNodeId=e.id,o!=null&&o.id&&(i.sourceOptionId=o.id,i.templateOption=o.id);const m=Es(e.contentType);return{id:`${s}-${e.id||c}`,kind:m,title:Mt(e.title,r),body:Mt(e.body,r),x:Number(e.x)||0,y:Number(e.y)||0,width:Math.max(180,Number(e.width)||340),height:Math.max(120,Number(e.height)||220),tags:["Template",t.label,(o==null?void 0:o.label)||n.tier].filter(Boolean),metadata:i}}function Mo(e,t){const o={};for(const n of e.inputs){const r=String(t[n.key]??"").trim();o[n.key]=r||kn(n)}return o}function _a(e,t,o){const n=(t==null?void 0:t.label)||e.label,r=(t==null?void 0:t.description)||e.description,s={launcherId:e.id,launcherLabel:e.label,launcherDescription:e.description,optionId:(t==null?void 0:t.id)||"",optionLabel:n,optionDescription:r,selectionLabel:n,timestampShort:js(new Date)};for(const[c,i]of Object.entries(o))s[c]=i;return s}function Mt(e,t){let o=e||"";for(const[n,r]of Object.entries(t))o=o.replace(new RegExp(`{{\\s*${Ls(n)}\\s*}}`,"gi"),r);return o}function kn(e){var t,o;return e.defaultValue?e.defaultValue:e.type==="select"&&((o=(t=e.options)==null?void 0:t[0])==null?void 0:o.value)||""}function ms(e){const t=String(e.templateTitle||"").trim()||"Template Studio Draft";return{templateId:Ro(e.templateId||t),templateTitle:t,category:String(e.category||"").trim()||"custom",boardTitle:String(e.boardTitle||"").trim()||t,version:String(e.version||"").trim()||"0.1.0",tier:String(e.tier||"").trim()||"draft",status:String(e.status||"").trim()||"draft"}}function hs(e,t){const o=[],n=new Set;for(const r of e){const s=r.title.trim()||"Input",c=Ro(xe(r,Ce.inputKey)||s),i=c.toLowerCase();if(n.has(i)){t.push({code:"studio.input.duplicate",message:`Template Studio input '${c}' is duplicated.`});continue}n.add(i),o.push({key:c,type:fs(xe(r,Ce.inputType)),label:s,description:xe(r,Ce.inputDescription)||r.body,placeholder:xe(r,Ce.inputPlaceholder),defaultValue:xe(r,Ce.inputDefaultValue),required:ys(xe(r,Ce.inputRequired)),options:ks(xe(r,Ce.inputOptions))})}return o}function gs(e,t){const o=[],n=new Set;for(const r of e){const s=xe(r,Ce.studioNodeType)||Oa(r);let c=Ro(xe(r,Ce.templateNodeId)||r.title);const i=c.toLowerCase();if(n.has(i)){t.push({code:"studio.node.duplicate",message:`Template Studio node '${c}' is duplicated.`});continue}n.add(i);const m=xe(r,Ce.compileTarget)||us(s,r),f=xe(r,Ce.templateRole)||s.replace(/^template\./i,"");o.push({id:c,contentType:m,title:r.title.trim(),body:r.body,x:Math.round(r.x),y:Math.round(r.y),width:Math.max(180,Math.round(r.width||340)),height:Math.max(120,Math.round(r.height||220)),metadata:{templateRole:f,studioNodeType:s,compileTarget:m,studioSourceContentType:Ba(r.kind)}})}return o}function bs(e,t){const o=new Set;for(const r of e.inputs)r.key||t.push({code:"template.input.key",message:`Template '${e.id}' contains an input with no key.`}),r.label||t.push({code:"template.input.label",message:`Template '${e.id}' input '${r.key}' must define a label.`}),o.has(r.key.toLowerCase())&&t.push({code:"template.inputs.duplicate",message:`Template '${e.id}' contains duplicate input key '${r.key}'.`}),o.add(r.key.toLowerCase());const n=new Set;for(const r of e.nodes)r.id||t.push({code:"template.node.id",message:`Template '${e.id}' contains a node with no id.`}),n.has(r.id.toLowerCase())&&t.push({code:"template.nodes.duplicate",message:`Template '${e.id}' contains duplicate node id '${r.id}'.`}),n.add(r.id.toLowerCase())}function xe(e,t){var n;const o=(n=e.metadata)==null?void 0:n[t];return typeof o=="string"?o.trim():""}function fs(e){const t=e.trim().toLowerCase();return t==="textarea"||t==="select"?t:"text"}function ys(e){return e.trim().toLowerCase()==="true"}function ks(e){const t=[];for(const o of e.split(/\r?\n/)){const n=o.trim();if(!n)continue;const[r,s]=n.split("|",2).map(c=>c.trim());r&&t.push({value:r,label:s||r})}return t}function vs(e,t,o){const n=Xe(e),r=Xe(t.id);return{...t,label:ce(`launcher.${n}.option.${r}.title`,t.label,o),description:ce(`launcher.${n}.option.${r}.desc`,t.description,o)}}function Ts(e,t,o){var s;const n=Xe(e),r=Xe(t.key);return{...t,label:ce(`template.${n}.input.${r}.label`,t.label,o),description:ce(`template.${n}.input.${r}.desc`,t.description,o),placeholder:ce(`template.${n}.input.${r}.placeholder`,t.placeholder,o),options:(s=t.options)==null?void 0:s.map(c=>({...c,label:ce(`template.${n}.input.${r}.option.${Xe(c.value)}`,c.label,o)}))}}function Is(e,t,o){const n=Xe(e),r=Xe(t.id);return{...t,title:ce(`template.${n}.node.${r}.title`,t.title,o),body:ce(`template.${n}.node.${r}.body`,t.body,o),metadata:{...t.metadata??{}}}}function Cs(e){return{generateLabel:ce("templateCard.generate","Generate",e),noInputsLabel:ce("templateCard.noInputs","No inputs needed.",e),generatingMessage:ce("templateCard.generating","Generating nodes...",e),generatedMessageFormat:ce("templateCard.generated","Generated {0} nodes below.",e),generationFailedMessage:ce("templateCard.failed","Template generation failed.",e),requiredMessageFormat:ce("templateCard.required","{0} is required.",e)}}function xs(e,t){var i,m,f,k;if(!yn(e))return null;const o=Da(e.body),n=((i=e.metadata)==null?void 0:i[q.launcherIdKey])||(o==null?void 0:o.launcherId),r=n?ct.launchers.find(T=>H(T.id,n)):null;if(!r)return null;const s=(o==null?void 0:o.selectedOptionId)||((m=e.metadata)==null?void 0:m[q.selectedOptionIdKey])||null,c=Na(r,s,(o==null?void 0:o.inputValues)??{},t);return e.title===c.title&&e.body===JSON.stringify(c)&&((f=e.metadata)==null?void 0:f[q.localizationLanguageKey])===t?null:{...e,title:c.title,body:JSON.stringify(c),tags:["Template","Launcher",c.title,(k=c.options.find(T=>T.id===c.selectedOptionId))==null?void 0:k.label].filter(T=>!!T),metadata:{...e.metadata??{},[q.launcherIdKey]:r.id,[q.selectedOptionIdKey]:c.selectedOptionId??"",[q.localizationLanguageKey]:t}}}function ws(e,t,o){if(yn(e))return null;const n=co(Oe(e,"sourceTemplateId"),Oe(e,"templateId")),r=co(Oe(e,"sourceTemplateNodeId"),Oe(e,"templateNodeId")),s=co(Oe(e,"sourceLauncherId"),Oe(e,"templateLauncher"));if(!n||!r||!s)return null;const c=ct.launchers.find(X=>H(X.id,s)),i=ct.templates.find(X=>H(X.id,n));if(!c||!i)return null;const m=co(Oe(e,"sourceOptionId"),Oe(e,"templateOption")),f=Ss(e,t),k=Mo(Vt(i,o),f),T=Vo(c,i,r,m,k,"ko"),x=ft(Oe(e,q.localizationLanguageKey)||"ko"),B=Vo(c,i,r,m,k,x),w=Vo(c,i,r,m,k,o);if(!T||!B||!w)return null;const z=e.title===T.title||e.title===B.title,ee=e.body===T.body||e.body===B.body;return!z&&!ee?null:{...e,title:z?w.title:e.title,body:ee?w.body:e.body,tags:["Template",w.launcherLabel,w.optionLabel].filter(Boolean),metadata:{...e.metadata??{},[q.localizationManagedKey]:"True",[q.localizationLanguageKey]:o,[q.sourceInputValuesJsonKey]:JSON.stringify(k)}}}function Vo(e,t,o,n,r,s){const c=Xt(e,s),i=Vt(t,s),m=So(c,n),f=i.nodes.find(x=>H(x.id,o));if(!f)return null;const k=Mo(i,r),T=_a(c,m,k);return{title:Mt(f.title,T),body:Mt(f.body,T),launcherLabel:c.label,optionLabel:(m==null?void 0:m.label)||c.label}}function Ss(e,t){const o=Rs(Oe(e,q.sourceInputValuesJsonKey));if(Object.keys(o).length>0)return o;const n=Oe(e,q.controllerNodeIdKey),r=n?t.get(n):null,s=Da(r==null?void 0:r.body);return(s==null?void 0:s.inputValues)??{}}function Rs(e){if(!e)return{};try{const t=JSON.parse(e);return Object.fromEntries(Object.entries(t??{}).map(([o,n])=>[o,String(n??"")]))}catch{return{}}}function Oe(e,t){var n;const o=(n=e.metadata)==null?void 0:n[t];return typeof o=="string"&&o.trim()?o.trim():null}function co(...e){var t;return((t=e.find(o=>typeof o=="string"&&o.trim()))==null?void 0:t.trim())??null}function Xe(e){const t=String(e||"").trim();return t?t.replace(/:/g,"."):"unknown"}function Ms(e,t){return e.includes("{0}")?e.replace("{0}",t):`${t} is required.`}function As(e,t){var o,n,r;return String(t||"").trim()?((n=e.options.find(s=>H(s.id,t)))==null?void 0:n.id)??((r=e.options[0])==null?void 0:r.id):(o=e.options[0])==null?void 0:o.id}function tn(e){return e.map(t=>{var o;return{...t,options:(o=t.options)==null?void 0:o.map(n=>({...n}))}})}function Fa(e,t){const o={};for(const n of e)o[n.key]=String(t[n.key]??kn(n));return o}function Ps(){const e=new Date,t=(o,n=2)=>`${o}`.padStart(n,"0");return[e.getFullYear(),t(e.getMonth()+1),t(e.getDate()),t(e.getHours()),t(e.getMinutes()),t(e.getSeconds()),t(e.getMilliseconds(),3)].join("")}function Ba(e){return e==="ai-task"?"aiPrompt":e==="template-launcher"?q.contentType:e}function Es(e){return H(e,"directory")?"directory":H(e,"pdf")?"pdf":H(e,"file")?"file":H(e,"memo")?"memo":H(e,"markdown")?"markdown":H(e,"csv-table")?"csv-table":H(e,"text")?"text":H(e,"code")?"code":H(e,"mask")?"mask":H(e,"image")?"image":H(e,"embed")?"embed":H(e,"aiPrompt")?"ai-task":H(e,q.contentType)?"template-launcher":"note"}function js(e){const t=`${e.getMonth()+1}`.padStart(2,"0"),o=`${e.getDate()}`.padStart(2,"0"),n=`${e.getHours()}`.padStart(2,"0"),r=`${e.getMinutes()}`.padStart(2,"0");return`${t}.${o} ${n}:${r}`}function Ga(e){return`${e}-${Math.random().toString(36).slice(2,9)}`}function H(e,t){return String(e||"").toLowerCase()===String(t||"").toLowerCase()}function Ls(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}const Ye=Object.freeze({status:"/api/remote/status",devices:"/api/remote/devices",frames:"/api/remote/frames",hostTarget:"/api/remote/host-target",agentStatus:"/api/remote/agent/status",agentConnect:"/api/remote/agent/connect",agentDisconnect:"/api/remote/agent/disconnect",deviceTasksTemplate:"/api/remote/devices/{deviceId}/tasks",taskBatch:"/api/remote/tasks"}),Ua=Object.freeze({frames:"/api/remote/frames/ws",input:"/api/remote/input/ws"});function Ns(e){return Ye.deviceTasksTemplate.replace("{deviceId}",encodeURIComponent(e))}function za(e){return Va(e==null?void 0:e.remoteFrameWsPath,Ua.frames)}function $a(e){return Va(e==null?void 0:e.remoteInputWsPath,Ua.input)}function Va(e,t){return typeof e=="string"?e.trim():t}const qo={},Ds="http://127.0.0.1:5147",qa="MindExec.AllowHostedLocalBridge",Os=new Set(["4173","5173"]);function Yt(e){return e.replace(/\/+$/,"")}function _s(){return((qo==null?void 0:qo.VITE_LOCAL_BRIDGE_URL)||"").trim()}function Fs(){if(typeof window>"u")return"";const{protocol:e,hostname:t,port:o,origin:n}=window.location,r=t.toLowerCase();return(e==="http:"||e==="https:")&&(r==="localhost"||r==="127.0.0.1"||r==="::1")&&o&&!Os.has(o)?n:""}function L(){return Yt(_s()||Fs()||Ds)}function Bs(){const e=window.location.hostname.toLowerCase();return e==="localhost"||e==="127.0.0.1"||e==="::1"}function Gs(){try{return window.localStorage.getItem(qa)==="true"}catch{return!1}}function Wa(e){try{e&&window.localStorage.setItem(qa,"true")}catch{}}function At(){return Bs()||Gs()}function Ka(e){const t=String((e==null?void 0:e.bridgeToken)||"").trim();if(t)return{header:(e==null?void 0:e.bridgeTokenHeader)||"X-Bridge-Token",token:t}}async function _(e,t,o={}){const n=new AbortController,r=window.setTimeout(()=>n.abort(),o.timeoutMs??4200),s=new Headers;s.set("Accept","application/json"),s.set("Cache-Control","no-store"),s.set("Pragma","no-cache"),o.body!==void 0&&s.set("Content-Type","application/json"),o.auth&&s.set(o.auth.header,o.auth.token);try{const c=await fetch(`${Yt(e)}${t}`,{method:o.method||(o.body===void 0?"GET":"POST"),headers:s,body:o.body===void 0?void 0:JSON.stringify(o.body),cache:"no-store",signal:n.signal}),i=await c.text(),m=i?JSON.parse(i):null;if(!c.ok){const f=(m==null?void 0:m.error)||(m==null?void 0:m.message)||`LocalBridge request failed: ${c.status}`;throw new Error(f)}return m}finally{window.clearTimeout(r)}}function Us(e){return e instanceof DOMException&&e.name==="AbortError"?"LocalBridge probe timed out.":e instanceof SyntaxError?"LocalBridge returned a non-JSON response.":e instanceof Error?e.message||"LocalBridge is unavailable.":String(e||"LocalBridge is unavailable.")}async function vn(e=L()){var t;try{const o=await _(e,"/api/status?refresh=1",{timeoutMs:4200});return h.emit("localBridge.status",{baseUrl:e,connected:!0,projectOpen:((t=o.project)==null?void 0:t.isOpen)===!0}),{state:"connected",baseUrl:e,status:o}}catch(o){const n=Us(o);return h.emit("localBridge.status",{baseUrl:e,connected:!1,message:n}),{state:"unavailable",baseUrl:e,message:n}}}async function Xc(e,t,o=L()){return _(o,"/project/open",{method:"POST",body:{path:e},auth:t,timeoutMs:15e3})}async function Yc(e=L(),t=18,o=1200){var r,s;let n={state:"idle",baseUrl:e};for(let c=0;c<t;c+=1){if(n=await vn(e),n.state==="connected"&&((s=(r=n.status)==null?void 0:r.project)!=null&&s.isOpen))return n;await new Promise(i=>{window.setTimeout(i,o)})}return n}async function Qc(e,t=L()){return _(t,"/project/symbols",{auth:e,timeoutMs:12e3})}async function Jc(e,t=L()){return _(t,"/project/graph",{auth:e,timeoutMs:12e3})}async function Zc(e="standard",t,o=L()){const n=`?level=${encodeURIComponent(e)}`;return _(o,`/project/ai-context${n}`,{auth:t,timeoutMs:14e3})}async function ed(e,t=L()){return h.emit("localBridge.codex.capabilities.request",{baseUrl:t}),_(t,"/api/codex/capabilities",{auth:e,timeoutMs:12e3})}async function td(e,t=5,o,n=L()){return h.emit("localBridge.web.search.request",{baseUrl:n,maxResults:t}),_(n,"/api/web/search",{method:"POST",body:{query:e,maxResults:t},auth:o,timeoutMs:24e3})}async function od(e,t=6e3,o,n=L()){return h.emit("localBridge.web.fetch.request",{baseUrl:n,maxChars:t}),_(n,"/api/web/fetch",{method:"POST",body:{url:e,maxChars:t},auth:o,timeoutMs:24e3})}async function nd(e,t,o=L()){return h.emit("localBridge.browser.open.request",{baseUrl:o}),_(o,"/api/browser/open",{method:"POST",body:{url:e},auth:t,timeoutMs:24e3})}async function ad(e,t=4e3,o,n=L()){return h.emit("localBridge.browser.snapshot.request",{baseUrl:n,maxChars:t}),_(n,"/api/browser/snapshot",{method:"POST",body:{sessionId:e,maxChars:t},auth:o,timeoutMs:18e3})}async function rd(e,t="hero",o=3e3,n,r=L()){return h.emit("localBridge.browser.extract.request",{baseUrl:r,scope:t,maxChars:o}),_(r,"/api/browser/extract",{method:"POST",body:{sessionId:e,scope:t,maxChars:o},auth:n,timeoutMs:18e3})}async function id(e,t,o=L()){return h.emit("localBridge.evidence.save.request",{baseUrl:o,kind:e.kind||"evidence"}),_(o,"/api/evidence/save",{method:"POST",body:e,auth:t,timeoutMs:18e3})}async function sd(e,t,o=L()){var n;return h.emit("localBridge.concept.defineComposite.request",{baseUrl:o,hasSignature:!!((n=e.signature)!=null&&n.trim())}),_(o,"/api/concept/define-composite",{method:"POST",body:e,auth:t,timeoutMs:18e3})}async function ld(e,t=L()){return h.emit("localBridge.concept.status.request",{baseUrl:t}),_(t,"/api/concept/status",{method:"GET",auth:e,timeoutMs:12e3})}async function cd(e,t,o=L()){return h.emit("localBridge.concept.row.request",{baseUrl:o,id:e}),_(o,`/api/concept/row?id=${encodeURIComponent(e)}`,{method:"GET",auth:t,timeoutMs:12e3})}async function dd(e,t=L()){return h.emit("localBridge.concept.embed.readiness.request",{baseUrl:t}),_(t,"/api/concept/embed/readiness",{method:"GET",auth:e,timeoutMs:12e3})}async function ud(e,t=L()){return _(t,"/project/close",{method:"POST",auth:e,timeoutMs:12e3})}async function pd(e=L()){return _(e,"/api/workspace",{timeoutMs:4200})}async function md(e,t,o=L()){return _(o,"/api/workspace/browse",{method:"POST",body:{initialPath:e||""},auth:t,timeoutMs:12e4})}async function hd(e,t,o=L()){return _(o,"/api/workspace/set",{method:"POST",body:{path:e},auth:t,timeoutMs:3e4})}async function gd(e,t,o=L()){return h.emit("localBridge.dir.list.request",{baseUrl:o}),_(o,"/api/dir/list",{method:"POST",body:{path:e},auth:t,timeoutMs:12e3})}async function bd(e=L()){return _(e,"/project/change-feed",{timeoutMs:4200})}async function Ha(e,t=L()){return _(t,Ye.status,{auth:e,timeoutMs:4200})}async function zs(e,t=L()){return _(t,Ye.agentStatus,{auth:e,timeoutMs:4200})}async function Xa(e,t=L(),o={}){const n=o.includeDataUrl?"?includeDataUrl=true":"";return _(t,`${Ye.devices}${n}`,{auth:e,timeoutMs:6500})}async function Ya(e,t,o=L()){return _(o,Ye.frames,{method:"POST",body:{deviceIds:e,includeThumbnail:!0,includeLive:!0},auth:t,timeoutMs:6500})}async function sa(e,t,o,n=L(),r={}){return _(n,Ye.hostTarget,{method:"POST",body:{nodeId:e,enabled:t,leaseMs:r.leaseMs??6e4},auth:o,timeoutMs:6500})}async function $s(e,t,o=L()){return _(o,Ye.agentConnect,{method:"POST",body:e,auth:t,timeoutMs:3e4})}async function Vs(e="react-remote-monitor",t,o=L()){return _(o,Ye.agentDisconnect,{method:"POST",body:{reason:e},auth:t,timeoutMs:12e3})}async function Qa(e,t,o,n=L()){return _(n,Ns(e),{method:"POST",body:t,auth:o,timeoutMs:12e3})}async function qs(e,t,o=L()){return _(o,Ye.taskBatch,{method:"POST",body:e,auth:t,timeoutMs:16e3})}async function fd(e,t=L()){const o=new URLSearchParams;return o.set("q",e.q),o.set("order",e.order||"relevance"),o.set("publishedWithin",e.publishedWithin||"any"),o.set("videoDuration",e.videoDuration||"any"),o.set("eventType",e.eventType||"any"),o.set("safeSearch",e.safeSearch||"moderate"),e.relevanceLanguage&&o.set("relevanceLanguage",e.relevanceLanguage),e.regionCode&&o.set("regionCode",e.regionCode),e.maxResults&&o.set("maxResults",String(e.maxResults)),e.pageToken&&o.set("pageToken",e.pageToken),_(t,`/api/youtube/search?${o.toString()}`,{timeoutMs:16e3})}function $e(e){return`/api/company-core${e.startsWith("/")?e:`/${e}`}`}async function yd(e,t=L()){return h.emit("companyCore.bridge.request",{method:"GET",path:"/health"}),_(t,$e("/health"),{auth:e,timeoutMs:6500})}async function kd(e,t=L()){return h.emit("companyCore.bridge.request",{method:"GET",path:"/api/companies"}),_(t,$e("/api/companies"),{auth:e,timeoutMs:12e3})}async function vd(e=20,t,o=L()){const n=Math.max(1,Math.min(100,Math.round(e)));return h.emit("companyCore.bridge.request",{method:"GET",path:"/api/company-runs",limit:n}),_(o,$e(`/api/company-runs?limit=${n}`),{auth:t,timeoutMs:12e3})}async function Td(e,t,o=L()){const n=encodeURIComponent(e);return h.emit("companyCore.bridge.request",{method:"GET",path:"/api/companies/:id/snapshot"}),_(o,$e(`/api/companies/${n}/snapshot`),{auth:t,timeoutMs:12e3})}async function Id(e,t,o=L()){const n=encodeURIComponent(e);return h.emit("companyCore.bridge.request",{method:"GET",path:"/api/companies/:id/approvals"}),_(o,$e(`/api/companies/${n}/approvals?pendingOnly=false`),{auth:t,timeoutMs:12e3})}async function Cd(e,t,o=L()){const n=encodeURIComponent(e);return h.emit("companyCore.bridge.request",{method:"GET",path:"/api/companies/:id/artifacts"}),_(o,$e(`/api/companies/${n}/artifacts`),{auth:t,timeoutMs:12e3})}async function xd(e,t,o=L()){const n=encodeURIComponent(e);return h.emit("companyCore.bridge.request",{method:"GET",path:"/api/companies/:id/publishing-jobs"}),_(o,$e(`/api/companies/${n}/publishing-jobs?limit=100`),{auth:t,timeoutMs:12e3})}async function wd(e,t,o=L()){const n=encodeURIComponent(e);return h.emit("companyCore.bridge.request",{method:"GET",path:"/api/companies/:id/growth"}),_(o,$e(`/api/companies/${n}/growth?limit=100`),{auth:t,timeoutMs:12e3})}async function Sd(e,t,o=L()){const n=encodeURIComponent(e);return h.emit("companyCore.bridge.request",{method:"GET",path:"/api/companies/:id/revenue"}),_(o,$e(`/api/companies/${n}/revenue?limit=100`),{auth:t,timeoutMs:12e3})}async function Rd(e,t,o=L()){const n=encodeURIComponent(e);return h.emit("companyCore.bridge.request",{method:"GET",path:"/api/companies/:id/reflections"}),_(o,$e(`/api/companies/${n}/reflections?limit=50`),{auth:t,timeoutMs:12e3})}async function Md(e,t,o=L()){return _(o,"/api/codex/thread/run",{method:"POST",body:e,auth:t,timeoutMs:18e4})}async function Ad(e,t=L()){return _(t,"/api/file/read",{method:"POST",body:{path:e},timeoutMs:3e4})}async function Pd(e,t=L()){const o=new AbortController,n=window.setTimeout(()=>o.abort(),3e4);try{const r=await fetch(`${Yt(t)}/api/file/read-raw?path=${encodeURIComponent(e)}`,{method:"GET",headers:{Accept:"application/octet-stream","Cache-Control":"no-store",Pragma:"no-cache"},cache:"no-store",signal:o.signal});if(!r.ok)throw new Error(`LocalBridge raw file read failed: ${r.status}`);return new Uint8Array(await r.arrayBuffer())}finally{window.clearTimeout(n)}}async function Ed(e,t,o,n=L()){return _(n,"/api/file/write",{method:"POST",body:{path:e,content:t,encoding:"utf8"},auth:o,timeoutMs:3e4})}async function jd(e,t,o,n=L()){const r=new AbortController,s=window.setTimeout(()=>r.abort(),3e4),c=new Headers;c.set("Accept","application/json"),c.set("Content-Type","application/octet-stream"),c.set("Cache-Control","no-store"),c.set("Pragma","no-cache"),c.set(o.header,o.token);try{const i=new ArrayBuffer(t.byteLength);new Uint8Array(i).set(t);const m=await fetch(`${Yt(n)}/api/file/write-raw?path=${encodeURIComponent(e)}`,{method:"PUT",headers:c,body:i,cache:"no-store",signal:r.signal}),f=await m.json().catch(()=>null);if(!m.ok){const k=(f==null?void 0:f.error)||(f==null?void 0:f.message)||`LocalBridge raw file write failed: ${m.status}`;throw new Error(k)}return f}finally{window.clearTimeout(s)}}async function Ld(e,t,o=L()){return _(o,"/api/file/delete",{method:"POST",body:{path:e},auth:t,timeoutMs:3e4})}function Ws(e,t=L()){const o=String(e||"").trim();if(!o)return;if(/^https?:\/\//i.test(o)||o.startsWith("data:"))return o;const n=o.replace(/\\/g,"/").replace(/^\/+/,"");return`${Yt(t)}/${n}`}async function Tn(e){var r;let t=null;if(typeof navigator<"u"&&((r=navigator.clipboard)!=null&&r.writeText))try{return await navigator.clipboard.writeText(e),"clipboard"}catch(s){t=s}if(typeof document>"u"||!document.body||typeof document.execCommand!="function")throw t instanceof Error?t:new Error("clipboard-unavailable");const o=document.createElement("textarea"),n=document.activeElement instanceof HTMLElement?document.activeElement:null;o.value=e,o.setAttribute("readonly",""),o.style.position="fixed",o.style.left="-9999px",o.style.top="0",o.style.opacity="0",document.body.appendChild(o),o.focus(),o.select(),o.setSelectionRange(0,e.length);try{if(!document.execCommand("copy"))throw t instanceof Error?t:new Error("clipboard-unavailable");return"fallback"}finally{o.remove(),n==null||n.focus({preventScroll:!0})}}const Ja="mindexec.app.language",ko="auto",qt=[{code:ko,label:"Auto",nativeLabel:"Auto",englishName:"the user's input language",htmlLang:"auto",isAuto:!0,description:"Match the user's input language unless a prompt asks otherwise."},{code:"en",label:"English",nativeLabel:"English",englishName:"English",htmlLang:"en",isAuto:!1,description:"Prefer English for user-facing AI output."},{code:"ko",label:"Korean",nativeLabel:"한국어",englishName:"Korean",htmlLang:"ko",isAuto:!1,description:"Prefer Korean for user-facing AI output."},{code:"ja",label:"Japanese",nativeLabel:"日本語",englishName:"Japanese",htmlLang:"ja",isAuto:!1,description:"Prefer Japanese for user-facing AI output."},{code:"zh",label:"Chinese",nativeLabel:"中文",englishName:"Chinese",htmlLang:"zh",isAuto:!1,description:"Prefer Chinese for user-facing AI output."}];function Et(e){if(typeof e!="string")return ko;const t=e.trim().toLowerCase();return qt.some(o=>o.code===t)?t:ko}function In(e){const t=Et(e);return qt.find(o=>o.code===t)??qt[0]}function Za(){if(typeof window>"u")return null;try{const e=window.localStorage.getItem(Ja);return e===null?null:Et(e)}catch{return null}}function Nd(e){return Et(Za()??e??ko)}function Dd(e){const t=Et(e);if(typeof window>"u")return t;try{window.localStorage.setItem(Ja,t)}catch{}return t}function Od(e){const t=Za()??Et(e.settings.appLanguage);return{...e,settings:{...e.settings,appLanguage:t}}}function _d(e){const t=In(e);return t.isAuto?"Language preference: match the user's input language unless the user explicitly asks for a different language.":`Language preference: respond in ${t.englishName} unless the user explicitly asks for a different language.`}function Fd(e){const t=In(e);return t.isAuto?"Language preference: if the generated asset includes visible text, captions, labels, or UI copy, match the user's input language unless the prompt explicitly asks for another language.":`Language preference: if the generated asset includes visible text, captions, labels, or UI copy, use ${t.englishName} unless the prompt explicitly asks for another language.`}const Wo=[{id:"general",label:"General",icon:ni},{id:"language",label:"Language",icon:ai},{id:"connection",label:"Connection",icon:ri},{id:"media",label:"Media",icon:Ca},{id:"agent",label:"Agent",icon:ii},{id:"system",label:"System",icon:si},{id:"about",label:"About",icon:li}],Ks=["Managed Cloud","BYOK","OpenAI Codex","Local Ollama"];function Hs(e,t,o){return Number.isFinite(e)?Math.min(o,Math.max(t,Math.round(e))):t}function Bd({settings:e,onPatchSettings:t,onClose:o}){const[n,r]=d.useState("general"),[s,c]=d.useState("idle"),[i,m]=d.useState(null),f=Wo.find(g=>g.id===n)??Wo[0],k=Gi(e),T=Ht(e.model),x=e.aiProvider??"OpenAI Codex",B=Ys(T),w=In(e.appLanguage),z=la("Image",e),ee=la("Video",e),X=Object.fromEntries(qt.map(g=>[g.code,g.isAuto?g.label:`${g.nativeLabel} / ${g.label}`])),P=(g,Q)=>t(g,Q),ke=async()=>{try{const g=await Tn(B);c("copied"),h.emit("settings.providerCommand.copy",{provider:x,command:"dataset-generator",method:g,redacted:!0})}catch(g){if(Qs(i)){c("selected"),h.emit("settings.providerCommand.selectFallback",{provider:x,command:"dataset-generator",message:g instanceof Error?g.message:String(g),redacted:!0});return}c("failed"),h.emit("settings.providerCommand.copyFailed",{provider:x,command:"dataset-generator",message:g instanceof Error?g.message:String(g)})}},F=(g,Q)=>{const pe=ja(g,Q),E=wo(g).find(J=>J.id===pe);if(!E)return;const ve=g==="Image"?e.imageRouterImageAspectPresetId:e.imageRouterVideoAspectPresetId,me=Zo(g,E,ve);P(g==="Image"?{imageRouterImageModel:E.id,imageRouterImageAspectPresetId:me.id}:{imageRouterVideoModel:E.id,imageRouterVideoAspectPresetId:me.id},`media.${g.toLowerCase()}.model`),h.emit("media.model.select",{mode:g,model:E.id,aspectPresetId:me.id,requestedSize:en(me),source:"settings-dialog"})},ue=(g,Q)=>{const pe=g==="Image"?z.model:ee.model,E=Zo(g,pe,Q);P(g==="Image"?{imageRouterImageAspectPresetId:E.id}:{imageRouterVideoAspectPresetId:E.id},`media.${g.toLowerCase()}.aspect`),h.emit("media.aspect.select",{mode:g,model:pe.id,aspectPresetId:E.id,requestedSize:en(E),source:"settings-dialog"})};return a.jsx("div",{className:"ai-settings-backdrop","data-testid":"ai-settings-dialog",onMouseDown:o,children:a.jsxs("section",{className:"ai-settings-dialog","aria-label":"AI settings","data-disable-mindcanvas-hotkeys":"true","data-ai-settings-dialog-surface":"true",onMouseDown:g=>g.stopPropagation(),children:[a.jsx("aside",{className:"ai-settings-tabs","aria-label":"Settings sections",children:Wo.map(g=>{const Q=g.icon;return a.jsxs("button",{type:"button",className:n===g.id?"is-active":"","data-testid":`ai-settings-tab-${g.id}`,onClick:()=>r(g.id),children:[a.jsx(Q,{size:15}),a.jsx("span",{children:g.label})]},g.id)})}),a.jsxs("main",{className:"ai-settings-main",children:[a.jsxs("header",{className:"ai-settings-head",children:[a.jsx("strong",{children:f.label}),a.jsx("button",{type:"button",title:"Close settings",onClick:o,children:a.jsx(xo,{size:16})})]}),a.jsxs("div",{className:"ai-settings-body",children:[n==="general"&&a.jsxs("div",{className:"settings-grid",children:[a.jsx(Ct,{label:"Grid snap",description:"Align new movement to the canvas grid.",checked:e.gridSnap??!0,onChange:g=>P({gridSnap:g},"general.gridSnap")}),a.jsx(Ee,{label:"Grid type",description:"Background grid rendering mode.",value:e.gridType??"dot",options:["dot","line","particles","spirit"],onChange:g=>P({gridType:g},"general.gridType")}),a.jsx(Ee,{label:"Cursor position",description:"Where new nodes are placed by default.",value:e.cursorMode??"center",options:["center","lastNode"],onChange:g=>P({cursorMode:g},"general.cursorMode")}),a.jsx(Ee,{label:"Cursor direction",description:"Direction for sequential node placement.",value:e.cursorDirection,options:["right","down"],onChange:g=>P({cursorDirection:g},"general.cursorDirection")}),a.jsx(Ee,{label:"Camera trace mode",description:"Whether the camera follows new work.",value:e.cameraTraceMode??"none",options:["none","cursor"],onChange:g=>P({cameraTraceMode:g},"general.cameraTraceMode")}),a.jsx(Ee,{label:"Image load size",description:"Image nodes use fixed or original sizing.",value:e.imageLoadSize??"default",options:["default","original"],onChange:g=>P({imageLoadSize:g},"general.imageLoadSize")}),a.jsx(Gt,{label:"AI node width",description:"Default width for new AI task nodes.",value:e.aiNodeDefaultWidth??340,min:220,max:1200,onChange:g=>P({aiNodeDefaultWidth:g},"general.aiNodeDefaultWidth")}),a.jsx(Gt,{label:"AI node height",description:"Default height for new AI task nodes.",value:e.aiNodeDefaultHeight??196,min:120,max:900,onChange:g=>P({aiNodeDefaultHeight:g},"general.aiNodeDefaultHeight")}),a.jsx(Ct,{label:"Show full AI response",description:"Allow AI result nodes to expand for long output.",checked:e.showFullAiResponse??!1,onChange:g=>P({showFullAiResponse:g},"general.showFullAiResponse")}),a.jsx(Ct,{label:"Minimap",description:"Display a small navigation minimap in the bottom-right of the canvas.",checked:e.minimapEnabled??!1,onChange:g=>P({minimapEnabled:g},"general.minimapEnabled")}),a.jsx(Ct,{label:"Mouse wheel mode",description:"Swap wheel zoom and scroll behavior.",checked:e.wheelMode,onChange:g=>P({wheelMode:g},"general.wheelMode")})]}),n==="language"&&a.jsx("div",{className:"settings-grid settings-grid--compact",children:a.jsx(Ee,{label:"App Language",description:`Controls the language preference passed into AI runs. ${w.description}`,value:w.code,options:qt.map(g=>g.code),optionLabels:X,testId:"app-language-select",onChange:g=>P({appLanguage:Et(g)},"language.appLanguage")})}),n==="connection"&&a.jsxs("div",{className:"settings-stack",children:[a.jsx("section",{className:"settings-radio-group","aria-label":"AI Provider",children:Ks.map(g=>a.jsxs("label",{className:x===g?"is-selected":"",children:[a.jsx("input",{type:"radio",name:"ai-provider",checked:x===g,onChange:()=>P({aiProvider:g},"connection.provider")}),a.jsxs("span",{children:[a.jsx("strong",{children:g}),a.jsx("small",{children:er(g)})]})]},g))}),a.jsx(Js,{provider:x,datasetGeneratorCommand:B,copyState:s,onCommandTextAreaRef:m,onCopyDatasetGeneratorCommand:ke}),a.jsxs("div",{className:"settings-grid settings-grid--compact",children:[a.jsx(Ee,{label:"Text model",description:Xs(T),value:T,options:k.map(g=>g.id),optionLabels:Object.fromEntries(k.map(g=>[g.id,`${Pa(g.provider)} · ${g.label}`])),onChange:g=>P({model:g},"connection.model")}),a.jsx(Ee,{label:"Reasoning effort",description:"Mapped to LocalBridge Codex reasoning effort.",value:e.effort,options:["Fast","Normal","Deep"],onChange:g=>P({effort:g},"connection.effort")}),(e.aiProvider??"OpenAI Codex")==="Local Ollama"&&a.jsx(Zs,{label:"Ollama URL",description:"Local Ollama endpoint.",value:e.ollamaEndpoint??"http://localhost:11434",onChange:g=>P({ollamaEndpoint:g},"connection.ollamaEndpoint")}),a.jsx(Ct,{label:"ImageRouter mode",description:"Key material remains outside this React board snapshot.",checked:e.imageRouterEnabled??!1,onChange:g=>P({imageRouterEnabled:g},"connection.imageRouterEnabled")}),a.jsx(Ct,{label:"Parallel insight bundles",description:"Preserves the original CodeMaster insight bundle switch.",checked:e.codeMasterInsightBundlesEnabled??!0,onChange:g=>P({codeMasterInsightBundlesEnabled:g},"connection.codeMasterInsightBundlesEnabled")}),a.jsx(Gt,{label:"Bundle timeout",description:"Per insight bundle timeout in milliseconds.",value:e.codeMasterInsightBundleTimeoutMs??18e3,min:5e3,max:6e4,onChange:g=>P({codeMasterInsightBundleTimeoutMs:g},"connection.codeMasterInsightBundleTimeoutMs")}),a.jsx(Gt,{label:"Retry Count (Std)",description:"Retries for lite and standard CodeMaster insight bundle calls.",value:e.codeMasterInsightBundleRetryCount??2,min:1,max:4,step:1,testId:"codemaster-insight-retry-std",onChange:g=>P({codeMasterInsightBundleRetryCount:g},"connection.codeMasterInsightBundleRetryCount")}),a.jsx(Gt,{label:"Retry Count (Deep)",description:"Retries for deep CodeMaster insight bundle calls.",value:e.codeMasterInsightBundleRetryCountDeep??3,min:1,max:5,step:1,testId:"codemaster-insight-retry-deep",onChange:g=>P({codeMasterInsightBundleRetryCountDeep:g},"connection.codeMasterInsightBundleRetryCountDeep")})]}),a.jsxs("div",{className:"settings-note",children:[a.jsx(na,{size:15}),a.jsx("span",{children:"API keys are intentionally not stored in this React board. Live provider adapters must supply and verify secrets separately."})]})]}),n==="media"&&a.jsxs("div",{className:"settings-stack","data-testid":"ai-settings-media-tab",children:[a.jsx(ca,{mode:"Image",icon:a.jsx(Ca,{size:17}),selection:z,onModelChange:g=>F("Image",g),onAspectChange:g=>ue("Image",g)}),a.jsx(ca,{mode:"Video",icon:a.jsx(ci,{size:17}),selection:ee,onModelChange:g=>F("Video",g),onAspectChange:g=>ue("Video",g)}),a.jsxs("div",{className:"settings-note",children:[a.jsx(na,{size:15}),a.jsx("span",{children:"These are adapter hints only. Selecting a media model does not store an API key, invoke ImageRouter, or claim live generation availability."})]})]}),n==="agent"&&a.jsx("div",{className:"settings-grid settings-grid--compact",children:a.jsx(Ee,{label:"Direct instruction queue",description:"How selected agents receive direct instructions.",value:e.directInstructionQueueMode??"Append",options:["Append","Next","ReplacePending"],onChange:g=>P({directInstructionQueueMode:g},"agent.directInstructionQueueMode")})}),n==="system"&&a.jsxs("div",{className:"settings-grid settings-grid--compact",children:[a.jsx(Ee,{label:"Execution mode",description:"Concept parses IR locally; PureLLM is direct chat adapter mode.",value:e.executionMode??"Concept",options:["Concept","PureLLM"],onChange:g=>P({executionMode:g},"system.executionMode")}),a.jsxs("div",{className:"settings-note",children:[a.jsx(di,{size:15}),a.jsx("span",{children:"Changing this setting affects the next run only. It does not claim a live agent has executed."})]})]}),n==="about"&&a.jsxs("div",{className:"settings-about",children:[a.jsx(ui,{size:34}),a.jsx("strong",{children:"MindExec React"}),a.jsx("span",{children:"Fast local-first MindCanvas shell, rebuilt without Blazor in the render loop."}),a.jsx("small",{children:"AI settings parity slice"})]})]}),a.jsx("footer",{className:"ai-settings-footer",children:a.jsx("button",{type:"button","data-testid":"ai-settings-done",onClick:o,children:"Save"})})]})]})})}function la(e,t){const o=Jo(e,t),n=e==="Image"?t.imageRouterImageAspectPresetId:t.imageRouterVideoAspectPresetId,r=Zo(e,o,n);return{model:o,aspect:r,aspectOptions:La(o,e),requestedSize:en(r)}}function Xs(e){const t=_i(e);return t?`${Pa(t.provider)} text model used by bottom input and AI Task runs.`:"Custom text model id preserved with this board."}function er(e){switch(e){case"Managed Cloud":return"Reserved for the hosted paid adapter.";case"BYOK":return"Use a separately configured user key.";case"Local Ollama":return"Local LLM server endpoint.";case"Gemini CLI":return"Hidden Gemini CLI compatibility path.";case"OpenAI Codex":default:return"LocalBridge Codex execution path."}}function Ys(e){return["dotnet run --project MindExecution.Tools -c Debug -- --count 50 --out finetune_dataset.jsonl","--baseUrl https://openrouter.ai/api/v1",`--model "${(e.trim()||"openai/gpt-4o-mini").replace(/"/g,'\\"')}"`,'--key "OPENROUTER_API_KEY"',"--httpReferer http://localhost",'--xTitle "MindExec DatasetGenerator"'].join(" ")}function Qs(e){return!e||e.value.length===0?!1:(e.focus({preventScroll:!0}),e.select(),e.setSelectionRange(0,e.value.length),!0)}function Js({provider:e,datasetGeneratorCommand:t,copyState:o,onCommandTextAreaRef:n,onCopyDatasetGeneratorCommand:r}){const s=e==="BYOK"?"BYOK Settings":e==="Local Ollama"?"Ollama Settings":e==="Managed Cloud"?"Managed Cloud":e==="Gemini CLI"?"Gemini CLI":"OpenAI Codex";return a.jsxs("section",{className:"settings-provider-card","data-testid":"ai-settings-provider-guidance","data-provider":e,children:[a.jsx("header",{children:a.jsxs("div",{children:[a.jsx("strong",{"data-testid":"ai-settings-provider-title",children:s}),a.jsx("span",{children:er(e)})]})}),e==="Managed Cloud"&&a.jsx("div",{className:"settings-provider-card__notice",children:"Managed Cloud is coming soon in this build. Switch to BYOK, OpenAI Codex, or Local Ollama for local execution."}),e==="Gemini CLI"&&a.jsx("div",{className:"settings-provider-card__notice","data-testid":"ai-settings-gemini-hidden-provider",children:"Gemini CLI is hidden in this company build. Switch to BYOK, OpenAI Codex, or Local Ollama to manage connection settings here."}),e==="BYOK"&&a.jsxs("div",{className:"settings-provider-card__section",children:[a.jsx("p",{children:"API key material stays outside this React board. Configure the BYOK adapter or environment before running live OpenRouter calls."}),a.jsxs("div",{className:"settings-provider-card__command-head",children:[a.jsx("strong",{children:"DatasetGenerator Export"}),a.jsx("button",{type:"button","data-testid":"ai-settings-provider-copy-command","data-provider-copy-state":o,onClick:()=>void r(),children:o==="copied"?"Copied":o==="selected"?"Selected":o==="failed"?"Copy failed":"Copy command"})]}),a.jsx("textarea",{readOnly:!0,ref:n,value:t,"data-testid":"ai-settings-provider-dataset-command",className:"settings-provider-card__command","aria-label":"Redacted DatasetGenerator command"}),a.jsx("div",{className:"settings-provider-card__note",children:"This command is redacted; no API key is stored in the board. Replace OPENROUTER_API_KEY only in a trusted shell."})]}),e==="OpenAI Codex"&&a.jsxs("div",{className:"settings-provider-card__section",children:[a.jsx("strong",{children:"Connection Requirements"}),a.jsxs("ol",{children:[a.jsxs("li",{children:["Install MindExec LocalBridge dependencies: ",a.jsx("code",{children:"npm install"})]}),a.jsxs("li",{children:["Sign in once: ",a.jsx("code",{children:"codex login"})]}),a.jsx("li",{children:"Runtime: Codex SDK first, Legacy Exec fallback when SDK is unavailable."})]})]}),e==="Local Ollama"&&a.jsxs("div",{className:"settings-provider-card__section",children:[a.jsx("p",{children:"Ollama model selection is handled from the bottom AI input bar. Keep the local endpoint editable below."}),a.jsxs("div",{className:"settings-provider-card__note",children:["Requires ",a.jsx("code",{children:'OLLAMA_ORIGINS="*"'})," when running Ollama for browser access."]})]}),a.jsxs("div",{className:"settings-provider-card__section settings-provider-card__section--image",children:[a.jsx("strong",{children:"Image Generation"}),a.jsx("p",{children:"Text AI provider and image generation provider are configured separately. ImageRouter API key is adapter-owned and used only for image mode."}),a.jsx("span",{children:"ImageRouter API key: not stored in this React board."})]})]})}function ca({mode:e,icon:t,selection:o,onModelChange:n,onAspectChange:r}){const s=wo(e),c=Object.fromEntries(s.map(m=>[m.id,`${m.provider} · ${m.label}`])),i=Object.fromEntries(o.aspectOptions.map(m=>[m.id,`${m.label} · ${m.resolvedSize??"auto"}`]));return a.jsxs("section",{className:"settings-media-section","data-testid":`ai-settings-media-${e.toLowerCase()}`,children:[a.jsxs("header",{children:[a.jsx("span",{className:"settings-media-section__icon",children:t}),a.jsxs("span",{children:[a.jsxs("strong",{children:[e," defaults"]}),a.jsxs("small",{children:[o.model.provider," · ",o.requestedSize]})]})]}),a.jsxs("div",{className:"settings-grid settings-grid--compact",children:[a.jsx(Ee,{label:`${e} model`,description:"Shared with the bottom input model selector.",value:o.model.id,options:s.map(m=>m.id),optionLabels:c,testId:`ai-settings-${e.toLowerCase()}-model`,onChange:n}),a.jsx(Ee,{label:`${e} aspect`,description:o.aspect.note,value:o.aspect.id,options:o.aspectOptions.map(m=>m.id),optionLabels:i,testId:`ai-settings-${e.toLowerCase()}-aspect`,swatchClassName:Hi(o.aspect.id),onChange:r})]})]})}function Ct({label:e,description:t,checked:o,onChange:n}){return a.jsxs("label",{className:"setting-row setting-row--toggle",children:[a.jsxs("span",{children:[a.jsx("strong",{children:e}),a.jsx("small",{children:t})]}),a.jsx("input",{type:"checkbox",checked:o,onChange:r=>n(r.target.checked)})]})}function Ee({label:e,description:t,value:o,options:n,optionLabels:r,testId:s,swatchClassName:c,onChange:i}){return a.jsxs("label",{className:"setting-row",children:[a.jsxs("span",{children:[a.jsx("strong",{children:e}),a.jsx("small",{children:t})]}),a.jsxs("span",{className:"setting-row__select-wrap",children:[c&&a.jsx("span",{className:`aspect-select__swatch ${c}`}),a.jsx("select",{value:o,"data-testid":s,onChange:m=>i(m.target.value),children:n.map(m=>a.jsx("option",{value:m,children:(r==null?void 0:r[m])??m},m))})]})]})}function Gt({label:e,description:t,value:o,min:n,max:r,step:s=1,testId:c,onChange:i}){return a.jsxs("label",{className:"setting-row",children:[a.jsxs("span",{children:[a.jsx("strong",{children:e}),a.jsx("small",{children:t})]}),a.jsx("input",{type:"number",min:n,max:r,step:s,"data-testid":c,value:o,onChange:m=>i(Hs(m.target.valueAsNumber,n,r))})]})}function Zs({label:e,description:t,value:o,onChange:n}){return a.jsxs("label",{className:"setting-row",children:[a.jsxs("span",{children:[a.jsx("strong",{children:e}),a.jsx("small",{children:t})]}),a.jsx("input",{type:"text",value:o,onChange:r=>n(r.target.value.slice(0,160))})]})}const el=1e3,da=1536*1024,tl=3*1024*1024*3/4,ol=24,nl=.65,al=16,rl=.92;function vo(e){if(e.byteLength<5)return null;try{const o=new DataView(e).getUint32(0,!1);if(o<2||o>e.byteLength-4)return null;const n=new TextDecoder().decode(new Uint8Array(e,4,o));return{metadata:il(JSON.parse(n)),payload:e.slice(4+o)}}catch{return null}}function il(e){const t=sl(e)?e:{};return{type:Pe(t.type)||"remote.frame.binary",kind:Pe(t.kind)||"live",deviceId:Pe(t.deviceId),frameSeq:be(t.frameSeq),streamId:Pe(t.streamId),width:be(t.width),height:be(t.height),mimeType:Pe(t.mimeType)||"image/jpeg",mode:Pe(t.mode),fps:be(t.fps),capturedAt:Pe(t.capturedAt),receivedAt:Pe(t.receivedAt),byteLength:be(t.byteLength),transport:Pe(t.transport),contentHash:Pe(t.contentHash),captureMs:be(t.captureMs),sameContentStreak:be(t.sameContentStreak),droppedByAgent:be(t.droppedByAgent),dirtyRectCount:ll(t.dirtyRectCount??t.dirtyRects??t.dirtyRegionCount),dirtyPixelRatio:or(t.dirtyPixelRatio??t.dirtyRatio??t.dirtyAreaRatio??t.changedPixelRatio),codec:Pe(t.codec??t.encoder??t.encoding),deltaEncoded:nr(t.deltaEncoded??t.isDeltaEncoded??t.deltaFrame)}}function tr(e,t=0){const o=be(e.captureMs),n=Math.max(be(e.byteLength),be(t)),r=be(e.sameContentStreak),s=be(e.droppedByAgent),c=be(e.dirtyRectCount),i=or(e.dirtyPixelRatio),m=Pe(e.codec),f=nr(e.deltaEncoded),k={captureMs:o,byteLength:n,sameContentStreak:r,droppedByAgent:s,dirtyRectCount:c,dirtyPixelRatio:i,codec:m,deltaEncoded:f};return n>=tl?{level:"oversized-frame",overBudget:!0,reason:"RemoteFast frame is near the agent binary frame ceiling.",...k}:o>=el?{level:"slow-capture",overBudget:!0,reason:"RemoteFast reported a slow screen capture.",...k}:i>=rl&&n>=da?{level:"inefficient-full-frame",overBudget:!0,reason:"RemoteFast dirty-region metadata shows a near-full-frame update with a large payload.",...k}:i>=nl&&c>=al?{level:"dirty-region-heavy",overBudget:!0,reason:"RemoteFast dirty-region metadata shows many changed regions in one frame.",...k}:n>=da?{level:"large-frame",overBudget:!0,reason:"RemoteFast frame payload is large enough to create decode or transport pressure.",...k}:r>=ol?{level:"stable-duplicate",overBudget:!1,reason:"RemoteFast reports repeated identical content that may be eligible for future delta or skip optimization.",...k}:{level:"nominal",overBudget:!1,reason:"",...k}}function sl(e){return!!(e&&typeof e=="object"&&!Array.isArray(e))}function Pe(e){return typeof e=="string"?e:typeof e=="number"||typeof e=="boolean"?String(e):""}function be(e){const t=Number(e);return Number.isFinite(t)&&t>=0?t:0}function ll(e){return Array.isArray(e)?e.length:Math.round(be(e))}function or(e){const t=be(e);return t<=1?t:t<=100?t/100:1}function nr(e){return typeof e=="boolean"?e:typeof e=="number"?e>0:typeof e=="string"?/^(1|true|yes|on|delta)$/i.test(e.trim()):!1}function ar(e){const t=He(e.deviceId,256),o=cl({...e.input,controlLeaseId:e.input.controlLeaseId||e.controlLeaseId});return!t||!o.type?null:{type:"input",requestId:He(e.requestId,160),deviceId:t,ack:dl(o.type,e.ack),input:o}}function cl(e={}){const t=Number(e.normalizedX),o=Number(e.normalizedY),n=Number(e.deltaX),r=Number(e.deltaY);return{type:He(e.type,48),normalizedX:Number.isFinite(t)?rt(t,0,1):void 0,normalizedY:Number.isFinite(o)?rt(o,0,1):void 0,button:He(e.button,24),deltaX:Number.isFinite(n)?rt(n,-4096,4096):0,deltaY:Number.isFinite(r)?rt(r,-4096,4096):0,key:He(e.key,80),code:He(e.code,80),text:pl(e.text,256),repeat:e.repeat===!0,controlLeaseId:He(e.controlLeaseId,128),issuedAt:He(e.issuedAt,80)}}function dl(e,t){return t===!0||!/^pointermove$/i.test(String(e||"").trim())}function rr(e){let t;try{const n=typeof e=="string"?JSON.parse(e||"{}"):e;if(!ir(n))return null;t=n}catch{return null}const o=xt(t.type||t.Type);return o==="RemoteInputSocketReady"?{type:o,ok:!0,requestId:"",deviceId:"",inputType:"",commandId:"",error:""}:o!=="RemoteInputResult"&&o!=="RemoteInputError"?null:{type:o,ok:t.ok===!0||t.Ok===!0,requestId:xt(t.requestId||t.RequestId),deviceId:xt(t.deviceId||t.DeviceId),inputType:xt(t.inputType||t.InputType),commandId:xt(t.commandId||t.CommandId),error:xt(t.error||t.Error)}}function ul(e,t,o,n=!1){if(!ua(t))return null;const r=ua(o)?o:{left:0,top:0,width:t.width,height:t.height};let s=Number(e.clientX)-t.left-r.left,c=Number(e.clientY)-t.top-r.top;return!Number.isFinite(s)||!Number.isFinite(c)||(s<0||c<0||s>r.width||c>r.height)&&!n?null:(s=rt(s,0,r.width),c=rt(c,0,r.height),{normalizedX:rt(s/r.width,0,1),normalizedY:rt(c/r.height,0,1)})}function rt(e,t,o){return Math.max(t,Math.min(o,e))}function ua(e){if(!ir(e))return!1;const t=Number(e.width),o=Number(e.height);return Number.isFinite(Number(e.left))&&Number.isFinite(Number(e.top))&&Number.isFinite(t)&&Number.isFinite(o)&&t>0&&o>0}function He(e,t){return String(e??"").replace(/\0/g,"").trim().slice(0,t)}function pl(e,t){return He(e,t)}function xt(e){return typeof e=="string"?e:typeof e=="number"||typeof e=="boolean"?String(e):""}function ir(e){return!!(e&&typeof e=="object"&&!Array.isArray(e))}function ml(e,t){const o=Math.max(1,Math.floor(t.visibleBudget)),n=t.searchText.trim(),r=n.length>0||t.visibilityFilter!=="connected"||t.capabilityFilter!=="all",s=hl(e,t.visibilityFilter,n,t.capabilityFilter),c=gl(s,t.groupMode),i=c.length,m=Math.max(1,Math.ceil(Math.max(0,i)/o)),f=Number.isFinite(t.pageIndex)?Math.floor(t.pageIndex):0,k=Math.max(0,Math.min(f,m-1)),T=k*o,x=c.slice(T,T+o),B=x.map(it).filter(Boolean),w=x.filter(P=>P.connected===!0).map(it).filter(Boolean),z=new Set(x.map(P=>on(P,t.groupMode))).size,ee=c.filter(P=>P.connected===!0&&_e(P,"taskDispatch")).map(it).filter(Boolean),X=c.filter(P=>P.connected===!0&&_e(P,"taskDispatch")&&_e(P,"aiAssist")).map(it).filter(Boolean);return{filterActive:r,filteredDevices:s,projectedDevices:c,visibleDevices:x,visibleDeviceIds:B,visibleConnectedDeviceIds:w,frameSubscriptionDeviceIdSignature:w.join(","),visibleGroupCount:z,projectedCount:i,filteredCount:s.length,pageCount:m,pageIndex:k,pageStart:T,placeholderSlots:Math.max(0,o-x.length),taskDispatchDeviceIds:ee,aiTaskDeviceIds:X}}function hl(e,t,o,n){const r=o.trim().toLocaleLowerCase();return e.filter(s=>bl(s,t)&&fl(s,n)&&yl(s,r))}function gl(e,t){return[...e].sort((o,n)=>{const r=on(o,t),s=on(n,t);if(r!==s)return r.localeCompare(s);const c=nn(o).toLocaleLowerCase(),i=nn(n).toLocaleLowerCase();return c!==i?c.localeCompare(i):it(o).localeCompare(it(n))})}function on(e,t){switch(t){case"activity":return lr(e);case"platform":return sr(e).toLocaleLowerCase()||"unknown";case"capability":return cr(e);default:return e.connected===!0?"online":"offline"}}function it(e){return String(e.deviceId||e.sessionId||e.deviceName||"").trim()}function nn(e){return String(e.deviceName||e.hostname||it(e)||"Remote device").trim()}function sr(e){var t;return String(((t=e.status)==null?void 0:t.platform)||e.platform||"unknown").trim()}function _e(e,t){var n;const o=(n=e.capabilities)==null?void 0:n[t];return typeof o=="boolean"?o:typeof o=="number"?o!==0:typeof o=="string"?/^(1|true|yes|on)$/i.test(o):!1}function bl(e,t){return t==="all"?!0:t==="offline"?e.connected!==!0:e.connected===!0}function fl(e,t){switch(t){case"control":return _e(e,"control");case"task":return _e(e,"taskDispatch");case"ai":return _e(e,"aiAssist");default:return!0}}function yl(e,t){var n;return t?[it(e),nn(e),sr(e),an(e.arch),an((n=e.latestTask)==null?void 0:n.status),lr(e),cr(e),e.connected===!0?"online live connected":"offline disconnected"].join(" ").toLocaleLowerCase().includes(t):!0}function lr(e){var o,n,r,s;const t=an((o=e.latestTask)==null?void 0:o.status).toLocaleLowerCase();return t==="running"||t==="queued"?`task-${t}`:((n=e.activeLiveStream)==null?void 0:n.active)===!0?"live":Number(((r=e.counters)==null?void 0:r.liveFramesReceived)||0)>0?"live-recent":Number(((s=e.counters)==null?void 0:s.thumbnailFramesReceived)||0)>0?"thumbnail":e.lastStatusAt||e.lastSeenAt?"heartbeat":"idle"}function cr(e){return _e(e,"aiAssist")?"ai-assist":_e(e,"taskDispatch")?"task-dispatch":_e(e,"control")?"control":_e(e,"thumbnail")||_e(e,"screen")?"screen":"view-only"}function an(e){return typeof e=="string"?e:typeof e=="number"||typeof e=="boolean"?String(e):""}const we=30,kl=1200,vl=4200,pa=12,dr=8e3,Tl=1.5,ur=42,ma="mindexec:remote-monitor-input-smoke",Ko="connected-screen-wall",rn=90,pr=240,mr=1e4,Ut=6e4,uo=25e3,Il=250,bo=2e3,St=60,ha=2,Cl=96,xl=58,zt=[1,1.5,2.25,3.375],ga=1,ba="240px",sn="MindExec.RemoteFleet.AutoHost",ln="MindExec.RemoteFleet.AutoHostNodeId",hr=["status","activity","platform","capability"],gr=["connected","all","offline"],br=["all","control","task","ai"],Rt=new Map,Qt=new WeakMap;function fa(e,t=0){if(typeof window>"u")return!0;const o=window.innerWidth||document.documentElement.clientWidth||0,n=window.innerHeight||document.documentElement.clientHeight||0;return o<=0||n<=0?!0:e.right>=-t&&e.bottom>=-t&&e.left<=o+t&&e.top<=n+t}function fr(e,t,o){const[n,r]=d.useState(()=>typeof document>"u"?!0:document.visibilityState==="visible"),[s,c]=d.useState(!0),i=d.useRef(null);d.useEffect(()=>{if(typeof document>"u")return;const f=()=>r(document.visibilityState==="visible");return f(),document.addEventListener("visibilitychange",f),()=>document.removeEventListener("visibilitychange",f)},[]),d.useEffect(()=>{const f=e.current;if(!f||typeof IntersectionObserver>"u"){c(!0);return}const k=new IntersectionObserver(T=>{const x=T[0],B=!!(x!=null&&x.isIntersecting||((x==null?void 0:x.intersectionRatio)??0)>0),w=fa(x?x.boundingClientRect:f.getBoundingClientRect(),240);c(B||w)},{root:null,rootMargin:ba,threshold:0});return k.observe(f),()=>k.disconnect()},[e]);const m=n&&s;return d.useEffect(()=>{if(i.current===m)return;i.current=m;const f={nodeId:t,visible:m,pageVisible:n,viewportVisible:s,rootMargin:ba};o==="monitor"?h.emit("remoteMonitor.node.transportVisibility",f):h.emit("remoteControl.node.transportVisibility",f)},[t,n,o,s,m]),m}function Gd({node:e,onPatch:t,onCreateRemoteControl:o}){var $n,Vn,qn,Wn,Kn,Hn,Xn,Yn,Qn,Jn,Zn,ea;const n=cn(($n=e.metadata)==null?void 0:$n.RemoteTotal,we),r=cn((Vn=e.metadata)==null?void 0:Vn.RemoteConnected,0),s=d.useRef(null),c=fr(s,e.id,"monitor"),[i,m]=d.useState(()=>({source:At()?"loading":"blocked",loading:!1,message:At()?"RemoteHub not checked yet.":"Hosted LocalBridge access is gated.",baseUrl:L(),devices:po(n,r)})),f=d.useRef(new Map),k=d.useRef(new Set),T=d.useRef(new Map),x=d.useRef(new Map),B=d.useRef(new Map),w=d.useRef(null),z=d.useRef(0),ee=d.useRef(0),X=d.useRef(0),P=d.useRef(!1),ke=d.useRef(0),F=d.useRef(0),ue=d.useRef(!1),g=d.useRef(!1),Q=d.useRef(!1),pe=d.useRef(""),E=d.useRef(0),ve=d.useRef(""),me=d.useRef(0),J=d.useRef(e.metadata??{}),[Ve,qe]=d.useState(""),[Z,R]=d.useState(!1),[Se,ae]=d.useState("locked"),[j,U]=d.useState("Remote input locked."),[te,ie]=d.useState(""),[ut,Qe]=d.useState(""),[Po,je]=d.useState(""),[fe,jt]=d.useState(""),[Fe,Le]=d.useState(""),[Je,Be]=d.useState(""),[yt,Ze]=d.useState(0),[et,Eo]=d.useState(ga),[Ge,jo]=d.useState("status"),[Jt,Lo]=d.useState(""),[Ne,Zt]=d.useState("connected"),[Re,eo]=d.useState("all"),[he,pt]=d.useState(()=>Ho(e.id)),tt=i.source==="bridge"?i.devices.length:i.devices.length||n,De=Jt.trim(),se=d.useMemo(()=>ml(i.devices,{groupMode:Ge,visibilityFilter:Ne,searchText:De,capabilityFilter:Re,pageIndex:yt,visibleBudget:we}),[Re,Ge,yt,De,i.devices,Ne]),kt=se.filterActive,Lt=se.filteredDevices,y=se.projectedDevices,C=se.projectedCount,A=se.pageCount,N=se.pageIndex,$=se.pageStart,D=se.visibleDevices,O=se.visibleDeviceIds,W=se.visibleConnectedDeviceIds,Y=se.frameSubscriptionDeviceIdSignature,We=se.visibleGroupCount,vt=se.placeholderSlots,mt=`${N+1}/${A}`,Pn=A<=1?100:Math.max(12,100/A),jr=A<=1?0:N/Math.max(1,A-1)*(100-Pn),Nt=zt[et]??zt[ga],En=Math.round(Cl*Nt),jn=Math.round(xl*Nt),oe=d.useMemo(()=>D.find(l=>at(l)===Ve)||D.find(l=>l.connected===!0)||D[0],[Ve,D]),K=oe?at(oe):"",Dt=i.devices.filter(l=>l.connected===!0).length,No=i.devices.reduce((l,p)=>{var u;return l+Number(((u=p.counters)==null?void 0:u.tasksQueued)||0)},0),to=se.taskDispatchDeviceIds,oo=se.aiTaskDeviceIds,Do=to.length,Ot=oo.length,Oo=i.source==="bridge"?(qn=i.hub)!=null&&qn.started?"Online":((Wn=i.hub)==null?void 0:Wn.enabled)===!1?"Off":"Ready":i.source==="blocked"?"Gated":i.source,no=i.source==="bridge"?"Local":i.source==="blocked"?"Gated":"Preview",_o=za((Kn=i.bridge)==null?void 0:Kn.status),Fo=$a((Hn=i.bridge)==null?void 0:Hn.status),Ln=i.source==="bridge"&&!!Fo,Nn=oe?de(oe,"control"):!1,Bo=oe?de(oe,"taskDispatch"):!1,ot=d.useMemo(()=>oe?i.source!=="bridge"?"LocalBridge is not connected.":Ln?oe.connected!==!0?"Selected device is offline.":Nn?"":"RemoteAgent control capability is disabled.":"Remote input adapter is unavailable.":"No screen selected.",[Ln,Nn,oe,i.source]),Me=ot==="",Go=Z?Ir(Se):Me?"Locked":"Off",re=i.source==="bridge"&&((Xn=i.hub)==null?void 0:Xn.hostTargetActive)===!0&&i.hub.hostTargetNodeId===e.id,ne=d.useMemo(()=>Rl(i.hub,re),[re,i.hub]),_t=Dl(i.agent,i.source),ao=wr(i.agent),Uo=Sr(i.agent),Ft=d.useMemo(()=>jl(i.hub,e.id),[e.id,i.hub]),ro=Ol({source:i.source,hasAuth:!!i.auth,isHostActiveForNode:re,request:Ft,busy:ut}),io=ro==="",so=i.source==="bridge"&&!!i.auth&&ao&&!ut,Dn=i.source==="bridge"&&!!K&&(oe==null?void 0:oe.connected)===!0&&Bo&&!!fe.trim()&&!Fe,On=i.source==="bridge"&&Do>0&&!!fe.trim()&&!Fe,_n=i.source==="bridge"&&Ot>0&&!!fe.trim()&&!Fe,Lr=Je||Po||te||(i.source==="bridge"&&oe?`${gt(oe)}: ${j}`:i.message),Fn=d.useMemo(()=>Pl(i.latestTaskBatch,i.recentTaskBatches),[i.latestTaskBatch,i.recentTaskBatches]),Te=El(Fn),ht=i.source==="bridge"&&!!(Fn&&Te);d.useEffect(()=>{J.current=e.metadata??{}},[e.metadata]);const Bn=d.useCallback((l,p)=>{const u=J.current??{},b=Object.entries(p).filter(([S,M])=>u[S]!==M).map(([S])=>S);if(b.length===0)return;const v={...u,...p};J.current=v,t(e.id,{metadata:v}),h.emit("remoteMonitor.node.metadata.patch",{nodeId:e.id,reason:l,keys:b})},[e.id,t]);d.useEffect(()=>{i.loading||Bn("snapshot",Sl({source:i.source,hub:i.hub,baseUrl:i.baseUrl,hubLabel:Oo,routeLabel:no,connected:Dt,total:tt,taskCount:No,taskDispatchCount:Do,aiCount:Ot,pageLabel:mt,pageStart:$,pageIndex:N,pageCount:A,projectionMode:Ko,projectedCount:C,visibleBudget:we,selectedDeviceId:K,inputLabel:Go,devices:i.devices,latestTaskBatch:i.latestTaskBatch,recentTaskBatches:i.recentTaskBatches,taskFollowActive:ht,taskFollowKey:Te,isHostActiveForNode:re,registryRouteInfo:ne,hostTargetRenewMs:re?uo:0,autoHostEnabled:he,agent:i.agent,agentStatusLabel:_t,agentRunning:ao,agentReady:Uo,message:i.message}))},[Ot,he,N,Dt,Uo,ao,_t,Oo,Go,re,A,mt,$,Bn,C,ne,no,K,i.agent,i.baseUrl,i.devices,i.hub,i.latestTaskBatch,i.loading,i.message,i.recentTaskBatches,i.source,ht,Te,No,Do,tt]),d.useEffect(()=>{yt!==N&&Ze(N)},[N,yt]),d.useEffect(()=>{const l=new Set(O);for(const p of f.current.keys())l.has(p)||f.current.delete(p)},[O]),d.useEffect(()=>{h.emit("remoteMonitor.node.frameSubscription",{nodeId:e.id,deviceCount:c?W.length:0,visibleDeviceCount:W.length,transportVisible:c,pageIndex:N,pageStart:$,visibleBudget:we,transportKey:Y})},[N,e.id,$,c,W.length,Y]),d.useEffect(()=>{if(i.source!=="bridge")return;const l=[ne.status,ne.reason,ne.accountRouteReady?"ready":"local",ne.migrationBlocked?"migration":"",re?"hosting":"inactive"].join("|");ve.current!==l&&(ve.current=l,h.emit("remoteMonitor.node.registryRoute",{nodeId:e.id,status:ne.status,reason:ne.reason,accountRouteReady:ne.accountRouteReady,migrationBlocked:ne.migrationBlocked,hostTargetActive:re}))},[re,e.id,ne,i.source]),d.useEffect(()=>{pt(Ho(e.id))},[e.id]);const Gn=d.useCallback((l,p)=>{l.stopPropagation(),Ze(u=>{const b=Math.max(0,Math.min(A-1,u+p));return b!==u&&h.emit("remoteMonitor.node.page",{nodeId:e.id,from:u,to:b,pageCount:A,visibleBudget:we}),b})},[e.id,A]),Un=d.useCallback((l,p)=>{l.preventDefault(),l.stopPropagation(),Eo(u=>{const b=Math.max(0,Math.min(zt.length-1,u+p));return b!==u&&h.emit("remoteMonitor.node.tileScale",{nodeId:e.id,from:u,to:b,scale:zt[b],visibleBudget:we}),b})},[e.id]),Nr=d.useCallback(l=>{l.stopPropagation();const p=_l(l.target.value);jo(u=>u===p?u:(h.emit("remoteMonitor.node.groupMode",{nodeId:e.id,from:u,to:p,projectedCount:y.length,visibleBudget:we}),p)),Ze(0)},[y.length,e.id]),Dr=d.useCallback(l=>{l.stopPropagation();const p=l.target.value.slice(0,64);Lo(u=>u===p?u:(h.emit("remoteMonitor.node.filter",{nodeId:e.id,reason:"search",searchText:p.trim(),visibilityFilter:Ne,capabilityFilter:Re,projectedCount:y.length,visibleBudget:we}),p)),Ze(0)},[Re,y.length,e.id,Ne]),Or=d.useCallback(l=>{l.stopPropagation();const p=Fl(l.target.value);Zt(u=>u===p?u:(h.emit("remoteMonitor.node.filter",{nodeId:e.id,reason:"visibility",searchText:De,from:u,to:p,visibilityFilter:p,capabilityFilter:Re,projectedCount:y.length,visibleBudget:we}),p)),Ze(0)},[Re,y.length,e.id,De]),_r=d.useCallback(l=>{l.stopPropagation();const p=Bl(l.target.value);eo(u=>u===p?u:(h.emit("remoteMonitor.node.filter",{nodeId:e.id,reason:"capability",searchText:De,visibilityFilter:Ne,from:u,to:p,capabilityFilter:p,projectedCount:y.length,visibleBudget:we}),p)),Ze(0)},[y.length,e.id,De,Ne]),Fr=d.useCallback((l,p)=>{l.stopPropagation();const u=at(p);if(!u||!o)return;const b=$t(p);o({sourceNodeId:e.id,deviceId:u,deviceName:gt(p),platform:Wt(p),connected:p.connected===!0,baseUrl:i.baseUrl,framePath:b==null?void 0:b.framePath,frameUrl:b==null?void 0:b.frameUrl,dataUrl:b==null?void 0:b.dataUrl,frameSeq:b==null?void 0:b.frameSeq}),h.emit("remoteMonitor.node.controlNode.create",{nodeId:e.id,deviceId:u,source:i.source})},[e.id,o,i.baseUrl,i.source]),le=d.useCallback(async(l="manual")=>{const p=++me.current,u=L();if(m(b=>({...b,loading:!0,baseUrl:u})),!At()){const b=po(n,r);m({source:"blocked",loading:!1,message:"Hosted LocalBridge access is gated.",baseUrl:u,devices:b}),h.emit("remoteMonitor.node.preview",{nodeId:e.id,reason:"hosted-localbridge-gated",total:b.length});return}try{const b=await vn(u);if(p!==me.current)return;if(b.state!=="connected"){const Ie=po(n,r);m({source:"unavailable",loading:!1,message:b.message||"LocalBridge is unavailable.",baseUrl:u,bridge:b,devices:Ie}),h.emit("remoteMonitor.node.preview",{nodeId:e.id,reason:"localbridge-unavailable",total:Ie.length});return}const v=Ka(b.status),S=zs(v,u).catch(Ie=>{h.emit("remoteMonitor.node.agent.status",{nodeId:e.id,reason:l,ok:!1,error:Ie instanceof Error?Ie.message:String(Ie)})}),[M,V,G]=await Promise.all([Ha(v,u),Xa(v,u,{includeDataUrl:!1}),S]);if(p!==me.current)return;const ge=Array.isArray(V.devices)?V.devices:[];m({source:"bridge",loading:!1,message:M.started?"RemoteHub online.":M.enabled===!1?M.lastError||"RemoteHub adapter is not configured.":"RemoteHub available.",baseUrl:u,bridge:b,auth:v,hub:M,agent:G,latestTaskBatch:V.latestTaskBatch,recentTaskBatches:Array.isArray(V.recentTaskBatches)?V.recentTaskBatches:[],devices:ge}),h.emit("remoteMonitor.node.refresh",{nodeId:e.id,reason:l,total:V.total??ge.length,connected:ge.filter(Ie=>Ie.connected===!0).length,agentStatus:I(G==null?void 0:G.status),agentRunning:(G==null?void 0:G.running)===!0}),G&&h.emit("remoteMonitor.node.agent.status",{nodeId:e.id,reason:l,ok:!0,status:I(G.status),running:G.running===!0,ready:G.ready===!0})}catch(b){if(p!==me.current)return;const v=po(n,r);m({source:"unavailable",loading:!1,message:b instanceof Error?b.message:String(b),baseUrl:u,devices:v}),h.emit("remoteMonitor.node.preview",{nodeId:e.id,reason:"remotehub-error",total:v.length})}},[r,n,e.id]);d.useEffect(()=>{le("mount")},[le]);const Bt=d.useCallback((l,p,u)=>{const b=Pr(B.current,l);if(!b)return!1;const{cached:v,scope:S}=b;return Io(p,v,k.current,T.current).then(M=>{M&&h.emit("remoteMonitor.node.frameCache",{nodeId:e.id,deviceId:l,frameSeq:dt(v.metadata),scope:S,reason:u})}),!0},[e.id]),Br=d.useCallback((l,p)=>{l&&(p?(f.current.set(l,p),Bt(l,p,"canvas-attach")):f.current.delete(l))},[Bt]);d.useEffect(()=>{for(const l of D){const p=at(l),u=f.current.get(p);if(!u)continue;const b=$t(l),v=xn(b);i.source==="bridge"&&v?dn(u,p,b,i.baseUrl,k.current,T.current,B.current).then(S=>{S.painted||S.busy||(S.staleDropped&&h.emit("remoteMonitor.node.frameStaleDropped",{nodeId:e.id,deviceId:p,frameSeq:S.frameSeq,previous:S.previous,source:"projection"}),!(i.source==="bridge"&&Bt(p,u,"projection-rerender"))&&Co(u,l,i.source))}):i.source==="bridge"&&Bt(p,u,"projection-rerender")||Co(u,l,i.source)}},[e.id,Bt,i.baseUrl,i.source,D]);const zo=d.useCallback(async(l,p)=>{const u=I(l.deviceId).trim();if(!u)return;const b=I(l.streamId).trim(),v=Number(l.frameSeq||0)||0,S=wn(T.current,B.current,u),M=x.current.get(u)||"",V=!!(b&&M&&b!==M);if(V&&(T.current.delete(u),h.emit("remoteMonitor.node.frameStreamReset",{nodeId:e.id,deviceId:u,fromStreamId:M,toStreamId:b,previous:S,frameSeq:v})),!V&&v>0&&v<=S){h.emit("remoteMonitor.node.frameStaleDropped",{nodeId:e.id,deviceId:u,frameSeq:v,previous:S,source:"ws"});return}const G=tr(l,p.byteLength);G.level!=="nominal"&&h.emit("remoteMonitor.node.framePressure",{nodeId:e.id,deviceId:u,frameSeq:v,streamId:b,...G});const ge=Mr(B.current,u,l,p),Ie=f.current.get(u);if(Ie){if(k.current.has(u)){h.emit("remoteMonitor.node.frameCache",{nodeId:e.id,deviceId:u,frameSeq:v,scope:"local",reason:"decode-pending"});return}k.current.add(u);try{await Sn(Ie,ge.metadata,ge.payload)&&(v>0&&T.current.set(u,v),b&&x.current.set(u,b),X.current+=1,X.current%12===1&&h.emit("remoteMonitor.node.framePainted",{nodeId:e.id,deviceId:u,frameSeq:v,streamId:l.streamId||"",painted:X.current,source:"ws"}))}catch{}finally{k.current.delete(u);const Ae=B.current.get(u),Ke=dt(Ae==null?void 0:Ae.metadata),ta=T.current.get(u)||0,oa=f.current.get(u);Ae&&oa&&(Ke<=0?ta<=0:Ke>ta)&&Io(oa,Ae,k.current,T.current).then(oi=>{oi&&(X.current+=1,h.emit("remoteMonitor.node.frameCache",{nodeId:e.id,deviceId:u,frameSeq:Ke,scope:"local",reason:"latest-pending"}),h.emit("remoteMonitor.node.framePainted",{nodeId:e.id,deviceId:u,frameSeq:Ke,streamId:Ae.metadata.streamId||"",painted:X.current,source:"ws-cache"}))})}}},[e.id]);d.useEffect(()=>{if(i.source!=="bridge"||!c||!_o)return;const l=ya(Y);if(l.length===0)return;let p=!1,u=null,b=0;const v=()=>{var S,M;if(!p){P.current=!1;try{u=new WebSocket(Tr(i.baseUrl,_o,(M=(S=i.bridge)==null?void 0:S.status)==null?void 0:M.bridgeToken,l)),u.binaryType="arraybuffer"}catch(V){h.emit("remoteMonitor.node.frameWs",{nodeId:e.id,ok:!1,error:V instanceof Error?V.message:String(V)});return}u.onopen=()=>{P.current=!0,ke.current=performance.now(),h.emit("remoteMonitor.node.frameWs",{nodeId:e.id,ok:!0,deviceCount:l.length,fps:pa}),u==null||u.send(JSON.stringify({type:"subscribe",deviceIds:l,autoStartLive:!0,fps:pa,maxWidth:640,maxHeight:360,quality:55,mode:"remote-fast"}))},u.onmessage=async V=>{if(!p){if(ke.current=performance.now(),V.data instanceof ArrayBuffer){const G=vo(V.data);G&&await zo(G.metadata,G.payload);return}if(V.data instanceof Blob){const G=vo(await V.data.arrayBuffer());G&&await zo(G.metadata,G.payload)}}},u.onerror=()=>{h.emit("remoteMonitor.node.frameWs",{nodeId:e.id,ok:!1,reason:"socket-error"})},u.onclose=()=>{P.current=!1,p||(b=window.setTimeout(v,1500))}}};return v(),()=>{p=!0,P.current=!1,window.clearTimeout(b),u==null||u.close()}},[e.id,zo,_o,i.baseUrl,(Qn=(Yn=i.bridge)==null?void 0:Yn.status)==null?void 0:Qn.bridgeToken,i.source,c,Y]),d.useEffect(()=>{if(i.source!=="bridge"||!c)return;const l=ya(Y);if(l.length===0)return;let p=!1,u=!1;const b=async()=>{var M;if(!(p||u)&&!(P.current&&performance.now()-ke.current<dr)){u=!0;try{const V=await Ya(l,i.auth,i.baseUrl);if(p||V.ok===!1)return;let G=0,ge=0;for(const Ie of V.frames||[]){const Ae=String(Ie.deviceId||"").trim();if(!Ae)continue;const Ke=await dn(f.current.get(Ae),Ae,Rr(Ie),i.baseUrl,k.current,T.current,B.current);Ke.painted&&(G+=1),Ke.staleDropped&&(ge+=1,h.emit("remoteMonitor.node.frameStaleDropped",{nodeId:e.id,deviceId:Ae,frameSeq:Ke.frameSeq,previous:Ke.previous,source:"snapshot"}))}h.emit("remoteMonitor.node.frameSnapshot",{nodeId:e.id,deviceCount:l.length,frameCount:((M=V.frames)==null?void 0:M.length)||0,painted:G,staleDropped:ge})}catch{}finally{u=!1}}},v=window.setTimeout(b,200),S=window.setInterval(b,vl);return()=>{p=!0,window.clearTimeout(v),window.clearInterval(S)}},[e.id,i.auth,i.baseUrl,i.source,c,Y]),d.useEffect(()=>{R(!1),ae("locked"),U("Remote input locked.")},[K,i.source]),d.useEffect(()=>{!Z||Me||(R(!1),ae("unavailable"),U(ot||"Remote input unavailable."),h.emit("remoteMonitor.node.input.lock",{nodeId:e.id,unlocked:!1,reason:"control-unavailable",deviceId:K}))},[Me,ot,Z,e.id,K]),d.useEffect(()=>{var u,b,v;if(!Z){(u=w.current)==null||u.close(),w.current=null,ae("locked");return}if(!Me||!K){ae("unavailable"),U(ot||"Remote input unavailable.");return}let l=!1,p=null;ae("connecting"),U("Connecting remote input adapter...");try{p=new WebSocket(kr(i.baseUrl,Fo,(v=(b=i.bridge)==null?void 0:b.status)==null?void 0:v.bridgeToken)),w.current=p}catch(S){const M=S instanceof Error?S.message:String(S);ae("error"),U(M),h.emit("remoteMonitor.node.input.ws",{nodeId:e.id,ok:!1,deviceId:K,error:M});return}return p.onopen=()=>{l||(ae("ready"),U("Remote input ready."),h.emit("remoteMonitor.node.input.ws",{nodeId:e.id,ok:!0,deviceId:K}))},p.onmessage=S=>{if(l)return;const M=rr(String(S.data||"{}"));if(M){if(M.type==="RemoteInputSocketReady"){ae("ready");return}h.emit("remoteMonitor.node.input.result",{nodeId:e.id,ok:M.ok,deviceId:M.deviceId||K,inputType:M.inputType,error:M.error}),!M.ok||M.error?U(M.error||"Remote input failed."):/^pointermove$/i.test(M.inputType)||U(`${M.inputType||"Input"} queued.`)}},p.onerror=()=>{l||(ae("error"),U("Remote input socket error."),h.emit("remoteMonitor.node.input.ws",{nodeId:e.id,ok:!1,deviceId:K,reason:"socket-error"}))},p.onclose=()=>{l||(w.current=null,ae("error"),U("Remote input socket closed."),h.emit("remoteMonitor.node.input.ws",{nodeId:e.id,ok:!1,deviceId:K,reason:"socket-closed"}))},()=>{l=!0,w.current===p&&(w.current=null),p==null||p.close()}},[Me,ot,Z,e.id,Fo,K,i.baseUrl,(Zn=(Jn=i.bridge)==null?void 0:Jn.status)==null?void 0:Zn.bridgeToken]),d.useEffect(()=>{if(!Z)return;const l=p=>{p.key==="Escape"&&(p.preventDefault(),R(!1),U("Remote input locked."),h.emit("remoteMonitor.node.input.lock",{nodeId:e.id,unlocked:!1,reason:"escape",deviceId:K}))};return window.addEventListener("keydown",l,!0),()=>window.removeEventListener("keydown",l,!0)},[Z,e.id,K]);const Gr=d.useCallback(l=>{l.stopPropagation(),Wa(!0),h.emit("remoteMonitor.node.hostedAccess.enabled",{nodeId:e.id}),le("hosted-access-enabled")},[e.id,le]),zn=d.useCallback(l=>{l.stopPropagation(),le("manual")},[le]),Ur=d.useCallback(async l=>{var p,u,b;if(l.stopPropagation(),!io){je(ro||"RemoteAgent connect unavailable.");return}Qe("connect"),je("Connecting RemoteAgent...");try{const v=await $s(Ft,i.auth,i.baseUrl);v.agent&&m(M=>M.source==="bridge"?{...M,agent:v.agent,message:M.message}:M);const S=v.ok===!0;je(S?v.alreadyRunning===!0?"RemoteAgent already running.":v.skipped===!0?v.reason||"RemoteAgent connect skipped.":"RemoteAgent connect requested.":v.error||"RemoteAgent connect failed."),h.emit("remoteMonitor.node.agent.connect",{nodeId:e.id,ok:S,alreadyRunning:v.alreadyRunning===!0,skipped:v.skipped===!0,reason:v.reason||"",status:I((p=v.agent)==null?void 0:p.status),managerCount:((u=Ft.managerCandidates)==null?void 0:u.length)??0,error:v.error||""}),S&&await le("agent-connect")}catch(v){const S=v instanceof Error?v.message:String(v);je(S),h.emit("remoteMonitor.node.agent.connect",{nodeId:e.id,ok:!1,managerCount:((b=Ft.managerCandidates)==null?void 0:b.length)??0,error:S})}finally{Qe("")}},[io,e.id,le,ro,Ft,i.auth,i.baseUrl]),zr=d.useCallback(async l=>{var p;if(l.stopPropagation(),!so){je("RemoteAgent is not running.");return}Qe("disconnect"),je("Stopping RemoteAgent...");try{const u=await Vs("react-remote-monitor-manual",i.auth,i.baseUrl);u.agent&&m(v=>v.source==="bridge"?{...v,agent:u.agent,message:v.message}:v);const b=u.ok===!0;je(b?"RemoteAgent stopped.":u.error||"RemoteAgent stop failed."),h.emit("remoteMonitor.node.agent.disconnect",{nodeId:e.id,ok:b,status:I((p=u.agent)==null?void 0:p.status),error:u.error||""}),b&&await le("agent-disconnect")}catch(u){const b=u instanceof Error?u.message:String(u);je(b),h.emit("remoteMonitor.node.agent.disconnect",{nodeId:e.id,ok:!1,error:b})}finally{Qe("")}},[so,e.id,le,i.auth,i.baseUrl]),$r=d.useCallback(async l=>{var u;l.stopPropagation();const p=xr(i.hub);try{const b=await Tn(p);ie("Connect command copied."),h.emit("remoteMonitor.node.connectCommand.copy",{nodeId:e.id,ok:!0,method:b,source:i.source,hasPairPreview:!!((u=i.hub)!=null&&u.pairTokenPreview)})}catch(b){ie(b instanceof Error?b.message:"Clipboard is unavailable."),h.emit("remoteMonitor.node.connectCommand.copy",{nodeId:e.id,ok:!1})}},[e.id,i.hub,i.source]),Tt=d.useCallback(async(l,p)=>{if(i.source!=="bridge"||ue.current)return!1;ue.current=!0,ie(l?"Requesting host target...":"Clearing host target...");try{const u=await sa(e.id,l,i.auth,i.baseUrl,{leaseMs:Ut});if(u.ok===!0){const b=l&&u.active===!0;ka(e.id,b),pt(b)}return ie(u.ok===!0?u.active?"This monitor node is the host target.":"Host target cleared.":u.error||"Host target update failed."),h.emit("remoteMonitor.node.hostTarget",{nodeId:e.id,reason:p,autoHost:he,ok:u.ok===!0,active:u.active===!0}),await le("host-target"),u.ok===!0&&(l?u.active===!0:u.active!==!0)}catch(u){return ie(u instanceof Error?u.message:String(u)),h.emit("remoteMonitor.node.hostTarget",{nodeId:e.id,reason:p,autoHost:he,ok:!1}),!1}finally{ue.current=!1}},[he,e.id,le,i.auth,i.baseUrl,i.source]),Vr=d.useCallback(l=>{l.stopPropagation(),Tt(!re,"manual")},[re,Tt]),qr=d.useCallback(l=>{l.stopPropagation();const p=!he;ka(e.id,p),pt(p),ie(p?"Auto Host enabled for this monitor.":"Auto Host disabled."),h.emit("remoteMonitor.node.autoHost",{nodeId:e.id,enabled:p,source:i.source}),!p&&re&&Tt(!1,"auto-host-disabled")},[he,re,e.id,Tt,i.source]);d.useEffect(()=>{if(i.source!=="bridge"||!he||re||Q.current)return;if(!Ho(e.id)){pt(!1);return}let l=!1;return Q.current=!0,ie("Restoring Auto Host..."),h.emit("remoteMonitor.node.autoHost.restore",{nodeId:e.id,requested:!0,source:i.source}),Tt(!0,"auto-host-restore").then(p=>{l||(h.emit("remoteMonitor.node.autoHost.restore",{nodeId:e.id,ok:p,source:i.source}),p||ie("Auto Host restore failed."))}).finally(()=>{Q.current=!1}),()=>{l=!0}},[he,re,e.id,Tt,i.source]),d.useEffect(()=>{if(i.source!=="bridge"||!re)return;let l=!1;const p=async()=>{if(!(l||g.current)){g.current=!0;try{const b=await sa(e.id,!0,i.auth,i.baseUrl,{leaseMs:Ut});h.emit("remoteMonitor.node.hostTarget.renew",{nodeId:e.id,ok:b.ok===!0,active:b.active===!0,leaseMs:Ut}),!l&&(b.ok!==!0||b.active!==!0)&&(ie(b.error||"Host target renewal lost ownership."),await le("host-target-renew"))}catch(b){h.emit("remoteMonitor.node.hostTarget.renew",{nodeId:e.id,ok:!1,active:!1,leaseMs:Ut,error:b instanceof Error?b.message:String(b)}),l||ie(b instanceof Error?b.message:String(b))}finally{g.current=!1}}},u=window.setInterval(()=>{p()},uo);return h.emit("remoteMonitor.node.hostTarget.renew.timer",{nodeId:e.id,active:!0,intervalMs:uo,leaseMs:Ut}),()=>{l=!0,window.clearInterval(u),h.emit("remoteMonitor.node.hostTarget.renew.timer",{nodeId:e.id,active:!1})}},[re,e.id,le,i.auth,i.baseUrl,i.source]),d.useEffect(()=>{if(i.source!=="bridge"||!ht||!Te){ht||(pe.current="",E.current=0);return}let l=!1,p=0;pe.current!==Te&&(pe.current=Te,E.current=0);const u=b=>{window.clearTimeout(p),p=window.setTimeout(async()=>{if(l||pe.current!==Te)return;const v=E.current;if(v>=St){h.emit("remoteMonitor.node.task.follow",{nodeId:e.id,active:!1,batchKey:Te,tick:v,maxTicks:St,reason:"max-ticks"});return}const S=v+1;E.current=S,h.emit("remoteMonitor.node.task.follow",{nodeId:e.id,active:!0,batchKey:Te,tick:S,maxTicks:St}),await le("task-follow"),!l&&pe.current===Te&&E.current<St&&u(bo)},Math.max(0,b))};return h.emit("remoteMonitor.node.task.follow",{nodeId:e.id,active:!0,batchKey:Te,intervalMs:bo,maxTicks:St,reason:"start"}),u(Il),()=>{l=!0,window.clearTimeout(p),h.emit("remoteMonitor.node.task.follow",{nodeId:e.id,active:!1,batchKey:Te,tick:E.current,reason:"cleanup"})}},[e.id,le,i.source,ht,Te]);const Wr=d.useCallback(l=>{if(l.stopPropagation(),Z){R(!1),U("Remote input locked."),h.emit("remoteMonitor.node.input.lock",{nodeId:e.id,unlocked:!1,reason:"manual",deviceId:K});return}if(!Me){ae("unavailable"),U(ot||"Remote input unavailable."),h.emit("remoteMonitor.node.input.lock",{nodeId:e.id,unlocked:!1,reason:"unavailable",deviceId:K});return}R(!0),U("Connecting remote input adapter..."),h.emit("remoteMonitor.node.input.lock",{nodeId:e.id,unlocked:!0,reason:"manual",deviceId:K})},[Me,ot,Z,e.id,K]),Ue=d.useCallback(l=>{var V;const p=w.current;if(!Z||!Me||!K||(p==null?void 0:p.readyState)!==WebSocket.OPEN){l.ack&&U(Z?"Remote input socket is not ready.":"Remote input locked.");return}const u=`remote-node-input-${Date.now()}-${++z.current}`,{ack:b,...v}=l,S=ar({requestId:u,deviceId:K,ack:b,controlLeaseId:(V=i.hub)==null?void 0:V.hostTargetLeaseId,input:v});if(!S){b&&U("Remote input payload is invalid.");return}const M=I(S.input.type);try{p.send(JSON.stringify(S));const G=++ee.current;(S.ack||G%24===1)&&h.emit("remoteMonitor.node.input.sent",{nodeId:e.id,deviceId:K,inputType:M,sampled:!S.ack,sent:G})}catch(G){const ge=G instanceof Error?G.message:String(G);ae("error"),U(ge),h.emit("remoteMonitor.node.input.ws",{nodeId:e.id,ok:!1,deviceId:K,error:ge})}},[Me,Z,e.id,K,(ea=i.hub)==null?void 0:ea.hostTargetLeaseId]);d.useEffect(()=>{if(typeof document>"u")return;const l=p=>{const u=p.detail;if(!u||typeof u!="object")return;const b=I(u.nodeId);if(b&&b!==e.id)return;const v=I(u.deviceId);if(v&&v!==K)return;const S=u.input;!S||typeof S!="object"||Array.isArray(S)||Ue({...S,ack:u.ack!==!1})};return document.addEventListener(ma,l),()=>document.removeEventListener(ma,l)},[e.id,K,Ue]);const It=d.useCallback((l,p,u,b=!1)=>{const v=To(l,b);return v?(Ue({type:p,...v,button:vr(l.button),ack:u}),!0):!1},[Ue]),Kr=d.useCallback((l,p,u)=>{if(l.stopPropagation(),qe(p),!(!u||!It(l,"pointerDown",!0,!1))){l.preventDefault(),l.currentTarget.focus();try{l.currentTarget.setPointerCapture(l.pointerId)}catch{}}},[It]),Hr=d.useCallback((l,p)=>{var S,M;if(!p)return;const u=performance.now();if(u-F.current<ur)return;F.current=u;const b=((M=(S=l.currentTarget).hasPointerCapture)==null?void 0:M.call(S,l.pointerId))===!0;It(l,"pointerMove",!1,b)&&(l.preventDefault(),l.stopPropagation())},[It]),Xr=d.useCallback((l,p)=>{if(p){l.preventDefault(),l.stopPropagation();try{l.currentTarget.releasePointerCapture(l.pointerId)}catch{}It(l,"pointerUp",!0,!0)}},[It]),Yr=d.useCallback((l,p)=>{if(!p)return;const u=To(l,!1);u&&(Ue({type:"wheel",...u,deltaX:l.deltaX,deltaY:l.deltaY,ack:!0}),l.preventDefault(),l.stopPropagation())},[Ue]),Qr=d.useCallback((l,p,u)=>{if(!u){(l.key==="Enter"||l.key===" ")&&(l.preventDefault(),l.stopPropagation(),qe(p));return}l.key!=="Escape"&&(l.preventDefault(),l.stopPropagation(),Ue({type:"keyDown",key:l.key,code:l.code,repeat:l.repeat,ack:!0}))},[Ue]),Jr=d.useCallback((l,p)=>{!p||l.key==="Escape"||(l.preventDefault(),l.stopPropagation(),Ue({type:"keyUp",key:l.key,code:l.code,repeat:!1,ack:!0}))},[Ue]),$o=d.useCallback(async(l,p="selected")=>{var M;if(l.preventDefault(),l.stopPropagation(),i.source!=="bridge"){Be("LocalBridge is not connected.");return}const u=fe.trim();if(!u){Be("Remote task is empty.");return}if(p==="selected"&&(!K||!Bo||(oe==null?void 0:oe.connected)!==!0)){Be("Selected device cannot accept remote tasks.");return}if(p==="all"&&to.length<=0){Be("No task-capable connected devices are available.");return}if(p==="ai"&&oo.length<=0){Be("No AI assist devices are connected.");return}const b=p==="ai"?"ai-assist":"task-only",v=((M=u.split(/\r?\n/)[0])==null?void 0:M.slice(0,96))||"Remote task",S=p==="ai"?oo:to;Le(p),Be(p==="selected"?"Queueing selected task...":"Queueing fleet task...");try{const V=p==="selected"?await Qa(K,{instruction:u,title:v,approvalLevel:b},i.auth,i.baseUrl):await qs({instruction:u,title:v,approvalLevel:b,deviceIds:S,allConnected:!1},i.auth,i.baseUrl),G=V.ok===!0,ge=p==="selected"?G?1:0:Number("queued"in V?V.queued:0);Be(G?`Queued ${ge||1} remote task${(ge||1)===1?"":"s"}.`:V.error||"Remote task queue failed."),h.emit("remoteMonitor.node.task.queue",{nodeId:e.id,mode:p,ok:G,queued:ge,approvalLevel:b,deviceId:p==="selected"?K:"",targetCount:p==="selected"?1:S.length,batchId:"batchId"in V?V.batchId:"",error:V.error||""}),G&&(jt(""),await le("task-queued"))}catch(V){const G=V instanceof Error?V.message:String(V);Be(G),h.emit("remoteMonitor.node.task.queue",{nodeId:e.id,mode:p,ok:!1,approvalLevel:b,deviceId:p==="selected"?K:"",targetCount:p==="selected"?1:S.length,error:G})}finally{Le("")}},[Ot,oo,e.id,le,Bo,oe==null?void 0:oe.connected,K,i.auth,i.baseUrl,i.source,to,fe]),Zr=a.jsxs("div",{className:"node-remote-monitor__head-actions",children:[a.jsx("i",{"aria-label":`Remote route ${no}`}),a.jsxs("span",{className:"node-remote-monitor__head-status","data-testid":"remote-monitor-node-agent-status","data-agent-status":_t,children:["AGENT ",a.jsx("strong",{children:_t})]}),a.jsxs("span",{className:`node-remote-monitor__head-status node-remote-monitor__route-status is-${ne.tone}`,"data-testid":"remote-monitor-node-registry-route","data-registry-route":ne.status,"data-account-route-ready":ne.accountRouteReady?"true":"false","data-registry-migration-blocked":ne.migrationBlocked?"true":"false",title:ne.title,children:["ROUTE ",a.jsx("strong",{children:ne.value})]}),i.source==="bridge"?a.jsxs(a.Fragment,{children:[a.jsxs("button",{type:"button","data-testid":"remote-monitor-node-host",onClick:Vr,children:[a.jsx(ho,{size:12}),re?"Clear Host":"Set Host"]}),a.jsxs("button",{type:"button",className:he?"is-active":"","data-testid":"remote-monitor-node-auto-host","data-auto-host-active":he?"true":"false",onClick:qr,title:he?"Disable Auto Host restore for this monitor":"Remember this monitor as the Auto Host target",children:[a.jsx(ho,{size:12}),"Auto"]}),a.jsxs("button",{type:"button","data-testid":"remote-monitor-node-agent-connect",onClick:Ur,disabled:!io,title:io?"Connect managed RemoteAgent":ro,children:[a.jsx(pi,{size:12,className:ut==="connect"?"spin-icon":""}),"Start"]}),a.jsxs("button",{type:"button","data-testid":"remote-monitor-node-agent-disconnect",onClick:zr,disabled:!so,title:so?"Stop managed RemoteAgent":"RemoteAgent is not running",children:[a.jsx(mi,{size:12,className:ut==="disconnect"?"spin-icon":""}),"Stop"]})]}):i.source==="blocked"?a.jsxs("button",{type:"button",onClick:Gr,children:[a.jsx(ho,{size:12}),"Enable"]}):a.jsxs("button",{type:"button",onClick:zn,children:[a.jsx(fo,{size:12,className:i.loading?"spin-icon":""}),"Refresh"]})]}),ei=a.jsxs("form",{className:"node-remote-monitor__taskbar","data-testid":"remote-monitor-node-taskbar",onSubmit:l=>$o(l,"selected"),children:[a.jsx("input",{"aria-label":"Remote task",value:fe,maxLength:1200,onChange:l=>jt(l.target.value),onPointerDown:l=>l.stopPropagation(),placeholder:oe?`Task for ${gt(oe)}`:"Remote task"}),a.jsxs("button",{type:"submit",disabled:!Dn,title:Dn?"Queue task for selected device":"Selected device cannot accept remote tasks",children:[a.jsx(Yo,{size:12,className:Fe==="selected"?"spin-icon":""}),"Selected"]}),a.jsxs("button",{type:"button",disabled:!On,title:On?"Queue task for connected devices":"No connected devices can accept tasks",onClick:l=>$o(l,"all"),children:[a.jsx(Yo,{size:12,className:Fe==="all"?"spin-icon":""}),"All"]}),a.jsxs("button",{type:"button",disabled:!_n,title:_n?"Queue AI assist task for connected AI devices":"No AI assist device is connected",onClick:l=>$o(l,"ai"),children:[a.jsx(hi,{size:12,className:Fe==="ai"?"spin-icon":""}),"AI"]})]}),ti=a.jsxs("div",{className:"node-remote-monitor__footer",children:[a.jsxs("div",{className:"node-remote-monitor__footer-scale","data-testid":"remote-monitor-node-tile-scale","data-tile-scale-index":et,"data-tile-scale":Nt,children:[a.jsx("button",{type:"button","aria-label":"Shrink remote monitor tiles","data-testid":"remote-monitor-node-tile-shrink",disabled:et<=0,onClick:l=>Un(l,-1),children:a.jsx(gi,{size:12})}),a.jsx("button",{type:"button","aria-label":"Grow remote monitor tiles","data-testid":"remote-monitor-node-tile-grow",disabled:et>=zt.length-1,onClick:l=>Un(l,1),children:a.jsx(xa,{size:12})})]}),a.jsxs("label",{className:"node-remote-monitor__footer-group","data-testid":"remote-monitor-node-group","data-group-mode":Ge,children:[a.jsx("span",{children:"GROUP"}),a.jsx("select",{"aria-label":"Remote monitor grouping","data-testid":"remote-monitor-node-group-mode",value:Ge,onPointerDown:l=>l.stopPropagation(),onChange:Nr,children:hr.map(l=>a.jsx("option",{value:l,children:Gl(l)},l))})]}),a.jsxs("label",{className:"node-remote-monitor__footer-filter","data-testid":"remote-monitor-node-filter","data-filter-active":kt?"true":"false",children:[a.jsx("span",{children:"FILTER"}),a.jsx("input",{"aria-label":"Remote monitor search","data-testid":"remote-monitor-node-filter-text",value:Jt,maxLength:64,onPointerDown:l=>l.stopPropagation(),onChange:Dr,placeholder:"Any"}),a.jsx("select",{"aria-label":"Remote monitor visibility filter","data-testid":"remote-monitor-node-visibility-filter",value:Ne,onPointerDown:l=>l.stopPropagation(),onChange:Or,children:gr.map(l=>a.jsx("option",{value:l,children:Ul(l)},l))}),a.jsx("select",{"aria-label":"Remote monitor capability filter","data-testid":"remote-monitor-node-capability-filter",value:Re,onPointerDown:l=>l.stopPropagation(),onChange:_r,children:br.map(l=>a.jsx("option",{value:l,children:zl(l)},l))})]}),a.jsxs("div",{className:"node-remote-monitor__footer-status",children:[a.jsxs("span",{children:[a.jsx("i",{})," HUB ",a.jsx("strong",{children:Oo})]}),a.jsxs("span",{children:["CONNECTED ",a.jsxs("strong",{children:[Dt,"/",tt]})]}),a.jsxs("span",{children:["TASK ",a.jsx("strong",{children:No})]}),a.jsxs("span",{children:["AI ",a.jsx("strong",{children:Ot})]}),a.jsxs("span",{children:["INPUT ",a.jsx("strong",{children:Go})]}),a.jsxs("span",{children:["PAGE ",a.jsx("strong",{children:mt})]}),a.jsxs("span",{children:[a.jsx("i",{})," ROUTE ",a.jsx("strong",{children:no})]}),a.jsxs("button",{type:"button","data-testid":"remote-monitor-node-copy-connect",onClick:$r,children:[a.jsx(wa,{size:12}),"Connect"]}),a.jsxs("button",{type:"button","data-testid":"remote-monitor-node-refresh",onClick:zn,children:[a.jsx(fo,{size:12,className:i.loading?"spin-icon":""}),"Refresh"]}),i.source==="bridge"&&a.jsxs("button",{type:"button","data-testid":"remote-monitor-node-input",onClick:Wr,disabled:!Me&&!Z,title:Z||Me?j:ot,children:[Z?a.jsx(Sa,{size:12}):a.jsx(Ra,{size:12}),Z?"Lock":"Unlock"]})]})]});return a.jsxs("div",{ref:s,className:"node-remote-monitor","data-testid":"remote-monitor-node","data-remote-source":i.source,"data-remote-canonical-total":tt,"data-remote-connected":Dt,"data-remote-projection":Ko,"data-remote-projected-count":C,"data-remote-visible-budget":we,"data-remote-page-index":N,"data-remote-page-count":A,"data-remote-page-start":$,"data-remote-host-active":re?"true":"false","data-remote-registry-route":ne.status,"data-remote-registry-ready":ne.accountRouteReady?"true":"false","data-remote-registry-migration-blocked":ne.migrationBlocked?"true":"false","data-remote-registry-reason":ne.reason,"data-remote-host-renew-ms":re?uo:0,"data-remote-auto-host":he?"true":"false","data-remote-agent-status":_t,"data-remote-agent-running":ao?"true":"false","data-remote-agent-ready":Uo?"true":"false","data-remote-task-follow-active":ht?"true":"false","data-remote-task-follow-key":Te,"data-remote-task-follow-refresh-ms":ht?bo:0,"data-remote-transport-visible":c?"true":"false","data-remote-frame-subscription-active":c&&W.length>0?"true":"false","data-remote-tile-scale-index":et,"data-remote-tile-scale":Nt,"data-remote-tile-min-width":En,"data-remote-tile-min-height":jn,"data-remote-group-mode":Ge,"data-remote-visible-group-count":We,"data-remote-filter-text":De,"data-remote-filter-active":kt?"true":"false","data-remote-visibility-filter":Ne,"data-remote-capability-filter":Re,"data-remote-filtered-count":Lt.length,onPointerDown:l=>l.stopPropagation(),children:[a.jsxs("div",{className:"node-remote-monitor__surface",children:[a.jsx("div",{className:"node-remote-monitor__head",children:a.jsxs("div",{className:"node-remote-monitor__titlemark",children:[a.jsx("span",{children:a.jsx(bi,{size:15})}),a.jsxs("div",{children:[a.jsx("small",{children:"REMOTE"}),a.jsx("strong",{children:"Multi Desktop Monitor"})]})]})}),a.jsxs("div",{className:"node-remote-monitor__wall-shell",children:[a.jsxs("div",{className:"node-remote-monitor__wall","data-testid":"remote-monitor-node-wall","data-page-index":N,"data-page-count":A,"data-page-start":$,"data-visible-devices":D.length,"data-visible-device-ids":O.join(","),"data-visible-connected-devices":W.length,"data-frame-subscription-device-ids":Y,"data-frame-subscription-active":c&&W.length>0?"true":"false","data-transport-visible":c?"true":"false","data-canonical-device-count":tt,"data-connected-device-count":Dt,"data-wall-projection":Ko,"data-projected-device-count":C,"data-visible-budget":we,"data-tile-scale-index":et,"data-tile-scale":Nt,"data-group-mode":Ge,"data-visible-group-count":We,"data-filter-text":De,"data-filter-active":kt?"true":"false","data-visibility-filter":Ne,"data-capability-filter":Re,"data-filtered-device-count":Lt.length,style:{"--remote-node-tile-min-width":`${En}px`,"--remote-node-tile-min-height":`${jn}px`},children:[D.map(l=>{const p=at(l),u=gt(l),b=$t(l),v=p===K,S=Z&&Me&&v;return a.jsxs("span",{className:`${l.connected===!0?"is-online":""} ${v?"is-selected":""} ${S?"is-input-active":""}`,"aria-label":`${u} remote desktop`,title:`${u} / ${Wt(l)}`,role:"button",tabIndex:S||v?0:-1,"data-device-id":p,"data-connected":l.connected===!0?"true":"false","data-frame-seq":(b==null?void 0:b.frameSeq)??0,"data-can-control":de(l,"control")?"true":"false","data-can-dispatch-task":de(l,"taskDispatch")?"true":"false","data-ai-assist":de(l,"aiAssist")?"true":"false","data-input-active":S?"true":"false","data-group-mode":Ge,"data-group-key":$l(l,Ge),onClick:M=>{M.stopPropagation(),qe(p)},onDoubleClick:M=>Fr(M,l),onPointerDown:M=>Kr(M,p,S),onPointerMove:M=>Hr(M,S),onPointerUp:M=>Xr(M,S),onWheel:M=>Yr(M,S),onKeyDown:M=>Qr(M,p,S),onKeyUp:M=>Jr(M,S),children:[a.jsx("canvas",{ref:M=>Br(p,M)}),S&&a.jsxs("em",{children:[a.jsx(Ma,{size:10}),"input"]}),a.jsx("small",{children:u})]},p)}),Array.from({length:vt},(l,p)=>a.jsx("span",{"aria-label":`Remote desktop slot ${$+D.length+p+1}`,"data-placeholder-slot":"true"},`empty-${N}-${p}`))]}),a.jsxs("div",{className:"node-remote-monitor__pager","aria-label":"Monitor page controls",children:[a.jsx("button",{type:"button","aria-label":"Previous monitor page",disabled:N<=0,onClick:l=>Gn(l,-1),children:a.jsx(fi,{size:12})}),a.jsx("span",{className:"node-remote-monitor__pager-track",style:{"--remote-node-page-top":`${jr}%`,"--remote-node-page-height":`${Pn}%`},children:a.jsx("strong",{})}),a.jsx("button",{type:"button","aria-label":"Next monitor page",disabled:N>=A-1,onClick:l=>Gn(l,1),children:a.jsx(yi,{size:12})})]})]})]}),a.jsxs("div",{className:"node-remote-monitor__external-rail","data-testid":"remote-monitor-node-external-rail",onPointerDown:l=>l.stopPropagation(),onClick:l=>l.stopPropagation(),children:[Zr,ei,ti,a.jsx("p",{className:"node-remote-monitor__message",children:Lr})]})]})}function Ud({node:e,onPatch:t}){var Zt,Re,eo,he,pt,tt,De,se,kt,Lt;const o=yr(e),n=d.useRef(null),r=fr(n,e.id,"control"),[s,c]=d.useState(()=>{var y;return{source:At()?"loading":"blocked",loading:!1,message:At()?"Remote device not checked yet.":"Hosted LocalBridge access is gated.",baseUrl:((y=e.metadata)==null?void 0:y.RemoteBaseUrl)||L(),device:wt(e)}}),i=d.useRef(null),m=d.useRef(new Set),f=d.useRef(new Map),k=d.useRef(new Map),T=d.useRef(null),x=d.useRef(0),B=d.useRef(0),w=d.useRef(!1),z=d.useRef(0),ee=d.useRef(0),X=d.useRef(0),P=d.useRef(0),ke=d.useRef(e.metadata??{}),[F,ue]=d.useState(!1),[g,Q]=d.useState("locked"),[pe,E]=d.useState("Remote input locked."),[ve,me]=d.useState(""),[J,Ve]=d.useState(!1),[qe,Z]=d.useState(""),R=s.device,Se=R?gt(R):e.title||"Remote device",ae=R?Wt(R):((Zt=e.metadata)==null?void 0:Zt.RemoteFleetDevicePlatform)||"unknown",j=za((Re=s.bridge)==null?void 0:Re.status),U=$a((eo=s.bridge)==null?void 0:eo.status),te=s.source==="bridge"&&!!o&&(R==null?void 0:R.connected)===!0&&!!U&&de(R,"control"),ie=R?de(R,"taskDispatch"):!1,ut=s.source==="bridge"&&!!o&&(R==null?void 0:R.connected)===!0&&ie&&!!ve.trim()&&!J,Qe=F?Ir(g):te?"Locked":"Off",Po=qe||pe||s.message;d.useEffect(()=>{ke.current=e.metadata??{}},[e.metadata]);const je=d.useCallback((y,C)=>{const A=ke.current??{},N=Object.entries(C).filter(([D,O])=>A[D]!==O).map(([D])=>D);if(N.length===0)return;const $={...A,...C};ke.current=$,t(e.id,{metadata:$}),h.emit("remoteControl.node.metadata.patch",{nodeId:e.id,reason:y,keys:N})},[e.id,t]),fe=d.useCallback(async(y="manual")=>{const C=++P.current,A=L();if(c(N=>({...N,loading:!0,baseUrl:A})),!o){c({source:"unavailable",loading:!1,message:"Remote control node has no device id.",baseUrl:A,device:wt(e)});return}if(!At()){c({source:"blocked",loading:!1,message:"Hosted LocalBridge access is gated.",baseUrl:A,device:wt(e)}),h.emit("remoteControl.node.preview",{nodeId:e.id,reason:"hosted-localbridge-gated",deviceId:o});return}try{const N=await vn(A);if(C!==P.current)return;if(N.state!=="connected"){c({source:"unavailable",loading:!1,message:N.message||"LocalBridge is unavailable.",baseUrl:A,bridge:N,device:wt(e)});return}const $=Ka(N.status),[D,O]=await Promise.all([Ha($,A),Xa($,A,{includeDataUrl:!1})]);if(C!==P.current)return;const W=(Array.isArray(O.devices)?O.devices:[]).find(We=>at(We)===o),Y=W||wt(e);c({source:W?"bridge":"unavailable",loading:!1,message:W?`${gt(Y)} ${Y.connected===!0?"online.":"offline."}`:"Selected remote device is not in the current RemoteHub inventory.",baseUrl:A,bridge:N,auth:$,hub:D,device:Y}),h.emit("remoteControl.node.refresh",{nodeId:e.id,reason:y,deviceId:o,found:!!W,connected:Y.connected===!0})}catch(N){if(C!==P.current)return;c({source:"unavailable",loading:!1,message:N instanceof Error?N.message:String(N),baseUrl:A,device:wt(e)})}},[o,e]);d.useEffect(()=>{fe("mount")},[fe]),d.useEffect(()=>{var y,C,A;je("snapshot",{SemanticType:"RemoteFleetDevice",RemoteFleetSchemaVersion:"remote-fleet-device@1",RemoteFleetDeviceId:o,RemoteFleetDeviceName:Se,RemoteFleetDevicePlatform:ae,RemoteFleetDeviceConnected:String((R==null?void 0:R.connected)===!0),RemoteFleetDeviceCanControl:String(te),RemoteFleetDeviceCanDispatchTask:String(ie),RemoteFleetDeviceTasksQueued:String(((y=R==null?void 0:R.counters)==null?void 0:y.tasksQueued)||0),RemoteFleetSourceMonitorNodeId:((C=e.metadata)==null?void 0:C.RemoteFleetSourceMonitorNodeId)||"",RemoteInput:Qe,RemoteTask:ie?"available":"unavailable",RemoteHub:s.source==="bridge"?((A=s.hub)==null?void 0:A.started)===!0?"Online":"Ready":s.source==="blocked"?"Gated":s.source,RemoteRoute:s.source==="bridge"?"Local":s.source==="blocked"?"Gated":"Preview",RemoteBaseUrl:s.baseUrl,AdapterState:s.source==="bridge"?"localbridge-connected":s.source==="blocked"?"adapter-gated":s.source})},[te,ie,R==null?void 0:R.connected,(he=R==null?void 0:R.counters)==null?void 0:he.tasksQueued,o,Se,Qe,e.metadata,je,ae,s.baseUrl,(pt=s.hub)==null?void 0:pt.started,s.source]);const jt=d.useCallback((y,C)=>{if(!o)return!1;const A=Pr(k.current,o);if(!A)return!1;const{cached:N,scope:$}=A;return Io(y,N,m.current,f.current).then(D=>{D&&h.emit("remoteControl.node.frameCache",{nodeId:e.id,deviceId:o,frameSeq:dt(N.metadata),scope:$,reason:C})}),!0},[o,e.id]);d.useEffect(()=>{const y=i.current;if(!y||!R)return;const C=$t(R),A=xn(C);s.source==="bridge"&&A?Er(y,A,s.baseUrl).catch(()=>Co(y,R,s.source)):s.source==="bridge"&&jt(y,"projection-rerender")||Co(y,R,s.source)},[R,jt,s.baseUrl,s.source]);const Fe=d.useCallback(async(y,C)=>{if(!o||I(y.deviceId).trim()!==o)return;const A=Number(y.frameSeq||0)||0,N=wn(f.current,k.current,o);if(A>0&&A<=N){h.emit("remoteControl.node.frameStaleDropped",{nodeId:e.id,deviceId:o,frameSeq:A,previous:N,source:"ws"});return}const $=tr(y,C.byteLength);$.level!=="nominal"&&h.emit("remoteControl.node.framePressure",{nodeId:e.id,deviceId:o,frameSeq:A,...$});const D=Mr(k.current,o,y,C),O=i.current;if(O){if(m.current.has(o)){h.emit("remoteControl.node.frameCache",{nodeId:e.id,deviceId:o,frameSeq:A,scope:"local",reason:"decode-pending"});return}m.current.add(o);try{await Sn(O,D.metadata,D.payload)&&(A>0&&f.current.set(o,A),ee.current+=1,h.emit("remoteControl.node.framePainted",{nodeId:e.id,deviceId:o,frameSeq:A,painted:ee.current,source:"ws"}))}catch{}finally{m.current.delete(o);const W=k.current.get(o),Y=dt(W==null?void 0:W.metadata),We=f.current.get(o)||0,vt=i.current;W&&vt&&(Y<=0?We<=0:Y>We)&&Io(vt,W,m.current,f.current).then(mt=>{mt&&(ee.current+=1,h.emit("remoteControl.node.frameCache",{nodeId:e.id,deviceId:o,frameSeq:Y,scope:"local",reason:"latest-pending"}),h.emit("remoteControl.node.framePainted",{nodeId:e.id,deviceId:o,frameSeq:Y,painted:ee.current,source:"ws-cache"}))})}}},[o,e.id]);d.useEffect(()=>{if(s.source!=="bridge"||!o||(R==null?void 0:R.connected)!==!0||!r)return;let y=!1,C=null,A=0;w.current=!1;const N=()=>{var $,D;if(!y){try{C=new WebSocket(Tr(s.baseUrl,j,(D=($=s.bridge)==null?void 0:$.status)==null?void 0:D.bridgeToken,[o])),C.binaryType="arraybuffer"}catch(O){h.emit("remoteControl.node.frameWs",{nodeId:e.id,ok:!1,error:O instanceof Error?O.message:String(O)});return}C.onopen=()=>{w.current=!0,z.current=performance.now(),h.emit("remoteControl.node.frameWs",{nodeId:e.id,ok:!0,deviceId:o,fps:20}),C==null||C.send(JSON.stringify({type:"subscribe",deviceIds:[o],autoStartLive:!0,fps:20,maxWidth:960,maxHeight:540,quality:62,mode:"remote-fast-control"}))},C.onmessage=async O=>{if(!y){if(z.current=performance.now(),O.data instanceof ArrayBuffer){const W=vo(O.data);W&&await Fe(W.metadata,W.payload)}else if(O.data instanceof Blob){const W=vo(await O.data.arrayBuffer());W&&await Fe(W.metadata,W.payload)}}},C.onerror=()=>{w.current=!1,h.emit("remoteControl.node.frameWs",{nodeId:e.id,ok:!1,deviceId:o,reason:"socket-error"})},C.onclose=()=>{w.current=!1,y||(A=window.setTimeout(N,1500))}}};return N(),()=>{y=!0,w.current=!1,window.clearTimeout(A),C==null||C.close()}},[R==null?void 0:R.connected,o,e.id,Fe,j,s.baseUrl,(De=(tt=s.bridge)==null?void 0:tt.status)==null?void 0:De.bridgeToken,s.source,r]),d.useEffect(()=>{if(s.source!=="bridge"||!o||(R==null?void 0:R.connected)!==!0||!r)return;let y=!1,C=!1;const A=async()=>{var D;if(!(y||C)&&!(w.current&&performance.now()-z.current<dr)){C=!0;try{const O=await Ya([o],s.auth,s.baseUrl);if(y||O.ok===!1)return;const W=(D=O.frames)==null?void 0:D.find(mt=>mt.deviceId===o),Y=await dn(i.current??void 0,o,W?Rr(W):void 0,s.baseUrl,m.current,f.current,k.current),We=Y.painted?1:0,vt=Y.staleDropped?1:0;Y.staleDropped&&h.emit("remoteControl.node.frameStaleDropped",{nodeId:e.id,deviceId:o,frameSeq:Y.frameSeq,previous:Y.previous,source:"snapshot"}),h.emit("remoteControl.node.frameSnapshot",{nodeId:e.id,deviceId:o,frameCount:W?1:0,painted:We,staleDropped:vt})}catch{}finally{C=!1}}},N=window.setTimeout(A,250),$=window.setInterval(A,2500);return()=>{y=!0,window.clearTimeout(N),window.clearInterval($)}},[R==null?void 0:R.connected,o,e.id,s.auth,s.baseUrl,s.source,r]),d.useEffect(()=>{!F||te||(ue(!1),Q("unavailable"),E("Remote input unavailable."),h.emit("remoteControl.node.input.lock",{nodeId:e.id,unlocked:!1,reason:"control-unavailable",deviceId:o}))},[te,o,F,e.id]),d.useEffect(()=>{var A,N,$;if(!F){(A=T.current)==null||A.close(),T.current=null,Q("locked");return}if(!te||!o){Q("unavailable"),E("Remote input unavailable.");return}let y=!1,C=null;Q("connecting"),E("Connecting remote input adapter...");try{C=new WebSocket(kr(s.baseUrl,U,($=(N=s.bridge)==null?void 0:N.status)==null?void 0:$.bridgeToken)),T.current=C}catch(D){Q("error");const O=D instanceof Error?D.message:String(D);E(O),h.emit("remoteControl.node.input.ws",{nodeId:e.id,ok:!1,deviceId:o,error:O});return}return C.onopen=()=>{y||(Q("ready"),E("Remote input ready."),h.emit("remoteControl.node.input.ws",{nodeId:e.id,ok:!0,deviceId:o}))},C.onmessage=D=>{if(y)return;const O=rr(String(D.data||"{}"));if(O){if(O.type==="RemoteInputSocketReady"){Q("ready");return}h.emit("remoteControl.node.input.result",{nodeId:e.id,ok:O.ok,deviceId:O.deviceId||o,inputType:O.inputType,error:O.error}),!O.ok||O.error?E(O.error||"Remote input failed."):/^pointermove$/i.test(O.inputType)||E(`${O.inputType||"Input"} queued.`)}},C.onerror=()=>{y||(Q("error"),E("Remote input socket error."),h.emit("remoteControl.node.input.ws",{nodeId:e.id,ok:!1,deviceId:o,reason:"socket-error"}))},C.onclose=()=>{y||(T.current=null,Q("error"),E("Remote input socket closed."),h.emit("remoteControl.node.input.ws",{nodeId:e.id,ok:!1,deviceId:o,reason:"socket-closed"}))},()=>{y=!0,T.current===C&&(T.current=null),C==null||C.close()}},[te,o,F,e.id,U,s.baseUrl,(kt=(se=s.bridge)==null?void 0:se.status)==null?void 0:kt.bridgeToken]),d.useEffect(()=>{if(!F)return;const y=C=>{C.key==="Escape"&&(C.preventDefault(),ue(!1),E("Remote input locked."),h.emit("remoteControl.node.input.lock",{nodeId:e.id,unlocked:!1,reason:"escape",deviceId:o}))};return window.addEventListener("keydown",y,!0),()=>window.removeEventListener("keydown",y,!0)},[o,F,e.id]);const Le=d.useCallback(y=>{var W;const C=T.current;if(!F||!te||!o||(C==null?void 0:C.readyState)!==WebSocket.OPEN){y.ack&&E(F?"Remote input socket is not ready.":"Remote input locked.");return}const A=`remote-control-input-${Date.now()}-${++x.current}`,{ack:N,...$}=y,D=ar({requestId:A,deviceId:o,ack:N,controlLeaseId:(W=s.hub)==null?void 0:W.hostTargetLeaseId,input:$});if(!D){N&&E("Remote input payload is invalid.");return}const O=I(D.input.type);try{C.send(JSON.stringify(D));const Y=++B.current;(D.ack||Y%24===1)&&h.emit("remoteControl.node.input.sent",{nodeId:e.id,deviceId:o,inputType:O,sampled:!D.ack,sent:Y})}catch(Y){Q("error"),E(Y instanceof Error?Y.message:String(Y))}},[te,o,F,e.id,(Lt=s.hub)==null?void 0:Lt.hostTargetLeaseId]),Je=d.useCallback((y,C,A,N=!1)=>{const $=To(y,N);return $?(Le({type:C,...$,button:vr(y.button),ack:A}),!0):!1},[Le]),Be=d.useCallback(y=>{if(!(!F||!Je(y,"pointerDown",!0,!1))){y.preventDefault(),y.stopPropagation(),y.currentTarget.focus();try{y.currentTarget.setPointerCapture(y.pointerId)}catch{}}},[Je,F]),yt=d.useCallback(y=>{var $,D;if(!F)return;const C=performance.now();if(C-X.current<ur)return;X.current=C;const A=((D=($=y.currentTarget).hasPointerCapture)==null?void 0:D.call($,y.pointerId))===!0;Je(y,"pointerMove",!1,A)&&(y.preventDefault(),y.stopPropagation())},[Je,F]),Ze=d.useCallback(y=>{if(F){y.preventDefault(),y.stopPropagation();try{y.currentTarget.releasePointerCapture(y.pointerId)}catch{}Je(y,"pointerUp",!0,!0)}},[Je,F]),et=d.useCallback(y=>{if(!F)return;const C=To(y,!1);C&&(Le({type:"wheel",...C,deltaX:y.deltaX,deltaY:y.deltaY,ack:!0}),y.preventDefault(),y.stopPropagation())},[F,Le]),Eo=d.useCallback(y=>{!F||y.key==="Escape"||(y.preventDefault(),y.stopPropagation(),Le({type:"keyDown",key:y.key,code:y.code,repeat:y.repeat,ack:!0}))},[F,Le]),Ge=d.useCallback(y=>{!F||y.key==="Escape"||(y.preventDefault(),y.stopPropagation(),Le({type:"keyUp",key:y.key,code:y.code,repeat:!1,ack:!0}))},[F,Le]),jo=d.useCallback(y=>{y.stopPropagation(),Wa(!0),fe("hosted-access-enabled")},[fe]),Jt=d.useCallback(y=>{if(y.stopPropagation(),F){ue(!1),E("Remote input locked."),h.emit("remoteControl.node.input.lock",{nodeId:e.id,unlocked:!1,reason:"manual",deviceId:o});return}if(!te){Q("unavailable"),E("Remote input unavailable."),h.emit("remoteControl.node.input.lock",{nodeId:e.id,unlocked:!1,reason:"unavailable",deviceId:o});return}ue(!0),E("Connecting remote input adapter..."),h.emit("remoteControl.node.input.lock",{nodeId:e.id,unlocked:!0,reason:"manual",deviceId:o})},[te,o,F,e.id]),Lo=d.useCallback(y=>{y.stopPropagation(),fe("manual")},[fe]),Ne=d.useCallback(async y=>{var $;if(y.preventDefault(),y.stopPropagation(),s.source!=="bridge"){Z("LocalBridge is not connected.");return}const C=ve.trim();if(!C){Z("Remote task is empty.");return}if(!o||(R==null?void 0:R.connected)!==!0||!ie){Z("This device cannot accept remote tasks.");return}const A="task-only",N=(($=C.split(/\r?\n/)[0])==null?void 0:$.slice(0,96))||"Remote task";Ve(!0),Z("Queueing device task...");try{const D=await Qa(o,{instruction:C,title:N,approvalLevel:A},s.auth,s.baseUrl),O=D.ok===!0;Z(O?"Queued remote task.":D.error||"Remote task queue failed."),h.emit("remoteControl.node.task.queue",{nodeId:e.id,ok:O,deviceId:o,approvalLevel:A,queued:O?1:0,taskId:D.taskId||"",commandId:D.commandId||"",error:D.error||""}),O&&(me(""),await fe("task-queued"))}catch(D){const O=D instanceof Error?D.message:String(D);Z(O),h.emit("remoteControl.node.task.queue",{nodeId:e.id,ok:!1,deviceId:o,approvalLevel:A,queued:0,error:O})}finally{Ve(!1)}},[ie,R==null?void 0:R.connected,o,e.id,fe,s.auth,s.baseUrl,s.source,ve]);return a.jsxs("div",{ref:n,className:"node-remote-control","data-testid":"remote-control-node","data-remote-source":s.source,"data-remote-transport-visible":r?"true":"false","data-remote-frame-subscription-active":r&&s.source==="bridge"&&(R==null?void 0:R.connected)===!0?"true":"false",onPointerDown:y=>y.stopPropagation(),children:[a.jsxs("div",{className:"node-remote-control__bar",children:[a.jsx("strong",{title:Se,children:Se}),a.jsx("span",{children:ae}),a.jsx("button",{type:"button",title:"Refresh remote device",onClick:Lo,children:a.jsx(fo,{size:12,className:s.loading?"spin-icon":""})}),s.source==="blocked"?a.jsxs("button",{type:"button",onClick:jo,children:[a.jsx(ho,{size:12}),"Enable"]}):a.jsxs("button",{type:"button",disabled:!te&&!F,onClick:Jt,children:[F?a.jsx(Sa,{size:12}):a.jsx(Ra,{size:12}),F?"Lock":"Unlock"]})]}),a.jsxs("div",{className:`node-remote-control__screen ${F&&te?"is-input-active":""}`,tabIndex:F&&te?0:-1,onPointerDown:Be,onPointerMove:yt,onPointerUp:Ze,onWheel:et,onKeyDown:Eo,onKeyUp:Ge,children:[a.jsx("canvas",{ref:i}),F&&te&&a.jsxs("em",{children:[a.jsx(Ma,{size:11}),"input"]})]}),a.jsxs("form",{className:"node-remote-control__taskbar","data-testid":"remote-control-node-taskbar",onSubmit:Ne,children:[a.jsx("input",{"aria-label":"Remote control task",value:ve,maxLength:1200,onChange:y=>me(y.target.value),onPointerDown:y=>y.stopPropagation(),placeholder:ie?`Task for ${Se}`:"Task unavailable"}),a.jsxs("button",{type:"submit",disabled:!ut,title:ut?"Queue task for this device":"This device cannot accept remote tasks",children:[a.jsx(Yo,{size:12,className:J?"spin-icon":""}),"Queue"]})]}),a.jsxs("div",{className:"node-remote-control__footer",children:[a.jsxs("span",{children:["DEVICE ",a.jsx("strong",{children:o||"missing"})]}),a.jsxs("span",{children:["STATE ",a.jsx("strong",{children:(R==null?void 0:R.connected)===!0?"online":"offline"})]}),a.jsxs("span",{children:["INPUT ",a.jsx("strong",{children:Qe})]}),a.jsxs("span",{children:["TASK ",a.jsx("strong",{children:ie?"ready":"off"})]}),a.jsxs("span",{children:["ROUTE ",a.jsx("strong",{children:s.source==="bridge"?"Local":s.source==="blocked"?"Gated":"Preview"})]})]}),a.jsx("p",{className:"node-remote-control__message",children:Po})]})}function yr(e){var t,o,n;return I(((t=e.metadata)==null?void 0:t.RemoteFleetDeviceId)||((o=e.metadata)==null?void 0:o.RemoteSelectedDeviceId)||((n=e.metadata)==null?void 0:n.DeviceId)).trim()}function wt(e){var n,r,s,c,i,m,f,k,T,x,B,w,z;const t=new Date().toISOString();return{deviceId:yr(e)||"remote-control-preview",deviceName:((n=e.metadata)==null?void 0:n.RemoteFleetDeviceName)||e.title||"Remote device",platform:((r=e.metadata)==null?void 0:r.RemoteFleetDevicePlatform)||"unknown",arch:((s=e.metadata)==null?void 0:s.RemoteFleetDeviceArch)||"",connected:/^(1|true|yes|online)$/i.test(((c=e.metadata)==null?void 0:c.RemoteFleetDeviceConnected)||""),lastSeenAt:t,capabilities:{control:/^(1|true|yes|on)$/i.test(((i=e.metadata)==null?void 0:i.RemoteFleetDeviceCanControl)||""),taskDispatch:/^(1|true|yes|on)$/i.test(((m=e.metadata)==null?void 0:m.RemoteFleetDeviceCanDispatchTask)||"")},latestLiveFrame:(f=e.metadata)!=null&&f.RemoteFleetLatestFramePath||(k=e.metadata)!=null&&k.RemoteFleetLatestFrameUrl||(T=e.metadata)!=null&&T.RemoteFleetLatestFrameDataUrl?{framePath:(x=e.metadata)==null?void 0:x.RemoteFleetLatestFramePath,frameUrl:(B=e.metadata)==null?void 0:B.RemoteFleetLatestFrameUrl,dataUrl:(w=e.metadata)==null?void 0:w.RemoteFleetLatestFrameDataUrl,frameSeq:cn((z=e.metadata)==null?void 0:z.RemoteFleetLatestFrameSeq,0)}:void 0}}function cn(e,t){const o=Number(e);return Number.isFinite(o)&&o>=0?o:t}function I(e){return typeof e=="string"?e:typeof e=="number"||typeof e=="boolean"?String(e):""}function ye(e,t){const o=Number(e);return Number.isFinite(o)?o:t}function de(e,t){var n;const o=(n=e.capabilities)==null?void 0:n[t];return typeof o=="boolean"?o:typeof o=="number"?o!==0:typeof o=="string"?/^(1|true|yes|on)$/i.test(o):!1}function kr(e,t,o){const n=e.replace(/^http:/i,"ws:").replace(/^https:/i,"wss:").replace(/\/+$/,""),r=t||"/api/remote/input/ws",s=new URLSearchParams;o&&s.set("token",o);const c=s.toString();return c?`${n}${r}?${c}`:`${n}${r}`}function vr(e){return e===2?"right":e===1?"middle":"left"}function To(e,t=!1){const o=wl(e.currentTarget);if(!o)return null;const n=o.getBoundingClientRect();if(n.width<=0||n.height<=0)return null;const r=Qt.get(o)??{left:0,top:0,width:n.width,height:n.height};return ul(e,n,r,t)}function wl(e){return e instanceof HTMLCanvasElement?e:e.querySelector("canvas")}function ya(e){return e.split(",").map(t=>t.trim()).filter(Boolean)}function Tr(e,t,o,n){const r=e.replace(/^http:/i,"ws:").replace(/^https:/i,"wss:").replace(/\/+$/,""),s=t||"/api/remote/frames/ws",c=new URLSearchParams;o&&c.set("token",o),n.length>0&&c.set("devices",n.join(","));const i=c.toString();return i?`${r}${s}?${i}`:`${r}${s}`}function Ir(e){switch(e){case"ready":return"ready";case"connecting":return"connecting";case"unavailable":return"unavailable";case"error":return"error";default:return"locked"}}function po(e,t){const o=new Date().toISOString(),n=Math.max(12,Math.min(kl,Math.floor(e||we)));return Array.from({length:n},(r,s)=>({deviceId:`remote-node-preview-${s+1}`,deviceName:`Remote ${String(s+1).padStart(2,"0")}`,platform:s%4===0?"linux":"win32",arch:"x64",connected:s<t,lastSeenAt:o,capabilities:{control:!1}}))}function Ho(e){if(typeof window>"u")return!1;try{const t=window.localStorage.getItem(sn);if(String(t||"").trim().toLowerCase()!=="true")return!1;const o=String(window.localStorage.getItem(ln)||"").trim(),n=String(e||"").trim();return!o||o===n}catch{return!1}}function ka(e,t){if(!(typeof window>"u"))try{t?(window.localStorage.setItem(sn,"true"),window.localStorage.setItem(ln,String(e||"").trim())):(window.localStorage.removeItem(sn),window.localStorage.removeItem(ln))}catch{}}function Sl({source:e,hub:t,baseUrl:o,hubLabel:n,routeLabel:r,connected:s,total:c,taskCount:i,taskDispatchCount:m,aiCount:f,pageLabel:k,pageStart:T,pageIndex:x,pageCount:B,projectionMode:w,projectedCount:z,visibleBudget:ee,selectedDeviceId:X,inputLabel:P,devices:ke,latestTaskBatch:F,recentTaskBatches:ue,taskFollowActive:g,taskFollowKey:Q,isHostActiveForNode:pe,registryRouteInfo:E,hostTargetRenewMs:ve,autoHostEnabled:me,agent:J,agentStatusLabel:Ve,agentRunning:qe,agentReady:Z,message:R}){const Se=Cn(t),ae=pe?"hosting":(t==null?void 0:t.hostTargetActive)===!0?"other-monitor":"inactive",j=Al(ke);return{SemanticType:"RemoteFleetMonitor",RemoteFleetSchemaVersion:"remote-fleet@1",RemoteFleetViewMode:"all-devices",RemoteFleetLastRefreshAtUtc:new Date().toISOString(),RemoteFleetHubStatus:(t==null?void 0:t.started)===!0?"online":e==="blocked"?"gated":e==="bridge"?"ready":e,RemoteFleetHubEndpoint:Se,RemoteFleetManagerPackage:I(t==null?void 0:t.managerPackage)||"@mindexec/cli",RemoteFleetManagerVersion:I(t==null?void 0:t.managerVersion),RemoteFleetAgentPackage:I(t==null?void 0:t.agentPackage)||"@mindexec/remote",RemoteFleetPairTokenPreview:I(t==null?void 0:t.pairTokenPreview)||"<pair-token>",RemoteFleetConnectCommand:xr(t),RemoteFleetDeviceCount:String(c),RemoteFleetConnectedDeviceCount:String(s),RemoteFleetDevicesJson:JSON.stringify(j),RemoteFleetLatestTaskBatchJson:F?JSON.stringify(va(F)):"",RemoteFleetRecentTaskBatchesJson:JSON.stringify((ue??[]).slice(0,6).map(va)),RemoteFleetTaskFollowActive:String(g),RemoteFleetTaskFollowKey:Q,RemoteFleetTaskFollowRefreshMs:String(g?bo:0),RemoteFleetTaskFollowMaxTicks:String(St),RemoteFleetProjectionMode:w,RemoteFleetProjectedDeviceCount:String(z),RemoteFleetCanvasPagination:`${w}:${x+1}/${B}`,RemoteFleetHostTargetState:ae,RemoteFleetHostTargetNodeId:I(t==null?void 0:t.hostTargetNodeId),RemoteFleetHostTargetLeaseId:I(t==null?void 0:t.hostTargetLeaseId),RemoteFleetRegistryStatus:E.status,RemoteFleetRegistryReason:E.reason,RemoteFleetAccountRouteReady:String(E.accountRouteReady),RemoteFleetRegistryMigrationBlocked:String(E.migrationBlocked),RemoteFleetHostTargetRenewMs:String(ve),RemoteFleetAutoHost:String(me),RemoteFleetHostTargetEndpoint:I(t==null?void 0:t.hostTargetEndpoint)||Se,RemoteFleetHostTargetActivatedAtUtc:I(t==null?void 0:t.hostTargetActivatedAt),RemoteFleetHostTargetUpdatedAtUtc:I(t==null?void 0:t.hostTargetUpdatedAt),RemoteFleetHostTargetExpiresAtUtc:I(t==null?void 0:t.hostTargetExpiresAt),RemoteAgentStatus:Ve,RemoteAgentRunning:String(qe),RemoteAgentReady:String(Z),RemoteAgentManager:I(J==null?void 0:J.manager),RemoteAgentLeaseId:I(J==null?void 0:J.leaseId),RemoteAgentNodeId:I(J==null?void 0:J.nodeId),RemoteAgentUpdatedAtUtc:I(J==null?void 0:J.updatedAt),RemoteAgentLastError:I((J==null?void 0:J.lastError)||(J==null?void 0:J.reconnectReason)),RemoteFleetLastError:e==="bridge"?I(t==null?void 0:t.lastError):R,RemoteHub:n,RemoteRoute:r,RemoteRegistryRoute:E.status,RemoteRegistryReason:E.reason,RemoteConnected:String(s),RemoteTotal:String(c),RemoteProjected:String(z),RemoteProjection:w,RemotePage:k,RemotePageStart:String(T),RemoteVisibleBudget:String(ee),RemoteSelectedDeviceId:X,RemoteInput:P,RemoteTasksQueued:String(i),RemoteTaskDevices:String(m),RemoteAiDevices:String(f),RemoteBaseUrl:o,AdapterState:e==="bridge"?"localbridge-connected":e==="blocked"?"adapter-gated":e}}function Rl(e,t){const o=I(e==null?void 0:e.agentEndpointRouteReason).trim(),n=(e==null?void 0:e.agentEndpointAccountRouteReady)===!0,r=Cr(o);return(t?"account":(e==null?void 0:e.hostTargetActive)===!0?"other-monitor":"idle")==="other-monitor"?{status:"other-monitor",value:"Other",tone:"default",reason:o,accountRouteReady:n,migrationBlocked:r,title:o||"Another monitor currently owns the host route."}:t?n?{status:"account",value:"Account",tone:"online",reason:o||"ok",accountRouteReady:!0,migrationBlocked:!1,title:"Published to the account route registry for same-account agent pairing."}:Ml(o)?{status:"blocked",value:"Blocked",tone:"warn",reason:o,accountRouteReady:!1,migrationBlocked:r,title:r?"Account route registry needs the Supabase remote_host_targets migration.":o||"The local host is active, but account route publishing failed."}:{status:"local",value:"Local",tone:"warn",reason:o,accountRouteReady:!1,migrationBlocked:r,title:o||"The local host is active, but account route publishing is not available."}:{status:"idle",value:"Idle",tone:"default",reason:o,accountRouteReady:n,migrationBlocked:r,title:o||"No active host route."}}function Cr(e){return/registry-table-unavailable|PGRST20[25]|remote_host_targets|set_remote_host_target|clear_remote_host_target/i.test(String(e||""))}function Ml(e){return Cr(e)||/invalid-manager-endpoint|blocked|failed|error|unavailable|unauthori[sz]ed|forbidden/i.test(String(e||""))}function Cn(e){const t=I(e==null?void 0:e.agentEndpoint).trim();if(t)return t;const o=I((e==null?void 0:e.agentHost)||(e==null?void 0:e.host)).trim()||"127.0.0.1",n=Number((e==null?void 0:e.port)||5197);return`${o}:${Number.isFinite(n)&&n>0?n:5197}`}function xr(e){const t=Cn(e),o=I(e==null?void 0:e.pairTokenPreview).trim()||"<pair-token>";return`npx @mindexec/remote connect --manager ${t} --pair ${o}`}function Al(e){return e.filter(t=>t.connected===!0).map(t=>{var r,s,c,i,m,f,k,T,x,B,w;const o=$t(t),n=t.latestTask;return{deviceId:at(t),sessionId:I(t.sessionId),name:gt(t),hostname:I(t.hostname),platform:Wt(t),arch:I(t.arch),agentVersion:I(t.agentVersion),connected:t.connected===!0,lastSeenAt:I(t.lastSeenAt),lastStatusAt:I(t.lastStatusAt),computerAgentEnabled:de(t,"taskDispatch"),controlEnabled:de(t,"control"),thumbnailEnabled:de(t,"thumbnail")||de(t,"screen"),liveStreamEnabled:de(t,"liveStream"),aiAssistEnabled:de(t,"aiAssist"),aiModel:I((r=t.capabilities)==null?void 0:r.aiModel),aiProvider:I((s=t.capabilities)==null?void 0:s.aiProvider),thumbnailFrameUrl:I(((c=t.latestThumbnail)==null?void 0:c.frameUrl)||((i=t.latestThumbnail)==null?void 0:i.framePath)),liveFrameUrl:I(((m=t.latestLiveFrame)==null?void 0:m.frameUrl)||((f=t.latestLiveFrame)==null?void 0:f.framePath)),latestFrameSeq:dt(o),liveStreamActive:((k=t.activeLiveStream)==null?void 0:k.active)===!0,liveStreamId:I((T=t.activeLiveStream)==null?void 0:T.streamId),liveStreamFps:ye((x=t.activeLiveStream)==null?void 0:x.fps,0),latestTaskBatchId:I(n==null?void 0:n.batchId),latestTaskId:I(n==null?void 0:n.taskId),latestTaskStatus:I(n==null?void 0:n.status),latestTaskApprovalLevel:I(n==null?void 0:n.approvalLevel),latestTaskResultModel:I(n==null?void 0:n.resultModel),latestTaskResultResponseId:I(n==null?void 0:n.resultResponseId),latestTaskResultSummary:I(n==null?void 0:n.resultSummary),tasksQueued:ye((B=t.counters)==null?void 0:B.tasksQueued,0),taskResultsReceived:ye((w=t.counters)==null?void 0:w.taskResultsReceived,0)}})}function va(e){return{batchId:I(e.batchId),title:I(e.title),instructionPreview:I(e.instructionPreview),approvalLevel:I(e.approvalLevel),status:I(e.status),requestedAt:I(e.requestedAt),updatedAt:I(e.updatedAt),total:ye(e.total,0),queued:ye(e.queued,0),pending:ye(e.pending,0),completed:ye(e.completed,0),failed:ye(e.failed,0),timedOut:ye(e.timedOut,0)}}function Pl(e,t){return Ta(e)?e:(t??[]).find(Ta)}function El(e){if(!e)return"";const t=I(e.batchId).trim();return t||[I(e.title).trim(),I(e.requestedAt).trim(),I(e.updatedAt).trim(),String(ye(e.total,0)||"")].filter(Boolean).join(":")}function Ta(e){if(!e)return!1;const t=I(e.status).trim().toLocaleLowerCase(),o=ye(e.pending,0),n=ye(e.total,0),r=ye(e.completed,0),s=ye(e.failed,0),c=ye(e.timedOut,0);return["completed","completed-with-failures","failed","cancelled","canceled","done"].includes(t)?!1:o>0||["running","queued","pending","targeted","dispatching","in-progress"].includes(t)?!0:n>0&&r+s+c<n}function jl(e,t){const o=Ll(e);return{manager:o[0]||"",managerCandidates:o,pairToken:I(e==null?void 0:e.pairToken).trim(),leaseId:I(e==null?void 0:e.hostTargetLeaseId).trim(),nodeId:t,engine:"auto",source:"react-remote-monitor"}}function Ll(e){const t=Array.isArray(e==null?void 0:e.agentEndpointCandidateDetails)?e.agentEndpointCandidateDetails:[],o=[e==null?void 0:e.hostTargetEndpoint,...Array.isArray(e==null?void 0:e.hostTargetEndpointCandidates)?e.hostTargetEndpointCandidates:[],e==null?void 0:e.agentEndpoint,...Array.isArray(e==null?void 0:e.agentEndpointCandidates)?e.agentEndpointCandidates:[],...t.map(s=>s.endpoint||s.address),Cn(e)],n=new Set,r=[];for(const s of o){const c=Nl(s),i=c.toLowerCase();if(!(!c||n.has(i))&&(n.add(i),r.push(c),r.length>=12))break}return r}function Nl(e){const t=I(e).trim(),o=t.match(/^(\[[^\]]+\]|[^:\s]+):(\d{1,5})$/);if(!o)return"";const n=Number(o[2]);return!Number.isInteger(n)||n<=0||n>65535?"":t}function Dl(e,t){if(t==="blocked")return"gated";if(t!=="bridge")return t;if(!e)return"unknown";const o=I(e.status).trim().toLowerCase();return Sr(e)?"ready":o||(wr(e)?"running":"idle")}function wr(e){const t=I(e==null?void 0:e.status).trim().toLowerCase();return(e==null?void 0:e.running)===!0||t==="running"||t==="starting"}function Sr(e){const t=I(e==null?void 0:e.status).trim().toLowerCase();return(e==null?void 0:e.ready)===!0||t==="ready"}function Ol({source:e,hasAuth:t,isHostActiveForNode:o,request:n,busy:r}){return r?"RemoteAgent action is already running.":e!=="bridge"?"LocalBridge is not connected.":t?o?"This monitor is already the active host target.":n.manager?n.pairToken?"":"RemoteAgent pair token is missing.":"RemoteAgent manager endpoint is missing.":"LocalBridge auth token is not available."}function at(e){return String(e.deviceId||e.sessionId||e.deviceName||"").trim()}function gt(e){return String(e.deviceName||e.hostname||at(e)||"Remote device").trim()}function Wt(e){var t;return String(((t=e.status)==null?void 0:t.platform)||e.platform||"unknown").trim()}function _l(e){return hr.includes(e)?e:"status"}function Fl(e){return gr.includes(e)?e:"connected"}function Bl(e){return br.includes(e)?e:"all"}function Gl(e){switch(e){case"activity":return"Activity";case"platform":return"Platform";case"capability":return"Capability";default:return"Status"}}function Ul(e){switch(e){case"all":return"All";case"offline":return"Offline";default:return"Live"}}function zl(e){switch(e){case"control":return"Control";case"task":return"Task";case"ai":return"AI";default:return"Any"}}function $l(e,t){switch(t){case"activity":return Vl(e);case"platform":return Wt(e).toLocaleLowerCase()||"unknown";case"capability":return ql(e);default:return e.connected===!0?"online":"offline"}}function Vl(e){var o,n,r,s;const t=I((o=e.latestTask)==null?void 0:o.status).toLocaleLowerCase();return t==="running"||t==="queued"?`task-${t}`:((n=e.activeLiveStream)==null?void 0:n.active)===!0?"live":Number(((r=e.counters)==null?void 0:r.liveFramesReceived)||0)>0?"live-recent":Number(((s=e.counters)==null?void 0:s.thumbnailFramesReceived)||0)>0?"thumbnail":e.lastStatusAt||e.lastSeenAt?"heartbeat":"idle"}function ql(e){return de(e,"aiAssist")?"ai-assist":de(e,"taskDispatch")?"task-dispatch":de(e,"control")?"control":de(e,"thumbnail")||de(e,"screen")?"screen":"view-only"}function $t(e){return e.latestLiveFrame||e.latestThumbnail}function xn(e){return(e==null?void 0:e.dataUrl)||(e==null?void 0:e.frameUrl)||(e==null?void 0:e.framePath)||""}function Rr(e){return e.live||e.thumbnail}function dt(e){const t=Number((e==null?void 0:e.frameSeq)||0);return Number.isFinite(t)&&t>0?t:0}function wn(e,t,o){var n,r;return Math.max(e.get(o)||0,dt((n=t.get(o))==null?void 0:n.metadata),dt((r=Ar(o))==null?void 0:r.metadata))}function Mr(e,t,o,n){e.has(t)&&e.delete(t);const r={metadata:{...o,deviceId:t},payload:n.slice(0),cachedAt:Date.now()};return e.set(t,r),Kt(e,rn),Wl(t,r),r}function Kt(e,t,o=Number.POSITIVE_INFINITY){const n=Date.now();for(const[r,s]of e)(!s||!s.payload||Number.isFinite(o)&&n-s.cachedAt>o)&&e.delete(r);for(;e.size>t;){const r=e.keys().next().value;if(!r)break;e.delete(r)}}function Wl(e,t){e&&(Rt.has(e)&&Rt.delete(e),Rt.set(e,{metadata:{...t.metadata,deviceId:e},payload:t.payload,cachedAt:t.cachedAt}),Kt(Rt,pr,mr))}function Ar(e){return Kt(Rt,pr,mr),Rt.get(e)}function Pr(e,t){Kt(e,rn);const o=e.get(t);if(o)return{cached:o,scope:"local"};const n=Ar(t);return n?(e.set(t,n),Kt(e,rn),{cached:n,scope:"global"}):null}async function Io(e,t,o,n){const r=I(t.metadata.deviceId).trim();if(!r||o.has(r))return!1;const s=dt(t.metadata),c=n.get(r)||0;if(s>0&&s<=c)return!1;o.add(r);try{const i=await Sn(e,t.metadata,t.payload);return i&&s>0&&n.set(r,s),i}catch{return!1}finally{o.delete(r)}}function Ao(e){const t=e.getBoundingClientRect(),o=Math.max(64,Math.round(t.width||120)),n=Math.max(42,Math.round(t.height||72)),r=Math.min(Tl,Math.max(1,window.devicePixelRatio||1)),s=Math.round(o*r),c=Math.round(n*r),i=Math.abs(e.width-s),m=Math.abs(e.height-c);(e.width<=0||e.height<=0||i>ha||m>ha)&&(e.width=s,e.height=c);const k=e.getContext("2d",{alpha:!1});return k?(k.setTransform(r,0,0,r,0,0),{ctx:k,width:o,height:n}):null}function Co(e,t,o){const n=Ao(e);if(!n)return;const{ctx:r,width:s,height:c}=n;Qt.set(e,{left:0,top:0,width:s,height:c});const i=t.connected===!0;r.fillStyle=i?"#ffffff":"#f8fafc",r.fillRect(0,0,s,c),r.strokeStyle=i?"#dbeafe":"#e2e8f0",r.lineWidth=1,r.strokeRect(.5,.5,s-1,c-1),r.fillStyle=i?"#bfdbfe":"#e2e8f0",r.fillRect(8,8,Math.max(12,s*.34),5),r.fillRect(8,18,Math.max(20,s*.52),5),r.fillStyle=o==="blocked"?"#94a3b8":"#cbd5e1",r.font="700 9px Inter, sans-serif",r.fillText(o==="bridge"?"waiting":o,8,c-8)}async function Er(e,t,o){const n=t.startsWith("data:")?t:Ws(t,o);if(!n)return!1;const r=new Image;r.decoding="async",r.loading="eager",r.src=n,await r.decode();const s=Ao(e);if(!s)return!1;const{ctx:c,width:i,height:m}=s;return c.fillStyle="#020617",c.fillRect(0,0,i,m),Qt.set(e,Rn(c,r,i,m)),!0}async function Sn(e,t,o){const n=new Blob([o],{type:t.mimeType||"image/jpeg"});let r=null;try{r=await createImageBitmap(n);const s=Ao(e);if(!s)return!1;const{ctx:c,width:i,height:m}=s;return c.fillStyle="#020617",c.fillRect(0,0,i,m),Qt.set(e,Rn(c,r,i,m)),!0}catch{return Kl(e,t,n)}finally{r==null||r.close()}}async function Kl(e,t,o){const n=URL.createObjectURL(o);try{const r=new Image;r.decoding="async",r.loading="eager",r.src=n,await r.decode();const s=Ao(e);if(!s)return!1;const{ctx:c,width:i,height:m}=s;return c.fillStyle="#020617",c.fillRect(0,0,i,m),Qt.set(e,Rn(c,r,i,m)),!0}catch{return h.emit("remoteMonitor.node.frameDecodeFailed",{deviceId:I(t.deviceId),frameSeq:Number(t.frameSeq||0)||0,mimeType:t.mimeType||"",byteLength:Number(t.byteLength||o.size||0)||0}),!1}finally{URL.revokeObjectURL(n)}}async function dn(e,t,o,n,r,s,c){const i=xn(o),m={painted:!1,busy:!1,staleDropped:!1,frameSeq:0,previous:0};if(!e||!i)return m;if(r.has(t))return{...m,busy:!0};const f=Number((o==null?void 0:o.frameSeq)||0)||0,k=wn(s,c,t);if(f>0&&f<=k||f<=0&&k>0)return{painted:!1,busy:!1,staleDropped:!0,frameSeq:f,previous:k};r.add(t);try{const T=await Er(e,i,n);return T&&f>0&&s.set(t,f),{painted:T,busy:!1,staleDropped:!1,frameSeq:f,previous:k}}catch{return{painted:!1,busy:!1,staleDropped:!1,frameSeq:f,previous:k}}finally{r.delete(t)}}function Rn(e,t,o,n){const r="width"in t?Number(t.width):o,s="height"in t?Number(t.height):n,c=Math.min(o/Math.max(1,r),n/Math.max(1,s)),i=r*c,m=s*c,f=(o-i)/2,k=(n-m)/2;return e.drawImage(t,f,k,i,m),{left:f,top:k,width:i,height:m}}function zd({launchers:e,activeLauncher:t,template:o,selectedOptionId:n,values:r,validationMessage:s,canCreate:c,primaryLabel:i="Create board",onLauncherSelected:m,onOptionSelected:f,onInputChanged:k,onCreate:T,onClose:x}){const B=(o==null?void 0:o.inputs)??[];return a.jsx("div",{className:"template-launcher-backdrop","data-testid":"template-launcher-panel",onMouseDown:x,children:a.jsxs("section",{className:"template-launcher-panel floating-panel",onMouseDown:w=>w.stopPropagation(),children:[a.jsxs("header",{className:"template-launcher-head",children:[a.jsxs("div",{children:[a.jsx("span",{children:"Execution Canvas"}),a.jsx("strong",{children:t.label})]}),a.jsx("button",{type:"button",title:"Close template launcher",onClick:x,children:a.jsx(xo,{size:16})})]}),a.jsx("div",{className:"template-launcher-tabs","aria-label":"Template launchers",children:e.map(w=>a.jsxs("button",{type:"button",className:w.id===t.id?"is-active":"","data-testid":"template-launcher-tab","data-launcher-id":w.id,onClick:()=>m(w.id),children:[a.jsx(ki,{size:14}),a.jsx("span",{children:w.label})]},w.id))}),a.jsx("p",{className:"template-launcher-description",children:t.description}),t.options.length>0&&a.jsxs("div",{className:"template-launcher-option-block",children:[a.jsx("div",{className:"template-launcher-prompt",children:t.prompt||"Choose the board to create."}),a.jsx("div",{className:"template-launcher-chips",children:t.options.map(w=>a.jsxs("button",{type:"button",className:n===w.id?"is-active":"","data-testid":"template-option","data-option-id":w.id,onClick:()=>f(w.id),children:[a.jsx("strong",{children:w.label}),a.jsx("span",{children:w.description})]},w.id))})]}),B.length>0&&a.jsx("div",{className:"template-launcher-form",children:B.map(w=>a.jsx(Hl,{input:w,value:r[w.key]??"",onChange:z=>k(w.key,z)},w.key))}),s&&a.jsx("div",{className:"template-launcher-validation",children:s}),a.jsxs("footer",{className:"template-launcher-footer",children:[a.jsx("button",{type:"button",className:"template-launcher-secondary",onClick:x,children:"Cancel"}),a.jsxs("button",{type:"button",className:"template-launcher-primary","data-testid":"template-create",disabled:!c,onClick:T,children:[a.jsx(xa,{size:15}),a.jsx("span",{children:i})]})]})]})})}function Hl({input:e,value:t,onChange:o}){return a.jsxs("label",{className:"template-launcher-field",children:[a.jsxs("span",{children:[a.jsx("strong",{children:e.label}),e.description&&a.jsx("small",{children:e.description})]}),e.type==="textarea"?a.jsx("textarea",{placeholder:e.placeholder,value:t,onChange:n=>o(n.target.value)}):e.type==="select"?a.jsx("select",{value:t,onChange:n=>o(n.target.value),children:(e.options??[]).map(n=>a.jsx("option",{value:n.value,children:n.label},n.value))}):a.jsx("input",{type:"text",placeholder:e.placeholder,value:t,onChange:n=>o(n.target.value)})]})}function $d({node:e,onSave:t,onClose:o}){var f,k,T,x,B,w;const[n,r]=d.useState(((f=e.metadata)==null?void 0:f.DirectoryPath)??e.sourceFilePath??""),[s,c]=d.useState(((k=e.metadata)==null?void 0:k.Include)??""),[i,m]=d.useState(((T=e.metadata)==null?void 0:T.Exclude)??"");return d.useEffect(()=>{var z,ee,X;r(((z=e.metadata)==null?void 0:z.DirectoryPath)??e.sourceFilePath??""),c(((ee=e.metadata)==null?void 0:ee.Include)??""),m(((X=e.metadata)==null?void 0:X.Exclude)??"")},[e.id,(x=e.metadata)==null?void 0:x.DirectoryPath,(B=e.metadata)==null?void 0:B.Exclude,(w=e.metadata)==null?void 0:w.Include,e.sourceFilePath]),a.jsx("div",{className:"directory-settings-backdrop","data-testid":"directory-settings-dialog",onMouseDown:o,children:a.jsxs("section",{className:"directory-settings-dialog","aria-label":"Folder scan settings","data-disable-mindcanvas-hotkeys":"true",onMouseDown:z=>z.stopPropagation(),children:[a.jsxs("header",{className:"directory-settings-head",children:[a.jsxs("div",{children:[a.jsxs("span",{children:[a.jsx(vi,{size:15}),"Folder scan settings"]}),a.jsx("strong",{title:e.sourceFilePath||e.title,children:e.title})]}),a.jsx("button",{type:"button",title:"Close folder scan settings","aria-label":"Close folder scan settings","data-testid":"directory-settings-close",onClick:o,children:a.jsx(xo,{size:16})})]}),a.jsxs("div",{className:"directory-settings-body",children:[a.jsxs("label",{className:"directory-setting-row",children:[a.jsxs("span",{children:[a.jsx(Ti,{size:14}),"LocalBridge path"]}),a.jsx("input",{value:n,placeholder:"E:\\\\Dev@Work\\\\Project or relative/path","data-testid":"directory-settings-path",onChange:z=>r(z.target.value)})]}),a.jsxs("label",{className:"directory-setting-row",children:[a.jsxs("span",{children:[a.jsx(Ii,{size:14}),"Extensions to include"]}),a.jsx("input",{value:s,placeholder:".cs, .js, .razor, .css","data-testid":"directory-settings-include",onChange:z=>c(z.target.value)})]}),a.jsxs("label",{className:"directory-setting-row",children:[a.jsxs("span",{children:[a.jsx(Ci,{size:14}),"Paths/files to exclude"]}),a.jsx("input",{value:i,placeholder:"bin, obj, .git, node_modules","data-testid":"directory-settings-exclude",onChange:z=>m(z.target.value)})]})]}),a.jsxs("footer",{className:"directory-settings-footer",children:[a.jsx("button",{type:"button","data-testid":"directory-settings-cancel",onClick:o,children:"Cancel"}),a.jsxs("button",{type:"button",className:"is-primary","data-testid":"directory-settings-save",onClick:()=>t(e.id,{DirectoryPath:n.trim(),Include:s.trim(),Exclude:i.trim()}),children:[a.jsx(Aa,{size:15}),"Save"]})]})]})})}const Mn=.001,Xl=1,Yl=5,Ql=1.35,Jl=1.3,Zl=1.45,ec=.002,tc=.01,oc=.03,nc=.002,ac=.015,rc=.05,ic=5,sc=20,lc=100,cc=2,Ia=2500,dc=800,uc=1200,pc=1800,mc=2600,hc={"deepseek/deepseek-v4-flash":{promptUsdPerToken:14e-8,completionUsdPerToken:28e-8,source:"openrouter"},"deepseek/deepseek-v4-pro":{promptUsdPerToken:435e-9,completionUsdPerToken:87e-8,source:"openrouter"},"deepseek/deepseek-chat-v3-0324":{promptUsdPerToken:14e-8,completionUsdPerToken:28e-8,source:"openrouter"},"gpt-image-2":{averageUsd:.02,source:"imagerouter"},"Tongyi-MAI/Z-Image-Turbo:free":{averageUsd:.02,source:"imagerouter"},"google/veo-2":{averageUsd:.25,maxUsd:.25,source:"imagerouter"},"runway/gen-3":{averageUsd:.2,maxUsd:.2,source:"imagerouter"}};function gc(e){const t=wc(e.reasoningEffort);return e.mode==="Text"?vc(e.provider,t,e.vendorPricing):e.mode==="Image"&&e.provider==="openai-codex"&&Rc(e.modelId)?st("Free",0,"Codex Responses image generation",void 0,"codex",!1):e.mode==="Image"?Ic(e.vendorPricing):e.mode==="Video"?Cc(e.vendorPricing):Pt("Unavailable")}function bc(e){const t=e.settings.inputMode==="Image"||e.settings.inputMode==="Video"?e.settings.inputMode:"Text",o=kc(e.settings,t);return gc({mode:t,provider:yc(e.settings),modelId:o,reasoningEffort:e.settings.effort,vendorPricing:fc(o)})}function fc(e){const t=Mc(e);return hc[t]??null}function yc(e){switch(e.aiProvider??"OpenAI Codex"){case"Local Ollama":return"local-ollama";case"BYOK":return"byok";case"Managed Cloud":return"managed-cloud";case"Gemini CLI":return"google-gemini-cli";case"OpenAI Codex":default:return"openai-codex"}}function kc(e,t){return t==="Image"?Jo("Image",e).id:t==="Video"?Jo("Video",e).id:e.model}function vc(e,t,o){switch(e){case"local-ollama":return st("Free",0,"Local execution",void 0,"ollama",!1);case"byok":return st("ServiceFeeOnly",cc,"BYOK platform fee",void 0,"byok",!1);case"openai-codex":return st("Free",0,"Codex CLI local execution",void 0,"codex",!1);case"google-gemini-cli":return st("Free",0,"Gemini CLI local execution",void 0,"gemini-cli",!1);case"managed-cloud":default:return Tc(t,o)}}function Tc(e,t){if(!bt(t==null?void 0:t.promptUsdPerToken)||!bt(t==null?void 0:t.completionUsdPerToken))return Pt("Pricing unavailable");const o=xc(e),n=((t==null?void 0:t.requestUsd)??0)+t.promptUsdPerToken*Ia+t.completionUsdPerToken*o,r=n*Ql+ec+nc,s=An(Math.max(r/Mn,ic),Xl);return st("FixedPoints",s,`Base run (${un(Ia)} in / ${un(o)} out)`,n,t.source,!0)}function Ic(e){if(!e)return Pt("Pricing unavailable");let t=e.averageUsd??e.maxUsd??e.minUsd;if(!bt(t))return Pt("Pricing unavailable");bt(e.minUsd)&&(t=Math.max(t,e.minUsd*1.15));const o=t*Jl+tc+ac,n=An(Math.max(o/Mn,sc),Yl);return st("FixedPoints",n,"Base image generation",t,e.source,!0)}function Cc(e){if(!e)return Pt("Pricing unavailable");let t=0;if(bt(e.maxUsd)&&(t=Math.max(t,e.maxUsd)),bt(e.averageUsd)&&(t=Math.max(t,e.averageUsd*1.25)),bt(e.minUsd)&&(t=Math.max(t,e.minUsd)),t<=0)return Pt("Pricing unavailable");const o=t*Zl+oc+rc,n=An(Math.max(o/Mn,lc),10);return st("FixedPoints",n,"Base video generation",t,e.source,!0)}function xc(e){switch(e){case"low":return dc;case"high":return pc;case"xhigh":return mc;case"medium":default:return uc}}function wc(e){switch(String(e??"").trim().toLowerCase()){case"fast":case"low":return"low";case"deep":case"xhigh":return"xhigh";case"high":return"high";case"normal":case"medium":default:return"medium"}}function An(e,t){return t<=1?Math.ceil(e):Math.ceil(e/t)*t}function st(e,t,o,n,r,s){return{billingKind:e,displayPoints:t,displayLabel:Sc(t),basisLabel:o,isEstimatedFromCatalog:s,vendorCostUsdSnapshot:n,vendorPricingSource:r}}function Pt(e){return{billingKind:"Unavailable",displayPoints:0,displayLabel:e,basisLabel:"Pricing unavailable",isEstimatedFromCatalog:!1}}function Sc(e){return`${un(e)}P`}function un(e){return e.toLocaleString("en-US",{maximumFractionDigits:0})}function Rc(e){return String(e??"").trim().toLowerCase().startsWith("codex-image:")}function Mc(e){return String(e??"").trim()}function bt(e){return typeof e=="number"&&Number.isFinite(e)}const Xo=[{id:"frame",label:"Frame Perf",icon:xi},{id:"render",label:"Render Debug",icon:wi},{id:"prompt",label:"Prompt Debug",icon:Si},{id:"points",label:"Points",icon:Ri},{id:"dev",label:"Dev",icon:Mi}],mo=[{key:"frameProbe",label:"Frame profiler",description:"Tracks local React frame budget and viewport pressure.",defaultValue:!0},{key:"motionGuard",label:"Motion guard",description:"Highlights pan and zoom paths that must stay patch-only.",defaultValue:!0},{key:"overlayAudit",label:"Overlay debug",description:"Checks floating panels, popovers, and result overlays.",defaultValue:!0},{key:"bridgeGate",label:"LocalBridge gate monitor",description:"Keeps hosted loopback access explicit and visible.",defaultValue:!0},{key:"storageTrace",label:"Storage trace",description:"Surfaces local save and restore evidence for this board.",defaultValue:!0}],Ac=[{route:"/code",label:"CodeGraph",description:"Repository graph, agent commands, and code notes."},{route:"/planmaster",label:"PlanMaster",description:"Goal planning, step states, and execution memory."},{route:"/youtube",label:"YouTube Capture",description:"Local YouTube search flow and MindCanvas handoff."},{route:"/company-core",label:"CompanyCore",description:"Company cockpit, approvals, artifacts, and publishing jobs."},{route:"/admin/dashboard",label:"Admin Dashboard",description:"Billing, entitlement, refund, and audit shell."},{route:"/tools",label:"Free Tools",description:"Markdown, note, and clipboard mini workflows."}];function Pc(e,t,o){const n=(0-t.x)/t.scale,r=(0-t.y)/t.scale,s=(o.width-t.x)/t.scale,c=(o.height-t.y)/t.scale;return e.nodes.filter(i=>{const m=i.x+i.width,f=i.y+i.height;return m>=n&&i.x<=s&&f>=r&&i.y<=c}).length}function Ec(e,t){const o=e.trim().split(/\s+/).filter(Boolean).length,n=Math.max(1,Math.ceil(o/120)),r=t==="Deep"?3:t==="Fast"?1:2;return{words:o,estimatedTokens:Math.max(8,Math.ceil(e.length/4)),points:n*r}}function jc(e,t,o){return[`Board: ${e.name}`,`Nodes: ${e.nodes.length}`,`Edges: ${e.edges.length}`,`Selected: ${t?`${t.title} (${t.kind})`:"none"}`,`Model: ${e.settings.model}`,`Effort: ${e.settings.effort}`,"",o].join(`
44
44
  `)}function Vd({board:e,selectedNode:t,selectedCount:o,input:n,viewport:r,viewportSize:s,localBridgeState:c,syncStatus:i,syncMessage:m,buildPrompt:f,navigate:k,onClose:T}){const[x,B]=d.useState("frame"),[w,z]=d.useState(""),[ee,X]=d.useState("idle"),[P,ke]=d.useState(null),[F,ue]=d.useState(()=>Object.fromEntries(mo.map(j=>[j.key,j.defaultValue]))),g=d.useMemo(()=>Pc(e,r,s),[e,r,s]),Q=w||f(),pe=d.useMemo(()=>Ec(Q,e.settings.effort),[e.settings.effort,Q]),E=d.useMemo(()=>bc(e),[e,e.settings.aiProvider,e.settings.effort,e.settings.imageRouterImageModel,e.settings.imageRouterVideoModel,e.settings.inputMode,e.settings.model]),ve=Xo.find(j=>j.id===x)??Xo[0],me=ve.icon;d.useEffect(()=>{if(x!=="points")return;const j=e.settings.inputMode==="Image"?e.settings.imageRouterImageModel:e.settings.inputMode==="Video"?e.settings.imageRouterVideoModel:e.settings.model;h.emit("promptDebug.points.quote",{mode:e.settings.inputMode,model:j??"",billingKind:E.billingKind,displayPoints:E.displayPoints,pricingSource:E.vendorPricingSource??"none",estimatedFromCatalog:E.isEstimatedFromCatalog})},[x,e.settings.imageRouterImageModel,e.settings.imageRouterVideoModel,e.settings.inputMode,e.settings.model,E.billingKind,E.displayPoints,E.isEstimatedFromCatalog,E.vendorPricingSource]);const J=j=>{B(j),h.emit("promptDebug.tab",{tab:j})},Ve=()=>{const j=f();z(j),ke(new Date().toLocaleTimeString()),X("idle"),h.emit("promptDebug.build",{tab:x,selectedKind:(t==null?void 0:t.kind)??"none",chars:j.length})},qe=async()=>{const j=jc(e,t,w||f());try{const U=await Tn(j);X("copied"),h.emit("promptDebug.copy",{ok:!0,tab:x,method:U})}catch(U){const te=document.querySelector('[data-testid="prompt-debug-preview"]');if(te){te.focus(),te.select(),B("prompt"),X("selected"),h.emit("promptDebug.copy",{ok:!1,selected:!0,tab:x,message:U instanceof Error?U.message:String(U)});return}X("failed"),h.emit("promptDebug.copy",{ok:!1,tab:x,message:U instanceof Error?U.message:String(U)})}},Z=()=>{z(""),ke(null),X("idle"),h.emit("promptDebug.clear",{tab:x})},R=j=>{ue(Object.fromEntries(mo.map(U=>[U.key,j]))),h.emit("promptDebug.renderToggle",{all:j})},Se=()=>{ue(Object.fromEntries(mo.map(j=>[j.key,j.defaultValue]))),h.emit("promptDebug.renderToggle",{reset:!0})},ae=(j,U)=>{ue(te=>({...te,[j]:U})),h.emit("promptDebug.renderToggle",{key:j,value:U})};return a.jsx("div",{className:"prompt-debug-backdrop","data-testid":"prompt-debug-dialog",onMouseDown:T,children:a.jsxs("section",{className:"prompt-debug-dialog","aria-label":"Prompt debugger","data-disable-mindcanvas-hotkeys":"true",onMouseDown:j=>j.stopPropagation(),children:[a.jsxs("header",{className:"prompt-debug-header",children:[a.jsxs("div",{children:[a.jsx(Ai,{size:16}),a.jsx("strong",{children:"Prompt Debugger"})]}),a.jsxs("div",{className:"prompt-debug-header__actions",children:[a.jsxs("button",{type:"button",onClick:Ve,"data-testid":"prompt-debug-build",children:[a.jsx(Pi,{size:13}),"Build"]}),a.jsxs("button",{type:"button",onClick:qe,"data-testid":"prompt-debug-copy",children:[ee==="copied"?a.jsx(Aa,{size:13}):a.jsx(wa,{size:13}),ee==="copied"?"Copied":ee==="selected"?"Selected":ee==="failed"?"Copy failed":"Copy"]}),a.jsxs("button",{type:"button",onClick:Z,children:[a.jsx(Ei,{size:13}),"Clear"]}),a.jsx("button",{type:"button",title:"Close debugger",onClick:T,children:a.jsx(xo,{size:15})})]})]}),a.jsxs("div",{className:"prompt-debug-content",children:[a.jsx("nav",{className:"prompt-debug-tabs","aria-label":"Prompt debugger sections",children:Xo.map(j=>{const U=j.icon;return a.jsxs("button",{type:"button",className:x===j.id?"is-active":"","data-testid":`prompt-debug-tab-${j.id}`,onClick:()=>J(j.id),children:[a.jsx(U,{size:14}),j.label]},j.id)})}),a.jsxs("main",{className:"prompt-debug-main",children:[a.jsxs("div",{className:"prompt-debug-section-title",children:[a.jsx(me,{size:15}),a.jsx("strong",{children:ve.label}),a.jsx("span",{children:P?`Built ${P}`:"Local React diagnostics"})]}),x==="frame"&&a.jsxs("div",{className:"prompt-debug-metric-grid",children:[a.jsx(ze,{label:"Nodes",value:e.nodes.length,detail:`${g} visible`}),a.jsx(ze,{label:"Edges",value:e.edges.length,detail:`${o} selected`}),a.jsx(ze,{label:"Zoom",value:`${Math.round(r.scale*100)}%`,detail:`${Math.round(r.x)}, ${Math.round(r.y)}`}),a.jsx(ze,{label:"Storage",value:i,detail:m||"Local browser state"}),a.jsx(ze,{label:"Bridge",value:c,detail:"Loopback stays gated on hosted Pages"}),a.jsx(ze,{label:"Selected",value:(t==null?void 0:t.kind)||"none",detail:(t==null?void 0:t.title)||"No selected node"})]}),x==="render"&&a.jsxs("div",{className:"prompt-debug-stack",children:[a.jsxs("div",{className:"prompt-debug-actions",children:[a.jsx("button",{type:"button",onClick:()=>R(!0),children:"Enable all"}),a.jsx("button",{type:"button",onClick:()=>R(!1),children:"Disable all"}),a.jsxs("button",{type:"button",onClick:Se,children:[a.jsx(fo,{size:13}),"Reset"]})]}),mo.map(j=>a.jsxs("label",{className:"prompt-debug-toggle",children:[a.jsxs("span",{children:[a.jsx("strong",{children:j.label}),a.jsx("small",{children:j.description})]}),a.jsx("input",{type:"checkbox",checked:F[j.key]??!1,onChange:U=>ae(j.key,U.target.checked)})]},j.key))]}),x==="prompt"&&a.jsxs("div",{className:"prompt-debug-stack",children:[a.jsxs("div",{className:"prompt-debug-readout",children:[a.jsx("span",{children:"Selected node"}),a.jsx("strong",{children:t?`${t.title} / ${t.kind}`:"No selected node"})]}),a.jsx("textarea",{"data-testid":"prompt-debug-preview",value:w||Q,onChange:j=>z(j.target.value),spellCheck:!1})]}),x==="points"&&a.jsxs("div",{className:"prompt-debug-stack",children:[a.jsxs("div",{className:"prompt-debug-metric-grid prompt-debug-metric-grid--small",children:[a.jsx(ze,{label:"Mode",value:e.settings.inputMode,detail:e.settings.aiProvider??"OpenAI Codex"}),a.jsx(ze,{label:"Words",value:pe.words,detail:"Prompt preview"}),a.jsx(ze,{label:"Tokens",value:pe.estimatedTokens,detail:"Local estimate"}),a.jsx(ze,{label:"Points",value:E.displayLabel,detail:E.basisLabel})]}),a.jsxs("div",{className:"prompt-debug-point-quote","data-testid":"prompt-debug-point-quote","data-billing-kind":E.billingKind,"data-pricing-source":E.vendorPricingSource??"none","data-estimated-from-catalog":E.isEstimatedFromCatalog?"true":"false",children:[a.jsx("span",{children:E.billingKind}),a.jsx("strong",{children:E.displayLabel}),a.jsx("small",{children:E.vendorCostUsdSnapshot===void 0?E.vendorPricingSource??"Local provider":`${E.vendorPricingSource??"catalog"} vendor snapshot $${E.vendorCostUsdSnapshot.toFixed(4)}`})]}),a.jsx("div",{className:"prompt-debug-note",children:"Point quote follows the original local PointQuoteService policy. It does not bill credits or call server-side accounting."})]}),x==="dev"&&a.jsx("div",{className:"prompt-debug-dev-grid",children:Ac.map(j=>a.jsxs("button",{type:"button",onClick:()=>{h.emit("promptDebug.devTool.open",{route:j.route}),k(j.route)},children:[a.jsx(ji,{size:14}),a.jsxs("span",{children:[a.jsx("strong",{children:j.label}),a.jsx("small",{children:j.description})]})]},j.route))})]})]})]})})}function ze({label:e,value:t,detail:o}){return a.jsxs("article",{className:"prompt-debug-card",children:[a.jsx("span",{children:e}),a.jsx("strong",{children:t}),a.jsx("small",{children:o})]})}export{Oc as $,md as A,Gc as B,cs as C,Et as D,qc as E,Dd as F,Ht as G,_i as H,Gi as I,ja as J,wo as K,Zo as L,en as M,Jo as N,Kc as O,Wc as P,Ro as Q,Gd as R,us as S,Ce as T,Hc as U,Tn as V,ds as W,Vc as X,Md as Y,zd as Z,rs as _,Ed as a,$d as a0,Bd as a1,Vd as a2,Pa as a3,Hi as a4,La as a5,Fd as a6,gd as a7,_d as a8,Nd as a9,Jc as aA,Qc as aB,Xc as aC,Yc as aD,ud as aE,sd as aF,ld as aG,cd as aH,dd as aI,In as aa,bd as ab,zi as ac,Ui as ad,hn as ae,mn as af,nt as ag,fd as ah,yd as ai,kd as aj,vd as ak,Td as al,Id as am,Cd as an,xd as ao,wd as ap,Sd as aq,Rd as ar,td as as,od as at,nd as au,ad as av,rd as aw,id as ax,Zc as ay,ed as az,Pd as b,Ud as c,Ld as d,zc as e,Od as f,L as g,ss as h,Gs as i,So as j,Fc as k,_c as l,ls as m,Bc as n,vn as o,Da as p,pd as q,Ad as r,At as s,Ws as t,Uc as u,$c as v,jd as w,Wa as x,Ka as y,hd as z};