Skip to content

Releases: ErlichLiu/Proma

0.9.21

07 May 14:28

Choose a tag to compare

Proma v0.9.21

对比基准:v0.9.17

新功能

  • 应用内自动更新 — 检测到新版本后自动后台下载,下载完成弹窗提示「立即重启更新」,一键完成升级;也支持退出时静默安装。告别手动去 GitHub 下载覆盖安装
  • 托盘显示运行中任务 — 系统托盘菜单新增正在运行中的 Agent 任务列表,无需切回主窗口即可感知任务状态
  • 语音输入权限引导 — 首次使用语音输入时自动弹出麦克风权限获取弹窗,避免用户不知道需要手动授权
  • 文件路径图标升级 — Agent 消息中的文件路径芯片现在使用与右侧文件树一致的 VS Code Symbols 风格彩色图标(.ts 显示 TypeScript 图标、package.json 显示 npm 图标等),视觉一致性和可读性大幅提升
  • Write 工具结果可点击 — Write 工具执行结果中的文件路径从纯文本升级为可点击的 FilePathChip,直接点击即可预览写入的文件

Bug 修复

  • 文件路径带行号无法预览 — 修复 Agent 模式下模型输出 file.ts:42/path/to/file.ts:123:15 等带行号/列号后缀的路径时,预览器无法打开的问题。自动剥离 :line:col 后缀再解析路径,芯片上仍保留行号显示方便定位
  • 历史会话文件路径失效 — 新增 fallback 搜索机制:当文件的原始绝对路径不存在时(会话目录被清理、文件移动等),自动在工作区范围内按文件名递归搜索,尽可能找到同名文件并打开预览
  • 文件不存在时的静默失败 — 点击不存在的文件路径时,弹出明确的错误提示框,而非静默失败
  • macOS 自动更新不生效 — 修复 macOS 重启更新以及手动点击重启更新均无法退出并完成更新的问题
  • 语音输入稳定性 — 修复语音输入重复拼接、断连后无法自动恢复的问题;优化浮窗布局
  • 顶部 Tab 无法滚动 — 修复 Tab 数量较多时顶部 Tab 区域无法横向滚动的问题
  • 主线程性能优化 — 将音频播放(audio.currentTime seek)和系统通知创建推迟到下一个宏任务,避免在 React 批量更新的同步调用栈中阻塞主线程导致掉帧

打包与分发

  • 恢复 ASAR 打包 — 重新启用 ASAR 归档(通过 asarUnpack 解压 SDK native binary),减小包体积、提高启动速度、避免源码暴露
  • macOS 双架构并行构建 — CI 中 arm64 和 x64 改为并行构建,构建后自动合并 latest-mac.yml,确保两种架构用户都能正确接收自动更新
  • 构建容错 — Electron 下载加入重试机制,应对 GitHub CDN 偶发 EOF 断连

下载

  • macOS Apple SiliconProma-0.9.21-arm64.dmg
  • macOS IntelProma-0.9.21.dmg
  • WindowsProma-Setup-0.9.21.exe

0.9.17

06 May 06:35

Choose a tag to compare

Proma v0.9.17

对比基准:v0.9.16

Bug 修复

  • Windows 模式切换点击修复 — 修复 Windows 下左上角 Chat / Agent 模式切换按钮不容易点按的问题,避免自定义标题栏拖拽热区拦截按钮点击
  • 模式切换命中区域优化 — Chat / Agent 按钮整体明确声明为不可拖拽区域,并略微增加垂直点击面积,减少需要精确点击的情况
  • 顶部 Tab 空白拖拽修复 — 修复 macOS 和 Windows 下顶部 Tab 栏空白区域不可拖拽窗口的问题
  • Tab 交互区域隔离 — 单个 Tab 继续保持点击、关闭和拖拽排序可用,只有 Tab 栏空白区域恢复为窗口拖拽区域

界面与体验优化

  • Windows 顶部交互更顺手 — 左上角模式切换区域不再和窗口拖拽行为抢事件,切换 Chat / Agent 模式更稳定
  • 跨平台窗口拖拽更一致 — macOS / Windows 顶部 Tab 栏右侧空白、Windows 窗口按钮左侧预留空白都可用于拖动窗口
  • 标题栏命中规则更清晰 — 在 TabBar 中补充明确中文注释,说明空白区域必须保持 titlebar-drag-region,避免后续维护时误把整条容器改回 titlebar-no-drag

开发与打包

  • 版本更新@proma/electron0.9.16 升级到 0.9.17
  • 标题栏交互边界收敛ModeSwitcher 自身负责声明 titlebar-no-dragTabBar 保持空白可拖拽,TabBarItem 自身负责声明可交互区域不可拖拽
  • 类型检查 — 已通过 bun run --filter='@proma/electron' typecheck

使用提示

  • Windows 下如果之前点击左上角 Chat / Agent 切换经常变成拖动窗口,本版本应能明显改善
  • 在 macOS / Windows 顶部 Tab 栏没有标签页覆盖的空白位置,可以直接拖动窗口

下载

  • macOS Apple SiliconProma-0.9.17-arm64.dmg
  • macOS IntelProma-0.9.17.dmg
  • WindowsProma-Setup-0.9.17.exe

0.9.16

06 May 04:36

Choose a tag to compare

Proma v0.9.16

对比基准:v0.9.15

