jackwener/OpenCLI · info · EmptyResultError

No job-seeker-side chat sessions were returned.

Error message

No job-seeker-side chat sessions were returned.

What it means

When side=geek, the command navigates to the job-seeker chat page, builds rows via buildGeekRows (label list + friend info enrichment), and throws EmptyResultError('boss chatlist') when zero rows are produced. It means the identity is geek-side and the flow ran, but there are no chat sessions (or label groups) to return.

Source

Thrown at clis/boss/chatlist.js:90

        const pageNum = readPositiveInteger(kwargs.page, 'chatlist --page', 1);
        const side = kwargs.side || 'auto';

        if (side === 'boss') {
            await navigateToChat(page);
            const friends = await fetchFriendList(page, {
                pageNum,
                jobId: kwargs['job-id'] || '0',
            });
            if (friends.length === 0)
                throw new EmptyResultError('boss chatlist', 'No recruiter-side chat sessions were returned.');
            return friends.slice(0, limit).map(mapBossRow);
        }

        if (side === 'geek') {
            await navigateToGeekChat(page);
            const rows = await buildGeekRows(page, limit);
            if (rows.length === 0)
                throw new EmptyResultError('boss chatlist', 'No job-seeker-side chat sessions were returned.');
            return rows;
        }

        // auto: try recruiter first, fall back to geek on identity mismatch
        await navigateToChat(page);
        const bossResult = await fetchFriendList(page, {
            pageNum,
            jobId: kwargs['job-id'] || '0',
            allowNonZero: true,
        });
        if (Array.isArray(bossResult)) {
            if (bossResult.length === 0)
                throw new EmptyResultError('boss chatlist', 'No recruiter-side chat sessions were returned.');
            return bossResult.slice(0, limit).map(mapBossRow);
        }
        if (bossResult.code === IDENTITY_MISMATCH_CODE) {
            await navigateToGeekChat(page);
            const rows = await buildGeekRows(page, limit);

View on GitHub (pinned to 49907e53dc)

Solutions

  1. Use --side auto to let the command detect the account side and fall back automatically
  2. Verify in the zhipin.com web UI that the geek chat list shows conversations
  3. Confirm the logged-in account is actually a job-seeker account, not a recruiter account
  4. If the UI shows chats, check fetchGeekFriendLabelList/fetchGeekFriendInfoList endpoints in clis/boss/utils.js for API changes

Example fix

// before
boss chatlist --side geek  // account is actually recruiter-side
// after
boss chatlist --side auto  // detects side and returns recruiter rows
Defensive patterns

Strategy: fallback

Validate before calling

// Verify account side before forcing --side geek
const identity = await bossVerify(page);
if (identity.user_type !== 'geek') {
  console.warn('account is ' + identity.user_type + '; --side geek will be empty');
}

Type guard

function isNonEmptyGeekRows(v) {
  return Array.isArray(v) && v.length > 0;
}

Try / catch

try {
  rows = await bossChatlist({ side: 'geek' });
} catch (err) {
  if (err instanceof EmptyResultError && err.message.includes('job-seeker-side')) {
    return []; // no seeker chats
  }
  throw err;
}

Prevention

When it happens

Trigger: Running `boss chatlist --side geek` when the job-seeker account has no conversations, has no chat labels/groups, or the friend-info enrichment empties everything at the requested page/limit.

Common situations: New seeker account that never chatted with recruiters; account actually is recruiter-side (wrong --side choice); zhipin.com changed the geek friend-label API so lists come back empty while UI works.

Understand the failure class

Background: EmptyResultError / "no results found": when an API or scraper succeeds but returns zero rows — this error's family across 9 libraries.

Related errors


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