Skip to content

dsh-code 0.8.0

Choose a tag to compare

@UNLINEARITY UNLINEARITY released this 17 Aug 02:56
· 13 commits to main since this release

dsh-code 发布说明 - 0.8.0

概览

0.8.0 将 Provider 配置升级为一等终端工作流,并增强 dsh-code 在长时间会话中的可靠性。DeepSeek API key 不再被列为启动前置条件,/model 可通过 Harness 管理 Provider 凭据,会话前的 /mode/permission 控制随全新状态栏一并落地,GFM 表格和多行 reasoning 获得清晰排版,大型持久转录也能以近线性的工作量恢复。流式可靠性修复消除了重思考模型上的嵌套更新警告刷屏;会话切换、输入历史持久化、终端文本边界和已定稿历史渲染同时得到针对性修复。

新功能

Provider 与凭据管理

  • DEEPSEEK_API_KEY 不再被文档列为启动前置条件。Harness 既有的无 Key 路径继续支持打开 TUI、检查或恢复会话、使用非模型功能并浏览模型目录;只有实际发起推理时才会因缺少凭据失败,并直接提示打开 /model
  • /model 中按 a 可打开 Provider 面板。它支持遮蔽输入的 API key 新增或轮换、移除可写 key、激活可配置 Provider,以及删除用户添加的 Provider profile,同时不会引入第二套凭据存储。
  • 凭据状态刻意保持无值:面板只显示 key 是否已配置、来源和可写性。由环境提供的 key 可见但只读;面板打开期间,credential、settings 或 adapter 变化会自动刷新。

会话前的 mode 与 permission 控制

  • 全新启动的 TUI 会在尚未创建 session 时显示配置中的默认 Agent mode 与 permission preset。/mode/permission <preset> 和 Shift+Tab 均可修改待应用选择,且不会创建空的持久 session;第一条真实消息会使用所选值组合会话。两个命令均已收录进 / 补全与 /help
  • 直接输入 /permission 会打开仿照 /mode 的有界预设选择面板——输入过滤、方向键移动、Enter 应用、r 刷新、Esc 关闭;/permission <preset> 仍保留单行直接生效路径。
  • 首个持久 turn 开始后,Agent mode 仍按 Harness preset 契约锁定。session 创建后 permission preset 仍可继续修改,并保持通过 Harness 管理的 session event 写入。

终端渲染

  • 状态栏第一行现在依次显示模型、工作目录、/mode <value>、Git branch、context,以及右侧固定的 permission preset 与 Shift+Tab 提示。session 标题、计数、耗时、cache、token、goal、plan 和 sandbox 状态移入第二行,并缩进到与模型名左缘对齐,享有独立的宽度预算。
  • context 占用表改为无极连续条:实心填充段、点状空闲轨道加用量读数(32K/128K 25%,空间变窄时退化为纯百分比),替代原先按内容类型分段的条形。读数在 90% 告警阈值时变为琥珀色。
  • GFM pipe table 现在以按列测量的无外框终端网格呈现,支持强调表头、列对齐、escaped pipe 和单元格内 Markdown。终端窄到无法形成可读网格时,同一份数据会切换为字段记录布局,而不会丢弃单元格内容。
  • 已完成、历史详情、实时尾部和 streaming reasoning 统一使用悬挂缩进,显式换行与自动折行的续行都与助手回答正文对齐。
  • 欢迎区现在通过紧凑的三行鲸鱼 Header 显示已安装包版本,并加入双语 slogan Into the Unknown 探索未至之境;短或窄终端保留安全单行降级。

可靠性与性能

会话生命周期与输入历史

  • 会话组合改为串行执行,异步 mention、命令和 skill 结果由活动 Agent epoch 约束,陈旧任务不会跨越会话切换边界。
  • 恢复流程统一拒绝子代理对话和 session ID 冲突,按平台规则匹配工作目录,并安全处理自动生成的导出文件后缀。
  • 全局提示词历史限制为 100 条,并通过串行队列写入最新内存快照。退出流程会等待有序清理,即使单个清理步骤失败也仍会到达进程退出。

长转录与终端安全

  • 持久转录重放改为带索引的可变累积状态,最后只生成一次最终视图,替代逐事件写时复制数组。长日志和大量孤立事件日志以近线性方式扩展,同时保留直播 reducer 对重复 ID 与中断记录的行为。
  • 流式 token 突发(Provider 以亚毫秒级批次排空缓冲)现在合并为每次突发一次重渲染。此前逐 token 的同步通知会让 React 的 store 一致性检查连锁突破嵌套更新上限,在 GLM 等重思考模型上刷屏 "Maximum update depth exceeded" 警告。
  • 运行中命令在完成前保留在可变尾部,因此最终状态会立即出现,不再等待 resize。已定稿转录行采用增量缓存,排队消息只扫描可变尾部,输入框动画帧也不再重建整段历史。
  • 外部工具名、命令名、面板和历史文本在进入终端前统一转义与规范化,覆盖 OSC/CSI 字节、双向控制符、不可见 Unicode、多行文本和 tab。diff 展开、read/source 元数据和大型结构化工具参数会在昂贵解析或分配前受到限制。

细节改进

  • DeepSeek Wave、Aurora、Pulse 模型切换动画统一延长 200ms,并按比例重新映射完整时间线,使波形、边框呼吸、wordmark 与尾部火花更易看清,而不是在结尾增加静止等待。
  • 可恢复的 Provider 和模型失败继续限制在有界面板内,包括五行短终端布局;不会清除 scrollback,也不会暴露提交过的 secret。

行为变化

  • 全局提示词历史现在保留最新 100 条,而不是 500 条;下一次提交时,持久历史会压缩到该上限。
  • /resume--continue 只选择 root session;子代理对话仍可只读检查。--session 请求的 ID 已存在时会明确报错,不再与持久状态冲突。
  • /export 默认文件名会安全处理显式 session ID;退出会等待有序的持久化与 Agent 清理,单个清理步骤失败也不再阻止进程退出。

重要说明

  • 从 0.7.0 升级无需迁移配置或持久会话;本版本未移除命令或设置。
  • 运行时要求保持 Node ^22.19 || >=24 与兼容的 @deepseek-ai/dsh 安装。
  • 模型推理仍需要 key。可通过 /model 添加,或在启动时提供 DEEPSEEK_API_KEY;环境提供的凭据不能在 TUI 中覆盖或删除。
  • 欢迎 Header 中显示的版本来自已安装 dsh-code 包清单。
  • 发布首日 pnpm 用户请使用精确版本 dsh-code@0.8.0(pnpm 会忽略发布不足 24 小时的包)。

Full Changelog: 0.7.0...0.8.0