新功能

  • 语音输入自定义热词实验 — 豆包流式语音输入新增本地自定义热词能力,可在「设置 → 语音输入」中按行或逗号填写产品名、技术词、人名等专有词 (#380)
    • 请求级热词注入 — 启动识别时会把热词去重后直传给豆包 ASR 的 corpus.context.hotwords,无需先到火山控制台创建热词表
    • 轻量词库配置 — 新增设置页多行输入控件,默认保存在本地配置中,适合作为热词识别效果的快速实验入口
    • 安全兜底 — 读取旧配置或手动编辑过的配置时,对非字符串热词字段自动降级为空值,避免启动识别时报错

Bug 修复

  • 语音停顿后文本丢失修复 — 语音浮窗不再简单用最新 ASR 事件覆盖整段文本,会合并「已确认文本 + 当前分句」,避免用户自然停顿后前文被后续分句覆盖 (#380)
  • 语音停顿容忍度提升 — 豆包 ASR 的 end_window_size 从 800ms 调整为 5000ms,并补充 force_to_speech_time,减少稍微停顿就被过早切句的问题
  • Windows 缩放快捷键修复 — 修复 Windows 下主键盘 Ctrl++ 可能被上报为 Ctrl+= 导致无法放大的问题,并兼容小键盘加号
  • Windows 顶部空间修正 — 左侧 Sidebar 不再沿用 macOS 红绿灯避让间距,Windows 下 Chat / Agent 模式切换区域更紧凑,减少顶部空白
  • 关闭按钮遮挡修复 — 调整 Agent 侧栏文件区域与关闭按钮的层级和间距,避免窗口控制区与文件内容互相遮挡

界面与体验优化

  • 语音识别跨停顿更自然 — 豆包返回全量文本或仅返回当前分句时,浮窗都会尽量保持一段完整、连续的听写结果
  • 专有名词识别更可控 — 用户可以把项目名、框架名、英文缩写等直接加入热词输入框,用更低成本验证词库对识别准确率的改善
  • Windows 侧栏布局优化 — Chat / Agent 模式切换高度提高,非 macOS 平台的侧栏顶部间距更贴合自定义标题栏

开发与打包

  • 版本更新@proma/electron0.9.15 升级到 0.9.16
  • Agent SDK 升级@anthropic-ai/claude-agent-sdk 及对应平台 optionalDependencies 从 0.2.123 升级到 0.2.129
  • 语音文本合并测试 — 新增 voice-text-normalizer BDD 风格测试,覆盖「停顿后返回当前分句」和「全量返回不重复拼接」两类场景
  • 设置页基础组件 — 新增 SettingsTextarea,用于承载语音输入热词这类多行设置项

使用提示

  • 如果语音输入经常把产品名、库名或人名识别错,可以在「设置 → 语音输入 → 自定义热词」中逐行添加,例如 PromaJotaiShadcnUI
  • 自定义热词适合少量高频专有名词;如果需要大规模词表或强制替换词,后续仍可接入火山控制台的热词表 / 替换词表能力
  • 本版本把语音停顿窗口放宽到 5 秒,适合听写时自然思考;再次按语音快捷键仍会立即停止并提交

下载

  • macOS Apple SiliconProma-0.9.16-arm64.dmg
  • macOS IntelProma-0.9.16.dmg
  • WindowsProma-Setup-0.9.16.exe

0.9.15

05 May 20:04

Choose a tag to compare

Proma v0.9.15

对比基准:v0.9.12

新功能

  • 豆包流式语音输入 — 新增系统级语音输入能力,可通过 Ctrl+~ 唤起独立浮窗,把语音实时转写为文本并写回 Proma 或当前光标位置 (#377)

    • 豆包大模型流式 ASR — 主进程接入火山引擎 OpenSpeech WebSocket,支持豆包语音识别模型 2.0,并处理自定义鉴权 Header、gzip 帧、增量转写和最终结果
    • 独立语音输入浮窗 — 浮窗不抢焦点、不进入任务栏,录音时展示状态、音量反馈和实时转写内容;再次按快捷键可停止并自动提交
    • 多种输出方式 — 默认模式下,如果从 Proma 内唤起会写入当前 Chat / Agent 输入框;如果从其他应用唤起,则优先写入当前系统光标位置;也可设置为仅复制到剪贴板或仅写入 Proma 输入框
    • 外部应用自动粘贴 — 通过临时剪贴板 + 系统粘贴快捷键把文本写入前台应用,失败时保留文本到剪贴板;macOS 下会提示需要辅助功能权限
    • 语音输入设置页 — 设置中新增语音输入配置,支持启用开关、APP ID、Access Token、Resource ID、连接模式、识别语言、输出方式和连接测试;Access Token 保存时走加密配置
    • 连接模式与语言选择 — 支持双向流式优化版 / 标准版,支持自动识别、中文普通话、英语、粤语、日语、韩语
    • macOS 麦克风权限声明 — 打包配置新增 NSMicrophoneUsageDescription,系统会明确说明 Proma 访问麦克风是为了实时语音转写
  • 菜单栏会话快捷操作 — 系统菜单栏新增最近 Agent 会话入口和快速创建入口 (#376)

    • 最近会话 — 菜单栏展示最近 3 个未归档 Agent 会话,并显示所属工作区;更多最近会话收纳到「更多」子菜单
    • 快速打开 Agent 会话 — 从菜单栏直接打开指定 Agent 会话,并自动切换到对应工作区和标签页
    • 快速新建 — 支持从菜单栏新建 Chat 对话或 Agent 会话
    • 动态刷新 — 点击或右键菜单栏图标时重新读取会话列表,保证菜单内容接近当前状态
  • Dock / Launcher 角标未读数 — 新增应用级角标,汇总需要用户处理的 Agent 状态 (#373)

    • 角标数量包含:已完成但未查看的 Agent 会话、待审批权限请求、待回答 AskUser 请求、待审批 ExitPlan 请求
    • macOS 显示在 Dock 图标上,Linux 在支持 Unity Launcher 的环境下显示;数量归零时自动清除
    • 新增 dock-badge-count 计数工具及 BDD 风格测试覆盖

Bug 修复

  • 权限模式彻底按 session 隔离 — 进一步移除工作区级权限模式读写入口,热切换和错误重试不再把当前 session 的权限模式写回工作区,避免不同会话之间继续出现状态污染 (#374)
  • 粘贴链接稳定性修复 — 富文本输入禁用 TipTap 自动链接和粘贴自动链接,减少普通文本粘贴时被错误转换为链接的情况 (#375)
  • 工作区文件监听修复 — 文件监听统一规范化 Windows / Unix 路径,只忽略工作区顶层 config.json,会话目录里的同名用户文件不再被误忽略 (#375)
  • 历史工具动画关闭 — 已完成的历史 Agent 消息不再播放工具活动动画,降低回看历史时的视觉干扰
  • Agent 消息加载误判修正 — Agent 消息区域改为基于 SDKMessage 统一判断内容状态,避免空的旧消息数组影响空状态和淡入逻辑

界面与体验优化

  • 语音按钮升级为系统级入口 — Chat / Agent 输入框里的麦克风按钮不再依赖浏览器 Web Speech API,统一唤起新的豆包流式语音输入浮窗
  • 语音文本优先插入当前编辑器光标 — Proma 内回填语音结果时会优先写入最后聚焦的富文本输入框;如果无法定位光标,则回退写入当前 Chat / Agent 草稿
  • 全局快捷键语义修正Ctrl+~ 保持为物理 Control 键,不再在 macOS 上被转换成 CommandOrControl,避免和其他快捷键语义混淆
  • Agent 工具渲染路径简化 — 移除旧版 AgentMessage 工具详情渲染组件,Agent 消息展示继续向统一 SDKMessage 渲染路径收敛,减少维护分叉

开发与打包

  • 版本更新@proma/electron0.9.12 升级到 0.9.15@proma/shared0.1.17 升级到 0.1.19
  • 新增依赖ws@8.19.0 用于主进程连接豆包 OpenSpeech WebSocket
  • 新增协作说明 — 仓库根目录新增 AGENTS.md,沉淀项目结构、架构约束、常用命令和 Agent SDK 集成注意事项
  • 语音输入 MVP 设计文档 — 新增 docs/plans/2025-05-05-doubao-streaming-voice-input-mvp-design.md,记录豆包流式语音输入的方案与边界

使用提示

  • 使用语音输入前,需要在「设置 → 语音输入」中启用功能并填写火山引擎豆包 ASR 凭证
  • 第一次使用时系统可能请求麦克风权限;如果需要写入其他应用的当前光标位置,macOS 还需要在系统设置中允许 Proma 使用辅助功能
  • 自动粘贴失败时,Proma 会把识别文本保留到剪贴板,避免丢失内容

下载

  • macOS Apple SiliconProma-0.9.15-arm64.dmg
  • macOS IntelProma-0.9.15.dmg
  • WindowsProma-Setup-0.9.15.exe

0.9.12

04 May 12:12

Choose a tag to compare

Proma v0.9.12

新功能

  • 商业版 Proma 增强 gpt-image-2 稳定性 增强商业版 gpt-image-2 稳定性,提高生成成功率
  • 调整 Agent 运行指示条 调整 Agent 运行指示条,让完成运行的 Agent 会话显示绿色,用户阅读后则不显示颜色,进而实现用户能更方便的找到已经完成运行但是没有阅读的会话
  • @ 文件引用弹窗全面增强@ 唤起的文件引用弹窗完全重写,带来更清晰的层级与更顺手的交互:

    • 会话/工作区分组 — 双 banner 分别展示「会话文件」与「工作区文件」,来源一目了然;工作文件顶层目录显示名改为「工作文件」
    • 树形层级与目录展开 — 支持目录展开/折叠,展开键由反引号 ` 改为 Tab(toggle), 展开 / 折叠保持不变;空查询下每组扩展至 100 条,并附加目录顶层文件夹
    • 底部锚定向上生长 — 弹窗底部锚定在光标上方,展开文件夹时向上延展,ResizeObserver 监听高度变化自动重新定位
    • 路径 Tooltip — 鼠标悬停 300ms 后在条目右侧显示完整路径,复用 Radix Tooltip 组件
    • 双击目录插入引用 — 鼠标双击目录即可选中并插入 @ 引用(180ms 延迟区分单/双击)
    • 中文/特殊字符路径修复htmlToMarkdown 源头 encodeURIComponent 编码路径,remarkMentions 智能检测已编码路径避免双重编码,MentionChip 还原原始文件名,彻底解决中文/空格/特殊字符路径渲染断裂 (#362)
  • Windows 自定义标题栏 — Windows 平台改用自定义标题栏,样式与应用主题保持一致,观感更统一

  • Agent 设置页重构为 Tabs + Skills Master-Detail 布局 — 设置页改为三 Tab 布局(Skills / MCP / 内置工具),Skills Tab 升级为左列列表 + 右列详情的 Master-Detail 视图,支持 Skill 元数据内联编辑与 SKILL.md 全文 Markdown 渲染;新增 readSkillContent / writeSkillContent IPC API;AI 配置按钮移至顶部 action 区域并附带 Tooltip 说明;同时移除了冗余的 Agent 高级设置(思考模式、推理深度、预算、轮次)(#367)

Bug 修复

  • 权限模式按 session 持久化,多 Tab 独立隔离 — 权限模式从全局共享改为按 session 维度持久化,AgentSessionMeta 新增 permissionMode 字段随 session index 落盘,新增 UPDATE_SESSION_PERMISSION_MODE IPC 支持热切换;读回优先级为 session meta → workspace config → 全局 default,解决多 Tab 之间权限模式相互污染、重启后状态丢失的问题;初始模式为 plan 时主进程主动 emit enter_plan_mode,修复 plan 横幅不展示 (#365)
  • 热切换与 atom re-render 问题 — 修复热切换失败时 UI/后端状态不一致、seed() 异步竞态,以及 agentSessionsAtom 不必要 re-render 的性能问题
  • 弹窗位置闪跳anchorPopupclientRect 改为读取 latestClientRect 变量,ResizeObserver 回调始终使用最新的光标位置,修复闭包捕获过期坐标导致的弹窗位置闪跳
  • AssistantTurnRenderer 违反 React hooks 规则 — 错误消息和空内容的 early-return 移到所有 useMemo 之后,避免条件渲染导致 hooks 调用顺序不一致
  • 渠道开关与输入框状态断层 — 修复渠道开关切换与输入框可选状态之间的断层 (#323)
  • 首次安装 Skills 未落到工作区 — 修复首次安装时默认 Skills 可能未安装到对应工作区的问题
  • 用户悬浮消息占满屏幕 — 修复特定情况下用户悬浮消息可能占满整个屏幕的布局 Bug

其他改进

  • Agent 模式系统提示词更新 — Agent 模式的系统提示词持续打磨,更贴近实际使用场景

下载

  • macOS Apple SiliconProma-0.9.12-arm64.dmg
  • macOS IntelProma-0.9.12.dmg
  • WindowsProma-Setup-0.9.12.exe

0.9.11

30 Apr 18:49

Choose a tag to compare

Proma v0.9.11

新功能

  • 商业版支持 GPT-Image-2 — 目前由于渠道和适配方案的问题,暂时仅商业版本提供 gpt-image-2 的能力,支持 Chat 和 Agent 模式下调用

  • Windows 环境检测 + 一键安装 — Onboarding 流程新增 Windows 环境自动检测,缺少 Git/Node 时可一键安装;聊天界面的错误卡片同步升级,提供更清晰的排障指引

  • 渠道创建与配置提醒 — 渠道创建成功/失败时显示 toast 提示;渠道设置页新增保存确认与配置提醒,避免未保存即离开

  • Agent acceptEdits 切换为 SDK 原生 auto 模式 — 文件编辑审批模式由自定义实现替换为 Claude Agent SDK 原生 auto 模式,行为更一致、维护成本更低

  • 工作区 Badge 标识 — 正在工作中的区域增加 Badge 视觉提示,帮助快速定位活跃任务

Bug 修复

  • 修复 API 异常时黑屏崩溃 — API 请求异常不再导致整个窗口白屏/黑屏 (#349)
  • 修复回复完成时布局跳动和闪屏 — Chat/Agent 模式下消息生成结束瞬间的布局抖动问题已消除
  • 降低 GPU 占用 — 移除面板 backdrop-blur 并修正 visualEffectState,GPU 占用显著下降 (#340)
  • 多 Bot 平台状态灯修正 — 多平台连接场景下,任一平台在线即显示绿灯 (#359)
  • 飞书工作区切换后偶发会话错位/workspace 切换后 /new 不再偶发创建会话到错误工作区 (#354)
  • 文件预览弹窗滚动条始终可见 — 长文件预览不再需要 hover 才出现滚动条 (#355)
  • 文件预览换行支持 — 预览面板正确渲染换行内容
  • Plan 模式计划文档被误拦截.md 格式的计划文件不再被权限系统错误拦截
  • 子进程生命周期管理 — 为 Claude 子进程增加 PID 追踪与平台差异化强杀兜底;关闭 Tab 时主动中止 SDK 子进程 (#357)
  • SDKMessage 错误重试按钮 — path 2 路径也添加了对应的错误重试和开新对话按钮
  • followWindow 修复 — 窗口跟随行为修正
  • Skills 目录加载规则说明 — 系统提示词中明确标注 Skills 目录加载路径 (#348)

界面优化

  • 晴空碧海主题微调 — 侧边栏蓝色降低饱和度、提升亮度,视觉更柔和 (#360)

依赖升级

  • Claude Agent SDK 升级至 0.2.123 — 从 0.2.120 升级至 0.2.123

下载

  • macOS Apple SiliconProma-0.9.11-arm64.dmg
  • macOS IntelProma-0.9.11.dmg
  • WindowsProma-Setup-0.9.11.exe

0.9.10

28 Apr 15:55

Choose a tag to compare

Proma v0.9.10

新功能

  • AskUserQuestion 选项预览 — AskUserQuestion 的每个选项现支持 preview 字段,可展示 Markdown 格式的预览内容;当 Agent 发起提问时,用户能通过预览内容直观理解每个选项的具体含义与潜在影响,做出更清晰的决策

  • Kimi Anthropic 协议与 Coding Plan 支持 — 新接入 Kimi 模型的 Anthropic 兼容协议及 Coding Plan 能力,扩展模型生态

Bug 修复

  • Chat 模式 DeepSeek / Kimi 思考卡死 — Chat 模式下使用 Anthropic 协议时,思考参数配置不当导致 DeepSeek 和 Kimi 模型在 thinking block 阶段卡死。修复了协议适配中的参数传递逻辑,针对 DeepSeek 的思考参数格式做了特殊兼容;同时清理了 Onboarding 中不再需要的 Node.js 与 Git 检测步骤

  • AskUserQuestion 答案不生效 — AskUserQuestion 弹窗返回的答案 key 此前错误地使用了数字索引 String(i),与 Claude Agent SDK 的 AskUserQuestionOutput 类型约定(key 应为问题原文)不匹配,导致 Agent 无法正确解析用户选择。现已修正为问题文本作为 key,并新增空问题文本 fallback 与稀疏数组 null guard,防止运行时崩溃

下载

  • macOS Apple SiliconProma-0.9.10-arm64.dmg
  • macOS IntelProma-0.9.10.dmg
  • WindowsProma-Setup-0.9.10.exe

0.9.8

26 Apr 13:40

Choose a tag to compare

Proma v0.9.8

新功能

  • Agent 运行速度显著加快 — 基于 Claude Agent SDK 0.2.120 的 native binary 架构升级(详见「依赖升级」),Agent 冷启动延迟显著降低、工具调用链路更顺滑;同时将单次会话的工具调用上限由默认值提升至 999,长链路任务不再被默认上限打断

  • Chat 不限制历史长度 — Chat 模式移除对会话历史长度的裁剪,长对话不再因前文被截断导致上下文丢失;设置面板中对应的「上下文历史长度」配置项同步下线

依赖升级

  • Claude Agent SDK 升级至 0.2.120 — 从 0.2.111 升级至 0.2.120,覆盖 SDK 的架构级重构:
    • 0.2.113 起 SDK 改为按平台分发 native binary(通过 optionalDependencies 安装 @anthropic-ai/claude-agent-sdk-{platform}-{arch}),cli.jsvendor/ripgrep/ 不再随包分发,ripgrep 编译进 binary
    • Proma 的 binary 路径解析、打包 files 规则、CI 构建矩阵一并适配:electron-builder.yml 新增四个平台子包 glob;release.yml 拆为 macos-latest(arm64) + macos-15-intel(x64) + windows-latest(x64) 三 runner 矩阵,各自打对应架构产物

下载

  • macOS Apple SiliconProma-0.9.8-arm64.dmg
  • macOS IntelProma-0.9.8.dmg
  • WindowsProma-Setup-0.9.8.exe

0.9.7

24 Apr 09:56

Choose a tag to compare

Proma v0.9.7

新功能

  • 侧面板文件一键加入聊天 — 侧面板文件浏览器中的文件 hover 时显示 MessageSquarePlus 图标,单击即可加入当前会话的待发送附件;发送时通过 sourcePath 直接引用原路径,避免重复复制。新增 READ_ATTACHED_FILE 安全 IPC 通道,带路径白名单、symlink 防绕过与 20MB 大小限制

  • 手动标记会话为工作中 — 侧边栏每个会话项新增锤子图标按钮,点击即可将该会话固定在「工作中」分组,即使 Agent 已执行完毕也不会从列表中消失;标记为工作中时自动取消归档,运行中的会话按钮禁用。新增 TOGGLE_MANUAL_WORKING IPC 通道与 manualWorking 会话标志

  • 停止 Agent 快捷键 — 新增停止当前 Agent 运行的全局快捷键 Cmd+Shift+Backspace(由原先的 Cmd+. 迁移),Agent 模式和 Chat 模式的停止按钮 hover 时显示「停止 Agent (⌘⇧⌫)」Tooltip,设置页快捷键名称统一为「停止 Agent」

  • 文件预览窗口体验升级 — 预览窗口默认宽度由 880 调整为 1200,高度跟随屏幕工作区全高并顶边居中显示;预览内容默认缩放提升至 1.15,图片/Markdown/代码等预览更清晰

  • 钉钉 Bridge 支持发送图片 — 钉钉助手现已支持用户向 Agent 发送图片:通过 OAuth access_token 缓存 + downloadCode 换取临时 URL 下载图片,保存到 Agent Session 工作目录并通过 <attached_files> 标签注入 Prompt;handleRobotMessage 拆分为同步 ACK + 异步处理,避免回调超时

  • 微信 Bridge 支持发送图片/文件 — 微信 Bridge 支持接收用户发送的图片和文件:ILinkClient.downloadImage() 支持 CDN AES-128-ECB 解密(参考官方 SDK 实现),新增「先图后文」图片缓冲机制;内置 SSRF 防护(CDN 域名白名单)、内存炸弹防护(Content-Length 检查)、路径穿越防御(sanitizeFileName + ensurePathWithin

  • DeepSeek V4 默认 Anthropic 协议与 1M 上下文 — 内置 DeepSeek 模型现默认使用 Anthropic 兼容协议,开箱即可在 Agent 模式下使用;DeepSeek V4 系列上下文窗口扩展至 1M tokens

  • 设置区文案优化 — 优化设置区域的多处说明文案,降低新用户理解门槛

Bug 修复

  • 附加文件夹首次不显示 — 修复会话文件区通过「附加文件夹」对话框添加目录后,首次需要切换会话才能显示的问题。根因是 AgentView 中的 useEffectsessions 旧值覆盖了 SidePanel 刚写入的新数据;改为仅冷启动水合,已有数据时不再覆盖

  • 删除/归档当前会话后文件面板消失 — 修复删除、归档当前激活会话后右侧文件面板和按钮消失的问题。根因是 handleConfirmDelete / handleToggleArchive / handleToggleArchiveAgent 的闭包捕获了旧的 currentAgentSessionId,导致 setCurrentXxxId(null) 把新 tab 的 sessionId 覆盖为空;三个 handler 统一接入 syncActiveTabSideEffects 并移除冗余分支

  • 上下文用量圆环切换 Tab 后消失 — 修复切换会话、重试、失败后消息输入框旁的上下文用量圆环丢失的问题。消息加载完成时保留 inputTokens / contextWindowhandleSend / handleRetry / auto-send 重置流式状态时继承上次 usage;sendAgentMessage 失败时只标 running:false,不删除整个 entry。本次会话只要收到过回复就一直显示

  • 侧边栏自动滚动到活跃 Tab — 在主区域选中某个会话标签页时,如果该会话在侧边栏中不在可视区域内,侧边栏会自动平滑滚动到该项。通过监听 activeTabId 变化并调用 scrollIntoView({ block: 'nearest', behavior: 'smooth' }) 实现

  • TabBar 与侧边栏子标签自动同步 — 修复点击顶部 TabBar 切换到置顶会话时,左侧侧边栏仍停留在「工作中」子标签导致选中项不可见的问题;现会根据 activeTabId 自动将 agentSubTab 切换到对应分类

  • 模型选择器选中项可见度 — 将模型选择器选中项的背景色从 bg-accent/30 改为 bg-foreground/10。部分主题(如「云朵舞者」)下 accent 色与背景亮度几乎一致导致选中态不可见;foreground 在所有主题下都与背景有最大对比度

  • 弹窗遮罩层统一暗度 — 将 dialog / alert-dialog / sheet / image-lightbox 四个基础组件的遮罩层从 bg-black/80 统一为 bg-black/20,与 Settings 弹窗视觉一致,整体体验更舒适

  • 飞书图片扩展名缺失 — 修复飞书图片在 <attached_files> 标签中缺少扩展名导致无法在 Proma 侧显示缩略图的问题,同时把飞书 bridge 的附件保存逻辑统一迁移到共享工具 bridge-attachment-utils,复用微信/钉钉的 sanitizeFileNameensurePathWithin,净删约 60 行重复代码

  • Cmd+W 优先关闭浮窗 — 修复设置/搜索浮窗打开时 Cmd+W 错误地关闭底层标签页的问题,现在会先判断浮窗状态,有浮窗打开时优先关闭浮窗

  • Dev 与正式版 userData 冲突 — 修复开发版与本地安装的正式版共享 @proma/electron userData 目录时,Chromium SingletonLock 导致后启动进程静默退出的问题。非 packaged 环境下将 userData 重定向到 @proma/electron-dev,并显式调用 requestSingleInstanceLock 防止重复启动同一版本

下载

  • macOS Apple SiliconProma-0.9.7-arm64.dmg
  • macOS IntelProma-0.9.7.dmg
  • WindowsProma-Setup-0.9.7.exe

0.9.6

19 Apr 14:41
9b1c173

Choose a tag to compare

Proma v0.9.6

新功能

  • Ctrl+Tab 标签快速切换器 — Chrome 风格的键盘切换体验:快速按放 Ctrl+Tab 切回上一个标签(MRU 顺序),长按 Ctrl 连按 Tab 弹出选择器循环选中、松开 Ctrl 确认,Ctrl+Shift+Tab 反向循环;窗口失焦自动确认当前选择。切换器面板包含 Header、快捷键标注与 Tips 提示,并同步显示 Agent/Chat 状态指示线(Agent 运行中 / Chat 流式 / 等待用户输入 / 已完成未查看)

  • 标签页状态持久化 — 标签页(tabs + activeTabId)在应用重启后自动恢复;运行时状态持续写入 settings.json,关闭窗口前通过新增的同步 IPC(settings:update-sync)兜底落盘,避免在 beforeunload 阶段被异步写入截断。兼容旧版 splitLayout 结构一次性迁移上次激活标签

  • Agent 侧边栏 Working 区 — Agent 模式侧边栏置顶区新增「Working」分组,按状态聚合所有活跃会话:Todo(等待用户决策,橙色)、Running(执行中,蓝色)、Done(已完成,绿色,关闭标签即移除)。Working 跨工作区展示,一眼看到所有后台运行中的 Agent;置顶(Pinned)与 Working 合并为双 Tab 区域,各自带 badge 计数

  • Agent 侧边栏 Working/置顶区可拖拽高度 — Working/置顶区瘦身并改造为可拖拽双区,支持用 1px splitter(hover 扩为 4px 热区)自由调整上下比例,避免覆盖下方"最近会话"列表;高度持久化到 localStorage,约束在 [80px, 侧栏高度×70%]

  • 标签页状态指示统一为线条 — Tab / 侧边栏 / 切换器的状态显示全面改为线条语言:侧边栏 Agent Tab 切换与 Working 子分组改用左侧 accent 竖线,Chat 列表项从呼吸圆点改为 emerald 竖线,TabBar 顶部 Tab 从圆点改为底部横线条,Ctrl+Tab 切换器也对齐该语言;窄 Tab(<72px)状态指示降级为图标右上角小徽章保持可见

  • 文件浏览器写入联动 — Agent 调用 Write/Edit/MultiEdit/NotebookEdit/Update 工具时,右侧文件浏览器自动展开父目录链、平滑滚动到目标文件行并做 0.8s 高亮脉冲;行左侧额外保留 60s 的小圆点长效标记(跟随行缩进定位),错过瞬间动画仍能看到 Agent 最近修改了哪些文件。多根场景(会话目录、附加目录、workspace files)下各实例按 rootPath 前缀自治响应,不影响用户已选中的文件

  • 文件预览支持编辑与快捷键关闭 — 预览窗口支持 Esc / Cmd+W / Ctrl+W 关闭;纯文本/代码类文件(ts/tsx/py/go/rs/yaml 等 20+ 种)可点击「编辑」进入 Monaco,Markdown 使用 Vditor WYSIWYG;Cmd/Ctrl+S 原子写入保存,未保存关窗弹出「保存/放弃/取消」对话框,fs.watch 监听外部修改做无脏自动重载 / 有脏弹询问。UI 采用 Typora 风格(暖白 / 深灰配色、毛玻璃工具栏、macOS hiddenInset 标题栏融合 traffic light、880×920 纵向阅读尺寸、PingFang SC + SF Pro / JetBrains Mono 字体)

  • 文件预览语言识别加强 — 代码高亮覆盖 20+ 种常见语言并对齐 Monaco 映射;新增 .gitignore / Dockerfile / Makefile / bun.lock / pnpm-lock.yaml / .editorconfig / .npmrc 等按完整文件名识别;highlight.js 主包缺失的语言(dockerfile/swift/kotlin/diff/fish 等)改为按需动态注册子包,失败降级为无高亮

  • Markdown 预览样式优化 — 引用块改用 accent 粗左边框 + 淡背景、去除 italic 以提升中文可读性;表格改为圆角容器 + 斑马纹;代码块 / 内联代码补边框;GFM 任务列表自定义方形勾选;补充 kbd / mark / del / strong 等内联元素样式;h4/h5/h6 用次级文字色区分层级

  • 用户消息气泡 Markdown 渲染 — 复用 MessageResponse 组件为用户消息启用完整 Markdown 渲染(GFM 表格、代码高亮、KaTeX 公式);新增 remarkMentions 插件在 AST 层面将 @file: / /skill: / #mcp: 转为 mention:// 链接节点渲染为彩色 chip,解决 Markdown 化后 mention 丢失的问题;新增 remarkPreserveBreaks 插件用 break 节点替代全局字符串替换,避免代码块内出现多余尾随空格;悬浮置顶条用 stripCodeBlocks 将 fenced code 显示为 [code] 占位符

  • 为支持的 Claude 模型自动启用 1M context — Opus 4.6/4.7 与 Sonnet 4 系列自动注入 context-1m-2025-08-07 beta header,突破 Agent SDK 默认 200K 上下文在 ~150K 触发压缩的限制,充分利用长上下文;Haiku 与非 Claude 模型保持 200K 行为不变

  • 通用设置新增「消息悬浮置顶条」开关 — Agent 对话区顶部的用户消息悬浮置顶条现在可在「设置 → 通用设置」中一键关闭,默认开启,持久化到 ~/.proma/settings.json;关闭状态下组件完全不渲染,同时跳过 scroll/ResizeObserver 监听与 DOM 查询,降低空转开销

  • /compact 体验优化与 ContextUsageBadge 重设计 — 点击手动压缩立即注入合成 /compact 用户气泡并乐观置 isCompacting,提供即时反馈,失败自动回滚;新增 compactInFlight 贯穿整个压缩 stream 抑制 compact_boundary 切换期间的指示器闪烁;CompactingIndicator 改为与 compact_boundary 分隔线同款横线 + pill 无缝过渡;ContextUsageBadge 重构为 36×36 圆环按钮 + Popover,圆环按占用比例渲染、hover 弹出 token 明细与手动压缩按钮,按模型家族推断 contextWindow 作为流式 fallback 避免进度环无分母

  • Agent 流式中打断发送 — 流式输出过程中发送新消息从"FIFO 追加"改为基于 SDK 0.2.111 query.interrupt() 的软中断:先中断当前 turn 再注入消息,收到 aborted_streaming / aborted_tools 结果时保留活跃 Query 让下一轮续跑;AssistantTurnRenderer 自检 turn 内 aborted 结果强制显示"已被用户中断"徽章

  • Agent 模式对瞬时网络错误自动重试 — 上游 API 偶发流式中断(terminated / ECONNRESET / socket hang up / EPIPE / ETIMEDOUT / ENOTFOUND / EAI_AGAIN / ECONNREFUSED / fetch failed / premature close 等)不再直接报错给用户;应用层新增 TRANSIENT_NETWORK_PATTERN 兜底匹配 stderr,SDK 标记为 unknown 但消息匹配网络错误的情形也映射为 network_error;最大自动重试从 3 提升至 8,单次延迟上限 8s → 10s,叠加 ±20% jitter 防惊群,最坏累计 ≈55s;共享正则抽到 error-patterns.ts 避免两份副本偏差

  • 开发 / 生产配置目录隔离 — 开发模式(bun run dev)自动使用 ~/.proma-dev/ 目录存储配置,打包发布版保持 ~/.proma/,避免开发调试污染正式版配置文件

  • JSON 索引原子写入 + 备份轮转 — 会话 / 工作区 / 对话三类 JSON 索引改用安全写入模式:新增 safe-file.ts 提供 writeJsonFileAtomic(temp+rename)与 readJsonFileSafe(main → .tmp → .bak 三级回退),每次写入前先落 .bak 备份,强杀 / 崩溃下显著降低数据丢失风险

  • Write 工具详情改为内容视图 — 展开 Write 工具调用详情时,由原来仅显示"已写入 N 行"改为展示实际写入内容,样式与 Edit 工具的 diff 视图保持一致(绿色 + 行前缀 + 深色背景)

  • 输入框列表交互优化 — 空列表项按 EnterBackspace 退出列表回到普通段落;换行改用 splitBlock 创建新段落修复换行后列表 inputRules 失效;htmlToMarkdown 块级元素末尾统一为单换行修复发送多余空行;复制时写入纯文本到剪贴板修复粘贴到外部应用出现大量空行;CSS 清除 p/ul/ol/li 默认 margin 保持视觉间距一致

  • nano-banana 批量生成参数 — MCP 工具新增 numberOfImages 参数(1-4,默认 1)为未来 API 支持预留;过滤 Flash 模型的 thought 推理图像不再混入生成结果

Bug 修复

  • 移除 Agent 模式分屏功能 — 分屏实际使用率低且带来多余的状态管理复杂度,完整移除 SplitContainer / SplitPanel / SplitModeToggle / MainContentPanel 与相关 atoms / 类型,保留浏览器风格多标签页作为唯一多视图范式;PersistedTabState 扁平化为 { tabs, activeTabId },对旧版 splitLayout 做一次性迁移;抽取 useSyncActiveTabSideEffects hook 统一关闭活跃 Tab 后同步 appMode / currentXxxId / workspace / 未查看已完成标记的副作用,顺带修复 GlobalShortcuts 漏清除已完成标记的问题

  • 启动 / 主题切换全屏闪烁 — 根因为 applyThemeToDOM 非幂等 + useEffect 冗余触发,叠加 vibrancy + backdrop-blur-xl 导致 Chromium 重建合成层。applyThemeToDOM 改为幂等(计算目标 class 与当前 <html> 对比一致则直接 return),ThemeInitializeruseMemo 计算影响 DOM 的签名作为 effect 依赖

  • 苍穹暮色侧边栏对比度--background 从 11% 调整至 13%,提升与 --content-area(8%)的明度差距,--card 保持 11% 不变

  • 飞书 / 微信 / 钉钉 Bridge 并发保护 — 所有 IM Bridge 在 handleUserMessage 入口处增加 isAgentSessionActive 检查,Agent 仍在运行时直接拒绝新消息并返回错误卡片,避免覆写 sessionBuffer 导致正在运行任务的结果丢失

  • DingTalk Bridge 重连保留 chatBindingsstartBot() 重连时改为复用现有 DingTalkBridge 实例(调用 stop() + updateConfig() + start())而非 delete + new,避免 BridgeCommandHandler 中的 chatBindings 被清空导致 /stop 返回"当前没有绑定的会话"

  • remarkMentions 并发正则污染MENTION_PATTERN 从模块级共享 /g 正则改为函数内局部变量,避免并发 remark pipeline 间 lastIndex 互相干扰导致 mention chip 间歇性丢失

  • settings 日志脱敏settings-service.ts updateSettings 日志从 JSON.stringify(全量设置) 改为只记录变更的 key 名,防止 API key / session ID 等敏感数据泄漏到控制台

  • AskUserBanner 自动跳转定时器清理 — 单选题选完后跳转下一问题的 setTimeout 在组件卸载 / 请求切换时未清理、150ms 内连续点击会排多个定时器导致越过应停留 tab,用 useRef 保存 timer id 并在点击前 / 卸载时 / 切换时 clear

  • Agent 流式中 prompt_suggestion 显示useGlobalAgentListeners 跳过 prompt_suggestion 写入 liveMessagesMapAtomSDKMessageRenderergroupMessages 显式排除 prompt_suggestion 入 turn,修复其被错误追加到最后一条助手消息的问题

  • fork 跨 session UUID 错误 — 会话经历 session-not-found 恢复后 sdkSessionId 会被替换,但旧消息 UUID 仍绑定在旧 SDK session 的 JSONL 中。Fork 旧消息时改从 Proma JSONL 查找消息实际所属的 session_id,用消息真实归属的 SDK session 调用 sdk.forkSession,修复 "Message not found in session" 错误

  • .bak 自毁恢复路径readJsonFileSafe 回退到 .bak 恢复主文件时,writeJsonFileAtomic 会先把(已损坏的)主文件拷到 .bak——覆盖了仅存的完好备份。新增 skipBackup 参数,.bak 恢复路径上禁用备份写入保留干净副本

  • 开发模式 default-skills 路径错误seedDefaultSkills()../../default-skills 在开发模式(__dirnameapps/electron/dist)解析到不存在的 apps/default-skills,导致 ~/.proma-dev/ 下所有工作区都没有复制 skills。修正为 ../default-skills

  • Windows 下 bun dev 启动崩溃 — 修复 Windows 平台开发模式启动环境变量构建问题

  • 标签页持久化竞态 — 增加 restoredRef 守卫防止自动保存在异步恢复完成前覆写已持久化状态;beforeunload 阶段使用新增的同步 IPC 确保 tab 状态落盘;用运行时类型守卫替换 as 断言,处理 panel activeTabId 可能为 null 的情况并过滤无效 panel,focusedPanelIndex 夹到合法范围

  • MainArea activeTabId 为空循环更新tabs 非空但 activeTabId 为空的异常分支原先渲染 WelcomeView,会触发 openTab 反复设置 tabs/activeTabId 导致状态循环。改为 useEffect 自动将 activeTabId 设为 tabs[0].id,该分支直接返回 null

  • 设置页若干 UI 问题 — 外观设置补充应用图标区块与主题设置的合理间距(space-y-6);飞书机器人设置页打开时主动同步最新 Bot 状态,解决启动时序导致的颜色一直显示黄色;Agent 配置高级设置展开箭头移至标题右侧使标题左对齐;Agent 配置内置工具列表补充「联网搜索」工具(web-search);模型 icon 匹配规则新增 seed(豆包),seedgemini 的具体规则排在前面不受影响;Tab 预览面板关闭延迟从 40ms 延长到 200ms 避免鼠标移动意外消失

  • 导入 Skill 弹窗滚动与对齐 — 给弹窗内容区添加 overflow-y-automax-h-[60vh] 解决 Skill 列表过长无法滚动;line-clamp-3 限制描述文本行数避免卡片高度不齐;移除多余 ScrollArea

  • 带状态指示会话误掉入下方列表working-atomsindicatorMap.has(id) 检查过于宽泛,completed 状态会话被误跳过导致不属于任何 working 组、掉进日期分组列表;改为仅跳过 running/blocked

依赖升级

  • Claude Agent SDK0.2.71 升级至 0.2.111(对应 Claude Code 2.1.111),关键能力:
    • 新增 query.interrupt() API,支持软中断并在同一 Query 生命周期内续跑,Agent 流式中打断发送体验依赖此能力
    • 延续长会话稳定性、UI 渲染性能、内存泄漏、流式错误处理等方向的大量累积修复

下载

  • macOS Apple SiliconProma-0.9.6-arm64.dmg
  • macOS IntelProma-0.9.6.dmg
  • WindowsProma-Setup-0.9.6.exe