@forsion/unit 2.13.3 → 2.13.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/main.mjs +25 -3
- package/package.json +1 -1
- package/release.json +5 -5
- package/web/assets/ArtificialView-DLh75dAI.js +1 -0
- package/web/assets/AutomationBuilder-DNWWGnFr.js +1 -0
- package/web/assets/CalendarConfigView-G7je7k9-.js +1 -0
- package/web/assets/{CalendarView-D55PA1vn.js → CalendarView-B2MtaOJk.js} +1 -1
- package/web/assets/{CapabilityMenu-BVrokPpT.js → CapabilityMenu-DJaZ_Cyt.js} +1 -1
- package/web/assets/{CheckboxInput-BuJ3HPm_.js → CheckboxInput-FYXLaZke.js} +1 -1
- package/web/assets/{Chrome-amTcZNE4.js → Chrome-CFonajM4.js} +1 -1
- package/web/assets/{CodeView-DRVh13k9.js → CodeView-GZ0BAgoW.js} +3 -3
- package/web/assets/DashboardGridView-Xgw4wa0_.js +17 -0
- package/web/assets/{EventCard-DUrn2krw.js → EventCard-_39F_I5M.js} +1 -1
- package/web/assets/ExcalidrawCanvas-rXujil36.js +1 -0
- package/web/assets/{FloatingToc-B1d4-5EL.js → FloatingToc-DNqAkkI0.js} +1 -1
- package/web/assets/GitCloneDialog-Bj9G3o-n.css +1 -0
- package/web/assets/GitCloneDialog-CQx-O4j1.js +1 -0
- package/web/assets/HomepageView-DcWmTPQO.css +1 -0
- package/web/assets/HomepageView-MYEk3RCs.js +3 -0
- package/web/assets/{ImageStudioPanels-B2PTq6Yb.js → ImageStudioPanels-4wnb2XF4.js} +2 -2
- package/web/assets/ImageStudioView-qrmW8pfx.js +1 -0
- package/web/assets/InlineAiPanel-B3kd1ob2.js +1 -0
- package/web/assets/InlineAiPanel-DZZijfif.css +1 -0
- package/web/assets/InlineFiles-Clnqh9jD.js +1 -0
- package/web/assets/MarkdownBlock-DQTuoen3.css +1 -0
- package/web/assets/MarkdownBlock-DT_wsaja.js +58 -0
- package/web/assets/ModelPill-JaIH3ffZ.js +2 -0
- package/web/assets/MuseLibraryView-16p1zsxz.css +1 -0
- package/web/assets/MuseLibraryView-DOJVVeU6.js +2 -0
- package/web/assets/{MuseView-CDDwV6SR.js → MuseView-uxTmjVQa.js} +2 -2
- package/web/assets/{PageHistoryPanel-BbdXpjJM.js → PageHistoryPanel-Bn4-XmdK.js} +2 -2
- package/web/assets/{PdfAnnotator-CW0wPWRB.js → PdfAnnotator-Cq8cklTz.js} +1 -1
- package/web/assets/PenRow-COOYAaxx.js +1 -0
- package/web/assets/ProductView-DPTveulg.js +1 -0
- package/web/assets/RightPanel-BJUacrsf.js +4 -0
- package/web/assets/RightPanel-D0zk1g3I.css +1 -0
- package/web/assets/{SketchCard-BcXCdBAs.js → SketchCard-B_UU5sxV.js} +3 -3
- package/web/assets/{StudioGuestSurface-ZJFKnNYF.js → StudioGuestSurface-yBa4QKfX.js} +1 -1
- package/web/assets/TargetHealthNotice-BLzDB-Xl.css +1 -0
- package/web/assets/TargetHealthNotice-CgkdTdhB.js +47 -0
- package/web/assets/{TodoListView-DuRdVFgB.js → TodoListView-CricdCfW.js} +1 -1
- package/web/assets/{Tooltip-DtDUL18W.js → Tooltip-o8ZqIb3L.js} +1 -1
- package/web/assets/UnifiedPage-BWAyqj65.js +69 -0
- package/web/assets/ViewSelectionBar-35x8TiLA.js +2 -0
- package/web/assets/appStore-CI1_L5OS.js +3357 -0
- package/web/assets/appStore-DQc2marq.css +1 -0
- package/web/assets/{arrow-up-right-R4P9Mmxz.js → arrow-up-right-BDsMFoNQ.js} +1 -1
- package/web/assets/{astryxBridge-CT2wZJXs.js → astryxBridge-CH_c5xjo.js} +3 -3
- package/web/assets/automationListSource-CB6AWkL_.js +1 -0
- package/web/assets/{boardSurface-Ce0_vf9f.js → boardSurface-CLvEUjbF.js} +1 -1
- package/web/assets/{book-open-CcXCToyx.js → book-open-BLzEdGfu.js} +1 -1
- package/web/assets/{calendarNavStore-tQJRVpum.js → calendarNavStore-BHUNxDx8.js} +1 -1
- package/web/assets/{canvasPrefs-CSuX9aLF.js → canvasPrefs-CvE7mgyq.js} +1 -1
- package/web/assets/{chatBoxSurface-IG6Vu4Dz.js → chatBoxSurface-CuuHLzs5.js} +1 -1
- package/web/assets/{circle-question-mark-O8AhUz35.js → circle-question-mark-BM4ZRxQS.js} +1 -1
- package/web/assets/{circle-x-AV2ZWulM.js → circle-x-DTcNGZDT.js} +1 -1
- package/web/assets/{client-BqhpYbYL.js → client-CaivGZFR.js} +5 -5
- package/web/assets/{code-xml-DdR58F83.js → code-xml-AE3mT4T5.js} +1 -1
- package/web/assets/{codeStudioStore-Dq5i8nbE.js → codeStudioStore-DhyMazGT.js} +1 -1
- package/web/assets/codingNavigation-B0kVsy4x.js +53 -0
- package/web/assets/codingNavigation-DHCidM4N.css +1 -0
- package/web/assets/{create-BgJN5qsj.js → create-1JI2I47p.js} +2 -2
- package/web/assets/dashboardSurface-CIE5HybN.js +1 -0
- package/web/assets/{deskCapture-BD2qD6NI.js → deskCapture-COW7aG5Y.js} +1 -1
- package/web/assets/{diff2html-OoRdHZ_O.js → diff2html-Daje9Kkm.js} +1 -1
- package/web/assets/{docx-preview-B43XC8Cn.js → docx-preview-CABR7n30.js} +1 -1
- package/web/assets/emoji-DZ9CA_3l.css +1 -0
- package/web/assets/emoji-DphwSxPx.js +1 -0
- package/web/assets/{floatingTocSurface-BM2SYE_u.js → floatingTocSurface-BOm2QYBK.js} +1 -1
- package/web/assets/{foldActions-BcyvNVBs.js → foldActions-DNbJPlPl.js} +1 -1
- package/web/assets/{folder-CCZqnwRc.js → folder-DotgUhYD.js} +1 -1
- package/web/assets/{folder-plus-BJKT1Pqg.js → folder-plus-aJgL9NeP.js} +1 -1
- package/web/assets/gestures-dqncPOwo.js +1 -0
- package/web/assets/git-branch-CwR2qic6.js +1 -0
- package/web/assets/{hand-DRu7IJdU.js → hand-XNkzNiW2.js} +1 -1
- package/web/assets/{hard-drive-CXNJUCXw.js → hard-drive-CfWKRoAE.js} +1 -1
- package/web/assets/i18n-CykmULlm.css +1 -0
- package/web/assets/{i18n.generated-DvY59Zq3.js → i18n.generated-BwynSSMk.js} +3 -3
- package/web/assets/{imageStudio-Axwmd4GW.js → imageStudio-CWgLpC_d.js} +2 -2
- package/web/assets/{index-C65u4fXd.js → index-B65ULikK.js} +1 -1
- package/web/assets/{index-DDMXVG0h.js → index-BGfvNj7R.js} +1 -1
- package/web/assets/{index-BGEkZBs2.js → index-BIIeiIap.js} +1 -1
- package/web/assets/{index-BYUntVIZ.js → index-BOzsniE1.js} +89 -89
- package/web/assets/{index-BO2XJc36.js → index-BfrjVzia.js} +1 -1
- package/web/assets/{index-mB0EQkyZ.js → index-Bi9UtjVz.js} +1 -1
- package/web/assets/{index-pJh7JN7_.js → index-C1uilc9i.js} +1 -1
- package/web/assets/{index-DY0M_dpd.js → index-C3Dc3Ivz.js} +1 -1
- package/web/assets/{index-D3CYvMpl.js → index-CJF_Ld1Y.js} +1 -1
- package/web/assets/{index-BFTY79aq.js → index-CMARP4oV.js} +1 -1
- package/web/assets/{index-taRxNsbp.js → index-C_RsQVNm.js} +1 -1
- package/web/assets/{index-Dlkq7gkE.js → index-ChyxZMm8.js} +1 -1
- package/web/assets/{index-DcbZwhpE.js → index-CoKcOaZg.js} +1 -1
- package/web/assets/{index-Uq4J2aoW.js → index-CuviSCbk.js} +1 -1
- package/web/assets/{index-HqmJW2np.js → index-Cw43kua8.js} +1 -1
- package/web/assets/{index-WbVt2P8R.js → index-D1fu6XQN.js} +1 -1
- package/web/assets/{index-D78izbLA.js → index-DG-hXb63.js} +1 -1
- package/web/assets/index-DjnTfJpN.js +1 -0
- package/web/assets/{index-LxlyPm0_.js → index-Dtw0abst.js} +1 -1
- package/web/assets/{index-D102FOuM.js → index-O05r2Ty6.js} +1 -1
- package/web/assets/{index-C_Ohi-I3.js → index-W3ErfZiX.js} +1 -1
- package/web/assets/{index-B1rE_NwA.js → index-Yc56b3XX.js} +1 -1
- package/web/assets/{index-CkMhazev.js → index-d4jCdYJH.js} +1 -1
- package/web/assets/{index-CobUnTcv.js → index-gt5JBIFf.js} +1 -1
- package/web/assets/{index-XyjIhkPw.js → index-siHtlYTM.js} +1 -1
- package/web/assets/{invitePage-BW0BH8Ac.js → invitePage-Bgveo6Hj.js} +1 -1
- package/web/assets/{ipc-D7yENkjV.js → ipc-B6hkgxQL.js} +1 -1
- package/web/assets/{jszip.min-UE5d5vPJ.js → jszip.min-eU-k-vEy.js} +1 -1
- package/web/assets/{layout-grid-Hs3eDA07.js → layout-grid-CraV7nhh.js} +1 -1
- package/web/assets/linkFollow-BpvDWzUx.js +8 -0
- package/web/assets/{list-tree-DmuRb-p9.js → list-tree-cLJw-jYQ.js} +1 -1
- package/web/assets/{listFold-CKxjyY5_.js → listFold-M8s5JYEC.js} +1 -1
- package/web/assets/{lock-kffGfeHt.js → lock-DBkXXwaI.js} +1 -1
- package/web/assets/lock-open-C-9-AWct.js +1 -0
- package/web/assets/{log-out-B5gEP0tF.js → log-out-C8bDXj9P.js} +1 -1
- package/web/assets/main-CMk6twzA.js +20 -0
- package/web/assets/markdownEditorSurface-DgQ0TUWH.js +3 -0
- package/web/assets/{message-square-plus-DxBPIhPS.js → message-square-plus-8pfimvem.js} +1 -1
- package/web/assets/{messages-4w1Khzm1.js → messages-CKtabOqy.js} +1 -1
- package/web/assets/minus-CfA9fAN3.js +1 -0
- package/web/assets/mobileEntry-NcMcK0LV.js +13 -0
- package/web/assets/{nativeDownload-Udrv_tmU.js → nativeDownload-CNtwSCy0.js} +1 -1
- package/web/assets/pageChrome-BR4cfIaA.js +1 -0
- package/web/assets/{pageChrome-eO9pb2fH.css → pageChrome-BbUhILy0.css} +1 -1
- package/web/assets/{pageTree-CIXFRCLk.js → pageTree-BYYPgZm_.js} +4 -4
- package/web/assets/{pen-tool-D_Y9We9x.js → pen-tool-C5ftHCnm.js} +1 -1
- package/web/assets/{pencil-DGiTRzW1.js → pencil-ehhM9_9k.js} +1 -1
- package/web/assets/phoneList-B6gwUJZF.js +9 -0
- package/web/assets/phoneList-iRdfiKA8.css +1 -0
- package/web/assets/pluginChat-DTTWWiUS.js +2 -0
- package/web/assets/{redo-2-QgiKEg9T.js → redo-2-DCEAgQlN.js} +1 -1
- package/web/assets/{rotate-ccw-BLoH5er1.js → rotate-ccw-DdkrbRAB.js} +1 -1
- package/web/assets/selectionActions-BQD2kox1.js +2 -0
- package/web/assets/selectionBarSurface-CzUZmJDJ.js +1 -0
- package/web/assets/server-Ddu9f1k3.js +1 -0
- package/web/assets/sharePage-CNrm2xTC.js +2 -0
- package/web/assets/{shareViewer-BzuSyJv_.js → shareViewer-BiMqIBxP.js} +2 -2
- package/web/assets/{star-BmywYD3u.js → star-Dxv7XANS.js} +1 -1
- package/web/assets/tableSurface-Bly1iCXc.js +1 -0
- package/web/assets/{terminal-BlmA_Z1C.js → terminal-CAmmC9cV.js} +1 -1
- package/web/assets/{terminalView-SAxITnRW.js → terminalView-lbcBgG0c.js} +1 -1
- package/web/assets/theme-CUWFlazV.css +1 -0
- package/web/assets/{type-DmIL6FB-.js → type-Dz6rnTvG.js} +1 -1
- package/web/assets/{undo-2-yMeXc8Wi.js → undo-2-B7izWNb_.js} +1 -1
- package/web/assets/{unitAccount-BPYRAa3m.js → unitAccount-DGwGsmC3.js} +1 -1
- package/web/assets/{unitBridge-BNVzai6X.js → unitBridge-CE2yAvm0.js} +1 -1
- package/web/assets/{unitCloudTransport-iFweA1xk.js → unitCloudTransport-BGFwkaDM.js} +1 -1
- package/web/assets/{unitOwnerAccess-Bggl7bDP.js → unitOwnerAccess-D4nKS6Gg.js} +1 -1
- package/web/assets/{unitShim-BP2nBO_k.js → unitShim-2_2hhGxS.js} +3 -3
- package/web/assets/{upload-D20PZHXc.js → upload-DqpRRAhG.js} +1 -1
- package/web/assets/userSpaces-VFu4s05v.js +1 -0
- package/web/assets/viewportLock-3AOdDmwi.js +631 -0
- package/web/assets/viewportLock-djvL8fUQ.css +1 -0
- package/web/assets/{zoom-in-_TgFOpyv.js → zoom-in-Bf-eKTnH.js} +1 -1
- package/web/index.html +2 -2
- package/web/assets/ArtificialView-DS97zlMg.js +0 -1
- package/web/assets/AutomationBuilder-BsJc8wuC.js +0 -1
- package/web/assets/CalendarConfigView-BN8mraSo.js +0 -1
- package/web/assets/DashboardGridView-DlFyYfUh.js +0 -17
- package/web/assets/ExcalidrawCanvas-TpbzBF-J.js +0 -1
- package/web/assets/HomepageView-DnQ_5Obe.css +0 -1
- package/web/assets/HomepageView-nzKfbHM-.js +0 -1
- package/web/assets/ImageStudioView-Cawr6pGW.js +0 -1
- package/web/assets/InlineFiles-DKPH5JHz.js +0 -1
- package/web/assets/MarkdownBlock--__nPQGh.css +0 -1
- package/web/assets/MarkdownBlock-BHpDy2qQ.js +0 -58
- package/web/assets/ModelPill-ChzAM3z1.js +0 -2
- package/web/assets/MuseLibraryView-DLuQ_jyV.js +0 -2
- package/web/assets/PenRow-BY-MZLDQ.js +0 -1
- package/web/assets/ProductView-0ieVL3rY.js +0 -1
- package/web/assets/RightPanel-BRexwQ3W.js +0 -4
- package/web/assets/RunLocationPicker-BrDfOu8-.css +0 -1
- package/web/assets/RunLocationPicker-CadYiE7C.js +0 -43
- package/web/assets/UnifiedPage-D7JTfABH.js +0 -68
- package/web/assets/appStore-ClD7vq5L.css +0 -1
- package/web/assets/appStore-affnJoin.js +0 -3292
- package/web/assets/automationListSource-JVBMsMbC.js +0 -1
- package/web/assets/codingNavigation-CxdCK78-.js +0 -53
- package/web/assets/codingNavigation-_tOR0ell.css +0 -1
- package/web/assets/dashboardSurface-BY-AFB-r.js +0 -1
- package/web/assets/emoji-BPdA62d7.js +0 -1
- package/web/assets/gestures-BwPbZDkU.js +0 -1
- package/web/assets/i18n-BMo19xaR.css +0 -1
- package/web/assets/index-Y2kzYlZq.js +0 -1
- package/web/assets/linkFollow-Msu1XH9v.js +0 -8
- package/web/assets/main-DIyFlyfK.js +0 -20
- package/web/assets/markdownEditorSurface-Cx2rqFAY.js +0 -3
- package/web/assets/minus-CfoZ4oxr.js +0 -1
- package/web/assets/mobileEntry-B8JwR53-.js +0 -13
- package/web/assets/pageChrome-D-9npbUE.js +0 -1
- package/web/assets/phoneList-BQfCJwKF.css +0 -1
- package/web/assets/phoneList-DHUia6HT.js +0 -9
- package/web/assets/pluginChat-BXuJiMYi.js +0 -2
- package/web/assets/sharePage-DYYN5usb.js +0 -2
- package/web/assets/tableSurface-21LDYY_G.js +0 -1
- package/web/assets/theme-Dgqst5S9.css +0 -1
- package/web/assets/userSpaces-CrLrKklx.js +0 -1
- package/web/assets/viewportLock-DO1lzA2N.css +0 -1
- package/web/assets/viewportLock-tlT6H_Hc.js +0 -629
- package/web/assets/workflow-Bd6xBHiT.js +0 -1
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{J as be,bz as Ue,nI as je,q as $,nJ as me,aU as O,aW as ce,aC as ae,bX as re,aR as Se,cr as X,nK as We,aQ as qe,gM as Ge,W as Ke,K as Ve,nL as Ye,c8 as U,nM as Xe,an as Je,aq as Qe,a9 as Ze,nN as et,X as tt,aL as fe,aM as nt,a0 as ke,a1 as Ne,lB as De,m6 as st,nO as at,nP as rt,ci as ze,bw as Me,nQ as ot,m7 as ge,m8 as it,m9 as Ce,aV as lt,nR as ct,mc as dt}from"./appStore-CI1_L5OS.js";import{c as ut}from"./nativeDownload-CNtwSCy0.js";import{r as pt,j as a,u as B,d as u,R as ht,Y as mt}from"./index-BOzsniE1.js";import{P as Fe}from"./pencil-ehhM9_9k.js";import"./client-CaivGZFR.js";import{B as ft}from"./book-open-BLzEdGfu.js";import{F as gt}from"./folder-plus-aJgL9NeP.js";import{F as xe}from"./folder-DotgUhYD.js";import{U as xt}from"./upload-DqpRRAhG.js";const yt=[["path",{d:"M18 6 7 17l-5-5",key:"116fxf"}],["path",{d:"m22 10-7.5 7.5L13 16",key:"ke71qq"}]],nn=be("check-check",yt);const vt=[["path",{d:"M14 9 9 4 4 9",key:"1af5af"}],["path",{d:"M20 20h-7a4 4 0 0 1-4-4V4",key:"1blwi3"}]],wt=be("corner-left-up",vt),Ee=new Set(["image/png","image/jpeg","image/webp","image/gif"]),bt=20*1024*1024;function jt(e){return{version:2,id:crypto.randomUUID(),name:e,updatedAt:Date.now(),sessionId:null,images:[],elements:[],order:[],collected:[]}}function sn(e,n){return e.images.filter(t=>!t.hidden).sort((t,r)=>t.x-r.x||t.y-r.y).slice(0,n)}function an(e,n,t){const r=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*r,h:n*r}}function rn(e){const n=new Map;let t="";for(const r of e){r.role==="user"&&(t=r.content);for(const[s,o]of(r.displayFiles||[]).entries()){if(!Ee.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}`:`${r.id}:${s}:${o.name}`;n.set(c,{key:c,file:o,prompt:t})}}return[...n.values()]}function on(e){const n=Math.max(1,Math.ceil(Math.sqrt(e.length)));return e.map((t,r)=>{const s=Q(t),o=300/Math.max(s.w,s.h);return{...t,x:r%n*340,y:Math.floor(r/n)*360,w:s.w*o,h:s.h*o}})}function ln(e){return`brightness(${e.brightness}%) contrast(${e.contrast}%) saturate(${e.saturation}%)`}function St(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=>Ie(s)&&s.blob instanceof Blob&&Ee.has(s.blob.type)&&s.blob.size<=bt&&[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||kt(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(Nt))&&(n.order===void 0||Array.isArray(n.order)&&n.order.every(s=>typeof s=="string"))))return!1;const r=[...n.images,...n.elements||[]].map(s=>s.id);return new Set(r).size===r.length}const oe=e=>"blob"in e&&e.blob instanceof Blob,J=e=>!oe(e)&&e.kind==="frame",Ie=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"),kt=(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 Nt(e){return Ie(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 Q(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 cn(e,n){const t={...e,...n},r=Q(t),s=Q(e),o=e.w/s.w,c=r.w*o,i=r.h*o;return{...t,x:e.x+(e.w-c)/2,y:e.y+(e.h-i)/2,w:c,h:i}}function Z(e){const n=[...e.images,...e.elements||[]],t=new Map((e.order||[]).map((r,s)=>[r,s]));return n.sort((r,s)=>Number(J(s))-Number(J(r))||(t.get(r.id)??1e9)-(t.get(s.id)??1e9))}function ie(e,n){return{...e,version:2,images:n.filter(oe),elements:n.filter(t=>!oe(t)),order:n.map(t=>t.id)}}function Dt(e,n){return ie(e,Z(e).map(n))}const zt=(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 dn(e,n){const t=Z(e),r=new Map(n);for(const s of t.filter(J)){const o=n.get(s.id);if(!(!o||s.locked||o.x===s.x&&o.y===s.y))for(const c of t)!J(c)&&!c.locked&&!r.has(c.id)&&zt(s,c)&&r.set(c.id,{...c,x:c.x+o.x-s.x,y:c.y+o.y-s.y})}return Dt(e,s=>s.locked||!r.has(s.id)?s:{...s,...r.get(s.id)})}function un(e,n,t=0,r=0){return{id:crypto.randomUUID(),kind:e,name:n,x:t,y:r,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 pn(e,n=32,t=32){return e.map(r=>({...r,id:crypto.randomUUID(),locked:!1,x:r.x+n,y:r.y+t}))}function hn(e,n,t){const r=Z(e),s=new Set(n);if(t==="front"||t==="back"){const c=r.filter(m=>s.has(m.id)),i=r.filter(m=>!s.has(m.id));return ie(e,t==="front"?[...i,...c]:[...c,...i])}const o=t==="up"?1:-1;for(let c=o===1?r.length-2:1;c>=0&&c<r.length;c-=o)s.has(r[c].id)&&r[c+o]&&!s.has(r[c+o].id)&&([r[c],r[c+o]]=[r[c+o],r[c]]);return ie(e,r)}const Mt=["1:1","4:5","5:4","2:3","3:2","16:9","9:16"],Ct=["1:1","2:3","3:2","16:9","9:16"],K=e=>{const[n,t]=e.split(":").map(Number);return n>0&&t>0?n/t:1};function Ft(e,n){const t=e>0&&n>0?e/n:1,r=Mt.find(s=>Math.abs(Math.log(K(s)/t))<.012);return r||(t>=1?`${Number(t.toFixed(2))}:1`:`1:${Number((1/t).toFixed(2))}`)}function mn(e,n){const t=Q(e),r=Ft(t.w,t.h),s=n==="original"?r:n,o=n==="original"?t.w/t.h:K(s),c=Ct.reduce((i,m)=>Math.abs(Math.log(K(m)/o))<Math.abs(Math.log(K(i)/o))?m:i);return{aspect:o,requested:s,engine:c,originalLabel:r}}function fn(e,n,t){if(!(e>0&&n>0&&t>0))return;const r=e/n;if(Math.abs(Math.log(r/t))<.001)return;if(r>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 Et(e,n,t=[]){const r=new Set(n.sourceIds||[]),s=e.images.filter(d=>r.has(d.id)),o=[...Z(e),...t],c=s.length?Math.min(360,Math.max(s[0].w,s[0].h)):320,i=Math.max(.2,Math.min(5,n.aspect||1)),m=i>=1?c:c*i,p=i>=1?c/i:c,f=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:f+32+x*(m+32),y:h,w:m,h:p}))}function gn(e,n){if(e!=="generate_image"&&e!=="edit_image")return null;let t={};try{t=n?JSON.parse(n):{}}catch{}const r=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:K(r),ratio:r,kind:e==="edit_image"?"edit":"generate"}}let ne;function Le(){return ne??=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=()=>{ne=void 0,n(t.error)},t.onblocked=()=>{ne=void 0,n(new Error("Image Studio storage is blocked by another window"))}})}async function It(){const e=await Le();return new Promise((n,t)=>{const r=e.transaction("boards").objectStore("boards").getAll();r.onsuccess=()=>{if(!r.result.every(St)){t(new Error("Image Studio contains an unreadable project"));return}n(r.result)},r.onerror=()=>t(r.error)})}async function Lt(e){const n=await Le();return new Promise((t,r)=>{const s=n.transaction("boards","readwrite");s.objectStore("boards").put(e),s.oncomplete=()=>t(),s.onerror=()=>r(s.error),s.onabort=()=>r(s.error||new Error("Image Studio save was interrupted"))})}let ye,le,At=0;const G=new Set;let q;function se(e){G.add(e),ve.setState({saving:!0}),clearTimeout(le),le=setTimeout(()=>{ve.getState().flush()},250)}const ve=ut((e,n)=>({boards:{},activeId:null,ready:!1,error:"",saving:!1,selection:[],past:{},future:{},placeholders:{},generationTools:{},pending:null,hydrate:()=>ye??=(async()=>{try{const t=await It();let r=null;try{r=localStorage.getItem("image-studio.active")}catch{}e({boards:Object.fromEntries(t.map(s=>[s.id,s])),activeId:t.find(s=>s.id===r)?.id||null,ready:!0,error:""})}catch(t){e({error:String(t),ready:!1}),ye=void 0}})(),create:t=>{if(!n().ready)return"";const r=jt(t);return e(s=>({boards:{...s.boards,[r.id]:r}})),n().open(r.id),se(r.id),r.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,r,s=!0)=>{const o=n().boards[t];if(!o)return;const c=r(o);c!==o&&(e(i=>({boards:{...i.boards,[t]:{...c,updatedAt:Date.now()}},...s?{past:{...i.past,[t]:[...(i.past[t]||[]).slice(-29),o]},future:{...i.future,[t]:[]}}:{}})),se(t))},undo:(t,r=!1)=>{const s=r?"future":"past",o=r?"past":"future",c=n()[s][t]||[],i=n().boards[t],m=c.at(-1);!i||!m||(e(p=>({boards:{...p.boards,[t]:{...m,sessionId:i.sessionId,collected:i.collected,updatedAt:Date.now()}},[s]:{...p[s],[t]:c.slice(0,-1)},[o]:{...p[o],[t]:[...p[o][t]||[],i]},selection:[]})),se(t))},flush:async()=>{if(clearTimeout(le),q)return q;q=(async()=>{try{for(;G.size;){const t=G.values().next().value,r=n().boards[t];G.delete(t);try{r&&await Lt(r)}catch(s){throw G.add(t),s}}e({saving:!1,error:""})}catch(t){e({saving:!1,error:String(t)})}})();try{await q}finally{q=void 0}},queue:(t,r,s=[])=>e(o=>({pending:{sessionId:t,text:o.pending?.sessionId===t?`${o.pending.text}
|
|
2
|
+
|
|
3
|
+
${r}`:r,attachments:[...o.pending?.sessionId===t?o.pending.attachments:[],...s],seq:++At}})),consume:t=>n().pending?.seq!==t?!1:(e({pending:null}),!0),beginGeneration:(t,r,s)=>{const o=n().boards[t];if(!o)return[];const c=n().placeholders[t]||[],i=Et(o,s,c),m=crypto.randomUUID(),p=Date.now(),f=i.map((h,d)=>({...h,id:crypto.randomUUID(),generationId:m,boardId:t,sessionId:r,sourceIds:s.sourceIds||[],kind:s.kind,status:"preparing",aspect:s.aspect,ratio:s.ratio,index:d,count:i.length,createdAt:p}));return e(h=>({placeholders:{...h.placeholders,[t]:[...h.placeholders[t]||[],...f]}})),f.map(h=>h.id)},activateGeneration:t=>{const r=new Set(t);e(s=>({placeholders:Object.fromEntries(Object.entries(s.placeholders).map(([o,c])=>[o,c.map(i=>r.has(i.id)&&i.status==="preparing"?{...i,status:"running"}:i)]))}))},bindGenerationTool:(t,r,s,o)=>{if((n().generationTools[t]||[]).includes(s))return;e(f=>({generationTools:{...f.generationTools,[t]:[...(f.generationTools[t]||[]).slice(-199),s]}}));const i=(n().placeholders[t]||[]).find(f=>f.sessionId===r&&!f.toolId&&f.status!=="failed");if(i){e(f=>({placeholders:{...f.placeholders,[t]:(f.placeholders[t]||[]).map(h=>h.generationId===i.generationId?{...h,toolId:s,status:"running"}:h)}}));return}const m=n().beginGeneration(t,r,o),p=new Set(m);e(f=>({placeholders:{...f.placeholders,[t]:(f.placeholders[t]||[]).map(h=>p.has(h.id)?{...h,toolId:s,status:"running"}:h)}}))},failGeneration:(t,r)=>{const s=r.ids?new Set(r.ids):null;e(o=>({placeholders:{...o.placeholders,[t]:(o.placeholders[t]||[]).map(c=>(!s||s.has(c.id))&&(!r.sessionId||c.sessionId===r.sessionId)&&(!r.toolId||c.toolId===r.toolId)?{...c,status:"failed"}:c)}}))},takeGeneration:(t,r)=>{const o=(n().placeholders[t]||[]).filter(c=>c.sessionId===r&&c.status!=="failed").sort((c,i)=>c.createdAt-i.createdAt||c.index-i.index)[0];if(o)return e(c=>({placeholders:{...c.placeholders,[t]:(c.placeholders[t]||[]).filter(i=>i.id!==o.id)}})),o},removeGeneration:(t,r)=>e(s=>({placeholders:{...s.placeholders,[t]:(s.placeholders[t]||[]).filter(o=>o.id!==r)}}))}));pt({"agentLog.days":{zh:"{count} 天有记录",en:"{count} days on record"},"agentLog.older":{zh:"更早的 {count} 天",en:"{count} earlier days"},"agentLog.today":{zh:"今天",en:"Today"},"agentLog.editDay":{zh:"编辑 {date} 的日志",en:"Edit the log for {date}"},"agentLog.rawHint":{zh:"这是这一天的原文。每条以「### 09:30」这样的时间行开头;「@」后面那一串是写入设备的标记,不用改。",en:'This is the raw file for the day. Each entry starts with a time line like "### 09:30"; the code after "@" marks the device that wrote it and can stay as it is.'},"agentLog.error":{zh:"日志操作失败",en:"The log could not be updated"},"agentLog.changed":{zh:"这一天的日志已有新版本,这次没有保存。",en:"This day’s log has a newer version, so nothing was saved."},"agentLog.discardAndReload":{zh:"放弃草稿并载入当前版本",en:"Discard draft and load the current version"}});const we=7,Tt=()=>{const e=new Date;return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`},Ae=e=>e.replace(/^# \d{4}-\d{2}-\d{2}[ \t]*\n+/,"").replace(/^(### \d{2}:\d{2}\n)@[0-9a-f]{8} /gm,"$1"),xn=e=>a.jsx(Pt,{...e},JSON.stringify([Ue(e.cfg),e.slug])),Pt=({slug:e,active:n=!0})=>{const{t}=B(),[r,s]=u.useState(null),[o,c]=u.useState(null),[i,m]=u.useState(null),[p,f]=u.useState(null),[h,d]=u.useState(!1),[x,w]=u.useState(!1),[A,b]=u.useState(""),[C,F]=u.useState(!1),[g,S]=u.useState(0),[j,L]=u.useState(!1),z=u.useRef(0),E=u.useRef(!1),V=u.useRef(!0),H=u.useRef(n),M=p!==null;u.useEffect(()=>{let k=!0;return je($(),e).then(D=>{if(!k)return;const T=D.slice().sort((ee,te)=>te.localeCompare(ee));s(T),V.current&&(V.current=!1,c(T[0]??null))}).catch(D=>{k&&(s(T=>T??[]),b(D?.message||t("agentLog.error")))}),()=>{k=!1}},[e,g]),u.useEffect(()=>{const k=++z.current;if(m(null),w(!1),b(""),F(!1),!o){d(!1);return}return d(!0),me($(),e,o).then(D=>{k===z.current&&m({content:D.content,version:D.version})}).catch(D=>{k===z.current&&b(D?.message||t("agentLog.error"))}).finally(()=>{k===z.current&&d(!1)}),()=>{++z.current}},[o,e,g]),u.useEffect(()=>{n&&!H.current&&!M&&S(k=>k+1),H.current=n},[n]);const R=async()=>{if(!o||!i||p===null||h||E.current)return;E.current=!0;const k=z.current;d(!0),w(!1),b(""),F(!1);try{await We($(),e,o,p,i.version);const D=await me($(),e,o);k===z.current&&(m({content:D.content,version:D.version}),f(null),w(!0))}catch(D){k===z.current&&(D?.status===409?F(!0):b(D?.message||t("agentLog.error")))}finally{E.current=!1,k===z.current&&d(!1)}};if(r===null)return a.jsx("p",{className:"profile-empty","data-testid":"agent-log-panel",children:a.jsx(O,{size:14,className:"spin"})});const W=Tt(),I=r.slice(we),P=j||o!==null&&I.includes(o),Y=k=>{const D=o===k;return a.jsxs("div",{className:"agentmem-log","data-log-date":k,children:[a.jsxs("div",{className:"agentmem-log-row",children:[a.jsxs("button",{type:"button",className:"agentmem-log-head","aria-expanded":D,disabled:M,onClick:()=>c(D?null:k),children:[D?a.jsx(ae,{size:12}):a.jsx(re,{size:12}),a.jsx("span",{children:k}),k===W&&a.jsx("small",{children:t("agentLog.today")}),D&&x&&a.jsxs("small",{className:"agentmem-log-saved",children:[a.jsx(Se,{size:11}),t("settings.agents.memSaved")]})]}),D&&i&&!M&&a.jsx("button",{type:"button",className:"harness-undo",title:t("common.edit"),"aria-label":t("agentLog.editDay",{date:k}),onClick:()=>{f(i.content),w(!1)},children:a.jsx(Fe,{size:13})})]}),D&&(M?a.jsxs("div",{className:"field agentmem-log-edit",children:[a.jsx("textarea",{"aria-label":t("agentLog.editDay",{date:k}),rows:12,value:p,disabled:h,onChange:T=>f(T.target.value)}),a.jsx("p",{className:"hint",children:t("agentLog.rawHint")}),C&&a.jsxs("p",{role:"alert",className:"agentmem-log-error",children:[t("agentLog.changed")," ",a.jsx("button",{type:"button",className:"profile-text-action",onClick:()=>{f(null),S(T=>T+1)},children:t("agentLog.discardAndReload")})]}),a.jsxs("div",{className:"agentmem-log-actions",children:[a.jsxs("button",{type:"button",className:"btn primary sm",disabled:h,onClick:()=>{R()},children:[h?a.jsx(O,{size:13,className:"spin"}):null," ",t("common.save")]}),a.jsx("button",{type:"button",className:"btn sm",disabled:h,onClick:()=>{f(null),b(""),F(!1)},children:t("common.cancel")})]})]}):i&&a.jsx("div",{className:"agentmem-log-body msg-content",children:a.jsx(X,{content:Ae(i.content)})}))]},k)};return a.jsxs("div",{className:"profile-log","data-testid":"agent-log-panel","data-agent-slug":e,children:[a.jsxs("div",{className:"harness-summary",children:[a.jsx("span",{children:t("agentLog.days",{count:r.length})}),a.jsxs("button",{type:"button",className:"profile-text-action",disabled:h||M,onClick:()=>S(k=>k+1),children:[a.jsx(ce,{size:12}),t("common.refresh")]})]}),A&&a.jsx("p",{role:"alert",className:"agentmem-log-error",children:A}),r.length?a.jsxs(a.Fragment,{children:[r.slice(0,we).map(Y),I.length>0&&a.jsx("div",{className:"agentmem-log agentmem-log-more",children:a.jsx("div",{className:"agentmem-log-row",children:a.jsxs("button",{type:"button",className:"agentmem-log-head","aria-expanded":P,disabled:M,onClick:()=>{P&&o&&I.includes(o)&&c(null),L(!P)},children:[P?a.jsx(ae,{size:12}):a.jsx(re,{size:12}),a.jsx("span",{children:t("agentLog.older",{count:I.length})})]})})}),P&&I.map(Y)]}):!A&&a.jsx("p",{className:"profile-empty",children:t("settings.agents.noLog")})]})},Rt=({containerRef:e,scanTrigger:n})=>{const{t}=B(),[r,s]=u.useState([]),[o,c]=u.useState(null),i=u.useCallback(()=>{const p=e.current;if(!p){s(d=>d.length?[]:d);return}const f=p.querySelectorAll('[data-toc-msg-role="user"], [data-toc-level]'),h=[];f.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]);u.useEffect(()=>{i();const p=e.current;if(!p)return;let f=0;const h=new MutationObserver(()=>{cancelAnimationFrame(f),f=requestAnimationFrame(i)});return h.observe(p,{childList:!0,subtree:!0,characterData:!0}),()=>{cancelAnimationFrame(f),h.disconnect()}},[i,e,n]),u.useEffect(()=>{const p=e.current;if(!p||r.length===0)return;const f=new Set,h=new IntersectionObserver(d=>{for(const w of d)w.isIntersecting?f.add(w.target.id):f.delete(w.target.id);const x=r.find(w=>f.has(w.id));x&&c(x.id)},{root:p,rootMargin:"0px 0px -65% 0px",threshold:0});for(const d of r)try{const x=p.querySelector(`#${CSS.escape(d.id)}`);x&&h.observe(x)}catch{}return()=>h.disconnect()},[r,e]);const m=u.useCallback(p=>{const f=e.current;if(!f)return;let h=null;try{h=f.querySelector(`#${CSS.escape(p)}`)}catch{return}if(!h)return;const d=h.getBoundingClientRect().top-f.getBoundingClientRect().top+f.scrollTop;f.scrollTo({top:Math.max(0,d-16),behavior:"smooth"}),c(p)},[e]);return r.length===0?a.jsx("div",{className:"panel-note",children:t("toc.emptyNote")}):a.jsx("div",{className:"toc-list",children:r.map(p=>a.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:()=>m(p.id),children:[p.kind==="user"?a.jsx(qe,{size:12,className:"toc-ico"}):a.jsx(Ge,{size:11,className:"toc-ico"}),a.jsx("span",{className:"toc-text",children:p.text})]},p.id))})};function $t(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 Te=({segs:e})=>a.jsx("div",{style:{display:"flex",flexDirection:"column",gap:8},children:e.map((n,t)=>n.t==="tool"?a.jsxs("div",{className:"panel-note",style:{fontSize:"var(--ui-font-caption, 11px)",opacity:n.error?.95:.7},children:["🔧 ",a.jsx("b",{children:n.name}),n.preview?` — ${n.preview.slice(0,200)}`:""]},t):n.t==="vote"?a.jsxs("div",{className:"panel-note",style:{fontSize:"var(--ui-font-caption, 11px)"},children:["🗳 ",n.text]},t):a.jsxs("div",{children:[n.speaker&&a.jsxs("div",{className:"msg-role-with-avatar",style:{color:n.color,fontSize:12,fontWeight:600,marginBottom:2,display:"flex",alignItems:"center",gap:4},children:[a.jsx("span",{className:"msg-avatar fallback",style:{background:n.color,width:16,height:16,fontSize:10},children:n.speaker.slice(0,1)}),a.jsx("span",{children:n.speaker})]}),a.jsx("div",{className:"msg-content",style:{fontSize:"var(--ui-font-meta, 12px)"},children:a.jsx(X,{content:n.text||""})})]},t))}),Ot=({sessionId:e,runId:n})=>{const{t}=B(),[r,s]=u.useState([]),[o,c]=u.useState(!0),i=u.useRef(null);return u.useEffect(()=>{const m=new AbortController;s([]),c(!0);let p="",f="";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:f,text:d}]});return Ye(U(e),n,d=>{const x=d.payload||{};switch(d.type){case"group_speaker":x.phase==="start"&&(p=x.name||x.slug||"",f=$t(String(x.slug||"")),s(w=>[...w,{t:"text",speaker:p,color:f,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}},m.signal).catch(()=>c(!1)),()=>m.abort()},[e,n,t]),u.useEffect(()=>{i.current?.scrollIntoView({block:"end"})},[r]),a.jsxs("div",{children:[r.length===0&&o&&a.jsxs("div",{className:"panel-note",style:{fontSize:11.5},children:[a.jsx(O,{size:12,className:"spin"})," ",t("panel.subchats.connecting")]}),a.jsx(Te,{segs:r}),o&&r.length>0&&a.jsxs("div",{className:"panel-note",style:{fontSize:11.5,marginTop:6},children:[a.jsx(O,{size:12,className:"spin"})," ",t("panel.subchats.live")]}),a.jsx("div",{ref:i})]})},Bt=({sessionId:e,subChats:n})=>{const{t}=B(),r=n||[],[s,o]=u.useState(null),c=r.find(i=>i.id===s)||r[r.length-1]||null;return r.length?a.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:8},children:[a.jsx("div",{style:{display:"flex",flexDirection:"column",gap:2,maxHeight:140,overflowY:"auto"},children:r.map(i=>a.jsxs("div",{role:"button",tabIndex:0,className:`file-row${c?.id===i.id?" selected":""}`,onClick:()=>o(i.id),children:[i.kind==="discussion"?a.jsx(Ke,{size:13}):a.jsx(Ve,{size:13}),a.jsx("span",{className:"file-name",title:i.title,children:i.title||i.id.slice(0,8)}),i.streaming&&a.jsx(O,{size:12,className:"spin",style:{opacity:.6}})]},i.id))}),a.jsx("div",{style:{height:1,background:"var(--border)"}}),c&&a.jsx("div",{style:{padding:"0 4px"},children:c.kind==="discussion"&&c.runId?a.jsx(Ot,{sessionId:e,runId:c.runId}):a.jsxs(a.Fragment,{children:[a.jsx(Te,{segs:c.segs}),c.segs.length===0&&a.jsx("div",{className:"panel-note",style:{fontSize:"var(--ui-font-caption, 11px)"},children:t("panel.subchats.starting")}),c.streaming&&c.segs.length>0&&a.jsxs("div",{className:"panel-note",style:{fontSize:11.5,marginTop:6},children:[a.jsx(O,{size:12,className:"spin"})," ",t("panel.subchats.live")]})]})})]}):a.jsx("div",{className:"panel-note",children:t("panel.subchats.empty")})},Ht="application/x-tangu-paths",yn=e=>{const{t:n}=B(),[t,r]=u.useState("workspace"),s=e.view??t,o=a.jsxs(a.Fragment,{children:[s==="workspace"&&a.jsx(_t,{...e}),s==="toc"&&a.jsx(Rt,{containerRef:e.chatScrollRef,scanTrigger:e.messages.length}),s==="memory"&&a.jsx(qt,{...e}),s==="subchats"&&a.jsx(Bt,{sessionId:e.sessionId,subChats:e.subChats})]});return e.view?a.jsx("div",{className:"right-panel-body",children:o}):a.jsxs("aside",{className:"right-panel",children:[a.jsxs("div",{className:"right-panel-tabs",children:[a.jsxs("button",{className:t==="workspace"?"active":"",onClick:()=>r("workspace"),children:[a.jsx(Ze,{size:13})," ",n("panel.tab.workspace")]}),a.jsxs("button",{className:t==="toc"?"active":"",onClick:()=>r("toc"),children:[a.jsx(et,{size:13})," ",n("panel.tab.toc")]}),a.jsxs("button",{className:t==="memory"?"active":"",onClick:()=>r("memory"),children:[a.jsx(ft,{size:13})," ",n("panel.tab.memory")]}),a.jsxs("button",{className:t==="subchats"?"active":"",onClick:()=>r("subchats"),children:[a.jsx(tt,{size:13})," ",n("panel.tab.subchats"),e.subChats&&e.subChats.length>0&&a.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})]})]}),a.jsx("div",{className:"right-panel-body",children:o})]})};function Pe(e){const[n,t]=u.useState(new Set),r=u.useRef(null),s=e.join(`
|
|
4
|
+
`);u.useEffect(()=>{t(m=>{const p=new Set([...m].filter(f=>e.includes(f)));return p.size===m.size?m:p})},[s]);const o=m=>{t(new Set([m])),r.current=m};return{selected:n,onClick:(m,p)=>{if(p.metaKey||p.ctrlKey)t(f=>{const h=new Set(f);return h.has(m)?h.delete(m):h.add(m),h}),r.current=m;else if(p.shiftKey&&r.current){const f=e.indexOf(r.current),h=e.indexOf(m);if(f>=0&&h>=0){const[d,x]=f<h?[f,h]:[h,f];t(new Set(e.slice(d,x+1)))}else o(m)}else o(m)},only:o,clear:()=>{t(new Set),r.current=null}}}const Re=({menu:e,onClose:n,autoFocus:t=!1})=>{const[r,s]=u.useState(()=>!0),o=u.useRef({menu:e,onClose:n});o.current={menu:e,onClose:n},u.useEffect(()=>{if(r)return;const i=new AbortController;return Xe(o.current.menu.items,{signal:i.signal}).then(m=>{if(!i.signal.aborted){if(!m.handled){s(!0);return}o.current.onClose(),m.value?.run()}}),()=>i.abort()},[r,e.x,e.y]);const c=u.useRef(null);return u.useEffect(()=>{r&&t&&c.current?.focus({preventScroll:!0})},[r,t,e.x,e.y]),u.useEffect(()=>{if(!r)return;const i=()=>n(),m=p=>{p.key==="Escape"&&n()};return window.addEventListener("pointerdown",i),window.addEventListener("contextmenu",i),window.addEventListener("keydown",m),window.addEventListener("blur",i),()=>{window.removeEventListener("pointerdown",i),window.removeEventListener("contextmenu",i),window.removeEventListener("keydown",m),window.removeEventListener("blur",i)}},[n,r]),r?Je.createPortal(a.jsx(Qe,{className:"ctx-menu",role:"menu",x:e.x,y:e.y,onPointerDown:i=>i.stopPropagation(),onContextMenu:i=>{i.preventDefault(),i.stopPropagation()},onKeyDown:i=>{if(i.key==="Escape"||i.key==="Tab"){i.preventDefault(),i.stopPropagation(),n();return}if(!["ArrowDown","ArrowUp","Home","End"].includes(i.key))return;i.preventDefault(),i.stopPropagation();const m=Array.from(i.currentTarget.querySelectorAll("button:not(:disabled)")),p=m.indexOf(document.activeElement),f=i.key==="Home"?0:i.key==="End"?m.length-1:(p+(i.key==="ArrowDown"?1:-1)+m.length)%m.length;m[f]?.focus()},children:e.items.map((i,m)=>a.jsxs(ht.Fragment,{children:[i.separatorBefore&&a.jsx("div",{className:"ctx-separator",role:"separator"}),a.jsxs("button",{ref:m===e.items.findIndex(p=>!p.disabled)?c:void 0,role:"menuitem","aria-label":i.label,disabled:i.disabled,className:`ctx-item${i.danger?" danger":""}`,onClick:()=>{n(),i.run()},children:[i.icon,a.jsx("span",{children:i.label}),i.shortcut&&a.jsx("kbd",{className:"ctx-shortcut","aria-hidden":"true",children:i.shortcut})]})]},m))}),document.body):null},$e=(e,n)=>({x:e.clientX,y:e.clientY}),_t=e=>e.sessionConfig?.execMode==="host"&&e.sessionConfig.cwd&&window.tangu?.listDir?a.jsx(Ut,{cwd:e.sessionConfig.cwd,running:e.running,onToast:e.onToast,onOpenPreview:e.onOpenPreview}):a.jsx(Wt,{...e}),Ut=({cwd:e,running:n,onToast:t,onOpenPreview:r})=>{const{t:s}=B(),[o,c]=u.useState(e),[i,m]=u.useState([]),[p,f]=u.useState(!1),[h,d]=u.useState(null),[x,w]=u.useState(""),[A,b]=u.useState(!1),[C,F]=u.useState(""),[g,S]=u.useState(null),[j,L]=u.useState(null),[z,E]=u.useState(null),[V,H]=u.useState(!1),M=Pe(i.map(l=>l.path)),R=!!window.tangu?.mkdirHost,W=!!window.tangu?.revealHostPath;u.useEffect(()=>{c(e),d(null),b(!1)},[e]);const I=u.useCallback(async()=>{if(window.tangu?.listDir){f(!0);try{m(await window.tangu.listDir(o))}catch(l){t(s("panel.toast.listDirFail",{err:l?.message||l}),!0)}finally{f(!1)}}},[o,t]);u.useEffect(()=>{I()},[I,n]);const P=l=>{const y=Math.max(l.lastIndexOf("/"),l.lastIndexOf("\\"));return y>0?l.slice(0,y):l},Y=o===e,k=o.startsWith(e)?o.slice(e.length).replace(/^[/\\]+/,""):o,D=l=>{l.isDir||!window.tangu?.readHostFile||r({name:l.name,path:l.path,load:async()=>{const y=await window.tangu.readHostFile(l.path);return y.tooLarge?{tooLarge:!0,size:y.size}:{mimeType:y.mimeType,bytes:Ce(y.content),size:y.size,mtimeMs:y.mtimeMs}},download:W?()=>{window.tangu?.revealHostPath?.(l.path)}:void 0})},T=l=>{l.isDir?c(l.path):D(l)},ee=l=>{d(l.path),w(l.name)},te=async l=>{const y=x.trim();if(d(null),!(!y||y===l.name||!window.tangu?.renameHostPath))try{await window.tangu.renameHostPath(l.path,y),I()}catch(N){t(s("panel.toast.renameFail",{err:N?.message||N}),!0)}},de=async()=>{const l=C.trim();if(b(!1),F(""),!(!l||!window.tangu?.mkdirHost))try{await window.tangu.mkdirHost(o,l),I()}catch(y){t(s("panel.toast.mkdirFail",{err:y?.message||y}),!0)}},Oe=async l=>{if(!(!l.length||!window.tangu?.trashHostPath||!window.confirm(l.length===1?s("panel.confirm.trash",{name:l[0].split(/[/\\]/).pop()||""}):s("panel.confirm.trashN",{n:String(l.length)}))))try{for(const N of l)await window.tangu.trashHostPath(N);M.clear(),I()}catch(N){t(s("panel.toast.deleteFail",{err:N?.message||N}),!0)}},Be=async(l,y)=>{const N=y.filter(v=>v!==l);if(!(!N.length||!window.tangu?.moveHostPath))try{for(const v of N)await window.tangu.moveHostPath(v,l);M.clear(),I()}catch(v){t(s("panel.toast.moveFail",{err:v?.message||v}),!0)}},ue=async(l,y)=>{if(!window.tangu?.copyHostFiles||!window.tangu?.getPathForFile)return;const N=Array.from(l).map(v=>{try{return window.tangu.getPathForFile(v)}catch{return""}}).filter(Boolean);if(N.length)try{const v=await window.tangu.copyHostFiles(N,y);t(s("panel.toast.copied",{n:String(v.copied)})),I()}catch(v){t(s("panel.toast.copyFail",{err:v?.message||v}),!0)}},He=(l,y)=>{l.preventDefault(),l.stopPropagation();const N=M.selected.has(y.path)?[...M.selected]:[y.path];M.selected.has(y.path)||M.only(y.path);const v=N.length>1,_=[];!v&&!y.isDir&&_.push({label:s("panel.action.preview"),icon:a.jsx(ze,{size:13}),run:()=>D(y)}),!v&&R&&_.push({label:s("panel.action.rename"),icon:a.jsx(Fe,{size:13}),run:()=>ee(y)}),!v&&W&&_.push({label:s("panel.action.revealInFileManager"),icon:a.jsx(fe,{size:13}),run:()=>window.tangu?.revealHostPath?.(y.path)}),R&&_.push({label:v?s("panel.action.deleteN",{n:String(N.length)}):s("panel.action.moveToTrash"),icon:a.jsx(Me,{size:13}),danger:!0,run:()=>{Oe(N)}}),_.length&&S({...$e(l,_.length),items:_})},_e=(l,y)=>{if(l.altKey&&window.tangu?.startHostDrag){l.preventDefault(),window.tangu.startHostDrag(y.path);return}const N=M.selected.has(y.path)?[...M.selected]:[y.path];L(N),l.dataTransfer.setData(Ht,JSON.stringify(N)),l.dataTransfer.effectAllowed="copyMove"},pe=(l,y)=>{const N=R&&l.dataTransfer.types.includes("Files");!j&&!N||j?.includes(y)||(l.preventDefault(),l.stopPropagation(),E(y),H(!1))},he=(l,y)=>{l.preventDefault(),l.stopPropagation();const N=l.dataTransfer.files,v=j;E(null),L(null),N?.length?ue(N,y):v?.length&&Be(y,v)};return a.jsxs("div",{className:V?"wsfiles dragover":"wsfiles",onClick:l=>{l.target===l.currentTarget&&M.clear()},onDragOver:l=>{R&&l.dataTransfer.types.includes("Files")&&!j&&(l.preventDefault(),H(!0))},onDragLeave:l=>{l.currentTarget.contains(l.relatedTarget)||H(!1)},onDrop:l=>{l.preventDefault(),H(!1),E(null),l.dataTransfer.files?.length&&!j&&ue(l.dataTransfer.files,o)},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4,marginBottom:6},children:[a.jsx("span",{className:"panel-section-title",style:{flex:1,padding:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:o,children:k?`…/${k}`:e.split(/[/\\]/).filter(Boolean).pop()||e}),R&&a.jsx("button",{className:"icon-btn",style:{width:24,height:24},onClick:()=>{b(!0),F("")},title:s("panel.action.newFolder"),children:a.jsx(gt,{size:13})}),W&&a.jsx("button",{className:"icon-btn",style:{width:24,height:24},onClick:()=>window.tangu?.revealHostPath?.(o),title:s("panel.action.openCurDirInFileManager"),children:a.jsx(fe,{size:13})}),a.jsx("button",{className:"icon-btn",style:{width:24,height:24},onClick:()=>{I()},title:s("panel.action.refresh"),children:p?a.jsx(O,{size:13,className:"spin"}):a.jsx(ce,{size:13})})]}),A&&a.jsxs("div",{className:"file-row",style:{cursor:"default"},children:[a.jsx(xe,{size:13,style:{color:"var(--accent-ink)"}}),a.jsx("input",{autoFocus:!0,className:"file-rename-input",value:C,placeholder:s("panel.placeholder.newFolderName"),onChange:l=>F(l.target.value),onKeyDown:l=>{l.key==="Enter"?de():l.key==="Escape"&&(b(!1),F(""))},onBlur:()=>{b(!1),F("")}}),a.jsxs("span",{className:"file-act",style:{opacity:1},children:[a.jsx("button",{className:"icon-btn",style:{width:22,height:22},title:s("panel.action.create"),onMouseDown:l=>{l.preventDefault(),de()},children:a.jsx(Se,{size:12})}),a.jsx("button",{className:"icon-btn",style:{width:22,height:22},title:s("panel.action.cancel"),onMouseDown:l=>{l.preventDefault(),b(!1),F("")},children:a.jsx(nt,{size:12})})]})]}),!Y&&a.jsxs("div",{className:`file-row${z===P(o)?" drop-target":""}`,role:"button",tabIndex:0,onClick:()=>c(P(o)),onDragOver:l=>pe(l,P(o)),onDragLeave:()=>E(null),onDrop:l=>he(l,P(o)),children:[a.jsx(wt,{size:13}),a.jsx("span",{className:"file-name",children:s("panel.parentDir")})]}),i.length===0&&!p&&!A&&a.jsx("div",{className:"panel-note",children:s("panel.emptyDir")}),i.map(l=>{const y=M.selected.has(l.path),N=l.isDir&&z===l.path;return a.jsxs("div",{className:`file-row${y?" selected":""}${N?" drop-target":""}`,role:"button",tabIndex:0,draggable:R&&h!==l.path,onDragStart:v=>_e(v,l),onDragEnd:()=>{L(null),E(null)},onDragOver:l.isDir?v=>pe(v,l.path):void 0,onDragLeave:l.isDir?()=>E(null):void 0,onDrop:l.isDir?v=>he(v,l.path):void 0,onClick:v=>{h!==l.path&&M.onClick(l.path,v)},onDoubleClick:()=>{h!==l.path&&T(l)},onContextMenu:v=>He(v,l),onKeyDown:v=>{h!==l.path&&v.key==="Enter"&&(v.preventDefault(),T(l))},children:[l.isDir?a.jsx(xe,{size:13,style:{color:"var(--accent-ink)"}}):/\.(png|jpe?g|gif|webp|svg|bmp)$/i.test(l.name)?a.jsx(ke,{size:13}):a.jsx(Ne,{size:13}),h===l.path?a.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"?te(l):v.key==="Escape"&&d(null)},onBlur:()=>d(null)}):a.jsxs(a.Fragment,{children:[a.jsx("span",{className:"file-name",children:l.name}),!l.isDir&&a.jsx("span",{className:"file-size",children:De(l.size)})]})]},l.path)}),g&&a.jsx(Re,{menu:g,onClose:()=>S(null)})]})},Wt=({cfg:e,sessionId:n,running:t,onToast:r,onOpenPreview:s})=>{const{t:o}=B(),[c,i]=u.useState([]),[m,p]=u.useState(!1),[f,h]=u.useState(null),d=Pe(c.map(g=>g.path)),x=u.useCallback(async()=>{p(!0);try{i(await st(U(n),n))}catch(g){r(o("panel.toast.workspaceLoadFail",{err:g?.message||g}),!0)}finally{p(!1)}},[e,n,r]);u.useEffect(()=>{x()},[x,t]);const w=g=>{s({name:g.path,load:async()=>{const S=await it(U(n),n,g.path);return{mimeType:S.mimeType,bytes:Ce(S.content),size:S.size}},download:()=>{ge(U(n),n,g.path).catch(S=>r(S.message,!0))}})},A=g=>{ge(U(n),n,g).catch(S=>r(S.message,!0))},b=async g=>{if(!(!g.length||!window.confirm(g.length===1?o("panel.confirm.delete",{name:g[0].replace(/^\//,"")}):o("panel.confirm.deleteN",{n:String(g.length)}))))try{for(const j of g)await dt(U(n),n,j);d.clear(),x()}catch(j){r(j.message,!0)}},C=async g=>{if(!g?.length)return;const S=await Promise.all(Array.from(g).map(async j=>{const L=new Uint8Array(await j.arrayBuffer());let z="";for(let E=0;E<L.length;E+=32768)z+=String.fromCharCode(...L.subarray(E,E+32768));return{path:j.name,content:btoa(z),encoding:"base64",mimeType:j.type}}));try{const j=await ot(U(n),n,S);r(o("panel.toast.uploaded",{saved:j.saved,total:j.total})),x()}catch(j){r(o("panel.toast.uploadFail",{err:j?.message||j}),!0)}},F=(g,S)=>{g.preventDefault(),g.stopPropagation();const j=d.selected.has(S.path)?[...d.selected]:[S.path];d.selected.has(S.path)||d.only(S.path);const L=j.length>1,z=[];L||z.push({label:o("panel.action.preview"),icon:a.jsx(ze,{size:13}),run:()=>w(S)}),L||z.push({label:o("panel.action.download"),icon:a.jsx(lt,{size:13}),run:()=>A(S.path)}),z.push({label:L?o("panel.action.deleteN",{n:String(j.length)}):o("panel.action.delete"),icon:a.jsx(Me,{size:13}),danger:!0,run:()=>{b(j)}}),h({...$e(g,z.length),items:z})};return a.jsxs("div",{onClick:g=>{g.target===g.currentTarget&&d.clear()},onDragOver:g=>g.preventDefault(),onDrop:g=>{g.preventDefault(),C(g.dataTransfer.files)},children:[a.jsxs("div",{style:{display:"flex",gap:4,marginBottom:6},children:[a.jsx("span",{className:"panel-section-title",style:{flex:1,padding:0},children:o("panel.sessionFiles")}),a.jsxs("label",{className:"icon-btn",style:{width:24,height:24},title:o("panel.action.uploadFile"),children:[a.jsx(xt,{size:13}),a.jsx("input",{type:"file",multiple:!0,hidden:!0,onChange:g=>{C(g.target.files),g.target.value=""}})]}),a.jsx("button",{className:"icon-btn",style:{width:24,height:24},onClick:()=>{x()},title:o("panel.action.refresh"),children:m?a.jsx(O,{size:13,className:"spin"}):a.jsx(ce,{size:13})})]}),c.length===0&&a.jsx("div",{className:"panel-note",children:o("panel.noFilesYet")}),c.map(g=>{const S=d.selected.has(g.path);return a.jsxs("div",{className:`file-row${S?" selected":""}`,role:"button",tabIndex:0,onClick:j=>d.onClick(g.path,j),onDoubleClick:()=>w(g),onContextMenu:j=>F(j,g),onKeyDown:j=>{j.key==="Enter"&&(j.preventDefault(),w(g))},children:[g.mimeType.startsWith("image/")?a.jsx(ke,{size:13}):a.jsx(Ne,{size:13}),a.jsx("span",{className:"file-name",children:g.path.replace(/^\//,"")}),a.jsx("span",{className:"file-size",children:De(g.size)})]},g.path)}),f&&a.jsx(Re,{menu:f,onClose:()=>h(null)})]})},qt=({cfg:e,sessionConfig:n,onToast:t})=>{const r=n?.groupChat&&n.groupAgents?.length?Array.from(new Set(n.groupAgents)):[n?.agentSlug||mt];return a.jsx("div",{children:r.map(s=>a.jsx(Gt,{cfg:e,slug:s,onToast:t,showName:r.length>1,canAppend:r.length===1},s))})},Gt=({cfg:e,slug:n,onToast:t,showName:r,canAppend:s})=>{const{t:o}=B(),[c,i]=u.useState(null),[m,p]=u.useState([]),[f,h]=u.useState(null),[d,x]=u.useState(""),w=u.useCallback(async()=>{try{i(await at($(),n))}catch(b){i(null),t(o("panel.toast.memoryLoadFail",{err:b?.message||b}),!0)}try{const b=(await je($(),n)).slice().sort((g,S)=>S.localeCompare(g)).slice(0,3),F=(await Promise.all(b.map(async g=>({date:g,content:await rt($(),n,g)})))).filter(g=>g.content.trim());p(F)}catch{p([])}},[e,n,t,o]);u.useEffect(()=>{w()},[w]);const A=async()=>{const b=d.trim();if(b)try{const C=await ct($(),b,n);t(C.appended?o("panel.toast.memorySaved"):o("panel.toast.memoryNotWritten")),x(""),w()}catch(C){t(o("panel.toast.appendFail",{err:C?.message||C}),!0)}};return a.jsxs("div",{className:"agentmem",children:[r&&a.jsx("div",{className:"agentmem-agent",children:n}),a.jsx("div",{className:"panel-section-title",children:o("panel.memory.currentAgent")}),c===null&&a.jsx("div",{className:"panel-note",children:o("panel.memory.notConnected")}),c!==null&&(c.trim()?a.jsx("div",{style:{fontSize:"var(--ui-font-meta, 12px)",padding:"0 8px"},className:"msg-content",children:a.jsx(X,{content:c})}):a.jsx("div",{className:"panel-note",children:o("panel.memory.empty")})),s&&a.jsxs("div",{style:{display:"flex",gap:6,padding:"8px 8px 0"},children:[a.jsx("input",{type:"text",value:d,placeholder:o("panel.memory.appendPlaceholder"),onChange:b=>x(b.target.value),onKeyDown:b=>b.key==="Enter"&&void A(),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"}}),a.jsx("button",{className:"btn ghost sm",onClick:()=>{A()},children:o("panel.memory.append")})]}),a.jsx("div",{className:"panel-section-title",style:{marginTop:14},children:o("panel.memory.recentLogs")}),m.length===0&&a.jsx("div",{className:"panel-note",children:o("panel.log.none")}),m.map(b=>{const C=f===b.date;return a.jsxs("div",{className:"agentmem-log",children:[a.jsxs("button",{className:"agentmem-log-head",onClick:()=>h(C?null:b.date),children:[C?a.jsx(ae,{size:12}):a.jsx(re,{size:12}),a.jsx("span",{children:b.date})]}),C&&a.jsx("div",{className:"agentmem-log-body msg-content",children:a.jsx(X,{content:Ae(b.content)})})]},b.date)})]})};export{xn as A,Re as C,Mt as E,Ee as I,bt as M,yn as R,nn as a,Z as b,sn as c,Q as d,ie as e,dn as f,on as g,an as h,oe as i,$e as j,J as k,jt as l,Dt as m,un as n,mn as o,St as p,ln as q,hn as r,gn as s,cn as t,ve as u,kt as v,rn as w,fn as x,pn as y,zt as z};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.agents-space{display:flex;width:100%;height:100%;min-height:0;color:var(--text);container-type:inline-size}.agents-roster{width:216px;flex-shrink:0;display:flex;flex-direction:column;padding:22px 12px;gap:18px;background:var(--overlay-light)}.agents-roster-heading{display:flex;justify-content:space-between;padding-inline:8px;color:var(--text-muted);font-size:var(--ui-font-meta, 12px)}.agents-roster-heading>span{display:inline-flex;align-items:baseline;gap:6px}.agents-roster-heading small{font-size:var(--ui-font-caption, 11px);color:var(--text-faint)}.agents-roster-heading>button{display:grid;place-items:center;width:24px;height:24px;margin:-4px 0;border:0;border-radius:var(--radius-sm, 8px);background:transparent;color:var(--text-muted);cursor:pointer}.agents-roster-heading>button:hover{background:var(--overlay-medium);color:var(--text)}.agents-search,.profile-search{display:flex;align-items:center;gap:8px;padding:9px 10px;border-radius:var(--radius-sm, 8px);background:var(--overlay-light);color:var(--text-muted)}.agents-search input,.profile-search input{width:100%;min-width:0;border:0;background:transparent;outline:none;padding:0;box-shadow:none;font-size:var(--ui-font-meta, 12px);color:var(--text)}.profile-search:focus-within{outline:var(--focus-ring) solid var(--accent);outline-offset:-2px}.agents-roster-list{overflow:auto;flex:1;min-height:0}.agents-roster-row{position:relative}.agents-roster-row.dragging{opacity:.5}.agents-roster-item{width:100%;display:flex;gap:10px;align-items:center;border:0;background:transparent;padding:12px 8px;text-align:left;border-radius:var(--radius-sm, 8px);color:var(--text);cursor:pointer}.agents-roster-item:hover,.agents-roster-item.selected{background:var(--overlay-medium)}.agents-roster-item>span:last-child{min-width:0;display:grid;gap:4px;padding-right:16px}.agents-roster-item strong{font-size:var(--ui-font-body, 13px);font-weight:600}.agents-roster-item strong svg{display:inline;margin-left:5px;vertical-align:-1px;color:var(--accent-ink)}.agents-roster-item small{color:var(--text-muted);font-size:var(--ui-font-caption, 11px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.agents-roster-more{position:absolute;right:3px;top:16px;display:grid;place-items:center;width:26px;height:26px;padding:0;border:0;border-radius:var(--radius-sm, 8px);background:transparent;color:var(--text-muted);cursor:pointer;opacity:0}.agents-roster-row:hover .agents-roster-more,.agents-roster-more:focus-visible,.agents-roster-more[aria-expanded=true]{opacity:1}.agents-roster-more:hover{background:var(--overlay-medium);color:var(--text)}.agents-roster-actions{display:flex;flex-wrap:wrap;gap:2px 8px;margin:2px 4px 8px;padding:7px;border-radius:var(--radius-sm, 8px);background:var(--overlay-medium)}.agents-roster-actions>span{display:inline-flex;align-items:center;gap:4px;width:100%;color:var(--text-muted);font-size:var(--ui-font-caption, 11px)}.agents-roster-actions>button{display:inline-flex;align-items:center;gap:5px;padding:5px;border:0;border-radius:var(--radius-sm, 8px);background:transparent;color:var(--text);font-size:var(--ui-font-caption, 11px);cursor:pointer}.agents-roster-actions>button:hover{background:var(--overlay-strong)}.agents-roster-actions>button.danger{color:var(--danger)}.agents-roster-actions>button:disabled{opacity:.45;cursor:default}.agents-roster-create{justify-content:flex-start;gap:8px;padding-inline:8px;margin-top:0}.agents-character{flex:1;min-width:0;min-height:0;overflow:hidden}.agent-create-form{display:grid;align-content:start;gap:20px;width:min(100% - 48px,590px);height:100%;overflow:auto;margin:0 auto;padding:48px 0}.agent-create-form>header{display:flex;align-items:flex-start;gap:14px}.agent-create-form>header>svg{color:var(--accent-ink);margin-top:5px}.agent-create-form h2{margin:0 0 5px;color:var(--text);font-size:var(--ui-font-title, 16px)}.agent-create-form p{margin:0;color:var(--text-muted);font-size:var(--ui-font-meta, 12px);line-height:1.6}.agent-create-form>div:last-child{display:flex;justify-content:flex-end;gap:8px}.agent-profile{display:grid;grid-template-rows:auto auto minmax(0,1fr) auto;width:100%;height:100%;min-height:0;max-width:1000px;margin:0 auto;padding:0 32px;color:var(--text)}.agent-profile [hidden]{display:none!important}.agent-character-hero{display:flex;align-items:center;gap:22px;padding:24px 0;min-width:0}.agent-portrait{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:96px;height:104px;color:var(--accent-ink);border-radius:var(--radius-lg, 20px);background:var(--overlay-light);overflow:hidden}.agent-portrait img{width:100%;height:100%;object-fit:cover}.agent-portrait.small{width:36px;height:40px;border-radius:var(--radius-sm, 8px)}.agent-character-id{display:block;width:calc(100% + 7px);min-width:0;margin-left:-7px;padding:1px 6px;font-size:var(--ui-font-caption, 11px);color:var(--text-muted);background:transparent;border:1px solid transparent;border-radius:var(--radius-sm, 8px);text-overflow:ellipsis;transition:background .16s ease,border-color .16s ease}.agent-character-id:not([readonly]):hover{background:var(--overlay-light)}.agent-character-id:not([readonly]):focus{color:var(--text);background:var(--bg-card);border-color:var(--accent-ink)}.agent-character-id[readonly]{cursor:default}.agent-character-identity{min-width:0;flex:1}.agent-portrait-slot{position:relative;flex-shrink:0}.agent-portrait-edit{position:relative;cursor:pointer}.agent-portrait-edit input[type=file]{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer}.agent-portrait-edit:has(input:focus-visible){outline:var(--focus-ring) solid var(--accent-ink);outline-offset:2px}.agent-portrait-badge,.agent-portrait-remove{position:absolute;display:grid;place-items:center;padding:0;color:var(--text);background:var(--bg-card);border:1px solid var(--border);border-radius:50%;opacity:0;transition:opacity .16s ease}.agent-portrait-badge{right:5px;bottom:5px;width:24px;height:24px;pointer-events:none}.agent-portrait-remove{top:-6px;right:-6px;width:20px;height:20px;color:var(--text-muted);cursor:pointer}.agent-portrait-remove:hover{color:var(--text)}.agent-portrait-slot:hover .agent-portrait-badge,.agent-portrait-slot:hover .agent-portrait-remove,.agent-portrait-edit:has(input:focus-visible) .agent-portrait-badge,.agent-portrait-edit[aria-busy=true] .agent-portrait-badge,.agent-portrait-remove:focus-visible{opacity:1}@media(hover:none){.agent-portrait-badge,.agent-portrait-remove{opacity:1}}.agent-character-name,.agent-character-desc{display:block;width:calc(100% + 7px);min-width:0;margin-left:-7px;padding:1px 6px;color:var(--text);background:transparent;border:1px solid transparent;border-radius:var(--radius-sm, 8px);transition:background .16s ease,border-color .16s ease}.agent-character-name:hover,.agent-character-desc:hover{background:var(--overlay-light)}.agent-character-name:focus,.agent-character-desc:focus{color:var(--text);background:var(--bg-card);border-color:var(--accent-ink)}.agent-character-name{margin-block:3px 4px;font-size:var(--ui-font-display, 20px);font-weight:600;line-height:1.25;letter-spacing:-.025em;text-overflow:ellipsis}.agent-character-desc{max-width:547px;margin-block:0 6px;font-size:var(--ui-font-meta, 12px);line-height:1.6;color:var(--text-muted);resize:none;field-sizing:content;min-height:calc(1.6em + 4px);max-height:calc(4.8em + 4px)}.agent-state{display:inline-flex;align-items:center;gap:6px;font-size:var(--ui-font-caption, 11px);color:var(--text-muted)}.agent-state i{width:5px;height:5px;border-radius:50%;background:var(--text-muted)}.agent-state.working{color:var(--accent-ink)}.agent-state.working i{background:var(--accent)}.profile-expand{flex-shrink:0;align-self:flex-start;display:grid;place-items:center;width:30px;height:30px;padding:0;background:transparent;border:0;border-radius:var(--radius-sm, 8px);color:var(--text-muted);cursor:pointer}.profile-expand:hover{background:var(--overlay-medium);color:var(--text)}.agent-section-nav{--profile-nav-gap: 4px;--profile-nav-padding: 5px;position:relative;isolation:isolate;display:flex;gap:var(--profile-nav-gap);padding:var(--profile-nav-padding);background:var(--overlay-light);border-radius:var(--radius-md, 12px);min-width:0}.agent-section-nav:before{content:"";position:absolute;z-index:-1;pointer-events:none;inset-block:var(--profile-nav-padding);left:var(--profile-nav-padding);width:calc((100% - 2 * var(--profile-nav-padding) - (var(--profile-tab-count, 5) - 1) * var(--profile-nav-gap)) / var(--profile-tab-count, 5));border-radius:var(--radius-sm, 8px);background:var(--bg);box-shadow:var(--btn-shadow);transform:translate(calc(var(--profile-tab-index, 0) * (100% + var(--profile-nav-gap))));transition:transform .2s cubic-bezier(.2,.8,.2,1)}.agent-section-nav button{flex:1;min-width:0;display:flex;align-items:center;justify-content:center;gap:7px;min-height:36px;padding:8px 10px;border:0;background:transparent;color:var(--text-muted);border-radius:var(--radius-sm, 8px);cursor:pointer;white-space:nowrap;font-size:var(--ui-font-meta, 12px);transition:background .16s ease,color .16s ease}.agent-section-nav button svg{flex-shrink:0}.agent-section-nav button span{overflow:hidden;text-overflow:ellipsis}.agent-section-nav button:hover{color:var(--text);background:var(--overlay-medium)}.agent-section-nav button.selected{color:var(--accent-ink);background:transparent}.agent-profile-content{min-height:0;overflow:auto;overscroll-behavior:contain;padding:24px 2px;scrollbar-width:thin}.agent-profile-content:focus{outline:none}.agent-profile-content:focus-visible{outline:var(--focus-ring) solid var(--accent);outline-offset:-2px}.profile-edit-fields{border:0;margin:0;padding:0;min-width:0}.profile-edit-fields:disabled{opacity:.7}.agent-profile-content h3{font-size:var(--ui-font-meta, 12px);color:var(--text-muted);font-weight:500;margin:24px 0 12px}.agent-current-session{display:grid;gap:8px;margin-bottom:24px;padding:16px;background:var(--overlay-light);border-radius:var(--radius-md, 12px);overflow-wrap:anywhere}.agent-current-session small,.agent-current-session>span{font-size:var(--ui-font-caption, 11px);line-height:1.6;color:var(--text-muted)}.agent-current-session>strong{font-size:var(--ui-font-body, 13px);font-weight:600}.agent-current-session .profile-model-field{margin-top:6px}.agent-profile-link{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;margin-top:16px;min-height:36px;padding:8px 0;color:var(--text-muted);font-size:var(--ui-font-meta, 12px);background:transparent;border:0;cursor:pointer;text-align:left}.agent-profile-link:hover{color:var(--accent-ink)}.agent-profile-link svg{flex-shrink:0}.agent-profile-muted{color:var(--text-muted);font-size:var(--ui-font-meta, 12px);line-height:1.65;overflow-wrap:anywhere}.agent-profile-error{color:var(--danger);font-size:var(--ui-font-meta, 12px);line-height:1.6;overflow-wrap:anywhere;margin:0}.profile-config-group{margin-bottom:26px}.profile-config-group>h2{font-size:var(--ui-font-body, 13px);font-weight:600;margin:0 0 10px}.profile-config-group>p{margin:0 0 16px}.agent-config-fields{display:grid;gap:18px}.agent-field{display:grid;gap:8px;color:var(--text-muted);font-size:var(--ui-font-meta, 12px);min-width:0}.agent-field input,.agent-field select,.agent-field textarea{width:100%;min-width:0;color:var(--text);font-size:var(--ui-font-body, 13px)}.agent-field input:not([type=checkbox]),.agent-field select{min-height:36px}.agent-field textarea{resize:vertical;line-height:1.65}.agent-avatar-actions{display:flex;align-items:center;flex-wrap:wrap;gap:7px;min-width:0}.agent-avatar-actions label,.agent-avatar-actions button{display:inline-flex;align-items:center;gap:6px;cursor:pointer}.agent-avatar-actions label[aria-disabled=true]{opacity:.55;cursor:default}.agent-avatar-actions input[type=file]{display:none}.agent-avatar-actions small{flex-basis:100%;color:var(--text-muted);font-size:10px;line-height:1.5}.profile-list-toolbar{display:grid;gap:6px}.profile-list-controls{display:flex;gap:8px;min-width:0}.profile-list-controls>.profile-search{flex:1 1 0;min-width:0}.profile-list-controls>select{flex:0 1 auto;min-width:0;max-width:46%;min-height:36px;font-size:var(--ui-font-meta, 12px);color:var(--text)}.profile-list-summary{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:0 12px;color:var(--text-muted);font-size:var(--ui-font-caption, 11px);line-height:1.6}.profile-list-actions{display:flex;flex-wrap:wrap;gap:0 12px}.agent-skills-panel{display:grid;gap:8px;min-width:0}.agent-skills-panel .profile-save-notice{overflow-wrap:anywhere}.agent-skills-panel .profile-list-toolbar{margin-bottom:4px}.agent-skills-policy-hint{margin:0;color:var(--text-muted);font-size:var(--ui-font-caption, 11px);line-height:1.55}.agent-skill-section-head{display:flex;align-items:flex-end;justify-content:space-between;gap:10px;margin-top:20px;min-width:0}.agent-skill-section-head:first-of-type{margin-top:8px}.agent-skill-section-head>div{min-width:0}.agent-skill-section-head h3{margin:0 0 3px;color:var(--text);font-size:var(--ui-font-body, 13px);font-weight:600}.agent-skill-section-head p{margin:0;color:var(--text-muted);font-size:var(--ui-font-caption, 11px);line-height:1.5}.agent-skill-section-head .btn{flex-shrink:0;display:inline-flex;align-items:center;gap:5px}.agent-skill-list{display:grid;gap:4px;min-width:0}.agent-skill-row{display:flex;align-items:flex-start;gap:9px;min-width:0;padding:10px 11px;border-radius:var(--radius-sm, 8px);background:var(--overlay-light)}.agent-skill-row.enabled{background:var(--overlay-medium)}.agent-skill-row>label{display:grid;place-items:center;width:20px;height:22px;flex-shrink:0;cursor:pointer}.agent-skill-row input{accent-color:var(--accent)}.agent-skill-row>svg{flex-shrink:0;align-self:center;color:var(--text-muted);transition:transform .16s ease}.agent-skill-row>svg.open{transform:rotate(90deg)}.agent-skill-summary{display:grid;gap:2px;flex:1;min-width:0;padding:0;border:0;background:transparent;color:var(--text);text-align:left;cursor:pointer}.agent-skill-summary strong{font-size:var(--ui-font-body, 13px);font-weight:500;overflow-wrap:anywhere}.agent-skill-summary span{color:var(--text-muted);font-size:var(--ui-font-meta, 12px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.agent-skill-summary small{color:var(--text-faint, var(--text-muted));font-size:var(--ui-font-caption, 11px)}.agent-skill-summary:hover strong{color:var(--accent-ink)}.agent-skill-editor{display:grid;gap:10px;min-width:0;padding:14px;border-radius:var(--radius-md, 12px);background:var(--overlay-light)}.agent-skill-editor>label{display:grid;gap:5px;color:var(--text-muted);font-size:var(--ui-font-meta, 12px)}.agent-skill-editor input,.agent-skill-editor textarea{width:100%;min-width:0;color:var(--text);font-size:var(--ui-font-body, 13px)}.agent-skill-editor textarea{line-height:1.6;resize:vertical}.agent-skill-editor>div{display:flex;justify-content:flex-end;flex-wrap:wrap;gap:7px}.agent-skill-detail{display:grid;gap:10px;min-width:0;margin-top:12px;padding:14px;border-radius:var(--radius-md, 12px);background:var(--overlay-light)}.agent-skill-detail-head{display:flex;align-items:center;justify-content:space-between;gap:10px}.agent-skill-detail-head strong{font-size:var(--ui-font-body, 13px)}.agent-skill-detail>p{margin:0;font-size:var(--ui-font-meta, 12px);line-height:1.6;color:var(--text-muted)}.agent-skill-detail>small{font-size:var(--ui-font-caption, 11px);line-height:1.5;color:var(--text-faint, var(--text-muted));overflow-wrap:anywhere}.agent-skill-content{min-width:0;max-height:320px;overflow:auto;padding:12px;border-radius:var(--radius-sm, 8px);background:var(--bg);overflow-wrap:anywhere}.agent-skill-detail details{color:var(--text-muted);font-size:var(--ui-font-caption, 11px)}.agent-skill-detail details>summary{cursor:pointer}.agent-skill-detail ul{margin:8px 0 0;padding-left:20px;overflow-wrap:anywhere}.agent-skill-detail-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:7px}.agent-skill-detail-actions .btn{display:inline-flex;align-items:center;gap:5px}.agent-skill-detail-actions .danger{color:var(--danger)}.profile-text-action{color:var(--text-muted);font-size:var(--ui-font-caption, 11px);background:transparent;border:0;padding:6px 0;cursor:pointer}.profile-text-action:hover,.profile-text-action[aria-pressed=true]{color:var(--accent-ink)}.profile-text-action[aria-pressed=true]{text-decoration:underline;text-underline-offset:4px}.profile-text-action:disabled{opacity:.45;cursor:default}.agent-equipment-list{margin-top:10px;display:grid;gap:3px}.agent-equipment-item{display:flex;gap:10px;align-items:flex-start;padding:12px 10px;border-radius:var(--radius-sm, 8px);font-size:var(--ui-font-meta, 12px);line-height:1.6;cursor:pointer;transition:background .16s ease}.agent-equipment-item:hover,.agent-equipment-item.enabled{background:var(--overlay-light)}.agent-equipment-item:has(input:focus-visible){outline:var(--focus-ring) solid var(--accent);outline-offset:-2px}.agent-equipment-item input{flex-shrink:0;margin-top:3px;accent-color:var(--accent)}.agent-equipment-item strong{font-size:var(--ui-font-body, 13px);font-weight:500;overflow-wrap:anywhere}div.agent-equipment-item{display:grid;gap:1px;padding:7px 10px;cursor:default}div.agent-equipment-item>label{display:flex;align-items:flex-start;gap:10px;min-width:0;cursor:pointer}.equipment-desc{display:block;width:calc(100% - 23px);min-width:0;margin-left:23px;padding:0;text-align:left;font-size:var(--ui-font-meta, 12px);line-height:1.6;color:var(--text-muted);background:transparent;border:0;cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.equipment-desc:hover{color:var(--text)}.equipment-desc:focus-visible{outline:var(--focus-ring) solid var(--accent);outline-offset:1px;border-radius:4px}.equipment-desc[aria-expanded=true]{white-space:normal;overflow-wrap:anywhere}.equipment-group{margin-top:10px;border-radius:var(--radius-sm, 8px);background:var(--overlay-light)}.equipment-group>summary{display:flex;align-items:baseline;justify-content:space-between;gap:10px;padding:10px 12px;font-size:var(--ui-font-meta, 12px);font-weight:500;cursor:pointer;border-radius:var(--radius-sm, 8px)}.equipment-group>summary:hover{background:var(--overlay-light)}.equipment-group>summary:before{content:"";flex-shrink:0;align-self:center;width:0;height:0;border-block:4px solid transparent;border-left:6px solid currentColor;opacity:.7;transition:transform .16s ease}.equipment-group[open]>summary:before{transform:rotate(90deg)}.equipment-group>summary::-webkit-details-marker{display:none}.equipment-group>summary>span{flex:1;min-width:0}.equipment-group>summary>small{font-size:var(--ui-font-caption, 11px);font-weight:400;color:var(--text-muted);white-space:nowrap}.equipment-group>.agent-equipment-list{margin-top:0;padding:0 4px 6px}.equipment-group .agent-equipment-item.enabled{background:transparent}.equipment-group .agent-equipment-item:hover{background:var(--overlay-light)}.profile-empty{padding:26px 12px;text-align:center;font-size:var(--ui-font-meta, 12px);color:var(--text-muted)}.agent-profile-save{flex-shrink:0;padding:12px 0;border-top:1px solid var(--border);display:grid;gap:8px;min-width:0}.agent-profile-save:empty{display:none}.agent-profile-save small{color:var(--text-muted);font-size:var(--ui-font-caption, 11px);line-height:1.6;overflow-wrap:anywhere}.agent-profile-save.is-dirty>small{color:var(--accent-ink)}.agent-profile-save>div{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end}.agent-profile-save button{display:inline-flex;justify-content:center;align-items:center;gap:6px;min-height:34px;font-size:var(--ui-font-meta, 12px)}.profile-save-notice{margin:0;display:flex;align-items:center;gap:7px;font-size:var(--ui-font-caption, 11px);color:var(--accent-ink);line-height:1.6}.profile-save-notice svg{flex-shrink:0}.agent-profile-panel{height:100%;min-height:0;display:flex;flex-direction:column;overflow:hidden;color:var(--text)}.agent-profile-panel-title{padding:12px 16px 0;font-size:var(--ui-font-caption, 11px);color:var(--text-muted);flex-shrink:0}.agent-profile-panel-title:has(>button){display:flex;align-items:baseline;justify-content:space-between;gap:8px}.agent-profile-panel>.agent-profile{flex:1;height:auto}.agent-profile.compact{padding:0 16px}.compact .agent-character-hero{gap:12px;padding:16px 0;align-items:center}.compact .agent-portrait{width:48px;height:54px;border-radius:var(--radius-md, 12px)}.compact .agent-character-name{font-size:var(--ui-font-title, 16px);margin-block:2px 3px}.compact .agent-character-desc{font-size:var(--ui-font-caption, 11px);margin-bottom:4px}.compact .agent-portrait-badge{right:3px;bottom:3px;width:18px;height:18px}.compact .agent-portrait-remove{top:-5px;right:-5px;width:17px;height:17px}.compact .agent-section-nav{--profile-nav-gap: 2px;--profile-nav-padding: 4px}.compact .agent-section-nav button{flex-direction:column;gap:5px;font-size:var(--ui-font-caption, 11px);padding:7px 2px}.compact .agent-profile-content{padding-block:18px}.compact .agent-current-session{padding:12px}.agent-profile-team{padding:12px 18px}.agent-profile-team h3{display:flex;align-items:center;gap:8px;font-size:var(--ui-font-body, 13px)}.profile-model-trigger{display:flex;align-items:center;gap:10px;width:100%;min-width:0;min-height:38px;padding:9px 11px;text-align:left;border:1px solid var(--border);border-radius:var(--radius-sm, 8px);background:var(--bg);color:var(--text);cursor:pointer}.profile-model-trigger>span{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.profile-model-trigger svg{flex-shrink:0;transition:transform .16s ease}.profile-model-trigger[aria-expanded=true] svg{transform:rotate(180deg)}.profile-model-options{padding:8px;background:var(--overlay-light);border-radius:var(--radius-sm, 8px);animation:profile-enter .16s ease both}.profile-model-results{max-height:220px;overflow:auto;margin-top:6px}.profile-model-results button{display:flex;align-items:center;gap:8px;width:100%;min-height:36px;padding:9px 8px;color:var(--text);background:transparent;border:0;border-radius:var(--radius-sm, 8px);text-align:left;cursor:pointer;font-size:var(--ui-font-meta, 12px);overflow-wrap:anywhere}.profile-model-results button:hover,.profile-model-results button[aria-pressed=true]{background:var(--overlay-medium)}.profile-model-results button>span{flex:1;min-width:0;display:grid;gap:3px}.profile-model-results strong{font-size:var(--ui-font-meta, 12px);font-weight:500}.profile-model-results small{color:var(--text-muted);font-size:var(--ui-font-caption, 11px)}.profile-model-results svg{flex-shrink:0;color:var(--accent-ink)}.profile-text-editor{display:grid;gap:8px;min-width:0}.profile-editor-heading{display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:var(--ui-font-meta, 12px);color:var(--text-muted)}.profile-text-editor>textarea{width:100%;min-width:0;min-height:150px;padding:12px;resize:vertical;font-size:var(--ui-font-body, 13px);line-height:1.75;tab-size:2}.profile-text-preview{min-height:150px;padding:12px;background:var(--overlay-light);border-radius:var(--radius-sm, 8px);overflow-wrap:anywhere}.profile-editor-hint{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;font-size:var(--ui-font-caption, 11px);line-height:1.6;color:var(--text-muted)}.profile-editor-hint>span{margin-left:auto;font-variant-numeric:tabular-nums}.profile-disclosure{margin-bottom:16px;padding:12px;background:var(--overlay-light);border-radius:var(--radius-sm, 8px)}.profile-disclosure>summary{cursor:pointer;padding-block:3px;color:var(--text);font-size:var(--ui-font-meta, 12px);font-weight:500}.profile-disclosure[open]>summary{margin-bottom:14px}.profile-memory{font-size:var(--ui-font-body, 13px);line-height:1.7}.profile-memory [hidden]{display:none!important}.profile-memory textarea{width:100%;min-width:0;padding:10px;font-size:var(--ui-font-body, 13px);line-height:1.75;resize:vertical}.profile-memory summary{cursor:pointer;padding-block:6px;font-size:var(--ui-font-meta, 12px)}.profile-memory li{padding-bottom:12px}.profile-memory,.memory-list,.profile-growth-memory{display:grid;gap:10px;min-width:0}.profile-growth-memory>.agent-profile-link{margin-top:0}.profile-log{display:grid;gap:2px;min-width:0}.profile-log>.harness-summary{margin-bottom:8px}.profile-log .agentmem-log-body{padding:0 8px 10px 26px;font-size:var(--ui-font-body, 13px);line-height:1.7}.profile-log .agentmem-log-body h3{margin:8px 0 0;font-size:var(--ui-font-caption, 11px);font-weight:500;line-height:1.6;color:var(--text-muted);font-variant-numeric:tabular-nums}.profile-log .agentmem-log-body p{margin:0}.profile-log .agentmem-log-edit.field{padding-left:26px}.profile-log .agentmem-log-edit textarea{font-size:var(--ui-font-body, 13px);line-height:1.7}.profile-growth-memory .profile-disclosure,.agent-schedule .profile-disclosure{margin-bottom:0;padding:8px 12px}.profile-growth-memory .profile-disclosure[open]>summary,.agent-schedule .profile-disclosure[open]>summary{margin-bottom:10px}.profile-disclosure>summary>small{float:right;margin-left:10px;font-size:var(--ui-font-caption, 11px);font-weight:400;color:var(--text-muted)}.memory-add>summary{display:inline-flex;align-items:center;gap:6px;padding-block:2px;font-size:var(--ui-font-meta, 12px);color:var(--accent-ink);list-style:none}.memory-add>summary::-webkit-details-marker{display:none}.memory-add>summary:hover{text-decoration:underline;text-underline-offset:3px}.memory-entry>p{margin:0;font-size:var(--ui-font-body, 13px);line-height:1.65;white-space:pre-wrap;overflow-wrap:anywhere}.memory-entry-meta{display:flex;align-items:flex-start;gap:2px;min-width:0;margin-bottom:-4px}.memory-entry-meta>details{flex:1;min-width:0;font-size:var(--ui-font-caption, 11px);line-height:1.6;color:var(--text-muted);overflow-wrap:anywhere}.memory-entry-meta>details>summary{padding-block:3px;font-size:var(--ui-font-caption, 11px)}.memory-entry-meta>.harness-undo{margin:0}.memory-footnote{margin:0;font-size:var(--ui-font-caption, 11px);line-height:1.6;color:var(--text-faint, var(--text-muted))}.profile-segment{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;margin-bottom:16px}.profile-segment>button{display:grid;gap:2px;min-width:0;padding:10px 12px;text-align:left;color:var(--text-muted);background:transparent;border:1px solid transparent;border-radius:var(--radius-sm, 8px);cursor:pointer;transition:background .16s ease,color .16s ease}.profile-segment>button:hover{background:var(--overlay-light);color:var(--text)}.profile-segment>button[aria-pressed=true]{color:var(--accent-ink);background:var(--overlay-medium)}.profile-segment strong{display:flex;align-items:center;gap:6px;min-width:0;font-size:var(--ui-font-body, 13px);font-weight:600;overflow-wrap:anywhere}.profile-segment small{font-size:var(--ui-font-caption, 11px);line-height:1.5;color:var(--text-muted);overflow-wrap:anywhere;text-wrap:balance}.profile-segment .profile-tab-badge{position:static;margin-left:auto}.schedule-entry,.schedule-rule{display:grid;gap:6px;min-width:0;padding:12px;border-radius:var(--radius-sm, 8px);background:var(--overlay-light)}.schedule-entry.is-past,.schedule-rule.is-past{opacity:.62}.schedule-entry>p{margin:0;font-size:var(--ui-font-meta, 12px);line-height:1.6;color:var(--text-muted);overflow-wrap:anywhere;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.schedule-when{display:flex;flex-wrap:wrap;align-items:center;gap:2px 8px;font-size:var(--ui-font-meta, 12px);line-height:1.6;color:var(--text-muted);font-variant-numeric:tabular-nums}.schedule-when>.harness-kind{margin-right:0}.schedule-when>time{color:var(--text)}.schedule-rule{grid-template-columns:auto minmax(0,1fr);column-gap:10px;align-items:start}.schedule-rule>svg{margin-top:3px;color:var(--text-muted)}.schedule-rule>span{display:grid;gap:2px;min-width:0}.schedule-rule strong{font-size:var(--ui-font-body, 13px);font-weight:500;overflow-wrap:anywhere}.schedule-rule small{font-size:var(--ui-font-caption, 11px);line-height:1.6;color:var(--text-muted);overflow-wrap:anywhere}.schedule-rules>h3{margin:10px 0 8px;font-size:var(--ui-font-meta, 12px);font-weight:500;color:var(--text-muted)}.schedule-past{margin-bottom:0}.schedule-past>.harness-entries{margin-top:0}.agent-schedule .harness-summary .profile-text-action,.profile-memory .harness-summary .profile-text-action{color:var(--text-muted)}.agent-schedule .harness-summary .profile-text-action:hover,.profile-memory .harness-summary .profile-text-action:hover{color:var(--accent-ink)}.agent-harness{display:grid;gap:14px;min-width:0}.agent-harness>p{margin:0}.harness-summary{display:flex;align-items:baseline;justify-content:space-between;flex-wrap:wrap;gap:4px 12px;font-size:var(--ui-font-meta, 12px);line-height:1.6;color:var(--text-muted)}.harness-summary time{white-space:nowrap}.harness-summary .profile-text-action{display:inline-flex;align-items:center;gap:6px;padding:0;color:var(--accent-ink)}.harness-summary .profile-text-action:hover:not(:disabled){text-decoration:underline;text-underline-offset:3px}.harness-entries{list-style:none;margin:0;padding:0;display:grid;gap:6px}.harness-entry{display:grid;gap:6px;min-width:0;padding:12px;border-radius:var(--radius-sm, 8px);background:var(--overlay-light)}.harness-entry-head{display:flex;align-items:flex-start;gap:8px;min-width:0}.harness-entry-head strong{flex:1;min-width:0;font-size:var(--ui-font-body, 13px);font-weight:600;line-height:1.5;overflow-wrap:anywhere}.harness-kind{display:inline-block;margin-right:8px;padding:0 7px;vertical-align:1px;font-size:var(--ui-font-caption, 11px);font-weight:500;line-height:17px;white-space:nowrap;color:var(--text-muted);border:1px solid var(--overlay-strong);border-radius:var(--radius-pill, 999px)}.harness-kind.recipe{color:var(--accent-ink)}.harness-undo{flex-shrink:0;display:grid;place-items:center;width:24px;height:24px;margin:-2px -4px 0 0;padding:0;color:var(--text-muted);background:transparent;border:0;border-radius:var(--radius-sm, 8px);cursor:pointer}.harness-undo:hover{color:var(--text);background:var(--overlay-medium)}.harness-undo:disabled{opacity:.45;cursor:default}.harness-entry>p{margin:0;font-size:var(--ui-font-meta, 12px);line-height:1.65;overflow-wrap:anywhere;white-space:pre-wrap}.harness-evidence,.harness-meta{font-size:var(--ui-font-caption, 11px);line-height:1.6;color:var(--text-muted);overflow-wrap:anywhere}.harness-meta{color:var(--text-faint, var(--text-muted));font-variant-numeric:tabular-nums}.harness-empty{display:grid;justify-items:center;gap:10px;padding:32px 16px;text-align:center;color:var(--text-muted);background:var(--overlay-light);border-radius:var(--radius-md, 12px)}.harness-empty>svg{color:var(--accent-ink)}.harness-empty>p{max-width:34em;margin:0;font-size:var(--ui-font-meta, 12px);line-height:1.65}.harness-empty>.btn{display:inline-flex;align-items:center;gap:6px}.harness-candidates>h3{margin:10px 0 8px;font-size:var(--ui-font-meta, 12px);font-weight:500;color:var(--accent-ink)}.harness-candidates>ul{list-style:none;margin:0;padding:0;display:grid;gap:6px}.harness-candidate{display:grid;grid-template-columns:auto minmax(0,1fr);column-gap:10px;padding:8px 12px;font-size:var(--ui-font-meta, 12px);line-height:1.6;border-radius:var(--radius-sm, 8px);background:var(--overlay-light);overflow-wrap:anywhere}.harness-candidate>time{color:var(--text-faint, var(--text-muted));font-variant-numeric:tabular-nums;white-space:nowrap}.harness-candidate-actions{grid-column:2;display:flex;gap:14px}.harness-candidate-actions .profile-text-action{padding:2px 0}.harness-candidate-actions .profile-text-action.adopt{color:var(--accent-ink)}.harness-candidate-actions .profile-text-action:hover:not(:disabled){text-decoration:underline;text-underline-offset:3px}.harness-candidates>small{display:block;margin-top:8px;font-size:var(--ui-font-caption, 11px);line-height:1.6;color:var(--text-muted)}.agent-section-nav button{position:relative}.profile-tab-badge{position:absolute;top:2px;right:2px;display:inline-grid;place-items:center;min-width:14px;height:14px;padding:0 3px;font-size:var(--ui-font-caption, 11px);font-style:normal;font-weight:600;line-height:1;color:var(--accent-ink);background:var(--overlay-medium);border-radius:var(--radius-pill, 999px)}.harness-history>h3{margin:10px 0 12px;font-size:var(--ui-font-meta, 12px);font-weight:500;color:var(--text-muted)}.harness-history>ol{list-style:none;display:grid;gap:12px;margin:0 0 0 4px;padding:0 0 0 14px;border-left:1px solid var(--border)}.harness-event{position:relative;display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:10px;font-size:var(--ui-font-meta, 12px);line-height:1.5}.harness-event:before{content:"";position:absolute;left:-18px;top:6px;width:7px;height:7px;border-radius:50%;background:var(--text-muted)}.harness-event.upsert:before{background:var(--accent)}.harness-event>span{min-width:0;overflow-wrap:anywhere}.harness-event b{margin-right:6px;font-weight:500;color:var(--text-muted)}.harness-event>.profile-text-action{grid-column:2;grid-row:1 / span 2;align-self:center;padding:0}.harness-event>time{grid-column:1;font-size:var(--ui-font-caption, 11px);color:var(--text-faint, var(--text-muted));font-variant-numeric:tabular-nums}.harness-history>.profile-text-action{margin-top:8px}.profile-section-enter{animation:profile-enter .18s ease both}@keyframes profile-enter{0%{opacity:0;transform:translateY(5px)}to{opacity:1;transform:translateY(0)}}@media(hover:none){.agents-roster-more{opacity:1}}@media(prefers-reduced-motion:reduce){.profile-section-enter,.profile-model-options{animation:none}.agent-section-nav:before,.agent-section-nav button,.agent-equipment-item,.profile-segment>button,.equipment-group>summary:before,.profile-model-trigger svg,.agent-portrait-badge,.agent-portrait-remove,.agent-character-name,.agent-character-desc{transition:none}}.agents-roster{width:100%;height:100%;min-width:0;min-height:0;padding:16px 12px 10px;gap:12px;background:transparent}.agents-roster-heading{align-items:center;min-height:24px}.agents-roster-item{padding-block:10px;transition:background .14s ease}.agents-roster-item strong{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.agents-roster-item>span:last-child{flex:1}.agents-roster-more{right:3px;top:15px}.agents-roster-create{flex-shrink:0}.agents-character,.agent-profile-panel{container:agent-detail / inline-size}.agent-profile{max-width:760px;padding-inline:28px}.agent-character-hero{gap:18px;padding-block:22px}.agent-portrait{width:68px;height:76px;border-radius:var(--radius-md)}.agent-profile-content{padding-block:20px}.agent-profile .agent-field>input:not([type=checkbox]),.agent-profile .agent-field>select{max-width:460px}.agent-skill-summary,.agent-skill-row,.profile-model-trigger{transition:background .14s ease,color .14s ease}.agent-skill-detail,.agent-skill-editor{animation:profile-enter .16s ease}@container agent-detail (max-width: 540px){.agent-profile{padding-inline:16px}.agent-character-hero{gap:12px;padding-block:16px}.agent-portrait{width:48px;height:54px}.agent-character-name{font-size:var(--ui-font-title)}.agent-section-nav{--profile-nav-gap: 2px;--profile-nav-padding: 4px}.agent-section-nav button{flex-direction:column;gap:5px;padding:7px 2px;font-size:var(--ui-font-meta)}.agent-profile-content{padding-block:18px}}@container agent-detail (max-width: 380px){.profile-segment>button{position:relative;padding:8px}.profile-segment strong>svg{display:none}.profile-segment .profile-tab-badge{position:absolute;top:7px;right:7px;min-width:6px;width:6px;height:6px;margin-left:0;padding:0;font-size:0;background:var(--accent-ink)}}@container agent-detail (max-width: 260px){.profile-segment{grid-template-columns:minmax(0,1fr)}}@media(prefers-reduced-motion:reduce){.agent-skill-detail,.agent-skill-editor{animation:none}.agents-roster-item,.agent-skill-summary,.agent-skill-row,.profile-model-trigger{transition:none}}.profile-list-controls>.capability-menu-trigger{flex:0 1 auto;max-width:46%;font-size:var(--ui-font-meta)}.profile-model-results button{font-size:var(--menu-text-size);line-height:var(--menu-line-height)}.agents-roster .agents-roster-create{justify-content:flex-start}.agent-profile .profile-model-field{max-width:460px}.agent-skill-extend{padding:14px 16px 20px}.agent-skill-extend>.agent-skill-detail{margin:0;padding:0;border-radius:0;background:none}.agent-skill-extend .agent-skill-content{max-height:none}.agent-skill-row.current{box-shadow:inset 0 0 0 1px var(--accent),0 0 0 .5px var(--accent)}.agent-skill-row.current>svg{color:var(--accent-ink)}.compact .agent-section-nav button span{max-width:100%;min-width:0}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{J as V}from"./appStore-CI1_L5OS.js";import{j as l,u as U,d as a}from"./index-BOzsniE1.js";const rt=[["path",{d:"M4 11V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-1",key:"1q9hii"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M2 15h10",key:"jfw4w8"}],["path",{d:"m9 18 3-3-3-3",key:"112psh"}]],Pt=V("file-input",rt);const it=[["path",{d:"M15 12h-5",key:"r7krc0"}],["path",{d:"M15 8h-5",key:"1khuty"}],["path",{d:"M19 17V5a2 2 0 0 0-2-2H4",key:"zz82l3"}],["path",{d:"M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3",key:"1ph1d7"}]],Kt=V("scroll-text",it),ot="forsion-sketch";function Jt(t){const e=Math.max(0,...(t.match(/`+/g)??[]).map(s=>s.length)),n="`".repeat(Math.max(3,e+1));return`${n}${ot}
|
|
2
2
|
${t.replace(/\s+$/,"")}
|
|
3
3
|
${n}`}const ct=`/* The sketch document is isolated. All colors inherit Forsion's current theme. */
|
|
4
4
|
html, body { margin: 0; padding: 0; }
|
|
@@ -637,5 +637,5 @@ fs-compare + fs-choice, fs-choice + fs-compare, fs-checklist + fs-choice, fs-cha
|
|
|
637
637
|
if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', register)
|
|
638
638
|
else register()
|
|
639
639
|
})()
|
|
640
|
-
`,
|
|
641
|
-
${dt}<\/script></head><body>${t}</body></html>`}const X=`(?![^>]*\\stype\\s*=\\s*["']?application/json\\b)`,At=new RegExp(`<script\\b${X}[^>]*>[\\s\\S]*?<\/script\\s*>`,"gi"),Et=new RegExp(`<script\\b${X}[^>]*>[\\s\\S]*$`,"i"),Mt=/<script\b[^>]*$/i,Tt=/<[a-zA-Z][^>]*(?:>|$)/g,Nt=/\son[a-z]+\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]+)/gi,Ct=/<(fs-[a-z]+)\b(?![\s\S]*<\/\1\s*>)[\s\S]*$/i;function
|
|
640
|
+
`,q=16384,G="forsion_sketch_state_v1",M=48;function S(t){try{const e=JSON.stringify(t);return e&&new TextEncoder().encode(e).length<=q?e:void 0}catch{return}}function ft(t,e,n){let s=2166136261;for(let i=0;i<n.length;i++)s=Math.imul(s^n.charCodeAt(i),16777619);return JSON.stringify([t,e,n.length,s>>>0])}function W(t){const e=t.getItem(G);if(!e||e.length>q*(M+4))return[];let n;try{n=JSON.parse(e)}catch{return[]}return Array.isArray(n)?n.filter(s=>!!s&&typeof s.key=="string"&&s.key.length<2048&&S(s.state)!==void 0).slice(-M):[]}function pt(t){try{return W(localStorage).find(e=>e.key===t)?.state??null}catch{return null}}function ut(t,e){const n=S(e);if(!(!n||t.length>=2048))try{const s=W(localStorage).filter(i=>i.key!==t);s.push({key:t,state:JSON.parse(n)}),localStorage.setItem(G,JSON.stringify(s.slice(-M)))}catch{}}const ht="default-src 'none'; script-src 'unsafe-inline'; style-src 'unsafe-inline'; img-src data: blob:; media-src data: blob:; font-src data:",mt="allow-scripts",P=40,gt=2400,bt=220,vt={"--fs-bg":"transparent"},xt=[["--fs-surface","--overlay-subtle"],["--fs-text","--text"],["--fs-muted","--text-muted"],["--fs-faint","--text-faint"],["--fs-border","--border"],["--fs-rule","--overlay-medium"],["--fs-accent","--accent-ink"],["--fs-accent-soft","--accent-light"],["--fs-green","--green"],["--fs-danger","--danger"],["--fs-radius","--radius-sm"],["--fs-font","--font-ui"],["--fs-mono","--font-mono"]];function B(t){return String(t).replace(/[<>]/g,"").trim()}function K(t){const e=getComputedStyle(t),n={...vt};for(const[s,i]of xt){const c=B(e.getPropertyValue(i));c&&(n[s]=c)}return n["color-scheme"]=document.documentElement.getAttribute("data-mode")==="dark"?"dark":"light",n}const w=new Set;let g=null;function yt(t){return w.add(t),!g&&typeof MutationObserver<"u"&&(g=new MutationObserver(()=>{for(const e of w)e()}),g.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme","data-skin","data-bg","data-mode","data-flat","data-glass","class"]})),()=>{w.delete(t),!w.size&&g&&(g.disconnect(),g=null)}}const kt=":root{--fs-s1:var(--fs-accent);--fs-s2:color-mix(in srgb,var(--fs-text) 62%,transparent);--fs-s3:color-mix(in srgb,var(--fs-text) 42%,transparent);--fs-s4:color-mix(in srgb,var(--fs-text) 26%,transparent);--fs-s5:color-mix(in srgb,var(--fs-text) 14%,transparent)}";function wt(t){const e=Object.entries(t).map(([n,s])=>`${n.replace(/[^a-z-]/gi,"")}:${B(s)}`).join(";");return e?`:root{${e}}`:""}function St(t,e={},n=null,s=""){const i=(S(n)??"null").replace(/</g,"\\u003c").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029"),c=lt.replace("__SKETCH_INITIAL_STATE__",()=>i).replace("__SKETCH_NONCE__",()=>s.replace(/[^A-Za-z0-9-]/g,""));return`<!doctype html><html><head><meta http-equiv="Content-Security-Policy" content="${ht}"><meta name="viewport" content="width=device-width, initial-scale=1"><style>${wt(e)}${kt}${ct}</style><script>${c};
|
|
641
|
+
${dt}<\/script></head><body>${t}</body></html>`}const X=`(?![^>]*\\stype\\s*=\\s*["']?application/json\\b)`,At=new RegExp(`<script\\b${X}[^>]*>[\\s\\S]*?<\/script\\s*>`,"gi"),Et=new RegExp(`<script\\b${X}[^>]*>[\\s\\S]*$`,"i"),Mt=/<script\b[^>]*$/i,Tt=/<[a-zA-Z][^>]*(?:>|$)/g,Nt=/\son[a-z]+\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]+)/gi,Ct=/<(fs-[a-z]+)\b(?![\s\S]*<\/\1\s*>)[\s\S]*$/i;function J(t){return t.replace(At,"").replace(Et,"").replace(Mt,"").replace(Ct,"").replace(Tt,e=>e.replace(Nt,""))}const _t=400,Lt=1500,Rt=2e4,zt=150;function Ot(){try{const t=window.Capacitor;return!!(t&&typeof t.isNativePlatform=="function"&&t.isNativePlatform())}catch{return!1}}function Ht(t){return!t||document.activeElement!==t?!1:navigator.userActivation?.isActive===!0}const It=()=>crypto.randomUUID?crypto.randomUUID():Array.from(crypto.getRandomValues(new Uint8Array(16)),t=>t.toString(16).padStart(2,"0")).join(""),$t=({item:t,actions:e,stateScope:n,onAsk:s})=>{const{t:i}=U(),c=a.useMemo(()=>n&&!t.draft?ft(n,t.callId,t.html):null,[n,t.callId,t.html,t.draft]),u=a.useRef(s);u.current=s;const x=a.useRef(!!t.draft);x.current=!!t.draft;const T=a.useRef(0),Y=a.useRef(t.draft?J(t.html):t.html),Z=a.useRef(c?pt(c):null),N=a.useRef(It()),y=a.useRef(null),C=a.useRef(null),h=a.useRef(null),[_,Q]=a.useState(t.draft?P:bt),[b,tt]=a.useState(!1),[L,et]=a.useState(!1),[k,nt]=a.useState(null);a.useLayoutEffect(()=>{y.current&&nt(K(y.current))},[]),a.useEffect(()=>yt(()=>{const r=y.current,d=h.current?.contentWindow;r&&d&&d.postMessage({type:"sketch-theme",vars:K(r)},"*")}),[]);const A=a.useRef(!1),E=a.useRef(!1),v=a.useRef(null),m=a.useRef(void 0),R=r=>{h.current?.contentWindow?.postMessage(r,"*")},z=()=>{if(m.current=void 0,!A.current)return;const r=v.current;v.current=null,r!==null&&x.current&&!E.current&&R({type:"sketch-draft",html:r})},O=()=>{!A.current||E.current||(E.current=!0,clearTimeout(m.current),m.current=void 0,v.current=null,R({type:"sketch-final",html:t.html}))},H=a.useRef(!!t.draft);a.useEffect(()=>{t.draft?(v.current=J(t.html),m.current||(m.current=setTimeout(z,zt))):H.current&&O()},[t.html,t.draft]),a.useEffect(()=>()=>clearTimeout(m.current),[]);const at=()=>{A.current=!0,!x.current&&H.current?O():v.current!==null&&z()};a.useEffect(()=>{let r,d;const p=()=>{c&&r!==void 0&&ut(c,JSON.parse(r)),r=void 0,d=void 0},$=j=>{if(!h.current||j.source!==h.current.contentWindow)return;const o=j.data;if(o?.type==="sketch-state"&&c){const f=S(o.state);f!==void 0&&(r=f,d||(d=setTimeout(p,200)))}o&&o.type==="sketch-height"&&Number.isFinite(Number(o.height))&&Q(Math.min(gt,Math.max(P,Math.ceil(Number(o.height)))));const D=o&&o.nonce===N.current&&!x.current&&Ht(h.current);if(D&&o.type==="sketch-ask"&&typeof o.text=="string"&&u.current){const f=Date.now(),F=o.text.trim().slice(0,_t);F&&f-T.current>=Lt&&(T.current=f,u.current(F))}if(D&&o.type==="sketch-copy"&&typeof o.text=="string"){const f=o.text.slice(0,Rt);f&&navigator.clipboard?.writeText(f).catch(()=>{})}};return window.addEventListener("message",$),window.addEventListener("pagehide",p),()=>{window.removeEventListener("message",$),window.removeEventListener("pagehide",p),clearTimeout(d),p()}},[c]),a.useEffect(()=>{const r=C.current;if(!r||b)return;const d=()=>et(r.scrollHeight>r.clientHeight+1);d();const p=new ResizeObserver(d);return p.observe(r),()=>p.disconnect()},[_,b]);const st=a.useMemo(()=>k?St(Y.current,k,Z.current,N.current):"",[k]),I=t.draft?void 0:e;return l.jsxs("div",{className:"sketch-card",ref:y,"data-sketch-call-id":t.callId,"data-sketch-draft":t.draft?"":void 0,children:[(t.title||I)&&l.jsxs("div",{className:"sketch-card-head",children:[t.title&&l.jsx("div",{className:"sketch-card-title",children:t.title}),I?.(t)]}),l.jsx("div",{ref:C,className:`sketch-clip${b?" open":""}${L&&!b?" faded":""}`,children:k&&l.jsx("iframe",{ref:h,className:"sketch-frame",sandbox:mt,srcDoc:st,style:{height:_},title:t.title||"sketch",onLoad:at})}),L&&l.jsx("button",{type:"button",className:"sketch-card-toggle",onClick:()=>tt(r=>!r),children:i(b?"sketch.collapse":"sketch.expand")})]})},jt=({item:t})=>{const{t:e}=U();return l.jsxs("div",{className:"sketch-card","data-sketch-call-id":t.callId,children:[t.title&&l.jsx("div",{className:"sketch-card-title",children:t.title}),l.jsx("div",{className:"sketch-card-note",children:e("sketch.mobileUnavailable")})]})},Vt=({items:t,actions:e,stateScope:n,onAsk:s})=>{const i=Ot(),c=i?jt:$t;return l.jsx(l.Fragment,{children:t.map(u=>l.jsx(c,{item:u,actions:i?void 0:e,stateScope:n,onAsk:i?void 0:s},`${n||""}:${u.callId}`))})};export{Pt as F,Kt as S,Vt as a,ot as b,Jt as s};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as v}from"./index-
|
|
1
|
+
import{d as v}from"./index-BOzsniE1.js";import{af as J,an as ne,am as re}from"./appStore-CI1_L5OS.js";const K=/^(auto|scroll|hidden|clip)$/,M=(l,p=1)=>Number.isFinite(l)&&l>0?l:p,m=l=>`${Math.round(l*1e3)/1e3}px`;function ae({anchorRef:l,enabled:p=!0,onActivate:Y,children:Q}){const[t]=v.useState(()=>{const d=document.createElement("div");return d.className="csu-guest-surface",d.setAttribute("aria-hidden","true"),d.inert=!0,Object.assign(d.style,{position:"absolute",display:"flex",flexDirection:"column",minWidth:"0",minHeight:"0",overflow:"hidden",boxSizing:"border-box",visibility:"hidden",pointerEvents:"none",zIndex:"1"}),d}),E=v.useRef(p);E.current=p;const q=v.useRef(Y);q.current=Y;const $=v.useRef(0),I=v.useRef(null);return v.useLayoutEffect(()=>{$.current++;let d=!1,b=0,r=t.parentElement,x=null,N=!1,R=!1;const n=t.ownerDocument,a=n.defaultView,o=(i,e)=>{t.style[i]!==e&&(t.style[i]=e)},f=()=>{o("visibility","hidden"),o("pointerEvents","none"),t.inert||(t.inert=!0),t.getAttribute("aria-hidden")!=="true"&&t.setAttribute("aria-hidden","true")},D=()=>{const i=t.style.visibility==="visible"&&E.current&&!N&&!n.documentElement.hasAttribute("data-dv-dragging");o("pointerEvents",i?"auto":"none"),t.inert===i&&(t.inert=!i);const e=i?"false":"true";t.getAttribute("aria-hidden")!==e&&t.setAttribute("aria-hidden",e)},y=()=>{d||!E.current||n.hidden||t.inert||t.style.visibility!=="visible"||!l.current?.isConnected||l.current.closest('[hidden], [inert], [aria-hidden="true"]')||n.documentElement.hasAttribute("data-dv-dragging")||(R=t.contains(n.activeElement),q.current?.())},G=()=>{t.contains(n.activeElement)||(R=!1)},ee=()=>{const i=l.current;if(!i?.isConnected||(r||(r=i.closest(".shell-work")??i.closest(".shell-host")??n.body,(r===n.body||a.getComputedStyle(r).position==="static")&&o("position","fixed"),r.appendChild(t),A?.observe(r)),x!==i&&(x&&A?.unobserve(x),A?.observe(i),x=i),!E.current||n.hidden||!r.isConnected))return f(),!1;const e=i.getBoundingClientRect();if(e.width<=0||e.height<=0)return f(),!1;let g=Math.max(0,e.left),C=Math.max(0,e.top),z=Math.min(a.innerWidth,e.right),O=Math.min(a.innerHeight,e.bottom),W=1,k="";N=!1;for(let s=i;s;s=s.parentElement){const u=a.getComputedStyle(s);if(s.hidden||u.display==="none"||u.visibility==="hidden"||u.visibility==="collapse")return f(),!1;(s.inert||s.getAttribute("aria-hidden")==="true")&&(N=!0),s!==r&&!s.contains(r)&&(W*=Number.parseFloat(u.opacity||"1"));const V=/\b(paint|strict|content)\b/.test(u.contain),B=V||K.test(u.overflowX||u.overflow),X=V||K.test(u.overflowY||u.overflow);if(!B&&!X)continue;const h=s.getBoundingClientRect(),Z=M(h.width/s.offsetWidth),_=M(h.height/s.offsetHeight),j=h.left+s.clientLeft*Z,U=h.top+s.clientTop*_,te=j+s.clientWidth*Z,ie=U+s.clientHeight*_;B&&(g=Math.max(g,j),z=Math.min(z,te)),X&&(C=Math.max(C,U),O=Math.min(O,ie)),!k&&B&&X&&Math.abs(h.left-e.left)<1&&Math.abs(h.top-e.top)<1&&Math.abs(h.right-e.right)<1&&Math.abs(h.bottom-e.bottom)<1&&(k=u.borderRadius)}if(z<=g||O<=C)return f(),!1;if(W<=0)return f(),!0;const S=r.getBoundingClientRect(),F=M(re(t)),H=t.style.position==="absolute",L=H?M(S.width/r.offsetWidth,F):F,w=H?M(S.height/r.offsetHeight,F):F;return o("left",m(H?(e.left-S.left)/L-r.clientLeft+r.scrollLeft:e.left/L)),o("top",m(H?(e.top-S.top)/w-r.clientTop+r.scrollTop:e.top/w)),o("width",m(e.width/L)),o("height",m(e.height/w)),o("clipPath",`inset(${m((C-e.top)/w)} ${m((e.right-z)/L)} ${m((e.bottom-O)/w)} ${m((g-e.left)/L)})`),o("borderRadius",k),o("opacity",String(W)),o("visibility","visible"),D(),!0},T=()=>{if(b=0,d)return;const i=ee(),e=t.contains(n.activeElement),g=e&&!R;R=e,g&&y(),i&&(b=a.requestAnimationFrame(T))},c=()=>{!d&&!b&&(b=a.requestAnimationFrame(T))},A=typeof ResizeObserver>"u"?null:new ResizeObserver(c),P=new MutationObserver(i=>{i.some(e=>e.target===n.documentElement&&e.attributeName==="data-dv-dragging")&&D(),i.some(e=>!t.contains(e.target))&&c()});return P.observe(n.documentElement,{subtree:!0,childList:!0,attributes:!0,attributeFilter:["style","class","hidden","inert","aria-hidden","data-dv-dragging"]}),a.addEventListener("resize",c),n.addEventListener("scroll",c,!0),n.addEventListener("visibilitychange",c),a.addEventListener(J,c),t.addEventListener("focus",y,!0),t.addEventListener("pointerdown",y,!0),n.addEventListener("focus",G,!0),I.current=()=>{E.current||f(),c()},T(),()=>{d=!0,b&&a.cancelAnimationFrame(b),A?.disconnect(),P.disconnect(),a.removeEventListener("resize",c),n.removeEventListener("scroll",c,!0),n.removeEventListener("visibilitychange",c),a.removeEventListener(J,c),t.removeEventListener("focus",y,!0),t.removeEventListener("pointerdown",y,!0),n.removeEventListener("focus",G,!0),I.current=null,f();const i=++$.current;queueMicrotask(()=>{$.current===i&&t.remove()})}},[l,t]),v.useLayoutEffect(()=>{I.current?.()},[p]),ne.createPortal(Q,t)}export{ae as S};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.agent-avatar-initial{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;font-weight:600;line-height:1;-webkit-user-select:none;user-select:none}.agent-avatar-glyph{display:block}.agent-avatar-fill{width:100%;height:100%;container-type:size;color:var(--text-muted)}.agent-avatar-fill .agent-avatar-glyph{font-size:42cqmin;font-weight:500}.agent-avatar-initial.agent-avatar-mini,img.agent-avatar-mini{display:inline-flex;flex:0 0 auto;width:16px;height:16px;border-radius:var(--radius-sm, 6px);object-fit:cover}.agent-avatar-initial.agent-avatar-mini{background:var(--overlay-medium);color:var(--text-muted);font-size:var(--ui-font-caption, 11px)}.t2c{position:relative;width:100%}.dv-groupview:has(.wb-tab--icon) .t2-chat-view{--t2c-card-surface: var(--sidebar-card-bg, var(--bg))}.t2c-inner{max-width:880px;margin:0 auto;width:100%;box-sizing:border-box;padding:8px 28px 16px;display:flex;flex-direction:column;gap:8px}.t2c-iconbtn{width:28px;height:28px;flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;border:none;background:transparent;color:var(--text-muted);border-radius:var(--radius-pill, 999px);cursor:pointer;transition:background var(--duration-fast, .15s),color var(--duration-fast, .15s)}.t2c-iconbtn:hover:not(:disabled){background:var(--overlay-light, rgba(127, 127, 127, .1));color:var(--text)}.t2c-iconbtn:disabled{opacity:.4;cursor:default}.t2c-stop{display:inline-flex;align-items:center;gap:5px;height:32px;padding:0 12px;flex-shrink:0;border:none;border-radius:var(--radius-pill, 999px);background:color-mix(in srgb,var(--danger, #e0564b) 14%,transparent);color:var(--danger, #e0564b);font-size:var(--ui-font-caption, 11px);font-family:var(--font-ui);cursor:pointer}.t2c-stop:hover{background:color-mix(in srgb,var(--danger, #e0564b) 22%,transparent)}.t2c-quotes{display:flex;flex-direction:column;gap:6px;margin-bottom:8px;max-height:172px;overflow-y:auto}.t2c-quote{display:flex;gap:8px;align-items:flex-start;flex:none;padding:8px 8px 8px 10px;background:var(--overlay-light, rgba(127, 127, 127, .08));border-radius:var(--radius-md, 10px)}.t2c-quote-mark{flex:none;margin-top:2px;color:var(--accent-ink)}.t2c-quote-text{flex:1;min-width:0;font-size:var(--ui-font-meta, 12px);line-height:var(--ui-line-meta, 1.5);color:var(--text-muted);white-space:pre-wrap;overflow-wrap:anywhere;overflow:hidden;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}.t2c-quote-x{flex:none;display:grid;place-items:center;width:20px;height:20px;background:none;border:none;border-radius:var(--radius-sm, 6px);cursor:pointer;color:var(--text-faint, var(--text-muted));padding:0;transition:background var(--duration-fast),color var(--duration-fast)}.t2c-quote-x:hover{background:var(--overlay-medium, rgba(127, 127, 127, .16));color:var(--text)}.t2c-hint{font-size:var(--ui-font-caption, 11px);color:var(--danger, #e0564b);margin-bottom:6px}.t2c-chiprow{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:8px}.t2c-refrow{align-items:center}.t2c-reflabel{font-size:var(--ui-font-meta, 12px);color:var(--text-faint);flex-shrink:0}.attach-chip .attach-chip-appico{flex:none;width:16px;height:16px;margin-left:3px;border-radius:0;object-fit:contain;color:var(--accent-ink)}.attach-chip--appref{cursor:pointer}.attach-chip--appref[data-off]{color:var(--text-faint)}.attach-chip--appref[data-off] .attach-chip-appico{filter:grayscale(1);opacity:.55}.t2c-menu{position:absolute;bottom:100%;left:0;right:0;margin-bottom:6px;background:var(--bg-card, var(--bg));border:var(--border-width, 1px) solid var(--border);border-radius:var(--radius-md, 12px);max-height:260px;overflow-y:auto;z-index:30;box-shadow:var(--card-shadow, 0 8px 28px rgba(0, 0, 0, .18));padding:6px}.t2c-menu-item{width:100%;min-height:var(--menu-item-min-height);display:flex;align-items:center;justify-content:space-between;gap:10px;padding:var(--menu-item-pad-block) var(--menu-item-pad-inline);font-size:var(--menu-text-size);border:none;background:transparent;color:var(--text);text-align:left;border-radius:var(--radius-sm, 8px);cursor:pointer}.t2c-menu-item[data-active]{background:var(--menu-hover, rgba(127, 127, 127, .12))}.t2c-menu-cmd{font-size:var(--ui-font-caption, 11px);font-weight:600;white-space:nowrap}.t2c-menu-desc{font-size:var(--ui-font-caption, 11px);color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.t2c-menu-sec{padding:5px 10px 3px;font-size:var(--ui-font-caption, 11px);color:var(--text-faint, var(--text-muted))}.t2c-cats{display:flex;gap:3px;margin:0 0 6px;padding:3px;border-radius:var(--radius-pill, 999px);background:var(--overlay-light)}.t2c-cat{flex:1;min-width:0;padding:4px 8px;border:0;border-radius:var(--radius-pill, 999px);background:transparent;color:var(--text-muted);font-family:var(--font-ui);font-size:var(--ui-font-meta);line-height:var(--ui-line-meta);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer}.t2c-cat[aria-selected=true]{background:var(--menu-hover);color:var(--text)}.t2c-menu-list{animation:t2c-list-in var(--menu-enter-duration, .18s) var(--menu-enter-ease, ease)}@keyframes t2c-list-in{0%{opacity:0;translate:0 2px}}.t2c-menu-empty{padding:8px 10px;font-size:var(--ui-font-caption);color:var(--text-faint, var(--text-muted))}.t2c-menu-cmd:has(>.t2c-menu-ico){display:inline-flex;align-items:center;gap:6px;min-width:0}.t2c-menu-ico{flex:none;width:16px;height:16px;object-fit:contain;color:var(--text-muted)}@media(prefers-reduced-motion:reduce){.t2c-menu-list{animation:none}}.t2c-mirror{position:absolute;z-index:1;margin:0;border:0;box-sizing:border-box;overflow:hidden;pointer-events:none;color:transparent;white-space:pre-wrap;overflow-wrap:break-word}.t2c-inref{border-radius:var(--radius-sm, 6px);background:var(--overlay-medium);box-shadow:0 0 0 1.5px var(--overlay-medium);-webkit-box-decoration-break:clone;box-decoration-break:clone}.t2c-inref-slot{position:relative}.t2c-inref-ico{position:absolute;top:50%;left:50%;width:1em;height:1em;translate:-50% -50%;object-fit:contain;color:var(--accent-ink)}.t2c-pill{display:inline-flex;align-items:center;gap:4px;padding:4px 9px;border:none;border-radius:var(--radius-pill, 999px);background:var(--overlay-light, rgba(127, 127, 127, .1));color:var(--text);font-size:var(--t2c-font-control, 12px);font-family:var(--font-ui);cursor:pointer;transition:background var(--duration-fast, .15s)}.t2c-row .composer-chip{font-size:var(--t2c-font-control, 12px)}.t2c-pill:hover{background:var(--overlay-medium, rgba(127, 127, 127, .18))}.t2c-pill.active{background:color-mix(in srgb,var(--accent-ink) 16%,transparent);color:var(--accent-ink)}.t2c-pill-label{max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mode-pill-wrap{position:relative;display:inline-flex}.t2c-pill.mode-pill-btn{min-width:0;interpolate-size:allow-keywords;width:fit-content;transition:background var(--duration-fast, .15s),width .18s var(--ease-spring)}.t2c-pill.mode-pill-btn.is-open{display:grid;grid-template-columns:16px minmax(0,1fr) 16px;width:224px;background:var(--overlay-medium, rgba(127, 127, 127, .18))}.mode-pill-wrap.is-open{width:224px;flex-shrink:0}.mode-pill-btn.is-open>svg{justify-self:center}.mode-pill-btn.is-open .t2c-pill-label{width:100%;max-width:none;text-align:center}.add-pill-wrap{position:relative;display:inline-flex}.t2c-pill.add-pill-btn{box-sizing:border-box;display:grid;grid-template-columns:16px minmax(0,0fr) 0;justify-content:center;gap:0;width:28px;height:28px;min-width:0;padding:0;overflow:hidden;color:var(--text-muted);transition:background var(--duration-fast, .15s),color var(--duration-fast, .15s),width .18s var(--ease-spring),grid-template-columns .18s var(--ease-spring),gap .18s var(--ease-spring),padding .18s var(--ease-spring)}.t2c-pill.add-pill-btn.is-open{grid-template-columns:16px minmax(0,1fr) 16px;justify-content:stretch;gap:4px;width:224px;padding:4px 9px;color:var(--text);background:var(--overlay-medium, rgba(127, 127, 127, .18))}.add-pill-plus{justify-self:center;transition:transform .2s var(--ease-spring)}.add-pill-btn.is-open .add-pill-plus{transform:rotate(45deg)}.add-pill-label{min-width:0;overflow:hidden;color:var(--text);text-align:center;white-space:nowrap;opacity:0;transition:opacity .12s ease}.add-pill-btn.is-open .add-pill-label{opacity:1;transition-delay:.04s}.add-pill-chevron{justify-self:center;opacity:0;transition:opacity .12s ease}.add-pill-btn.is-open .add-pill-chevron{opacity:1;transition-delay:.04s}.composer-menu--add{left:0;width:224px;min-width:0;max-width:none;max-height:none;overflow:visible}.composer-menu--add .menu-item{font-size:var(--t2c-font-control, 12px)}.composer-menu--add .menu-item .grow{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.composer-menu--add .add-menu-parent>svg:last-child{flex:none;color:var(--text-faint)}.add-menu-sub{position:absolute;bottom:100%;left:calc(100% + 6px);width:min(268px,calc(100cqw - 16px));min-width:0;max-width:calc(100cqw - 16px);padding:5px;background:var(--bg-card, var(--bg));border:var(--border-width, 1px) solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--card-shadow);animation:pop .16s var(--ease-spring)}.add-menu-sub.left{left:auto;right:calc(100% + 6px)}.add-menu-sub.stacked{left:0;right:auto}.add-menu-search{display:flex;align-items:center;gap:7px;margin:1px 1px 4px;padding:7px 8px;border-radius:var(--radius-md);background:var(--overlay-light, rgba(127, 127, 127, .08));color:var(--text-faint)}.add-menu-search:focus-within{box-shadow:0 0 0 var(--focus-ring) var(--sel-line)}.add-menu-search input{width:100%;min-width:0;border:0;outline:0;background:transparent;color:var(--text);font:inherit;font-size:var(--t2c-font-control, 12px)}.add-menu-search input::placeholder{color:var(--text-faint)}.add-menu-sub-scroll{max-height:286px;overflow-y:auto;overscroll-behavior:contain}.add-menu-result{align-items:flex-start!important}.add-menu-result>svg{flex:none;margin-top:1px;color:var(--text-muted)}.add-menu-appico{flex:none;width:18px;height:18px;margin-top:1px;object-fit:contain}.add-menu-result-main{display:flex;min-width:0;flex-direction:column;gap:1px}.add-menu-result-title,.add-menu-result-meta{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.add-menu-result-title{color:inherit}.add-menu-result-meta{color:var(--text-faint);font-size:var(--t2c-font-meta, 11px)}.add-menu-empty{padding:10px 9px;color:var(--text-faint);font-size:var(--t2c-font-meta, 11px)}.add-menu-section-gap{margin-top:4px;border-top:var(--border-width, 1px) solid var(--border)}.composer-menu--mode .mode-normal-row{display:flex;align-items:center;gap:2px}.composer-menu--mode .mode-normal-row>.menu-item{width:auto;flex:1 1 auto;min-width:0}.composer-menu--mode .mode-normal-row>.mode-agent-trigger{flex:0 1 auto;max-width:50%;gap:3px;color:var(--text-faint)}.composer-menu--mode .mode-normal-row>.mode-agent-trigger[aria-expanded=true]{background:var(--menu-hover);color:var(--text)}.mode-agent-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.t2c-row [data-cmenu],.t2c-row .t2c-pill,.t2c-row .composer-chip,.t2c-pill-label,.t2c-row .composer-chip .pill-marquee{min-width:0}.t2c-pill svg{flex-shrink:0}@container (max-width: 480px){.t2c-pill-label,.t2c-row .composer-chip .pill-marquee,.t2c-row .composer-chip .pill-ultra-tag{display:none}.mode-pill-btn.is-open .t2c-pill-label,.model-pill-btn.is-open .pill-marquee{display:block}.model-pill-btn.is-open .pill-ultra-tag{display:inline}}.t2c-row .composer-chip.model-pill-btn--native .pill-marquee{display:inline-block;max-width:128px;text-overflow:ellipsis}.t2c-row .composer-chip.model-pill-btn--native .pill-ultra-tag{display:inline}@container (max-width: 600px){.t2c-row:has(>.add-pill-wrap.is-open)>.t2c-capsule-peer:not(.add-pill-wrap),.t2c-row:has(>.mode-pill-wrap.is-open)>.t2c-capsule-peer:not(.mode-pill-wrap),.t2c-row:has(>.model-pill-wrap.is-open)>.t2c-capsule-peer:not(.model-pill-wrap),.t2c-row:has(>.add-pill-wrap.is-open)>.t2c-collapse-on-capsule-open,.t2c-row:has(>.mode-pill-wrap.is-open)>.t2c-collapse-on-capsule-open,.t2c-row:has(>.model-pill-wrap.is-open)>.t2c-collapse-on-capsule-open{display:none}}@media(prefers-reduced-motion:reduce){.t2c-pill.mode-pill-btn,.t2c-pill.add-pill-btn{transition:background var(--duration-fast, .15s)}.add-pill-plus,.add-pill-label,.add-pill-chevron{transition:none}.add-menu-sub{animation:none}}.t2c-ctxring{position:relative;display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;flex-shrink:0}.t2c-ctxring-btn{display:inline-flex;padding:0;border:none;background:none;color:inherit;cursor:pointer}.t2c-ctxring svg{transform:rotate(-90deg)}.t2c-ctxring-track{fill:none;stroke:var(--overlay-light, rgba(127, 127, 127, .2));stroke-width:3}.t2c-ctxring-fill{fill:none;stroke:var(--accent-ink);stroke-width:3;stroke-linecap:round;transition:stroke-dashoffset .35s var(--ease-out, ease)}.t2c-ctxring[data-warn] .t2c-ctxring-fill{stroke:var(--danger, #e0564b)}.t2c-ctxring-pop span[data-warn]{color:var(--danger, #e0564b)}.t2c-ctxring-pop{position:absolute;bottom:calc(100% + 8px);left:0;z-index:30;display:none;flex-direction:column;gap:7px;padding:11px 12px;width:300px;max-width:calc(100vw - 32px);box-sizing:border-box;background:var(--bg-card, var(--bg));border:var(--border-width, 1px) solid var(--border);border-radius:var(--radius-md, 12px);box-shadow:var(--card-shadow, 0 8px 28px rgba(0, 0, 0, .18));font-size:var(--ui-font-meta, 12px);font-family:var(--font-ui);color:var(--text-muted);text-align:left}.t2c-ctxring.is-open .t2c-ctxring-pop{display:flex}.t2c-cu-head{display:flex;flex-wrap:wrap;align-items:center;gap:2px 6px;width:100%;padding:0;border:none;background:none;font:inherit;color:var(--text-muted);cursor:pointer}.t2c-cu-title{color:var(--text-muted)}.t2c-cu-num{margin-left:auto;color:var(--text);font-variant-numeric:tabular-nums;white-space:nowrap}.t2c-ctxring .t2c-cu-chev{flex-shrink:0;color:var(--text-faint);transform:none;transition:transform .15s var(--ease-out, ease)}.t2c-cu-head[aria-expanded=true] .t2c-cu-chev{transform:rotate(90deg)}.t2c-cu-bar{display:flex;height:6px;border-radius:var(--radius-pill, 999px);overflow:hidden;background:var(--overlay-light, rgba(127, 127, 127, .16))}.t2c-cu-bar>span{flex-shrink:0;height:100%}.t2c-cu-bar>span+span:not(.t2c-cu-buffer){margin-left:1px}.t2c-cu-bar>.t2c-cu-buffer{margin-left:auto}.t2c-cu-buffer{background:repeating-linear-gradient(-45deg,var(--overlay-medium, rgba(127, 127, 127, .3)) 0 2px,transparent 2px 4px)}.t2c-cu-detail{display:flex;flex-direction:column;gap:6px}.t2c-cu-legend{max-height:clamp(140px,calc(100vh - 420px),360px);overflow-y:auto}.t2c-ctxring-pop .t2c-ctxinfo-files{max-height:120px;overflow-y:auto}.t2c-cu-legend{display:flex;flex-direction:column;gap:3px}.t2c-cu-row{display:grid;grid-template-columns:10px minmax(0,1fr) auto 44px;align-items:center;gap:7px}.t2c-cu-row>i{width:9px;height:9px;border-radius:2px}.t2c-cu-row>i.is-free{border:var(--border-width, 1px) solid var(--border);box-sizing:border-box}.t2c-cu-row>span:nth-child(2){overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text)}.t2c-cu-row>span:nth-child(n+3){text-align:right;font-variant-numeric:tabular-nums;color:var(--text-faint);white-space:nowrap}.t2c-cu-row.is-sub{font-size:var(--ui-font-caption, 11px)}.t2c-cu-row.is-sub>span:nth-child(2){padding-left:8px;color:var(--text-faint)}.t2c-cu-foot{display:flex;align-items:center;gap:8px}.t2c-cu-foot>.t2c-ctxring-compact{margin-left:auto}.t2c-ctxinfo-src{color:var(--text-faint);font-size:var(--ui-font-caption, 11px)}.t2c-ctxinfo-files{display:flex;flex-direction:column;gap:2px;padding-top:6px;border-top:var(--border-width, 1px) solid var(--border);font-size:var(--ui-font-caption, 11px)}.t2c-ctxinfo-label{color:var(--text-faint)}.t2c-ctxinfo-file{font-family:var(--font-mono);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.t2c-ctxinfo-file.dim{font-family:inherit;opacity:.6}.t2c-ctxring-compact{flex-shrink:0;padding:3px 9px;border:none;border-radius:var(--radius-pill, 999px);background:var(--overlay-light, rgba(127, 127, 127, .12));color:var(--text);font-size:var(--ui-font-caption, 11px);font-family:var(--font-ui);cursor:pointer}.t2c-ctxring-compact:hover{background:var(--overlay-medium, rgba(127, 127, 127, .2))}.t2c-cu-limits{display:flex;flex-direction:column;gap:8px;padding-top:9px;border-top:var(--border-width, 1px) solid var(--border)}.t2c-cu-limits-title{display:flex;align-items:center;gap:6px;color:var(--text-faint)}.t2c-cu-limit{display:flex;flex-direction:column;gap:5px}.t2c-cu-limit-line{display:flex;align-items:baseline;gap:8px;white-space:nowrap;font-variant-numeric:tabular-nums}.t2c-cu-limit-line>:nth-child(2){margin-left:auto}.t2c-cu-limit-name{color:var(--text)}.t2c-cu-limit-reset{color:var(--text-faint);overflow:hidden;text-overflow:ellipsis}.t2c-cu-limit .t2c-cu-bar{height:5px}.t2c-cu-limit .t2c-cu-bar>span{background:var(--model-tag-blue)}.t2c-cu-limit .t2c-cu-bar[data-warn]>span{background:var(--danger, #e0564b)}.t2c-iconbtn.recording{color:var(--danger, #e5484d);animation:t2c-mic-pulse 1s ease-in-out infinite}@keyframes t2c-mic-pulse{0%,to{opacity:1}50%{opacity:.45}}.t2c-voicebar{display:flex;align-items:center;gap:8px;flex:1;min-width:0;animation:t2c-voicebar-in .22s var(--ease-out, ease)}@keyframes t2c-voicebar-in{0%{opacity:0;transform:translate(8px)}to{opacity:1;transform:none}}.t2c-voicewave{flex:1;min-width:0;height:30px;display:block}.t2c-voicelabel{flex-shrink:0;font-size:var(--ui-font-meta, 12px);color:var(--text-muted);font-family:var(--font-ui)}.t2c-voicetime{flex-shrink:0;min-width:34px;text-align:right;font-size:var(--ui-font-caption, 11px);color:var(--text-muted);font-variant-numeric:tabular-nums}.t2c-voicestop{flex-shrink:0;width:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;border:none;border-radius:var(--radius-pill, 999px);background:var(--overlay-light, rgba(127, 127, 127, .1));color:var(--text);cursor:pointer;transition:background var(--duration-fast, .15s)}.t2c-voicestop:hover{background:var(--overlay-medium, rgba(127, 127, 127, .2))}.t2c-steer{display:flex;flex-direction:column;gap:2px;padding:6px 10px;border-radius:var(--radius-md, 12px);background:var(--overlay-light, rgba(127, 127, 127, .07));border:1px solid transparent;animation:t2c-steer-in .18s var(--ease-out, ease)}@keyframes t2c-steer-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.t2c-steer{animation:none}}.t2c-steer-item{display:flex;align-items:center;gap:7px;min-width:0;padding:2px 0}.t2c-steer-ic{flex-shrink:0;color:var(--text-faint, var(--text-muted))}.t2c-steer-text{flex:1;min-width:0;font-size:var(--ui-font-meta, 12px);color:var(--text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.t2c-steer-x{flex-shrink:0;background:none;border:none;cursor:pointer;color:var(--text-faint, var(--text-muted));padding:2px;line-height:0;border-radius:var(--radius-pill, 999px)}.t2c-steer-x:hover{color:var(--text);background:var(--overlay-light, rgba(127, 127, 127, .1))}.t2c-steer-foot{display:flex;align-items:center;gap:8px;margin-top:2px}.t2c-steer-hint{flex:1;min-width:0;font-size:var(--ui-font-caption, 11px);color:var(--text-faint, var(--text-muted));white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.t2c-steer-now{flex-shrink:0;display:inline-flex;align-items:center;gap:4px;padding:3px 10px;border:none;border-radius:var(--radius-pill, 999px);cursor:pointer;background:var(--overlay-light, rgba(127, 127, 127, .12));color:var(--text);font-size:var(--ui-font-caption, 11px);font-family:var(--font-ui);transition:background var(--duration-fast, .15s)}.t2c-steer-now:hover{background:var(--overlay-medium, rgba(127, 127, 127, .2))}@container (max-width: 360px){.t2c-refrow{margin-bottom:6px}.t2c-reflabel{display:none}.t2c-refrow .attach-chip{min-width:0;max-width:min(100%,240px)}.t2c-stop{width:32px;padding-inline:0;justify-content:center}.t2c-stop-label{display:none}}.t2c-pill.mode-pill-btn[data-danger]{color:var(--danger);background:var(--danger-light)}.t2c-pill.mode-pill-btn[data-danger]:hover,.t2c-pill.mode-pill-btn[data-danger].is-open{background:color-mix(in srgb,var(--danger) 16%,transparent)}.t2c-apv{position:relative;display:flex;flex-direction:column;padding:4px 12px 10px;background:var(--t2c-card-surface, var(--bg-card, var(--bg)));border:var(--border-width, 1px) solid var(--border);border-radius:var(--radius-md, 12px);box-shadow:var(--card-shadow, 0 6px 22px rgba(0, 0, 0, .08));animation:t2c-steer-in .18s var(--ease-out, ease)}@media(prefers-reduced-motion:reduce){.t2c-apv{animation:none}}.t2c-apv-head{display:flex;align-items:center;gap:6px;width:100%;padding:6px 0;border:none;background:none;cursor:pointer;text-align:left;color:var(--text-muted);font-family:var(--font-ui);font-size:var(--ui-font-meta, 12px)}.t2c-apv-ic{flex-shrink:0;color:var(--accent-ink)}.t2c-apv-title{flex:1;min-width:0;font-weight:600;color:var(--text)}.t2c-apv-chev{flex-shrink:0;transition:transform var(--duration-fast, .15s)}.t2c-apv-chev.is-collapsed{transform:rotate(-90deg)}.t2c-apv-head:has(.is-collapsed){padding-bottom:0}.t2c-apv-body{max-height:min(40vh,400px);overflow-y:auto}.t2c-apv .t2c-apv-body>.approval-card,.t2c-apv .t2c-apv-body>.inquiry-card,.t2c-apv .t2c-apv-body>.plan-decision{border-color:transparent;box-shadow:none;background:transparent;padding:0;opacity:1}.t2c-apv .approval-card .approval-title{margin-bottom:6px}.t2c-apv .approval-diff{max-height:min(24vh,220px)}.t2c-apv .approval-actions{position:sticky;bottom:0;z-index:1;padding:8px 0 2px;margin-top:-2px;background:var(--t2c-card-surface, var(--bg-card, var(--bg)));transition:opacity var(--duration-fast, .15s)}.t2c-apv-body:is(.is-arming,.is-sent) :is(.approval-actions,.inquiry-opts,.inquiry-input){pointer-events:none;opacity:.55}.t2c-apv .inquiry-opts,.t2c-apv .inquiry-input{transition:opacity var(--duration-fast, .15s)}.t2c-apv .plan-decision-title{display:flex;align-items:center;gap:7px;margin-bottom:8px;font-size:var(--ui-font-body, 13px);font-weight:600;color:var(--text)}.t2c-apv .plan-decision-title svg{flex-shrink:0;color:var(--accent-ink)}.t2c-apv textarea.plan-edit{display:block;width:100%;box-sizing:border-box;min-height:140px;max-height:30vh;margin-bottom:8px;padding:8px 10px;font-family:var(--font-mono);font-size:var(--ui-font-meta, 12px);color:var(--text);background:var(--bg-card);border:var(--border-width, 1px) solid var(--border);border-radius:var(--radius-sm, 8px);resize:vertical;outline:none}.t2c-apv textarea.plan-edit:focus{border-color:var(--accent-ink)}.t2c-apv .plan-decision .inquiry-input{margin-top:8px}.t2c-apv-from{font-size:var(--ui-font-caption, 11px);color:var(--text-faint, var(--text-muted));margin-bottom:2px}.t2c-apv-rest{display:flex;flex-direction:column;gap:1px;max-height:108px;overflow-y:auto;margin:0 -6px 8px;padding-bottom:6px;border-bottom:var(--border-width, 1px) solid var(--overlay-medium, rgba(127, 127, 127, .16))}.t2c-apv-row{display:flex;align-items:center;gap:8px;min-width:0;width:100%;padding:4px 6px;border:none;border-radius:var(--radius-sm, 8px);background:none;cursor:pointer;text-align:left;font-family:var(--font-ui);font-size:var(--ui-font-meta, 12px);color:var(--text-muted)}.t2c-apv-row:hover{background:var(--overlay-light, rgba(127, 127, 127, .1));color:var(--text)}.t2c-apv-row-from{flex-shrink:0;color:var(--text-faint, var(--text-muted))}.t2c-apv-row-name{flex-shrink:0;font-weight:600;color:var(--text)}.t2c-apv-row-preview{flex:1;min-width:0;font-family:var(--font-mono);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.t2c-apv-row-ic{flex-shrink:0;color:var(--accent-ink)}.t2c-apv-row-text{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.t2c-field{display:flex;align-items:flex-end;gap:8px}.t2c-field>.t2c-ta{flex:1 1 auto;min-width:0;align-self:center}.t2c-card--phone .t2c-row{margin-top:6px}.t2c-card--phone .t2c-send{width:42px;height:42px}.t2c-card--phone .t2c-send svg{width:21px;height:21px}.t2c-card--phone .t2c-stop{width:42px;height:42px;padding-inline:0;justify-content:center}.t2c-card--phone .t2c-stop svg{width:14px;height:14px}.t2c-card--phone .t2c-stop-label{display:none}.t2c-card--phone .t2c-iconbtn{position:relative;width:38px;height:38px}.t2c-card--phone .t2c-iconbtn svg{width:19px;height:19px}.t2c-card--phone .add-pill-wrap{flex:0 0 auto}.t2c-card--phone .t2c-pill.add-pill-btn:not(.is-open){position:relative;display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;overflow:visible}.t2c-card--phone .add-pill-btn:not(.is-open) .add-pill-plus{width:20px;height:20px}.t2c-card--phone .add-pill-btn:not(.is-open) :is(.add-pill-label,.add-pill-chevron){display:none}.t2c-card--phone :is(.t2c-iconbtn,.add-pill-btn:not(.is-open)):after{content:"";position:absolute;inset:-2px}.t2c-card--phone .t2c-ctxring-btn:after{content:"";position:absolute;inset:-9px -3px}.t2c-card--phone .model-pill-wrap{flex:0 1 auto;min-width:0}.t2c-card--phone .t2c-row .model-pill-wrap .composer-chip.model-pill-btn,.t2c-card--phone .t2c-pill.mode-pill-btn{box-sizing:border-box;height:42px;margin-block:-2px;max-width:100%;padding-inline:11px;border-block:3.5px solid transparent;background-clip:padding-box}.t2c-card--phone .t2c-row .composer-chip.model-pill-btn .pill-marquee{display:inline-block;max-width:none;text-overflow:ellipsis}.t2c-card--phone .t2c-row .composer-chip.model-pill-btn .pill-ultra-tag{display:inline}.t2c-card--phone .model-pill-wrap.is-plan .composer-chip.model-pill-btn:not(.is-max){color:var(--accent-ink);background-color:color-mix(in srgb,var(--accent-ink) 16%,transparent)}.t2c-card--phone .model-pill-wrap.is-danger .composer-chip.model-pill-btn{color:var(--danger);background-color:var(--danger-light)}.compact-chat-picker{display:none}@container (max-width: 520px){.t2-chat-col .newchat-pickers{flex-direction:row;align-items:stretch;gap:8px;padding-inline:12px}.newchat-pickers>.engine-picker{flex:1 1 0;min-width:0;animation:none}.newchat-pickers>.engine-picker>.engine-picker-bar,.newchat-pickers>.engine-picker>.engine-picker-hint{display:none}.newchat-pickers .compact-chat-picker{position:relative;display:flex;align-items:center;gap:7px;width:100%;min-width:0;min-height:38px;padding:8px 10px;box-sizing:border-box;border-radius:var(--radius-md, 12px);background:var(--bg-card);color:var(--text);font-size:var(--ui-font-body, 13px);line-height:1.4;cursor:pointer}.compact-chat-picker:hover{background:var(--overlay-medium)}.compact-chat-picker:focus-within{outline:var(--focus-ring) solid var(--accent-ink);outline-offset:2px}.compact-chat-picker-kind{flex:none;color:var(--text-muted);font-size:var(--ui-font-meta, 12px)}.compact-chat-picker-icon{display:inline-flex;flex:none}.compact-chat-picker-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500}.compact-chat-picker>svg{flex:none;color:var(--text-muted)}.compact-chat-picker select{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer}}@container (max-width: 360px){.t2-chat-col .newchat-pickers{flex-direction:column;gap:6px}}.agent-select-strip .agent-pill-index{display:inline-flex;align-items:center;justify-content:center;flex:none;min-width:14px;height:14px;margin-right:4px;padding:0 3px;border-radius:var(--radius-pill, 999px);background:var(--overlay-medium);color:var(--text-muted);font-size:var(--ui-font-caption, 11px);font-weight:600;line-height:1}.agent-select-strip .agent-select-sep{flex:none;width:1px;height:20px;margin:0 4px;background:var(--border)}.t2d-sections{display:flex;flex-direction:column;margin-top:4.5px}.t2d-toggle{gap:6px}.t2d-name{flex:0 1 auto}.t2d-status{flex:0 1 auto;min-width:0;margin-left:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--ui-font-caption, 11px);font-weight:400;letter-spacing:0;text-transform:none;color:var(--text-faint, var(--text-muted))}.t2d-status[data-tone=warn]{color:var(--warning, var(--text-muted))}.t2d-emoji{display:inline-flex;width:1em;justify-content:center;font-size:var(--ui-font-body, 13px);line-height:1}.t2d-empty{padding:4.5px 6px 6px 30px;color:var(--text-faint, var(--text-muted));font-size:var(--ui-font-meta, 12px)}@media(pointer:coarse){.t2d-section .t2s-srow-menu{opacity:.7}}.runloc-pill:disabled{cursor:default;opacity:1}.runloc-status{flex:none;font-size:var(--ui-font-caption, 11px);color:var(--text-faint, var(--text-muted));white-space:nowrap}.runloc-status[data-tone=warn]{color:var(--warning, var(--text-muted))}.runloc-pill.is-open .runloc-status{display:none}.runloc-row-status{flex:none;font-size:var(--ui-font-caption, 11px);color:var(--text-faint, var(--text-muted));white-space:nowrap}.runloc-row-status[data-tone=warn]{color:var(--warning, var(--text-muted))}.runloc-menu .runloc-row:disabled{opacity:.55;cursor:default}.runloc-menu .runloc-row:disabled:hover{background:none}.runloc-notice{line-height:1.45;white-space:normal}.runloc-menu .runloc-fold .project-menu-name{color:var(--text-muted)}.runloc-fold-chev{flex:none;color:var(--text-faint, var(--text-muted));transition:transform .16s ease}.runloc-fold[aria-expanded=true] .runloc-fold-chev{transform:rotate(180deg)}.composer-chip.project-pill.runloc-pill:not(.is-open){max-width:min(360px,calc(100vw - 32px))}
|