Repository navigation
Releases: laonger/visp
Release list
v0.5.4 — visp-acp(ACP 适配器)落地,思考增量与在途循环加固
v0.5.4 — visp-acp(ACP 适配器)落地,思考增量与在途循环加固
距 v0.5.3 共 52 个提交,主要变更:
visp-acp(新 crate,供 Zed 等编辑器经 ACP 协议接入)
- 从零落地:SDK 冒烟基线、参数解析、gRPC 会话传输层(唯一 Chat 流 +
出入站)、事件翻译器(ServerMessage 全变体映射)、会话注册表与归属路由 - 审批与提问桥接:权限映射、elicitation schema 反解与降级
- agent 层组装:四入口 handlers 与会话/prompt 事件泵
- daemon 编排器:探测 / spawn / health / 退出收尾;对齐 daemon 日志路径,
SIGTERM/SIGINT 回收自拉起的 daemon;兜底超时前补发取消 - 设计文档、协议调研、语义集成测试(完整 turn / 取消收尾 / 审批回填)
思考增量(ThinkingBlock)
- proto 明确 ThinkingBlock.thinking 为增量语义(无字段变更)
- core 事件层产出真思考增量并保留完整块;daemon 同批补齐映射
- TUI / ACP 改为同一行追加而非覆盖;补增量拼接与无重复断言
在途循环(SessionBusy)拒绝式加固
- daemon 拒绝在途循环期间的新用户输入;忙错误文案与 orchestrator 统一
- TUI 不将 tab 置为 Error、提示去重为一行;event.rs 不再提前释放输入门禁
- core 新增在途循环令牌只读查询接口;窄化重置、忙失败上报并后移准备动作
核心 / LLM 修复
- OpenAI 流解析按 chunk 收集事件,修复工具调用被丢弃
- provider 声称 tool_calls 却未解析到时明确失败,不再空转续跑
- 限制连续 thinking-only 续跑并对空响应做一致性检查
发布与文档
- 打包与安装覆盖 visp-acp;install.sh 作为 release 资产
- README 安装章节改为拉取 latest Release 的 install.sh
- README 二进制清单 / crate 表补齐;ACP 接入设计文档与实施计划
质量
- 工作区 test / clippy / fmt 全绿(2304 tests passed)
Commit range: v0.5.3..03c6868(52 commits)
v0.5.3 — Hook 系统、事件总线、visp-fs 迁移与 TUI 强化
v0.5.3 — Hook 系统、事件总线、visp-fs 迁移与 TUI 强化
距 v0.5.1 共 186 个提交,主要变更:
Hook 生命周期钩子系统(新)
- visp-hooks 契约 crate:13 个冻结事件(PascalCase)+ 载荷 + env 约定,
产出 JSON Schema + golden fixtures;取值域收紧为枚举 - [hooks] 配置与规则模型(id/event/matcher/command/args/env/cwd/timeout_ms/
enabled/on_full/parallel/cooldown_ms/include) - 异步执行器:同事件按 id 排序、per-rule 默认保序、on_full(drop_new/
drop_old/coalesce_latest)、cooldown;子进程执行(argv 直执、白名单 env、
stdin JSON、超时杀进程树、失败隔离) - 项目级信任:canonical 路径 + .visp/hooks/ 递归快照 + 规则全集哈希 +
符号链接防逃逸;禁止项目级 sh -c - 只读 GetHookStats RPC +
visp hooks list/doctor/test/logs(--dry-run) - 非法 [hooks] 规则降级(告警跳过,不阻断启动)
事件总线与生命周期(新/重构)
- 显示面通道由单消费者 mpsc 改为 broadcast 事件总线
(BusEvent: Frame/Hook),每连接 subscribe;修复重连 “receiver already taken” - 总线 seq 单调发放 + sentinel receiver;Lagged → daemon 侧增量 replay
- 优雅关停:Shutdown RPC → SessionEnd → 有界 drain(≤2s) → cancel →
Notify → main select{ctrl_c,RPC,SIGTERM};launcher 等待而非强杀 - 完成事件分层:执行级 AgentRunEnd/SubagentStop(帧派生)与会话级
Stop/StopFailure(orchestrator Hook);消除根回合重复 Done 帧 - ToolCallResult 增 outcome;新增 PreToolUse 发射点;UserQuery 增 PermissionKind
herdr 集成(新,外置零侵入)
- 随包脚本 assets/hooks/herdr.hook.sh:状态上报(working/blocked/idle)、
回合完成显式通知、退出释放(SessionEnd → release-agent) - visp 内不保留任何 herdr 专有 Rust
install.sh(新)
- 从 GitHub Releases 安装 visp/visp-daemon/visp-tui;--bin-dir/--tag 可配
- 配置初始化(daemon.toml 骨架;--model/--api-key 非交互,不覆盖已存在)
- 顺带安装 herdr hook;--uninstall/--purge-config/--yes/--dry-run
文件监听迁移与热重载
- 新增 visp-fs crate:watch 目标规格、include/exclude、三后端事件归一化、
缺目录降级链、幂等 remount + 2a 恢复、生命周期 stop/收敛 - daemon/codegraph 监听统一迁移到 visp-fs;AGENTS.md 发现以 git 根为界
(共享祖先链解析);文件监听开关与生命周期接线;降级上报到 TUI - /reload 热重载:ReloadConfig RPC(逐项结果)、共享 reload core、按域
no-change 守卫、RuleEngine build-then-swap、AgentRegistry ArcSwap、
agent 工具重组;TUI /reload 逐项渲染
TUI / CLI
- 重连状态机 + 空闲看门狗(45s + health probe);重连恢复会话、清理子 tab
- 多 tab 清理、可拖拽滚动条、鼠标命中修正
- 状态栏双行 + token 速率/用量展示、移除成本统计
- 终端通知:OSC 9/777/99(未识别回退 BEL)、[notification] 配置、会话过滤
- crate 重命名 visp-cli → visp-tui
LLM / Provider
- 新增 opencode-go 协议与 opencode provider、bigmodel(智谱)、
aliyun 协议 + DashScope 文生图 - 发送 x-opencode-session 头;reasoning_content 一致性策略 + 400 降级重试;
enable_thinking 透传;5xx 重试
工具与核心修复
- bash:超时/取消杀整棵进程组、路径引号提示、命令黑名单词边界、
默认超时 60s;ssh/scp/rsync 需审批 - read_file 图片返回明确错误引导 vision;WebFetch 默认 60s + per-call 覆盖
- doom-loop:空工具调用不误判、参数损坏不再误终止;[USER_QUERY] 容忍未闭合
与单一问题约束;AgentTool 响应 1800s 超时防挂起 - 子 agent 并发限制/排队、继承父 approved_tools;工具结果错误标志持久化
- MCP:Streamable HTTP / GET 传输,rmcp 升级 3.x
- 配置:visp-config crate 落地(类型/规则/技能/prompt/路径)、--config-dir、
启动初始化全局配置
质量
- 与 CI 对齐 clippy 1.98 全量 lint;工作区 test/clippy/fmt 全绿
Commit range: v0.5.1..ad498f0(186 commits)
v0.5.1 - bugfix: 测试失败与 clippy 告警修复
v0.5.1 - bugfix: 测试失败与 clippy 告警修复
修复:
- test_max_iterations: 补足 TestProvider 响应阶段数,确保 agent loop 达到 hard_limit 检查而非命中空流
- test_init_observability_level_applies_env_filter: 测试中直接使用 cfg.level,避免 RUST_LOG 环境变量过滤掉预期事件
- test_watcher_stop: Watcher::stop() 增加 task.abort() 终止后台任务,修复 OS 延迟投递事件的竞态条件
- clippy::collapsible_if: 合并 orchestrator.rs 中嵌套的 if/if-let
涉及文件:crates/visp-core/src/agent.rs, crates/visp-daemon/src/observability/init.rs, crates/visp-codegraph/src/watcher.rs, crates/visp-agent/src/orchestrator.rs
v0.5.0 - 多模态图片输入/输出 + 文生图 + 识图
v0.5.0 - 多模态图片输入/输出 + 文生图 + 识图
-
OpenAI/Anthropic provider 支持 image_url/image content block 解析
-
base64 图片自动落盘保存,URL 图片懒加载
-
CLI 原生渲染图片 + 地址显示(🔗 URL / 📁 路径)+ 双击复制
-
proto 新增 ImageBlock/ImageError 消息类型
-
daemon/agent_loop 事件传播链路完整实现
-
用户 @path 引用图片自动 base64 编码发送给 LLM
-
OpenAI provider: image_url 多模态 content 格式
-
Anthropic provider: image source base64 格式
-
image_generation 配置标记,路由到 /images/generations 端点
-
llm.image_generation_model 配置默认生图模型
-
use_tool 开关:关闭后请求不带 tools 参数
-
llm.vision_model 配置默认识图模型
-
painter: 文生图 sub-agent(steps=1,无工具)
-
vision: 识图 sub-agent(steps=1,read_file 权限)
-
ratatui-image 集成,终端原生图片显示
-
ImageCache 异步加载本地/URL 图片
-
图片地址行自动换行 + 高度计算
-
fix: finish_reason=length 时丢弃畸形 tool_call arguments,补提示文本
-
fix: anthropic thinking 约束(temperature=1.0, budget < max_tokens)
-
fix: build_openai_messages 清洗畸形 tool_call arguments
-
fix: render_image_block 零高度区域防护
-
fix: URL-only 图片 path 保持空而非复制 URL
-
fix: clippy warnings + cargo fmt
-
README 新增图片输入和文生图使用说明
v0.4.5 — 修复模型切换失效
修复:
- 删除 start_main_agent 中的 agent model override,使 /model 切换生效
- agent 定义指定 model 时不再覆盖 session.config,用户切换不再被无视
涉及文件:orchestrator.rs, orchestrator_tests.rs
v0.4.4 - CLI 工具块 UI 重构 + 子 Agent 标签页 + clippy 修复
新功能:
- 提取工具调用 UI 渲染到 tool_ui 模块
- 添加 WriteFile、EditFile、Bash 工具块 UI 摘要
- 添加子 Agent 块 UI、标签页关闭按钮、task prompt 显示
- 子 Agent 标签页默认隐藏,支持 "show in new tab" 按钮
- 修复标签页点击偏移和命中检测
修复:
- 解决 clippy 警告(collapsible_if、needless_borrow)
- 应用 rustfmt 格式化
重构:
- 将内联测试拆分到独立的 *_tests.rs 文件
涉及文件:tool_ui.rs, app.rs, event.rs, ui.rs, selection.rs, app_tests.rs, event_tests.rs, ui_tests.rs, selection_tests.rs
v0.4.3 - guide main agent to emit parallel sub-agent tool calls + 子 Agent 工具体系 + 配置增强 + 流式 UTF-8 修复
guide main agent to emit parallel sub-agent tool calls
包含v0.4.2的全部功能:、
v0.4.2 - 子 Agent 工具体系 + 配置增强 + 流式 UTF-8 修复
新增:
- 子 Agent 工具体系(Wave 1-4):AgentTool/SpawnRequest/ToolType,allowed_sub_agents 过滤,oneshot 响应
- Agent 级别配置覆盖:model/temperature/steps 应用到子会话
- 配置系统:项目级配置 merge,[[agent.builtin]] 字段级合并与覆盖
- LLM tracing span 增加 base_url
修复:
- LLM 流式 UTF-8 多字节字符跨 TCP chunk 损坏(openai 静默乱码 + anthropic 流中止)
- UI debug log 的 utf-8 panic(floor_char_boundary)
- selection 提取文本跳过全角续字节
- 子 agent tab 生成标志 + Done/Error 事件路由
- ToolContext global_tx/trace_id/iter_span 填充
- 子 agent spawn 使用传入 TraceContext
- confirm 前 flush streaming text 走 markdown 渲染
重构:
- 内联单元测试抽取到独立 _tests.rs 文件(visp-db/visp-agent/visp-llm)
- agent_loop 简化
文档:
- tool display 设计文档
- visp-proto 中文注释(build.rs + lib.rs)
涉及 crate:visp-core, visp-agent, visp-cli, visp-llm, visp-daemon, visp-db, visp-proto, visp-tools
v0.4.1
Reorder and remove duplicate steps in CI workflow
v0.4.0 - Multi-Agent 编排系统 + 可观测性 + CLI 多 Tab
新增:
- Multi-Agent 编排:Orchestrator 管理子 Agent 生命周期,TaskTool 委托任务
- Sub-Agent 定义:从 .visp/agents/*.md 加载,支持 permissions frontmatter
- 内置 explorer/fixer sub-agent,动态注入委托规则
- 可观测性:OpenTelemetry/OTLP 集成,Langfuse 兼容,gen_ai 语义约定,PII 脱敏
- CLI 多 Tab:Sub-Agent 独立 Tab,状态颜色,Alt+方向键/Ctrl+W 切换关闭
- 三层 Token 追踪:Tab 级 / 请求级 / 会话级
- 内置 Skills 系统:delegation-workflow 技能,SkillTool 按需加载
- LLM 流式取消支持(cancel 参数 + LlmError::Cancelled)
- /init-agent、/init-skill 命令
- Daemon 自动端口选择
- Tab 补全循环匹配
修复:
- output_tokens 上限为 max_context_tokens 的 75%,防止可用预算为零
- model config 字段运行时未生效
- llm.default 支持 {provider}/{model} 格式匹配
涉及 crate:visp-agent(新增)、visp-command(新增)、visp-core、visp-daemon、visp-cli、visp-llm、visp-proto、visp-db
v0.3.4
refactor(proto,daemon,cli): 重构 model 字段体系,拆分 model/model_key 职责
Proto 变更:
- Session 新增 model_key 字段,model 字段保持 API model key
- LlmConfig 新增 model_key 字段,与 model 职责分离
- 所有 message/field 补充语义注释
Daemon 变更:
- model_config_names 改为 model_config_keys(语义修正)
- ConfigUpdate 支持 model_key 优先匹配,model 作为 fallback
- session_to_proto 解析 model_key 供 CLI 显示
CLI 变更:
- /model 选择器发送 model_key 而非 model
- 状态栏用 model_key(provider.name)显示为 name(provider)
- 新增 AppState.model_key 字段
注释修正:
- LlmConfig.model: 模型名称 → API model key
- available_models 注释注明格式
- model_config_keys 注释更正为 model_keys