Skip to content

Kivio Desktop v2.8.4

Choose a tag to compare

@github-actions github-actions released this 31 Jul 00:42

Kivio Desktop v2.8.4

桌面 AI 助手 · macOS (Apple Silicon) + Windows。Desktop AI assistant for macOS (Apple Silicon) and Windows.

下载 / Downloads

  • WindowsKivio.Desktop_2.8.4_x64-setup.exe(NSIS 安装包 / installer)
  • macOSKivio.Desktop_2.8.4_aarch64.dmg(Apple Silicon,未签名 / unsigned)
    • 首次启动:右键 → 打开,或运行 xattr -cr "/Applications/Kivio Desktop.app"
    • First launch: right-click → Open, or run xattr -cr "/Applications/Kivio Desktop.app"

新版本亮点 / What's New

  • 右侧 Dock:文件树、Git 审查、真实终端 / Right dock: file tree, Git review, real terminal — 聊天窗右侧新增按工作目录绑定的 IDE 侧栏。文件树支持框选多选、拖拽移动、批量删除、内联新建/重命名与就地查看编辑;Git 面板可看改动与 diff;终端是真正的 PTY(macOS forkpty / Windows ConPTY),不是模拟。工具卡片的 Write/Edit 折叠行直接显示 +N -N,展开是带行号列与词级高亮的 diff,点文件名就在右侧预览。The chat window gains an IDE-style dock bound to the conversation's working directory. The file tree supports marquee and Ctrl/Shift multi-select, drag-to-move, batch delete, inline create/rename, and an in-place viewer/editor; the Git panel shows changes and diffs; the terminal is a real PTY (forkpty on macOS, ConPTY on Windows), not a simulation. Write/Edit tool cards now show +N -N on the collapsed row and expand into a diff with line-number gutters and word-level highlighting — click a filename to preview it in the dock.
  • claude CLI 改为一会话一常驻进程 / The claude CLI now keeps one process per conversation — 此前每轮都重开子进程靠 --resume 接上下文,现在进程常驻、stdin 常开:首轮约 3.2 秒,之后每轮约 0.1 秒。换模型不再丢上下文(旧代码基于一条没实测过的假设直接丢弃会话,实测推翻了它);子会话(Task)不再把自述印进主回答、不再污染用量与压缩分母;停止改用 interrupt 控制请求而非杀进程,上下文保住。Instead of spawning a fresh child every turn and reattaching with --resume, the process now stays alive with stdin open: ~3.2s for the first turn, ~0.1s after. Switching models no longer drops context (the old code discarded the session based on an untested assumption that real-device testing disproved); sub-agent (Task) sidechains no longer leak their narration into the main answer or pollute usage and the compaction denominator; stopping sends an interrupt control request instead of killing the process, so context survives.
  • 上下文用量终于是准的 / Context usage numbers are finally correct — 所有外部 CLI 的用量都漏算了 cache token(实测占比 kimi 97.6%、pi 62%、opencode 13%),漏掉就是漏一个数量级;各家的 cache 包含关系还不一样(codex 是 OpenAI 口径已含在 input 内,claude/pi/ACP 是 Anthropic 口径须相加)。分母也修了:claude 的裸别名实测都解析到 100 万上下文的模型,旧表一律按 20 万算,压缩会在真实占用 20% 时就触发。用量现在还是实时的,长回答生成过程中就跟着走。Every external CLI was dropping cache tokens from its usage math (measured at 97.6% of the total for kimi, 62% for pi, 13% for opencode) — an order-of-magnitude error — and each CLI nests cache differently (codex follows OpenAI's shape where cache is already inside input; claude/pi/ACP follow Anthropic's, where it must be added). The denominator is fixed too: claude's bare aliases all resolve to 1M-context models, but the old table assumed 200K, so compaction fired at 20% of real usage. Usage also updates live now, tracking a long answer as it streams.
  • MCP 改用官方 rmcp SDK / MCP now runs on the official rmcp SDK — 仓库里原本有两套手写的 JSON-RPC 实现,协议停在 2025-06-18,而且「设置页测试连接」和「聊天里调用」走的是不同代码、表现不一致。现在只剩一条通路,净删约 2270 行。顺带修好:远程 HTTP MCP 加了工具无需重启就能看见;Windows 上 npx.cmd 这类 shim 不再找不到;装了企业 TLS 中间证书的用户从「连不上」变「能连」。The repo had two hand-written JSON-RPC implementations, stuck at protocol 2025-06-18, so a server behaved differently under "test connection" in settings than under an actual tool call in chat. There is now one path, with ~2270 lines deleted. Side effects: remote HTTP MCP servers surface newly added tools without a restart; Windows shims like npx.cmd resolve correctly; and users behind a corporate TLS middlebox go from "cannot connect" to "connects".
  • 工具审批改为内联卡片,claude CLI 也会来问 / Inline tool approval, and the claude CLI now asks too — 审批从居中模态改成输入框上方的内联卡片:自然语言标题(「允许写入 xxx.md?」)、代码块只放路径或命令、三个带数字快捷键的动作,新增本对话「总是允许」。外部 claude CLI 接进同一条审批链路(开关是启动参数 --permission-prompt-tool stdio,真机三次对照验证过),前端零改动。并发审批不再只留最后一张卡——claude 在一条消息里并行调三个工具是常态,此前另外两张会静默超时被拒。Approval moved from a centered modal to an inline card above the composer: a plain-language title ("Allow writing xxx.md?"), a code block holding only the path or command, three number-keyed actions, and a new per-conversation "always allow". The external claude CLI now feeds the same approval chain (the switch is the --permission-prompt-tool stdio launch flag, verified against a real binary three times) with no frontend changes. Concurrent approvals no longer collapse to just the last card — claude routinely calls three tools in one message, and the other two used to silently time out as denied.
  • 对话生命周期 Hooks / Conversation lifecycle hooks — 内置 agent 的 8 个生命周期事件(agent / turn / message / tool 四个阶段的起止)可挂 Shell 脚本或 HTTP Hook,载荷为 stdin JSON 与 KIVIO_* 环境变量。fire-and-forget:不阻断工具调用、不改写参数,失败只报警告;没配 Hook 时零开销。设置里新增 Hooks 页。Eight lifecycle events of the built-in agent (start/end of the agent, turn, message, and tool phases) can trigger shell scripts or HTTP hooks, with the payload delivered as stdin JSON plus KIVIO_* env vars. Fire-and-forget: hooks never block a tool call or rewrite its arguments, failures only raise a warning, and with no hooks configured the cost is zero. Settings gains a Hooks page.
  • 子代理角色通用化 / Sub-agent roles are now user-definable — 此前只有 4 个硬编码角色,.md 角色层虽然实现了但主 Agent 无从得知,得猜对名字才能命中。现在角色列表在运行时生成进 agent 工具的描述里,内置 / 用户 / 项目三层都可见;角色文件使用 YAML frontmatter 的 .md 格式。支持工具通配(mcp__<server>__**)、disallowedTools 继承减法(「继承全部、只挖掉写入」可表达),以及在调用里临时定义一次性角色。Previously only four hard-coded roles existed; the .md role layer was implemented but invisible to the main agent, which had to guess names. The role list is now generated into the agent tool's description at runtime across all three layers (built-in / user / project), and roles are plain .md files with YAML frontmatter. Adds tool wildcards (mcp__<server>__*, *), subtractive disallowedTools (so "inherit everything except write" is expressible), and one-off roles defined inline at the call site.
  • 界面:悬浮卡片式侧栏与 Windows 全宽标题栏 / UI: floating-card sidebar and a full-width Windows titlebar — 侧栏、主区、Dock 改为三张浮起的卡片,缝隙透出底色;侧栏支持系统级模糊材质(Windows Mica 跟随应用主题而非系统主题)。Windows 的三键从浮在内容上的胶囊改为贯穿全宽的 44px 标题栏带,caption 键按原生几何自绘,内容不再需要留 132px 躲它。全站下拉栏统一规格(27 处归一)、输入区拆三层、表格与代码块重做、等宽字体补 CJK 回退。macOS 顶栏那条线上的交通灯、侧栏图标与模型/思考/审批控件此前各在各的高度,现已统一。The sidebar, main area, and dock are now three floating cards with the window backdrop showing through the seams, and the sidebar supports system blur materials (Windows Mica follows the app theme rather than the system theme). On Windows the three window buttons moved from a capsule floating over the content to a full-width 44px titlebar with natively-drawn caption glyphs, so views no longer reserve 132px to dodge them. Also: one dropdown spec across the app (27 call sites unified), a three-tier composer, reworked tables and code blocks, a CJK fallback in the monospace stack, and macOS titlebar items (traffic lights, sidebar icons, model/thinking/approval controls) finally sharing one baseline.
  • 图片右键菜单 / Image context menu — 聊天里的图片此前右键没有任何反应,也复制不出去。新增复制图片 / 图片另存为… / 查看大图,markdown 内嵌图与生成图画廊两条渲染路径都挂上了;大图查看器也加了复制与另存,取的是原图而非缩略图。Images in chat had no context menu and could not be copied out. There is now Copy image / Save image as… / View full size on both rendering paths (markdown-embedded images and the generated-image gallery), and the full-size viewer gained copy and save that operate on the original, not the thumbnail.
  • claude 模型清单剔掉 6 个退役 / 会被静默换掉的模型 / Six retired or silently-remapped models removed from the claude picker — 那张具体版本表是照 CLI 二进制里的模型目录抄的,但目录不等于可用:claude-3-5-sonnet / 3-7-sonnet / 3-5-haiku / sonnet-4-0 已退役(选了只回一句退役警告),opus-4-1 / opus-4-0 更糟——不报错,直接给你 Opus 4.8,用户以为在用 4.1。The concrete-version list was copied from the model catalog baked into the CLI binary, but catalog ≠ available: claude-3-5-sonnet, 3-7-sonnet, 3-5-haiku, and sonnet-4-0 are retired (picking one returns only a retirement warning), and opus-4-1 / opus-4-0 are worse — no error, you silently get Opus 4.8 while thinking you're on 4.1.
  • 稳定性与正确性修复 / Stability and correctness fixes — 退出应用不再留下孤儿 claude 进程及其 MCP 子孙(退出钩子此前只清了 sender 就退了,每次最多漏 6 个);外部 CLI 调过工具的回答不再在气泡里渲染两遍;grok 的 token 用量在 _meta 里,此前一路读空;系统提示改走 --append-system-prompt-file,长会话被压缩后不再静默失效;/cost/context 等客户端斜杠命令的输出不再被吞;输出被截断的回答不再标成「完成」;探测不再在用户的 claude 记录里堆空壳会话;流式思考不再逐帧抖动。Quitting no longer leaves orphaned claude processes and their MCP grandchildren behind (the exit hook used to clear the sender and return, leaking up to six each time); external-CLI answers that used tools no longer render twice in the bubble; grok's token usage lives under _meta and was read as empty all along; the system prompt moved to --append-system-prompt-file so it no longer silently vanishes after a long session is compacted; output from client-side slash commands like /cost and /context is no longer swallowed; answers truncated at the output limit are no longer marked complete; probing no longer piles up empty shell sessions in your claude history; and streaming reasoning no longer janks frame by frame.

完整变更 / Full changelog: v2.8.3...v2.8.4