@kafca/agentdock 0.1.45 → 0.1.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/README.md +5 -0
  2. package/dist/renderer/assets/{Badge-BIojwD6s.js → Badge-BIesaDYG.js} +1 -1
  3. package/dist/renderer/assets/Chat-CpataoDh.js +2 -0
  4. package/dist/renderer/assets/{ChatMarkdown-DqszsPB_.js → ChatMarkdown-_Mdmltgv.js} +1 -1
  5. package/dist/renderer/assets/Config-Pe5-zKZk.js +21 -0
  6. package/dist/renderer/assets/CronList-BnaOSPT8.js +1 -0
  7. package/dist/renderer/assets/Dashboard-D05l8GKE.js +26 -0
  8. package/dist/renderer/assets/{EmptyState-BqCx1oWr.js → EmptyState-BDBavDll.js} +1 -1
  9. package/dist/renderer/assets/{KnowledgeDetail-BwK8Gpfa.js → KnowledgeDetail-DvR798l_.js} +1 -1
  10. package/dist/renderer/assets/KnowledgeHome-r2ZuvU8-.js +11 -0
  11. package/dist/renderer/assets/Logs-BaljtmAV.js +1 -0
  12. package/dist/renderer/assets/{Modal-D2U4r2V0.js → Modal-CXhD_OWR.js} +1 -1
  13. package/dist/renderer/assets/MonitorList-D7tyipbx.js +1 -0
  14. package/dist/renderer/assets/{Page-urf5GcT_.js → Page-KUuFYgjg.js} +1 -1
  15. package/dist/renderer/assets/ProjectDetail-Ddq94-yu.js +11 -0
  16. package/dist/renderer/assets/ProjectList-CbdHd5Ev.js +1 -0
  17. package/dist/renderer/assets/{Select-CAscWpy5.js → Select-Djc8BXMC.js} +1 -1
  18. package/dist/renderer/assets/SessionChat-DOy0iKQR.js +1 -0
  19. package/dist/renderer/assets/SessionList-DHgl1s1D.js +1 -0
  20. package/dist/renderer/assets/ThreadChat-I7dYibDc.js +23 -0
  21. package/dist/renderer/assets/Workspace-DTocqY-F.js +19 -0
  22. package/dist/renderer/assets/{arrow-left-7HrNuS-V.js → arrow-left-CXyya3hP.js} +1 -1
  23. package/dist/renderer/assets/{book-open-BDoAu82s.js → book-open-9n4Kxc7E.js} +1 -1
  24. package/dist/renderer/assets/bot-C9HBk5XH.js +6 -0
  25. package/dist/renderer/assets/{check-DGlyq4xX.js → check-CutSg9a5.js} +1 -1
  26. package/dist/renderer/assets/{chevron-down-Bb_3EHq9.js → chevron-down-DrydR4i3.js} +1 -1
  27. package/dist/renderer/assets/{circle-DIpqZnYw.js → circle-BEjtahw6.js} +1 -1
  28. package/dist/renderer/assets/{desktop-Ci1fnRDR.js → desktop-DATgk_ka.js} +1 -1
  29. package/dist/renderer/assets/{desktop-Do_UrC-o.js → desktop-JQkhNOF4.js} +1 -1
  30. package/dist/renderer/assets/{funnel-Bbf0ERLP.js → funnel-BhqZpS4f.js} +1 -1
  31. package/dist/renderer/assets/{heart-CGqU-qfw.js → heart-Dp8Vs-7_.js} +1 -1
  32. package/dist/renderer/assets/{index-Df-Trovt.js → index-BKpv0P0s.js} +1 -1
  33. package/dist/renderer/assets/index-CO4fGqmv.css +11 -0
  34. package/dist/renderer/assets/{index-DwhTjLA1.js → index-cI3pWBnN.js} +3 -3
  35. package/dist/renderer/assets/{pencil-CHiy1MvK.js → pencil-ywcJzeOo.js} +1 -1
  36. package/dist/renderer/assets/{play-CGYnmC4Q.js → play-AtN492Cx.js} +1 -1
  37. package/dist/renderer/assets/{plus-B_Q5-Oj7.js → plus-BEj14BBV.js} +1 -1
  38. package/dist/renderer/assets/projects-Clar8lgb.js +1 -0
  39. package/dist/renderer/assets/save-D6ov4CNv.js +11 -0
  40. package/dist/renderer/assets/{search-D8Dkhsyq.js → search-C3bvw7AR.js} +1 -1
  41. package/dist/renderer/assets/{server-Cd96R7WL.js → server-C1Uyedyx.js} +1 -1
  42. package/dist/renderer/assets/{session-utils-BNUbQBfF.js → session-utils-DpRwJ6Nh.js} +1 -1
  43. package/dist/renderer/assets/{sessions-BACfV8s1.js → sessions-BWmAppwK.js} +1 -1
  44. package/dist/renderer/assets/{shield-check-Cnn-yQUA.js → shield-check-CVx1mEs2.js} +1 -1
  45. package/dist/renderer/assets/{trash-2-oWCxwQ9D.js → trash-2-o-heXOgs.js} +1 -1
  46. package/dist/renderer/assets/user-dPOzUqIc.js +6 -0
  47. package/dist/renderer/assets/{wifi-off-DHxnNkdY.js → wifi-off-Fz5c3_x_.js} +1 -1
  48. package/dist/renderer/index.html +2 -2
  49. package/dist-electron/services/local-ai-core/src/channel/lark/inbound.js +55 -1
  50. package/dist-electron/tests/integration/lark-gateway.test.js +80 -0
  51. package/package.json +1 -1
  52. package/dist/renderer/assets/Chat-wjBR3XEX.js +0 -2
  53. package/dist/renderer/assets/Config-BDCHs5A2.js +0 -21
  54. package/dist/renderer/assets/CronList-CEWQYTov.js +0 -1
  55. package/dist/renderer/assets/Dashboard-DrWftfk3.js +0 -26
  56. package/dist/renderer/assets/KnowledgeHome-hhDTZMDO.js +0 -11
  57. package/dist/renderer/assets/Logs-C9xPEhFT.js +0 -1
  58. package/dist/renderer/assets/MonitorList-CayKbfwJ.js +0 -1
  59. package/dist/renderer/assets/ProjectDetail-B1GyAr7a.js +0 -11
  60. package/dist/renderer/assets/ProjectList-BoipQypE.js +0 -1
  61. package/dist/renderer/assets/SessionChat-BAVy5221.js +0 -1
  62. package/dist/renderer/assets/SessionList-BZpuMvh0.js +0 -1
  63. package/dist/renderer/assets/ThreadChat-JX7m9biG.js +0 -23
  64. package/dist/renderer/assets/Workspace-CFW8otjU.js +0 -14
  65. package/dist/renderer/assets/index-RaTga2BC.css +0 -11
  66. package/dist/renderer/assets/plug-Mexu4gyV.js +0 -6
  67. package/dist/renderer/assets/projects-C6bbkC-O.js +0 -1
  68. package/dist/renderer/assets/save-CJ_QFPw0.js +0 -6
  69. package/dist/renderer/assets/user-BzE9BwsY.js +0 -11
