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:
+6
-30
@@ -3,7 +3,7 @@
|
||||
openapi: 3.0.3
|
||||
info:
|
||||
title: Agent Dashboard for Claude Code API
|
||||
version: 2.5.4
|
||||
version: 2.5.5
|
||||
description: HTTP API for real-time Claude Code session monitoring, agent lifecycle tracking, analytics, pricing, hooks ingestion, and workflow intelligence.
|
||||
contact:
|
||||
name: Nguyễn Ngọc Trí Vĩ
|
||||
@@ -4177,9 +4177,9 @@ components:
|
||||
bypass:
|
||||
type: boolean
|
||||
description: Offers the per-run Bypass permissions switch
|
||||
routerCapable:
|
||||
proxyCapable:
|
||||
type: boolean
|
||||
description: Can use an AI Router profile
|
||||
description: Can use an AI Proxy profile
|
||||
install:
|
||||
type: object
|
||||
nullable: true
|
||||
@@ -4564,14 +4564,6 @@ components:
|
||||
env_owned:
|
||||
type: boolean
|
||||
description: 'True when the real environment, or the checkout''s own `.env`, set this variable at startup: either wins over the settings file, so a saved value is overridden again at the next start.'
|
||||
routers:
|
||||
type: object
|
||||
properties:
|
||||
missing:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
description: '`<lane id> (<title>): <profile>` for every lane naming an AI Router profile the new home''s store (`<CLAUDE_HOME>/agenthub-routers/`) does not have — such a lane starts on its base configuration.'
|
||||
WorkflowToolRun:
|
||||
type: object
|
||||
description: 'A Claude Code Workflow-tool run (issue #167): a fleet of sub-agents spawned by the ''Workflow'' tool (or self-paced /loop). These emit no hooks; the source of truth is the on-disk run journal, ingested into the `workflows` table (see server/lib/workflow-ingest.js). Keyed by `run_id` and parented to the launching session. The JSON-blob columns `phases` and `progress` are parsed into arrays before serialization.'
|
||||
@@ -11521,7 +11513,7 @@ paths:
|
||||
'400':
|
||||
description: EBADPATH (incl. a symlink resolving outside the lane), EBADREV or ENOFILE.
|
||||
'403':
|
||||
description: ESECRET — `.claude/settings.local.json` (the AI Router key) is refused at every rev, at any depth, and under any path that resolves to it (a symlinked `.claude`).
|
||||
description: ESECRET — `.claude/settings.local.json` (where an older build kept the AI Proxy key) is refused at every rev, at any depth, and under any path that resolves to it (a symlinked `.claude`).
|
||||
'404':
|
||||
description: Lane not found.
|
||||
/api/lanes/{id}/git/raw:
|
||||
@@ -13028,7 +13020,7 @@ paths:
|
||||
tags:
|
||||
- Settings
|
||||
summary: Get the active Codex home directory
|
||||
description: Returns the Codex home directory (CODEX_HOME, else `<homedir>/.codex`) the dashboard reads Codex config and rollout journals from, writes AI Router layers into, and hands every codex lane pane through tmux `-e`.
|
||||
description: Returns the Codex home directory (CODEX_HOME, else `<homedir>/.codex`) the dashboard reads Codex config and rollout journals from, writes AI Proxy layers into at each spawn, and hands every codex lane pane through tmux `-e`.
|
||||
operationId: getCodexHome
|
||||
responses:
|
||||
'200':
|
||||
@@ -13052,7 +13044,7 @@ paths:
|
||||
tags:
|
||||
- Settings
|
||||
summary: Update the Codex home directory
|
||||
description: Same validation and persistence as PUT /api/settings/claude-home (403 EBADORIGIN from another site, settings file, EBADHOME for a path that is or contains the OS home, INVALID_PATH otherwise). On success it re-writes the AI Router layer (`<name>.config.toml`) of every codex lane on a router into the new home, reported as `routers`, because `codex -p <name>` loads it from there. A codex pane already running keeps its old home until restarted.
|
||||
description: 'Same validation and persistence as PUT /api/settings/claude-home (403 EBADORIGIN from another site, settings file, EBADHOME for a path that is or contains the OS home, INVALID_PATH otherwise). Nothing is re-written here: a session''s AI Proxy layer (`<name>.config.toml`) is written into the current home at its spawn. A codex pane already running keeps its old home until restarted.'
|
||||
operationId: updateCodexHome
|
||||
requestBody:
|
||||
required: true
|
||||
@@ -13078,7 +13070,6 @@ paths:
|
||||
- ok
|
||||
- codex_home
|
||||
- env_owned
|
||||
- routers
|
||||
properties:
|
||||
ok:
|
||||
type: boolean
|
||||
@@ -13088,25 +13079,10 @@ paths:
|
||||
type: string
|
||||
env_owned:
|
||||
type: boolean
|
||||
routers:
|
||||
type: object
|
||||
required:
|
||||
- updated
|
||||
- failed
|
||||
properties:
|
||||
updated:
|
||||
type: integer
|
||||
failed:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
example:
|
||||
ok: true
|
||||
codex_home: /Users/son/.codex-work
|
||||
env_owned: false
|
||||
routers:
|
||||
updated: 1
|
||||
failed: []
|
||||
'400':
|
||||
description: Invalid path (INVALID_PATH) or too broad (EBADHOME).
|
||||
content:
|
||||
|
||||
Reference in New Issue
Block a user