Skip to content

Releases: laonger/visp

v0.5.4 — visp-acp(ACP 适配器)落地,思考增量与在途循环加固

Choose a tag to compare

@github-actions github-actions released this 30 Sep 08:58

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 强化

Choose a tag to compare

@github-actions github-actions released this 28 Sep 13:10

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 告警修复

Choose a tag to compare

@github-actions github-actions released this 03 Aug 19:42

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 - 多模态图片输入/输出 + 文生图 + 识图

Choose a tag to compare

@github-actions github-actions released this 03 Aug 13:17

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 — 修复模型切换失效

Choose a tag to compare

@github-actions github-actions released this 02 Aug 15:18

修复:
- 删除 start_main_agent 中的 agent model override,使 /model 切换生效
- agent 定义指定 model 时不再覆盖 session.config,用户切换不再被无视

涉及文件:orchestrator.rs, orchestrator_tests.rs

v0.4.4 - CLI 工具块 UI 重构 + 子 Agent 标签页 + clippy 修复

Choose a tag to compare

@github-actions github-actions released this 31 Jul 16:25

新功能:

  • 提取工具调用 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 修复

Choose a tag to compare

@github-actions github-actions released this 20 Jul 20:56

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

Choose a tag to compare

@github-actions github-actions released this 08 Jul 19:41
66f1fcf

Reorder and remove duplicate steps in CI workflow

v0.4.0 - Multi-Agent 编排系统 + 可观测性 + CLI 多 Tab

Choose a tag to compare

@github-actions github-actions released this 08 Jul 16:52

新增:

  • 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

Choose a tag to compare

@github-actions github-actions released this 14 Jun 12:56

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