feat: v2.5.5 — AI Router renamed AI Proxy, reload onto new builds, update no longer spins
AI Proxy (was AI Router): - server/lib/ai-proxies.js, proxy-apply.js, routes/ai-proxies.js mounted at /api/ai-proxies and the old /api/ai-routers; `router` still accepted on the start routes; profiles move to <CLAUDE_HOME>/agenthub-proxies/ - dashboard_runs.router renamed in place to proxy: an older build on the same DB fails on that column, so dev and prod sharing one DB update together - a proxy's baseUrl stored as its root (a typed /v1 made /v1/v1/messages); Test probes Claude /v1/messages and Codex /v1/responses - Settings → AI Proxy (/settings/ai-router redirects), ProxyPicker Updates: - every tab reloads onto the new UI build when its WebSocket reconnects to a server of another version (lib/newBuildReload.ts, once per version) - Update now stops waiting on a plugin chain that failed or pulled nothing (the old server never goes down), and reloads as soon as a new version answers Also: - a pane whose command exits at once says so (EPANEEXITED) instead of "Command failed: tmux set-option … mouse on" - the pane drag preview draws where the pane actually lands
This commit is contained in:
+14
-6
@@ -648,7 +648,9 @@ try {
|
||||
} catch {
|
||||
db.prepare("ALTER TABLE dashboard_runs ADD COLUMN tool TEXT NOT NULL DEFAULT 'claude'").run();
|
||||
}
|
||||
// Which AI Router profile this lane runs against (see server/lib/ai-routers.js).
|
||||
// Which AI Proxy (then called AI Router) profile this lane ran against. Legacy:
|
||||
// a proxy is a session's choice now, and proxy-apply.js's clearLaneProxies
|
||||
// empties this column at every start.
|
||||
// Nullable, and null means the same thing as 'native': the vendor's own API.
|
||||
// Set at creation only — like `tool`, it is absent from lanes.js's PATCHABLE,
|
||||
// because the router is already written into the lane's config on disk and a
|
||||
@@ -687,13 +689,19 @@ try {
|
||||
db.prepare("ALTER TABLE dashboard_runs ADD COLUMN worktree INTEGER NOT NULL DEFAULT 0").run();
|
||||
}
|
||||
|
||||
// Migrate: add `router` to dashboard_runs — the AI Router profile the run was
|
||||
// started on (NULL = native). A router is chosen per session now, and a resume
|
||||
// that does not name one goes back to the router its session last ran on.
|
||||
// Migrate: add `proxy` to dashboard_runs — the AI Proxy profile the run was
|
||||
// started on (NULL = native). A proxy is chosen per session, and a resume that
|
||||
// does not name one goes back to the proxy its session last ran on. The column
|
||||
// was `router` before the AI Router → AI Proxy rename; it is renamed in place.
|
||||
try {
|
||||
db.prepare("SELECT router FROM dashboard_runs LIMIT 1").get();
|
||||
db.prepare("SELECT proxy FROM dashboard_runs LIMIT 1").get();
|
||||
} catch {
|
||||
db.prepare("ALTER TABLE dashboard_runs ADD COLUMN router TEXT").run();
|
||||
try {
|
||||
db.prepare("SELECT router FROM dashboard_runs LIMIT 1").get();
|
||||
db.prepare("ALTER TABLE dashboard_runs RENAME COLUMN router TO proxy").run();
|
||||
} catch {
|
||||
db.prepare("ALTER TABLE dashboard_runs ADD COLUMN proxy TEXT").run();
|
||||
}
|
||||
}
|
||||
|
||||
// Migrate: add stage-detection columns to lanes. Inference is never evidence —
|
||||
|
||||
Reference in New Issue
Block a user