feat(headroom): add proxy lifecycle management + dashboard UI
Build on the optional Headroom Token Saver from Carmelo Campos
(PR: feat: add optional Headroom token saver). Add managed start/stop
of the local headroom proxy from the dashboard, install detection,
status probing, and a simplified Token Saver UI.
- detect headroom CLI + python>=3.10, probe proxy /health
- spawn/stop proxy as a detached, pid-tracked process
- /api/headroom/{status,start,stop} routes, gated local-only in dashboardGuard
- one-click Start/Stop Headroom modal, no manual config needed
- claude<->openai shape conversion for /v1/compress via 9router translators
Thanks to Carmelo Campos (@carmelogunsroses) for the original Headroom integration.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -136,6 +136,16 @@ export function getTargetFormat(provider) {
|
||||
return config.format || "openai";
|
||||
}
|
||||
|
||||
// Resolve which transport to use for a provider given the client sourceFormat.
|
||||
// Multi-endpoint providers (transport.transports[]) pick the entry matching sourceFormat
|
||||
// to avoid lossy translation; falls back to the default transport when no match.
|
||||
export function resolveTransport(provider, sourceFormat) {
|
||||
const config = PROVIDERS[provider];
|
||||
const transports = config?.transports;
|
||||
if (!Array.isArray(transports) || !transports.length) return null;
|
||||
return transports.find(t => t.format === sourceFormat) || null;
|
||||
}
|
||||
|
||||
// Check if last message is from user
|
||||
export function isLastMessageFromUser(body) {
|
||||
const messages = body.messages || body.contents;
|
||||
|
||||
Reference in New Issue
Block a user