harness uniformization

This commit is contained in:
2026-02-17 20:37:40 +00:00
parent 74e98e95e1
commit 3733e99ba8
17 changed files with 338 additions and 356 deletions
+7 -29
View File
@@ -3,22 +3,21 @@ import { cors } from 'hono/cors';
import { createRouter } from './create-router';
import type { HonoVariables } from './create-router';
import { authRouter } from './api/auth';
import { serverSettingsRouter, settingsPath } from './api/server-settings/server-settings';
import { serverSettingsRouter } from './api/server-settings/server-settings';
import { landingPageDataRouter } from './api/landing-page-data/landing-page-data';
import { updateUserHandler } from './api/users/update-user';
import { plansRouter } from './api/plans/plans';
import { skillsRouter } from './api/skills/skills';
import { tasksRouter } from './api/tasks/tasks';
import { processesRouter } from './api/processes/processes';
import { sessionsRouter } from './api/claude/sessions';
import { opencodeSessionsRouter } from './api/opencode/sessions';
import { claudeModelsRouter } from './api/claude/sessions';
import { opencodeModelsRouter } from './api/opencode/sessions';
import { sessionsRouter } from './api/sessions/sessions';
import { scrapeRouter } from './api/scrape/scrape';
import { uploadRouter } from './api/upload/upload';
import { settingsRouter } from './api/settings/settings';
import { taskLogsRouter } from './api/task-logs/task-logs';
import { router as fileBrowserRouter } from './api/file-browser/router';
import { readdirSync, existsSync } from 'node:fs';
import { join } from 'node:path';
import { CustomError } from './custom-errors';
import { userMiddleware, bodyParser } from './_middlewares';
@@ -51,36 +50,15 @@ protectedRouter.route('/skills', skillsRouter);
protectedRouter.route('/tasks', tasksRouter);
protectedRouter.route('/processes', processesRouter);
protectedRouter.route('/', sessionsRouter);
protectedRouter.route('/opencode', opencodeSessionsRouter);
protectedRouter.route('/', claudeModelsRouter);
protectedRouter.route('/', opencodeModelsRouter);
protectedRouter.route('/scrape', scrapeRouter);
protectedRouter.route('/upload', uploadRouter);
protectedRouter.route('/user', settingsRouter);
protectedRouter.route('/task-logs', taskLogsRouter);
protectedRouter.route('/file-browser', fileBrowserRouter);
// Auto-discover and mount plugin routers, then mount the protected router.
// Hono's .route() copies routes at call time, so plugins must be loaded first.
export async function loadPlugins() {
const pluginsDir = join(import.meta.dir, '../workspaces/plugins');
const pluginDirs = readdirSync(pluginsDir, { withFileTypes: true }).filter((d) => d.isDirectory());
const settings = await Bun.file(settingsPath)
.json()
.catch(() => ({}));
const pluginSettings: Record<string, boolean> = settings.plugins ?? {};
for (const dir of pluginDirs) {
if (pluginSettings[dir.name] === false) continue;
const serverIndex = join(pluginsDir, dir.name, 'server', 'index.ts');
if (!existsSync(serverIndex)) continue;
const mod = await import(serverIndex);
if (mod.router && mod.apiPath) {
protectedRouter.route(mod.apiPath, mod.router);
}
}
honoServer.route('/api', protectedRouter);
}
honoServer.route('/api', protectedRouter);
honoServer.onError((error, ctx) => {
if (error instanceof CustomError) {