From d4ae7f4eb7dbdf07e79ebbdb743d2ea844e1e7ae Mon Sep 17 00:00:00 2001 From: xmanrui <841206367@qq.com> Date: Thu, 12 Mar 2026 00:36:49 +0800 Subject: [PATCH] fix: restore deployment and cleanup after pr 24 --- .DS_Store | Bin 10244 -> 0 bytes .gitignore | 1 + app/alerts/page.tsx | 66 +++++++++++++++++++-------- lib/.DS_Store | Bin 8196 -> 0 bytes lib/pixel-office/.DS_Store | Bin 8196 -> 0 bytes lib/pixel-office/engine/renderer.ts | 21 ++++++++- next.config.mjs | 4 +- public/.DS_Store | Bin 8196 -> 0 bytes public/assets/.DS_Store | Bin 10244 -> 0 bytes public/assets/pixel-office/.DS_Store | Bin 10244 -> 0 bytes 10 files changed, 71 insertions(+), 21 deletions(-) delete mode 100644 .DS_Store delete mode 100644 lib/.DS_Store delete mode 100644 lib/pixel-office/.DS_Store delete mode 100644 public/.DS_Store delete mode 100644 public/assets/.DS_Store delete mode 100644 public/assets/pixel-office/.DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 5407124010779227e70392fb9ba0f5643164cbc4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10244 zcmeHMYitx%6u#%Sv@^6Lx0FYLS-WKAX#*`SwaCM=Eg)1VbhmU{9(8tSgbCA`x-+|5 z#hRiK6a3*b#vdj=i2hPECMwaOnD_(nm6*o(NQ{X;P>FwxL=%7LxpQZMUBtv6He%)` z_nv#sx#!+FXTLLd?p;C%#B+KJAyGnzgq2fPi_KpYuIKfNLIVj`0@@RIG;KL)c)`Q0*IueteipcR$Vs;Z@GsYcqDIOr4- zp62D;xR%|+xuoM*>0)0??>3FXFq_ro*q&zEM%Fhlbpwa&9WZU(Da4(et-HQ$LMS9z zl80Ht;lu51H#J3D+B?RZqKDV4YHo_QwYHCs%hK%F%C&vNhpZ9XIVK!{;3YtmGKU_z zmub-WU`KB?Q~p|D+W`ZG3FI# zFHxn2Tqo;w`6~=FmUE3h0~av!MmH|w4ryb_z%+jjI# zvbve|iZW;JK;CrCv}FuxZpN^6(>~B&Fm>s~Qq9hL?3S{OANt@EH_FG!ouwVCfLZJO)#jv6+9q%%Ud1$9I2K`m?a77&HO6ZN3f|AkS`jW+3~ z=WwMTjhMPik_P#N8+F~#C+p`gn3qVZXu(W7ZzAgP#}wdapGlH5s|Jc zEP)nS1#PezHoz80LO%>Z3N#o28ypyeakv*I;0PRphv5-;3?7H4;dwX?FTjiN3cLv? z;VpO@-iMFj6ZjOqfOGIY{0Qga7x;q`3UoSEX@p)+m(Znj8EvKOXfNGG`)GnDsX=X8 zp!d*m;Q=k?-TuI%fY77Z3Em=@cflBmR+=hjV zZ){$@W<&fUA_attsJ%QF`~)aT8$SVjV3dKEqfm_~jnQIGUdl$1o&A_O#+byDm{kX( zZ&)N@=CEl2yKFhKJ*-NwkrgW?%u+^uR*AH>$(W0*B4Af^APa&~)~%N@D_P~Fim<;$ zX;c`Im>|cQVH{=}oiCh3c$k#&yM4$;_z8+z|9TGm&Q!oS>(7}KMU_usL z@F0(%KLYo`{qO)hh>(92LH`6i3D3Z@@EijFC3qQ5z^m{Y!u}Mz1Mk8a_yEqrM}7i) z3qQcm@GJaQ2I(DTkmgViAe~QSZOgF_poB}S$SBE?w7+R){wJGeiBI9y8E&27);Wb+ zXLLXAgmW=ZI|4mo_|9|QqEL<^+Kp253 zivU!1C%WUfT=95czB0dSk7B(YD=&Q9grL3&HYI-qAj9t!mty5(gS#ug-xm`9D1WBV;*VOFn9@+4KLOtALz} diff --git a/.gitignore b/.gitignore index 50c716a..5eb7554 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ node_modules *.tsbuildinfo next-env.d.ts .idea +.DS_Store /public/assets/pixel-office/*.mp3 diff --git a/app/alerts/page.tsx b/app/alerts/page.tsx index 7595681..b9d206f 100644 --- a/app/alerts/page.tsx +++ b/app/alerts/page.tsx @@ -26,6 +26,12 @@ interface Agent { } const RULE_DESCRIPTIONS: Record> = { + "zh-TW": { + model_unavailable: "模型不可用 - 當測試模型失敗時觸發", + bot_no_response: "Bot 長時間無回應 - 當機器人超過設定時間未回應時觸發", + message_failure_rate: "訊息失敗率升高 - 當訊息失敗率超過閾值時觸發", + cron连续_failure: "Cron 連續失敗 - 當定時任務連續失敗超過設定次數時觸發", + }, zh: { model_unavailable: "模型不可用 - 当测试模型失败时触发", bot_no_response: "Bot 长时间无响应 - 当机器人超过设定时间未响应时触发", @@ -60,6 +66,28 @@ export default function AlertsPage() { }, [config?.checkInterval]); const ruleDescriptions = RULE_DESCRIPTIONS[locale as keyof typeof RULE_DESCRIPTIONS] || RULE_DESCRIPTIONS.zh; + const isEnglish = locale === "en"; + const isTraditionalChinese = locale === "zh-TW"; + const timeLocale = isEnglish ? "en-US" : isTraditionalChinese ? "zh-TW" : "zh-CN"; + const ui = { + minutes5: isEnglish ? "5 minutes" : isTraditionalChinese ? "5 分鐘" : "5 分钟", + minutes10: isEnglish ? "10 minutes" : isTraditionalChinese ? "10 分鐘" : "10 分钟", + minutes30: isEnglish ? "30 minutes" : isTraditionalChinese ? "30 分鐘" : "30 分钟", + hour1: isEnglish ? "1 hour" : isTraditionalChinese ? "1 小時" : "1 小时", + hours2: isEnglish ? "2 hours" : isTraditionalChinese ? "2 小時" : "2 小时", + hours5: isEnglish ? "5 hours" : isTraditionalChinese ? "5 小時" : "5 小时", + checking: isEnglish ? "⏳ Checking..." : isTraditionalChinese ? "⏳ 檢查中..." : "⏳ 检查中...", + checkNow: isEnglish ? "🔄 Check Now" : isTraditionalChinese ? "🔄 立即檢查" : "🔄 立即检查", + alertsTriggered: isEnglish ? "⚠️ Alerts Triggered" : isTraditionalChinese ? "⚠️ 警報觸發" : "⚠️ 告警触发", + checkingAlerts: isEnglish ? "⏳ Checking alerts..." : isTraditionalChinese ? "⏳ 正在檢查警報..." : "⏳ 正在检查告警...", + timeout: isEnglish ? "Timeout (s):" : isTraditionalChinese ? "超時 (秒):" : "超时 (秒):", + failureRate: isEnglish ? "Failure rate (%):" : isTraditionalChinese ? "失敗率 (%):" : "失败率 (%):", + maxFailures: isEnglish ? "Max failures:" : isTraditionalChinese ? "最大失敗數:" : "最大失败数:", + threshold: isEnglish ? "Threshold:" : isTraditionalChinese ? "閾值:" : "阈值:", + monitor: isEnglish ? "Monitor:" : isTraditionalChinese ? "檢測機器人:" : "检测机器人:", + emptyMeansAll: isEnglish ? "(empty = all)" : isTraditionalChinese ? "(不選則檢測所有)" : "(不选则检测所有)", + saved: isEnglish ? "Saved" : isTraditionalChinese ? "已保存" : "已保存", + }; // 加载配置 useEffect(() => { @@ -86,7 +114,7 @@ export default function AlertsPage() { .then((data) => { if (data.results && data.results.length > 0) { setCheckResults(data.results); - setLastCheckTime(new Date().toLocaleTimeString(locale === "zh" ? "zh-CN" : "en-US")); + setLastCheckTime(new Date().toLocaleTimeString(timeLocale)); } }) .catch(console.error) @@ -105,7 +133,7 @@ export default function AlertsPage() { .then((data) => { if (data.results && data.results.length > 0) { setCheckResults(data.results); - setLastCheckTime(new Date().toLocaleTimeString(locale === "zh" ? "zh-CN" : "en-US")); + setLastCheckTime(new Date().toLocaleTimeString(timeLocale)); } }) .catch(console.error) @@ -241,12 +269,12 @@ export default function AlertsPage() { onChange={(e) => handleIntervalChange(Number(e.target.value))} className="px-2 py-1 text-sm rounded border border-[var(--border)] bg-[var(--card)] text-[var(--text)]" > - - - - - - + + + + + + )} @@ -257,7 +285,7 @@ export default function AlertsPage() { disabled={checking} className="px-4 py-2 rounded-lg bg-[var(--card)] border border-[var(--border)] text-sm hover:border-[var(--accent)] transition disabled:opacity-50" > - {checking ? (locale === "zh" ? "⏳ 检查中..." : "⏳ Checking...") : (locale === "zh" ? "🔄 立即检查" : "🔄 Check Now")} + {checking ? ui.checking : ui.checkNow} )}

