Sync build v0.9.134

Automated sync from private repository.
Commit: 686dc3949fb7d2af8bbb4a7154ab996c42a668f3
This commit is contained in:
GitHub Actions Bot
2026-01-15 08:43:42 +00:00
parent e1bcda3f2f
commit 428f68e428
48 changed files with 41 additions and 41 deletions
+3 -3
View File
@@ -53,7 +53,7 @@ The MeshCore Python ecosystem has three components:
- **TX Delay Recommendations** — Slot-based delay optimization with network role classification (edge/relay/hub/backbone)
- **LBT Insights widgets** — Channel health, collision risk, noise floor, link quality at a glance
- **Time range selector** — View stats from 20 minutes to 7 days
- **Recent packets** — Live feed of incoming traffic
- **Recent packets** — Live feed of incoming traffic with centralized polling (every 3s)
![Dashboard](docs/images/dashboard.png)
@@ -73,7 +73,7 @@ The MeshCore Python ecosystem has three components:
- **3D arc edges** — Topology edges and neighbor lines render as elevated arcs via deck.gl PathLayer (GPU-accelerated)
- **Viterbi HMM path decoding** — Hidden Markov Model resolves prefix collisions using physics-based transition costs and observation evidence
- **Ghost node discovery** — Unknown repeaters detected when no known candidate is geographically plausible; locations estimated from anchor midpoints
- **Deep Analysis** — One-click full topology rebuild from 20K+ packets with Viterbi decoding
- **Deep Analysis** — One-click full topology rebuild from 75K packets with Viterbi decoding
- **Edge confidence** — Line thickness and opacity scale with observation count and certainty
- **Animated edges** — Trace-in effect on toggle, smooth fade-out
- **Filter toggles** — Solo view for hub nodes, direct neighbors, or traffic-based filtering
@@ -361,7 +361,7 @@ Before Viterbi decoding, candidates are scored using four-factor analysis inspir
- **Dual-hop anchoring** — Candidates scored by distance to both previous and next hops (a relay must be within RF range of both neighbors)
- **Score-weighted redistribution** — Appearance counts redistributed proportionally by combined score
The system loads up to 20,000 packets (~7 days of traffic) to build comprehensive topology evidence.
The system maintains up to 75,000 packets in session memory (~2.5 days at 30k/day) for comprehensive topology evidence.
![Prefix Disambiguation](docs/images/disambiguation.png)
+1 -1
View File
@@ -1 +1 @@
0.9.133
0.9.134
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{r as e,b as t,j as o,a4 as s,X as n}from"./vendor-react-CUlQ5-Td.js";import{c as r}from"./recharts-7RsRrQtf.js";const d=e.memo(function({isOpen:d,title:l="Confirm",message:a,confirmLabel:i="Confirm",cancelLabel:c="Cancel",variant:m="default",onConfirm:b,onCancel:x}){if(e.useEffect(()=>{if(!d)return;const e=e=>{"Escape"===e.key&&x()};window.addEventListener("keydown",e);const t=document.body.style.overflow,o=document.body.style.position,s=document.body.style.width,n=document.body.style.top,r=window.scrollY;return document.body.style.overflow="hidden",document.body.style.position="fixed",document.body.style.width="100%",document.body.style.top=`-${r}px`,()=>{window.removeEventListener("keydown",e),document.body.style.overflow=t,document.body.style.position=o,document.body.style.width=s,document.body.style.top=n,window.scrollTo(0,r)}},[d,x]),!d)return null;const u={danger:{icon:"text-accent-danger",button:"bg-accent-danger hover:brightness-110 active:brightness-90"},warning:{icon:"text-accent-secondary",button:"bg-accent-secondary hover:brightness-110 active:brightness-90 text-bg-body"},default:{icon:"text-accent-primary",button:"bg-accent-primary hover:brightness-110 active:brightness-90 text-bg-body"}}[m];return t.createPortal(o.jsx("div",{className:"fixed inset-0 bg-black/40 backdrop-blur-md z-[10010] flex items-end sm:items-center justify-center",onClick:x,role:"dialog","aria-modal":"true","aria-labelledby":"confirm-modal-title",children:o.jsxs("div",{className:r("glass-card-elevated w-full max-w-sm","sm:mx-4 sm:rounded-xl","rounded-t-2xl rounded-b-none sm:rounded-b-xl","pb-safe"),onClick:e=>e.stopPropagation(),children:[o.jsxs("div",{className:"flex items-center justify-between p-4 border-b border-border-subtle",children:[o.jsxs("div",{className:"flex items-center gap-3",children:[o.jsx("div",{className:r("p-2 rounded-lg bg-bg-subtle",u.icon),children:o.jsx(s,{className:"w-5 h-5"})}),o.jsx("h3",{id:"confirm-modal-title",className:"text-base font-semibold text-text-primary",children:l})]}),o.jsx("button",{onClick:x,className:"p-2 rounded-lg text-text-muted hover:text-text-primary hover:bg-bg-subtle transition-colors",children:o.jsx(n,{className:"w-5 h-5"})})]}),o.jsx("div",{className:"p-4",children:o.jsx("p",{className:"text-sm text-text-secondary",children:a})}),o.jsxs("div",{className:"flex gap-3 p-4 pt-0",children:[o.jsx("button",{onClick:x,className:"flex-1 px-4 py-2.5 rounded-lg text-sm font-medium text-text-secondary bg-bg-subtle hover:bg-bg-elevated border border-border-subtle transition-colors",children:c}),o.jsx("button",{onClick:b,className:r("flex-1 px-4 py-2.5 rounded-lg text-sm font-medium text-text-primary transition-colors",u.button),children:i})]})]})}),document.body)});export{d as C};
import{r as e,b as t,j as o,a4 as s,X as n}from"./vendor-react-CWPBVwgk.js";import{c as r}from"./recharts-cqZ_RWsW.js";const d=e.memo(function({isOpen:d,title:l="Confirm",message:a,confirmLabel:i="Confirm",cancelLabel:c="Cancel",variant:m="default",onConfirm:b,onCancel:x}){if(e.useEffect(()=>{if(!d)return;const e=e=>{"Escape"===e.key&&x()};window.addEventListener("keydown",e);const t=document.body.style.overflow,o=document.body.style.position,s=document.body.style.width,n=document.body.style.top,r=window.scrollY;return document.body.style.overflow="hidden",document.body.style.position="fixed",document.body.style.width="100%",document.body.style.top=`-${r}px`,()=>{window.removeEventListener("keydown",e),document.body.style.overflow=t,document.body.style.position=o,document.body.style.width=s,document.body.style.top=n,window.scrollTo(0,r)}},[d,x]),!d)return null;const u={danger:{icon:"text-accent-danger",button:"bg-accent-danger hover:brightness-110 active:brightness-90"},warning:{icon:"text-accent-secondary",button:"bg-accent-secondary hover:brightness-110 active:brightness-90 text-bg-body"},default:{icon:"text-accent-primary",button:"bg-accent-primary hover:brightness-110 active:brightness-90 text-bg-body"}}[m];return t.createPortal(o.jsx("div",{className:"fixed inset-0 bg-black/40 backdrop-blur-md z-[10010] flex items-end sm:items-center justify-center",onClick:x,role:"dialog","aria-modal":"true","aria-labelledby":"confirm-modal-title",children:o.jsxs("div",{className:r("glass-card-elevated w-full max-w-sm","sm:mx-4 sm:rounded-xl","rounded-t-2xl rounded-b-none sm:rounded-b-xl","pb-safe"),onClick:e=>e.stopPropagation(),children:[o.jsxs("div",{className:"flex items-center justify-between p-4 border-b border-border-subtle",children:[o.jsxs("div",{className:"flex items-center gap-3",children:[o.jsx("div",{className:r("p-2 rounded-lg bg-bg-subtle",u.icon),children:o.jsx(s,{className:"w-5 h-5"})}),o.jsx("h3",{id:"confirm-modal-title",className:"text-base font-semibold text-text-primary",children:l})]}),o.jsx("button",{onClick:x,className:"p-2 rounded-lg text-text-muted hover:text-text-primary hover:bg-bg-subtle transition-colors",children:o.jsx(n,{className:"w-5 h-5"})})]}),o.jsx("div",{className:"p-4",children:o.jsx("p",{className:"text-sm text-text-secondary",children:a})}),o.jsxs("div",{className:"flex gap-3 p-4 pt-0",children:[o.jsx("button",{onClick:x,className:"flex-1 px-4 py-2.5 rounded-lg text-sm font-medium text-text-secondary bg-bg-subtle hover:bg-bg-elevated border border-border-subtle transition-colors",children:c}),o.jsx("button",{onClick:b,className:r("flex-1 px-4 py-2.5 rounded-lg text-sm font-medium text-text-primary transition-colors",u.button),children:i})]})]})}),document.body)});export{d as C};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{r as o,j as e}from"./vendor-react-CUlQ5-Td.js";import{c as t}from"./recharts-7RsRrQtf.js";const l={hero:{mobile:12},"hero-tall":{mobile:12},"hero-auto":{mobile:12},panel:{mobile:12,md:6},feature:{mobile:12,md:6,lg:4},standard:{mobile:12,sm:6,lg:4,xl:3},compact:{mobile:6,lg:3},widget:{mobile:6,sm:4,md:3,lg:2},auto:{mobile:12}},a={hero:"bento-row-hero","hero-tall":"bento-row-hero-tall","hero-auto":"bento-row-hero-auto",panel:"bento-row-panel",feature:"bento-row-feature",standard:"bento-row-standard",compact:"bento-row-compact",widget:"bento-row-widget",auto:"bento-row-auto"};function n({template:n,children:r,className:s,gap:c}){const i=l[n],b=a[n],d="none"===c?"gap-0":"sm"===c?"bento-gap-sm":"lg"===c?"bento-gap-lg":"bento-gap",p=o.Children.map(r,t=>o.isValidElement(t)?t.type===m?t:e.jsx(m,{span:i.mobile,sm:i.sm,md:i.md,lg:i.lg,xl:i.xl,children:t}):t);return e.jsx("div",{className:t("bento-row",b,d,s),children:p})}function r(o,e=""){const t=e?`${e}:`:"";return"full"===o?`${t}col-span-full`:"auto"===o?`${t}col-auto`:1.5===o?`${t}bento-col-1-5`:`${t}bento-col-${o}`}function m({children:o,span:l,sm:a,md:n,lg:m,xl:s,className:c}){const i=t("bento-cell",r(l),a&&r(a,"sm"),n&&r(n,"md"),m&&r(m,"lg"),s&&r(s,"xl"),c);return e.jsx("div",{className:i,children:o})}export{m as C,n as R};
import{r as o,j as e}from"./vendor-react-CWPBVwgk.js";import{c as t}from"./recharts-cqZ_RWsW.js";const l={hero:{mobile:12},"hero-tall":{mobile:12},"hero-auto":{mobile:12},panel:{mobile:12,md:6},feature:{mobile:12,md:6,lg:4},standard:{mobile:12,sm:6,lg:4,xl:3},compact:{mobile:6,lg:3},widget:{mobile:6,sm:4,md:3,lg:2},auto:{mobile:12}},a={hero:"bento-row-hero","hero-tall":"bento-row-hero-tall","hero-auto":"bento-row-hero-auto",panel:"bento-row-panel",feature:"bento-row-feature",standard:"bento-row-standard",compact:"bento-row-compact",widget:"bento-row-widget",auto:"bento-row-auto"};function n({template:n,children:r,className:s,gap:c}){const i=l[n],b=a[n],d="none"===c?"gap-0":"sm"===c?"bento-gap-sm":"lg"===c?"bento-gap-lg":"bento-gap",p=o.Children.map(r,t=>o.isValidElement(t)?t.type===m?t:e.jsx(m,{span:i.mobile,sm:i.sm,md:i.md,lg:i.lg,xl:i.xl,children:t}):t);return e.jsx("div",{className:t("bento-row",b,d,s),children:p})}function r(o,e=""){const t=e?`${e}:`:"";return"full"===o?`${t}col-span-full`:"auto"===o?`${t}col-auto`:1.5===o?`${t}bento-col-1-5`:`${t}bento-col-${o}`}function m({children:o,span:l,sm:a,md:n,lg:m,xl:s,className:c}){const i=t("bento-cell",r(l),a&&r(a,"sm"),n&&r(n,"md"),m&&r(m,"lg"),s&&r(s,"xl"),c);return e.jsx("div",{className:i,children:o})}export{m as C,n as R};
+1
View File
@@ -0,0 +1 @@
import{r as e,j as t,a7 as o,W as n}from"./vendor-react-CWPBVwgk.js";import{c as s}from"./recharts-cqZ_RWsW.js";function a({hash:a,copyValue:r,prefixLength:c=8,suffixLength:i=6,full:l=!1,className:p,size:u="md"}){const[d,x]=e.useState(!1),[h,m]=e.useState(!1),w=e.useRef(null),y=r??a,f=e.useCallback(e=>{e.preventDefault(),e.stopPropagation(),w.current&&clearTimeout(w.current),function(e){if("undefined"!=typeof window&&(window.isSecureContext||"https:"===window.location.protocol||"localhost"===window.location.hostname)&&navigator.clipboard&&"function"==typeof navigator.clipboard.writeText)return navigator.clipboard.writeText(e).catch(()=>{}),!0;try{const t=window.scrollX,o=window.scrollY,n=document.createElement("textarea");n.value=e,n.style.position="fixed",n.style.left="-9999px",n.style.top="-9999px",n.style.opacity="0",n.style.pointerEvents="none",n.setAttribute("readonly",""),document.body.appendChild(n),n.focus({preventScroll:!0}),n.select(),n.setSelectionRange(0,e.length);const s=document.execCommand("copy");return document.body.removeChild(n),window.scrollTo(t,o),s}catch(t){return!1}}(y),x(!0),w.current=setTimeout(()=>x(!1),2e3)},[y]),b=l||a.length<=c+i+3?a:`${a.slice(0,c)}${a.slice(-i)}`,g={xs:"text-[9px] px-1 py-0.5 gap-0.5",sm:"text-[10px] px-1.5 py-0.5 gap-1",md:"text-xs px-2 py-1 gap-1.5"}[u];return t.jsxs("button",{type:"button",onClick:f,onMouseEnter:()=>m(!0),onMouseLeave:()=>m(!1),className:s("inline-flex items-center font-mono rounded transition-all duration-200","bg-white/[0.04] hover:bg-white/[0.08]","border border-white/[0.06] hover:border-white/[0.12]","cursor-pointer select-none",g,p),title:`Click to copy: ${y}`,"aria-label":`Copy hash ${y}`,children:[t.jsx("span",{className:s("transition-colors duration-200",d?"text-accent-success":"text-text-secondary"),children:b}),t.jsx("span",{className:s("flex items-center justify-center transition-all duration-200","xs"===u?"w-2.5 h-2.5":"sm"===u?"w-3 h-3":"w-3.5 h-3.5"),children:d?t.jsx(o,{className:s("text-accent-success","xs"===u?"w-2 h-2":"sm"===u?"w-2.5 h-2.5":"w-3 h-3")}):t.jsx(n,{className:s("transition-opacity duration-200",h?"opacity-70":"opacity-40","xs"===u?"w-2 h-2":"sm"===u?"w-2.5 h-2.5":"w-3 h-3")})})]})}export{a as H};
-1
View File
@@ -1 +0,0 @@
import{r as e,j as t,a7 as o,W as n}from"./vendor-react-CUlQ5-Td.js";import{c as s}from"./recharts-7RsRrQtf.js";function a({hash:a,prefixLength:r=8,suffixLength:i=6,full:c=!1,className:l,size:p="md"}){const[u,d]=e.useState(!1),[x,h]=e.useState(!1),m=e.useRef(null),w=e.useCallback(e=>{e.preventDefault(),e.stopPropagation(),m.current&&clearTimeout(m.current),function(e){if("undefined"!=typeof window&&(window.isSecureContext||"https:"===window.location.protocol||"localhost"===window.location.hostname)&&navigator.clipboard&&"function"==typeof navigator.clipboard.writeText)return navigator.clipboard.writeText(e).catch(()=>{}),!0;try{const t=window.scrollX,o=window.scrollY,n=document.createElement("textarea");n.value=e,n.style.position="fixed",n.style.left="-9999px",n.style.top="-9999px",n.style.opacity="0",n.style.pointerEvents="none",n.setAttribute("readonly",""),document.body.appendChild(n),n.focus({preventScroll:!0}),n.select(),n.setSelectionRange(0,e.length);const s=document.execCommand("copy");return document.body.removeChild(n),window.scrollTo(t,o),s}catch(t){return!1}}(a),d(!0),m.current=setTimeout(()=>d(!1),2e3)},[a]),y=c||a.length<=r+i+3?a:`${a.slice(0,r)}${a.slice(-i)}`,f={xs:"text-[9px] px-1 py-0.5 gap-0.5",sm:"text-[10px] px-1.5 py-0.5 gap-1",md:"text-xs px-2 py-1 gap-1.5"}[p];return t.jsxs("button",{type:"button",onClick:w,onMouseEnter:()=>h(!0),onMouseLeave:()=>h(!1),className:s("inline-flex items-center font-mono rounded transition-all duration-200","bg-white/[0.04] hover:bg-white/[0.08]","border border-white/[0.06] hover:border-white/[0.12]","cursor-pointer select-none",f,l),title:`Click to copy: ${a}`,"aria-label":`Copy hash ${a}`,children:[t.jsx("span",{className:s("transition-colors duration-200",u?"text-accent-success":"text-text-secondary"),children:y}),t.jsx("span",{className:s("flex items-center justify-center transition-all duration-200","xs"===p?"w-2.5 h-2.5":"sm"===p?"w-3 h-3":"w-3.5 h-3.5"),children:u?t.jsx(o,{className:s("text-accent-success","xs"===p?"w-2 h-2":"sm"===p?"w-2.5 h-2.5":"w-3 h-3")}):t.jsx(n,{className:s("transition-opacity duration-200",x?"opacity-70":"opacity-40","xs"===p?"w-2 h-2":"sm"===p?"w-2.5 h-2.5":"w-3 h-3")})})]})}export{a as H};
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
import{j as e,y as s,$ as t,F as a,r as l,aG as c,al as n,aO as i}from"./vendor-react-CUlQ5-Td.js";import{a0 as r,a1 as o,b as x,a2 as m,n as d,$ as u,a3 as p,a4 as h}from"./index-C1whtcFB.js";import{u as j}from"./usePolling-BvmU-1bN.js";import{c as g}from"./recharts-7RsRrQtf.js";import{P as f,b as N,a as v,c as y,L as b}from"./PageLayout-CViR4hDG.js";import"./vendor-core-XI_xDZ-M.js";import"./deckgl-MTXp-Y3t.js";const w=l.memo(function({log:s}){const t=h(s.level);return e.jsx("div",{className:"p-3 rounded-2xl bg-white/[0.02] hover:bg-white/[0.04] transition-colors",children:e.jsxs("div",{className:"flex items-baseline gap-3",children:[e.jsx("span",{className:g("type-data-sm w-14 shrink-0",t),children:s.level}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:"type-data-sm text-text-primary break-words whitespace-pre-wrap",children:s.message}),e.jsx("p",{className:"type-data-xs text-text-muted mt-1",children:new Date(s.timestamp).toLocaleString()})]})]})})});function F(){const s=r(),[t,a]=l.useState("INFO"),[o,x]=l.useState(!1),[m,d]=l.useState(null);l.useEffect(()=>{if(s.length>0){const e=s.some(e=>"DEBUG"===e.level);a(e?"DEBUG":"INFO")}},[s]);const u=l.useCallback(async e=>{if(e!==t&&!o){x(!0),d(null);try{const s=await p(e);s.success&&s.data?(a(e),d(s.data.message),setTimeout(()=>d(null),5e3)):(d(s.error||"Failed to change log level"),setTimeout(()=>d(null),3e3))}catch{d("Failed to change log level"),setTimeout(()=>d(null),3e3)}finally{x(!1)}}},[t,o]);return e.jsxs("div",{className:"flex items-center gap-2",children:[m&&e.jsx("span",{className:"text-xs text-text-muted animate-pulse",children:m}),e.jsxs("div",{className:"flex bg-white/[0.02] rounded-full p-1",children:[e.jsxs("button",{onClick:()=>u("INFO"),disabled:o,className:g("h-[32px] px-4 rounded-full type-data flex items-center gap-2 transition-colors","INFO"===t?"bg-accent-primary/20 text-accent-primary":"text-text-muted hover:text-text-secondary",o&&"opacity-50 cursor-not-allowed"),children:[e.jsx(c,{className:"w-4 h-4"}),"Info"]}),e.jsxs("button",{onClick:()=>u("DEBUG"),disabled:o,className:g("h-[32px] px-4 rounded-full type-data flex items-center gap-2 transition-colors","DEBUG"===t?"bg-amber-500/20 text-amber-400":"text-text-muted hover:text-text-secondary",o&&"opacity-50 cursor-not-allowed"),children:[o?e.jsx(n,{className:"w-4 h-4 animate-spin"}):e.jsx(i,{className:"w-4 h-4"}),"Debug"]})]})]})}function k(){const l=r(),c=o(),n=x(),i=m(),p=d();return j(i,u.logs,n),e.jsxs(f,{children:[e.jsx(N,{title:"System Logs",icon:e.jsx(a,{}),controls:e.jsxs(e.Fragment,{children:[e.jsx(F,{}),n&&e.jsxs("div",{className:"flex items-center gap-2 text-sm",children:[e.jsx(s,{className:"w-2 h-2 fill-accent-success text-accent-success animate-pulse"}),e.jsx("span",{className:"text-text-muted",children:"Live"})]}),e.jsxs("button",{onClick:()=>p(!n),className:g("h-[32px] px-4 rounded-full type-data transition-colors","flex items-center gap-2",n?"bg-accent-success/20 text-accent-success":"bg-white/[0.02] text-text-muted hover:text-text-secondary"),children:[e.jsx(t,{className:g("w-4 h-4",n&&"animate-spin")}),e.jsx("span",{className:"hidden xs:inline",children:n?"Live":"Paused"})]})]})}),e.jsxs(v,{noPadding:!0,children:[e.jsx(y,{listHeader:!0,icon:e.jsx(a,{className:"icon-sm"}),title:"Log Entries"}),e.jsx("div",{className:"space-y-2 max-h-[calc(100vh-300px)] sm:max-h-[calc(100vh-250px)] overflow-y-auto p-4",children:c&&0===l.length?e.jsx(b,{count:10}):0===l.length?e.jsx("div",{className:"text-center py-12 text-text-muted",children:"No logs available"}):l.map((s,t)=>e.jsx(w,{log:s},`${s.timestamp}-${t}`))})]})]})}export{k as default};
+1
View File
@@ -0,0 +1 @@
import{j as e,y as s,$ as t,F as a,r as l,aL as c,aq as n,aS as i}from"./vendor-react-CWPBVwgk.js";import{a2 as r,a3 as o,b as x,a4 as m,o as d,a1 as u,a5 as p,a6 as h}from"./index-BlYVqXhs.js";import{u as j}from"./usePolling-BsbqQ0mQ.js";import{c as g}from"./recharts-cqZ_RWsW.js";import{P as f,b as N,a as v,c as y,L as b}from"./PageLayout-Kh569_kh.js";import"./vendor-core-XI_xDZ-M.js";import"./deckgl-DTsmDcfs.js";const w=l.memo(function({log:s}){const t=h(s.level);return e.jsx("div",{className:"p-3 rounded-2xl bg-white/[0.02] hover:bg-white/[0.04] transition-colors",children:e.jsxs("div",{className:"flex items-baseline gap-3",children:[e.jsx("span",{className:g("type-data-sm w-14 shrink-0",t),children:s.level}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:"type-data-sm text-text-primary break-words whitespace-pre-wrap",children:s.message}),e.jsx("p",{className:"type-data-xs text-text-muted mt-1",children:new Date(s.timestamp).toLocaleString()})]})]})})});function F(){const s=r(),[t,a]=l.useState("INFO"),[o,x]=l.useState(!1),[m,d]=l.useState(null);l.useEffect(()=>{if(s.length>0){const e=s.some(e=>"DEBUG"===e.level);a(e?"DEBUG":"INFO")}},[s]);const u=l.useCallback(async e=>{if(e!==t&&!o){x(!0),d(null);try{const s=await p(e);s.success&&s.data?(a(e),d(s.data.message),setTimeout(()=>d(null),5e3)):(d(s.error||"Failed to change log level"),setTimeout(()=>d(null),3e3))}catch{d("Failed to change log level"),setTimeout(()=>d(null),3e3)}finally{x(!1)}}},[t,o]);return e.jsxs("div",{className:"flex items-center gap-2",children:[m&&e.jsx("span",{className:"text-xs text-text-muted animate-pulse",children:m}),e.jsxs("div",{className:"flex bg-white/[0.02] rounded-full p-1",children:[e.jsxs("button",{onClick:()=>u("INFO"),disabled:o,className:g("h-[32px] px-4 rounded-full type-data flex items-center gap-2 transition-colors","INFO"===t?"bg-accent-primary/20 text-accent-primary":"text-text-muted hover:text-text-secondary",o&&"opacity-50 cursor-not-allowed"),children:[e.jsx(c,{className:"w-4 h-4"}),"Info"]}),e.jsxs("button",{onClick:()=>u("DEBUG"),disabled:o,className:g("h-[32px] px-4 rounded-full type-data flex items-center gap-2 transition-colors","DEBUG"===t?"bg-amber-500/20 text-amber-400":"text-text-muted hover:text-text-secondary",o&&"opacity-50 cursor-not-allowed"),children:[o?e.jsx(n,{className:"w-4 h-4 animate-spin"}):e.jsx(i,{className:"w-4 h-4"}),"Debug"]})]})]})}function L(){const l=r(),c=o(),n=x(),i=m(),p=d();return j(i,u.logs,n),e.jsxs(f,{children:[e.jsx(N,{title:"System Logs",icon:e.jsx(a,{}),controls:e.jsxs(e.Fragment,{children:[e.jsx(F,{}),n&&e.jsxs("div",{className:"flex items-center gap-2 text-sm",children:[e.jsx(s,{className:"w-2 h-2 fill-accent-success text-accent-success animate-pulse"}),e.jsx("span",{className:"text-text-muted",children:"Live"})]}),e.jsxs("button",{onClick:()=>p(!n),className:g("h-[32px] px-4 rounded-full type-data transition-colors","flex items-center gap-2",n?"bg-accent-success/20 text-accent-success":"bg-white/[0.02] text-text-muted hover:text-text-secondary"),children:[e.jsx(t,{className:g("w-4 h-4",n&&"animate-spin")}),e.jsx("span",{className:"hidden xs:inline",children:n?"Live":"Paused"})]})]})}),e.jsxs(v,{noPadding:!0,children:[e.jsx(y,{listHeader:!0,icon:e.jsx(a,{className:"icon-sm"}),title:"Log Entries"}),e.jsx("div",{className:"space-y-2 max-h-[calc(100vh-300px)] sm:max-h-[calc(100vh-250px)] overflow-y-auto p-4",children:c&&0===l.length?e.jsx(b,{count:10}):0===l.length?e.jsx("div",{className:"text-center py-12 text-text-muted",children:"No logs available"}):l.map((s,t)=>e.jsx(w,{log:s},`${s.timestamp}-${t}`))})]})]})}export{L as default};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{j as e}from"./vendor-react-CUlQ5-Td.js";import{c as s}from"./recharts-7RsRrQtf.js";function a({className:a,style:l}){return e.jsx("div",{className:s("animate-pulse bg-white/[0.06] rounded",a),style:l})}function l(){return e.jsx("div",{className:"p-3 rounded-lg border border-border-subtle bg-bg-subtle",children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx(a,{className:"w-14 h-6 rounded shrink-0"}),e.jsxs("div",{className:"flex-1 min-w-0 space-y-2",children:[e.jsx(a,{className:"h-4 w-full"}),e.jsx(a,{className:"h-4 w-3/4"}),e.jsx(a,{className:"h-3 w-32 mt-1"})]})]})})}function c({count:s=8}){return e.jsx("div",{className:"space-y-2",children:Array.from({length:s}).map((s,a)=>e.jsx(l,{},a))})}const r=[45,72,33,58,80,42,65,28,55,75,38,62];function t(){return e.jsxs("div",{className:"absolute inset-0 z-10 bg-bg-surface rounded-xl p-4 flex flex-col gap-3","aria-hidden":"true",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(a,{className:"w-5 h-5"}),e.jsx(a,{className:"h-4 w-24"})]}),e.jsx(a,{className:"h-8 w-20"}),e.jsxs("div",{className:"flex-1 flex flex-col justify-end gap-2",children:[e.jsx(a,{className:"h-3 w-full"}),e.jsx(a,{className:"h-3 w-3/4"})]})]})}function i(){return e.jsxs("div",{className:"absolute inset-0 z-10 bg-bg-surface rounded-xl p-4 flex flex-col gap-3","aria-hidden":"true",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(a,{className:"w-5 h-5"}),e.jsx(a,{className:"h-4 w-24"})]}),e.jsx("div",{className:"flex-1 flex items-end gap-1 pb-4",children:r.slice(0,8).map((s,l)=>e.jsx(a,{className:"flex-1",style:{height:`${s}%`}},l))})]})}function n({rows:s=5}){return e.jsxs("div",{className:"absolute inset-0 z-10 bg-bg-surface rounded-xl flex flex-col","aria-hidden":"true",children:[e.jsx("div",{className:"p-4 border-b border-border-subtle",children:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(a,{className:"w-5 h-5"}),e.jsx(a,{className:"h-4 w-24"})]})}),e.jsx("div",{className:"flex-1 p-4 flex flex-col gap-3",children:Array.from({length:s}).map((s,l)=>e.jsx(a,{className:"h-6 w-full"},l))})]})}function d({children:a,className:l}){return e.jsx("div",{className:s("section-gap",l),children:a})}function x({title:s,icon:a,controls:l,subtitle:c}){return e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[e.jsxs("h1",{className:"type-title text-text-primary flex items-center gap-3",children:[a&&e.jsx("span",{className:"w-6 h-6 text-icon-page-title flex-shrink-0",children:a}),s]}),l&&e.jsx("div",{className:"flex items-center gap-2 sm:gap-3",children:l})]}),c&&e.jsx("div",{children:c})]})}const m={sm:"card-sm",md:"card-md",lg:"card-lg",hero:"card-hero",auto:"card-auto"};function o({children:a,size:l,compact:c,noPadding:r,className:d,style:x,onClick:o,isLoaded:h=!0,skeletonType:f="card"}){return e.jsxs("div",{className:s("glass-card h-full flex flex-col relative",!r&&(c?"card-padding-sm":"card-padding"),l&&m[l],d),style:x,onClick:o,children:[a,!h&&(()=>{switch(f){case"chart":return e.jsx(i,{});case"list":return e.jsx(n,{});default:return e.jsx(t,{})}})()]})}function h({icon:a,title:l,badge:c,subtitle:r,actions:t,iconColor:i="text-accent-primary",largeTitle:n=!1,listHeader:d=!1}){return e.jsxs("div",{className:s("flex flex-col gap-1 flex-shrink-0",d?"px-4 py-3 border-b border-border-subtle bg-bg-elevated/20":"mb-3"),children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[a&&e.jsx("span",{className:s("icon-md",i),children:a}),e.jsx("span",{className:n?"type-subheading text-text-primary":"type-micro",children:l}),c&&e.jsx("span",{className:"pill-tag",children:c})]}),t&&e.jsx("div",{className:"flex items-center gap-2 flex-wrap",children:t})]}),r&&e.jsx("p",{className:"type-label text-text-muted ml-7",children:r})]})}export{t as C,c as L,d as P,o as a,x as b,h as c};
import{j as e}from"./vendor-react-CWPBVwgk.js";import{c as s}from"./recharts-cqZ_RWsW.js";function a({className:a,style:l}){return e.jsx("div",{className:s("animate-pulse bg-white/[0.06] rounded",a),style:l})}function l(){return e.jsx("div",{className:"p-3 rounded-lg border border-border-subtle bg-bg-subtle",children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx(a,{className:"w-14 h-6 rounded shrink-0"}),e.jsxs("div",{className:"flex-1 min-w-0 space-y-2",children:[e.jsx(a,{className:"h-4 w-full"}),e.jsx(a,{className:"h-4 w-3/4"}),e.jsx(a,{className:"h-3 w-32 mt-1"})]})]})})}function c({count:s=8}){return e.jsx("div",{className:"space-y-2",children:Array.from({length:s}).map((s,a)=>e.jsx(l,{},a))})}const r=[45,72,33,58,80,42,65,28,55,75,38,62];function t(){return e.jsxs("div",{className:"absolute inset-0 z-10 bg-bg-surface rounded-xl p-4 flex flex-col gap-3","aria-hidden":"true",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(a,{className:"w-5 h-5"}),e.jsx(a,{className:"h-4 w-24"})]}),e.jsx(a,{className:"h-8 w-20"}),e.jsxs("div",{className:"flex-1 flex flex-col justify-end gap-2",children:[e.jsx(a,{className:"h-3 w-full"}),e.jsx(a,{className:"h-3 w-3/4"})]})]})}function i(){return e.jsxs("div",{className:"absolute inset-0 z-10 bg-bg-surface rounded-xl p-4 flex flex-col gap-3","aria-hidden":"true",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(a,{className:"w-5 h-5"}),e.jsx(a,{className:"h-4 w-24"})]}),e.jsx("div",{className:"flex-1 flex items-end gap-1 pb-4",children:r.slice(0,8).map((s,l)=>e.jsx(a,{className:"flex-1",style:{height:`${s}%`}},l))})]})}function n({rows:s=5}){return e.jsxs("div",{className:"absolute inset-0 z-10 bg-bg-surface rounded-xl flex flex-col","aria-hidden":"true",children:[e.jsx("div",{className:"p-4 border-b border-border-subtle",children:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(a,{className:"w-5 h-5"}),e.jsx(a,{className:"h-4 w-24"})]})}),e.jsx("div",{className:"flex-1 p-4 flex flex-col gap-3",children:Array.from({length:s}).map((s,l)=>e.jsx(a,{className:"h-6 w-full"},l))})]})}function d({children:a,className:l}){return e.jsx("div",{className:s("section-gap",l),children:a})}function x({title:s,icon:a,controls:l,subtitle:c}){return e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[e.jsxs("h1",{className:"type-title text-text-primary flex items-center gap-3",children:[a&&e.jsx("span",{className:"w-6 h-6 text-icon-page-title flex-shrink-0",children:a}),s]}),l&&e.jsx("div",{className:"flex items-center gap-2 sm:gap-3",children:l})]}),c&&e.jsx("div",{children:c})]})}const m={sm:"card-sm",md:"card-md",lg:"card-lg",hero:"card-hero",auto:"card-auto"};function o({children:a,size:l,compact:c,noPadding:r,className:d,style:x,onClick:o,isLoaded:h=!0,skeletonType:f="card"}){return e.jsxs("div",{className:s("glass-card h-full flex flex-col relative",!r&&(c?"card-padding-sm":"card-padding"),l&&m[l],d),style:x,onClick:o,children:[a,!h&&(()=>{switch(f){case"chart":return e.jsx(i,{});case"list":return e.jsx(n,{});default:return e.jsx(t,{})}})()]})}function h({icon:a,title:l,badge:c,subtitle:r,actions:t,iconColor:i="text-accent-primary",largeTitle:n=!1,listHeader:d=!1}){return e.jsxs("div",{className:s("flex flex-col gap-1 flex-shrink-0",d?"px-4 py-3 border-b border-border-subtle bg-bg-elevated/20":"mb-3"),children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[a&&e.jsx("span",{className:s("icon-md",i),children:a}),e.jsx("span",{className:n?"type-subheading text-text-primary":"type-micro",children:l}),c&&e.jsx("span",{className:"pill-tag",children:c})]}),t&&e.jsx("div",{className:"flex items-center gap-2 flex-wrap",children:t})]}),r&&e.jsx("p",{className:"type-label text-text-muted ml-7",children:r})]})}export{t as C,c as L,d as P,o as a,x as b,h as c};
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{j as e,ao as s,ap as t,aq as a,ar as r,as as n,r as c}from"./vendor-react-CUlQ5-Td.js";import{c as i}from"./recharts-7RsRrQtf.js";function o(e){return e>=-90?"excellent":e>=-100?"good":e>=-110?"fair":e>=-120?"weak":"poor"}function l(e,s){if(!s)return"bg-white/10";switch(e){case"excellent":return"bg-signal-excellent";case"good":return"bg-signal-good";case"fair":return"bg-signal-fair";case"weak":return"bg-signal-poor";case"poor":return"bg-signal-critical";default:return"bg-white/20"}}function x({rssi:c,className:l="w-4 h-4"}){const x=o(c),d=function(e){switch(e){case"excellent":return"text-signal-excellent";case"good":return"text-signal-good";case"fair":return"text-signal-fair";case"weak":return"text-signal-poor";case"poor":return"text-signal-critical";default:return"text-text-muted"}}(x),m=i(d,l);switch(x){case"excellent":return e.jsx(n,{className:m});case"good":return e.jsx(r,{className:m});case"fair":return e.jsx(a,{className:m});case"weak":return e.jsx(t,{className:m});default:return e.jsx(s,{className:m})}}const d=c.memo(function({rssi:s,snr:t,compact:a=!1,showValues:r=!0}){const n=o(s),c={excellent:4,good:3,fair:2,weak:1,poor:0}[n];return a?e.jsxs("div",{className:"flex items-center justify-end gap-1.5",children:[r&&e.jsx("span",{className:"text-[10px] font-mono text-text-secondary",children:s}),e.jsx("div",{className:"flex items-end gap-[2px] h-3",children:Array.from({length:4}).map((s,t)=>e.jsx("div",{className:i("w-[3px] rounded-[1px] transition-colors",l(n,t<c)),style:{height:(t+1)/4*100+"%"}},t))})]}):e.jsxs("div",{className:"flex items-center justify-end gap-2",children:[r&&e.jsxs("div",{className:"flex flex-col items-end",children:[e.jsxs("span",{className:"text-xs font-mono text-text-secondary leading-tight",children:[s," dBm"]}),void 0!==t&&e.jsxs("span",{className:"text-[10px] font-mono text-text-muted leading-tight",children:[t.toFixed(1)," dB"]})]}),e.jsx("div",{className:"flex items-end gap-[2px] h-3.5",children:Array.from({length:4}).map((s,t)=>e.jsx("div",{className:i("w-[3px] rounded-[1px] transition-colors",l(n,t<c)),style:{height:(t+1)/4*100+"%"}},t))})]})});function m(e){const s=o(e);return s.charAt(0).toUpperCase()+s.slice(1)}export{d as S,x as a,m as g};
import{j as e,at as s,au as t,av as a,aw as r,ax as n,r as c}from"./vendor-react-CWPBVwgk.js";import{c as i}from"./recharts-cqZ_RWsW.js";function l(e){return e>=-90?"excellent":e>=-100?"good":e>=-110?"fair":e>=-120?"weak":"poor"}function o(e,s){if(!s)return"bg-white/10";switch(e){case"excellent":return"bg-signal-excellent";case"good":return"bg-signal-good";case"fair":return"bg-signal-fair";case"weak":return"bg-signal-poor";case"poor":return"bg-signal-critical";default:return"bg-white/20"}}function x({rssi:c,className:o="w-4 h-4"}){const x=l(c),d=function(e){switch(e){case"excellent":return"text-signal-excellent";case"good":return"text-signal-good";case"fair":return"text-signal-fair";case"weak":return"text-signal-poor";case"poor":return"text-signal-critical";default:return"text-text-muted"}}(x),m=i(d,o);switch(x){case"excellent":return e.jsx(n,{className:m});case"good":return e.jsx(r,{className:m});case"fair":return e.jsx(a,{className:m});case"weak":return e.jsx(t,{className:m});default:return e.jsx(s,{className:m})}}const d=c.memo(function({rssi:s,snr:t,compact:a=!1,showValues:r=!0}){const n=l(s),c={excellent:4,good:3,fair:2,weak:1,poor:0}[n];return a?e.jsxs("div",{className:"flex items-center justify-end gap-1.5",children:[r&&e.jsx("span",{className:"text-[10px] font-mono text-text-secondary",children:s}),e.jsx("div",{className:"flex items-end gap-[2px] h-3",children:Array.from({length:4}).map((s,t)=>e.jsx("div",{className:i("w-[3px] rounded-[1px] transition-colors",o(n,t<c)),style:{height:(t+1)/4*100+"%"}},t))})]}):e.jsxs("div",{className:"flex items-center justify-end gap-2",children:[r&&e.jsxs("div",{className:"flex flex-col items-end",children:[e.jsxs("span",{className:"text-xs font-mono text-text-secondary leading-tight",children:[s," dBm"]}),void 0!==t&&e.jsxs("span",{className:"text-[10px] font-mono text-text-muted leading-tight",children:[t.toFixed(1)," dB"]})]}),e.jsx("div",{className:"flex items-end gap-[2px] h-3.5",children:Array.from({length:4}).map((s,t)=>e.jsx("div",{className:i("w-[3px] rounded-[1px] transition-colors",o(n,t<c)),style:{height:(t+1)/4*100+"%"}},t))})]})});function m(e){const s=l(e);return s.charAt(0).toUpperCase()+s.slice(1)}export{d as S,x as a,m as g};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
.uplot,.uplot *,.uplot *:before,.uplot *:after{box-sizing:border-box}.uplot{font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";line-height:1.5;width:min-content}.u-title{text-align:center;font-size:18px;font-weight:700}.u-wrap{position:relative;-webkit-user-select:none;user-select:none}.u-over,.u-under{position:absolute}.u-under{overflow:hidden}.uplot canvas{display:block;position:relative;width:100%;height:100%}.u-axis{position:absolute}.u-legend{font-size:14px;margin:auto;text-align:center}.u-inline{display:block}.u-inline *{display:inline-block}.u-inline tr{margin-right:16px}.u-legend th{font-weight:600}.u-legend th>*{vertical-align:middle;display:inline-block}.u-legend .u-marker{width:1em;height:1em;margin-right:4px;background-clip:padding-box!important}.u-inline.u-live th:after{content:":";vertical-align:middle}.u-inline:not(.u-live) .u-value{display:none}.u-series>*{padding:4px}.u-series th{cursor:pointer}.u-legend .u-off>*{opacity:.3}.u-select{background:#00000012;position:absolute;pointer-events:none}.u-cursor-x,.u-cursor-y{position:absolute;left:0;top:0;pointer-events:none;will-change:transform}.u-hz .u-cursor-x,.u-vt .u-cursor-y{height:100%;border-right:1px dashed #607D8B}.u-hz .u-cursor-y,.u-vt .u-cursor-x{width:100%;border-bottom:1px dashed #607D8B}.u-cursor-pt{position:absolute;top:0;left:0;border-radius:50%;border:0 solid;pointer-events:none;will-change:transform;background-clip:padding-box!important}.u-axis.u-off,.u-select.u-off,.u-cursor-x.u-off,.u-cursor-y.u-off,.u-cursor-pt.u-off{display:none}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{r as e,j as o}from"./vendor-react-CUlQ5-Td.js";const t=e.memo(function({ranges:e,selectedIndex:t,onSelect:a,isPending:l}){return o.jsx("div",{className:"toggle-group flex-shrink-0 overflow-x-auto "+(l?"opacity-70":""),children:e.map((e,l)=>o.jsx("button",{onClick:()=>a(l),className:"toggle-group-item "+(t===l?"active":""),children:e.label},e.label))})});export{t as T};
import{r as e,j as o}from"./vendor-react-CWPBVwgk.js";const t=e.memo(function({ranges:e,selectedIndex:t,onSelect:a,isPending:l}){return o.jsx("div",{className:"toggle-group flex-shrink-0 overflow-x-auto "+(l?"opacity-70":""),children:e.map((e,l)=>o.jsx("button",{onClick:()=>a(l),className:"toggle-group-item "+(t===l?"active":""),children:e.label},e.label))})});export{t as T};
+1
View File
@@ -0,0 +1 @@
function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}const t={},n=function(e,n,r){let o=Promise.resolve();if(n&&n.length>0){let e=function(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:"fulfilled",value:e}),e=>({status:"rejected",reason:e}))))};document.getElementsByTagName("link");const r=document.querySelector("meta[property=csp-nonce]"),l=(null==r?void 0:r.nonce)||(null==r?void 0:r.getAttribute("nonce"));o=e(n.map(e=>{if((e=function(e){return"/"+e}(e))in t)return;t[e]=!0;const n=e.endsWith(".css"),r=n?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${e}"]${r}`))return;const o=document.createElement("link");return o.rel=n?"stylesheet":"modulepreload",n||(o.as="script"),o.crossOrigin="",o.href=e,l&&o.setAttribute("nonce",l),document.head.appendChild(o),n?new Promise((t,n)=>{o.addEventListener("load",t),o.addEventListener("error",()=>n(new Error(`Unable to preload CSS for ${e}`)))}):void 0}))}function l(e){const t=new Event("vite:preloadError",{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return o.then(t=>{for(const e of t||[])"rejected"===e.status&&l(e.reason);return e().catch(l)})};export{n as _,e as g};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
!function(){"use strict";let e=null,t=null,s=!0;const a=new Map;let r=0,n=null,o=null;async function c(e){const s={};t&&(s.Authorization=`Bearer ${t}`);const a=new AbortController,r=setTimeout(()=>a.abort(),15e3);try{return await fetch(e,{headers:s,signal:a.signal})}finally{clearTimeout(r)}}async function l(){if(e)try{const t=`${e.apiBaseUrl}/api/stats`,s=await c(t);if(!s.ok)throw new Error(`API error: ${s.status}`);const a=await s.json();self.postMessage({type:"stats",data:a,timestamp:Date.now()})}catch(t){self.postMessage({type:"error",source:"stats",error:t instanceof Error?t.message:"Unknown error"})}}async function i(){if(e&&s)try{const t=`${e.apiBaseUrl}/api/recent_packets?limit=100`,s=await c(t);if(!s.ok)throw new Error(`API error: ${s.status}`);const n=await s.json(),o=n.data??n.packets??[],l=[];for(const e of o){const t=e.packet_hash;if(t&&!a.has(t)){a.set(t,e),l.push(e);const s=e.timestamp??0;s>r&&(r=s)}}a.size>75e3&&function(){const e=Array.from(a.values()).sort((e,t)=>(e.timestamp??0)-(t.timestamp??0)),t=e.length-75e3;for(let s=0;s<t;s++){const t=e[s];t.packet_hash&&a.delete(t.packet_hash)}}(),l.length>0&&self.postMessage({type:"packets",newPackets:l,totalCount:a.size,newestTimestamp:r})}catch(t){self.postMessage({type:"error",source:"packets",error:t instanceof Error?t.message:"Unknown error"})}}function p(){n&&(clearInterval(n),n=null),o&&(clearInterval(o),o=null)}self.onmessage=c=>{const f=c.data;switch(f.type){case"init":e=f.config,t=f.config.authToken??null,e&&(p(),n=setInterval(l,e.statsIntervalMs),o=setInterval(i,e.packetsIntervalMs),l(),i()),self.postMessage({type:"ready"});break;case"setAuth":t=f.token;break;case"setLiveMode":s=f.enabled;break;case"forceRefresh":l(),i();break;case"clearCache":a.clear(),r=0,self.postMessage({type:"packetsReset",packets:[],newestTimestamp:0});break;case"stop":p()}}}();
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{r}from"./vendor-react-CUlQ5-Td.js";function e(e,t,n=!0,c=!1){const u=r.useRef(e);r.useEffect(()=>{u.current=e},[e]),r.useEffect(()=>{if(!n)return;c||u.current();const r=setInterval(()=>{u.current()},t);return()=>clearInterval(r)},[t,n,c])}export{e as u};
import{r}from"./vendor-react-CWPBVwgk.js";function e(e,t,n=!0,c=!1){const u=r.useRef(e);r.useEffect(()=>{u.current=e},[e]),r.useEffect(()=>{if(!n)return;c||u.current();const r=setInterval(()=>{u.current()},t);return()=>clearInterval(r)},[t,n,c])}export{e as u};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+3 -3
View File
@@ -38,10 +38,10 @@
--font-data: 'JetBrains Mono', 'SF Mono', Monaco, monospace;
}
</style>
<script type="module" crossorigin src="/assets/index-C1whtcFB.js"></script>
<script type="module" crossorigin src="/assets/index-BlYVqXhs.js"></script>
<link rel="modulepreload" crossorigin href="/assets/vendor-core-XI_xDZ-M.js">
<link rel="modulepreload" crossorigin href="/assets/vendor-react-CUlQ5-Td.js">
<link rel="stylesheet" crossorigin href="/assets/index-CiR3C65a.css">
<link rel="modulepreload" crossorigin href="/assets/vendor-react-CWPBVwgk.js">
<link rel="stylesheet" crossorigin href="/assets/index-BuNKvX_5.css">
</head>
<body>
<div id="root"></div>
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "pymc_console",
"version": "0.9.133",
"version": "0.9.134",
"description": "Vite + React Dashboard for pyMC_Repeater",
"private": true,
"type": "module",