import { Router } from 'express'; import { agentOrOwner } from './middleware/agent_auth.js'; import { errorMiddleware, NotFoundError } from './errors.js'; import { router as spacesRouter } from './routes/spaces.js'; import { router as projectsRouter, spacesScopedRouter as projectsBySpaceRouter } from './routes/projects.js'; import { router as tasksRouter, spacesScopedRouter as tasksBySpaceRouter, projectsScopedRouter as tasksByProjectRouter } from './routes/tasks.js'; import { router as pagesRouter, spacesScopedRouter as pagesBySpaceRouter } from './routes/pages.js'; import { router as refsRouter } from './routes/refs.js'; import { router as resourcesRouter, spacesScopedRouter as resourcesBySpaceRouter } from './routes/resources.js'; import { router as sourceDocsRouter, resourcesScopedRouter as sourceDocsByResourceRouter } from './routes/source_docs.js'; import { router as agentsRouter, tokensRouter as agentTokensRouter } from './routes/agents.js'; import { router as conversationsRouter } from './routes/conversations.js'; import { conversationsScopedRouter as messagesByConvRouter } from './routes/messages.js'; import { router as tagsRouter, entityScopedRouter as tagsByEntityRouter } from './routes/tags.js'; import { router as linksRouter } from './routes/links.js'; import { router as pendingChangesRouter } from './routes/pending_changes.js'; import { router as auditRouter } from './routes/audit.js'; import { router as searchRouter } from './routes/search.js'; import { router as jobsRouter } from './routes/jobs.js'; import { router as captureRouter } from './routes/capture.js'; import { spacesScopedRouter as companionRouter } from './routes/companion.js'; import { router as dashboardRouter } from './routes/dashboard.js'; import { router as weatherRouter } from './routes/weather.js'; import { router as hostRouter } from './routes/host.js'; import { router as speedtestRouter } from './routes/speedtest.js'; import { router as healthRouter } from './routes/health.js'; import { router as securityRouter } from './routes/security.js'; import { router as actionsRouter } from './routes/actions.js'; import { router as littleblueRouter } from './routes/littleblue.js'; import { router as aiUsageRouter } from './routes/ai_usage.js'; import { router as infraRouter } from './routes/infra.js'; import { router as clusterRouter } from './routes/cluster.js'; import { router as storageRouter } from './routes/storage.js'; import { router as backupsRouter } from './routes/backups.js'; import { router as kuttRouter } from './routes/kutt.js'; import { router as themeRouter } from './routes/theme.js'; import { router as drossRouter } from './routes/dross.js'; import { router as voiceRouter } from './routes/voice.js'; import { router as improvementsRouter, cssHandler } from './routes/improvements.js'; export function mountApi(app) { const api = Router(); api.use(agentOrOwner); api.use('/spaces', spacesRouter); api.use('/spaces/:space_id/projects', projectsBySpaceRouter); api.use('/spaces/:space_id/tasks', tasksBySpaceRouter); api.use('/spaces/:space_id/pages', pagesBySpaceRouter); api.use('/spaces/:space_id/resources', resourcesBySpaceRouter); api.use('/spaces/:space_id/companion', companionRouter); api.use('/security', securityRouter); api.use('/actions', actionsRouter); api.use('/infra', infraRouter); api.use('/cluster', clusterRouter); api.use('/storage', storageRouter); api.use('/backups', backupsRouter); api.use('/little-blue', littleblueRouter); api.use('/ai-usage', aiUsageRouter); api.use('/projects', projectsRouter); api.use('/projects/:project_id/tasks', tasksByProjectRouter); api.use('/tasks', tasksRouter); api.use('/pages', pagesRouter); api.use('/refs', refsRouter); api.use('/resources', resourcesRouter); api.use('/resources/:resource_id/source-docs', sourceDocsByResourceRouter); api.use('/source-docs', sourceDocsRouter); api.use('/agents', agentsRouter); api.use('/agent-tokens', agentTokensRouter); api.use('/conversations', conversationsRouter); api.use('/conversations/:conversation_id/messages', messagesByConvRouter); api.use('/tags', tagsRouter); api.use('/links', linksRouter); api.use('/kutt', kuttRouter); api.use('/theme', themeRouter); api.use('/dross', drossRouter); api.use('/improvements', improvementsRouter); api.use('/voice', voiceRouter); api.use('/pending-changes', pendingChangesRouter); api.use('/audit', auditRouter); api.use('/search', searchRouter); api.use('/jobs', jobsRouter); api.use('/capture', captureRouter); api.use('/dashboard', dashboardRouter); api.use('/weather', weatherRouter); api.use('/host', hostRouter); api.use('/speedtest', speedtestRouter); api.use('/health', healthRouter); api.use('/:entity_type/:entity_id/tags', tagsByEntityRouter); api.use((_req, _res, next) => next(new NotFoundError('route not found'))); api.use(errorMiddleware); app.get('/improvements.css', cssHandler); // public, exfil-safe (see route file) app.use('/api', api); return api; }