- {locale === "zh" ? "⚠️ 告警触发" : "⚠️ Alerts Triggered"} ({checkResults.length}) + {ui.alertsTriggered} ({checkResults.length})

{lastCheckTime && {lastCheckTime}}
@@ -288,7 +316,7 @@ export default function AlertsPage() { {config.enabled && checking && (
- {locale === "zh" ? "⏳ 正在检查告警..." : "⏳ Checking alerts..."} + {ui.checkingAlerts}
)} @@ -375,10 +403,10 @@ export default function AlertsPage() { {rule.threshold !== undefined && rule.id !== "bot_no_response" && (
- {rule.id === "bot_no_response" ? (locale === "zh" ? "超时 (秒):" : "Timeout (s):") : - rule.id === "message_failure_rate" ? (locale === "zh" ? "失败率 (%):" : "Failure rate (%):") : - rule.id === "cron连续_failure" ? (locale === "zh" ? "最大失败数:" : "Max failures:") : - (locale === "zh" ? "阈值:" : "Threshold:")} + {rule.id === "bot_no_response" ? ui.timeout : + rule.id === "message_failure_rate" ? ui.failureRate : + rule.id === "cron连续_failure" ? ui.maxFailures : + ui.threshold} - {locale === "zh" ? "超时 (秒):" : "Timeout (s):"} + {ui.timeout}
- {locale === "zh" ? "检测机器人:" : "Monitor:"} + {ui.monitor} {agents.map((agent) => { const selected = rule.targetAgents?.includes(agent.id) ?? true; @@ -454,7 +482,7 @@ export default function AlertsPage() { ); })} - {locale === "zh" ? "(不选则检测所有)" : "(empty = all)"} + {ui.emptyMeansAll}
@@ -467,7 +495,7 @@ export default function AlertsPage() { {/* 保存提示 */} {saved && (
- ✓ {locale === "zh" ? "已保存" : "Saved"} + ✓ {ui.saved}
)} diff --git a/lib/.DS_Store b/lib/.DS_Store deleted file mode 100644 index 82c21c2aab672a5853d52248c1b982dc88a4dc2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 zcmeHMTWl0n7(V}Lp)<52r<6;9S-WKAYK4}TTIAxgZ9%9|=x*t@TVEIozs7p5CVz3-bhF-Aw`wQ;rnSo)C-NL>zJm|IA6+ zAtQ`H7=bVXVFbbmgb}zFB7k=`Z_*U^zL17v7=bVX|H}yQ^C60z(|ABf1@(^(9Q+ah zDK7#1hR;|B_%_ji#sfMksBemEis}IZQwT~75auY4a&@HffQ||(%n1l{0>RD@R4Cx@ zj&@OBoj_dBa10|5MqqLTIDD$e5Z3F%#28nP@`zJRdYYGa6IyN`pQRkf%9Nh9%wE$d4zRgxj_qltZRC6dQ#Vj$f3Iol zPBG!+ZQb>4lR_ZLl03j_j~#1izPUcy*wQ*uA3e5yZ9{#uxv6DjM3&~o)@ z>ZaCBTej}l)jh_l=hP_5`~|%Q(={`e(Wkjt!`4mva8J?Hy(9e?cH1)#nMO{QtD!z+ zYlFtv!bOW~)QDPFvJ$#iZ6y|y()o;eXWsPg8mpvC<_b=;(xUcQTE?(srVF$6$_BN! zAYv)APQl!)%vaM{XK)Z*ab>|vsO{=OzU}Rr>vatoHh-n_LbeTM{q7MhXLJ=YFM~Jg zM6Uk{BcB^}=%(jzp&yNyx<``w_<~z>-O$Hs7A;t!r|<<_gzw=;xCFnzACyp_v#3fV^m@9SuAnPv6WvI= z=pNcllQcyQYSSXUhmHsjXbFi21CIhiPvFCpCk-MoIBDqFDUcYsZF|*@PG#qR35j3M z=GdD%Z~lVXCChGXShs$2;!2K+q%P(0U(w-1VjPfsNcgETA)R?%su86wT0-end1*o#{}U0wp>O~I diff --git a/lib/pixel-office/.DS_Store b/lib/pixel-office/.DS_Store deleted file mode 100644 index 8e413701eadc097f7d54768eaa230d4bc4d8a189..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 zcmeHMYitx%6u#%Sv@?{E+m=UxS-WKAX#*`Sq{zc%TR^B#=x*t@JnHPuSSCzo>dx$L z6>Ew{Oz?-#7=M`fAo@$un5aa9V&adAuf#OQM`BF;flB;iB%1g`&z(C9cCo*R2IAag z?z#7zd+wcc_WNdfri2hk{j$|w+ zbH(aV5oRFFK$w9r17QZj3|tEtz;`xp(lqaVVGa8*17QaKml@#ChbUfL#sfJnr2pu^ z&MyH_@)E#rIL11__lX8F9>{SaeOKI5R1XliLQrCWa7TNTFGm><HOzd0TgV z-=r`|vLp|(hNDMY+MAoAYns=NHARoEUxVYe)^%fJvNSigdPC3P5o_3XPKYodcoYz& zEUbsiW3t>rhxjH@ktxOWO(`aMX3Z?+1~uJ3Yhb@}Fl}ZXJ89ly46@lShPDHzdvZnr zL+Z;qR({xa2U%@av$AtpoP&?H_{Mg$y*XtfJY<^1Za##qo0kKx>u6=`G#9`-OwlN7cN?mOsVL>OuJwr_VLFQ6kwlAk~F6bfDkJwVrO$_ z{jr~GITmjZED~uX%gHSyLH3a&WQ-gqPm`16P4YfDM?NB7lkdp|a*_N2RZtBQ)BuA8 zuo#v>3#@@QSPPqBJEWi&`XCJ&41*00jKUb)2jg%IPQWAZC_D~Nz%%dyoP-zQC3qFy zg46IeyaOM=C-5nJ24BK?_yK-`3-BxaNeKlyld3dAZ=}oUa=L=H(v7s6?xj66NmJCI zHZ9V7>6nOsme_YFh$s;BI1Z*fQILJX7eRVv8umqQ+c9frm$K`6V&7M@Ip5~Yoj1Q> z@zR@{*RJ23xP(gqG4nDf1xI_4KgOuUsm!W_ z)i*7XkUwljFkP_{r(LW{Oe3pSOUPA5{izaZZIh9atRk4MYR4&viL!B%jND|ElPZG$ zR;5v4M3#eXwr<01CfL6K{BOy5@-w*zfWWVZ28citf_)Q$eHSEsz^7pVvY>+jLtsJ< zT=1ZP&_4$E!vpXjJcPi1459xdJO$6fbMQRE|7CauPQh#NI)eWUybJHa1bhhR;A5W# z-@%XY3;YJZmjQcs8L&CvrvST<%-NP>523z9hN&*s_^d+QUjwiIw@&~4{~C`XyuC03 zVFs=y15nwS>`dSe(>=v_tsTYd4!n5d>&AujU9j`Zag=^Jj`Gq!3~?OArQ9bT$Z;W2 agY7^65D@%rf7O3|hwuOJ{eK<5|NjCbc8Qz- diff --git a/lib/pixel-office/engine/renderer.ts b/lib/pixel-office/engine/renderer.ts index 5c599a6..11d6893 100644 --- a/lib/pixel-office/engine/renderer.ts +++ b/lib/pixel-office/engine/renderer.ts @@ -523,7 +523,24 @@ export function renderScene( const now = Date.now() // Blink effect for working state: use time-based alpha const labelAlpha = isWorking ? 0.7 + 0.3 * Math.sin(now / 300) : 1.0 - const labelColor = isWorking ? `rgba(34,197,94,${labelAlpha})` : '#FFD700' + let labelColor = ch.isSubagent + ? (isWorking ? `rgba(220,38,38,${labelAlpha})` : '#991B1B') + : (isWorking ? `rgba(34,197,94,${labelAlpha})` : '#FFD700') + if (ch.systemRoleType === 'gateway_sre') { + const state = ch.systemStatus ?? 'unknown' + if (state === 'healthy') { + const alpha = 0.65 + 0.3 * ((Math.sin(now / 760) + 1) / 2) + labelColor = `rgba(34,197,94,${alpha})` + } else if (state === 'degraded') { + const alpha = 0.45 + 0.55 * ((Math.sin(now / 220) + 1) / 2) + labelColor = `rgba(250,204,21,${alpha})` + } else if (state === 'down') { + const alpha = 0.28 + 0.72 * ((Math.sin(now / 110) + 1) / 2) + labelColor = `rgba(153,27,27,${alpha})` + } else { + labelColor = '#9CA3AF' + } + } drawables.push({ zY: charZY + 0.1, draw: (c) => { @@ -552,6 +569,8 @@ export function renderScene( c.closePath() c.fillStyle = 'rgba(0,0,0,0.55)' c.fill() + c.fillStyle = 'rgba(0,0,0,0.9)' + c.fillText(ch.label, labelX, labelY + 1) c.fillStyle = labelColor c.fillText(ch.label, labelX, labelY) c.restore() diff --git a/next.config.mjs b/next.config.mjs index f26ac37..2937c03 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -1,3 +1,5 @@ /** @type {import('next').NextConfig} */ -const nextConfig = {}; +const nextConfig = { + output: 'standalone', +}; export default nextConfig; diff --git a/public/.DS_Store b/public/.DS_Store deleted file mode 100644 index 3b840501c17adc4abcb25c45e6816c514f418e60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 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 diff --git a/public/assets/pixel-office/.DS_Store b/public/assets/pixel-office/.DS_Store deleted file mode 100644 index 252ce1ae93f12fe663042896d4e99beeddf1a8c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10244 zcmeHMU2Ggz6+UN@CNqhLjDO-d?YQ1(X_^$*u@g6SXp?T%N!`Rvoq9L%+WA>#cP948 zvop)g?Aj(ZIIY@>^3XyN;sL2Z1uy+oC7=Qoio`=Ge-bi?9|@3n2(&^%RV$EMQO>=0 z)>*G@i98gQG9%4B_nv#sxpU8)@65e-007e!vkxEv05aW-YE4wEa%v}>QDy}Mt(e?R7U#e(A%sGrHWber$- zi)w4=6lQ{Qr1Ns2?ASrr+xu&j)~&y8!$x_dyjeb%net{bp%GSswBes&t*qxcg<9Px zoVKl*yw*18xuIdZmd_Pz(;|_xW43F0Gik5lngQ3%hz?nimAuw*@#5|KZ|_d@_4m(r zCoUe?+uNPke_&vKUXiyZ_uMg>pLR;F_ZWYAz$lG?D%wls=hm8=U93iP!z;D9{ZVVK z%}&|0xk>%V7OlCZwXJ1qOMCma_Kxk>-=OO^=C#&>QJkLi*>ewij_0SHigjkvx6Mr1 zDBA91F0^LDjQuGqueCIYj#}pVtE}u?nPl3oGPt=R-?Ch8Z{)&-zzTD9_3;T~HoIhf zOHlMZ$2sW*c4&L<_}PG7z_HLO9dj>uG90!D-76h~~8ho!q$L`-VGdrRUB$ zM!|AM+_V>lUWrLEYemmJ>08WF&Zat>R`RaD3;!ll!?jAUsA!NB6@X-FKvdR=z-fF<6M^T46dp7}UehXpHEPiS zcGWsU!vu9vkxWIeLV12mN8+a4J^Ka@9=`kdeWQykmQ}TV+gQ~O?1E#B8$r=>O$yjk zGqxE{O%VFr(7s?>zM?c^ch)sZ)*=OctKO-1)wG1{Rb5$2%DGCx{$#}t=N4O=TeKZ| zQax+ZW1a9!X3dnfZz;TIr=HZ$u%1ERqSBOQ&b~$OR( zes#ZoiU+8onL_P=dWSw%6>+U-!-9E8ZP#-}uT-L`1d8CL^&|RuHtfAd5RQ~Bmp#&D z(KkeW6Ty_>TO%`+o}wojCN6)&#AixJO*`~hC-+8Dzh9QenZd)RX_ zv)!sq>5z~nvZD4&SzaanYmr$81oAcEAc71np1NQcd>qnn8m3_$9)T~z(}aW{!fWso z_#ONi-hj8^9YVxLlyNg^xE*)k&De)~u^(^4LpX$4!p9iq(7+P9=;18R6HXTJ5SWg2A)+ z96paP;!6aASMdAz1H6ns#@Fzt91efNzv7$t5Bz6CfZx{;;Oz6WYJgWWzUz4IB=s|y z7Ptp&$kR&9qcTgS&)aDjf)mg~AHXu~TfS<;{iIjFYHK1%w$8J;jb7NhhTgv#^tO`q zIr`L=X`SfNA07`T`D&51ZCX9v3N!q9rXg7V1Z>@i6LssxYq0boSxsKUjN>&XUzh%$ ztue15KpIlQmQ?}SLtwO^0OjRSWXWI|6kAE#hFOwz2*3uIP^G#{@U9TJt+i9bGAp|w zL-J*k_v?~Nnpz(H1n!}=d4`fzmZys%txbBNk478f{S_L`q`oQAF0C~pOCi$9x)h?& z{0w?#hubex|K!SIZS&Xo|G!c(=ENR|J@BFN0IolhIg+O7 z)J{SgXU5Lj6Lf!qZgw%b1wpwA75q4!C_j#;20M=5MK_a;4j6bn74a4X