src_v2/server/gateway.ts中synthesizeSpeechDoubao已修复为 V3 streaming API- 响应格式是 NDJSON(每行一个 JSON,data 字段是 base64),需要解码拼接
- 修复:
Buffer.from(json.data, 'base64')拼接所有 chunks
voice_settings.json中voice_system_prompt字段opencodex-bar/Sources/OpenCodexBar/AppDelegate.swift的ask()函数中注入- 格式:
system_prompt + "\n\n用户说:" + user_message - 已验证生效(bar 日志有
[Prompt] System prompt loaded)
GET /api/sessions- 会话列表(扫描 ~/.codex/sessions/ 目录)GET /api/sessions/:id- 对话详情(解析 rollout JSONL)DELETE /api/sessions/:id- 删除会话POST /api/sessions/:id/archive- 归档POST /api/sessions/:id/unarchive- 取消归档POST /api/sessions/activate- 激活会话(WebSocket 通知 bar)
- Tab 切换:网关管理 / 会话管理
- 左边:API 密钥配置(模型名 + URL + Key)+ 添加按钮
- 右边:已配置模型下拉列表
- 语音设置:STT/TTS/VAD/System Prompt
- 会话列表:实时更新,点击查看详情,删除有二次确认
- 保存后 localStorage 记住当前 tab
GET /api/sessions- 扫描 ~/.codex/sessions/ 目录返回列表GET /api/sessions/:id- 解析 rollout JSONL 返回对话记录DELETE /api/sessions/:id- 删除 rollout 文件和索引POST /api/sessions/:id/archive- 调用 codex archivePOST /api/sessions/:id/unarchive- 调用 codex unarchivePOST /api/sessions/activate- WebSocket 通知 bar 切换会话GET /api/settings/POST /api/settings- 配置读写
- 服务端
POST /api/sessions/activate能正确发送activate_session消息 - Bar 的
WebSocketManager.swift已添加onActivateSession回调 AppDelegate.swift的applicationDidFinishLaunching已设置回调- 问题:服务端发给了 1 个客户端,但 bar 没收到消息。可能是 bar 的 WebSocket 连接在 listening 时才建立,或者
handleMessage的 switch case 有问题 - 需要调试:bar 的 WebSocket 连接时机 + 消息接收
- API 配置区域的紧凑项显示逻辑需要优化
- 保存后 compact 项和输入框的切换逻辑
- 模型下拉列表的更新时机
findProvider函数逻辑可能需要改进- 讯飞 API 需要 HMAC 认证(当前只支持 Bearer token)
~/.opencodex/voice_settings.json- 语音配置(含 system prompt)~/.opencodex/providers.json- API provider 配置~/.opencodex/custom_model_catalog.json- 模型目录~/.codex/sessions/- 会话 rollout 文件~/.codex/session_index.jsonl- 会话索引