jackwener/OpenCLI · error · EmptyResultError

`No visible messages found for conversation ${agentId}/${con

Error message

`No visible messages found for conversation ${agentId}/${convId}. Verify the IDs are correct and that the session belongs to the current login.`

What it means

An EmptyResultError from `yuanbao detail` thrown when, after polling the conversation page for ~20 seconds, no message bubbles rendered for the requested agentId/convId. The message guides the user toward the two usual causes: wrong IDs, or the conversation belongs to a different account than the current login. It prevents returning an empty transcript as if it were a real (empty) conversation.

Source

Thrown at clis/yuanbao/detail.js:53

        await page.wait(2);
        if (await hasLoginGate(page)) {
            throw authRequired('Yuanbao opened a login gate when navigating to the conversation.');
        }

        // Poll up to ~20s for the transcript to render. The page shell loads
        // before history is fetched, so a fixed wait races the empty render.
        let bubbles = [];
        const POLL_DEADLINE_MS = 20_000;
        const POLL_INTERVAL_S = 1;
        const startedAt = Date.now();
        while (Date.now() - startedAt < POLL_DEADLINE_MS) {
            bubbles = await getYuanbaoMessageBubbles(page);
            if (bubbles.length > 0) break;
            await page.wait(POLL_INTERVAL_S);
        }

        if (!bubbles.length) {
            throw new EmptyResultError(
                'yuanbao detail',
                `No visible messages found for conversation ${agentId}/${convId}. Verify the IDs are correct and that the session belongs to the current login.`,
            );
        }
        return bubbles.map((b) => ({
            Role: b.role,
            Text: b.role === 'Assistant' && b.html
                ? (convertYuanbaoHtmlToMarkdown(b.html).trim() || b.text)
                : b.text,
        }));
    },
});

View on GitHub (pinned to 49907e53dc)

Solutions

  1. Verify the ID is the full chat/<agentId>/<convId> pair (copy the whole conversation URL).
  2. Confirm the conversation belongs to the account currently logged into the CLI session.
  3. Re-run once in case rendering was just slow — if it recurs, the IDs/account are wrong.
  4. List conversations from the same account first and use an ID from that list.

Example fix

// before
$ opencli yuanbao detail 3f2a9c...          # bare UUID
EmptyResultError: No visible messages found...
// after
$ opencli yuanbao detail "https://yuanbao.tencent.com/chat/<agentId>/<convId>"
Defensive patterns

Strategy: validation

Validate before calling

// Validate ID shape before invoking: must be agentId/convId, not a bare UUID
const m = id.match(/([a-z0-9-]+)\/([a-z0-9-]+)/i);
if (!m) throw new Error('Pass the full chat/<agentId>/<convId> URL or "<agentId>/<convId>" pair');

Type guard

const isConversationRef = (id) =>
  typeof id === 'string' && /^[a-z0-9-]+\/[a-z0-9-]+$/i.test(id.trim());

Try / catch

try {
  const msgs = await run(['yuanbao', 'detail', ref]);
} catch (e) {
  if (e.name === 'EmptyResultError') {
    // wrong IDs or wrong account: re-list conversations for the current login
    const convos = await run(['yuanbao', 'list']);
    return pickAndRetry(convos);
  }
  throw e;
}

Prevention

When it happens

Trigger: Running `yuanbao detail <url-or-id>` with a mistyped or truncated ID pair (a bare UUID instead of agentId/convId), a conversation deleted or belonging to another WeChat account, or the transcript failing to render within the 20s poll window.

Common situations: Copying only the convId UUID instead of the full chat URL; switching accounts so the session can't see the conversation; referencing a conversation from a colleague's account; slow page loads exceeding the poll deadline.

Related errors


AI-assisted analysis of jackwener/OpenCLI@49907e53dc (2026-08-29). Data as JSON: /api/errors/215d1341a975f1bd. Report an issue: GitHub.