limixbot 0.2.4 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/dist/app-icon-192.png +0 -0
  2. package/dist/app-icon-512.png +0 -0
  3. package/dist/app-icon.svg +1 -4
  4. package/dist/apple-touch-icon.png +0 -0
  5. package/dist/assets/{ActivityPanel-Yt1JPJtx.js → ActivityPanel--I8ZbzPP.js} +1 -1
  6. package/dist/assets/{App-CVCxQPpR.js → App-BV7lfvAV.js} +112 -112
  7. package/dist/assets/{AppEventEditor-C0O8Bn2f.js → AppEventEditor-8B4LbsP2.js} +1 -1
  8. package/dist/assets/{BotSettingsDialog-tUYy15lC.js → BotSettingsDialog-3inJTZDU.js} +4 -4
  9. package/dist/assets/{BrowserPanel-C5enR5R1.js → BrowserPanel-DCL1ihdL.js} +1 -1
  10. package/dist/assets/{BrowserProfilesManager-CSo4X7HO.js → BrowserProfilesManager-BsJcpUXn.js} +1 -1
  11. package/dist/assets/CloudAddDialog-ByLX1_cO.js +1 -0
  12. package/dist/assets/{ComputerFilesPane-DyhJMTEu.js → ComputerFilesPane-DfBb3jpl.js} +1 -1
  13. package/dist/assets/{ComputerPanel-DQydmwiD.js → ComputerPanel-I4wmIpih.js} +2 -2
  14. package/dist/assets/{DataPanel-DrjKXaiE.js → DataPanel-CtUMgjeI.js} +1 -1
  15. package/dist/assets/{DesktopViewer-CYiF8QbG.js → DesktopViewer-D-mh4Mvc.js} +1 -1
  16. package/dist/assets/{FilesView-DHmDJZVD.js → FilesView-JI5NRvg4.js} +1 -1
  17. package/dist/assets/{GrokMoveDialog-BU8ItDTb.js → GrokMoveDialog-9lKJlUqW.js} +3 -3
  18. package/dist/assets/{InspectorPanel-DgSqJslV.js → InspectorPanel-DYjIHQn_.js} +1 -1
  19. package/dist/assets/{KeyboardShortcutsModal-D7Y75zbh.js → KeyboardShortcutsModal-F6vm4Ee4.js} +1 -1
  20. package/dist/assets/{LiveDesktop-DIFFdwoj.js → LiveDesktop-CI9S1x-U.js} +1 -1
  21. package/dist/assets/{LocalVmWorkspace-cE5VrI75.js → LocalVmWorkspace-BVs4kGG8.js} +1 -1
  22. package/dist/assets/{MacLocalControl-CR1xsN8C.js → MacLocalControl-Dnpb-1A_.js} +1 -1
  23. package/dist/assets/{MarkdownFilePreview-C9-_VWg5.js → MarkdownFilePreview-gVi-3dXl.js} +1 -1
  24. package/dist/assets/{MenuMotion-Dh3Gi4kY.js → MenuMotion-DQYRi6n6.js} +1 -1
  25. package/dist/assets/{NewBotDialog-0aO27qTW.js → NewBotDialog-KtFHQMb_.js} +1 -1
  26. package/dist/assets/{PhoneAppDialog-CJeGAXQD.js → PhoneAppDialog-Dnn_AW4P.js} +1 -1
  27. package/dist/assets/PlacesRail-Bpjyw4Vm.js +57 -0
  28. package/dist/assets/{PluginsPanel-CxXhbzxv.js → PluginsPanel-D5f_fUBQ.js} +1 -1
  29. package/dist/assets/ProIntroduction-BPNgfh6z.js +1 -0
  30. package/dist/assets/{RemoteAgentSettingsPanel-Bmhtewtp.js → RemoteAgentSettingsPanel-3RAtLnAr.js} +1 -1
  31. package/dist/assets/{RoomPanel-8hijlQPG.js → RoomPanel-xMkLuBHe.js} +1 -1
  32. package/dist/assets/{RoutinesPage-BmR16t7O.js → RoutinesPage-M0vKACB8.js} +2 -2
  33. package/dist/assets/SettingsModal-Dcmk7Ghv.js +11 -0
  34. package/dist/assets/{ShareTeamDialog-COcdYImw.js → ShareTeamDialog-CeEhxIZd.js} +1 -1
  35. package/dist/assets/{SignedInSites--xtkgjnC.js → SignedInSites-BldnQjjC.js} +1 -1
  36. package/dist/assets/{TeamLibraryPanel-DOVg7avu.js → TeamLibraryPanel-BY_Ycbbf.js} +1 -1
  37. package/dist/assets/{TeamMapPage-r1iwHXYM.js → TeamMapPage-Da5W5s-4.js} +1 -1
  38. package/dist/assets/{TriggersPage-DkPipM4n.js → TriggersPage-D1EMwLwJ.js} +1 -1
  39. package/dist/assets/{VisibilitySection-UlGM_8Ri.js → VisibilitySection-Bg_6NbUb.js} +1 -1
  40. package/dist/assets/{WebhookTrigger-sfrkU37A.js → WebhookTrigger-DsKXQ3Cd.js} +1 -1
  41. package/dist/assets/{WorksOnGrid-Cx__gmQD.js → WorksOnGrid-CfkpIePV.js} +1 -1
  42. package/dist/assets/{abnfDiagram-YUKMZFIV-zKm62LaA.js → abnfDiagram-YUKMZFIV-Ckoz_CzF.js} +1 -1
  43. package/dist/assets/{activity-CPkAJarW.js → activity-CQ1e-FGE.js} +1 -1
  44. package/dist/assets/{architectureDiagram-47P4ROYG-BtuTxvNC.js → architectureDiagram-47P4ROYG-CgPs1VuD.js} +1 -1
  45. package/dist/assets/{blockDiagram-E7TT5TSB-BRCjM53y.js → blockDiagram-E7TT5TSB-Cmb2ImyI.js} +1 -1
  46. package/dist/assets/{c4Diagram-CRA5TL53-C9p73qnX.js → c4Diagram-CRA5TL53-FdJmz2JG.js} +1 -1
  47. package/dist/assets/{calendar-days-DdkRWrHv.js → calendar-days-BUipnvhW.js} +1 -1
  48. package/dist/assets/channel-BzoyEHOy.js +1 -0
  49. package/dist/assets/{chunk-2Q5K7J3B-BVttC6OI.js → chunk-2Q5K7J3B-BzwXKae0.js} +1 -1
  50. package/dist/assets/{chunk-5VM5RSS4-BNqqqnGl.js → chunk-5VM5RSS4-BYWM6mWC.js} +1 -1
  51. package/dist/assets/{chunk-7TKQ45FW-CLkkCMma.js → chunk-7TKQ45FW-BIriaw9d.js} +1 -1
  52. package/dist/assets/{chunk-AW2ZBBNX-ByE3NFnK.js → chunk-AW2ZBBNX-6yQL8NET.js} +1 -1
  53. package/dist/assets/{chunk-FVRAUYC3-D1NFW9zf.js → chunk-FVRAUYC3-B4pej_b0.js} +2 -2
  54. package/dist/assets/{chunk-HTAEGDNF-y9-VGZh8.js → chunk-HTAEGDNF-CyK4QAOD.js} +1 -1
  55. package/dist/assets/{chunk-JWPE2WC7-BOYZL91l.js → chunk-JWPE2WC7-DRvsvO9Z.js} +1 -1
  56. package/dist/assets/{chunk-KQW6MTUR-DRtZ-jux.js → chunk-KQW6MTUR-FEwgYelx.js} +1 -1
  57. package/dist/assets/{chunk-XXDRQBXY-DCH3w3v6.js → chunk-XXDRQBXY-BYleWq1o.js} +1 -1
  58. package/dist/assets/{classDiagram-v2-K4WV4PDN-BziSQpNK.js → classDiagram-v2-K4WV4PDN-BNjClALP.js} +1 -1
  59. package/dist/assets/{coins-BvYP8U4w.js → coins-CxF7VbZf.js} +1 -1
  60. package/dist/assets/{core-DgU9fIH7.js → core-C8K-KBYk.js} +1 -1
  61. package/dist/assets/{cose-bilkent-JH36ORCC-BzC7KDhz.js → cose-bilkent-JH36ORCC-DmY2f5QM.js} +1 -1
  62. package/dist/assets/{cynefin-EF2NZ3EQ-DallfvKE.js → cynefin-EF2NZ3EQ-D4pCl3aZ.js} +1 -1
  63. package/dist/assets/{cynefinDiagram-3GCD6N5R-BlzPquFR.js → cynefinDiagram-3GCD6N5R-jS7kDRoE.js} +1 -1
  64. package/dist/assets/{dagre-W4DXFKR2-XlgF2qP1.js → dagre-W4DXFKR2-Dd5ELGuw.js} +1 -1
  65. package/dist/assets/{diagram-2UJZ2QOL-D6-7kEyN.js → diagram-2UJZ2QOL-B-tizYMz.js} +1 -1
  66. package/dist/assets/{diagram-OVF4WLC6-BuvgW3fs.js → diagram-OVF4WLC6-D3xpMTHl.js} +1 -1
  67. package/dist/assets/{diagram-PFPMY2P6-Cxw7BxsQ.js → diagram-PFPMY2P6-DUf0EYR1.js} +1 -1
  68. package/dist/assets/{diagram-UMYRVEAY-DbaTO7xG.js → diagram-UMYRVEAY-CfhFy4fo.js} +1 -1
  69. package/dist/assets/{diagram-YEKJPTXX-ssS2jDd9.js → diagram-YEKJPTXX-pKD2IJJ7.js} +1 -1
  70. package/dist/assets/{diagram-ZIFT7M5P-MSG2hmJt.js → diagram-ZIFT7M5P-BxunPXAX.js} +1 -1
  71. package/dist/assets/{ebnfDiagram-VR2GEFS7-D3iLv4Vh.js → ebnfDiagram-VR2GEFS7-DPyW7BZH.js} +1 -1
  72. package/dist/assets/{elk-IJKZMXRS-CN_29WGs.js → elk-IJKZMXRS-XJxkJxok.js} +1 -1
  73. package/dist/assets/{erDiagram-O2IAPWRE-Bcl7Id7T.js → erDiagram-O2IAPWRE-CUES7W0a.js} +1 -1
  74. package/dist/assets/{file-up-CCEcdqcW.js → file-up-BDUXq-vg.js} +1 -1
  75. package/dist/assets/{flowDiagram-OXPTDLAJ-n2WLJBHk.js → flowDiagram-OXPTDLAJ-B5acRFQe.js} +1 -1
  76. package/dist/assets/{ganttDiagram-R7TSEDQI-BXBxYc2Z.js → ganttDiagram-R7TSEDQI-CQp0rp67.js} +1 -1
  77. package/dist/assets/{gitGraphDiagram-XJZIOB7I-B3rVvw07.js → gitGraphDiagram-XJZIOB7I-Chl_xMxf.js} +1 -1
  78. package/dist/assets/{import-name-QCV3NxTT.js → import-name-fDjyR5kx.js} +1 -1
  79. package/dist/assets/{index-DMDRA73w.js → index-3mZteHSQ.js} +1 -1
  80. package/dist/assets/index-BUpSDhKQ.js +2 -0
  81. package/dist/assets/{index-DxGSNARA.js → index-CZgKLcUm.js} +1 -1
  82. package/dist/assets/{infoDiagram-5W2HQ5XZ-BxRrhDe0.js → infoDiagram-5W2HQ5XZ-DDJYDjQ5.js} +1 -1
  83. package/dist/assets/{ishikawaDiagram-K3B6WC7H-ZOdsAPxi.js → ishikawaDiagram-K3B6WC7H-Bxd_dhZZ.js} +1 -1
  84. package/dist/assets/{journeyDiagram-COXZFDF6-axLKau4X.js → journeyDiagram-COXZFDF6-BYF-sQSD.js} +1 -1
  85. package/dist/assets/{kanban-definition-P3RFRI5V-DTVUrJqt.js → kanban-definition-P3RFRI5V-B0wBqOFH.js} +1 -1
  86. package/dist/assets/{mcp-servers-kshb3G8M.js → mcp-servers-xsYOIrTE.js} +1 -1
  87. package/dist/assets/{mermaid.core-D8G0v7ax.js → mermaid.core-C6PKoMQA.js} +4 -4
  88. package/dist/assets/{mindmap-definition-LZFPQGKD-eR6Dlm_o.js → mindmap-definition-LZFPQGKD-BlN8ZHNR.js} +1 -1
  89. package/dist/assets/{minimize-DsfIgSIh.js → minimize-BPbapdk9.js} +1 -1
  90. package/dist/assets/{monitor-CJJehAYK.js → monitor-Xr0SgoUO.js} +1 -1
  91. package/dist/assets/{new-bot-BxtfLvSH.js → new-bot-DZ8WGB0A.js} +2 -2
  92. package/dist/assets/{org-library-j54w6Ia7.js → org-library-jgASeM26.js} +1 -1
  93. package/dist/assets/{package-format-CMWKE_F6.js → package-format-HQ4GXg3u.js} +1 -1
  94. package/dist/assets/{pegDiagram-BGZESJAR-BabDseNJ.js → pegDiagram-BGZESJAR-Dts1Xq7B.js} +1 -1
  95. package/dist/assets/{pieDiagram-CAPJLFHJ-BKvqDvl1.js → pieDiagram-CAPJLFHJ-D6BLN9z8.js} +1 -1
  96. package/dist/assets/{quadrantDiagram-GDMTTRAM-B04ZbGZP.js → quadrantDiagram-GDMTTRAM-BNXscncZ.js} +1 -1
  97. package/dist/assets/rail-KIYXnvmP.js +1 -0
  98. package/dist/assets/{railroadDiagram-SM67HX2B-DcJknZtN.js → railroadDiagram-SM67HX2B-BcriwGaw.js} +1 -1
  99. package/dist/assets/{remote-desktop-panel-CqR9sYPm.js → remote-desktop-panel-D-AMCL3e.js} +1 -1
  100. package/dist/assets/{requirementDiagram-X7JNWC4A-CkeImvIM.js → requirementDiagram-X7JNWC4A-DFVmx-Hz.js} +1 -1
  101. package/dist/assets/{sankeyDiagram-UM26HJRW-DYxARQh9.js → sankeyDiagram-UM26HJRW-fySjdOut.js} +1 -1
  102. package/dist/assets/{sequenceDiagram-ZO4K6R2Y-DWd9rdXx.js → sequenceDiagram-ZO4K6R2Y-CXrhKe3C.js} +1 -1
  103. package/dist/assets/{sizeCapture-INFHLROL-CjzuzZLP.js → sizeCapture-INFHLROL-D7uoCaYO.js} +1 -1
  104. package/dist/assets/{stateDiagram-v2-TBUQTH76-CLmc94Ln.js → stateDiagram-v2-TBUQTH76-BcNwr-uw.js} +1 -1
  105. package/dist/assets/{styles-NM37uvmJ.js → styles-DSEcltf1.js} +3 -3
  106. package/dist/assets/{swimlanes-N4OXWK64-Dmc-N6gk.js → swimlanes-N4OXWK64-BXzCyVrs.js} +1 -1
  107. package/dist/assets/swimlanesDiagram-K3J5GTZL-kYQoltjc.js +8 -0
  108. package/dist/assets/{team-share-CfzFiDJl.js → team-share-BrQ2rI3n.js} +1 -1
  109. package/dist/assets/{timeline-definition-YOQAKGHF-B4YfX3Wn.js → timeline-definition-YOQAKGHF-BdAlbPSb.js} +1 -1
  110. package/dist/assets/{usecaseDiagram-VIAY4XPW-tkKvR-PW.js → usecaseDiagram-VIAY4XPW-CIBiINMq.js} +1 -1
  111. package/dist/assets/{vennDiagram-BLWOH2XV-CWEUMDKu.js → vennDiagram-BLWOH2XV-Ctrb2l50.js} +1 -1
  112. package/dist/assets/{wardleyDiagram-YMQ3BMBF-DRcqmHpZ.js → wardleyDiagram-YMQ3BMBF-kLbK1beS.js} +1 -1
  113. package/dist/assets/{xychartDiagram-TAQBALBS-B-YwOKwp.js → xychartDiagram-TAQBALBS-C5baNmCt.js} +1 -1
  114. package/dist/index.html +2 -2
  115. package/dist/rail.html +4 -4
  116. package/dist-server/package.json +1 -1
  117. package/dist-server/shared/mascot-bodies.js +4 -4
  118. package/package.json +1 -1
  119. package/dist/assets/CloudAddDialog-DsTSypGV.js +0 -1
  120. package/dist/assets/PlacesRail-BI7EZKaw.js +0 -57
  121. package/dist/assets/ProIntroduction-CQDF5fEs.js +0 -1
  122. package/dist/assets/SettingsModal-BJCVgscC.js +0 -11
  123. package/dist/assets/channel-BEZp93ad.js +0 -1
  124. package/dist/assets/cursor-128-D_P4sIyM.webp +0 -0
  125. package/dist/assets/cursor-192-TWSdnzcT.webp +0 -0
  126. package/dist/assets/cursor-256-Mw4jC-Z3.webp +0 -0
  127. package/dist/assets/index-DeIGTf2I.js +0 -2
  128. package/dist/assets/rail-COJ1VklA.js +0 -1
  129. package/dist/assets/swimlanesDiagram-K3J5GTZL-DHOLnd-u.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,K as ye}from"./styles-NM37uvmJ.js";import{L as be,x as ve,C as we}from"./PlacesRail-BI7EZKaw.js";import{t as je,a as Me}from"./import-name-QCV3NxTT.js";import{bc as ue,bd as Ne,be as ee,bf as Ee,bg as Ae,bh as Se,B as _e,n as q,u as Oe,bi as $e}from"./App-CVCxQPpR.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-CMWKE_F6.js";import{F as Fe}from"./file-up-CCEcdqcW.js";import"./monitor-CJJehAYK.js";import"./index-DeIGTf2I.js";import"./MenuMotion-Dh3Gi4kY.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.
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-DSEcltf1.js";import{L as be,x as ve,C as we}from"./PlacesRail-Bpjyw4Vm.js";import{t as je,a as Me}from"./import-name-fDjyR5kx.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-BV7lfvAV.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-HQ4GXg3u.js";import{F as Fe}from"./file-up-BDUXq-vg.js";import"./monitor-Xr0SgoUO.js";import"./index-BUpSDhKQ.js";import"./MenuMotion-DQYRi6n6.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()}…`,Ke=/(?:^|_)(?:api_?key|apikey|token|secret|passwd|passphrase|credentials?|auth|authorization|bearer|cookies?|private_?key|access_?key|session_?(?:id|key|token))(?:_|$)|key$/i,De=new Set(["headers","env","environment"]);function Ue(e){return/password/i.test(e)||Ke.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&&De.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(`
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,ai as ne,X as se,b as U,aj as re}from"./styles-NM37uvmJ.js";import{bn as ae,bo as ie,bp as oe,bc as D,bq as ce,br as le,bs as ue,u as de,aj as pe,l as me,bt as fe,bu as xe}from"./App-CVCxQPpR.js";import{C as he,L as ge,J as ye,u as be}from"./PlacesRail-BI7EZKaw.js";import{R as ke,C as $e}from"./MenuMotion-Dh3Gi4kY.js";import"./index-DeIGTf2I.js";import"./monitor-CJJehAYK.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?`
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-DSEcltf1.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-BV7lfvAV.js";import{C as he,L as ge,J as ye,u as be}from"./PlacesRail-Bpjyw4Vm.js";import{R as ke,C as $e}from"./MenuMotion-DQYRi6n6.js";import"./index-BUpSDhKQ.js";import"./monitor-Xr0SgoUO.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};
@@ -1 +1 @@
1
- import{r as c,j as e,t as s,X as p,S as m}from"./styles-NM37uvmJ.js";import{i as b,e as f,f as y,s as j,g,h as k,j as v}from"./App-CVCxQPpR.js";import{K as N}from"./MenuMotion-Dh3Gi4kY.js";import"./index-DeIGTf2I.js";import"./PlacesRail-BI7EZKaw.js";import"./monitor-CJJehAYK.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
+ import{r as c,j as e,t as s,X as p,S as m}from"./styles-DSEcltf1.js";import{i as b,e as f,f as y,s as j,g,h as k,j as v}from"./App-BV7lfvAV.js";import{K as N}from"./MenuMotion-DQYRi6n6.js";import"./index-BUpSDhKQ.js";import"./PlacesRail-Bpjyw4Vm.js";import"./monitor-Xr0SgoUO.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-NM37uvmJ.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-BI7EZKaw.js";import{S as K,R as O}from"./MenuMotion-Dh3Gi4kY.js";import{Q as P,U as Q}from"./App-CVCxQPpR.js";import"./desktop-viewer-CF-OpSo0.js";import"./monitor-CJJehAYK.js";import"./index-DeIGTf2I.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
+ import{r as n,t as s,j as e,a as o}from"./styles-DSEcltf1.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-Bpjyw4Vm.js";import{S as K,R as O}from"./MenuMotion-DQYRi6n6.js";import{Q as P,U as Q}from"./App-BV7lfvAV.js";import"./desktop-viewer-CF-OpSo0.js";import"./monitor-Xr0SgoUO.js";import"./index-BUpSDhKQ.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-NM37uvmJ.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-CVCxQPpR.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-BI7EZKaw.js";import{M as le}from"./monitor-CJJehAYK.js";import{R as Ce}from"./MenuMotion-Dh3Gi4kY.js";import"./index-DeIGTf2I.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-DSEcltf1.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-BV7lfvAV.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-Bpjyw4Vm.js";import{M as le}from"./monitor-Xr0SgoUO.js";import{R as Ce}from"./MenuMotion-DQYRi6n6.js";import"./index-BUpSDhKQ.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-NM37uvmJ.js";import{d as L,L as k}from"./PlacesRail-BI7EZKaw.js";import{bj as C,bk as j,Y as N,bl as M,bm as S}from"./App-CVCxQPpR.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,a=6e4){const o=Date.now()+a;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 a=/^Start (\S+) first$/.exec(e);if(a)return n("computer.problem.startRuntime",{runtime:a[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,a){super(r),this.key=r,this.problem=s,this.fallbackKey=a}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,a=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(i){l(i instanceof Error?i.message:String(i))}finally{c(!1)}},y=async()=>{l(null),d(!0);try{await P()}catch(i){d(!1),l(i instanceof Error?i.message:String(i))}};return u.useEffect(()=>{if(!p||r)return;let i=!1;const x=()=>{i||document.visibilityState==="visible"&&(i=!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:a??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:[a&&s&&t.jsx(M,{reason:s}),!a&&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
+ import{c as v,t as n,r as u,j as t}from"./styles-DSEcltf1.js";import{d as L,L as k}from"./PlacesRail-Bpjyw4Vm.js";import{bg as C,bh as j,Y as N,bi as M,bj as S}from"./App-BV7lfvAV.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-NM37uvmJ.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-CVCxQPpR.js";import{L as z}from"./PlacesRail-BI7EZKaw.js";import"./index-DeIGTf2I.js";import"./monitor-CJJehAYK.js";import"./MenuMotion-Dh3Gi4kY.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
+ import{r as i,j as e,t}from"./styles-DSEcltf1.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-BV7lfvAV.js";import{L as z}from"./PlacesRail-Bpjyw4Vm.js";import"./index-BUpSDhKQ.js";import"./monitor-Xr0SgoUO.js";import"./MenuMotion-DQYRi6n6.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-NM37uvmJ.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};
1
+ import{c as o,r as a}from"./styles-DSEcltf1.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};