| "use server"; | |
| import { NextResponse } from "next/server"; | |
| import { GET as claudeGet } from "../claude-settings/route"; | |
| import { GET as codexGet } from "../codex-settings/route"; | |
| import { GET as opencodeGet } from "../opencode-settings/route"; | |
| import { GET as droidGet } from "../droid-settings/route"; | |
| import { GET as openclawGet } from "../openclaw-settings/route"; | |
| import { GET as hermesGet } from "../hermes-settings/route"; | |
| import { GET as coworkGet } from "../cowork-settings/route"; | |
| import { GET as copilotGet } from "../copilot-settings/route"; | |
| import { GET as clineGet } from "../cline-settings/route"; | |
| import { GET as kiloGet } from "../kilo-settings/route"; | |
| import { GET as deepseekTuiGet } from "../deepseek-tui-settings/route"; | |
| import { GET as jcodeGet } from "../jcode-settings/route"; | |
| const STATUS_GETTERS = { | |
| claude: claudeGet, | |
| codex: codexGet, | |
| opencode: opencodeGet, | |
| droid: droidGet, | |
| openclaw: openclawGet, | |
| hermes: hermesGet, | |
| cowork: coworkGet, | |
| copilot: copilotGet, | |
| cline: clineGet, | |
| kilo: kiloGet, | |
| "deepseek-tui": deepseekTuiGet, | |
| jcode: jcodeGet, | |
| }; | |
| // Batch endpoint: gather all CLI tool statuses in one round-trip | |
| export async function GET() { | |
| const entries = await Promise.all( | |
| Object.entries(STATUS_GETTERS).map(async ([toolId, getter]) => { | |
| try { | |
| const res = await getter(); | |
| const data = await res.json(); | |
| return [toolId, data]; | |
| } catch { | |
| return [toolId, null]; | |
| } | |
| }) | |
| ); | |
| return NextResponse.json(Object.fromEntries(entries)); | |
| } | |