Phase 002: rebrand to hermes-ui and consolidate i18n to zh/en
Build / build (push) Canceled after 0s
NPM Lockfile Check / npm ci --ignore-scripts (push) Canceled after 0s
Playwright / e2e (push) Canceled after 0s

Removes the ekko / hermes-web-ui branding from the whole tree and drops
eight locale files, so the project presents one name and one language pair.

Data compatibility is deliberate, not accidental: DB filenames, the JWT
audience, and skill manifest ownership all still recognise their pre-rename
values so existing deployments under ~/.hermes-web-ui keep working without a
re-login or a re-injection.

scripts/harness-check.mjs now scans for the legacy strings and fails the
build on any new occurrence, with an explicit allow-list (and reasons) for
the compatibility paths that must keep them.
This commit is contained in:
2026-10-16 11:11:29 +08:00
parent 1e9ea89d86
commit c93e1fe1bd
70 changed files with 1305 additions and 17856 deletions
+6 -6
View File
@@ -19,7 +19,7 @@ async function loadCli(overrides: Partial<ChildProcessMocks> = {}) {
vi.resetModules()
vi.doMock('child_process', () => ({ execFileSync, execSync, spawn }))
const mod = await import('../../bin/hermes-web-ui.mjs')
const mod = await import('../../bin/hermes-ui.mjs')
return {
...mod,
mocks: { execFileSync, execSync, spawn },
@@ -166,20 +166,20 @@ describe('CLI port detection', () => {
it('skips browser launch when --no-open is provided', async () => {
const { shouldOpenBrowser } = await loadCli()
expect(shouldOpenBrowser(['node', 'bin/hermes-web-ui.mjs', 'start'])).toBe(true)
expect(shouldOpenBrowser(['node', 'bin/hermes-web-ui.mjs', 'start', '--no-open'])).toBe(false)
expect(shouldOpenBrowser(['node', 'bin/hermes-web-ui.mjs', 'restart', '--port', '9000', '--no-open'])).toBe(false)
expect(shouldOpenBrowser(['node', 'bin/hermes-ui.mjs', 'start'])).toBe(true)
expect(shouldOpenBrowser(['node', 'bin/hermes-ui.mjs', 'start', '--no-open'])).toBe(false)
expect(shouldOpenBrowser(['node', 'bin/hermes-ui.mjs', 'restart', '--port', '9000', '--no-open'])).toBe(false)
})
it('preserves --no-open when update respawns restart', async () => {
const { getRestartArgs } = await loadCli()
expect(getRestartArgs(9000, ['node', 'bin/hermes-web-ui.mjs', 'update', '--port', '9000'])).toEqual([
expect(getRestartArgs(9000, ['node', 'bin/hermes-ui.mjs', 'update', '--port', '9000'])).toEqual([
'restart',
'--port',
'9000',
])
expect(getRestartArgs(9000, ['node', 'bin/hermes-web-ui.mjs', 'update', '--port', '9000', '--no-open'])).toEqual([
expect(getRestartArgs(9000, ['node', 'bin/hermes-ui.mjs', 'update', '--port', '9000', '--no-open'])).toEqual([
'restart',
'--port',
'9000',