Skip to content

v0.1.3 — 让 aivet 知道自己什么时候过时了

Choose a tag to compare

@shiftu shiftu released this 28 Aug 08:54
· 10 commits to main since this release

aivet 对六件工具的了解会随它们升级而失效。麻烦的不是失效本身,是失效的表现形式:

解析器读到一个改了名的字段不会报错,它只会留一个零值。于是后面每条检查都在核对空值,
然后一路绿灯 —— 查了等于没查,而报告上写着「一切正常」。这比报错危险得多,因为没人会来问。

这个版本让 aivet 能说出「我读不懂这个」。

读不懂就明说,并且闭嘴

配置文件有内容、却没有一个 aivet 认得的顶层键时,报一条 <工具>.schema「配置结构」,
并就此打住,不再输出没有依据的绿灯。汇总行也跟着改口:

1 通过  ·  1 提醒
有配置 aivet 读不懂(见上面的「配置结构」),那几件工具的结论不作数。
实测一下:aivet check <工具> --live

用在哪儿是有取舍的,不是一刀切:

  • hermes / pi(models.json) / dsh —— 这些文件存在的意义就是声明提供方,读不懂就得停。
  • codex config.toml —— 多用途文件(审批策略、沙箱设置也在里面),「没有模型配置」有两种读法:
    用户本来就走 OpenAI 官方,或者 codex 改了字段名。分不清就别装作分得清:陈述事实,不打断。
  • claude settings.json —— 里面可能全是主题、权限之类和 aivet 无关的设置,误报风险太高,不用这条。
    改的是另一处:文件不存在时不再报 OK;三样配置来源都空时提示可能换了配置文件位置。

知识可以就地补,不用等发版

新增 aivet knowledge。提供方地址、Claude 模型别名、配置文件路径、版本断言
四类会过时的事实从代码里搬到了 ~/.aivet/knowledge.json:

aivet knowledge          # 看 aivet 现在以为配置文件在哪、认识哪些提供方、哪些被你改过
aivet knowledge --init   # 生成模板(已存在则不覆盖 —— 那是你手写的东西)
aivet knowledge --json   # 给 agent

工具搬了配置文件的家,往 paths 对应键的最前面加一条新路径即可 —— 内置的仍留作兜底,
不必把原来的抄一遍。加提供方、改版本断言同理。只写你要改的那几条,其余继续用内置的。

用户文件读不了会挂到报告的 notes 上并打在屏幕上:静默退回内置知识,
是这个功能最坏的失败方式 —— 你以为补的东西生效了,其实没有。

版本断言带版本号比

wire_api = "chat" 不再无条件报故障:

你装的 codex 结论
≥ 0.137 故障(启动即报错)
< 0.137 提醒(你这儿还能跑,但升级会坏)
读不出版本 提醒 + 明说读不出版本,不瞎断言

三种情况都留可自动修的出路。老实现见到 chat 就报故障,两头都会错:旧版用户被一条
在他那儿根本不成立的「故障」挡住,而 codex 万一把 chat 加回来,这条就成了纯误报。

顺带修一个真 bug:wire_api = "chat" 时探测仍用 Responses 协议,对旧版用户必然 404 ——
那是 aivet 的错,不是用户配置的错。现在探它实际会发的那个协议。

给 agent

aivet help --json 的工作流多了一步;SKILL.md 明确写了:见到 .schema 项就别再拿那部分结果当事实,
改走 --live(工具自己跑一次,完全不经过 aivet 对配置的理解)或 aivet knowledge。

验证

  • 实机 aivet check:35 通过 / 3 提醒 / exit 0,与上一版一致,真实配置上零误报
  • go vet + 9 个包测试全绿,新增 3 个测试文件
  • 测试钉的是行为不是措辞:漂移必须报出来 → 报出来之后不许再吐绿灯 → 正常配置不许误报 →
    补一条路径能从「文件搬家」里恢复
  • aivet knowledge --init 生成的模板自己读得回来

一处诚实的取舍:内置 paths 表里每个键只有一条候选路径。没有凭空加 XDG 之类的备选 ——
那是猜,而猜正是这个版本要消除的东西。多候选的能力留给用户和 agent 用真实观察去填。

安装

curl -fsSL https://raw.githubusercontent.com/shiftu/aivet/main/install.sh | bash