@kafca/agentdock 0.1.46 → 0.1.48
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/README.md +11 -0
- package/dist/renderer/assets/{Badge-BIesaDYG.js → Badge-C92lMj9Q.js} +1 -1
- package/dist/renderer/assets/{Chat-CpataoDh.js → Chat-DqoKCPwz.js} +1 -1
- package/dist/renderer/assets/{ChatMarkdown-_Mdmltgv.js → ChatMarkdown-C4psQvmt.js} +1 -1
- package/dist/renderer/assets/{Config-Pe5-zKZk.js → Config-1uk8FQL7.js} +2 -2
- package/dist/renderer/assets/{CronList-BnaOSPT8.js → CronList-DnKCiYWC.js} +1 -1
- package/dist/renderer/assets/{Dashboard-D05l8GKE.js → Dashboard-rOAQcJA0.js} +2 -2
- package/dist/renderer/assets/{EmptyState-BDBavDll.js → EmptyState-bF6Sc61O.js} +1 -1
- package/dist/renderer/assets/{KnowledgeDetail-DvR798l_.js → KnowledgeDetail-C5-Dp95R.js} +2 -2
- package/dist/renderer/assets/{KnowledgeHome-r2ZuvU8-.js → KnowledgeHome-DGa1EWXD.js} +2 -2
- package/dist/renderer/assets/{Logs-BaljtmAV.js → Logs-CKKVW2k8.js} +1 -1
- package/dist/renderer/assets/{Modal-CXhD_OWR.js → Modal-DIc9HxD5.js} +3 -3
- package/dist/renderer/assets/{MonitorList-D7tyipbx.js → MonitorList-D2YOJRIX.js} +1 -1
- package/dist/renderer/assets/{Page-KUuFYgjg.js → Page-vZ-_l6Kn.js} +1 -1
- package/dist/renderer/assets/ProjectDetail-CqTa6kAh.js +11 -0
- package/dist/renderer/assets/{ProjectList-CbdHd5Ev.js → ProjectList-LgDQVVyZ.js} +1 -1
- package/dist/renderer/assets/{Select-Djc8BXMC.js → Select-BN2HMOmY.js} +1 -1
- package/dist/renderer/assets/SessionChat-Beco1N1T.js +1 -0
- package/dist/renderer/assets/{SessionList-DHgl1s1D.js → SessionList-3NkskCJJ.js} +1 -1
- package/dist/renderer/assets/ThreadChat-Ji8pOm5p.js +28 -0
- package/dist/renderer/assets/{Workspace-DTocqY-F.js → Workspace-yarrGItB.js} +1 -1
- package/dist/renderer/assets/{arrow-left-CXyya3hP.js → arrow-left-DNovvfPp.js} +1 -1
- package/dist/renderer/assets/{book-open-9n4Kxc7E.js → book-open-CarZFsXv.js} +1 -1
- package/dist/renderer/assets/{bot-C9HBk5XH.js → bot-g16rGMp6.js} +1 -1
- package/dist/renderer/assets/{check-CutSg9a5.js → check-DjFX73Zi.js} +1 -1
- package/dist/renderer/assets/{chevron-down-DrydR4i3.js → chevron-down-B02YlQS_.js} +1 -1
- package/dist/renderer/assets/{circle-BEjtahw6.js → circle-DPfWdG1F.js} +1 -1
- package/dist/renderer/assets/{desktop-DATgk_ka.js → desktop-DMkue1T6.js} +1 -1
- package/dist/renderer/assets/{funnel-BhqZpS4f.js → funnel-Dy1VL-D9.js} +1 -1
- package/dist/renderer/assets/{heart-Dp8Vs-7_.js → heart-YjvGwq5-.js} +1 -1
- package/dist/renderer/assets/{index-BKpv0P0s.js → index-CZN1STMc.js} +2 -2
- package/dist/renderer/assets/index-CjCuR6DI.css +11 -0
- package/dist/renderer/assets/{index-cI3pWBnN.js → index-mvjDN9uV.js} +9 -9
- package/dist/renderer/assets/{pencil-ywcJzeOo.js → pencil-qpMjLIFd.js} +1 -1
- package/dist/renderer/assets/{play-AtN492Cx.js → play-CPCcNQcH.js} +1 -1
- package/dist/renderer/assets/{plus-BEj14BBV.js → plus-B76JWGKd.js} +1 -1
- package/dist/renderer/assets/projects-C1nFINjh.js +1 -0
- package/dist/renderer/assets/{save-D6ov4CNv.js → save-DtvrD3W1.js} +1 -1
- package/dist/renderer/assets/{search-C3bvw7AR.js → search-Ddth-YHH.js} +1 -1
- package/dist/renderer/assets/{server-C1Uyedyx.js → server-D0zmghb3.js} +1 -1
- package/dist/renderer/assets/{session-utils-DpRwJ6Nh.js → session-utils-C9oe-21F.js} +1 -1
- package/dist/renderer/assets/{sessions-BWmAppwK.js → sessions-BXOnLLah.js} +1 -1
- package/dist/renderer/assets/{shield-check-CVx1mEs2.js → shield-check-Cv5d_blH.js} +1 -1
- package/dist/renderer/assets/{trash-2-o-heXOgs.js → trash-2-C2mimX2b.js} +1 -1
- package/dist/renderer/assets/{user-dPOzUqIc.js → user-BrLJ4elW.js} +1 -1
- package/dist/renderer/assets/{wifi-off-Fz5c3_x_.js → wifi-off-DvRJYLbG.js} +1 -1
- package/dist/renderer/index.html +2 -2
- package/dist-electron/packages/core-sdk/src/index.js +4 -0
- package/dist-electron/services/local-ai-core/src/acp/local-core-acp-session-coordinator.js +53 -7
- package/dist-electron/services/local-ai-core/src/acp/store/local-core-acp-store.js +3 -0
- package/dist-electron/services/local-ai-core/src/acp/store/platform-store.js +13 -5
- package/dist-electron/services/local-ai-core/src/acp/store/schema.js +1 -0
- package/dist-electron/services/local-ai-core/src/acp/store/thread-store.js +3 -0
- package/dist-electron/services/local-ai-core/src/agents/pi/launch.js +1 -1
- package/dist-electron/services/local-ai-core/src/agents/shared/launch-utils.js +22 -0
- package/dist-electron/services/local-ai-core/src/channel/lark/local-core-lark-gateway.js +132 -348
- package/dist-electron/services/local-ai-core/src/channel/shared/base-channel-gateway.js +306 -0
- package/dist-electron/services/local-ai-core/src/channel/shared/session-command-runtime.js +14 -3
- package/dist-electron/services/local-ai-core/src/channel/weixin/local-core-weixin-gateway.js +131 -382
- package/dist-electron/services/local-ai-core/src/router/workspace-router.js +8 -1
- package/dist-electron/services/local-ai-core/src/runtime/agent-runtime-detector.js +2 -1
- package/dist-electron/services/local-ai-core/src/runtime/channel-service.js +150 -0
- package/dist-electron/services/local-ai-core/src/runtime/env-utils.js +12 -0
- package/dist-electron/services/local-ai-core/src/runtime/external-service.js +234 -0
- package/dist-electron/services/local-ai-core/src/runtime/handlers/automation-handler.js +34 -0
- package/dist-electron/services/local-ai-core/src/runtime/handlers/capabilities-handler.js +12 -0
- package/dist-electron/services/local-ai-core/src/runtime/handlers/channel-handler.js +65 -0
- package/dist-electron/services/local-ai-core/src/runtime/handlers/external-handler.js +17 -0
- package/dist-electron/services/local-ai-core/src/runtime/handlers/knowledge-handler.js +65 -0
- package/dist-electron/services/local-ai-core/src/runtime/handlers/openai-handler.js +496 -0
- package/dist-electron/services/local-ai-core/src/runtime/handlers/provider-handler.js +24 -0
- package/dist-electron/services/local-ai-core/src/runtime/handlers/runtime-handler.js +68 -0
- package/dist-electron/services/local-ai-core/src/runtime/handlers/runtimes-handler.js +37 -0
- package/dist-electron/services/local-ai-core/src/runtime/handlers/scheduler-handler.js +34 -0
- package/dist-electron/services/local-ai-core/src/runtime/handlers/security-handler.js +49 -0
- package/dist-electron/services/local-ai-core/src/runtime/handlers/task-handler.js +27 -0
- package/dist-electron/services/local-ai-core/src/runtime/handlers/thread-handler.js +46 -0
- package/dist-electron/services/local-ai-core/src/runtime/handlers/workspace-handler.js +29 -0
- package/dist-electron/services/local-ai-core/src/runtime/local-core-controller.js +40 -592
- package/dist-electron/services/local-ai-core/src/runtime/server-helpers.js +96 -0
- package/dist-electron/services/local-ai-core/src/runtime/server-routes.js +3 -0
- package/dist-electron/services/local-ai-core/src/runtime/server.js +107 -1084
- package/dist-electron/services/local-ai-core/src/runtime/standalone.js +13 -1
- package/dist-electron/services/local-ai-core/src/thread/thread-command-service.js +23 -2
- package/dist-electron/services/local-ai-core/src/thread/thread-slash-command-dispatcher.js +1 -0
- package/dist-electron/src/pages/Projects/project-provider-config.js +75 -0
- package/dist-electron/src/pages/Threads/thread-chat-model.js +2 -0
- package/dist-electron/tests/contracts/architecture-docs.test.js +1 -0
- package/dist-electron/tests/electron/agent-runtime-detector.test.js +18 -0
- package/dist-electron/tests/electron/knowledge-skill-script.test.js +15 -5
- package/dist-electron/tests/electron/lac-cli.test.js +591 -688
- package/dist-electron/tests/electron/plugin-kernel.test.js +47 -31
- package/dist-electron/tests/electron/project-provider-config.test.js +71 -0
- package/dist-electron/tests/electron/workspace-task-store.test.js +40 -11
- package/dist-electron/tests/integration/local-core-cors.test.js +22 -0
- package/dist-electron/tests/integration/local-core-refactor.test.js +177 -0
- package/dist-electron/tests/integration/local-core-routes.test.js +45 -0
- package/package.json +2 -2
- package/dist/renderer/assets/ProjectDetail-Ddq94-yu.js +0 -11
- package/dist/renderer/assets/SessionChat-DOy0iKQR.js +0 -1
- package/dist/renderer/assets/ThreadChat-I7dYibDc.js +0 -23
- package/dist/renderer/assets/index-CO4fGqmv.css +0 -11
- package/dist/renderer/assets/projects-Clar8lgb.js +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kafca/agentdock",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.48",
|
|
4
4
|
"license": "PolyForm-Noncommercial-1.0.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist-electron/electron/main.js",
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
"@types/react-dom": "^19.1.2",
|
|
75
75
|
"@vitejs/plugin-react": "^4.4.1",
|
|
76
76
|
"autoprefixer": "^10.4.21",
|
|
77
|
-
"electron": "^35.
|
|
77
|
+
"electron": "^35.7.5",
|
|
78
78
|
"electron-builder": "^26.8.1",
|
|
79
79
|
"postcss": "^8.5.3",
|
|
80
80
|
"tailwindcss": "^3.4.17",
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import{c as Z,A as i,u as xe,D as he,r as n,j as e,L as pe,B as l,Z as ve,g as F,C as j,I as p,E as ue,G as ge}from"./index-cI3pWBnN.js";import{B as N}from"./Badge-BIesaDYG.js";import{M as U}from"./Modal-CXhD_OWR.js";import{S as O}from"./Select-Djc8BXMC.js";import{E as q}from"./EmptyState-BDBavDll.js";import{P as je,S as I}from"./Page-KUuFYgjg.js";import{g as fe}from"./projects-Clar8lgb.js";import{c as G,f as be}from"./desktop-DATgk_ka.js";import{D as A,e as _e}from"./desktop-JQkhNOF4.js";import{A as ye}from"./arrow-left-CXyya3hP.js";import{S as Ne}from"./shield-check-CVx1mEs2.js";import{H as K}from"./heart-Dp8Vs-7_.js";import{P as we,S as Se}from"./save-D6ov4CNv.js";import{P as Ce}from"./plus-BEj14BBV.js";import{C as ke}from"./check-CutSg9a5.js";import{T as Pe}from"./trash-2-o-heXOgs.js";import{P as ze}from"./play-AtN492Cx.js";import"./index-BKpv0P0s.js";import"./chevron-down-DrydR4i3.js";/**
|
|
2
|
-
* @license lucide-react v0.487.0 - ISC
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the ISC license.
|
|
5
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/const Ie=[["path",{d:"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z",key:"zw3jo"}],["path",{d:"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12",key:"1wduqc"}],["path",{d:"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17",key:"kqbvx6"}]],Ae=Z("layers",Ie);/**
|
|
7
|
-
* @license lucide-react v0.487.0 - ISC
|
|
8
|
-
*
|
|
9
|
-
* This source code is licensed under the ISC license.
|
|
10
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
11
|
-
*/const $e=[["rect",{x:"14",y:"4",width:"4",height:"16",rx:"1",key:"zuxfzm"}],["rect",{x:"6",y:"4",width:"4",height:"16",rx:"1",key:"1okwgv"}]],Le=Z("pause",$e),Me=s=>i.get(`/projects/${s}/providers`),Ee=(s,t)=>i.post(`/projects/${s}/providers`,t),De=(s,t)=>i.delete(`/projects/${s}/providers/${t}`),He=(s,t)=>i.post(`/projects/${s}/providers/${t}/activate`),Be=s=>i.get(`/projects/${s}/models`),Re=(s,t)=>i.post(`/projects/${s}/model`,{model:t}),Te=s=>i.get(`/projects/${s}/heartbeat`),Fe=s=>i.post(`/projects/${s}/heartbeat/pause`),Ue=s=>i.post(`/projects/${s}/heartbeat/resume`),Oe=s=>i.post(`/projects/${s}/heartbeat/run`),qe=(s,t)=>i.post(`/projects/${s}/heartbeat/interval`,{minutes:t}),o={enabled:!1,provider_id:A,runtime_image_id:_e("pi").id,server_url:"http://127.0.0.1:8080",image:"agentdock/pi-acp:local",acp_port:"8080",state_scope:"project",timeout_seconds:"7200",sandbox_lifecycle:"per_thread",idle_seconds:"900",warm_pool_size:"0",cpu:"1000m",memory:"2Gi",workspace_mount_path:"/workspace",state_mount_path:"/agent-state"};function hs(){var B,R;const{t:s}=xe(),{name:t}=he(),[_,V]=n.useState("overview"),[d,W]=n.useState(null),[$,X]=n.useState([]),[Ze,J]=n.useState(""),[m,Q]=n.useState(null),[L,Y]=n.useState([]),[ee,se]=n.useState(""),[ae,M]=n.useState(!0),[x,v]=n.useState(o),[te,E]=n.useState(!1),[D,k]=n.useState(""),[re,w]=n.useState(!1),[h,y]=n.useState({name:"",api_key:"",base_url:"",model:""}),[oe,S]=n.useState(!1),[H,ne]=n.useState("30"),c=n.useCallback(async()=>{var a,r,f,u;if(t)try{M(!0);const[b,g,C,P,T]=await Promise.allSettled([fe(t),Me(t),Te(t),Be(t),G()]);if(b.status==="fulfilled"&&W(b.value),g.status==="fulfilled"&&(X(g.value.providers||[]),J(g.value.active_provider||"")),C.status==="fulfilled"&&Q(C.value),P.status==="fulfilled"&&(Y(P.value.models||[]),se(P.value.current||"")),T.status==="fulfilled"){const z=(r=(a=T.value.parsed)==null?void 0:a.projects)==null?void 0:r.find(me=>me.name===t);v(Ge((u=(f=z==null?void 0:z.agent)==null?void 0:f.options)==null?void 0:u.sandbox))}}finally{M(!1)}},[t]);n.useEffect(()=>{c();const a=()=>c();return window.addEventListener("cc:refresh",a),()=>window.removeEventListener("cc:refresh",a)},[c]);const le=async()=>{!t||!h.name||(await Ee(t,h),w(!1),y({name:"",api_key:"",base_url:"",model:""}),c())},ce=async()=>{t&&(await qe(t,parseInt(H)),S(!1),c())},de=[{key:"overview",icon:Ae},{key:"providers",icon:ve},{key:"sandbox",icon:Ne},{key:"heartbeat",icon:K}],ie=async()=>{var a;if(t){E(!0),k("");try{const f=(await G()).parsed||{},u=Array.isArray(f.projects)?[...f.projects]:[],b=u.findIndex(C=>C.name===t);if(b<0)throw new Error(`Project not found in config: ${t}`);const g=u[b];u[b]={...g,agent:{...g.agent,options:{...((a=g.agent)==null?void 0:a.options)||{},sandbox:Ke(x)}}},await be({...f,projects:u}),k("Sandbox settings saved."),await c()}catch(r){k((r==null?void 0:r.message)||String(r))}finally{E(!1)}}};return ae&&!d?e.jsx("div",{className:"flex items-center justify-center h-64 text-muted-foreground animate-pulse",children:"Loading..."}):e.jsxs("div",{className:"space-y-6 animate-fade-in",children:[e.jsx(je,{title:t,description:"Project overview, providers, and heartbeat status. Low-frequency settings are no longer editable in the daily UI.",actions:e.jsx(pe,{to:"/projects",children:e.jsxs(l,{variant:"secondary",size:"sm",children:[e.jsx(ye,{size:14})," Back"]})})}),d?e.jsxs("div",{className:"app-toolbar flex flex-wrap items-center gap-2",children:[e.jsx(N,{variant:"info",children:d.agent_type}),e.jsx(N,{variant:d.heartbeat_enabled?"success":"secondary",children:d.heartbeat_enabled?"heartbeat on":"heartbeat off"}),e.jsxs("span",{className:"text-xs text-muted-foreground",children:[d.sessions_count," sessions"]})]}):null,D?e.jsx("div",{role:"status",className:"rounded-lg border border-primary/20 bg-primary/10 px-4 py-3 text-sm text-primary",children:D}):null,e.jsx("div",{className:"flex gap-2 overflow-x-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",children:de.map(({key:a,icon:r})=>e.jsxs("button",{onClick:()=>V(a),className:F("app-segment flex items-center gap-2",_===a?"app-segment-active":"app-segment-idle"),children:[e.jsx(r,{size:16}),s(`projects.tabs.${a}`)]},a))}),_==="overview"&&d&&e.jsxs("div",{className:"space-y-4",children:[e.jsx(I,{className:"app-panel",title:s("projects.platforms"),children:e.jsx("div",{className:"flex flex-wrap gap-2",children:(B=d.platforms)==null?void 0:B.map(a=>e.jsxs(N,{variant:a.connected?"success":"danger",children:[e.jsx(we,{size:12,className:"mr-1"})," ",a.type," ",a.connected?"✓":"✗"]},a.type))})}),e.jsxs(I,{className:"app-panel",title:s("sessions.title"),children:[e.jsxs("p",{className:"text-sm text-muted-foreground",children:[d.sessions_count," ",s("nav.sessions").toLowerCase()]}),((R=d.active_session_keys)==null?void 0:R.length)>0&&e.jsx("div",{className:"mt-2 flex flex-wrap gap-1",children:d.active_session_keys.map(a=>e.jsx(N,{variant:"default",children:a},a))})]})]}),_==="providers"&&e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex justify-between items-center",children:[e.jsx("h3",{className:"text-sm font-semibold text-foreground",children:s("providers.title")}),e.jsxs(l,{size:"sm",onClick:()=>w(!0),children:[e.jsx(Ce,{size:14})," ",s("providers.add")]})]}),$.length===0?e.jsx(q,{message:s("common.noData")}):e.jsx("div",{className:"space-y-2",children:$.map(a=>e.jsx(j,{className:"app-panel",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"font-medium text-foreground",children:a.name}),a.active&&e.jsx(N,{variant:"success",children:s("providers.active")})]}),e.jsxs("p",{className:"text-xs text-muted-foreground mt-1",children:[a.model," ",a.base_url?`· ${a.base_url}`:""]})]}),e.jsxs("div",{className:"flex gap-2",children:[!a.active&&e.jsxs(l,{size:"sm",variant:"secondary",onClick:()=>{He(t,a.name).then(c)},children:[e.jsx(ke,{size:14})," ",s("providers.activate")]}),!a.active&&e.jsx(l,{size:"sm",variant:"danger",onClick:()=>{De(t,a.name).then(c)},children:e.jsx(Pe,{size:14})})]})]})},a.name))}),L.length>0&&e.jsxs(j,{children:[e.jsx("h3",{className:"text-sm font-semibold text-foreground mb-3",children:s("providers.models")}),e.jsx("div",{className:"flex flex-wrap gap-2",children:L.map(a=>e.jsx("button",{onClick:()=>{Re(t,a).then(c)},className:F("px-3 py-1.5 rounded-lg text-xs font-medium transition-all",a===ee?"bg-primary/15 text-primary border border-primary/30":"bg-secondary text-secondary-foreground hover:bg-secondary/80"),children:a},a))})]}),e.jsx(U,{open:re,onClose:()=>w(!1),title:s("providers.add"),children:e.jsxs("div",{className:"space-y-3",children:[e.jsx(p,{label:s("providers.name"),value:h.name,onChange:a=>y({...h,name:a.target.value})}),e.jsx(p,{label:"API Key",type:"password",value:h.api_key,onChange:a=>y({...h,api_key:a.target.value})}),e.jsx(p,{label:s("providers.baseUrl"),value:h.base_url,onChange:a=>y({...h,base_url:a.target.value}),placeholder:"https://api.example.com"}),e.jsx(p,{label:s("providers.model"),value:h.model,onChange:a=>y({...h,model:a.target.value})}),e.jsxs("div",{className:"flex justify-end gap-2 pt-2",children:[e.jsx(l,{variant:"secondary",onClick:()=>w(!1),children:s("common.cancel")}),e.jsx(l,{onClick:le,children:s("providers.add")})]})]})})]}),_==="sandbox"&&e.jsx(I,{title:"Sandbox",description:"Run this project agent inside an OpenSandbox container.",actions:e.jsxs(l,{size:"sm",onClick:()=>void ie(),loading:te,children:[e.jsx(Se,{size:14})," Save"]}),children:e.jsxs("div",{className:"space-y-4",children:[e.jsxs("label",{className:"flex items-center gap-3 text-sm font-medium text-foreground",children:[e.jsx("input",{type:"checkbox",className:"h-4 w-4 rounded border-border",checked:x.enabled,onChange:a=>v(r=>({...r,enabled:a.target.checked}))}),"Enable sandbox mode"]}),x.enabled?e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"grid grid-cols-1 gap-3 md:grid-cols-2",children:[e.jsxs(O,{label:"State scope",value:x.state_scope,onChange:a=>v(r=>({...r,state_scope:a.target.value})),children:[e.jsx("option",{value:"user",children:"User"}),e.jsx("option",{value:"project",children:"Project"}),e.jsx("option",{value:"thread",children:"Thread"}),e.jsx("option",{value:"run",children:"Run"})]}),e.jsx(p,{label:"Timeout seconds",type:"number",value:x.timeout_seconds,onChange:a=>v(r=>({...r,timeout_seconds:a.target.value}))}),e.jsxs(O,{label:"Sandbox lifecycle",value:x.sandbox_lifecycle,onChange:a=>v(r=>({...r,sandbox_lifecycle:a.target.value})),children:[e.jsx("option",{value:"per_thread",children:"Keep warm per thread"}),e.jsx("option",{value:"per_run",children:"Close after each run"})]}),e.jsx(p,{label:"Idle seconds",type:"number",value:x.idle_seconds,onChange:a=>v(r=>({...r,idle_seconds:a.target.value}))}),e.jsx(p,{label:"Warm pool",type:"number",value:x.warm_pool_size,onChange:a=>v(r=>({...r,warm_pool_size:a.target.value}))}),e.jsx(p,{label:"CPU",value:x.cpu,onChange:a=>v(r=>({...r,cpu:a.target.value}))}),e.jsx(p,{label:"Memory",value:x.memory,onChange:a=>v(r=>({...r,memory:a.target.value}))})]}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"OpenSandbox URL, API key env, image, ACP port, and sandbox mount paths are resolved from the global sandbox provider and runtime image registry."})]}):e.jsx("p",{className:"text-sm text-muted-foreground",children:"Local bundled runtime execution is active for this project."})]})}),_==="heartbeat"&&e.jsxs("div",{className:"space-y-4",children:[m?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[e.jsxs(j,{children:[e.jsx("p",{className:"text-xs text-muted-foreground",children:s("heartbeat.status")}),e.jsx("p",{className:"text-lg font-bold text-foreground mt-1",children:m.paused?s("heartbeat.paused"):s("heartbeat.running")})]}),e.jsxs(j,{children:[e.jsx("p",{className:"text-xs text-muted-foreground",children:s("heartbeat.interval")}),e.jsxs("p",{className:"text-lg font-bold text-foreground mt-1",children:[m.interval_mins,"m"]})]}),e.jsxs(j,{children:[e.jsx("p",{className:"text-xs text-muted-foreground",children:s("heartbeat.runCount")}),e.jsx("p",{className:"text-lg font-bold text-foreground mt-1",children:m.run_count})]}),e.jsxs(j,{children:[e.jsx("p",{className:"text-xs text-muted-foreground",children:s("heartbeat.errorCount")}),e.jsx("p",{className:"text-lg font-bold text-foreground mt-1",children:m.error_count})]})]}),e.jsx(j,{children:e.jsxs("div",{className:"space-y-2 text-sm",children:[e.jsxs("p",{className:"text-muted-foreground",children:[s("heartbeat.lastRun"),": ",e.jsx("span",{className:"text-foreground",children:ue(m.last_run)})]}),e.jsxs("p",{className:"text-muted-foreground",children:[s("heartbeat.skippedBusy"),": ",e.jsx("span",{className:"text-foreground",children:m.skipped_busy})]}),m.last_error&&e.jsx("p",{className:"text-destructive",children:m.last_error})]})}),e.jsxs("div",{className:"flex gap-2",children:[m.paused?e.jsxs(l,{onClick:()=>{Ue(t).then(c)},children:[e.jsx(ze,{size:14})," ",s("heartbeat.resume")]}):e.jsxs(l,{variant:"secondary",onClick:()=>{Fe(t).then(c)},children:[e.jsx(Le,{size:14})," ",s("heartbeat.pause")]}),e.jsxs(l,{variant:"secondary",onClick:()=>{Oe(t).then(c)},children:[e.jsx(K,{size:14})," ",s("heartbeat.trigger")]}),e.jsxs(l,{variant:"secondary",onClick:()=>S(!0),children:[e.jsx(ge,{size:14})," ",s("heartbeat.setInterval")]})]})]}):e.jsx(q,{message:s("common.noData")}),e.jsx(U,{open:oe,onClose:()=>S(!1),title:s("heartbeat.setInterval"),children:e.jsxs("div",{className:"space-y-3",children:[e.jsx(p,{label:`${s("heartbeat.interval")} (min)`,type:"number",value:H,onChange:a=>ne(a.target.value)}),e.jsxs("div",{className:"flex justify-end gap-2 pt-2",children:[e.jsx(l,{variant:"secondary",onClick:()=>S(!1),children:s("common.cancel")}),e.jsx(l,{onClick:ce,children:s("common.save")})]})]})})]})]})}function Ge(s){return{enabled:!!(s!=null&&s.enabled),provider_id:(s==null?void 0:s.provider_id)||A,runtime_image_id:(s==null?void 0:s.runtime_image_id)||o.runtime_image_id,server_url:(s==null?void 0:s.server_url)||o.server_url,image:(s==null?void 0:s.image)||o.image,acp_port:String((s==null?void 0:s.acp_port)||o.acp_port),state_scope:(s==null?void 0:s.state_scope)||o.state_scope,timeout_seconds:String((s==null?void 0:s.timeout_seconds)||o.timeout_seconds),sandbox_lifecycle:(s==null?void 0:s.sandbox_lifecycle)||o.sandbox_lifecycle,idle_seconds:String((s==null?void 0:s.idle_seconds)||o.idle_seconds),warm_pool_size:String((s==null?void 0:s.warm_pool_size)??o.warm_pool_size),cpu:(s==null?void 0:s.cpu)||o.cpu,memory:(s==null?void 0:s.memory)||o.memory,workspace_mount_path:(s==null?void 0:s.workspace_mount_path)||o.workspace_mount_path,state_mount_path:(s==null?void 0:s.state_mount_path)||o.state_mount_path}}function Ke(s){return{enabled:s.enabled,provider_id:s.provider_id.trim()||A,runtime_image_id:s.runtime_image_id.trim()||o.runtime_image_id,state_scope:s.state_scope,timeout_seconds:Number(s.timeout_seconds)||Number(o.timeout_seconds),sandbox_lifecycle:s.sandbox_lifecycle,idle_seconds:Number(s.idle_seconds)||Number(o.idle_seconds),warm_pool_size:Math.max(0,Number(s.warm_pool_size)||0),cpu:s.cpu.trim()||o.cpu,memory:s.memory.trim()||o.memory}}export{hs as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{u as C,D as z,r,j as e,L as S,B as g,g as b,T as B}from"./index-cI3pWBnN.js";import{B as j}from"./Badge-BIesaDYG.js";import{g as E,a as L}from"./sessions-BWmAppwK.js";import{C as A,A as D}from"./ChatMarkdown-_Mdmltgv.js";import{A as I}from"./arrow-left-CXyya3hP.js";import{C as M}from"./circle-BEjtahw6.js";import{W as y,R}from"./wifi-off-Fz5c3_x_.js";import{B as T}from"./bot-C9HBk5XH.js";import{U}from"./user-dPOzUqIc.js";import"./check-CutSg9a5.js";function J(){var p;const{t:a}=C(),{project:i,id:l}=z(),[s,v]=r.useState(null),[d,m]=r.useState(""),[c,x]=r.useState(!1),[w,f]=r.useState(!0),u=r.useRef(null),o=r.useCallback(async()=>{if(!(!i||!l))try{f(!0);const t=await E(i,l,200);v(t)}finally{f(!1)}},[i,l]);r.useEffect(()=>{o()},[o]),r.useEffect(()=>{var t;(t=u.current)==null||t.scrollIntoView({behavior:"smooth"})},[s==null?void 0:s.history]);const h=async()=>{if(!d.trim()||!i||!s)return;const t=d.trim();m(""),x(!0);try{await L(i,{session_key:s.session_key,message:t}),setTimeout(o,1500)}finally{x(!1)}},N=t=>{t.key==="Enter"&&!t.shiftKey&&(t.preventDefault(),h())};return w&&!s?e.jsx("div",{className:"flex items-center justify-center h-64 text-muted-foreground animate-pulse",children:"Loading..."}):e.jsxs("div",{className:"flex flex-col h-[calc(100vh-8rem)] animate-fade-in",children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-slate-200/80 pb-4 dark:border-white/[0.08]",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(S,{to:"/sessions",className:"p-2 rounded-md hover:bg-accent/10 transition-colors",children:e.jsx(I,{size:18,className:"text-muted-foreground"})}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("h2",{className:"text-[1.4rem] font-semibold text-foreground",children:(s==null?void 0:s.name)||l}),s!=null&&s.live?e.jsxs("span",{className:"flex items-center gap-1 rounded-full bg-primary/10 px-2 py-0.5 text-[10px] text-primary",children:[e.jsx(M,{size:5,className:"fill-current"})," live"]}):e.jsxs("span",{className:"flex items-center gap-1 text-[10px] text-muted-foreground bg-muted px-1.5 py-0.5 rounded-full",children:[e.jsx(y,{size:9})," ",a("sessions.offline")]})]}),e.jsxs("div",{className:"flex items-center gap-2 mt-0.5",children:[e.jsx(j,{children:i}),(s==null?void 0:s.platform)&&e.jsx(j,{variant:"info",children:s.platform}),e.jsx("span",{className:"text-xs text-muted-foreground",children:s==null?void 0:s.session_key})]})]})]}),e.jsxs(g,{size:"sm",variant:"ghost",onClick:o,children:[e.jsx(R,{size:14})," ",a("common.refresh")]})]}),e.jsxs("div",{className:"flex-1 overflow-y-auto py-6",children:[(!(s!=null&&s.history)||s.history.length===0)&&e.jsx("p",{className:"text-center text-sm text-muted-foreground py-12",children:a("sessions.noMessages")}),e.jsx("div",{className:"mx-auto max-w-4xl space-y-5",children:(p=s==null?void 0:s.history)==null?void 0:p.map((t,k)=>{const n=t.role==="user";return e.jsxs("div",{className:b("flex gap-3",n?"justify-end":"justify-start"),children:[!n&&e.jsx("div",{className:"mt-1 flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-primary/10 dark:bg-white/[0.06]",children:e.jsx(T,{size:16,className:"text-primary"})}),e.jsx("div",{className:b("rounded-[20px] px-5 py-3.5 text-sm",n?"chat-user-glass max-w-[70%] rounded-br-sm text-slate-950 dark:text-slate-50":"max-w-[78%] rounded-bl-sm border border-slate-200 bg-[#fbfbfd] text-card-foreground dark:border-white/[0.08] dark:bg-white/[0.04]"),children:e.jsx(A,{content:t.content,isUser:n})}),n&&e.jsx("div",{className:"mt-1 flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-muted dark:bg-white/[0.08]",children:e.jsx(U,{size:16,className:"text-muted-foreground"})})]},k)})}),e.jsx("div",{ref:u})]}),e.jsx("div",{className:"border-t pt-4",children:s!=null&&s.live?e.jsx("div",{className:"mx-auto max-w-4xl",children:e.jsxs("div",{className:"relative",children:[e.jsx(B,{value:d,onChange:t=>m(t.target.value),onKeyDown:N,placeholder:a("sessions.messageInput"),rows:2,className:"min-h-[88px] rounded-[22px] border-gray-200 bg-[#fbfbfd] px-4 pb-14 pt-3 text-[15px] leading-6 dark:border-white/[0.08] dark:bg-[rgba(255,255,255,0.04)] sm:min-h-[96px] sm:px-5 sm:pt-4",disabled:c}),e.jsx(g,{onClick:h,disabled:c||!d.trim(),size:"icon","aria-label":a("sessions.messageInput"),className:"absolute bottom-3 right-3 h-10 w-10 rounded-full bg-primary px-0 text-white shadow-none hover:bg-[#0071e3] disabled:bg-slate-300 disabled:text-white disabled:opacity-100 dark:bg-primary dark:text-white dark:hover:bg-[#2997ff] dark:disabled:bg-white/20 dark:disabled:text-white/55 sm:h-11 sm:w-11",children:c?e.jsxs("svg",{className:"animate-spin h-4 w-4",viewBox:"0 0 24 24",children:[e.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4",fill:"none"}),e.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z"})]}):e.jsx(D,{size:20,strokeWidth:2.2})})]})}):e.jsxs("div",{className:"flex items-center gap-2 px-4 py-3 text-sm text-muted-foreground bg-muted rounded-lg",children:[e.jsx(y,{size:14}),e.jsx("span",{children:a("sessions.notLiveHint")})]})})]})}export{J as default};
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import{c as Ne,j as t,g as Z,B as Q,r as o,W as ht,h as $e,i as Ve,k as ft,m as bt,l as gt,s as wt,n as Je,o as _e,p as Xe,q as kt,t as yt,v as jt,w as vt,x as Nt,y as Ct,I as Me,T as St}from"./index-cI3pWBnN.js";import{X as Re,M as Ue}from"./Modal-CXhD_OWR.js";import{g as Kt,o as Lt,b as Mt,u as At,s as It}from"./desktop-DATgk_ka.js";import{t as _t,L as Oe}from"./session-utils-DpRwJ6Nh.js";import{n as zt,i as Pt,a as Ee,b as Tt,s as Bt,w as Ae}from"./desktop-JQkhNOF4.js";import{C as Dt,A as $t}from"./ChatMarkdown-_Mdmltgv.js";import{C as Ye}from"./check-CutSg9a5.js";import{C as ve}from"./circle-BEjtahw6.js";import{B as Rt}from"./bot-C9HBk5XH.js";import{U as Ut}from"./user-dPOzUqIc.js";import{S as Ot}from"./shield-check-CVx1mEs2.js";import{C as Et}from"./chevron-down-DrydR4i3.js";import{R as Ft,W as Ht}from"./wifi-off-Fz5c3_x_.js";import{S as Wt}from"./search-C3bvw7AR.js";import{P as Vt}from"./pencil-ywcJzeOo.js";import{T as Jt}from"./trash-2-o-heXOgs.js";import"./index-BKpv0P0s.js";/**
|
|
2
|
-
* @license lucide-react v0.487.0 - ISC
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the ISC license.
|
|
5
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/const Xt=[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]],Yt=Ne("database",Xt);/**
|
|
7
|
-
* @license lucide-react v0.487.0 - ISC
|
|
8
|
-
*
|
|
9
|
-
* This source code is licensed under the ISC license.
|
|
10
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
11
|
-
*/const Qt=[["path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z",key:"1lielz"}],["path",{d:"M12 7v6",key:"lw1j43"}],["path",{d:"M9 10h6",key:"9gxzsh"}]],Fe=Ne("message-square-plus",Qt);/**
|
|
12
|
-
* @license lucide-react v0.487.0 - ISC
|
|
13
|
-
*
|
|
14
|
-
* This source code is licensed under the ISC license.
|
|
15
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
16
|
-
*/const Zt=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M9 3v18",key:"fh3hqa"}]],Gt=Ne("panel-left",Zt);/**
|
|
17
|
-
* @license lucide-react v0.487.0 - ISC
|
|
18
|
-
*
|
|
19
|
-
* This source code is licensed under the ISC license.
|
|
20
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
21
|
-
*/const qt=[["polyline",{points:"4 17 10 11 4 5",key:"akl6gq"}],["line",{x1:"12",x2:"20",y1:"19",y2:"19",key:"q2wloq"}]],er=Ne("terminal",qt),tr=9e4;function we(e){return e==="thought"||e==="plan"||e==="tool"||e==="status"||e==="permission"}function Ie(e){return e==="awaiting_input"}function je(e,r,s){if(r)return e.find(n=>n.id===r);if(s)return e.find(n=>n.preview&&n.turnKey===s)}function rr(e,r,s,n){return!e.preview||e.role!=="assistant"||!s||e.turnKey!==s||we(n)||we(e.bridgeKind)?!1:!!(r&&(e.content===r||!e.bridgeKind||e.bridgeKind==="assistant"))}function ar(e){const r=String(e.event.replyCtx||"").trim();if(!r)return!0;const s=String(e.activeRunId||"").trim(),n=e.pendingTurn;if(n&&n.sessionKey===e.event.sessionKey){const i=String(n.runId||"").trim();if(i)return r===i;const l=String(n.supersededRunId||"").trim();if(l&&r===l)return!1}return!s||r===s}function sr(e,r){let s=!1;const n=e.map(i=>!i.preview||r&&i.turnKey!==r?i:(s=!0,{...i,preview:!1,previewPlainText:!1}));return s?n:e}function nr(e,r){if(!r)return e;const s=e.filter(l=>l.turnKey===r&&!l.preview);if(s.length===0)return e;const n=[...s].reverse().find(l=>!we(l.bridgeKind)),i=n==null?void 0:n.id;return e.map(l=>l.turnKey!==r||l.preview?l:{...l,kind:i&&l.id===i?"final":"progress"})}function Qe(e){if(!e)return"";const r=e.match(/\[User Message\]\s*([\s\S]*?)\s*\[\/User Message\]/);return r?r[1]||"":e}function ir(e){return e.map((r,s)=>({id:r.id||`${s}-${r.timestamp||r.role}`,role:r.role==="user"?"user":r.role==="system"?"system":"assistant",content:r.role==="user"?Qe(r.content):r.content,toolCall:r.toolCall,bridgeKind:r.bridgeKind,bridgeStatus:r.bridgeStatus,kind:r.kind==="progress"||r.kind==="system"?"progress":"final",order:s,timestamp:r.timestamp}))}function Ze(e){return{id:e.id,project:e.workspaceId,name:e.title,live:e.live,createdAt:e.createdAt,updatedAt:e.updatedAt,excerpt:Qe(e.excerpt),agentType:e.agentType,bridgeSessionKey:e.bridgeSessionKey}}function Ge(e){return[...e].sort((r,s)=>r.live!==s.live?r.live?-1:1:(s.updatedAt||s.createdAt||"").localeCompare(r.updatedAt||r.createdAt||""))}function or(e,r){return r?[e.name,e.excerpt,e.bridgeSessionKey||""].join(" ").toLowerCase().includes(r):!0}function He(e){return[...e].sort((r,s)=>{if(r.order!==s.order)return r.order-s.order;const n=r.timestamp?new Date(r.timestamp).getTime():Number.NaN,i=s.timestamp?new Date(s.timestamp).getTime():Number.NaN,l=Number.isFinite(n),p=Number.isFinite(i);return l&&p&&n!==i?n-i:r.id.localeCompare(s.id)})}function We(e){if(!e)return"";const r=new Date(e);return Number.isNaN(r.getTime())?"":new Intl.DateTimeFormat(void 0,{hour:"2-digit",minute:"2-digit",second:"2-digit"}).format(r)}function lr(e){switch(e){case"starting":return"启动中";case"api_ready":return"服务就绪";case"error":return"运行异常";default:return"未启动"}}function dr(e){if(!(e!=null&&e.startsWith("desktop:")))return"";const[,r=""]=e.split(":");return r}function cr(e){return Array.isArray(e)?e.map(r=>Array.isArray(r)?r.map(s=>zt(s)).filter(s=>!!s):[]).filter(r=>r.length>0):[]}function qe(e,r,s){const n=e.filter(i=>i.project!==r);return n.push({project:r,sessions:s}),n.sort((i,l)=>i.project.localeCompare(l.project))}function ur(e,r,s){var l;const n=((l=e.find(p=>p.project===r))==null?void 0:l.sessions)||[],i=Ge([s,...n.filter(p=>p.id!==s.id)]);return qe(e,r,i)}function pr(e){return e.some(r=>r.some(s=>Pt(s)))}function mr(e,r){return e==="stopping"?"Stopping current task…":e==="error"?"":e==="awaiting_input"?"Agent is waiting for your reply.":e==="permission_submitted"?"Permission sent. Waiting for the agent to continue…":e==="awaiting_permission"?"Waiting for your permission response.":r?"Agent is typing…":e==="running"?"Task is running…":""}function xr(e){return e==="running"||e==="awaiting_permission"||e==="permission_submitted"||e==="stopping"}function hr(e){return e!=="idle"&&e!=="awaiting_input"&&e!=="error"}function fr(e){return e!=="awaiting_input"&&e!=="awaiting_permission"&&e!=="permission_submitted"&&e!=="stopping"}const br="Permission sent. Waiting for the agent to continue…";function gr(e){return!(e.actionMode==="permission"&&e.actionInteractive)}function wr(e,r){return(r==null?void 0:r.id)===e.id?!0:e.role!=="user"&&e.actionMode==="permission"&&!!e.actionInteractive}function kr(e){var s;if(!e.id||e.role!=="assistant"||e.actionMode!=="permission"||!e.content)return null;const r=((s=e.actions)==null?void 0:s.filter(n=>n.length>0))||[];return r.length===0?null:{id:e.id,content:e.content,actions:r,actionReplyCtx:e.actionReplyCtx,actionPending:e.actionPending,actionStatus:e.actionStatus,actionMode:"permission",actionInteractive:!0}}function yr(e){return{...e,actions:[],actionPending:!1,actionStatus:br}}function jr(e,r){return e.role==="system"?!1:wr({id:e.id,role:e.role,actionMode:e.actionMode,actionInteractive:e.actionInteractive},r)}function vr(e){var s;if(!e)return null;const r=e.status.trim()||"running";return{title:e.name.trim()||"Tool call",status:r,output:e.output||"",label:e.label||(/^running$/i.test(r)?"工具调用":"工具结果"),subtitle:((s=e.detail)==null?void 0:s.trim())||Nr(e.input)}}function Nr(e){if(!e||typeof e!="object")return typeof e=="string"&&e.trim()?e.trim():void 0;const r=e;for(const n of["command","cmd","path","file","query"]){const i=r[n];if(typeof i=="string"&&i.trim())return i.trim()}const s=Object.entries(r).filter(([,n])=>n!=null&&n!=="").slice(0,2).map(([n,i])=>`${n}: ${typeof i=="string"?i:JSON.stringify(i)}`);return s.length>0?s.join(", "):void 0}function Cr(e){var r;return e.bridgeKind==="tool"&&((r=e.toolCall)==null?void 0:r.status.trim().toLowerCase())==="running"&&!e.toolCall.output.trim()}function Sr(e){return e.label==="工具结果"&&!!e.output.trim()}function Kr(e){const r=e.split(`
|
|
22
|
-
`).map(p=>p.trim()).filter(Boolean),s=r.findIndex(p=>p.includes("若按钮没有显示")),n=s>=0?r.slice(0,s):r,i=n[0]||"等待工具确认",l=n.slice(1).filter(p=>!p.includes("请选择一个选项继续执行"));return{title:i,bodyLines:l}}function Lr(e,r){return e.map(s=>{const n=r.find(i=>i.id===s);return{id:s,name:(n==null?void 0:n.name)||s,fileCount:(n==null?void 0:n.fileCount)||0}})}function Mr(e,r){const s=r.trim().toLowerCase();return s?e.filter(n=>[n.name,n.description,n.id].join(" ").toLowerCase().includes(s)):e}function Ar(e,r){const s=new Set(r);return[...e].sort((n,i)=>{const l=s.has(n.id),p=s.has(i.id);return l!==p?l?-1:1:n.name.localeCompare(i.name,"zh-CN")})}function Ir(e,r){return r?e.filter(s=>s.project===r):e}function _r(e,r){return r&&!e.includes(r)?[r,...e]:e}function zr(e){return e.some(r=>r.sessions.length>0)}function Pr(e){return e?{id:e.id,content:e.content,actions:e.actions,actionReplyCtx:e.actionReplyCtx,actionPending:e.actionPending,actionStatus:e.actionStatus,actionMode:"permission",actionInteractive:!0}:null}function Tr(e,r){return e.kind==="progress"&&Cr(e)?!1:!jr(e,r)}function Br(e){return e.serviceRunning?e.transportReady?e.taskState==="awaiting_input"?"Agent 正在等待你的回复,可直接继续输入。":e.taskInputLocked?"任务正在运行,点击停止可中断当前执行。":e.sendPlaceholder:e.waitingRuntimePlaceholder:e.startFirstPlaceholder}function Dr(e){return!!(e.draft.trim()&&e.serviceRunning&&e.transportReady&&!e.sending&&e.selectedProject)}function $r({card:e}){const r=e.status.toLowerCase()==="completed",[s,n]=o.useState(()=>!Sr(e)),i=!!e.output.trim();return t.jsxs("div",{className:"overflow-hidden rounded-[18px] border border-slate-200 bg-[#f5f5f7] dark:border-white/[0.08] dark:bg-[#111214]",children:[t.jsxs("div",{className:"flex items-center justify-between gap-3 border-b border-slate-200/80 px-4 py-3 dark:border-white/[0.06]",children:[t.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[t.jsx("span",{className:"flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-primary/10 text-primary dark:text-primary",children:t.jsx(ht,{size:14})}),t.jsxs("div",{className:"min-w-0",children:[t.jsx("p",{className:"truncate text-sm font-semibold text-slate-800 dark:text-slate-100",children:e.title}),t.jsxs("p",{className:"mt-0.5 flex items-center gap-1.5 text-[11px] text-slate-500 dark:text-slate-400",children:[t.jsx(er,{size:12}),t.jsx("span",{className:"truncate",children:e.subtitle||e.label})]})]})]}),t.jsxs("div",{className:"flex shrink-0 items-center gap-2",children:[t.jsx("span",{className:Z("rounded-full px-2.5 py-1 text-[10px] font-medium uppercase tracking-[0.12em]",r?"bg-primary/10 text-primary dark:text-primary":"bg-amber-500/10 text-amber-700 dark:text-amber-300"),children:e.status}),i?t.jsx("button",{type:"button","aria-expanded":s,"aria-label":s?"折叠工具结果":"展开工具结果","data-testid":"desktop-tool-result-toggle",onClick:()=>n(l=>!l),className:"flex h-7 w-7 items-center justify-center rounded-full border border-slate-200 bg-white text-slate-500 transition hover:border-slate-300 hover:text-slate-700 dark:border-white/[0.08] dark:bg-white/[0.05] dark:text-slate-300 dark:hover:bg-white/[0.08]",children:s?t.jsx(Et,{size:14}):t.jsx($e,{size:14})}):null]})]}),s?t.jsx("pre",{className:"max-h-72 overflow-auto whitespace-pre-wrap break-words px-4 py-3 font-mono text-[12px] leading-5 text-slate-700 [scrollbar-gutter:stable] dark:text-slate-200",children:e.output||"无输出"}):t.jsxs("button",{type:"button",onClick:()=>n(!0),className:"flex w-full items-center gap-2 px-4 py-3 text-left text-xs text-slate-500 transition hover:bg-slate-100/70 dark:text-slate-400 dark:hover:bg-white/[0.04]",children:[t.jsx($e,{size:14}),t.jsx("span",{className:"truncate",children:"工具结果已折叠"})]})]})}function Rr({card:e,className:r,testId:s="desktop-chat-permission-card",loading:n,onAction:i}){const l=Kr(e.content);return t.jsxs("div",{"data-testid":s,className:Z("overflow-hidden rounded-[18px] border border-amber-200 bg-[#fff8eb] dark:border-amber-400/20 dark:bg-amber-500/10",r),children:[t.jsx("div",{className:"flex items-center justify-between gap-3 border-b border-amber-200/80 px-4 py-3 dark:border-amber-400/15",children:t.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[t.jsx("span",{className:"flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-amber-100 text-amber-700 dark:bg-amber-400/15 dark:text-amber-200",children:t.jsx(Ot,{size:14})}),t.jsxs("div",{className:"min-w-0",children:[t.jsx("p",{className:"truncate text-sm font-semibold text-amber-950 dark:text-amber-50",children:l.title}),t.jsx("p",{className:"mt-0.5 text-[11px] text-amber-700/80 dark:text-amber-100/70",children:"权限响应"})]})]})}),l.bodyLines.length>0?t.jsx("div",{className:"space-y-2 px-4 py-3 text-sm leading-6 text-amber-950 dark:text-amber-50",children:l.bodyLines.map((p,g)=>t.jsx("p",{className:"break-words",children:p},`${e.id}-permission-line-${g}`))}):null,e.actionStatus?t.jsx("p",{className:"border-t border-amber-200/80 px-4 py-3 text-xs text-amber-700 dark:border-amber-400/15 dark:text-amber-100",children:e.actionStatus}):null,e.actions.length>0?t.jsx("div",{className:"flex flex-wrap gap-2 border-t border-amber-200/80 px-4 py-3 dark:border-amber-400/15",children:e.actions.flat().map(p=>t.jsx(Q,{size:"sm",variant:"secondary",onClick:()=>i(p),disabled:!!(e.actionPending||n),loading:n,className:"rounded-full border border-amber-300 bg-white text-amber-900 hover:bg-amber-100 dark:border-amber-400/30 dark:bg-white/[0.08] dark:text-amber-50 dark:hover:bg-white/[0.12]",children:p.text||p.data},`${e.id}-${p.data||p.text}`))}):null]})}function Ur({message:e,pendingBridgeActionId:r,onAction:s}){const n=e.role==="user",i=e.role==="system",l=!n&&!i&&e.kind==="progress",p=n?null:vr(e.toolCall),g=!!p;return t.jsxs("div",{className:Z("flex gap-3 sm:gap-4",n?"justify-end":"justify-start"),children:[n?null:t.jsx("div",{className:Z("mt-1 flex shrink-0 items-center justify-center rounded-full text-slate-400 dark:text-slate-500",i?"h-7 w-7 bg-amber-100 text-amber-600 dark:bg-amber-500/12 dark:text-amber-300":l?"h-6 w-6 bg-[#f0f0f0] dark:bg-white/[0.04]":"h-8 w-8 bg-[#f5f5f7] dark:bg-white/[0.06]"),children:i?t.jsx(Ye,{size:14}):l?t.jsx(ve,{size:7,className:"fill-current"}):t.jsx(Rt,{size:14})}),t.jsx("div",{"data-testid":"desktop-chat-message","data-role":e.role,"data-kind":e.kind||"final","data-order":String(e.order),"data-timestamp":e.timestamp||"",className:Z("transition-all",n?"max-w-[calc(100%-2.25rem)] sm:max-w-[70%]":g?"max-w-[calc(100%-2.25rem)] sm:max-w-[80%]":l?"max-w-[calc(100%-2.25rem)] sm:max-w-[72%]":"max-w-[calc(100%-2.25rem)] sm:max-w-[78%]"),children:t.jsxs("div",{className:Z("rounded-[20px] px-4 py-3 text-sm",n?"chat-user-glass rounded-br-sm text-slate-950 dark:text-slate-50":i?"rounded-bl-sm border border-amber-200/80 bg-[#fff8eb] text-amber-900 dark:border-amber-400/20 dark:bg-amber-500/10 dark:text-amber-100":l?"rounded-bl-lg bg-[#f5f5f7] text-[13px] leading-6 text-slate-500 dark:bg-white/[0.04] dark:text-slate-400":"rounded-bl-sm border border-slate-200 bg-[#fbfbfd] text-slate-800 dark:border-white/[0.06] dark:bg-white/[0.04] dark:text-slate-100",g&&"bg-transparent p-0 shadow-none dark:bg-transparent"),children:[t.jsxs("div",{className:Z("mb-2 flex items-center gap-2 text-[10px]",n?"justify-end text-slate-500 dark:text-white/55":"text-slate-400 dark:text-slate-500"),children:[i?t.jsx("span",{className:"tracking-[0.14em] text-amber-600 dark:text-amber-300",children:"系统"}):null,l?t.jsx("span",{className:"tracking-[0.14em] text-amber-500 dark:text-amber-300",children:g?"工具":"过程"}):null,We(e.timestamp)?t.jsx("span",{"data-testid":"desktop-chat-message-timestamp",children:We(e.timestamp)}):null]}),!n&&e.preview&&e.previewPlainText?t.jsx("div",{className:"whitespace-pre-wrap break-words text-[13px] leading-6 text-inherit",children:e.content}):p?t.jsx($r,{card:p}):t.jsx(Dt,{content:e.content,isUser:n}),!n&&e.actions&&e.actions.length>0?t.jsx("div",{className:"mt-4 space-y-2",children:e.actions.map((j,K)=>t.jsx("div",{className:"flex flex-wrap gap-2",children:j.map(A=>t.jsx(Q,{size:"sm",variant:String(A.data||"").includes("deny")?"danger":"secondary",onClick:()=>s(e,A),disabled:!!(e.actionPending||r),loading:r===e.id,"data-testid":"desktop-chat-action-button",className:"rounded-full",children:A.text||A.data},`${e.id}-${A.data||A.text}`))},`${e.id}-actions-${K}`))}):null,!n&&e.actionStatus?t.jsx("p",{className:Z("mt-3 text-xs",e.actionInteractive?"text-slate-500 dark:text-slate-400":"text-amber-700 dark:text-amber-200"),"data-testid":"desktop-chat-action-status",children:e.actionStatus}):null,e.preview?t.jsx("p",{className:"mt-2 text-[10px] uppercase tracking-[0.18em] text-primary dark:text-primary",children:"实时预览"}):null]})}),n?t.jsx("div",{className:"mt-1 flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-[#f0f0f0] dark:bg-white/[0.08] sm:h-8 sm:w-8",children:t.jsx(Ut,{size:14,className:"text-slate-500 dark:text-slate-300"})}):null]})}function et(){return Ve()==="local_core"?{chatTitle:"本地对话",chatHeading:"本地对话",chatDescription:"浏览线程、切换工作区,并与本地 AI Core 保持同步。",scopeLabel:"当前工作区",scopeSelectPlaceholder:"选择工作区",searchPlaceholder:"搜索线程、联系人或消息摘要",startRuntimeLabel:"启动运行时",startingRuntimeLabel:"启动中…",newThreadLabel:"新建线程",pendingRestartLabel:"最新配置已经保存,但当前对话仍在使用旧运行时状态。请重启运行时以应用配置。",emptySelectionLabel:"选择工作区后即可开始对话。",emptyThreadsLabel:"当前还没有线程。",emptySearchLabel:"没有匹配的线程。",collectionLabel:"线程",activeScopeLabel:"当前工作区",activeConversationFallback:"新对话",startConversationLabel:"选择工作区后即可开始聊天。",runtimeOnlineLabel:"运行时在线",runtimeOfflineLabel:"运行时离线",emptyConversationLabel:"发送一条消息,即可在当前工作区创建新线程。",startFirstPlaceholder:"请先启动运行时",waitingRuntimePlaceholder:"正在等待运行时通道连接",sendPlaceholder:"输入一条发给当前线程的消息",permissionUnsupportedLabel:"当前代理无法在此对话中继续交互式审批。请切换到支持的代理,或调整运行时权限后重试。",replyTimeoutLabel:"审批回复已发送,但代理没有继续执行。该请求可能暂不支持本地运行时继续处理。"}:{chatTitle:"桌面对话",chatHeading:"桌面对话",chatDescription:"",scopeLabel:"当前项目",scopeSelectPlaceholder:"选择项目",searchPlaceholder:"搜索会话、用户或消息摘要",startRuntimeLabel:"启动服务",startingRuntimeLabel:"启动中…",newThreadLabel:"新建会话",pendingRestartLabel:"最新配置已经保存,但当前对话仍在使用旧服务状态。请重启桌面服务以应用配置。",emptySelectionLabel:"选择项目后即可开始对话。",emptyThreadsLabel:"当前还没有桌面会话。",emptySearchLabel:"没有匹配的会话。",collectionLabel:"会话",activeScopeLabel:"当前项目",activeConversationFallback:"新桌面对话",startConversationLabel:"选择项目后即可开始聊天。",runtimeOnlineLabel:"桥接在线",runtimeOfflineLabel:"桥接离线",emptyConversationLabel:"发送一条消息,即可在当前项目中创建桌面会话。",startFirstPlaceholder:"请先启动服务",waitingRuntimePlaceholder:"正在等待桌面桥接连接",sendPlaceholder:"输入一条发给桌面通道的消息",permissionUnsupportedLabel:"当前代理无法在桌面对话中继续交互式审批。请切换到支持的代理,或调整代理权限与 work_dir 后重试。",replyTimeoutLabel:"审批回复已发送,但代理没有继续执行。当前代理或请求可能暂不支持桌面续接。"}}function Or({requestedProject:e,selectedProject:r,setSelectedProject:s,clearReplyTimeout:n,updateTaskState:i,setTyping:l}){const[p,g]=o.useState(null),[j,K]=o.useState(!0),A=Ve(),w=A==="electron",m=(p==null?void 0:p.phase)==="api_ready",k=m,N=o.useCallback(async()=>{const C=await Kt();g(C),!C.roles.conversation.lastError&&!r&&!e&&C.settings.defaultProject&&s(C.settings.defaultProject)},[e,r,s]);return o.useEffect(()=>{N().finally(()=>K(!1));const C=Lt(S=>{g(S),(S.phase==="stopped"||S.phase==="error")&&(l(!1),n(),i("idle"))});return()=>{n(),C()}},[n,N,l,i]),o.useMemo(()=>({loading:j,refreshRuntime:N,runtime:p,runtimeProvider:A,serviceRunning:m,showSessionKey:w,transportReady:k}),[j,N,p,A,m,w,k])}function Er({current:e,requested:r,runtimeDefault:s,workspaceIds:n}){return e&&n.includes(e)?e:r&&n.includes(r)?r:s&&n.includes(s)?s:n[0]||""}function Fr({activeThreadId:e,requestedWorkspaceId:r,requestedThreadId:s,runtimeDefaultWorkspaceId:n,runtimeProvider:i,searchParams:l,serviceRunning:p,selectedWorkspaceId:g,workspaceIds:j,threadGroups:K,threadSearch:A,setSelectedKnowledgeBaseIds:w,setActiveRunId:m,setActiveSessionAgentType:k,setActiveSessionId:N,setActiveSessionKey:C,setActiveSessionName:S,setBridgeError:_,setMessages:U,setPendingPermissionRequest:I,setProjects:E,setSearchParams:X,setSelectedProject:a,setThreadGroups:L,setTyping:z,applyLocalCoreThreadDetail:R,clearReplyTimeout:B,updateTaskState:M,holdBlankComposerRef:J,lastSessionByProjectRef:P,nextMessageOrderRef:y,pendingTurnRef:x,progressSequenceByTurnRef:f}){const V=o.useMemo(()=>{var d;return((d=K.find(h=>h.project===g))==null?void 0:d.sessions)||[]},[g,K]),D=o.useMemo(()=>{const d=A.trim().toLowerCase();return j.map(h=>{var c;const T=(((c=K.find(b=>b.project===h))==null?void 0:c.sessions)||[]).filter(b=>or(b,d));return{project:h,sessions:T}}).filter(h=>h.sessions.length>0||!d&&h.project===g)},[g,K,A,j]),F=o.useCallback(async d=>{if(!d||!p)return[];const h=Ge((await ft(d)).threads.map(c=>Ze(c))),T=h.find(c=>c.id===e);return T!=null&&T.agentType&&k(T.agentType),L(c=>qe(c,d,h)),h},[e,p,k,L,!0]),H=o.useCallback(async(d,h)=>{if(!(!d||!h||!p)){J.current=!1,M("idle"),I(null),z(!1);{const T=await bt(h);R(T);return}}},[R,J,P,y,x,f,p,m,k,N,C,S,w,U,I,a,L,z,M,!0]),O=o.useCallback(async()=>{if(!p)return E([]),L([]),w([]),[];const d=(await gt()).workspaces.map(c=>c.id);E(d);const h=Er({current:g,requested:r,runtimeDefault:n,workspaceIds:d}),T=(await Promise.all(d.map(async c=>({project:c,sessions:await F(c)})))).sort((c,b)=>c.project.localeCompare(b.project));return L(T),a(h),T},[F,r,n,g,p,E,w,a,L,!0]);return o.useEffect(()=>{if(!(!p||i!=="local_core"))return wt(d=>{d.type==="thread.session.activated"&&d.threadId!==e&&F(d.workspaceId).then(()=>H(d.workspaceId,d.threadId))})},[e,H,F,i,p]),o.useEffect(()=>{if(!p){L([]),U([]),I(null),w([]),k(""),m(""),_(""),x.current=null,y.current=0,f.current={},M("idle"),z(!1),B();return}O()},[B,y,x,f,O,p,m,k,_,U,I,w,L,z,M]),o.useEffect(()=>{if(!g||!p||V.find(b=>b.id===e))return;const h=r===g?s:"",T=P.current[g];if(!e&&J.current)return;const c=V.find(b=>b.id===h)||V.find(b=>b.id===T)||V[0];if(c){z(!1),M("idle"),_(""),B(),H(g,c.id);return}z(!1),M("idle"),_(""),B(),N(""),C(""),S(""),k(""),m(""),U([]),x.current=null,y.current=0,f.current={}},[e,B,J,P,H,y,x,f,s,r,g,p,m,k,N,C,S,_,U,z,V,M]),o.useEffect(()=>{if(!g&&!e)return;const d=new URLSearchParams(l);g?d.set("project",g):d.delete("project"),e?d.set("session",e):d.delete("session"),d.toString()!==l.toString()&&X(d,{replace:!0})},[e,l,g,X]),{filteredThreadGroups:D,loadActiveThread:H,refreshThreadsForWorkspace:F,refreshWorkspacesAndThreads:O}}function Hr({activeAgentType:e,activeThreadId:r,armReplyTimeout:s,clearActionStatuses:n,clearReplyTimeout:i,reserveNextMessageOrder:l,runtimeProvider:p,selectedWorkspaceId:g,sendAction:j,settlePreviewMessages:K,setActiveRunId:A,setBridgeError:w,setMessages:m,setPendingPermissionRequest:k,setPendingBridgeActionId:N,setTyping:C,updateTaskState:S}){return{handleBridgeAction:o.useCallback(async(I,E)=>{if(!r)return;const X=Ee(E.data)||E.data,a=Ee(E.data)||E.text||E.data,L=gr(I),z=!L,R=z?-1:l(),B=`${crypto.randomUUID()}-user-action`;let M=!1,J=!1;N(I.id),m(P=>P.map(y=>y.id===I.id?{...y,actionPending:!0}:y)),k(P=>P&&P.id===I.id?{...P,actionPending:!0}:P);try{L&&(J=!0,m(y=>[...y,{id:B,role:"user",content:a,order:R,timestamp:new Date().toISOString()}]));const P=await j(r,X);A(P.runId),M=!0,w(""),K(I.actionReplyCtx),C(!0),i(),n(),z?(S("permission_submitted","bridge-permission-submitted"),s("permission_continue"),k(null),m(y=>y.map(x=>x.id===I.id?yr(x):x))):(S("running","bridge-action-submitted"),s())}catch(P){w(P instanceof Error?P.message:"Failed to send permission response."),J&&m(y=>y.filter(x=>x.id!==B)),S(z?"awaiting_permission":"error",z?"bridge-permission-submit-failed":"bridge-action-submit-failed"),C(!1),k(y=>y&&y.id===I.id?{...y,actionPending:!1}:y)}finally{N(null),m(P=>P.map(y=>y.id===I.id?{...y,actionPending:!1,actions:M?y.actions||[]:y.actions}:y))}},[r,s,n,i,l,j,K,A,w,m,k,N,C,S,!0])}}function Wr(e){return e==="awaiting_permission"?"awaiting_permission":"idle"}function Vr(e,r){return r?"awaiting_permission":e?"awaiting_input":"idle"}function Jr(e,r){return r?"bridge-buttons-awaiting-permission":e?"bridge-buttons-awaiting-input":"bridge-buttons-idle"}function Xr(e){const r=e||"This agent",s=et();return s.permissionUnsupportedLabel.startsWith("This agent")?s.permissionUnsupportedLabel:`${r} ${s.permissionUnsupportedLabel.replace(/^This agent\s+/i,"")}`}function Yr(e){return e.type==="typing_stop"||e.type==="buttons"||e.type==="card"?!0:e.type==="reply"&&!we(e.bridgeKind)}function Qr({activeAgentType:e,activeBridgeSessionKey:r,activeRunId:s,armReplyTimeout:n,clearActionStatuses:i,clearReplyTimeout:l,finalizeTurnMessages:p,nextProgressMessageId:g,pendingTurnRef:j,progressSequenceByTurnRef:K,refreshThreadsForWorkspace:A,reserveAssistantMessageOrder:w,settlePreviewMessages:m,setBridgeError:k,setMessages:N,setPendingPermissionRequest:C,setTyping:S,taskStateRef:_,updateTaskState:U}){const I=Tt(e),E=o.useCallback(a=>{fr(_.current)&&U("running",a)},[_,U]),X=o.useCallback(a=>{const L=dr(a.sessionKey);if(L&&Yr(a)&&A(L),!(!a.sessionKey||a.sessionKey!==r)&&ar({event:a,activeRunId:s,pendingTurn:j.current}))switch(a.type){case"preview_start":if(Ie(a.bridgeStatus)){l(),S(!1),j.current=null,i(),U("awaiting_input","bridge-preview-awaiting-input"),C(null),k(""),N(x=>{const f=je(x,a.previewHandle,a.replyCtx),v=(f==null?void 0:f.id)||a.previewHandle||`${a.replyCtx||crypto.randomUUID()}-preview`,V=x.filter(D=>D.id!==v);return V.push({id:v,role:"assistant",content:a.content||"",kind:"progress",bridgeKind:a.bridgeKind,bridgeStatus:a.bridgeStatus,order:(f==null?void 0:f.order)??w(a.sessionKey),timestamp:(f==null?void 0:f.timestamp)||new Date().toISOString(),turnKey:a.replyCtx,preview:!0,previewPlainText:I}),V});break}i(),S(!0),E("bridge-preview-start"),C(null),n(),k(""),N(x=>{const f=je(x,a.previewHandle,a.replyCtx),v=(f==null?void 0:f.id)||a.previewHandle||`${a.replyCtx||crypto.randomUUID()}-preview`,V=x.filter(D=>D.id!==v);return V.push({id:v,role:"assistant",content:a.content||"",kind:"progress",bridgeKind:a.bridgeKind,bridgeStatus:a.bridgeStatus,order:(f==null?void 0:f.order)??w(a.sessionKey),timestamp:(f==null?void 0:f.timestamp)||new Date().toISOString(),turnKey:a.replyCtx,preview:!0,previewPlainText:I}),V});break;case"update_message":if(Ie(a.bridgeStatus)){l(),S(!1),j.current=null,i(),U("awaiting_input","bridge-update-awaiting-input"),C(null),k(""),N(x=>{const f=je(x,a.previewHandle,a.replyCtx);return f?x.map(v=>v.id===f.id?{...v,content:a.content||"",bridgeKind:a.bridgeKind,bridgeStatus:a.bridgeStatus,preview:!0,previewPlainText:I}:v):[...x,{id:a.previewHandle||`${a.replyCtx||crypto.randomUUID()}-preview`,role:"assistant",content:a.content||"",kind:"progress",bridgeKind:a.bridgeKind,bridgeStatus:a.bridgeStatus,order:w(a.sessionKey),timestamp:new Date().toISOString(),turnKey:a.replyCtx,preview:!0,previewPlainText:I}]});break}i(),S(!0),E("bridge-update-message"),C(null),n(),k(""),N(x=>{const f=je(x,a.previewHandle,a.replyCtx);return f?x.map(v=>v.id===f.id?{...v,content:a.content||"",bridgeKind:a.bridgeKind,bridgeStatus:a.bridgeStatus,preview:!0,previewPlainText:I}:v):[...x,{id:a.previewHandle||`${a.replyCtx||crypto.randomUUID()}-preview`,role:"assistant",content:a.content||"",kind:"progress",bridgeKind:a.bridgeKind,bridgeStatus:a.bridgeStatus,order:w(a.sessionKey),timestamp:new Date().toISOString(),turnKey:a.replyCtx,preview:!0,previewPlainText:I}]});break;case"delete_message":N(x=>x.filter(f=>f.id!==a.previewHandle));break;case"typing_start":i(),S(!0),E("bridge-typing-start"),C(null),k(""),n();break;case"typing_stop":S(!1),l(),j.current=null,i(),U(Wr(_.current),_.current==="awaiting_permission"?"bridge-typing-stop-preserve-permission":"bridge-typing-stop"),m(a.replyCtx),p(a.replyCtx);break;case"reply":{const x=Ie(a.bridgeStatus);i(),S(!x),x?(l(),j.current=null,U("awaiting_input","bridge-reply-awaiting-input")):(E("bridge-reply"),n()),C(null),k("");const f=a.messageId||g(a.replyCtx);!we(a.bridgeKind)&&a.replyCtx&&delete K.current[a.replyCtx],k(""),N(v=>{const V=v.find(F=>F.id===f),D=new Date().toISOString();return V?v.map(F=>F.id===f?{...F,content:a.content||"",toolCall:a.toolCall,bridgeKind:a.bridgeKind,bridgeStatus:a.bridgeStatus,kind:"progress",timestamp:D,turnKey:a.replyCtx}:F):[...v.filter(F=>!rr(F,a.content,a.replyCtx,a.bridgeKind)),{id:f,role:"assistant",content:a.content||"",toolCall:a.toolCall,bridgeKind:a.bridgeKind,bridgeStatus:a.bridgeStatus,kind:"progress",order:w(a.sessionKey),timestamp:D,turnKey:a.replyCtx}]});break}case"buttons":l(),S(!1),j.current=null,k(""),i(),m(a.replyCtx);const z=`${a.replyCtx||crypto.randomUUID()}-buttons`,R=cr(a.buttonRows||a.buttons),B=pr(R),M=B&&Bt(e),J=B&&!M?[]:R,P=J,y=B&&!M?Xr(e):void 0;N(x=>x.find(v=>v.id===z)?x.map(v=>v.id===z?{...v,content:a.content||v.content,actions:P,actionReplyCtx:a.replyCtx,actionPending:!1,actionMode:B?"permission":"generic",actionInteractive:M,bridgeKind:a.bridgeKind,bridgeStatus:a.bridgeStatus,actionStatus:y}:v):[...x,{id:z,role:"assistant",content:a.content||"Permission required before continuing.",kind:"progress",bridgeKind:a.bridgeKind,bridgeStatus:a.bridgeStatus,order:w(a.sessionKey),timestamp:new Date().toISOString(),turnKey:a.replyCtx,actions:P,actionReplyCtx:a.replyCtx,actionPending:!1,actionMode:B?"permission":"generic",actionInteractive:M,actionStatus:y}]),C(x=>{if(!B||!M)return null;const f={id:z,role:"assistant",content:a.content||"Permission required before continuing.",actions:J,actionReplyCtx:a.replyCtx,actionPending:!1,actionMode:"permission",actionStatus:y};return kr(f)||x}),U(Vr(R.length>0,M),Jr(R.length>0,M));break;case"card":l(),S(!1),j.current=null,i(),U("idle","bridge-card"),C(null),m(a.replyCtx),p(a.replyCtx),k(""),N(x=>[...x,{id:`${a.replyCtx||crypto.randomUUID()}-card`,role:"assistant",content:"Interactive card received. Open the session in the standard Sessions view for full controls.",order:w(a.sessionKey),timestamp:new Date().toISOString()}]);break}},[I,e,r,s,n,i,l,p,g,j,K,A,w,m,k,N,C,S,E,U]);o.useEffect(()=>{const a=Mt(L=>{X(L)});return()=>{l(),a()}},[l,X])}function Zr(e){Qr({activeAgentType:e.activeAgentType,activeBridgeSessionKey:e.activeBridgeSessionKey,activeRunId:e.activeRunId,armReplyTimeout:e.armReplyTimeout,clearActionStatuses:e.clearActionStatuses,clearReplyTimeout:e.clearReplyTimeout,finalizeTurnMessages:e.finalizeTurnMessages,nextProgressMessageId:e.nextProgressMessageId,pendingTurnRef:e.pendingTurnRef,progressSequenceByTurnRef:e.progressSequenceByTurnRef,refreshThreadsForWorkspace:e.refreshThreadsForWorkspace,reserveAssistantMessageOrder:e.reserveAssistantMessageOrder,settlePreviewMessages:e.settlePreviewMessages,setBridgeError:e.setBridgeError,setMessages:e.setMessages,setPendingPermissionRequest:e.setPendingPermissionRequest,setTyping:e.setTyping,taskStateRef:e.taskStateRef,updateTaskState:e.updateTaskState});const{handleBridgeAction:r}=Hr({activeAgentType:e.activeAgentType,activeBridgeSessionKey:e.activeBridgeSessionKey,activeRunId:e.activeRunId,activeThreadId:e.activeThreadId,armReplyTimeout:e.armReplyTimeout,clearActionStatuses:e.clearActionStatuses,clearReplyTimeout:e.clearReplyTimeout,reserveNextMessageOrder:e.reserveNextMessageOrder,runtimeProvider:e.runtimeProvider,selectedWorkspaceId:e.selectedWorkspaceId,sendAction:e.sendAction,settlePreviewMessages:e.settlePreviewMessages,setActiveRunId:e.setActiveRunId,setBridgeError:e.setBridgeError,setMessages:e.setMessages,setPendingPermissionRequest:e.setPendingPermissionRequest,setPendingBridgeActionId:e.setPendingBridgeActionId,setTyping:e.setTyping,updateTaskState:e.updateTaskState,taskStateRef:e.taskStateRef});return{handleBridgeAction:r}}function Gr({activeRunId:e,activeThreadId:r,activeBridgeSessionKey:s,availableKnowledgeBases:n,brandingNewThreadLabel:i,draft:l,loadActiveThread:p,selectedKnowledgeBaseIds:g,runtimeProvider:j,selectedProject:K,taskState:A,updateTaskState:w,applyLocalCoreThreadDetail:m,armReplyTimeout:k,clearReplyTimeout:N,refreshSessionsForProject:C,reserveNextMessageOrder:S,settlePreviewMessages:_,setActiveRunId:U,setActiveSessionId:I,setActiveSessionKey:E,setActiveSessionName:X,setBridgeError:a,setDraft:L,setMessages:z,setPendingPermissionRequest:R,setSending:B,setTyping:M,holdBlankComposerRef:J,lastSessionByProjectRef:P,nextMessageOrderRef:y,pendingTurnRef:x,progressSequenceByTurnRef:f,taskStateRef:v}){const D=o.useCallback(d=>{if(d.trim().startsWith("/"))return d;if(g.length===0)return Ae(d);const h=g.map(T=>n.find(c=>c.id===T)).filter(T=>!!T);return h.length===0?Ae(d):Ae(d,[["[Selected Knowledge Bases]",...h.map(T=>`- id: ${T.id} | name: ${T.name}`),"[/Selected Knowledge Bases]"].join(`
|
|
23
|
-
`)])},[n,g]),F=o.useCallback(async()=>{if(!K)throw new Error("Choose a project first");if(r)return{id:r,sessionKey:s};const d=await Je(K,`${i} ${new Date().toLocaleTimeString()}`);return m(d),await C(K),{id:d.id,sessionKey:d.bridgeSessionKey||""}},[s,r,m,i,C,K,!0]),H=o.useCallback(async()=>{if(!l.trim()||!K)return;const d=l.trim(),h=A==="awaiting_input",T=h?d:D(d),c=S();L(""),B(!0);try{const b=await F();if(console.info("[desktop-chat] send",{runtimeProvider:j,selectedProject:K,threadId:b.id,sessionKey:b.sessionKey,selectedKnowledgeBaseIds:g}),x.current={sessionKey:b.sessionKey,userOrder:c,runId:h?e:void 0,supersededRunId:h?void 0:e},R(null),z(W=>[...W,{id:`${crypto.randomUUID()}-user`,role:"user",content:d,order:c,timestamp:new Date().toISOString()}]),w("running","send-started"),M(!0),a(""),b.id&&await _e(b.id,g),k(),b.id){const W=h?await Xe(b.id,T):await kt(b.id,T);U(W.runId),x.current&&x.current.sessionKey===b.sessionKey&&x.current.userOrder===c&&(x.current={...x.current,runId:W.runId})}else throw new Error("Managed desktop thread transport is unavailable.")}catch(b){N(),x.current=null,_(),R(null),M(!1),w("error","send-failed"),a(b instanceof Error?b.message:"Failed to send the message.")}finally{B(!1)}},[e,k,D,N,l,F,A,x,S,g,K,U,a,L,z,R,B,_,M,w,!0]),O=o.useCallback(async()=>{if(!(!K||A==="stopping")){a(""),N(),_(),R(null),M(!1),w("stopping","stop-requested");try{if(e)await yt(e);else throw new Error("No active run to stop.");window.setTimeout(()=>{v.current==="stopping"&&w("idle","stop-timeout-complete")},1500)}catch(d){w("error","stop-failed"),a(d instanceof Error?d.message:"Failed to stop the current task.")}}},[e,N,a,R,_,M,K,A,v,w,!0]);return{handleSend:H,handleStopTask:O}}function qr({activeThreadId:e,brandingNewThreadLabel:r,deleteTarget:s,renameDraft:n,renameTarget:i,runtimeProvider:l,searchParams:p,selectedKnowledgeBaseIds:g,selectedProject:j,updateTaskState:K,applyLocalCoreThreadDetail:A,clearReplyTimeout:w,refreshSessionsForProject:m,setActiveRunId:k,setActiveSessionAgentType:N,setActiveSessionId:C,setActiveSessionKey:S,setActiveSessionName:_,setBridgeError:U,setDeleteTarget:I,setMessages:E,setPendingPermissionRequest:X,setPendingSessionAction:a,setRenameDraft:L,setRenameTarget:z,setSearchParams:R,setTyping:B,holdBlankComposerRef:M,nextMessageOrderRef:J,pendingTurnRef:P,progressSequenceByTurnRef:y}){const f=l==="local_core",v=o.useCallback(()=>{M.current=!0,C(""),S(""),_(""),N(""),k(""),E([]),X(null),B(!1),K("idle"),U(""),P.current=null,J.current=0,y.current={},w()},[w,M,J,P,y,k,N,C,S,_,U,E,X,B,K]),V=o.useCallback(async()=>{if(j){if(f){a("rename");try{const O=await Je(j,`${r} ${new Date().toLocaleTimeString()}`);if(g.length>0){const h=(await _e(O.id,g)).knowledgeBaseIds;O.selectedKnowledgeBaseIds=h}else O.selectedKnowledgeBaseIds=[];await m(j),A(O);const d=new URLSearchParams(p);d.set("project",j),d.set("session",O.id),R(d,{replace:!0})}finally{a(null)}return}v()}},[A,r,m,v,p,g,j,a,R,f,!0]),D=o.useCallback((O,d)=>{z({project:O,id:d.id,name:d.name}),L(d.name)},[L,z]),F=o.useCallback(async()=>{if(i){a("rename");try{const O=n.trim();await jt(i.id,O),i.id===e&&_(O),await m(i.project),z(null),L("")}finally{a(null)}}},[e,m,n,i,_,a,L,z,!0]),H=o.useCallback(async()=>{if(s){a("delete");try{await vt(s.id),s.id===e&&v(),await m(s.project),I(null)}finally{a(null)}}},[e,s,m,v,I,a,!0]);return{handleCreateNew:V,handleDeleteSession:H,handleRenameSession:F,openRenameModal:D}}function ea({activeRunId:e,activeThreadId:r,activeBridgeSessionKey:s,availableKnowledgeBases:n,brandingNewThreadLabel:i,deleteTarget:l,draft:p,loadActiveThread:g,renameDraft:j,renameTarget:K,runtimeProvider:A,searchParams:w,selectedKnowledgeBaseIds:m,selectedWorkspaceId:k,taskState:N,updateTaskState:C,applyLocalCoreThreadDetail:S,armReplyTimeout:_,clearReplyTimeout:U,refreshSessionsForProject:I,reserveNextMessageOrder:E,settlePreviewMessages:X,setActiveRunId:a,setActiveSessionAgentType:L,setActiveSessionId:z,setActiveSessionKey:R,setActiveSessionName:B,setBridgeError:M,setDeleteTarget:J,setDraft:P,setMessages:y,setPendingPermissionRequest:x,setPendingSessionAction:f,setRenameDraft:v,setRenameTarget:V,setSearchParams:D,setSending:F,setTyping:H,holdBlankComposerRef:O,lastSessionByProjectRef:d,nextMessageOrderRef:h,pendingTurnRef:T,progressSequenceByTurnRef:c,taskStateRef:b}){const W={runtimeProvider:A,selectedProject:k,updateTaskState:C,applyLocalCoreThreadDetail:S,clearReplyTimeout:U,refreshSessionsForProject:I,setBridgeError:M,setMessages:y,setPendingPermissionRequest:x,setTyping:H,holdBlankComposerRef:O,nextMessageOrderRef:h,pendingTurnRef:T,progressSequenceByTurnRef:c,taskStateRef:b},G={setActiveRunId:a,setActiveSessionAgentType:L,setActiveSessionId:z,setActiveSessionKey:R,setActiveSessionName:B},le={setDeleteTarget:J,setPendingSessionAction:f,setRenameDraft:v,setRenameTarget:V},be={holdBlankComposerRef:O,lastSessionByProjectRef:d,nextMessageOrderRef:h,pendingTurnRef:T,progressSequenceByTurnRef:c,taskStateRef:b},q={setBridgeError:M,setMessages:y,setPendingPermissionRequest:x,setTyping:H},{handleSend:de,handleStopTask:ee}=Gr({activeRunId:e,activeThreadId:r,activeBridgeSessionKey:s,availableKnowledgeBases:n,brandingNewThreadLabel:i,draft:p,loadActiveThread:g,selectedKnowledgeBaseIds:m,taskState:N,armReplyTimeout:_,reserveNextMessageOrder:E,settlePreviewMessages:X,setDraft:P,setSending:F,...W,...G,...q,...be}),{handleCreateNew:ce,handleDeleteSession:te,handleRenameSession:re,openRenameModal:ae}=qr({activeThreadId:r,brandingNewThreadLabel:i,deleteTarget:l,renameDraft:j,renameTarget:K,searchParams:w,selectedKnowledgeBaseIds:m,setSearchParams:D,...W,...G,...le,...q});return{handleCreateNew:ce,handleDeleteSession:te,handleRenameSession:re,handleSend:de,handleStopTask:ee,openRenameModal:ae}}function ta({activeThreadId:e,brandingReplyTimeoutLabel:r,setSelectedKnowledgeBaseIds:s,setActiveRunId:n,setActiveSessionAgentType:i,setActiveSessionId:l,setActiveSessionKey:p,setActiveSessionName:g,setBridgeError:j,setSelectedProject:K,setThreadGroups:A}){const[w,m]=o.useState([]),[k,N]=o.useState(null),[C,S]=o.useState(!1),[_,U]=o.useState("idle"),I=o.useRef(null),E=o.useRef("reply"),X=o.useRef({}),a=o.useRef(0),L=o.useRef(null),z=o.useRef(!1),R=o.useRef({}),B=o.useRef("idle"),M=o.useRef(""),J=o.useMemo(()=>He(w),[w]),P=xr(_),y=hr(_),x=mr(_,C);o.useEffect(()=>{M.current=e},[e]);const f=o.useCallback((c,b="unspecified")=>{const W=B.current;B.current=c,U(c),W!==c&&console.info("[desktop-chat] task_state",{from:W,to:c,reason:b,threadId:M.current})},[]),v=o.useCallback(()=>{I.current&&(window.clearTimeout(I.current),I.current=null)},[]),V=o.useCallback((c="reply")=>{v(),E.current=c,I.current=window.setTimeout(()=>{S(!1),L.current=null,N(null),f("idle","reply-timeout"),j(c==="permission_continue"?r:"Agent did not respond in time. Check AgentDock runtime logs or adjust the model/provider.")},tr)},[r,v,j,f]),D=o.useCallback(()=>{m(c=>c.map(b=>b.actionStatus||b.actionPending?{...b,actionPending:!1,actionStatus:void 0}:b))},[]),F=o.useCallback(c=>{m(b=>sr(b,c))},[]),H=o.useCallback(()=>{const c=a.current;return a.current+=1,c},[]),O=o.useCallback(c=>{const b=L.current;if(b&&c&&b.sessionKey===c){const W=b.userOrder+1;a.current<W&&(a.current=W)}return H()},[H]),d=o.useCallback(c=>{const b=c||crypto.randomUUID(),W=(R.current[b]||0)+1;return R.current[b]=W,`${b}-progress-${W}`},[]),h=o.useCallback(c=>{m(b=>nr(b,c))},[]);return{applyLocalCoreThreadDetail:o.useCallback(c=>{X.current[c.workspaceId]=c.id,K(c.workspaceId),l(c.id),p(c.bridgeSessionKey||""),g(c.title),i(c.agentType||""),n(c.runId||""),s(c.selectedKnowledgeBaseIds||[]),N(c.pendingPermissionRequest||null),A(W=>ur(W,c.workspaceId,Ze(c))),z.current=!1,R.current={};const b=ir(c.messages||[]);L.current=null,a.current=b.reduce((W,G)=>Math.max(W,G.order+1),0),m(He(b))},[n,i,l,p,g,s,K,A,N]),armReplyTimeout:V,clearActionStatuses:D,clearReplyTimeout:v,holdBlankComposerRef:z,lastSessionByProjectRef:X,messages:w,nextMessageOrderRef:a,pendingPermissionRequest:k,finalizeTurnMessages:h,nextProgressMessageId:d,pendingTurnRef:L,progressSequenceByTurnRef:R,renderedMessages:J,reserveAssistantMessageOrder:O,reserveNextMessageOrder:H,setMessages:m,setPendingPermissionRequest:N,settlePreviewMessages:F,setTyping:S,taskHint:x,taskInputLocked:y,taskRunning:P,taskState:_,taskStateRef:B,typing:C,updateTaskState:f}}function ra(){const[e,r]=Nt(),[s,n]=o.useState([]),[i,l]=o.useState(""),[p,g]=o.useState([]),[j,K]=o.useState(""),[A,w]=o.useState(""),[m,k]=o.useState(""),[N,C]=o.useState(""),[S,_]=o.useState(""),[U,I]=o.useState(""),[E,X]=o.useState(""),[a,L]=o.useState([]),[z,R]=o.useState([]),[B,M]=o.useState(null),[J,P]=o.useState(""),[y,x]=o.useState(null),[f,v]=o.useState(null),[V,D]=o.useState(null),[F,H]=o.useState(!1),[O,d]=o.useState(""),h=o.useRef(0),T=o.useRef(null),c=e.get("project")||"",b=e.get("session")||"",W=et(),{applyLocalCoreThreadDetail:G,armReplyTimeout:le,clearActionStatuses:be,clearReplyTimeout:q,finalizeTurnMessages:de,holdBlankComposerRef:ee,lastSessionByProjectRef:ce,nextMessageOrderRef:te,nextProgressMessageId:re,pendingPermissionRequest:ae,pendingTurnRef:ue,progressSequenceByTurnRef:pe,renderedMessages:me,reserveAssistantMessageOrder:Ce,reserveNextMessageOrder:ge,setMessages:se,setPendingPermissionRequest:ne,settlePreviewMessages:ie,setTyping:oe,taskHint:Se,taskInputLocked:u,taskRunning:$,taskState:Y,taskStateRef:ze,typing:tt,updateTaskState:ke}=ta({activeThreadId:j,brandingReplyTimeoutLabel:W.replyTimeoutLabel,setSelectedKnowledgeBaseIds:R,setActiveRunId:_,setActiveSessionAgentType:C,setActiveSessionId:K,setActiveSessionKey:w,setActiveSessionName:k,setBridgeError:d,setSelectedProject:l,setThreadGroups:g}),{loading:rt,refreshRuntime:at,runtime:ye,runtimeProvider:xe,serviceRunning:Pe,showSessionKey:st,transportReady:nt}=Or({requestedProject:c,selectedProject:i,setSelectedProject:l,clearReplyTimeout:q,updateTaskState:ke,setTyping:oe}),{filteredThreadGroups:it,loadActiveThread:Te,refreshThreadsForWorkspace:Be}=Fr({activeThreadId:j,requestedWorkspaceId:c,requestedThreadId:b,runtimeDefaultWorkspaceId:ye==null?void 0:ye.settings.defaultProject,runtimeProvider:xe,searchParams:e,selectedWorkspaceId:i,serviceRunning:Pe,workspaceIds:s,threadGroups:p,threadSearch:E,setSelectedKnowledgeBaseIds:R,setActiveRunId:_,setActiveSessionAgentType:C,setActiveSessionId:K,setActiveSessionKey:w,setActiveSessionName:k,setBridgeError:d,setMessages:se,setPendingPermissionRequest:ne,setProjects:n,setSearchParams:r,setSelectedProject:l,setThreadGroups:g,setTyping:oe,applyLocalCoreThreadDetail:G,clearReplyTimeout:q,updateTaskState:ke,holdBlankComposerRef:ee,lastSessionByProjectRef:ce,nextMessageOrderRef:te,pendingTurnRef:ue,progressSequenceByTurnRef:pe});o.useEffect(()=>{var he;(he=T.current)==null||he.scrollIntoView({behavior:"smooth"})},[me,tt]);const De=o.useCallback(async()=>{try{const he=await Ct();L(he.bases||[])}catch{L([])}},[xe]);o.useEffect(()=>{De()},[De]);const ot=o.useCallback(async he=>{const Ke=Array.from(new Set(he.map(fe=>String(fe||"").trim()).filter(Boolean))),Le=h.current+1;if(h.current=Le,R(Ke),!(!i||!j))try{const fe=xe==="local_core"?(await _e(j,Ke)).knowledgeBaseIds:await At(i,j,Ke);h.current===Le&&R(fe)}catch(fe){h.current===Le&&d(fe instanceof Error?fe.message:"Failed to save selected knowledge bases.")}},[j,xe,i,d]),{handleBridgeAction:lt}=Zr({activeAgentType:N,activeThreadId:j,activeRunId:S,activeBridgeSessionKey:A,runtimeProvider:xe,selectedWorkspaceId:i,clearActionStatuses:be,clearReplyTimeout:q,finalizeTurnMessages:de,nextProgressMessageId:re,refreshThreadsForWorkspace:Be,reserveAssistantMessageOrder:Ce,reserveNextMessageOrder:ge,settlePreviewMessages:ie,setActiveRunId:_,setBridgeError:d,setMessages:se,setPendingBridgeActionId:D,setTyping:oe,setPendingPermissionRequest:ne,updateTaskState:ke,armReplyTimeout:le,pendingTurnRef:ue,progressSequenceByTurnRef:pe,sendAction:Xe,taskStateRef:ze}),{handleCreateNew:dt,handleDeleteSession:ct,handleRenameSession:ut,handleSend:pt,handleStopTask:mt,openRenameModal:xt}=ea({activeRunId:S,activeThreadId:j,activeBridgeSessionKey:A,availableKnowledgeBases:a,brandingNewThreadLabel:W.newThreadLabel,deleteTarget:y,draft:U,loadActiveThread:Te,renameDraft:J,renameTarget:B,runtimeProvider:xe,searchParams:e,selectedKnowledgeBaseIds:z,selectedWorkspaceId:i,taskState:Y,updateTaskState:ke,applyLocalCoreThreadDetail:G,armReplyTimeout:le,clearReplyTimeout:q,refreshSessionsForProject:Be,reserveNextMessageOrder:ge,settlePreviewMessages:ie,setActiveRunId:_,setActiveSessionAgentType:C,setActiveSessionId:K,setActiveSessionKey:w,setActiveSessionName:k,setBridgeError:d,setDeleteTarget:x,setDraft:I,setMessages:se,setPendingPermissionRequest:ne,setPendingSessionAction:v,setRenameDraft:P,setRenameTarget:M,setSearchParams:r,setSending:H,setTyping:oe,holdBlankComposerRef:ee,lastSessionByProjectRef:ce,nextMessageOrderRef:te,pendingTurnRef:ue,progressSequenceByTurnRef:pe,taskStateRef:ze});return{activeRunId:S,activeSessionId:j,activeSessionKey:A,activeSessionName:m,bridgeError:O,branding:W,deleteTarget:y,draft:U,endRef:T,filteredSessionGroups:it,handleBridgeAction:lt,handleCreateNew:dt,handleDeleteSession:ct,handleRenameSession:ut,handleSend:pt,handleStopTask:mt,availableKnowledgeBases:a,loadActiveSession:Te,loading:rt,openRenameModal:xt,pendingBridgeActionId:V,pendingPermissionRequest:ae,pendingSessionAction:f,projects:s,refreshRuntime:at,renameDraft:J,renameTarget:B,renderedMessages:me,runtime:ye,sending:F,selectedKnowledgeBaseIds:z,serviceRunning:Pe,sessionSearch:E,selectedProject:i,setDeleteTarget:x,setDraft:I,setSelectedKnowledgeBaseIds:ot,setRenameDraft:P,setRenameTarget:M,setSelectedProject:l,setSessionSearch:X,showSessionKey:st,taskHint:Se,taskInputLocked:u,taskRunning:$,taskState:Y,transportReady:nt}}function ka(){const[e,r]=o.useState(!1),s=o.useRef(null),[n,i]=o.useState(""),[l,p]=o.useState(!1),{activeRunId:g,activeSessionId:j,activeSessionKey:K,activeSessionName:A,bridgeError:w,branding:m,deleteTarget:k,draft:N,endRef:C,filteredSessionGroups:S,handleBridgeAction:_,handleCreateNew:U,handleDeleteSession:I,handleRenameSession:E,handleSend:X,handleStopTask:a,availableKnowledgeBases:L,loadActiveSession:z,loading:R,openRenameModal:B,pendingBridgeActionId:M,pendingPermissionRequest:J,pendingSessionAction:P,projects:y,refreshRuntime:x,renameDraft:f,renameTarget:v,renderedMessages:V,runtime:D,sending:F,selectedKnowledgeBaseIds:H,serviceRunning:O,sessionSearch:d,selectedProject:h,setDeleteTarget:T,setDraft:c,setSelectedKnowledgeBaseIds:b,setRenameDraft:W,setRenameTarget:G,setSelectedProject:le,setSessionSearch:be,showSessionKey:q,taskHint:de,taskInputLocked:ee,taskRunning:ce,taskState:te,transportReady:re}=ra(),ae=o.useMemo(()=>Lr(H,L),[L,H]),ue=o.useMemo(()=>Mr(L,n),[L,n]),pe=o.useMemo(()=>Ar(ue,H),[ue,H]),me=o.useMemo(()=>Ir(S,h),[S,h]),Ce=o.useMemo(()=>_r(y,h),[y,h]),ge=o.useMemo(()=>zr(me),[me]),se=(D==null?void 0:D.phase)==="starting",ne=H.length,ie=Pr(J),oe=Br({serviceRunning:O,transportReady:re,taskState:te,taskInputLocked:ee,startFirstPlaceholder:m.startFirstPlaceholder,waitingRuntimePlaceholder:m.waitingRuntimePlaceholder,sendPlaceholder:m.sendPlaceholder}),Se=Dr({draft:N,serviceRunning:O,transportReady:re,sending:F,selectedProject:h});return o.useEffect(()=>{const u=$=>{var Y;(Y=s.current)!=null&&Y.contains($.target)||r(!1)};return e&&document.addEventListener("mousedown",u),()=>{document.removeEventListener("mousedown",u)}},[e]),o.useEffect(()=>{if(!e)return;const u=window.requestAnimationFrame(()=>{var Y;const $=(Y=s.current)==null?void 0:Y.querySelector("input");$ instanceof HTMLInputElement&&$.focus()});return()=>window.cancelAnimationFrame(u)},[e]),R?t.jsx("div",{className:"flex h-64 items-center justify-center text-sm text-slate-500 animate-pulse",children:"正在加载桌面对话…"}):t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"relative h-full min-h-0 overflow-hidden border-slate-200/80 bg-[#f5f5f7] animate-fade-in dark:border-white/[0.06] dark:bg-[#0b0d10] md:rounded-[24px] md:border",children:t.jsxs("div",{className:"grid h-full min-h-0 grid-cols-1 md:grid-cols-[288px_minmax(0,1fr)]",children:[t.jsxs("aside",{className:Z("min-h-0 flex-col border-r border-slate-200/80 bg-[#fbfbfd] dark:border-white/[0.06] dark:bg-[#111214]",l?"flex":"hidden md:flex","absolute inset-0 z-30 md:static md:z-auto"),children:[t.jsxs("div",{className:"border-b border-slate-200/80 px-4 py-4 dark:border-white/[0.06]",children:[t.jsxs("div",{className:"flex items-start justify-between gap-3",children:[t.jsxs("div",{className:"min-w-0",children:[t.jsx("p",{className:"text-[11px] font-medium tracking-[0.18em] text-slate-400 dark:text-slate-500",children:"会话导航"}),t.jsx("h2",{className:"mt-2 text-[1.65rem] font-semibold leading-tight text-slate-900 dark:text-white",children:m.chatHeading})]}),t.jsx(Q,{size:"sm",variant:"ghost",onClick:()=>void x(),className:"rounded-full border border-slate-200 bg-white text-slate-500 hover:bg-slate-100 dark:border-white/[0.08] dark:bg-white/[0.04] dark:text-slate-300 dark:hover:bg-white/[0.08]",children:t.jsx(Ft,{size:14})}),t.jsx(Q,{size:"sm",variant:"ghost",onClick:()=>p(!1),className:"rounded-full border border-slate-200 bg-white text-slate-500 hover:bg-slate-100 dark:border-white/[0.08] dark:bg-white/[0.04] dark:text-slate-300 dark:hover:bg-white/[0.08] md:hidden",children:t.jsx(Re,{size:14})})]}),t.jsxs("div",{className:"mt-4 space-y-3",children:[t.jsxs("div",{className:"space-y-2",children:[t.jsx("label",{className:"block text-[11px] font-medium tracking-[0.18em] text-slate-400 dark:text-slate-500",children:m.scopeLabel}),t.jsxs("select",{value:h,onChange:u=>le(u.target.value),"data-testid":"desktop-chat-project-select","aria-label":m.scopeLabel,className:"w-full rounded-[18px] border border-slate-200 bg-white px-3 py-2.5 text-sm text-slate-900 outline-none transition focus:border-primary/40 focus:ring-2 focus:ring-primary/10 dark:border-white/[0.08] dark:bg-[#0b1016] dark:text-white",children:[t.jsx("option",{value:"",children:m.scopeSelectPlaceholder}),Ce.map(u=>t.jsx("option",{value:u,children:u},u))]})]}),t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsxs(Q,{size:"md",variant:"secondary",onClick:()=>void U(),"data-testid":"desktop-chat-new-chat",className:"h-11 flex-1 rounded-full border border-slate-200 bg-white text-slate-700 hover:bg-slate-100 dark:border-white/[0.08] dark:bg-white/[0.05] dark:text-slate-100 dark:hover:bg-white/[0.09]",children:[t.jsx(Fe,{size:15}),m.newThreadLabel]}),!O||se?t.jsx(Q,{size:"md",onClick:()=>void It().then(x),disabled:se||O,"data-testid":"desktop-chat-start-service",className:"h-11 shrink-0 rounded-2xl px-3.5",children:se?m.startingRuntimeLabel:m.startRuntimeLabel}):null]}),t.jsxs("div",{className:"relative",children:[t.jsx(Wt,{size:14,className:"absolute left-3 top-1/2 -translate-y-1/2 text-slate-400 dark:text-slate-500"}),t.jsx(Me,{value:d,onChange:u=>be(u.target.value),placeholder:m.searchPlaceholder,"aria-label":m.searchPlaceholder,"data-testid":"desktop-chat-session-search",className:"h-11 rounded-[18px] border-slate-200 bg-white pl-9 text-slate-900 placeholder:text-slate-400 dark:border-white/[0.08] dark:bg-[#0b1016] dark:text-white dark:placeholder:text-slate-500"})]}),t.jsx("div",{className:"flex items-center justify-between gap-3 rounded-[18px] border border-slate-200/80 bg-white px-3 py-2 dark:border-white/[0.06] dark:bg-white/[0.03]",children:t.jsxs("span",{className:"inline-flex items-center gap-2 text-xs font-medium text-slate-600 dark:text-slate-300",children:[t.jsx(ve,{size:7,className:Z("fill-current",O?"text-primary":"text-slate-300 dark:text-slate-500")}),O?"服务在线":se?"服务启动中":"服务未启动"]})})]}),D!=null&&D.service.lastError?t.jsx("div",{className:"mt-3 rounded-2xl border border-red-500/20 bg-red-50 px-3 py-2 text-xs text-red-600 dark:bg-red-500/10 dark:text-red-200",children:D.service.lastError}):null,D!=null&&D.pendingRestart?t.jsx("div",{className:"mt-3 rounded-2xl border border-amber-500/20 bg-amber-50 px-3 py-2 text-xs text-amber-700 dark:bg-amber-500/10 dark:text-amber-200",children:m.pendingRestartLabel}):null]}),t.jsx("div",{className:"min-h-0 flex-1 overflow-y-auto px-3 pb-24 pt-3 [scrollbar-gutter:stable] md:pb-3",children:!h&&!ge?t.jsxs("div",{className:"rounded-2xl border border-dashed border-slate-200/80 bg-white/70 px-4 py-6 text-center dark:border-white/[0.07] dark:bg-white/[0.02]",children:[t.jsx("p",{className:"text-sm font-medium text-slate-700 dark:text-slate-200",children:"先选择一个项目"}),t.jsx("p",{className:"mt-2 text-xs leading-5 text-slate-500 dark:text-slate-400",children:"选择项目后展示对应会话列表。"})]}):ge?t.jsx("div",{className:"space-y-4",children:me.map(u=>t.jsxs("section",{className:"space-y-2",children:[!h&&u.sessions.length>0?t.jsxs("div",{"data-testid":"desktop-chat-session-group","data-project":u.project,className:"flex items-center justify-between px-2 pt-1",children:[t.jsx("p",{className:"text-[11px] font-medium tracking-[0.08em] text-slate-400 dark:text-slate-500",children:u.project}),t.jsxs("p",{className:"text-[10px] text-slate-400 dark:text-slate-500",children:[u.sessions.length," ",m.collectionLabel]})]}):null,u.sessions.map($=>t.jsx("div",{"data-testid":"desktop-chat-session-row","data-session-id":$.id,"data-project":u.project,role:"button",tabIndex:0,onClick:()=>{z(u.project,$.id),p(!1)},onKeyDown:Y=>{(Y.key==="Enter"||Y.key===" ")&&(Y.preventDefault(),z(u.project,$.id),p(!1))},className:Z("group relative overflow-hidden rounded-[18px] border px-4 py-3 text-left transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-primary/15",$.id===j?"border-primary/20 bg-primary/5 shadow-[inset_2px_0_0_0_rgba(0,102,204,0.92)] dark:border-primary/25 dark:bg-primary/10":"border-transparent bg-white hover:border-slate-200 hover:bg-[#fcfcfd] dark:bg-white/[0.03] dark:hover:border-white/[0.08] dark:hover:bg-white/[0.05]"),children:t.jsxs("div",{className:"flex items-start justify-between gap-3",children:[t.jsxs("div",{"data-testid":"desktop-chat-session-open","data-session-id":$.id,"data-project":u.project,className:"min-w-0 flex-1",children:[t.jsx("div",{className:"flex items-center gap-2",children:t.jsx("span",{className:"truncate text-sm font-medium text-slate-900 dark:text-white",children:$.name})}),t.jsx("p",{className:"mt-1 text-[11px] text-slate-400 dark:text-slate-500",children:_t($.updatedAt||$.createdAt)}),$.excerpt?t.jsx("p",{className:"mt-2 line-clamp-2 text-[11px] leading-5 text-slate-500 dark:text-slate-400",children:$.excerpt.replace(/\n/g," ")}):null,q&&$.bridgeSessionKey?t.jsx("p",{className:"mt-2 truncate text-[11px] text-slate-400 dark:text-slate-500",children:$.bridgeSessionKey}):null]}),t.jsxs("div",{className:"flex items-center gap-1 opacity-0 transition-opacity duration-200 group-hover:opacity-100 focus-within:opacity-100",children:[t.jsx(Q,{size:"sm",variant:"ghost",onClick:Y=>{Y.stopPropagation(),B(u.project,$)},"data-testid":"desktop-chat-session-rename","data-session-id":$.id,"data-project":u.project,className:"text-slate-400 hover:bg-slate-100 hover:text-slate-900 dark:hover:bg-white/[0.08] dark:hover:text-white",children:t.jsx(Vt,{size:14})}),t.jsx(Q,{size:"sm",variant:"ghost",className:"text-red-400 hover:bg-red-50 hover:text-red-600 dark:hover:bg-red-500/10 dark:hover:text-red-200","data-testid":"desktop-chat-session-delete","data-session-id":$.id,"data-project":u.project,onClick:Y=>{Y.stopPropagation(),T({project:u.project,id:$.id,name:$.name})},children:t.jsx(Jt,{size:14})})]})]})},$.id))]},u.project))}):t.jsxs("div",{className:"rounded-2xl border border-dashed border-slate-200/80 bg-white/70 px-4 py-6 text-center dark:border-white/[0.07] dark:bg-white/[0.02]",children:[t.jsx("p",{className:"text-sm font-medium text-slate-700 dark:text-slate-200",children:d.trim()?"没有匹配的会话":"当前还没有桌面会话"}),t.jsx("p",{className:"mt-2 text-xs leading-5 text-slate-500 dark:text-slate-400",children:d.trim()?"换个关键词试试。":"发送第一条消息后,这里会出现新的会话记录。"})]})})]}),t.jsxs("section",{className:"flex min-h-0 flex-col bg-white dark:bg-[#0b0d10]",children:[t.jsxs("div",{className:"border-b border-slate-200/80 px-4 py-3 dark:border-white/[0.06] sm:px-6 sm:py-4",children:[t.jsxs("div",{className:"flex items-start gap-3",children:[t.jsx(Q,{size:"sm",variant:"secondary",onClick:()=>p(!0),className:"mt-0.5 h-9 w-9 shrink-0 rounded-xl px-0 md:hidden","aria-label":"Open sessions",children:t.jsx(Gt,{size:16})}),t.jsxs("div",{className:"min-w-0 flex-1",children:[t.jsx("p",{className:"text-[11px] font-medium tracking-[0.16em] text-slate-400 dark:text-slate-500",children:"当前会话"}),t.jsx("h2",{className:"mt-1 truncate text-[1.75rem] font-semibold leading-tight text-slate-900 dark:text-white sm:mt-2 sm:text-[1.95rem] sm:leading-none","data-testid":"desktop-chat-active-title",children:A||m.activeConversationFallback})]})]}),t.jsxs("div",{className:"mt-3 flex flex-wrap items-center gap-2 text-xs text-slate-500 dark:text-slate-400",children:[h?t.jsx("span",{className:"inline-flex items-center rounded-full bg-slate-100 px-2.5 py-1 text-[11px] text-slate-600 dark:bg-white/[0.05] dark:text-slate-300",children:h}):null,t.jsx("span",{className:"inline-flex items-center gap-1 rounded-full bg-slate-100 px-2.5 py-1 text-[10px] uppercase tracking-[0.18em] text-slate-500 dark:bg-white/[0.05] dark:text-slate-400",children:lr(D==null?void 0:D.phase)}),re?t.jsxs("span",{className:"inline-flex items-center gap-1 rounded-full bg-primary/10 px-2.5 py-1 text-primary dark:text-primary",children:[t.jsx(ve,{size:6,className:"fill-current"})," ",m.runtimeOnlineLabel]}):t.jsxs("span",{className:"inline-flex items-center gap-1 rounded-full bg-slate-100 px-2.5 py-1 text-slate-500 dark:bg-white/[0.05] dark:text-slate-400",children:[t.jsx(Ht,{size:12})," ",m.runtimeOfflineLabel]}),q&&K?t.jsx("span",{className:"truncate text-[11px] text-slate-400 dark:text-slate-500",children:K}):null]})]}),t.jsxs("div",{className:"flex-1 overflow-y-auto px-3 py-4 [scrollbar-gutter:stable] sm:px-6 sm:py-5",children:[V.length===0?t.jsx("div",{className:"flex h-full min-h-[18rem] items-center justify-center",children:t.jsxs("div",{className:"w-full max-w-2xl rounded-[24px] border border-slate-200 bg-[#fbfbfd] px-5 py-8 text-center dark:border-white/[0.06] dark:bg-white/[0.03] sm:px-8 sm:py-10",children:[t.jsx("div",{className:"mx-auto flex h-12 w-12 items-center justify-center rounded-full bg-primary/10 text-primary",children:t.jsx(Fe,{size:22})}),t.jsx("h3",{className:"mt-4 text-lg font-semibold text-slate-900 dark:text-white sm:text-xl",children:"开始一段新的桌面对话"}),t.jsx("p",{className:"mx-auto mt-3 max-w-xl text-sm leading-6 text-slate-500 dark:text-slate-400",children:h?`当前项目是 ${h}。直接提问即可创建会话并开始对话。`:"先在左侧选择项目,然后直接输入你的问题。"}),t.jsx("div",{className:"mt-4 flex flex-wrap justify-center gap-2",children:ae.length>0?ae.map(u=>t.jsx("span",{className:"rounded-full bg-primary/10 px-3 py-1 text-xs text-primary dark:bg-primary/10 dark:text-primary",children:u.name},u.id)):t.jsx("span",{className:"rounded-full bg-slate-100 px-3 py-1 text-xs text-slate-500 dark:bg-white/[0.05] dark:text-slate-400",children:"当前未限制知识库范围"})})]})}):t.jsx("div",{className:"mx-auto w-full max-w-4xl space-y-5",children:V.map(u=>Tr(u,ie)?t.jsx(Ur,{message:u,pendingBridgeActionId:M,onAction:($,Y)=>void _($,Y)},u.id):null)}),de?t.jsxs("div",{className:"mt-5 flex items-center gap-2 text-sm text-slate-400","data-testid":"desktop-chat-task-hint",children:[t.jsx(ve,{size:8,className:"fill-current animate-pulse"})," ",de]}):null,w?t.jsx("div",{className:"mt-4 rounded-2xl border border-amber-400/20 bg-amber-50 px-3 py-2 text-sm text-amber-800 dark:bg-amber-500/10 dark:text-amber-100","data-testid":"desktop-chat-bridge-error",children:w}):null,t.jsx("div",{ref:C})]}),t.jsx("div",{className:"border-t border-slate-200/80 px-3 py-3 dark:border-white/[0.06] sm:px-6",children:t.jsxs("div",{className:"mx-auto max-w-4xl rounded-[24px] border border-slate-200 bg-[#fbfbfd] p-2 dark:border-white/[0.08] dark:bg-[#111214] sm:p-2.5",children:[t.jsxs("div",{className:"relative",ref:s,children:[t.jsx("div",{className:"rounded-[18px] border border-slate-200 bg-white px-3 py-2 dark:border-white/[0.06] dark:bg-white/[0.03]",children:t.jsxs("div",{className:"flex flex-wrap items-center gap-2 sm:flex-nowrap",children:[t.jsx("p",{className:"shrink-0 text-[11px] font-medium text-slate-500 dark:text-slate-400",children:"知识库范围"}),t.jsxs(Q,{size:"sm",variant:"secondary",disabled:!h,onClick:()=>r(u=>!u),"data-testid":"desktop-chat-knowledge-base-toggle",className:"shrink-0 rounded-full border border-slate-200 bg-[#f5f5f7] text-slate-700 hover:bg-slate-100 dark:border-white/[0.08] dark:bg-white/[0.06] dark:text-slate-100 dark:hover:bg-white/[0.1]",children:[t.jsx(Yt,{size:13}),ne>0?"调整知识库":"选择知识库"]}),t.jsx("div",{className:"order-3 flex min-w-full flex-1 items-center gap-2 overflow-x-auto whitespace-nowrap [scrollbar-gutter:stable] sm:order-none sm:min-w-0",children:ae.length===0?t.jsx("span",{className:"text-xs text-slate-400",children:h?"当前未限制知识库范围":"选择项目后可设置知识库范围"}):ae.map(u=>t.jsxs("span",{className:"inline-flex shrink-0 items-center gap-2 rounded-full border border-slate-200 bg-[#f5f5f7] px-2.5 py-1 text-xs text-slate-700 dark:border-white/[0.08] dark:bg-white/[0.06] dark:text-slate-100",children:[t.jsx("span",{className:"max-w-[10rem] truncate",children:u.name}),u.fileCount>0?t.jsxs("span",{className:"text-[10px] text-slate-500",children:[u.fileCount," 文档"]}):null,t.jsx("button",{type:"button",onClick:()=>void b(H.filter($=>$!==u.id)),className:"text-slate-500 transition-colors hover:text-slate-900 dark:hover:text-white","data-testid":"desktop-chat-knowledge-base-remove",children:t.jsx(Re,{size:12})})]},u.id))}),t.jsx("p",{className:"ml-auto shrink-0 text-[11px] text-slate-400 sm:ml-0",children:h?ne>0?`已选 ${ne} 个`:"未限制":"请先选项目"})]})}),e?t.jsxs("div",{className:"animate-float-in absolute bottom-full left-0 right-0 z-20 mb-3 max-h-[70dvh] overflow-hidden rounded-[22px] border border-slate-200 bg-white p-3 dark:border-white/[0.08] dark:bg-[#0c1117]",children:[t.jsxs("div",{className:"flex items-center justify-between gap-3",children:[t.jsxs("div",{children:[t.jsx("p",{className:"text-sm font-semibold text-slate-900 dark:text-white",children:"选择知识库"}),t.jsx("p",{className:"text-[11px] text-slate-400",children:"已选项排在前面,方便快速确认范围。"})]}),ne>0?t.jsx("button",{type:"button",onClick:()=>void b([]),className:"text-xs text-slate-400 transition-colors hover:text-slate-900 dark:hover:text-white",children:"清空"}):null]}),t.jsx(Me,{value:n,onChange:u=>i(u.target.value),placeholder:"搜索知识库","aria-label":"搜索知识库",className:"mt-3 rounded-[18px] border-slate-200 bg-white text-slate-900 placeholder:text-slate-400 dark:border-white/[0.08] dark:bg-white/[0.04] dark:text-white dark:placeholder:text-slate-500"}),t.jsx("div",{className:"mt-3 max-h-64 space-y-2 overflow-y-auto pr-2 [scrollbar-gutter:stable]",children:pe.length===0?t.jsx("div",{className:"rounded-xl border border-dashed border-slate-200 px-3 py-4 text-center text-xs text-slate-500 dark:border-white/[0.08]",children:"没有匹配的知识库"}):pe.map(u=>{const $=H.includes(u.id);return t.jsxs("button",{type:"button",onClick:()=>void b($?H.filter(Y=>Y!==u.id):[...H,u.id]),"data-testid":"desktop-chat-knowledge-base-select",className:Z("flex w-full items-start gap-3 rounded-[16px] border px-3 py-3 text-left transition-all duration-200",$?"border-primary/25 bg-primary/5 dark:border-primary/30 dark:bg-primary/10":"border-slate-200 bg-white hover:border-slate-300 hover:bg-[#fafafa] dark:border-white/[0.06] dark:bg-white/[0.03] dark:hover:border-white/[0.12] dark:hover:bg-white/[0.05]"),children:[t.jsx("span",{className:Z("mt-0.5 inline-flex h-5 w-5 items-center justify-center rounded-full border text-[10px]",$?"border-primary bg-primary text-white":"border-slate-300 text-transparent dark:border-white/[0.12]"),children:t.jsx(Ye,{size:12})}),t.jsxs("span",{className:"min-w-0 flex-1",children:[t.jsx("span",{className:"block truncate text-sm font-medium text-slate-900 dark:text-white",children:u.name}),t.jsxs("span",{className:"mt-1 block text-[11px] text-slate-400",children:[u.fileCount," 文档",u.description?` · ${u.description}`:""]})]})]},u.id)})})]}):null]}),t.jsx("div",{className:"mt-2.5",children:ie?t.jsx(Rr,{card:ie,loading:M===ie.id,onAction:u=>void _(ie,u),testId:"desktop-chat-composer-permission-card",className:"border-primary/45 bg-white shadow-[0_14px_34px_rgba(0,122,255,0.12)] dark:border-primary/35 dark:bg-[#090d12]"}):t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"relative",children:[t.jsx(St,{"data-testid":"desktop-chat-input",value:N,onChange:u=>c(u.target.value),onKeyDown:u=>{u.key==="Enter"&&!u.shiftKey&&!ee&&(u.preventDefault(),X())},rows:3,placeholder:oe,"aria-label":oe,disabled:!O||!re||F||!h||ee,className:"min-h-[104px] rounded-[22px] border-slate-200 bg-white px-4 pb-16 pt-3 text-[15px] leading-6 text-slate-900 placeholder:text-slate-400 focus-visible:ring-primary/15 dark:border-white/[0.08] dark:bg-[#090d12] dark:text-white dark:placeholder:text-slate-500 sm:min-h-[116px] sm:px-5 sm:pt-4"}),ce?t.jsxs(Q,{variant:"danger",onClick:()=>void a(),disabled:!K&&!g||te==="stopping","data-testid":"desktop-chat-stop-task",className:"absolute bottom-3 right-3 h-11 min-w-11 rounded-full bg-red-50 px-3 text-red-600 shadow-none hover:bg-red-100 dark:bg-red-500/12 dark:text-red-200 dark:hover:bg-red-500/18 sm:h-12 sm:min-w-[118px] sm:px-5",children:[t.jsx(Oe,{size:16,className:"animate-spin"}),t.jsx("span",{className:"hidden sm:inline",children:te==="stopping"?"停止中":"停止任务"})]}):t.jsx(Q,{onClick:()=>void X(),disabled:!Se,"data-testid":"desktop-chat-send",className:"absolute bottom-3 right-3 h-11 w-11 rounded-full bg-primary px-0 text-white shadow-none hover:bg-[#0071e3] disabled:bg-slate-300 disabled:text-white disabled:opacity-100 dark:bg-primary dark:text-white dark:hover:bg-[#2997ff] dark:disabled:bg-white/20 dark:disabled:text-white/55 sm:h-12 sm:w-12",children:F?t.jsx(Oe,{size:18,className:"animate-spin"}):t.jsx($t,{size:22,strokeWidth:2.2})})]}),t.jsxs("div",{className:"mt-2 hidden items-center justify-between px-1 pr-[4.5rem] text-[11px] text-slate-500 dark:text-slate-400 sm:flex",children:[t.jsx("span",{children:"Enter 发送,Shift + Enter 换行"}),t.jsx("span",{children:h?"范围会随当前线程保存":"请先选择项目"})]})]})})]})})]})]})}),t.jsx(Ue,{open:!!v,onClose:()=>G(null),title:"重命名会话",children:t.jsxs("div",{className:"space-y-4",children:[t.jsx(Me,{value:f,onChange:u=>W(u.target.value),onInput:u=>W(u.target.value),placeholder:"输入会话名称","data-testid":"desktop-chat-rename-input"}),t.jsxs("div",{className:"flex justify-end gap-2",children:[t.jsx(Q,{variant:"secondary",onClick:()=>G(null),"data-testid":"desktop-chat-rename-cancel",children:"取消"}),t.jsx(Q,{onClick:()=>void E(),loading:P==="rename",disabled:!f.trim(),"data-testid":"desktop-chat-rename-save",children:"保存名称"})]})]})}),t.jsx(Ue,{open:!!k,onClose:()=>T(null),title:"删除会话",children:t.jsxs("div",{className:"space-y-4",children:[t.jsxs("p",{className:"text-sm text-gray-600 dark:text-gray-300",children:["确定删除 ",t.jsx("span",{className:"font-medium text-gray-900 dark:text-white",children:k==null?void 0:k.name})," 吗?这会移除该会话的本地保存记录。"]}),t.jsxs("div",{className:"flex justify-end gap-2",children:[t.jsx(Q,{variant:"secondary",onClick:()=>T(null),"data-testid":"desktop-chat-delete-cancel",children:"取消"}),t.jsx(Q,{variant:"danger",onClick:()=>void I(),loading:P==="delete","data-testid":"desktop-chat-delete-confirm",children:"删除会话"})]})]})})]})}export{ka as default};
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*!
|
|
2
|
-
Theme: GitHub
|
|
3
|
-
Description: Light theme as seen on github.com
|
|
4
|
-
Author: github.com
|
|
5
|
-
Maintainer: @Hirse
|
|
6
|
-
Updated: 2021-05-15
|
|
7
|
-
|
|
8
|
-
Outdated base version: https://github.com/primer/github-syntax-light
|
|
9
|
-
Current colors taken from GitHub's CSS
|
|
10
|
-
*/.hljs{color:#24292e;background:#fff}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#d73a49}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#6f42c1}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id{color:#005cc5}.hljs-regexp,.hljs-string,.hljs-meta .hljs-string{color:#032f62}.hljs-built_in,.hljs-symbol{color:#e36209}.hljs-comment,.hljs-code,.hljs-formula{color:#6a737d}.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo{color:#22863a}.hljs-subst{color:#24292e}.hljs-section{color:#005cc5;font-weight:700}.hljs-bullet{color:#735c0f}.hljs-emphasis{color:#24292e;font-style:italic}.hljs-strong{color:#24292e;font-weight:700}.hljs-addition{color:#22863a;background-color:#f0fff4}.hljs-deletion{color:#b31d28;background-color:#ffeef0}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com
|
|
11
|
-
*/*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 240 20% 97%;--foreground: 240 3% 12%;--card: 0 0% 100%;--card-foreground: 240 3% 12%;--popover: 0 0% 100%;--popover-foreground: 240 3% 12%;--primary: 211 100% 50%;--primary-foreground: 0 0% 100%;--secondary: 240 11% 93%;--secondary-foreground: 240 4% 20%;--muted: 240 10% 94%;--muted-foreground: 240 4% 44%;--accent: 211 100% 50%;--accent-foreground: 0 0% 100%;--accent-dim: 211 92% 43%;--destructive: 0 72% 51%;--destructive-foreground: 0 0% 100%;--border: 240 6% 85%;--input: 240 6% 85%;--ring: 211 100% 50%;--radius: .625rem}.dark{--background: 240 4% 9%;--foreground: 240 20% 96%;--card: 240 4% 12%;--card-foreground: 240 20% 96%;--popover: 240 4% 12%;--popover-foreground: 240 20% 96%;--primary: 211 100% 60%;--primary-foreground: 0 0% 100%;--secondary: 240 4% 16%;--secondary-foreground: 240 20% 96%;--muted: 240 4% 16%;--muted-foreground: 240 5% 68%;--accent: 211 100% 60%;--accent-foreground: 0 0% 100%;--accent-dim: 211 90% 55%;--destructive: 0 63% 31%;--destructive-foreground: 0 0% 98%;--border: 240 4% 22%;--input: 240 4% 22%;--ring: 211 100% 60%}*{border-color:hsl(var(--border))}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,SF Pro Text,SF Pro Display,Inter,Segoe UI,sans-serif;background:radial-gradient(circle at 16% 0%,rgba(0,122,255,.05),transparent 30%),linear-gradient(180deg,#fffffffa,#f5f5f7fa);color:hsl(var(--foreground));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.dark body{background:radial-gradient(circle at 16% 0%,rgba(10,132,255,.08),transparent 32%),linear-gradient(180deg,#121214fa,#0a0a0cfa)}.platform-windows.dark body{background:hsl(var(--background))}.container{width:100%;margin-right:auto;margin-left:auto;padding-right:2rem;padding-left:2rem}@media(min-width:1400px){.container{max-width:1400px}}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows),0 3px 0 var(--tw-prose-kbd-shadows);font-size:.875em;border-radius:.3125rem;padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-inline-start:.375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body: #374151;--tw-prose-headings: #111827;--tw-prose-lead: #4b5563;--tw-prose-links: #111827;--tw-prose-bold: #111827;--tw-prose-counters: #6b7280;--tw-prose-bullets: #d1d5db;--tw-prose-hr: #e5e7eb;--tw-prose-quotes: #111827;--tw-prose-quote-borders: #e5e7eb;--tw-prose-captions: #6b7280;--tw-prose-kbd: #111827;--tw-prose-kbd-shadows: rgb(17 24 39 / 10%);--tw-prose-code: #111827;--tw-prose-pre-code: #e5e7eb;--tw-prose-pre-bg: #1f2937;--tw-prose-th-borders: #d1d5db;--tw-prose-td-borders: #e5e7eb;--tw-prose-invert-body: #d1d5db;--tw-prose-invert-headings: #fff;--tw-prose-invert-lead: #9ca3af;--tw-prose-invert-links: #fff;--tw-prose-invert-bold: #fff;--tw-prose-invert-counters: #9ca3af;--tw-prose-invert-bullets: #4b5563;--tw-prose-invert-hr: #374151;--tw-prose-invert-quotes: #f3f4f6;--tw-prose-invert-quote-borders: #374151;--tw-prose-invert-captions: #9ca3af;--tw-prose-invert-kbd: #fff;--tw-prose-invert-kbd-shadows: rgb(255 255 255 / 10%);--tw-prose-invert-code: #fff;--tw-prose-invert-pre-code: #d1d5db;--tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);--tw-prose-invert-th-borders: #4b5563;--tw-prose-invert-td-borders: #374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.5714286em;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-sm{font-size:.875rem;line-height:1.7142857}.prose-sm :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em;margin-bottom:1.1428571em}.prose-sm :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2857143em;line-height:1.5555556;margin-top:.8888889em;margin-bottom:.8888889em}.prose-sm :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em;margin-bottom:1.3333333em;padding-inline-start:1.1111111em}.prose-sm :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:2.1428571em;margin-top:0;margin-bottom:.8em;line-height:1.2}.prose-sm :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.4285714em;margin-top:1.6em;margin-bottom:.8em;line-height:1.4}.prose-sm :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2857143em;margin-top:1.5555556em;margin-bottom:.4444444em;line-height:1.5555556}.prose-sm :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.4285714em;margin-bottom:.5714286em;line-height:1.4285714}.prose-sm :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7142857em;margin-bottom:1.7142857em}.prose-sm :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7142857em;margin-bottom:1.7142857em}.prose-sm :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-sm :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7142857em;margin-bottom:1.7142857em}.prose-sm :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;border-radius:.3125rem;padding-top:.1428571em;padding-inline-end:.3571429em;padding-bottom:.1428571em;padding-inline-start:.3571429em}.prose-sm :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em}.prose-sm :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em}.prose-sm :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em}.prose-sm :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;line-height:1.6666667;margin-top:1.6666667em;margin-bottom:1.6666667em;border-radius:.25rem;padding-top:.6666667em;padding-inline-end:1em;padding-bottom:.6666667em;padding-inline-start:1em}.prose-sm :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em;margin-bottom:1.1428571em;padding-inline-start:1.5714286em}.prose-sm :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em;margin-bottom:1.1428571em;padding-inline-start:1.5714286em}.prose-sm :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.2857143em;margin-bottom:.2857143em}.prose-sm :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4285714em}.prose-sm :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4285714em}.prose-sm :where(.prose-sm>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5714286em;margin-bottom:.5714286em}.prose-sm :where(.prose-sm>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(.prose-sm>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em}.prose-sm :where(.prose-sm>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(.prose-sm>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em}.prose-sm :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5714286em;margin-bottom:.5714286em}.prose-sm :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em;margin-bottom:1.1428571em}.prose-sm :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.2857143em;padding-inline-start:1.5714286em}.prose-sm :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2.8571429em;margin-bottom:2.8571429em}.prose-sm :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;line-height:1.5}.prose-sm :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:1em;padding-bottom:.6666667em;padding-inline-start:1em}.prose-sm :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-sm :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-sm :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.6666667em;padding-inline-end:1em;padding-bottom:.6666667em;padding-inline-start:1em}.prose-sm :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-sm :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-sm :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7142857em;margin-bottom:1.7142857em}.prose-sm :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-sm :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;line-height:1.3333333;margin-top:.6666667em}.prose-sm :where(.prose-sm>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(.prose-sm>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.app-surface{border-radius:20px;border-width:1px;border-color:#00000014;background-color:#fffc;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.platform-windows .app-surface,.platform-windows.dark .app-surface{background-color:hsl(var(--card))}.app-surface:is(.dark *){border-color:#ffffff12;background-color:#ffffff0e}.app-panel{border-radius:18px;border-width:1px;border-color:#00000014;--tw-bg-opacity: 1;background-color:rgb(251 251 253 / var(--tw-bg-opacity, 1));--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.app-panel:is(.dark *){border-color:#ffffff12;--tw-bg-opacity: 1;background-color:rgb(17 18 20 / var(--tw-bg-opacity, 1))}.app-list-row{border-radius:16px;border-width:1px;border-color:#00000014;--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));padding:.75rem 1rem;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.app-list-row:hover{border-color:#0000001f;--tw-bg-opacity: 1;background-color:rgb(252 252 253 / var(--tw-bg-opacity, 1))}.app-list-row:is(.dark *){border-color:#ffffff12;background-color:#ffffff09}.app-list-row:hover:is(.dark *){border-color:#ffffff1c;background-color:#ffffff0f}.app-list-row-active{border-color:hsl(var(--primary) / .25);background-color:hsl(var(--primary) / .05);--tw-shadow: inset 2px 0 0 0 rgba(0,102,204,.92);--tw-shadow-colored: inset 2px 0 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.app-list-row-active:is(.dark *){border-color:hsl(var(--primary) / .25);background-color:hsl(var(--primary) / .1)}.app-toolbar{border-radius:18px;border-width:1px;border-color:#00000014;--tw-bg-opacity: 1;background-color:rgb(251 251 253 / var(--tw-bg-opacity, 1));padding:.75rem 1rem}.platform-windows.dark .app-toolbar{background-color:hsl(var(--card))}.app-toolbar:is(.dark *){border-color:#ffffff12;background-color:#ffffff0a}.app-icon-button{height:2.25rem;width:2.25rem;border-radius:9999px;padding-left:0;padding-right:0}.app-segment{flex-shrink:0;border-radius:9999px;padding:.375rem .75rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.app-segment-active{background-color:hsl(var(--primary));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.app-segment-idle{background-color:#0000000b;color:hsl(var(--muted-foreground))}.platform-windows.dark .app-segment-idle{background-color:hsl(var(--card))}.app-segment-idle:hover{background-color:#00000012;color:hsl(var(--foreground))}.app-segment-idle:is(.dark *){background-color:#ffffff0e}.app-segment-idle:hover:is(.dark *){background-color:#ffffff17}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{left:0;right:0}.inset-x-4{left:1rem;right:1rem}.bottom-0{bottom:0}.bottom-3{bottom:.75rem}.bottom-full{bottom:100%}.left-0{left:0}.left-2{left:.5rem}.left-3{left:.75rem}.right-0{right:0}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.top-0{top:0}.top-1\/2{top:50%}.top-2{top:.5rem}.top-4{top:1rem}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-50{z-index:50}.order-3{order:3}.col-span-2{grid-column:span 2 / span 2}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-auto{margin-left:auto;margin-right:auto}.my-4{margin-top:1rem;margin-bottom:1rem}.-mt-0\.5{margin-top:-.125rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-2\.5{margin-bottom:.625rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-2\.5{margin-top:.625rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.line-clamp-3{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.hidden{display:none}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-64{height:16rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[100dvh\]{height:100dvh}.h-\[5\.25rem\]{height:5.25rem}.h-\[calc\(100vh-8rem\)\]{height:calc(100vh - 8rem)}.h-full{height:100%}.max-h-64{max-height:16rem}.max-h-72{max-height:18rem}.max-h-96{max-height:24rem}.max-h-\[65vh\]{max-height:65vh}.max-h-\[70dvh\]{max-height:70dvh}.max-h-\[70vh\]{max-height:70vh}.max-h-\[calc\(100dvh-2rem\)\]{max-height:calc(100dvh - 2rem)}.min-h-0{min-height:0px}.min-h-20{min-height:5rem}.min-h-64{min-height:16rem}.min-h-\[104px\]{min-height:104px}.min-h-\[112px\]{min-height:112px}.min-h-\[18rem\]{min-height:18rem}.min-h-\[2\.5rem\]{min-height:2.5rem}.min-h-\[32rem\]{min-height:32rem}.min-h-\[60px\]{min-height:60px}.min-h-\[88px\]{min-height:88px}.min-h-\[calc\(100vh-8rem\)\]{min-height:calc(100vh - 8rem)}.min-h-screen{min-height:100vh}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-3\.5{width:.875rem}.w-36{width:9rem}.w-4{width:1rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-56{width:14rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-auto{width:auto}.w-full{width:100%}.min-w-0{min-width:0px}.min-w-11{min-width:2.75rem}.min-w-48{min-width:12rem}.min-w-\[16rem\]{min-width:16rem}.min-w-\[260px\]{min-width:260px}.min-w-\[4\.5rem\]{min-width:4.5rem}.min-w-\[760px\]{min-width:760px}.min-w-\[8rem\]{min-width:8rem}.min-w-full{min-width:100%}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-7xl{max-width:80rem}.max-w-\[10rem\]{max-width:10rem}.max-w-\[4\.25rem\]{max-width:4.25rem}.max-w-\[70\%\]{max-width:70%}.max-w-\[78\%\]{max-width:78%}.max-w-\[calc\(100\%-2\.25rem\)\]{max-width:calc(100% - 2.25rem)}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-none{max-width:none}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.animate-fade-in{animation:fadeIn .4s ease}@keyframes floatIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.animate-float-in{animation:floatIn .4s ease}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[9rem_5rem_minmax\(0\,1fr\)\]{grid-template-columns:9rem 5rem minmax(0,1fr)}.grid-cols-\[minmax\(0\,1\.8fr\)_120px_120px_160px_60px\]{grid-template-columns:minmax(0,1.8fr) 120px 120px 160px 60px}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-1{row-gap:.25rem}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-black\/\[0\.08\]>:not([hidden])~:not([hidden]){border-color:#00000014}.divide-border>:not([hidden])~:not([hidden]){border-color:hsl(var(--border))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-\[16px\]{border-radius:16px}.rounded-\[18px\]{border-radius:18px}.rounded-\[20px\]{border-radius:20px}.rounded-\[22px\]{border-radius:22px}.rounded-\[24px\]{border-radius:24px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.rounded-bl-lg{border-bottom-left-radius:var(--radius)}.rounded-bl-sm{border-bottom-left-radius:calc(var(--radius) - 4px)}.rounded-br-lg{border-bottom-right-radius:var(--radius)}.rounded-br-sm{border-bottom-right-radius:calc(var(--radius) - 4px)}.rounded-tl-lg{border-top-left-radius:var(--radius)}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-amber-200{--tw-border-opacity: 1;border-color:rgb(253 230 138 / var(--tw-border-opacity, 1))}.border-amber-200\/80{border-color:#fde68acc}.border-amber-300{--tw-border-opacity: 1;border-color:rgb(252 211 77 / var(--tw-border-opacity, 1))}.border-amber-400\/20{border-color:#fbbf2433}.border-amber-500\/20{border-color:#f59e0b33}.border-black\/10{border-color:#0000001a}.border-black\/20{border-color:#0003}.border-black\/\[0\.08\]{border-color:#00000014}.border-blue-200{--tw-border-opacity: 1;border-color:rgb(191 219 254 / var(--tw-border-opacity, 1))}.border-border{border-color:hsl(var(--border))}.border-destructive\/20{border-color:hsl(var(--destructive) / .2)}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.border-gray-200\/60{border-color:#e5e7eb99}.border-gray-200\/70{border-color:#e5e7ebb3}.border-gray-200\/80{border-color:#e5e7ebcc}.border-gray-300\/90{border-color:#d1d5dbe6}.border-input{border-color:hsl(var(--input))}.border-primary{border-color:hsl(var(--primary))}.border-primary\/20{border-color:hsl(var(--primary) / .2)}.border-primary\/25{border-color:hsl(var(--primary) / .25)}.border-primary\/30{border-color:hsl(var(--primary) / .3)}.border-primary\/45{border-color:hsl(var(--primary) / .45)}.border-red-100{--tw-border-opacity: 1;border-color:rgb(254 226 226 / var(--tw-border-opacity, 1))}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity, 1))}.border-red-500\/20{border-color:#ef444433}.border-slate-200{--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1))}.border-slate-200\/80{border-color:#e2e8f0cc}.border-slate-300{--tw-border-opacity: 1;border-color:rgb(203 213 225 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.border-violet-200{--tw-border-opacity: 1;border-color:rgb(221 214 254 / var(--tw-border-opacity, 1))}.border-white\/55{border-color:#ffffff8c}.bg-\[\#f0f0f0\]{--tw-bg-opacity: 1;background-color:rgb(240 240 240 / var(--tw-bg-opacity, 1))}.bg-\[\#f5f5f7\]{--tw-bg-opacity: 1;background-color:rgb(245 245 247 / var(--tw-bg-opacity, 1))}.bg-\[\#fafafa\]{--tw-bg-opacity: 1;background-color:rgb(250 250 250 / var(--tw-bg-opacity, 1))}.bg-\[\#fbfbfd\]{--tw-bg-opacity: 1;background-color:rgb(251 251 253 / var(--tw-bg-opacity, 1))}.bg-\[\#fff8eb\]{--tw-bg-opacity: 1;background-color:rgb(255 248 235 / var(--tw-bg-opacity, 1))}.bg-accent{background-color:hsl(var(--accent))}.bg-amber-100{--tw-bg-opacity: 1;background-color:rgb(254 243 199 / var(--tw-bg-opacity, 1))}.bg-amber-50{--tw-bg-opacity: 1;background-color:rgb(255 251 235 / var(--tw-bg-opacity, 1))}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-amber-500\/10{background-color:#f59e0b1a}.bg-background{background-color:hsl(var(--background))}.bg-background\/45{background-color:hsl(var(--background) / .45)}.bg-background\/60{background-color:hsl(var(--background) / .6)}.bg-black\/50{background-color:#00000080}.bg-black\/\[0\.035\]{background-color:#00000009}.bg-black\/\[0\.03\]{background-color:#00000008}.bg-black\/\[0\.045\]{background-color:#0000000b}.bg-black\/\[0\.05\]{background-color:#0000000d}.bg-black\/\[0\.07\]{background-color:#00000012}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-card\/70{background-color:hsl(var(--card) / .7)}.bg-card\/80{background-color:hsl(var(--card) / .8)}.bg-destructive{background-color:hsl(var(--destructive))}.bg-destructive\/10{background-color:hsl(var(--destructive) / .1)}.bg-emerald-500\/10{background-color:#10b9811a}.bg-foreground\/15{background-color:hsl(var(--foreground) / .15)}.bg-fuchsia-500{--tw-bg-opacity: 1;background-color:rgb(217 70 239 / var(--tw-bg-opacity, 1))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.bg-gray-200{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.bg-gray-200\/80{background-color:#e5e7ebcc}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.bg-gray-50\/80{background-color:#f9fafbcc}.bg-indigo-500{--tw-bg-opacity: 1;background-color:rgb(99 102 241 / var(--tw-bg-opacity, 1))}.bg-muted{background-color:hsl(var(--muted))}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/10{background-color:hsl(var(--primary) / .1)}.bg-primary\/15{background-color:hsl(var(--primary) / .15)}.bg-primary\/5{background-color:hsl(var(--primary) / .05)}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-red-50\/80{background-color:#fef2f2cc}.bg-red-500\/10{background-color:#ef44441a}.bg-red-600{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.bg-secondary{background-color:hsl(var(--secondary))}.bg-slate-100{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.bg-transparent{background-color:transparent}.bg-violet-50{--tw-bg-opacity: 1;background-color:rgb(245 243 255 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\/70{background-color:#ffffffb3}.bg-white\/90{background-color:#ffffffe6}.bg-\[linear-gradient\(180deg\,rgba\(255\,255\,255\,0\.55\)\,rgba\(255\,255\,255\,0\.18\)_48\%\,rgba\(255\,255\,255\,0\.08\)\)\]{background-image:linear-gradient(180deg,#ffffff8c,#ffffff2e 48%,#ffffff14)}.bg-\[radial-gradient\(circle_at_top\,hsl\(var\(--secondary\)\)_0\,hsl\(var\(--background\)\)_42\%\,hsl\(var\(--background\)\)_78\%\)\]{background-image:radial-gradient(circle at top,hsl(var(--secondary)) 0,hsl(var(--background)) 42%,hsl(var(--background)) 78%)}.fill-current{fill:currentColor}.fill-primary{fill:hsl(var(--primary))}.stroke-black\/10{stroke:#0000001a}.stroke-black\/70{stroke:#000000b3}.stroke-white{stroke:#fff}.p-0{padding:0}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-0{padding-left:0;padding-right:0}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-3\.5{padding-top:.875rem;padding-bottom:.875rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-1{padding-bottom:.25rem}.pb-14{padding-bottom:3.5rem}.pb-16{padding-bottom:4rem}.pb-24{padding-bottom:6rem}.pb-4{padding-bottom:1rem}.pb-\[max\(env\(safe-area-inset-bottom\)\,0\.5rem\)\]{padding-bottom:max(env(safe-area-inset-bottom),.5rem)}.pl-8{padding-left:2rem}.pl-9{padding-left:2.25rem}.pr-1{padding-right:.25rem}.pr-2{padding-right:.5rem}.pr-8{padding-right:2rem}.pr-\[4\.5rem\]{padding-right:4.5rem}.pt-0{padding-top:0}.pt-0\.5{padding-top:.125rem}.pt-1{padding-top:.25rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-5{padding-top:1.25rem}.pt-7{padding-top:1.75rem}.pt-8{padding-top:2rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-\[0\.875em\]{font-size:.875em}.text-\[1\.4rem\]{font-size:1.4rem}.text-\[1\.65rem\]{font-size:1.65rem}.text-\[1\.75rem\]{font-size:1.75rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[15px\]{font-size:15px}.text-\[17px\]{font-size:17px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-7{line-height:1.75rem}.leading-\[1\.6\]{line-height:1.6}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-tight{line-height:1.25}.tracking-\[0\.08em\]{letter-spacing:.08em}.tracking-\[0\.12em\]{letter-spacing:.12em}.tracking-\[0\.14em\]{letter-spacing:.14em}.tracking-\[0\.16em\]{letter-spacing:.16em}.tracking-\[0\.18em\]{letter-spacing:.18em}.tracking-\[0\.2em\]{letter-spacing:.2em}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-amber-600{--tw-text-opacity: 1;color:rgb(217 119 6 / var(--tw-text-opacity, 1))}.text-amber-700{--tw-text-opacity: 1;color:rgb(180 83 9 / var(--tw-text-opacity, 1))}.text-amber-700\/80{color:#b45309cc}.text-amber-800{--tw-text-opacity: 1;color:rgb(146 64 14 / var(--tw-text-opacity, 1))}.text-amber-900{--tw-text-opacity: 1;color:rgb(120 53 15 / var(--tw-text-opacity, 1))}.text-amber-950{--tw-text-opacity: 1;color:rgb(69 26 3 / var(--tw-text-opacity, 1))}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-emerald-500{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.text-emerald-600{--tw-text-opacity: 1;color:rgb(5 150 105 / var(--tw-text-opacity, 1))}.text-foreground{color:hsl(var(--foreground))}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-gray-800{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.text-inherit{color:inherit}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-muted-foreground\/45{color:hsl(var(--muted-foreground) / .45)}.text-muted-foreground\/75{color:hsl(var(--muted-foreground) / .75)}.text-muted-foreground\/80{color:hsl(var(--muted-foreground) / .8)}.text-pink-600{--tw-text-opacity: 1;color:rgb(219 39 119 / var(--tw-text-opacity, 1))}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-slate-300{--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.text-slate-500{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.text-slate-600{--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.text-slate-700{--tw-text-opacity: 1;color:rgb(51 65 85 / var(--tw-text-opacity, 1))}.text-slate-800{--tw-text-opacity: 1;color:rgb(30 41 59 / var(--tw-text-opacity, 1))}.text-slate-900{--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.text-slate-950{--tw-text-opacity: 1;color:rgb(2 6 23 / var(--tw-text-opacity, 1))}.text-transparent{color:transparent}.text-violet-700{--tw-text-opacity: 1;color:rgb(109 40 217 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.opacity-90{opacity:.9}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_-12px_32px_rgba\(15\,23\,42\,0\.10\)\]{--tw-shadow: 0 -12px 32px rgba(15,23,42,.1);--tw-shadow-colored: 0 -12px 32px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_20px_-6px_hsl\(var\(--primary\)\/0\.55\)\]{--tw-shadow: 0 0 20px -6px hsl(var(--primary)/.55);--tw-shadow-colored: 0 0 20px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_14px_34px_rgba\(0\,122\,255\,0\.12\)\]{--tw-shadow: 0 14px 34px rgba(0,122,255,.12);--tw-shadow-colored: 0 14px 34px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_18px_40px_rgba\(0\,0\,0\,0\.12\)\]{--tw-shadow: 0 18px 40px rgba(0,0,0,.12);--tw-shadow-colored: 0 18px 40px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_1px_1px_rgba\(0\,0\,0\,0\.04\)\]{--tw-shadow: 0 1px 1px rgba(0,0,0,.04);--tw-shadow-colored: 0 1px 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[inset_-1px_0_0_rgba\(255\,255\,255\,0\.36\)\]{--tw-shadow: inset -1px 0 0 rgba(255,255,255,.36);--tw-shadow-colored: inset -1px 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[inset_2px_0_0_0_rgba\(0\,102\,204\,0\.92\)\]{--tw-shadow: inset 2px 0 0 0 rgba(0,102,204,.92);--tw-shadow-colored: inset 2px 0 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-primary\/10{--tw-shadow-color: hsl(var(--primary) / .1);--tw-shadow: var(--tw-shadow-colored) }.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-primary\/25{--tw-ring-color: hsl(var(--primary) / .25) }.drop-shadow-\[0_14px_28px_rgba\(0\,122\,255\,0\.22\)\]{--tw-drop-shadow: drop-shadow(0 14px 28px rgba(0,122,255,.22));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur{--tw-backdrop-blur: blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-2xl{--tw-backdrop-blur: blur(40px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-\[2px\]{--tw-backdrop-blur: blur(2px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-\[34px\]{--tw-backdrop-blur: blur(34px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.\[-webkit-app-region\:drag\]{-webkit-app-region:drag}.\[scrollbar-gutter\:stable\]{scrollbar-gutter:stable}.\[scrollbar-width\:none\]{scrollbar-width:none}.\[stop-color\:\#E5E5EA\]{stop-color:#e5e5ea}.\[stop-color\:\#F5F5F7\]{stop-color:#f5f5f7}.\[stop-color\:\#FFFFFF\]{stop-color:#fff}.platform-windows [class*=backdrop-blur],.platform-windows [class*="supports-[backdrop-filter]"]{-webkit-backdrop-filter:none!important;backdrop-filter:none!important}.platform-windows .bg-background\/60,.platform-windows .bg-background\/45,.platform-windows .bg-background\/72{background-color:hsl(var(--background))!important}.platform-windows .bg-white\/18,.platform-windows .bg-white\/24,.platform-windows .bg-white\/62,.platform-windows .bg-white\/76,.platform-windows .bg-white\/80,.platform-windows .bg-white\/88,.platform-windows .bg-white\/90,.platform-windows.dark .dark\:bg-\[\#1c1c1e\]\/26,.platform-windows.dark .dark\:bg-\[\#1c1c1e\]\/34,.platform-windows.dark .dark\:bg-\[\#111113\]\/88,.platform-windows.dark .dark\:bg-\[\#2c2c2e\]\/90,.platform-windows.dark .dark\:bg-white\/\[0\.04\],.platform-windows.dark .dark\:bg-white\/\[0\.055\],.platform-windows.dark .dark\:bg-white\/\[0\.06\]{background-color:hsl(var(--card))!important}.platform-windows .animate-fade-in,.platform-windows .animate-float-in,.platform-windows .animate-slide-up{animation:none!important}.platform-windows .transition-all{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow!important;transition-duration:.12s!important}.platform-windows .duration-300{transition-duration:.15s!important}pre code.hljs{background:transparent;padding:0}.chat-user-glass{border:1px solid rgba(0,102,204,.16);background:linear-gradient(180deg,#0071e324,#06c3);box-shadow:inset 0 1px #ffffff6b}.chat-user-glass:before{content:none}.dark .chat-user-glass{border-color:#2997ff2e;background:linear-gradient(180deg,#2997ff38,#0066cc3d);box-shadow:inset 0 1px #ffffff29}.dark .chat-user-glass:before{content:none}.dark .hljs{color:#e6edf3}.dark .hljs-keyword,.dark .hljs-selector-tag{color:#ff7b72}.dark .hljs-string,.dark .hljs-attr{color:#a5d6ff}.dark .hljs-comment,.dark .hljs-quote{color:#8b949e;font-style:italic}.dark .hljs-number,.dark .hljs-literal{color:#79c0ff}.dark .hljs-title,.dark .hljs-title\.class_,.dark .hljs-title\.function_{color:#d2a8ff}.dark .hljs-built_in,.dark .hljs-type,.dark .hljs-params,.dark .hljs-variable,.dark .hljs-template-variable{color:#ffa657}.dark .hljs-addition{color:#aff5b4;background-color:#2ea04326}.dark .hljs-deletion{color:#ffdcd7;background-color:#f8514926}.dark .hljs-meta{color:#79c0ff}.dark .hljs-selector-class,.dark .hljs-selector-id{color:#7ee787}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#8080804d;border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#80808080}.dark\:prose-invert:is(.dark *){--tw-prose-body: var(--tw-prose-invert-body);--tw-prose-headings: var(--tw-prose-invert-headings);--tw-prose-lead: var(--tw-prose-invert-lead);--tw-prose-links: var(--tw-prose-invert-links);--tw-prose-bold: var(--tw-prose-invert-bold);--tw-prose-counters: var(--tw-prose-invert-counters);--tw-prose-bullets: var(--tw-prose-invert-bullets);--tw-prose-hr: var(--tw-prose-invert-hr);--tw-prose-quotes: var(--tw-prose-invert-quotes);--tw-prose-quote-borders: var(--tw-prose-invert-quote-borders);--tw-prose-captions: var(--tw-prose-invert-captions);--tw-prose-kbd: var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows: var(--tw-prose-invert-kbd-shadows);--tw-prose-code: var(--tw-prose-invert-code);--tw-prose-pre-code: var(--tw-prose-invert-pre-code);--tw-prose-pre-bg: var(--tw-prose-invert-pre-bg);--tw-prose-th-borders: var(--tw-prose-invert-th-borders);--tw-prose-td-borders: var(--tw-prose-invert-td-borders) }.file\:border-0::file-selector-button{border-width:0px}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-slate-400::-moz-placeholder{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.placeholder\:text-slate-400::placeholder{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.last\:border-0:last-child{border-width:0px}.last\:border-b-0:last-child{border-bottom-width:0px}.focus-within\:opacity-100:focus-within{opacity:1}.hover\:border-black\/\[0\.12\]:hover{border-color:#0000001f}.hover\:border-gray-300:hover{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.hover\:border-primary\/25:hover{border-color:hsl(var(--primary) / .25)}.hover\:border-slate-200:hover{--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1))}.hover\:border-slate-300:hover{--tw-border-opacity: 1;border-color:rgb(203 213 225 / var(--tw-border-opacity, 1))}.hover\:bg-\[\#0071e3\]:hover{--tw-bg-opacity: 1;background-color:rgb(0 113 227 / var(--tw-bg-opacity, 1))}.hover\:bg-\[\#fafafa\]:hover{--tw-bg-opacity: 1;background-color:rgb(250 250 250 / var(--tw-bg-opacity, 1))}.hover\:bg-\[\#fcfcfd\]:hover{--tw-bg-opacity: 1;background-color:rgb(252 252 253 / var(--tw-bg-opacity, 1))}.hover\:bg-accent-dim:hover{background-color:hsl(var(--accent-dim))}.hover\:bg-accent\/10:hover{background-color:hsl(var(--accent) / .1)}.hover\:bg-amber-100:hover{--tw-bg-opacity: 1;background-color:rgb(254 243 199 / var(--tw-bg-opacity, 1))}.hover\:bg-black\/\[0\.025\]:hover{background-color:#00000006}.hover\:bg-black\/\[0\.04\]:hover{background-color:#0000000a}.hover\:bg-black\/\[0\.05\]:hover{background-color:#0000000d}.hover\:bg-black\/\[0\.08\]:hover{background-color:#00000014}.hover\:bg-destructive\/10:hover{background-color:hsl(var(--destructive) / .1)}.hover\:bg-destructive\/80:hover{background-color:hsl(var(--destructive) / .8)}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-gray-100\/80:hover{background-color:#f3f4f6cc}.hover\:bg-gray-100\/90:hover{background-color:#f3f4f6e6}.hover\:bg-gray-200\/70:hover{background-color:#e5e7ebb3}.hover\:bg-gray-300:hover{--tw-bg-opacity: 1;background-color:rgb(209 213 219 / var(--tw-bg-opacity, 1))}.hover\:bg-primary\/10:hover{background-color:hsl(var(--primary) / .1)}.hover\:bg-primary\/80:hover{background-color:hsl(var(--primary) / .8)}.hover\:bg-red-100:hover{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.hover\:bg-red-50:hover{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.hover\:bg-red-500\/10:hover{background-color:#ef44441a}.hover\:bg-red-700:hover{--tw-bg-opacity: 1;background-color:rgb(185 28 28 / var(--tw-bg-opacity, 1))}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-slate-100:hover{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-100\/70:hover{background-color:#f1f5f9b3}.hover\:text-destructive:hover{color:hsl(var(--destructive))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-gray-700:hover{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.hover\:text-primary\/80:hover{color:hsl(var(--primary) / .8)}.hover\:text-red-500:hover{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.hover\:text-red-600:hover{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.hover\:text-slate-700:hover{--tw-text-opacity: 1;color:rgb(51 65 85 / var(--tw-text-opacity, 1))}.hover\:text-slate-900:hover{--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_10px_26px_rgba\(0\,0\,0\,0\.07\)\]:hover{--tw-shadow: 0 10px 26px rgba(0,0,0,.07);--tw-shadow-colored: 0 10px 26px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.focus\:border-primary\/40:focus{border-color:hsl(var(--primary) / .4)}.focus\:bg-accent\/10:focus{background-color:hsl(var(--accent) / .1)}.focus\:text-foreground:focus{color:hsl(var(--foreground))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-primary\/10:focus{--tw-ring-color: hsl(var(--primary) / .1) }.focus\:ring-primary\/15:focus{--tw-ring-color: hsl(var(--primary) / .15) }.focus\:ring-ring:focus{--tw-ring-color: hsl(var(--ring)) }.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px }.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-primary\/15:focus-visible{--tw-ring-color: hsl(var(--primary) / .15) }.focus-visible\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring)) }.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px }.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color: hsl(var(--background)) }.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-slate-300:disabled{--tw-bg-opacity: 1;background-color:rgb(203 213 225 / var(--tw-bg-opacity, 1))}.disabled\:text-white:disabled{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.disabled\:opacity-100:disabled{opacity:1}.disabled\:opacity-50:disabled{opacity:.5}.group:hover .group-hover\:text-foreground{color:hsl(var(--foreground))}.group:hover .group-hover\:opacity-100{opacity:1}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}@keyframes fadeIn{0%{opacity:0;transform:scale(.96) translateY(20px)}to{opacity:1;transform:scale(1)}}.data-\[state\=open\]\:animate-fade-in[data-state=open]{animation:fadeIn .4s ease}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.prose-headings\:font-semibold :is(:where(h1,h2,h3,h4,h5,h6,th):not(:where([class~=not-prose],[class~=not-prose] *))){font-weight:600}.prose-headings\:tracking-tight :is(:where(h1,h2,h3,h4,h5,h6,th):not(:where([class~=not-prose],[class~=not-prose] *))){letter-spacing:-.025em}.prose-h1\:mb-3 :is(:where(h1):not(:where([class~=not-prose],[class~=not-prose] *))){margin-bottom:.75rem}.prose-h1\:mt-5 :is(:where(h1):not(:where([class~=not-prose],[class~=not-prose] *))){margin-top:1.25rem}.prose-h1\:border-b :is(:where(h1):not(:where([class~=not-prose],[class~=not-prose] *))){border-bottom-width:1px}.prose-h1\:border-gray-200 :is(:where(h1):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.prose-h1\:pb-1\.5 :is(:where(h1):not(:where([class~=not-prose],[class~=not-prose] *))){padding-bottom:.375rem}.prose-h1\:text-xl :is(:where(h1):not(:where([class~=not-prose],[class~=not-prose] *))){font-size:1.25rem;line-height:1.75rem}.prose-h2\:mb-2 :is(:where(h2):not(:where([class~=not-prose],[class~=not-prose] *))){margin-bottom:.5rem}.prose-h2\:mt-5 :is(:where(h2):not(:where([class~=not-prose],[class~=not-prose] *))){margin-top:1.25rem}.prose-h2\:text-lg :is(:where(h2):not(:where([class~=not-prose],[class~=not-prose] *))){font-size:1.125rem;line-height:1.75rem}.prose-h3\:mb-2 :is(:where(h3):not(:where([class~=not-prose],[class~=not-prose] *))){margin-bottom:.5rem}.prose-h3\:mt-4 :is(:where(h3):not(:where([class~=not-prose],[class~=not-prose] *))){margin-top:1rem}.prose-h3\:text-base :is(:where(h3):not(:where([class~=not-prose],[class~=not-prose] *))){font-size:1rem;line-height:1.5rem}.prose-p\:my-2\.5 :is(:where(p):not(:where([class~=not-prose],[class~=not-prose] *))){margin-top:.625rem;margin-bottom:.625rem}.prose-p\:leading-relaxed :is(:where(p):not(:where([class~=not-prose],[class~=not-prose] *))){line-height:1.625}.prose-a\:text-accent :is(:where(a):not(:where([class~=not-prose],[class~=not-prose] *))){color:hsl(var(--accent))}.prose-a\:no-underline :is(:where(a):not(:where([class~=not-prose],[class~=not-prose] *))){text-decoration-line:none}.hover\:prose-a\:underline :is(:where(a):not(:where([class~=not-prose],[class~=not-prose] *))):hover{text-decoration-line:underline}.prose-blockquote\:my-3 :is(:where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *))){margin-top:.75rem;margin-bottom:.75rem}.prose-blockquote\:rounded-r-lg :is(:where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *))){border-top-right-radius:var(--radius);border-bottom-right-radius:var(--radius)}.prose-blockquote\:border-l-\[3px\] :is(:where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *))){border-left-width:3px}.prose-blockquote\:border-accent\/40 :is(:where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *))){border-color:hsl(var(--accent) / .4)}.prose-blockquote\:bg-accent\/\[0\.03\] :is(:where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *))){background-color:hsl(var(--accent) / .03)}.prose-blockquote\:px-4 :is(:where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *))){padding-left:1rem;padding-right:1rem}.prose-blockquote\:py-0\.5 :is(:where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *))){padding-top:.125rem;padding-bottom:.125rem}.prose-blockquote\:not-italic :is(:where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *))){font-style:normal}.prose-blockquote\:text-gray-600 :is(:where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.prose-strong\:font-semibold :is(:where(strong):not(:where([class~=not-prose],[class~=not-prose] *))){font-weight:600}.prose-strong\:text-gray-900 :is(:where(strong):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.prose-ol\:my-2 :is(:where(ol):not(:where([class~=not-prose],[class~=not-prose] *))){margin-top:.5rem;margin-bottom:.5rem}.prose-ul\:my-2 :is(:where(ul):not(:where([class~=not-prose],[class~=not-prose] *))){margin-top:.5rem;margin-bottom:.5rem}.prose-li\:my-0\.5 :is(:where(li):not(:where([class~=not-prose],[class~=not-prose] *))){margin-top:.125rem;margin-bottom:.125rem}.prose-table\:text-sm :is(:where(table):not(:where([class~=not-prose],[class~=not-prose] *))){font-size:.875rem;line-height:1.25rem}.prose-th\:border-gray-200 :is(:where(th):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.prose-th\:bg-gray-50 :is(:where(th):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.prose-th\:px-3 :is(:where(th):not(:where([class~=not-prose],[class~=not-prose] *))){padding-left:.75rem;padding-right:.75rem}.prose-th\:py-2 :is(:where(th):not(:where([class~=not-prose],[class~=not-prose] *))){padding-top:.5rem;padding-bottom:.5rem}.prose-td\:border-gray-200 :is(:where(td):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.prose-td\:px-3 :is(:where(td):not(:where([class~=not-prose],[class~=not-prose] *))){padding-left:.75rem;padding-right:.75rem}.prose-td\:py-2 :is(:where(td):not(:where([class~=not-prose],[class~=not-prose] *))){padding-top:.5rem;padding-bottom:.5rem}.prose-img\:rounded-lg :is(:where(img):not(:where([class~=not-prose],[class~=not-prose] *))){border-radius:var(--radius)}.prose-img\:shadow-sm :is(:where(img):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.prose-hr\:my-5 :is(:where(hr):not(:where([class~=not-prose],[class~=not-prose] *))){margin-top:1.25rem;margin-bottom:1.25rem}.prose-hr\:border-gray-200 :is(:where(hr):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.dark\:divide-white\/\[0\.07\]:is(.dark *)>:not([hidden])~:not([hidden]){border-color:#ffffff12}.dark\:border-amber-400\/15:is(.dark *){border-color:#fbbf2426}.dark\:border-amber-400\/20:is(.dark *){border-color:#fbbf2433}.dark\:border-amber-400\/30:is(.dark *){border-color:#fbbf244d}.dark\:border-amber-900\/30:is(.dark *){border-color:#78350f4d}.dark\:border-blue-400\/20:is(.dark *){border-color:#60a5fa33}.dark\:border-gray-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.dark\:border-gray-700\/40:is(.dark *){border-color:#37415166}.dark\:border-gray-700\/60:is(.dark *){border-color:#37415199}.dark\:border-primary\/25:is(.dark *){border-color:hsl(var(--primary) / .25)}.dark\:border-primary\/30:is(.dark *){border-color:hsl(var(--primary) / .3)}.dark\:border-primary\/35:is(.dark *){border-color:hsl(var(--primary) / .35)}.dark\:border-red-400\/20:is(.dark *){border-color:#f8717133}.dark\:border-red-900\/30:is(.dark *){border-color:#7f1d1d4d}.dark\:border-red-900\/40:is(.dark *){border-color:#7f1d1d66}.dark\:border-violet-900\/30:is(.dark *){border-color:#4c1d954d}.dark\:border-white\/20:is(.dark *){border-color:#fff3}.dark\:border-white\/\[0\.06\]:is(.dark *){border-color:#ffffff0f}.dark\:border-white\/\[0\.07\]:is(.dark *){border-color:#ffffff12}.dark\:border-white\/\[0\.08\]:is(.dark *){border-color:#ffffff14}.dark\:border-white\/\[0\.10\]:is(.dark *){border-color:#ffffff1a}.dark\:border-white\/\[0\.12\]:is(.dark *){border-color:#ffffff1f}.dark\:border-white\/\[0\.1\]:is(.dark *){border-color:#ffffff1a}.dark\:bg-\[\#090d12\]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(9 13 18 / var(--tw-bg-opacity, 1))}.dark\:bg-\[\#0b0d10\]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(11 13 16 / var(--tw-bg-opacity, 1))}.dark\:bg-\[\#0b1016\]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(11 16 22 / var(--tw-bg-opacity, 1))}.dark\:bg-\[\#0c1117\]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(12 17 23 / var(--tw-bg-opacity, 1))}.dark\:bg-\[\#0d1117\]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(13 17 23 / var(--tw-bg-opacity, 1))}.dark\:bg-\[\#111214\]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(17 18 20 / var(--tw-bg-opacity, 1))}.dark\:bg-\[\#151516\]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(21 21 22 / var(--tw-bg-opacity, 1))}.dark\:bg-\[\#2c2c2e\]\/90:is(.dark *){background-color:#2c2c2ee6}.dark\:bg-\[rgba\(0\,0\,0\,0\.45\)\]:is(.dark *){background-color:#00000073}.dark\:bg-\[rgba\(255\,255\,255\,0\.04\)\]:is(.dark *){background-color:#ffffff0a}.dark\:bg-amber-400\/15:is(.dark *){background-color:#fbbf2426}.dark\:bg-amber-500\/10:is(.dark *){background-color:#f59e0b1a}.dark\:bg-amber-500\/15:is(.dark *){background-color:#f59e0b26}.dark\:bg-amber-950\/20:is(.dark *){background-color:#451a0333}.dark\:bg-black\/45:is(.dark *){background-color:#00000073}.dark\:bg-blue-500\/10:is(.dark *){background-color:#3b82f61a}.dark\:bg-blue-500\/15:is(.dark *){background-color:#3b82f626}.dark\:bg-destructive\/20:is(.dark *){background-color:hsl(var(--destructive) / .2)}.dark\:bg-gray-700\/80:is(.dark *){background-color:#374151cc}.dark\:bg-gray-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-950:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(3 7 18 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-950\/40:is(.dark *){background-color:#03071266}.dark\:bg-primary:is(.dark *){background-color:hsl(var(--primary))}.dark\:bg-primary\/10:is(.dark *){background-color:hsl(var(--primary) / .1)}.dark\:bg-primary\/15:is(.dark *){background-color:hsl(var(--primary) / .15)}.dark\:bg-red-500\/10:is(.dark *){background-color:#ef44441a}.dark\:bg-red-950\/20:is(.dark *){background-color:#450a0a33}.dark\:bg-red-950\/40:is(.dark *){background-color:#450a0a66}.dark\:bg-transparent:is(.dark *){background-color:transparent}.dark\:bg-violet-950\/20:is(.dark *){background-color:#2e106533}.dark\:bg-white\/\[0\.02\]:is(.dark *){background-color:#ffffff05}.dark\:bg-white\/\[0\.03\]:is(.dark *){background-color:#ffffff08}.dark\:bg-white\/\[0\.04\]:is(.dark *){background-color:#ffffff0a}.dark\:bg-white\/\[0\.05\]:is(.dark *){background-color:#ffffff0d}.dark\:bg-white\/\[0\.06\]:is(.dark *){background-color:#ffffff0f}.dark\:bg-white\/\[0\.08\]:is(.dark *){background-color:#ffffff14}.dark\:bg-white\/\[0\.10\]:is(.dark *){background-color:#ffffff1a}.dark\:bg-\[linear-gradient\(180deg\,rgba\(255\,255\,255\,0\.08\)\,rgba\(255\,255\,255\,0\.025\)_52\%\,rgba\(255\,255\,255\,0\.015\)\)\]:is(.dark *){background-image:linear-gradient(180deg,#ffffff14,#ffffff06 52%,#ffffff04)}.dark\:stroke-black\/80:is(.dark *){stroke:#000c}.dark\:stroke-white:is(.dark *){stroke:#fff}.dark\:stroke-white\/10:is(.dark *){stroke:#ffffff1a}.dark\:text-amber-100:is(.dark *){--tw-text-opacity: 1;color:rgb(254 243 199 / var(--tw-text-opacity, 1))}.dark\:text-amber-100\/70:is(.dark *){color:#fef3c7b3}.dark\:text-amber-200:is(.dark *){--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.dark\:text-amber-300:is(.dark *){--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.dark\:text-amber-50:is(.dark *){--tw-text-opacity: 1;color:rgb(255 251 235 / var(--tw-text-opacity, 1))}.dark\:text-blue-200:is(.dark *){--tw-text-opacity: 1;color:rgb(191 219 254 / var(--tw-text-opacity, 1))}.dark\:text-emerald-300:is(.dark *){--tw-text-opacity: 1;color:rgb(110 231 183 / var(--tw-text-opacity, 1))}.dark\:text-gray-100:is(.dark *){--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.dark\:text-gray-200:is(.dark *){--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.dark\:text-gray-300:is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.dark\:text-gray-400:is(.dark *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.dark\:text-gray-500:is(.dark *){--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.dark\:text-pink-400:is(.dark *){--tw-text-opacity: 1;color:rgb(244 114 182 / var(--tw-text-opacity, 1))}.dark\:text-primary:is(.dark *){color:hsl(var(--primary))}.dark\:text-red-200:is(.dark *){--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}.dark\:text-red-300:is(.dark *){--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.dark\:text-red-400:is(.dark *){--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.dark\:text-slate-100:is(.dark *){--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.dark\:text-slate-200:is(.dark *){--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.dark\:text-slate-300:is(.dark *){--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.dark\:text-slate-400:is(.dark *){--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.dark\:text-slate-50:is(.dark *){--tw-text-opacity: 1;color:rgb(248 250 252 / var(--tw-text-opacity, 1))}.dark\:text-slate-500:is(.dark *){--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.dark\:text-violet-300:is(.dark *){--tw-text-opacity: 1;color:rgb(196 181 253 / var(--tw-text-opacity, 1))}.dark\:text-white:is(.dark *){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.dark\:text-white\/55:is(.dark *){color:#ffffff8c}.dark\:shadow-\[0_-16px_42px_rgba\(0\,0\,0\,0\.34\)\]:is(.dark *){--tw-shadow: 0 -16px 42px rgba(0,0,0,.34);--tw-shadow-colored: 0 -16px 42px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.dark\:shadow-\[inset_-1px_0_0_rgba\(255\,255\,255\,0\.08\)\]:is(.dark *){--tw-shadow: inset -1px 0 0 rgba(255,255,255,.08);--tw-shadow-colored: inset -1px 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.dark\:shadow-none:is(.dark *){--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.dark\:\[stop-color\:\#1C1C1E\]:is(.dark *){stop-color:#1c1c1e}.dark\:\[stop-color\:\#2C2C2E\]:is(.dark *){stop-color:#2c2c2e}.dark\:\[stop-color\:\#3A3A3C\]:is(.dark *){stop-color:#3a3a3c}.dark\:placeholder\:text-slate-500:is(.dark *)::-moz-placeholder{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.dark\:placeholder\:text-slate-500:is(.dark *)::placeholder{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.dark\:hover\:border-white\/\[0\.08\]:hover:is(.dark *){border-color:#ffffff14}.dark\:hover\:border-white\/\[0\.10\]:hover:is(.dark *){border-color:#ffffff1a}.dark\:hover\:border-white\/\[0\.12\]:hover:is(.dark *){border-color:#ffffff1f}.dark\:hover\:bg-\[\#2997ff\]:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(41 151 255 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-gray-600:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-primary\/15:hover:is(.dark *){background-color:hsl(var(--primary) / .15)}.dark\:hover\:bg-red-500\/10:hover:is(.dark *){background-color:#ef44441a}.dark\:hover\:bg-white\/\[0\.035\]:hover:is(.dark *){background-color:#ffffff09}.dark\:hover\:bg-white\/\[0\.04\]:hover:is(.dark *){background-color:#ffffff0a}.dark\:hover\:bg-white\/\[0\.05\]:hover:is(.dark *){background-color:#ffffff0d}.dark\:hover\:bg-white\/\[0\.06\]:hover:is(.dark *){background-color:#ffffff0f}.dark\:hover\:bg-white\/\[0\.07\]:hover:is(.dark *){background-color:#ffffff12}.dark\:hover\:bg-white\/\[0\.08\]:hover:is(.dark *){background-color:#ffffff14}.dark\:hover\:bg-white\/\[0\.09\]:hover:is(.dark *){background-color:#ffffff17}.dark\:hover\:bg-white\/\[0\.12\]:hover:is(.dark *){background-color:#ffffff1f}.dark\:hover\:bg-white\/\[0\.1\]:hover:is(.dark *){background-color:#ffffff1a}.dark\:hover\:text-red-200:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}.dark\:hover\:text-white:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.dark\:hover\:shadow-none:hover:is(.dark *){--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.dark\:disabled\:bg-white\/20:disabled:is(.dark *){background-color:#fff3}.dark\:disabled\:text-white\/55:disabled:is(.dark *){color:#ffffff8c}.dark\:prose-h1\:border-gray-700 :is(:where(h1):not(:where([class~=not-prose],[class~=not-prose] *))):is(.dark *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.dark\:prose-blockquote\:text-gray-300 :is(:where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *))):is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.dark\:prose-strong\:text-white :is(:where(strong):not(:where([class~=not-prose],[class~=not-prose] *))):is(.dark *){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.dark\:prose-th\:border-gray-700 :is(:where(th):not(:where([class~=not-prose],[class~=not-prose] *))):is(.dark *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.dark\:prose-th\:bg-gray-800 :is(:where(th):not(:where([class~=not-prose],[class~=not-prose] *))):is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.dark\:prose-td\:border-gray-700 :is(:where(td):not(:where([class~=not-prose],[class~=not-prose] *))):is(.dark *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.dark\:prose-hr\:border-gray-700 :is(:where(hr):not(:where([class~=not-prose],[class~=not-prose] *))):is(.dark *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}@media(min-width:640px){.sm\:left-1\/2{left:50%}.sm\:right-auto{right:auto}.sm\:order-none{order:0}.sm\:ml-0{margin-left:0}.sm\:mt-2{margin-top:.5rem}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:h-11{height:2.75rem}.sm\:h-12{height:3rem}.sm\:h-8{height:2rem}.sm\:min-h-\[112px\]{min-height:112px}.sm\:min-h-\[116px\]{min-height:116px}.sm\:min-h-\[96px\]{min-height:96px}.sm\:w-11{width:2.75rem}.sm\:w-12{width:3rem}.sm\:w-8{width:2rem}.sm\:w-\[calc\(100\%-2rem\)\]{width:calc(100% - 2rem)}.sm\:w-auto{width:auto}.sm\:min-w-0{min-width:0px}.sm\:min-w-\[118px\]{min-width:118px}.sm\:max-w-\[70\%\]{max-width:70%}.sm\:max-w-\[72\%\]{max-width:72%}.sm\:max-w-\[78\%\]{max-width:78%}.sm\:max-w-\[80\%\]{max-width:80%}.sm\:-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:flex-wrap{flex-wrap:wrap}.sm\:flex-nowrap{flex-wrap:nowrap}.sm\:items-start{align-items:flex-start}.sm\:items-center{align-items:center}.sm\:justify-end{justify-content:flex-end}.sm\:justify-between{justify-content:space-between}.sm\:gap-4{gap:1rem}.sm\:p-2\.5{padding:.625rem}.sm\:p-6{padding:1.5rem}.sm\:px-5{padding-left:1.25rem;padding-right:1.25rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:px-8{padding-left:2rem;padding-right:2rem}.sm\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.sm\:py-4{padding-top:1rem;padding-bottom:1rem}.sm\:py-5{padding-top:1.25rem;padding-bottom:1.25rem}.sm\:pb-6{padding-bottom:1.5rem}.sm\:pt-4{padding-top:1rem}.sm\:text-\[1\.95rem\]{font-size:1.95rem}.sm\:text-xl{font-size:1.25rem;line-height:1.75rem}.sm\:leading-none{line-height:1}}@media(min-width:768px){.md\:static{position:static}.md\:z-auto{z-index:auto}.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-\[288px_minmax\(0\,1fr\)\]{grid-template-columns:288px minmax(0,1fr)}.md\:rounded-\[24px\]{border-radius:24px}.md\:border{border-width:1px}.md\:pb-3{padding-bottom:.75rem}}@media(min-width:1024px){.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-\[340px_minmax\(0\,1fr\)\]{grid-template-columns:340px minmax(0,1fr)}.lg\:flex-row{flex-direction:row}.lg\:items-start{align-items:flex-start}.lg\:items-center{align-items:center}.lg\:justify-between{justify-content:space-between}.lg\:self-start{align-self:flex-start}.lg\:pt-0{padding-top:0}}@media(min-width:1280px){.xl\:h-\[calc\(100vh-8rem\)\]{height:calc(100vh - 8rem)}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-\[22rem_minmax\(0\,1fr\)\]{grid-template-columns:22rem minmax(0,1fr)}.xl\:grid-cols-\[300px_minmax\(0\,1fr\)\]{grid-template-columns:300px minmax(0,1fr)}.xl\:grid-cols-\[minmax\(0\,1\.05fr\)_minmax\(0\,0\.95fr\)\]{grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr)}.xl\:overflow-hidden{overflow:hidden}}@media(min-width:1536px){.\32xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.\32xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.\[\&\:\:-webkit-scrollbar\]\:hidden::-webkit-scrollbar{display:none}.\[\&\>p\]\:my-0\.5>p{margin-top:.125rem;margin-bottom:.125rem}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&_\*\]\:text-inherit *{color:inherit}.\[\&_a\]\:underline a{text-decoration-line:underline}.\[\&_code\]\:border code{border-width:1px}.\[\&_code\]\:border-black\/10 code{border-color:#0000001a}.\[\&_code\]\:bg-black\/10 code{background-color:#0000001a}.\[\&_code\]\:text-inherit code{color:inherit}.dark\:\[\&_code\]\:border-white\/10 code:is(.dark *){border-color:#ffffff1a}.\[\&_li\]\:my-0 li{margin-top:0;margin-bottom:0}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{A as t}from"./index-cI3pWBnN.js";const e=()=>t.get("/projects"),r=o=>t.get(`/projects/${o}`);export{r as g,e as l};
|