limixbot 0.2.5 → 0.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/{ActivityPanel-DC3XVGOc.js → ActivityPanel-CmDCy7eZ.js} +1 -1
- package/dist/assets/{App-Dc7eNHIo.js → App-Dbsatjme.js} +112 -112
- package/dist/assets/{AppEventEditor-MqHYrUPZ.js → AppEventEditor-B4RQnsS3.js} +1 -1
- package/dist/assets/{BotSettingsDialog-BrmKiJZJ.js → BotSettingsDialog-DyScwvnb.js} +4 -4
- package/dist/assets/{BrowserPanel-CGq-8k9k.js → BrowserPanel-CFFNXZUh.js} +1 -1
- package/dist/assets/{BrowserProfilesManager-N5zHMoeH.js → BrowserProfilesManager-H57RKPMu.js} +1 -1
- package/dist/assets/CloudAddDialog-Bj6_HHBS.js +1 -0
- package/dist/assets/{ComputerFilesPane-CP_exuaN.js → ComputerFilesPane-CZ3bEdi-.js} +1 -1
- package/dist/assets/{ComputerPanel-SaUcSoW6.js → ComputerPanel-BQUsGs4_.js} +2 -2
- package/dist/assets/{DataPanel-CBVx04Rh.js → DataPanel-BFafyj9T.js} +1 -1
- package/dist/assets/{DesktopViewer-Cya-HlUY.js → DesktopViewer-DuoSRrPG.js} +1 -1
- package/dist/assets/{FilesView-BS2JAg48.js → FilesView-D2WrDHpg.js} +1 -1
- package/dist/assets/{GrokMoveDialog-kG0ReJlG.js → GrokMoveDialog-Ciq95MT4.js} +3 -3
- package/dist/assets/{InspectorPanel-BT3llt3b.js → InspectorPanel-DP9ekeeT.js} +1 -1
- package/dist/assets/{KeyboardShortcutsModal-L8FD783r.js → KeyboardShortcutsModal-BMt7r3Va.js} +1 -1
- package/dist/assets/{LiveDesktop-n3XPWd5c.js → LiveDesktop-JYitfkP5.js} +1 -1
- package/dist/assets/{LocalVmWorkspace-v7UlCW9t.js → LocalVmWorkspace-ZIznHPod.js} +1 -1
- package/dist/assets/{MacLocalControl-v51B79TD.js → MacLocalControl-B2mYWfM_.js} +1 -1
- package/dist/assets/{MarkdownFilePreview-B2U1b00V.js → MarkdownFilePreview-C9o8GlmR.js} +1 -1
- package/dist/assets/{MenuMotion-BjmjRIR3.js → MenuMotion-BVlWdNZd.js} +1 -1
- package/dist/assets/{NewBotDialog-FgTNwkT5.js → NewBotDialog-42cdLuX9.js} +1 -1
- package/dist/assets/{PhoneAppDialog-BAqdCsuh.js → PhoneAppDialog-2HsbrbDR.js} +1 -1
- package/dist/assets/{PlacesRail-msEDHUXY.js → PlacesRail-XEjyWavr.js} +1 -1
- package/dist/assets/{PluginsPanel-BROkmoVw.js → PluginsPanel-gMX9siqC.js} +1 -1
- package/dist/assets/ProIntroduction-DLeyaIp4.js +1 -0
- package/dist/assets/{RemoteAgentSettingsPanel-BdJpTB-X.js → RemoteAgentSettingsPanel-CI4mV7e4.js} +1 -1
- package/dist/assets/{RoomPanel-BltzAc2X.js → RoomPanel-QM7b4JcY.js} +1 -1
- package/dist/assets/{RoutinesPage-CRvNKmna.js → RoutinesPage-9oF95jVB.js} +2 -2
- package/dist/assets/SettingsModal-D-qQozfZ.js +11 -0
- package/dist/assets/{ShareTeamDialog-BrYsQ1YB.js → ShareTeamDialog-BSCDpGsw.js} +1 -1
- package/dist/assets/{SignedInSites-BGsMS1IG.js → SignedInSites-CCJy494V.js} +1 -1
- package/dist/assets/{TeamLibraryPanel-C3YIy7_M.js → TeamLibraryPanel-VGQUqTlV.js} +1 -1
- package/dist/assets/{TeamMapPage-DjqBIDae.js → TeamMapPage-rjPtLGmj.js} +1 -1
- package/dist/assets/{TriggersPage-By978rcW.js → TriggersPage-0G0do_3b.js} +1 -1
- package/dist/assets/{VisibilitySection-BMxXxacO.js → VisibilitySection-Gh6OTOCE.js} +1 -1
- package/dist/assets/{WebhookTrigger-B0TCdhpi.js → WebhookTrigger-DpcmCVTL.js} +1 -1
- package/dist/assets/{WorksOnGrid-BYivdc01.js → WorksOnGrid-L6LFTE2_.js} +1 -1
- package/dist/assets/{abnfDiagram-YUKMZFIV-C05fUibh.js → abnfDiagram-YUKMZFIV-CUWh2GsH.js} +1 -1
- package/dist/assets/{activity-cUbbx7sx.js → activity-LHXr5xxZ.js} +1 -1
- package/dist/assets/{architectureDiagram-47P4ROYG-NfpIFKPz.js → architectureDiagram-47P4ROYG-DVX8QyiO.js} +1 -1
- package/dist/assets/{blockDiagram-E7TT5TSB-8M_Yd-sD.js → blockDiagram-E7TT5TSB-CEURT8Q8.js} +1 -1
- package/dist/assets/{c4Diagram-CRA5TL53-V7Ru-p8C.js → c4Diagram-CRA5TL53-Dxo3va1-.js} +1 -1
- package/dist/assets/{calendar-days-Cj-W81bu.js → calendar-days-dgtKqWUC.js} +1 -1
- package/dist/assets/channel-B_-MyCfi.js +1 -0
- package/dist/assets/{chunk-2Q5K7J3B-BYHHX_Gv.js → chunk-2Q5K7J3B-Cwoh8ivv.js} +1 -1
- package/dist/assets/{chunk-5VM5RSS4-C3e0S7UU.js → chunk-5VM5RSS4-D3VEPh-j.js} +1 -1
- package/dist/assets/{chunk-7TKQ45FW-Do-zCrfY.js → chunk-7TKQ45FW-DkXnciwj.js} +1 -1
- package/dist/assets/{chunk-AW2ZBBNX-BqIHZ9wm.js → chunk-AW2ZBBNX-CNUnktBg.js} +1 -1
- package/dist/assets/{chunk-FVRAUYC3-DR-XXMxd.js → chunk-FVRAUYC3-DDh_Qx3V.js} +2 -2
- package/dist/assets/{chunk-HTAEGDNF-Bfo8GCM2.js → chunk-HTAEGDNF-Cl-K7zHu.js} +1 -1
- package/dist/assets/{chunk-JWPE2WC7-CihnqCYu.js → chunk-JWPE2WC7-BZMB3nUT.js} +1 -1
- package/dist/assets/{chunk-KQW6MTUR-CaCMq-KE.js → chunk-KQW6MTUR-CK00Y5Mf.js} +1 -1
- package/dist/assets/{chunk-XXDRQBXY-D9V51Esf.js → chunk-XXDRQBXY-D9bXnXn1.js} +1 -1
- package/dist/assets/{classDiagram-v2-K4WV4PDN-CAJUY4h-.js → classDiagram-v2-K4WV4PDN-vMIXHAit.js} +1 -1
- package/dist/assets/{coins-CxC_dI0J.js → coins-C6ydDjtx.js} +1 -1
- package/dist/assets/{core-CcNJeiz-.js → core-PBrJFfNa.js} +1 -1
- package/dist/assets/{cose-bilkent-JH36ORCC-9vWz4wK0.js → cose-bilkent-JH36ORCC-CKEtjhno.js} +1 -1
- package/dist/assets/{cynefin-EF2NZ3EQ-DCUYk2lC.js → cynefin-EF2NZ3EQ-X7332_6L.js} +1 -1
- package/dist/assets/{cynefinDiagram-3GCD6N5R-DdjMYI6o.js → cynefinDiagram-3GCD6N5R-C3ehmT22.js} +1 -1
- package/dist/assets/{dagre-W4DXFKR2-DGIBnF7r.js → dagre-W4DXFKR2-8j_7yTJf.js} +1 -1
- package/dist/assets/{diagram-2UJZ2QOL-B3r3D9sZ.js → diagram-2UJZ2QOL-Dpan5gHO.js} +1 -1
- package/dist/assets/{diagram-OVF4WLC6-B1u7LfGA.js → diagram-OVF4WLC6-84oGxj_T.js} +1 -1
- package/dist/assets/{diagram-PFPMY2P6-vVzEd5hO.js → diagram-PFPMY2P6-CtkBChQX.js} +1 -1
- package/dist/assets/{diagram-UMYRVEAY-WinDNDJc.js → diagram-UMYRVEAY-BtLD2TMp.js} +1 -1
- package/dist/assets/{diagram-YEKJPTXX-7g_9oznG.js → diagram-YEKJPTXX-BSsG3sMr.js} +1 -1
- package/dist/assets/{diagram-ZIFT7M5P-BqrG5z2v.js → diagram-ZIFT7M5P-DzGdrnet.js} +1 -1
- package/dist/assets/{ebnfDiagram-VR2GEFS7-BpNGIiLF.js → ebnfDiagram-VR2GEFS7-BCgvwxBO.js} +1 -1
- package/dist/assets/{elk-IJKZMXRS-BCv8wGAA.js → elk-IJKZMXRS-MrcuY098.js} +1 -1
- package/dist/assets/{erDiagram-O2IAPWRE-Do-qhVwx.js → erDiagram-O2IAPWRE-CkiPC10P.js} +1 -1
- package/dist/assets/{file-up-Gm3ZlE_0.js → file-up-YAGDCUmC.js} +1 -1
- package/dist/assets/{flowDiagram-OXPTDLAJ-R-Kh5wq9.js → flowDiagram-OXPTDLAJ-Dy30n92Z.js} +1 -1
- package/dist/assets/{ganttDiagram-R7TSEDQI-B3l0oJP5.js → ganttDiagram-R7TSEDQI-7aj2jc8X.js} +1 -1
- package/dist/assets/{gitGraphDiagram-XJZIOB7I-BYib7PqD.js → gitGraphDiagram-XJZIOB7I-C90-6xd7.js} +1 -1
- package/dist/assets/{import-name-1v6bgYwg.js → import-name-DwHxnzLo.js} +1 -1
- package/dist/assets/index-CEBe4ppp.js +2 -0
- package/dist/assets/{index-tkGe0e3F.js → index-Dh9vBoyU.js} +1 -1
- package/dist/assets/{index-DjRLXqpq.js → index-J6AJ8PJY.js} +1 -1
- package/dist/assets/{infoDiagram-5W2HQ5XZ-DqcpfbG0.js → infoDiagram-5W2HQ5XZ-JsL4Ulqu.js} +1 -1
- package/dist/assets/{ishikawaDiagram-K3B6WC7H-CVNaP0rR.js → ishikawaDiagram-K3B6WC7H-DGvScV7R.js} +1 -1
- package/dist/assets/{journeyDiagram-COXZFDF6-BXHOKVEA.js → journeyDiagram-COXZFDF6-DLSEKXoP.js} +1 -1
- package/dist/assets/{kanban-definition-P3RFRI5V-Bb8Vpv2-.js → kanban-definition-P3RFRI5V-CoxK_0bl.js} +1 -1
- package/dist/assets/{mcp-servers-BdjmXJSB.js → mcp-servers-Dy6saID9.js} +1 -1
- package/dist/assets/{mermaid.core-CnUFOtXD.js → mermaid.core-73koJZWB.js} +4 -4
- package/dist/assets/{mindmap-definition-LZFPQGKD-DeV-Tw7G.js → mindmap-definition-LZFPQGKD-CbTxcgIF.js} +1 -1
- package/dist/assets/{minimize-lhY0HYEB.js → minimize-DNbi21po.js} +1 -1
- package/dist/assets/{monitor-DagRnmYm.js → monitor-EYAEQme8.js} +1 -1
- package/dist/assets/{new-bot-R2d69ePy.js → new-bot-C2jdhFdl.js} +2 -2
- package/dist/assets/{org-library-CTZWRg3z.js → org-library-BayvlLSA.js} +1 -1
- package/dist/assets/{package-format-D4k7Rh0H.js → package-format-BvNOAJ-8.js} +1 -1
- package/dist/assets/{pegDiagram-BGZESJAR-B9zfytOo.js → pegDiagram-BGZESJAR-vPF7wjW0.js} +1 -1
- package/dist/assets/{pieDiagram-CAPJLFHJ-Co2k1c9h.js → pieDiagram-CAPJLFHJ-CcXS-bXc.js} +1 -1
- package/dist/assets/{quadrantDiagram-GDMTTRAM-D7jzEAY-.js → quadrantDiagram-GDMTTRAM-ue9nAF1U.js} +1 -1
- package/dist/assets/rail-BVFx-Ggi.js +1 -0
- package/dist/assets/{railroadDiagram-SM67HX2B-BvPh7fmA.js → railroadDiagram-SM67HX2B-BeQYm6nT.js} +1 -1
- package/dist/assets/{remote-desktop-panel-ipZYKPLT.js → remote-desktop-panel-Bgx8ebdG.js} +1 -1
- package/dist/assets/{requirementDiagram-X7JNWC4A-yg9WIdG5.js → requirementDiagram-X7JNWC4A-DZouafhW.js} +1 -1
- package/dist/assets/{sankeyDiagram-UM26HJRW-BKhYJMCX.js → sankeyDiagram-UM26HJRW-DHon18zu.js} +1 -1
- package/dist/assets/{sequenceDiagram-ZO4K6R2Y-B3hAFJ3r.js → sequenceDiagram-ZO4K6R2Y-atekCKa7.js} +1 -1
- package/dist/assets/{sizeCapture-INFHLROL-B5ubpsDi.js → sizeCapture-INFHLROL-Dt3J5cN4.js} +1 -1
- package/dist/assets/{stateDiagram-v2-TBUQTH76-DDviCg3l.js → stateDiagram-v2-TBUQTH76-Y6UtBULW.js} +1 -1
- package/dist/assets/{styles-BYp3glRK.js → styles-CnQhCz_w.js} +3 -3
- package/dist/assets/{swimlanes-N4OXWK64-YthTzBgy.js → swimlanes-N4OXWK64-BpUnlH-3.js} +1 -1
- package/dist/assets/swimlanesDiagram-K3J5GTZL-CNvy2omc.js +8 -0
- package/dist/assets/{team-share-By8wCeng.js → team-share-DkzY22CD.js} +1 -1
- package/dist/assets/{timeline-definition-YOQAKGHF-CH_BuHOF.js → timeline-definition-YOQAKGHF-DhG3OlON.js} +1 -1
- package/dist/assets/{usecaseDiagram-VIAY4XPW-zmJ_6-S0.js → usecaseDiagram-VIAY4XPW-DFUcbznD.js} +1 -1
- package/dist/assets/{vennDiagram-BLWOH2XV-Cdq5FiyY.js → vennDiagram-BLWOH2XV-D49fiyRh.js} +1 -1
- package/dist/assets/{wardleyDiagram-YMQ3BMBF-CUm4PvZj.js → wardleyDiagram-YMQ3BMBF-DFVNNZPs.js} +1 -1
- package/dist/assets/{xychartDiagram-TAQBALBS-BFRcupRR.js → xychartDiagram-TAQBALBS-DiHMuK-U.js} +1 -1
- package/dist/index.html +2 -2
- package/dist/rail.html +4 -4
- package/dist-server/package.json +1 -1
- package/package.json +1 -1
- package/dist/assets/CloudAddDialog-DIm-M9CF.js +0 -1
- package/dist/assets/ProIntroduction-D8SaBehJ.js +0 -1
- package/dist/assets/SettingsModal-B5Fjq814.js +0 -11
- package/dist/assets/channel-g_Dn_OGJ.js +0 -1
- package/dist/assets/index-BEBI8eA5.js +0 -2
- package/dist/assets/rail-B_8Y8FUg.js +0 -1
- package/dist/assets/swimlanesDiagram-K3J5GTZL-CywojYgU.js +0 -8
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{t as c,r as y,j as a,X as ke,a as G,f as xe,
|
|
1
|
+
import{t as c,r as y,j as a,X as ke,a as G,f as xe,D as ye}from"./styles-CnQhCz_w.js";import{L as be,x as ve,C as we}from"./PlacesRail-XEjyWavr.js";import{t as je,a as Me}from"./import-name-DwHxnzLo.js";import{b9 as ue,ba as Ne,bb as ee,bc as Ee,bd as Ae,be as Se,B as _e,n as q,u as Oe,bf as $e}from"./App-Dbsatjme.js";import{A as Ce,u as T,S as te,b as Le,a as Re,P as Ie,c as Te}from"./package-format-BvNOAJ-8.js";import{F as Fe}from"./file-up-YAGDCUmC.js";import"./monitor-EYAEQme8.js";import"./index-CEBe4ppp.js";import"./MenuMotion-BVlWdNZd.js";const de="grok-bot-export",Pe="openmaus.grok/1",me=4*1024*1024,Be=50,ne=["green","blue","red","orange","purple","cyan","pink","yellow","teal","coral"],Ge=50,ze=`I'm moving to another assistant and need a complete, machine-readable copy of your setup. Do not change, pause or delete anything.
|
|
2
2
|
|
|
3
3
|
Write one JSON document with exactly this shape, then save it as grok-bot-export-<your name>.json (your name in lowercase, spaces as hyphens): in my Downloads folder if you can write to my computer, otherwise in your workspace, and attach it to your reply. If you cannot attach files, put the whole document in a single \`\`\`json code block instead.
|
|
4
4
|
|
|
@@ -34,7 +34,7 @@ Write one JSON document with exactly this shape, then save it as grok-bot-export
|
|
|
34
34
|
|
|
35
35
|
Rules: include EVERY routine you own (paused ones too) and EVERY skill enabled for you, with full text, not summaries. If you cannot read something (a routine's schedule, a skill's text), leave it out and tell me in your reply what you left out; never guess or fill it in from memory. Never include passwords, API keys, tokens, webhook keys, cookies or card numbers: leave those out entirely. Output valid JSON only (no comments).
|
|
36
36
|
If it is too long for one message or file, split it: send several documents, each complete and valid in this same shape with the same bot name, each holding the part the others do not. They are imported together.
|
|
37
|
-
`;class O extends Error{code;keys;constructor(t,s=[]){super(t),this.name="GrokImportError",this.code=t,this.keys=s}}const M=e=>!!e&&typeof e=="object"&&!Array.isArray(e),W=e=>typeof e=="string"?e.trim():typeof e=="number"&&Number.isFinite(e)?String(e):"",g=(...e)=>e.map(W).find(Boolean)??"",z=e=>Array.isArray(e)?e:[],Z=e=>z(e).map(t=>M(t)?g(t.text,t.content,t.name):W(t)).filter(Boolean);function $(e){let t="";for(const s of e){const n=s.charCodeAt(0);t+=n<32||n>=127&&n<=159||n===8232||n===8233?" ":s}return t.replace(/\s+/g," ").trim()}const v=(e,t)=>e.length<=t?e:`${e.slice(0,t-1).trimEnd()}…`,
|
|
37
|
+
`;class O extends Error{code;keys;constructor(t,s=[]){super(t),this.name="GrokImportError",this.code=t,this.keys=s}}const M=e=>!!e&&typeof e=="object"&&!Array.isArray(e),W=e=>typeof e=="string"?e.trim():typeof e=="number"&&Number.isFinite(e)?String(e):"",g=(...e)=>e.map(W).find(Boolean)??"",z=e=>Array.isArray(e)?e:[],Z=e=>z(e).map(t=>M(t)?g(t.text,t.content,t.name):W(t)).filter(Boolean);function $(e){let t="";for(const s of e){const n=s.charCodeAt(0);t+=n<32||n>=127&&n<=159||n===8232||n===8233?" ":s}return t.replace(/\s+/g," ").trim()}const v=(e,t)=>e.length<=t?e:`${e.slice(0,t-1).trimEnd()}…`,De=/(?:^|_)(?:api_?key|apikey|token|secret|passwd|passphrase|credentials?|auth|authorization|bearer|cookies?|private_?key|access_?key|session_?(?:id|key|token))(?:_|$)|key$/i,Ke=new Set(["headers","env","environment"]);function Ue(e){return/password/i.test(e)||De.test(e.replace(/([a-z0-9])([A-Z])/g,"$1_$2").replace(/[\s-]+/g,"_"))}function Y(e,t="",s=!1){return Array.isArray(e)?e.flatMap((n,o)=>Y(n,`${t}[${o}]`,s)):M(e)?Object.entries(e).flatMap(([n,o])=>{const r=t?`${t}.${n}`:n;return s&&Ke.has(n)?[]:[...Ue(n)?[r]:[],...Y(o,r,n==="apps"||n==="plugins")]}):[]}function Ze(e){let t="",s=!1,n=!1;for(let o=0;o<e.length;o+=1){const r=e[o];if(s)n?n=!1:r==="\\"?n=!0:r==='"'&&(s=!1);else if(r==='"')s=!0;else if(r===","&&/^\s*[}\]]/.test(e.slice(o+1,o+200)))continue;t+=r}return t}function se(e){for(const t of[e,Ze(e)])try{return JSON.parse(t)}catch{}}function Xe(e){const t=[];let s=0;for(let n=e.indexOf("{");n>=0&&s<Ge;){let o=0,r=!1,l=-1;for(let u=n;u<e.length&&l<0;u+=1){const m=e[u];r?m==="\\"?u+=1:m==='"'&&(r=!1):m==='"'?r=!0:m==="{"?o+=1:m==="}"&&--o===0&&(l=u)}l<0?(s+=1,n=e.indexOf("{",n+1)):(t.push(e.slice(n,l+1)),n=e.indexOf("{",l+1))}return t}const oe=e=>M(e)&&(e.format===de||e.format===Pe||Array.isArray(e.bots)),re=e=>M(e)&&!!W(e.name)&&["instructions","memories","user_facts","skills","routines","apps"].some(t=>t in e);function Ye(e){const t=e.replace(/[“”]/g,'"').replace(/[‘’]/g,"'");for(const s of t===e?[e]:[e,t]){const n=se(s.trim());if(oe(n))return[n];if(re(n))return[{bots:[n]}];if(Array.isArray(n)&&n.length&&n.every(re))return[{bots:n}];const o=Xe(s).map(se).filter(oe);if(o.length)return o}return[]}function He(e){const t=M(e)?e:{},s=typeof e=="string"?e.trim():g(t.name,t.label,t.id,t.slug);return s?[{name:$(s),mcpUrl:g(t.mcp_url,t.mcpUrl,t.url),transport:g(t.transport,t.type).toLowerCase(),headerNames:M(t.headers)?Object.keys(t.headers):[]}]:[]}function Ve(e){return{name:$(g(e.name)),title:$(g(e.title)),description:g(e.description),instructions:g(e.instructions,e.soul,e.systemPrompt),memories:Z(e.memories),userFacts:Z(e.user_facts??e.userFacts),skills:z(e.skills).flatMap(t=>typeof t=="string"?[{name:t.trim(),description:"",instructions:""}]:M(t)?[{name:g(t.name,t.title),description:g(t.description,t.summary),instructions:g(t.instructions,t.body,t.content,t.text)}]:[]),routines:z(e.routines).flatMap(t=>M(t)?[{name:g(t.name,t.title),instruction:g(t.instruction,t.prompt,t.instructions,t.task),trigger:g(t.trigger).toLowerCase(),cron:g(t.schedule_cron,t.cron,t.cronExpression),when:g(t.schedule_text,t.schedule,t.when),timeZone:g(t.timezone,t.timeZone,t.tz),paused:t.paused===!0,skills:Z(t.skills),details:g(t.trigger_details,t.details)}]:[]),apps:z(e.apps??e.plugins??e.integrations).flatMap(He)}}function H(e){return typeof e=="string"?ue(e):Array.isArray(e)?e.map(t=>H(t)):M(e)?Object.fromEntries(Object.entries(e).map(([t,s])=>[t,H(s)])):e}function pe(e){const t=new Map;for(const s of e){const n=s.name.toLowerCase(),o=t.get(n);if(!o){t.set(n,structuredClone(s));continue}const r=(l,u)=>[...new Map([...l,...u].map(m=>[JSON.stringify(m),m])).values()];t.set(n,{name:o.name,title:s.title||o.title,description:s.description||o.description,instructions:s.instructions||o.instructions,memories:r(o.memories,s.memories),userFacts:r(o.userFacts,s.userFacts),skills:r(o.skills,s.skills),routines:r(o.routines,s.routines),apps:r(o.apps,s.apps)})}return[...t.values()]}function V(e){if(e.length>me)throw new O("tooLarge");const t=Ye(e.replace(/^/,""));if(!t.length)throw new O(e.split("{").length>e.split("}").length?"cutOff":"notExport");const s=t.flatMap(r=>Y(r));if(s.length)throw new O("credentials",s.slice(0,5));if(t.some(r=>typeof r.version=="number"&&r.version>1))throw new O("newerVersion");const n=t.flatMap(r=>Array.isArray(r.bots)?r.bots.filter(M):[r]),o=pe(n.map(Ve).filter(r=>r.name).map(r=>H(r)));if(!o.length)throw new O("notExport");return o}const J=(e,t)=>e.normalize("NFKD").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,t).replace(/-+$/,"");function X(e,t,s,n=64){const o=J(e,n-3)||t;let r=o;for(let l=2;s.has(r);l+=1)r=`${o}-${l}`;return s.add(r),r}function Je(e){let t=2166136261;for(let s=0;s<e.length;s+=1)t=Math.imul(t^e.charCodeAt(s),16777619)>>>0;return t}function qe(e,t){if(T(e)<=t)return e;let s=Math.min(e.length,t);for(;s>0&&T(e.slice(0,s))>t;)s=Math.floor(s*.95);return e.slice(0,s)}const We=new Set(["","schedule","scheduled","time","cron","interval"]);function Qe(e,t){if(!We.has(e.trigger))return null;for(const s of[e.cron,e.when].filter(Boolean))for(const n of[e.timeZone||t,t])try{return Se({type:"cron",expression:s,timeZone:n})}catch{}return null}function et(e,t){const s=e.instructions.replace(/^?---\r?\n([\s\S]*?)\r?\n---\r?\n?/,""),n=e.instructions===s?"":ee(e.instructions).description??"",o=s.trim();if(!o)return null;const r=v($(e.description||n||o.split(`
|
|
38
38
|
`).find(m=>m.trim()).replace(/^#+\s*/,"")),1024),l=`---
|
|
39
39
|
name: ${t}
|
|
40
40
|
description: ${Ee(r)}
|
|
@@ -53,4 +53,4 @@ ${r("What I remember",s)}${r("About the person",n)}`.trimEnd()+`
|
|
|
53
53
|
`)}function lt(e,t={}){const s=t.timeZone?.trim()||"UTC",n=v(e.name||"Grok Bot",100),o=J(n,60)||"grok-bot",r=qe(e.instructions.trim(),_e.soul),l=new Set,u=new Map,m=[],N=[];for(const[f,i]of e.skills.entries()){if(m.length>=Ce||!i.instructions.trim())continue;const p=et(i,X(i.name,`skill-${f+1}`,l));p&&(m.push(p),u.set(i.name.trim().toLowerCase(),p.name),N.push({folder:p.name,name:$(i.name)||String(f+1),on:Ne(p.instructions).length===0}))}const E=new Set,d=new Set,w=[],k=[];for(const[f,i]of e.routines.entries()){if(!i.instruction)continue;const p=Qe(i,s);if(!p){k.push(i);continue}if(w.length>=Be)continue;const b=$(i.name)||"routine",h=v(`${n}: ${b}`,74);let S=h;for(let B=2;d.has(S);B+=1)S=`${h} (${B})`;d.add(S);const Q=i.skills.flatMap(B=>u.get(B.toLowerCase())??[]);w.push({key:X(b,`routine-${f+1}`,E),name:S,agent:o,prompt:`${i.instruction}${Q.length?`
|
|
54
54
|
|
|
55
55
|
Use these skills: ${Q.join(", ")}.`:""}`.slice(0,2e4),runOn:"maus",schedule:p,durationMinutes:30,enabledAfterInstall:!1})}const _=at(e),x={};if(_.text&&T(_.text)<=te&&(x["MEMORY.md"]=_.text),k.length){const f=it(n,k);T(f)<=te&&(x[ae]=f)}const F=new Set,j=[];let A=0;for(const f of e.apps){const i=v(f.name,100),p=f.mcpUrl?st(f.mcpUrl):null,b=J(`${/^[a-z]/i.test(i)?"":"server-"}${i}`,25)||`server-${j.length+1}`;p&&t.takenServers?.has(b)||(A+=1,!(!p||j.length>=Le)&&j.push({key:X(b,b,F,28),label:i,reason:v(`${n} used ${i} in Grok Bot.`,240),mcp:{transport:f.transport==="sse"||/\/sse\/?$/.test(new URL(p).pathname)?"sse":"http",url:p,valueNames:f.headerNames.filter(h=>ot.test(h)).slice(0,32)}}))}const C=e.description.trim(),L=v(C||e.title||`${n}, brought over from Grok Bot.`,2e3),R=Je(`${n}
|
|
56
|
-
${r}`),I=`${o}-${R.toString(16).padStart(8,"0").slice(0,6)}`,U={format:Te,version:Ie,package:{id:I,release:"1.0.0",name:n,tagline:v($(L),160),summary:L,category:"Imported",author:{name:"Grok Bot"},license:"See source",outcomes:[v(`${n} runs in OpenMausBot with your own engine and apps.`,240)],setupMinutes:5,requirements:{apps:[],capabilities:[]},team:{name:v(n,60)},agents:[{key:o,name:n,...e.title?{title:v(e.title,200)}:{},...C?{description:v(C,4e3)}:{},...r?{soul:r}:{},appearance:{color:ne[R%ne.length]},...m.length?{skills:m.map(f=>f.name)}:{},...j.length?{connections:j.map(f=>f.key)}:{},...Object.keys(x).length?{seed:{memory:x}}:{}}],...w.length?{routines:w}:{},...j.length?{connections:j}:{},...m.length?{skills:{version:1,entries:m}}:{}}};let P;try{P=Re(U,{trust:"file"})}catch{throw new O("unusable")}return{name:n,packageId:I,document:P,skills:N,routines:w.length,notes:x[ae]?k.length:0,memories:x["MEMORY.md"]?_.count:0,apps:A}}const fe={files:[],bots:[]};function ct(){return q("/api/setup-import/grok",{timeoutMs:1e4}).then(e=>({files:Array.isArray(e?.files)?e.files:[],bots:Array.isArray(e?.bots)?e.bots:[]}),()=>fe)}function he(e){return e instanceof O?c(`grokMove.error.${e.code}`,{keys:e.keys.join(", ")}):e instanceof Error?e.message:String(e)}function ut(e){const t=[],s=[...e].sort((n,o)=>n.modifiedAt-o.modifiedAt).flatMap(n=>{try{return V(n.text)}catch(o){return t.push({file:n.name,error:he(o)}),[]}});return{bots:pe(s),refused:t}}function dt(e,t){const s=new Set(t.bots.flatMap(l=>l.installedPackage?.id??[])),n=new Set(t.bots.map(l=>l.name.trim().toLowerCase())),o=new Set(t.servers),r={plans:[],moved:[],unreadable:[]};for(const l of e)try{const u=lt(l,{timeZone:t.timeZone,takenServers:o});if(s.has(u.packageId)){r.moved.push(u.name);continue}for(const m of u.document.package.connections??[])o.add(m.key);r.plans.push({...u,addedAs:je(u.name,n)})}catch{r.unreadable.push(l.name)}return r}async function mt(e,t){const s={bots:[],moved:e.moved,unreadable:e.unreadable,failed:[]};for(const n of e.plans)try{const o=(await Me(n.document,t)).first;if(!o)throw new Error("no bot");const r=[];for(const l of n.skills)l.on&&await q(`/api/bots/${o.id}/skills/${encodeURIComponent(l.folder)}`,{method:"PATCH",body:JSON.stringify({enabled:!0})}).then(()=>!0,()=>!1)||r.push(l.name);s.bots.push({name:o.name,skills:n.skills.length,skillsOff:r,routines:n.routines,notes:n.notes,memories:n.memories,apps:n.apps})}catch{s.failed.push(n.name)}return s}const K="ui-button ui-button-primary min-h-9 px-4 text-[14px]",D="ui-button min-h-9 px-4 text-[14px]",ge="text-[13px] leading-relaxed text-ink-secondary";function le({heading:e,skills:t,routines:s,memories:n,notes:o,skillsOff:r}){const l=[[c("grokMove.count.skills"),t],[c("grokMove.count.routines"),s],[c("grokMove.count.memories"),n],[c("grokMove.count.notes"),o]];return a.jsxs("section",{"data-grok-move-bot":!0,className:"flex flex-col gap-1.5",children:[a.jsx("h3",{className:"break-words text-[15px] font-semibold text-ink",children:e}),a.jsx("dl",{className:"flex flex-col gap-1 text-[14px]",children:l.filter(([,u])=>u>0).map(([u,m])=>a.jsxs("div",{className:"flex items-baseline justify-between gap-4",children:[a.jsx("dt",{className:"text-ink-secondary",children:u}),a.jsx("dd",{className:"tabular-nums text-ink",children:m})]},u))}),r.length>0&&a.jsx("p",{className:ge,children:c("grokMove.skillsOff",{names:r.join(", ")})})]})}function ce({paused:e,files:t=null,apps:s,moved:n,unreadable:o,failed:r=[]}){const l=[e,t,s===1?c("grokMove.appsOne"):s>1?c("grokMove.appsMany",{count:s}):null,n.length?c("grokMove.alreadyHere",{names:n.join(", ")}):null,o.length?c("grokMove.unreadable",{names:o.join(", ")}):null,r.length?c("grokMove.notAdded",{names:r.join(", ")}):null].filter(u=>u!==null);return l.length>0&&a.jsx("div",{className:"flex flex-col gap-1",children:l.map(u=>a.jsx("p",{className:ge,children:u},u))})}function pt({local:e,look:t,found:s,reply:n,error:o,onReply:r,onFile:l,onFound:u}){const m=y.useRef(null),{state:N,copy:E}=ve(ze);return a.jsxs(a.Fragment,{children:[a.jsx("p",{className:"text-[13px] leading-relaxed text-ink-secondary",children:c("grokMove.intro")}),a.jsxs("section",{className:"flex flex-col items-start gap-1.5",children:[a.jsx("h3",{className:"text-[14px] font-medium text-ink",children:c("grokMove.step1")}),a.jsx("p",{className:"text-[13px] leading-relaxed text-ink-secondary",children:c("grokMove.step1Hint")}),e&&t.bots.length>0&&a.jsx("p",{"data-grok-move-roster":!0,className:"text-[13px] text-ink-secondary",children:c("grokMove.roster",{names:t.bots.join(", ")})}),a.jsxs("button",{type:"button","data-grok-move-copy":!0,onClick:E,className:G(D,"mt-1 inline-flex items-center gap-2"),children:[N==="copied"?a.jsx(xe,{size:15}):a.jsx(we,{size:15}),N==="copied"?c("grokMove.copied"):N==="failed"?c("grokMove.copyFailed"):c("grokMove.copy")]})]}),a.jsxs("section",{className:"flex flex-col gap-1.5",children:[a.jsx("h3",{className:"text-[14px] font-medium text-ink",children:c("grokMove.step2")}),a.jsx("p",{className:"text-[13px] leading-relaxed text-ink-secondary",children:c("grokMove.step2Hint")}),s.bots.length>0&&a.jsxs("div",{"data-grok-move-found":!0,className:"mt-1 flex items-center justify-between gap-3 rounded-xl border border-accent/40 bg-accent/[0.06] px-3 py-2",children:[a.jsx("span",{className:"min-w-0 break-words text-[13px] text-ink",children:c("grokMove.found",{names:s.bots.map(d=>d.name).join(", ")})}),a.jsx("button",{type:"button","data-grok-move-use-found":!0,onClick:u,className:G(K,"shrink-0"),children:c("grokMove.useFound")})]}),s.refused.map(d=>a.jsx("p",{role:"alert",className:"text-[13px] leading-relaxed text-danger",children:c("grokMove.refused",{file:d.file,reason:d.error})},d.file)),a.jsx("textarea",{value:n,onChange:d=>r(d.target.value),rows:4,"aria-label":c("grokMove.replyLabel"),placeholder:c("grokMove.replyPlaceholder"),className:"mt-1 w-full resize-y rounded-xl border border-hairline/40 bg-inset px-3 py-2.5 text-[13px] text-ink placeholder:text-ink-secondary focus:outline-none"}),o&&a.jsx("p",{role:"alert",className:"text-[13px] leading-relaxed text-danger",children:o}),a.jsxs("div",{children:[a.jsxs("button",{type:"button",onClick:()=>m.current?.click(),className:G(D,"inline-flex items-center gap-2"),children:[a.jsx(Fe,{size:15}),c("grokMove.chooseFile")]}),a.jsx("input",{ref:m,type:"file",accept:".json,.md,.txt,application/json,text/plain,text/markdown",className:"hidden",onChange:d=>{l(d.target.files?.[0]),d.target.value=""}})]})]})]})}function jt({onClose:e,inline:t=!1}){const{state:s,dispatch:n}=Oe(),o=$e(s.config?.cloudHome===!0),[r,l]=y.useState(fe),[u,m]=y.useState(""),[N,E]=y.useState(""),[d,w]=y.useState(null),[k,_]=y.useState(null),[x,F]=y.useState(!1),j=y.useRef(null),A=y.useCallback(()=>{o&&ct().then(l)},[o]);y.useEffect(()=>(A(),window.addEventListener("focus",A),()=>window.removeEventListener("focus",A)),[A]),y.useEffect(()=>j.current?.focus({preventScroll:!0}),[d,k]);const C=y.useMemo(()=>ut(r.files),[r.files]),L=async i=>{try{const p=i(),b=await q("/api/mcp/servers").then(h=>h.servers??[],()=>[]);w(dt(p,{bots:s.bots,servers:new Set(b.map(h=>h.name)),timeZone:Intl.DateTimeFormat().resolvedOptions().timeZone})),E("")}catch(p){E(he(p))}},R=y.useRef(()=>{});R.current=i=>{if(i){if(i.size>me)return E(c("grokMove.error.tooLarge"));i.text().then(p=>L(()=>V(p)))}};const I=!d&&!k;y.useEffect(()=>{const i=h=>{h.stopPropagation(),h.preventDefault()},b=[["dragenter",i],["dragover",i],["dragleave",i],["drop",h=>{i(h),I&&R.current(h.dataTransfer?.files[0])}]];for(const[h,S]of b)window.addEventListener(h,S,!0);return()=>{for(const[h,S]of b)window.removeEventListener(h,S,!0)}},[I]);const U=async()=>{if(!d)return;F(!0);const i=await mt(d,n);ye("team_imported",{members:d.plans.length,source:"grok",mode:"add",format:"package"}),_(i),w(null),F(!1)},P=()=>{_(null),m(""),E(""),A()},f=a.jsxs("div",{ref:j,tabIndex:-1,...t?{}:{role:"dialog","aria-modal":!0,"aria-labelledby":"grok-move-title"},"data-grok-move":k?"report":d?"preview":"start",onKeyDown:i=>{t||i.key!=="Escape"||x||(i.preventDefault(),i.stopPropagation(),d?w(null):e())},className:t?"mt-3 flex flex-col rounded-lg border border-hairline/40 text-left outline-none":"ui-modal animate-pop-in flex max-h-[min(720px,calc(100dvh-32px))] w-[560px] max-w-full flex-col overflow-hidden text-left outline-none",children:[(!t||d)&&a.jsxs(a.Fragment,{children:[a.jsxs("div",{className:"flex h-[52px] shrink-0 items-center justify-between pl-4 pr-3",children:[a.jsx("h2",{id:"grok-move-title",className:"text-[14px] font-semibold leading-[22px] text-ink",children:d?c("grokMove.previewTitle"):c("settings.import.grokTitle")}),!t&&a.jsx("button",{type:"button",disabled:x,onClick:e,"aria-label":c("common.close"),title:c("common.close"),className:"flex size-7 items-center justify-center rounded-full text-ink-secondary transition-colors hover:bg-ink/[0.06] hover:text-ink disabled:opacity-40",children:a.jsx(ke,{size:16})})]}),a.jsx("div",{className:"ui-modal-divider shrink-0"})]}),a.jsx("div",{"data-grok-move-body":!0,className:"flex min-h-0 flex-1 flex-col gap-4 overflow-y-auto p-4 [scrollbar-width:thin]",children:k?a.jsxs(a.Fragment,{children:[k.bots.map(i=>a.jsx(le,{heading:c("grokMove.isHere",{name:i.name}),...i},i.name)),a.jsx(ce,{paused:k.bots.some(i=>i.routines>0)?c("grokMove.pausedReport"):null,files:c("grokMove.filesStay"),apps:k.bots.reduce((i,p)=>i+p.apps,0),moved:k.moved,unreadable:k.unreadable,failed:k.failed})]}):d?a.jsxs(a.Fragment,{children:[d.plans.map(i=>a.jsx(le,{heading:i.addedAs,skills:i.skills.length,routines:i.routines,memories:i.memories,notes:i.notes,skillsOff:i.skills.filter(p=>!p.on).map(p=>p.name)},i.packageId)),a.jsx(ce,{paused:d.plans.some(i=>i.routines>0)?c("grokMove.pausedPreview"):null,apps:d.plans.reduce((i,p)=>i+p.apps,0),moved:d.moved,unreadable:d.unreadable})]}):a.jsx(pt,{local:o,look:r,found:C,reply:u,error:N,onReply:m,onFile:i=>R.current(i),onFound:()=>{L(()=>C.bots)}})},k?"report":d?"preview":"start"),a.jsx("div",{className:"ui-modal-divider shrink-0"}),a.jsx("div",{className:"flex shrink-0 justify-end gap-2 p-3",children:k?a.jsxs(a.Fragment,{children:[a.jsx("button",{type:"button","data-grok-move-another":!0,onClick:P,className:D,children:c("grokMove.another")}),a.jsx("button",{type:"button","data-grok-move-done":!0,onClick:e,className:K,children:c("common.done")})]}):d?a.jsxs(a.Fragment,{children:[a.jsx("button",{type:"button",disabled:x,onClick:()=>w(null),className:D,children:c("grokMove.back")}),a.jsxs("button",{type:"button","data-grok-move-import":!0,disabled:x||!d.plans.length,onClick:()=>{U()},className:G(K,"inline-flex items-center gap-2"),children:[x&&a.jsx(be,{size:15,className:"animate-spin"}),x?c("grokMove.importing"):c("grokMove.import")]})]}):a.jsx("button",{type:"button","data-grok-move-continue":!0,disabled:!u.trim(),onClick:()=>{L(()=>V(u))},className:K,children:c("onboarding.continue")})})]});return t?f:a.jsx("div",{className:"ui-scrim fixed inset-0 z-[60] flex items-center justify-center p-4",onMouseDown:i=>{i.target===i.currentTarget&&!x&&e()},children:f})}export{le as BotCounts,jt as GrokMoveDialog,ce as GrokMoveLines};
|
|
56
|
+
${r}`),I=`${o}-${R.toString(16).padStart(8,"0").slice(0,6)}`,U={format:Te,version:Ie,package:{id:I,release:"1.0.0",name:n,tagline:v($(L),160),summary:L,category:"Imported",author:{name:"Grok Bot"},license:"See source",outcomes:[v(`${n} runs in OpenMausBot with your own engine and apps.`,240)],setupMinutes:5,requirements:{apps:[],capabilities:[]},team:{name:v(n,60)},agents:[{key:o,name:n,...e.title?{title:v(e.title,200)}:{},...C?{description:v(C,4e3)}:{},...r?{soul:r}:{},appearance:{color:ne[R%ne.length]},...m.length?{skills:m.map(f=>f.name)}:{},...j.length?{connections:j.map(f=>f.key)}:{},...Object.keys(x).length?{seed:{memory:x}}:{}}],...w.length?{routines:w}:{},...j.length?{connections:j}:{},...m.length?{skills:{version:1,entries:m}}:{}}};let P;try{P=Re(U,{trust:"file"})}catch{throw new O("unusable")}return{name:n,packageId:I,document:P,skills:N,routines:w.length,notes:x[ae]?k.length:0,memories:x["MEMORY.md"]?_.count:0,apps:A}}const fe={files:[],bots:[]};function ct(){return q("/api/setup-import/grok",{timeoutMs:1e4}).then(e=>({files:Array.isArray(e?.files)?e.files:[],bots:Array.isArray(e?.bots)?e.bots:[]}),()=>fe)}function he(e){return e instanceof O?c(`grokMove.error.${e.code}`,{keys:e.keys.join(", ")}):e instanceof Error?e.message:String(e)}function ut(e){const t=[],s=[...e].sort((n,o)=>n.modifiedAt-o.modifiedAt).flatMap(n=>{try{return V(n.text)}catch(o){return t.push({file:n.name,error:he(o)}),[]}});return{bots:pe(s),refused:t}}function dt(e,t){const s=new Set(t.bots.flatMap(l=>l.installedPackage?.id??[])),n=new Set(t.bots.map(l=>l.name.trim().toLowerCase())),o=new Set(t.servers),r={plans:[],moved:[],unreadable:[]};for(const l of e)try{const u=lt(l,{timeZone:t.timeZone,takenServers:o});if(s.has(u.packageId)){r.moved.push(u.name);continue}for(const m of u.document.package.connections??[])o.add(m.key);r.plans.push({...u,addedAs:je(u.name,n)})}catch{r.unreadable.push(l.name)}return r}async function mt(e,t){const s={bots:[],moved:e.moved,unreadable:e.unreadable,failed:[]};for(const n of e.plans)try{const o=(await Me(n.document,t)).first;if(!o)throw new Error("no bot");const r=[];for(const l of n.skills)l.on&&await q(`/api/bots/${o.id}/skills/${encodeURIComponent(l.folder)}`,{method:"PATCH",body:JSON.stringify({enabled:!0})}).then(()=>!0,()=>!1)||r.push(l.name);s.bots.push({name:o.name,skills:n.skills.length,skillsOff:r,routines:n.routines,notes:n.notes,memories:n.memories,apps:n.apps})}catch{s.failed.push(n.name)}return s}const D="ui-button ui-button-primary min-h-9 px-4 text-[14px]",K="ui-button min-h-9 px-4 text-[14px]",ge="text-[13px] leading-relaxed text-ink-secondary";function le({heading:e,skills:t,routines:s,memories:n,notes:o,skillsOff:r}){const l=[[c("grokMove.count.skills"),t],[c("grokMove.count.routines"),s],[c("grokMove.count.memories"),n],[c("grokMove.count.notes"),o]];return a.jsxs("section",{"data-grok-move-bot":!0,className:"flex flex-col gap-1.5",children:[a.jsx("h3",{className:"break-words text-[15px] font-semibold text-ink",children:e}),a.jsx("dl",{className:"flex flex-col gap-1 text-[14px]",children:l.filter(([,u])=>u>0).map(([u,m])=>a.jsxs("div",{className:"flex items-baseline justify-between gap-4",children:[a.jsx("dt",{className:"text-ink-secondary",children:u}),a.jsx("dd",{className:"tabular-nums text-ink",children:m})]},u))}),r.length>0&&a.jsx("p",{className:ge,children:c("grokMove.skillsOff",{names:r.join(", ")})})]})}function ce({paused:e,files:t=null,apps:s,moved:n,unreadable:o,failed:r=[]}){const l=[e,t,s===1?c("grokMove.appsOne"):s>1?c("grokMove.appsMany",{count:s}):null,n.length?c("grokMove.alreadyHere",{names:n.join(", ")}):null,o.length?c("grokMove.unreadable",{names:o.join(", ")}):null,r.length?c("grokMove.notAdded",{names:r.join(", ")}):null].filter(u=>u!==null);return l.length>0&&a.jsx("div",{className:"flex flex-col gap-1",children:l.map(u=>a.jsx("p",{className:ge,children:u},u))})}function pt({local:e,look:t,found:s,reply:n,error:o,onReply:r,onFile:l,onFound:u}){const m=y.useRef(null),{state:N,copy:E}=ve(ze);return a.jsxs(a.Fragment,{children:[a.jsx("p",{className:"text-[13px] leading-relaxed text-ink-secondary",children:c("grokMove.intro")}),a.jsxs("section",{className:"flex flex-col items-start gap-1.5",children:[a.jsx("h3",{className:"text-[14px] font-medium text-ink",children:c("grokMove.step1")}),a.jsx("p",{className:"text-[13px] leading-relaxed text-ink-secondary",children:c("grokMove.step1Hint")}),e&&t.bots.length>0&&a.jsx("p",{"data-grok-move-roster":!0,className:"text-[13px] text-ink-secondary",children:c("grokMove.roster",{names:t.bots.join(", ")})}),a.jsxs("button",{type:"button","data-grok-move-copy":!0,onClick:E,className:G(K,"mt-1 inline-flex items-center gap-2"),children:[N==="copied"?a.jsx(xe,{size:15}):a.jsx(we,{size:15}),N==="copied"?c("grokMove.copied"):N==="failed"?c("grokMove.copyFailed"):c("grokMove.copy")]})]}),a.jsxs("section",{className:"flex flex-col gap-1.5",children:[a.jsx("h3",{className:"text-[14px] font-medium text-ink",children:c("grokMove.step2")}),a.jsx("p",{className:"text-[13px] leading-relaxed text-ink-secondary",children:c("grokMove.step2Hint")}),s.bots.length>0&&a.jsxs("div",{"data-grok-move-found":!0,className:"mt-1 flex items-center justify-between gap-3 rounded-xl border border-accent/40 bg-accent/[0.06] px-3 py-2",children:[a.jsx("span",{className:"min-w-0 break-words text-[13px] text-ink",children:c("grokMove.found",{names:s.bots.map(d=>d.name).join(", ")})}),a.jsx("button",{type:"button","data-grok-move-use-found":!0,onClick:u,className:G(D,"shrink-0"),children:c("grokMove.useFound")})]}),s.refused.map(d=>a.jsx("p",{role:"alert",className:"text-[13px] leading-relaxed text-danger",children:c("grokMove.refused",{file:d.file,reason:d.error})},d.file)),a.jsx("textarea",{value:n,onChange:d=>r(d.target.value),rows:4,"aria-label":c("grokMove.replyLabel"),placeholder:c("grokMove.replyPlaceholder"),className:"mt-1 w-full resize-y rounded-xl border border-hairline/40 bg-inset px-3 py-2.5 text-[13px] text-ink placeholder:text-ink-secondary focus:outline-none"}),o&&a.jsx("p",{role:"alert",className:"text-[13px] leading-relaxed text-danger",children:o}),a.jsxs("div",{children:[a.jsxs("button",{type:"button",onClick:()=>m.current?.click(),className:G(K,"inline-flex items-center gap-2"),children:[a.jsx(Fe,{size:15}),c("grokMove.chooseFile")]}),a.jsx("input",{ref:m,type:"file",accept:".json,.md,.txt,application/json,text/plain,text/markdown",className:"hidden",onChange:d=>{l(d.target.files?.[0]),d.target.value=""}})]})]})]})}function jt({onClose:e,inline:t=!1}){const{state:s,dispatch:n}=Oe(),o=$e(s.config?.cloudHome===!0),[r,l]=y.useState(fe),[u,m]=y.useState(""),[N,E]=y.useState(""),[d,w]=y.useState(null),[k,_]=y.useState(null),[x,F]=y.useState(!1),j=y.useRef(null),A=y.useCallback(()=>{o&&ct().then(l)},[o]);y.useEffect(()=>(A(),window.addEventListener("focus",A),()=>window.removeEventListener("focus",A)),[A]),y.useEffect(()=>j.current?.focus({preventScroll:!0}),[d,k]);const C=y.useMemo(()=>ut(r.files),[r.files]),L=async i=>{try{const p=i(),b=await q("/api/mcp/servers").then(h=>h.servers??[],()=>[]);w(dt(p,{bots:s.bots,servers:new Set(b.map(h=>h.name)),timeZone:Intl.DateTimeFormat().resolvedOptions().timeZone})),E("")}catch(p){E(he(p))}},R=y.useRef(()=>{});R.current=i=>{if(i){if(i.size>me)return E(c("grokMove.error.tooLarge"));i.text().then(p=>L(()=>V(p)))}};const I=!d&&!k;y.useEffect(()=>{const i=h=>{h.stopPropagation(),h.preventDefault()},b=[["dragenter",i],["dragover",i],["dragleave",i],["drop",h=>{i(h),I&&R.current(h.dataTransfer?.files[0])}]];for(const[h,S]of b)window.addEventListener(h,S,!0);return()=>{for(const[h,S]of b)window.removeEventListener(h,S,!0)}},[I]);const U=async()=>{if(!d)return;F(!0);const i=await mt(d,n);ye("team_imported",{members:d.plans.length,source:"grok",mode:"add",format:"package"}),_(i),w(null),F(!1)},P=()=>{_(null),m(""),E(""),A()},f=a.jsxs("div",{ref:j,tabIndex:-1,...t?{}:{role:"dialog","aria-modal":!0,"aria-labelledby":"grok-move-title"},"data-grok-move":k?"report":d?"preview":"start",onKeyDown:i=>{t||i.key!=="Escape"||x||(i.preventDefault(),i.stopPropagation(),d?w(null):e())},className:t?"mt-3 flex flex-col rounded-lg border border-hairline/40 text-left outline-none":"ui-modal animate-pop-in flex max-h-[min(720px,calc(100dvh-32px))] w-[560px] max-w-full flex-col overflow-hidden text-left outline-none",children:[(!t||d)&&a.jsxs(a.Fragment,{children:[a.jsxs("div",{className:"flex h-[52px] shrink-0 items-center justify-between pl-4 pr-3",children:[a.jsx("h2",{id:"grok-move-title",className:"text-[14px] font-semibold leading-[22px] text-ink",children:d?c("grokMove.previewTitle"):c("settings.import.grokTitle")}),!t&&a.jsx("button",{type:"button",disabled:x,onClick:e,"aria-label":c("common.close"),title:c("common.close"),className:"flex size-7 items-center justify-center rounded-full text-ink-secondary transition-colors hover:bg-ink/[0.06] hover:text-ink disabled:opacity-40",children:a.jsx(ke,{size:16})})]}),a.jsx("div",{className:"ui-modal-divider shrink-0"})]}),a.jsx("div",{"data-grok-move-body":!0,className:"flex min-h-0 flex-1 flex-col gap-4 overflow-y-auto p-4 [scrollbar-width:thin]",children:k?a.jsxs(a.Fragment,{children:[k.bots.map(i=>a.jsx(le,{heading:c("grokMove.isHere",{name:i.name}),...i},i.name)),a.jsx(ce,{paused:k.bots.some(i=>i.routines>0)?c("grokMove.pausedReport"):null,files:c("grokMove.filesStay"),apps:k.bots.reduce((i,p)=>i+p.apps,0),moved:k.moved,unreadable:k.unreadable,failed:k.failed})]}):d?a.jsxs(a.Fragment,{children:[d.plans.map(i=>a.jsx(le,{heading:i.addedAs,skills:i.skills.length,routines:i.routines,memories:i.memories,notes:i.notes,skillsOff:i.skills.filter(p=>!p.on).map(p=>p.name)},i.packageId)),a.jsx(ce,{paused:d.plans.some(i=>i.routines>0)?c("grokMove.pausedPreview"):null,apps:d.plans.reduce((i,p)=>i+p.apps,0),moved:d.moved,unreadable:d.unreadable})]}):a.jsx(pt,{local:o,look:r,found:C,reply:u,error:N,onReply:m,onFile:i=>R.current(i),onFound:()=>{L(()=>C.bots)}})},k?"report":d?"preview":"start"),a.jsx("div",{className:"ui-modal-divider shrink-0"}),a.jsx("div",{className:"flex shrink-0 justify-end gap-2 p-3",children:k?a.jsxs(a.Fragment,{children:[a.jsx("button",{type:"button","data-grok-move-another":!0,onClick:P,className:K,children:c("grokMove.another")}),a.jsx("button",{type:"button","data-grok-move-done":!0,onClick:e,className:D,children:c("common.done")})]}):d?a.jsxs(a.Fragment,{children:[a.jsx("button",{type:"button",disabled:x,onClick:()=>w(null),className:K,children:c("grokMove.back")}),a.jsxs("button",{type:"button","data-grok-move-import":!0,disabled:x||!d.plans.length,onClick:()=>{U()},className:G(D,"inline-flex items-center gap-2"),children:[x&&a.jsx(be,{size:15,className:"animate-spin"}),x?c("grokMove.importing"):c("grokMove.import")]})]}):a.jsx("button",{type:"button","data-grok-move-continue":!0,disabled:!u.trim(),onClick:()=>{L(()=>V(u))},className:D,children:c("onboarding.continue")})})]});return t?f:a.jsx("div",{className:"ui-scrim fixed inset-0 z-[60] flex items-center justify-center p-4",onMouseDown:i=>{i.target===i.currentTarget&&!x&&e()},children:f})}export{le as BotCounts,jt as GrokMoveDialog,ce as GrokMoveLines};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{r as f,j as o,t as d,f as te,a as j,
|
|
1
|
+
import{r as f,j as o,t as d,f as te,a as j,ad as ne,X as se,b as U,ae as re}from"./styles-CnQhCz_w.js";import{bk as ae,bl as ie,bm as oe,b9 as D,bn as ce,bo as le,bp as ue,u as de,ag as pe,l as me,bq as fe,br as xe}from"./App-Dbsatjme.js";import{C as he,L as ge,J as ye,u as be}from"./PlacesRail-XEjyWavr.js";import{R as ke,C as $e}from"./MenuMotion-BVlWdNZd.js";import"./index-CEBe4ppp.js";import"./monitor-EYAEQme8.js";const $=(e,n=120)=>e.length>n?`${e.slice(0,n-1)}…`:e,v=e=>e.replace(/\s+/g," ").trim(),F=119;function H(e,n){const a=e?{...e}:{text:"",pendingSpace:!1,overflow:!1};if(a.overflow)return a;for(const i of n){if(/\s/.test(i)){a.text&&(a.pendingSpace=!0);continue}if(a.pendingSpace){if(a.text.length>=F){a.overflow=!0;break}a.text+=" ",a.pendingSpace=!1}if(a.text.length>=F){a.overflow=!0;break}a.text+=i}return a}const B=e=>`${e.text}${e.overflow?"…":""}`;function ve(e){switch(e.type){case"session.started":return{summary:`session ${e.sessionId??"(none)"}${e.model?` · ${e.model}`:""}`,tone:"plain"};case"session.exited":return{summary:`session exited${e.reason?` · ${e.reason}`:""}`,tone:"plain"};case"turn.started":return{summary:`turn started${e.turnId?` · ${e.turnId.slice(0,8)}`:""}`,tone:"boundary"};case"turn.retrying":return{summary:`retrying (${e.reason}) · attempt ${e.attempt} · ${Math.round(e.delayMs/1e3)}s`,tone:"plain"};case"turn.completed":{const n=[e.ok?"turn ok":"turn failed"];return e.stopReason&&n.push(e.stopReason),typeof e.cost=="number"&&n.push(ae(e.cost,4)),e.denials?.length&&n.push(`${e.denials.length} denied`),{summary:n.join(" · "),tone:e.ok?"boundary":"error"}}case"turn.wait_started":return{summary:`waiting for ${e.resource.startsWith("browser:")?"browser":"computer"} — ${e.holder?`${e.holder.name}${e.holder.task?` (${e.holder.task})`:""}`:"holder unknown"}`,tone:"plain"};case"turn.wait_ended":{const n=Math.round(e.waitedMs/1e3),a=e.waitedMs<1e3?"under a second":`${n}s`;return e.outcome==="acquired"?{summary:`${e.resource.startsWith("browser:")?"browser":"computer"} acquired after ${a}`,tone:"boundary"}:e.outcome==="parked"?{summary:`computer wait parked after ${a}`,tone:"plain"}:e.outcome==="gave_up"?{summary:`computer wait gave up after ${a}`,tone:"error"}:{summary:`computer wait stopped after ${a}`,tone:"plain"}}case"item.started":return{summary:`${e.itemType}${e.title?`: ${$(v(e.title))}`:" started"}`,tone:"plain"};case"item.updated":return{summary:`${e.itemType} updated${typeof e.tokens=="number"?` · ${e.tokens} tok`:""}`,tone:"plain"};case"turn.progress":return{summary:`live: ${[e.activity,e.tool,e.file,typeof e.bytes=="number"?`${e.bytes} bytes`:void 0].filter(Boolean).join(" · ")}`,tone:"plain"};case"item.completed":return e.itemType==="assistant_text"?{summary:`assistant: ${$(v(e.text))}`,tone:"plain"}:e.itemType==="assistant_image"?{summary:"assistant image generated",tone:"plain"}:{summary:`tool ${e.ok?"ok":"failed"}`,tone:e.ok?"plain":"error"};case"content.delta":return{summary:`${e.streamKind}: ${$(v(e.delta))}`,tone:"plain"};case"request.opened":return{summary:`${e.requestType}${e.origin==="output"?" (agent-composed)":""}: ${e.tool} — ${$(v(e.summary))}`,tone:"plain"};case"request.resolved":return{summary:`resolved ${e.behavior} · ${e.source}`,tone:"plain"};case"thread.token-usage.updated":return{summary:`tokens in ${e.input} · out ${e.output}`,tone:"plain"};case"runtime.error":return{summary:`${e.setup?"setup: ":""}${$(v(e.message))}`,tone:"error"};case"runtime.notice":return{summary:`notice: ${$(v(e.message))}`,tone:"plain"};default:return{summary:e.type,tone:"plain"}}}function we(e){const n=e.msg;if(!n||typeof n!="object")return String(e.msg);const a=typeof n.method=="string"?n.method:void 0,i=typeof n.type=="string"?n.type:void 0,s=n.id!==void 0?` #${String(n.id)}`:"";if(a)return`${a}${s}`;if(typeof n.event=="string"){const t=n.result?.status;return typeof t=="string"?`${n.event} · ${t}`:n.event}if(i){const t=n.message,x=typeof t?.role=="string"?` · ${t.role}`:"",l=typeof n.subtype=="string"?` · ${n.subtype}`:"";return`${i}${l}${x}`}return n.result!==void 0?`result${s}`:n.error!==void 0?`error${s}`:$(v(JSON.stringify(n)))}function J(e){const n=[];for(const[a,i]of e.entries()){if(i.kind==="native"){n.push({key:`n${a}`,kind:"native",at:i.at,tag:i.data.dir==="out"?"→ out":"← in",summary:`${i.data.source} · ${we(i.data)}`,tone:"plain",data:i.data,count:1});continue}const s=i.data,t=n.at(-1);if(s.type==="content.delta"&&t?.kind==="runtime"&&t.tag==="content.delta"&&t.data[0]?.type==="content.delta"&&t.data[0].streamKind===s.streamKind){const y=t.data;y.push(s),t.count=y.length,t.preview=H(t.preview,s.delta),t.summary=`${s.streamKind}: ${B(t.preview)}`;continue}const{summary:x,tone:l}=ve(s),u=s.type==="content.delta"?H(void 0,s.delta):void 0,b=s.type==="content.delta"?s.streamKind:void 0;n.push({key:s.eventId||`r${a}`,kind:"runtime",at:i.at,tag:s.type,summary:u&&b?`${b}: ${B(u)}`:x,tone:l,data:s.type==="content.delta"?[s]:s,count:1,preview:u})}return n}function je(e){const n=new Date(e);if(Number.isNaN(n.getTime()))return"--:--:--";const a=String(n.getHours()).padStart(2,"0"),i=String(n.getMinutes()).padStart(2,"0"),s=String(n.getSeconds()).padStart(2,"0"),t=String(n.getMilliseconds()).padStart(3,"0");return`${a}:${i}:${s}.${t}`}function Se(e,n){const a=ie(e,n),i=[];let s=!1;for(const t of e)if(t.kind==="text"&&t.role==="user"&&t.text?.trim())i.push({id:t.id,at:t.at,label:s?"User input":"Task started",state:"observed",kind:"task"}),s=!0;else if(t.kind==="activity"&&t.tool){const x=oe(t.tool.name),l=t.tool.ok===!1||x!==null;i.push({id:t.id,at:t.at,label:D(x??t.tool.name),...t.tool.summary?{command:D(t.tool.summary)}:{},state:l?"failed":t.tool.ok===!0?"complete":a.has(t.id)?"running":"unverified",kind:"tool"})}else t.kind==="screen"?i.push({id:t.id,at:t.at,label:"Screen observed",state:"observed",kind:"screen"}):t.kind==="text"&&t.role==="bot"&&t.text?.trim()&&i.push({id:t.id,at:t.at,label:"Response recorded",state:"complete",kind:"result"});return i}function Ne(e){return D(e.map(n=>`[${new Date(n.at).toISOString()}] ${n.state} · ${n.label}${n.command?`
|
|
2
2
|
${n.command}`:""}`).join(`
|
|
3
3
|
`))}const Ie={running:"inspector.run.running",complete:"inspector.run.complete",failed:"inspector.run.failed",observed:"inspector.run.observed",unverified:"inspector.run.unverified"};function Te({events:e}){const[n,a]=f.useState("idle"),i=e.slice(-200),s=async()=>{const t=await ye(Ne(i));t!=="empty"&&a(t)};return o.jsxs("div",{className:"min-h-0 flex-1 overflow-y-auto",children:[o.jsxs("div",{className:"flex items-start gap-3 px-4 py-3",children:[o.jsx("p",{className:"min-w-0 flex-1 text-[12px] leading-relaxed text-ink-secondary",children:d("inspector.run.hint")}),i.length>0&&o.jsx("button",{type:"button",onClick:()=>{s()},"aria-label":d("inspector.run.copy"),title:d("inspector.run.copy"),className:"rounded-md p-1.5 text-ink-secondary hover:bg-raised hover:text-ink focus-visible:outline-2 focus-visible:outline-accent",children:n==="copied"?o.jsx(te,{size:14}):o.jsx(he,{size:14})})]}),n!=="idle"&&o.jsx("p",{role:"status",className:"px-4 pb-2 text-[12px] text-ink-secondary",children:d(n==="copied"?"inspector.run.copied":"inspector.run.copyFailed")}),e.length>i.length&&o.jsx("p",{className:"px-4 pb-2 text-[12px] text-ink-secondary",children:d("inspector.run.recent",{count:i.length})}),i.length===0?o.jsx("p",{className:"px-4 py-6 text-[13px] text-ink-secondary",children:d("inspector.run.empty")}):o.jsx("ol",{"aria-label":d("inspector.run.title"),className:"px-4 pb-4",children:i.map(t=>{const x=t.state==="failed"?ce:t.state==="complete"?le:t.state==="running"?ge:ue,l=t.kind==="task"?d("inspector.run.userInput"):t.kind==="screen"?d("inspector.run.screen"):t.kind==="result"?d("inspector.run.response"):t.label;return o.jsxs("li",{className:"border-t border-hairline/30 py-3",children:[o.jsxs("div",{className:"flex items-start gap-2 text-[12px]",children:[o.jsx(x,{size:14,"aria-hidden":"true",className:j("mt-0.5 shrink-0",t.state==="failed"?"text-danger":t.state==="running"?"animate-spin text-accent":"text-ink-secondary")}),o.jsx("span",{className:"min-w-0 flex-1 break-words font-medium text-ink",children:l}),o.jsx("time",{dateTime:new Date(t.at).toISOString(),className:"shrink-0 tabular-nums text-ink-secondary",children:ne(t.at)})]}),t.command&&o.jsx("pre",{className:"mt-2 whitespace-pre-wrap break-all rounded-lg bg-inset p-2 font-mono text-[12px] leading-relaxed text-ink",children:t.command}),t.kind==="tool"&&o.jsx("p",{className:j("mt-1 pl-[22px] text-[11px]",t.state==="failed"?"text-danger":"text-ink-secondary"),children:d(Ie[t.state])})]},t.id)})})]})}const K=400,T=new WeakMap;function X(e){const n={runtime:0,native:0},a=[];for(let i=e.length-1;i>=0;i--){const s=e[i];++n[s.kind]<=K&&a.push(s)}return a.length===e.length?e:a.reverse()}function G(e,n){if(!n.length)return e;const a=e??{entries:[],total:{runtime:0,native:0}},i=new Set(a.entries.flatMap(u=>u.kind==="runtime"?[u.data.eventId]:[])),s=[];for(const u of n)i.has(u.eventId)||(i.add(u.eventId),s.push({kind:"runtime",at:u.createdAt,data:u}));if(!s.length)return e;const t=X([...a.entries,...s]),x=new Set([...T.get(a)??[],...s.map(u=>u.data.eventId)]),l={entries:t,total:{...a.total,runtime:a.total.runtime+s.length}};return T.set(l,new Set(t.flatMap(u=>u.kind==="runtime"&&x.has(u.data.eventId)?[u.data.eventId]:[]))),l}function Re(e,n){const a={...n,entries:X(n.entries)};if(!e)return a;const i=e.entries.flatMap(m=>m.kind==="runtime"?[m.data]:[]),s=T.get(e)??new Set,t=a.entries.filter(m=>m.kind==="runtime"),x=new Set(t.map(m=>m.data.eventId)),l=i.findLastIndex(m=>x.has(m.eventId)),u=t.at(-1)?.at,b=(l>=0?i.slice(l+1):i.filter(m=>u===void 0||m.createdAt>=u)).filter(m=>s.has(m.eventId)),y=G(a,b),R={...y,total:{...y.total,runtime:Math.max(e.total.runtime,y.total.runtime)}};return T.set(R,T.get(y)??new Set),R}const Ce=e=>U()==="en"?d(e):xe(d(e));function qe({bot:e}){const{dispatch:n}=de(),{dragProps:a}=be(),i=e.threadId,[s,t]=f.useState("run"),x=f.useMemo(()=>Se(pe(e),e),[e]),[l,u]=f.useState(null),[b,y]=f.useState(null),[R,m]=f.useState(()=>new Set),E=f.useRef(null),z=f.useRef(!0),S=f.useRef(null),C=f.useRef(()=>{}),L=f.useCallback(async()=>{S.current?.abort();const r=new AbortController;S.current=r;try{const c=await fetch(`/api/threads/${i}/events?limit=${K}`,{signal:r.signal});if(!c.ok)throw new Error(`${c.status}`);const p=await c.json();if(r.signal.aborted)return;u(h=>Re(h,p)),m(h=>new Set([...h].filter(M=>M.startsWith("runtime:")))),y(null)}catch(c){if(r.signal.aborted)return;y(c instanceof Error?c.message:String(c))}finally{S.current===r&&(S.current=null)}},[i]);f.useEffect(()=>(u(null),m(new Set),z.current=!0,()=>S.current?.abort()),[L]),f.useEffect(()=>{let r=!0,c=null,p=0,h=!1;const M=[];let N=[],w=null;const q=()=>{w&&clearTimeout(w),w=null;const g=N;N=[],g.length&&u(k=>G(k,g))},W=g=>{N.push(g),N.length>=K?q():w??=setTimeout(q,16)},Y=()=>{for(const g of M.splice(0))W(g)},Z=async()=>{q();const g=++p;h=!0,await L(),!(!r||g!==p)&&(h=!1,Y())},I=()=>{Z()};C.current=I;const ee=me({onMissedFrames:I,onFrame:g=>{if(g.kind!=="runtime")return;const k=g.event;k.threadId===i&&(h?M.push(k):W(k),(k.type==="turn.completed"||k.type==="runtime.error")&&(c&&clearTimeout(c),c=setTimeout(I,400)))}});return I(),()=>{r=!1,C.current===I&&(C.current=()=>{}),ee(),c&&clearTimeout(c),w&&clearTimeout(w),N=[]}},[i,L]);const A=f.useMemo(()=>l?l.entries.filter(r=>s==="raw"?r.kind==="native":r.kind==="runtime"):[],[l,s]),O=f.useMemo(()=>J(A),[A]);f.useEffect(()=>{const r=new Set(["runtime","native"].flatMap(c=>J(l?.entries.filter(p=>p.kind===c)??[]).map(p=>`${p.kind}:${p.key}`)));m(c=>{const p=new Set([...c].filter(h=>r.has(h)));return p.size===c.size?c:p})},[l]),f.useEffect(()=>{const r=E.current;r&&z.current&&(r.scrollTop=r.scrollHeight)},[l,O.length,s]);const V=()=>{const r=E.current;r&&(z.current=r.scrollHeight-r.scrollTop-r.clientHeight<40)},Q=r=>m(c=>{const p=new Set(c);return p.has(r)?p.delete(r):p.add(r),p}),_=A.length,P=s==="raw"?l?.total.native??0:l?.total.runtime??0;return o.jsxs("aside",{"aria-label":d("inspector.title"),className:"animate-panel-in absolute inset-0 z-40 flex h-full min-w-0 flex-col border-l border-hairline/40 bg-panel md:static md:z-auto md:w-[min(460px,45vw)] md:shrink-0",children:[o.jsxs("div",{...a,className:"flex items-center justify-between px-4 py-3",children:[o.jsxs("span",{className:"flex items-center gap-2 text-[15px] font-semibold text-ink",children:[o.jsx(fe,{size:16,className:"text-ink-secondary"})," ",d("inspector.title")]}),o.jsx("button",{onClick:()=>n({type:"toggleInspector",open:!1}),"aria-label":d("inspector.close"),title:d("inspector.close"),className:"rounded-md p-1 text-ink-secondary hover:bg-raised hover:text-ink",children:o.jsx(se,{size:18})})]}),o.jsxs("div",{className:"flex items-center gap-2 border-b border-hairline/40 px-4 pb-3",children:[o.jsx("div",{role:"tablist","aria-label":d("inspector.views"),className:"flex rounded-lg bg-inset p-0.5",onKeyDown:r=>{const c=Array.from(r.currentTarget.querySelectorAll('[role="tab"]')),p=c.indexOf(document.activeElement),h=r.key==="ArrowRight"?(p+1)%c.length:r.key==="ArrowLeft"?(p+c.length-1)%c.length:r.key==="Home"?0:r.key==="End"?c.length-1:-1;h<0||(r.preventDefault(),c[h].focus(),c[h].click())},children:["run","events","raw"].map(r=>o.jsx("button",{type:"button",role:"tab",id:`inspector-tab-${r}`,"aria-selected":s===r,"aria-controls":`inspector-panel-${r}`,tabIndex:s===r?0:-1,onClick:()=>t(r),className:j("rounded-md px-2.5 py-1 text-[12px] font-medium",U()==="en"&&"capitalize",s===r?"bg-raised text-ink":"text-ink-secondary hover:text-ink"),children:Ce(r==="run"?"inspector.run.title":r==="events"?"inspector.tab.events":"inspector.tab.raw")},r))}),s!=="run"&&o.jsx("span",{className:"ml-auto text-[11px] text-ink-secondary",children:l?_<P?d("inspector.entries.lastOf",{shown:_,total:P}):d("inspector.entries.count",{count:_}):d("inspector.entries.loading")}),s!=="run"&&o.jsx("button",{onClick:()=>C.current(),className:"rounded-md p-1 text-ink-secondary hover:bg-raised hover:text-ink",title:d("inspector.reload"),children:o.jsx(ke,{size:14})})]}),o.jsx("div",{role:"tabpanel",id:`inspector-panel-${s}`,"aria-labelledby":`inspector-tab-${s}`,tabIndex:0,className:"flex min-h-0 flex-1 flex-col outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-accent/60",children:s==="run"?o.jsx(Te,{events:x},i):o.jsxs("div",{ref:E,onScroll:V,className:"min-h-0 flex-1 overflow-y-auto font-mono text-[12px]",children:[b&&o.jsx("div",{className:"px-4 py-3 text-danger",children:d("inspector.loadFailed",{error:b})}),l&&O.length===0&&!b&&o.jsx("div",{className:"px-4 py-6 text-ink-secondary",children:d(s==="raw"?"inspector.emptyRaw":"inspector.emptyEvents")}),O.map(r=>o.jsx(Me,{row:r,open:R.has(`${r.kind}:${r.key}`),onToggle:()=>Q(`${r.kind}:${r.key}`)},r.key))]})})]})}function Me({row:e,open:n,onToggle:a}){return o.jsxs("div",{className:j("border-b border-hairline/20",e.tone==="boundary"&&"bg-raised/40",e.tone==="error"&&"bg-danger/10"),children:[o.jsxs("button",{onClick:a,className:"flex w-full items-start gap-2 px-3 py-1.5 text-left hover:bg-raised/60",children:[o.jsx("span",{className:"mt-[1px] shrink-0 text-ink-secondary",children:n?o.jsx(re,{size:12}):o.jsx($e,{size:12})}),o.jsx("span",{className:"shrink-0 tabular-nums text-ink-secondary",children:je(e.at)}),o.jsxs("span",{className:j("shrink-0 rounded px-1 text-[11px]",e.kind==="native"?"bg-accent/15 text-accent":e.tone==="error"?"bg-danger/20 text-danger":"bg-inset text-ink-secondary"),children:[e.tag,e.count>1?` ×${e.count}`:""]}),o.jsx("span",{className:j("min-w-0 flex-1 truncate",e.tone==="error"?"text-danger":"text-ink"),children:e.summary})]}),n&&o.jsx("pre",{className:"max-h-[50vh] overflow-auto whitespace-pre-wrap break-all border-t border-hairline/20 bg-app px-3 py-2 text-[11px] leading-relaxed text-ink",children:JSON.stringify(e.data,null,2)})]})}export{qe as InspectorPanel};
|
package/dist/assets/{KeyboardShortcutsModal-L8FD783r.js → KeyboardShortcutsModal-BMt7r3Va.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as c,j as e,t as s,X as p,S as m}from"./styles-
|
|
1
|
+
import{r as c,j as e,t as s,X as p,S as m}from"./styles-CnQhCz_w.js";import{i as b,e as f,f as y,s as j,g,h as k,j as v}from"./App-Dbsatjme.js";import{K as N}from"./MenuMotion-BVlWdNZd.js";import"./index-CEBe4ppp.js";import"./PlacesRail-XEjyWavr.js";import"./monitor-EYAEQme8.js";function w({item:r,isMac:n}){const a=k(r,n);return e.jsxs("div",{className:"flex items-center justify-between gap-4 py-1.5",children:[e.jsx("span",{className:"text-[13px] text-ink",children:v(r)}),e.jsx("div",{className:"flex shrink-0 items-center gap-1",children:a.map((i,o)=>e.jsx("kbd",{className:"inline-flex min-w-[22px] items-center justify-center rounded-md border border-hairline/60 bg-control px-1.5 py-0.5 font-mono text-[12px] font-semibold text-ink shadow-xs",children:i},o))})]})}function P({open:r,onClose:n}){const[a,i]=c.useState(""),o=c.useRef(null),l=c.useRef(null),d=b(),h=f();if(c.useLayoutEffect(()=>{const t=o.current;if(!(!r||!t))return i(""),t.showModal(),l.current?.focus(),()=>t.close()},[r]),!r)return null;const x=y(j(h),a,d);return e.jsx("dialog",{ref:o,"aria-labelledby":"shortcuts-dialog-title",className:"m-auto w-[min(500px,calc(100%-32px))] max-h-[85vh] overflow-hidden rounded-2xl border border-hairline/50 bg-panel p-0 text-ink shadow-2xl backdrop:bg-black/60 backdrop:backdrop-blur-xs",onCancel:t=>{t.preventDefault(),n()},onKeyDown:t=>t.stopPropagation(),onMouseDown:t=>t.target===t.currentTarget&&n(),children:e.jsxs("div",{className:"flex max-h-[85vh] flex-col",children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-hairline/40 px-5 py-4",children:[e.jsxs("div",{className:"flex items-center gap-2.5",children:[e.jsx("span",{className:"flex size-8 shrink-0 items-center justify-center rounded-lg bg-accent/15 text-accent",children:e.jsx(N,{size:18})}),e.jsxs("div",{children:[e.jsx("h2",{id:"shortcuts-dialog-title",className:"text-[16px] font-semibold text-ink",children:s("shortcuts.title")}),e.jsx("p",{className:"text-[12px] text-ink-secondary",children:s("shortcuts.subtitle")})]})]}),e.jsx("button",{type:"button",onClick:n,"aria-label":s("shortcuts.close"),className:"rounded-lg p-1.5 text-ink-secondary hover:bg-raised hover:text-ink",children:e.jsx(p,{size:18})})]}),e.jsx("div",{className:"border-b border-hairline/30 px-5 py-2.5",children:e.jsxs("div",{className:"flex items-center gap-2 rounded-xl border border-hairline/40 bg-inset px-3 py-1.5 focus-within:border-focus",children:[e.jsx(m,{size:14,className:"shrink-0 text-ink-secondary"}),e.jsx("input",{ref:l,value:a,onChange:t=>i(t.target.value),placeholder:s("shortcuts.searchPlaceholder"),"aria-label":s("shortcuts.search"),className:"w-full bg-transparent text-[13px] text-ink placeholder:text-ink-secondary focus:outline-none"})]})}),e.jsx("div",{className:"flex-1 overflow-y-auto px-5 py-3 space-y-4",children:x.length===0?e.jsx("div",{className:"py-8 text-center text-[13px] text-ink-secondary",children:s("shortcuts.noMatch",{query:a})}):x.map(t=>e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"text-[11px] font-semibold uppercase tracking-wider text-ink-tertiary",children:g(t)}),e.jsx("div",{className:"divide-y divide-hairline/20 rounded-xl bg-card/40 px-3 py-1 border border-hairline/30",children:t.items.map(u=>e.jsx(w,{item:u,isMac:d},u.id))})]},t.category))}),e.jsxs("div",{className:"flex items-center justify-between border-t border-hairline/40 bg-card/30 px-5 py-2.5 text-[12px] text-ink-secondary",children:[e.jsxs("span",{children:[s("shortcuts.openHintBefore")," ",e.jsx("kbd",{className:"rounded bg-control px-1 py-0.5 font-mono text-[11px]",children:"?"})," ",s("shortcuts.openHintAfter")]}),e.jsx("button",{type:"button",onClick:n,className:"ui-button ui-button-md",children:s("common.done")})]})]})})}export{P as KeyboardShortcutsModal};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as n,t as s,j as e,a as o}from"./styles-
|
|
1
|
+
import{r as n,t as s,j as e,a as o}from"./styles-CnQhCz_w.js";import{c as H,t as M}from"./desktop-connection-Dfaq6k5a.js";import{u as B,d as F,L as D}from"./PlacesRail-XEjyWavr.js";import{S as K,R as O}from"./MenuMotion-BVlWdNZd.js";import{Q as P,U as Q}from"./App-Dbsatjme.js";import"./desktop-viewer-CF-OpSo0.js";import"./monitor-EYAEQme8.js";import"./index-CEBe4ppp.js";function Z({target:x,threadId:f,name:R,poster:b,expanded:r,onExpandedChange:h,onHandBack:E,handingBack:g,onUnreachable:v}){const j=n.useRef(null),a=n.useRef(null),[i,c]=n.useState("connecting"),[k,w]=n.useState(0),[l,y]=n.useState(""),N=n.useRef(!1),{dragProps:L,noDragStyle:u}=B(),T=F().capabilities.windowChrome==="mac-inset",C=n.useRef(v);C.current=v,n.useEffect(()=>{const t=new AbortController;let p,S;const V=()=>{c("disconnected"),N.current?k===0&&(S=setTimeout(()=>w(1),1e3)):C.current()};return c("connecting"),H(j.current,x,{threadId:f,signal:t.signal,events:{connected:()=>{N.current=!0,c("connected")},disconnected:V}}).then(m=>{if(t.signal.aborted)return m.disconnect();p=m,a.current=m},()=>{t.signal.aborted||V()}),()=>{t.abort(),clearTimeout(S),p?.disconnect(),a.current===p&&(a.current=null)}},[x,f,k]),n.useEffect(()=>{i==="connected"&&a.current?.focus({preventScroll:!0})},[r,i]);const z=s("computer.viewerTitle",{name:R}),A=e.jsxs("span",{className:"pointer-events-none flex items-center gap-1.5 rounded-full bg-black/70 px-2.5 py-1 text-[11px] font-medium text-white shadow-sm",children:[e.jsx("span",{className:"size-1.5 rounded-full bg-success","aria-hidden":"true"}),s("computer.inControl")]}),d="flex items-center gap-1.5 rounded-lg px-2.5 py-1.5 text-[12px] focus-visible:outline-2 focus-visible:outline-focus disabled:opacity-50";return e.jsxs("div",{"data-live-desktop":!0,"data-state":i,"data-expanded":r?"true":void 0,className:o(r?"fixed inset-0 z-[65] flex flex-col bg-app":"relative h-full w-full"),onKeyDown:t=>{r&&t.key==="Escape"&&!(t.target instanceof HTMLCanvasElement)&&h(!1)},children:[r&&e.jsxs("header",{...L,className:o("flex shrink-0 flex-wrap items-center gap-2 border-b border-hairline/40 bg-panel px-3 py-2",T&&"pl-[86px]"),children:[e.jsx("span",{className:"min-w-0 truncate text-[13px] font-medium text-ink",children:z}),A,e.jsxs("form",{style:u,className:"ml-auto flex min-w-0 items-center gap-1",onSubmit:t=>{t.preventDefault(),!(!a.current||i!=="connected"||!l)&&(M(a.current,l),y(""))},children:[e.jsx("input",{value:l,onChange:t=>y(t.target.value),maxLength:4096,autoComplete:"off",autoCapitalize:"off",spellCheck:!1,placeholder:s("desktopViewer.text"),"aria-label":s("desktopViewer.text"),className:"w-44 min-w-0 rounded-lg border border-hairline bg-inset px-2.5 py-1.5 text-[12px] text-ink outline-none focus:border-focus max-sm:w-28"}),e.jsx("button",{type:"submit",disabled:i!=="connected"||!l,title:s("desktopViewer.send"),"aria-label":s("desktopViewer.send"),className:o(d,"bg-control text-ink hover:bg-raised-hover"),children:e.jsx(K,{size:14,"aria-hidden":"true"})})]}),e.jsxs("button",{type:"button",style:u,onClick:()=>h(!1),className:o(d,"bg-control text-ink hover:bg-raised-hover"),children:[e.jsx(P,{size:14,"aria-hidden":"true"}),e.jsx("span",{className:"max-sm:hidden",children:s("desktopViewer.exitFullscreen")})]}),e.jsxs("button",{type:"button",style:u,onClick:E,disabled:g,className:o(d,"bg-accent font-medium text-accent-ink hover:brightness-110"),children:[g?e.jsx(D,{size:14,className:"animate-spin","aria-hidden":"true"}):e.jsx(Q,{size:14,"aria-hidden":"true"}),s("computer.handBack")]})]}),e.jsxs("div",{className:o("relative overflow-hidden bg-inset",r?"min-h-0 flex-1":"h-full w-full"),children:[b&&i!=="connected"&&e.jsx("img",{src:b,alt:"","aria-hidden":"true",className:"absolute inset-0 h-full w-full object-contain opacity-50"}),e.jsx("div",{ref:j,role:"application","aria-label":z,className:"absolute inset-0"}),i==="connecting"&&e.jsxs("div",{role:"status",className:"pointer-events-none absolute inset-0 flex items-center justify-center gap-2 text-[12px] text-ink-secondary",children:[e.jsx(D,{size:16,className:"animate-spin","aria-hidden":"true"}),s("desktopViewer.connecting")]}),i==="disconnected"&&e.jsxs("div",{role:"alert",className:"absolute inset-x-0 bottom-0 flex flex-col items-center gap-2 bg-card/95 p-3 text-center text-[12px] text-ink-secondary",children:[e.jsx("span",{children:s("desktopViewer.disconnected")}),e.jsxs("button",{type:"button",onClick:()=>w(t=>t+1),className:"flex items-center gap-1.5 rounded-md bg-control px-3 py-1.5 text-ink hover:bg-raised-hover",children:[e.jsx(O,{size:13,"aria-hidden":"true"}),s("desktopViewer.reconnect")]})]})]})]})}export{Z as LiveDesktop};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as l,r as i,p as ve,j as c,X as he,a as Q}from"./styles-BYp3glRK.js";import{u as we,W as xe,X as ee,Y as ae,n as q,D as be,U as te,Z as ke}from"./App-Dc7eNHIo.js";import{o as ce,s as ie,e as O,_ as W,n as ye,u as ge,L as T,f as Ne}from"./PlacesRail-msEDHUXY.js";import{M as le}from"./monitor-DagRnmYm.js";import{R as Ce}from"./MenuMotion-BjmjRIR3.js";import"./index-BEBI8eA5.js";function je(s,e){const u=(n,o)=>n.left<o.right&&n.right>o.left&&n.top<o.bottom&&n.bottom>o.top;return e.some(n=>n.visible&&n.rect.width>0&&n.rect.height>0&&(n.explicit||n.zIndex!==null&&n.zIndex>=10)&&s.some(o=>u(n.rect,o)))}async function Se(s,e,u,n){e&&e!==u&&(await s.setInteractive(null),await s.release(e));const o=await s.take(u);if(!o.held)throw new Error(l("vm.workspace.holdNotAcquired"));if(o.owned!==!0)return{status:"held-elsewhere",botId:u,snapshot:o};try{await s.setInteractive(n)}catch(d){throw await s.setInteractive(null).catch(()=>{}),await s.release(u).catch(()=>{}),d}return{status:"controlled",botId:u,snapshot:o}}async function $(s,e){return e?(await s.setInteractive(null).catch(()=>{}),s.release(e)):null}function ue(s){return s.filter(e=>e.computer==="vm"&&e.hidden!==!0).map(e=>e.id)}function Ee(s,e){const u=ue(s),n=u.includes(e)?e:u[0]??null;return[n,u.find(o=>o!==n)??null]}function Re(s,e,u){const n=[...s],o=e===0?1:0;return u&&n[o]===u&&(n[o]=n[e]),n[e]=u,n}function Le(s,e){const u=ue(e),n=new Set(u),o=[null,null];for(const d of[0,1]){const m=s[d];m&&n.delete(m)&&(o[d]=m)}for(const d of[0,1]){if(o[d])continue;const m=[...n][0];m&&(o[d]=m,n.delete(m))}return o}const ze=ce({mode:W(["shared","per-bot","pool"]).optional(),max_instances:ye().int().positive().optional(),container:W(["running","stopped","missing"]).optional(),network:W(["loopback","unsafe","unknown"]).optional(),security:W(["hardened","unsafe","unknown"]).optional(),persistence:W(["durable","unsafe","unknown"]).optional(),desktopReady:O().optional(),ready:O().optional(),viewer_url:ie().min(1).optional()});function de(s){const e=ze.safeParse(s);return e.success?e.data:null}function H(s){const e=de(s),u=e?.mode??"unknown",n=e?.container??"unknown",o=e?.network??"unknown",d=e?.security??"unknown",m=e?.persistence??"unknown",w=e?.max_instances??0,h=e?.desktopReady===!0,x=!!(e?.ready===!0&&n==="running"&&o==="loopback"&&d==="hardened"&&m==="durable"&&h);return{mode:u,maxInstances:w,container:n,network:o,security:d,persistence:m,desktopReady:h,ready:x}}function Ve(s){const e=de(s);return!e||!H(s).ready?null:e.viewer_url??null}const X=["local-vm-workspace:left","local-vm-workspace:right"],pe=ce({held:O(),helpReason:ie().nullable(),help:Ne().optional().transform(ke),owned:O().optional(),acquired:O().optional(),released:O().optional()});async function ne(s,e,u){const n=await q(`/api/bots/${s}/computer/control`,{method:"POST",body:JSON.stringify({action:e,controlLeaseId:u})}),o=pe.safeParse(n);if(!o.success)throw new Error("invalid-control-snapshot");return o.data}async function Oe(s){const e=pe.safeParse(await q(`/api/bots/${s}/computer/control`));if(!e.success)throw new Error("invalid-control-snapshot");return e.data}function re(s,e){fetch(`/api/bots/${s}/computer/control`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({action:"release",controlLeaseId:e}),keepalive:!0}).then(async u=>{u.ok}).catch(()=>{})}async function se(s,e){return!0}function D(s,e,u){s({type:"computerControl",botId:e,held:u.held,helpReason:u.helpReason,help:u.help??null})}function oe(s){const e=s.current?.getBoundingClientRect();return!e||e.width<1||e.height<1?null:{x:Math.round(e.left),y:Math.round(e.top),width:Math.round(e.width),height:Math.round(e.height)}}const Be=['[aria-modal="true"]','[role="dialog"]','[role="menu"]',"[popover]","[data-native-view-overlay]",".fixed",".absolute"].join(",");function Ie(){const s=[...document.querySelectorAll("[data-native-view-host]")],e=s.map(n=>n.getBoundingClientRect()).filter(n=>n.width>0&&n.height>0);if(e.length===0)return!1;const u=[...document.querySelectorAll(Be)].filter(n=>!s.some(o=>n===o||n.contains(o)||o.contains(n))).map(n=>{const o=window.getComputedStyle(n),d=n.matches('[aria-modal="true"], [role="dialog"], [role="menu"], [popover], [data-native-view-overlay]'),m=Number.parseInt(o.zIndex,10);return{rect:n.getBoundingClientRect(),explicit:d,visible:o.display!=="none"&&o.visibility!=="hidden"&&Number(o.opacity)!==0,zIndex:Number.isFinite(m)?m:null}});return je(e,u)}function We(s){const[e,u]=i.useState(!1);return i.useEffect(()=>{let n=0;const o=()=>u(Ie()),d=()=>{n||(n=requestAnimationFrame(()=>{n=0,o()}))};o();const m=new MutationObserver(d);m.observe(document.body,{subtree:!0,childList:!0,attributes:!0,attributeFilter:["class","style","aria-hidden","aria-modal","role","open","popover"]});const w=new ResizeObserver(d);w.observe(document.body);for(const x of document.querySelectorAll("[data-native-view-host]"))w.observe(x);const h=["toggle","animationstart","animationend","transitionstart","transitionend"];for(const x of h)document.addEventListener(x,d,!0);return window.addEventListener("resize",d),window.addEventListener("scroll",d,!0),()=>{n&&cancelAnimationFrame(n),m.disconnect(),w.disconnect();for(const x of h)document.removeEventListener(x,d,!0);window.removeEventListener("resize",d),window.removeEventListener("scroll",d,!0)}},[]),s||e}function _e(s,e){return s?s.container==="missing"?l("vm.workspace.status.missing"):s.container==="stopped"?l("vm.workspace.status.stopped"):s.ready?e==="error"?l("vm.workspace.status.viewerUnavailable"):e!=="ready"?l("vm.workspace.status.connecting"):l("vm.workspace.status.live"):l("vm.workspace.status.unavailable"):l("vm.workspace.status.checking")}function Ae({index:s,bot:e,bots:u,otherBotId:n,obscured:o,active:d,heldElsewhere:m,controlPending:w,onSelect:h,onTake:x,onRelease:B,onOpenComputer:_}){const v=X[s],p=e?.id??null,I=e?.name??l("vm.workspace.localVm"),b=i.useRef(null),k=i.useRef(Promise.resolve()),z=i.useRef(o),[A,V]=i.useState(0),[j,N]=i.useState(null),[C,y]=i.useState({contextId:v,open:!1,status:"closed",interactive:!1}),[E,g]=i.useState(null),R=i.useCallback(async t=>{if(p)try{const a=await q(`/api/bots/${p}/local-computer`,{signal:t});t?.aborted||N(H(a))}catch{}},[p]),F=i.useRef(R);i.useEffect(()=>{F.current=R},[R]),i.useEffect(()=>{z.current=o},[o]),i.useEffect(()=>window.ogb?.desktopWorkspace?.onState(a=>{a.contextId===v&&(y(a),(a.status==="error"||a.status==="closed")&&F.current())}),[v]),i.useEffect(()=>{const t=window.ogb?.desktopWorkspace;let a=!0;const f=new AbortController;N(null),g(null),y({contextId:v,open:!1,status:"closed",interactive:!1});const M=async()=>{if(t&&await t.close(v).catch(()=>{}),!(!a||!p)){if(!t){g(l("vm.workspace.desktopRequired"));return}try{const S=await q(`/api/bots/${p}/local-computer`,{signal:f.signal});if(!a)return;const J=H(S);N(J);const Y=Ve(S);if(!J.ready||!Y||(await new Promise(me=>{let G=!1;const K=()=>{G||(G=!0,me())},fe=setTimeout(K,100);requestAnimationFrame(()=>{clearTimeout(fe),K()})}),!a))return;const U=oe(b);if(!U)throw new Error("layout-unavailable");const Z=await t.open({contextId:v,url:Y,title:l("vm.workspace.windowTitle",{name:I}),bounds:U});if(!a){await t.close(v).catch(()=>{});return}y(Z),await t.layout([{contextId:v,bounds:U,visible:!z.current&&Z.open}])}catch(S){if(!a||f.signal.aborted)return;g(S instanceof Error&&S.message==="layout-unavailable"?l("vm.workspace.layoutUnavailable"):l("vm.workspace.connectFailed"))}}};return k.current=k.current.catch(()=>{}).then(M),()=>{a=!1,f.abort(),t&&(k.current=k.current.catch(()=>{}).then(()=>t.close(v).then(()=>{}).catch(()=>{})))}},[p,I,v,A]),i.useEffect(()=>{if(!p)return;const t=new AbortController,a=window.setInterval(()=>{R(t.signal)},3e4);return()=>{t.abort(),window.clearInterval(a)}},[p,R]);const L=i.useCallback(()=>{const t=window.ogb?.desktopWorkspace,a=oe(b);!t||!a||!C.open||t.layout([{contextId:v,bounds:a,visible:!o}]).catch(()=>g(l("vm.workspace.positionFailed")))},[v,C.open,o]);i.useEffect(()=>{const t=b.current;if(!t)return;const a=new ResizeObserver(L);a.observe(t),window.addEventListener("resize",L);const f=requestAnimationFrame(L);return()=>{cancelAnimationFrame(f),a.disconnect(),window.removeEventListener("resize",L)}},[L]);const P=_e(j,C.status),r=!!(e&&j?.ready&&C.status==="ready"&&C.open);return c.jsxs("section",{className:Q("flex min-h-0 min-w-0 flex-col overflow-hidden rounded-xl border bg-panel",d?"border-accent/80 shadow-[0_0_0_1px_rgb(var(--accent)/0.35)]":"border-hairline/50"),children:[c.jsxs("div",{className:"flex min-h-[68px] items-center gap-3 border-b border-hairline/40 px-3 py-2.5",children:[c.jsxs("div",{className:"min-w-0 flex-1",children:[c.jsx("label",{className:"sr-only",htmlFor:`local-vm-slot-${s}`,children:l("vm.workspace.paneLabel",{number:s+1})}),c.jsxs(be,{size:"sm",className:"w-full",id:`local-vm-slot-${s}`,value:e?.id??"",onChange:t=>h(t.target.value||null),disabled:w,children:[c.jsx("option",{value:"",children:l("vm.workspace.chooseBot")}),u.map(t=>c.jsx("option",{value:t.id,disabled:t.id===n,children:t.name},t.id))]}),c.jsxs("div",{className:"mt-1 flex items-center gap-1.5 text-[11px] text-ink-secondary",children:[c.jsx("span",{className:Q("h-1.5 w-1.5 rounded-full",d?"bg-accent":C.status==="ready"?"bg-success":C.status==="error"?"bg-danger":"bg-ink-secondary/50")}),d?l("vm.workspace.youHaveControl"):m?l("vm.workspace.controlElsewhere"):P]})]}),e&&d?c.jsxs("button",{type:"button",onClick:B,disabled:w,className:"flex shrink-0 items-center gap-1.5 rounded-lg bg-accent px-2.5 py-2 text-[12px] font-medium text-white hover:brightness-110 disabled:opacity-50",children:[w?c.jsx(T,{size:13,className:"animate-spin"}):c.jsx(te,{size:13}),l("vm.workspace.handBack")]}):e?c.jsxs("button",{type:"button",onClick:()=>x(e.id),disabled:!r||w||m,className:"flex shrink-0 items-center gap-1.5 rounded-lg bg-raised px-2.5 py-2 text-[12px] text-ink hover:bg-raised-hover disabled:opacity-45",title:l("vm.workspace.takeControlTitle"),children:[w?c.jsx(T,{size:13,className:"animate-spin"}):c.jsx(te,{size:13}),m?l("vm.workspace.heldElsewhere"):l("vm.workspace.takeControl")]}):null]}),c.jsx("div",{ref:b,"data-native-view-host":!0,className:"relative min-h-0 flex-1 bg-[#070707]",children:c.jsx("div",{className:"absolute inset-0 flex items-center justify-center p-6 text-center",children:e?!j&&!E?c.jsxs("div",{className:"flex items-center gap-2 text-[12px] text-ink-secondary",children:[c.jsx(T,{size:15,className:"animate-spin"})," ",l("vm.workspace.checking",{name:e.name})]}):j?.ready&&C.status!=="error"&&!E?c.jsxs("div",{className:"flex items-center gap-2 text-[12px] text-ink-secondary",children:[c.jsx(T,{size:15,className:"animate-spin"})," ",l("vm.workspace.connecting")]}):c.jsxs("div",{className:"flex max-w-[300px] flex-col items-center gap-3 text-ink-secondary",children:[c.jsx(ae,{size:21,className:"text-warning"}),c.jsx("div",{className:"text-[12px] leading-relaxed",children:E??(j?.container==="missing"?l("vm.workspace.notCreated",{name:e.name}):j?.container==="stopped"?l("vm.workspace.stopped",{name:e.name}):l("vm.workspace.notReady",{name:e.name}))}),c.jsxs("div",{className:"flex gap-2",children:[c.jsxs("button",{type:"button",onClick:()=>V(t=>t+1),className:"flex items-center gap-1.5 rounded-lg bg-raised px-3 py-2 text-[12px] text-ink hover:bg-raised-hover",children:[c.jsx(Ce,{size:13})," ",l("vm.workspace.retryStatus")]}),c.jsx("button",{type:"button",onClick:()=>_(e.id),className:"rounded-lg bg-raised px-3 py-2 text-[12px] text-ink hover:bg-raised-hover",children:l("vm.workspace.openComputer")})]})]}):c.jsxs("div",{className:"flex max-w-[260px] flex-col items-center gap-2 text-ink-secondary",children:[c.jsx(le,{size:22}),c.jsx("span",{className:"text-[12px]",children:l("vm.workspace.chooseAnother")})]})})})]})}function $e({primaryBotId:s,overlayOpen:e,onClose:u,onOpenComputer:n}){const{state:o,dispatch:d}=we(),{dragProps:m}=ge(),w=i.useMemo(()=>o.bots.filter(r=>r.computer==="vm"&&!r.hidden),[o.bots]),[h,x]=i.useState(()=>Ee(o.bots,s)),B=i.useRef(h),[_,v]=i.useState(null),p=i.useRef(null),I=i.useRef(null),b=I.current??xe();I.current=b;const k=i.useRef(!1),z=i.useRef(!0),[A,V]=i.useState(!1),[j,N]=i.useState(null),C=We(e);i.useEffect(()=>{B.current=h},[h]);const y=i.useMemo(()=>({async take(r){const t=await ee({action:"take",syncNativeBrowser:!0,requestControl:a=>ne(r,a,b),setNativeBrowserControl:a=>se()});return D(d,r,t),t.held&&t.owned===!0?p.current=r:p.current===r&&(p.current=null),t},async release(r){const t=await ee({action:"release",syncNativeBrowser:!0,requestControl:a=>ne(r,a,b),setNativeBrowserControl:a=>se()});return D(d,r,t),p.current===r&&(p.current=null),t},async setInteractive(r){const t=window.ogb?.desktopWorkspace;if(!t)throw new Error(l("vm.workspace.bridgeUnavailable"));return t.setInteractive(r)}}),[b,d]);i.useEffect(()=>{x(r=>{const t=Le(r,o.bots);return t[0]===r[0]&&t[1]===r[1]?r:t})},[o.bots]),i.useEffect(()=>{let r=!0;return(async()=>{for(const a of h)if(a)try{const f=await Oe(a);r&&D(d,a,f)}catch{}})(),()=>{r=!1}},[d,h]),i.useEffect(()=>{const r=p.current;!r||h.includes(r)||$(y,r).then(()=>{v(null)}).catch(()=>{N(l("vm.workspace.handoffFailed"))})},[y,h]),i.useEffect(()=>(z.current=!0,()=>{z.current=!1;const r=p.current,t=window.ogb?.desktopWorkspace;if(!t){r&&re(r,b);return}t.setInteractive(null).catch(()=>{}).then(()=>(r&&re(r,b),t.close())).catch(()=>{})}),[b]);const E=i.useCallback(r=>{const t=B.current.indexOf(r);return t<0?null:X[t]},[]),g=i.useCallback(async()=>{const r=p.current;if(!r)return!0;if(k.current)return!1;k.current=!0,V(!0),N(null);try{return await $(y,r),v(null),!0}catch{return N(l("vm.workspace.handBackFailed",{app:ve()})),!1}finally{k.current=!1,V(!1)}},[y]),R=i.useCallback(async r=>{if(k.current||p.current===r)return;const t=window.ogb?.desktopWorkspace,a=E(r);if(!(!t||!a)){k.current=!0,V(!0),N(null);try{const f={...y,async setInteractive(S){if(S&&E(r)!==S)throw new Error(l("vm.workspace.paneChanged"));return y.setInteractive(S)}},M=await Se(f,p.current,r,a);if(v(null),M.status==="held-elsewhere"){N(l("vm.workspace.alreadyControlled"));return}if(!z.current){await $(y,r).catch(()=>{});return}v(r)}catch{v(p.current),N(l("vm.workspace.switchFailed"))}finally{k.current=!1,V(!1)}}},[E,y]),F=i.useCallback(async(r,t)=>{if(k.current)return;const a=B.current[r];a!==t&&(a&&p.current===a&&!await g()||x(f=>Re(f,r,t)))},[g]),L=i.useCallback(async()=>{p.current&&!await g()||u()},[g,u]),P=i.useCallback(async r=>{p.current&&!await g()||n(r)},[g,n]);return c.jsxs("main",{className:"flex h-full min-w-0 flex-1 flex-col bg-app",children:[c.jsxs("header",{...m,className:"flex min-h-[60px] items-center gap-3 border-b border-hairline/40 px-5 py-3",children:[c.jsx("div",{className:"flex h-9 w-9 shrink-0 items-center justify-center rounded-lg bg-accent/15 text-accent",children:c.jsx(le,{size:18})}),c.jsxs("div",{className:"min-w-0 flex-1",children:[c.jsx("h1",{className:"truncate text-[14px] font-semibold text-ink",children:l("vm.workspace.viewTitle")}),c.jsx("p",{className:"truncate text-[12px] text-ink-secondary",children:l("vm.workspace.viewSubtitle")})]}),c.jsx("button",{type:"button",onClick:()=>{L()},disabled:A,className:"rounded-md p-1.5 text-ink-secondary hover:bg-raised hover:text-ink disabled:opacity-50","aria-label":l("vm.workspace.closeView"),children:c.jsx(he,{size:18})})]}),j&&c.jsxs("div",{className:"mx-3 mt-3 flex items-center gap-2 rounded-lg border border-danger/30 bg-danger/10 px-3 py-2 text-[12px] text-danger",children:[c.jsx(ae,{size:14,className:"shrink-0"})," ",j]}),c.jsx("div",{className:"grid min-h-0 flex-1 grid-cols-2 gap-3 p-3",children:[0,1].map(r=>{const t=h[r],a=w.find(f=>f.id===t)??null;return c.jsx(Ae,{index:r,bot:a,bots:w,otherBotId:h[r===0?1:0],obscured:C,active:!!(a&&_===a.id),heldElsewhere:!!(a&&o.computerControl[a.id]?.held&&_!==a.id),controlPending:A,onSelect:f=>{F(r,f)},onTake:f=>{R(f)},onRelease:()=>{g()},onOpenComputer:f=>{P(f)}},X[r])})})]})}export{$e as LocalVmWorkspace};
|
|
1
|
+
import{t as l,r as i,p as ve,j as c,X as he,a as Q}from"./styles-CnQhCz_w.js";import{u as we,W as xe,X as ee,Y as ae,n as q,D as be,U as te,Z as ke}from"./App-Dbsatjme.js";import{o as ce,s as ie,e as O,_ as W,n as ye,u as ge,L as T,f as Ne}from"./PlacesRail-XEjyWavr.js";import{M as le}from"./monitor-EYAEQme8.js";import{R as Ce}from"./MenuMotion-BVlWdNZd.js";import"./index-CEBe4ppp.js";function je(s,e){const u=(n,o)=>n.left<o.right&&n.right>o.left&&n.top<o.bottom&&n.bottom>o.top;return e.some(n=>n.visible&&n.rect.width>0&&n.rect.height>0&&(n.explicit||n.zIndex!==null&&n.zIndex>=10)&&s.some(o=>u(n.rect,o)))}async function Se(s,e,u,n){e&&e!==u&&(await s.setInteractive(null),await s.release(e));const o=await s.take(u);if(!o.held)throw new Error(l("vm.workspace.holdNotAcquired"));if(o.owned!==!0)return{status:"held-elsewhere",botId:u,snapshot:o};try{await s.setInteractive(n)}catch(d){throw await s.setInteractive(null).catch(()=>{}),await s.release(u).catch(()=>{}),d}return{status:"controlled",botId:u,snapshot:o}}async function $(s,e){return e?(await s.setInteractive(null).catch(()=>{}),s.release(e)):null}function ue(s){return s.filter(e=>e.computer==="vm"&&e.hidden!==!0).map(e=>e.id)}function Ee(s,e){const u=ue(s),n=u.includes(e)?e:u[0]??null;return[n,u.find(o=>o!==n)??null]}function Re(s,e,u){const n=[...s],o=e===0?1:0;return u&&n[o]===u&&(n[o]=n[e]),n[e]=u,n}function Le(s,e){const u=ue(e),n=new Set(u),o=[null,null];for(const d of[0,1]){const m=s[d];m&&n.delete(m)&&(o[d]=m)}for(const d of[0,1]){if(o[d])continue;const m=[...n][0];m&&(o[d]=m,n.delete(m))}return o}const ze=ce({mode:W(["shared","per-bot","pool"]).optional(),max_instances:ye().int().positive().optional(),container:W(["running","stopped","missing"]).optional(),network:W(["loopback","unsafe","unknown"]).optional(),security:W(["hardened","unsafe","unknown"]).optional(),persistence:W(["durable","unsafe","unknown"]).optional(),desktopReady:O().optional(),ready:O().optional(),viewer_url:ie().min(1).optional()});function de(s){const e=ze.safeParse(s);return e.success?e.data:null}function H(s){const e=de(s),u=e?.mode??"unknown",n=e?.container??"unknown",o=e?.network??"unknown",d=e?.security??"unknown",m=e?.persistence??"unknown",w=e?.max_instances??0,h=e?.desktopReady===!0,x=!!(e?.ready===!0&&n==="running"&&o==="loopback"&&d==="hardened"&&m==="durable"&&h);return{mode:u,maxInstances:w,container:n,network:o,security:d,persistence:m,desktopReady:h,ready:x}}function Ve(s){const e=de(s);return!e||!H(s).ready?null:e.viewer_url??null}const X=["local-vm-workspace:left","local-vm-workspace:right"],pe=ce({held:O(),helpReason:ie().nullable(),help:Ne().optional().transform(ke),owned:O().optional(),acquired:O().optional(),released:O().optional()});async function ne(s,e,u){const n=await q(`/api/bots/${s}/computer/control`,{method:"POST",body:JSON.stringify({action:e,controlLeaseId:u})}),o=pe.safeParse(n);if(!o.success)throw new Error("invalid-control-snapshot");return o.data}async function Oe(s){const e=pe.safeParse(await q(`/api/bots/${s}/computer/control`));if(!e.success)throw new Error("invalid-control-snapshot");return e.data}function re(s,e){fetch(`/api/bots/${s}/computer/control`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({action:"release",controlLeaseId:e}),keepalive:!0}).then(async u=>{u.ok}).catch(()=>{})}async function se(s,e){return!0}function D(s,e,u){s({type:"computerControl",botId:e,held:u.held,helpReason:u.helpReason,help:u.help??null})}function oe(s){const e=s.current?.getBoundingClientRect();return!e||e.width<1||e.height<1?null:{x:Math.round(e.left),y:Math.round(e.top),width:Math.round(e.width),height:Math.round(e.height)}}const Be=['[aria-modal="true"]','[role="dialog"]','[role="menu"]',"[popover]","[data-native-view-overlay]",".fixed",".absolute"].join(",");function Ie(){const s=[...document.querySelectorAll("[data-native-view-host]")],e=s.map(n=>n.getBoundingClientRect()).filter(n=>n.width>0&&n.height>0);if(e.length===0)return!1;const u=[...document.querySelectorAll(Be)].filter(n=>!s.some(o=>n===o||n.contains(o)||o.contains(n))).map(n=>{const o=window.getComputedStyle(n),d=n.matches('[aria-modal="true"], [role="dialog"], [role="menu"], [popover], [data-native-view-overlay]'),m=Number.parseInt(o.zIndex,10);return{rect:n.getBoundingClientRect(),explicit:d,visible:o.display!=="none"&&o.visibility!=="hidden"&&Number(o.opacity)!==0,zIndex:Number.isFinite(m)?m:null}});return je(e,u)}function We(s){const[e,u]=i.useState(!1);return i.useEffect(()=>{let n=0;const o=()=>u(Ie()),d=()=>{n||(n=requestAnimationFrame(()=>{n=0,o()}))};o();const m=new MutationObserver(d);m.observe(document.body,{subtree:!0,childList:!0,attributes:!0,attributeFilter:["class","style","aria-hidden","aria-modal","role","open","popover"]});const w=new ResizeObserver(d);w.observe(document.body);for(const x of document.querySelectorAll("[data-native-view-host]"))w.observe(x);const h=["toggle","animationstart","animationend","transitionstart","transitionend"];for(const x of h)document.addEventListener(x,d,!0);return window.addEventListener("resize",d),window.addEventListener("scroll",d,!0),()=>{n&&cancelAnimationFrame(n),m.disconnect(),w.disconnect();for(const x of h)document.removeEventListener(x,d,!0);window.removeEventListener("resize",d),window.removeEventListener("scroll",d,!0)}},[]),s||e}function _e(s,e){return s?s.container==="missing"?l("vm.workspace.status.missing"):s.container==="stopped"?l("vm.workspace.status.stopped"):s.ready?e==="error"?l("vm.workspace.status.viewerUnavailable"):e!=="ready"?l("vm.workspace.status.connecting"):l("vm.workspace.status.live"):l("vm.workspace.status.unavailable"):l("vm.workspace.status.checking")}function Ae({index:s,bot:e,bots:u,otherBotId:n,obscured:o,active:d,heldElsewhere:m,controlPending:w,onSelect:h,onTake:x,onRelease:B,onOpenComputer:_}){const v=X[s],p=e?.id??null,I=e?.name??l("vm.workspace.localVm"),b=i.useRef(null),k=i.useRef(Promise.resolve()),z=i.useRef(o),[A,V]=i.useState(0),[j,N]=i.useState(null),[C,y]=i.useState({contextId:v,open:!1,status:"closed",interactive:!1}),[E,g]=i.useState(null),R=i.useCallback(async t=>{if(p)try{const a=await q(`/api/bots/${p}/local-computer`,{signal:t});t?.aborted||N(H(a))}catch{}},[p]),F=i.useRef(R);i.useEffect(()=>{F.current=R},[R]),i.useEffect(()=>{z.current=o},[o]),i.useEffect(()=>window.ogb?.desktopWorkspace?.onState(a=>{a.contextId===v&&(y(a),(a.status==="error"||a.status==="closed")&&F.current())}),[v]),i.useEffect(()=>{const t=window.ogb?.desktopWorkspace;let a=!0;const f=new AbortController;N(null),g(null),y({contextId:v,open:!1,status:"closed",interactive:!1});const M=async()=>{if(t&&await t.close(v).catch(()=>{}),!(!a||!p)){if(!t){g(l("vm.workspace.desktopRequired"));return}try{const S=await q(`/api/bots/${p}/local-computer`,{signal:f.signal});if(!a)return;const J=H(S);N(J);const Y=Ve(S);if(!J.ready||!Y||(await new Promise(me=>{let G=!1;const K=()=>{G||(G=!0,me())},fe=setTimeout(K,100);requestAnimationFrame(()=>{clearTimeout(fe),K()})}),!a))return;const U=oe(b);if(!U)throw new Error("layout-unavailable");const Z=await t.open({contextId:v,url:Y,title:l("vm.workspace.windowTitle",{name:I}),bounds:U});if(!a){await t.close(v).catch(()=>{});return}y(Z),await t.layout([{contextId:v,bounds:U,visible:!z.current&&Z.open}])}catch(S){if(!a||f.signal.aborted)return;g(S instanceof Error&&S.message==="layout-unavailable"?l("vm.workspace.layoutUnavailable"):l("vm.workspace.connectFailed"))}}};return k.current=k.current.catch(()=>{}).then(M),()=>{a=!1,f.abort(),t&&(k.current=k.current.catch(()=>{}).then(()=>t.close(v).then(()=>{}).catch(()=>{})))}},[p,I,v,A]),i.useEffect(()=>{if(!p)return;const t=new AbortController,a=window.setInterval(()=>{R(t.signal)},3e4);return()=>{t.abort(),window.clearInterval(a)}},[p,R]);const L=i.useCallback(()=>{const t=window.ogb?.desktopWorkspace,a=oe(b);!t||!a||!C.open||t.layout([{contextId:v,bounds:a,visible:!o}]).catch(()=>g(l("vm.workspace.positionFailed")))},[v,C.open,o]);i.useEffect(()=>{const t=b.current;if(!t)return;const a=new ResizeObserver(L);a.observe(t),window.addEventListener("resize",L);const f=requestAnimationFrame(L);return()=>{cancelAnimationFrame(f),a.disconnect(),window.removeEventListener("resize",L)}},[L]);const P=_e(j,C.status),r=!!(e&&j?.ready&&C.status==="ready"&&C.open);return c.jsxs("section",{className:Q("flex min-h-0 min-w-0 flex-col overflow-hidden rounded-xl border bg-panel",d?"border-accent/80 shadow-[0_0_0_1px_rgb(var(--accent)/0.35)]":"border-hairline/50"),children:[c.jsxs("div",{className:"flex min-h-[68px] items-center gap-3 border-b border-hairline/40 px-3 py-2.5",children:[c.jsxs("div",{className:"min-w-0 flex-1",children:[c.jsx("label",{className:"sr-only",htmlFor:`local-vm-slot-${s}`,children:l("vm.workspace.paneLabel",{number:s+1})}),c.jsxs(be,{size:"sm",className:"w-full",id:`local-vm-slot-${s}`,value:e?.id??"",onChange:t=>h(t.target.value||null),disabled:w,children:[c.jsx("option",{value:"",children:l("vm.workspace.chooseBot")}),u.map(t=>c.jsx("option",{value:t.id,disabled:t.id===n,children:t.name},t.id))]}),c.jsxs("div",{className:"mt-1 flex items-center gap-1.5 text-[11px] text-ink-secondary",children:[c.jsx("span",{className:Q("h-1.5 w-1.5 rounded-full",d?"bg-accent":C.status==="ready"?"bg-success":C.status==="error"?"bg-danger":"bg-ink-secondary/50")}),d?l("vm.workspace.youHaveControl"):m?l("vm.workspace.controlElsewhere"):P]})]}),e&&d?c.jsxs("button",{type:"button",onClick:B,disabled:w,className:"flex shrink-0 items-center gap-1.5 rounded-lg bg-accent px-2.5 py-2 text-[12px] font-medium text-white hover:brightness-110 disabled:opacity-50",children:[w?c.jsx(T,{size:13,className:"animate-spin"}):c.jsx(te,{size:13}),l("vm.workspace.handBack")]}):e?c.jsxs("button",{type:"button",onClick:()=>x(e.id),disabled:!r||w||m,className:"flex shrink-0 items-center gap-1.5 rounded-lg bg-raised px-2.5 py-2 text-[12px] text-ink hover:bg-raised-hover disabled:opacity-45",title:l("vm.workspace.takeControlTitle"),children:[w?c.jsx(T,{size:13,className:"animate-spin"}):c.jsx(te,{size:13}),m?l("vm.workspace.heldElsewhere"):l("vm.workspace.takeControl")]}):null]}),c.jsx("div",{ref:b,"data-native-view-host":!0,className:"relative min-h-0 flex-1 bg-[#070707]",children:c.jsx("div",{className:"absolute inset-0 flex items-center justify-center p-6 text-center",children:e?!j&&!E?c.jsxs("div",{className:"flex items-center gap-2 text-[12px] text-ink-secondary",children:[c.jsx(T,{size:15,className:"animate-spin"})," ",l("vm.workspace.checking",{name:e.name})]}):j?.ready&&C.status!=="error"&&!E?c.jsxs("div",{className:"flex items-center gap-2 text-[12px] text-ink-secondary",children:[c.jsx(T,{size:15,className:"animate-spin"})," ",l("vm.workspace.connecting")]}):c.jsxs("div",{className:"flex max-w-[300px] flex-col items-center gap-3 text-ink-secondary",children:[c.jsx(ae,{size:21,className:"text-warning"}),c.jsx("div",{className:"text-[12px] leading-relaxed",children:E??(j?.container==="missing"?l("vm.workspace.notCreated",{name:e.name}):j?.container==="stopped"?l("vm.workspace.stopped",{name:e.name}):l("vm.workspace.notReady",{name:e.name}))}),c.jsxs("div",{className:"flex gap-2",children:[c.jsxs("button",{type:"button",onClick:()=>V(t=>t+1),className:"flex items-center gap-1.5 rounded-lg bg-raised px-3 py-2 text-[12px] text-ink hover:bg-raised-hover",children:[c.jsx(Ce,{size:13})," ",l("vm.workspace.retryStatus")]}),c.jsx("button",{type:"button",onClick:()=>_(e.id),className:"rounded-lg bg-raised px-3 py-2 text-[12px] text-ink hover:bg-raised-hover",children:l("vm.workspace.openComputer")})]})]}):c.jsxs("div",{className:"flex max-w-[260px] flex-col items-center gap-2 text-ink-secondary",children:[c.jsx(le,{size:22}),c.jsx("span",{className:"text-[12px]",children:l("vm.workspace.chooseAnother")})]})})})]})}function $e({primaryBotId:s,overlayOpen:e,onClose:u,onOpenComputer:n}){const{state:o,dispatch:d}=we(),{dragProps:m}=ge(),w=i.useMemo(()=>o.bots.filter(r=>r.computer==="vm"&&!r.hidden),[o.bots]),[h,x]=i.useState(()=>Ee(o.bots,s)),B=i.useRef(h),[_,v]=i.useState(null),p=i.useRef(null),I=i.useRef(null),b=I.current??xe();I.current=b;const k=i.useRef(!1),z=i.useRef(!0),[A,V]=i.useState(!1),[j,N]=i.useState(null),C=We(e);i.useEffect(()=>{B.current=h},[h]);const y=i.useMemo(()=>({async take(r){const t=await ee({action:"take",syncNativeBrowser:!0,requestControl:a=>ne(r,a,b),setNativeBrowserControl:a=>se()});return D(d,r,t),t.held&&t.owned===!0?p.current=r:p.current===r&&(p.current=null),t},async release(r){const t=await ee({action:"release",syncNativeBrowser:!0,requestControl:a=>ne(r,a,b),setNativeBrowserControl:a=>se()});return D(d,r,t),p.current===r&&(p.current=null),t},async setInteractive(r){const t=window.ogb?.desktopWorkspace;if(!t)throw new Error(l("vm.workspace.bridgeUnavailable"));return t.setInteractive(r)}}),[b,d]);i.useEffect(()=>{x(r=>{const t=Le(r,o.bots);return t[0]===r[0]&&t[1]===r[1]?r:t})},[o.bots]),i.useEffect(()=>{let r=!0;return(async()=>{for(const a of h)if(a)try{const f=await Oe(a);r&&D(d,a,f)}catch{}})(),()=>{r=!1}},[d,h]),i.useEffect(()=>{const r=p.current;!r||h.includes(r)||$(y,r).then(()=>{v(null)}).catch(()=>{N(l("vm.workspace.handoffFailed"))})},[y,h]),i.useEffect(()=>(z.current=!0,()=>{z.current=!1;const r=p.current,t=window.ogb?.desktopWorkspace;if(!t){r&&re(r,b);return}t.setInteractive(null).catch(()=>{}).then(()=>(r&&re(r,b),t.close())).catch(()=>{})}),[b]);const E=i.useCallback(r=>{const t=B.current.indexOf(r);return t<0?null:X[t]},[]),g=i.useCallback(async()=>{const r=p.current;if(!r)return!0;if(k.current)return!1;k.current=!0,V(!0),N(null);try{return await $(y,r),v(null),!0}catch{return N(l("vm.workspace.handBackFailed",{app:ve()})),!1}finally{k.current=!1,V(!1)}},[y]),R=i.useCallback(async r=>{if(k.current||p.current===r)return;const t=window.ogb?.desktopWorkspace,a=E(r);if(!(!t||!a)){k.current=!0,V(!0),N(null);try{const f={...y,async setInteractive(S){if(S&&E(r)!==S)throw new Error(l("vm.workspace.paneChanged"));return y.setInteractive(S)}},M=await Se(f,p.current,r,a);if(v(null),M.status==="held-elsewhere"){N(l("vm.workspace.alreadyControlled"));return}if(!z.current){await $(y,r).catch(()=>{});return}v(r)}catch{v(p.current),N(l("vm.workspace.switchFailed"))}finally{k.current=!1,V(!1)}}},[E,y]),F=i.useCallback(async(r,t)=>{if(k.current)return;const a=B.current[r];a!==t&&(a&&p.current===a&&!await g()||x(f=>Re(f,r,t)))},[g]),L=i.useCallback(async()=>{p.current&&!await g()||u()},[g,u]),P=i.useCallback(async r=>{p.current&&!await g()||n(r)},[g,n]);return c.jsxs("main",{className:"flex h-full min-w-0 flex-1 flex-col bg-app",children:[c.jsxs("header",{...m,className:"flex min-h-[60px] items-center gap-3 border-b border-hairline/40 px-5 py-3",children:[c.jsx("div",{className:"flex h-9 w-9 shrink-0 items-center justify-center rounded-lg bg-accent/15 text-accent",children:c.jsx(le,{size:18})}),c.jsxs("div",{className:"min-w-0 flex-1",children:[c.jsx("h1",{className:"truncate text-[14px] font-semibold text-ink",children:l("vm.workspace.viewTitle")}),c.jsx("p",{className:"truncate text-[12px] text-ink-secondary",children:l("vm.workspace.viewSubtitle")})]}),c.jsx("button",{type:"button",onClick:()=>{L()},disabled:A,className:"rounded-md p-1.5 text-ink-secondary hover:bg-raised hover:text-ink disabled:opacity-50","aria-label":l("vm.workspace.closeView"),children:c.jsx(he,{size:18})})]}),j&&c.jsxs("div",{className:"mx-3 mt-3 flex items-center gap-2 rounded-lg border border-danger/30 bg-danger/10 px-3 py-2 text-[12px] text-danger",children:[c.jsx(ae,{size:14,className:"shrink-0"})," ",j]}),c.jsx("div",{className:"grid min-h-0 flex-1 grid-cols-2 gap-3 p-3",children:[0,1].map(r=>{const t=h[r],a=w.find(f=>f.id===t)??null;return c.jsx(Ae,{index:r,bot:a,bots:w,otherBotId:h[r===0?1:0],obscured:C,active:!!(a&&_===a.id),heldElsewhere:!!(a&&o.computerControl[a.id]?.held&&_!==a.id),controlPending:A,onSelect:f=>{F(r,f)},onTake:f=>{R(f)},onRelease:()=>{g()},onOpenComputer:f=>{P(f)}},X[r])})})]})}export{$e as LocalVmWorkspace};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as v,t as n,r as u,j as t}from"./styles-
|
|
1
|
+
import{c as v,t as n,r as u,j as t}from"./styles-CnQhCz_w.js";import{d as L,L as k}from"./PlacesRail-XEjyWavr.js";import{bg as C,bh as j,Y as N,bi as M,bj as S}from"./App-Dbsatjme.js";const E=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]],T=v("shield",E);async function I(e,r,s,i=6e4){const o=Date.now()+i;let c=e;for(;!c.ready&&c.container==="running"&&Date.now()<o;)s.throwIfAborted(),await new Promise((p,d)=>{const m=()=>{window.clearTimeout(l),d(s.reason)},l=window.setTimeout(()=>{s.removeEventListener("abort",m),p()},2e3);s.addEventListener("abort",m,{once:!0})}),c=await r();return s.throwIfAborted(),c}function g(e){if(!e)return e??null;const s={"Create the Local VM":"computer.problem.createVm","The Local VM is stopped; start it to continue":"computer.problem.vmStopped","The Local VM started, but Cua Driver is not ready yet":"computer.problem.cuaNotReady","The existing Local VM uses an older desktop or Cua Driver; recreate it":"computer.problem.oldImage","The existing container was not created by Limix Bot; recreate it":"computer.problem.unmanaged","The existing Local VM exposes its viewer publicly; recreate it":"computer.problem.publicViewer","The existing Local VM is missing safety limits; recreate it":"computer.problem.missingLimits","The existing Local VM is missing its durable folder; recreate it":"computer.problem.missingDurableFolder","Per-bot Local VMs require Docker or Podman because Apple container requires a fixed host port":"computer.problem.perBotRuntime","Install a supported container runtime first":"computer.problem.noRuntime"}[e];if(s)return n(s);const i=/^Start (\S+) first$/.exec(e);if(i)return n("computer.problem.startRuntime",{runtime:i[1]});const o=/^The Local VM desktop failed to start: (.+)$/.exec(e);return o?n("computer.problem.desktopFailed",{detail:o[1]}):e}class V extends Error{constructor(r,s,i){super(r),this.key=r,this.problem=s,this.fallbackKey=i}key;problem;fallbackKey}function K(e){return e instanceof V?n(e.key,e.fallbackKey?{problem:g(e.problem)??n(e.fallbackKey)}:void 0):g(e instanceof Error?e.message:e)}let f=!1;const b=new Set,R=e=>(b.add(e),()=>{b.delete(e)}),w=()=>f;function D(){f=!0;for(const e of b)e()}async function P(e=r=>window.ogb?.permOpenSettings?.(r)){await e("accessibility"),!f&&await e("screen")}function B(){const{capabilities:e}=L(),r=u.useSyncExternalStore(R,w,w),s=e.localComputer.available?null:e.localComputer.message,i=C(j(s)),[o,c]=u.useState(!1),[p,d]=u.useState(!1),[m,l]=u.useState(null),h=async()=>{c(!0),l(null);try{await window.ogb?.localControl?.retry()}catch(a){l(a instanceof Error?a.message:String(a))}finally{c(!1)}},y=async()=>{l(null),d(!0);try{await P()}catch(a){d(!1),l(a instanceof Error?a.message:String(a))}};return u.useEffect(()=>{if(!p||r)return;let a=!1;const x=()=>{a||document.visibilityState==="visible"&&(a=!0,d(!1),h())};return window.addEventListener("focus",x),document.addEventListener("visibilitychange",x),()=>{window.removeEventListener("focus",x),document.removeEventListener("visibilitychange",x)}},[p,r]),e.host.platform!=="darwin"||e.localComputer.reasonCode==="remote-server"||e.localComputer.available||r?null:t.jsx("section",{className:"mt-4 rounded-xl border border-warning/25 bg-warning/10 p-4",children:t.jsxs("div",{className:"flex items-start gap-3",children:[t.jsx(T,{size:16,className:"mt-0.5 shrink-0 text-warning"}),t.jsxs("div",{className:"min-w-0 flex-1",children:[t.jsx("div",{className:"text-[14px] font-medium text-ink",children:n("computer.mac.allowTitle")}),t.jsx("p",{className:"mt-1 text-[13px] leading-relaxed text-ink-secondary",children:i??n("computer.mac.permission.generic")}),s&&t.jsxs("details",{className:"mt-2 text-[12px] text-ink-secondary",children:[t.jsx("summary",{className:"cursor-pointer",children:n("computer.mac.permission.driverDetail")}),t.jsx("p",{className:"mt-1 break-words",children:s})]}),m&&t.jsxs("div",{className:"mt-2 flex gap-1.5 text-[12px] text-danger",children:[t.jsx(N,{size:13,className:"mt-0.5 shrink-0"}),t.jsx("span",{children:m})]}),t.jsxs("div",{className:"mt-3 flex flex-wrap gap-2",children:[i&&s&&t.jsx(M,{reason:s}),!i&&t.jsx("button",{type:"button",onClick:()=>{y()},disabled:o,className:"inline-flex items-center gap-1.5 rounded-lg bg-accent px-3 py-1.5 text-[13px] font-medium text-white hover:brightness-110 disabled:opacity-50",children:n("computer.mac.openSystemSettings")}),t.jsxs("button",{type:"button",onClick:()=>{h()},disabled:o,className:"inline-flex items-center gap-1.5 rounded-lg border border-hairline/50 px-3 py-1.5 text-[13px] font-medium text-ink hover:bg-raised disabled:opacity-50",children:[o&&t.jsx(k,{size:13,className:"animate-spin"}),n("commandAllowlist.retry")]}),!o&&t.jsx(S,{onClick:D})]})]})]})})}export{V as L,B as M,g as l,K as p,I as w};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as i,j as e,t}from"./styles-
|
|
1
|
+
import{r as i,j as e,t}from"./styles-CnQhCz_w.js";import{H as w,J as v,K as k,M as j,N,O as y,R as C,P as S}from"./App-Dbsatjme.js";import{L as z}from"./PlacesRail-XEjyWavr.js";import"./index-CEBe4ppp.js";import"./monitor-EYAEQme8.js";import"./MenuMotion-BVlWdNZd.js";const E=2*1024*1024;function D({path:s,name:r,message:o}){const[c,x]=i.useState(0),[m,p]=i.useState(null),[u,h]=i.useState(null),[l,f]=i.useState(!1),a=w(s,r,o);i.useEffect(()=>{const n=new AbortController;return h(null),p(null),(async()=>{try{const d=await v(s,o,n.signal),g=await k(d,n.signal,E);n.signal.aborted||p(g)}catch(d){n.signal.aborted||h(d instanceof Error&&d.message==="size"?"size":"load")}})(),()=>n.abort()},[s,o.threadId,o.messageId,c]);const b=e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"mt-3 flex flex-wrap justify-center gap-2",children:[e.jsxs("button",{type:"button",className:"inline-flex max-w-full min-w-0 items-center gap-1.5 rounded-lg border border-hairline px-3 py-2 hover:bg-raised",disabled:a.state==="saving",onClick:()=>{a.save()},children:[e.jsx(j,{size:14,className:"shrink-0"}),e.jsx("span",{className:"min-w-0 break-all",children:t("attach.saveAria",{name:r})})]}),e.jsx("button",{type:"button",className:"rounded-lg border border-hairline px-3 py-2 hover:bg-raised",onClick:()=>x(c+1),children:t("chat.retry")})]}),a.state==="failed"&&e.jsx("p",{role:"alert",className:"mt-2 text-[12px] text-danger",children:a.reason})]});return u?e.jsxs("div",{className:"p-8 text-center text-sm",children:[e.jsx("p",{role:"alert",className:"text-ink-secondary",children:t(u==="size"?"markdown.tooLarge":"markdown.loadFailed")}),b]}):m===null?e.jsxs("div",{className:"p-12 text-center text-sm text-ink-secondary",children:[e.jsxs("span",{role:"status",className:"inline-flex items-center gap-2",children:[e.jsx(z,{size:16,className:"animate-spin"}),t("markdown.loading")]}),b]}):e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsxs("div",{className:"flex items-center justify-end gap-1",children:[e.jsx("button",{type:"button",className:"table-action","aria-pressed":l,"aria-label":t(l?"markdown.rendered":"html.source"),title:t(l?"markdown.rendered":"html.source"),onClick:()=>f(!l),children:l?e.jsx(N,{size:14}):e.jsx(y,{size:14})}),e.jsx("button",{type:"button",className:"table-action","aria-label":t("html.reload"),title:t("html.reload"),onClick:()=>x(c+1),children:e.jsx(C,{size:14})}),e.jsx("button",{type:"button",className:"table-action","aria-label":t("attach.saveAria",{name:r}),title:t("attach.saveAria",{name:r}),disabled:a.state==="saving",onClick:()=>{a.save()},children:e.jsx(j,{size:14})})]}),a.state==="failed"&&e.jsx("p",{role:"alert",className:"text-end text-[12px] text-danger",children:a.reason}),e.jsx(A,{source:m,showSource:l})]})}function A({source:s,showSource:r}){return r?e.jsx("pre",{className:"h-[72dvh] overflow-auto rounded-lg border border-hairline/40 bg-inset p-3 text-[12px] leading-5 whitespace-pre-wrap break-words text-ink",children:s}):e.jsx("div",{"data-markdown-file":!0,className:"h-[72dvh] overflow-auto rounded-lg border border-hairline/40 bg-panel px-5 py-4 text-[14px] leading-6 text-ink",children:e.jsx(S,{text:s})})}export{E as MARKDOWN_PREVIEW_MAX_BYTES,A as MarkdownFileView,D as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as o,r as a}from"./styles-
|
|
1
|
+
import{c as o,r as a}from"./styles-CnQhCz_w.js";const d=[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]],M=o("chevron-right",d);const i=[["path",{d:"M10 8h.01",key:"1r9ogq"}],["path",{d:"M12 12h.01",key:"1mp3jc"}],["path",{d:"M14 8h.01",key:"1primd"}],["path",{d:"M16 12h.01",key:"1l6xoz"}],["path",{d:"M18 8h.01",key:"emo2bl"}],["path",{d:"M6 8h.01",key:"x9i8wu"}],["path",{d:"M7 16h10",key:"wp8him"}],["path",{d:"M8 12h.01",key:"czm47f"}],["rect",{width:"20",height:"16",x:"2",y:"4",rx:"2",key:"18n3k1"}]],y=o("keyboard",i);const s=[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]],k=o("refresh-cw",s);const u=[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]],l=o("send",u),h=200;function p(){return typeof document>"u"?!1:document.documentElement.dataset.reducedMotion==="true"?!0:window.matchMedia("(prefers-reduced-motion: reduce)").matches}function f(e){const[t,n]=a.useState(e);a.useLayoutEffect(()=>{if(e){n(!0);return}if(!t)return;if(p()){n(!1);return}const c=window.setTimeout(()=>n(!1),h);return()=>window.clearTimeout(c)},[e,t]);const r=!e&&t;return{shown:e||t,closing:r,className:r?"animate-pop-out pointer-events-none":"animate-pop-in",exitProps:r?{inert:!0,"aria-hidden":!0}:{}}}function w(e){const t=f(e!=null),n=a.useRef(e);return e!=null&&(n.current=e),{...t,value:e??n.current}}export{M as C,y as K,k as R,l as S,f as a,w as u};
|