tinyhumansai/openhuman · error

[composio] polling connections failed:

Error message

[composio] polling connections failed:

What it means

Failure of the periodic Composio connections poll: listConnections({timeoutMs}) inside window.setInterval rejected (network/timeout/backend error). The generation guard means stale responses are already dropped; the catch only warns, connections keep their last-known value and the next interval tick retries automatically.

Source

Thrown at app/src/lib/composio/hooks.ts:242

  }, [fetchEnabled, resolveFetchEnabled]);

  // Initial fetch + polling.
  useEffect(() => {
    void refresh();
    if (pollIntervalMs <= 0 || fetchEnabled !== true) return;
    const id = window.setInterval(() => {
      const generation = configGenerationRef.current;
      void listConnections({ timeoutMs: COMPOSIO_FETCH_TIMEOUT_MS })
        .then(resp => {
          if (!mountedRef.current || generation !== configGenerationRef.current) return;
          const freshConnections = resp.connections ?? [];
          setConnections(freshConnections);
          // Keep the durable cache current with each poll so a restart paints
          // the freshest activation state (merge preserves toolkit/catalog).
          writeConnectionCache({ connections: freshConnections });
        })
        .catch(err => {
          console.warn(
            '[composio] polling connections failed:',
            err instanceof Error ? err.message : String(err)
          );
        });
    }, pollIntervalMs);
    return () => window.clearInterval(id);
  }, [refresh, pollIntervalMs, fetchEnabled]);

  // [composio-cache] Listen for a window-level "config changed" event
  // emitted by ComposioPanel when the user flips backend ↔ direct or
  // stores/clears the BYO API key. Without this, the integrations panel
  // keeps showing the previous tenant's connections for up to one poll
  // interval (5s) — visible enough to look like a bug (#1710). On the
  // event we trigger a full refresh which re-fetches toolkits +
  // connections against the new client. We also rely on the Rust-side
  // ComposioConfigChanged bus event to invalidate the core-side cache;
  // the window event is purely an in-renderer signal.
  useEffect(() => {

View on GitHub (pinned to 7491200858)

Solutions

  1. Rely on the next poll tick — retries are built into the interval
  2. Inspect the underlying error kind: timeout vs auth determines whether polling can ever succeed
  3. Back off or stop polling after consecutive failures to avoid log spam
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at app/src/lib/composio/hooks.ts:242 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/5c06f3d6fd8ff0e9. Report an issue: GitHub.