feat(desktop): add Tauri updater (GitHub Releases), updater UI button, hide PowerShell windows; fix Windows inventory arrays and activation; improve metrics parsing; branding rename to Raven across app; avoid localhost fallback in auth-server; inject APP_URL/AUTH_URL in stack

This commit is contained in:
Esdras Renan 2025-10-10 20:39:39 -03:00
parent eb5f39100f
commit 418599ef62
18 changed files with 127 additions and 34 deletions

View file

@ -1354,8 +1354,27 @@ function DetailLine({ label, value, classNameValue }: DetailLineProps) {
function MetricsGrid({ metrics }: { metrics: MachineMetrics }) {
const data = (metrics ?? {}) as Record<string, unknown>
const cpu = Number(data.cpuUsage ?? data.cpu ?? data.cpu_percent ?? NaN)
const memory = Number(data.memoryBytes ?? data.memory ?? data.memory_used ?? NaN)
// Compat: aceitar chaves do agente desktop (cpuUsagePercent, memoryUsedBytes, memoryTotalBytes)
const cpu = (() => {
const v = Number(
data.cpuUsage ?? data.cpu ?? data.cpu_percent ?? data.cpuUsagePercent ?? NaN
)
return v
})()
const memory = (() => {
// valor absoluto em bytes, se disponível
const memBytes = Number(
data.memoryBytes ?? data.memory ?? data.memory_used ?? data.memoryUsedBytes ?? NaN
)
if (Number.isFinite(memBytes)) return memBytes
// tentar derivar a partir de percentuais do agente
const usedPct = Number(data.memoryUsedPercent ?? NaN)
const totalBytes = Number(data.memoryTotalBytes ?? NaN)
if (Number.isFinite(usedPct) && Number.isFinite(totalBytes)) {
return Math.max(0, Math.min(1, usedPct > 1 ? usedPct / 100 : usedPct)) * totalBytes
}
return NaN
})()
const disk = Number(data.diskUsage ?? data.disk ?? NaN)
return (

View file

@ -164,7 +164,7 @@ export function AppSidebar({ ...props }: React.ComponentProps<typeof Sidebar>) {
<Sidebar {...props}>
<SidebarHeader className="gap-3">
<VersionSwitcher
label="Sistema de chamados"
label="Raven"
versions={[...navigation.versions]}
defaultVersion={navigation.versions[0]}
/>

View file

@ -59,7 +59,7 @@ export function PortalShell({ children }: PortalShellProps) {
<span className="text-xs font-semibold uppercase tracking-[0.28em] text-neutral-500">
Portal do cliente
</span>
<span className="text-lg font-semibold text-neutral-900">Sistema de chamados</span>
<span className="text-lg font-semibold text-neutral-900">Raven</span>
</div>
<nav className="flex items-center gap-3 text-sm font-medium">
{navItems.map((item) => {
@ -112,7 +112,7 @@ export function PortalShell({ children }: PortalShellProps) {
</main>
<footer className="border-t border-slate-200 bg-white/70">
<div className="mx-auto flex w-full max-w-6xl items-center justify-between px-6 py-4 text-xs text-neutral-500">
<span>&copy; {new Date().getFullYear()} Sistema de chamados</span>
<span>&copy; {new Date().getFullYear()} Raven</span>
<span>Suporte: suporte@sistema.dev</span>
</div>
</footer>

View file

@ -54,7 +54,7 @@ export function BackgroundPaperShaders({ className }: { className?: string }) {
<div className="relative h-[420px] w-[420px] overflow-hidden rounded-full">
<ShaderVisual />
<div className="pointer-events-none absolute inset-0 flex flex-col items-center justify-center px-10 text-center text-white">
<div className="text-sm uppercase tracking-[0.32em] text-white/50">Sistema de Chamados</div>
<div className="text-sm uppercase tracking-[0.32em] text-white/50">Raven</div>
<h2 className="mt-4 text-xl font-semibold md:text-2xl">Atendimento moderno e colaborativo</h2>
<p className="mt-3 text-sm text-white/70">
Tenha visão unificada de todos os canais, monitore SLAs em tempo real e mantenha os clientes informados