Files
hermes-web-ui/scripts/build-server.mjs
T
ekko 83e37bac02 feat: add outbound relay and MCU login flow (#1580)
* add global agent chat relay

* add model run MCP auth

* avoid codex prompt inflation

* guide codex to use hermes lan tools

* truncate long tool call previews

* write codex MCP env inline

* log codex developer prompt

* remove codex prompt debug logging

* fix codex chat tool history

* log codex chat proxy requests

* write codex proxy debug to server log

* log codex upstream tool requests

* expand codex mcp namespaces for custom providers

* remove codex proxy debug logging

* add hermes mcp openapi relay

* fix: improve mcp docs and chat run cleanup

* feat: add mcu relay login flow

* fix ci test expectations

* fix group chat deeplink e2e expectation

---------

Co-authored-by: Codex <codex@openai.com>
2026-06-16 09:16:26 +08:00

53 lines
1.6 KiB
JavaScript

import * as esbuild from 'esbuild'
import { resolve, dirname } from 'path'
import { fileURLToPath } from 'url'
import { chmodSync, cpSync, mkdirSync, readdirSync, readFileSync, rmSync } from 'fs'
const rootDir = resolve(dirname(fileURLToPath(import.meta.url)), '..')
const pkg = JSON.parse(readFileSync(resolve(rootDir, 'package.json'), 'utf-8'))
const version = pkg.version
const serverOutDir = resolve(rootDir, 'dist/server')
rmSync(serverOutDir, { recursive: true, force: true })
mkdirSync(serverOutDir, { recursive: true })
await esbuild.build({
entryPoints: [resolve(rootDir, 'packages/server/src/index.ts')],
bundle: true,
platform: 'node',
target: 'node23',
format: 'cjs',
outfile: resolve(serverOutDir, 'index.js'),
external: ['node-pty', 'node:sqlite', 'socket.io'],
define: {
__APP_VERSION__: JSON.stringify(version),
},
sourcemap: true,
minify: true,
treeShaking: true,
logLevel: 'info',
})
const bridgeOutDir = resolve(serverOutDir, 'agent-bridge', 'python')
const bridgeSrcDir = resolve(rootDir, 'packages/server/src/services/hermes/agent-bridge/python')
mkdirSync(bridgeOutDir, { recursive: true })
for (const fileName of readdirSync(bridgeSrcDir)) {
if (fileName.endsWith('.py')) {
cpSync(resolve(bridgeSrcDir, fileName), resolve(bridgeOutDir, fileName))
}
}
chmodSync(resolve(bridgeOutDir, 'hermes_bridge.py'), 0o755)
cpSync(
resolve(rootDir, 'docs/openapi.json'),
resolve(serverOutDir, 'openapi.json'),
)
const skillsOutDir = resolve(rootDir, 'dist/skills')
rmSync(skillsOutDir, { recursive: true, force: true })
cpSync(
resolve(rootDir, 'packages/skills'),
skillsOutDir,
{ recursive: true },
)