From c326bede0c6d3d5b160c003100e4c5368ae8ed6e Mon Sep 17 00:00:00 2001 From: "Yufeng(Jonathan) Zhang" <56613491+Code-MonkeyZhang@users.noreply.github.com> Date: Fri, 1 May 2026 09:48:21 +0800 Subject: [PATCH 1/2] Mcp o auth (#3) * fix setting view * fix voice api saving * update docs * implement MCP --- README.md | 184 +++++++------- packages/desktop/src/main/index.ts | 80 +----- packages/desktop/src/preload/index.ts | 13 +- packages/desktop/src/renderer/App.tsx | 116 +++++---- .../src/renderer/components/AgentSidebar.tsx | 26 +- .../src/renderer/components/McpListTab.tsx | 168 ++++++++++--- .../{SettingsWindow.tsx => SettingsPage.tsx} | 24 +- .../renderer/components/VoiceConfigPanel.tsx | 13 +- packages/desktop/src/renderer/lib/api.ts | 52 +++- .../src/renderer/stores/configStore.ts | 1 - .../desktop/src/renderer/stores/viewStore.ts | 17 ++ .../desktop/src/renderer/stores/voiceStore.ts | 16 +- .../desktop/src/renderer/types/window.d.ts | 2 +- packages/server/src/index.ts | 12 +- packages/server/src/mcp/config.ts | 2 +- packages/server/src/mcp/connection.ts | 134 ++++++---- packages/server/src/mcp/index.ts | 2 + packages/server/src/mcp/loader.ts | 67 +++-- packages/server/src/mcp/oauth/callback.ts | 79 ++++++ packages/server/src/mcp/oauth/provider.ts | 110 +++++++++ packages/server/src/mcp/oauth/storage.ts | 126 ++++++++++ packages/server/src/mcp/oauth/types.ts | 10 + packages/server/src/mcp/pool.ts | 231 +++++++++++++++++- packages/server/src/mcp/types.ts | 10 +- packages/server/src/server/routers/mcp.ts | 68 +++++- packages/server/src/util/app.ts | 9 + packages/server/src/util/paths.ts | 2 + packages/server/tsconfig.json | 2 +- 28 files changed, 1175 insertions(+), 401 deletions(-) rename packages/desktop/src/renderer/components/{SettingsWindow.tsx => SettingsPage.tsx} (83%) create mode 100644 packages/desktop/src/renderer/stores/viewStore.ts create mode 100644 packages/server/src/mcp/oauth/callback.ts create mode 100644 packages/server/src/mcp/oauth/provider.ts create mode 100644 packages/server/src/mcp/oauth/storage.ts create mode 100644 packages/server/src/mcp/oauth/types.ts create mode 100644 packages/server/src/util/app.ts diff --git a/README.md b/README.md index d8175f5..dd6e3ec 100644 --- a/README.md +++ b/README.md @@ -1,137 +1,151 @@ -# Persona +
{mcp.error}
)} - {mcp.toolCount !== undefined && mcp.toolCount > 0 && ( -- {mcp.toolCount} 个工具可用 -
- )} + {mcp.status === 'connected' && + mcp.toolCount !== undefined && + mcp.toolCount > 0 && ( ++ {mcp.toolCount} 个工具可用 +
+ )}You can close this tab and return to the app.
+`; + +export interface CallbackResult { + port: number; + waitForCode: () => Promise
+
# Persona Agent
**你的本地 AI Agent 工作站**
@@ -7,22 +9,30 @@
创建和管理多个 AI Agent,赋予它们工具、技能和性格,让它们帮你完成任务。
[](LICENSE)
+
+[](https://github.com/Code-MonkeyZhang/persona-agent/releases)
s&t`uMG!1J292Rpq-J2GBd)nmdcQS59Lyfoh< z6N3SOH&{QEqIzm> z&1e4#k$D|+7Oo#JZ5&sy7fp}OrS!$1KU~ZkRZ;cA@dwAH^90tAE$&XW-z4=G_?PYf zraf{jTXB1fk-2%gNZ{7tfd54X(0;tH@pr;{rg9@4KndM&u`42_toX+7?-m@1VwcK? zCo^JsTy`%+ ^UsT z`Uihq9#*+>yxsJ+unwDv5r@6o22%jttRni4 )p%@vQ^K;yemDf)PoPyl% z7lL@w6FCX;7iP^ZkbY=J5;V;5zAqRzBwR6Id7SdW?p@nH>dww~i=4>URo1UuCOi0e zf;}obc9ZglPJ1vPbV1L2A>Ss*z9uDOqe3PHN!&!1Bg_3rJ2e=cno8wG{@^LEujJT* zn8{vV`PDY7DvK1g;4h0HIz#ssdgX)K@W{@wN&DlpLpwy0OM_DIWgfl8^O~PLJ2`2G z0n>md(8kK}81x#$LiVo>NwqR|*{BQQlY)4DY@;}mh5>9)h|#7}`OpM?juMpD+^u5G zxN=VkyQmT0c4syfDgrOU=~nev?*K?4r93RN0s{>E(&Bha+w8-QPJhslOPgp6F#Fl1 zPu)Q0akP81pX9s#nL{{!iQhMC;6vzn+07)0nO&Xgq_=w()S4LSB;xPlR)&*Hm3rk9 zR^ApncG&VncVzkSdfTG8Lzv0Y&iA7j=A+H<>2ky8vB*%pc@rmN=bGcN#GS9hhAW11 zlVKhcSQ?aqT#8)Zl_jFP*KnGFyfs*414k(>uD
F-$%j9H{tB@b^djf)02&!x2n_$@Mo6k5+d z&R`sa0|>hB) ;y8d1dgV5eyN=5yi0Id?G-gK5s8u^ z{)hxO4+?6yyQN}$NXC@tQT~*hC>p?zDNvQU5`_fmNE7uh!Ko?AttEEF6vh5SdrqS7 z<+AQ!jNBVlsl&z^r_xX6&FSJxEvV5!u{`ADJHe;bwH )tDYihOF!xBU7AZlS_W1|RQ1BCWNhn#ULqvnG+b~C)6X|mOj1Z-3^Zv4KL zsW}WKj`j%t^Go8zxbPl^ceQE$1AWhEMXefpt%Lo`*5QOytND*LI~@)m7I2P6I^c>K z$p2InnWfH c)pl=cEfJ^ cC{AgSpXn?EY1{lsl&Fq`{u;s%o8f?R~ z$kh`&)4Xz_R-k(=Y20(H)9$iYT2kE!p$9(HHF7t6A${FNfBj&K!J-UqS-dZbNnBMG zYGLxUTlq&g#^!|D*;^izx1}QrR;H-upSS$@G3OhU)D@TVAe%@iKWFV@Ke*8D>dxYm zY`ihp<*#=*<1i-j%{Rf79RLrJ?(Uq*{Z+UqH0D0EutXD6djUjB; 7!JZ zQ0q>Ycn;yLX(>O*lb~iIw}A8# OcSEel~*b%1UWO7bc`U>!cGgysNXG|~N#NTV eqX{i=BnIEY=I#?0y zB=w_ZPTK$(tiVG=E1MRRs~1xEi#*PRo2~#r@rfGnvqp3IpPRTs*lyHD%*NUpq#W9v zvD(@&YWLo*`Ml^n)YAb|f%Z6i-Ni0$qfWgdSIWKqvEBJPBA0L$vmNM55;V#G5%W3$ z#|6M!Zw{(8Q>ruoeivzpm1Mx;>zePpJ3*tVjL`CLrHAU!THkTCFzVbDTTVk^u zrt*4FMpuq>DpTj`*lZ;aZuBY+I#FuKiHcXVa}B4jSB ^#IyTRB@2XMit z6 nV{Q^E%G91 zdyCc!VPG(=V4{BdX_^Q3@i}Io+zuX&yY`xfO+Y@|+v#;9XMeG+L2_azx85MTwpbLO zJwa-t6BCVojwzKB6&N;tDv)XWwcQQlI&+wyIJi_(E;Vv^uty>^-2ut{l}KD<#7rzk z80tN1Id**ywytk3j|%#1F7nG)qk7!xNnF!m=9bwNO)L?cro|Mg2+oaL#v0|aaF%N0 z@=uqN{huy}V^`eSO=OqIzD1Zz0t1Jm9?ReY8pxjbyV98wuE8lJbF43dRUGLkO8*^# ziHLklP HV(XHd)hFkhzp(yN1V>6ScWJ|OE=>`|*^?ogKF^;&Z+}G}Z70^wXfX=& zAY$}s_bMyNjrcVUM%{%D^Cf8qsWH#b$N*X6 )QUW`&9AOcr&c%u$iEM1yS2XdBm)<8v?(8g>>?I)$-+TaQ zhsYL}{CX*rAh>uL&I~GzLKHIKV8eNDsX~g7ZsWj%+1Ql0-5-N}r!ZBrV3=0b8Q;t_ zue4FTmee@EQo>kb8&8)M^mO(ssT|0Du+2V0*s)IJ9Q({0GrE$$?d{g6c|ab8XJv6? z=TON>mTA0?;mA}4oWxA2)S4w~O{0W5mN_ij(ns7 lcsn?3=uT7EV@Wt_QMU`zd!L=+5<8+Vxq94VaT*^LB==cS$r5=P1f(tzpm z^%wLvdnD>lg;b{hrWD&PVf%`=CN|HmS`?Io`FIZ5a=3v-rqE e6{68od{jUv+- zkr#sHSIJjz607a@YD$nh=6kl(0qOiHXKC4ly2OC-3QvbvErgi9ZMjrGcT Gv!sdDsg~Md#zdXWXOHnr7CgZz zFLZ4#C;`sMP_E!w8Xt+l9;p;lATu5#oAzsl0c8d~Qi7ges%nuNp7Wd26iR(}u(vgp z1*)|lU@wLeySmqrjDp7p7N2-y5&&x-QtVE-reb{H)TGN|2uCHa^O1-0S1I%>PJK?U zM71`dR-5o8Yr)FWwTsgJ(rKIY;TorUc9iy>qDthegNuuwH<8oty#^xHN5^Dm(qY;s z7OAbMZnpA4&j3vSB%Di|UX#yr`szlBzOj!1Nt|jiKR8zV-AaurbW`o5-=(zd4_zgA zn%w7MFw6$dxm|{T3?X7DasvMmV~z6gGR4~M)^shp;r1~#Gh`q+2I5(7&uods(t9`n z YKiQ#XdhDk6^o}P|NDIs2LY3T=Oc+^aC_@hGgs?lL z`Z|l6WhC({geVJ|jNWUhn|+)`Okg+XadC0E7NiX>M78vhPT>C=!rr@SD7yPG3fJN$ z=nHT1lut)5C )Rp2<-tYfAlIhlkqdE9~)Z@VcNQE9F+xUKx9Teqsn`4nl; zeOU93t45dF#t>CgSF!xCSq%DZ4}S>evH=UxC%*_@bIV?@q4y&QY`xWH_uIgVIquUZ zuxd0=Za-}C?zg(nl`9Po^+Mr_4qp_79rZ^UZaP*jsNC*fm-gBHSU_t*eMgS2Rj4a3 z+E_0mYUz&UaPiV>l-4VhMAC|tw~xH9JMv@-+);2$%3)A7jShgkJ9A?9R6TgwXv)J^ zKOY0t%rWPTXhG+qs9!bF#Ez|#b2xZ!zhW{4l(+7eyY$-VrT9e&6lcujdv+@N6}8zC zhM}*BT4YPTH9?)Z*c_E8*txoyKTI(SW>dXUl-80f23O`yL5XG-1Ch0J)kG)*?*lWn z9oKsNQZ8L;j9e_q>={q_uMaTqer1I(lq>0q2R%wEzdgov?^=85Z?}brB$u P3$Qo>F|lt%GEW;D1MeX?$-A2j-k196p-z+;YRnTA(!_aCf& z7$N>{ep#ZW`GSF{$;4!*^n?zX@mR<>#+D@`sylk8y+%MoRbEKK@;e4C>cD4&cap~5 zuCPvZI*zH=+bbPmt_q$RoB-hUF#5Zla(j!;Ri=;R_?6}?4fC8d)1k>{S8eReD`GL> ziDUkg={8-nM$_MT_YZ2rUbDUpBm`(ObU*6?$xj3nK9(O%H zW7wCPo{e${W0;g>^Y^gWbaVT%#M}e{yR1bIT?L8T8$D3c;nr9A25>oQ57I&Z5W_I} zKHqRv2I|1#O1lc4h`BH4`EyW*a%TOywu5-ft&*`j$|f|@|9Z8_j=bTw=qi$oTX%2g zH>ve)h%w?#>D1()CoOuvs>wyVdGxwXUhZ3&AIWtAoxzP$&B5rRNJ=vh-+H}Gb_!3m z`x1-E9anW2^nE`80*k)otX7EUUW8qu4{n#3mptrI3Judl38z6UsT9%&9?R9^7o)Js zqG^@P3*QEJe6_Bwhr&fPhrN 9;m7sn`PWBqxhW`T(