tinyhumansai/openhuman · error

[overlay] could not resolve current monitor for positioning

Error message

[overlay] could not resolve current monitor for positioning

What it means

Overlay default-positioning path: no saved drag position existed (or the saved one was invalid and was removed), so the code asked Tauri's currentMonitor() for the display geometry to pin the overlay bottom-right — and it returned null/undefined. The function returns without repositioning; the OS/window-manager default placement is used instead, which may land the overlay on a non-ideal screen or spot.

Source

Thrown at app/src/overlay/OverlayApp.tsx:664

        try {
          const { x, y } = JSON.parse(saved) as { x: number; y: number };
          await appWindow.setPosition(new LogicalPosition(x, y));
          userDraggedRef.current = true;
          return;
        } catch {
          localStorage.removeItem(OVERLAY_POSITION_KEY);
        }
      }

      if (userDraggedRef.current) {
        return;
      }

      // Default: pin to bottom-right corner
      try {
        const monitor = await currentMonitor();
        if (!monitor) {
          console.warn('[overlay] could not resolve current monitor for positioning');
          return;
        }

        const x = monitor.workArea.position.x + monitor.workArea.size.width - width - margin;
        const y = monitor.workArea.position.y + monitor.workArea.size.height - height - margin;
        await appWindow.setPosition(new LogicalPosition(x, y));
      } catch (error) {
        console.warn('[overlay] failed to pin overlay bottom-right after resize', error);
      }
    };

    void updateWindowFrame();
  }, [status]);

  // ── Render ────────────────────────────────────────────────────────────
  const bubbles = useMemo<OverlayBubble[]>(() => (bubble ? [bubble] : []), [bubble]);
  const orbClassName = useMemo(() => {
    if (status === 'active') {

View on GitHub (pinned to 7491200858)

Solutions

  1. Drag the overlay once — the manual position persists to localStorage and bypasses monitor resolution
  2. Reconnect/enable displays if the window is on a detached monitor
  3. Restart the app; monitor enumeration is often transiently empty during startup
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at app/src/overlay/OverlayApp.tsx:664 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of tinyhumansai/openhuman@7491200858 (2026-08-17). Data as JSON: /api/errors/aa700bb3d633d7ee. Report an issue: GitHub.