@kimiclaw/cli 1.0.42 → 1.0.45
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -21
- package/bin/dscode.exe +4 -0
- package/install.cjs +15 -0
- package/package.json +9 -9
- package/web/dist/assets/AssistantsView-Y3nFezhd.js +1 -0
- package/web/dist/assets/AutomationView-bf7_zU_p.js +4 -0
- package/web/dist/assets/Button-B43HsIQ3.js +1 -0
- package/web/dist/assets/ChannelConfigView---Dwl3Fk.js +12 -0
- package/web/dist/assets/ChartsView-Dw6G-jf3.js +1 -0
- package/web/dist/assets/ConnectorsView-BWvdrpyK.js +2 -0
- package/web/dist/assets/{MessageBubble-CVGXupVH.js → DiffPreview-WQihq3bK.js} +65 -67
- package/web/dist/assets/FileContextMenu-CyjXlSHp.js +1 -0
- package/web/dist/assets/FileTreeView-Cafy33nT.js +1 -0
- package/web/dist/assets/HookConfigView-D-lASVju.js +2 -0
- package/web/dist/assets/InboxView-BWajw-Yx.js +1 -0
- package/web/dist/assets/InputArea-CSqaA55j.js +31 -0
- package/web/dist/assets/Install-ClEm4oGX.js +2 -0
- package/web/dist/assets/MemoryView-DLri75dm.js +1 -0
- package/web/dist/assets/ModelsView-BBLUMzR5.js +1 -0
- package/web/dist/assets/PluginsView-C-fnbDGZ.js +1 -0
- package/web/dist/assets/ProjectsView-BruI2W_l.js +1 -0
- package/web/dist/assets/SessionGrid-7GLpwn6d.js +4 -0
- package/web/dist/assets/SettingsModal-cc9Qu2QU.js +4 -0
- package/web/dist/assets/SkillsView-Bf-2-U_q.js +1 -0
- package/web/dist/assets/TemplatesTab-CKul8nbL.js +2 -0
- package/web/dist/assets/ToolsView-D_aluOsK.js +1 -0
- package/web/dist/assets/WorkspaceDirPicker-Z42YqE4a.js +5 -0
- package/web/dist/assets/{agentIconSet-B5GUQwel.js → agentIconSet-Cqhm4UOl.js} +1 -1
- package/web/dist/assets/api-BW4-5gtM.js +1 -0
- package/web/dist/assets/channelMeta-BO645sjD.js +1 -0
- package/web/dist/assets/chatStore-D8Zzr1hE.js +242 -0
- package/web/dist/assets/cn-CoHJgTJ5.js +1 -0
- package/web/dist/assets/common-CP2UB8TN.js +304 -0
- package/web/dist/assets/icons-CittejKL.js +1 -0
- package/web/dist/assets/imageUrl-BVgcEm7e.js +2 -0
- package/web/dist/assets/index-CEUbTcNL.css +1 -0
- package/web/dist/assets/index-CxrzleFg.js +122 -0
- package/web/dist/assets/installDiagnosis-ZYUVgJIJ.js +3 -0
- package/web/dist/assets/{markdown-N5__3T-w.js → markdown-DZQBOzWk.js} +1 -1
- package/web/dist/assets/{panels-CIPgN61N.js → panels-CuDz4aqU.js} +1 -1
- package/web/dist/assets/projectsStore-B7fdKRzl.js +1 -0
- package/web/dist/assets/{react-vendor-CB4cLN-6.js → react-vendor-BEA-EtI-.js} +1 -1
- package/web/dist/assets/sessionKind-CZ1kQQII.js +1 -0
- package/web/dist/assets/{settingsStore-Xqln0d91.js → settingsStore-DYqiXodu.js} +1 -1
- package/web/dist/assets/src-55YckF5W.js +2 -0
- package/web/dist/assets/{state-CSZ50keL.js → state-A4wJ8QgR.js} +1 -1
- package/web/dist/assets/statusAxesRefresh-BBqszCp-.js +1 -0
- package/web/dist/assets/sttLanguages-jnSk4aqg.js +6 -0
- package/web/dist/assets/threadStore-CQi4OzSe.js +1 -0
- package/web/dist/assets/{types-JssxRFJn.js → threads-lr33dwqg.js} +1 -1
- package/web/dist/assets/useConfirm-kTv3x0H6.js +1 -0
- package/web/dist/assets/{useTranslation-B-mfApCn.js → useTranslation-2BGEBvJE.js} +1 -1
- package/web/dist/assets/websocket-DCs7f54y.js +1 -0
- package/web/dist/assets/whatsNewStore-DoCQvcMq.js +1 -0
- package/web/dist/favicon.svg +31 -14
- package/web/dist/icons/icon-1024.png +0 -0
- package/web/dist/icons/icon-180.png +0 -0
- package/web/dist/icons/icon-192.png +0 -0
- package/web/dist/icons/icon-512.png +0 -0
- package/web/dist/icons/icon-maskable-512.png +0 -0
- package/web/dist/index.html +42 -35
- package/web/dist/logo.svg +42 -20
- package/web/dist/manifest.webmanifest +2 -2
- package/web/dist/assets/AssistantsView-Ct3BBpYf.js +0 -1
- package/web/dist/assets/AutomationView-CO-jVhee.js +0 -3
- package/web/dist/assets/ChannelConfigView-Ct1W584x.js +0 -8
- package/web/dist/assets/ChartsView-CAc37Sam.js +0 -1
- package/web/dist/assets/ConnectorsView-DP4bbh58.js +0 -1
- package/web/dist/assets/FileTreeView-DwsYfssO.js +0 -1
- package/web/dist/assets/HookConfigView-uFsqieii.js +0 -2
- package/web/dist/assets/InputArea-BY8quOiH.js +0 -14
- package/web/dist/assets/MemoryView-Bgd_lcTf.js +0 -1
- package/web/dist/assets/ModelsView-B271UV9L.js +0 -1
- package/web/dist/assets/PluginsView-Dz4fqQR1.js +0 -2
- package/web/dist/assets/ProjectsView-DF-YCV8y.js +0 -1
- package/web/dist/assets/SessionGrid-BIREstN2.js +0 -4
- package/web/dist/assets/SettingsModal-ZJeoZcCd.js +0 -4
- package/web/dist/assets/SkillsView-CH2ghYL2.js +0 -1
- package/web/dist/assets/TemplatesTab-BGe7_67s.js +0 -1
- package/web/dist/assets/ThreadsView-XditIHZ4.js +0 -2
- package/web/dist/assets/ToolsView-BBzsFdVZ.js +0 -1
- package/web/dist/assets/api-plEYhRn0.js +0 -1
- package/web/dist/assets/channelMeta-BGQXQxgj.js +0 -1
- package/web/dist/assets/common-Bbatsa0-.js +0 -192
- package/web/dist/assets/icons-CYDRRPKW.js +0 -1
- package/web/dist/assets/index-CTbLW314.js +0 -133
- package/web/dist/assets/index-DdzVrZye.css +0 -1
- package/web/dist/assets/src-49LUQhkG.js +0 -1
- package/web/dist/assets/sttLanguages-CSNMgUTz.js +0 -2
- package/web/dist/assets/ttsSettings-BwXYpDnk.js +0 -2
- package/web/dist/assets/useConfirm-Da8iQ_DZ.js +0 -1
- package/web/dist/assets/websocket-BnDwh01e.js +0 -1
- package/web/dist/assets/whatsNewStore-LpdLRLGl.js +0 -1
- package/web/dist/assets/workspaceSemantics-RaIRer76.js +0 -3
- /package/web/dist/assets/{MessageBubble-CCTRbIMZ.css → DiffPreview-CCTRbIMZ.css} +0 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{A as t,At as n,E as r,K as i,M as a,Wt as o,Xn as s,Y as c,Zr as l,_t as u,br as d,dt as ee,ft as te,g as f,ii as p,it as m,qn as h,qt as g,r as _,sn as v,t as y,v as ne,yn as b}from"./icons-CittejKL.js";import{t as re}from"./useTranslation-2BGEBvJE.js";import{t as x}from"./Button-B43HsIQ3.js";import{t as S}from"./api-BW4-5gtM.js";import{I as C}from"./markdown-DZQBOzWk.js";import{d as w}from"./common-CP2UB8TN.js";import{t as ie}from"./useConfirm-kTv3x0H6.js";import{X as ae,ot as oe}from"./index-CxrzleFg.js";import{n as se,t as ce}from"./Install-ClEm4oGX.js";var T=e(p(),1);async function E(e,t,n={}){let r=n.intervalMs??400,i=Date.now()+(n.timeoutMs??6e5);for(;;){if(Date.now()>i)throw Error(`install job ${e} timed out`);await new Promise(e=>setTimeout(e,r));let n=await S.installs.get(e);if(!n.success||!n.data)throw Error(n.error||`install job ${e} not found`);let a=n.data;if(t?.({stage:a.stage,progress:a.progress,logs:a.logs,jobId:e,status:a.status,...a.error?{error:a.error}:{},...a.logPath?{logPath:a.logPath}:{}}),a.status!==`running`)return{status:a.status,error:a.error,skill:a.skill,connector:a.connector,logs:a.logs}}}function D(e){let t=e.supportsOAuth===!0?[`授权过期或从未授权(refresh token 失效 / 用户撤销了同意)`,`OAuth client id、client secret 或回调地址不对`,`组织策略禁止该应用,或账号被停用`]:[`凭据不对(把登录密码当成了授权码 —— 163 / QQ / Gmail 这类邮箱要的是**应用专用密码/授权码**)`,`邮箱侧没开 IMAP / SMTP(网页版能用不代表客户端能连)`,`端口或加密方式不对(IMAP 993/SSL、SMTP 465/SSL 最常见)`],n=[`网络或代理不通(公司网 / 墙 / 自签证书)`,`连接器插件没安装或没激活`,`连接器本身被禁用`,`连上了但没暴露任何工具(toolCount=0,工具前缀配错)`];return[...t,...n].join(` / `)}function O({connector:e,account:t,message:n}){let r=[t?`连接器「${e.name}」的账号「${t.label}」连不上,帮我定位并修好。`:`连接器「${e.name}」的「添加账号」失败了,帮我定位并修好。`,``,`- 连接器:${e.name}(${e.id},类型 ${e.kind})`];t&&(r.push(`- 账号:${t.label}`),t.tags.length>0&&r.push(`- 标签:${t.tags.join(`, `)}`),t.hint&&r.push(`- 标识:${t.hint}(区分同名账号用)`),r.push(`- 启用:${t.enabled?`是`:`否`}`),r.push(`- 状态:${t.status}`),typeof t.toolCount==`number`&&r.push(t.toolCount>0?`- 已暴露工具:${t.toolCount} 个`:`- 已暴露工具:0 个(连上了但一个工具都没注册)`),r.push(`- 已配置凭据:${t.configuredEnv?.length?t.configuredEnv.join(`, `):`(无)`}`),t.missingEnv?.length&&r.push(`- 缺失的必需项:${t.missingEnv.join(`, `)}`));let i=[];if(typeof e.enabled==`boolean`&&i.push(`启用:${e.enabled?`是`:`否`}`),typeof e.installed==`boolean`&&i.push(`插件:${e.installed?`已安装`:`**未安装**`}`),e.status&&i.push(`状态:${e.status}`),e.supportsOAuth===!0&&i.push(`授权:${e.authorized===!0?`已授权(refresh token 已存)`:e.authorized===!1?`**未授权 / 授权已失效**`:`(未知,服务端未返回授权状态)`}`),e.missingEnv?.length&&i.push(`缺必需环境变量:${e.missingEnv.join(`, `)}`),e.error&&i.push(`连接器错误:${e.error}`),i.length>0){r.push(``,`【连接器层】(账号连不上时根因常常在这一层,先看这几行)`);for(let e of i)r.push(`- ${e}`)}r.push(``),r.push(`【错误】`);let a=[...t?.error?[`账号错误:${t.error}`]:[],...n?[`本次操作报错:${n}`]:[]];return r.push(...a.length>0?a:[`(服务端没有给出错误信息)`]),r.push(``),r.push(...i.length>0?[`**先判连接器层**:禁用 / 未安装 / 缺必需环境变量 / 未授权 —— 这四条任何一条成立就先修它,不要动账号凭据。`]:[],`${i.length>0?`连接器层没问题再`:`请`}按类别判断:${D(e)}。`,`然后给出最小修复动作:能改配置的说清改哪一项、去哪里改(邮箱型要说邮箱端的开关路径,OAuth 型要说重新授权与应用登记页);要改代码的指出文件与函数。`,`最后说明改完之后该怎么重试。`,``,`需要读代码时:连接器与账号逻辑在 packages/core/src/connectors/(accounts.ts 管账号展开与状态)。`),r.join(`
|
|
2
|
+
`)}var k=C();function A(e){return e.split(/[,,、]/).map(e=>e.trim()).filter(Boolean)}function le({connector:e,onRefresh:n}){let{t:r}=re(),[i,a]=ie(),[o,s]=(0,T.useState)(null),[c,l]=(0,T.useState)(null),[te,p]=(0,T.useState)(null),[m,h]=(0,T.useState)(null),[_,y]=(0,T.useState)(null),b=e.accounts??[],C=(e.requiresEnv??[]).filter(e=>!e.optional),w=async(e,t)=>{s(e),l(null),p(null);let r=await t();r&&(l(r),p(e)),s(null),r||n()},oe=(t,n)=>{ae(O({connector:e,account:t,message:n}))},se=()=>h({mode:`add`,label:``,tags:``,env:{}}),ce=e=>h({mode:`creds`,accountId:e.id,label:e.label,tags:e.tags.join(`, `),env:{}}),D=()=>{if(!m)return;let t=A(m.tags),n=Object.fromEntries(Object.entries(m.env).filter(([,e])=>e.trim().length>0)),r=m.accountId??`new`;w(r,async()=>{if(m.mode===`add`){let r=await S.connectors.addAccount(e.id,{...m.label.trim()?{label:m.label.trim()}:{},tags:t,...Object.keys(n).length?{env:n}:{}});if(!r.success)return r.error||`新增账号失败`}else{let r=b.find(e=>e.id===m.accountId);if(!r)return`账号已不存在,请刷新`;let i=await S.connectors.updateAccount(e.id,r.id,{label:m.label.trim()||r.label,tags:t});if(!i.success)return i.error||`保存账号失败`;if(Object.keys(n).length){let e=await S.connectors.connect(r.stateId,n);if(!e.success||!e.data?.jobId)return e.error||`连接账号失败`;let t=await E(e.data.jobId);if(t.status===`error`)return t.error||`连接账号失败`}}return h(null),null})},le=e=>{!e.enabled&&e.missingEnv?.length?ce(e):w(e.id,async()=>{let t=await S.connectors.toggle(e.stateId,!e.enabled);if(!t.success)return t.error||`切换 ${e.label} 失败`;if(t.data&&`jobId`in t.data){let n=await E(t.data.jobId);if(n.status===`error`)return n.error||`连接 ${e.label} 失败`}return null})},ue=(t,n)=>{w(t.id,async()=>{let r=await S.connectors.updateAccount(e.id,t.id,{tags:A(n)});return r.success?null:r.error||`保存标签失败`}),y(null)},de=t=>{a({message:r(`connectors.accountsRemoveConfirm`,{label:t.label}),variant:`danger`}).then(n=>{n&&w(t.id,async()=>{let n=await S.connectors.removeAccount(e.id,t.id);return n.success?n.data?.removed===!1?`账号已不存在`:null:n.error||`删除账号失败`})})},fe=e=>e.enabled&&e.status===`ready`?(0,k.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-badge text-accent-green`,children:[(0,k.jsx)(d,{size:10}),e.toolCount?r(`connectors.toolCount`,{count:e.toolCount}):`ready`]}):e.status===`error`?(0,k.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-badge text-accent-red`,title:e.error,children:[(0,k.jsx)(f,{size:10}),e.error||r(`connectors.missing`)]}):e.missingEnv?.length?(0,k.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-badge text-accent-yellow`,children:[(0,k.jsx)(f,{size:10}),e.missingEnv.join(`, `),` `,r(`connectors.missing`)]}):(0,k.jsx)(`span`,{className:`text-badge text-dark-muted`,children:e.status});return(0,k.jsxs)(`div`,{className:`mt-3 pt-3 border-t border-dark-border`,children:[i,(0,k.jsxs)(`div`,{className:`flex items-center justify-between gap-2 mb-2`,children:[(0,k.jsxs)(`span`,{className:`text-xs text-dark-muted inline-flex items-center gap-1`,children:[(0,k.jsx)(v,{size:12}),r(`connectors.accountsTitle`),(0,k.jsxs)(`span`,{className:`text-badge`,children:[`(`,b.length,`)`]})]}),(0,k.jsxs)(`button`,{type:`button`,onClick:se,className:`inline-flex items-center gap-1 text-meta text-accent-blue hover:underline`,children:[(0,k.jsx)(ee,{size:11}),r(`connectors.accountsAdd`)]})]}),b.length===0?(0,k.jsx)(`p`,{className:`text-badge text-dark-muted`,children:r(`connectors.accountsEmpty`)}):(0,k.jsx)(`ul`,{className:`space-y-1.5`,children:b.map(e=>(0,k.jsxs)(`li`,{className:`flex items-center gap-2 flex-wrap bg-dark-bg/60 border border-dark-border rounded-lg px-2.5 py-1.5`,children:[(0,k.jsx)(`span`,{className:`text-sm`,children:e.label}),_?.id===e.id?(0,k.jsx)(`input`,{autoFocus:!0,value:_.value,onChange:t=>y({id:e.id,value:t.target.value}),onBlur:()=>ue(e,_.value),onKeyDown:t=>{t.key===`Enter`&&ue(e,_.value),t.key===`Escape`&&y(null)},placeholder:r(`connectors.accountsTagsHint`),className:`px-1.5 py-0.5 bg-dark-surface border border-dark-border rounded text-badge w-40`}):(0,k.jsxs)(k.Fragment,{children:[e.tags.length?e.tags.map(e=>(0,k.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 rounded bg-accent-blue/15 text-accent-blue`,children:e},e)):(0,k.jsx)(`span`,{className:`text-badge text-dark-muted`,children:r(`connectors.accountsNoTags`)}),(0,k.jsx)(`button`,{type:`button`,title:r(`connectors.accountsEditTags`),onClick:()=>y({id:e.id,value:e.tags.join(`, `)}),className:`text-dark-muted hover:text-accent-blue`,children:(0,k.jsx)(u,{size:11})})]}),e.hint?(0,k.jsx)(`span`,{className:`text-badge text-dark-muted`,children:e.hint}):null,o===e.id?(0,k.jsx)(g,{size:11,className:`animate-spin text-dark-muted`}):fe(e),e.status===`error`&&o!==e.id?(0,k.jsx)(`button`,{type:`button`,"data-testid":`connector-account-ask-ai`,"aria-label":r(`connectors.accountsAskAi`),title:r(`connectors.accountsAskAi`),onClick:()=>oe(e,null),className:`p-0.5 rounded text-accent-blue hover:bg-accent-blue/15 transition-colors`,children:(0,k.jsx)(t,{size:11})}):null,(0,k.jsxs)(`span`,{className:`ms-auto flex items-center gap-1.5`,children:[(0,k.jsx)(`button`,{type:`button`,title:r(`connectors.accountsCreds`),onClick:()=>ce(e),className:`p-1 rounded text-dark-muted hover:text-accent-blue hover:bg-dark-hover`,children:(0,k.jsx)(v,{size:12})}),(0,k.jsx)(`button`,{type:`button`,title:r(`connectors.accountsRemove`),onClick:()=>de(e),disabled:o!==null,className:`p-1 rounded text-dark-muted hover:text-accent-red hover:bg-accent-red/10 disabled:opacity-40`,children:(0,k.jsx)(ne,{size:12})}),(0,k.jsx)(`button`,{role:`switch`,"aria-checked":e.enabled,disabled:o!==null,onClick:()=>le(e),className:`relative w-9 h-5 rounded-full transition-colors disabled:opacity-50 ${e.enabled?`bg-accent-green`:`bg-dark-border`}`,children:(0,k.jsx)(`span`,{className:`absolute top-0.5 w-4 h-4 bg-white rounded-full transition-transform ${e.enabled?`start-4`:`start-0.5`}`})})]})]},e.id))}),c?(0,k.jsxs)(`p`,{className:`text-badge text-accent-red mt-2 inline-flex items-center gap-2 flex-wrap`,children:[(0,k.jsx)(`span`,{children:c}),(0,k.jsxs)(`button`,{type:`button`,"data-testid":`connector-error-ask-ai`,onClick:()=>oe(b.find(e=>e.id===te)??null,c),className:`inline-flex items-center gap-1 px-1.5 py-0.5 rounded border border-accent-blue/40 bg-accent-blue/10 text-meta text-accent-blue hover:bg-accent-blue/20 transition-colors`,children:[(0,k.jsx)(t,{size:10}),` `,r(`connectors.accountsAskAi`)]})]}):null,m?(0,k.jsxs)(`div`,{className:`mt-2 border border-dark-border rounded-lg p-2.5 bg-dark-bg/60 space-y-2`,children:[(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`label`,{className:`block text-meta text-dark-muted mb-1`,children:r(`connectors.accountsLabel`)}),(0,k.jsx)(`input`,{autoFocus:!0,value:m.label,onChange:e=>h({...m,label:e.target.value}),placeholder:r(`connectors.accountsLabelHint`),className:`w-full px-2 py-1 bg-dark-surface border border-dark-border rounded text-sm focus:border-accent-blue focus:outline-none`})]}),(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`label`,{className:`block text-meta text-dark-muted mb-1`,children:r(`connectors.accountsTags`)}),(0,k.jsx)(`input`,{value:m.tags,onChange:e=>h({...m,tags:e.target.value}),placeholder:r(`connectors.accountsTagsHint`),className:`w-full px-2 py-1 bg-dark-surface border border-dark-border rounded text-sm focus:border-accent-blue focus:outline-none`})]}),C.map(e=>(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`label`,{className:`block text-meta text-dark-muted mb-1`,children:e.label}),(0,k.jsx)(`input`,{type:e.secret?`password`:`text`,value:m.env[e.key]??``,onChange:t=>h({...m,env:{...m.env,[e.key]:t.target.value}}),placeholder:e.key,className:`w-full px-2 py-1 bg-dark-surface border border-dark-border rounded text-sm focus:border-accent-blue focus:outline-none`}),e.hint?(0,k.jsx)(`p`,{className:`text-badge text-dark-muted mt-0.5`,children:e.hint}):null]},e.key)),(0,k.jsxs)(`div`,{className:`flex gap-2`,children:[(0,k.jsx)(x,{variant:`accent`,disabled:o!==null,onClick:D,children:m.mode===`add`?r(`connectors.accountsAdd`):r(`common.save`)}),(0,k.jsx)(`button`,{type:`button`,onClick:()=>h(null),className:`px-3 py-1.5 bg-dark-surface border border-dark-border rounded-lg text-sm`,children:r(`common.cancel`)})]})]}):null]})}var ue={"code-intelligence":`🧠 代码智能`,filesystem:`📂 文件系统`,databases:`🗄️ 数据库`,"browser-automation":`🌐 浏览器自动化`,"knowledge-memory":`🧠 知识/记忆`,"search-web":`🔎 搜索/网页`,"cloud-platforms":`☁️ 云平台`,communication:`💬 通讯`,"developer-tools":`🛠️ 开发者工具`,security:`🔒 安全`,"test-demo":`🧪 测试/Demo`,other:`📦 其他`},de=`email-imap`,fe=`duckdb`,pe=`dbhub`;function me(e){return(e.missingEnv?.length??0)>0||!!e.supportsOAuth&&!e.authorized}function he(e){return typeof e.jobId==`string`}var ge=[`phone_use`,`phone_inspect`];function j(){let{t:e}=re(),[t,u]=(0,T.useState)([]),[p,C]=(0,T.useState)(!0),[ie,ae]=(0,T.useState)(!1),[D,O]=(0,T.useState)(null),[A,j]=(0,T.useState)({}),[_e,M]=(0,T.useState)(null),[N,ve]=(0,T.useState)(``),[P,ye]=(0,T.useState)(null),[be,xe]=(0,T.useState)(`all`),[Se,F]=(0,T.useState)(null),[Ce,we]=(0,T.useState)({}),[Te,Ee]=(0,T.useState)(!1),[I,L]=(0,T.useState)({name:``,command:``,args:``,env:``,transport:`stdio`,url:``,headers:``}),[R,De]=(0,T.useState)(null),[Oe,z]=(0,T.useState)(!1),[ke,B]=(0,T.useState)(null),[V,Ae]=(0,T.useState)(null),[je,H]=(0,T.useState)(!1),[Me,U]=(0,T.useState)(null),[W,Ne]=(0,T.useState)(null),[Pe,Fe]=(0,T.useState)(!1),[Ie,Le]=(0,T.useState)(null),Re=async()=>{z(!0),B(null);try{let e=await S.tools.get(`computer_use`);De(e.success&&e.data?!!e.data.enabled:!1)}catch(e){B(e instanceof Error?e.message:String(e))}z(!1)},ze=async()=>{if(R===null)return;let e=!R;z(!0),B(null);try{let t=await S.tools.toggle(`computer_use`,e);t.success?De(e):B(t.error||`切换 Computer Use 失败`)}catch(e){B(e instanceof Error?e.message:String(e))}z(!1)},Be=async()=>{H(!0),U(null);try{let e=await S.tools.get(`phone_use`);Ae(e.success&&e.data?!!e.data.enabled:!1)}catch(e){U(e instanceof Error?e.message:String(e))}H(!1)},Ve=async()=>{if(V===null)return;let t=!V;H(!0),U(null);try{let n=(await Promise.all(ge.map(e=>S.tools.toggle(e,t)))).find(e=>!e.success);n?U(n.error||e(`connectors.phoneToggleFailed`)):(Ae(t),t&&He())}catch(e){U(e instanceof Error?e.message:String(e))}H(!1)},He=async()=>{Fe(!0),U(null);try{let t=await S.device.androidStatus();t.success&&t.data?Ne(t.data):U(t.error||e(`connectors.phoneCheckFailed`))}catch(e){U(e instanceof Error?e.message:String(e))}Fe(!1)},Ue=()=>{window.dispatchEvent(new CustomEvent(`switch-tab`,{detail:`tools`}))},We=()=>L({name:``,command:``,args:``,env:``,transport:`stdio`,url:``,headers:``}),Ge=e=>Object.fromEntries(e.split(`,`).map(e=>e.trim()).filter(Boolean).map(e=>{let t=e.indexOf(`=`);return t>0?[e.slice(0,t).trim(),e.slice(t+1).trim()]:[e,``]})),Ke=async()=>{let t=I.transport!==`stdio`;if(!I.name.trim()||!t&&!I.command.trim()||t&&!I.url.trim())M(e(`connectors.customFormRequired`));else{j(e=>({...e,__add:!0})),M(null);try{let e=await S.connectors.addCustom({name:I.name.trim(),command:t?void 0:I.command.trim(),args:t?void 0:I.args.split(/\s+/).filter(Boolean),env:Ge(I.env),url:t?I.url.trim():void 0,transport:t?I.transport:void 0,headers:t?Ge(I.headers):void 0});e.success&&e.data?(u(t=>[...t,e.data]),Ee(!1),We()):M(e.error||`添加失败`)}catch(e){M(e instanceof Error?e.message:String(e))}finally{j(e=>({...e,__add:!1}))}}},qe=async e=>{j(t=>({...t,[e.id]:!0}));try{let t=await S.connectors.removeCustom(e.id);t.success?u(t=>t.filter(t=>t.id!==e.id)):M(t.error||`删除失败`)}finally{j(t=>({...t,[e.id]:!1}))}},G=async(e=!1)=>{e?ae(!0):C(!0);try{let t=await S.connectors.list();t.success&&Array.isArray(t.data?.connectors)?(u(t.data.connectors),O(null)):e||O(t.error||`加载连接器失败`)}catch(t){e||O(t instanceof Error?t.message:String(t))}finally{C(!1),ae(!1)}};(0,T.useEffect)(()=>{G(),Re(),Be()},[]),oe(()=>void G(!0),{filterServer:e=>/^(managed|custom)-connector-/.test(e)});let K=(e,t,n,r)=>{M(n||null),u(n=>n.map(n=>n.id===e?t??{...n,enabled:!!r,status:`error`}:n))},Je=async(e,t,n)=>{M(null),j(t=>({...t,[e.id]:!0})),u(n=>n.map(n=>n.id===e.id?{...n,enabled:t,status:t?`connecting`:`installed`}:n));try{let r=await S.connectors.toggle(e.id,t,n);if(!r.success||!r.data){K(e.id,void 0,r.error||`切换 ${e.name} 失败`,!t);return}if(he(r.data)){let{jobId:t}=r.data;q(n=>({...n,[e.id]:{jobId:t,stage:`queued`,progress:0,logs:[],status:`running`}}));let n=await E(t,t=>{q(n=>({...n,[e.id]:t}))});if(n.status===`error`){K(e.id,void 0,n.error||`安装 ${e.name} 失败`,!1);return}let i=await S.connectors.get(e.id);if(i.success&&i.data){let t=i.data;u(n=>n.map(n=>n.id===e.id?t:n)),t.missingEnv?.length&&F(e.id)}return}u(t=>t.map(t=>t.id===e.id?r.data:t))}catch(n){K(e.id,void 0,n instanceof Error?n.message:String(n),!t)}finally{j(t=>({...t,[e.id]:!1}))}},Ye=e=>{!e.enabled&&e.requiresEnv?.length&&e.missingEnv?.length?F(e.id):(F(null),Je(e,!e.enabled))},[Xe,q]=(0,T.useState)({}),Ze=async(e,t)=>{F(null),M(null),j(t=>({...t,[e.id]:!0})),u(t=>t.map(t=>t.id===e.id?{...t,enabled:!0,status:`connecting`}:t));try{let n=await S.connectors.connect(e.id,t);if(!n.success||!n.data?.jobId){K(e.id,void 0,n.error||`连接 ${e.name} 失败`,!1);return}let r=await E(n.data.jobId,t=>{q(n=>({...n,[e.id]:t}))});if(r.status===`error`){K(e.id,void 0,r.error||`连接 ${e.name} 失败`,!1);return}let i=await S.connectors.get(e.id);i.success&&i.data&&u(t=>t.map(t=>t.id===e.id?i.data:t)),we(t=>({...t,[e.id]:{}}))}catch(t){K(e.id,void 0,t instanceof Error?t.message:String(t),!1)}finally{j(t=>({...t,[e.id]:!1}))}},Qe=async t=>{M(null),Le(t.id);try{let n=await S.connectors.authorize(t.id);if(!n.success||!n.data?.authUrl){M(n.error||e(`connectors.authorizeFailed`));return}window.open(n.data.authUrl,`_blank`,`noopener,noreferrer`);let r=Date.now()+12e4;for(;Date.now()<r;){await new Promise(e=>setTimeout(e,2e3));let e=(await S.connectors.list()).data?.connectors?.find(e=>e.id===t.id);if(e){if(u(n=>n.map(n=>n.id===t.id?e:n)),e.error){M(e.error);break}if(e.authorized&&e.status===`ready`)break}}}catch(e){M(e instanceof Error?e.message:String(e))}finally{Le(null)}},$e=t=>{let n=`inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-badge`;return t.stage===`ready`?(0,k.jsxs)(`span`,{className:`${n} bg-accent-green/15 text-accent-green`,children:[(0,k.jsx)(d,{size:9}),e(`connectors.phoneBadgeReady`)]}):t.stage===`adb-missing`||t.stage===`adb-error`?(0,k.jsxs)(`span`,{className:`${n} bg-accent-red/15 text-accent-red`,children:[(0,k.jsx)(f,{size:9}),t.stage===`adb-error`?e(`connectors.phoneBadgeAdbError`):e(`connectors.phoneBadgeNoAdb`)]}):(0,k.jsxs)(`span`,{className:`${n} bg-accent-yellow/15 text-accent-yellow`,children:[(0,k.jsx)(f,{size:9}),e(`connectors.phoneBadgeWaiting`)]})},et=e=>e===`adb-error`?0:e===`adb-missing`?1:e===`no-device`?2:e===`unauthorized`||e===`device-offline`?3:e===`multiple`?4:0,tt=t=>{switch(t.stage){case`ready`:return e(`connectors.phoneReady`,{device:t.selected?`${t.selected.serial}${t.selected.model?` · ${t.selected.model}`:``}`:`—`});case`adb-missing`:return e(`connectors.phoneAdbMissing`,{env:t.envKeys.binary});case`adb-error`:return e(`connectors.phoneAdbError`,{env:t.envKeys.binary});case`no-device`:return e(`connectors.phoneNoDevice`);case`unauthorized`:return e(`connectors.phoneUnauthorized`);case`device-offline`:return e(`connectors.phoneOffline`);case`multiple`:return e(`connectors.phoneMultiple`,{count:t.devices.filter(e=>e.state===`device`).length,serials:t.devices.filter(e=>e.state===`device`).map(e=>e.serial).join(`, `),env:t.envKeys.serial});default:return e(`connectors.phoneNoDevice`)}},nt=t=>{let n=`inline-flex items-center gap-1 px-2 py-0.5 rounded text-xs font-medium`;if(!t.installed)return(0,k.jsxs)(`span`,{className:`${n} bg-dark-hover text-dark-muted`,children:[(0,k.jsx)(s,{size:12}),e(`connectors.notInstalled`)]});switch(t.status){case`ready`:return(0,k.jsxs)(`span`,{className:`${n} bg-accent-green/15 text-accent-green`,children:[(0,k.jsx)(d,{size:12}),e(`connectors.ready`)]});case`connecting`:return(0,k.jsxs)(`span`,{className:`${n} bg-accent-blue/15 text-accent-blue`,children:[(0,k.jsx)(g,{size:12,className:`animate-spin`}),e(`connectors.connecting`)]});case`error`:return(0,k.jsxs)(`span`,{className:`${n} bg-accent-red/15 text-accent-red`,children:[(0,k.jsx)(f,{size:12}),e(`connectors.error`)]});case`disabled`:return(0,k.jsx)(`span`,{className:`${n} bg-dark-hover text-dark-muted`,children:e(`connectors.disabled`)});default:return(0,k.jsx)(`span`,{className:`${n} bg-dark-hover text-dark-muted`,children:e(`connectors.installed`)})}},J=t.find(e=>e.id===de)??null,rt=t.find(e=>e.id===fe)??null,it=t.find(e=>e.id===pe)??null,at=new Set([de,fe,pe]),Y=t.filter(e=>e.featured&&!at.has(e.id)&&me(e)),ot=new Set(Y.map(e=>e.id)),X=t.filter(e=>!at.has(e.id)&&!ot.has(e.id)),st=J?.missingEnv??[],Z=st.length>0,ct=!!(J&&Se===J.id),Q=X.filter(e=>be===`all`||e.kind===be),lt=Q.filter(e=>{if(N){let t=N.toLowerCase();if(![e.name,e.id,e.description,e.category??``,e.kind,...e.languages??[]].join(` `).toLowerCase().includes(t))return!1}return!(P&&e.category!==P)}).sort((e,t)=>e.enabled===t.enabled?e.name.localeCompare(t.name):e.enabled?-1:1),ut=[...new Set(Q.map(e=>e.category).filter(Boolean))];if(p&&t.length===0)return(0,k.jsx)(`div`,{className:`flex-1 overflow-y-auto p-4`,role:`status`,"aria-label":e(`common.loading`),children:(0,k.jsx)(w,{count:5})});if(D)return(0,k.jsx)(`div`,{className:`flex-1 flex items-center justify-center`,children:(0,k.jsxs)(`div`,{className:`text-center`,children:[(0,k.jsx)(f,{size:32,className:`mx-auto mb-2 text-accent-red`}),(0,k.jsx)(`p`,{className:`text-accent-red mb-4`,children:D}),(0,k.jsx)(x,{variant:`accent`,onClick:()=>void G(),children:e(`common.retry`)})]})});let dt=t=>{let n=Ce[t.id]??{},r=(e,n)=>we(r=>({...r,[t.id]:{...r[t.id]??{},[e]:n}})),i=t.requiresEnv??[],a=i.filter(e=>!e.optional),o=i.filter(e=>e.optional),s=new Set(t.configuredEnv??[]),c=Object.fromEntries(Object.entries(n).filter(([,e])=>e.trim().length>0)),l=a.filter(e=>!c[e.key]&&!s.has(e.key)),u=t=>(0,k.jsxs)(`div`,{children:[(0,k.jsxs)(`label`,{className:`flex items-center gap-1.5 text-meta text-dark-muted mb-1`,children:[(0,k.jsx)(`span`,{children:t.label}),t.optional?(0,k.jsx)(`span`,{className:`text-badge px-1 py-0.5 rounded bg-dark-hover text-dark-muted`,children:e(`connectors.envOptional`)}):null,s.has(t.key)?(0,k.jsx)(`span`,{className:`text-badge px-1 py-0.5 rounded bg-accent-green/15 text-accent-green`,children:e(`connectors.envAlreadySet`)}):null]}),(0,k.jsx)(`input`,{type:t.secret?`password`:`text`,value:n[t.key]??``,onChange:e=>r(t.key,e.target.value),placeholder:s.has(t.key)?e(`connectors.envKeepPlaceholder`):t.key,className:`w-full px-3 py-1.5 bg-dark-bg border border-dark-border rounded-lg text-sm text-dark-text placeholder-dark-muted focus:border-accent-blue focus:outline-none`}),t.hint?(0,k.jsx)(`p`,{className:`text-badge text-dark-muted mt-1`,children:t.hint}):null]},t.key);return(0,k.jsxs)(`div`,{className:`mt-3 pt-3 border-t border-dark-border`,children:[(0,k.jsxs)(`div`,{className:`text-xs text-dark-muted mb-2 flex items-center gap-1`,children:[(0,k.jsx)(v,{size:12}),a.length?e(`connectors.needCredentials`):e(`connectors.envOptionalOnly`)]}),(0,k.jsx)(`div`,{className:`space-y-2`,children:a.map(u)}),o.length?(0,k.jsxs)(`details`,{className:`mt-2`,open:l.length===0&&a.length===0,children:[(0,k.jsx)(`summary`,{className:`text-meta text-dark-muted cursor-pointer select-none`,children:e(`connectors.envOptionalSection`,{count:o.length})}),(0,k.jsx)(`div`,{className:`space-y-2 mt-2`,children:o.map(u)})]}):null,l.length?(0,k.jsx)(`p`,{className:`text-badge text-accent-yellow mt-2`,children:e(`connectors.envMissingRequired`,{keys:l.map(e=>e.key).join(`, `)})}):null,(0,k.jsxs)(`div`,{className:`flex gap-2 mt-2`,children:[(0,k.jsx)(x,{variant:`accent`,disabled:l.length>0,onClick:()=>void Ze(t,c),children:e(`connectors.connect`)}),(0,k.jsx)(`button`,{onClick:()=>F(null),className:`px-3 py-1.5 bg-dark-surface border border-dark-border rounded-lg text-sm`,children:e(`common.cancel`)})]})]})},$=(t,n=!1)=>{let r=!!A[t.id],a=Se===t.id,o=Xe[t.id],c=new Set(t.configuredEnv??[]),l=(t.requiresEnv??[]).filter(e=>e.optional&&!c.has(e.key)).length;return(0,k.jsxs)(`div`,{className:n?``:`bg-dark-surface border border-dark-border rounded-lg p-4 transition-opacity ${t.enabled?``:`opacity-80`}`,children:[(0,k.jsxs)(`div`,{className:`flex items-start justify-between gap-4 max-md:flex-wrap max-md:gap-2`,children:[(0,k.jsxs)(`div`,{className:`flex items-start gap-3 flex-1 min-w-0`,children:[(0,k.jsx)(`span`,{className:`mt-0.5 shrink-0 px-2 py-1 rounded-md text-meta font-semibold uppercase ${t.inProcess?`bg-accent-blue/15 text-accent-blue`:t.kind===`lsp`?`bg-accent-purple/15 text-accent-purple`:`bg-accent-green/15 text-accent-green`}`,children:t.inProcess?`BUILTIN`:t.kind===`lsp`?`LSP`:`MCP`}),(0,k.jsxs)(`div`,{className:`min-w-0`,children:[(0,k.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,k.jsx)(`span`,{className:`font-medium text-sm truncate`,children:t.name}),t.custom?(0,k.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 rounded bg-accent-purple/15 text-accent-purple`,children:e(`connectors.custom`)}):null,t.official?(0,k.jsxs)(`span`,{title:`Official`,className:`text-badge px-1.5 py-0.5 rounded bg-accent-yellow/15 text-accent-yellow`,children:[`🎖️ `,e(`connectors.official`)]}):null,t.scope===`cloud`?(0,k.jsxs)(`span`,{title:`Cloud`,className:`inline-flex items-center gap-0.5 text-badge px-1.5 py-0.5 rounded bg-accent-blue/15 text-accent-blue`,children:[(0,k.jsx)(b,{size:9}),e(`connectors.cloud`)]}):(0,k.jsxs)(`span`,{title:`Local`,className:`inline-flex items-center gap-0.5 text-badge px-1.5 py-0.5 rounded bg-dark-hover text-dark-muted`,children:[(0,k.jsx)(i,{size:9}),e(`connectors.local`)]}),t.language?(0,k.jsx)(`span`,{className:`text-badge`,children:t.language}):null,nt(t)]}),(0,k.jsx)(`p`,{className:`text-xs text-dark-muted mt-1 line-clamp-2`,children:t.description}),(0,k.jsxs)(`div`,{className:`flex items-center gap-3 mt-2 text-meta text-dark-muted flex-wrap`,children:[(0,k.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,k.jsx)(i,{size:11}),(0,k.jsx)(`code`,{className:`text-badge`,children:t.installHint})]}),t.transport&&t.transport!==`stdio`?(0,k.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-accent-blue`,children:[(0,k.jsx)(b,{size:11}),t.transport===`sse`?`SSE`:`Streamable HTTP`]}):null,t.languages?.length?(0,k.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,k.jsx)(y,{size:11}),t.languages.join(`, `)]}):null,t.kind===`mcp`&&t.toolCount!==void 0?(0,k.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,k.jsx)(te,{size:11}),e(`connectors.toolCount`,{count:t.toolCount})]}):null,t.requiresEnv?.length?(0,k.jsxs)(`button`,{type:`button`,onClick:()=>F(a?null:t.id),className:`inline-flex items-center gap-1 hover:text-accent-blue ${t.missingEnv?.length?`text-accent-yellow`:`text-dark-muted`}`,children:[(0,k.jsx)(v,{size:11}),t.missingEnv?.length?`${t.missingEnv.join(`, `)} ${e(`connectors.missing`)}`:e(`connectors.envConfigured`),l?` · ${e(`connectors.envOptionalUnset`,{count:l})}`:null]}):null,t.docsUrl?(0,k.jsxs)(`a`,{href:t.docsUrl,target:`_blank`,rel:`noreferrer`,className:`inline-flex items-center gap-1 hover:text-accent-blue`,onClick:e=>e.stopPropagation(),children:[(0,k.jsx)(h,{size:11}),e(`connectors.docs`)]}):null]}),t.error?(0,k.jsx)(`p`,{className:`text-meta text-accent-red mt-1`,children:t.error}):null,t.supportsOAuth&&!t.authorized&&!t.error?(0,k.jsx)(`p`,{className:`text-meta text-accent-yellow mt-1`,children:e(`connectors.oauthNotAuthorized`)}):null]})]}),(0,k.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0 max-md:w-full max-md:justify-end`,children:[t.supportsOAuth?(0,k.jsx)(x,{variant:t.authorized?`ghost`:`accent`,size:`sm`,disabled:r||Ie===t.id,onClick:()=>void Qe(t),children:Ie===t.id?e(`connectors.authorizing`):t.authorized?e(`connectors.reauthorize`):e(`connectors.authorize`)}):null,t.custom?(0,k.jsx)(`button`,{onClick:()=>void qe(t),disabled:r,title:e(`connectors.removeCustom`),className:`p-1.5 rounded-lg text-dark-muted hover:text-accent-red hover:bg-accent-red/10 transition-colors disabled:opacity-40`,children:(0,k.jsx)(ne,{size:14})}):null,!t.installed&&t.enabled?(0,k.jsxs)(`span`,{className:`text-meta text-accent-blue flex items-center gap-1`,children:[(0,k.jsx)(s,{size:11,className:`animate-pulse`}),o?.status===`running`?se(o.stage,e):e(`connectors.installing`)]}):null,(0,k.jsx)(`button`,{role:`switch`,"aria-checked":t.enabled,disabled:r,onClick:()=>Ye(t),className:`relative w-12 h-6 rounded-full transition-colors disabled:opacity-50 ${t.enabled?`bg-accent-green`:`bg-dark-border`}`,children:(0,k.jsx)(`span`,{className:`absolute top-1 w-4 h-4 bg-white rounded-full transition-transform ${t.enabled?`start-7`:`start-1`}`})})]})]}),o?(0,k.jsx)(ce,{job:{status:o.status,stage:o.stage,progress:o.progress,logs:o.logs},error:o.error??(t.status===`error`?t.error??null:null),testId:`connector-install-console`,diagnosis:{kind:`connector`,targetId:t.id,label:t.name,jobId:o.jobId,...o.logPath?{logPath:o.logPath}:{}},onRetry:o.status===`error`?()=>void Je(t,!0):void 0,onClose:()=>q(e=>{let n={...e};return delete n[t.id],n})}):null,a?dt(t):null,t.supportsAccounts?(0,k.jsx)(le,{connector:t,onRefresh:()=>void G(!0)}):null]},t.id)};return(0,k.jsxs)(`div`,{className:`flex-1 min-h-0 overflow-y-auto custom-scrollbar p-4 max-md:p-3`,children:[(0,k.jsxs)(`div`,{className:`sticky top-0 z-20 -mx-4 -mt-4 flex items-center justify-between bg-dark-bg/90 px-4 pb-3 pt-4 backdrop-blur max-md:-mx-3 max-md:-mt-3 max-md:px-3 max-md:pt-3 max-md:flex-wrap max-md:gap-2`,children:[(0,k.jsxs)(`h2`,{className:`text-lg font-semibold flex items-center gap-2`,children:[(0,k.jsx)(te,{size:20}),e(`nav.connectors`),(0,k.jsxs)(`span`,{className:`text-sm font-normal text-dark-muted`,children:[`· `,X.filter(e=>e.enabled).length,`/`,X.length]})]}),(0,k.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,k.jsx)(x,{variant:`accent`,leftIcon:(0,k.jsx)(ee,{size:14}),onClick:()=>Ee(e=>!e),children:e(`connectors.addCustom`)}),(0,k.jsxs)(`button`,{onClick:()=>void G(!0),disabled:ie,className:`flex items-center gap-2 px-3 py-1.5 bg-dark-surface border border-dark-border rounded hover:bg-dark-hover transition-colors disabled:opacity-60`,children:[(0,k.jsx)(m,{size:14,className:ie?`animate-spin`:void 0}),e(`common.refresh`)]})]})]}),(0,k.jsx)(`div`,{className:`flex gap-1 mb-3`,children:[[`all`,`${e(`connectors.all`)} (${X.length})`],[`lsp`,`LSP (${X.filter(e=>e.kind===`lsp`).length})`],[`mcp`,`MCP (${X.filter(e=>e.kind===`mcp`).length})`]].map(([e,t])=>(0,k.jsx)(`button`,{onClick:()=>xe(e),className:`px-3 py-1.5 rounded-lg text-sm transition-colors ${be===e?`bg-accent-blue text-accent-fg`:`bg-dark-surface border border-dark-border hover:bg-dark-hover`}`,children:t},e))}),(0,k.jsx)(`div`,{className:`flex gap-3 mb-3`,children:(0,k.jsxs)(`div`,{className:`flex-1 relative`,children:[(0,k.jsx)(c,{size:16,className:`absolute start-3 top-1/2 -translate-y-1/2 text-dark-muted`}),(0,k.jsx)(`input`,{type:`text`,value:N,onChange:e=>ve(e.target.value),placeholder:e(`connectors.searchPlaceholder`),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,k.jsxs)(`div`,{className:`flex gap-1 mb-4 flex-wrap`,children:[(0,k.jsxs)(`button`,{onClick:()=>ye(null),className:`px-3 py-1.5 rounded-lg text-sm transition-colors ${P?`bg-dark-surface border border-dark-border hover:bg-dark-hover`:`bg-accent-blue text-accent-fg`}`,children:[e(`connectors.all`),` `,(0,k.jsxs)(`span`,{className:`opacity-70 text-xs`,children:[`(`,Q.length,`)`]})]}),ut.map(e=>{let t=Q.filter(t=>t.category===e).length;return(0,k.jsxs)(`button`,{onClick:()=>ye(P===e?null:e),className:`px-3 py-1.5 rounded-lg text-sm transition-colors ${P===e?`bg-accent-blue text-accent-fg`:`bg-dark-surface border border-dark-border hover:bg-dark-hover`}`,children:[ue[e]??e,` `,(0,k.jsxs)(`span`,{className:`opacity-70 text-xs`,children:[`(`,t,`)`]})]},e)})]}),(0,k.jsxs)(`div`,{className:`mb-4 px-3 py-2 rounded-lg bg-accent-blue/10 border border-accent-blue/20 text-xs text-dark-muted space-y-1`,children:[(0,k.jsxs)(`div`,{className:`flex items-center gap-x-2 gap-y-1 flex-wrap`,children:[(0,k.jsx)(`span`,{children:e(`connectors.scopeHint`)}),(0,k.jsxs)(`button`,{type:`button`,onClick:Ue,className:`inline-flex items-center gap-1 text-accent-blue hover:underline`,children:[e(`connectors.scopeHintToolsLink`),(0,k.jsx)(l,{size:11})]})]}),(0,k.jsx)(`div`,{children:e(`connectors.builtinCardHint`)})]}),(0,k.jsxs)(`div`,{className:`mb-4 p-4 bg-dark-surface border border-dark-border rounded-lg space-y-3 max-md:p-3`,children:[it?(0,k.jsx)(`div`,{className:rt||J?`pb-3 border-b border-dark-border`:``,children:$(it,!0)}):null,rt?(0,k.jsx)(`div`,{className:J?`pb-3 border-b border-dark-border`:``,children:$(rt,!0)}):null,J?(0,k.jsxs)(`div`,{children:[(0,k.jsxs)(`div`,{className:`flex items-start justify-between gap-3 max-md:flex-wrap`,children:[(0,k.jsxs)(`div`,{className:`min-w-0 flex items-start gap-2`,children:[(0,k.jsx)(o,{size:16,className:`mt-0.5 shrink-0 ${Z?`text-accent-yellow`:`text-accent-green`}`}),(0,k.jsxs)(`div`,{className:`min-w-0`,children:[(0,k.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,k.jsx)(`span`,{className:`text-sm text-dark-text`,children:e(`connectors.emailTitle`)}),nt(J),Z?(0,k.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-badge px-1.5 py-0.5 rounded bg-accent-yellow/15 text-accent-yellow`,children:[(0,k.jsx)(f,{size:9}),e(`connectors.emailNeedsSetup`)]}):null]}),(0,k.jsx)(`div`,{className:`text-xs text-dark-muted mt-0.5`,children:e(`connectors.emailDesc`)})]})]}),(0,k.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[(0,k.jsxs)(`button`,{type:`button`,onClick:()=>F(ct?null:J.id),className:`inline-flex items-center gap-1 px-2.5 py-1 rounded-lg text-meta border transition-colors ${Z?`bg-accent-yellow/15 border-accent-yellow/40 text-accent-yellow hover:bg-accent-yellow/25`:`bg-dark-bg border-dark-border text-dark-muted hover:bg-dark-hover`}`,children:[(0,k.jsx)(v,{size:11}),e(Z?`connectors.emailConfigure`:`connectors.emailEditCredentials`)]}),(0,k.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":J.enabled,disabled:!!A[J.id],onClick:()=>Ye(J),className:`relative w-9 h-5 rounded-full transition-colors shrink-0 disabled:opacity-50 ${J.enabled?`bg-accent-green`:`bg-dark-border`}`,children:A[J.id]?(0,k.jsx)(g,{size:12,className:`absolute start-[7px] top-[3px] animate-spin text-accent-fg`}):(0,k.jsx)(`span`,{className:`absolute top-0.5 left-0 w-4 h-4 rounded-full bg-white shadow transition-transform ${J.enabled?`translate-x-[18px]`:`translate-x-0.5`}`})})]})]}),Z?(0,k.jsxs)(`div`,{className:`mt-2 flex items-start gap-2 rounded-lg bg-accent-yellow/10 border border-accent-yellow/30 px-3 py-2`,children:[(0,k.jsx)(f,{size:13,className:`text-accent-yellow mt-0.5 shrink-0`}),(0,k.jsxs)(`div`,{className:`text-xs text-accent-yellow space-y-0.5`,children:[(0,k.jsx)(`div`,{children:e(`connectors.emailNeedsSetupHint`,{keys:st.join(`, `)})}),(0,k.jsx)(`div`,{className:`text-dark-muted`,children:e(`connectors.emailPriorityHint`)})]})]}):null,ct?dt(J):null,J.supportsAccounts?(0,k.jsx)(le,{connector:J,onRefresh:()=>void G(!0)}):null]}):null,Y.length?(0,k.jsxs)(`div`,{className:`space-y-2 ${J?`pt-3 border-t border-dark-border`:``}`,children:[(0,k.jsxs)(`div`,{className:`flex items-center gap-1.5 text-meta text-dark-muted`,children:[(0,k.jsx)(r,{size:11}),e(`connectors.featuredSetup`)]}),Y.map(e=>(0,k.jsx)(`div`,{children:$(e,!0)},e.id))]}):null,(0,k.jsxs)(`div`,{className:`flex items-center justify-between gap-3 ${J?`pt-3 border-t border-dark-border`:``}`,children:[(0,k.jsxs)(`div`,{className:`min-w-0 flex items-start gap-2`,children:[(0,k.jsx)(n,{size:16,className:`text-accent-blue mt-0.5 shrink-0`}),(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`div`,{className:`text-sm text-dark-text`,children:`Computer Use`}),(0,k.jsx)(`div`,{className:`text-xs text-dark-muted mt-0.5`,children:`GUI 截屏 + 鼠标键盘操控(Windows)。每次调用需审批;需要视觉模型读屏。`})]})]}),(0,k.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":!!R,disabled:Oe,onClick:()=>void ze(),className:`relative w-9 h-5 rounded-full transition-colors shrink-0 disabled:opacity-50 ${R?`bg-accent-blue`:`bg-dark-border`}`,children:Oe?(0,k.jsx)(g,{size:12,className:`absolute start-[7px] top-[3px] animate-spin text-accent-fg`}):(0,k.jsx)(`span`,{className:`absolute top-0.5 left-0 w-4 h-4 rounded-full bg-white shadow transition-transform ${R?`translate-x-[18px]`:`translate-x-0.5`}`})})]}),ke?(0,k.jsx)(`div`,{className:`text-xs text-accent-red bg-accent-red/10 border border-accent-red/30 rounded-lg px-3 py-2`,children:ke}):null,(0,k.jsxs)(`div`,{className:`pt-3 border-t border-dark-border space-y-2`,children:[(0,k.jsxs)(`div`,{className:`flex items-center justify-between gap-3 max-md:flex-wrap`,children:[(0,k.jsxs)(`div`,{className:`min-w-0 flex items-start gap-2`,children:[(0,k.jsx)(a,{size:16,className:`text-accent-blue mt-0.5 shrink-0`}),(0,k.jsxs)(`div`,{className:`min-w-0`,children:[(0,k.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,k.jsx)(`span`,{className:`text-sm text-dark-text`,children:e(`connectors.phoneTitle`)}),W?$e(W):null]}),(0,k.jsx)(`div`,{className:`text-xs text-dark-muted mt-0.5`,children:e(`connectors.phoneDesc`)})]})]}),(0,k.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[(0,k.jsxs)(`button`,{type:`button`,onClick:()=>void He(),disabled:Pe,className:`inline-flex items-center gap-1 px-2.5 py-1 rounded-lg text-meta bg-dark-bg border border-dark-border text-dark-muted hover:bg-dark-hover transition-colors disabled:opacity-50`,children:[Pe?(0,k.jsx)(g,{size:11,className:`animate-spin`}):(0,k.jsx)(c,{size:11}),e(Pe?`connectors.phoneChecking`:W?`connectors.phoneRecheck`:`connectors.phoneCheck`)]}),(0,k.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":!!V,disabled:je,onClick:()=>void Ve(),className:`relative w-9 h-5 rounded-full transition-colors shrink-0 disabled:opacity-50 ${V?`bg-accent-blue`:`bg-dark-border`}`,children:je?(0,k.jsx)(g,{size:12,className:`absolute start-[7px] top-[3px] animate-spin text-accent-fg`}):(0,k.jsx)(`span`,{className:`absolute top-0.5 left-0 w-4 h-4 rounded-full bg-white shadow transition-transform ${V?`translate-x-[18px]`:`translate-x-0.5`}`})})]})]}),W?(0,k.jsx)(`div`,{className:`rounded-lg border px-3 py-2 text-xs ${W.stage===`ready`?`bg-accent-green/10 border-accent-green/30 text-accent-green`:W.stage===`adb-missing`||W.stage===`adb-error`?`bg-accent-red/10 border-accent-red/30 text-accent-red`:`bg-accent-yellow/10 border-accent-yellow/30 text-accent-yellow`}`,children:(0,k.jsxs)(`div`,{className:`flex items-start gap-2`,children:[W.stage===`ready`?(0,k.jsx)(d,{size:13,className:`mt-0.5 shrink-0`}):(0,k.jsx)(f,{size:13,className:`mt-0.5 shrink-0`}),(0,k.jsxs)(`div`,{className:`min-w-0 space-y-1`,children:[(0,k.jsx)(`div`,{children:tt(W)}),et(W.stage)>0?(0,k.jsx)(`ol`,{className:`space-y-0.5`,children:[1,2,3,4].map(t=>{let n=et(W.stage),r=t===1?{env:W.envKeys.binary}:t===4?{env:W.envKeys.serial}:{};return(0,k.jsxs)(`li`,{className:`flex items-start gap-1.5 ${t===n?`text-accent-yellow`:`text-dark-muted`}`,children:[(0,k.jsx)(`span`,{className:`shrink-0 tabular-nums`,children:t===n?`▶`:t+`.`}),(0,k.jsx)(`span`,{children:e(`connectors.phoneStep${t}`,r)})]},t)})}):null,W.devices.length>0?(0,k.jsx)(`div`,{className:`text-dark-muted`,children:e(`connectors.phoneDevices`,{list:W.devices.map(e=>`${e.serial} [${e.state}]${e.model?` · ${e.model}`:``}`).join(` | `)})}):null,W.stage!==`ready`&&W.reason?(0,k.jsx)(`div`,{className:`text-dark-muted break-words opacity-80`,children:W.reason}):null]})]})}):(0,k.jsx)(`div`,{className:`text-xs text-dark-muted ps-6`,children:e(`connectors.phoneConnectHint`)}),Me?(0,k.jsx)(`div`,{className:`text-xs text-accent-red bg-accent-red/10 border border-accent-red/30 rounded-lg px-3 py-2`,children:Me}):null]})]}),Te?(0,k.jsxs)(`div`,{className:`mb-4 p-4 bg-dark-surface border border-dark-border rounded-lg max-md:p-3`,children:[(0,k.jsxs)(`div`,{className:`flex items-center justify-between mb-3 max-md:flex-wrap max-md:gap-2`,children:[(0,k.jsxs)(`div`,{className:`flex items-center gap-2 text-sm font-medium`,children:[(0,k.jsx)(_,{size:15,className:`text-accent-purple`}),e(`connectors.customTitle`)]}),(0,k.jsx)(`div`,{className:`flex gap-1`,children:[[`stdio`,`🖥️ `+e(`connectors.customLocal`)],[`http`,`🌐 HTTP`],[`sse`,`📡 SSE`]].map(([e,t])=>(0,k.jsx)(`button`,{onClick:()=>L(t=>({...t,transport:e})),className:`px-3 py-1.5 rounded-lg text-xs transition-colors ${I.transport===e?`bg-accent-blue text-accent-fg`:`bg-dark-bg border border-dark-border hover:bg-dark-hover`}`,children:t},e))})]}),(0,k.jsxs)(`div`,{className:`grid grid-cols-2 gap-3 max-md:grid-cols-1`,children:[(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`label`,{className:`block text-meta text-dark-muted mb-1`,children:e(`connectors.customName`)}),(0,k.jsx)(`input`,{value:I.name,onChange:e=>L(t=>({...t,name:e.target.value})),placeholder:`my-server`,className:`w-full px-3 py-1.5 bg-dark-bg border border-dark-border rounded-lg text-sm text-dark-text placeholder-dark-muted focus:border-accent-blue focus:outline-none`})]}),I.transport===`stdio`?(0,k.jsxs)(k.Fragment,{children:[(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`label`,{className:`block text-meta text-dark-muted mb-1`,children:e(`connectors.customCommand`)}),(0,k.jsx)(`input`,{value:I.command,onChange:e=>L(t=>({...t,command:e.target.value})),placeholder:`npx -y @some/mcp-server`,className:`w-full px-3 py-1.5 bg-dark-bg border border-dark-border rounded-lg text-sm text-dark-text placeholder-dark-muted focus:border-accent-blue focus:outline-none`})]}),(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`label`,{className:`block text-meta text-dark-muted mb-1`,children:e(`connectors.customArgs`)}),(0,k.jsx)(`input`,{value:I.args,onChange:e=>L(t=>({...t,args:e.target.value})),placeholder:`--arg value`,className:`w-full px-3 py-1.5 bg-dark-bg border border-dark-border rounded-lg text-sm text-dark-text placeholder-dark-muted focus:border-accent-blue focus:outline-none`})]})]}):(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`label`,{className:`block text-meta text-dark-muted mb-1`,children:e(`connectors.customUrl`)}),(0,k.jsx)(`input`,{value:I.url,onChange:e=>L(t=>({...t,url:e.target.value})),placeholder:`https://mcp.example.com/mcp`,className:`w-full px-3 py-1.5 bg-dark-bg border border-dark-border rounded-lg text-sm text-dark-text placeholder-dark-muted focus:border-accent-blue focus:outline-none`})]}),I.transport===`stdio`?(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`label`,{className:`block text-meta text-dark-muted mb-1`,children:e(`connectors.customEnv`)}),(0,k.jsx)(`input`,{value:I.env,onChange:e=>L(t=>({...t,env:e.target.value})),placeholder:`KEY=value, KEY2=value2`,className:`w-full px-3 py-1.5 bg-dark-bg border border-dark-border rounded-lg text-sm text-dark-text placeholder-dark-muted focus:border-accent-blue focus:outline-none`})]}):(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`label`,{className:`block text-meta text-dark-muted mb-1`,children:e(`connectors.customHeaders`)}),(0,k.jsx)(`input`,{value:I.headers,onChange:e=>L(t=>({...t,headers:e.target.value})),placeholder:`Authorization=Bearer xxx`,className:`w-full px-3 py-1.5 bg-dark-bg border border-dark-border rounded-lg text-sm text-dark-text placeholder-dark-muted focus:border-accent-blue focus:outline-none`})]})]}),(0,k.jsxs)(`div`,{className:`flex gap-2 mt-3`,children:[(0,k.jsx)(x,{variant:`accent`,onClick:()=>void Ke(),loading:!!A.__add,children:e(`connectors.add`)}),(0,k.jsx)(`button`,{onClick:()=>Ee(!1),className:`px-3 py-1.5 bg-dark-surface border border-dark-border rounded-lg text-sm`,children:e(`common.cancel`)})]})]}):null,_e?(0,k.jsx)(`div`,{className:`mb-4 px-3 py-2 bg-accent-red/10 border border-accent-red/30 rounded-lg text-accent-red text-sm`,children:_e}):null,(0,k.jsx)(`div`,{children:lt.length===0?(0,k.jsxs)(`div`,{className:`text-center text-dark-muted text-sm py-10`,children:[(0,k.jsx)(c,{size:24,className:`mx-auto mb-2 opacity-50`}),e(`connectors.noResults`)]}):(0,k.jsx)(`div`,{className:`space-y-2`,children:lt.map(e=>$(e))})})]})}export{j as ConnectorsView};
|