File size: 4,394 Bytes
1f21206 4e7af9b 92e96ba 1f21206 4e7af9b 92e96ba 1f21206 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 | /**
* API Router — 将请求路由到对应的 API handler
*/
import { handleSessionsApi } from './api/sessions.js'
import { handleSettingsApi } from './api/settings.js'
import { handleModelsApi } from './api/models.js'
import { handleScheduledTasksApi } from './api/scheduled-tasks.js'
import { handleSearchApi } from './api/search.js'
import { handleAgentsApi } from './api/agents.js'
import { handleStatusApi } from './api/status.js'
import { handleConversationsApi } from './api/conversations.js'
import { handleTeamsApi } from './api/teams.js'
import { handleFilesystemRoute } from './api/filesystem.js'
import { handleProvidersApi } from './api/providers.js'
import { handleAdaptersApi } from './api/adapters.js'
import { handlePluginsApi } from './api/plugins.js'
import { handleSkillsApi } from './api/skills.js'
import { handleComputerUseApi } from './api/computer-use.js'
import { handleHahaOAuthApi } from './api/haha-oauth.js'
import { handleHahaOpenAIOAuthApi } from './api/haha-openai-oauth.js'
import { handleMcpApi } from './api/mcp.js'
import { handleDiagnosticsApi } from './api/diagnostics.js'
import { handleDoctorApi } from './api/doctor.js'
import { handleH5AccessApi } from './api/h5-access.js'
import { handleActivityStatsApi } from './api/activityStats.js'
import { handleOpenTargetsApi } from './api/open-targets.js'
import { handleMemoryApi } from './api/memory.js'
import { handleDesktopUiApi } from './api/desktop-ui.js'
import { handleCliAuthApi } from './api/cli-auth.js'
import { handleCliProxyApi } from './api/cli-proxy.js'
export async function handleApiRequest(req: Request, url: URL): Promise<Response> {
const path = url.pathname
const segments = path.split('/').filter(Boolean) // ['api', 'sessions', ...]
// Route to appropriate handler based on the second segment
const resource = segments[1]
switch (resource) {
case 'sessions': {
// Route /api/sessions/:id/chat/* to conversations handler
const subResource = segments[3]
if (subResource === 'chat') {
return handleConversationsApi(req, url, segments)
}
return handleSessionsApi(req, url, segments)
}
case 'conversations':
return handleConversationsApi(req, url, segments)
case 'settings':
return handleSettingsApi(req, url, segments)
case 'models':
case 'effort':
return handleModelsApi(req, url, segments)
case 'permissions':
return handleSettingsApi(req, url, segments) // permissions under settings
case 'scheduled-tasks':
return handleScheduledTasksApi(req, url, segments)
case 'search':
return handleSearchApi(req, url, segments)
case 'agents':
case 'tasks':
return handleAgentsApi(req, url, segments)
case 'status':
return handleStatusApi(req, url, segments)
case 'teams':
return handleTeamsApi(req, url, segments)
case 'providers':
return handleProvidersApi(req, url, segments)
case 'haha-oauth':
return handleHahaOAuthApi(req, url, segments)
case 'haha-openai-oauth':
return handleHahaOpenAIOAuthApi(req, url, segments)
case 'adapters':
return handleAdaptersApi(req, url, segments)
case 'skills':
return handleSkillsApi(req, url, segments)
case 'mcp':
return handleMcpApi(req, url, segments)
case 'plugins':
return handlePluginsApi(req, url, segments)
case 'computer-use':
return handleComputerUseApi(req, url, segments)
case 'diagnostics':
return handleDiagnosticsApi(req, url, segments)
case 'doctor':
return handleDoctorApi(req, url, segments)
case 'h5-access':
return handleH5AccessApi(req, url, segments)
case 'activity-stats':
return handleActivityStatsApi(req, url, segments)
case 'open-targets':
return handleOpenTargetsApi(req, url, segments)
case 'memory':
return handleMemoryApi(req, url, segments)
case 'desktop-ui':
return handleDesktopUiApi(req, url, segments)
case 'cli-auth':
return handleCliAuthApi(req, url, segments)
case 'cli-proxy':
return handleCliProxyApi(req, url, segments)
case 'filesystem':
return handleFilesystemRoute(url.pathname, url)
default:
return Response.json(
{ error: 'Not Found', message: `Unknown API resource: ${resource}` },
{ status: 404 }
)
}
}
|