Skip to content

feat: 支持多行输入、API Key 环境变量覆盖和七牛云 Provider#84

Closed
wynxing wants to merge 12 commits into
1024XEngineer:mainfrom
wynxing:main
Closed

feat: 支持多行输入、API Key 环境变量覆盖和七牛云 Provider#84
wynxing wants to merge 12 commits into
1024XEngineer:mainfrom
wynxing:main

Conversation

@wynxing

@wynxing wynxing commented Mar 30, 2026

Copy link
Copy Markdown
Collaborator

变更概览

这个 PR 主要围绕 NeoCode MVP 的可用性和配置体验做了一轮增强,包含三部分:

  1. 优化 TUI 交互,支持多行输入和更好的代码块阅读/复制体验
  2. 增加全局 API Key 环境变量覆盖能力,降低多 Provider/多密钥场景下的切换成本
  3. 新增七牛云 OpenAI-compatible Provider,并同步补全文档与测试

主要改动

1. TUI 交互增强

  • 支持多行输入框,输入区域会根据内容自动扩展
  • 发送快捷键调整为 Ctrl+J,为多行输入让出 Enter
  • 新增代码块分段渲染能力
  • 支持通过鼠标点击代码块上的复制区域直接复制内容(目前仍有问题)
  • Transcript 区域增加鼠标滚轮和点击处理
  • 补充 /apikey Slash Command,用于设置当前运行时优先读取的 API Key 环境变量名
  • 调整部分状态文案、帮助文案和快捷键展示

2. 配置与 Provider 能力增强

  • 在顶层配置中新增 api_key_env_override
  • 支持将 api_key_env_override 持久化到 config.yaml
  • 对 override 值增加格式校验,禁止空白符和 =
  • 新增 EffectiveSelectedProviderConfig / WithAPIKeyEnvOverride 等逻辑,统一在配置层收敛 API Key 环境变量覆盖
  • Provider Service 增加设置全局 API Key 环境变量 override 的入口
  • 切换 Provider / Model 后仍能保持 override 配置

3. 新增七牛云 Provider

  • 新增内建 Provider qiniuyun
  • 复用 OpenAI-compatible driver
  • 默认读取环境变量 QINIUYUN_API_KEY
  • 预置模型包括:
    • z-ai/glm-5
    • minimax/minimax-m2.5
    • moonshotai/kimi-k2.5
    • deepseek/deepseek-v3.2-251201

4. 文档更新

  • 重写 README,按 MVP 主链路和模块边界重新组织说明
  • README 补充 /apikeyapi_key_env_overrideqiniuyun 的使用说明
  • 更新配置设计文档,补充 override 策略和新增 Provider 说明
  • 清理 README 中遗留的冲突标记

测试变更

  • 补充和更新了 config 相关测试:
    • override 持久化与 round-trip
    • override 校验
    • override 生效逻辑
  • 补充 qiniuyun Provider 测试
  • 补充 Provider Service 对 override 持久化与切换行为的测试
  • 更新 TUI 相关测试以覆盖新增交互能力

影响说明

  • TUI 发送快捷键从原来的 Enter/Ctrl+S 调整为 Ctrl+J
  • 配置文件新增可选字段 api_key_env_override
  • 新增一个内建 Provider:qiniuyun

后续关注点

  • 建议重点回归验证多行输入场景下的发送体验
  • 建议验证不同 Provider 切换时 api_key_env_override 的实际读取行为
  • 建议确认鼠标复制代码块在不同终端环境下的兼容性

@codecov

codecov Bot commented Mar 30, 2026

Copy link
Copy Markdown

@wynxing wynxing closed this Mar 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant