@openbuddy/cli 1.0.41 → 1.0.42

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 (68) hide show
  1. package/README.md +21 -17
  2. package/package.json +9 -9
  3. package/web/dist/assets/AssistantsView-Ct3BBpYf.js +1 -0
  4. package/web/dist/assets/AutomationView-CO-jVhee.js +3 -0
  5. package/web/dist/assets/ChannelConfigView-Ct1W584x.js +8 -0
  6. package/web/dist/assets/ChartsView-CAc37Sam.js +1 -0
  7. package/web/dist/assets/ConnectorsView-DP4bbh58.js +1 -0
  8. package/web/dist/assets/FileTreeView-DwsYfssO.js +1 -0
  9. package/web/dist/assets/HookConfigView-uFsqieii.js +2 -0
  10. package/web/dist/assets/InputArea-BY8quOiH.js +14 -0
  11. package/web/dist/assets/MemoryView-Bgd_lcTf.js +1 -0
  12. package/web/dist/assets/{MessageBubble-CV16DZMG.js → MessageBubble-CVGXupVH.js} +20 -20
  13. package/web/dist/assets/ModelsView-B271UV9L.js +1 -0
  14. package/web/dist/assets/PluginsView-Dz4fqQR1.js +2 -0
  15. package/web/dist/assets/ProjectsView-DF-YCV8y.js +1 -0
  16. package/web/dist/assets/SessionGrid-BIREstN2.js +4 -0
  17. package/web/dist/assets/SettingsModal-ZJeoZcCd.js +4 -0
  18. package/web/dist/assets/SkillsView-CH2ghYL2.js +1 -0
  19. package/web/dist/assets/TemplatesTab-BGe7_67s.js +1 -0
  20. package/web/dist/assets/ThreadsView-XditIHZ4.js +2 -0
  21. package/web/dist/assets/ToolsView-BBzsFdVZ.js +1 -0
  22. package/web/dist/assets/{agentIconSet-Btsb_SC4.js → agentIconSet-B5GUQwel.js} +1 -1
  23. package/web/dist/assets/{api-CCt9DRQm.js → api-plEYhRn0.js} +1 -1
  24. package/web/dist/assets/common-Bbatsa0-.js +192 -0
  25. package/web/dist/assets/{icons-BvYhTENi.js → icons-CYDRRPKW.js} +1 -1
  26. package/web/dist/assets/index-CTbLW314.js +133 -0
  27. package/web/dist/assets/index-DdzVrZye.css +1 -0
  28. package/web/dist/assets/{markdown-DAQZeY5V.js → markdown-N5__3T-w.js} +1 -1
  29. package/web/dist/assets/{panels-DYiQiVWh.js → panels-CIPgN61N.js} +1 -1
  30. package/web/dist/assets/{react-vendor-BlngCquv.js → react-vendor-CB4cLN-6.js} +1 -1
  31. package/web/dist/assets/settingsStore-Xqln0d91.js +1 -0
  32. package/web/dist/assets/{state-_ZfNVAsd.js → state-CSZ50keL.js} +1 -1
  33. package/web/dist/assets/sttLanguages-CSNMgUTz.js +2 -0
  34. package/web/dist/assets/ttsSettings-BwXYpDnk.js +2 -0
  35. package/web/dist/assets/useConfirm-Da8iQ_DZ.js +1 -0
  36. package/web/dist/assets/{useTranslation-BGmCDuQI.js → useTranslation-B-mfApCn.js} +1 -1
  37. package/web/dist/assets/{websocket-C9e3h7VU.js → websocket-BnDwh01e.js} +1 -1
  38. package/web/dist/assets/whatsNewStore-LpdLRLGl.js +1 -0
  39. package/web/dist/index.html +18 -18
  40. package/web/dist/vendor/MANIFEST.json +24 -0
  41. package/web/dist/vendor/d3.min.js +2 -0
  42. package/web/dist/vendor/echarts.min.js +45 -0
  43. package/web/dist/assets/AssistantsView-dhdYVIy0.js +0 -1
  44. package/web/dist/assets/AutomationView-D1dU5ZV7.js +0 -1
  45. package/web/dist/assets/ChannelConfigView-CEPVZntU.js +0 -8
  46. package/web/dist/assets/ChartsView-DdN-beHW.js +0 -1
  47. package/web/dist/assets/ConnectorsView-CseCss9C.js +0 -1
  48. package/web/dist/assets/FileTreeView-Dnc3-gRF.js +0 -1
  49. package/web/dist/assets/HookConfigView-DA2h4HdJ.js +0 -1
  50. package/web/dist/assets/InputArea-DAgOOjOc.js +0 -14
  51. package/web/dist/assets/MemoryView-D6OUBi4-.js +0 -1
  52. package/web/dist/assets/ModelsView-BuqD9vWl.js +0 -1
  53. package/web/dist/assets/PluginsView-CIziDHFJ.js +0 -2
  54. package/web/dist/assets/ProjectsView-c6faWy32.js +0 -1
  55. package/web/dist/assets/SessionGrid-BZJHcklh.js +0 -4
  56. package/web/dist/assets/SettingsModal-BqdGEGW-.js +0 -4
  57. package/web/dist/assets/SkillsView-CB6CKkmb.js +0 -1
  58. package/web/dist/assets/TemplatesTab-B8efVwVZ.js +0 -1
  59. package/web/dist/assets/ThreadsView-CDoM0aNb.js +0 -2
  60. package/web/dist/assets/ToolsView-BG-xsWsO.js +0 -1
  61. package/web/dist/assets/cn-rx4uumOJ.js +0 -1
  62. package/web/dist/assets/common-BHXgEvgk.js +0 -192
  63. package/web/dist/assets/index-BNI6CNsY.css +0 -1
  64. package/web/dist/assets/index-BX-d2OBW.js +0 -130
  65. package/web/dist/assets/settingsStore-RLUAWgIk.js +0 -1
  66. package/web/dist/assets/sttLanguages-aqoVC79g.js +0 -2
  67. package/web/dist/assets/ttsSettings-DHo3OsOq.js +0 -15
  68. package/web/dist/assets/whatsNewStore-Bf_7lW8o.js +0 -1
@@ -1 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{$ as t,Rr as n,Ur as r,Vn as i,W as a,Xt as o,Z as s,_ as ee,br as c,ft as l,m as te,n as ne,p as re,r as u,v as d,vr as f,xr as p,z as m}from"./icons-BvYhTENi.js";import{t as ie}from"./useTranslation-BGmCDuQI.js";import{n as h}from"./cn-rx4uumOJ.js";import{t as g}from"./api-CCt9DRQm.js";import{I as _}from"./markdown-DAQZeY5V.js";import{A as v,a as y,f as b,h as ae,s as x}from"./common-BHXgEvgk.js";var S=e(r(),1),C=_(),w={critical:0,high:1,medium:2,low:3},T={critical:`bg-accent-red/20 text-accent-red`,high:`bg-accent-red/15 text-accent-red`,medium:`bg-accent-yellow/20 text-accent-yellow`,low:`bg-accent-green/20 text-accent-green`};function E(e,t){let n=`tools.cat.${e}`,r=t(n);if(r&&r!==n)return r;let i=e.replace(/_/g,` `).trim();return i?i.charAt(0).toUpperCase()+i.slice(1):t(`tools.groupUncategorized`)}function D(e,t){switch(e){case`critical`:return t(`tools.riskCritical`);case`high`:return t(`tools.riskHigh`);case`medium`:return t(`tools.riskMedium`);case`low`:return t(`tools.riskLow`);default:return t(`tools.riskUnknown`)}}function oe(e,t,n){let r=new Map;for(let i of e){let e,a,o=0;t===`risk`?(e=i.risk??`unknown`,a=D(i.risk,n),o=w[e]??99):t===`state`?(e=i.enabled?`on`:`off`,a=i.enabled?n(`tools.enabled`):n(`tools.disabled`),o=+!i.enabled):(e=i.category||`__none__`,a=i.category?E(i.category,n):n(`tools.groupUncategorized`));let s=r.get(e);s||(s={key:e,label:a,tools:[],order:o},r.set(e,s)),s.tools.push(i)}for(let e of r.values())e.tools.sort((e,t)=>e.enabled===t.enabled?e.id.localeCompare(t.id):e.enabled?-1:1);return[...r.values()].sort((e,n)=>t===`category`?n.tools.length-e.tools.length||e.label.localeCompare(n.label):e.order-n.order||e.label.localeCompare(n.label))}function se(e,t){try{if(typeof URL.createObjectURL!=`function`)return!1;let n=new Blob([JSON.stringify(t,null,2)],{type:`application/json`}),r=URL.createObjectURL(n),i=document.createElement(`a`);return i.href=r,i.download=e,i.click(),URL.revokeObjectURL(r),!0}catch{return!1}}function O(){let{t:e}=ie(),[r,_]=(0,S.useState)([]),[w,E]=(0,S.useState)(!0),[O,k]=(0,S.useState)(null),[A,ce]=(0,S.useState)(``),[j,le]=(0,S.useState)(`category`),[M,N]=(0,S.useState)(new Set),[ue,P]=(0,S.useState)(null),[de,F]=(0,S.useState)(null),[I,L]=(0,S.useState)({name:``,description:``,category:``,enabled:!0}),[R,z]=(0,S.useState)(null),[B,V]=(0,S.useState)(null),[H,fe]=(0,S.useState)(0),[pe,me]=(0,S.useState)(null),[U,W]=(0,S.useState)(null),G=(0,S.useRef)(null),K=(0,S.useCallback)(async()=>{E(!0),k(null);let[t,n]=await Promise.all([g.tools.list(),g.tools.exportConfig()]);t.success&&Array.isArray(t.data)?_(t.data):t.success&&t.data&&!Array.isArray(t.data)?k(e(`tools.invalidData`)):k(t.error||e(`tools.loadFailed`)),n.success&&n.data&&(V(n.data.path??null),fe(Object.keys(n.data.tools??{}).length),me(n.data.profile??null)),E(!1)},[e]);(0,S.useEffect)(()=>{K()},[K]);let he=(0,S.useCallback)(()=>{window.dispatchEvent(new CustomEvent(`switch-tab`,{detail:`connectors`}))},[]),q=(0,S.useMemo)(()=>{let e=A.trim().toLowerCase();return e?r.filter(t=>t.id.toLowerCase().includes(e)||t.name.toLowerCase().includes(e)||t.description.toLowerCase().includes(e)||t.category.toLowerCase().includes(e)):r},[r,A]),J=(0,S.useMemo)(()=>oe(q,j,e),[q,j,e]),Y=(0,S.useMemo)(()=>r.filter(e=>e.enabled).length,[r]),X=(0,S.useCallback)((e,t,n)=>{_(r=>r.map(r=>r.id===t?{...r,...n,...e??{}}:r))},[]),ge=(0,S.useCallback)(async t=>{z(t.id);let n=await g.tools.toggle(t.id,!t.enabled);if(z(null),!n.success){h.error(n.error||e(`tools.toggleFailed`));return}let r=n.data?.enabled??!t.enabled;X(void 0,t.id,{enabled:r,overridden:!0})},[X,e]),_e=(0,S.useCallback)(e=>{F(e.id),P(e.id),L({name:e.name,description:e.description,category:e.category,enabled:e.enabled})},[]),ve=(0,S.useCallback)(async t=>{z(t.id);let n=await g.tools.update(t.id,{name:I.name,description:I.description,category:I.category,enabled:I.enabled});z(null),!n.success||!n.data?h.error(n.error||e(`tools.saveFailed`)):(X(n.data,t.id,{}),F(null),h.success(e(`tools.saved`)))},[I,X,e]),ye=(0,S.useCallback)(async t=>{z(t.id);let n=await g.tools.reset(t.id);z(null),!n.success||!n.data?h.error(n.error||e(`tools.resetFailed`)):(X(n.data,t.id,{}),F(e=>e===t.id?null:e),h.success(e(`tools.resetDone`)))},[X,e]),Z=(0,S.useCallback)(async(t,n)=>{let r=t.tools.filter(e=>e.enabled!==n);if(r.length===0)return;let i=(await Promise.all(r.map(e=>g.tools.toggle(e.id,n)))).filter(e=>!e.success).length;i>0&&h.warning(e(`tools.groupPartial`,{failed:i,total:r.length})),await K()},[K,e]),be=(0,S.useCallback)(async()=>{let t=await g.tools.exportConfig();if(!t.success||!t.data){h.error(t.error||e(`tools.loadFailed`));return}let n=Object.keys(t.data.tools??{}).length;n===0?h.info(e(`tools.exportEmpty`)):se(`deepseekcode-tools.json`,t.data)?h.success(e(`tools.exportDone`,{count:n})):h.error(e(`tools.exportFailed`))},[e]),xe=(0,S.useCallback)(async t=>{let n;try{n=JSON.parse(await t.text())}catch{h.error(e(`tools.importInvalid`));return}let r=n&&typeof n==`object`&&`tools`in n?n.tools:n,i=r&&typeof r==`object`&&!Array.isArray(r)?Object.keys(r).length:0;i===0?h.error(e(`tools.importEmpty`)):W({payload:n,count:i})},[e]),Q=(0,S.useCallback)(async t=>{let n=U;if(W(null),!n)return;let r=await g.tools.importConfig(n.payload,t);!r.success||!r.data?h.error(e(`tools.importFailed`,{error:r.error??``})):(r.data.unknown.length>0&&h.warning(e(`tools.importUnknown`,{count:r.data.unknown.length})),h.success(e(`tools.importDone`,{count:r.data.applied.length})),await K())},[K,U,e]),Se=(0,S.useCallback)(e=>{N(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),$=J.length>0&&J.every(e=>M.has(e.key));return w?(0,C.jsx)(`div`,{className:`flex-1 overflow-y-auto p-4`,role:`status`,"aria-label":e(`tools.loading`),children:(0,C.jsx)(b,{count:5})}):O?(0,C.jsx)(`div`,{className:`flex-1 flex items-center justify-center`,children:(0,C.jsxs)(`div`,{className:`text-center`,children:[(0,C.jsx)(te,{size:32,className:`mx-auto mb-2 text-accent-red`}),(0,C.jsx)(`p`,{className:`text-accent-red mb-4`,children:O}),(0,C.jsx)(v,{variant:`accent`,onClick:()=>void K(),children:e(`tools.retry`)})]})}):(0,C.jsxs)(`div`,{className:`flex-1 flex flex-col overflow-hidden p-4`,children:[(0,C.jsxs)(`div`,{className:`flex items-center justify-between mb-3 gap-3`,children:[(0,C.jsxs)(`h2`,{className:`text-lg font-semibold flex items-center gap-2 min-w-0`,children:[(0,C.jsx)(u,{size:20,className:`shrink-0`}),(0,C.jsx)(`span`,{className:`truncate`,children:e(`tools.title`)}),(0,C.jsxs)(`span`,{className:`text-sm font-normal text-dark-muted whitespace-nowrap`,children:[e(`tools.totalTools`,{count:r.length}),` · `,e(`tools.enabledCount`,{count:Y})]})]}),(0,C.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[(0,C.jsxs)(`button`,{onClick:()=>void be(),title:B?e(`tools.importPath`,{path:B}):void 0,className:`flex items-center gap-1.5 px-3 py-1.5 bg-dark-surface border border-dark-border rounded hover:bg-dark-hover transition-colors`,children:[(0,C.jsx)(i,{size:14}),e(`tools.exportConfig`),H>0&&(0,C.jsxs)(`span`,{className:`text-xs text-accent-blue`,children:[`(`,H,`)`]})]}),(0,C.jsxs)(`button`,{onClick:()=>G.current?.click(),className:`flex items-center gap-1.5 px-3 py-1.5 bg-dark-surface border border-dark-border rounded hover:bg-dark-hover transition-colors`,children:[(0,C.jsx)(re,{size:14}),e(`tools.importConfig`)]}),(0,C.jsx)(`input`,{ref:G,type:`file`,accept:`application/json,.json`,className:`hidden`,"data-testid":`tools-import-input`,onChange:e=>{let t=e.target.files?.[0];e.target.value=``,t&&xe(t)}}),(0,C.jsxs)(`button`,{onClick:()=>void K(),className:`flex items-center gap-1.5 px-3 py-1.5 bg-dark-surface border border-dark-border rounded hover:bg-dark-hover transition-colors`,children:[(0,C.jsx)(t,{size:14}),e(`tools.refresh`)]})]})]}),(0,C.jsx)(x,{slot:e(`nav.tools`),className:`mb-3`}),(0,C.jsxs)(`div`,{className:`mb-3 px-3 py-2 rounded-lg bg-accent-blue/10 border border-accent-blue/20 text-xs text-dark-muted space-y-1`,children:[pe===`minimal`&&(0,C.jsx)(`div`,{children:e(`tools.profileMinimalHint`,{off:r.length-Y})}),(0,C.jsxs)(`div`,{className:`flex items-center gap-x-2 gap-y-1 flex-wrap`,children:[(0,C.jsx)(`span`,{children:e(`tools.scopeHint`)}),(0,C.jsxs)(`button`,{type:`button`,onClick:he,className:`inline-flex items-center gap-1 text-accent-blue hover:underline`,children:[e(`tools.scopeHintConnectorsLink`),(0,C.jsx)(n,{size:11})]})]})]}),(0,C.jsxs)(`div`,{className:`flex gap-3 mb-3 items-center flex-wrap`,children:[(0,C.jsxs)(`div`,{className:`flex-1 min-w-[200px] relative`,children:[(0,C.jsx)(a,{size:16,className:`absolute start-3 top-1/2 -translate-y-1/2 text-dark-muted`}),(0,C.jsx)(`input`,{type:`text`,value:A,onChange:e=>ce(e.target.value),placeholder:e(`tools.searchTools`),className:`w-full ps-10 pe-4 py-2 bg-dark-surface border border-dark-border rounded-lg text-dark-text placeholder-dark-muted focus:border-accent-blue focus:outline-none`})]}),(0,C.jsxs)(`div`,{className:`flex items-center gap-1 text-sm`,children:[(0,C.jsx)(o,{size:14,className:`text-dark-muted`}),(0,C.jsx)(`span`,{className:`text-dark-muted me-1`,children:e(`tools.groupBy`)}),[`category`,`risk`,`state`].map(t=>(0,C.jsx)(`button`,{onClick:()=>le(t),className:`px-3 py-1.5 rounded-lg transition-colors ${j===t?`bg-accent-blue text-accent-fg`:`bg-dark-surface border border-dark-border hover:bg-dark-hover`}`,children:e(t===`category`?`tools.groupByCategory`:t===`risk`?`tools.groupByRisk`:`tools.groupByState`)},t)),(0,C.jsx)(`button`,{onClick:()=>N($?new Set:new Set(J.map(e=>e.key))),className:`px-3 py-1.5 rounded-lg bg-dark-surface border border-dark-border hover:bg-dark-hover transition-colors`,children:e($?`tools.expandAll`:`tools.collapseAll`)})]})]}),(0,C.jsx)(`div`,{className:`flex-1 min-h-0 overflow-y-auto custom-scrollbar`,children:(0,C.jsxs)(`div`,{className:`space-y-3`,children:[J.map(t=>{let n=M.has(t.key),r=t.tools.filter(e=>e.enabled).length;return(0,C.jsxs)(`div`,{className:`bg-dark-surface border border-dark-border rounded-lg overflow-hidden`,children:[(0,C.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-2 bg-dark-hover/40`,children:[(0,C.jsxs)(`button`,{onClick:()=>Se(t.key),className:`flex items-center gap-2 min-w-0 flex-1 text-start`,children:[n?(0,C.jsx)(f,{size:16,className:`shrink-0 text-dark-muted`}):(0,C.jsx)(c,{size:16,className:`shrink-0 text-dark-muted`}),(0,C.jsx)(`span`,{className:`font-medium truncate`,children:t.label}),(0,C.jsx)(`span`,{className:`text-xs text-dark-muted whitespace-nowrap`,children:e(`tools.groupEnabled`,{on:r,total:t.tools.length})})]}),(0,C.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[(0,C.jsx)(`button`,{onClick:()=>void Z(t,!0),disabled:r===t.tools.length,className:`text-xs px-2 py-1 rounded border border-dark-border hover:bg-dark-hover disabled:opacity-40 disabled:cursor-not-allowed`,children:e(`tools.enableGroup`)}),(0,C.jsx)(`button`,{onClick:()=>void Z(t,!1),disabled:r===0,className:`text-xs px-2 py-1 rounded border border-dark-border hover:bg-dark-hover disabled:opacity-40 disabled:cursor-not-allowed`,children:e(`tools.disableGroup`)})]})]}),!n&&(0,C.jsx)(`div`,{className:`divide-y divide-dark-border`,children:t.tools.map(t=>{let n=de===t.id,r=ue===t.id||n;return(0,C.jsxs)(`div`,{className:t.enabled?``:`opacity-60`,children:[(0,C.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-2 gap-3`,children:[(0,C.jsxs)(`button`,{className:`flex items-center gap-2 flex-1 min-w-0 text-start`,onClick:()=>P(r&&!n?null:t.id),children:[r?(0,C.jsx)(c,{size:14,className:`shrink-0 text-dark-muted`}):(0,C.jsx)(f,{size:14,className:`shrink-0 text-dark-muted`}),(0,C.jsx)(`span`,{className:`font-medium truncate`,children:t.name}),(0,C.jsx)(`code`,{className:`text-xs text-dark-muted truncate`,children:t.id}),t.risk&&(0,C.jsxs)(`span`,{className:`px-1.5 py-0.5 rounded text-badge whitespace-nowrap ${T[t.risk]??`bg-dark-hover text-dark-muted`}`,children:[t.risk===`high`||t.risk===`critical`?(0,C.jsx)(m,{size:10,className:`inline -mt-px me-0.5`}):null,D(t.risk,e)]}),t.overridden&&(0,C.jsx)(`span`,{className:`px-1.5 py-0.5 rounded text-badge bg-accent-purple/20 text-accent-purple whitespace-nowrap`,children:e(`tools.overridden`)}),!t.enabled&&!t.overridden&&(0,C.jsx)(`span`,{className:`px-1.5 py-0.5 rounded text-badge bg-dark-hover text-dark-muted whitespace-nowrap`,children:t.defaultEnabled===!1?e(`tools.defaultOff`):e(`tools.disabled`)}),t.userInstalled&&(0,C.jsx)(`span`,{className:`px-1.5 py-0.5 rounded text-badge bg-accent-blue/20 text-accent-blue whitespace-nowrap`,title:e(`tools.userInstalledHint`),children:e(`tools.userInstalled`)})]}),(0,C.jsxs)(`div`,{className:`flex items-center gap-1 shrink-0`,children:[(0,C.jsx)(y,{slot:`tools`,id:t.id}),(0,C.jsx)(`button`,{onClick:()=>_e(t),title:e(`tools.edit`),className:`p-1.5 rounded text-dark-muted hover:bg-dark-hover hover:text-dark-text transition-colors`,children:(0,C.jsx)(l,{size:14})}),t.overridden&&(0,C.jsx)(`button`,{onClick:()=>void ye(t),disabled:R===t.id,title:e(`tools.reset`),className:`p-1.5 rounded text-dark-muted hover:bg-dark-hover hover:text-dark-text transition-colors disabled:opacity-40`,children:(0,C.jsx)(s,{size:14})}),(0,C.jsx)(`button`,{onClick:()=>void ge(t),disabled:R===t.id,title:t.enabled?e(`tools.disabled`):e(`tools.enabled`),className:`p-1.5 rounded transition-colors disabled:opacity-40 disabled:cursor-not-allowed ${t.enabled?`text-accent-green hover:bg-accent-green/10`:`text-dark-muted hover:bg-dark-hover`}`,children:t.enabled?(0,C.jsx)(ee,{size:24}):(0,C.jsx)(d,{size:24})})]})]}),r&&(0,C.jsx)(`div`,{className:`px-3 pb-3 border-t border-dark-border`,children:n?(0,C.jsxs)(`div`,{className:`mt-3 space-y-2`,children:[(0,C.jsxs)(`label`,{className:`block`,children:[(0,C.jsx)(`span`,{className:`text-xs text-dark-muted`,children:e(`tools.fieldName`)}),(0,C.jsx)(`input`,{value:I.name,onChange:e=>L(t=>({...t,name:e.target.value})),placeholder:e(`tools.namePlaceholder`),className:`w-full mt-1 px-2 py-1.5 bg-dark-bg border border-dark-border rounded text-sm focus:border-accent-blue focus:outline-none`})]}),(0,C.jsxs)(`label`,{className:`block`,children:[(0,C.jsx)(`span`,{className:`text-xs text-dark-muted`,children:e(`tools.fieldCategory`)}),(0,C.jsx)(`input`,{value:I.category,onChange:e=>L(t=>({...t,category:e.target.value})),placeholder:e(`tools.categoryPlaceholder`),className:`w-full mt-1 px-2 py-1.5 bg-dark-bg border border-dark-border rounded text-sm focus:border-accent-blue focus:outline-none`})]}),(0,C.jsxs)(`label`,{className:`block`,children:[(0,C.jsx)(`span`,{className:`text-xs text-dark-muted`,children:e(`tools.fieldDescription`)}),(0,C.jsx)(`textarea`,{value:I.description,onChange:e=>L(t=>({...t,description:e.target.value})),placeholder:e(`tools.descriptionPlaceholder`),rows:3,className:`w-full mt-1 px-2 py-1.5 bg-dark-bg border border-dark-border rounded text-sm focus:border-accent-blue focus:outline-none resize-y`})]}),(0,C.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[(0,C.jsx)(`input`,{type:`checkbox`,checked:I.enabled,onChange:e=>L(t=>({...t,enabled:e.target.checked}))}),e(`tools.fieldEnabled`)]}),(0,C.jsx)(`p`,{className:`text-xs text-dark-muted`,children:e(`tools.descriptionHint`)}),(0,C.jsxs)(`div`,{className:`flex items-center gap-2 pt-1`,children:[(0,C.jsx)(v,{variant:`accent`,size:`sm`,leftIcon:(0,C.jsx)(p,{size:14}),loading:R===t.id,onClick:()=>void ve(t),children:e(`tools.save`)}),(0,C.jsxs)(`button`,{onClick:()=>F(null),className:`flex items-center gap-1.5 px-3 py-1.5 border border-dark-border rounded text-sm hover:bg-dark-hover`,children:[(0,C.jsx)(ne,{size:14}),e(`tools.cancel`)]})]})]}):(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`p`,{className:`text-sm text-dark-muted mt-3 mb-3 whitespace-pre-wrap`,children:t.description}),t.usage&&(0,C.jsxs)(`div`,{className:`mb-3`,children:[(0,C.jsx)(`div`,{className:`text-xs text-dark-muted mb-1`,children:e(`tools.usageHint`)}),(0,C.jsx)(`p`,{className:`text-sm text-dark-muted whitespace-pre-wrap`,children:t.usage})]}),t.params&&t.params.length>0&&(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`div`,{className:`text-xs text-dark-muted mb-2`,children:e(`tools.params`)}),(0,C.jsx)(`div`,{className:`space-y-1`,children:t.params.map(e=>(0,C.jsxs)(`div`,{className:`flex items-center gap-2 text-sm flex-wrap`,children:[(0,C.jsxs)(`code`,{className:`px-1.5 py-0.5 bg-dark-bg rounded text-accent-blue`,children:[e.name,e.required&&(0,C.jsx)(`span`,{className:`text-accent-red`,children:`*`})]}),(0,C.jsxs)(`span`,{className:`text-dark-muted text-xs`,children:[`(`,e.type,`)`]}),(0,C.jsx)(`span`,{className:`text-dark-muted text-xs`,children:e.description})]},e.name))})]})]})})]},t.id)})})]},t.key)}),q.length===0&&(0,C.jsxs)(`div`,{className:`text-center text-dark-muted py-8`,children:[(0,C.jsx)(u,{size:48,className:`mx-auto mb-2 opacity-50`}),(0,C.jsx)(`p`,{children:e(A?`tools.noMatch`:`tools.noTools`)})]})]})}),(0,C.jsxs)(ae,{isOpen:U!==null,onClose:()=>W(null),title:e(`tools.importTitle`),size:`sm`,children:[(0,C.jsx)(`p`,{className:`text-sm text-dark-muted mb-4`,children:e(`tools.importDesc`,{count:U?.count??0})}),(0,C.jsxs)(`div`,{className:`space-y-2`,children:[(0,C.jsxs)(`button`,{onClick:()=>void Q(`merge`),className:`w-full text-start px-3 py-2 border border-dark-border rounded hover:bg-dark-hover transition-colors`,children:[(0,C.jsx)(`div`,{className:`font-medium text-sm`,children:e(`tools.importMerge`)}),(0,C.jsx)(`div`,{className:`text-xs text-dark-muted`,children:e(`tools.importMergeHint`)})]}),(0,C.jsxs)(`button`,{onClick:()=>void Q(`replace`),className:`w-full text-start px-3 py-2 border border-dark-border rounded hover:bg-dark-hover transition-colors`,children:[(0,C.jsx)(`div`,{className:`font-medium text-sm`,children:e(`tools.importReplace`)}),(0,C.jsx)(`div`,{className:`text-xs text-dark-muted`,children:e(`tools.importReplaceHint`)})]}),(0,C.jsx)(`button`,{onClick:()=>W(null),className:`w-full px-3 py-2 text-sm text-dark-muted hover:text-dark-text transition-colors`,children:e(`tools.cancel`)})]})]})]})}export{O as ToolsView,O as default};
@@ -1 +0,0 @@
1
- import{n as e}from"./state-_ZfNVAsd.js";var t=4e3,n=new Map;function r(e,t){let r=n.get(e);r&&clearTimeout(r),!(t<=0)&&n.set(e,setTimeout(()=>{n.delete(e),i.setState(t=>({toasts:t.toasts.filter(t=>t.id!==e)}))},t))}var i=e(e=>({toasts:[],addToast:(n,i,a)=>{let o=a??t;e(e=>{let t=e.toasts.find(e=>e.type===n&&e.message===i);if(t)return r(t.id,o),{toasts:e.toasts.map(e=>e.id===t.id?{...e,count:e.count+1,createdAt:Date.now()}:e)};let a=`toast-${Date.now()}-${Math.random().toString(36).slice(2,7)}`;r(a,o);let s={id:a,type:n,message:i,duration:o,createdAt:Date.now(),count:1};return{toasts:[...e.toasts,s].slice(-10)}})},dismissToast:t=>{let r=n.get(t);r&&(clearTimeout(r),n.delete(t)),e(e=>({toasts:e.toasts.filter(e=>e.id!==t)}))},clearAll:()=>{for(let e of n.values())clearTimeout(e);n.clear(),e({toasts:[]})}})),a={info:(e,t)=>i.getState().addToast(`info`,e,t),success:(e,t)=>i.getState().addToast(`success`,e,t),warning:(e,t)=>i.getState().addToast(`warning`,e,t),error:(e,t)=>i.getState().addToast(`error`,e,t??6e3)};function o(e){var t,n,r=``;if(typeof e==`string`||typeof e==`number`)r+=e;else if(typeof e==`object`){if(Array.isArray(e)){var i=e.length;for(t=0;t<i;t++)e[t]&&(n=o(e[t]))&&(r&&(r+=` `),r+=n)}else for(n in e)e[n]&&(r&&(r+=` `),r+=n)}return r}function s(){for(var e,t,n=0,r=``,i=arguments.length;n<i;n++)(e=arguments[n])&&(t=o(e))&&(r&&(r+=` `),r+=t);return r}function c(...e){return s(e)}export{a as n,i as r,c as t};
@@ -1,192 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{$n as t,Ar as n,At as r,B as i,Bt as a,Hn as o,I as s,In as c,It as l,Jt as u,K as d,Mt as f,Nr as p,Nt as m,O as h,Or as g,Rn as _,S as v,Sn as y,Sr as b,St as x,Ur as S,V as C,Vn as ee,Vr as te,Xt as ne,Yn as re,Zn as ie,_r as ae,br as oe,er as w,et as se,h as ce,jt as le,kr as ue,l as de,lr as fe,mn as pe,n as T,o as me,qt as he,r as ge,rn as _e,rt as ve,st as ye,tn as be,u as E,vn as xe,vr as Se,w as Ce,wr as we,xr as Te,xt as Ee,yn as De,yr as Oe}from"./icons-BvYhTENi.js";import{r as ke}from"./react-vendor-BlngCquv.js";import{t as D}from"./useTranslation-BGmCDuQI.js";import{n as Ae}from"./state-_ZfNVAsd.js";import{n as O,t as k}from"./cn-rx4uumOJ.js";import{r as A,t as j}from"./api-CCt9DRQm.js";import{I as je}from"./markdown-DAQZeY5V.js";import{f as Me,i as Ne,n as Pe,r as Fe,u as Ie}from"./agentIconSet-Btsb_SC4.js";var M=e(S(),1),Le=ke(),N=je();function P(e){window.dispatchEvent(new CustomEvent(`preview-file`,{detail:{path:e}}))}var Re=20;function ze(){if(typeof window>`u`||typeof getComputedStyle!=`function`)return 220;let e=getComputedStyle(document.documentElement).getPropertyValue(`--dur-base`).trim(),t=Number.parseFloat(e);return!Number.isFinite(t)||t<=0?220:(e.endsWith(`ms`)?t:t*1e3)+Re}function F(e){let[t,n]=(0,M.useState)(e),[r,i]=(0,M.useState)(!1),a=(0,M.useRef)(e);return a.current!==e&&(a.current=e,e?(n(!0),i(!1)):t&&i(!0)),(0,M.useEffect)(()=>{if(!r)return;let e=window.setTimeout(()=>{i(!1),n(!1)},ze());return()=>window.clearTimeout(e)},[r]),{visible:t,phase:r?`exit`:`enter`}}var Be={primary:`btn-primary`,accent:`btn-accent`,secondary:`btn-secondary`,ghost:`btn-ghost`,danger:`btn-danger`},Ve={sm:`btn-sm`,lg:`btn-lg`},He={sm:13,md:15,lg:17};function I({variant:e=`secondary`,size:t=`md`,shape:n=`default`,loading:r=!1,leftIcon:i,rightIcon:o,type:s=`button`,disabled:c,className:l,children:u,ref:d,...f}){return(0,N.jsxs)(`button`,{ref:d,type:s,disabled:c||r,"aria-busy":r||void 0,className:k(`btn`,Be[e],t!==`md`&&Ve[t],n===`pill`&&`btn-pill`,l),...f,children:[r?(0,N.jsx)(a,{size:He[t],className:`shrink-0 animate-spin`,"aria-hidden":`true`}):i,u,!r&&o]})}var L={rating:Ce,difficulty:pe,distance:l,location:l,price:fe,time:w,duration:w,people:E,servings:E,tag:v,date:we,level:ne,heat:y,diet:he,food:de,drink:ie,stock:Ee,category:i},R={app:te,appFallback:p,cart:s,code:t,bookmark:n,prev:Oe,next:Se,image:_e,sparkle:h,info:be,dot:o},z={chat:r,projects:De,charts:b,assistants:ue,templates:u,models:g,tools:ge,skills:h,channels:se,connectors:ye,plugins:ve,hooks:me,insights:ce,scheduled:w,memory:x,logs:d,settings:C,pluginFallback:ve},Ue={Activity:`insights`,BarChart3:`charts`,Bot:`assistants`,Brain:`models`,Clock:`scheduled`,Database:`memory`,FolderKanban:`projects`,Layers:`templates`,MessageSquare:`chat`,Plug:`connectors`,Puzzle:`plugins`,Radio:`channels`,ScrollText:`logs`,Settings:`settings`,Sparkles:`skills`,Webhook:`hooks`,Wrench:`tools`};function We(e){if(!e)return z.pluginFallback;if(e in z)return z[e];let t=Ue[e];return t?z[t]:z.pluginFallback}function Ge(e){return e?L[e]??o:o}[...Object.entries(L).map(([e,t])=>({name:e,icon:t})),...Object.entries(R).map(([e,t])=>({name:`ui.${e}`,icon:t})),...Object.entries(z).map(([e,t])=>({name:`nav.${e}`,icon:t}))];var B=null;function Ke(e){B=e}var V=null;function qe(e){V=e}function Je(e){V===e&&(V=null)}function Ye(e){return V?(V(e),!0):!1}function Xe(e){B===e&&(B=null)}function Ze(e){return B?(B(e),!0):!1}function Qe(e,t={}){let n=t.width??200,r=t.height??170;return{x:Math.max(4,Math.min(e.clientX,window.innerWidth-n)),y:Math.max(4,Math.min(e.clientY,window.innerHeight-r))}}var $e=28,et=9,tt=8;function H(e,t=0){return e*$e+t*et+tt}var U=(0,M.memo)(function({items:e,position:t,onClose:n,ariaLabel:r,minWidth:i=168}){let a=t!==null,{visible:o,phase:s}=F(a),c=(0,M.useRef)(t);t&&(c.current=t);let l=t??c.current;return(0,M.useEffect)(()=>{if(!a)return;let e=()=>n(),t=e=>{e.key===`Escape`&&n()};return window.addEventListener(`click`,e),window.addEventListener(`resize`,e),window.addEventListener(`scroll`,e,!0),window.addEventListener(`keydown`,t),()=>{window.removeEventListener(`click`,e),window.removeEventListener(`resize`,e),window.removeEventListener(`scroll`,e,!0),window.removeEventListener(`keydown`,t)}},[a,n]),!o||!l?null:(0,Le.createPortal)((0,N.jsx)(`div`,{role:`menu`,"aria-label":r,"data-phase":s,className:`fixed z-[9999] rounded-lg border border-dark-border bg-dark-overlay ui-surface-overlay py-1 shadow-[0_10px_32px_rgba(0,0,0,0.28)] ui-overlay-panel-fade`,style:{left:l.x,top:l.y,minWidth:i},onClick:e=>e.stopPropagation(),onContextMenu:e=>e.preventDefault(),children:e.map(e=>{if(e.kind===`separator`)return(0,N.jsx)(`div`,{role:`separator`,className:`my-1 h-px bg-dark-border/60`},e.id);let t=e.icon;return(0,N.jsxs)(`button`,{role:`menuitem`,disabled:e.disabled,onClick:()=>{n(),e.onSelect()},className:`flex w-full items-center gap-2 rounded-md px-2.5 py-1.5 text-start text-xs transition-colors ${e.disabled?`cursor-not-allowed text-dark-muted/35`:`text-dark-muted hover:bg-dark-hover hover:text-dark-text`}`,children:[t?(0,N.jsx)(t,{size:13,"aria-hidden":`true`,className:`shrink-0 opacity-70`}):null,(0,N.jsx)(`span`,{className:`truncate`,children:e.label})]},e.id)})}),document.body)});function W(){let[e,t]=(0,M.useState)(null),n=(0,M.useCallback)((e,n,r,i)=>{t({...Qe({clientX:e,clientY:n},i),data:r})},[]);return{state:e,open:(0,M.useCallback)((e,t,r)=>{e.preventDefault(),e.stopPropagation(),n(e.clientX,e.clientY,t,r)},[n]),openAt:n,close:(0,M.useCallback)(()=>t(null),[])}}function G(e){return e.success?{ok:!0}:{ok:!1,error:e.error||`unknown error`}}var K={open:e=>j.fs.open(e,`open`).then(G),reveal:e=>j.fs.open(e,`reveal`).then(G),openFolder:e=>j.fs.openFolder(e).then(G),download:e=>j.files.download(e).then(G)},nt=208,rt=H(6,1);function it(){let{t:e}=D(),{state:t,open:n,close:r}=W(),i=t?.data??null,a=(0,M.useCallback)((e,t)=>n(e,t,{width:nt,height:rt}),[n]),o=(0,M.useCallback)((e,t)=>{e.then(e=>{e.ok||O.error(e.error||t)})},[]),s=(0,M.useMemo)(()=>i?[{id:`preview`,label:e(`fileMenu.preview`),icon:c,onSelect:()=>P(i)},{id:`openExternal`,label:e(`fileMenu.openExternal`),icon:_,onSelect:()=>o(K.open(i),e(`fileMenu.openFailed`))},{id:`reveal`,label:e(`fileMenu.reveal`),icon:xe,onSelect:()=>o(K.reveal(i),e(`fileMenu.revealFailed`))},{kind:`separator`,id:`sep-after-open`},{id:`addToChat`,label:e(`fileMenu.addToChat`),icon:f,onSelect:()=>{Ze(i)||O.warning(e(`fileMenu.noComposer`))}},{id:`copyPath`,label:e(`fileMenu.copyPath`),icon:re,onSelect:()=>{navigator.clipboard?.writeText(i).then(()=>O.success(e(`fileMenu.copied`)),()=>{})}},{id:`download`,label:e(`fileMenu.download`),icon:ee,onSelect:()=>o(K.download(i),e(`fileMenu.downloadFailed`))}]:[],[i,e,o]);return{openFileMenu:a,menuNode:(0,N.jsx)(U,{items:s,position:t?{x:t.x,y:t.y}:null,onClose:r,ariaLabel:e(`fileMenu.aria`),minWidth:nt})}}var q=0,at=``;function ot(){q===0&&(at=document.body.style.overflow),q+=1,document.body.style.overflow=`hidden`}function st(){q=Math.max(0,q-1),q===0&&(document.body.style.overflow=at)}var J=[];function Y({isOpen:e,onClose:t,lockScroll:n=!0}){let r=(0,M.useRef)(t);(0,M.useEffect)(()=>{r.current=t}),(0,M.useEffect)(()=>{if(!e)return;let t=Symbol(`overlay`);J.push(t);let i=e=>{e.key===`Escape`&&J[J.length-1]===t&&(e.defaultPrevented||(e.preventDefault(),e.stopPropagation(),r.current()))};return document.addEventListener(`keydown`,i,!0),n&&ot(),()=>{document.removeEventListener(`keydown`,i,!0);let e=J.indexOf(t);e>=0&&J.splice(e,1),n&&st()}},[e,n])}function ct({isOpen:e,onClose:t,title:n,children:r,size:i=`md`,className:a,bodyClassName:o=`p-6`}){Y({isOpen:e,onClose:t});let{visible:s,phase:c}=F(e),l=(0,M.useId)();return s?(0,N.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center overflow-hidden p-4`,children:[(0,N.jsx)(`div`,{className:`absolute inset-0 ui-scrim ui-overlay-backdrop`,"data-phase":c,onClick:t}),(0,N.jsxs)(`div`,{role:`dialog`,"aria-modal":`true`,"aria-labelledby":n?l:void 0,"data-phase":c,className:k(`relative w-full mx-4 bg-dark-overlay ui-surface-overlay border border-dark-border rounded-xl shadow-pop ui-overlay-panel`,`max-h-[calc(100vh-2rem)] flex flex-col overflow-hidden`,{sm:`max-w-sm`,md:`max-w-md`,lg:`max-w-lg`,xl:`max-w-xl`,"2xl":`max-w-3xl`,"3xl":`max-w-5xl`}[i],a),children:[n&&(0,N.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between px-6 py-4 border-b border-dark-border`,children:[(0,N.jsx)(`h2`,{id:l,className:`text-lg font-semibold text-dark-text`,children:n}),(0,N.jsx)(`button`,{onClick:t,"aria-label":`Close`,className:`p-1 rounded-lg text-dark-muted hover:text-dark-text hover:bg-dark-hover transition-colors`,children:(0,N.jsx)(T,{className:`w-5 h-5`,"aria-hidden":`true`})})]}),(0,N.jsx)(`div`,{className:k(`min-h-0 overflow-y-auto custom-scrollbar`,o),children:r})]})]}):null}function lt({isOpen:e,onClose:t,onConfirm:n,title:r,message:i,confirmText:a,cancelText:o,variant:s=`default`}){let{t:c}=D();return(0,N.jsxs)(ct,{isOpen:e,onClose:t,title:r??c(`common.confirm`),size:`sm`,children:[(0,N.jsx)(`p`,{className:`text-dark-muted mb-6`,children:i}),(0,N.jsxs)(`div`,{className:`flex gap-3 justify-end`,children:[(0,N.jsx)(I,{onClick:t,children:o??c(`common.cancel`)}),(0,N.jsx)(I,{variant:s===`danger`?`danger`:`accent`,onClick:()=>{n(),t()},children:a??c(`common.confirm`)})]})]})}function ut(e){return e<=0?2.2:Math.min(2.2,Math.max(.9,2.2/(1+e/45)))}function X(e,t,n){let r=(e%360+360)%360,i=(1-Math.abs(2*n-1))*t,a=i*(1-Math.abs(r/60%2-1)),o=n-i/2,s=0,c=0,l=0;return r<60?[s,c,l]=[i,a,0]:r<120?[s,c,l]=[a,i,0]:r<180?[s,c,l]=[0,i,a]:r<240?[s,c,l]=[0,a,i]:r<300?[s,c,l]=[a,0,i]:[s,c,l]=[i,0,a],`${Math.round((s+o)*255)} ${Math.round((c+o)*255)} ${Math.round((l+o)*255)}`}function dt(e){let t=5381;for(let n=0;n<e.length;n++)t=t*33^e.charCodeAt(n);return(t%360+360)%360}var ft=(0,M.memo)(function({size:e=12,rate:t=0,accent:n=`blue`,hue:r,className:i}){let a=Math.max(1.4,e/8.5),o=r===void 0?void 0:{"--rs-mid":X(r,.78,.62),"--rs-head":X(r+40,.95,.74)};return(0,N.jsxs)(`span`,{className:`rate-spinner${i?` ${i}`:``}`,"data-accent":n,style:{width:e,height:e,"--rs-stroke":`${a.toFixed(2)}px`,"--rs-dur":`${ut(t).toFixed(2)}s`,...o},role:`status`,"aria-label":`generating`,children:[(0,N.jsx)(`i`,{className:`rs-arc rs-arc--a`,"aria-hidden":!0}),(0,N.jsx)(`i`,{className:`rs-arc rs-arc--b`,"aria-hidden":!0})]})});function Z({className:e,variant:t=`rectangular`,width:n,height:r,shimmer:i=!0}){return(0,N.jsx)(`div`,{"aria-hidden":`true`,className:k(i?`skeleton-shimmer`:`animate-pulse bg-dark-border/50`,{text:`rounded h-4`,circular:`rounded-full`,rectangular:`rounded-lg`}[t],e),style:{width:n,height:r}})}function pt({count:e=3,className:t}){return(0,N.jsx)(`div`,{className:k(`space-y-2`,t),children:Array.from({length:e}).map((e,t)=>(0,N.jsxs)(`div`,{className:`flex items-center gap-3 p-3 bg-dark-surface border border-dark-border rounded-lg`,children:[(0,N.jsx)(Z,{variant:`circular`,width:40,height:40}),(0,N.jsxs)(`div`,{className:`flex-1 space-y-2`,children:[(0,N.jsx)(Z,{variant:`text`,width:`30%`,height:16}),(0,N.jsx)(Z,{variant:`text`,width:`70%`,height:14})]})]},`skeleton-${t}`))})}(0,M.createContext)(null);function mt({isOpen:e,onClose:t,title:n,children:r,size:i=`md`,className:a}){Y({isOpen:e,onClose:t});let{visible:o,phase:s}=F(e),c=(0,M.useId)();return o?(0,N.jsxs)(`div`,{className:`fixed inset-0 z-50 overflow-hidden`,children:[(0,N.jsx)(`div`,{className:`absolute inset-0 ui-scrim ui-overlay-backdrop`,"data-phase":s,onClick:t}),(0,N.jsxs)(`div`,{role:`dialog`,"aria-modal":`true`,"aria-labelledby":n?c:void 0,"data-phase":s,className:k(`absolute inset-y-0 right-0 w-full bg-dark-overlay ui-surface-overlay border-s border-dark-border shadow-pop ui-overlay-panel-edge`,`flex flex-col overflow-hidden`,{sm:`max-w-sm`,md:`max-w-md`,lg:`max-w-xl`}[i],a),children:[n&&(0,N.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between px-6 py-4 border-b border-dark-border`,children:[(0,N.jsx)(`h2`,{id:c,className:`text-lg font-semibold text-dark-text truncate`,children:n}),(0,N.jsx)(`button`,{onClick:t,"aria-label":`Close`,className:`p-1 rounded-lg text-dark-muted hover:text-dark-text hover:bg-dark-hover transition-colors shrink-0`,children:(0,N.jsx)(T,{className:`w-5 h-5`,"aria-hidden":`true`})})]}),(0,N.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto custom-scrollbar p-6`,children:r})]})]}):null}function ht({children:e,variant:t=`default`,size:n=`md`,className:r}){return(0,N.jsx)(`span`,{className:k(`inline-flex items-center rounded-full font-medium`,{default:`bg-dark-border text-dark-muted`,success:`bg-accent-green/20 text-accent-green`,warning:`bg-accent-yellow/20 text-accent-yellow`,error:`bg-accent-red/20 text-accent-red`,info:`bg-accent-blue/20 text-accent-blue`}[t],{sm:`px-1.5 py-0.5 text-badge`,md:`px-2 py-0.5 text-xs`}[n],r),children:e})}var Q={list:()=>A.get(`/api/session-kinds`),read:()=>A.get(`/api/config/session-types`),write:(e,t)=>A.put(`/api/config/session-types`,{kind:e,entry:t})},$=Ae((e,t)=>({kinds:[],entries:{},configPath:null,activeKind:null,loading:!1,saving:!1,error:null,load:async n=>{if(!n?.force&&t().kinds.length>0)return;e({loading:!0,error:null});let[r,i]=await Promise.all([Q.list(),Q.read()]);if(!r.success||!r.data){e({loading:!1,error:r.error||`加载会话类型清单失败`});return}let a=r.data.kinds,o=i.success&&i.data?i.data.sessionTypes:{},s=t().activeKind,c=s&&a.some(e=>e.id===s)?s:a[0]?.id??null;e({kinds:a,entries:o,configPath:i.success&&i.data?i.data.configPath:null,activeKind:c,loading:!1,error:i.success?null:i.error||`加载会话类型配置失败`})},setActiveKind:n=>{t().activeKind!==n&&e({activeKind:n})},entryFor:e=>{let n=e??t().activeKind;return n?t().entries[n]:void 0},saveEntry:async(t,n)=>{e({saving:!0,error:null});let r=await Q.write(t,n);if(!r.success||!r.data)return e({saving:!1,error:r.error||`保存「${t}」的配置失败`}),!1;e({entries:r.data.sessionTypes,configPath:r.data.configPath,saving:!1});let i=await Q.list();return i.success&&i.data&&e({kinds:i.data.kinds}),!0},copyFrom:async(n,r)=>{if(n===r)return!1;let i=t().entries[n];return i?t().saveEntry(r,structuredClone(i)):(e({error:`「${n}」还没有任何配置可复制`}),!1)}}));function gt({slot:e,className:t}){let{t:n}=D(),r=$(e=>e.kinds),i=$(e=>e.activeKind),a=$(e=>e.loading),o=$(e=>e.error),s=$(e=>e.load),c=$(e=>e.setActiveKind),l=$(e=>e.saving),u=$(e=>e.copyFrom),[d,f]=(0,M.useState)(``),[p,m]=(0,M.useState)(null),h=(0,M.useRef)(null),g=(0,M.useRef)(new Map),_=(0,M.useCallback)(()=>{let e=h.current,t=i?g.current.get(i):void 0;if(!e||!t){m(null);return}let n={x:t.offsetLeft,y:t.offsetTop,w:t.offsetWidth,h:t.offsetHeight};m(e=>e&&e.x===n.x&&e.y===n.y&&e.w===n.w&&e.h===n.h?e:n)},[i]);(0,M.useLayoutEffect)(()=>{r.length!==0&&_()},[_,r.length]),(0,M.useEffect)(()=>{let e=h.current;if(!e||typeof ResizeObserver>`u`)return;let t=new ResizeObserver(()=>_());return t.observe(e),()=>t.disconnect()},[_]);let[v,y]=(0,M.useState)(!1),b=(0,M.useRef)(null);(0,M.useEffect)(()=>{if(!i)return;if(b.current===null){b.current=i;return}if(b.current===i)return;b.current=i,y(!0);let e=window.setTimeout(()=>y(!1),280);return()=>window.clearTimeout(e)},[i]),(0,M.useEffect)(()=>{s()},[s]);let x=e=>e.labelKey?n(e.labelKey):e.id;if(o&&r.length===0)return(0,N.jsx)(`p`,{role:`alert`,className:k(`text-xs text-accent-red`,t),children:o});if(a&&r.length===0)return(0,N.jsx)(`p`,{className:k(`text-xs text-dark-muted`,t),children:n(`settings.kindScope.loading`)});if(r.length===0)return(0,N.jsx)(`p`,{className:k(`text-xs text-dark-muted`,t),children:n(`settings.kindScope.empty`)});let S=r.find(e=>e.id===i),C=S?r.filter(e=>e.id!==S.id&&e.configured):[];return(0,N.jsxs)(`div`,{className:k(`space-y-1.5`,t),children:[(0,N.jsxs)(`div`,{ref:h,role:`tablist`,"aria-label":n(`settings.kindScope.ariaLabel`,{slot:e}),className:`relative flex flex-wrap items-center gap-1.5`,children:[(0,N.jsx)(`span`,{"aria-hidden":`true`,"data-testid":`kind-scope-pill`,className:k(`pointer-events-none absolute left-0 top-0 rounded-full bg-accent-blue/10`,`transition-[transform,width,height,opacity,box-shadow] duration-300 ease-out`,p?`opacity-100`:`opacity-0`,v?`ring-4 ring-accent-blue/45`:`ring-2 ring-accent-blue/30`),style:p?{width:p.w,height:p.h,transform:`translate(${p.x}px, ${p.y}px) scale(${v?1.04:1})`}:void 0}),r.map(e=>{let t=e.id===i;return(0,N.jsxs)(`button`,{ref:t=>{t?g.current.set(e.id,t):g.current.delete(e.id)},type:`button`,role:`tab`,"aria-selected":t,onClick:()=>c(e.id),className:k(`inline-flex items-center gap-1.5 rounded-full border px-2.5 py-1 text-xs transition-colors`,t?`border-accent-blue bg-accent-blue/15 text-accent-blue`:`border-dark-border text-dark-muted hover:border-dark-tertiary hover:text-dark-text`),children:[(0,N.jsx)(`span`,{children:x(e)}),!e.configured&&(0,N.jsx)(`span`,{role:`img`,"aria-label":n(`settings.kindScope.unconfigured`),title:n(`settings.kindScope.unconfigured`),className:`h-1.5 w-1.5 rounded-full bg-dark-tertiary`})]},e.id)})]}),S&&(0,N.jsxs)(`div`,{className:`animate-fade-in flex flex-wrap items-center justify-between gap-2 text-xs`,children:[(0,N.jsx)(`p`,{className:`text-dark-muted`,children:S.configured?n(`settings.kindScope.configuredHint`,{kind:x(S)}):n(`settings.kindScope.unconfiguredHint`,{kind:x(S)})}),!S.configured&&C.length>0&&(0,N.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1.5`,children:[(0,N.jsxs)(`select`,{value:d,disabled:l,onChange:e=>f(e.target.value),"aria-label":n(`settings.kindScope.copySource`),className:`rounded border border-dark-border bg-dark-surface px-1.5 py-0.5 text-xs text-dark-text disabled:opacity-50`,children:[(0,N.jsx)(`option`,{value:``,children:n(`settings.kindScope.copySource`)}),C.map(e=>(0,N.jsx)(`option`,{value:e.id,children:x(e)},e.id))]}),(0,N.jsx)(`button`,{type:`button`,disabled:!d||l,onClick:()=>{d&&u(d,S.id).then(e=>{e&&f(``)})},className:`rounded border border-dark-border px-2 py-0.5 text-dark-muted hover:border-dark-tertiary hover:text-dark-text disabled:opacity-40`,children:n(`settings.kindScope.copyAction`)})]})]},S.id)]})}function _t(e,t){return e?e.deny?.includes(t)?!1:e.allow&&e.allow.length>0?e.allow.includes(t):!0:!0}function vt(e,t){return e?.deny?.includes(t)?`deny`:e?.allow?.includes(t)?`allow`:`inherit`}function yt(e,t,n){let r=(e?.allow??[]).filter(e=>e!==t),i=(e?.deny??[]).filter(e=>e!==t);if(n===`allow`&&r.push(t),n===`deny`&&i.push(t),r.length!==0||i.length!==0)return{...r.length>0?{allow:r}:{},...i.length>0?{deny:i}:{}}}function bt(e){let t=$(e=>e.activeKind),n=$(e=>e.activeKind?e.entries[e.activeKind]:void 0),r=$(e=>e.saving),i=$(e=>e.saveEntry),a=n?.[e],o=(0,M.useCallback)(e=>vt(a,e),[a]),s=(0,M.useCallback)(e=>_t(a,e),[a]),c=(0,M.useCallback)(async(n,r)=>{if(!t)return!1;let a=$.getState().entries[t],o=yt(a?.[e],n,r),s={...a??{}};o?s[e]=o:delete s[e];let c=Object.values(s).some(e=>e!==void 0);return i(t,c?s:null)},[t,i,e]);return(0,M.useMemo)(()=>({configured:a!==void 0,settingFor:o,effectiveFor:s,setSetting:c,saving:r}),[a,o,s,c,r])}var xt={inherit:`allow`,allow:`deny`,deny:`inherit`};function St({slot:e,id:t,className:n}){let{t:r}=D(),{settingFor:i,effectiveFor:a,setSetting:o,saving:s}=bt(e),c=i(t),l=a(t),u=c===`inherit`&&!l,d=r(c===`inherit`?u?`settings.kindCapability.excluded`:`settings.kindCapability.inherit`:`settings.kindCapability.${c}`);return(0,N.jsx)(`button`,{type:`button`,disabled:s,onClick:()=>void o(t,xt[c]),title:r(`settings.kindCapability.hint`),"aria-label":`${d}: ${t}`,className:k(`inline-flex shrink-0 items-center rounded-full border px-2 py-0.5 text-xs transition-colors`,c===`allow`&&`border-accent-green/40 bg-accent-green/15 text-accent-green`,c===`deny`&&`border-accent-red/40 bg-accent-red/15 text-accent-red`,c===`inherit`&&!u&&`border-dark-border text-dark-muted hover:border-dark-tertiary`,u&&`border-dark-border text-dark-tertiary line-through`,s&&`opacity-50`,n),children:d})}function Ct({value:e,max:t=100,size:n=`md`,variant:r=`default`,showLabel:i=!1,className:a}){let o=Math.min(Math.max(e/t*100,0),100);return(0,N.jsxs)(`div`,{className:k(`w-full`,a),children:[(0,N.jsx)(`div`,{className:k(`w-full bg-dark-border rounded-full overflow-hidden`,{sm:`h-1`,md:`h-2`,lg:`h-3`}[n]),children:(0,N.jsx)(`div`,{className:k(`h-full rounded-full transition-all duration-300`,{default:`bg-accent-blue`,success:`bg-accent-green`,warning:`bg-accent-yellow`,error:`bg-accent-red`}[r]),style:{width:`${o}%`}})}),i&&(0,N.jsxs)(`span`,{className:`text-xs text-dark-muted mt-1`,children:[Math.round(o),`%`]})]})}var wt={running:{Icon:r,label:`nav.sessionRunning`,ring:`spin`},waiting:{Icon:m,label:`nav.sessionWaiting`,ring:`breathe`},failed:{Icon:le,label:`nav.sessionFailed`,ring:`static`},done:{Icon:Te,label:`nav.sessionDone`}},Tt=`
2
- .dsc-status {
3
- --dsc-rgb: var(--color-muted);
4
- /* 龙卷风涡流的两端:涡头靛蓝 → 涡尾青绿(中段由浏览器插值成蓝绿) */
5
- --dsc-vortex-a: var(--color-accent-blue);
6
- --dsc-vortex-b: var(--color-accent-green);
7
- --dsc-chip: 0.1;
8
- color: rgb(var(--dsc-rgb));
9
- background-color: rgb(var(--dsc-rgb) / var(--dsc-chip));
10
- border-color: transparent;
11
- }
12
-
13
- .dsc-status[data-status='running'] { --dsc-rgb: var(--color-accent-blue); }
14
- .dsc-status[data-status='waiting'] { --dsc-rgb: var(--color-accent-yellow); --dsc-chip: 0.13; }
15
- .dsc-status[data-status='failed'] { --dsc-rgb: var(--color-accent-red); }
16
-
17
- /* 已完成:绿勾 + 极淡绿底 —— 「尘埃落定」的正向确认(一眼可辨,无需读标题)。
18
- 刻意比 running 收敛:无动效、低饱和底板、绿而非高饱和大色块,
19
- 避免侧栏一排会话全是喧闹的绿灯抢占 running 的视觉重心。 */
20
- .dsc-status[data-status='done'] {
21
- color: rgb(var(--color-accent-green));
22
- background-color: rgb(var(--color-accent-green) / 0.14);
23
- border-color: rgb(var(--color-accent-green) / 0.34);
24
- }
25
-
26
- /* 进行中:同色柔光晕缓慢呼吸 —— 即使截图静止,也认得出这是彩色状态。
27
- box-shadow 是重绘属性,小尺寸上强脉冲会被读成「闪烁」:这里把外圈光晕
28
- 幅度进一步压小、周期拉长到 5.2s,只保留极淡的一圈「活着」的呼吸感,
29
- 不抢运行中指示器本身的视觉重心。 */
30
- .dsc-status[data-status='running'] {
31
- animation: dscGlow 5.2s ease-in-out infinite;
32
- }
33
-
34
- .dsc-ring {
35
- position: absolute;
36
- inset: -2px;
37
- border: 2px solid transparent;
38
- border-radius: 8px;
39
- pointer-events: none;
40
- }
41
- .dsc-ring[data-motion='spin'] {
42
- /* 龙卷风:蓝→青→绿的头尾渐隐涡流(comet),遮罩抠出 2.5px 环带 */
43
- border-color: transparent;
44
- background: conic-gradient(
45
- from 0deg,
46
- rgb(var(--dsc-vortex-a) / 0) 0deg,
47
- rgb(var(--dsc-vortex-a)) 80deg,
48
- rgb(var(--dsc-vortex-b)) 250deg,
49
- rgb(var(--dsc-vortex-b) / 0) 340deg,
50
- rgb(var(--dsc-vortex-a) / 0) 360deg
51
- );
52
- -webkit-mask: radial-gradient(farthest-side, transparent calc(100% - 2.5px), #000 calc(100% - 2.5px));
53
- mask: radial-gradient(farthest-side, transparent calc(100% - 2.5px), #000 calc(100% - 2.5px));
54
- animation: dscSpin 1.5s linear infinite;
55
- /* 提示浏览器把这一层独立合成:旋转只走 composite,不整帧重绘父级 */
56
- will-change: transform;
57
- }
58
- /* 内涡:反向、稍快的细弧,让静止截图也读得出「漏斗」而非一片渐变。
59
- 透明度压低(0.6/0.35):11px 直径上的 1.5px 细弧本身很小,高对比会让
60
- 亚像素抗锯齿随旋转闪烁。 */
61
- .dsc-ring[data-motion='spin']::after {
62
- content: '';
63
- position: absolute;
64
- inset: 3.5px;
65
- border: 1.5px solid transparent;
66
- border-top-color: rgb(var(--dsc-vortex-b) / 0.6);
67
- border-left-color: rgb(var(--dsc-vortex-a) / 0.35);
68
- border-radius: 50%;
69
- animation: dscSpin 1.6s linear infinite reverse;
70
- }
71
- .dsc-ring[data-motion='breathe'] {
72
- border-color: rgb(var(--dsc-rgb) / 0.85);
73
- animation: dscBreathe 1.9s ease-in-out infinite;
74
- }
75
- .dsc-ring[data-motion='static'] {
76
- border-color: rgb(var(--dsc-rgb) / 0.5);
77
- }
78
-
79
- @keyframes dscSpin {
80
- to { transform: rotate(360deg); }
81
- }
82
- @keyframes dscBreathe {
83
- 0%, 100% { opacity: 0.3; transform: scale(0.96); }
84
- 50% { opacity: 1; transform: scale(1); }
85
- }
86
- @keyframes dscGlow {
87
- 0%, 100% { box-shadow: 0 0 0 2px rgb(var(--dsc-rgb) / 0.06), 0 0 4px rgb(var(--dsc-rgb) / 0.12); }
88
- 50% { box-shadow: 0 0 0 2px rgb(var(--dsc-rgb) / 0.1), 0 0 6px rgb(var(--dsc-rgb) / 0.2); }
89
- }
90
-
91
- @media (prefers-reduced-motion: reduce) {
92
- .dsc-status,
93
- .dsc-ring,
94
- .dsc-ring::after { animation: none !important; }
95
- .dsc-status[data-status='running'] { box-shadow: 0 0 0 2px rgb(var(--dsc-rgb) / 0.16); }
96
- .dsc-ring[data-motion='breathe'] { opacity: 0.7; transform: none; }
97
- }
98
- `;(0,M.memo)(function({status:e,label:t,className:n,sessionId:r}){let{t:i}=D(),a=wt[e]??wt.done,{Icon:o,ring:s}=a,c=t??i(a.label);if(e===`running`){let e=r===void 0?void 0:dt(r),t=e===void 0?void 0:X(e,.78,.62);return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(`style`,{href:`deepseekcode-session-status`,precedence:`default`,children:Tt}),(0,N.jsx)(`span`,{"data-status":`running`,className:k(`dsc-status relative flex h-5 w-5 shrink-0 items-center justify-center rounded-[6px] border transition-colors`,n),style:t?{"--dsc-rgb":t}:void 0,title:c,"aria-label":c,role:`img`,children:(0,N.jsx)(ft,{size:17,rate:0,hue:e})})]})}return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(`style`,{href:`deepseekcode-session-status`,precedence:`default`,children:Tt}),(0,N.jsxs)(`span`,{"data-status":e,className:k(`dsc-status relative flex h-[18px] w-[18px] shrink-0 items-center justify-center rounded-[5px] border transition-colors`,n),title:c,"aria-label":c,role:`img`,children:[s&&(0,N.jsx)(`span`,{className:`dsc-ring`,"data-motion":s,"aria-hidden":`true`}),(0,N.jsx)(o,{size:e===`done`?14:13,strokeWidth:e===`done`?2.8:2.2,"aria-hidden":`true`,className:`relative`})]})]})});var Et=`
99
- .ag-glyph { --ag-size: 22px; }
100
-
101
- /* 环/角标全部按槽位尺寸等比(--ag-size 由组件内联给出):
102
- 固定像素在 40px 的助理卡片上会贴得太紧、在 20px 的页签上又会盖住脸。 */
103
- .ag-ring { position: absolute; inset: calc(var(--ag-size) * -0.14); border-radius: 999px; pointer-events: none; }
104
- /* running:龙卷风涡流(蓝→青→绿的头尾渐隐),环带 2px。
105
- 三条线索(外环 / 内涡 / 脸)任意一条被小尺寸吃掉,另外两条仍读得出「进行中」。 */
106
- .ag-ring[data-status='running'] {
107
- background: conic-gradient(
108
- from 0deg,
109
- rgb(var(--color-accent-blue) / 0) 0deg,
110
- rgb(var(--color-accent-blue)) 80deg,
111
- rgb(var(--color-accent-green)) 250deg,
112
- rgb(var(--color-accent-green) / 0) 340deg,
113
- rgb(var(--color-accent-blue) / 0) 360deg
114
- );
115
- -webkit-mask: radial-gradient(farthest-side, transparent calc(100% - 2px), #000 calc(100% - 2px));
116
- mask: radial-gradient(farthest-side, transparent calc(100% - 2px), #000 calc(100% - 2px));
117
- animation: agSpin 1.5s linear infinite;
118
- will-change: transform;
119
- }
120
- /* 内涡:反向、稍快的 1px 细弧,落在「团子」与外环之间的那道缝里 ——
121
- 静止截图也读得出「漏斗」,而不是一片渐变圆边。
122
- 透明度压到 0.55/0.3:小尺寸上的细弧本身很小,高对比会让亚像素抗锯齿随旋转闪烁。 */
123
- .ag-ring[data-status='running']::after {
124
- content: '';
125
- position: absolute;
126
- inset: 2.5px;
127
- border: 1px solid transparent;
128
- border-top-color: rgb(var(--color-accent-green) / 0.55);
129
- border-left-color: rgb(var(--color-accent-blue) / 0.3);
130
- border-radius: 50%;
131
- animation: agSpin 1.6s linear infinite reverse;
132
- }
133
- .ag-ring[data-status='waiting'] {
134
- border: 1.5px solid rgb(var(--color-accent-yellow) / 0.8);
135
- animation: agBreathe 1.9s ease-in-out infinite;
136
- }
137
- .ag-ring[data-status='failed'] { border: 1.5px solid rgb(var(--color-accent-red) / 0.55); }
138
-
139
- .ag-dot {
140
- position: absolute; right: calc(var(--ag-size) * -0.05); bottom: calc(var(--ag-size) * -0.05);
141
- width: calc(var(--ag-size) * 0.32); height: calc(var(--ag-size) * 0.32); border-radius: 999px;
142
- box-shadow: 0 0 0 1.5px rgb(var(--color-bg));
143
- }
144
- .ag-dot[data-status='failed'] { background: rgb(var(--color-accent-red)); }
145
- .ag-dot[data-status='waiting'] { background: rgb(var(--color-accent-yellow)); }
146
-
147
- /* done:绿勾,不是绿点。
148
- 对勾是跨语言通用的「完成」语义;绝不用「绿点」代替 —— 点只是「有颜色」,勾才是「结束了」。
149
- 角标取槽位的 36%:22px 上是 7.9px。早先固定 10px,在 22px 的团子上等于盖掉半张脸
150
- (配件和眼睛一起被吃掉),越大的槽位反而越看不出勾是「角标」还是「主体」。 */
151
- .ag-check {
152
- position: absolute; right: calc(var(--ag-size) * -0.06); bottom: calc(var(--ag-size) * -0.06);
153
- width: calc(var(--ag-size) * 0.36); height: calc(var(--ag-size) * 0.36);
154
- filter: drop-shadow(0 0 1.5px rgb(var(--color-bg)));
155
- }
156
-
157
- /* 眨眼:默认全静止。几十条会话各自随机眨眼是干扰,不是生命感。
158
- hover 才眨一次 —— 一次性动画(iteration 1),不会变成一只反复眨的团子。
159
- transform-box 必须是 fill-box:默认的 view-box 会绕画布中心压,眼睛会被拉向嘴。 */
160
- .ag-eye { transform-box: fill-box; transform-origin: center; }
161
- .ag-glyph[data-animate='true'] .ag-eye { animation: agBlink 4.2s ease-in-out infinite; }
162
- .ag-glyph:hover .ag-eye { animation: agBlinkOnce 0.52s ease-out 1; }
163
-
164
- @keyframes agSpin { to { transform: rotate(360deg); } }
165
- @keyframes agBreathe { 0%,100% { opacity: 0.35; transform: scale(0.97); } 50% { opacity: 1; transform: scale(1); } }
166
- @keyframes agBlink {
167
- 0%, 90%, 100% { transform: scaleY(1); }
168
- 94% { transform: scaleY(0.12); }
169
- }
170
- @keyframes agBlinkOnce {
171
- 0%, 100% { transform: scaleY(1); }
172
- 40% { transform: scaleY(0.12); }
173
- 72% { transform: scaleY(1); }
174
- }
175
-
176
- @media (prefers-reduced-motion: reduce) {
177
- .ag-ring,
178
- .ag-ring[data-status='running']::after,
179
- .ag-glyph[data-animate='true'] .ag-eye,
180
- .ag-glyph:hover .ag-eye { animation: none !important; }
181
- .ag-ring[data-status='waiting'] { opacity: 0.75; transform: none; }
182
- /* 内涡是「在转」的线索,停转后会变成一道悬在团子边上的杂线 —— 直接撤掉,
183
- 状态由下面的静态环承担。 */
184
- .ag-ring[data-status='running']::after { display: none; }
185
- /* running 停止旋转后必须留下静态痕迹,否则 reduced-motion 用户看不到任何「进行中」 */
186
- .ag-ring[data-status='running'] {
187
- background: rgb(var(--color-accent-blue) / 0.85);
188
- mask: radial-gradient(farthest-side, transparent calc(100% - 2px), #000 calc(100% - 2px));
189
- -webkit-mask: radial-gradient(farthest-side, transparent calc(100% - 2px), #000 calc(100% - 2px));
190
- }
191
- }
192
- `,Dt=(0,M.memo)(function({sessionId:e,icon:t,size:n=22,status:r,expression:i,animate:a=!1,className:o,label:s}){let c=t?Pe(t):Ne(e),l=Me(n),u=(0,M.useId)().replace(/[^a-zA-Z0-9_-]/g,``),d=i??Fe(r);return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(`style`,{href:`deepseekcode-agent-glyph`,precedence:`default`,children:Et}),(0,N.jsxs)(`span`,{className:k(`ag-glyph relative inline-flex shrink-0 items-center justify-center`,o),style:{width:n,height:n,"--ag-size":`${n}px`},"data-status":r,"data-icon":c.id,"data-expression":d,"data-animate":a&&r!==`running`?`true`:`false`,title:s??`${c.name} · ${c.desc}`,"aria-label":s??`${c.name} · ${c.desc}`,role:`img`,children:[(0,N.jsx)(Ie,{colors:c.colors,expression:d,accessory:c.accessory,tier:l,uid:u,size:n}),r&&r!==`done`&&(0,N.jsx)(`span`,{className:`ag-ring`,"data-status":r,"aria-hidden":`true`}),r===`done`&&(0,N.jsxs)(`svg`,{className:`ag-check`,viewBox:`0 0 10 10`,"aria-hidden":`true`,children:[(0,N.jsx)(`circle`,{cx:5,cy:5,r:5,fill:`rgb(var(--color-accent-green))`}),(0,N.jsx)(`path`,{d:`M2.6 5.1 L4.3 6.8 L7.5 3.2`,fill:`none`,stroke:`#fff`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`})]}),r&&r!==`done`&&r!==`running`&&(0,N.jsx)(`span`,{className:`ag-dot`,"data-status":r,"aria-hidden":`true`})]})]})}),Ot=1.5,kt=1,At=1.5;function jt(e,t,n){return t>0&&e>t*n+kt}function Mt({children:e,contentKey:t,lines:n=12,className:r}){let{t:i}=D(),a=(0,M.useId)(),o=(0,M.useRef)(null),[s,c]=(0,M.useState)(null),[l,u]=(0,M.useState)(0),[d,f]=(0,M.useState)(!1),p=(0,M.useCallback)(()=>{let e=o.current;if(!e)return;let t=window.getComputedStyle(e),r=Number.parseFloat(t.lineHeight),i=Number.parseFloat(t.fontSize),a=Number.isFinite(r)&&r>0?r:Number.isFinite(i)&&i>0?i*At:0;a<=0||(u(a),jt(e.scrollHeight,a,n)?c(a*n):(c(null),f(!1)))},[n]);(0,M.useLayoutEffect)(()=>{p()},[p,t]),(0,M.useLayoutEffect)(()=>{let e=o.current;if(!e||typeof ResizeObserver>`u`)return;let t=new ResizeObserver(()=>p());return t.observe(e),()=>t.disconnect()},[p]);let m=s!==null&&!d;return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(`div`,{ref:o,id:a,className:k(`ui-clamp`,r),"data-expanded":m?`false`:`true`,style:{"--ui-clamp-max-h":`${s??0}px`,"--ui-clamp-fade":`${l*Ot}px`},onFocusCapture:m?()=>f(!0):void 0,children:e}),s!==null&&(0,N.jsx)(I,{variant:`ghost`,size:`sm`,className:`-ms-3.5 mt-0.5`,"aria-expanded":!m,"aria-controls":a,onClick:()=>f(e=>!e),rightIcon:m?(0,N.jsx)(oe,{size:13,"aria-hidden":`true`}):(0,N.jsx)(ae,{size:13,"aria-hidden":`true`}),children:i(m?`chat.messageExpand`:`chat.messageCollapse`)})]})}function Nt(e,t){if(typeof document>`u`||typeof document.createRange!=`function`)return 0;let n=document.createRange();n.selectNodeContents(t);let r=typeof n.getBoundingClientRect==`function`?n.getBoundingClientRect().width:0,i=e.clientWidth||e.getBoundingClientRect().width;return!r||!i?0:Math.ceil(r-i)}function Pt(e){let t=Math.abs(e)/80/.4;return Math.round(Math.min(20,Math.max(4,t))*10)/10}function Ft(e){let t=Math.max(0,Math.round(e));return{"--marquee-shift":t>0?`-${t}px`:`0px`,"--marquee-dur":`${Pt(t)}s`}}function It({text:e,active:t=!1,trigger:n=`active`,className:r=``,title:i}){let a=(0,M.useRef)(null),o=(0,M.useRef)(null),[s,c]=(0,M.useState)(0),[l,u]=(0,M.useState)(!1),d=n===`hover`?l:t,f=(0,M.useCallback)(()=>{let e=a.current,t=o.current;if(!e||!t)return;let n=Nt(e,t);c(n>=8?n:0)},[]);(0,M.useLayoutEffect)(()=>{d?f():c(0)},[d,e,f]),(0,M.useEffect)(()=>{if(d)return window.addEventListener(`resize`,f),()=>window.removeEventListener(`resize`,f)},[d,f]);let p=d&&s>0,m=n===`hover`;return(0,N.jsx)(`span`,{ref:a,className:`block min-w-0 overflow-hidden ${r}`,title:i,onMouseEnter:m?()=>u(!0):void 0,onMouseLeave:m?()=>u(!1):void 0,children:(0,N.jsx)(`span`,{ref:o,className:p?`marquee-track block w-max whitespace-nowrap`:`block truncate`,style:p?Ft(s):void 0,children:e})})}export{I as A,Ke as C,R as D,Je as E,P as M,Ge as O,Ye as S,Xe as T,it as _,St as a,U as b,$ as c,Z as d,pt as f,Y as g,ct as h,Ct as i,F as j,We as k,ht as l,lt as m,Mt as n,bt as o,ft as p,Dt as r,gt as s,It as t,mt as u,K as v,qe as w,H as x,W as y};