agenttop 0.11.4 → 0.11.5

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/dist/index.js CHANGED
@@ -3082,7 +3082,18 @@ var sessions = [];
3082
3082
  var refreshInFlight = false;
3083
3083
  var listeners = /* @__PURE__ */ new Set();
3084
3084
  var getCachedSessions = () => sessions;
3085
+ var hashSessions = (list) => {
3086
+ let h = "";
3087
+ for (const s of list) {
3088
+ h += `${s.sessionId}:${s.status}:${s.pid}:${s.lastActivity}:${s.usage.inputTokens}:${s.usage.outputTokens};`;
3089
+ }
3090
+ return h;
3091
+ };
3092
+ var lastHash = "";
3085
3093
  var setCachedSessions = (next) => {
3094
+ const nextHash = hashSessions(next);
3095
+ if (nextHash === lastHash) return;
3096
+ lastHash = nextHash;
3086
3097
  sessions = next;
3087
3098
  for (const fn of listeners) fn(next);
3088
3099
  };
@@ -3588,26 +3599,37 @@ var useSessions = (allUsers, filter, archivedIds, viewingArchive) => {
3588
3599
  const [selectedIndex, setSelectedIndex] = useState11(0);
3589
3600
  const [expandedKeys, setExpandedKeys] = useState11(/* @__PURE__ */ new Set());
3590
3601
  const usageOverrides = useRef5(/* @__PURE__ */ new Map());
3591
- const refresh = useCallback3(() => {
3592
- const found = getCachedSessions();
3593
- const filtered = enrichAndFilter(found, usageOverrides.current, filter, archivedIds, viewingArchive);
3594
- setSessions(filtered);
3595
- triggerRefresh(allUsers);
3596
- }, [allUsers, filter, archivedIds, viewingArchive]);
3597
- useEffect6(() => {
3598
- const unsubscribe = subscribe(() => {
3602
+ const lastSessionIdsRef = useRef5("");
3603
+ const updateSessions = useCallback3(
3604
+ (force) => {
3599
3605
  const found = getCachedSessions();
3600
3606
  const filtered = enrichAndFilter(found, usageOverrides.current, filter, archivedIds, viewingArchive);
3607
+ const key = filtered.map((s) => `${s.sessionId}:${s.status}:${s.lastActivity}`).join(",");
3608
+ if (!force && key === lastSessionIdsRef.current) return;
3609
+ lastSessionIdsRef.current = key;
3601
3610
  setSessions(filtered);
3602
- });
3611
+ },
3612
+ [filter, archivedIds, viewingArchive]
3613
+ );
3614
+ const refresh = useCallback3(() => {
3615
+ updateSessions(true);
3616
+ triggerRefresh(allUsers);
3617
+ }, [allUsers, updateSessions]);
3618
+ useEffect6(() => {
3619
+ const unsubscribe = subscribe(() => updateSessions());
3603
3620
  return unsubscribe;
3604
- }, [filter, archivedIds, viewingArchive]);
3621
+ }, [updateSessions]);
3622
+ const hasSessions = sessions2.length > 0;
3623
+ const refreshRef = useRef5(refresh);
3624
+ refreshRef.current = refresh;
3625
+ useEffect6(() => {
3626
+ refreshRef.current();
3627
+ }, []);
3605
3628
  useEffect6(() => {
3606
- refresh();
3607
- const pollMs = sessions2.length > 0 ? ACTIVE_POLL_MS : IDLE_POLL_MS;
3629
+ const pollMs = hasSessions ? ACTIVE_POLL_MS : IDLE_POLL_MS;
3608
3630
  const interval = setInterval(() => triggerRefresh(allUsers), pollMs);
3609
3631
  return () => clearInterval(interval);
3610
- }, [refresh, sessions2.length > 0]);
3632
+ }, [allUsers, hasSessions]);
3611
3633
  const groups = useMemo2(() => buildGroups(sessions2, expandedKeys), [sessions2, expandedKeys]);
3612
3634
  const visibleItems = useMemo2(() => buildVisibleItems(groups), [groups]);
3613
3635
  const itemCountRef = useRef5(visibleItems.length);