Skip to content

v0.5.3 — Hook 系统、事件总线、visp-fs 迁移与 TUI 强化

Choose a tag to compare

@github-actions github-actions released this 28 Sep 13:10
· 52 commits to master since this release

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)