Reverts all seven commits of #119381 (59c54c78..476ff4dd), which re-landed the native card-based Skills/Plugins catalog browser after it was reverted twice (#113037 reverting #112669, #115787 reverting #113128). Capabilities -> Skills and Plugins return to the list/detail tabs with the embedded catalog picker they had before #119381. Removed with it: - Desktop catalog/ module (browser, cards, detail dialog, filters, reels/masonry, install switch) and skill deep-link install (hermes://skill/install); skills/embedded-hub-picker.tsx comes back. - apps/shared catalog-browse.ts and catalog-install.ts. - The `catalog` i18n namespace in every locale (+ regenerated locales/_keys.desktop.json); the two i18n pack tests and the keys test now exercise connectorsPage.searchPlaceholder instead. - Website /skills "Open in Hermes Desktop" skill links and the extract-skills install identifiers; docs return to the pre-#119381 text. - Later fixes that only patched the reverted catalog code go with it:5832a6eb93+7aba2cbbe9(catalog download deadline),9e63cdc4b8(catalog lookalike rows),c756986db2(catalog counts), the catalog half ofc13232e90c/f265273347. Kept on purpose (later work that depends on code #119381 introduced): - DialogContent `chrome` / `overlayClassName` / nested-dialog layering (the image lightbox uses them). - vitest.setup.ts / src/test/jsdom.ts stubs (other suites rely on them). - Kanban toolset wiring on the Plugins Desktop switch (cd30fdadf6,7ca2f5665f) and its tests, the `hermes_not_connected` server tone, the SearchField flex-1 fix, skill provenance helpers. SkillDetail shows a provenance pill only for agent/hub skills, since the pre-#119381 labels have no `external` entry.
26 lines
1.2 KiB
JavaScript
26 lines
1.2 KiB
JavaScript
import assert from 'node:assert/strict'
|
|
import { readFileSync } from 'node:fs'
|
|
import { join, resolve } from 'node:path'
|
|
import { test } from 'vitest'
|
|
|
|
import { emitDesktopKeys, flattenKeys, renderKeysFile, SURFACE } from './i18n-keys.mjs'
|
|
|
|
const repoRoot = resolve(import.meta.dirname, '../../..')
|
|
|
|
test('flattenKeys lists every leaf as a sorted dotted path, functions included, arrays as one leaf', () => {
|
|
assert.deepEqual(
|
|
flattenKeys({ z: { count: n => `${n}`, a: 'x', 'dotted.key': 'y' }, list: ['a'], b: 'c' }),
|
|
['b', 'list', 'z.a', 'z.count', 'z.dotted.key']
|
|
)
|
|
assert.equal(renderKeysFile(['a']), `{\n "surface": "${SURFACE}",\n "keys": [\n "a"\n ]\n}\n`)
|
|
})
|
|
|
|
test('the committed locales/_keys.desktop.json matches the English catalog (run `npm run i18n:keys`)', async () => {
|
|
const out = join(repoRoot, 'locales', `_keys.${SURFACE}.json`)
|
|
const committed = JSON.parse(readFileSync(out, 'utf8'))
|
|
assert.equal(committed.surface, SURFACE)
|
|
assert.ok(committed.keys.includes('common.save'))
|
|
assert.ok(committed.keys.includes('connectorsPage.searchPlaceholder'), 'function-valued entries are keys too')
|
|
await emitDesktopKeys({ source: repoRoot, out, check: true })
|
|
})
|