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
+7 -7
View File
@@ -220,7 +220,7 @@ describe('coding agent launch preparation', () => {
const mcp = JSON.parse(readFileSync(join(result.rootDir, 'mcp.json'), 'utf-8'))
expect(mcp.mcpServers['hermes-studio-api']).toMatchObject({
command: process.execPath,
args: [join(process.cwd(), 'bin/hermes-studio-mcp.mjs'), 'api'],
args: [join(process.cwd(), 'bin/hermes-ui-mcp.mjs'), 'api'],
env: {
HERMES_WEB_UI_URL: 'http://127.0.0.1:8648',
HERMES_WEB_UI_HOME: home,
@@ -233,7 +233,7 @@ describe('coding agent launch preparation', () => {
})
expect(mcp.mcpServers['hermes-studio-devices']).toMatchObject({
command: process.execPath,
args: [join(process.cwd(), 'bin/hermes-studio-mcp.mjs'), 'devices'],
args: [join(process.cwd(), 'bin/hermes-ui-mcp.mjs'), 'devices'],
env: {
HERMES_MCP_SERVER_NAME: 'hermes-studio-devices',
HERMES_MCP_TOOLSET: 'devices',
@@ -241,7 +241,7 @@ describe('coding agent launch preparation', () => {
})
expect(mcp.mcpServers['hermes-studio-use']).toMatchObject({
command: process.execPath,
args: [join(process.cwd(), 'bin/hermes-studio-mcp.mjs'), 'use'],
args: [join(process.cwd(), 'bin/hermes-ui-mcp.mjs'), 'use'],
env: {
HERMES_MCP_SERVER_NAME: 'hermes-studio-use',
HERMES_MCP_TOOLSET: 'use',
@@ -268,7 +268,7 @@ describe('coding agent launch preparation', () => {
const mcp = JSON.parse(readFileSync(join(result.rootDir, 'mcp.json'), 'utf-8'))
expect(mcp.mcpServers['hermes-studio-api']).toMatchObject({
command: '/runtime/node',
args: [join(process.cwd(), 'bin/hermes-studio-mcp.mjs'), 'api'],
args: [join(process.cwd(), 'bin/hermes-ui-mcp.mjs'), 'api'],
env: {
HERMES_WEB_UI_HOME: home,
HERMES_MCP_SERVER_NAME: 'hermes-studio-api',
@@ -544,9 +544,9 @@ describe('coding agent launch preparation', () => {
expect(config).toContain('[mcp_servers.hermes-studio-devices]')
expect(config).toContain('[mcp_servers.hermes-studio-use]')
expect(config).toContain(`command = "${process.execPath}"`)
expect(config).toContain(`args = ["${join(process.cwd(), 'bin/hermes-studio-mcp.mjs')}", "api"]`)
expect(config).toContain(`args = ["${join(process.cwd(), 'bin/hermes-studio-mcp.mjs')}", "devices"]`)
expect(config).toContain(`args = ["${join(process.cwd(), 'bin/hermes-studio-mcp.mjs')}", "use"]`)
expect(config).toContain(`args = ["${join(process.cwd(), 'bin/hermes-ui-mcp.mjs')}", "api"]`)
expect(config).toContain(`args = ["${join(process.cwd(), 'bin/hermes-ui-mcp.mjs')}", "devices"]`)
expect(config).toContain(`args = ["${join(process.cwd(), 'bin/hermes-ui-mcp.mjs')}", "use"]`)
expect(config).toContain(`env = { HERMES_WEB_UI_URL = "http://127.0.0.1:8648", HERMES_WEB_UI_HOME = "${home}"`)
expect(config).toContain('HERMES_WEBUI_STATE_DIR = "')
expect(config).toContain('HERMES_WEB_UI_PROFILE = "default"')