0.3.10 发布:研发透明化,抛弃许愿式编程
一个 AI 编码平台做到第三版时,我意识到真正的问题不是"它不够聪明",而是"我看不见它在干什么"。
旧用户注意在浏览器多刷新几次,防止缓存!!

一、先说"许愿式编程"是什么
如果你用 AI 写过代码,下面三个场景大概率熟悉:
场景一:一句话丢过去,等一个奇迹。
"帮我把这个模块重构一下。" 十分钟后 AI 说"已完成重构,共修改 12 个文件"。你打开 diff,发现它顺手删掉了一个你认为很重要的兼容逻辑------它不知道那是有意为之。
场景二:做了很多,但你说不清它凭什么这么做。
它读了哪些文件、信了哪段注释、跳过了哪个目录,你一概不知。出了问题,第一反应是"重开一个会话再试一次",而不是"定位哪一步判断错了"。
场景三:交付没有凭据。
它说"测试通过"。哪个测试?覆盖了哪些分支?没有需求文档、没有方案评审、没有验证记录,只有一个自信的结论。
这三件事的共同点:过程是黑盒,结论只能靠信。 我把这种开发方式叫许愿式编程------你付出的不是工程,是期待。
0.3.10 想解决的就是这个。它不打算做一个更聪明的许愿池,而是把黑盒拆开。
二、这一版的三条主线
一句话概括:
| 过去的黑盒 | 0.3.10 的答案 |
|---|---|
| 不知道它打算怎么干 | 研发流程门禁:六段流程,逐门推进,方案先审再写 |
| 不知道它看了什么、想到第几步 | 上下文白盒 + 过程可见:token 水位、维度明细、推理轮次全在界面上 |
| 不知道它守不守规矩 | 记忆层 devrules:规矩落成文件,按仓库、按状态、按需注入 |
下面逐条说。
三、研发流程门禁:把"丢进去等结果"改成"逐门过"
这是 0.3.10 最核心的改动。任务不再是丢进 Agent 队列等结果,而是走一条有据可查的流水线:
(进入流程)→ 调研 → 实施方案 → 方案评审 → 编码 → 测试 → 交付
每道门 = 状态推进校验 + 沙箱档位切换点。
前一阶段的产物不齐------以任务附件为凭据,不是靠 AI 自己说"我调研过了"------门就不开。这就把"AI 的自述"换成了"系统的校验"。
3.1 分级门禁,而不是一把尺子量所有活
按任务类型自动分 S / M / L 三档:
- S 档(缺陷 BUG、单点修改):调研与方案合并,可直接推进到评审------不为一个改错别字的需求走完整六段;
- M 档(需求、功能开发):完整六段;
- L 档(架构设计、测试):从调研起,逐门不落。
3.2 评审门不可跳
review → implement 这一道门,必须人工批准才能开始写代码。
S 档可以把"调研 + 方案"合并,但"方案评审"这一步无论如何绕不过去。理由很简单:写代码是最贵的动作,方案评审是最便宜的纠错点。
3.3 要跳过?可以,但会留痕
现实里总有"别评审了,先给我改上"的时刻。系统不拦你,但会做两件事:
- 把任务直接置为
deliver阶段; - 写入
dev_bypass=1,跳过所有门这件事本身被永久记录。
允许例外,但不允许例外消失。 这是流程设计里最容易被忽略的一点------如果"临时绕过"没有痕迹,三个月后你会发现所有任务都是绕过的。
3.4 界面长这样
任务面板顶部就是门禁条:当前处于哪一段、下一步能推进到哪、评审卡上预审意见和"批准"按钮并排。看板上的任务状态不再是一个模糊的"进行中",而是"在编码阶段"。

