@forsion/unit 2.13.0 → 2.13.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/main.mjs +5 -3
- package/package.json +1 -1
- package/release.json +5 -5
- package/web/assets/{ArtificialView-BSv3Mx5C.js → ArtificialView-XwHMLUFb.js} +1 -1
- package/web/assets/{AutomationBuilder-BuiHtVB-.js → AutomationBuilder-hqs0QhMt.js} +1 -1
- package/web/assets/{CalendarConfigView-BJtG6cqN.js → CalendarConfigView-DKib8Oed.js} +1 -1
- package/web/assets/{CalendarView-C-FX1RED.js → CalendarView-DJ5iOzvu.js} +1 -1
- package/web/assets/{CapabilityMenu-kx1TIJYN.js → CapabilityMenu-SwVlZ06x.js} +1 -1
- package/web/assets/{CheckboxInput-eW7xdiRS.js → CheckboxInput-BC-5a_C9.js} +1 -1
- package/web/assets/{Chrome-B77-lQyh.js → Chrome-HdfyYV3i.js} +1 -1
- package/web/assets/{CodeView-Df3AiSIi.js → CodeView-CFL6yQ-6.js} +3 -3
- package/web/assets/{DashboardGridView-MlO1dpuo.js → DashboardGridView-B9DCWYVb.js} +12 -12
- package/web/assets/{EventCard-CDmeCbI8.js → EventCard-B_ndpqH_.js} +1 -1
- package/web/assets/{ExcalidrawCanvas-D9vkBh_5.js → ExcalidrawCanvas-BQ4KKLJP.js} +1 -1
- package/web/assets/{FloatingToc-tART_jC4.js → FloatingToc-Ce9GamvH.js} +1 -1
- package/web/assets/{HomepageView-Trqmd3RV.js → HomepageView-RCOfcVbE.js} +1 -1
- package/web/assets/{ImageStudioPanels-BfCVTnKC.js → ImageStudioPanels-lkS_y2uM.js} +2 -2
- package/web/assets/{ImageStudioView-KJhx0wJk.js → ImageStudioView-UPv52acl.js} +1 -1
- package/web/assets/{InlineFiles-BHwivGbQ.js → InlineFiles-CQbQumkf.js} +1 -1
- package/web/assets/{MarkdownBlock-D8LgHFYY.js → MarkdownBlock-CkqiwPXa.js} +19 -19
- package/web/assets/{ModelPill-DrW2cG0l.js → ModelPill-CY-rU1RU.js} +2 -2
- package/web/assets/{MuseLibraryView-CW78Uivf.js → MuseLibraryView-CtTHlVnT.js} +2 -2
- package/web/assets/{MuseView-Cb6R_l4i.js → MuseView-CC2A7MBs.js} +2 -2
- package/web/assets/{PageHistoryPanel-BQs9IWTP.js → PageHistoryPanel-KhKT1DLy.js} +2 -2
- package/web/assets/{PdfAnnotator-BFTBkxvO.js → PdfAnnotator-DUyrgY-t.js} +1 -1
- package/web/assets/{ProductView-mB-S0j81.js → ProductView-CgsIYZqD.js} +1 -1
- package/web/assets/{RightPanel-BVZeVO3c.js → RightPanel-BHDgqTFs.js} +3 -3
- package/web/assets/RunLocationPicker-DBnXYV5B.js +38 -0
- package/web/assets/{SidebarRow-D77yrSLf.js → SidebarRow-BAJxbMcx.js} +1 -1
- package/web/assets/{SketchCard-CAAr_cqF.js → SketchCard-BGYz-bXP.js} +1 -1
- package/web/assets/{StudioGuestSurface-DthpuVGg.js → StudioGuestSurface-lt6znmkl.js} +1 -1
- package/web/assets/{TodoListView-C3ZkMIIf.js → TodoListView-DPKhee6i.js} +1 -1
- package/web/assets/{Tooltip-D9Dt9ZTr.js → Tooltip-ZxrDqN4p.js} +1 -1
- package/web/assets/{UnifiedPage-C75y-MKT.js → UnifiedPage-BX6ZQL0h.js} +27 -27
- package/web/assets/{amadeus-manual.en-D5wZKuag.js → amadeus-manual.en-DzRWr4BL.js} +15 -15
- package/web/assets/{amadeus-manual.zh-Br5fidrj.js → amadeus-manual.zh-DW32DkL7.js} +15 -15
- package/web/assets/{appStore-B1ynyt42.js → appStore-DWP8UET9.js} +99 -79
- package/web/assets/appStore-wtOILggO.css +1 -0
- package/web/assets/{arrow-up-right-R10mR2I6.js → arrow-up-right-DrCXuWS7.js} +1 -1
- package/web/assets/{astryxBridge-CU_kQTEl.js → astryxBridge-D-m4_kYt.js} +3 -3
- package/web/assets/{automationListSource-B8EIRmDW.js → automationListSource-C8BNy6RY.js} +1 -1
- package/web/assets/{book-open-DBJ3dDpw.js → book-open-OLNm7OaB.js} +1 -1
- package/web/assets/{calendarNavStore-DGvUlU5N.js → calendarNavStore-Cylfvv3s.js} +1 -1
- package/web/assets/{canvasPrefs-DwL_OAAo.js → canvasPrefs-8taQ42Cz.js} +1 -1
- package/web/assets/{chatBoxSurface-Lq-2qfd3.js → chatBoxSurface-CIlzs45H.js} +1 -1
- package/web/assets/{circle-question-mark-HPZpZQxd.js → circle-question-mark-XbAFplz1.js} +1 -1
- package/web/assets/{circle-x-BZfe7d6S.js → circle-x-fcReAZaE.js} +1 -1
- package/web/assets/{client-DxGbwZLy.js → client-0MPbodA6.js} +1 -1
- package/web/assets/{code-xml-joKQ-qGS.js → code-xml-Cuna8Kh4.js} +1 -1
- package/web/assets/{codeStudioStore-C7rGKlOC.js → codeStudioStore-BBU62GTy.js} +1 -1
- package/web/assets/{codingNavigation-CjeWG4xm.js → codingNavigation-DDlPpPk5.js} +7 -7
- package/web/assets/{create-BjBRKATq.js → create-BGtEfCcg.js} +2 -2
- package/web/assets/{dashboardSurface-Cojgf_-U.js → dashboardSurface-BYM3C7WG.js} +1 -1
- package/web/assets/{deskCapture-DnGWk1iq.js → deskCapture-BiUCmqfc.js} +1 -1
- package/web/assets/{diff2html-Cd1rVi_Z.js → diff2html-BNp2FTbk.js} +1 -1
- package/web/assets/{docx-preview-CK0k1mUD.js → docx-preview-CFznGVOU.js} +1 -1
- package/web/assets/{emoji-Cjm3bKiF.js → emoji-6zl4yfOS.js} +1 -1
- package/web/assets/{floatingTocSurface-Dd1pT5j5.js → floatingTocSurface-DreXPCa6.js} +1 -1
- package/web/assets/{foldActions-Dm-uAt3L.js → foldActions-05QcQziQ.js} +1 -1
- package/web/assets/{folder-CvZyHIgb.js → folder-BpsfOHD4.js} +1 -1
- package/web/assets/{folder-plus-BRScGQ9m.js → folder-plus-BeQHr4AZ.js} +1 -1
- package/web/assets/{gestures-CZQVefU0.js → gestures-DQBCcK4y.js} +1 -1
- package/web/assets/{hand-D3QspKYq.js → hand-Bko7ms15.js} +1 -1
- package/web/assets/{hard-drive-BQsHSala.js → hard-drive-BpuI5ebj.js} +1 -1
- package/web/assets/{i18n.generated-BZRHO2Nc.js → i18n.generated-BuLjnmY8.js} +1 -1
- package/web/assets/{imageStudio-Cy3_437s.js → imageStudio-BLVNKmEG.js} +2 -2
- package/web/assets/{index-BPhwi4-v.js → index-BF10xp_K.js} +1 -1
- package/web/assets/{index-GjLSlygt.js → index-BHm6K743.js} +1 -1
- package/web/assets/{index-Bh_nLVTc.js → index-BM2o7PeV.js} +5 -5
- package/web/assets/{index-BcVGjCAJ.js → index-BgnNNv3e.js} +1 -1
- package/web/assets/{index-CcOag8eb.js → index-C0Gy2NQ6.js} +1 -1
- package/web/assets/{index-0AYHATDX.js → index-C1doZp5H.js} +1 -1
- package/web/assets/{index-9BmmlTjY.js → index-C4L6vjd_.js} +1 -1
- package/web/assets/{index-8ag1K7AZ.js → index-CD3yIkOA.js} +1 -1
- package/web/assets/{index-Dkd-nl1u.js → index-CJeUgjPU.js} +1 -1
- package/web/assets/{index-B5GxvbNm.js → index-CLHoq1w-.js} +1 -1
- package/web/assets/{index-DElrDw66.js → index-CUZI62qU.js} +1 -1
- package/web/assets/{index-BgtO11q8.js → index-Cff42k7q.js} +1 -1
- package/web/assets/{index-Dj-PygjB.js → index-Ck_O3Jdd.js} +1 -1
- package/web/assets/index-CuiYK18N.js +1 -0
- package/web/assets/{index-Bpc3R3DS.js → index-CwcOeZdT.js} +1 -1
- package/web/assets/{index-DJLWTPtq.js → index-D6AycQIz.js} +1 -1
- package/web/assets/{index-C9yo04Ck.js → index-D7gVhvNY.js} +1 -1
- package/web/assets/{index-BnWj6ggb.js → index-D9UZQy42.js} +1 -1
- package/web/assets/{index-D6mpAJ9S.js → index-DuBQ0j2g.js} +1 -1
- package/web/assets/{index-1FhRiJ_X.js → index-OD1gSX3h.js} +1 -1
- package/web/assets/{index-DNE_PBJt.js → index-Uo5tswys.js} +1 -1
- package/web/assets/{index-BgDZGDqt.js → index-o8cj0pRH.js} +1 -1
- package/web/assets/{index-BdZaheMZ.js → index-rHjhbwvm.js} +1 -1
- package/web/assets/{index-4E9nrhwf.js → index-rggq2czF.js} +1 -1
- package/web/assets/{index-D0FLFLfh.js → index-sCXThwqZ.js} +1 -1
- package/web/assets/{invitePage-B4gMvEKi.js → invitePage-b0HGvMj6.js} +1 -1
- package/web/assets/{ipc-CPhL3bPp.js → ipc-CxAyeo8q.js} +1 -1
- package/web/assets/{jszip.min-DAJT9RUA.js → jszip.min-B94KpE21.js} +1 -1
- package/web/assets/{layout-grid-DfUfnvDS.js → layout-grid-BBVuEdWG.js} +1 -1
- package/web/assets/{linkFollow-C6PHGUxk.js → linkFollow-B7ivDZMM.js} +5 -5
- package/web/assets/{list-tree-DaGpnIYu.js → list-tree-4-0QDbLu.js} +1 -1
- package/web/assets/{listFold-Q_8mh5ZG.js → listFold-DLuxXiIj.js} +1 -1
- package/web/assets/{lock-DQ_yL4nF.js → lock-CnbZm4vo.js} +1 -1
- package/web/assets/{log-out-DFwTeh2X.js → log-out-BEynWaHa.js} +1 -1
- package/web/assets/{main-NgUPPqDn.css → main-BiS_5wrB.css} +1 -1
- package/web/assets/main-sIq2N9Z5.js +20 -0
- package/web/assets/{markdownEditorSurface-e_oMhqx-.js → markdownEditorSurface-ZSJ3RHAv.js} +1 -1
- package/web/assets/{mdMarkStore-DjN4bf1T.js → mdMarkStore-DQHDjG7s.js} +2 -2
- package/web/assets/{mdMarks-cmL6vzR-.js → mdMarks-DbIcRa0O.js} +1 -1
- package/web/assets/{message-square-plus-CEHkduIL.js → message-square-plus-CpiKDvle.js} +1 -1
- package/web/assets/{messages-CBtmbpur.js → messages-_jta1lSI.js} +1 -1
- package/web/assets/minus-C9ndHJ9O.js +1 -0
- package/web/assets/{mobileEntry-qR7BAROr.js → mobileEntry-CPmU_c4m.js} +1 -1
- package/web/assets/{nativeDownload-CziEyW_p.js → nativeDownload-BYT082bY.js} +1 -1
- package/web/assets/{pageChrome-DFz_AAzZ.js → pageChrome-D3Niv1JM.js} +1 -1
- package/web/assets/{pageTree-yVO1_fSy.js → pageTree-CgfvpzIj.js} +1 -1
- package/web/assets/{pen-tool-uxsFELYC.js → pen-tool-BXEFnU2i.js} +1 -1
- package/web/assets/{pencil-BSbra1Ra.js → pencil-cqvCkekG.js} +1 -1
- package/web/assets/pluginChat-BbBukMuN.js +2 -0
- package/web/assets/{redo-2-BK5LMNa5.js → redo-2-BO7wCDwy.js} +1 -1
- package/web/assets/{rotate-ccw-HedfU4na.js → rotate-ccw-BvipPIjC.js} +1 -1
- package/web/assets/{sharePage-CpzDpuU1.js → sharePage-XbN50US7.js} +2 -2
- package/web/assets/{shareViewer-BwzH2bIs.js → shareViewer-BaYogetW.js} +1 -1
- package/web/assets/{star-CgYon3z4.js → star-BQWMXnn7.js} +1 -1
- package/web/assets/tableSurface-BXqqidd1.js +1 -0
- package/web/assets/{terminal-krsPf1mc.js → terminal-l9k6RDrH.js} +1 -1
- package/web/assets/{terminalView-4e2_u5_I.js → terminalView-Cpnt5_0P.js} +1 -1
- package/web/assets/{type-GJYLEhY-.js → type-CFoaj2eD.js} +1 -1
- package/web/assets/{undo-2-DCTs4Ro4.js → undo-2-DusxpdLa.js} +1 -1
- package/web/assets/{unitAccount-D3xjX3cu.js → unitAccount-DwutFPPw.js} +1 -1
- package/web/assets/{unitBridge-D5JcIkAP.js → unitBridge-CcgQpkqV.js} +1 -1
- package/web/assets/{unitCloudTransport-B44L3x6M.js → unitCloudTransport-vA7cLDts.js} +1 -1
- package/web/assets/{unitOwnerAccess-CRUHWGpf.js → unitOwnerAccess-LBlJ1YfA.js} +1 -1
- package/web/assets/{unitShim-_VzxvdEG.js → unitShim-B_M9IrbC.js} +3 -3
- package/web/assets/{upload-MVVRQtkj.js → upload-ZrOj6tXA.js} +1 -1
- package/web/assets/{userSpaces-CI4eqEgh.js → userSpaces-uJOnsedR.js} +1 -1
- package/web/assets/viewportLock-D3SNkwS2.js +631 -0
- package/web/assets/{workflow-DzeW9OXR.js → workflow-DPoG4QE2.js} +1 -1
- package/web/assets/{zoom-in-CovPsw4g.js → zoom-in-lbTgzdQP.js} +1 -1
- package/web/index.html +27 -7
- package/web/assets/RunLocationPicker-CyVa0RJa.js +0 -38
- package/web/assets/appStore-BC_CQv-L.css +0 -1
- package/web/assets/index-BaRySZ-M.js +0 -1
- package/web/assets/main-CwqZ_ymb.js +0 -19
- package/web/assets/minus-BUT48dAC.js +0 -1
- package/web/assets/pluginChat-BMFnf_j2.js +0 -2
- package/web/assets/tableSurface-CmDwnKnd.js +0 -1
- package/web/assets/viewportLock-BH26xHQO.js +0 -611
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{F as pe,aI as Pe,gg as Le,U as $e,G as Oe,aM as $,mf as Re,ch as T,cA as X,mg as Be,bo as _e,ah as He,a4 as Ue,mh as We,T as Ge,aD as ie,aO as he,aJ as qe,aE as Ke,Y as me,Z as fe,kz as ge,kW as Ve,mi as Ye,s as U,gx as Xe,mj as Je,ar as Ze,c4 as Qe,cr as xe,bI as ye,mk as et,kX as le,kY as tt,kZ as ve,aN as nt,ml as st,l0 as at}from"./appStore-B1ynyt42.js";import{c as rt}from"./nativeDownload-CziEyW_p.js";import{u as P,d as g,j as r,R as ot,P as it}from"./index-Bh_nLVTc.js";import"./client-DxGbwZLy.js";import{B as lt}from"./book-open-DBJ3dDpw.js";import{F as ct}from"./folder-plus-BRScGQ9m.js";import{F as ce}from"./folder-CvZyHIgb.js";import{U as dt}from"./upload-MVVRQtkj.js";import{P as ut}from"./pencil-BSbra1Ra.js";const pt=[["path",{d:"M18 6 7 17l-5-5",key:"116fxf"}],["path",{d:"m22 10-7.5 7.5L13 16",key:"ke71qq"}]],Vt=pe("check-check",pt);const ht=[["path",{d:"M14 9 9 4 4 9",key:"1af5af"}],["path",{d:"M20 20h-7a4 4 0 0 1-4-4V4",key:"1blwi3"}]],mt=pe("corner-left-up",ht),we=new Set(["image/png","image/jpeg","image/webp","image/gif"]),ft=20*1024*1024;function gt(e){return{version:2,id:crypto.randomUUID(),name:e,updatedAt:Date.now(),sessionId:null,images:[],elements:[],order:[],collected:[]}}function Yt(e,n){return e.images.filter(t=>!t.hidden).sort((t,a)=>t.x-a.x||t.y-a.y).slice(0,n)}function Xt(e,n,t){const a=Math.min(1,360/Math.max(e,n));return{x:t.length?Math.max(...t.map(s=>s.x+s.w))+32:0,y:0,w:e*a,h:n*a}}function Jt(e){const n=new Map;let t="";for(const a of e){a.role==="user"&&(t=a.content);for(const[s,o]of(a.displayFiles||[]).entries()){if(!we.has(o.mime||"")&&!/\.(png|jpe?g|webp|gif)$/i.test(o.name)||!o.path&&!o.dataUrl)continue;const c=o.path?`${o.sourceSessionId||""}:${o.path}`:`${a.id}:${s}:${o.name}`;n.set(c,{key:c,file:o,prompt:t})}}return[...n.values()]}function Zt(e){const n=Math.max(1,Math.ceil(Math.sqrt(e.length)));return e.map((t,a)=>{const s=G(t),o=300/Math.max(s.w,s.h);return{...t,x:a%n*340,y:Math.floor(a/n)*360,w:s.w*o,h:s.h*o}})}function Qt(e){return`brightness(${e.brightness}%) contrast(${e.contrast}%) saturate(${e.saturation}%)`}function xt(e){const n=e;if(!n||n.version!==1&&n.version!==2||typeof n.id!="string"||typeof n.name!="string"||!((n.sessionId===null||typeof n.sessionId=="string")&&Number.isFinite(n.updatedAt)&&Array.isArray(n.collected)&&n.collected.every(s=>typeof s=="string")&&Array.isArray(n.images)&&n.images.every(s=>be(s)&&s.blob instanceof Blob&&we.has(s.blob.type)&&s.blob.size<=ft&&[s.x,s.y,s.w,s.h,s.width,s.height,s.brightness,s.contrast,s.saturation].every(Number.isFinite)&&s.w>0&&s.h>0&&s.width>0&&s.height>0&&[s.brightness,s.contrast,s.saturation].every(o=>o>=0&&o<=200)&&(s.crop===void 0||yt(s.crop,s.width,s.height))&&(s.rotation===void 0||Number.isFinite(s.rotation)&&s.rotation>=0&&s.rotation<360)&&(s.parentId===void 0||typeof s.parentId=="string")&&[s.flipX,s.flipY].every(o=>o===void 0||typeof o=="boolean"))&&(n.elements===void 0||Array.isArray(n.elements)&&n.elements.every(vt))&&(n.order===void 0||Array.isArray(n.order)&&n.order.every(s=>typeof s=="string"))))return!1;const a=[...n.images,...n.elements||[]].map(s=>s.id);return new Set(a).size===a.length}const J=e=>"blob"in e&&e.blob instanceof Blob,W=e=>!J(e)&&e.kind==="frame",be=e=>!!e&&typeof e.id=="string"&&typeof e.name=="string"&&[e.x,e.y,e.w,e.h].every(n=>Number.isFinite(n)&&Math.abs(n)<=1e6)&&e.w>0&&e.h>0&&[e.locked,e.hidden].every(n=>n===void 0||typeof n=="boolean"),yt=(e,n,t)=>!!e&&[e.x,e.y,e.w,e.h].every(Number.isFinite)&&e.x>=0&&e.y>=0&&e.w>=1&&e.h>=1&&e.x+e.w<=n&&e.y+e.h<=t;function vt(e){return be(e)&&!("blob"in e)&&["text","rectangle","ellipse","frame"].includes(e.kind)&&[e.fill,e.stroke].every(n=>typeof n=="string"&&/^(#[\da-f]{6}|transparent)$/i.test(n))&&[e.strokeWidth,e.radius,e.fontSize].every(Number.isFinite)&&e.strokeWidth>=0&&e.strokeWidth<=100&&e.radius>=0&&e.radius<=1e3&&e.fontSize>=6&&e.fontSize<=500&&typeof e.text=="string"&&e.text.length<=1e4&&["sans-serif","serif","monospace"].includes(e.fontFamily)&&typeof e.bold=="boolean"&&["left","center","right"].includes(e.align)}function G(e){const n=e.crop||{w:e.width,h:e.height},t=(e.rotation||0)*Math.PI/180;return{w:Math.round((Math.abs(n.w*Math.cos(t))+Math.abs(n.h*Math.sin(t)))*1e8)/1e8,h:Math.round((Math.abs(n.w*Math.sin(t))+Math.abs(n.h*Math.cos(t)))*1e8)/1e8}}function en(e,n){const t={...e,...n},a=G(t),s=G(e),o=e.w/s.w,c=a.w*o,l=a.h*o;return{...t,x:e.x+(e.w-c)/2,y:e.y+(e.h-l)/2,w:c,h:l}}function q(e){const n=[...e.images,...e.elements||[]],t=new Map((e.order||[]).map((a,s)=>[a,s]));return n.sort((a,s)=>Number(W(s))-Number(W(a))||(t.get(a.id)??1e9)-(t.get(s.id)??1e9))}function Z(e,n){return{...e,version:2,images:n.filter(J),elements:n.filter(t=>!J(t)),order:n.map(t=>t.id)}}function wt(e,n){return Z(e,q(e).map(n))}const bt=(e,n)=>n.x>=e.x&&n.y>=e.y&&n.x+n.w<=e.x+e.w+.01&&n.y+n.h<=e.y+e.h+.01;function tn(e,n){const t=q(e),a=new Map(n);for(const s of t.filter(W)){const o=n.get(s.id);if(!(!o||s.locked||o.x===s.x&&o.y===s.y))for(const c of t)!W(c)&&!c.locked&&!a.has(c.id)&&bt(s,c)&&a.set(c.id,{...c,x:c.x+o.x-s.x,y:c.y+o.y-s.y})}return wt(e,s=>s.locked||!a.has(s.id)?s:{...s,...a.get(s.id)})}function nn(e,n,t=0,a=0){return{id:crypto.randomUUID(),kind:e,name:n,x:t,y:a,w:e==="frame"?1080:320,h:e==="frame"?1080:e==="text"?120:240,fill:e==="frame"?"#ffffff":e==="text"?"#242424":"#c9c4b8",stroke:"#242424",strokeWidth:0,radius:0,text:e==="text"?n:"",fontSize:40,fontFamily:"sans-serif",bold:!1,align:"left"}}function sn(e,n=32,t=32){return e.map(a=>({...a,id:crypto.randomUUID(),locked:!1,x:a.x+n,y:a.y+t}))}function an(e,n,t){const a=q(e),s=new Set(n);if(t==="front"||t==="back"){const c=a.filter(u=>s.has(u.id)),l=a.filter(u=>!s.has(u.id));return Z(e,t==="front"?[...l,...c]:[...c,...l])}const o=t==="up"?1:-1;for(let c=o===1?a.length-2:1;c>=0&&c<a.length;c-=o)s.has(a[c].id)&&a[c+o]&&!s.has(a[c+o].id)&&([a[c],a[c+o]]=[a[c+o],a[c]]);return Z(e,a)}const jt=["1:1","4:5","5:4","2:3","3:2","16:9","9:16"],kt=["1:1","2:3","3:2","16:9","9:16"],B=e=>{const[n,t]=e.split(":").map(Number);return n>0&&t>0?n/t:1};function St(e,n){const t=e>0&&n>0?e/n:1,a=jt.find(s=>Math.abs(Math.log(B(s)/t))<.012);return a||(t>=1?`${Number(t.toFixed(2))}:1`:`1:${Number((1/t).toFixed(2))}`)}function rn(e,n){const t=G(e),a=St(t.w,t.h),s=n==="original"?a:n,o=n==="original"?t.w/t.h:B(s),c=kt.reduce((l,u)=>Math.abs(Math.log(B(u)/o))<Math.abs(Math.log(B(l)/o))?u:l);return{aspect:o,requested:s,engine:c,originalLabel:a}}function on(e,n,t){if(!(e>0&&n>0&&t>0))return;const a=e/n;if(Math.abs(Math.log(a/t))<.001)return;if(a>t){const o=n*t;return{x:(e-o)/2,y:0,w:o,h:n}}const s=e/t;return{x:0,y:(n-s)/2,w:e,h:s}}function Nt(e,n,t=[]){const a=new Set(n.sourceIds||[]),s=e.images.filter(d=>a.has(d.id)),o=[...q(e),...t],c=s.length?Math.min(360,Math.max(s[0].w,s[0].h)):320,l=Math.max(.2,Math.min(5,n.aspect||1)),u=l>=1?c:c*l,p=l>=1?c/l:c,m=s.length?Math.max(...s.map(d=>d.x+d.w)):o.length?Math.max(...o.map(d=>d.x+d.w)):-32,h=s.length?Math.min(...s.map(d=>d.y)):0;return Array.from({length:Math.max(1,Math.min(4,Math.round(n.count)||1))},(d,x)=>({x:m+32+x*(u+32),y:h,w:u,h:p}))}function ln(e,n){if(e!=="generate_image"&&e!=="edit_image")return null;let t={};try{t=n?JSON.parse(n):{}}catch{}const a=typeof t.size=="string"&&/^\d+(?:\.\d+)?:\d+(?:\.\d+)?$/.test(t.size)?t.size:"1:1",s=Number.isInteger(t.n)?Number(t.n):1;return{count:Math.max(1,Math.min(4,s)),aspect:B(a),ratio:a,kind:e==="edit_image"?"edit":"generate"}}let V;function je(){return V??=new Promise((e,n)=>{const t=indexedDB.open("forsion-image-studio",1);t.onupgradeneeded=()=>t.result.createObjectStore("boards",{keyPath:"id"}),t.onsuccess=()=>e(t.result),t.onerror=()=>{V=void 0,n(t.error)},t.onblocked=()=>{V=void 0,n(new Error("Image Studio storage is blocked by another window"))}})}async function Dt(){const e=await je();return new Promise((n,t)=>{const a=e.transaction("boards").objectStore("boards").getAll();a.onsuccess=()=>{if(!a.result.every(xt)){t(new Error("Image Studio contains an unreadable project"));return}n(a.result)},a.onerror=()=>t(a.error)})}async function Mt(e){const n=await je();return new Promise((t,a)=>{const s=n.transaction("boards","readwrite");s.objectStore("boards").put(e),s.oncomplete=()=>t(),s.onerror=()=>a(s.error),s.onabort=()=>a(s.error||new Error("Image Studio save was interrupted"))})}let de,Q,zt=0;const R=new Set;let O;function Y(e){R.add(e),ue.setState({saving:!0}),clearTimeout(Q),Q=setTimeout(()=>{ue.getState().flush()},250)}const ue=rt((e,n)=>({boards:{},activeId:null,ready:!1,error:"",saving:!1,selection:[],past:{},future:{},placeholders:{},generationTools:{},pending:null,hydrate:()=>de??=(async()=>{try{const t=await Dt();let a=null;try{a=localStorage.getItem("image-studio.active")}catch{}e({boards:Object.fromEntries(t.map(s=>[s.id,s])),activeId:t.find(s=>s.id===a)?.id||null,ready:!0,error:""})}catch(t){e({error:String(t),ready:!1}),de=void 0}})(),create:t=>{if(!n().ready)return"";const a=gt(t);return e(s=>({boards:{...s.boards,[a.id]:a}})),n().open(a.id),Y(a.id),a.id},open:t=>{if(n().boards[t]){e({activeId:t,selection:[],pending:null});try{localStorage.setItem("image-studio.active",t)}catch{}}},close:()=>{if(n().activeId){e({activeId:null,selection:[],pending:null});try{localStorage.removeItem("image-studio.active")}catch{}}},update:(t,a,s=!0)=>{const o=n().boards[t];if(!o)return;const c=a(o);c!==o&&(e(l=>({boards:{...l.boards,[t]:{...c,updatedAt:Date.now()}},...s?{past:{...l.past,[t]:[...(l.past[t]||[]).slice(-29),o]},future:{...l.future,[t]:[]}}:{}})),Y(t))},undo:(t,a=!1)=>{const s=a?"future":"past",o=a?"past":"future",c=n()[s][t]||[],l=n().boards[t],u=c.at(-1);!l||!u||(e(p=>({boards:{...p.boards,[t]:{...u,sessionId:l.sessionId,collected:l.collected,updatedAt:Date.now()}},[s]:{...p[s],[t]:c.slice(0,-1)},[o]:{...p[o],[t]:[...p[o][t]||[],l]},selection:[]})),Y(t))},flush:async()=>{if(clearTimeout(Q),O)return O;O=(async()=>{try{for(;R.size;){const t=R.values().next().value,a=n().boards[t];R.delete(t);try{a&&await Mt(a)}catch(s){throw R.add(t),s}}e({saving:!1,error:""})}catch(t){e({saving:!1,error:String(t)})}})();try{await O}finally{O=void 0}},queue:(t,a,s=[])=>e(o=>({pending:{sessionId:t,text:o.pending?.sessionId===t?`${o.pending.text}
|
|
1
|
+
import{F as pe,aI as Pe,gi as Le,U as $e,G as Oe,aM as $,mh as Be,ci as T,cB as J,mi as Re,bp as _e,ah as He,a4 as Ue,mj as We,T as Ge,aD as ie,aO as he,aJ as qe,aE as Ke,Y as me,Z as fe,kB as ge,kY as Ve,mk as Ye,s as U,gz as Je,ml as Xe,as as Ze,c5 as Qe,cs as xe,bJ as ye,mm as et,kZ as le,k_ as tt,k$ as ve,aN as nt,mn as st,l2 as at}from"./appStore-DWP8UET9.js";import{c as rt}from"./nativeDownload-BYT082bY.js";import{u as P,d as g,j as r,R as ot,P as it}from"./index-BM2o7PeV.js";import"./client-0MPbodA6.js";import{B as lt}from"./book-open-OLNm7OaB.js";import{F as ct}from"./folder-plus-BeQHr4AZ.js";import{F as ce}from"./folder-BpsfOHD4.js";import{U as dt}from"./upload-ZrOj6tXA.js";import{P as ut}from"./pencil-cqvCkekG.js";const pt=[["path",{d:"M18 6 7 17l-5-5",key:"116fxf"}],["path",{d:"m22 10-7.5 7.5L13 16",key:"ke71qq"}]],Vt=pe("check-check",pt);const ht=[["path",{d:"M14 9 9 4 4 9",key:"1af5af"}],["path",{d:"M20 20h-7a4 4 0 0 1-4-4V4",key:"1blwi3"}]],mt=pe("corner-left-up",ht),we=new Set(["image/png","image/jpeg","image/webp","image/gif"]),ft=20*1024*1024;function gt(e){return{version:2,id:crypto.randomUUID(),name:e,updatedAt:Date.now(),sessionId:null,images:[],elements:[],order:[],collected:[]}}function Yt(e,n){return e.images.filter(t=>!t.hidden).sort((t,a)=>t.x-a.x||t.y-a.y).slice(0,n)}function Jt(e,n,t){const a=Math.min(1,360/Math.max(e,n));return{x:t.length?Math.max(...t.map(s=>s.x+s.w))+32:0,y:0,w:e*a,h:n*a}}function Xt(e){const n=new Map;let t="";for(const a of e){a.role==="user"&&(t=a.content);for(const[s,o]of(a.displayFiles||[]).entries()){if(!we.has(o.mime||"")&&!/\.(png|jpe?g|webp|gif)$/i.test(o.name)||!o.path&&!o.dataUrl)continue;const c=o.path?`${o.sourceSessionId||""}:${o.path}`:`${a.id}:${s}:${o.name}`;n.set(c,{key:c,file:o,prompt:t})}}return[...n.values()]}function Zt(e){const n=Math.max(1,Math.ceil(Math.sqrt(e.length)));return e.map((t,a)=>{const s=G(t),o=300/Math.max(s.w,s.h);return{...t,x:a%n*340,y:Math.floor(a/n)*360,w:s.w*o,h:s.h*o}})}function Qt(e){return`brightness(${e.brightness}%) contrast(${e.contrast}%) saturate(${e.saturation}%)`}function xt(e){const n=e;if(!n||n.version!==1&&n.version!==2||typeof n.id!="string"||typeof n.name!="string"||!((n.sessionId===null||typeof n.sessionId=="string")&&Number.isFinite(n.updatedAt)&&Array.isArray(n.collected)&&n.collected.every(s=>typeof s=="string")&&Array.isArray(n.images)&&n.images.every(s=>be(s)&&s.blob instanceof Blob&&we.has(s.blob.type)&&s.blob.size<=ft&&[s.x,s.y,s.w,s.h,s.width,s.height,s.brightness,s.contrast,s.saturation].every(Number.isFinite)&&s.w>0&&s.h>0&&s.width>0&&s.height>0&&[s.brightness,s.contrast,s.saturation].every(o=>o>=0&&o<=200)&&(s.crop===void 0||yt(s.crop,s.width,s.height))&&(s.rotation===void 0||Number.isFinite(s.rotation)&&s.rotation>=0&&s.rotation<360)&&(s.parentId===void 0||typeof s.parentId=="string")&&[s.flipX,s.flipY].every(o=>o===void 0||typeof o=="boolean"))&&(n.elements===void 0||Array.isArray(n.elements)&&n.elements.every(vt))&&(n.order===void 0||Array.isArray(n.order)&&n.order.every(s=>typeof s=="string"))))return!1;const a=[...n.images,...n.elements||[]].map(s=>s.id);return new Set(a).size===a.length}const X=e=>"blob"in e&&e.blob instanceof Blob,W=e=>!X(e)&&e.kind==="frame",be=e=>!!e&&typeof e.id=="string"&&typeof e.name=="string"&&[e.x,e.y,e.w,e.h].every(n=>Number.isFinite(n)&&Math.abs(n)<=1e6)&&e.w>0&&e.h>0&&[e.locked,e.hidden].every(n=>n===void 0||typeof n=="boolean"),yt=(e,n,t)=>!!e&&[e.x,e.y,e.w,e.h].every(Number.isFinite)&&e.x>=0&&e.y>=0&&e.w>=1&&e.h>=1&&e.x+e.w<=n&&e.y+e.h<=t;function vt(e){return be(e)&&!("blob"in e)&&["text","rectangle","ellipse","frame"].includes(e.kind)&&[e.fill,e.stroke].every(n=>typeof n=="string"&&/^(#[\da-f]{6}|transparent)$/i.test(n))&&[e.strokeWidth,e.radius,e.fontSize].every(Number.isFinite)&&e.strokeWidth>=0&&e.strokeWidth<=100&&e.radius>=0&&e.radius<=1e3&&e.fontSize>=6&&e.fontSize<=500&&typeof e.text=="string"&&e.text.length<=1e4&&["sans-serif","serif","monospace"].includes(e.fontFamily)&&typeof e.bold=="boolean"&&["left","center","right"].includes(e.align)}function G(e){const n=e.crop||{w:e.width,h:e.height},t=(e.rotation||0)*Math.PI/180;return{w:Math.round((Math.abs(n.w*Math.cos(t))+Math.abs(n.h*Math.sin(t)))*1e8)/1e8,h:Math.round((Math.abs(n.w*Math.sin(t))+Math.abs(n.h*Math.cos(t)))*1e8)/1e8}}function en(e,n){const t={...e,...n},a=G(t),s=G(e),o=e.w/s.w,c=a.w*o,l=a.h*o;return{...t,x:e.x+(e.w-c)/2,y:e.y+(e.h-l)/2,w:c,h:l}}function q(e){const n=[...e.images,...e.elements||[]],t=new Map((e.order||[]).map((a,s)=>[a,s]));return n.sort((a,s)=>Number(W(s))-Number(W(a))||(t.get(a.id)??1e9)-(t.get(s.id)??1e9))}function Z(e,n){return{...e,version:2,images:n.filter(X),elements:n.filter(t=>!X(t)),order:n.map(t=>t.id)}}function wt(e,n){return Z(e,q(e).map(n))}const bt=(e,n)=>n.x>=e.x&&n.y>=e.y&&n.x+n.w<=e.x+e.w+.01&&n.y+n.h<=e.y+e.h+.01;function tn(e,n){const t=q(e),a=new Map(n);for(const s of t.filter(W)){const o=n.get(s.id);if(!(!o||s.locked||o.x===s.x&&o.y===s.y))for(const c of t)!W(c)&&!c.locked&&!a.has(c.id)&&bt(s,c)&&a.set(c.id,{...c,x:c.x+o.x-s.x,y:c.y+o.y-s.y})}return wt(e,s=>s.locked||!a.has(s.id)?s:{...s,...a.get(s.id)})}function nn(e,n,t=0,a=0){return{id:crypto.randomUUID(),kind:e,name:n,x:t,y:a,w:e==="frame"?1080:320,h:e==="frame"?1080:e==="text"?120:240,fill:e==="frame"?"#ffffff":e==="text"?"#242424":"#c9c4b8",stroke:"#242424",strokeWidth:0,radius:0,text:e==="text"?n:"",fontSize:40,fontFamily:"sans-serif",bold:!1,align:"left"}}function sn(e,n=32,t=32){return e.map(a=>({...a,id:crypto.randomUUID(),locked:!1,x:a.x+n,y:a.y+t}))}function an(e,n,t){const a=q(e),s=new Set(n);if(t==="front"||t==="back"){const c=a.filter(u=>s.has(u.id)),l=a.filter(u=>!s.has(u.id));return Z(e,t==="front"?[...l,...c]:[...c,...l])}const o=t==="up"?1:-1;for(let c=o===1?a.length-2:1;c>=0&&c<a.length;c-=o)s.has(a[c].id)&&a[c+o]&&!s.has(a[c+o].id)&&([a[c],a[c+o]]=[a[c+o],a[c]]);return Z(e,a)}const jt=["1:1","4:5","5:4","2:3","3:2","16:9","9:16"],kt=["1:1","2:3","3:2","16:9","9:16"],R=e=>{const[n,t]=e.split(":").map(Number);return n>0&&t>0?n/t:1};function St(e,n){const t=e>0&&n>0?e/n:1,a=jt.find(s=>Math.abs(Math.log(R(s)/t))<.012);return a||(t>=1?`${Number(t.toFixed(2))}:1`:`1:${Number((1/t).toFixed(2))}`)}function rn(e,n){const t=G(e),a=St(t.w,t.h),s=n==="original"?a:n,o=n==="original"?t.w/t.h:R(s),c=kt.reduce((l,u)=>Math.abs(Math.log(R(u)/o))<Math.abs(Math.log(R(l)/o))?u:l);return{aspect:o,requested:s,engine:c,originalLabel:a}}function on(e,n,t){if(!(e>0&&n>0&&t>0))return;const a=e/n;if(Math.abs(Math.log(a/t))<.001)return;if(a>t){const o=n*t;return{x:(e-o)/2,y:0,w:o,h:n}}const s=e/t;return{x:0,y:(n-s)/2,w:e,h:s}}function Nt(e,n,t=[]){const a=new Set(n.sourceIds||[]),s=e.images.filter(d=>a.has(d.id)),o=[...q(e),...t],c=s.length?Math.min(360,Math.max(s[0].w,s[0].h)):320,l=Math.max(.2,Math.min(5,n.aspect||1)),u=l>=1?c:c*l,p=l>=1?c/l:c,m=s.length?Math.max(...s.map(d=>d.x+d.w)):o.length?Math.max(...o.map(d=>d.x+d.w)):-32,h=s.length?Math.min(...s.map(d=>d.y)):0;return Array.from({length:Math.max(1,Math.min(4,Math.round(n.count)||1))},(d,x)=>({x:m+32+x*(u+32),y:h,w:u,h:p}))}function ln(e,n){if(e!=="generate_image"&&e!=="edit_image")return null;let t={};try{t=n?JSON.parse(n):{}}catch{}const a=typeof t.size=="string"&&/^\d+(?:\.\d+)?:\d+(?:\.\d+)?$/.test(t.size)?t.size:"1:1",s=Number.isInteger(t.n)?Number(t.n):1;return{count:Math.max(1,Math.min(4,s)),aspect:R(a),ratio:a,kind:e==="edit_image"?"edit":"generate"}}let V;function je(){return V??=new Promise((e,n)=>{const t=indexedDB.open("forsion-image-studio",1);t.onupgradeneeded=()=>t.result.createObjectStore("boards",{keyPath:"id"}),t.onsuccess=()=>e(t.result),t.onerror=()=>{V=void 0,n(t.error)},t.onblocked=()=>{V=void 0,n(new Error("Image Studio storage is blocked by another window"))}})}async function Dt(){const e=await je();return new Promise((n,t)=>{const a=e.transaction("boards").objectStore("boards").getAll();a.onsuccess=()=>{if(!a.result.every(xt)){t(new Error("Image Studio contains an unreadable project"));return}n(a.result)},a.onerror=()=>t(a.error)})}async function Mt(e){const n=await je();return new Promise((t,a)=>{const s=n.transaction("boards","readwrite");s.objectStore("boards").put(e),s.oncomplete=()=>t(),s.onerror=()=>a(s.error),s.onabort=()=>a(s.error||new Error("Image Studio save was interrupted"))})}let de,Q,zt=0;const B=new Set;let O;function Y(e){B.add(e),ue.setState({saving:!0}),clearTimeout(Q),Q=setTimeout(()=>{ue.getState().flush()},250)}const ue=rt((e,n)=>({boards:{},activeId:null,ready:!1,error:"",saving:!1,selection:[],past:{},future:{},placeholders:{},generationTools:{},pending:null,hydrate:()=>de??=(async()=>{try{const t=await Dt();let a=null;try{a=localStorage.getItem("image-studio.active")}catch{}e({boards:Object.fromEntries(t.map(s=>[s.id,s])),activeId:t.find(s=>s.id===a)?.id||null,ready:!0,error:""})}catch(t){e({error:String(t),ready:!1}),de=void 0}})(),create:t=>{if(!n().ready)return"";const a=gt(t);return e(s=>({boards:{...s.boards,[a.id]:a}})),n().open(a.id),Y(a.id),a.id},open:t=>{if(n().boards[t]){e({activeId:t,selection:[],pending:null});try{localStorage.setItem("image-studio.active",t)}catch{}}},close:()=>{if(n().activeId){e({activeId:null,selection:[],pending:null});try{localStorage.removeItem("image-studio.active")}catch{}}},update:(t,a,s=!0)=>{const o=n().boards[t];if(!o)return;const c=a(o);c!==o&&(e(l=>({boards:{...l.boards,[t]:{...c,updatedAt:Date.now()}},...s?{past:{...l.past,[t]:[...(l.past[t]||[]).slice(-29),o]},future:{...l.future,[t]:[]}}:{}})),Y(t))},undo:(t,a=!1)=>{const s=a?"future":"past",o=a?"past":"future",c=n()[s][t]||[],l=n().boards[t],u=c.at(-1);!l||!u||(e(p=>({boards:{...p.boards,[t]:{...u,sessionId:l.sessionId,collected:l.collected,updatedAt:Date.now()}},[s]:{...p[s],[t]:c.slice(0,-1)},[o]:{...p[o],[t]:[...p[o][t]||[],l]},selection:[]})),Y(t))},flush:async()=>{if(clearTimeout(Q),O)return O;O=(async()=>{try{for(;B.size;){const t=B.values().next().value,a=n().boards[t];B.delete(t);try{a&&await Mt(a)}catch(s){throw B.add(t),s}}e({saving:!1,error:""})}catch(t){e({saving:!1,error:String(t)})}})();try{await O}finally{O=void 0}},queue:(t,a,s=[])=>e(o=>({pending:{sessionId:t,text:o.pending?.sessionId===t?`${o.pending.text}
|
|
2
2
|
|
|
3
|
-
${a}`:a,attachments:[...o.pending?.sessionId===t?o.pending.attachments:[],...s],seq:++zt}})),consume:t=>n().pending?.seq!==t?!1:(e({pending:null}),!0),beginGeneration:(t,a,s)=>{const o=n().boards[t];if(!o)return[];const c=n().placeholders[t]||[],l=Nt(o,s,c),u=crypto.randomUUID(),p=Date.now(),m=l.map((h,d)=>({...h,id:crypto.randomUUID(),generationId:u,boardId:t,sessionId:a,sourceIds:s.sourceIds||[],kind:s.kind,status:"preparing",aspect:s.aspect,ratio:s.ratio,index:d,count:l.length,createdAt:p}));return e(h=>({placeholders:{...h.placeholders,[t]:[...h.placeholders[t]||[],...m]}})),m.map(h=>h.id)},activateGeneration:t=>{const a=new Set(t);e(s=>({placeholders:Object.fromEntries(Object.entries(s.placeholders).map(([o,c])=>[o,c.map(l=>a.has(l.id)&&l.status==="preparing"?{...l,status:"running"}:l)]))}))},bindGenerationTool:(t,a,s,o)=>{if((n().generationTools[t]||[]).includes(s))return;e(m=>({generationTools:{...m.generationTools,[t]:[...(m.generationTools[t]||[]).slice(-199),s]}}));const l=(n().placeholders[t]||[]).find(m=>m.sessionId===a&&!m.toolId&&m.status!=="failed");if(l){e(m=>({placeholders:{...m.placeholders,[t]:(m.placeholders[t]||[]).map(h=>h.generationId===l.generationId?{...h,toolId:s,status:"running"}:h)}}));return}const u=n().beginGeneration(t,a,o),p=new Set(u);e(m=>({placeholders:{...m.placeholders,[t]:(m.placeholders[t]||[]).map(h=>p.has(h.id)?{...h,toolId:s,status:"running"}:h)}}))},failGeneration:(t,a)=>{const s=a.ids?new Set(a.ids):null;e(o=>({placeholders:{...o.placeholders,[t]:(o.placeholders[t]||[]).map(c=>(!s||s.has(c.id))&&(!a.sessionId||c.sessionId===a.sessionId)&&(!a.toolId||c.toolId===a.toolId)?{...c,status:"failed"}:c)}}))},takeGeneration:(t,a)=>{const o=(n().placeholders[t]||[]).filter(c=>c.sessionId===a&&c.status!=="failed").sort((c,l)=>c.createdAt-l.createdAt||c.index-l.index)[0];if(o)return e(c=>({placeholders:{...c.placeholders,[t]:(c.placeholders[t]||[]).filter(l=>l.id!==o.id)}})),o},removeGeneration:(t,a)=>e(s=>({placeholders:{...s.placeholders,[t]:(s.placeholders[t]||[]).filter(o=>o.id!==a)}}))})),Ft=({containerRef:e,scanTrigger:n})=>{const{t}=P(),[a,s]=g.useState([]),[o,c]=g.useState(null),l=g.useCallback(()=>{const p=e.current;if(!p){s(d=>d.length?[]:d);return}const m=p.querySelectorAll('[data-toc-msg-role="user"], [data-toc-level]'),h=[];m.forEach(d=>{if(d.id){if(d.dataset.tocMsgRole==="user"){const x=(d.dataset.tocTitle||d.textContent||"").trim();x&&h.push({id:d.id,level:0,kind:"user",text:x})}else if(d.dataset.tocLevel){const x=(d.textContent||"").trim();x&&h.push({id:d.id,level:Number(d.dataset.tocLevel)||1,kind:"heading",text:x})}}}),s(d=>d.length===h.length&&d.every((x,w)=>x.id===h[w].id&&x.text===h[w].text)?d:h)},[e]);g.useEffect(()=>{l();const p=e.current;if(!p)return;let m=0;const h=new MutationObserver(()=>{cancelAnimationFrame(m),m=requestAnimationFrame(l)});return h.observe(p,{childList:!0,subtree:!0,characterData:!0}),()=>{cancelAnimationFrame(m),h.disconnect()}},[l,e,n]),g.useEffect(()=>{const p=e.current;if(!p||a.length===0)return;const m=new Set,h=new IntersectionObserver(d=>{for(const w of d)w.isIntersecting?m.add(w.target.id):m.delete(w.target.id);const x=a.find(w=>m.has(w.id));x&&c(x.id)},{root:p,rootMargin:"0px 0px -65% 0px",threshold:0});for(const d of a)try{const x=p.querySelector(`#${CSS.escape(d.id)}`);x&&h.observe(x)}catch{}return()=>h.disconnect()},[a,e]);const u=g.useCallback(p=>{const m=e.current;if(!m)return;let h=null;try{h=m.querySelector(`#${CSS.escape(p)}`)}catch{return}if(!h)return;const d=h.getBoundingClientRect().top-m.getBoundingClientRect().top+m.scrollTop;m.scrollTo({top:Math.max(0,d-16),behavior:"smooth"}),c(p)},[e]);return a.length===0?r.jsx("div",{className:"panel-note",children:t("toc.emptyNote")}):r.jsx("div",{className:"toc-list",children:a.map(p=>r.jsxs("button",{type:"button",className:`toc-item${p.kind==="user"?" user":""}${o===p.id?" active":""}`,style:{paddingLeft:6+p.level*14},title:p.text,onClick:()=>u(p.id),children:[p.kind==="user"?r.jsx(Pe,{size:12,className:"toc-ico"}):r.jsx(Le,{size:11,className:"toc-ico"}),r.jsx("span",{className:"toc-text",children:p.text})]},p.id))})};function Ct(e){if(e==="__host__")return"#b8860b";let n=0;for(let t=0;t<e.length;t++)n=n*31+e.charCodeAt(t)>>>0;return`hsl(${n%360} 62% 45%)`}const ke=({segs:e})=>r.jsx("div",{style:{display:"flex",flexDirection:"column",gap:8},children:e.map((n,t)=>n.t==="tool"?r.jsxs("div",{className:"panel-note",style:{fontSize:"var(--ui-font-caption, 11px)",opacity:n.error?.95:.7},children:["🔧 ",r.jsx("b",{children:n.name}),n.preview?` — ${n.preview.slice(0,200)}`:""]},t):n.t==="vote"?r.jsxs("div",{className:"panel-note",style:{fontSize:"var(--ui-font-caption, 11px)"},children:["🗳 ",n.text]},t):r.jsxs("div",{children:[n.speaker&&r.jsxs("div",{className:"msg-role-with-avatar",style:{color:n.color,fontSize:12,fontWeight:600,marginBottom:2,display:"flex",alignItems:"center",gap:4},children:[r.jsx("span",{className:"msg-avatar fallback",style:{background:n.color,width:16,height:16,fontSize:10},children:n.speaker.slice(0,1)}),r.jsx("span",{children:n.speaker})]}),r.jsx("div",{className:"msg-content",style:{fontSize:"var(--ui-font-meta, 12px)"},children:r.jsx(
|
|
4
|
-
`);g.useEffect(()=>{t(u=>{const p=new Set([...u].filter(m=>e.includes(m)));return p.size===u.size?u:p})},[s]);const o=u=>{t(new Set([u])),a.current=u};return{selected:n,onClick:(u,p)=>{if(p.metaKey||p.ctrlKey)t(m=>{const h=new Set(m);return h.has(u)?h.delete(u):h.add(u),h}),a.current=u;else if(p.shiftKey&&a.current){const m=e.indexOf(a.current),h=e.indexOf(u);if(m>=0&&h>=0){const[d,x]=m<h?[m,h]:[h,m];t(new Set(e.slice(d,x+1)))}else o(u)}else o(u)},only:o,clear:()=>{t(new Set),a.current=null}}}const Ne=({menu:e,onClose:n,autoFocus:t=!1})=>{const[a,s]=g.useState(()=>!0),o=g.useRef({menu:e,onClose:n});o.current={menu:e,onClose:n},g.useEffect(()=>{if(a)return;const l=new AbortController;return Be(o.current.menu.items,{signal:l.signal}).then(u=>{if(!l.signal.aborted){if(!u.handled){s(!0);return}o.current.onClose(),u.value?.run()}}),()=>l.abort()},[a,e.x,e.y]);const c=g.useRef(null);return g.useEffect(()=>{a&&t&&c.current?.focus({preventScroll:!0})},[a,t,e.x,e.y]),g.useEffect(()=>{if(!a)return;const l=()=>n(),u=p=>{p.key==="Escape"&&n()};return window.addEventListener("pointerdown",l),window.addEventListener("contextmenu",l),window.addEventListener("keydown",u),window.addEventListener("blur",l),()=>{window.removeEventListener("pointerdown",l),window.removeEventListener("contextmenu",l),window.removeEventListener("keydown",u),window.removeEventListener("blur",l)}},[n,a]),a?_e.createPortal(r.jsx(He,{className:"ctx-menu",role:"menu",x:e.x,y:e.y,onPointerDown:l=>l.stopPropagation(),onContextMenu:l=>{l.preventDefault(),l.stopPropagation()},onKeyDown:l=>{if(l.key==="Escape"||l.key==="Tab"){l.preventDefault(),l.stopPropagation(),n();return}if(!["ArrowDown","ArrowUp","Home","End"].includes(l.key))return;l.preventDefault(),l.stopPropagation();const u=Array.from(l.currentTarget.querySelectorAll("button:not(:disabled)")),p=u.indexOf(document.activeElement),m=l.key==="Home"?0:l.key==="End"?u.length-1:(p+(l.key==="ArrowDown"?1:-1)+u.length)%u.length;u[m]?.focus()},children:e.items.map((l,u)=>r.jsxs(ot.Fragment,{children:[l.separatorBefore&&r.jsx("div",{className:"ctx-separator",role:"separator"}),r.jsxs("button",{ref:u===e.items.findIndex(p=>!p.disabled)?c:void 0,role:"menuitem","aria-label":l.label,disabled:l.disabled,className:`ctx-item${l.danger?" danger":""}`,onClick:()=>{n(),l.run()},children:[l.icon,r.jsx("span",{children:l.label}),l.shortcut&&r.jsx("kbd",{className:"ctx-shortcut","aria-hidden":"true",children:l.shortcut})]})]},u))}),document.body):null},De=(e,n)=>({x:e.clientX,y:e.clientY}),Tt=e=>e.sessionConfig?.execMode==="host"&&e.sessionConfig.cwd&&window.tangu?.listDir?r.jsx(Pt,{cwd:e.sessionConfig.cwd,running:e.running,onToast:e.onToast,onOpenPreview:e.onOpenPreview}):r.jsx(Lt,{...e}),Pt=({cwd:e,running:n,onToast:t,onOpenPreview:a})=>{const{t:s}=P(),[o,c]=g.useState(e),[l,u]=g.useState([]),[p,m]=g.useState(!1),[h,d]=g.useState(null),[x,w]=g.useState(""),[E,k]=g.useState(!1),[N,D]=g.useState(""),[f,S]=g.useState(null),[b,C]=g.useState(null),[M,z]=g.useState(null),[Me,_]=g.useState(!1),F=Se(l.map(i=>i.path)),L=!!window.tangu?.mkdirHost,K=!!window.tangu?.revealHostPath;g.useEffect(()=>{c(e),d(null),k(!1)},[e]);const I=g.useCallback(async()=>{if(window.tangu?.listDir){m(!0);try{u(await window.tangu.listDir(o))}catch(i){t(s("panel.toast.listDirFail",{err:i?.message||i}),!0)}finally{m(!1)}}},[o,t]);g.useEffect(()=>{I()},[I,n]);const H=i=>{const y=Math.max(i.lastIndexOf("/"),i.lastIndexOf("\\"));return y>0?i.slice(0,y):i},ze=o===e,ee=o.startsWith(e)?o.slice(e.length).replace(/^[/\\]+/,""):o,te=i=>{i.isDir||!window.tangu?.readHostFile||a({name:i.name,path:i.path,load:async()=>{const y=await window.tangu.readHostFile(i.path);return y.tooLarge?{tooLarge:!0,size:y.size}:{mimeType:y.mimeType,bytes:ve(y.content),size:y.size,mtimeMs:y.mtimeMs}},download:K?()=>{window.tangu?.revealHostPath?.(i.path)}:void 0})},ne=i=>{i.isDir?c(i.path):te(i)},Fe=i=>{d(i.path),w(i.name)},Ce=async i=>{const y=x.trim();if(d(null),!(!y||y===i.name||!window.tangu?.renameHostPath))try{await window.tangu.renameHostPath(i.path,y),I()}catch(j){t(s("panel.toast.renameFail",{err:j?.message||j}),!0)}},se=async()=>{const i=N.trim();if(k(!1),D(""),!(!i||!window.tangu?.mkdirHost))try{await window.tangu.mkdirHost(o,i),I()}catch(y){t(s("panel.toast.mkdirFail",{err:y?.message||y}),!0)}},Ie=async i=>{if(!(!i.length||!window.tangu?.trashHostPath||!window.confirm(i.length===1?s("panel.confirm.trash",{name:i[0].split(/[/\\]/).pop()||""}):s("panel.confirm.trashN",{n:String(i.length)}))))try{for(const j of i)await window.tangu.trashHostPath(j);F.clear(),I()}catch(j){t(s("panel.toast.deleteFail",{err:j?.message||j}),!0)}},Ee=async(i,y)=>{const j=y.filter(v=>v!==i);if(!(!j.length||!window.tangu?.moveHostPath))try{for(const v of j)await window.tangu.moveHostPath(v,i);F.clear(),I()}catch(v){t(s("panel.toast.moveFail",{err:v?.message||v}),!0)}},ae=async(i,y)=>{if(!window.tangu?.copyHostFiles||!window.tangu?.getPathForFile)return;const j=Array.from(i).map(v=>{try{return window.tangu.getPathForFile(v)}catch{return""}}).filter(Boolean);if(j.length)try{const v=await window.tangu.copyHostFiles(j,y);t(s("panel.toast.copied",{n:String(v.copied)})),I()}catch(v){t(s("panel.toast.copyFail",{err:v?.message||v}),!0)}},Ae=(i,y)=>{i.preventDefault(),i.stopPropagation();const j=F.selected.has(y.path)?[...F.selected]:[y.path];F.selected.has(y.path)||F.only(y.path);const v=j.length>1,A=[];!v&&!y.isDir&&A.push({label:s("panel.action.preview"),icon:r.jsx(xe,{size:13}),run:()=>te(y)}),!v&&L&&A.push({label:s("panel.action.rename"),icon:r.jsx(ut,{size:13}),run:()=>Fe(y)}),!v&&K&&A.push({label:s("panel.action.revealInFileManager"),icon:r.jsx(ie,{size:13}),run:()=>window.tangu?.revealHostPath?.(y.path)}),L&&A.push({label:v?s("panel.action.deleteN",{n:String(j.length)}):s("panel.action.moveToTrash"),icon:r.jsx(ye,{size:13}),danger:!0,run:()=>{Ie(j)}}),A.length&&S({...De(i,A.length),items:A})},Te=(i,y)=>{if(i.altKey&&window.tangu?.startHostDrag){i.preventDefault(),window.tangu.startHostDrag(y.path);return}const j=F.selected.has(y.path)?[...F.selected]:[y.path];C(j),i.dataTransfer.setData(At,JSON.stringify(j)),i.dataTransfer.effectAllowed="copyMove"},re=(i,y)=>{const j=L&&i.dataTransfer.types.includes("Files");!b&&!j||b?.includes(y)||(i.preventDefault(),i.stopPropagation(),z(y),_(!1))},oe=(i,y)=>{i.preventDefault(),i.stopPropagation();const j=i.dataTransfer.files,v=b;z(null),C(null),j?.length?ae(j,y):v?.length&&Ee(y,v)};return r.jsxs("div",{className:Me?"wsfiles dragover":"wsfiles",onClick:i=>{i.target===i.currentTarget&&F.clear()},onDragOver:i=>{L&&i.dataTransfer.types.includes("Files")&&!b&&(i.preventDefault(),_(!0))},onDragLeave:i=>{i.currentTarget.contains(i.relatedTarget)||_(!1)},onDrop:i=>{i.preventDefault(),_(!1),z(null),i.dataTransfer.files?.length&&!b&&ae(i.dataTransfer.files,o)},children:[r.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4,marginBottom:6},children:[r.jsx("span",{className:"panel-section-title",style:{flex:1,padding:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:o,children:ee?`…/${ee}`:e.split(/[/\\]/).filter(Boolean).pop()||e}),L&&r.jsx("button",{className:"icon-btn",style:{width:24,height:24},onClick:()=>{k(!0),D("")},title:s("panel.action.newFolder"),children:r.jsx(ct,{size:13})}),K&&r.jsx("button",{className:"icon-btn",style:{width:24,height:24},onClick:()=>window.tangu?.revealHostPath?.(o),title:s("panel.action.openCurDirInFileManager"),children:r.jsx(ie,{size:13})}),r.jsx("button",{className:"icon-btn",style:{width:24,height:24},onClick:()=>{I()},title:s("panel.action.refresh"),children:p?r.jsx($,{size:13,className:"spin"}):r.jsx(he,{size:13})})]}),E&&r.jsxs("div",{className:"file-row",style:{cursor:"default"},children:[r.jsx(ce,{size:13,style:{color:"var(--accent-ink)"}}),r.jsx("input",{autoFocus:!0,className:"file-rename-input",value:N,placeholder:s("panel.placeholder.newFolderName"),onChange:i=>D(i.target.value),onKeyDown:i=>{i.key==="Enter"?se():i.key==="Escape"&&(k(!1),D(""))},onBlur:()=>{k(!1),D("")}}),r.jsxs("span",{className:"file-act",style:{opacity:1},children:[r.jsx("button",{className:"icon-btn",style:{width:22,height:22},title:s("panel.action.create"),onMouseDown:i=>{i.preventDefault(),se()},children:r.jsx(qe,{size:12})}),r.jsx("button",{className:"icon-btn",style:{width:22,height:22},title:s("panel.action.cancel"),onMouseDown:i=>{i.preventDefault(),k(!1),D("")},children:r.jsx(Ke,{size:12})})]})]}),!ze&&r.jsxs("div",{className:`file-row${M===H(o)?" drop-target":""}`,role:"button",tabIndex:0,onClick:()=>c(H(o)),onDragOver:i=>re(i,H(o)),onDragLeave:()=>z(null),onDrop:i=>oe(i,H(o)),children:[r.jsx(mt,{size:13}),r.jsx("span",{className:"file-name",children:s("panel.parentDir")})]}),l.length===0&&!p&&!E&&r.jsx("div",{className:"panel-note",children:s("panel.emptyDir")}),l.map(i=>{const y=F.selected.has(i.path),j=i.isDir&&M===i.path;return r.jsxs("div",{className:`file-row${y?" selected":""}${j?" drop-target":""}`,role:"button",tabIndex:0,draggable:L&&h!==i.path,onDragStart:v=>Te(v,i),onDragEnd:()=>{C(null),z(null)},onDragOver:i.isDir?v=>re(v,i.path):void 0,onDragLeave:i.isDir?()=>z(null):void 0,onDrop:i.isDir?v=>oe(v,i.path):void 0,onClick:v=>{h!==i.path&&F.onClick(i.path,v)},onDoubleClick:()=>{h!==i.path&&ne(i)},onContextMenu:v=>Ae(v,i),onKeyDown:v=>{h!==i.path&&v.key==="Enter"&&(v.preventDefault(),ne(i))},children:[i.isDir?r.jsx(ce,{size:13,style:{color:"var(--accent-ink)"}}):/\.(png|jpe?g|gif|webp|svg|bmp)$/i.test(i.name)?r.jsx(me,{size:13}):r.jsx(fe,{size:13}),h===i.path?r.jsx("input",{autoFocus:!0,className:"file-rename-input",value:x,onClick:v=>v.stopPropagation(),onChange:v=>w(v.target.value),onKeyDown:v=>{v.stopPropagation(),v.key==="Enter"?Ce(i):v.key==="Escape"&&d(null)},onBlur:()=>d(null)}):r.jsxs(r.Fragment,{children:[r.jsx("span",{className:"file-name",children:i.name}),!i.isDir&&r.jsx("span",{className:"file-size",children:ge(i.size)})]})]},i.path)}),f&&r.jsx(Ne,{menu:f,onClose:()=>S(null)})]})},Lt=({cfg:e,sessionId:n,running:t,onToast:a,onOpenPreview:s})=>{const{t:o}=P(),[c,l]=g.useState([]),[u,p]=g.useState(!1),[m,h]=g.useState(null),d=Se(c.map(f=>f.path)),x=g.useCallback(async()=>{p(!0);try{l(await Ve(T(n),n))}catch(f){a(o("panel.toast.workspaceLoadFail",{err:f?.message||f}),!0)}finally{p(!1)}},[e,n,a]);g.useEffect(()=>{x()},[x,t]);const w=f=>{s({name:f.path,load:async()=>{const S=await tt(T(n),n,f.path);return{mimeType:S.mimeType,bytes:ve(S.content),size:S.size}},download:()=>{le(T(n),n,f.path).catch(S=>a(S.message,!0))}})},E=f=>{le(T(n),n,f).catch(S=>a(S.message,!0))},k=async f=>{if(!(!f.length||!window.confirm(f.length===1?o("panel.confirm.delete",{name:f[0].replace(/^\//,"")}):o("panel.confirm.deleteN",{n:String(f.length)}))))try{for(const b of f)await at(T(n),n,b);d.clear(),x()}catch(b){a(b.message,!0)}},N=async f=>{if(!f?.length)return;const S=await Promise.all(Array.from(f).map(async b=>{const C=new Uint8Array(await b.arrayBuffer());let M="";for(let z=0;z<C.length;z+=32768)M+=String.fromCharCode(...C.subarray(z,z+32768));return{path:b.name,content:btoa(M),encoding:"base64",mimeType:b.type}}));try{const b=await et(T(n),n,S);a(o("panel.toast.uploaded",{saved:b.saved,total:b.total})),x()}catch(b){a(o("panel.toast.uploadFail",{err:b?.message||b}),!0)}},D=(f,S)=>{f.preventDefault(),f.stopPropagation();const b=d.selected.has(S.path)?[...d.selected]:[S.path];d.selected.has(S.path)||d.only(S.path);const C=b.length>1,M=[];C||M.push({label:o("panel.action.preview"),icon:r.jsx(xe,{size:13}),run:()=>w(S)}),C||M.push({label:o("panel.action.download"),icon:r.jsx(nt,{size:13}),run:()=>E(S.path)}),M.push({label:C?o("panel.action.deleteN",{n:String(b.length)}):o("panel.action.delete"),icon:r.jsx(ye,{size:13}),danger:!0,run:()=>{k(b)}}),h({...De(f,M.length),items:M})};return r.jsxs("div",{onClick:f=>{f.target===f.currentTarget&&d.clear()},onDragOver:f=>f.preventDefault(),onDrop:f=>{f.preventDefault(),N(f.dataTransfer.files)},children:[r.jsxs("div",{style:{display:"flex",gap:4,marginBottom:6},children:[r.jsx("span",{className:"panel-section-title",style:{flex:1,padding:0},children:o("panel.sessionFiles")}),r.jsxs("label",{className:"icon-btn",style:{width:24,height:24},title:o("panel.action.uploadFile"),children:[r.jsx(dt,{size:13}),r.jsx("input",{type:"file",multiple:!0,hidden:!0,onChange:f=>{N(f.target.files),f.target.value=""}})]}),r.jsx("button",{className:"icon-btn",style:{width:24,height:24},onClick:()=>{x()},title:o("panel.action.refresh"),children:u?r.jsx($,{size:13,className:"spin"}):r.jsx(he,{size:13})})]}),c.length===0&&r.jsx("div",{className:"panel-note",children:o("panel.noFilesYet")}),c.map(f=>{const S=d.selected.has(f.path);return r.jsxs("div",{className:`file-row${S?" selected":""}`,role:"button",tabIndex:0,onClick:b=>d.onClick(f.path,b),onDoubleClick:()=>w(f),onContextMenu:b=>D(b,f),onKeyDown:b=>{b.key==="Enter"&&(b.preventDefault(),w(f))},children:[f.mimeType.startsWith("image/")?r.jsx(me,{size:13}):r.jsx(fe,{size:13}),r.jsx("span",{className:"file-name",children:f.path.replace(/^\//,"")}),r.jsx("span",{className:"file-size",children:ge(f.size)})]},f.path)}),m&&r.jsx(Ne,{menu:m,onClose:()=>h(null)})]})},$t=({cfg:e,sessionConfig:n,onToast:t})=>{const a=n?.groupChat&&n.groupAgents?.length?Array.from(new Set(n.groupAgents)):[n?.agentSlug||it];return r.jsx("div",{children:a.map(s=>r.jsx(Ot,{cfg:e,slug:s,onToast:t,showName:a.length>1,canAppend:a.length===1},s))})},Ot=({cfg:e,slug:n,onToast:t,showName:a,canAppend:s})=>{const{t:o}=P(),[c,l]=g.useState(null),[u,p]=g.useState([]),[m,h]=g.useState(null),[d,x]=g.useState(""),w=g.useCallback(async()=>{try{l(await Ye(U(),n))}catch(k){l(null),t(o("panel.toast.memoryLoadFail",{err:k?.message||k}),!0)}try{const k=(await Xe(U(),n)).slice().sort((f,S)=>S.localeCompare(f)).slice(0,3),D=(await Promise.all(k.map(async f=>({date:f,content:await Je(U(),n,f)})))).filter(f=>f.content.trim());p(D),h(f=>f??D[0]?.date??null)}catch{p([])}},[e,n,t,o]);g.useEffect(()=>{w()},[w]);const E=async()=>{const k=d.trim();if(k)try{const N=await st(U(),k,n);t(N.appended?o("panel.toast.memorySaved"):o("panel.toast.memoryNotWritten")),x(""),w()}catch(N){t(o("panel.toast.appendFail",{err:N?.message||N}),!0)}};return r.jsxs("div",{className:"agentmem",children:[a&&r.jsx("div",{className:"agentmem-agent",children:n}),r.jsx("div",{className:"panel-section-title",children:o("panel.memory.currentAgent")}),c===null&&r.jsx("div",{className:"panel-note",children:o("panel.memory.notConnected")}),c!==null&&(c.trim()?r.jsx("div",{style:{fontSize:"var(--ui-font-meta, 12px)",padding:"0 8px"},className:"msg-content",children:r.jsx(X,{content:c})}):r.jsx("div",{className:"panel-note",children:o("panel.memory.empty")})),s&&r.jsxs("div",{style:{display:"flex",gap:6,padding:"8px 8px 0"},children:[r.jsx("input",{type:"text",value:d,placeholder:o("panel.memory.appendPlaceholder"),onChange:k=>x(k.target.value),onKeyDown:k=>k.key==="Enter"&&void E(),style:{flex:1,fontSize:"var(--ui-font-meta, 12px)",padding:"5px 8px",background:"var(--bg-card)",border:"var(--border-width) solid var(--border)",borderRadius:"var(--radius-sm)",outline:"none"}}),r.jsx("button",{className:"btn ghost sm",onClick:()=>{E()},children:o("panel.memory.append")})]}),r.jsx("div",{className:"panel-section-title",style:{marginTop:14},children:o("panel.memory.recentLogs")}),u.length===0&&r.jsx("div",{className:"panel-note",children:o("panel.log.none")}),u.map(k=>{const N=m===k.date;return r.jsxs("div",{className:"agentmem-log",children:[r.jsxs("button",{className:"agentmem-log-head",onClick:()=>h(N?null:k.date),children:[N?r.jsx(Ze,{size:12}):r.jsx(Qe,{size:12}),r.jsx("span",{children:k.date})]}),N&&r.jsx("div",{className:"agentmem-log-body msg-content",children:r.jsx(X,{content:k.content})})]},k.date)})]})};export{Ne as C,jt as E,we as I,ft as M,cn as R,Vt as a,q as b,Yt as c,G as d,Z as e,tn as f,Zt as g,Xt as h,J as i,De as j,W as k,gt as l,wt as m,nn as n,rn as o,xt as p,Qt as q,an as r,ln as s,en as t,ue as u,yt as v,Jt as w,on as x,sn as y,bt as z};
|
|
3
|
+
${a}`:a,attachments:[...o.pending?.sessionId===t?o.pending.attachments:[],...s],seq:++zt}})),consume:t=>n().pending?.seq!==t?!1:(e({pending:null}),!0),beginGeneration:(t,a,s)=>{const o=n().boards[t];if(!o)return[];const c=n().placeholders[t]||[],l=Nt(o,s,c),u=crypto.randomUUID(),p=Date.now(),m=l.map((h,d)=>({...h,id:crypto.randomUUID(),generationId:u,boardId:t,sessionId:a,sourceIds:s.sourceIds||[],kind:s.kind,status:"preparing",aspect:s.aspect,ratio:s.ratio,index:d,count:l.length,createdAt:p}));return e(h=>({placeholders:{...h.placeholders,[t]:[...h.placeholders[t]||[],...m]}})),m.map(h=>h.id)},activateGeneration:t=>{const a=new Set(t);e(s=>({placeholders:Object.fromEntries(Object.entries(s.placeholders).map(([o,c])=>[o,c.map(l=>a.has(l.id)&&l.status==="preparing"?{...l,status:"running"}:l)]))}))},bindGenerationTool:(t,a,s,o)=>{if((n().generationTools[t]||[]).includes(s))return;e(m=>({generationTools:{...m.generationTools,[t]:[...(m.generationTools[t]||[]).slice(-199),s]}}));const l=(n().placeholders[t]||[]).find(m=>m.sessionId===a&&!m.toolId&&m.status!=="failed");if(l){e(m=>({placeholders:{...m.placeholders,[t]:(m.placeholders[t]||[]).map(h=>h.generationId===l.generationId?{...h,toolId:s,status:"running"}:h)}}));return}const u=n().beginGeneration(t,a,o),p=new Set(u);e(m=>({placeholders:{...m.placeholders,[t]:(m.placeholders[t]||[]).map(h=>p.has(h.id)?{...h,toolId:s,status:"running"}:h)}}))},failGeneration:(t,a)=>{const s=a.ids?new Set(a.ids):null;e(o=>({placeholders:{...o.placeholders,[t]:(o.placeholders[t]||[]).map(c=>(!s||s.has(c.id))&&(!a.sessionId||c.sessionId===a.sessionId)&&(!a.toolId||c.toolId===a.toolId)?{...c,status:"failed"}:c)}}))},takeGeneration:(t,a)=>{const o=(n().placeholders[t]||[]).filter(c=>c.sessionId===a&&c.status!=="failed").sort((c,l)=>c.createdAt-l.createdAt||c.index-l.index)[0];if(o)return e(c=>({placeholders:{...c.placeholders,[t]:(c.placeholders[t]||[]).filter(l=>l.id!==o.id)}})),o},removeGeneration:(t,a)=>e(s=>({placeholders:{...s.placeholders,[t]:(s.placeholders[t]||[]).filter(o=>o.id!==a)}}))})),Ft=({containerRef:e,scanTrigger:n})=>{const{t}=P(),[a,s]=g.useState([]),[o,c]=g.useState(null),l=g.useCallback(()=>{const p=e.current;if(!p){s(d=>d.length?[]:d);return}const m=p.querySelectorAll('[data-toc-msg-role="user"], [data-toc-level]'),h=[];m.forEach(d=>{if(d.id){if(d.dataset.tocMsgRole==="user"){const x=(d.dataset.tocTitle||d.textContent||"").trim();x&&h.push({id:d.id,level:0,kind:"user",text:x})}else if(d.dataset.tocLevel){const x=(d.textContent||"").trim();x&&h.push({id:d.id,level:Number(d.dataset.tocLevel)||1,kind:"heading",text:x})}}}),s(d=>d.length===h.length&&d.every((x,w)=>x.id===h[w].id&&x.text===h[w].text)?d:h)},[e]);g.useEffect(()=>{l();const p=e.current;if(!p)return;let m=0;const h=new MutationObserver(()=>{cancelAnimationFrame(m),m=requestAnimationFrame(l)});return h.observe(p,{childList:!0,subtree:!0,characterData:!0}),()=>{cancelAnimationFrame(m),h.disconnect()}},[l,e,n]),g.useEffect(()=>{const p=e.current;if(!p||a.length===0)return;const m=new Set,h=new IntersectionObserver(d=>{for(const w of d)w.isIntersecting?m.add(w.target.id):m.delete(w.target.id);const x=a.find(w=>m.has(w.id));x&&c(x.id)},{root:p,rootMargin:"0px 0px -65% 0px",threshold:0});for(const d of a)try{const x=p.querySelector(`#${CSS.escape(d.id)}`);x&&h.observe(x)}catch{}return()=>h.disconnect()},[a,e]);const u=g.useCallback(p=>{const m=e.current;if(!m)return;let h=null;try{h=m.querySelector(`#${CSS.escape(p)}`)}catch{return}if(!h)return;const d=h.getBoundingClientRect().top-m.getBoundingClientRect().top+m.scrollTop;m.scrollTo({top:Math.max(0,d-16),behavior:"smooth"}),c(p)},[e]);return a.length===0?r.jsx("div",{className:"panel-note",children:t("toc.emptyNote")}):r.jsx("div",{className:"toc-list",children:a.map(p=>r.jsxs("button",{type:"button",className:`toc-item${p.kind==="user"?" user":""}${o===p.id?" active":""}`,style:{paddingLeft:6+p.level*14},title:p.text,onClick:()=>u(p.id),children:[p.kind==="user"?r.jsx(Pe,{size:12,className:"toc-ico"}):r.jsx(Le,{size:11,className:"toc-ico"}),r.jsx("span",{className:"toc-text",children:p.text})]},p.id))})};function Ct(e){if(e==="__host__")return"#b8860b";let n=0;for(let t=0;t<e.length;t++)n=n*31+e.charCodeAt(t)>>>0;return`hsl(${n%360} 62% 45%)`}const ke=({segs:e})=>r.jsx("div",{style:{display:"flex",flexDirection:"column",gap:8},children:e.map((n,t)=>n.t==="tool"?r.jsxs("div",{className:"panel-note",style:{fontSize:"var(--ui-font-caption, 11px)",opacity:n.error?.95:.7},children:["🔧 ",r.jsx("b",{children:n.name}),n.preview?` — ${n.preview.slice(0,200)}`:""]},t):n.t==="vote"?r.jsxs("div",{className:"panel-note",style:{fontSize:"var(--ui-font-caption, 11px)"},children:["🗳 ",n.text]},t):r.jsxs("div",{children:[n.speaker&&r.jsxs("div",{className:"msg-role-with-avatar",style:{color:n.color,fontSize:12,fontWeight:600,marginBottom:2,display:"flex",alignItems:"center",gap:4},children:[r.jsx("span",{className:"msg-avatar fallback",style:{background:n.color,width:16,height:16,fontSize:10},children:n.speaker.slice(0,1)}),r.jsx("span",{children:n.speaker})]}),r.jsx("div",{className:"msg-content",style:{fontSize:"var(--ui-font-meta, 12px)"},children:r.jsx(J,{content:n.text||""})})]},t))}),Et=({sessionId:e,runId:n})=>{const{t}=P(),[a,s]=g.useState([]),[o,c]=g.useState(!0),l=g.useRef(null);return g.useEffect(()=>{const u=new AbortController;s([]),c(!0);let p="",m="";const h=d=>s(x=>{const w=x[x.length-1];return w&&w.t==="text"?[...x.slice(0,-1),{...w,text:w.text+d}]:[...x,{t:"text",speaker:p,color:m,text:d}]});return Be(T(e),n,d=>{const x=d.payload||{};switch(d.type){case"group_speaker":x.phase==="start"&&(p=x.name||x.slug||"",m=Ct(String(x.slug||"")),s(w=>[...w,{t:"text",speaker:p,color:m,text:""}]));break;case"token":x.delta&&h(String(x.delta));break;case"tool_call":s(w=>[...w,{t:"tool",name:String(x.name||"")}]);break;case"group_vote":s(w=>[...w,{t:"vote",text:`${x.endCount}/${x.total} ${t("panel.subchats.voteEnd")}`}]);break;case"group_ended":case"done":case"error":c(!1);break}},u.signal).catch(()=>c(!1)),()=>u.abort()},[e,n,t]),g.useEffect(()=>{l.current?.scrollIntoView({block:"end"})},[a]),r.jsxs("div",{children:[a.length===0&&o&&r.jsxs("div",{className:"panel-note",style:{fontSize:11.5},children:[r.jsx($,{size:12,className:"spin"})," ",t("panel.subchats.connecting")]}),r.jsx(ke,{segs:a}),o&&a.length>0&&r.jsxs("div",{className:"panel-note",style:{fontSize:11.5,marginTop:6},children:[r.jsx($,{size:12,className:"spin"})," ",t("panel.subchats.live")]}),r.jsx("div",{ref:l})]})},It=({sessionId:e,subChats:n})=>{const{t}=P(),a=n||[],[s,o]=g.useState(null),c=a.find(l=>l.id===s)||a[a.length-1]||null;return a.length?r.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:8},children:[r.jsx("div",{style:{display:"flex",flexDirection:"column",gap:2,maxHeight:140,overflowY:"auto"},children:a.map(l=>r.jsxs("div",{role:"button",tabIndex:0,className:`file-row${c?.id===l.id?" selected":""}`,onClick:()=>o(l.id),children:[l.kind==="discussion"?r.jsx($e,{size:13}):r.jsx(Oe,{size:13}),r.jsx("span",{className:"file-name",title:l.title,children:l.title||l.id.slice(0,8)}),l.streaming&&r.jsx($,{size:12,className:"spin",style:{opacity:.6}})]},l.id))}),r.jsx("div",{style:{height:1,background:"var(--border)"}}),c&&r.jsx("div",{style:{padding:"0 4px"},children:c.kind==="discussion"&&c.runId?r.jsx(Et,{sessionId:e,runId:c.runId}):r.jsxs(r.Fragment,{children:[r.jsx(ke,{segs:c.segs}),c.segs.length===0&&r.jsx("div",{className:"panel-note",style:{fontSize:"var(--ui-font-caption, 11px)"},children:t("panel.subchats.starting")}),c.streaming&&c.segs.length>0&&r.jsxs("div",{className:"panel-note",style:{fontSize:11.5,marginTop:6},children:[r.jsx($,{size:12,className:"spin"})," ",t("panel.subchats.live")]})]})})]}):r.jsx("div",{className:"panel-note",children:t("panel.subchats.empty")})},At="application/x-tangu-paths",cn=e=>{const{t:n}=P(),[t,a]=g.useState("workspace"),s=e.view??t,o=r.jsxs(r.Fragment,{children:[s==="workspace"&&r.jsx(Tt,{...e}),s==="toc"&&r.jsx(Ft,{containerRef:e.chatScrollRef,scanTrigger:e.messages.length}),s==="memory"&&r.jsx($t,{...e}),s==="subchats"&&r.jsx(It,{sessionId:e.sessionId,subChats:e.subChats})]});return e.view?r.jsx("div",{className:"right-panel-body",children:o}):r.jsxs("aside",{className:"right-panel",children:[r.jsxs("div",{className:"right-panel-tabs",children:[r.jsxs("button",{className:t==="workspace"?"active":"",onClick:()=>a("workspace"),children:[r.jsx(Ue,{size:13})," ",n("panel.tab.workspace")]}),r.jsxs("button",{className:t==="toc"?"active":"",onClick:()=>a("toc"),children:[r.jsx(We,{size:13})," ",n("panel.tab.toc")]}),r.jsxs("button",{className:t==="memory"?"active":"",onClick:()=>a("memory"),children:[r.jsx(lt,{size:13})," ",n("panel.tab.memory")]}),r.jsxs("button",{className:t==="subchats"?"active":"",onClick:()=>a("subchats"),children:[r.jsx(Ge,{size:13})," ",n("panel.tab.subchats"),e.subChats&&e.subChats.length>0&&r.jsx("span",{style:{marginLeft:3,fontSize:"var(--ui-font-caption, 11px)",fontWeight:700,background:"var(--accent)",color:"var(--on-accent)",borderRadius:"var(--radius-sm, 6px)",padding:"0 4px",lineHeight:"14px"},children:e.subChats.length})]})]}),r.jsx("div",{className:"right-panel-body",children:o})]})};function Se(e){const[n,t]=g.useState(new Set),a=g.useRef(null),s=e.join(`
|
|
4
|
+
`);g.useEffect(()=>{t(u=>{const p=new Set([...u].filter(m=>e.includes(m)));return p.size===u.size?u:p})},[s]);const o=u=>{t(new Set([u])),a.current=u};return{selected:n,onClick:(u,p)=>{if(p.metaKey||p.ctrlKey)t(m=>{const h=new Set(m);return h.has(u)?h.delete(u):h.add(u),h}),a.current=u;else if(p.shiftKey&&a.current){const m=e.indexOf(a.current),h=e.indexOf(u);if(m>=0&&h>=0){const[d,x]=m<h?[m,h]:[h,m];t(new Set(e.slice(d,x+1)))}else o(u)}else o(u)},only:o,clear:()=>{t(new Set),a.current=null}}}const Ne=({menu:e,onClose:n,autoFocus:t=!1})=>{const[a,s]=g.useState(()=>!0),o=g.useRef({menu:e,onClose:n});o.current={menu:e,onClose:n},g.useEffect(()=>{if(a)return;const l=new AbortController;return Re(o.current.menu.items,{signal:l.signal}).then(u=>{if(!l.signal.aborted){if(!u.handled){s(!0);return}o.current.onClose(),u.value?.run()}}),()=>l.abort()},[a,e.x,e.y]);const c=g.useRef(null);return g.useEffect(()=>{a&&t&&c.current?.focus({preventScroll:!0})},[a,t,e.x,e.y]),g.useEffect(()=>{if(!a)return;const l=()=>n(),u=p=>{p.key==="Escape"&&n()};return window.addEventListener("pointerdown",l),window.addEventListener("contextmenu",l),window.addEventListener("keydown",u),window.addEventListener("blur",l),()=>{window.removeEventListener("pointerdown",l),window.removeEventListener("contextmenu",l),window.removeEventListener("keydown",u),window.removeEventListener("blur",l)}},[n,a]),a?_e.createPortal(r.jsx(He,{className:"ctx-menu",role:"menu",x:e.x,y:e.y,onPointerDown:l=>l.stopPropagation(),onContextMenu:l=>{l.preventDefault(),l.stopPropagation()},onKeyDown:l=>{if(l.key==="Escape"||l.key==="Tab"){l.preventDefault(),l.stopPropagation(),n();return}if(!["ArrowDown","ArrowUp","Home","End"].includes(l.key))return;l.preventDefault(),l.stopPropagation();const u=Array.from(l.currentTarget.querySelectorAll("button:not(:disabled)")),p=u.indexOf(document.activeElement),m=l.key==="Home"?0:l.key==="End"?u.length-1:(p+(l.key==="ArrowDown"?1:-1)+u.length)%u.length;u[m]?.focus()},children:e.items.map((l,u)=>r.jsxs(ot.Fragment,{children:[l.separatorBefore&&r.jsx("div",{className:"ctx-separator",role:"separator"}),r.jsxs("button",{ref:u===e.items.findIndex(p=>!p.disabled)?c:void 0,role:"menuitem","aria-label":l.label,disabled:l.disabled,className:`ctx-item${l.danger?" danger":""}`,onClick:()=>{n(),l.run()},children:[l.icon,r.jsx("span",{children:l.label}),l.shortcut&&r.jsx("kbd",{className:"ctx-shortcut","aria-hidden":"true",children:l.shortcut})]})]},u))}),document.body):null},De=(e,n)=>({x:e.clientX,y:e.clientY}),Tt=e=>e.sessionConfig?.execMode==="host"&&e.sessionConfig.cwd&&window.tangu?.listDir?r.jsx(Pt,{cwd:e.sessionConfig.cwd,running:e.running,onToast:e.onToast,onOpenPreview:e.onOpenPreview}):r.jsx(Lt,{...e}),Pt=({cwd:e,running:n,onToast:t,onOpenPreview:a})=>{const{t:s}=P(),[o,c]=g.useState(e),[l,u]=g.useState([]),[p,m]=g.useState(!1),[h,d]=g.useState(null),[x,w]=g.useState(""),[I,k]=g.useState(!1),[N,D]=g.useState(""),[f,S]=g.useState(null),[b,C]=g.useState(null),[M,z]=g.useState(null),[Me,_]=g.useState(!1),F=Se(l.map(i=>i.path)),L=!!window.tangu?.mkdirHost,K=!!window.tangu?.revealHostPath;g.useEffect(()=>{c(e),d(null),k(!1)},[e]);const E=g.useCallback(async()=>{if(window.tangu?.listDir){m(!0);try{u(await window.tangu.listDir(o))}catch(i){t(s("panel.toast.listDirFail",{err:i?.message||i}),!0)}finally{m(!1)}}},[o,t]);g.useEffect(()=>{E()},[E,n]);const H=i=>{const y=Math.max(i.lastIndexOf("/"),i.lastIndexOf("\\"));return y>0?i.slice(0,y):i},ze=o===e,ee=o.startsWith(e)?o.slice(e.length).replace(/^[/\\]+/,""):o,te=i=>{i.isDir||!window.tangu?.readHostFile||a({name:i.name,path:i.path,load:async()=>{const y=await window.tangu.readHostFile(i.path);return y.tooLarge?{tooLarge:!0,size:y.size}:{mimeType:y.mimeType,bytes:ve(y.content),size:y.size,mtimeMs:y.mtimeMs}},download:K?()=>{window.tangu?.revealHostPath?.(i.path)}:void 0})},ne=i=>{i.isDir?c(i.path):te(i)},Fe=i=>{d(i.path),w(i.name)},Ce=async i=>{const y=x.trim();if(d(null),!(!y||y===i.name||!window.tangu?.renameHostPath))try{await window.tangu.renameHostPath(i.path,y),E()}catch(j){t(s("panel.toast.renameFail",{err:j?.message||j}),!0)}},se=async()=>{const i=N.trim();if(k(!1),D(""),!(!i||!window.tangu?.mkdirHost))try{await window.tangu.mkdirHost(o,i),E()}catch(y){t(s("panel.toast.mkdirFail",{err:y?.message||y}),!0)}},Ee=async i=>{if(!(!i.length||!window.tangu?.trashHostPath||!window.confirm(i.length===1?s("panel.confirm.trash",{name:i[0].split(/[/\\]/).pop()||""}):s("panel.confirm.trashN",{n:String(i.length)}))))try{for(const j of i)await window.tangu.trashHostPath(j);F.clear(),E()}catch(j){t(s("panel.toast.deleteFail",{err:j?.message||j}),!0)}},Ie=async(i,y)=>{const j=y.filter(v=>v!==i);if(!(!j.length||!window.tangu?.moveHostPath))try{for(const v of j)await window.tangu.moveHostPath(v,i);F.clear(),E()}catch(v){t(s("panel.toast.moveFail",{err:v?.message||v}),!0)}},ae=async(i,y)=>{if(!window.tangu?.copyHostFiles||!window.tangu?.getPathForFile)return;const j=Array.from(i).map(v=>{try{return window.tangu.getPathForFile(v)}catch{return""}}).filter(Boolean);if(j.length)try{const v=await window.tangu.copyHostFiles(j,y);t(s("panel.toast.copied",{n:String(v.copied)})),E()}catch(v){t(s("panel.toast.copyFail",{err:v?.message||v}),!0)}},Ae=(i,y)=>{i.preventDefault(),i.stopPropagation();const j=F.selected.has(y.path)?[...F.selected]:[y.path];F.selected.has(y.path)||F.only(y.path);const v=j.length>1,A=[];!v&&!y.isDir&&A.push({label:s("panel.action.preview"),icon:r.jsx(xe,{size:13}),run:()=>te(y)}),!v&&L&&A.push({label:s("panel.action.rename"),icon:r.jsx(ut,{size:13}),run:()=>Fe(y)}),!v&&K&&A.push({label:s("panel.action.revealInFileManager"),icon:r.jsx(ie,{size:13}),run:()=>window.tangu?.revealHostPath?.(y.path)}),L&&A.push({label:v?s("panel.action.deleteN",{n:String(j.length)}):s("panel.action.moveToTrash"),icon:r.jsx(ye,{size:13}),danger:!0,run:()=>{Ee(j)}}),A.length&&S({...De(i,A.length),items:A})},Te=(i,y)=>{if(i.altKey&&window.tangu?.startHostDrag){i.preventDefault(),window.tangu.startHostDrag(y.path);return}const j=F.selected.has(y.path)?[...F.selected]:[y.path];C(j),i.dataTransfer.setData(At,JSON.stringify(j)),i.dataTransfer.effectAllowed="copyMove"},re=(i,y)=>{const j=L&&i.dataTransfer.types.includes("Files");!b&&!j||b?.includes(y)||(i.preventDefault(),i.stopPropagation(),z(y),_(!1))},oe=(i,y)=>{i.preventDefault(),i.stopPropagation();const j=i.dataTransfer.files,v=b;z(null),C(null),j?.length?ae(j,y):v?.length&&Ie(y,v)};return r.jsxs("div",{className:Me?"wsfiles dragover":"wsfiles",onClick:i=>{i.target===i.currentTarget&&F.clear()},onDragOver:i=>{L&&i.dataTransfer.types.includes("Files")&&!b&&(i.preventDefault(),_(!0))},onDragLeave:i=>{i.currentTarget.contains(i.relatedTarget)||_(!1)},onDrop:i=>{i.preventDefault(),_(!1),z(null),i.dataTransfer.files?.length&&!b&&ae(i.dataTransfer.files,o)},children:[r.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4,marginBottom:6},children:[r.jsx("span",{className:"panel-section-title",style:{flex:1,padding:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:o,children:ee?`…/${ee}`:e.split(/[/\\]/).filter(Boolean).pop()||e}),L&&r.jsx("button",{className:"icon-btn",style:{width:24,height:24},onClick:()=>{k(!0),D("")},title:s("panel.action.newFolder"),children:r.jsx(ct,{size:13})}),K&&r.jsx("button",{className:"icon-btn",style:{width:24,height:24},onClick:()=>window.tangu?.revealHostPath?.(o),title:s("panel.action.openCurDirInFileManager"),children:r.jsx(ie,{size:13})}),r.jsx("button",{className:"icon-btn",style:{width:24,height:24},onClick:()=>{E()},title:s("panel.action.refresh"),children:p?r.jsx($,{size:13,className:"spin"}):r.jsx(he,{size:13})})]}),I&&r.jsxs("div",{className:"file-row",style:{cursor:"default"},children:[r.jsx(ce,{size:13,style:{color:"var(--accent-ink)"}}),r.jsx("input",{autoFocus:!0,className:"file-rename-input",value:N,placeholder:s("panel.placeholder.newFolderName"),onChange:i=>D(i.target.value),onKeyDown:i=>{i.key==="Enter"?se():i.key==="Escape"&&(k(!1),D(""))},onBlur:()=>{k(!1),D("")}}),r.jsxs("span",{className:"file-act",style:{opacity:1},children:[r.jsx("button",{className:"icon-btn",style:{width:22,height:22},title:s("panel.action.create"),onMouseDown:i=>{i.preventDefault(),se()},children:r.jsx(qe,{size:12})}),r.jsx("button",{className:"icon-btn",style:{width:22,height:22},title:s("panel.action.cancel"),onMouseDown:i=>{i.preventDefault(),k(!1),D("")},children:r.jsx(Ke,{size:12})})]})]}),!ze&&r.jsxs("div",{className:`file-row${M===H(o)?" drop-target":""}`,role:"button",tabIndex:0,onClick:()=>c(H(o)),onDragOver:i=>re(i,H(o)),onDragLeave:()=>z(null),onDrop:i=>oe(i,H(o)),children:[r.jsx(mt,{size:13}),r.jsx("span",{className:"file-name",children:s("panel.parentDir")})]}),l.length===0&&!p&&!I&&r.jsx("div",{className:"panel-note",children:s("panel.emptyDir")}),l.map(i=>{const y=F.selected.has(i.path),j=i.isDir&&M===i.path;return r.jsxs("div",{className:`file-row${y?" selected":""}${j?" drop-target":""}`,role:"button",tabIndex:0,draggable:L&&h!==i.path,onDragStart:v=>Te(v,i),onDragEnd:()=>{C(null),z(null)},onDragOver:i.isDir?v=>re(v,i.path):void 0,onDragLeave:i.isDir?()=>z(null):void 0,onDrop:i.isDir?v=>oe(v,i.path):void 0,onClick:v=>{h!==i.path&&F.onClick(i.path,v)},onDoubleClick:()=>{h!==i.path&&ne(i)},onContextMenu:v=>Ae(v,i),onKeyDown:v=>{h!==i.path&&v.key==="Enter"&&(v.preventDefault(),ne(i))},children:[i.isDir?r.jsx(ce,{size:13,style:{color:"var(--accent-ink)"}}):/\.(png|jpe?g|gif|webp|svg|bmp)$/i.test(i.name)?r.jsx(me,{size:13}):r.jsx(fe,{size:13}),h===i.path?r.jsx("input",{autoFocus:!0,className:"file-rename-input",value:x,onClick:v=>v.stopPropagation(),onChange:v=>w(v.target.value),onKeyDown:v=>{v.stopPropagation(),v.key==="Enter"?Ce(i):v.key==="Escape"&&d(null)},onBlur:()=>d(null)}):r.jsxs(r.Fragment,{children:[r.jsx("span",{className:"file-name",children:i.name}),!i.isDir&&r.jsx("span",{className:"file-size",children:ge(i.size)})]})]},i.path)}),f&&r.jsx(Ne,{menu:f,onClose:()=>S(null)})]})},Lt=({cfg:e,sessionId:n,running:t,onToast:a,onOpenPreview:s})=>{const{t:o}=P(),[c,l]=g.useState([]),[u,p]=g.useState(!1),[m,h]=g.useState(null),d=Se(c.map(f=>f.path)),x=g.useCallback(async()=>{p(!0);try{l(await Ve(T(n),n))}catch(f){a(o("panel.toast.workspaceLoadFail",{err:f?.message||f}),!0)}finally{p(!1)}},[e,n,a]);g.useEffect(()=>{x()},[x,t]);const w=f=>{s({name:f.path,load:async()=>{const S=await tt(T(n),n,f.path);return{mimeType:S.mimeType,bytes:ve(S.content),size:S.size}},download:()=>{le(T(n),n,f.path).catch(S=>a(S.message,!0))}})},I=f=>{le(T(n),n,f).catch(S=>a(S.message,!0))},k=async f=>{if(!(!f.length||!window.confirm(f.length===1?o("panel.confirm.delete",{name:f[0].replace(/^\//,"")}):o("panel.confirm.deleteN",{n:String(f.length)}))))try{for(const b of f)await at(T(n),n,b);d.clear(),x()}catch(b){a(b.message,!0)}},N=async f=>{if(!f?.length)return;const S=await Promise.all(Array.from(f).map(async b=>{const C=new Uint8Array(await b.arrayBuffer());let M="";for(let z=0;z<C.length;z+=32768)M+=String.fromCharCode(...C.subarray(z,z+32768));return{path:b.name,content:btoa(M),encoding:"base64",mimeType:b.type}}));try{const b=await et(T(n),n,S);a(o("panel.toast.uploaded",{saved:b.saved,total:b.total})),x()}catch(b){a(o("panel.toast.uploadFail",{err:b?.message||b}),!0)}},D=(f,S)=>{f.preventDefault(),f.stopPropagation();const b=d.selected.has(S.path)?[...d.selected]:[S.path];d.selected.has(S.path)||d.only(S.path);const C=b.length>1,M=[];C||M.push({label:o("panel.action.preview"),icon:r.jsx(xe,{size:13}),run:()=>w(S)}),C||M.push({label:o("panel.action.download"),icon:r.jsx(nt,{size:13}),run:()=>I(S.path)}),M.push({label:C?o("panel.action.deleteN",{n:String(b.length)}):o("panel.action.delete"),icon:r.jsx(ye,{size:13}),danger:!0,run:()=>{k(b)}}),h({...De(f,M.length),items:M})};return r.jsxs("div",{onClick:f=>{f.target===f.currentTarget&&d.clear()},onDragOver:f=>f.preventDefault(),onDrop:f=>{f.preventDefault(),N(f.dataTransfer.files)},children:[r.jsxs("div",{style:{display:"flex",gap:4,marginBottom:6},children:[r.jsx("span",{className:"panel-section-title",style:{flex:1,padding:0},children:o("panel.sessionFiles")}),r.jsxs("label",{className:"icon-btn",style:{width:24,height:24},title:o("panel.action.uploadFile"),children:[r.jsx(dt,{size:13}),r.jsx("input",{type:"file",multiple:!0,hidden:!0,onChange:f=>{N(f.target.files),f.target.value=""}})]}),r.jsx("button",{className:"icon-btn",style:{width:24,height:24},onClick:()=>{x()},title:o("panel.action.refresh"),children:u?r.jsx($,{size:13,className:"spin"}):r.jsx(he,{size:13})})]}),c.length===0&&r.jsx("div",{className:"panel-note",children:o("panel.noFilesYet")}),c.map(f=>{const S=d.selected.has(f.path);return r.jsxs("div",{className:`file-row${S?" selected":""}`,role:"button",tabIndex:0,onClick:b=>d.onClick(f.path,b),onDoubleClick:()=>w(f),onContextMenu:b=>D(b,f),onKeyDown:b=>{b.key==="Enter"&&(b.preventDefault(),w(f))},children:[f.mimeType.startsWith("image/")?r.jsx(me,{size:13}):r.jsx(fe,{size:13}),r.jsx("span",{className:"file-name",children:f.path.replace(/^\//,"")}),r.jsx("span",{className:"file-size",children:ge(f.size)})]},f.path)}),m&&r.jsx(Ne,{menu:m,onClose:()=>h(null)})]})},$t=({cfg:e,sessionConfig:n,onToast:t})=>{const a=n?.groupChat&&n.groupAgents?.length?Array.from(new Set(n.groupAgents)):[n?.agentSlug||it];return r.jsx("div",{children:a.map(s=>r.jsx(Ot,{cfg:e,slug:s,onToast:t,showName:a.length>1,canAppend:a.length===1},s))})},Ot=({cfg:e,slug:n,onToast:t,showName:a,canAppend:s})=>{const{t:o}=P(),[c,l]=g.useState(null),[u,p]=g.useState([]),[m,h]=g.useState(null),[d,x]=g.useState(""),w=g.useCallback(async()=>{try{l(await Ye(U(),n))}catch(k){l(null),t(o("panel.toast.memoryLoadFail",{err:k?.message||k}),!0)}try{const k=(await Je(U(),n)).slice().sort((f,S)=>S.localeCompare(f)).slice(0,3),D=(await Promise.all(k.map(async f=>({date:f,content:await Xe(U(),n,f)})))).filter(f=>f.content.trim());p(D),h(f=>f??D[0]?.date??null)}catch{p([])}},[e,n,t,o]);g.useEffect(()=>{w()},[w]);const I=async()=>{const k=d.trim();if(k)try{const N=await st(U(),k,n);t(N.appended?o("panel.toast.memorySaved"):o("panel.toast.memoryNotWritten")),x(""),w()}catch(N){t(o("panel.toast.appendFail",{err:N?.message||N}),!0)}};return r.jsxs("div",{className:"agentmem",children:[a&&r.jsx("div",{className:"agentmem-agent",children:n}),r.jsx("div",{className:"panel-section-title",children:o("panel.memory.currentAgent")}),c===null&&r.jsx("div",{className:"panel-note",children:o("panel.memory.notConnected")}),c!==null&&(c.trim()?r.jsx("div",{style:{fontSize:"var(--ui-font-meta, 12px)",padding:"0 8px"},className:"msg-content",children:r.jsx(J,{content:c})}):r.jsx("div",{className:"panel-note",children:o("panel.memory.empty")})),s&&r.jsxs("div",{style:{display:"flex",gap:6,padding:"8px 8px 0"},children:[r.jsx("input",{type:"text",value:d,placeholder:o("panel.memory.appendPlaceholder"),onChange:k=>x(k.target.value),onKeyDown:k=>k.key==="Enter"&&void I(),style:{flex:1,fontSize:"var(--ui-font-meta, 12px)",padding:"5px 8px",background:"var(--bg-card)",border:"var(--border-width) solid var(--border)",borderRadius:"var(--radius-sm)",outline:"none"}}),r.jsx("button",{className:"btn ghost sm",onClick:()=>{I()},children:o("panel.memory.append")})]}),r.jsx("div",{className:"panel-section-title",style:{marginTop:14},children:o("panel.memory.recentLogs")}),u.length===0&&r.jsx("div",{className:"panel-note",children:o("panel.log.none")}),u.map(k=>{const N=m===k.date;return r.jsxs("div",{className:"agentmem-log",children:[r.jsxs("button",{className:"agentmem-log-head",onClick:()=>h(N?null:k.date),children:[N?r.jsx(Ze,{size:12}):r.jsx(Qe,{size:12}),r.jsx("span",{children:k.date})]}),N&&r.jsx("div",{className:"agentmem-log-body msg-content",children:r.jsx(J,{content:k.content})})]},k.date)})]})};export{Ne as C,jt as E,we as I,ft as M,cn as R,Vt as a,q as b,Yt as c,G as d,Z as e,tn as f,Zt as g,Jt as h,X as i,De as j,W as k,gt as l,wt as m,nn as n,rn as o,xt as p,Qt as q,an as r,ln as s,en as t,ue as u,yt as v,Xt as w,on as x,sn as y,bt as z};
|