@@ -0,0 +1,23 @@
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};
@@ -0,0 +1,19 @@
1
+ import{c as ft,z as D,j as t,B as T,F as Wt,I as L,S as Kt,x as Xt,r as S}from"./index-cI3pWBnN.js";import{M as it}from"./Modal-CXhD_OWR.js";import{S as Z}from"./Select-Djc8BXMC.js";import{E as Oe}from"./EmptyState-BDBavDll.js";import{S as gt,a as Pe,P as qt}from"./Page-KUuFYgjg.js";import{c as Jt,d as Zt,e as es,t as ts,f as Ne,h as ss,i as as,j as ns,k as rs,m as os,n as is,p as lt}from"./desktop-DATgk_ka.js";import{c as pt,D as ze,d as ls,e as De,f as Me,g as Ae,h as cs,j as ct,k as dt,l as ds}from"./desktop-JQkhNOF4.js";import{T as Te}from"./trash-2-o-heXOgs.js";import{P as Ce}from"./plus-BEj14BBV.js";import{B as ms}from"./bot-C9HBk5XH.js";import{P as us,S as we}from"./save-D6ov4CNv.js";import"./index-BKpv0P0s.js";import"./chevron-down-DrydR4i3.js";import"./check-CutSg9a5.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 hs=[["path",{d:"M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z",key:"p7xjir"}]],fs=ft("cloud",hs);/**
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 gs=[["rect",{width:"5",height:"5",x:"3",y:"3",rx:"1",key:"1tu5fj"}],["rect",{width:"5",height:"5",x:"16",y:"3",rx:"1",key:"1v8r4q"}],["rect",{width:"5",height:"5",x:"3",y:"16",rx:"1",key:"1x03jg"}],["path",{d:"M21 16h-3a2 2 0 0 0-2 2v3",key:"177gqh"}],["path",{d:"M21 21v.01",key:"ents32"}],["path",{d:"M12 7v3a2 2 0 0 1-2 2H7",key:"8crl2c"}],["path",{d:"M3 12h.01",key:"nlz23k"}],["path",{d:"M12 3h.01",key:"n36tog"}],["path",{d:"M12 16v.01",key:"133mhm"}],["path",{d:"M16 12h1",key:"1slzba"}],["path",{d:"M21 12v.01",key:"1lwtk9"}],["path",{d:"M12 21v-1",key:"1880an"}]],mt=ft("qr-code",gs);var ps=Object.defineProperty,_e=Object.getOwnPropertySymbols,xt=Object.prototype.hasOwnProperty,vt=Object.prototype.propertyIsEnumerable,ut=(s,l,o)=>l in s?ps(s,l,{enumerable:!0,configurable:!0,writable:!0,value:o}):s[l]=o,Re=(s,l)=>{for(var o in l||(l={}))xt.call(l,o)&&ut(s,o,l[o]);if(_e)for(var o of _e(l))vt.call(l,o)&&ut(s,o,l[o]);return s},Ie=(s,l)=>{var o={};for(var m in s)xt.call(s,m)&&l.indexOf(m)<0&&(o[m]=s[m]);if(s!=null&&_e)for(var m of _e(s))l.indexOf(m)<0&&vt.call(s,m)&&(o[m]=s[m]);return o};/**
12
+ * @license QR Code generator library (TypeScript)
13
+ * Copyright (c) Project Nayuki.
14
+ * SPDX-License-Identifier: MIT
15
+ */var oe;(s=>{const l=class N{constructor(e,a,n,i){if(this.version=e,this.errorCorrectionLevel=a,this.modules=[],this.isFunction=[],e<N.MIN_VERSION||e>N.MAX_VERSION)throw new RangeError("Version value out of range");if(i<-1||i>7)throw new RangeError("Mask value out of range");this.size=e*4+17;let c=[];for(let u=0;u<this.size;u++)c.push(!1);for(let u=0;u<this.size;u++)this.modules.push(c.slice()),this.isFunction.push(c.slice());this.drawFunctionPatterns();const h=this.addEccAndInterleave(n);if(this.drawCodewords(h),i==-1){let u=1e9;for(let v=0;v<8;v++){this.applyMask(v),this.drawFormatBits(v);const _=this.getPenaltyScore();_<u&&(i=v,u=_),this.applyMask(v)}}g(0<=i&&i<=7),this.mask=i,this.applyMask(i),this.drawFormatBits(i),this.isFunction=[]}static encodeText(e,a){const n=s.QrSegment.makeSegments(e);return N.encodeSegments(n,a)}static encodeBinary(e,a){const n=s.QrSegment.makeBytes(e);return N.encodeSegments([n],a)}static encodeSegments(e,a,n=1,i=40,c=-1,h=!0){if(!(N.MIN_VERSION<=n&&n<=i&&i<=N.MAX_VERSION)||c<-1||c>7)throw new RangeError("Invalid value");let u,v;for(u=n;;u++){const w=N.getNumDataCodewords(u,a)*8,A=j.getTotalBits(e,u);if(A<=w){v=A;break}if(u>=i)throw new RangeError("Data too long")}for(const w of[N.Ecc.MEDIUM,N.Ecc.QUARTILE,N.Ecc.HIGH])h&&v<=N.getNumDataCodewords(u,w)*8&&(a=w);let _=[];for(const w of e){o(w.mode.modeBits,4,_),o(w.numChars,w.mode.numCharCountBits(u),_);for(const A of w.getData())_.push(A)}g(_.length==v);const p=N.getNumDataCodewords(u,a)*8;g(_.length<=p),o(0,Math.min(4,p-_.length),_),o(0,(8-_.length%8)%8,_),g(_.length%8==0);for(let w=236;_.length<p;w^=253)o(w,8,_);let P=[];for(;P.length*8<_.length;)P.push(0);return _.forEach((w,A)=>P[A>>>3]|=w<<7-(A&7)),new N(u,a,P,c)}getModule(e,a){return 0<=e&&e<this.size&&0<=a&&a<this.size&&this.modules[a][e]}getModules(){return this.modules}drawFunctionPatterns(){for(let n=0;n<this.size;n++)this.setFunctionModule(6,n,n%2==0),this.setFunctionModule(n,6,n%2==0);this.drawFinderPattern(3,3),this.drawFinderPattern(this.size-4,3),this.drawFinderPattern(3,this.size-4);const e=this.getAlignmentPatternPositions(),a=e.length;for(let n=0;n<a;n++)for(let i=0;i<a;i++)n==0&&i==0||n==0&&i==a-1||n==a-1&&i==0||this.drawAlignmentPattern(e[n],e[i]);this.drawFormatBits(0),this.drawVersion()}drawFormatBits(e){const a=this.errorCorrectionLevel.formatBits<<3|e;let n=a;for(let c=0;c<10;c++)n=n<<1^(n>>>9)*1335;const i=(a<<10|n)^21522;g(i>>>15==0);for(let c=0;c<=5;c++)this.setFunctionModule(8,c,m(i,c));this.setFunctionModule(8,7,m(i,6)),this.setFunctionModule(8,8,m(i,7)),this.setFunctionModule(7,8,m(i,8));for(let c=9;c<15;c++)this.setFunctionModule(14-c,8,m(i,c));for(let c=0;c<8;c++)this.setFunctionModule(this.size-1-c,8,m(i,c));for(let c=8;c<15;c++)this.setFunctionModule(8,this.size-15+c,m(i,c));this.setFunctionModule(8,this.size-8,!0)}drawVersion(){if(this.version<7)return;let e=this.version;for(let n=0;n<12;n++)e=e<<1^(e>>>11)*7973;const a=this.version<<12|e;g(a>>>18==0);for(let n=0;n<18;n++){const i=m(a,n),c=this.size-11+n%3,h=Math.floor(n/3);this.setFunctionModule(c,h,i),this.setFunctionModule(h,c,i)}}drawFinderPattern(e,a){for(let n=-4;n<=4;n++)for(let i=-4;i<=4;i++){const c=Math.max(Math.abs(i),Math.abs(n)),h=e+i,u=a+n;0<=h&&h<this.size&&0<=u&&u<this.size&&this.setFunctionModule(h,u,c!=2&&c!=4)}}drawAlignmentPattern(e,a){for(let n=-2;n<=2;n++)for(let i=-2;i<=2;i++)this.setFunctionModule(e+i,a+n,Math.max(Math.abs(i),Math.abs(n))!=1)}setFunctionModule(e,a,n){this.modules[a][e]=n,this.isFunction[a][e]=!0}addEccAndInterleave(e){const a=this.version,n=this.errorCorrectionLevel;if(e.length!=N.getNumDataCodewords(a,n))throw new RangeError("Invalid argument");const i=N.NUM_ERROR_CORRECTION_BLOCKS[n.ordinal][a],c=N.ECC_CODEWORDS_PER_BLOCK[n.ordinal][a],h=Math.floor(N.getNumRawDataModules(a)/8),u=i-h%i,v=Math.floor(h/i);let _=[];const p=N.reedSolomonComputeDivisor(c);for(let w=0,A=0;w<i;w++){let $=e.slice(A,A+v-c+(w<u?0:1));A+=$.length;const W=N.reedSolomonComputeRemainder($,p);w<u&&$.push(0),_.push($.concat(W))}let P=[];for(let w=0;w<_[0].length;w++)_.forEach((A,$)=>{(w!=v-c||$>=u)&&P.push(A[w])});return g(P.length==h),P}drawCodewords(e){if(e.length!=Math.floor(N.getNumRawDataModules(this.version)/8))throw new RangeError("Invalid argument");let a=0;for(let n=this.size-1;n>=1;n-=2){n==6&&(n=5);for(let i=0;i<this.size;i++)for(let c=0;c<2;c++){const h=n-c,v=(n+1&2)==0?this.size-1-i:i;!this.isFunction[v][h]&&a<e.length*8&&(this.modules[v][h]=m(e[a>>>3],7-(a&7)),a++)}}g(a==e.length*8)}applyMask(e){if(e<0||e>7)throw new RangeError("Mask value out of range");for(let a=0;a<this.size;a++)for(let n=0;n<this.size;n++){let i;switch(e){case 0:i=(n+a)%2==0;break;case 1:i=a%2==0;break;case 2:i=n%3==0;break;case 3:i=(n+a)%3==0;break;case 4:i=(Math.floor(n/3)+Math.floor(a/2))%2==0;break;case 5:i=n*a%2+n*a%3==0;break;case 6:i=(n*a%2+n*a%3)%2==0;break;case 7:i=((n+a)%2+n*a%3)%2==0;break;default:throw new Error("Unreachable")}!this.isFunction[a][n]&&i&&(this.modules[a][n]=!this.modules[a][n])}}getPenaltyScore(){let e=0;for(let c=0;c<this.size;c++){let h=!1,u=0,v=[0,0,0,0,0,0,0];for(let _=0;_<this.size;_++)this.modules[c][_]==h?(u++,u==5?e+=N.PENALTY_N1:u>5&&e++):(this.finderPenaltyAddHistory(u,v),h||(e+=this.finderPenaltyCountPatterns(v)*N.PENALTY_N3),h=this.modules[c][_],u=1);e+=this.finderPenaltyTerminateAndCount(h,u,v)*N.PENALTY_N3}for(let c=0;c<this.size;c++){let h=!1,u=0,v=[0,0,0,0,0,0,0];for(let _=0;_<this.size;_++)this.modules[_][c]==h?(u++,u==5?e+=N.PENALTY_N1:u>5&&e++):(this.finderPenaltyAddHistory(u,v),h||(e+=this.finderPenaltyCountPatterns(v)*N.PENALTY_N3),h=this.modules[_][c],u=1);e+=this.finderPenaltyTerminateAndCount(h,u,v)*N.PENALTY_N3}for(let c=0;c<this.size-1;c++)for(let h=0;h<this.size-1;h++){const u=this.modules[c][h];u==this.modules[c][h+1]&&u==this.modules[c+1][h]&&u==this.modules[c+1][h+1]&&(e+=N.PENALTY_N2)}let a=0;for(const c of this.modules)a=c.reduce((h,u)=>h+(u?1:0),a);const n=this.size*this.size,i=Math.ceil(Math.abs(a*20-n*10)/n)-1;return g(0<=i&&i<=9),e+=i*N.PENALTY_N4,g(0<=e&&e<=2568888),e}getAlignmentPatternPositions(){if(this.version==1)return[];{const e=Math.floor(this.version/7)+2,a=this.version==32?26:Math.ceil((this.version*4+4)/(e*2-2))*2;let n=[6];for(let i=this.size-7;n.length<e;i-=a)n.splice(1,0,i);return n}}static getNumRawDataModules(e){if(e<N.MIN_VERSION||e>N.MAX_VERSION)throw new RangeError("Version number out of range");let a=(16*e+128)*e+64;if(e>=2){const n=Math.floor(e/7)+2;a-=(25*n-10)*n-55,e>=7&&(a-=36)}return g(208<=a&&a<=29648),a}static getNumDataCodewords(e,a){return Math.floor(N.getNumRawDataModules(e)/8)-N.ECC_CODEWORDS_PER_BLOCK[a.ordinal][e]*N.NUM_ERROR_CORRECTION_BLOCKS[a.ordinal][e]}static reedSolomonComputeDivisor(e){if(e<1||e>255)throw new RangeError("Degree out of range");let a=[];for(let i=0;i<e-1;i++)a.push(0);a.push(1);let n=1;for(let i=0;i<e;i++){for(let c=0;c<a.length;c++)a[c]=N.reedSolomonMultiply(a[c],n),c+1<a.length&&(a[c]^=a[c+1]);n=N.reedSolomonMultiply(n,2)}return a}static reedSolomonComputeRemainder(e,a){let n=a.map(i=>0);for(const i of e){const c=i^n.shift();n.push(0),a.forEach((h,u)=>n[u]^=N.reedSolomonMultiply(h,c))}return n}static reedSolomonMultiply(e,a){if(e>>>8||a>>>8)throw new RangeError("Byte out of range");let n=0;for(let i=7;i>=0;i--)n=n<<1^(n>>>7)*285,n^=(a>>>i&1)*e;return g(n>>>8==0),n}finderPenaltyCountPatterns(e){const a=e[1];g(a<=this.size*3);const n=a>0&&e[2]==a&&e[3]==a*3&&e[4]==a&&e[5]==a;return(n&&e[0]>=a*4&&e[6]>=a?1:0)+(n&&e[6]>=a*4&&e[0]>=a?1:0)}finderPenaltyTerminateAndCount(e,a,n){return e&&(this.finderPenaltyAddHistory(a,n),a=0),a+=this.size,this.finderPenaltyAddHistory(a,n),this.finderPenaltyCountPatterns(n)}finderPenaltyAddHistory(e,a){a[0]==0&&(e+=this.size),a.pop(),a.unshift(e)}};l.MIN_VERSION=1,l.MAX_VERSION=40,l.PENALTY_N1=3,l.PENALTY_N2=3,l.PENALTY_N3=40,l.PENALTY_N4=10,l.ECC_CODEWORDS_PER_BLOCK=[[-1,7,10,15,20,26,18,20,24,30,18,20,24,26,30,22,24,28,30,28,28,28,28,30,30,26,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,10,16,26,18,24,16,18,22,22,26,30,22,22,24,24,28,28,26,26,26,26,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28],[-1,13,22,18,26,18,24,18,22,20,24,28,26,24,20,30,24,28,28,26,30,28,30,30,30,30,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,17,28,22,16,22,28,26,26,24,28,24,28,22,24,24,30,28,28,26,28,30,24,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30]],l.NUM_ERROR_CORRECTION_BLOCKS=[[-1,1,1,1,1,1,2,2,2,2,4,4,4,4,4,6,6,6,6,7,8,8,9,9,10,12,12,12,13,14,15,16,17,18,19,19,20,21,22,24,25],[-1,1,1,1,2,2,4,4,4,5,5,5,8,9,9,10,10,11,13,14,16,17,17,18,20,21,23,25,26,28,29,31,33,35,37,38,40,43,45,47,49],[-1,1,1,2,2,4,4,6,6,8,8,8,10,12,16,12,17,16,18,21,20,23,23,25,27,29,34,34,35,38,40,43,45,48,51,53,56,59,62,65,68],[-1,1,1,2,4,4,4,5,6,8,8,11,11,16,16,18,16,19,21,25,25,25,34,30,32,35,37,40,42,45,48,51,54,57,60,63,66,70,74,77,81]],s.QrCode=l;function o(b,e,a){if(e<0||e>31||b>>>e)throw new RangeError("Value out of range");for(let n=e-1;n>=0;n--)a.push(b>>>n&1)}function m(b,e){return(b>>>e&1)!=0}function g(b){if(!b)throw new Error("Assertion error")}const f=class I{constructor(e,a,n){if(this.mode=e,this.numChars=a,this.bitData=n,a<0)throw new RangeError("Invalid argument");this.bitData=n.slice()}static makeBytes(e){let a=[];for(const n of e)o(n,8,a);return new I(I.Mode.BYTE,e.length,a)}static makeNumeric(e){if(!I.isNumeric(e))throw new RangeError("String contains non-numeric characters");let a=[];for(let n=0;n<e.length;){const i=Math.min(e.length-n,3);o(parseInt(e.substring(n,n+i),10),i*3+1,a),n+=i}return new I(I.Mode.NUMERIC,e.length,a)}static makeAlphanumeric(e){if(!I.isAlphanumeric(e))throw new RangeError("String contains unencodable characters in alphanumeric mode");let a=[],n;for(n=0;n+2<=e.length;n+=2){let i=I.ALPHANUMERIC_CHARSET.indexOf(e.charAt(n))*45;i+=I.ALPHANUMERIC_CHARSET.indexOf(e.charAt(n+1)),o(i,11,a)}return n<e.length&&o(I.ALPHANUMERIC_CHARSET.indexOf(e.charAt(n)),6,a),new I(I.Mode.ALPHANUMERIC,e.length,a)}static makeSegments(e){return e==""?[]:I.isNumeric(e)?[I.makeNumeric(e)]:I.isAlphanumeric(e)?[I.makeAlphanumeric(e)]:[I.makeBytes(I.toUtf8ByteArray(e))]}static makeEci(e){let a=[];if(e<0)throw new RangeError("ECI assignment value out of range");if(e<128)o(e,8,a);else if(e<16384)o(2,2,a),o(e,14,a);else if(e<1e6)o(6,3,a),o(e,21,a);else throw new RangeError("ECI assignment value out of range");return new I(I.Mode.ECI,0,a)}static isNumeric(e){return I.NUMERIC_REGEX.test(e)}static isAlphanumeric(e){return I.ALPHANUMERIC_REGEX.test(e)}getData(){return this.bitData.slice()}static getTotalBits(e,a){let n=0;for(const i of e){const c=i.mode.numCharCountBits(a);if(i.numChars>=1<<c)return 1/0;n+=4+c+i.bitData.length}return n}static toUtf8ByteArray(e){e=encodeURI(e);let a=[];for(let n=0;n<e.length;n++)e.charAt(n)!="%"?a.push(e.charCodeAt(n)):(a.push(parseInt(e.substring(n+1,n+3),16)),n+=2);return a}};f.NUMERIC_REGEX=/^[0-9]*$/,f.ALPHANUMERIC_REGEX=/^[A-Z0-9 $%*+.\/:-]*$/,f.ALPHANUMERIC_CHARSET="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:";let j=f;s.QrSegment=f})(oe||(oe={}));(s=>{(l=>{const o=class{constructor(g,f){this.ordinal=g,this.formatBits=f}};o.LOW=new o(0,1),o.MEDIUM=new o(1,0),o.QUARTILE=new o(2,3),o.HIGH=new o(3,2),l.Ecc=o})(s.QrCode||(s.QrCode={}))})(oe||(oe={}));(s=>{(l=>{const o=class{constructor(g,f){this.modeBits=g,this.numBitsCharCount=f}numCharCountBits(g){return this.numBitsCharCount[Math.floor((g+7)/17)]}};o.NUMERIC=new o(1,[10,12,14]),o.ALPHANUMERIC=new o(2,[9,11,13]),o.BYTE=new o(4,[8,16,16]),o.KANJI=new o(8,[8,10,12]),o.ECI=new o(7,[0,0,0]),l.Mode=o})(s.QrSegment||(s.QrSegment={}))})(oe||(oe={}));var ue=oe;/**
16
+ * @license qrcode.react
17
+ * Copyright (c) Paul O'Shannessy
18
+ * SPDX-License-Identifier: ISC
19
+ */var xs={L:ue.QrCode.Ecc.LOW,M:ue.QrCode.Ecc.MEDIUM,Q:ue.QrCode.Ecc.QUARTILE,H:ue.QrCode.Ecc.HIGH},bt=128,wt="L",yt="#FFFFFF",_t="#000000",Ct=!1,kt=1,vs=4,bs=0,ws=.1;function jt(s,l=0){const o=[];return s.forEach(function(m,g){let f=null;m.forEach(function(j,b){if(!j&&f!==null){o.push(`M${f+l} ${g+l}h${b-f}v1H${f+l}z`),f=null;return}if(b===m.length-1){if(!j)return;f===null?o.push(`M${b+l},${g+l} h1v1H${b+l}z`):o.push(`M${f+l},${g+l} h${b+1-f}v1H${f+l}z`);return}j&&f===null&&(f=b)})}),o.join("")}function Nt(s,l){return s.slice().map((o,m)=>m<l.y||m>=l.y+l.h?o:o.map((g,f)=>f<l.x||f>=l.x+l.w?g:!1))}function ys(s,l,o,m){if(m==null)return null;const g=s.length+o*2,f=Math.floor(l*ws),j=g/l,b=(m.width||f)*j,e=(m.height||f)*j,a=m.x==null?s.length/2-b/2:m.x*j,n=m.y==null?s.length/2-e/2:m.y*j,i=m.opacity==null?1:m.opacity;let c=null;if(m.excavate){let u=Math.floor(a),v=Math.floor(n),_=Math.ceil(b+a-u),p=Math.ceil(e+n-v);c={x:u,y:v,w:_,h:p}}const h=m.crossOrigin;return{x:a,y:n,h:e,w:b,excavation:c,opacity:i,crossOrigin:h}}function _s(s,l){return l!=null?Math.max(Math.floor(l),0):s?vs:bs}function Et({value:s,level:l,minVersion:o,includeMargin:m,marginSize:g,imageSettings:f,size:j,boostLevel:b}){let e=D.useMemo(()=>{const u=(Array.isArray(s)?s:[s]).reduce((v,_)=>(v.push(...ue.QrSegment.makeSegments(_)),v),[]);return ue.QrCode.encodeSegments(u,xs[l],o,void 0,void 0,b)},[s,l,o,b]);const{cells:a,margin:n,numCells:i,calculatedImageSettings:c}=D.useMemo(()=>{let h=e.getModules();const u=_s(m,g),v=h.length+u*2,_=ys(h,j,u,f);return{cells:h,margin:u,numCells:v,calculatedImageSettings:_}},[e,j,f,m,g]);return{qrcode:e,margin:n,cells:a,numCells:i,calculatedImageSettings:c}}var Cs=(function(){try{new Path2D().addPath(new Path2D)}catch{return!1}return!0})(),ks=D.forwardRef(function(l,o){const m=l,{value:g,size:f=bt,level:j=wt,bgColor:b=yt,fgColor:e=_t,includeMargin:a=Ct,minVersion:n=kt,boostLevel:i,marginSize:c,imageSettings:h}=m,v=Ie(m,["value","size","level","bgColor","fgColor","includeMargin","minVersion","boostLevel","marginSize","imageSettings"]),{style:_}=v,p=Ie(v,["style"]),P=h==null?void 0:h.src,w=D.useRef(null),A=D.useRef(null),$=D.useCallback(V=>{w.current=V,typeof o=="function"?o(V):o&&(o.current=V)},[o]),[W,C]=D.useState(!1),{margin:Q,cells:ie,numCells:q,calculatedImageSettings:G}=Et({value:g,level:j,minVersion:n,boostLevel:i,includeMargin:a,marginSize:c,imageSettings:h,size:f});D.useEffect(()=>{if(w.current!=null){const V=w.current,H=V.getContext("2d");if(!H)return;let M=ie;const J=A.current,te=G!=null&&J!==null&&J.complete&&J.naturalHeight!==0&&J.naturalWidth!==0;te&&G.excavation!=null&&(M=Nt(ie,G.excavation));const he=window.devicePixelRatio||1;V.height=V.width=f*he;const fe=f/q*he;H.scale(fe,fe),H.fillStyle=b,H.fillRect(0,0,q,q),H.fillStyle=e,Cs?H.fill(new Path2D(jt(M,Q))):ie.forEach(function(se,K){se.forEach(function(y,ce){y&&H.fillRect(ce+Q,K+Q,1,1)})}),G&&(H.globalAlpha=G.opacity),te&&H.drawImage(J,G.x+Q,G.y+Q,G.w,G.h)}}),D.useEffect(()=>{C(!1)},[P]);const pe=Re({height:f,width:f},_);let le=null;return P!=null&&(le=D.createElement("img",{src:P,key:P,style:{display:"none"},onLoad:()=>{C(!0)},ref:A,crossOrigin:G==null?void 0:G.crossOrigin})),D.createElement(D.Fragment,null,D.createElement("canvas",Re({style:pe,height:f,width:f,ref:$,role:"img"},p)),le)});ks.displayName="QRCodeCanvas";var Le=D.forwardRef(function(l,o){const m=l,{value:g,size:f=bt,level:j=wt,bgColor:b=yt,fgColor:e=_t,includeMargin:a=Ct,minVersion:n=kt,boostLevel:i,title:c,marginSize:h,imageSettings:u}=m,v=Ie(m,["value","size","level","bgColor","fgColor","includeMargin","minVersion","boostLevel","title","marginSize","imageSettings"]),{margin:_,cells:p,numCells:P,calculatedImageSettings:w}=Et({value:g,level:j,minVersion:n,boostLevel:i,includeMargin:a,marginSize:h,imageSettings:u,size:f});let A=p,$=null;u!=null&&w!=null&&(w.excavation!=null&&(A=Nt(p,w.excavation)),$=D.createElement("image",{href:u.src,height:w.h,width:w.w,x:w.x+_,y:w.y+_,preserveAspectRatio:"none",opacity:w.opacity,crossOrigin:w.crossOrigin}));const W=jt(A,_);return D.createElement("svg",Re({height:f,width:f,viewBox:`0 0 ${P} ${P}`,ref:o,role:"img"},v),!!c&&D.createElement("title",null,c),D.createElement("path",{fill:b,d:`M0,0 h${P}v${P}H0z`,shapeRendering:"crispEdges"}),D.createElement("path",{fill:e,d:W,shapeRendering:"crispEdges"}),$)});Le.displayName="QRCodeSVG";const ee="__custom__",Ee=["weixin","lark"],Fe=[{id:"openai",label:"OpenAI",name:"openai",base_url:"https://api.openai.com/v1",model:"gpt-4.1-mini"},{id:"openrouter",label:"OpenRouter",name:"openrouter",base_url:"https://openrouter.ai/api/v1",model:"openai/gpt-4.1-mini"},{id:"anthropic",label:"Anthropic",name:"anthropic",base_url:"https://api.anthropic.com/v1",model:"claude-3-5-haiku-latest"},{id:"deepseek",label:"DeepSeek",name:"deepseek",base_url:"https://api.deepseek.com",model:"deepseek-v4-flash"},{id:"minimax",label:"Minimax",name:"minimax",base_url:"https://api.minimax.chat/v1",model:"MiniMax-M2.5"},{id:"ollama",label:"Ollama",name:"ollama",base_url:"http://127.0.0.1:11434/v1",model:"qwen2.5-coder:7b"}],z={runtime_image_id:De("pi").id,server_url:"http://127.0.0.1:8080",image:"agentdock/pi-acp:local",api_key_env:"OPEN_SANDBOX_API_KEY",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 U(s){return JSON.parse(JSON.stringify(s))}function me(s){return Array.isArray(s.projects)||(s.projects=[]),s.projects}function js(s){const l=new Set(s.map(m=>m.name).filter(Boolean));let o=s.length+1;for(;l.has(`project-${o}`);)o+=1;return{name:`project-${o}`,agentType:ls,workDir:"",model:""}}function ge(s){var l,o,m,g;return{...s,agent:{...s.agent,options:{...((l=s.agent)==null?void 0:l.options)||{},model:pt((o=s.agent)==null?void 0:o.type,String(((g=(m=s.agent)==null?void 0:m.options)==null?void 0:g.model)||""))}},platforms:s.platforms||[]}}function ye(s){return{id:s.id,name:s.name,api_key:s.api_key||"",base_url:s.base_url||"",model:s.model||"",models:s.models||[],thinking:s.thinking||"",env:s.env||{}}}function St(s,l){return l.includes(s)?s:ee}function Ns(s){var l;return((l=Fe.find(o=>s.name===o.name||o.base_url&&s.base_url===o.base_url||o.model&&s.model===o.model&&s.name===o.name))==null?void 0:l.id)||ee}function Es(s,l){const o=Fe.find(m=>m.id===l);return o?{...s,name:o.name,base_url:o.base_url,model:o.model}:s}function Se(s="weixin"){var l;return{type:s,options:{instance_id:`${s}-${((l=crypto.randomUUID)==null?void 0:l.call(crypto))||Date.now().toString(36)}`}}}function re(s){var l;return String(((l=s==null?void 0:s.options)==null?void 0:l.instance_id)||"").trim()||"default"}function be(s){const l=s.type==="feishu"?"lark":s.type,o=s.options&&typeof s.options=="object"?{...s.options}:{};return l==="weixin"?{type:l,options:{...o,instance_id:String(o.instance_id||"").trim()}}:l==="lark"?{type:l,options:{...o,instance_id:String(o.instance_id||"").trim(),app_id:String(o.app_id||"").trim(),app_secret:String(o.app_secret||"").trim(),card_actions:o.card_actions===!0}}:{type:l,options:o}}function Ss(s){var l;if(s.type==="weixin")return"WeChat QR login";if(s.type==="lark"){const o=String(((l=s.options)==null?void 0:l.app_id)||"").trim();return o?`App ID ${o}`:"App ID and secret required"}return"Custom platform"}function Pt(s){var m,g;const l=String(((g=(m=s.agent)==null?void 0:m.options)==null?void 0:g.work_dir)||"").trim();return l?l.replace(/\/+$/,"").split("/").filter(Boolean).pop()||l:"No work directory"}function Ps(s){return s==="success"?"border-primary/20 bg-primary/10 text-primary dark:border-primary/25 dark:bg-primary/10 dark:text-blue-200":s==="warning"?"border-amber-200 bg-amber-50 text-amber-700 dark:border-amber-400/20 dark:bg-amber-500/10 dark:text-amber-200":"border-red-200 bg-red-50 text-red-700 dark:border-red-400/20 dark:bg-red-500/10 dark:text-red-200"}function ht(s){return{enabled:!!(s!=null&&s.enabled),provider_id:(s==null?void 0:s.provider_id)||ze,runtime_image_id:(s==null?void 0:s.runtime_image_id)||z.runtime_image_id,server_url:(s==null?void 0:s.server_url)||z.server_url,image:(s==null?void 0:s.image)||z.image,api_key_env:(s==null?void 0:s.api_key_env)||z.api_key_env,acp_port:String((s==null?void 0:s.acp_port)||z.acp_port),state_scope:(s==null?void 0:s.state_scope)||z.state_scope,timeout_seconds:String((s==null?void 0:s.timeout_seconds)||z.timeout_seconds),sandbox_lifecycle:(s==null?void 0:s.sandbox_lifecycle)||z.sandbox_lifecycle,idle_seconds:String((s==null?void 0:s.idle_seconds)||z.idle_seconds),warm_pool_size:String((s==null?void 0:s.warm_pool_size)??z.warm_pool_size),cpu:(s==null?void 0:s.cpu)||z.cpu,memory:(s==null?void 0:s.memory)||z.memory,workspace_mount_path:(s==null?void 0:s.workspace_mount_path)||z.workspace_mount_path,state_mount_path:(s==null?void 0:s.state_mount_path)||z.state_mount_path}}function Ms(s){return{enabled:s.enabled,provider_id:s.provider_id.trim()||ze,runtime_image_id:s.runtime_image_id.trim()||z.runtime_image_id,state_scope:s.state_scope,timeout_seconds:Number(s.timeout_seconds)||Number(z.timeout_seconds),sandbox_lifecycle:s.sandbox_lifecycle,idle_seconds:Number(s.idle_seconds)||Number(z.idle_seconds),warm_pool_size:Math.max(0,Number(s.warm_pool_size)||0),cpu:s.cpu.trim()||z.cpu,memory:s.memory.trim()||z.memory}}function As({projects:s,selectedIndex:l,onAddProject:o,onSelectProject:m,onRemoveProject:g}){return t.jsx(gt,{title:"项目",actions:t.jsxs(T,{size:"sm",onClick:o,children:[t.jsx(Ce,{size:14})," 新建项目"]}),className:"app-panel lg:self-start",children:s.length===0?t.jsx(Oe,{message:"还没有项目。"}):t.jsx("div",{className:"space-y-2",children:s.map((f,j)=>{var b,e;return t.jsxs("div",{className:`flex items-center justify-between gap-2 ${j===l?"app-list-row app-list-row-active":"app-list-row"}`,children:[t.jsxs("button",{type:"button",onClick:()=>m(j,f),className:"min-w-0 flex-1 text-left",children:[t.jsx("p",{className:"truncate text-sm font-medium text-slate-950 dark:text-white",children:f.name||`Project ${j+1}`}),t.jsxs("p",{className:"mt-0.5 truncate text-xs text-muted-foreground",children:[((b=f.agent)==null?void 0:b.type)||"unknown"," · ",Pt(f)," · ",((e=f.platforms)==null?void 0:e.length)||0," platforms"]})]}),t.jsx(T,{variant:"ghost",size:"sm",className:"app-icon-button shrink-0",onClick:()=>g(j,f),"aria-label":`Remove ${f.name}`,children:t.jsx(Te,{size:14})})]},`${f.name}-${j}`)})})})}function Rs({project:s,sandbox:l}){var o,m;return t.jsxs("div",{className:"grid grid-cols-1 gap-3 md:grid-cols-4",children:[t.jsxs("div",{className:"app-surface p-4",children:[t.jsxs("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[t.jsx(ms,{size:14})," Agent"]}),t.jsx("p",{className:"mt-2 truncate text-sm font-semibold text-foreground",children:((o=s.agent)==null?void 0:o.type)||"unknown"})]}),t.jsxs("div",{className:"app-surface p-4",children:[t.jsxs("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[t.jsx(Wt,{size:14})," Workspace"]}),t.jsx("p",{className:"mt-2 truncate text-sm font-semibold text-foreground",children:Pt(s)})]}),t.jsxs("div",{className:"app-surface p-4",children:[t.jsxs("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[t.jsx(us,{size:14})," Platforms"]}),t.jsxs("p",{className:"mt-2 truncate text-sm font-semibold text-foreground",children:[((m=s.platforms)==null?void 0:m.length)||0," configured"]})]}),t.jsxs("div",{className:"app-surface p-4",children:[t.jsxs("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[t.jsx(fs,{size:14})," Sandbox"]}),t.jsx("p",{className:"mt-2 truncate text-sm font-semibold text-foreground",children:l.enabled?"Cloud enabled":"Local runtime"})]})]})}function Is({project:s,updateProject:l}){var o,m,g,f,j,b;return t.jsxs("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2",children:[t.jsx(L,{label:"Project name",value:s.name,onChange:e=>l(a=>({...a,name:e.target.value}))}),t.jsxs(Z,{label:"Agent type",value:St(((o=s.agent)==null?void 0:o.type)||"",Me),onChange:e=>l(a=>{var i;const n=e.target.value===ee?a.agent.type:e.target.value;return{...a,agent:{...a.agent,type:n,options:{...a.agent.options||{},model:pt(n,String(((i=a.agent.options)==null?void 0:i.model)||""))}}}}),children:[Me.map(e=>t.jsx("option",{value:e,children:e},e)),t.jsx("option",{value:ee,children:"custom"})]}),t.jsx(L,{label:"Host workspace path",value:String(((g=(m=s.agent)==null?void 0:m.options)==null?void 0:g.work_dir)||""),onChange:e=>l(a=>({...a,agent:{...a.agent,options:{...a.agent.options||{},work_dir:e.target.value}}}))}),t.jsx(L,{label:"Default model",value:String(((j=(f=s.agent)==null?void 0:f.options)==null?void 0:j.model)||""),onChange:e=>l(a=>({...a,agent:{...a.agent,options:{...a.agent.options||{},model:e.target.value}}})),placeholder:Ae((b=s.agent)==null?void 0:b.type)||"Use agent default model"})]})}function Ls({project:s,modelProviders:l,providerDrafts:o,updateProject:m,updateProviderDraft:g,onAddProvider:f,onSaveProvider:j,onDeleteProvider:b}){var e,a,n,i;return t.jsxs("section",{className:"space-y-3",children:[t.jsxs("div",{className:"grid grid-cols-1 gap-3 md:grid-cols-2",children:[t.jsxs(Z,{label:"Project provider",value:String(((a=(e=s.agent)==null?void 0:e.options)==null?void 0:a.provider_id)||""),onChange:c=>m(h=>({...h,agent:{...h.agent,options:{...h.agent.options||{},provider_id:c.target.value}}})),children:[t.jsx("option",{value:"",children:"No provider"}),l.map(c=>t.jsx("option",{value:c.id,children:c.name},c.id))]}),t.jsx(L,{label:"Model override",value:String(((i=(n=s.agent)==null?void 0:n.options)==null?void 0:i.model)||""),onChange:c=>m(h=>({...h,agent:{...h.agent,options:{...h.agent.options||{},model:c.target.value}}})),placeholder:"Use provider default model"})]}),t.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[t.jsxs("div",{children:[t.jsx("h3",{className:"text-sm font-semibold text-slate-950 dark:text-white",children:"Shared providers"}),t.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:"Providers are shared and selected by projects."})]}),t.jsxs(T,{size:"sm",variant:"secondary",onClick:f,children:[t.jsx(Ce,{size:14})," Add provider"]})]}),l.length===0?t.jsx("div",{className:"rounded-xl border border-black/10 px-4 py-4 text-sm text-muted-foreground dark:border-white/[0.08]",children:"No shared providers configured."}):t.jsx("div",{className:"space-y-3",children:l.map(c=>{const h=o[c.id]||ye(c);return t.jsx("div",{className:"app-surface p-4",children:t.jsxs("div",{className:"grid grid-cols-1 gap-3 md:grid-cols-2",children:[t.jsxs(Z,{label:"Preset",value:Ns(h),onChange:u=>{u.target.value!==ee&&g(c.id,v=>Es(v,u.target.value))},children:[Fe.map(u=>t.jsx("option",{value:u.id,children:u.label},u.id)),t.jsx("option",{value:ee,children:"custom"})]}),t.jsx(L,{label:"Name",value:h.name||"",onChange:u=>g(c.id,v=>({...v,name:u.target.value}))}),t.jsx(L,{label:"API key",type:"password",value:h.api_key||"",onChange:u=>g(c.id,v=>({...v,api_key:u.target.value}))}),t.jsx(L,{label:"Base URL",value:h.base_url||"",onChange:u=>g(c.id,v=>({...v,base_url:u.target.value}))}),t.jsx(L,{label:"Default model",value:h.model||"",onChange:u=>g(c.id,v=>({...v,model:u.target.value}))}),t.jsxs("div",{className:"flex items-end gap-2",children:[t.jsxs(T,{variant:"secondary",size:"sm",onClick:()=>j(c.id),children:[t.jsx(we,{size:14})," Save"]}),t.jsxs(T,{variant:"danger",size:"sm",onClick:()=>b(c.id),children:[t.jsx(Te,{size:14})," Remove"]})]})]})},c.id)})})]})}function Os({project:s,updateProject:l,onOpenPlatformDialog:o}){return t.jsxs("section",{className:"space-y-3",children:[t.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[t.jsxs("div",{children:[t.jsx("h3",{className:"text-sm font-semibold text-slate-950 dark:text-white",children:"Platforms"}),t.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:"Configure each platform with its own required connection fields."})]}),t.jsxs(T,{size:"sm",variant:"secondary",onClick:()=>o(null),children:[t.jsx(Ce,{size:14})," Platform"]})]}),(s.platforms||[]).length===0?t.jsx(Oe,{message:"No platforms configured."}):t.jsx("div",{className:"grid grid-cols-1 gap-3 md:grid-cols-2",children:(s.platforms||[]).map((m,g)=>t.jsxs("div",{className:"app-list-row flex items-center justify-between gap-3",children:[t.jsxs("div",{className:"min-w-0",children:[t.jsx("p",{className:"truncate text-sm font-medium text-slate-950 dark:text-white",children:m.type}),t.jsx("p",{className:"mt-1 truncate text-xs text-muted-foreground",children:Ss(m)})]}),t.jsxs("div",{className:"flex shrink-0 items-center gap-2",children:[t.jsx(T,{variant:"secondary",size:"sm",className:"app-icon-button",onClick:()=>o(g),"aria-label":`Configure ${m.type}`,children:t.jsx(Kt,{size:14})}),t.jsx(T,{variant:"danger",size:"sm",className:"app-icon-button",onClick:()=>l(f=>{const j=[...f.platforms||[]];return j.splice(g,1),{...f,platforms:j}}),children:t.jsx(Te,{size:14})})]})]},`${m.type}-${g}`))})]})}function zs({project:s,sandbox:l,profile:o,sandboxProvider:m,runtimeImage:g,updateSandbox:f,updateDeploymentProfile:j}){return t.jsxs("section",{className:"space-y-4",children:[t.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between",children:[t.jsxs("div",{children:[t.jsx("h3",{className:"text-sm font-semibold text-slate-950 dark:text-white",children:"云端模式"}),t.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:"通过 OpenSandbox 为 Agent 运行启动独立容器。"})]}),t.jsx(Pe,{tone:l.enabled?"success":"neutral",children:l.enabled?"Enabled":"Local"})]}),t.jsxs("label",{className:"app-toolbar flex items-center gap-3 text-sm font-medium text-slate-950 dark:text-white",children:[t.jsx("input",{type:"checkbox",className:"h-4 w-4 rounded border-black/20 dark:border-white/20",checked:l.enabled,onChange:b=>f(e=>{var a;return{...e,enabled:b.target.checked,provider_id:e.provider_id||ze,runtime_image_id:e.runtime_image_id||De(((a=s==null?void 0:s.agent)==null?void 0:a.type)||"pi").id}})}),"启用云端模式(Sandbox)"]}),l.enabled?t.jsxs("div",{className:"space-y-4",children:[t.jsxs("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2",children:[t.jsx(Z,{label:"Deployment",value:o.id,onChange:b=>j(b.target.value),children:cs.map(b=>t.jsx("option",{value:b.id,children:b.label},b.id))}),t.jsxs(Z,{label:"State scope",value:l.state_scope,onChange:b=>f(e=>({...e,state_scope:b.target.value})),children:[t.jsx("option",{value:"user",children:"User"}),t.jsx("option",{value:"project",children:"Project"}),t.jsx("option",{value:"thread",children:"Thread"}),t.jsx("option",{value:"run",children:"Run"})]}),t.jsx(L,{label:"CPU",value:l.cpu,onChange:b=>f(e=>({...e,cpu:b.target.value}))}),t.jsx(L,{label:"Memory",value:l.memory,onChange:b=>f(e=>({...e,memory:b.target.value}))}),t.jsx(L,{label:"Timeout seconds",type:"number",value:l.timeout_seconds,onChange:b=>f(e=>({...e,timeout_seconds:b.target.value}))}),t.jsxs(Z,{label:"Sandbox lifecycle",value:l.sandbox_lifecycle,onChange:b=>f(e=>({...e,sandbox_lifecycle:b.target.value})),children:[t.jsx("option",{value:"per_thread",children:"Keep warm per thread"}),t.jsx("option",{value:"per_run",children:"Close after each run"})]}),t.jsx(L,{label:"Idle seconds",type:"number",value:l.idle_seconds,onChange:b=>f(e=>({...e,idle_seconds:b.target.value}))}),t.jsx(L,{label:"Warm pool",type:"number",value:l.warm_pool_size,onChange:b=>f(e=>({...e,warm_pool_size:b.target.value}))})]}),t.jsxs("div",{className:"rounded-xl border border-black/10 px-4 py-3 text-sm text-muted-foreground dark:border-white/[0.08]",children:[t.jsx("div",{className:"font-medium text-slate-950 dark:text-white",children:"当前运行配置"}),t.jsxs("div",{className:"mt-2 grid grid-cols-1 gap-2 md:grid-cols-2",children:[t.jsxs("div",{children:["OpenSandbox: ",m.server_url||"not configured"]}),t.jsxs("div",{children:["Image: ",g.image]}),t.jsxs("div",{children:["ACP port: ",g.acp_port]}),t.jsxs("div",{children:["Sandbox workspace path: ",g.workspace_mount_path||o.workspaceMountPath]}),t.jsxs("div",{children:["State mount: ",g.state_mount_path||o.stateMountPath]}),t.jsxs("div",{children:["API key env: ",m.api_key_env||"OPEN_SANDBOX_API_KEY"]})]})]}),t.jsxs("details",{className:"rounded-xl border border-black/10 px-4 py-3 text-sm dark:border-white/[0.08]",children:[t.jsx("summary",{className:"cursor-pointer font-medium text-slate-950 dark:text-white",children:"Advanced"}),t.jsx("div",{className:"mt-3 text-muted-foreground",children:"Host workspace path 是 OpenSandbox 挂载源;Sandbox workspace path 是 Agent 容器内的工作目录。Core 只启动代理进程,不直接使用 host workspace path 作为代理工作目录。"})]})]}):t.jsx("div",{className:"rounded-xl border border-black/10 px-4 py-3 text-sm text-muted-foreground dark:border-white/[0.08]",children:"当前项目会继续使用本地 Agent runtime。"})]})}function Zs(){var He,Ye,Ve,We,Ke,Xe,qe,Je,Ze,et,tt,st;const[s,l]=Xt(),o=s.get("project")||"",[m,g]=S.useState(null),[f,j]=S.useState(null),[b,e]=S.useState([]),[a,n]=S.useState({}),[i,c]=S.useState(0),[h,u]=S.useState("basic"),[v,_]=S.useState(null),[p,P]=S.useState(null),[w,A]=S.useState(null),[$,W]=S.useState(!1),[C,Q]=S.useState(null),[ie,q]=S.useState(!1),[G,pe]=S.useState(!0),[le,V]=S.useState(""),[H,M]=S.useState(null),J=S.useRef(null),te=S.useRef(null),he=S.useRef(i),fe=S.useRef(""),se=S.useCallback(async(r="")=>{pe(!0);try{const[d,x]=await Promise.all([Jt(),Zt()]),k=U(d.parsed||{});if(k.projects=me(k).map(E=>ge(E)),g(k),j(U(k)),e(x.providers||[]),n(Object.fromEntries((x.providers||[]).map(E=>[E.id,ye(E)]))),r){const E=(k.projects||[]).findIndex(O=>O.name===r);c(E>=0?E:0)}}catch(d){M({tone:"error",message:d instanceof Error?d.message:String(d)})}finally{pe(!1)}},[]);S.useEffect(()=>{se(o)},[se]);const K=(m==null?void 0:m.projects)||[],y=K[i]||null,ce=ht((Ye=(He=y==null?void 0:y.agent)==null?void 0:He.options)==null?void 0:Ye.sandbox),Be=ct(String((m==null?void 0:m.deployment_profile)||"").trim()),Mt=((m==null?void 0:m.sandbox_providers)||[]).find(r=>r.id===ce.provider_id)||dt(Be.id),At=((m==null?void 0:m.sandbox_runtime_images)||[]).find(r=>r.id===ce.runtime_image_id)||De(((Ve=y==null?void 0:y.agent)==null?void 0:Ve.type)||"pi"),Ue=JSON.stringify(m||{})!==JSON.stringify(f||{});S.useEffect(()=>{J.current=m},[m]),S.useEffect(()=>{te.current=p},[p]),S.useEffect(()=>{he.current=i,fe.current=(y==null?void 0:y.name)||""},[i,y==null?void 0:y.name]),S.useEffect(()=>{if(!m||!o)return;const r=K.findIndex(d=>d.name===o);r>=0&&r!==i&&c(r)},[m,K,o,i]);const de=S.useCallback(r=>{g(d=>{if(!d)return d;const x=U(d),k=me(x),E=k[i];return E?(k[i]=ge(r(E)),x):d})},[i]),Rt=S.useCallback(r=>{de(d=>{var x;return{...d,agent:{...d.agent,options:{...d.agent.options||{},sandbox:Ms(r(ht((x=d.agent.options)==null?void 0:x.sandbox)))}}}})},[de]),It=S.useCallback(r=>{const d=ct(r);g(x=>{if(!x)return x;const k=U(x);k.deployment_profile=d.id;const E=dt(d.id),O=Array.isArray(k.sandbox_providers)?[...k.sandbox_providers]:[],B=O.findIndex(F=>F.id===E.id);return B>=0?O[B]={...O[B],server_url:E.server_url}:O.push(E),k.sandbox_providers=O,k})},[]),Lt=()=>{_(js(K))},Ot=S.useCallback((r,d)=>{n(x=>{const k=x[r];return k?{...x,[r]:d(k)}:x})},[]),zt=async()=>{try{const r=await ss({name:`provider-${b.length+1}`});e(d=>[...d,r].sort((x,k)=>x.name.localeCompare(k.name))),n(d=>({...d,[r.id]:ye(r)})),M({tone:"success",message:"Provider created."})}catch(r){M({tone:"error",message:r instanceof Error?r.message:String(r)})}},Dt=async r=>{const d=a[r];if(d)try{const x=await as(r,d);e(k=>k.map(E=>E.id===x.id?x:E).sort((E,O)=>E.name.localeCompare(O.name))),n(k=>({...k,[x.id]:ye(x)})),M({tone:"success",message:"Provider saved."})}catch(x){M({tone:"error",message:x instanceof Error?x.message:String(x)})}},Tt=async r=>{try{await ns(r),e(d=>d.filter(x=>x.id!==r)),n(d=>{const x={...d};return delete x[r],x}),M({tone:"success",message:"Provider removed."})}catch(d){M({tone:"error",message:d instanceof Error?d.message:String(d)})}},xe=r=>{_(d=>d&&{...d,...r})},Ft=()=>{if(!v)return;const r=v.name.trim(),d=v.agentType.trim(),x=v.workDir.trim(),k=v.model.trim();if(!r||!d||!x){M({tone:"warning",message:"Project name, agent type, and work directory are required."});return}if(K.some(B=>B.name===r)){M({tone:"warning",message:`Project "${r}" already exists.`});return}const E=ge({name:r,agent:{type:d,options:{model:k||Ae(d),work_dir:x},providers:[]},platforms:[],admin_from:"",disabled_commands:[]}),O=K.length;g(B=>{const F=U(B||{});return me(F).push(E),F}),c(O),l({project:r}),_(null),M(null)},Bt=r=>{g(d=>{if(!d)return d;const x=U(d),k=me(x);return k.splice(r,1),c(Math.max(0,Math.min(r,k.length-1))),x})},Ut=r=>{var x;if(A(null),Q(null),r===null){P({index:r,draft:Se()});return}const d=(x=y==null?void 0:y.platforms)==null?void 0:x[r];d&&P({index:r,draft:U(d)})},ae=r=>{P(d=>d&&{...d,draft:r(d.draft)})},$t=()=>{if(!p)return;const r=be(p.draft);de(d=>{const x=[...d.platforms||[]];return p.index===null?x.push(r):x[p.index]=r,{...d,platforms:x}}),P(null),A(null),Q(null)},$e=async()=>{if(!p||!m)return p==null?void 0:p.draft;const r=U(m),d=me(r),x=d[i];if(!x)return p.draft;const k=[...x.platforms||[]],E=be(p.draft);p.index===null?k.push(E):k[p.index]=E,d[i]=ge({...x,platforms:k});const O=await Ne(r),B=U(O.parsed||r);return j(B),g(U(B)),P(F=>F&&{index:F.index??k.length-1,draft:E}),E},Qt=async()=>{if(!(!(y!=null&&y.name)||!m)){W(!0);try{await $e();const r=await rs(y.name,re(p==null?void 0:p.draft));A({...r,status:"wait",createdAt:Date.now()}),M(null)}catch(r){M({tone:"error",message:r instanceof Error?r.message:String(r)})}finally{W(!1)}}},Gt=async()=>{if(!(!(y!=null&&y.name)||!m)){q(!0);try{await $e();const r=await os(y.name,re(p==null?void 0:p.draft));Q({...r,status:"wait",createdAt:Date.now()}),M(null)}catch(r){M({tone:"error",message:r instanceof Error?r.message:String(r)})}finally{q(!1)}}},Ht=async()=>{if(!(!(y!=null&&y.name)||!(w!=null&&w.ticket))){W(!0);try{const r=await is(y.name,w.ticket,re(p==null?void 0:p.draft));A(d=>d&&{...d,status:r.status}),r.status==="confirmed"&&M({tone:"success",message:"WeChat QR code confirmed."})}catch(r){M({tone:"error",message:r instanceof Error?r.message:String(r)})}finally{W(!1)}}},Qe=S.useCallback(async(r,d)=>{const x=await es(r,d);if(x.status!=="running"||x.connected!==!0)throw new Error(x.lastError||"Lark bot credentials were saved, but the gateway is not connected yet.");const k=await ts(r,d);if(!k.success)throw new Error(k.error||"Lark bot credentials were saved, but the connection test failed.")},[]),ke=S.useCallback(async r=>{var nt,rt,ot;const d=fe.current,x=re((nt=te.current)==null?void 0:nt.draft),k=J.current;if(!k)return;const E=U(k),O=me(E),B=he.current,F=O[B];if(!F)return;const R=[...F.platforms||[]],Y=te.current,X=(Y==null?void 0:Y.index)??R.findIndex(ne=>be(ne).type==="lark"&&re(ne)===x),ve=X>=0?R[X]:(Y==null?void 0:Y.draft)||Se("lark"),je=be({...ve,type:"lark",options:{...ve.options||{},instance_id:x,app_id:r.appId,app_secret:r.appSecret,verification_token:r.verificationToken||((rt=ve.options)==null?void 0:rt.verification_token)||"",encrypt_key:r.encryptKey||((ot=ve.options)==null?void 0:ot.encrypt_key)||"",card_actions:!0,subscribed_events:"im.message.receive_v1 card.action.trigger",subscribed_callbacks:"card.action.trigger"}});X>=0?R[X]=je:R.push(je),O[B]=ge({...F,platforms:R});const Vt=await Ne(E),at=U(Vt.parsed||E);j(at),g(U(at)),P(ne=>ne&&{...ne,index:ne.index??(X>=0?X:R.length-1),draft:je}),await Qe(d,x),M({tone:"success",message:"Lark bot bound, saved, and ready to send messages."}),await se(d)},[Qe,se]),Yt=async()=>{if(!(!(y!=null&&y.name)||!(C!=null&&C.ticket)||!m)){q(!0);try{const r=await lt(y.name,C.ticket,re(p==null?void 0:p.draft));Q(d=>{var x;return d&&{...d,status:r.status,botName:(x=r.credentials)==null?void 0:x.botName}}),r.status==="confirmed"&&r.credentials?await ke(r.credentials):r.status==="expired"&&M({tone:"warning",message:"Lark QR code expired. Generate a new QR code and scan again."})}catch(r){M({tone:"error",message:r instanceof Error?r.message:String(r)})}finally{q(!1)}}};S.useEffect(()=>{if(!(y!=null&&y.name)||!(C!=null&&C.ticket)||(p==null?void 0:p.draft.type)!=="lark"||C.status&&!["wait","signed"].includes(C.status))return;let r=!1,d;const k=(C.createdAt||Date.now())+Math.max(C.expiresIn||0,1)*1e3,E=Math.max(3,Math.min(Number(C.interval||5)||5,15))*1e3,O=F=>{d=window.setTimeout(()=>{B()},F)},B=async()=>{var F;if(!r){if(Date.now()>=k){Q(R=>(R==null?void 0:R.ticket)===C.ticket?{...R,status:"expired"}:R),M({tone:"warning",message:"Lark QR code expired. Generate a new QR code and scan again."});return}try{const R=await lt(y.name,C.ticket,re((F=te.current)==null?void 0:F.draft));if(r)return;if(Q(Y=>{var X;return(Y==null?void 0:Y.ticket)===C.ticket?{...Y,status:R.status,botName:(X=R.credentials)==null?void 0:X.botName}:Y}),R.status==="confirmed"&&R.credentials){await ke(R.credentials);return}if(R.status==="expired"){M({tone:"warning",message:"Lark QR code expired. Generate a new QR code and scan again."});return}O(E)}catch(R){if(r)return;M({tone:"error",message:R instanceof Error?R.message:String(R)})}}};return O(Math.min(2e3,E)),()=>{r=!0,d&&window.clearTimeout(d)}},[C==null?void 0:C.createdAt,C==null?void 0:C.expiresIn,C==null?void 0:C.interval,C==null?void 0:C.status,C==null?void 0:C.ticket,p==null?void 0:p.draft.type,ke,y==null?void 0:y.name]);const Ge=async()=>{if(m){V("config");try{const r=await Ne(m);j(U(r.parsed||m)),g(U(r.parsed||m)),M({tone:"success",message:"Project changes saved."}),await se()}catch(r){M({tone:"error",message:r instanceof Error?r.message:String(r)})}finally{V("")}}};return G&&!m?t.jsx("div",{className:"flex h-64 items-center justify-center text-sm text-slate-400 animate-pulse",children:"Loading workspace..."}):t.jsxs("div",{className:"space-y-6 animate-fade-in",children:[t.jsx(qt,{title:"工作区",description:"创建项目,配置 Agent、工作目录、Provider 和平台接入。"}),H?t.jsx("div",{role:"status",className:`rounded-xl border px-4 py-3 text-sm ${Ps(H.tone)}`,children:H.message}):null,Ue?t.jsxs("div",{className:"app-toolbar flex flex-col gap-3 border-amber-200 bg-amber-50 text-sm text-amber-700 dark:border-amber-400/20 dark:bg-amber-500/10 dark:text-amber-200 sm:flex-row sm:items-center sm:justify-between",children:[t.jsx("span",{children:"You have unsaved project changes."}),t.jsxs(T,{size:"sm",onClick:()=>void Ge(),loading:le==="config",children:[t.jsx(we,{size:14})," Save changes"]})]}):null,t.jsxs("div",{className:"grid min-w-0 grid-cols-1 gap-4 lg:grid-cols-[340px_minmax(0,1fr)]",children:[t.jsx(As,{projects:K,selectedIndex:i,onAddProject:Lt,onSelectProject:(r,d)=>{c(r),l(d.name?{project:d.name}:{})},onRemoveProject:r=>Bt(r)}),t.jsx(gt,{title:(y==null?void 0:y.name)||"Project details",description:y?t.jsxs("span",{className:"break-all",children:[((We=y.agent)==null?void 0:We.type)||"unknown"," · ",String(((Xe=(Ke=y.agent)==null?void 0:Ke.options)==null?void 0:Xe.work_dir)||"No work directory")]}):void 0,className:"app-panel",children:y?t.jsxs("div",{className:"space-y-6",children:[t.jsx(Rs,{project:y,sandbox:ce}),t.jsx("div",{className:"flex gap-2 overflow-x-auto border-b border-black/10 pb-4 [scrollbar-width:none] dark:border-white/[0.08] [&::-webkit-scrollbar]:hidden sm:flex-wrap",children:[["basic","基本信息"],["providers","Provider"],["platforms","平台接入"],["sandbox","云端模式"]].map(([r,d])=>t.jsx("button",{type:"button",onClick:()=>u(r),className:`app-segment ${h===r?"app-segment-active":"app-segment-idle"}`,children:d},r))}),h==="basic"?t.jsx(Is,{project:y,updateProject:de}):null,h==="providers"?t.jsx(Ls,{project:y,modelProviders:b,providerDrafts:a,updateProject:de,updateProviderDraft:Ot,onAddProvider:()=>void zt(),onSaveProvider:r=>void Dt(r),onDeleteProvider:r=>void Tt(r)}):null,h==="platforms"?t.jsx(Os,{project:y,updateProject:de,onOpenPlatformDialog:Ut}):null,h==="sandbox"?t.jsx(zs,{project:y,sandbox:ce,profile:Be,sandboxProvider:Mt,runtimeImage:At,updateSandbox:Rt,updateDeploymentProfile:It}):null,t.jsx("div",{className:"flex flex-wrap gap-2 border-t border-black/10 pt-5 dark:border-white/[0.08]",children:t.jsxs(T,{className:"w-full sm:w-auto",onClick:()=>void Ge(),loading:le==="config",disabled:!Ue&&le!=="config",children:[t.jsx(we,{size:14})," 保存更改"]})})]}):t.jsx(Oe,{message:"选择或新建项目后开始配置。"})})]}),t.jsx(it,{open:!!v,onClose:()=>_(null),title:"新建项目",children:v?t.jsxs("div",{className:"space-y-4",children:[t.jsx(L,{label:"Project name",value:v.name,onChange:r=>xe({name:r.target.value}),autoFocus:!0}),t.jsx(Z,{label:"Agent type",value:v.agentType,onChange:r=>{const d=r.target.value;xe({agentType:d})},children:Me.map(r=>t.jsx("option",{value:r,children:r},r))}),t.jsx(L,{label:"Host workspace path",value:v.workDir,onChange:r=>xe({workDir:r.target.value}),placeholder:"/Users/yinyin/code/my-project"}),t.jsx(L,{label:"Default model",value:v.model,onChange:r=>xe({model:r.target.value}),placeholder:Ae(v.agentType)||"Use agent default model"}),t.jsxs("div",{className:"flex flex-col-reverse gap-2 pt-2 sm:flex-row sm:justify-end",children:[t.jsx(T,{className:"w-full sm:w-auto",variant:"secondary",onClick:()=>_(null),children:"Cancel"}),t.jsxs(T,{className:"w-full sm:w-auto",onClick:Ft,children:[t.jsx(Ce,{size:14})," 新建项目"]})]})]}):null}),t.jsx(it,{open:!!p,onClose:()=>{P(null),A(null),Q(null)},title:(p==null?void 0:p.index)===null?"Add platform":"Configure platform",children:p?t.jsxs("div",{className:"space-y-4",children:[t.jsxs(Z,{label:"Platform",value:St(p.draft.type,[...Ee]),onChange:r=>{const d=r.target.value===ee?p.draft.type:r.target.value;ae(()=>Se(d)),A(null),Q(null)},children:[Ee.map(r=>t.jsx("option",{value:r,children:r},r)),ds.filter(r=>!Ee.includes(r)).map(r=>t.jsx("option",{value:r,children:r},r)),t.jsx("option",{value:ee,children:"custom"})]}),p.draft.type==="lark"?t.jsxs("div",{className:"grid grid-cols-1 gap-3",children:[C!=null&&C.qrCodeUrl?t.jsxs("div",{className:"flex flex-col items-center gap-3 rounded-lg border border-black/10 p-4 dark:border-white/[0.08]",children:[t.jsx("div",{className:"rounded-lg border border-black/10 bg-white p-3",children:t.jsx(Le,{value:C.qrCodeUrl,size:176,includeMargin:!0})}),t.jsx(Pe,{tone:C.status==="confirmed"?"success":C.status==="expired"?"danger":"warning",children:C.botName||C.status||"wait"})]}):null,t.jsxs("div",{className:"flex flex-col gap-2 sm:flex-row sm:flex-wrap",children:[t.jsxs(T,{className:"w-full sm:w-auto",variant:"secondary",onClick:()=>void Gt(),loading:ie,children:[t.jsx(mt,{size:14})," Generate QR"]}),t.jsx(T,{className:"w-full sm:w-auto",variant:"secondary",onClick:()=>void Yt(),loading:ie,disabled:!(C!=null&&C.ticket),children:"Check status"})]}),t.jsx(L,{label:"App ID",value:String(((qe=p.draft.options)==null?void 0:qe.app_id)||""),onChange:r=>ae(d=>({...d,options:{...d.options||{},app_id:r.target.value}})),placeholder:"cli_xxx"}),t.jsx(L,{label:"App Secret",type:"password",value:String(((Je=p.draft.options)==null?void 0:Je.app_secret)||""),onChange:r=>ae(d=>({...d,options:{...d.options||{},app_secret:r.target.value}}))}),t.jsx(L,{label:"Verification token",value:String(((Ze=p.draft.options)==null?void 0:Ze.verification_token)||""),onChange:r=>ae(d=>({...d,options:{...d.options||{},verification_token:r.target.value}}))}),t.jsx(L,{label:"Encrypt key",value:String(((et=p.draft.options)==null?void 0:et.encrypt_key)||""),onChange:r=>ae(d=>({...d,options:{...d.options||{},encrypt_key:r.target.value}}))}),t.jsxs("label",{className:"flex items-center gap-3 text-sm text-foreground",children:[t.jsx("input",{type:"checkbox",checked:((tt=p.draft.options)==null?void 0:tt.auto_approve)===!0,onChange:r=>ae(d=>({...d,options:{...d.options||{},auto_approve:r.target.checked}}))}),"Auto-approve Lark users"]}),t.jsxs("label",{className:"flex items-center gap-3 text-sm text-foreground",children:[t.jsx("input",{type:"checkbox",checked:((st=p.draft.options)==null?void 0:st.card_actions)===!0,onChange:r=>ae(d=>({...d,options:{...d.options||{},card_actions:r.target.checked}}))}),"Enable Lark card action buttons"]})]}):null,p.draft.type==="weixin"?t.jsxs("div",{className:"space-y-3",children:[t.jsx("div",{className:"rounded-lg border border-black/10 bg-black/[0.03] px-3 py-3 text-sm text-muted-foreground dark:border-white/[0.08] dark:bg-white/[0.04]",children:"WeChat does not need an App ID or secret. Save this platform, then generate a QR code and scan it to finish login."}),w!=null&&w.qrCodeUrl?t.jsxs("div",{className:"flex flex-col items-center gap-3 rounded-lg border border-black/10 p-4 dark:border-white/[0.08]",children:[t.jsx("div",{className:"rounded-lg border border-black/10 bg-white p-3",children:t.jsx(Le,{value:w.qrCodeUrl,size:176,includeMargin:!0})}),t.jsx(Pe,{tone:w.status==="confirmed"?"success":w.status==="expired"?"danger":"warning",children:w.status||"wait"})]}):null,t.jsxs("div",{className:"flex flex-col gap-2 sm:flex-row sm:flex-wrap",children:[t.jsxs(T,{className:"w-full sm:w-auto",variant:"secondary",onClick:()=>void Qt(),loading:$,children:[t.jsx(mt,{size:14})," Generate QR"]}),t.jsx(T,{className:"w-full sm:w-auto",variant:"secondary",onClick:()=>void Ht(),loading:$,disabled:!(w!=null&&w.ticket),children:"Check status"})]})]}):null,p.draft.type!=="lark"&&p.draft.type!=="weixin"?t.jsx("div",{className:"rounded-lg border border-black/10 bg-black/[0.03] px-3 py-3 text-sm text-muted-foreground dark:border-white/[0.08] dark:bg-white/[0.04]",children:"This platform has no daily UI fields yet. Existing advanced options are preserved in config."}):null,t.jsxs("div",{className:"flex flex-col-reverse gap-2 border-t border-black/10 pt-4 dark:border-white/[0.08] sm:flex-row sm:justify-end",children:[t.jsx(T,{className:"w-full sm:w-auto",variant:"secondary",onClick:()=>P(null),children:"Cancel"}),t.jsxs(T,{className:"w-full sm:w-auto",onClick:$t,children:[t.jsx(we,{size:14})," Apply"]})]})]}):null})]})}export{Zs as default};
@@ -1,4 +1,4 @@
1
- import{c as o}from"./index-DwhTjLA1.js";/**
1
+ import{c as o}from"./index-cI3pWBnN.js";/**
2
2
  * @license lucide-react v0.487.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as o}from"./index-DwhTjLA1.js";/**
1
+ import{c as o}from"./index-cI3pWBnN.js";/**
2
2
  * @license lucide-react v0.487.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -0,0 +1,6 @@
1
+ import{c as t}from"./index-cI3pWBnN.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 e=[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]],a=t("bot",e);export{a as B};
@@ -1,4 +1,4 @@
1
- import{c}from"./index-DwhTjLA1.js";/**
1
+ import{c}from"./index-cI3pWBnN.js";/**
2
2
  * @license lucide-react v0.487.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as o}from"./index-DwhTjLA1.js";/**
1
+ import{c as o}from"./index-cI3pWBnN.js";/**
2
2
  * @license lucide-react v0.487.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c}from"./index-DwhTjLA1.js";/**
1
+ import{c}from"./index-cI3pWBnN.js";/**
2
2
  * @license lucide-react v0.487.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1 +1 @@
1
- import{a2 as l,s as g,a3 as c,a4 as u,a5 as h,a6 as C,a7 as v,a8 as k,a9 as p,aa as w,ab as S,ac as P,ad as m,ae as L,af as y,ag as D,ah as R,ai as f,aj as b,ak as G,al as Q,am as E,an as M,ao as B,ap as A,aq as F,ar as I,as as W,at as K,au as x,av as T,aw as $,ax as j,ay as U,az as z,aA as q,aB as _,aC as H,aD as J,aE as N,o as i,m as O,aF as V,aG as X,aH as Y,aI as Z,aJ as ee,aK as te,aL as ae,aM as se,i as ne}from"./index-DwhTjLA1.js";function n(){if(!window.desktop)throw new Error("Desktop APIs are unavailable in the browser build");return window.desktop}const re={getRuntimeStatus:()=>n().getRuntimeStatus(),startService:()=>n().startService(),stopService:()=>n().stopService(),restartService:()=>n().restartService(),getLogs:e=>n().getLogs(e),listInstalledAgentRuntimes:()=>_().then(e=>e.runtimes),refreshInstalledAgentRuntimes:()=>q().then(e=>e.runtimes),readConfigFile:()=>n().readConfigFile(),saveRawConfigFile:e=>n().saveRawConfigFile(e),saveStructuredConfigFile:e=>n().saveStructuredConfigFile(e),listModelProviders:()=>z(),createModelProvider:e=>U(e),updateModelProvider:(e,t)=>j(e,t),deleteModelProvider:e=>$(e),getThreadKnowledgeBases:(e,t)=>n().getThreadKnowledgeBases(e,t),updateThreadKnowledgeBases:(e,t,a)=>n().updateThreadKnowledgeBases(e,t,a),deleteThreadKnowledgeBases:(e,t)=>n().deleteThreadKnowledgeBases(e,t),saveSettings:e=>n().saveSettings(e),getCapabilitySnapshot:()=>T(),getPluginDiagnostics:()=>x(),listDiagnosticErrors:()=>K().then(e=>e.errors),runDiagnosticsDoctor:()=>W(),runDeploymentDiagnostics:()=>I(),listChannelGateways:e=>F(e).then(t=>t.gateways),getChannelGatewayStatus:(e,t,a)=>A(e,t,a),testChannelConnection:(e,t,a)=>B(e,t,a),enableChannelGateway:(e,t,a)=>M(e,t,a),disableChannelGateway:(e,t,a)=>E(e,t,a),listChannelPendingPairings:(e,t)=>Q(e,t).then(a=>a.pairings),approveChannelPairing:(e,t)=>G(e,t),rejectChannelPairing:(e,t)=>b(e,t),listChannelAuthorizedUsers:(e,t)=>f(e,t).then(a=>a.users),getChannelQrCode:(e,t,a)=>R(e,t,a),checkChannelQrCodeStatus:(e,t,a,r)=>D(e,t,a,r),getWeixinQrCode:(e,t)=>y(e,t),checkWeixinQrCodeStatus:(e,t,a)=>L(e,t,a),getLarkQrCode:(e,t)=>m(e,t),checkLarkQrCodeStatus:(e,t,a)=>P(e,t,a),listLarkGateways:()=>S().then(e=>e.gateways),getLarkGatewayStatus:(e,t)=>w(e,t),testLarkConnection:(e,t)=>p(e,t),enableLarkGateway:(e,t)=>k(e,t),disableLarkGateway:(e,t)=>v(e,t),listLarkPendingPairings:e=>C(e).then(t=>t.pairings),approveLarkPairing:e=>h(e),rejectLarkPairing:e=>u(e),listLarkAuthorizedUsers:e=>c(e).then(t=>t.users),probeWorkspaceStreaming:e=>n().probeWorkspaceStreaming(e),onRuntimeEvent:e=>n().onRuntimeEvent(e),onRuntimeDetectionEvent:e=>g(t=>{(t.type.startsWith("runtime.detect.")||t.type==="runtime.status.changed")&&e(t)}),onBridgeEvent:e=>l(e)},o={getRuntimeStatus:()=>se(),startService:()=>ae(),stopService:()=>te(),restartService:()=>ee(),getLogs:e=>Z(e),listInstalledAgentRuntimes:()=>_().then(e=>e.runtimes),refreshInstalledAgentRuntimes:()=>q().then(e=>e.runtimes),readConfigFile:()=>Y(),saveRawConfigFile:e=>X(e),saveStructuredConfigFile:e=>V(e),listModelProviders:()=>z(),createModelProvider:e=>U(e),updateModelProvider:(e,t)=>j(e,t),deleteModelProvider:e=>$(e),getThreadKnowledgeBases:(e,t)=>O(t).then(a=>a.selectedKnowledgeBaseIds||[]),updateThreadKnowledgeBases:(e,t,a)=>i(t,a).then(r=>r.knowledgeBaseIds),deleteThreadKnowledgeBases:(e,t)=>i(t,[]).then(()=>({deleted:!0})),saveSettings:e=>N(e),getCapabilitySnapshot:()=>T(),getPluginDiagnostics:()=>x(),listDiagnosticErrors:()=>K().then(e=>e.errors),runDiagnosticsDoctor:()=>W(),runDeploymentDiagnostics:()=>I(),listChannelGateways:e=>F(e).then(t=>t.gateways),getChannelGatewayStatus:(e,t,a)=>A(e,t,a),testChannelConnection:(e,t,a)=>B(e,t,a),enableChannelGateway:(e,t,a)=>M(e,t,a),disableChannelGateway:(e,t,a)=>E(e,t,a),listChannelPendingPairings:(e,t)=>Q(e,t).then(a=>a.pairings),approveChannelPairing:(e,t)=>G(e,t),rejectChannelPairing:(e,t)=>b(e,t),listChannelAuthorizedUsers:(e,t)=>f(e,t).then(a=>a.users),getChannelQrCode:(e,t,a)=>R(e,t,a),checkChannelQrCodeStatus:(e,t,a,r)=>D(e,t,a,r),getWeixinQrCode:(e,t)=>y(e,t),checkWeixinQrCodeStatus:(e,t,a)=>L(e,t,a),getLarkQrCode:(e,t)=>m(e,t),checkLarkQrCodeStatus:(e,t,a)=>P(e,t,a),listLarkGateways:()=>S().then(e=>e.gateways),getLarkGatewayStatus:(e,t)=>w(e,t),testLarkConnection:(e,t)=>p(e,t),enableLarkGateway:(e,t)=>k(e,t),disableLarkGateway:(e,t)=>v(e,t),listLarkPendingPairings:e=>C(e).then(t=>t.pairings),approveLarkPairing:e=>h(e),rejectLarkPairing:e=>u(e),listLarkAuthorizedUsers:e=>c(e).then(t=>t.users),probeWorkspaceStreaming:e=>J(e),onRuntimeEvent:e=>H(e),onRuntimeDetectionEvent:e=>g(t=>{(t.type.startsWith("runtime.detect.")||t.type==="runtime.status.changed")&&e(t)}),onBridgeEvent:e=>l(e)};let d=null;function ie(e){return e==="electron"&&window.desktop?re:o}function s(){const e=d||ie(ne());if(!e)throw new Error("Managed desktop APIs are unavailable in this build");return d=e,e}const de=()=>s().getRuntimeStatus(),le=()=>s().startService(),ge=()=>s().listInstalledAgentRuntimes(),ce=()=>s().refreshInstalledAgentRuntimes(),ue=()=>s().readConfigFile(),he=e=>s().saveStructuredConfigFile(e),Ce=()=>s().listModelProviders(),ve=e=>s().createModelProvider(e),ke=(e,t)=>s().updateModelProvider(e,t),pe=e=>s().deleteModelProvider(e),we=(e,t,a)=>s().updateThreadKnowledgeBases(e,t,a),Se=e=>s().saveSettings(e),Pe=()=>s().getPluginDiagnostics(),me=()=>s().listDiagnosticErrors(),Le=()=>s().runDiagnosticsDoctor(),ye=(e,t)=>s().getWeixinQrCode(e,t),De=(e,t,a)=>s().checkWeixinQrCodeStatus(e,t,a),Re=(e,t)=>s().getLarkQrCode(e,t),fe=(e,t,a)=>s().checkLarkQrCodeStatus(e,t,a),be=(e,t)=>s().testLarkConnection(e,t),Ge=(e,t)=>s().enableLarkGateway(e,t),Qe=e=>s().onRuntimeEvent(e),Ee=e=>s().onRuntimeDetectionEvent(e),Me=e=>s().onBridgeEvent(e);export{Ee as a,Me as b,ue as c,Ce as d,Ge as e,he as f,de as g,ve as h,ke as i,pe as j,ye as k,ge as l,Re as m,De as n,Qe as o,fe as p,Pe as q,ce as r,le as s,be as t,we as u,me as v,Se as w,Le as x};
1
+ import{a2 as l,s as g,a3 as c,a4 as u,a5 as h,a6 as C,a7 as v,a8 as k,a9 as p,aa as w,ab as S,ac as P,ad as m,ae as L,af as y,ag as D,ah as R,ai as f,aj as b,ak as G,al as Q,am as E,an as M,ao as B,ap as A,aq as F,ar as I,as as W,at as K,au as x,av as T,aw as $,ax as j,ay as U,az as z,aA as q,aB as _,aC as H,aD as J,aE as N,o as i,m as O,aF as V,aG as X,aH as Y,aI as Z,aJ as ee,aK as te,aL as ae,aM as se,i as ne}from"./index-cI3pWBnN.js";function n(){if(!window.desktop)throw new Error("Desktop APIs are unavailable in the browser build");return window.desktop}const re={getRuntimeStatus:()=>n().getRuntimeStatus(),startService:()=>n().startService(),stopService:()=>n().stopService(),restartService:()=>n().restartService(),getLogs:e=>n().getLogs(e),listInstalledAgentRuntimes:()=>_().then(e=>e.runtimes),refreshInstalledAgentRuntimes:()=>q().then(e=>e.runtimes),readConfigFile:()=>n().readConfigFile(),saveRawConfigFile:e=>n().saveRawConfigFile(e),saveStructuredConfigFile:e=>n().saveStructuredConfigFile(e),listModelProviders:()=>z(),createModelProvider:e=>U(e),updateModelProvider:(e,t)=>j(e,t),deleteModelProvider:e=>$(e),getThreadKnowledgeBases:(e,t)=>n().getThreadKnowledgeBases(e,t),updateThreadKnowledgeBases:(e,t,a)=>n().updateThreadKnowledgeBases(e,t,a),deleteThreadKnowledgeBases:(e,t)=>n().deleteThreadKnowledgeBases(e,t),saveSettings:e=>n().saveSettings(e),getCapabilitySnapshot:()=>T(),getPluginDiagnostics:()=>x(),listDiagnosticErrors:()=>K().then(e=>e.errors),runDiagnosticsDoctor:()=>W(),runDeploymentDiagnostics:()=>I(),listChannelGateways:e=>F(e).then(t=>t.gateways),getChannelGatewayStatus:(e,t,a)=>A(e,t,a),testChannelConnection:(e,t,a)=>B(e,t,a),enableChannelGateway:(e,t,a)=>M(e,t,a),disableChannelGateway:(e,t,a)=>E(e,t,a),listChannelPendingPairings:(e,t)=>Q(e,t).then(a=>a.pairings),approveChannelPairing:(e,t)=>G(e,t),rejectChannelPairing:(e,t)=>b(e,t),listChannelAuthorizedUsers:(e,t)=>f(e,t).then(a=>a.users),getChannelQrCode:(e,t,a)=>R(e,t,a),checkChannelQrCodeStatus:(e,t,a,r)=>D(e,t,a,r),getWeixinQrCode:(e,t)=>y(e,t),checkWeixinQrCodeStatus:(e,t,a)=>L(e,t,a),getLarkQrCode:(e,t)=>m(e,t),checkLarkQrCodeStatus:(e,t,a)=>P(e,t,a),listLarkGateways:()=>S().then(e=>e.gateways),getLarkGatewayStatus:(e,t)=>w(e,t),testLarkConnection:(e,t)=>p(e,t),enableLarkGateway:(e,t)=>k(e,t),disableLarkGateway:(e,t)=>v(e,t),listLarkPendingPairings:e=>C(e).then(t=>t.pairings),approveLarkPairing:e=>h(e),rejectLarkPairing:e=>u(e),listLarkAuthorizedUsers:e=>c(e).then(t=>t.users),probeWorkspaceStreaming:e=>n().probeWorkspaceStreaming(e),onRuntimeEvent:e=>n().onRuntimeEvent(e),onRuntimeDetectionEvent:e=>g(t=>{(t.type.startsWith("runtime.detect.")||t.type==="runtime.status.changed")&&e(t)}),onBridgeEvent:e=>l(e)},o={getRuntimeStatus:()=>se(),startService:()=>ae(),stopService:()=>te(),restartService:()=>ee(),getLogs:e=>Z(e),listInstalledAgentRuntimes:()=>_().then(e=>e.runtimes),refreshInstalledAgentRuntimes:()=>q().then(e=>e.runtimes),readConfigFile:()=>Y(),saveRawConfigFile:e=>X(e),saveStructuredConfigFile:e=>V(e),listModelProviders:()=>z(),createModelProvider:e=>U(e),updateModelProvider:(e,t)=>j(e,t),deleteModelProvider:e=>$(e),getThreadKnowledgeBases:(e,t)=>O(t).then(a=>a.selectedKnowledgeBaseIds||[]),updateThreadKnowledgeBases:(e,t,a)=>i(t,a).then(r=>r.knowledgeBaseIds),deleteThreadKnowledgeBases:(e,t)=>i(t,[]).then(()=>({deleted:!0})),saveSettings:e=>N(e),getCapabilitySnapshot:()=>T(),getPluginDiagnostics:()=>x(),listDiagnosticErrors:()=>K().then(e=>e.errors),runDiagnosticsDoctor:()=>W(),runDeploymentDiagnostics:()=>I(),listChannelGateways:e=>F(e).then(t=>t.gateways),getChannelGatewayStatus:(e,t,a)=>A(e,t,a),testChannelConnection:(e,t,a)=>B(e,t,a),enableChannelGateway:(e,t,a)=>M(e,t,a),disableChannelGateway:(e,t,a)=>E(e,t,a),listChannelPendingPairings:(e,t)=>Q(e,t).then(a=>a.pairings),approveChannelPairing:(e,t)=>G(e,t),rejectChannelPairing:(e,t)=>b(e,t),listChannelAuthorizedUsers:(e,t)=>f(e,t).then(a=>a.users),getChannelQrCode:(e,t,a)=>R(e,t,a),checkChannelQrCodeStatus:(e,t,a,r)=>D(e,t,a,r),getWeixinQrCode:(e,t)=>y(e,t),checkWeixinQrCodeStatus:(e,t,a)=>L(e,t,a),getLarkQrCode:(e,t)=>m(e,t),checkLarkQrCodeStatus:(e,t,a)=>P(e,t,a),listLarkGateways:()=>S().then(e=>e.gateways),getLarkGatewayStatus:(e,t)=>w(e,t),testLarkConnection:(e,t)=>p(e,t),enableLarkGateway:(e,t)=>k(e,t),disableLarkGateway:(e,t)=>v(e,t),listLarkPendingPairings:e=>C(e).then(t=>t.pairings),approveLarkPairing:e=>h(e),rejectLarkPairing:e=>u(e),listLarkAuthorizedUsers:e=>c(e).then(t=>t.users),probeWorkspaceStreaming:e=>J(e),onRuntimeEvent:e=>H(e),onRuntimeDetectionEvent:e=>g(t=>{(t.type.startsWith("runtime.detect.")||t.type==="runtime.status.changed")&&e(t)}),onBridgeEvent:e=>l(e)};let d=null;function ie(e){return e==="electron"&&window.desktop?re:o}function s(){const e=d||ie(ne());if(!e)throw new Error("Managed desktop APIs are unavailable in this build");return d=e,e}const de=()=>s().getRuntimeStatus(),le=()=>s().startService(),ge=()=>s().listInstalledAgentRuntimes(),ce=()=>s().refreshInstalledAgentRuntimes(),ue=()=>s().readConfigFile(),he=e=>s().saveStructuredConfigFile(e),Ce=()=>s().listModelProviders(),ve=e=>s().createModelProvider(e),ke=(e,t)=>s().updateModelProvider(e,t),pe=e=>s().deleteModelProvider(e),we=(e,t,a)=>s().updateThreadKnowledgeBases(e,t,a),Se=e=>s().saveSettings(e),Pe=()=>s().getPluginDiagnostics(),me=()=>s().listDiagnosticErrors(),Le=()=>s().runDiagnosticsDoctor(),ye=(e,t)=>s().getWeixinQrCode(e,t),De=(e,t,a)=>s().checkWeixinQrCodeStatus(e,t,a),Re=(e,t)=>s().getLarkQrCode(e,t),fe=(e,t,a)=>s().checkLarkQrCodeStatus(e,t,a),be=(e,t)=>s().testLarkConnection(e,t),Ge=(e,t)=>s().enableLarkGateway(e,t),Qe=e=>s().onRuntimeEvent(e),Ee=e=>s().onRuntimeDetectionEvent(e),Me=e=>s().onBridgeEvent(e);export{Ee as a,Me as b,ue as c,Ce as d,Ge as e,he as f,de as g,ve as h,ke as i,pe as j,ye as k,ge as l,Re as m,De as n,Qe as o,fe as p,Pe as q,ce as r,le as s,be as t,we as u,me as v,Se as w,Le as x};
@@ -2,4 +2,4 @@ const T="pi",c="opencode/minimax-m2.5-free";const g=["pi","opencode","codex","cl
2
2
  `),_=["[Monitor Tools]","If the user asks to create, view, edit, delete, or manually run an event monitor for this conversation, use the Bash tool to run the local monitor CLI.","Use these commands:",'lac monitor add --title "<short title>" --source stock.quote --symbol "<ticker>" --condition "<metric operator value>" --message "<exact analysis prompt>" [--cooldown 15m] [--execution-mode same-thread|side-thread]',"lac monitor list","lac monitor list --thread","lac monitor info <short-monitor-id>",'lac monitor edit <short-monitor-id> [--title "<title>"] [--condition "<expr>"] [--message "<exact prompt>"] [--enabled true|false] [--cooldown 15m] [--execution-mode same-thread|side-thread]',"lac monitor del <short-monitor-id>","lac monitor run <short-monitor-id>",'Supported stock metrics include latestPrice, change_percent, changePercent, and abs_change_percent. Example condition: "abs_change_percent >= 3".',"Environment variables LOCAL_AI_WORKSPACE_ID, LOCAL_AI_THREAD_ID, LOCAL_AI_PLATFORM, LOCAL_AI_CHAT_ID, and LOCAL_AI_PLATFORM_USER_ID are already set when available.","Prefer relying on those variables instead of inventing your own route.","Use --execution-mode side-thread by default so monitor analysis does not interrupt the current conversation.","Only use the monitor CLI when the user explicitly asks for event monitoring automation.","[/Monitor Tools]"].join(`
3
3
  `),m=["[Channel Tools]","If the user asks you to send a local file back through the current channel conversation, use the Bash tool to run the local channel CLI.","Use this command:",'lac channel send-file --path "<absolute-or-workdir-relative-file-path>" [--target "<channel-chat-or-user-id>"]',"By default, the file is sent to the current platform conversation from LOCAL_AI_CHAT_ID.","Use --target only when the user explicitly names a different channel chat or user id.","The CLI accepts absolute paths. Check that the file exists before sending when practical.","Only use the channel CLI when the user explicitly asks to send a file through the channel.","[/Channel Tools]"].join(`
4
4
  `),f={allow:"allow",deny:"deny","allow all":"allow all",allowall:"allow all",allow_all:"allow all",allow_always:"allow all",always:"allow all",always_allow:"allow all","always allow":"allow all","allow always":"allow all",始终允许:"allow all",永久允许:"allow all","perm:allow":"allow","perm:deny":"deny","perm:allow_all":"allow all","perm:allow_always":"allow all","perm:always":"allow all"};function P(o,e=[]){return[p,"",_,"",m,...e.flatMap(t=>t?["",t]:[]),"","[User Message]",o,"[/User Message]"].join(`
5
- `)}function I(o){switch(String(o||"").trim().toLowerCase()){case"opencode":return c;case"claudecode":return"";default:return""}}function L(o,e){const t=String(o||"").trim().toLowerCase(),a=String(e||"").trim();return t?t==="opencode"?a||c:t==="claudecode"&&a.startsWith("opencode/")?"":a:a}function d(o){if(!o)return null;const e=String(o).trim().toLowerCase(),t=f[e];return t||(e.includes("allow_all")||e.includes("allow-always")||e.includes("allow_always")||e.includes("allow always")||e.includes("always allow")||e.includes("allow all")||e.includes("始终允许")||e.includes("永久允许")?"allow all":e.startsWith("reject")||e.startsWith("deny")?"deny":e.startsWith("allow")?"allow":null)}function S(o){return!!d(o==null?void 0:o.data)}function D(o){if(!o||typeof o!="object")return null;const e=o,t=typeof e.text=="string"?e.text:typeof e.Text=="string"?e.Text:"",a=typeof e.data=="string"?e.data:typeof e.Data=="string"?e.Data:"";if(!t||!a)return null;const l=d(a);return l?{text:l,data:l}:{text:t,data:a}}function y(o){return o?u.includes(String(o).trim().toLowerCase()):!1}function b(o){const e=String(o||"").trim().toLowerCase();return e==="acp"||e==="pi"||e==="opencode"||e==="codex"||e==="claudecode"||e==="hermes"||e===h}const s="opensandbox-default",w="pi-acp-local",n="/workspace",r="/agent-state",i=[{id:"local-desktop",label:"Local Desktop",corePublicOrigin:"http://127.0.0.1:9831",coreBindHost:"127.0.0.1",openSandboxServerUrl:"http://127.0.0.1:8080",defaultWorkspaceRoot:"",sandboxImagePrefix:"agentdock",workspaceMountPath:n,stateMountPath:r,defaultSandboxProviderId:s},{id:"docker-compose",label:"Docker Compose",corePublicOrigin:"http://127.0.0.1:9831",coreBindHost:"0.0.0.0",openSandboxServerUrl:"http://opensandbox-server:8080",defaultWorkspaceRoot:"/workspace",sandboxImagePrefix:"agentdock",workspaceMountPath:n,stateMountPath:r,defaultSandboxProviderId:s},{id:"remote-cloud",label:"Remote Cloud",corePublicOrigin:"",coreBindHost:"0.0.0.0",openSandboxServerUrl:"",defaultWorkspaceRoot:"/workspace",sandboxImagePrefix:"agentdock",workspaceMountPath:n,stateMountPath:r,defaultSandboxProviderId:s}],O=[{id:w,agent_type:"pi",image:"agentdock/pi-acp:local",transport:"http-ndjson",acp_port:8080,entrypoint:["node","/opt/agentdock/acp-bridge.mjs"],workspace_mount_path:n,state_mount_path:r}];function A(o){const e=String(o||"").trim();return i.find(t=>t.id===e)||i[0]}function x(o){const e=A(o);return{id:e.defaultSandboxProviderId,type:"opensandbox",name:"OpenSandbox",server_url:e.openSandboxServerUrl,api_key_env:"OPEN_SANDBOX_API_KEY"}}function C(o){const e=String(o||"").trim().toLowerCase()||"pi";return O.find(t=>t.agent_type===e)||{id:`${e}-acp-local`,agent_type:e,image:`agentdock/${e}-acp:local`,transport:"http-ndjson",acp_port:8080,entrypoint:["node","/opt/agentdock/acp-bridge.mjs"],workspace_mount_path:n,state_mount_path:r}}export{g as D,d as a,b,C as c,x as d,L as e,I as f,A as g,s as h,S as i,i as j,E as k,T as l,D as n,y as s,P as w};
5
+ `)}function I(o){switch(String(o||"").trim().toLowerCase()){case"opencode":return c;case"claudecode":return"";default:return""}}function L(o,e){const t=String(o||"").trim().toLowerCase(),a=String(e||"").trim();return t?t==="opencode"?a||c:t==="claudecode"&&a.startsWith("opencode/")?"":a:a}function d(o){if(!o)return null;const e=String(o).trim().toLowerCase(),t=f[e];return t||(e.includes("allow_all")||e.includes("allow-always")||e.includes("allow_always")||e.includes("allow always")||e.includes("always allow")||e.includes("allow all")||e.includes("始终允许")||e.includes("永久允许")?"allow all":e.startsWith("reject")||e.startsWith("deny")?"deny":e.startsWith("allow")?"allow":null)}function S(o){return!!d(o==null?void 0:o.data)}function D(o){if(!o||typeof o!="object")return null;const e=o,t=typeof e.text=="string"?e.text:typeof e.Text=="string"?e.Text:"",a=typeof e.data=="string"?e.data:typeof e.Data=="string"?e.Data:"";if(!t||!a)return null;const l=d(a);return l?{text:l,data:l}:{text:t,data:a}}function y(o){return o?u.includes(String(o).trim().toLowerCase()):!1}function b(o){const e=String(o||"").trim().toLowerCase();return e==="acp"||e==="pi"||e==="opencode"||e==="codex"||e==="claudecode"||e==="hermes"||e===h}const s="opensandbox-default",w="pi-acp-local",n="/workspace",r="/agent-state",i=[{id:"local-desktop",label:"Local Desktop",corePublicOrigin:"http://127.0.0.1:9831",coreBindHost:"127.0.0.1",openSandboxServerUrl:"http://127.0.0.1:8080",defaultWorkspaceRoot:"",sandboxImagePrefix:"agentdock",workspaceMountPath:n,stateMountPath:r,defaultSandboxProviderId:s},{id:"docker-compose",label:"Docker Compose",corePublicOrigin:"http://127.0.0.1:9831",coreBindHost:"0.0.0.0",openSandboxServerUrl:"http://opensandbox-server:8080",defaultWorkspaceRoot:"/workspace",sandboxImagePrefix:"agentdock",workspaceMountPath:n,stateMountPath:r,defaultSandboxProviderId:s},{id:"remote-cloud",label:"Remote Cloud",corePublicOrigin:"",coreBindHost:"0.0.0.0",openSandboxServerUrl:"",defaultWorkspaceRoot:"/workspace",sandboxImagePrefix:"agentdock",workspaceMountPath:n,stateMountPath:r,defaultSandboxProviderId:s}],O=[{id:w,agent_type:"pi",image:"agentdock/pi-acp:local",transport:"http-ndjson",acp_port:8080,entrypoint:["node","/opt/agentdock/acp-bridge.mjs"],workspace_mount_path:n,state_mount_path:r}];function A(o){const e=String(o||"").trim();return i.find(t=>t.id===e)||i[0]}function x(o){const e=A(o);return{id:e.defaultSandboxProviderId,type:"opensandbox",name:"OpenSandbox",server_url:e.openSandboxServerUrl,api_key_env:"OPEN_SANDBOX_API_KEY"}}function C(o){const e=String(o||"").trim().toLowerCase()||"pi";return O.find(t=>t.agent_type===e)||{id:`${e}-acp-local`,agent_type:e,image:`agentdock/${e}-acp:local`,transport:"http-ndjson",acp_port:8080,entrypoint:["node","/opt/agentdock/acp-bridge.mjs"],workspace_mount_path:n,state_mount_path:r}}export{s as D,d as a,b,L as c,T as d,C as e,g as f,I as g,i as h,S as i,A as j,x as k,E as l,D as n,y as s,P as w};
@@ -1,4 +1,4 @@
1
- import{c}from"./index-DwhTjLA1.js";/**
1
+ import{c}from"./index-cI3pWBnN.js";/**
2
2
  * @license lucide-react v0.487.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c}from"./index-DwhTjLA1.js";/**
1
+ import{c}from"./index-cI3pWBnN.js";/**
2
2
  * @license lucide-react v0.487.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{H as Le,aY as Ne,r as c,j as x,aZ as pe,a_ as Ae,aO as te}from"./index-DwhTjLA1.js";var ye=Ne();const De=Le(ye);function Y(e,t,{checkForDefaultPrevented:n=!0}={}){return function(o){if(e==null||e(o),n===!1||!o.defaultPrevented)return t==null?void 0:t(o)}}function Jt(e,t){const n=c.createContext(t),r=i=>{const{children:s,...a}=i,h=c.useMemo(()=>a,Object.values(a));return x.jsx(n.Provider,{value:h,children:s})};r.displayName=e+"Provider";function o(i){const s=c.useContext(n);if(s)return s;if(t!==void 0)return t;throw new Error(`\`${i}\` must be used within \`${e}\``)}return[r,o]}function en(e,t=[]){let n=[];function r(i,s){const a=c.createContext(s),h=n.length;n=[...n,s];const l=d=>{var p;const{scope:v,children:y,...w}=d,u=((p=v==null?void 0:v[e])==null?void 0:p[h])||a,m=c.useMemo(()=>w,Object.values(w));return x.jsx(u.Provider,{value:m,children:y})};l.displayName=i+"Provider";function f(d,v){var u;const y=((u=v==null?void 0:v[e])==null?void 0:u[h])||a,w=c.useContext(y);if(w)return w;if(s!==void 0)return s;throw new Error(`\`${d}\` must be used within \`${i}\``)}return[l,f]}const o=()=>{const i=n.map(s=>c.createContext(s));return function(a){const h=(a==null?void 0:a[e])||i;return c.useMemo(()=>({[`__scope${e}`]:{...a,[e]:h}}),[a,h])}};return o.scopeName=e,[r,ke(o,...t)]}function ke(...e){const t=e[0];if(e.length===1)return t;const n=()=>{const r=e.map(o=>({useScope:o(),scopeName:o.scopeName}));return function(i){const s=r.reduce((a,{useScope:h,scopeName:l})=>{const d=h(i)[`__scope${l}`];return{...a,...d}},{});return c.useMemo(()=>({[`__scope${t.scopeName}`]:s}),[s])}};return n.scopeName=t.scopeName,n}var ne=globalThis!=null&&globalThis.document?c.useLayoutEffect:()=>{},Fe=pe[" useId ".trim().toString()]||(()=>{}),Me=0;function tn(e){const[t,n]=c.useState(Fe());return ne(()=>{n(r=>r??String(Me++))},[e]),e||(t?`radix-${t}`:"")}var Ie=pe[" useInsertionEffect ".trim().toString()]||ne;function nn({prop:e,defaultProp:t,onChange:n=()=>{},caller:r}){const[o,i,s]=We({defaultProp:t,onChange:n}),a=e!==void 0,h=a?e:o;{const f=c.useRef(e!==void 0);c.useEffect(()=>{const d=f.current;d!==a&&console.warn(`${r} is changing from ${d?"controlled":"uncontrolled"} to ${a?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),f.current=a},[a,r])}const l=c.useCallback(f=>{var d;if(a){const v=Be(f)?f(e):f;v!==e&&((d=s.current)==null||d.call(s,v))}else i(f)},[a,e,i,s]);return[h,l]}function We({defaultProp:e,onChange:t}){const[n,r]=c.useState(e),o=c.useRef(n),i=c.useRef(t);return Ie(()=>{i.current=t},[t]),c.useEffect(()=>{var s;o.current!==n&&((s=i.current)==null||s.call(i,n),o.current=n)},[n,o]),[n,r,i]}function Be(e){return typeof e=="function"}function _e(e){const t=je(e),n=c.forwardRef((r,o)=>{const{children:i,...s}=r,a=c.Children.toArray(i),h=a.find($e);if(h){const l=h.props.children,f=a.map(d=>d===h?c.Children.count(l)>1?c.Children.only(null):c.isValidElement(l)?l.props.children:null:d);return x.jsx(t,{...s,ref:o,children:c.isValidElement(l)?c.cloneElement(l,void 0,f):null})}return x.jsx(t,{...s,ref:o,children:i})});return n.displayName=`${e}.Slot`,n}function je(e){const t=c.forwardRef((n,r)=>{const{children:o,...i}=n;if(c.isValidElement(o)){const s=Ke(o),a=Ve(i,o.props);return o.type!==c.Fragment&&(a.ref=r?Ae(r,s):s),c.cloneElement(o,a)}return c.Children.count(o)>1?c.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var Ue=Symbol("radix.slottable");function $e(e){return c.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===Ue}function Ve(e,t){const n={...t};for(const r in t){const o=e[r],i=t[r];/^on[A-Z]/.test(r)?o&&i?n[r]=(...a)=>{const h=i(...a);return o(...a),h}:o&&(n[r]=o):r==="style"?n[r]={...o,...i}:r==="className"&&(n[r]=[o,i].filter(Boolean).join(" "))}return{...e,...n}}function Ke(e){var r,o;let t=(r=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:r.get,n=t&&"isReactWarning"in t&&t.isReactWarning;return n?e.ref:(t=(o=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:o.get,n=t&&"isReactWarning"in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var Ye=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],V=Ye.reduce((e,t)=>{const n=_e(`Primitive.${t}`),r=c.forwardRef((o,i)=>{const{asChild:s,...a}=o,h=s?n:t;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),x.jsx(h,{...a,ref:i})});return r.displayName=`Primitive.${t}`,{...e,[t]:r}},{});function He(e,t){e&&ye.flushSync(()=>e.dispatchEvent(t))}function M(e){const t=c.useRef(e);return c.useEffect(()=>{t.current=e}),c.useMemo(()=>(...n)=>{var r;return(r=t.current)==null?void 0:r.call(t,...n)},[])}function Xe(e,t=globalThis==null?void 0:globalThis.document){const n=M(e);c.useEffect(()=>{const r=o=>{o.key==="Escape"&&n(o)};return t.addEventListener("keydown",r,{capture:!0}),()=>t.removeEventListener("keydown",r,{capture:!0})},[n,t])}var ze="DismissableLayer",J="dismissableLayer.update",Ze="dismissableLayer.pointerDownOutside",Ge="dismissableLayer.focusOutside",oe,Ee=c.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),qe=c.forwardRef((e,t)=>{const{disableOutsidePointerEvents:n=!1,onEscapeKeyDown:r,onPointerDownOutside:o,onFocusOutside:i,onInteractOutside:s,onDismiss:a,...h}=e,l=c.useContext(Ee),[f,d]=c.useState(null),v=(f==null?void 0:f.ownerDocument)??(globalThis==null?void 0:globalThis.document),[,y]=c.useState({}),w=te(t,E=>d(E)),u=Array.from(l.layers),[m]=[...l.layersWithOutsidePointerEventsDisabled].slice(-1),p=u.indexOf(m),g=f?u.indexOf(f):-1,b=l.layersWithOutsidePointerEventsDisabled.size>0,S=g>=p,C=et(E=>{const T=E.target,L=[...l.branches].some(F=>F.contains(T));!S||L||(o==null||o(E),s==null||s(E),E.defaultPrevented||a==null||a())},v),P=tt(E=>{const T=E.target;[...l.branches].some(F=>F.contains(T))||(i==null||i(E),s==null||s(E),E.defaultPrevented||a==null||a())},v);return Xe(E=>{g===l.layers.size-1&&(r==null||r(E),!E.defaultPrevented&&a&&(E.preventDefault(),a()))},v),c.useEffect(()=>{if(f)return n&&(l.layersWithOutsidePointerEventsDisabled.size===0&&(oe=v.body.style.pointerEvents,v.body.style.pointerEvents="none"),l.layersWithOutsidePointerEventsDisabled.add(f)),l.layers.add(f),ae(),()=>{n&&l.layersWithOutsidePointerEventsDisabled.size===1&&(v.body.style.pointerEvents=oe)}},[f,v,n,l]),c.useEffect(()=>()=>{f&&(l.layers.delete(f),l.layersWithOutsidePointerEventsDisabled.delete(f),ae())},[f,l]),c.useEffect(()=>{const E=()=>y({});return document.addEventListener(J,E),()=>document.removeEventListener(J,E)},[]),x.jsx(V.div,{...h,ref:w,style:{pointerEvents:b?S?"auto":"none":void 0,...e.style},onFocusCapture:Y(e.onFocusCapture,P.onFocusCapture),onBlurCapture:Y(e.onBlurCapture,P.onBlurCapture),onPointerDownCapture:Y(e.onPointerDownCapture,C.onPointerDownCapture)})});qe.displayName=ze;var Qe="DismissableLayerBranch",Je=c.forwardRef((e,t)=>{const n=c.useContext(Ee),r=c.useRef(null),o=te(t,r);return c.useEffect(()=>{const i=r.current;if(i)return n.branches.add(i),()=>{n.branches.delete(i)}},[n.branches]),x.jsx(V.div,{...e,ref:o})});Je.displayName=Qe;function et(e,t=globalThis==null?void 0:globalThis.document){const n=M(e),r=c.useRef(!1),o=c.useRef(()=>{});return c.useEffect(()=>{const i=a=>{if(a.target&&!r.current){let h=function(){ge(Ze,n,l,{discrete:!0})};const l={originalEvent:a};a.pointerType==="touch"?(t.removeEventListener("click",o.current),o.current=h,t.addEventListener("click",o.current,{once:!0})):h()}else t.removeEventListener("click",o.current);r.current=!1},s=window.setTimeout(()=>{t.addEventListener("pointerdown",i)},0);return()=>{window.clearTimeout(s),t.removeEventListener("pointerdown",i),t.removeEventListener("click",o.current)}},[t,n]),{onPointerDownCapture:()=>r.current=!0}}function tt(e,t=globalThis==null?void 0:globalThis.document){const n=M(e),r=c.useRef(!1);return c.useEffect(()=>{const o=i=>{i.target&&!r.current&&ge(Ge,n,{originalEvent:i},{discrete:!1})};return t.addEventListener("focusin",o),()=>t.removeEventListener("focusin",o)},[t,n]),{onFocusCapture:()=>r.current=!0,onBlurCapture:()=>r.current=!1}}function ae(){const e=new CustomEvent(J);document.dispatchEvent(e)}function ge(e,t,n,{discrete:r}){const o=n.originalEvent.target,i=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});t&&o.addEventListener(e,t,{once:!0}),r?He(o,i):o.dispatchEvent(i)}var H="focusScope.autoFocusOnMount",X="focusScope.autoFocusOnUnmount",ce={bubbles:!1,cancelable:!0},nt="FocusScope",rt=c.forwardRef((e,t)=>{const{loop:n=!1,trapped:r=!1,onMountAutoFocus:o,onUnmountAutoFocus:i,...s}=e,[a,h]=c.useState(null),l=M(o),f=M(i),d=c.useRef(null),v=te(t,u=>h(u)),y=c.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;c.useEffect(()=>{if(r){let u=function(b){if(y.paused||!a)return;const S=b.target;a.contains(S)?d.current=S:O(d.current,{select:!0})},m=function(b){if(y.paused||!a)return;const S=b.relatedTarget;S!==null&&(a.contains(S)||O(d.current,{select:!0}))},p=function(b){if(document.activeElement===document.body)for(const C of b)C.removedNodes.length>0&&O(a)};document.addEventListener("focusin",u),document.addEventListener("focusout",m);const g=new MutationObserver(p);return a&&g.observe(a,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",u),document.removeEventListener("focusout",m),g.disconnect()}}},[r,a,y.paused]),c.useEffect(()=>{if(a){se.add(y);const u=document.activeElement;if(!a.contains(u)){const p=new CustomEvent(H,ce);a.addEventListener(H,l),a.dispatchEvent(p),p.defaultPrevented||(ot(ut(be(a)),{select:!0}),document.activeElement===u&&O(a))}return()=>{a.removeEventListener(H,l),setTimeout(()=>{const p=new CustomEvent(X,ce);a.addEventListener(X,f),a.dispatchEvent(p),p.defaultPrevented||O(u??document.body,{select:!0}),a.removeEventListener(X,f),se.remove(y)},0)}}},[a,l,f,y]);const w=c.useCallback(u=>{if(!n&&!r||y.paused)return;const m=u.key==="Tab"&&!u.altKey&&!u.ctrlKey&&!u.metaKey,p=document.activeElement;if(m&&p){const g=u.currentTarget,[b,S]=at(g);b&&S?!u.shiftKey&&p===S?(u.preventDefault(),n&&O(b,{select:!0})):u.shiftKey&&p===b&&(u.preventDefault(),n&&O(S,{select:!0})):p===g&&u.preventDefault()}},[n,r,y.paused]);return x.jsx(V.div,{tabIndex:-1,...s,ref:v,onKeyDown:w})});rt.displayName=nt;function ot(e,{select:t=!1}={}){const n=document.activeElement;for(const r of e)if(O(r,{select:t}),document.activeElement!==n)return}function at(e){const t=be(e),n=ie(t,e),r=ie(t.reverse(),e);return[n,r]}function be(e){const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:r=>{const o=r.tagName==="INPUT"&&r.type==="hidden";return r.disabled||r.hidden||o?NodeFilter.FILTER_SKIP:r.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t}function ie(e,t){for(const n of e)if(!ct(n,{upTo:t}))return n}function ct(e,{upTo:t}){if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1}function it(e){return e instanceof HTMLInputElement&&"select"in e}function O(e,{select:t=!1}={}){if(e&&e.focus){const n=document.activeElement;e.focus({preventScroll:!0}),e!==n&&it(e)&&t&&e.select()}}var se=st();function st(){let e=[];return{add(t){const n=e[0];t!==n&&(n==null||n.pause()),e=ue(e,t),e.unshift(t)},remove(t){var n;e=ue(e,t),(n=e[0])==null||n.resume()}}}function ue(e,t){const n=[...e],r=n.indexOf(t);return r!==-1&&n.splice(r,1),n}function ut(e){return e.filter(t=>t.tagName!=="A")}var lt="Portal",ft=c.forwardRef((e,t)=>{var a;const{container:n,...r}=e,[o,i]=c.useState(!1);ne(()=>i(!0),[]);const s=n||o&&((a=globalThis==null?void 0:globalThis.document)==null?void 0:a.body);return s?De.createPortal(x.jsx(V.div,{...r,ref:t}),s):null});ft.displayName=lt;var z=0;function rn(){c.useEffect(()=>{const e=document.querySelectorAll("[data-radix-focus-guard]");return document.body.insertAdjacentElement("afterbegin",e[0]??le()),document.body.insertAdjacentElement("beforeend",e[1]??le()),z++,()=>{z===1&&document.querySelectorAll("[data-radix-focus-guard]").forEach(t=>t.remove()),z--}},[])}function le(){const e=document.createElement("span");return e.setAttribute("data-radix-focus-guard",""),e.tabIndex=0,e.style.outline="none",e.style.opacity="0",e.style.position="fixed",e.style.pointerEvents="none",e}var R=function(){return R=Object.assign||function(t){for(var n,r=1,o=arguments.length;r<o;r++){n=arguments[r];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(t[i]=n[i])}return t},R.apply(this,arguments)};function Se(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n}function dt(e,t,n){if(n||arguments.length===2)for(var r=0,o=t.length,i;r<o;r++)(i||!(r in t))&&(i||(i=Array.prototype.slice.call(t,0,r)),i[r]=t[r]);return e.concat(i||Array.prototype.slice.call(t))}var U="right-scroll-bar-position",$="width-before-scroll-bar",vt="with-scroll-bars-hidden",ht="--removed-body-scroll-bar-size";function Z(e,t){return typeof e=="function"?e(t):e&&(e.current=t),e}function mt(e,t){var n=c.useState(function(){return{value:e,callback:t,facade:{get current(){return n.value},set current(r){var o=n.value;o!==r&&(n.value=r,n.callback(r,o))}}}})[0];return n.callback=t,n.facade}var pt=typeof window<"u"?c.useLayoutEffect:c.useEffect,fe=new WeakMap;function yt(e,t){var n=mt(null,function(r){return e.forEach(function(o){return Z(o,r)})});return pt(function(){var r=fe.get(n);if(r){var o=new Set(r),i=new Set(e),s=n.current;o.forEach(function(a){i.has(a)||Z(a,null)}),i.forEach(function(a){o.has(a)||Z(a,s)})}fe.set(n,e)},[e]),n}function Et(e){return e}function gt(e,t){t===void 0&&(t=Et);var n=[],r=!1,o={read:function(){if(r)throw new Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");return n.length?n[n.length-1]:e},useMedium:function(i){var s=t(i,r);return n.push(s),function(){n=n.filter(function(a){return a!==s})}},assignSyncMedium:function(i){for(r=!0;n.length;){var s=n;n=[],s.forEach(i)}n={push:function(a){return i(a)},filter:function(){return n}}},assignMedium:function(i){r=!0;var s=[];if(n.length){var a=n;n=[],a.forEach(i),s=n}var h=function(){var f=s;s=[],f.forEach(i)},l=function(){return Promise.resolve().then(h)};l(),n={push:function(f){s.push(f),l()},filter:function(f){return s=s.filter(f),n}}}};return o}function bt(e){e===void 0&&(e={});var t=gt(null);return t.options=R({async:!0,ssr:!1},e),t}var we=function(e){var t=e.sideCar,n=Se(e,["sideCar"]);if(!t)throw new Error("Sidecar: please provide `sideCar` property to import the right car");var r=t.read();if(!r)throw new Error("Sidecar medium not found");return c.createElement(r,R({},n))};we.isSideCarExport=!0;function St(e,t){return e.useMedium(t),we}var Ce=bt(),G=function(){},K=c.forwardRef(function(e,t){var n=c.useRef(null),r=c.useState({onScrollCapture:G,onWheelCapture:G,onTouchMoveCapture:G}),o=r[0],i=r[1],s=e.forwardProps,a=e.children,h=e.className,l=e.removeScrollBar,f=e.enabled,d=e.shards,v=e.sideCar,y=e.noRelative,w=e.noIsolation,u=e.inert,m=e.allowPinchZoom,p=e.as,g=p===void 0?"div":p,b=e.gapMode,S=Se(e,["forwardProps","children","className","removeScrollBar","enabled","shards","sideCar","noRelative","noIsolation","inert","allowPinchZoom","as","gapMode"]),C=v,P=yt([n,t]),E=R(R({},S),o);return c.createElement(c.Fragment,null,f&&c.createElement(C,{sideCar:Ce,removeScrollBar:l,shards:d,noRelative:y,noIsolation:w,inert:u,setCallbacks:i,allowPinchZoom:!!m,lockRef:n,gapMode:b}),s?c.cloneElement(c.Children.only(a),R(R({},E),{ref:P})):c.createElement(g,R({},E,{className:h,ref:P}),a))});K.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1};K.classNames={fullWidth:$,zeroRight:U};var wt=function(){if(typeof __webpack_nonce__<"u")return __webpack_nonce__};function Ct(){if(!document)return null;var e=document.createElement("style");e.type="text/css";var t=wt();return t&&e.setAttribute("nonce",t),e}function Pt(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function Rt(e){var t=document.head||document.getElementsByTagName("head")[0];t.appendChild(e)}var xt=function(){var e=0,t=null;return{add:function(n){e==0&&(t=Ct())&&(Pt(t,n),Rt(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}},Ot=function(){var e=xt();return function(t,n){c.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&n])}},Pe=function(){var e=Ot(),t=function(n){var r=n.styles,o=n.dynamic;return e(r,o),null};return t},Tt={left:0,top:0,right:0,gap:0},q=function(e){return parseInt(e||"",10)||0},Lt=function(e){var t=window.getComputedStyle(document.body),n=t[e==="padding"?"paddingLeft":"marginLeft"],r=t[e==="padding"?"paddingTop":"marginTop"],o=t[e==="padding"?"paddingRight":"marginRight"];return[q(n),q(r),q(o)]},Nt=function(e){if(e===void 0&&(e="margin"),typeof window>"u")return Tt;var t=Lt(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}},At=Pe(),k="data-scroll-locked",Dt=function(e,t,n,r){var o=e.left,i=e.top,s=e.right,a=e.gap;return n===void 0&&(n="margin"),`
1
+ import{H as Le,aY as Ne,r as c,j as x,aZ as pe,a_ as Ae,aO as te}from"./index-cI3pWBnN.js";var ye=Ne();const De=Le(ye);function Y(e,t,{checkForDefaultPrevented:n=!0}={}){return function(o){if(e==null||e(o),n===!1||!o.defaultPrevented)return t==null?void 0:t(o)}}function Jt(e,t){const n=c.createContext(t),r=i=>{const{children:s,...a}=i,h=c.useMemo(()=>a,Object.values(a));return x.jsx(n.Provider,{value:h,children:s})};r.displayName=e+"Provider";function o(i){const s=c.useContext(n);if(s)return s;if(t!==void 0)return t;throw new Error(`\`${i}\` must be used within \`${e}\``)}return[r,o]}function en(e,t=[]){let n=[];function r(i,s){const a=c.createContext(s),h=n.length;n=[...n,s];const l=d=>{var p;const{scope:v,children:y,...w}=d,u=((p=v==null?void 0:v[e])==null?void 0:p[h])||a,m=c.useMemo(()=>w,Object.values(w));return x.jsx(u.Provider,{value:m,children:y})};l.displayName=i+"Provider";function f(d,v){var u;const y=((u=v==null?void 0:v[e])==null?void 0:u[h])||a,w=c.useContext(y);if(w)return w;if(s!==void 0)return s;throw new Error(`\`${d}\` must be used within \`${i}\``)}return[l,f]}const o=()=>{const i=n.map(s=>c.createContext(s));return function(a){const h=(a==null?void 0:a[e])||i;return c.useMemo(()=>({[`__scope${e}`]:{...a,[e]:h}}),[a,h])}};return o.scopeName=e,[r,ke(o,...t)]}function ke(...e){const t=e[0];if(e.length===1)return t;const n=()=>{const r=e.map(o=>({useScope:o(),scopeName:o.scopeName}));return function(i){const s=r.reduce((a,{useScope:h,scopeName:l})=>{const d=h(i)[`__scope${l}`];return{...a,...d}},{});return c.useMemo(()=>({[`__scope${t.scopeName}`]:s}),[s])}};return n.scopeName=t.scopeName,n}var ne=globalThis!=null&&globalThis.document?c.useLayoutEffect:()=>{},Fe=pe[" useId ".trim().toString()]||(()=>{}),Me=0;function tn(e){const[t,n]=c.useState(Fe());return ne(()=>{n(r=>r??String(Me++))},[e]),e||(t?`radix-${t}`:"")}var Ie=pe[" useInsertionEffect ".trim().toString()]||ne;function nn({prop:e,defaultProp:t,onChange:n=()=>{},caller:r}){const[o,i,s]=We({defaultProp:t,onChange:n}),a=e!==void 0,h=a?e:o;{const f=c.useRef(e!==void 0);c.useEffect(()=>{const d=f.current;d!==a&&console.warn(`${r} is changing from ${d?"controlled":"uncontrolled"} to ${a?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),f.current=a},[a,r])}const l=c.useCallback(f=>{var d;if(a){const v=Be(f)?f(e):f;v!==e&&((d=s.current)==null||d.call(s,v))}else i(f)},[a,e,i,s]);return[h,l]}function We({defaultProp:e,onChange:t}){const[n,r]=c.useState(e),o=c.useRef(n),i=c.useRef(t);return Ie(()=>{i.current=t},[t]),c.useEffect(()=>{var s;o.current!==n&&((s=i.current)==null||s.call(i,n),o.current=n)},[n,o]),[n,r,i]}function Be(e){return typeof e=="function"}function _e(e){const t=je(e),n=c.forwardRef((r,o)=>{const{children:i,...s}=r,a=c.Children.toArray(i),h=a.find($e);if(h){const l=h.props.children,f=a.map(d=>d===h?c.Children.count(l)>1?c.Children.only(null):c.isValidElement(l)?l.props.children:null:d);return x.jsx(t,{...s,ref:o,children:c.isValidElement(l)?c.cloneElement(l,void 0,f):null})}return x.jsx(t,{...s,ref:o,children:i})});return n.displayName=`${e}.Slot`,n}function je(e){const t=c.forwardRef((n,r)=>{const{children:o,...i}=n;if(c.isValidElement(o)){const s=Ke(o),a=Ve(i,o.props);return o.type!==c.Fragment&&(a.ref=r?Ae(r,s):s),c.cloneElement(o,a)}return c.Children.count(o)>1?c.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var Ue=Symbol("radix.slottable");function $e(e){return c.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===Ue}function Ve(e,t){const n={...t};for(const r in t){const o=e[r],i=t[r];/^on[A-Z]/.test(r)?o&&i?n[r]=(...a)=>{const h=i(...a);return o(...a),h}:o&&(n[r]=o):r==="style"?n[r]={...o,...i}:r==="className"&&(n[r]=[o,i].filter(Boolean).join(" "))}return{...e,...n}}function Ke(e){var r,o;let t=(r=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:r.get,n=t&&"isReactWarning"in t&&t.isReactWarning;return n?e.ref:(t=(o=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:o.get,n=t&&"isReactWarning"in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var Ye=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],V=Ye.reduce((e,t)=>{const n=_e(`Primitive.${t}`),r=c.forwardRef((o,i)=>{const{asChild:s,...a}=o,h=s?n:t;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),x.jsx(h,{...a,ref:i})});return r.displayName=`Primitive.${t}`,{...e,[t]:r}},{});function He(e,t){e&&ye.flushSync(()=>e.dispatchEvent(t))}function M(e){const t=c.useRef(e);return c.useEffect(()=>{t.current=e}),c.useMemo(()=>(...n)=>{var r;return(r=t.current)==null?void 0:r.call(t,...n)},[])}function Xe(e,t=globalThis==null?void 0:globalThis.document){const n=M(e);c.useEffect(()=>{const r=o=>{o.key==="Escape"&&n(o)};return t.addEventListener("keydown",r,{capture:!0}),()=>t.removeEventListener("keydown",r,{capture:!0})},[n,t])}var ze="DismissableLayer",J="dismissableLayer.update",Ze="dismissableLayer.pointerDownOutside",Ge="dismissableLayer.focusOutside",oe,Ee=c.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),qe=c.forwardRef((e,t)=>{const{disableOutsidePointerEvents:n=!1,onEscapeKeyDown:r,onPointerDownOutside:o,onFocusOutside:i,onInteractOutside:s,onDismiss:a,...h}=e,l=c.useContext(Ee),[f,d]=c.useState(null),v=(f==null?void 0:f.ownerDocument)??(globalThis==null?void 0:globalThis.document),[,y]=c.useState({}),w=te(t,E=>d(E)),u=Array.from(l.layers),[m]=[...l.layersWithOutsidePointerEventsDisabled].slice(-1),p=u.indexOf(m),g=f?u.indexOf(f):-1,b=l.layersWithOutsidePointerEventsDisabled.size>0,S=g>=p,C=et(E=>{const T=E.target,L=[...l.branches].some(F=>F.contains(T));!S||L||(o==null||o(E),s==null||s(E),E.defaultPrevented||a==null||a())},v),P=tt(E=>{const T=E.target;[...l.branches].some(F=>F.contains(T))||(i==null||i(E),s==null||s(E),E.defaultPrevented||a==null||a())},v);return Xe(E=>{g===l.layers.size-1&&(r==null||r(E),!E.defaultPrevented&&a&&(E.preventDefault(),a()))},v),c.useEffect(()=>{if(f)return n&&(l.layersWithOutsidePointerEventsDisabled.size===0&&(oe=v.body.style.pointerEvents,v.body.style.pointerEvents="none"),l.layersWithOutsidePointerEventsDisabled.add(f)),l.layers.add(f),ae(),()=>{n&&l.layersWithOutsidePointerEventsDisabled.size===1&&(v.body.style.pointerEvents=oe)}},[f,v,n,l]),c.useEffect(()=>()=>{f&&(l.layers.delete(f),l.layersWithOutsidePointerEventsDisabled.delete(f),ae())},[f,l]),c.useEffect(()=>{const E=()=>y({});return document.addEventListener(J,E),()=>document.removeEventListener(J,E)},[]),x.jsx(V.div,{...h,ref:w,style:{pointerEvents:b?S?"auto":"none":void 0,...e.style},onFocusCapture:Y(e.onFocusCapture,P.onFocusCapture),onBlurCapture:Y(e.onBlurCapture,P.onBlurCapture),onPointerDownCapture:Y(e.onPointerDownCapture,C.onPointerDownCapture)})});qe.displayName=ze;var Qe="DismissableLayerBranch",Je=c.forwardRef((e,t)=>{const n=c.useContext(Ee),r=c.useRef(null),o=te(t,r);return c.useEffect(()=>{const i=r.current;if(i)return n.branches.add(i),()=>{n.branches.delete(i)}},[n.branches]),x.jsx(V.div,{...e,ref:o})});Je.displayName=Qe;function et(e,t=globalThis==null?void 0:globalThis.document){const n=M(e),r=c.useRef(!1),o=c.useRef(()=>{});return c.useEffect(()=>{const i=a=>{if(a.target&&!r.current){let h=function(){ge(Ze,n,l,{discrete:!0})};const l={originalEvent:a};a.pointerType==="touch"?(t.removeEventListener("click",o.current),o.current=h,t.addEventListener("click",o.current,{once:!0})):h()}else t.removeEventListener("click",o.current);r.current=!1},s=window.setTimeout(()=>{t.addEventListener("pointerdown",i)},0);return()=>{window.clearTimeout(s),t.removeEventListener("pointerdown",i),t.removeEventListener("click",o.current)}},[t,n]),{onPointerDownCapture:()=>r.current=!0}}function tt(e,t=globalThis==null?void 0:globalThis.document){const n=M(e),r=c.useRef(!1);return c.useEffect(()=>{const o=i=>{i.target&&!r.current&&ge(Ge,n,{originalEvent:i},{discrete:!1})};return t.addEventListener("focusin",o),()=>t.removeEventListener("focusin",o)},[t,n]),{onFocusCapture:()=>r.current=!0,onBlurCapture:()=>r.current=!1}}function ae(){const e=new CustomEvent(J);document.dispatchEvent(e)}function ge(e,t,n,{discrete:r}){const o=n.originalEvent.target,i=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});t&&o.addEventListener(e,t,{once:!0}),r?He(o,i):o.dispatchEvent(i)}var H="focusScope.autoFocusOnMount",X="focusScope.autoFocusOnUnmount",ce={bubbles:!1,cancelable:!0},nt="FocusScope",rt=c.forwardRef((e,t)=>{const{loop:n=!1,trapped:r=!1,onMountAutoFocus:o,onUnmountAutoFocus:i,...s}=e,[a,h]=c.useState(null),l=M(o),f=M(i),d=c.useRef(null),v=te(t,u=>h(u)),y=c.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;c.useEffect(()=>{if(r){let u=function(b){if(y.paused||!a)return;const S=b.target;a.contains(S)?d.current=S:O(d.current,{select:!0})},m=function(b){if(y.paused||!a)return;const S=b.relatedTarget;S!==null&&(a.contains(S)||O(d.current,{select:!0}))},p=function(b){if(document.activeElement===document.body)for(const C of b)C.removedNodes.length>0&&O(a)};document.addEventListener("focusin",u),document.addEventListener("focusout",m);const g=new MutationObserver(p);return a&&g.observe(a,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",u),document.removeEventListener("focusout",m),g.disconnect()}}},[r,a,y.paused]),c.useEffect(()=>{if(a){se.add(y);const u=document.activeElement;if(!a.contains(u)){const p=new CustomEvent(H,ce);a.addEventListener(H,l),a.dispatchEvent(p),p.defaultPrevented||(ot(ut(be(a)),{select:!0}),document.activeElement===u&&O(a))}return()=>{a.removeEventListener(H,l),setTimeout(()=>{const p=new CustomEvent(X,ce);a.addEventListener(X,f),a.dispatchEvent(p),p.defaultPrevented||O(u??document.body,{select:!0}),a.removeEventListener(X,f),se.remove(y)},0)}}},[a,l,f,y]);const w=c.useCallback(u=>{if(!n&&!r||y.paused)return;const m=u.key==="Tab"&&!u.altKey&&!u.ctrlKey&&!u.metaKey,p=document.activeElement;if(m&&p){const g=u.currentTarget,[b,S]=at(g);b&&S?!u.shiftKey&&p===S?(u.preventDefault(),n&&O(b,{select:!0})):u.shiftKey&&p===b&&(u.preventDefault(),n&&O(S,{select:!0})):p===g&&u.preventDefault()}},[n,r,y.paused]);return x.jsx(V.div,{tabIndex:-1,...s,ref:v,onKeyDown:w})});rt.displayName=nt;function ot(e,{select:t=!1}={}){const n=document.activeElement;for(const r of e)if(O(r,{select:t}),document.activeElement!==n)return}function at(e){const t=be(e),n=ie(t,e),r=ie(t.reverse(),e);return[n,r]}function be(e){const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:r=>{const o=r.tagName==="INPUT"&&r.type==="hidden";return r.disabled||r.hidden||o?NodeFilter.FILTER_SKIP:r.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t}function ie(e,t){for(const n of e)if(!ct(n,{upTo:t}))return n}function ct(e,{upTo:t}){if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1}function it(e){return e instanceof HTMLInputElement&&"select"in e}function O(e,{select:t=!1}={}){if(e&&e.focus){const n=document.activeElement;e.focus({preventScroll:!0}),e!==n&&it(e)&&t&&e.select()}}var se=st();function st(){let e=[];return{add(t){const n=e[0];t!==n&&(n==null||n.pause()),e=ue(e,t),e.unshift(t)},remove(t){var n;e=ue(e,t),(n=e[0])==null||n.resume()}}}function ue(e,t){const n=[...e],r=n.indexOf(t);return r!==-1&&n.splice(r,1),n}function ut(e){return e.filter(t=>t.tagName!=="A")}var lt="Portal",ft=c.forwardRef((e,t)=>{var a;const{container:n,...r}=e,[o,i]=c.useState(!1);ne(()=>i(!0),[]);const s=n||o&&((a=globalThis==null?void 0:globalThis.document)==null?void 0:a.body);return s?De.createPortal(x.jsx(V.div,{...r,ref:t}),s):null});ft.displayName=lt;var z=0;function rn(){c.useEffect(()=>{const e=document.querySelectorAll("[data-radix-focus-guard]");return document.body.insertAdjacentElement("afterbegin",e[0]??le()),document.body.insertAdjacentElement("beforeend",e[1]??le()),z++,()=>{z===1&&document.querySelectorAll("[data-radix-focus-guard]").forEach(t=>t.remove()),z--}},[])}function le(){const e=document.createElement("span");return e.setAttribute("data-radix-focus-guard",""),e.tabIndex=0,e.style.outline="none",e.style.opacity="0",e.style.position="fixed",e.style.pointerEvents="none",e}var R=function(){return R=Object.assign||function(t){for(var n,r=1,o=arguments.length;r<o;r++){n=arguments[r];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(t[i]=n[i])}return t},R.apply(this,arguments)};function Se(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n}function dt(e,t,n){if(n||arguments.length===2)for(var r=0,o=t.length,i;r<o;r++)(i||!(r in t))&&(i||(i=Array.prototype.slice.call(t,0,r)),i[r]=t[r]);return e.concat(i||Array.prototype.slice.call(t))}var U="right-scroll-bar-position",$="width-before-scroll-bar",vt="with-scroll-bars-hidden",ht="--removed-body-scroll-bar-size";function Z(e,t){return typeof e=="function"?e(t):e&&(e.current=t),e}function mt(e,t){var n=c.useState(function(){return{value:e,callback:t,facade:{get current(){return n.value},set current(r){var o=n.value;o!==r&&(n.value=r,n.callback(r,o))}}}})[0];return n.callback=t,n.facade}var pt=typeof window<"u"?c.useLayoutEffect:c.useEffect,fe=new WeakMap;function yt(e,t){var n=mt(null,function(r){return e.forEach(function(o){return Z(o,r)})});return pt(function(){var r=fe.get(n);if(r){var o=new Set(r),i=new Set(e),s=n.current;o.forEach(function(a){i.has(a)||Z(a,null)}),i.forEach(function(a){o.has(a)||Z(a,s)})}fe.set(n,e)},[e]),n}function Et(e){return e}function gt(e,t){t===void 0&&(t=Et);var n=[],r=!1,o={read:function(){if(r)throw new Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");return n.length?n[n.length-1]:e},useMedium:function(i){var s=t(i,r);return n.push(s),function(){n=n.filter(function(a){return a!==s})}},assignSyncMedium:function(i){for(r=!0;n.length;){var s=n;n=[],s.forEach(i)}n={push:function(a){return i(a)},filter:function(){return n}}},assignMedium:function(i){r=!0;var s=[];if(n.length){var a=n;n=[],a.forEach(i),s=n}var h=function(){var f=s;s=[],f.forEach(i)},l=function(){return Promise.resolve().then(h)};l(),n={push:function(f){s.push(f),l()},filter:function(f){return s=s.filter(f),n}}}};return o}function bt(e){e===void 0&&(e={});var t=gt(null);return t.options=R({async:!0,ssr:!1},e),t}var we=function(e){var t=e.sideCar,n=Se(e,["sideCar"]);if(!t)throw new Error("Sidecar: please provide `sideCar` property to import the right car");var r=t.read();if(!r)throw new Error("Sidecar medium not found");return c.createElement(r,R({},n))};we.isSideCarExport=!0;function St(e,t){return e.useMedium(t),we}var Ce=bt(),G=function(){},K=c.forwardRef(function(e,t){var n=c.useRef(null),r=c.useState({onScrollCapture:G,onWheelCapture:G,onTouchMoveCapture:G}),o=r[0],i=r[1],s=e.forwardProps,a=e.children,h=e.className,l=e.removeScrollBar,f=e.enabled,d=e.shards,v=e.sideCar,y=e.noRelative,w=e.noIsolation,u=e.inert,m=e.allowPinchZoom,p=e.as,g=p===void 0?"div":p,b=e.gapMode,S=Se(e,["forwardProps","children","className","removeScrollBar","enabled","shards","sideCar","noRelative","noIsolation","inert","allowPinchZoom","as","gapMode"]),C=v,P=yt([n,t]),E=R(R({},S),o);return c.createElement(c.Fragment,null,f&&c.createElement(C,{sideCar:Ce,removeScrollBar:l,shards:d,noRelative:y,noIsolation:w,inert:u,setCallbacks:i,allowPinchZoom:!!m,lockRef:n,gapMode:b}),s?c.cloneElement(c.Children.only(a),R(R({},E),{ref:P})):c.createElement(g,R({},E,{className:h,ref:P}),a))});K.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1};K.classNames={fullWidth:$,zeroRight:U};var wt=function(){if(typeof __webpack_nonce__<"u")return __webpack_nonce__};function Ct(){if(!document)return null;var e=document.createElement("style");e.type="text/css";var t=wt();return t&&e.setAttribute("nonce",t),e}function Pt(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function Rt(e){var t=document.head||document.getElementsByTagName("head")[0];t.appendChild(e)}var xt=function(){var e=0,t=null;return{add:function(n){e==0&&(t=Ct())&&(Pt(t,n),Rt(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}},Ot=function(){var e=xt();return function(t,n){c.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&n])}},Pe=function(){var e=Ot(),t=function(n){var r=n.styles,o=n.dynamic;return e(r,o),null};return t},Tt={left:0,top:0,right:0,gap:0},q=function(e){return parseInt(e||"",10)||0},Lt=function(e){var t=window.getComputedStyle(document.body),n=t[e==="padding"?"paddingLeft":"marginLeft"],r=t[e==="padding"?"paddingTop":"marginTop"],o=t[e==="padding"?"paddingRight":"marginRight"];return[q(n),q(r),q(o)]},Nt=function(e){if(e===void 0&&(e="margin"),typeof window>"u")return Tt;var t=Lt(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}},At=Pe(),k="data-scroll-locked",Dt=function(e,t,n,r){var o=e.left,i=e.top,s=e.right,a=e.gap;return n===void 0&&(n="margin"),`
2
2
  .`.concat(vt,` {
3
3
  overflow: hidden `).concat(r,`;
4
4
  padding-right: `).concat(a,"px ").concat(r,`;