四、AI 预审:审的人和写的人,不该是同一个上下文
评审门上挂了一个隔离子会话的预审员。它的几个设计取向值得单独说:
1)fork 空历史会话,与编码会话零共享上下文
复用编码 Agent 的上下文去评审它自己的方案,等于让它自己批自己------它会维护自己之前的判断。所以预审线程是全新的空会话,走 afterSeq: -1。
2)只读工具环
预审只查不写,结论必须能引到 file:line。没有证据链的意见,视为无效意见。
3)结构化 verdict
不是一段没法验收的散文,而是逐条 finding(结构示意):
json
{
"findings": [
{
"title": "并发写入未加锁",
"body": "writeQueue 在 batch 模式下绕过了串行队列,高并发下会丢失事件",
"confidence": 0.82,
"priority": 0,
"location": "packages/storage/src/write-queue.ts:118"
}
]
}
标题 / 说明 / 置信度 / 优先级 / 位置,五项齐全才叫"评审意见"。
4)人工结论优先
预审意见只贴在评审卡上供你参考,不代替你过门。AI 的价值是把明显的坑先标出来,不是替你签字。
这套口径参考了 Codex 的 Review Mode------审的人和写的人,不该是同一个上下文,也不该是同一个人格。
五、上下文白盒:token 花在哪,终于能看见
上下文(Context)是这个领域最不透明的东西。你只知道"快满了",不知道"谁占的"。

0.3.10 把上下文信息面板重做了一遍,现在是:
- 一个 token 水位环:总占用多少,每个维度各占百分之几,环上一眼看出;
- 15 个维度分 tab :系统提示词、创作人设、任务、代码仓库、知识库、记忆层规约、技能、工具、附件、对话历史、任务清单、反思、注入、会话摘要、其他,每个 tab 带条数角标;
- 工具与技能自动瘦身:只显示"名称 + 描述",参数细节折叠掉------你不会想逐个读 JSON 参数;
- 默认单行折叠:长内容一行截断,点"展开"看全文;
- 上栏固定、下栏明细各自滚动:面板不会撑爆页面,刷新按钮就在环形图右上角。
创作、研发、工作台三端统一了这一套。
上下文不透明,调提示词就只能是玄学。你无法优化一个看不见的数字。
六、过程可见:第几次推理,都算数
研发工作区这一版做了整体重构,原则只有一条:AI 在干什么,界面上必须有对应的痕迹。
- 消息头信息完整 :
YnuoAgent · 模型名 · 时间 · 研发思考中... 第 X 次推理,推理轮次带循环配色,长跑任务不再像卡死; - 过程消息只留最近 5 条:其余折叠成"还有 N 条过程消息,查看更新",点击直达日志并自动滚到底------既不被刷屏,也不丢信息;
- 左栏任务 × 会话手风琴:一个任务下挂多个会话,展开即见历史(克隆 / 删除 / 新建),任务卡上"查看 / 展开"是两个独立按钮,不必再双击猜;
- 任务进度胶囊卡:悬停弹出 todo 明细,进度条 + 计数 + 百分比实时同步;
- 打开即钉底:切 tab、切会话、加载历史后自动贴到最新消息,含渲染后高度增长的二次校正。
透明不是把日志全糊在脸上,而是关键信息出现在正确的位置。
七、记忆层 devrules:规矩写进文件,不靠模型自觉
上一版的"研发规约"和"经验",本质是两段塞进提示词的文本,各 6000 字符常驻,超长就 slice。问题很明显:
- 每回合稳定吃掉约 3000 token,里面可能一半跟当前任务无关;
- 超长直接截断,可能切在句子中间------给模型半条规则,比不给更容易诱发幻觉;
- 所有仓库的规则糊成一份聚合文件,无法按仓库过滤。

0.3.10 把它重做成三层结构:
| 层次 | 位置 | 性质 |
|---|---|---|
| 人工规则 | <项目>/docs/rules/(公共规范 + 各仓约定) |
入库、可 review、团队共享 |
| 机器产物 | <项目>/.ynuo/rules/<仓库>/(开发规约 + 经验) |
gitignore、可随时重建 |
| 分析真源 | 项目库 repo_conventions |
带状态:草稿 / 已确认 / 已否决 / 过期 / 废弃 |
关键改动:
- 一仓一文件,按仓库取用,聚合文件这个"多仓混合物"从源头消失;
- 不再硬截断:宁可少给,不给半条;
- 经验有归属、有条数上限、会过期:跨仓经验进公共文件,仓库经验回本仓,长期不用的不再占预算;
- 按需读取 :新增
dev-rules/repo-touch工具,模型需要时才翻开具体文件,而不是每回合常驻几千 token; - 配置页可视化:系统级 + 项目级规则配置,能看清每条规则的归属与状态。
一句话:规矩不是求模型记住,是把规矩以文件形式摆在它面前,让它查得到、引得出、过期即失效。
顺带说,这套东西和代码仓库分析是打通的:分析结论会投影成仓库内可读的 .ynuocode/CONVENTIONS.md,并按仓库落到 .ynuo/rules/<仓库>/开发规约.md,只有"已确认"的规约才进入上下文。
八、知识库重做:切片可调、分块可改


