jackwener/OpenCLI · info · EmptyResultError

No IndexedDB databases.

Error message

No IndexedDB databases.

What it means

EmptyResultError from the trae-solo `idb-list` command when `indexedDB.databases()` returns an empty or non-array result in the Trae renderer, meaning no IndexedDB databases exist in that origin/session. The library throws rather than printing an empty table so callers know there is nothing to inspect.

Source

Thrown at clis/trae-solo/renderer-storage.js:158

        }));
    },
});

// -------- idb-list --------
cli({
    site: 'trae-solo',
    name: 'idb-list',
    access: 'read',
    description: 'List IndexedDB databases on the Trae SOLO renderer. Trae ships an @byted/ve-rtc DB used by the Volcengine RTC voice/video infrastructure.',
    domain: 'localhost',
    strategy: Strategy.UI,
    browser: true,
    args: [],
    columns: ['Index', 'Key', 'Bytes', 'Name', 'Preview', 'Database', 'Version'],
    func: async (page) => {
        const dbs = await page.evaluate(`(async () => indexedDB.databases ? await indexedDB.databases() : [])()`);
        if (!Array.isArray(dbs) || !dbs.length) {
            throw new EmptyResultError('trae-solo idb-list', 'No IndexedDB databases.');
        }
        return dbs.map((d, i) => ({
            Index: i + 1,
            Key: '',
            Bytes: '',
            Name: '',
            Preview: '',
            Database: d.name || '(unnamed)',
            Version: String(d.version || ''),
        }));
    },
});

View on GitHub (pinned to 49907e53dc)

Solutions

  1. Confirm the data you seek is actually in IndexedDB — check Trae's on-disk state (e.g. workspace storage) instead.
  2. Navigate/trigger the feature that creates the IDB store, then re-run.
  3. Verify you are attached to the correct page/origin in the Trae window.
  4. If databases() is unsupported in the Electron Chromium version, enumerate via known names with indexedDB.open() probes.

Example fix

// before
const dbs = await cli('trae-solo', 'idb-list'); // EmptyResultError
// after
const keys = await cli('trae-solo', 'storage-keys', {}); // check localStorage first
console.log(keys);
Defensive patterns

Strategy: fallback

Type guard

const isDbList = (v) => Array.isArray(v) && v.every(d => typeof d?.name === 'string');

Try / catch

try {
  dbs = await cli('trae-solo', 'idb-list');
} catch (e) {
  if (/No IndexedDB databases/.test(e.message)) {
    console.warn('No IDB at this origin — inspecting localStorage instead');
    fallback = await cli('trae-solo', 'storage-keys', {});
  } else throw e;
}

Prevention

When it happens

Trigger: Inspecting a Trae page that never used IndexedDB (state kept in localStorage or files instead); databases() unsupported and returning [] via the fallback; browsing before any feature that creates an IDB store has run.

Common situations: Assuming an Electron app persists state in IndexedDB when it uses SQLite/JSON files; checking a fresh profile or a page whose origin has no IDB usage; probing the wrong renderer page.

Related errors


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