feat: add Hermes integration panel to Settings → Integrations
Server-side: - New hermes-integration module (runtime.js + routes.js + tests) exposing GET /api/openchamber/hermes/status - Reports availability of agent-activity, session-steer, and plan-gate runtimes plus plan-gate default config - Wired into feature-routes-runtime.js alongside existing integrations UI: - New HermesIntegration.tsx collapsible panel in Integrations page - Connection status indicator (green/red dot) with 30s polling - Plan gate default toggle (persists via updateDesktopSettings + recordDeferredOpenCodeRestart) - Read-only status rows for activity stream, steer channel, plan gate - Server version and uptime display Settings: - hermesPlanGateDefault field in settings registry and useUIStore - Search index entry with keywords: hermes, agent, integration, etc. - i18n keys for all 12 locales (English text as fallback) Verification: - Server tests: 7/7 passed (runtime + routes) - UI tests: 4/4 passed (HermesIntegration.test.tsx) - Typecheck: clean (no new errors) - oxlint: clean on all new/modified files
This commit is contained in:
@@ -95,6 +95,7 @@ import { createMessageQueueRuntime } from './lib/message-queue/runtime.js';
|
||||
import { createAgentActivityRuntime, registerAgentActivityRoutes } from './lib/agent-activity/runtime.js';
|
||||
import { createSessionSteerRuntime, registerSessionSteerRoutes } from './lib/session-steer/runtime.js';
|
||||
import { createPlanGateRuntime, registerPlanGateRoutes } from './lib/plan-gate/runtime.js';
|
||||
import { createHermesIntegrationRuntime } from './lib/hermes-integration/runtime.js';
|
||||
import { createGracefulShutdownRuntime } from './lib/opencode/shutdown-runtime.js';
|
||||
import { createProjectConfigRuntime } from './lib/projects/project-config.js';
|
||||
import { migrateLegacyUserDirs } from './lib/data-dir-migration.js';
|
||||
@@ -951,6 +952,14 @@ const planGateRuntime = createPlanGateRuntime({
|
||||
});
|
||||
planGateRuntime.start();
|
||||
|
||||
const hermesIntegrationRuntime = createHermesIntegrationRuntime({
|
||||
agentActivityRuntime,
|
||||
sessionSteerRuntime,
|
||||
planGateRuntime,
|
||||
readSettingsFromDiskMigrated,
|
||||
startedAt: () => Date.now() - (Date.now() - process.uptime() * 1000),
|
||||
});
|
||||
|
||||
const openCodeWatcherRuntime = createOpenCodeWatcherRuntime({
|
||||
waitForOpenCodePort: (...args) => waitForOpenCodePort(...args),
|
||||
buildOpenCodeUrl,
|
||||
@@ -2013,6 +2022,7 @@ async function main(options = {}) {
|
||||
agentActivityRuntime,
|
||||
sessionSteerRuntime,
|
||||
planGateRuntime,
|
||||
hermesIntegrationRuntime,
|
||||
});
|
||||
|
||||
const startupPipelineResult = await startupPipelineRuntime.run({
|
||||
|
||||
Reference in New Issue
Block a user