做 RAG 的人大概都踩过这几个坑,0.3.10 一并处理了。
1)切片策略下沉到文件级
每个文件可以有自己的策略、大小、重叠,存进 knowledge_base_file,下次打开还是上次的配置。代码文档和需求文档,终于不必用同一把刀切。
2)分块可管理(这次新加的)
点文件名打开分块列表:分块数 / 总 token / 均 token 三个统计、按内容或序号搜索、新增 / 编辑 / 删除,保存即针对该条重新向量化。切坏了不用整篇重来。
3)模型选择就在"选择文件"弹窗里
文本模型 + 向量模型都在索引时选,选完随索引持久化到知识库,对话与检索复用同一套模型。同一个库混用两个向量模型,跨文件向量空间不一致,检索会莫名奇妙地失效------这个坑现在在 UI 层就堵住了。
4)限流自愈,索引不再中途归零
批大小收到 10;批间自适应节流(800ms 起,命中限流翻倍,上限 5s);限流错误指数退避重试 6 次(2s / 4s / 8s / 16s / 30s);重试耗尽给可操作提示,而不是一个 429 堆栈。索引期间全屏锁定 + 已用时计时器,防止边索引边改库。
5)检索容错
baseId 少个连字符、传了不存在的库、同时有多个库------都不再直接报错:精确命中 → 归一化/子序列唯一匹配 → 回退全部库合并检索。
6)模型下拉口径收敛
文本模型下拉严格排除向量模型;模型配置页从 Checkbox 改为"对话模型 / 向量模型"单选,从源头不再产出双能力脏数据(历史脏数据也会立刻从下拉里消失,不用手工改库)。
九、顺手填的坑
- 文件预览窗口:拖拽移动、边缘/右下角自由拉伸、全屏、缩放 50%~300%(可重置);
- HTML 双模式预览 :
源码(高亮、不执行)与页面预览(iframe 内联相对子资源)一键切换; - 预览容器高度链断裂导致视频溢出窗口、HTML 预览被压成 150px 的问题修掉了;
- 漫剧模式下文本模型切换不生效;
- 代码格式化问题;
- AI 身份档案:现在问它"你的作者是谁",会给出完整创作者信息,而不是含糊其辞。
十、安装与升级
bash
# 全局安装(自动携带当前平台的守护启动器)
npm install -g @ynuo/ai@latest
# 或使用内置升级命令(升级完自动重启守护进程)
ynuo update
# 只查版本,不升级
ynuo check
# 启动
ynuo daemon # 守护模式(后台运行,崩溃自愈)
# 或 npx ynuo # 前台模式
# 打开浏览器
# http://localhost:2609
按平台拆分的 launcher 包通过 optionalDependencies 挂载,npm install 时按当前 os/cpu 只装匹配的那个,Windows x64 / Linux x64 / macOS Apple Silicon / macOS Intel 四平台都有。
手动升级请用
npm install(而不是npm update),确保平台包一并更新到 0.3.10。
十一、写在最后
这一版没有堆功能数量。六个门、一个水位环、一套规则文件、一堆分块按钮------如果只看清单,它们都很朴素。
但它们指向同一件事:把"我相信 AI 做对了"换成"我能看到它做了什么、凭什么这么做、有没有走过该走的路"。
许愿式编程的问题从来不是 AI 不够强,而是你没法参与判断。一旦过程可见,判断权就回到了人手里------AI 负责推进,你负责在每个该点头的地方点头。
0.3.10 是往这个方向的第一版。离"完整的研发透明"还差得远,但至少,黑盒被打开了一条缝。
仓库地址 :https://gitee.com/yanzkc/ynuo
作者 :elcker(438586732@qq.com)
当前版本:0.3.10
如果这套思路对你有用,欢迎到仓库看看,或者留言聊聊你怎么看"AI 写代码的可验证性"。