Fix bridge history, profile models, and Windows gateway handling (#845)
* feat: support profile-aware group chat bridge flows * feat: route cron jobs through hermes cli * Fix group chat routing and isolate bridge tests * Add Grok image-to-video media skill * Default Grok videos to media directory * Fix bridge profile fallback and cron repeat clearing * Refine bridge chat and gateway platform handling * Filter bridge tool-call text deltas * Preserve structured bridge chat history * Prepare beta release build artifacts * Fix Windows run profile resolution * Fix Windows path compatibility checks * Fix profile-scoped model page display * Hide Windows subprocess windows for jobs and updates * Hide Windows file backend subprocess windows * Avoid Windows gateway restart lock conflicts * Treat Windows gateway lock as running on startup * Force release Windows gateway lock on restart * Tighten Windows gateway lock cleanup * Update chat e2e source expectation * Bump package version to 0.5.30 --------- Co-authored-by: Codex <codex@openai.com>
This commit is contained in:
@@ -1,31 +1,5 @@
|
||||
import { logger } from './logger'
|
||||
import { closeDb } from '../db'
|
||||
import { getGatewayManagerInstance } from './gateway-bootstrap'
|
||||
|
||||
function shouldStopGatewaysOnShutdown(signal: string): boolean {
|
||||
// nodemon may use SIGTERM on Windows restarts, so dev mode opts out via env.
|
||||
// Production keeps stopping owned gateways by default.
|
||||
const override = process.env.HERMES_WEB_UI_STOP_GATEWAYS_ON_SHUTDOWN?.trim()
|
||||
|
||||
console.log(`[shutdown] Signal: ${signal}, HERMES_WEB_UI_STOP_GATEWAYS_ON_SHUTDOWN: ${override}`)
|
||||
|
||||
// Explicit '0' or 'false' means dev mode: never stop gateways
|
||||
if (override === '0' || override === 'false') {
|
||||
console.log('[shutdown] Dev mode detected: NOT stopping gateways')
|
||||
return false
|
||||
}
|
||||
|
||||
// Explicit '1' or 'true' means always stop gateways
|
||||
if (override === '1' || override === 'true') {
|
||||
console.log('[shutdown] Explicit gateway shutdown enabled: stopping gateways')
|
||||
return true
|
||||
}
|
||||
|
||||
// Default behavior: only stop gateways on explicit termination, not on reload
|
||||
const shouldStop = signal !== 'SIGUSR2'
|
||||
console.log(`[shutdown] Default behavior: ${shouldStop ? 'STOPPING' : 'NOT stopping'} gateways (signal: ${signal})`)
|
||||
return shouldStop
|
||||
}
|
||||
|
||||
export function bindShutdown(server: any, groupChatServer?: any, chatRunServer?: any, agentBridgeManager?: any): void {
|
||||
let isShuttingDown = false
|
||||
@@ -39,25 +13,8 @@ export function bindShutdown(server: any, groupChatServer?: any, chatRunServer?:
|
||||
|
||||
logger.info('Shutting down (%s)...', signal)
|
||||
console.log(`[shutdown] Received signal: ${signal}`)
|
||||
console.log(`[shutdown] HERMES_WEB_UI_STOP_GATEWAYS_ON_SHUTDOWN = ${process.env.HERMES_WEB_UI_STOP_GATEWAYS_ON_SHUTDOWN}`)
|
||||
console.log(`[shutdown] shouldStopGatewaysOnShutdown = ${shouldStopGatewaysOnShutdown(signal)}`)
|
||||
|
||||
try {
|
||||
if (shouldStopGatewaysOnShutdown(signal)) {
|
||||
// Stop gateway processes owned by this Web UI instance first.
|
||||
try {
|
||||
const gatewayManager = getGatewayManagerInstance()
|
||||
if (gatewayManager) {
|
||||
await gatewayManager.stopAll()
|
||||
logger.info('All gateways stopped')
|
||||
}
|
||||
} catch (err) {
|
||||
logger.warn(err, 'Failed to stop gateways (non-fatal)')
|
||||
}
|
||||
} else {
|
||||
logger.info('Skipping gateway shutdown for %s', signal)
|
||||
}
|
||||
|
||||
if (agentBridgeManager) {
|
||||
try {
|
||||
await agentBridgeManager.stop()
|
||||
|
||||
Reference in New Issue
Block a user