- 表单下拉框不再用 label 包裹,改为 div + aria-label,避免点击后 下拉面板瞬间关闭 - Provider 卡片新增「从上游获取模型」和「修改」入口,支持编辑 base URL、API Key 与 api_mode,凭据写入对应的环境变量 - 服务端抽出 provider-model-discovery 统一不同 api_mode 的模型发现, 旧的 custom_providers 与新的 providers 字典结构都能正确更新 - Agent Bridge 改为后台启动,HTTP 接口在 Python 运行时就绪前即可用; worker 连接被拒时按类型重试,不重放可能已产生副作用的请求 - 断线重连后恢复 profiles、models 与会话列表,健康检查改为自调度 的 setTimeout,离线时 2 秒后重试 - 批量删除确认文案改用 Popconfirm content,避免变成侧栏触发器文本
1.4 KiB
date, feature, impact
| date | feature | impact |
|---|---|---|
| 2026-10-22 | HTTP startup and session reload after backend restart | Keep session APIs available during bridge startup and recover failed initial loads |
PR/commit: pending.
The HTTP listener, Web UI stores, routes and Socket.IO handlers are initialized before starting the managed Agent Bridge in the background. Bridge readiness continues to be checked by the existing chat handlers; the chat-run protocol is unchanged. The bridge manager is registered with shutdown before starting it.
A failed session-list request no longer marks the list loaded or discards a route-selected session. Offline health polling retries after two seconds; reconnection reloads profiles, models and sessions. An already loaded session list retains its state on request failure. Chat, global-agent and history views handle reconnection. Batch-delete confirmation text uses Popconfirm content rather than becoming part of the sidebar trigger.
Validation: app-store and session-order Vitest coverage; Playwright startup recovery (base route and direct session route), deletion confirmation and history deep links; build and harness checks. A real isolated built-server smoke check used a fake Python executable sleeping for 60 seconds and confirmed /health responded with status=ok before the bridge became ready. State, uploads and bridge endpoint were isolated under a temporary directory.