{"record":{"id":"5946a7af56e5f799","repo":"jackwener/OpenCLI","slug":"no-skills-matched-keyword","errorCode":null,"errorMessage":"No skills matched \"${keyword}\".","messagePattern":"No skills matched \"(.+?)\"\\.","errorType":"exception","errorClass":"EmptyResultError","httpStatus":null,"severity":"warning","filePath":"clis/trae-solo/skill.js","lineNumber":142,"sourceCode":"      inp.dispatchEvent(new Event('input', { bubbles: true }));\n    })()`);\n        await page.wait(0.7);\n\n        const items = await page.evaluate(`(function() {\n      const cards = Array.from(document.querySelectorAll('.marketplace-card-v2')).filter((c) => c.offsetParent);\n      return cards.map((c, i) => {\n        const logo = c.querySelector('.skill-logo-svg');\n        const name = (logo && logo.getAttribute('aria-label')) || '';\n        const full = (c.innerText || '').replace(/\\\\s+/g, ' ').trim();\n        let desc = full;\n        if (name && desc.startsWith(name)) desc = desc.slice(name.length).trim();\n        return { index: i + 1, name: name || full.split(' ')[0], description: desc.slice(0, 200) };\n      });\n    })()`);\n        const limit = Number.isInteger(kwargs.limit) && kwargs.limit > 0 ? kwargs.limit : 50;\n        const rows = (items || []).slice(0, limit);\n        if (!rows.length) {\n            throw new EmptyResultError('trae-solo skill-search', `No skills matched \"${keyword}\".`);\n        }\n        return rows.map((r) => ({ Index: r.index, Name: r.name, Description: r.description }));\n    },\n});\n\n// -------- skill-category --------\ncli({\n    site: 'trae-solo',\n    name: 'skill-category',\n    access: 'read',\n    description: 'Filter Skills Marketplace by category. Pass --list to see categories.',\n    domain: 'localhost',\n    strategy: Strategy.UI,\n    browser: true,\n    args: [\n        { name: 'name', positional: true, required: false, help: 'Category name (substring; case-insensitive). Common: All / Developer Tools / Data Analysis / UI Design / Content Creation / Productivity' },\n        { name: 'list', type: 'boolean', default: false, help: 'List available categories' },\n        { name: 'limit', type: 'int', required: false, default: 100 },","sourceCodeStart":124,"sourceCodeEnd":160,"githubUrl":"https://github.com/jackwener/OpenCLI/blob/49907e53dc3ade5c223ff0c4c2c2785687cec4e6/clis/trae-solo/skill.js#L124-L160","documentation":"Thrown as an EmptyResultError when the marketplace search executed in the Trae UI returns zero matching skills. The command typed the keyword into the search input, read the rendered results, and found none.","triggerScenarios":"Running skill-search with a keyword that matches no marketplace entries; results not yet rendered when page.evaluate collected items; the search input selector failed so the query never ran; Trae marketplace offline or region-restricted.","commonSituations":"Very niche or misspelled keywords; marketplace index changed and the skill was renamed/removed; slow network so results hadn't loaded; Trae UI update broke the results selector.","solutions":["Retry with a broader/shorter keyword (e.g. 'code' instead of 'code-review-helper').","Add a wait/delay after typing so results render before items are collected.","Verify the marketplace loads in the Trae UI manually — network/login issues will look identical.","If results visibly exist but aren't parsed, update the result-collection selectors in skill.js after a Trae UI update."],"exampleFix":"// before\nawait skillSearch({ keyword: 'zzzz-no-such-skill' })\n// after\nawait skillSearch({ keyword: 'lint' })","handlingStrategy":"retry","validationCode":"// ensure the marketplace search input exists and query is reasonable\nconst kw = keyword.trim();\nif (!kw) throw new Error('empty keyword');\nawait page.waitForSelector('input[placeholder=\"Search\"]', { timeout: 5000 }).catch(() => {});","typeGuard":null,"tryCatchPattern":"try {\n  return await skillSearch({ keyword: kw });\n} catch (e) {\n  if (e instanceof EmptyResultError && /No skills matched/.test(e.message)) {\n    await sleep(1500);\n    return await skillSearch({ keyword: kw }); // retry once for slow renders\n  }\n  throw e;\n}","preventionTips":["Start with broad keywords, then narrow.","Allow render time between typing the keyword and reading results.","Verify the marketplace loads in the Trae UI (network/login).","After Trae UI updates, verify result selectors still match."],"tags":["empty-result","search","ui-automation"],"backgroundTag":"empty-search-result","analyzedSha":"49907e53dc3ade5c223ff0c4c2c2785687cec4e6","analyzedAt":"2026-08-29T08:14:47.543Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}