limixbot 0.3.3 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/assets/{ActivityPanel-CagbdBtd.js → ActivityPanel-BG18nJiz.js} +1 -1
  2. package/dist/assets/{App-DFjF9FvF.js → App-8heymKKb.js} +8 -8
  3. package/dist/assets/{AppEventEditor-BgX3KO6T.js → AppEventEditor-D5dGKlRO.js} +1 -1
  4. package/dist/assets/{BotSettingsDialog-ieeszW_3.js → BotSettingsDialog-Ct_Yktk8.js} +1 -1
  5. package/dist/assets/{BrowserPanel-BB3qz5lN.js → BrowserPanel-Cyws1YTJ.js} +1 -1
  6. package/dist/assets/{BrowserProfilesManager-CVdcfOF8.js → BrowserProfilesManager-BEUgS3Me.js} +1 -1
  7. package/dist/assets/{CloudAddDialog-Bl1bRrYD.js → CloudAddDialog-UEPtzvka.js} +1 -1
  8. package/dist/assets/{ComputerFilesPane-piKNDkt6.js → ComputerFilesPane-BGywdHPB.js} +1 -1
  9. package/dist/assets/{ComputerPanel-COQweEJR.js → ComputerPanel-DLV2INTM.js} +2 -2
  10. package/dist/assets/{DataPanel-DdHxcsUa.js → DataPanel-CIvvbY5b.js} +1 -1
  11. package/dist/assets/{FilesView-Dy1gKmcM.js → FilesView-Cd5kwljm.js} +1 -1
  12. package/dist/assets/{GrokMoveDialog-CUnJWZi7.js → GrokMoveDialog-B2Vgd-vB.js} +1 -1
  13. package/dist/assets/{InspectorPanel-CWdxtHne.js → InspectorPanel-Bxm2bVHy.js} +1 -1
  14. package/dist/assets/{KeyboardShortcutsModal-6FMUgbpC.js → KeyboardShortcutsModal-Dfcfy-EA.js} +1 -1
  15. package/dist/assets/{LiveDesktop-CDbI9dPy.js → LiveDesktop-fbnBEFRL.js} +1 -1
  16. package/dist/assets/{LocalVmWorkspace-CslSGvNI.js → LocalVmWorkspace-CBe48xft.js} +1 -1
  17. package/dist/assets/{MacLocalControl-CwHtEWES.js → MacLocalControl-CpVqwJts.js} +1 -1
  18. package/dist/assets/{MarkdownFilePreview-DrdGFCnN.js → MarkdownFilePreview--PNcCEvm.js} +1 -1
  19. package/dist/assets/{NewBotDialog-V2wMpLPn.js → NewBotDialog-CZbVbamH.js} +1 -1
  20. package/dist/assets/{PhoneAppDialog-DmBPVDxr.js → PhoneAppDialog-B9oozUp0.js} +1 -1
  21. package/dist/assets/{PluginsPanel-CMARnTMq.js → PluginsPanel-Bj3Pn0Iw.js} +1 -1
  22. package/dist/assets/{ProIntroduction--jIMb4bL.js → ProIntroduction-qFeFSzyk.js} +1 -1
  23. package/dist/assets/{RemoteAgentSettingsPanel-Co34aJHb.js → RemoteAgentSettingsPanel-CcbUTgTg.js} +1 -1
  24. package/dist/assets/{RoomPanel-ClyWQx9x.js → RoomPanel-k0hQwspJ.js} +1 -1
  25. package/dist/assets/{RoutinesPage-DRwSDyGu.js → RoutinesPage-aANJQ--g.js} +1 -1
  26. package/dist/assets/{SettingsModal-CHa_Zc-J.js → SettingsModal-t10M3Ahi.js} +1 -1
  27. package/dist/assets/{ShareTeamDialog-BQ9h2Rd2.js → ShareTeamDialog-DeRaL6zM.js} +1 -1
  28. package/dist/assets/{SignedInSites-B16Ruhd0.js → SignedInSites-CfhTex9p.js} +1 -1
  29. package/dist/assets/{TeamLibraryPanel-NwC4Fc9C.js → TeamLibraryPanel-C7LZ7Onp.js} +1 -1
  30. package/dist/assets/{TeamMapPage-DabJFxkf.js → TeamMapPage-BSvk8tOC.js} +1 -1
  31. package/dist/assets/{TriggersPage-Cn_f8AcZ.js → TriggersPage-BdePfInC.js} +1 -1
  32. package/dist/assets/{VisibilitySection-DyGNmx9n.js → VisibilitySection-CCwpvTlJ.js} +1 -1
  33. package/dist/assets/{WebhookTrigger-C-9-FE3w.js → WebhookTrigger-wqj5vki5.js} +1 -1
  34. package/dist/assets/{WorksOnGrid-M_5NkZch.js → WorksOnGrid-CenOXsZe.js} +1 -1
  35. package/dist/assets/{core-BNopzNRl.js → core-C_G-J8y-.js} +1 -1
  36. package/dist/assets/{import-name-DA_MmEsd.js → import-name-CKE76uoY.js} +1 -1
  37. package/dist/assets/{index-CwYJ9TX8.js → index-BBsdMDZV.js} +2 -2
  38. package/dist/assets/{index-D6huutPz.js → index-jlMtdqfJ.js} +1 -1
  39. package/dist/assets/{mcp-servers-CYvHVOYi.js → mcp-servers-DGQioE-C.js} +1 -1
  40. package/dist/assets/{new-bot-_oEUbcDw.js → new-bot-7IqfI7S4.js} +1 -1
  41. package/dist/assets/{org-library-CapoiPaN.js → org-library-BW4CqVd6.js} +1 -1
  42. package/dist/assets/{package-format-Cn4nABBW.js → package-format-BOH5_nvi.js} +1 -1
  43. package/dist/assets/{remote-desktop-panel-DbxYe3uv.js → remote-desktop-panel-B9rqQRMc.js} +1 -1
  44. package/dist/index.html +1 -1
  45. package/dist-server/package.json +1 -1
  46. package/package.json +1 -1
@@ -1,2 +1,2 @@
1
- import{n as y,Z as O,aZ as P,a_ as U,a$ as C,m as N,b0 as E,b1 as L,b2 as j,b3 as _,b4 as R,b5 as I,b6 as F}from"./App-DFjF9FvF.js";import{t as h}from"./styles-BlayaJti.js";import{b as x}from"./PlacesRail-v1XIqiBG.js";const Q={profile:{},memory:{},skills:[],routines:[]},J=a=>({name:a.name,prompt:a.prompt,schedule:a.schedule,enabled:a.enabled,runOn:a.runOn,durationMinutes:a.durationMinutes,timeoutMinutes:a.timeoutMinutes,overlap:a.overlap,attachments:a.attachments});class D{constructor(e,o,t=y){this.changed=o,this.network=t,this.template=structuredClone(e),this.routines=e.routines.map(s=>this.routine({...s,botId:this.id}))}changed;network;id=`draft-${O()}`;template;consent={};routines;preset;role;avatarFile;avatarObjectUrl;get bot(){const{computer:e,cwd:o,toolScope:t,...s}=this.template.profile;return{id:this.id,threadId:this.id,name:"",title:"",description:"",soul:"",color:"green",notifications:!0,unread:!1,messages:[],modelSelection:{instanceId:"",model:""},...s,computer:e??void 0,cwd:o??void 0,toolScope:t??void 0}}patch(e){const{acknowledgeLocalAuto:o,acknowledgePeerScope:t,applyToAllThreads:s,keepThreadModels:r,autoApprove:i,...l}=e;o!==void 0&&(this.consent.acknowledgeLocalAuto=o),t!==void 0&&(this.consent.acknowledgePeerScope=t),i!==void 0&&l.approvalMode===void 0&&(l.approvalMode=i?"auto":"ask"),this.template.profile={...this.template.profile,...l},this.changed()}setModel(e){this.patch({modelSelection:e})}choosePreset(e){this.preset=e,this.changed()}chooseRole(e){this.role=e,this.changed()}setMemory(e,o){o===null?delete this.template.memory[e]:this.template.memory[e]=o,this.changed()}setRoutineEnabled(e,o){this.routines=this.routines.map(t=>t.id===e?{...t,enabled:o}:t),this.changed()}removeRoutine(e){this.routines=this.routines.filter(o=>o.id!==e),this.changed()}export(){return structuredClone({...this.template,routines:this.routines.map(J)})}uploadAvatar=async e=>{if(!["image/png","image/jpeg","image/gif","image/webp"].includes(e.type))throw new Error(h("newBot.avatar.invalidType"));if(e.size>10*1024*1024)throw new Error(h("newBot.avatar.tooLarge"));return this.avatarObjectUrl&&URL.revokeObjectURL(this.avatarObjectUrl),this.avatarFile=e,this.avatarObjectUrl=URL.createObjectURL(e),this.avatarObjectUrl};dispose(){this.avatarObjectUrl&&URL.revokeObjectURL(this.avatarObjectUrl)}routine(e,o){const{groupId:t,resultsThreadId:s,checks:r,access:i,deliver:l,modelSelection:c,schedule:n,...m}=e,p=n.type==="interval"?{...n,weekdays:n.weekdays??void 0,window:n.window??void 0,endsAt:n.endsAt??void 0}:n.type==="limit_reset"?{...n,repeat:n.repeat??"once",at:n.at??null}:n;return{id:o?.id??`draft-${O()}`,createdAt:o?.createdAt??Date.now(),updatedAt:Date.now(),nextRunAt:null,runOn:"maus",...o,...m,enabled:e.enabled??o?.enabled??!0,target:"bot",botId:this.id,timeoutMinutes:e.timeoutMinutes??void 0,durationMinutes:e.durationMinutes??o?.durationMinutes??30,schedule:p}}request=async(e,o)=>{const t=o?.method??"GET",s=typeof o?.body=="string"?JSON.parse(o.body):{},r=`/api/bots/${this.id}`;let i;if(e===r&&t==="PATCH")this.patch(s),i={bot:this.bot};else if(e===`${r}/soul`&&t==="GET")i={soul:this.bot.soul,revision:"draft",bytes:new TextEncoder().encode(this.bot.soul).length,limit:24e3,file:"",drift:!1};else if(e===`${r}/skills`&&t==="GET")i={skills:this.template.skills,staged:[]};else if(e===`${r}/skills`&&t==="POST"){const l=await this.network("/api/bot-defaults/skills/preview",{method:"POST",body:JSON.stringify(s)}),c=new Set(this.template.skills.map(n=>n.name));if(l.skills.some(n=>c.has(n.name)))throw new Error(h("newBot.skillExists"));this.template.skills.push(...l.skills),this.changed(),i={installed:l.skills}}else if(e.startsWith(`${r}/skills/`)){const l=decodeURIComponent(e.slice(`${r}/skills/`.length)),c=this.template.skills.find(n=>n.name===l);if(!c)throw new Error("No such draft skill");if(t==="GET")i={text:c.text};else if(t==="PATCH"&&typeof s.enabled=="boolean")c.enabled=s.enabled,this.changed(),i={ok:!0};else if(t==="DELETE")this.template.skills=this.template.skills.filter(n=>n!==c),this.changed(),i={ok:!0};else throw new Error("Unsupported draft skill operation")}else if(e===`${r}/avatar/generate`&&t==="POST"){const{name:l,title:c,description:n}=this.bot,{dataUrl:m}=await this.network("/api/bot-defaults/avatar",{method:"POST",body:JSON.stringify({profile:{name:l,title:c,description:n},prompt:s.prompt})}),p=await(await fetch(m)).blob(),w=await this.uploadAvatar(new File([p],"avatar.png",{type:p.type}));i={avatarUrl:w,bot:{...this.bot,avatarUrl:w,avatarCrop:"circle"}}}else if(e==="/api/routines"&&t==="POST"||e.startsWith("/api/routines/draft-")&&t==="PATCH"){if(s.target&&s.target!=="bot")throw new Error("A new bot's routine must target that bot");if(s.botId!==this.id)throw new Error("Routine belongs to another bot");const l=this.routines.find(n=>e===`/api/routines/${n.id}`);if(t==="PATCH"&&!l)throw new Error("No such draft routine");const c=this.routine(s,l);this.routines=[...this.routines.filter(n=>n.id!==c.id),c],this.changed(),i={routine:c}}else throw new Error("This operation requires a created bot");return i}}async function G(a){const e=a.export();if(e.profile.avatarUrl?.startsWith("blob:")){if(!a.avatarFile)throw new Error(h("newBot.avatar.chooseAgain"));const o=await N(a.avatarFile),t=o&&x(o.path);if(!t)throw new Error(h("newBot.avatar.storeFailed"));e.profile.avatarUrl=t}return e}async function H(a,e=y,o=P,t=C(),s,r){const i=await G(a),{chiefOfStaff:l,managedSections:c,toolScope:n,modelSelection:m,...p}=i.profile;if(!p.name?.trim())throw new Error(h("newBot.nameRequired"));const w=a.preset,B=m?.instanceId&&m.model?{modelSelection:m,requireAvailableModel:!0}:{},k=await e("/api/bots",{method:"POST",body:JSON.stringify({name:p.name,title:p.title,description:p.description,...B,section:p.section,useDefaults:!1,...s!==void 0?{visibility:s}:{},...r?{reportsTo:r}:{},...Object.hasOwn(i.profile,"toolScope")?{settings:{toolScope:n}}:{},...w?{preset:w.id}:{}})});let u=k.bot;const g=[],v=[];try{const f=await o(u.id,{...p,...a.consent},new AbortController().signal,e,t,u);if(u={...u,...f},p.approvalMode==="full"||p.approvalMode==="custom"){if(f.approvalMode!==p.approvalMode)throw new Error(h("newBot.approvalNotGranted"));if((await U(u.id,u.threadId,{approvalMode:p.approvalMode,acknowledgeLocalAuto:a.consent.acknowledgeLocalAuto===!0},t,e)).approvalMode!==p.approvalMode)throw new Error(h("newBot.threadApprovalNotGranted"))}for(const[d,b]of Object.entries(i.memory))w?.notes.includes(d)||await e(`/api/bots/${u.id}/memory/file`,{method:"PUT",body:JSON.stringify({path:d,text:b})});for(const d of i.skills)w?.skills.includes(d.name)||await e(`/api/bots/${u.id}/skill-template`,{method:"POST",body:JSON.stringify(d)});for(const d of i.routines){const b=await e("/api/routines",{method:"POST",body:JSON.stringify({...d,botId:u.id,enabled:!1})});g.push({id:b.routine.id,enabled:d.enabled!==!1})}}catch(f){const d=[];for(const S of g)try{await e(`/api/routines/${S.id}`,{method:"DELETE"})}catch{d.push(`routine ${S.id}`)}try{await e(`/api/bots/${u.id}`,{method:"DELETE"})}catch{d.push(`bot ${u.name} (${u.id})`)}const b=f instanceof Error?f.message:String(f);throw new Error(d.length?`${b}. Cleanup failed for ${d.join(", ")}; remove them before retrying.`:b)}if(l)try{const f=await e(`/api/bots/${u.id}`,{method:"PATCH",body:JSON.stringify({chiefOfStaff:l,managedSections:c,acknowledgePeerScope:!0})});u={...u,...f.bot}}catch(f){v.push(h("newBot.warning.chiefOfStaff",{error:f instanceof Error?f.message:String(f)}))}for(const f of g.filter(d=>d.enabled))try{await e(`/api/routines/${f.id}`,{method:"PATCH",body:JSON.stringify({enabled:!0})})}catch(d){v.push(h("newBot.warning.routine",{error:d instanceof Error?d.message:String(d)}))}return{bot:u,warnings:v,...k.paused?{paused:!0}:{}}}function T(a,e){const o=structuredClone(a.defaults),t=o.profile.modelSelection;return(!t||t.instanceId===""&&t.model==="")&&(o.profile.modelSelection=a.modelSelection),e&&(o.profile.name=o.profile.name?.trim()||a.suggestedName),o}function A(a,e){const o=new Set(e.map(t=>t.name.trim().toLowerCase()));if(!o.has(a.trim().toLowerCase()))return a;for(let t=2;;t++)if(!o.has(`${a} ${t}`.toLowerCase()))return`${a} ${t}`}function M(a,e,o,t){if(a)return a;const s=o.filter(r=>!r.hidden&&(r.section?.trim()||"")===(e?.trim()||""));return F(s,t)?.email??t.me?.email??null}function $(a,e,o,{preserveSelection:t=!1,showThreads:s,source:r,role:i,paused:l}){j(r,i),a({type:"botAdded",bot:e,preserveSelection:t}),!t&&_()&&R(a,e,s),o.length&&a({type:"error",message:o.join(`
1
+ import{n as y,Z as O,aZ as P,a_ as U,a$ as C,m as N,b0 as E,b1 as L,b2 as j,b3 as _,b4 as R,b5 as I,b6 as F}from"./App-8heymKKb.js";import{t as h}from"./styles-BlayaJti.js";import{b as x}from"./PlacesRail-v1XIqiBG.js";const Q={profile:{},memory:{},skills:[],routines:[]},J=a=>({name:a.name,prompt:a.prompt,schedule:a.schedule,enabled:a.enabled,runOn:a.runOn,durationMinutes:a.durationMinutes,timeoutMinutes:a.timeoutMinutes,overlap:a.overlap,attachments:a.attachments});class D{constructor(e,o,t=y){this.changed=o,this.network=t,this.template=structuredClone(e),this.routines=e.routines.map(s=>this.routine({...s,botId:this.id}))}changed;network;id=`draft-${O()}`;template;consent={};routines;preset;role;avatarFile;avatarObjectUrl;get bot(){const{computer:e,cwd:o,toolScope:t,...s}=this.template.profile;return{id:this.id,threadId:this.id,name:"",title:"",description:"",soul:"",color:"green",notifications:!0,unread:!1,messages:[],modelSelection:{instanceId:"",model:""},...s,computer:e??void 0,cwd:o??void 0,toolScope:t??void 0}}patch(e){const{acknowledgeLocalAuto:o,acknowledgePeerScope:t,applyToAllThreads:s,keepThreadModels:r,autoApprove:i,...l}=e;o!==void 0&&(this.consent.acknowledgeLocalAuto=o),t!==void 0&&(this.consent.acknowledgePeerScope=t),i!==void 0&&l.approvalMode===void 0&&(l.approvalMode=i?"auto":"ask"),this.template.profile={...this.template.profile,...l},this.changed()}setModel(e){this.patch({modelSelection:e})}choosePreset(e){this.preset=e,this.changed()}chooseRole(e){this.role=e,this.changed()}setMemory(e,o){o===null?delete this.template.memory[e]:this.template.memory[e]=o,this.changed()}setRoutineEnabled(e,o){this.routines=this.routines.map(t=>t.id===e?{...t,enabled:o}:t),this.changed()}removeRoutine(e){this.routines=this.routines.filter(o=>o.id!==e),this.changed()}export(){return structuredClone({...this.template,routines:this.routines.map(J)})}uploadAvatar=async e=>{if(!["image/png","image/jpeg","image/gif","image/webp"].includes(e.type))throw new Error(h("newBot.avatar.invalidType"));if(e.size>10*1024*1024)throw new Error(h("newBot.avatar.tooLarge"));return this.avatarObjectUrl&&URL.revokeObjectURL(this.avatarObjectUrl),this.avatarFile=e,this.avatarObjectUrl=URL.createObjectURL(e),this.avatarObjectUrl};dispose(){this.avatarObjectUrl&&URL.revokeObjectURL(this.avatarObjectUrl)}routine(e,o){const{groupId:t,resultsThreadId:s,checks:r,access:i,deliver:l,modelSelection:c,schedule:n,...m}=e,p=n.type==="interval"?{...n,weekdays:n.weekdays??void 0,window:n.window??void 0,endsAt:n.endsAt??void 0}:n.type==="limit_reset"?{...n,repeat:n.repeat??"once",at:n.at??null}:n;return{id:o?.id??`draft-${O()}`,createdAt:o?.createdAt??Date.now(),updatedAt:Date.now(),nextRunAt:null,runOn:"maus",...o,...m,enabled:e.enabled??o?.enabled??!0,target:"bot",botId:this.id,timeoutMinutes:e.timeoutMinutes??void 0,durationMinutes:e.durationMinutes??o?.durationMinutes??30,schedule:p}}request=async(e,o)=>{const t=o?.method??"GET",s=typeof o?.body=="string"?JSON.parse(o.body):{},r=`/api/bots/${this.id}`;let i;if(e===r&&t==="PATCH")this.patch(s),i={bot:this.bot};else if(e===`${r}/soul`&&t==="GET")i={soul:this.bot.soul,revision:"draft",bytes:new TextEncoder().encode(this.bot.soul).length,limit:24e3,file:"",drift:!1};else if(e===`${r}/skills`&&t==="GET")i={skills:this.template.skills,staged:[]};else if(e===`${r}/skills`&&t==="POST"){const l=await this.network("/api/bot-defaults/skills/preview",{method:"POST",body:JSON.stringify(s)}),c=new Set(this.template.skills.map(n=>n.name));if(l.skills.some(n=>c.has(n.name)))throw new Error(h("newBot.skillExists"));this.template.skills.push(...l.skills),this.changed(),i={installed:l.skills}}else if(e.startsWith(`${r}/skills/`)){const l=decodeURIComponent(e.slice(`${r}/skills/`.length)),c=this.template.skills.find(n=>n.name===l);if(!c)throw new Error("No such draft skill");if(t==="GET")i={text:c.text};else if(t==="PATCH"&&typeof s.enabled=="boolean")c.enabled=s.enabled,this.changed(),i={ok:!0};else if(t==="DELETE")this.template.skills=this.template.skills.filter(n=>n!==c),this.changed(),i={ok:!0};else throw new Error("Unsupported draft skill operation")}else if(e===`${r}/avatar/generate`&&t==="POST"){const{name:l,title:c,description:n}=this.bot,{dataUrl:m}=await this.network("/api/bot-defaults/avatar",{method:"POST",body:JSON.stringify({profile:{name:l,title:c,description:n},prompt:s.prompt})}),p=await(await fetch(m)).blob(),w=await this.uploadAvatar(new File([p],"avatar.png",{type:p.type}));i={avatarUrl:w,bot:{...this.bot,avatarUrl:w,avatarCrop:"circle"}}}else if(e==="/api/routines"&&t==="POST"||e.startsWith("/api/routines/draft-")&&t==="PATCH"){if(s.target&&s.target!=="bot")throw new Error("A new bot's routine must target that bot");if(s.botId!==this.id)throw new Error("Routine belongs to another bot");const l=this.routines.find(n=>e===`/api/routines/${n.id}`);if(t==="PATCH"&&!l)throw new Error("No such draft routine");const c=this.routine(s,l);this.routines=[...this.routines.filter(n=>n.id!==c.id),c],this.changed(),i={routine:c}}else throw new Error("This operation requires a created bot");return i}}async function G(a){const e=a.export();if(e.profile.avatarUrl?.startsWith("blob:")){if(!a.avatarFile)throw new Error(h("newBot.avatar.chooseAgain"));const o=await N(a.avatarFile),t=o&&x(o.path);if(!t)throw new Error(h("newBot.avatar.storeFailed"));e.profile.avatarUrl=t}return e}async function H(a,e=y,o=P,t=C(),s,r){const i=await G(a),{chiefOfStaff:l,managedSections:c,toolScope:n,modelSelection:m,...p}=i.profile;if(!p.name?.trim())throw new Error(h("newBot.nameRequired"));const w=a.preset,B=m?.instanceId&&m.model?{modelSelection:m,requireAvailableModel:!0}:{},k=await e("/api/bots",{method:"POST",body:JSON.stringify({name:p.name,title:p.title,description:p.description,...B,section:p.section,useDefaults:!1,...s!==void 0?{visibility:s}:{},...r?{reportsTo:r}:{},...Object.hasOwn(i.profile,"toolScope")?{settings:{toolScope:n}}:{},...w?{preset:w.id}:{}})});let u=k.bot;const g=[],v=[];try{const f=await o(u.id,{...p,...a.consent},new AbortController().signal,e,t,u);if(u={...u,...f},p.approvalMode==="full"||p.approvalMode==="custom"){if(f.approvalMode!==p.approvalMode)throw new Error(h("newBot.approvalNotGranted"));if((await U(u.id,u.threadId,{approvalMode:p.approvalMode,acknowledgeLocalAuto:a.consent.acknowledgeLocalAuto===!0},t,e)).approvalMode!==p.approvalMode)throw new Error(h("newBot.threadApprovalNotGranted"))}for(const[d,b]of Object.entries(i.memory))w?.notes.includes(d)||await e(`/api/bots/${u.id}/memory/file`,{method:"PUT",body:JSON.stringify({path:d,text:b})});for(const d of i.skills)w?.skills.includes(d.name)||await e(`/api/bots/${u.id}/skill-template`,{method:"POST",body:JSON.stringify(d)});for(const d of i.routines){const b=await e("/api/routines",{method:"POST",body:JSON.stringify({...d,botId:u.id,enabled:!1})});g.push({id:b.routine.id,enabled:d.enabled!==!1})}}catch(f){const d=[];for(const S of g)try{await e(`/api/routines/${S.id}`,{method:"DELETE"})}catch{d.push(`routine ${S.id}`)}try{await e(`/api/bots/${u.id}`,{method:"DELETE"})}catch{d.push(`bot ${u.name} (${u.id})`)}const b=f instanceof Error?f.message:String(f);throw new Error(d.length?`${b}. Cleanup failed for ${d.join(", ")}; remove them before retrying.`:b)}if(l)try{const f=await e(`/api/bots/${u.id}`,{method:"PATCH",body:JSON.stringify({chiefOfStaff:l,managedSections:c,acknowledgePeerScope:!0})});u={...u,...f.bot}}catch(f){v.push(h("newBot.warning.chiefOfStaff",{error:f instanceof Error?f.message:String(f)}))}for(const f of g.filter(d=>d.enabled))try{await e(`/api/routines/${f.id}`,{method:"PATCH",body:JSON.stringify({enabled:!0})})}catch(d){v.push(h("newBot.warning.routine",{error:d instanceof Error?d.message:String(d)}))}return{bot:u,warnings:v,...k.paused?{paused:!0}:{}}}function T(a,e){const o=structuredClone(a.defaults),t=o.profile.modelSelection;return(!t||t.instanceId===""&&t.model==="")&&(o.profile.modelSelection=a.modelSelection),e&&(o.profile.name=o.profile.name?.trim()||a.suggestedName),o}function A(a,e){const o=new Set(e.map(t=>t.name.trim().toLowerCase()));if(!o.has(a.trim().toLowerCase()))return a;for(let t=2;;t++)if(!o.has(`${a} ${t}`.toLowerCase()))return`${a} ${t}`}function M(a,e,o,t){if(a)return a;const s=o.filter(r=>!r.hidden&&(r.section?.trim()||"")===(e?.trim()||""));return F(s,t)?.email??t.me?.email??null}function $(a,e,o,{preserveSelection:t=!1,showThreads:s,source:r,role:i,paused:l}){j(r,i),a({type:"botAdded",bot:e,preserveSelection:t}),!t&&_()&&R(a,e,s),o.length&&a({type:"error",message:o.join(`
2
2
  `)}),l&&I(e.id)}async function z(a,e,o,t){if(typeof window<"u"&&window.ogb?.remoteClient?.active){const{bot:c,paused:n}=await t("/api/bots",{method:"POST",body:JSON.stringify(a===void 0?{}:{section:a})});return{bot:c,warnings:[],startsOnAsk:!1,...n?{paused:n}:{}}}const s=T(await t("/api/bot-defaults"),!0);s.profile.name=A(s.profile.name,e),a!==void 0&&(s.profile.section=a);const r=new D(s,()=>{},t),i=r.bot.approvalMode==="auto"&&r.bot.computer==="local";i&&r.patch({approvalMode:"ask"});const l=o?M(null,r.bot.section,e,o)??void 0:void 0;try{return{...await H(r,t,void 0,void 0,void 0,l),startsOnAsk:i}}finally{r.dispose()}}async function W(a,e,o,t,s=y){if(E()?.admin===!1)return;let r;try{r=await z(a.section,e,E(),s)}catch(i){if(L(i))return;const l=h("newBot.failed",{error:i instanceof Error?i.message:String(i)});a.onError?a.onError(l):o({type:"error",message:l});return}$(o,r.bot,r.warnings,{preserveSelection:a.preserveSelection,showThreads:t,source:"blank",paused:r.paused}),r.startsOnAsk&&o({type:"notice",notice:{kind:"note",botName:null,text:h("newBot.startsOnAsk",{name:r.bot.name})}}),a.onCreated?.(r.bot)}const V=Object.freeze(Object.defineProperty({__proto__:null,announceNewBot:$,freeName:A,makeNewBot:W,reportsToFor:M,startingTemplate:T},Symbol.toStringTag,{value:"Module"}));export{D as B,Q as E,$ as a,H as c,V as n,G as p,M as r,T as s};
@@ -1 +1 @@
1
- import{t as n}from"./styles-BlayaJti.js";import{p as L,P as S,a as P}from"./package-format-Cn4nABBW.js";import{o as l,k as b,l as d,_ as h,n as w,s as p,p as R,m as M,e as x,q as O,t as C,v as j,w as B}from"./PlacesRail-v1XIqiBG.js";import{b7 as T,b8 as _,b9 as q,ba as G}from"./App-DFjF9FvF.js";const se=50*1024*1024,$="Bot profiles, instructions, sections, rooms, playbooks, routines, each bot's memory (MEMORY.md, topic notes and daily logs) and conversation text (all tasks and branches).",u=p().min(1).max(200),v=p().trim().min(1).max(200),I=w().finite().nonnegative(),F=h(_),A=l({role:d("bot"),text:p().max(2e6),textCode:h(["chat.notice.exportedGoal.working","chat.notice.exportedGoal.completed","chat.notice.exportedGoal.needs-input","chat.notice.exportedGoal.blocked","chat.notice.exportedGoal.limit-reached","chat.notice.exportedGoal.paused","chat.notice.exportedGoal.stopped","chat.notice.exportedGoal.failed"]),textParams:l({before:p().max(2e6),content:p().max(2e6)})}),U=l({id:u,role:h(["bot","user"]),text:A.shape.text,textCode:A.shape.textCode.optional(),textParams:A.shape.textParams.optional(),at:I,parentId:u.nullable(),replyToId:u.optional(),from:l({botId:u,name:v,color:p().max(40)}).optional(),peerPost:l({unattended:x().optional()}).optional(),serverCard:d(!0).optional()}),K=l({key:u,title:p().max(2e3),createdAt:I,titleFromFirstMessage:d(!0).optional(),outside:d(!0).optional(),openedBy:l({botId:u,name:v,at:I,kind:h(["pair","work"]).optional()}).optional(),closedBy:l({botId:u,name:v,at:I}).optional(),pinned:d(!0).optional(),turnTimeoutMinutes:w().int().min(1).max(1440).optional(),activeLeafId:u.nullable(),messages:b(U).max(1e5)}),N={key:u,name:v,section:p().max(200).optional(),activeTask:u,tasks:b(K).min(1).max(1e4)},V=l({key:u,name:v,summary:p().max(24e3),triggers:b(p().max(2e3)).max(100),instructions:p().max(2e5)}),Y=M("type",[l({type:d("once"),at:I}),l({type:d("daily"),time:p().regex(/^([01]\d|2[0-3]):[0-5]\d$/),weekdays:b(w().int().min(0).max(6)).min(1).max(7)}),l({type:d("interval"),everyMinutes:w().int().min(5).max(1440),anchorAt:w().int().min(0).max(864e13)})]),E=p().max(2e6),z=l({file:E,topics:b(l({name:p().regex(/^[\w][\w .-]{0,199}\.md$/),text:E})).max(1e3),logs:b(l({name:p().regex(/^\d{4}-\d{2}-\d{2}\.md$/),text:E})).max(1e4)}),D=j(p().regex(G),l({tools:B([d("*"),b(p().regex(q)).min(1).max(500)])}));function H(r){if(!r||typeof r!="object"||Array.isArray(r))return r;const o=r,e=o.defaultResponder&&typeof o.defaultResponder=="object"?o.defaultResponder.kind:void 0;if(typeof e!="string"||["member","everyone","mentions","auto"].includes(e))return r;const m=Array.isArray(o.memberIds)&&typeof o.memberIds[0]=="string"?o.memberIds[0]:void 0;return{...o,defaultResponder:m?{kind:"member",botId:m}:{kind:"mentions"}}}const W=l({format:d("openmaus.backup"),version:d(1),name:v,exportedAt:I,warnings:b(p().max(2e3)).max(4e3).default([]),bots:b(l({...N,title:p().max(2e3),description:p().max(2e5),soul:p().refine(r=>new TextEncoder().encode(r).byteLength<=24e3,{error:"standing instructions must be at most 24000 bytes"}).optional(),color:F,mascotExpression:p().max(80).optional(),mascotBody:p().max(40).optional(),mascotFaceColor:C.optional(),chiefOfStaff:x(),hidden:x(),playbooks:b(V).max(200),connectorTools:D.optional(),toolScope:O(r=>r!==void 0&&T(r).ok,"Invalid tool selection").transform(r=>{const o=T(r);return o.ok?o.scope:r}).optional(),helperModel:x().optional(),memory:z.optional()})).min(1).max(200),groups:b(R(H,l({...N,memberIds:b(u).max(200),dm:x(),bulletin:p().max(2e5),defaultResponder:M("kind",[l({kind:d("member"),botId:u}),l({kind:d("everyone")}),l({kind:d("mentions")}),l({kind:d("auto"),fallbackBotId:u.optional()})])}))).max(2e3),routines:b(l({name:v,prompt:p().trim().min(1).max(2e5),target:h(["bot","room-goal"]),botId:u,groupId:u.optional(),runOn:h(["maus","cloud"]),schedule:Y,durationMinutes:w().finite().positive(),timeoutMinutes:w().int().min(5).max(240).optional(),checks:b(h(["calendar","mail","runs"])).max(3).optional(),access:d("read-and-draft").optional(),deliver:d("brief").optional()})).max(2e3)});function X(r){const o=W.safeParse(r);if(!o.success){const a=o.error.issues[0];throw new Error(`Invalid backup: ${a.path.join(".")||"file"}: ${a.message}`)}const e=o.data,m=(a,f)=>{const i=new Set(a);if(i.size!==a.length)throw new Error(`Invalid backup: duplicate ${f}`);return i},s=m(e.bots.map(a=>a.key),"bot key"),t=m(e.groups.map(a=>a.key),"room key"),c=new Set;for(const a of e.bots){if(!a.chiefOfStaff)continue;const f=a.section?.trim()??"";if(c.has(f)||a.hidden)throw new Error("Invalid backup: a section must have at most one visible Chief of Staff");c.add(f)}for(const a of e.groups){if(a.memberIds.some(i=>!s.has(i)))throw new Error("Invalid backup: unknown room member");m(a.memberIds,"room member");const f=a.defaultResponder.kind==="member"?a.defaultResponder.botId:a.defaultResponder.kind==="auto"?a.defaultResponder.fallbackBotId:void 0;if(f!==void 0&&!a.memberIds.includes(f))throw new Error("Invalid backup: room responder is not a member");if(a.dm&&(a.memberIds.length!==2||a.tasks.length!==1))throw new Error("Invalid backup: invalid direct-message room")}for(const a of e.routines){if(!s.has(a.botId))throw new Error("Invalid backup: unknown routine bot");if(a.target==="room-goal"){if(a.runOn!=="maus")throw new Error("Invalid backup: room goals must run on this computer");const f=e.groups.find(i=>i.key===a.groupId);if(a.groupId!==void 0&&(!t.has(a.groupId)||!f||f.dm||!f.memberIds.includes(a.botId)))throw new Error("Invalid backup: unknown routine room or coordinator")}}for(const a of[...e.bots,...e.groups]){if(!m(a.tasks.map(i=>i.key),"task key").has(a.activeTask))throw new Error("Invalid backup: unknown active task");for(const i of a.tasks){const k=m(i.messages.map(y=>y.id),"message key"),g=new Set;for(const y of i.messages){if(y.parentId!==null&&!g.has(y.parentId))throw new Error("Invalid backup: invalid conversation branch");if(y.replyToId&&!k.has(y.replyToId))throw new Error("Invalid backup: unknown reply");g.add(y.id)}if(i.activeLeafId!==null&&!k.has(i.activeLeafId))throw new Error("Invalid backup: unknown conversation head")}}return e}function J(r){if(typeof r=="string"&&(r=Q(r)),!r||typeof r!="object"||Array.isArray(r))throw new Error(n("teamImport.noTeam"));const o=r;if(o.format==="openmaus.backup"){const s=X(r);return{manifest:s,kind:"backup",name:s.name,description:$,members:s.bots.map(t=>({name:t.name,title:t.title})),rooms:s.groups.length,playbooks:s.bots.reduce((t,c)=>t+c.playbooks.length,0),routines:s.routines.length,apps:[],conversations:[...s.bots,...s.groups].reduce((t,c)=>t+c.tasks.length,0),archivedBots:s.bots.filter(t=>t.hidden).length,warnings:s.warnings}}if(o.format==="openmaus.package")return re(o,r);if(o.format!=="openmaus.team")throw new Error(n("teamImport.unknownFormat"));if(o.version!==1&&o.version!==2)throw new Error(n("teamImport.teamVersion",{version:String(o.version)}));if(!o.team||typeof o.team!="object"||Array.isArray(o.team))throw new Error(n("teamImport.teamMissing"));const e=o.team;if(typeof e.name!="string"||!e.name.trim())throw new Error(n("teamImport.teamNoName"));if(!Array.isArray(e.members)||e.members.length===0)throw new Error(n("teamImport.teamNoMembers"));if(e.members.length>200)throw new Error(n("teamImport.teamTooMany"));const m=e.members.map((s,t)=>{if(!s||typeof s!="object"||Array.isArray(s))throw new Error(n("teamImport.memberInvalid",{number:t+1}));const c=s;if(typeof c.name!="string"||!c.name.trim())throw new Error(n("teamImport.memberNoName",{number:t+1}));return{name:c.name.trim(),title:typeof c.title=="string"?c.title.trim():""}});return{manifest:r,kind:"team",name:e.name.trim(),description:typeof e.description=="string"?e.description.trim():"",members:m,rooms:o.version===1&&e.room&&typeof e.room=="object"?1:0,playbooks:0,routines:0,apps:[]}}function Q(r){const o=r.match(/^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/);if(!o)throw new Error(n("teamImport.markdownNoFrontmatter"));let e;try{e=L(o[1])}catch{throw new Error(n("teamImport.markdownBadYaml"))}if(!e||typeof e!="object"||Array.isArray(e))throw new Error(n("teamImport.markdownNoBlueprint"));const{botmrr:m,...s}=e;if(m!==1)throw new Error(n("teamImport.markdownVersion"));return{format:"openmaus.package",version:1,package:s}}function Z(r,o){const e=r.package;if(!e.agents.length)return ee(r,o);const m=new Set(e.agents.flatMap(t=>t.skills??[])),s=e.team?.leader?e.agents.find(t=>t.key===e.team?.leader)?.name:void 0;return{manifest:o,kind:"package",version:2,name:e.name,teamName:e.team?.name??e.name,description:e.summary,members:e.agents.map(t=>({name:t.name,title:t.title??""})),...s?{chiefOfStaff:s}:{},...e.team?.brief?.trim()?{brief:e.team.brief}:{},pictures:e.agents.map(t=>t.appearance.avatar?`data:${t.appearance.avatar.mime};base64,${t.appearance.avatar.data}`:null),rooms:e.rooms?.length??0,playbooks:e.playbooks?.length??0,routines:e.routines?.length??0,apps:e.requirements.apps.map(t=>({label:t.label,optional:t.optional===!0})),skills:(e.skills?.entries??[]).filter(t=>m.has(t.name)).map(t=>t.name),offeredSkills:(e.skills?.entries??[]).filter(t=>!m.has(t.name)).map(t=>t.name),connections:(e.connections??[]).map(t=>({label:t.label,url:t.mcp.url,values:t.mcp.valueNames.length})),notes:e.agents.reduce((t,c)=>t+Object.keys(c.seed?.memory??{}).length,0),presets:(e.presets??[]).map(t=>t.name)}}function ee(r,o){const e=r.package;if(!e.presets?.length)throw new Error(n("teamImport.libraryEmpty"));return{manifest:o,kind:"package",version:2,library:!0,name:e.name,description:e.summary,members:[],rooms:0,playbooks:e.playbooks?.length??0,routines:0,apps:[],skills:[],offeredSkills:(e.skills?.entries??[]).filter(m=>!e.presets.some(s=>s.skills?.includes(m.name))).map(m=>m.name),presets:e.presets.map(m=>m.name)}}function re(r,o){if(typeof r.version=="number"&&r.version>S)throw new Error(n("teamImport.newer"));if(r.version===S)return Z(P(o),o);if(r.version!==1)throw new Error(n("teamImport.playbookVersion",{version:String(r.version)}));if(!r.package||typeof r.package!="object"||Array.isArray(r.package))throw new Error(n("teamImport.playbookMissing"));const e=r.package;if(typeof e.name!="string"||!e.name.trim())throw new Error(n("teamImport.playbookNoName"));if(!Array.isArray(e.agents)||e.agents.length===0)throw new Error(n("teamImport.playbookNoBots"));if(e.agents.length>200)throw new Error(n("teamImport.playbookTooMany"));const m=e.agents.map((i,k)=>{if(!i||typeof i!="object"||Array.isArray(i))throw new Error(n("teamImport.botInvalid",{number:k+1}));const g=i;if(typeof g.name!="string"||!g.name.trim())throw new Error(n("teamImport.botNoName",{number:k+1}));return{name:g.name.trim(),title:typeof g.title=="string"?g.title.trim():""}}),s=typeof e.chiefOfStaff=="string"?e.chiefOfStaff:void 0,t=s?e.agents.find(i=>i.key===s)?.name:void 0,c=e.requirements&&typeof e.requirements=="object"&&!Array.isArray(e.requirements)?e.requirements:{},a=Array.isArray(c.apps)?c.apps.flatMap(i=>{if(!i||typeof i!="object"||Array.isArray(i))return[];const k=i;return typeof k.label=="string"?[{label:k.label.trim(),optional:k.optional===!0}]:[]}):[],f=e.skills&&typeof e.skills=="object"&&!Array.isArray(e.skills)?e.skills.entries:void 0;return{manifest:o,kind:"package",version:1,name:e.name.trim(),description:typeof e.summary=="string"?e.summary.trim():"",members:m,...typeof t=="string"?{chiefOfStaff:t}:{},rooms:Array.isArray(e.rooms)?e.rooms.length:0,playbooks:Array.isArray(e.playbooks)?e.playbooks.length:0,routines:Array.isArray(e.routines)?e.routines.length:0,apps:a,skills:Array.isArray(f)?f.flatMap(i=>{if(!i||typeof i!="object"||Array.isArray(i))return[];const{name:k}=i;return typeof k=="string"&&k.trim()?[k.trim()]:[]}):[]}}function ie(r){return r.installed&&r.installed.status!=="removed"?"added":r.release?r.blob==="unsupported"?"updateApp":r.blob!=="ready"?"notReady":"add":"noRelease"}function me(r){return r.publisher.self?n("orgLibrary.fromSelf"):n("orgLibrary.from",{name:r.publisher.name})}function pe(r){return r.mode==="required"?n("orgLibrary.recommended",{name:r.publisher.name}):null}function le(r){const o=[];return r.installed?.status==="withdrawn"&&o.push(n("orgLibrary.withdrawn",{name:r.publisher.name})),r.installed?.status==="installed"&&r.release&&r.release.version!==r.installed.release&&o.push(n("orgLibrary.newerRelease",{version:r.release.version})),o}function ce(r){const o=[];return r.bots&&o.push(n("orgLibrary.bots",{count:r.bots})),r.skills&&o.push(n("orgLibrary.skills",{count:r.skills})),r.presets&&o.push(n("orgLibrary.presets",{count:r.presets})),r.rooms&&o.push(n("orgLibrary.rooms",{count:r.rooms})),r.routines&&o.push(n("orgLibrary.routines",{count:r.routines})),r.connections&&o.push(n("orgLibrary.connections",{count:r.connections})),o.join(" · ")}function de(r,o=[]){if(r?.source!=="org")return null;const e=r.publisher?.name??"",m=o.find(s=>s.installId===r.installId);return{line:e?n("orgLibrary.provenance",{name:r.name,release:r.release,publisher:e}):n("orgLibrary.provenanceFile",{name:r.name,release:r.release}),withdrawn:m?.status==="withdrawn"?n("orgLibrary.withdrawn",{name:m.publisher||e}):null}}function ue(r){if(r.package.agents.length)return J(r);const o=r.package;return{manifest:r,kind:"package",version:2,name:o.name,teamName:o.name,description:o.summary,members:[],rooms:0,playbooks:o.playbooks?.length??0,routines:0,apps:o.requirements.apps.map(e=>({label:e.label,optional:e.optional===!0})),skills:[],offeredSkills:(o.skills?.entries??[]).map(e=>e.name),connections:[],notes:0,presets:(o.presets??[]).map(e=>e.name)}}export{se as M,pe as a,le as b,me as c,ce as d,ue as e,ie as o,de as p,J as t};
1
+ import{t as n}from"./styles-BlayaJti.js";import{p as L,P as S,a as P}from"./package-format-BOH5_nvi.js";import{o as l,k as b,l as d,_ as h,n as w,s as p,p as R,m as M,e as x,q as O,t as C,v as j,w as B}from"./PlacesRail-v1XIqiBG.js";import{b7 as T,b8 as _,b9 as q,ba as G}from"./App-8heymKKb.js";const se=50*1024*1024,$="Bot profiles, instructions, sections, rooms, playbooks, routines, each bot's memory (MEMORY.md, topic notes and daily logs) and conversation text (all tasks and branches).",u=p().min(1).max(200),v=p().trim().min(1).max(200),I=w().finite().nonnegative(),F=h(_),A=l({role:d("bot"),text:p().max(2e6),textCode:h(["chat.notice.exportedGoal.working","chat.notice.exportedGoal.completed","chat.notice.exportedGoal.needs-input","chat.notice.exportedGoal.blocked","chat.notice.exportedGoal.limit-reached","chat.notice.exportedGoal.paused","chat.notice.exportedGoal.stopped","chat.notice.exportedGoal.failed"]),textParams:l({before:p().max(2e6),content:p().max(2e6)})}),U=l({id:u,role:h(["bot","user"]),text:A.shape.text,textCode:A.shape.textCode.optional(),textParams:A.shape.textParams.optional(),at:I,parentId:u.nullable(),replyToId:u.optional(),from:l({botId:u,name:v,color:p().max(40)}).optional(),peerPost:l({unattended:x().optional()}).optional(),serverCard:d(!0).optional()}),K=l({key:u,title:p().max(2e3),createdAt:I,titleFromFirstMessage:d(!0).optional(),outside:d(!0).optional(),openedBy:l({botId:u,name:v,at:I,kind:h(["pair","work"]).optional()}).optional(),closedBy:l({botId:u,name:v,at:I}).optional(),pinned:d(!0).optional(),turnTimeoutMinutes:w().int().min(1).max(1440).optional(),activeLeafId:u.nullable(),messages:b(U).max(1e5)}),N={key:u,name:v,section:p().max(200).optional(),activeTask:u,tasks:b(K).min(1).max(1e4)},V=l({key:u,name:v,summary:p().max(24e3),triggers:b(p().max(2e3)).max(100),instructions:p().max(2e5)}),Y=M("type",[l({type:d("once"),at:I}),l({type:d("daily"),time:p().regex(/^([01]\d|2[0-3]):[0-5]\d$/),weekdays:b(w().int().min(0).max(6)).min(1).max(7)}),l({type:d("interval"),everyMinutes:w().int().min(5).max(1440),anchorAt:w().int().min(0).max(864e13)})]),E=p().max(2e6),z=l({file:E,topics:b(l({name:p().regex(/^[\w][\w .-]{0,199}\.md$/),text:E})).max(1e3),logs:b(l({name:p().regex(/^\d{4}-\d{2}-\d{2}\.md$/),text:E})).max(1e4)}),D=j(p().regex(G),l({tools:B([d("*"),b(p().regex(q)).min(1).max(500)])}));function H(r){if(!r||typeof r!="object"||Array.isArray(r))return r;const o=r,e=o.defaultResponder&&typeof o.defaultResponder=="object"?o.defaultResponder.kind:void 0;if(typeof e!="string"||["member","everyone","mentions","auto"].includes(e))return r;const m=Array.isArray(o.memberIds)&&typeof o.memberIds[0]=="string"?o.memberIds[0]:void 0;return{...o,defaultResponder:m?{kind:"member",botId:m}:{kind:"mentions"}}}const W=l({format:d("openmaus.backup"),version:d(1),name:v,exportedAt:I,warnings:b(p().max(2e3)).max(4e3).default([]),bots:b(l({...N,title:p().max(2e3),description:p().max(2e5),soul:p().refine(r=>new TextEncoder().encode(r).byteLength<=24e3,{error:"standing instructions must be at most 24000 bytes"}).optional(),color:F,mascotExpression:p().max(80).optional(),mascotBody:p().max(40).optional(),mascotFaceColor:C.optional(),chiefOfStaff:x(),hidden:x(),playbooks:b(V).max(200),connectorTools:D.optional(),toolScope:O(r=>r!==void 0&&T(r).ok,"Invalid tool selection").transform(r=>{const o=T(r);return o.ok?o.scope:r}).optional(),helperModel:x().optional(),memory:z.optional()})).min(1).max(200),groups:b(R(H,l({...N,memberIds:b(u).max(200),dm:x(),bulletin:p().max(2e5),defaultResponder:M("kind",[l({kind:d("member"),botId:u}),l({kind:d("everyone")}),l({kind:d("mentions")}),l({kind:d("auto"),fallbackBotId:u.optional()})])}))).max(2e3),routines:b(l({name:v,prompt:p().trim().min(1).max(2e5),target:h(["bot","room-goal"]),botId:u,groupId:u.optional(),runOn:h(["maus","cloud"]),schedule:Y,durationMinutes:w().finite().positive(),timeoutMinutes:w().int().min(5).max(240).optional(),checks:b(h(["calendar","mail","runs"])).max(3).optional(),access:d("read-and-draft").optional(),deliver:d("brief").optional()})).max(2e3)});function X(r){const o=W.safeParse(r);if(!o.success){const a=o.error.issues[0];throw new Error(`Invalid backup: ${a.path.join(".")||"file"}: ${a.message}`)}const e=o.data,m=(a,f)=>{const i=new Set(a);if(i.size!==a.length)throw new Error(`Invalid backup: duplicate ${f}`);return i},s=m(e.bots.map(a=>a.key),"bot key"),t=m(e.groups.map(a=>a.key),"room key"),c=new Set;for(const a of e.bots){if(!a.chiefOfStaff)continue;const f=a.section?.trim()??"";if(c.has(f)||a.hidden)throw new Error("Invalid backup: a section must have at most one visible Chief of Staff");c.add(f)}for(const a of e.groups){if(a.memberIds.some(i=>!s.has(i)))throw new Error("Invalid backup: unknown room member");m(a.memberIds,"room member");const f=a.defaultResponder.kind==="member"?a.defaultResponder.botId:a.defaultResponder.kind==="auto"?a.defaultResponder.fallbackBotId:void 0;if(f!==void 0&&!a.memberIds.includes(f))throw new Error("Invalid backup: room responder is not a member");if(a.dm&&(a.memberIds.length!==2||a.tasks.length!==1))throw new Error("Invalid backup: invalid direct-message room")}for(const a of e.routines){if(!s.has(a.botId))throw new Error("Invalid backup: unknown routine bot");if(a.target==="room-goal"){if(a.runOn!=="maus")throw new Error("Invalid backup: room goals must run on this computer");const f=e.groups.find(i=>i.key===a.groupId);if(a.groupId!==void 0&&(!t.has(a.groupId)||!f||f.dm||!f.memberIds.includes(a.botId)))throw new Error("Invalid backup: unknown routine room or coordinator")}}for(const a of[...e.bots,...e.groups]){if(!m(a.tasks.map(i=>i.key),"task key").has(a.activeTask))throw new Error("Invalid backup: unknown active task");for(const i of a.tasks){const k=m(i.messages.map(y=>y.id),"message key"),g=new Set;for(const y of i.messages){if(y.parentId!==null&&!g.has(y.parentId))throw new Error("Invalid backup: invalid conversation branch");if(y.replyToId&&!k.has(y.replyToId))throw new Error("Invalid backup: unknown reply");g.add(y.id)}if(i.activeLeafId!==null&&!k.has(i.activeLeafId))throw new Error("Invalid backup: unknown conversation head")}}return e}function J(r){if(typeof r=="string"&&(r=Q(r)),!r||typeof r!="object"||Array.isArray(r))throw new Error(n("teamImport.noTeam"));const o=r;if(o.format==="openmaus.backup"){const s=X(r);return{manifest:s,kind:"backup",name:s.name,description:$,members:s.bots.map(t=>({name:t.name,title:t.title})),rooms:s.groups.length,playbooks:s.bots.reduce((t,c)=>t+c.playbooks.length,0),routines:s.routines.length,apps:[],conversations:[...s.bots,...s.groups].reduce((t,c)=>t+c.tasks.length,0),archivedBots:s.bots.filter(t=>t.hidden).length,warnings:s.warnings}}if(o.format==="openmaus.package")return re(o,r);if(o.format!=="openmaus.team")throw new Error(n("teamImport.unknownFormat"));if(o.version!==1&&o.version!==2)throw new Error(n("teamImport.teamVersion",{version:String(o.version)}));if(!o.team||typeof o.team!="object"||Array.isArray(o.team))throw new Error(n("teamImport.teamMissing"));const e=o.team;if(typeof e.name!="string"||!e.name.trim())throw new Error(n("teamImport.teamNoName"));if(!Array.isArray(e.members)||e.members.length===0)throw new Error(n("teamImport.teamNoMembers"));if(e.members.length>200)throw new Error(n("teamImport.teamTooMany"));const m=e.members.map((s,t)=>{if(!s||typeof s!="object"||Array.isArray(s))throw new Error(n("teamImport.memberInvalid",{number:t+1}));const c=s;if(typeof c.name!="string"||!c.name.trim())throw new Error(n("teamImport.memberNoName",{number:t+1}));return{name:c.name.trim(),title:typeof c.title=="string"?c.title.trim():""}});return{manifest:r,kind:"team",name:e.name.trim(),description:typeof e.description=="string"?e.description.trim():"",members:m,rooms:o.version===1&&e.room&&typeof e.room=="object"?1:0,playbooks:0,routines:0,apps:[]}}function Q(r){const o=r.match(/^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/);if(!o)throw new Error(n("teamImport.markdownNoFrontmatter"));let e;try{e=L(o[1])}catch{throw new Error(n("teamImport.markdownBadYaml"))}if(!e||typeof e!="object"||Array.isArray(e))throw new Error(n("teamImport.markdownNoBlueprint"));const{botmrr:m,...s}=e;if(m!==1)throw new Error(n("teamImport.markdownVersion"));return{format:"openmaus.package",version:1,package:s}}function Z(r,o){const e=r.package;if(!e.agents.length)return ee(r,o);const m=new Set(e.agents.flatMap(t=>t.skills??[])),s=e.team?.leader?e.agents.find(t=>t.key===e.team?.leader)?.name:void 0;return{manifest:o,kind:"package",version:2,name:e.name,teamName:e.team?.name??e.name,description:e.summary,members:e.agents.map(t=>({name:t.name,title:t.title??""})),...s?{chiefOfStaff:s}:{},...e.team?.brief?.trim()?{brief:e.team.brief}:{},pictures:e.agents.map(t=>t.appearance.avatar?`data:${t.appearance.avatar.mime};base64,${t.appearance.avatar.data}`:null),rooms:e.rooms?.length??0,playbooks:e.playbooks?.length??0,routines:e.routines?.length??0,apps:e.requirements.apps.map(t=>({label:t.label,optional:t.optional===!0})),skills:(e.skills?.entries??[]).filter(t=>m.has(t.name)).map(t=>t.name),offeredSkills:(e.skills?.entries??[]).filter(t=>!m.has(t.name)).map(t=>t.name),connections:(e.connections??[]).map(t=>({label:t.label,url:t.mcp.url,values:t.mcp.valueNames.length})),notes:e.agents.reduce((t,c)=>t+Object.keys(c.seed?.memory??{}).length,0),presets:(e.presets??[]).map(t=>t.name)}}function ee(r,o){const e=r.package;if(!e.presets?.length)throw new Error(n("teamImport.libraryEmpty"));return{manifest:o,kind:"package",version:2,library:!0,name:e.name,description:e.summary,members:[],rooms:0,playbooks:e.playbooks?.length??0,routines:0,apps:[],skills:[],offeredSkills:(e.skills?.entries??[]).filter(m=>!e.presets.some(s=>s.skills?.includes(m.name))).map(m=>m.name),presets:e.presets.map(m=>m.name)}}function re(r,o){if(typeof r.version=="number"&&r.version>S)throw new Error(n("teamImport.newer"));if(r.version===S)return Z(P(o),o);if(r.version!==1)throw new Error(n("teamImport.playbookVersion",{version:String(r.version)}));if(!r.package||typeof r.package!="object"||Array.isArray(r.package))throw new Error(n("teamImport.playbookMissing"));const e=r.package;if(typeof e.name!="string"||!e.name.trim())throw new Error(n("teamImport.playbookNoName"));if(!Array.isArray(e.agents)||e.agents.length===0)throw new Error(n("teamImport.playbookNoBots"));if(e.agents.length>200)throw new Error(n("teamImport.playbookTooMany"));const m=e.agents.map((i,k)=>{if(!i||typeof i!="object"||Array.isArray(i))throw new Error(n("teamImport.botInvalid",{number:k+1}));const g=i;if(typeof g.name!="string"||!g.name.trim())throw new Error(n("teamImport.botNoName",{number:k+1}));return{name:g.name.trim(),title:typeof g.title=="string"?g.title.trim():""}}),s=typeof e.chiefOfStaff=="string"?e.chiefOfStaff:void 0,t=s?e.agents.find(i=>i.key===s)?.name:void 0,c=e.requirements&&typeof e.requirements=="object"&&!Array.isArray(e.requirements)?e.requirements:{},a=Array.isArray(c.apps)?c.apps.flatMap(i=>{if(!i||typeof i!="object"||Array.isArray(i))return[];const k=i;return typeof k.label=="string"?[{label:k.label.trim(),optional:k.optional===!0}]:[]}):[],f=e.skills&&typeof e.skills=="object"&&!Array.isArray(e.skills)?e.skills.entries:void 0;return{manifest:o,kind:"package",version:1,name:e.name.trim(),description:typeof e.summary=="string"?e.summary.trim():"",members:m,...typeof t=="string"?{chiefOfStaff:t}:{},rooms:Array.isArray(e.rooms)?e.rooms.length:0,playbooks:Array.isArray(e.playbooks)?e.playbooks.length:0,routines:Array.isArray(e.routines)?e.routines.length:0,apps:a,skills:Array.isArray(f)?f.flatMap(i=>{if(!i||typeof i!="object"||Array.isArray(i))return[];const{name:k}=i;return typeof k=="string"&&k.trim()?[k.trim()]:[]}):[]}}function ie(r){return r.installed&&r.installed.status!=="removed"?"added":r.release?r.blob==="unsupported"?"updateApp":r.blob!=="ready"?"notReady":"add":"noRelease"}function me(r){return r.publisher.self?n("orgLibrary.fromSelf"):n("orgLibrary.from",{name:r.publisher.name})}function pe(r){return r.mode==="required"?n("orgLibrary.recommended",{name:r.publisher.name}):null}function le(r){const o=[];return r.installed?.status==="withdrawn"&&o.push(n("orgLibrary.withdrawn",{name:r.publisher.name})),r.installed?.status==="installed"&&r.release&&r.release.version!==r.installed.release&&o.push(n("orgLibrary.newerRelease",{version:r.release.version})),o}function ce(r){const o=[];return r.bots&&o.push(n("orgLibrary.bots",{count:r.bots})),r.skills&&o.push(n("orgLibrary.skills",{count:r.skills})),r.presets&&o.push(n("orgLibrary.presets",{count:r.presets})),r.rooms&&o.push(n("orgLibrary.rooms",{count:r.rooms})),r.routines&&o.push(n("orgLibrary.routines",{count:r.routines})),r.connections&&o.push(n("orgLibrary.connections",{count:r.connections})),o.join(" · ")}function de(r,o=[]){if(r?.source!=="org")return null;const e=r.publisher?.name??"",m=o.find(s=>s.installId===r.installId);return{line:e?n("orgLibrary.provenance",{name:r.name,release:r.release,publisher:e}):n("orgLibrary.provenanceFile",{name:r.name,release:r.release}),withdrawn:m?.status==="withdrawn"?n("orgLibrary.withdrawn",{name:m.publisher||e}):null}}function ue(r){if(r.package.agents.length)return J(r);const o=r.package;return{manifest:r,kind:"package",version:2,name:o.name,teamName:o.name,description:o.summary,members:[],rooms:0,playbooks:o.playbooks?.length??0,routines:0,apps:o.requirements.apps.map(e=>({label:e.label,optional:e.optional===!0})),skills:[],offeredSkills:(o.skills?.entries??[]).map(e=>e.name),connections:[],notes:0,presets:(o.presets??[]).map(e=>e.name)}}export{se as M,pe as a,le as b,me as c,ce as d,ue as e,ie as o,de as p,J as t};
@@ -1,4 +1,4 @@
1
- import{b8 as as,bh as cn,gI as fn,B as un,be as hn,bg as Ut,gW as ls}from"./App-DFjF9FvF.js";import{o as $,k as T,l as q,_ as X,n as V,e as oe,s as F,m as cs,p as dn,w as pn,ai as mn,aj as gn,v as yn}from"./PlacesRail-v1XIqiBG.js";const Ot=Symbol.for("yaml.alias"),pt=Symbol.for("yaml.document"),se=Symbol.for("yaml.map"),fs=Symbol.for("yaml.pair"),Q=Symbol.for("yaml.scalar"),be=Symbol.for("yaml.seq"),G=Symbol.for("yaml.node.type"),we=s=>!!s&&typeof s=="object"&&s[G]===Ot,Qe=s=>!!s&&typeof s=="object"&&s[G]===pt,Ce=s=>!!s&&typeof s=="object"&&s[G]===se,M=s=>!!s&&typeof s=="object"&&s[G]===fs,_=s=>!!s&&typeof s=="object"&&s[G]===Q,Me=s=>!!s&&typeof s=="object"&&s[G]===be;function v(s){if(s&&typeof s=="object")switch(s[G]){case se:case be:return!0}return!1}function C(s){if(s&&typeof s=="object")switch(s[G]){case Ot:case se:case Q:case be:return!0}return!1}const us=s=>(_(s)||v(s))&&!!s.anchor,ne=Symbol("break visit"),bn=Symbol("skip children"),Ie=Symbol("remove node");function ke(s,e){const t=wn(e);Qe(s)?ue(null,s.contents,t,Object.freeze([s]))===Ie&&(s.contents=null):ue(null,s,t,Object.freeze([]))}ke.BREAK=ne;ke.SKIP=bn;ke.REMOVE=Ie;function ue(s,e,t,n){const i=kn(s,e,t,n);if(C(i)||M(i))return Sn(s,n,i),ue(s,i,t,n);if(typeof i!="symbol"){if(v(e)){n=Object.freeze(n.concat(e));for(let r=0;r<e.items.length;++r){const o=ue(r,e.items[r],t,n);if(typeof o=="number")r=o-1;else{if(o===ne)return ne;o===Ie&&(e.items.splice(r,1),r-=1)}}}else if(M(e)){n=Object.freeze(n.concat(e));const r=ue("key",e.key,t,n);if(r===ne)return ne;r===Ie&&(e.key=null);const o=ue("value",e.value,t,n);if(o===ne)return ne;o===Ie&&(e.value=null)}}return i}function wn(s){return typeof s=="object"&&(s.Collection||s.Node||s.Value)?Object.assign({Alias:s.Node,Map:s.Node,Scalar:s.Node,Seq:s.Node},s.Value&&{Map:s.Value,Scalar:s.Value,Seq:s.Value},s.Collection&&{Map:s.Collection,Seq:s.Collection},s):s}function kn(s,e,t,n){if(typeof t=="function")return t(s,e,n);if(Ce(e))return t.Map?.(s,e,n);if(Me(e))return t.Seq?.(s,e,n);if(M(e))return t.Pair?.(s,e,n);if(_(e))return t.Scalar?.(s,e,n);if(we(e))return t.Alias?.(s,e,n)}function Sn(s,e,t){const n=e[e.length-1];if(v(n))n.items[s]=t;else if(M(n))s==="key"?n.key=t:n.value=t;else if(Qe(n))n.contents=t;else{const i=we(n)?"alias":"scalar";throw new Error(`Cannot replace node with ${i} parent`)}}const An={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},Nn=s=>s.replace(/[!,[\]{}]/g,e=>An[e]);class D{constructor(e,t){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},D.defaultYaml,e),this.tags=Object.assign({},D.defaultTags,t)}clone(){const e=new D(this.yaml,this.tags);return e.docStart=this.docStart,e}atDocument(){const e=new D(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:D.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},D.defaultTags);break}return e}add(e,t){this.atNextDocument&&(this.yaml={explicit:D.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},D.defaultTags),this.atNextDocument=!1);const n=e.trim().split(/[ \t]+/),i=n.shift();switch(i){case"%TAG":{if(n.length!==2&&(t(0,"%TAG directive should contain exactly two parts"),n.length<2))return!1;const[r,o]=n;return this.tags[r]=o,!0}case"%YAML":{if(this.yaml.explicit=!0,n.length!==1)return t(0,"%YAML directive should contain exactly one part"),!1;const[r]=n;if(r==="1.1"||r==="1.2")return this.yaml.version=r,!0;{const o=/^\d+\.\d+$/.test(r);return t(6,`Unsupported YAML version ${r}`,o),!1}}default:return t(0,`Unknown directive ${i}`,!0),!1}}tagName(e,t){if(e==="!")return"!";if(e[0]!=="!")return t(`Not a valid tag: ${e}`),null;if(e[1]==="<"){const o=e.slice(2,-1);return o==="!"||o==="!!"?(t(`Verbatim tags aren't resolved, so ${e} is invalid.`),null):(e[e.length-1]!==">"&&t("Verbatim tags must end with a >"),o)}const[,n,i]=e.match(/^(.*!)([^!]*)$/s);i||t(`The ${e} tag has no suffix`);const r=this.tags[n];if(r)try{return r+decodeURIComponent(i)}catch(o){return t(String(o)),null}return n==="!"?e:(t(`Could not resolve tag: ${e}`),null)}tagString(e){for(const[t,n]of Object.entries(this.tags))if(e.startsWith(n))return t+Nn(e.substring(n.length));return e[0]==="!"?e:`!<${e}>`}toString(e){const t=this.yaml.explicit?[`%YAML ${this.yaml.version||"1.2"}`]:[],n=Object.entries(this.tags);let i;if(e&&n.length>0&&C(e.contents)){const r={};ke(e.contents,(o,a)=>{C(a)&&a.tag&&(r[a.tag]=!0)}),i=Object.keys(r)}else i=[];for(const[r,o]of n)r==="!!"&&o==="tag:yaml.org,2002:"||(!e||i.some(a=>a.startsWith(o)))&&t.push(`%TAG ${r} ${o}`);return t.join(`
1
+ import{b8 as as,bh as cn,gI as fn,B as un,be as hn,bg as Ut,gW as ls}from"./App-8heymKKb.js";import{o as $,k as T,l as q,_ as X,n as V,e as oe,s as F,m as cs,p as dn,w as pn,ai as mn,aj as gn,v as yn}from"./PlacesRail-v1XIqiBG.js";const Ot=Symbol.for("yaml.alias"),pt=Symbol.for("yaml.document"),se=Symbol.for("yaml.map"),fs=Symbol.for("yaml.pair"),Q=Symbol.for("yaml.scalar"),be=Symbol.for("yaml.seq"),G=Symbol.for("yaml.node.type"),we=s=>!!s&&typeof s=="object"&&s[G]===Ot,Qe=s=>!!s&&typeof s=="object"&&s[G]===pt,Ce=s=>!!s&&typeof s=="object"&&s[G]===se,M=s=>!!s&&typeof s=="object"&&s[G]===fs,_=s=>!!s&&typeof s=="object"&&s[G]===Q,Me=s=>!!s&&typeof s=="object"&&s[G]===be;function v(s){if(s&&typeof s=="object")switch(s[G]){case se:case be:return!0}return!1}function C(s){if(s&&typeof s=="object")switch(s[G]){case Ot:case se:case Q:case be:return!0}return!1}const us=s=>(_(s)||v(s))&&!!s.anchor,ne=Symbol("break visit"),bn=Symbol("skip children"),Ie=Symbol("remove node");function ke(s,e){const t=wn(e);Qe(s)?ue(null,s.contents,t,Object.freeze([s]))===Ie&&(s.contents=null):ue(null,s,t,Object.freeze([]))}ke.BREAK=ne;ke.SKIP=bn;ke.REMOVE=Ie;function ue(s,e,t,n){const i=kn(s,e,t,n);if(C(i)||M(i))return Sn(s,n,i),ue(s,i,t,n);if(typeof i!="symbol"){if(v(e)){n=Object.freeze(n.concat(e));for(let r=0;r<e.items.length;++r){const o=ue(r,e.items[r],t,n);if(typeof o=="number")r=o-1;else{if(o===ne)return ne;o===Ie&&(e.items.splice(r,1),r-=1)}}}else if(M(e)){n=Object.freeze(n.concat(e));const r=ue("key",e.key,t,n);if(r===ne)return ne;r===Ie&&(e.key=null);const o=ue("value",e.value,t,n);if(o===ne)return ne;o===Ie&&(e.value=null)}}return i}function wn(s){return typeof s=="object"&&(s.Collection||s.Node||s.Value)?Object.assign({Alias:s.Node,Map:s.Node,Scalar:s.Node,Seq:s.Node},s.Value&&{Map:s.Value,Scalar:s.Value,Seq:s.Value},s.Collection&&{Map:s.Collection,Seq:s.Collection},s):s}function kn(s,e,t,n){if(typeof t=="function")return t(s,e,n);if(Ce(e))return t.Map?.(s,e,n);if(Me(e))return t.Seq?.(s,e,n);if(M(e))return t.Pair?.(s,e,n);if(_(e))return t.Scalar?.(s,e,n);if(we(e))return t.Alias?.(s,e,n)}function Sn(s,e,t){const n=e[e.length-1];if(v(n))n.items[s]=t;else if(M(n))s==="key"?n.key=t:n.value=t;else if(Qe(n))n.contents=t;else{const i=we(n)?"alias":"scalar";throw new Error(`Cannot replace node with ${i} parent`)}}const An={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},Nn=s=>s.replace(/[!,[\]{}]/g,e=>An[e]);class D{constructor(e,t){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},D.defaultYaml,e),this.tags=Object.assign({},D.defaultTags,t)}clone(){const e=new D(this.yaml,this.tags);return e.docStart=this.docStart,e}atDocument(){const e=new D(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:D.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},D.defaultTags);break}return e}add(e,t){this.atNextDocument&&(this.yaml={explicit:D.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},D.defaultTags),this.atNextDocument=!1);const n=e.trim().split(/[ \t]+/),i=n.shift();switch(i){case"%TAG":{if(n.length!==2&&(t(0,"%TAG directive should contain exactly two parts"),n.length<2))return!1;const[r,o]=n;return this.tags[r]=o,!0}case"%YAML":{if(this.yaml.explicit=!0,n.length!==1)return t(0,"%YAML directive should contain exactly one part"),!1;const[r]=n;if(r==="1.1"||r==="1.2")return this.yaml.version=r,!0;{const o=/^\d+\.\d+$/.test(r);return t(6,`Unsupported YAML version ${r}`,o),!1}}default:return t(0,`Unknown directive ${i}`,!0),!1}}tagName(e,t){if(e==="!")return"!";if(e[0]!=="!")return t(`Not a valid tag: ${e}`),null;if(e[1]==="<"){const o=e.slice(2,-1);return o==="!"||o==="!!"?(t(`Verbatim tags aren't resolved, so ${e} is invalid.`),null):(e[e.length-1]!==">"&&t("Verbatim tags must end with a >"),o)}const[,n,i]=e.match(/^(.*!)([^!]*)$/s);i||t(`The ${e} tag has no suffix`);const r=this.tags[n];if(r)try{return r+decodeURIComponent(i)}catch(o){return t(String(o)),null}return n==="!"?e:(t(`Could not resolve tag: ${e}`),null)}tagString(e){for(const[t,n]of Object.entries(this.tags))if(e.startsWith(n))return t+Nn(e.substring(n.length));return e[0]==="!"?e:`!<${e}>`}toString(e){const t=this.yaml.explicit?[`%YAML ${this.yaml.version||"1.2"}`]:[],n=Object.entries(this.tags);let i;if(e&&n.length>0&&C(e.contents)){const r={};ke(e.contents,(o,a)=>{C(a)&&a.tag&&(r[a.tag]=!0)}),i=Object.keys(r)}else i=[];for(const[r,o]of n)r==="!!"&&o==="tag:yaml.org,2002:"||(!e||i.some(a=>a.startsWith(o)))&&t.push(`%TAG ${r} ${o}`);return t.join(`
2
2
  `)}}D.defaultYaml={explicit:!1,version:"1.2"};D.defaultTags={"!!":"tag:yaml.org,2002:"};function hs(s){if(/[\x00-\x19\s,[\]{}]/.test(s)){const t=`Anchor must not contain whitespace or control characters: ${JSON.stringify(s)}`;throw new Error(t)}return!0}function ds(s){const e=new Set;return ke(s,{Value(t,n){n.anchor&&e.add(n.anchor)}}),e}function ps(s,e){for(let t=1;;++t){const n=`${s}${t}`;if(!e.has(n))return n}}function On(s,e){const t=[],n=new Map;let i=null;return{onAnchor:r=>{t.push(r),i??(i=ds(s));const o=ps(e,i);return i.add(o),o},setAnchors:()=>{for(const r of t){const o=n.get(r);if(typeof o=="object"&&o.anchor&&(_(o.node)||v(o.node)))o.node.anchor=o.anchor;else{const a=new Error("Failed to resolve repeated object (this should not happen)");throw a.source=r,a}}},sourceObjects:n}}function he(s,e,t,n){if(n&&typeof n=="object")if(Array.isArray(n))for(let i=0,r=n.length;i<r;++i){const o=n[i],a=he(s,n,String(i),o);a===void 0?delete n[i]:a!==o&&(n[i]=a)}else if(n instanceof Map)for(const i of Array.from(n.keys())){const r=n.get(i),o=he(s,n,i,r);o===void 0?n.delete(i):o!==r&&n.set(i,o)}else if(n instanceof Set)for(const i of Array.from(n)){const r=he(s,n,i,i);r===void 0?n.delete(i):r!==i&&(n.delete(i),n.add(r))}else for(const[i,r]of Object.entries(n)){const o=he(s,n,i,r);o===void 0?delete n[i]:o!==r&&(n[i]=o)}return s.call(e,t,n)}function J(s,e,t){if(Array.isArray(s))return s.map((n,i)=>J(n,String(i),t));if(s&&typeof s.toJSON=="function"){if(!t||!us(s))return s.toJSON(e,t);const n={aliasCount:0,count:1,res:void 0};t.anchors.set(s,n),t.onCreate=r=>{n.res=r,delete t.onCreate};const i=s.toJSON(e,t);return t.onCreate&&t.onCreate(i),i}return typeof s=="bigint"&&!t?.keep?Number(s):s}class Et{constructor(e){Object.defineProperty(this,G,{value:e})}clone(){const e=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return this.range&&(e.range=this.range.slice()),e}toJS(e,{mapAsMap:t,maxAliasCount:n,onAnchor:i,reviver:r}={}){if(!Qe(e))throw new TypeError("A document argument is required");const o={anchors:new Map,doc:e,keep:!0,mapAsMap:t===!0,mapKeyWarned:!1,maxAliasCount:typeof n=="number"?n:100},a=J(this,"",o);if(typeof i=="function")for(const{count:c,res:l}of o.anchors.values())i(l,c);return typeof r=="function"?he(r,{"":a},"",a):a}}class $t extends Et{constructor(e){super(Ot),this.source=e,Object.defineProperty(this,"tag",{set(){throw new Error("Alias nodes cannot have tags")}})}resolve(e,t){if(t?.maxAliasCount===0)throw new ReferenceError("Alias resolution is disabled");let n;t?.aliasResolveCache?n=t.aliasResolveCache:(n=[],ke(e,{Node:(r,o)=>{(we(o)||us(o))&&n.push(o)}}),t&&(t.aliasResolveCache=n));let i;for(const r of n){if(r===this)break;r.anchor===this.source&&(i=r)}return i}toJSON(e,t){if(!t)return{source:this.source};const{anchors:n,doc:i,maxAliasCount:r}=t,o=this.resolve(i,t);if(!o){const c=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new ReferenceError(c)}let a=n.get(o);if(a||(J(o,null,t),a=n.get(o)),a?.res===void 0){const c="This should not happen: Alias anchor was not resolved?";throw new ReferenceError(c)}if(r>=0&&(a.count+=1,a.aliasCount===0&&(a.aliasCount=Fe(i,o,n)),a.count*a.aliasCount>r)){const c="Excessive alias count indicates a resource exhaustion attack";throw new ReferenceError(c)}return a.res}toString(e,t,n){const i=`*${this.source}`;if(e){if(hs(this.source),e.options.verifyAliasOrder&&!e.anchors.has(this.source)){const r=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new Error(r)}if(e.implicitKey)return`${i} `}return i}}function Fe(s,e,t){if(we(e)){const n=e.resolve(s),i=t&&n&&t.get(n);return i?i.count*i.aliasCount:0}else if(v(e)){let n=0;for(const i of e.items){const r=Fe(s,i,t);r>n&&(n=r)}return n}else if(M(e)){const n=Fe(s,e.key,t),i=Fe(s,e.value,t);return Math.max(n,i)}return 1}const ms=s=>!s||typeof s!="function"&&typeof s!="object";class O extends Et{constructor(e){super(Q),this.value=e}toJSON(e,t){return t?.keep?this.value:J(this.value,e,t)}toString(){return String(this.value)}}O.BLOCK_FOLDED="BLOCK_FOLDED";O.BLOCK_LITERAL="BLOCK_LITERAL";O.PLAIN="PLAIN";O.QUOTE_DOUBLE="QUOTE_DOUBLE";O.QUOTE_SINGLE="QUOTE_SINGLE";const En="tag:yaml.org,2002:";function $n(s,e,t){if(e){const n=t.filter(r=>r.tag===e),i=n.find(r=>!r.format)??n[0];if(!i)throw new Error(`Tag ${e} not found`);return i}return t.find(n=>n.identify?.(s)&&!n.format)}function _e(s,e,t){if(Qe(s)&&(s=s.contents),C(s))return s;if(M(s)){const f=t.schema[se].createNode?.(t.schema,null,t);return f.items.push(s),f}(s instanceof String||s instanceof Number||s instanceof Boolean||typeof BigInt<"u"&&s instanceof BigInt)&&(s=s.valueOf());const{aliasDuplicateObjects:n,onAnchor:i,onTagObj:r,schema:o,sourceObjects:a}=t;let c;if(n&&s&&typeof s=="object"){if(c=a.get(s),c)return c.anchor??(c.anchor=i(s)),new $t(c.anchor);c={anchor:null,node:null},a.set(s,c)}e?.startsWith("!!")&&(e=En+e.slice(2));let l=$n(s,e,o.tags);if(!l){if(s&&typeof s.toJSON=="function"&&(s=s.toJSON()),!s||typeof s!="object"){const f=new O(s);return c&&(c.node=f),f}l=s instanceof Map?o[se]:Symbol.iterator in Object(s)?o[be]:o[se]}r&&(r(l),delete t.onTagObj);const d=l?.createNode?l.createNode(t.schema,s,t):typeof l?.nodeClass?.from=="function"?l.nodeClass.from(t.schema,s,t):new O(s);return e?d.tag=e:l.default||(d.tag=l.tag),c&&(c.node=d),d}function Ye(s,e,t){let n=t;for(let i=e.length-1;i>=0;--i){const r=e[i];if(typeof r=="number"&&Number.isInteger(r)&&r>=0){const o=[];o[r]=n,n=o}else n=new Map([[r,n]])}return _e(n,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:()=>{throw new Error("This should not happen, please report a bug.")},schema:s,sourceObjects:new Map})}const $e=s=>s==null||typeof s=="object"&&!!s[Symbol.iterator]().next().done;class gs extends Et{constructor(e,t){super(e),Object.defineProperty(this,"schema",{value:t,configurable:!0,enumerable:!1,writable:!0})}clone(e){const t=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return e&&(t.schema=e),t.items=t.items.map(n=>C(n)||M(n)?n.clone(e):n),this.range&&(t.range=this.range.slice()),t}addIn(e,t){if($e(e))this.add(t);else{const[n,...i]=e,r=this.get(n,!0);if(v(r))r.addIn(i,t);else if(r===void 0&&this.schema)this.set(n,Ye(this.schema,i,t));else throw new Error(`Expected YAML collection at ${n}. Remaining path: ${i}`)}}deleteIn(e){const[t,...n]=e;if(n.length===0)return this.delete(t);const i=this.get(t,!0);if(v(i))return i.deleteIn(n);throw new Error(`Expected YAML collection at ${t}. Remaining path: ${n}`)}getIn(e,t){const[n,...i]=e,r=this.get(n,!0);return i.length===0?!t&&_(r)?r.value:r:v(r)?r.getIn(i,t):void 0}hasAllNullValues(e){return this.items.every(t=>{if(!M(t))return!1;const n=t.value;return n==null||e&&_(n)&&n.value==null&&!n.commentBefore&&!n.comment&&!n.tag})}hasIn(e){const[t,...n]=e;if(n.length===0)return this.has(t);const i=this.get(t,!0);return v(i)?i.hasIn(n):!1}setIn(e,t){const[n,...i]=e;if(i.length===0)this.set(n,t);else{const r=this.get(n,!0);if(v(r))r.setIn(i,t);else if(r===void 0&&this.schema)this.set(n,Ye(this.schema,i,t));else throw new Error(`Expected YAML collection at ${n}. Remaining path: ${i}`)}}}const Tn=s=>s.replace(/^(?!$)(?: $)?/gm,"#");function z(s,e){return/^\n+$/.test(s)?s.substring(1):e?s.replace(/^(?! *$)/gm,e):s}const ie=(s,e,t)=>s.endsWith(`
3
3
  `)?z(t,e):t.includes(`
4
4
  `)?`
@@ -1 +1 @@
1
- import{r as i,j as e,t as n,a as B,X as _,p as K,i as y}from"./styles-BlayaJti.js";import{b as Q,r as Z,i as ee}from"./remote-desktop-DDRRx8uY.js";import{u as te,L as C,P as se}from"./PlacesRail-v1XIqiBG.js";import{u as ne,B as re}from"./BrowserPanel-BB3qz5lN.js";import{u as ae,o as ie,t as oe,G as le,p as ce,q as U,v as de,w as ue,n as b,A as pe,x as me,y as xe}from"./App-DFjF9FvF.js";import{R as fe}from"./RoutinesPage-DRwSDyGu.js";import{M as F}from"./monitor-DFEzCfQk.js";import{C as he}from"./calendar-days-YMHxUvlg.js";import"./BrowserProfilesManager-CVdcfOF8.js";import"./index-CwYJ9TX8.js";import"./SignedInSites-B16Ruhd0.js";import"./minimize-BYscOtPM.js";import"./file-up-Bl7ViNTL.js";import"./MenuMotion-IQitGKH4.js";import"./ProIntroduction--jIMb4bL.js";function ge(t){if(typeof t!="string"||!t)throw new Error(n("remoteDesktop.noLink"));return t.startsWith("/vps-viewer/")?new URL(t,window.location.origin).toString():t}function be(t){if(t.schedule.type==="cron"||t.schedule.type==="limit_reset")return me(t.schedule);if(t.schedule.type==="once")return new Date(t.schedule.at).toLocaleString(y(),{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"});if(t.schedule.type==="interval"){const d=t.schedule.everyMinutes%60===0?n("routines.interval.hours",{hours:t.schedule.everyMinutes/60}):n("routines.interval.minutes",{minutes:t.schedule.everyMinutes});return n("remoteDesktop.startingAt",{cadence:d,date:new Date(t.schedule.anchorAt).toLocaleString(y(),{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"})})}const r=t.schedule.weekdays,l=r.length===7?n("routines.repeat.daily"):r.join(",")==="1,2,3,4,5"?n("routines.repeat.weekdays"):r.map(xe).join(", "),[w,k]=t.schedule.time.split(":").map(Number);return`${l} · ${new Date(2e3,0,1,w,k).toLocaleTimeString(y(),{hour:"numeric",minute:"2-digit"})}`}function ye(t){if(t==null)return n("routines.pausedSchedule");const r=new Date(t),l=new Date;return`${r.toDateString()===l.toDateString()?n("routines.today"):r.toLocaleDateString(y(),{month:"short",day:"numeric"})}, ${r.toLocaleTimeString(y(),{hour:"numeric",minute:"2-digit"})}`}function Oe({bot:t}){const{state:r,dispatch:l}=ae(),{dragProps:w}=te(),k=ie(t.id),[d,I]=i.useState(!1),[v,j]=i.useState(null),[p,R]=i.useState(null),[M,D]=i.useState(!0),[H,m]=i.useState(!1),[P,E]=i.useState(!1),A=ne(),L=i.useRef(t.busy);i.useEffect(()=>{L.current=t.busy},[t.busy]);const[G,z]=i.useState(!1),[x,O]=i.useState(()=>oe(t.id)?"browser":"desktop"),[J,W]=i.useState(),u=r.computerControl[t.id]?.help??null,q=u?r.bots.find(s=>s.id===u.botId)?.name??t.name:t.name,c=r.signInFocus?.botId===t.id?r.signInFocus:void 0;i.useEffect(()=>{!c||c.consumed||(O(c.place==="browser"?"browser":"desktop"),c.place==="browser"&&W({url:c.url,site:c.site,nonce:c.requestId}),l({type:"signInFocusConsumed",requestId:c.requestId}))},[l,c]);const N=r.routines.filter(s=>s.botId===t.id).sort((s,a)=>Number(a.enabled)-Number(s.enabled)||(s.nextRunAt??1/0)-(a.nextRunAt??1/0)),f=r.routineRuns.find(s=>s.botId===t.id&&["queued","running","waiting"].includes(s.status)),X=!!(r.config?.box.configured&&Q(r.instances,t.modelSelection.instanceId)?.snapshot.state==="available");i.useEffect(()=>{R(null),D(!0),m(!1)},[t.id]),i.useEffect(()=>{const s=window.ogb?.desktopViewer;if(!s)return;let a=!0;s.currentState().then(o=>{a&&E(o.open&&o.contextId===t.id)}).catch(()=>{});const h=s.onState(o=>{(o.contextId===t.id||!o.open)&&E(o.open&&o.contextId===t.id)});return()=>{a=!1,h()}},[t.id]),i.useEffect(()=>{if(x!=="desktop"||!A||P||d)return;const s=new AbortController;let a=!1,h=-1/0,o=null,S=null;const $=async()=>{if(!(a||s.signal.aborted)&&!(Date.now()-h<(o??(L.current?4e3:3e4)))){a=!0,o=null;try{const g=Z(await b(`/api/bots/${t.id}/computer/screenshot`,{method:"POST",body:"{}",signal:AbortSignal.any([s.signal,AbortSignal.timeout(9e4)])}));!s.signal.aborted&&g?(R(g),m(!1),S=null):s.signal.aborted||m(!0)}catch(g){if(!s.signal.aborted)if(g instanceof pe&&ee(g)){o=1e3,S??=Date.now();const T=Date.now()-S>=1e4;m(T),D(!T)}else S=null,m(!0)}finally{!s.signal.aborted&&o===null&&D(!1),a=!1,h=Date.now()}}};$();const Y=window.setInterval($,1e3);return()=>{s.abort(),window.clearInterval(Y)}},[t.id,A,P,d,x]);const V=async()=>{I(!0),j(null);let s=!1;try{if(!window.ogb?.desktopViewer)throw new Error(n("remoteDesktop.viewerUnavailable"));await b(`/api/bots/${t.id}/computer/control`,{method:"POST",body:JSON.stringify({action:"take"})}),s=!0;const a=await b(`/api/bots/${t.id}/computer/join`,{method:"POST",body:"{}"});if(!await window.ogb.desktopViewer.open(ge(a.joinUrl),n("computer.viewerTitle",{name:t.name}),t.id))throw new Error(n("computer.err.openDesktop",{app:K()}))}catch(a){s&&await b(`/api/bots/${t.id}/computer/control`,{method:"POST",body:JSON.stringify({action:"release"})}).catch(()=>{}),await b(`/api/bots/${t.id}/computer/viewer-close`,{method:"POST",body:"{}"}).catch(()=>{}),j(a instanceof Error?a.message:String(a))}finally{I(!1)}};return e.jsxs("aside",{className:"relative z-20 flex h-full w-[400px] shrink-0 flex-col border-l border-hairline bg-panel",ref:k,"data-computer-panel":!0,children:[e.jsxs("div",{...w,className:"flex items-center justify-between border-b border-hairline px-5 py-4",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-[14px] font-medium text-ink",children:n("remoteDesktop.title",{name:t.name})}),e.jsx("div",{className:"mt-0.5 text-[11px] text-ink-secondary",children:n(t.cloudBackend==="vps"?"botAccess.cloud.selfHostedVps":"remoteDesktop.cloudDesktop")})]}),e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx("div",{className:"flex rounded-full bg-inset p-0.5","aria-label":n("computer.tabsAria"),children:["desktop","browser"].map(s=>e.jsxs("button",{type:"button",onClick:()=>O(s),"aria-pressed":x===s,className:B("flex items-center gap-1 rounded-full px-2.5 py-1 text-[12px]",x===s?"bg-card text-ink shadow-sm":"text-ink-secondary hover:text-ink"),children:[s==="desktop"?e.jsx(F,{size:12}):e.jsx(le,{size:12}),n(s==="desktop"?"remoteDesktop.desktop":"place.browser")]},s))}),e.jsx("button",{type:"button","data-computer-panel-close":!0,onClick:()=>{ce(k.current,t.id),l({type:"toggleComputer",open:!1})},className:"rounded-md p-1 text-ink-secondary hover:bg-control hover:text-ink","aria-label":n("remoteDesktop.close"),children:e.jsx(_,{size:18})})]})]}),x==="browser"?e.jsxs("div",{className:"flex min-h-0 flex-1 flex-col px-4 pb-4 pt-1",children:[u?.place==="browser"&&e.jsx("div",{className:"-mt-2 mb-3",children:e.jsx(U,{help:u,askerName:q,onError:j})}),e.jsx(re,{bot:t,signIn:J}),v&&e.jsx("div",{role:"alert",className:"mt-2 rounded-lg border border-danger/30 bg-danger/10 px-3 py-2 text-[12px] text-danger",children:v}),e.jsx("p",{className:"mt-2 text-[11px] leading-relaxed text-ink-secondary",children:n("remoteDesktop.browserHint")})]}):e.jsxs("div",{className:"flex flex-1 flex-col items-center gap-4 overflow-y-auto px-6 py-5 text-center",children:[u&&u.place!=="browser"&&e.jsx("div",{className:"-mt-3 w-full",children:e.jsx(U,{help:u,askerName:q,onError:j})}),e.jsxs("button",{type:"button",onClick:()=>{V()},disabled:d||!p,className:"group relative flex aspect-video w-full items-center justify-center overflow-hidden rounded-xl border border-hairline bg-black disabled:cursor-default","aria-label":p?n("computer.openLiveDesktopAria",{name:t.name}):n("remoteDesktop.previewUnavailableLabel"),children:[p?e.jsx("img",{src:p,alt:n("remoteDesktop.previewAlt",{name:t.name}),className:"h-full w-full object-contain"}):M?e.jsx(C,{size:22,className:"animate-spin text-ink-secondary"}):e.jsxs("div",{className:"flex flex-col items-center gap-2 text-ink-secondary",children:[e.jsx(de,{size:24}),e.jsx("span",{className:"text-[11px]",children:n(H?"remoteDesktop.previewUnavailable":"remoteDesktop.previewWaiting")})]}),p&&e.jsx("span",{className:"absolute inset-x-0 bottom-0 bg-black/65 py-2 text-[11px] font-medium text-white opacity-0 transition-opacity group-hover:opacity-100",children:n("computer.openLiveDesktop")})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-[14px] font-medium text-ink",children:n("remoteDesktop.openLive")}),e.jsx("p",{className:"mt-2 text-[12px] leading-relaxed text-ink-secondary",children:n("remoteDesktop.relayHint")})]}),e.jsxs("button",{type:"button",onClick:()=>{V()},disabled:d,className:"flex w-full items-center justify-center gap-2 rounded-lg bg-accent px-4 py-2.5 text-[13px] font-medium text-white hover:brightness-110 disabled:opacity-50",children:[d?e.jsx(C,{size:15,className:"animate-spin"}):e.jsx(F,{size:15}),n(d?"settings.updates.opening":"computer.takeControl")]}),v&&e.jsx("div",{role:"alert",className:"w-full rounded-lg border border-danger/30 bg-danger/10 px-3 py-2 text-left text-[12px] text-danger",children:v}),e.jsx("p",{className:"text-[11px] leading-relaxed text-ink-secondary",children:n("remoteDesktop.accessHint")}),e.jsxs("div",{className:"w-full rounded-xl bg-card p-4 text-left",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsxs("div",{className:"flex items-center gap-2 text-[15px] font-medium text-ink",children:[e.jsx(ue,{size:16,className:"text-accent"}),n("computer.routines.title")]}),N.length>0&&e.jsx("span",{className:"rounded-full bg-control px-2 py-0.5 text-[10px] font-medium text-ink-secondary",children:N.length})]}),f&&e.jsxs("button",{type:"button",onClick:()=>l({type:"showRoutines"}),className:"mt-3 flex w-full items-center gap-2 rounded-lg border border-accent/25 bg-accent/10 px-3 py-2 text-left text-[12px] text-accent hover:bg-accent/15",children:[e.jsx(C,{size:13,className:f.status==="queued"?"":"animate-spin"}),e.jsxs("span",{className:"min-w-0 flex-1 truncate",children:[f.routineName," · ",n(f.status==="waiting"?"computer.routines.needsYou":f.status==="queued"?"computer.runStatus.queued":"computer.runStatus.running")]})]}),N.length>0&&e.jsx("div",{className:"mt-3 space-y-1.5",children:N.slice(0,3).map(s=>e.jsxs("button",{type:"button",onClick:()=>l({type:"showRoutines"}),className:"flex w-full items-center gap-2 rounded-lg bg-inset px-3 py-2 text-left hover:bg-control/60",children:[e.jsx("span",{className:B("size-1.5 shrink-0 rounded-full",s.enabled?"bg-success":"bg-ink-secondary/40")}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block truncate text-[13px] font-medium text-ink",children:s.name}),e.jsxs("span",{className:"block truncate text-[11px] text-ink-secondary",children:[be(s),s.runOn==="cloud"?` · ${n("remoteDesktop.runsOnVm")}`:""]})]}),e.jsx("span",{className:"shrink-0 text-[10px] text-ink-secondary",children:ye(s.nextRunAt)})]},s.id))}),e.jsxs("div",{className:"mt-3 flex gap-2",children:[e.jsxs("button",{type:"button",onClick:()=>z(!0),className:"flex flex-1 items-center justify-center gap-1.5 rounded-lg bg-accent py-2 text-[13px] font-medium text-white hover:brightness-110",children:[e.jsx(se,{size:14}),n("computer.routines.create")]}),e.jsxs("button",{type:"button",onClick:()=>l({type:"showRoutines"}),className:"flex items-center justify-center gap-1.5 rounded-lg bg-control px-3 py-2 text-[13px] text-ink hover:bg-raised-hover",title:n("computer.routines.openTitle"),children:[e.jsx(he,{size:14}),n("computer.routines.schedules")]})]})]})]}),G&&e.jsx(fe,{bots:[t],lockedBotId:t.id,defaultRunOn:X?"cloud":"maus",onClose:()=>z(!1)})]})}export{Oe as RemoteDesktopPanel};
1
+ import{r as i,j as e,t as n,a as B,X as _,p as K,i as y}from"./styles-BlayaJti.js";import{b as Q,r as Z,i as ee}from"./remote-desktop-DDRRx8uY.js";import{u as te,L as C,P as se}from"./PlacesRail-v1XIqiBG.js";import{u as ne,B as re}from"./BrowserPanel-Cyws1YTJ.js";import{u as ae,o as ie,t as oe,G as le,p as ce,q as U,v as de,w as ue,n as b,A as pe,x as me,y as xe}from"./App-8heymKKb.js";import{R as fe}from"./RoutinesPage-aANJQ--g.js";import{M as F}from"./monitor-DFEzCfQk.js";import{C as he}from"./calendar-days-YMHxUvlg.js";import"./BrowserProfilesManager-BEUgS3Me.js";import"./index-BBsdMDZV.js";import"./SignedInSites-CfhTex9p.js";import"./minimize-BYscOtPM.js";import"./file-up-Bl7ViNTL.js";import"./MenuMotion-IQitGKH4.js";import"./ProIntroduction-qFeFSzyk.js";function ge(t){if(typeof t!="string"||!t)throw new Error(n("remoteDesktop.noLink"));return t.startsWith("/vps-viewer/")?new URL(t,window.location.origin).toString():t}function be(t){if(t.schedule.type==="cron"||t.schedule.type==="limit_reset")return me(t.schedule);if(t.schedule.type==="once")return new Date(t.schedule.at).toLocaleString(y(),{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"});if(t.schedule.type==="interval"){const d=t.schedule.everyMinutes%60===0?n("routines.interval.hours",{hours:t.schedule.everyMinutes/60}):n("routines.interval.minutes",{minutes:t.schedule.everyMinutes});return n("remoteDesktop.startingAt",{cadence:d,date:new Date(t.schedule.anchorAt).toLocaleString(y(),{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"})})}const r=t.schedule.weekdays,l=r.length===7?n("routines.repeat.daily"):r.join(",")==="1,2,3,4,5"?n("routines.repeat.weekdays"):r.map(xe).join(", "),[w,k]=t.schedule.time.split(":").map(Number);return`${l} · ${new Date(2e3,0,1,w,k).toLocaleTimeString(y(),{hour:"numeric",minute:"2-digit"})}`}function ye(t){if(t==null)return n("routines.pausedSchedule");const r=new Date(t),l=new Date;return`${r.toDateString()===l.toDateString()?n("routines.today"):r.toLocaleDateString(y(),{month:"short",day:"numeric"})}, ${r.toLocaleTimeString(y(),{hour:"numeric",minute:"2-digit"})}`}function Oe({bot:t}){const{state:r,dispatch:l}=ae(),{dragProps:w}=te(),k=ie(t.id),[d,I]=i.useState(!1),[v,j]=i.useState(null),[p,R]=i.useState(null),[M,D]=i.useState(!0),[H,m]=i.useState(!1),[P,E]=i.useState(!1),A=ne(),L=i.useRef(t.busy);i.useEffect(()=>{L.current=t.busy},[t.busy]);const[G,z]=i.useState(!1),[x,O]=i.useState(()=>oe(t.id)?"browser":"desktop"),[J,W]=i.useState(),u=r.computerControl[t.id]?.help??null,q=u?r.bots.find(s=>s.id===u.botId)?.name??t.name:t.name,c=r.signInFocus?.botId===t.id?r.signInFocus:void 0;i.useEffect(()=>{!c||c.consumed||(O(c.place==="browser"?"browser":"desktop"),c.place==="browser"&&W({url:c.url,site:c.site,nonce:c.requestId}),l({type:"signInFocusConsumed",requestId:c.requestId}))},[l,c]);const N=r.routines.filter(s=>s.botId===t.id).sort((s,a)=>Number(a.enabled)-Number(s.enabled)||(s.nextRunAt??1/0)-(a.nextRunAt??1/0)),f=r.routineRuns.find(s=>s.botId===t.id&&["queued","running","waiting"].includes(s.status)),X=!!(r.config?.box.configured&&Q(r.instances,t.modelSelection.instanceId)?.snapshot.state==="available");i.useEffect(()=>{R(null),D(!0),m(!1)},[t.id]),i.useEffect(()=>{const s=window.ogb?.desktopViewer;if(!s)return;let a=!0;s.currentState().then(o=>{a&&E(o.open&&o.contextId===t.id)}).catch(()=>{});const h=s.onState(o=>{(o.contextId===t.id||!o.open)&&E(o.open&&o.contextId===t.id)});return()=>{a=!1,h()}},[t.id]),i.useEffect(()=>{if(x!=="desktop"||!A||P||d)return;const s=new AbortController;let a=!1,h=-1/0,o=null,S=null;const $=async()=>{if(!(a||s.signal.aborted)&&!(Date.now()-h<(o??(L.current?4e3:3e4)))){a=!0,o=null;try{const g=Z(await b(`/api/bots/${t.id}/computer/screenshot`,{method:"POST",body:"{}",signal:AbortSignal.any([s.signal,AbortSignal.timeout(9e4)])}));!s.signal.aborted&&g?(R(g),m(!1),S=null):s.signal.aborted||m(!0)}catch(g){if(!s.signal.aborted)if(g instanceof pe&&ee(g)){o=1e3,S??=Date.now();const T=Date.now()-S>=1e4;m(T),D(!T)}else S=null,m(!0)}finally{!s.signal.aborted&&o===null&&D(!1),a=!1,h=Date.now()}}};$();const Y=window.setInterval($,1e3);return()=>{s.abort(),window.clearInterval(Y)}},[t.id,A,P,d,x]);const V=async()=>{I(!0),j(null);let s=!1;try{if(!window.ogb?.desktopViewer)throw new Error(n("remoteDesktop.viewerUnavailable"));await b(`/api/bots/${t.id}/computer/control`,{method:"POST",body:JSON.stringify({action:"take"})}),s=!0;const a=await b(`/api/bots/${t.id}/computer/join`,{method:"POST",body:"{}"});if(!await window.ogb.desktopViewer.open(ge(a.joinUrl),n("computer.viewerTitle",{name:t.name}),t.id))throw new Error(n("computer.err.openDesktop",{app:K()}))}catch(a){s&&await b(`/api/bots/${t.id}/computer/control`,{method:"POST",body:JSON.stringify({action:"release"})}).catch(()=>{}),await b(`/api/bots/${t.id}/computer/viewer-close`,{method:"POST",body:"{}"}).catch(()=>{}),j(a instanceof Error?a.message:String(a))}finally{I(!1)}};return e.jsxs("aside",{className:"relative z-20 flex h-full w-[400px] shrink-0 flex-col border-l border-hairline bg-panel",ref:k,"data-computer-panel":!0,children:[e.jsxs("div",{...w,className:"flex items-center justify-between border-b border-hairline px-5 py-4",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-[14px] font-medium text-ink",children:n("remoteDesktop.title",{name:t.name})}),e.jsx("div",{className:"mt-0.5 text-[11px] text-ink-secondary",children:n(t.cloudBackend==="vps"?"botAccess.cloud.selfHostedVps":"remoteDesktop.cloudDesktop")})]}),e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx("div",{className:"flex rounded-full bg-inset p-0.5","aria-label":n("computer.tabsAria"),children:["desktop","browser"].map(s=>e.jsxs("button",{type:"button",onClick:()=>O(s),"aria-pressed":x===s,className:B("flex items-center gap-1 rounded-full px-2.5 py-1 text-[12px]",x===s?"bg-card text-ink shadow-sm":"text-ink-secondary hover:text-ink"),children:[s==="desktop"?e.jsx(F,{size:12}):e.jsx(le,{size:12}),n(s==="desktop"?"remoteDesktop.desktop":"place.browser")]},s))}),e.jsx("button",{type:"button","data-computer-panel-close":!0,onClick:()=>{ce(k.current,t.id),l({type:"toggleComputer",open:!1})},className:"rounded-md p-1 text-ink-secondary hover:bg-control hover:text-ink","aria-label":n("remoteDesktop.close"),children:e.jsx(_,{size:18})})]})]}),x==="browser"?e.jsxs("div",{className:"flex min-h-0 flex-1 flex-col px-4 pb-4 pt-1",children:[u?.place==="browser"&&e.jsx("div",{className:"-mt-2 mb-3",children:e.jsx(U,{help:u,askerName:q,onError:j})}),e.jsx(re,{bot:t,signIn:J}),v&&e.jsx("div",{role:"alert",className:"mt-2 rounded-lg border border-danger/30 bg-danger/10 px-3 py-2 text-[12px] text-danger",children:v}),e.jsx("p",{className:"mt-2 text-[11px] leading-relaxed text-ink-secondary",children:n("remoteDesktop.browserHint")})]}):e.jsxs("div",{className:"flex flex-1 flex-col items-center gap-4 overflow-y-auto px-6 py-5 text-center",children:[u&&u.place!=="browser"&&e.jsx("div",{className:"-mt-3 w-full",children:e.jsx(U,{help:u,askerName:q,onError:j})}),e.jsxs("button",{type:"button",onClick:()=>{V()},disabled:d||!p,className:"group relative flex aspect-video w-full items-center justify-center overflow-hidden rounded-xl border border-hairline bg-black disabled:cursor-default","aria-label":p?n("computer.openLiveDesktopAria",{name:t.name}):n("remoteDesktop.previewUnavailableLabel"),children:[p?e.jsx("img",{src:p,alt:n("remoteDesktop.previewAlt",{name:t.name}),className:"h-full w-full object-contain"}):M?e.jsx(C,{size:22,className:"animate-spin text-ink-secondary"}):e.jsxs("div",{className:"flex flex-col items-center gap-2 text-ink-secondary",children:[e.jsx(de,{size:24}),e.jsx("span",{className:"text-[11px]",children:n(H?"remoteDesktop.previewUnavailable":"remoteDesktop.previewWaiting")})]}),p&&e.jsx("span",{className:"absolute inset-x-0 bottom-0 bg-black/65 py-2 text-[11px] font-medium text-white opacity-0 transition-opacity group-hover:opacity-100",children:n("computer.openLiveDesktop")})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-[14px] font-medium text-ink",children:n("remoteDesktop.openLive")}),e.jsx("p",{className:"mt-2 text-[12px] leading-relaxed text-ink-secondary",children:n("remoteDesktop.relayHint")})]}),e.jsxs("button",{type:"button",onClick:()=>{V()},disabled:d,className:"flex w-full items-center justify-center gap-2 rounded-lg bg-accent px-4 py-2.5 text-[13px] font-medium text-white hover:brightness-110 disabled:opacity-50",children:[d?e.jsx(C,{size:15,className:"animate-spin"}):e.jsx(F,{size:15}),n(d?"settings.updates.opening":"computer.takeControl")]}),v&&e.jsx("div",{role:"alert",className:"w-full rounded-lg border border-danger/30 bg-danger/10 px-3 py-2 text-left text-[12px] text-danger",children:v}),e.jsx("p",{className:"text-[11px] leading-relaxed text-ink-secondary",children:n("remoteDesktop.accessHint")}),e.jsxs("div",{className:"w-full rounded-xl bg-card p-4 text-left",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsxs("div",{className:"flex items-center gap-2 text-[15px] font-medium text-ink",children:[e.jsx(ue,{size:16,className:"text-accent"}),n("computer.routines.title")]}),N.length>0&&e.jsx("span",{className:"rounded-full bg-control px-2 py-0.5 text-[10px] font-medium text-ink-secondary",children:N.length})]}),f&&e.jsxs("button",{type:"button",onClick:()=>l({type:"showRoutines"}),className:"mt-3 flex w-full items-center gap-2 rounded-lg border border-accent/25 bg-accent/10 px-3 py-2 text-left text-[12px] text-accent hover:bg-accent/15",children:[e.jsx(C,{size:13,className:f.status==="queued"?"":"animate-spin"}),e.jsxs("span",{className:"min-w-0 flex-1 truncate",children:[f.routineName," · ",n(f.status==="waiting"?"computer.routines.needsYou":f.status==="queued"?"computer.runStatus.queued":"computer.runStatus.running")]})]}),N.length>0&&e.jsx("div",{className:"mt-3 space-y-1.5",children:N.slice(0,3).map(s=>e.jsxs("button",{type:"button",onClick:()=>l({type:"showRoutines"}),className:"flex w-full items-center gap-2 rounded-lg bg-inset px-3 py-2 text-left hover:bg-control/60",children:[e.jsx("span",{className:B("size-1.5 shrink-0 rounded-full",s.enabled?"bg-success":"bg-ink-secondary/40")}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block truncate text-[13px] font-medium text-ink",children:s.name}),e.jsxs("span",{className:"block truncate text-[11px] text-ink-secondary",children:[be(s),s.runOn==="cloud"?` · ${n("remoteDesktop.runsOnVm")}`:""]})]}),e.jsx("span",{className:"shrink-0 text-[10px] text-ink-secondary",children:ye(s.nextRunAt)})]},s.id))}),e.jsxs("div",{className:"mt-3 flex gap-2",children:[e.jsxs("button",{type:"button",onClick:()=>z(!0),className:"flex flex-1 items-center justify-center gap-1.5 rounded-lg bg-accent py-2 text-[13px] font-medium text-white hover:brightness-110",children:[e.jsx(se,{size:14}),n("computer.routines.create")]}),e.jsxs("button",{type:"button",onClick:()=>l({type:"showRoutines"}),className:"flex items-center justify-center gap-1.5 rounded-lg bg-control px-3 py-2 text-[13px] text-ink hover:bg-raised-hover",title:n("computer.routines.openTitle"),children:[e.jsx(he,{size:14}),n("computer.routines.schedules")]})]})]})]}),G&&e.jsx(fe,{bots:[t],lockedBotId:t.id,defaultRunOn:X?"cloud":"maus",onClose:()=>z(!1)})]})}export{Oe as RemoteDesktopPanel};
package/dist/index.html CHANGED
@@ -11,7 +11,7 @@
11
11
  <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
12
12
  <link rel="manifest" href="/manifest.webmanifest" />
13
13
  <title>Limix Bot</title>
14
- <script type="module" crossorigin src="/assets/index-CwYJ9TX8.js"></script>
14
+ <script type="module" crossorigin src="/assets/index-BBsdMDZV.js"></script>
15
15
  <link rel="modulepreload" crossorigin href="/assets/styles-BlayaJti.js">
16
16
  <link rel="stylesheet" crossorigin href="/assets/styles-bUbK33f1.css">
17
17
  </head>
@@ -1 +1 @@
1
- {"type":"module","version":"0.3.3"}
1
+ {"type":"module","version":"0.3.4"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "limixbot",
3
- "version": "0.3.3",
3
+ "version": "0.3.4",
4
4
  "description": "Run the Limix Bot server anywhere and pair your devices to it (Leox ৹ Limix AI)",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",