快速迭代期 · 接口与文档可能变动
Liri Liri 演进
返回首页
中文
BUILD LOG

一条还没走完的路

从 v0.1 到 v0.5.22,156 天,116 个版本段。这里写的不是功能清单,是我们踩过的坑、换来的规则,和还没填上的空白。

156 天
从首发到今天
116
个版本段
9
次架构快照
20+
项架构检查

数据快照 2026-11-01 · 数字由 sync-facts 与 health:arch 采集自 Liri 主仓

跳到时间线

起源

2026 年 5 月 25 日,Liri 的第一个版本是 v0.1:100 次实质提交,一个能跑起来的终端 AI 助手。

最初想解决的问题很具体——让大模型真的坐在终端里,读文件、跑命令、改代码,而不是只在一个网页输入框里聊天。选择本地模型优先,是因为不想把私人文件传到别人的服务器;选择「安全内生」,是因为它拿到的是一台真实的机器,而不只是一个 API。

接下来的三个月,能力被一条条铺开:工具、27 个消息渠道、桌面端、语音、知识库。到 8 月,仓库里有 4000 多个文件。

也是在那时,问题第一次被明确指出来。2026 年 6 月 18 日的代码复查里:LocalHTTPService 7200 行,ChatManager 3263 行,测试文件 150 个,源码文件 3742 个。两个月后,架构健康度第一次打分:10/40,D 级,105 个超限文件全部未登记。

那时才明白:判断一个项目能不能被别人接手,不看它有多少功能,而看它踩过坑之后长出了什么规则。

五个转折点

按因果排序,不是日历顺序——时间上有交叠。

2026-05-25 → 2026-08

先把能力铺开,边界放后面

处境
v0.1 只有 100 次提交,能跑起来就算赢;功能优先级高于结构。
决策
先把能力铺满:工具、渠道、桌面端、语音、知识库,一个一个补。
代价
审计第一次给出数字时很难看——LocalHTTPService 7200 行、ChatManager 3263 行,测试与源码比约 4%,首次架构健康度只有 10/40(D),105 个超限文件全部没登记。
结果
4000+ 文件、69 个工具、27 个渠道、429 个桌面组件。

↳ 可以参与 — 想加新能力:在 app/src 下起模块,不要往内核里塞。

2026-08-09 → 2026-09-30

先学会量自己

处境
问题人人都能感觉到,但没人说得清「差多少」。
决策
把架构质量做成可重复的评分与台账(architecture-health),超限文件必须登记;放弃了「靠自觉保持整洁」这个假设。
代价
登记不等于拆分——ChatManager 反而从 3263 行涨到 7036 行(现已拆到 2,570 行);评分口径本身也在变,所以它只能当体检表,不能当 KPI。
结果
9 次快照;未登记超限文件从 105 降到 0(后回弹到 2);超限清单从「没人知道」变成一份可追溯的台账。

↳ 可以参与 — 认领一个超限文件的拆分(见下方参与方式)。

2026-10-08 → 10-09

一次删错,换来一条删除流程

处境
代码里积累了一批看起来没人引用的「死面」。v0.4.69 的清理把沙箱与隔离子系统当成死代码删除——那一版动了 170 个文件,+9340 / −10174 行。
决策
第二天 v0.4.71 整批回滚:恢复 24 个文件(IsolationManager、EnhancedSandboxManager、PTYSandbox、SSHSandbox、docker/** 等,外加 5 项测试),并回滚 21 个存活文件的配套改动。
代价
清理一个文件要先写证据,流程变慢;但比删错再回滚快。
结果
v0.4.72 落地删除流程 code-deletion.md(CD01–CD07):先取证、再摘入口、后删实现。「看起来没人用」不再是删除理由。

↳ 可以参与 — 按 CD01–CD07 做一次「死代码候选」核对。

2026-10-10 → 10-22

把规则变成门禁

处境
规则写在文档里,靠自觉;文档和代码开始漂移。
决策
每条规则都做成 CI 阻断而不是建议:五道门禁 + doc-gate + sandbox-negative 必需 job;硬编码基线 413 键;状态词表 34 个值、1795 对基线;启动面、关键模块、内核面各一道。
代价
每次提交多几秒;改词表要同步基线——口径不能再随手改,这恰恰是目的。
结果
lint:arch 违规 0;测试从 3029 涨到 7488。

↳ 可以参与 — 提交前先跑一遍本地门禁(bun run ci),红在哪就修哪。

2026-10-05 → 10-28

内核收缩:从 5336 行到独立包

处境
core 既是入口实现,又是所有能力的公共腹地,谁都能往里加。
决策
三步走——先砍(CoreAPIImpl 5336 → 2521 行),再抽包(@openliri/kernel 独立,core 146 → 113 个文件,K01–K08 内核门禁),最后外移(37 个不满足「零 I/O / 零上层依赖」的模块下沉 app/src,同步 470+ 处 import,5 类基线重生成)。
代价
一次大迁移,全部基线重生成;10-18 起改成按批次收口,提交密度主动降下来。
结果
内核对外只剩一层薄接口,外部贡献第一次有了明确边界。

↳ 可以参与 — 内核边界之外的新能力,从 app/src 起步,不必进内核。

架构:像操作系统那样分层

架构不是重新发明的。薄内核、子系统边界、依赖方向、门禁与可观测——这套组织方式来自操作系统几十年的工程实践;Agent 领域近两年公开的设计模式与工程指南,也基本收敛到同一组问题:分层、边界、状态、治理、评估。我们按前者的方式约束自己,用后者的清单做自查。

操作系统概念 → Liri 现状

概念 Liri 里对应什么 状态
内核 @openliri/kernel 独立包,对外只暴露薄接口,K01–K08 门禁 已落地
子系统 工具 / 渠道 / 记忆 / 路由 / 沙箱 / 任务 / 语音 / 桌面,各有入口与边界 收敛中
驱动 provider 适配器、渠道适配器、6 种沙箱后端(Landlock / Docker / SSH / PTY / macOS / Windows) 已落地
进程与调度 会话执行、PDCA、Swarm、Cron 已落地
权限模型 五层防线 + 审批四段(requested → presented → decided → recorded) 待外部审计
可观测与审计 事件日志、成本账本、证据台账 已落地
维护者(MAINTAINERS) 尚未建立:没有子系统 owner 与接手路径 空白

我们参考了什么

我们逐项对标了公开的 Agent 设计模式与工程指南:21 个模式都有真实实现,但其中 3 个关键开关默认关闭——所以对外只说「有实现」,不说「默认生效」。工程主线也按同样五段自查:架构、构建、运行、治理、调优。

三块空白

子系统维护者制度

没有 owner 就没有接手路径。这是最像操作系统、也最缺的一块。

子系统契约层

契约设计稿已有,台账 / LoopProfile 是否落地未核实——接口稳定承诺还没写死。

覆盖率门禁

复查时约 4%;CI 有 20+ 项架构检查,但还没有覆盖率门槛。

说实话:架构健康度仍是 D(10/40),142 个超限文件里还有 141 个未登记,最大的仍是 chat 模块(ChatManager 已从 7,036 行拆到 2,570 行)。内核有了,边界在收敛,维护者制度还没有——这就是「还没走完」的意思。

展开当前 8 层功能分层

架构全景图

从入口到反馈的 8 个功能层;工程上由 6 层依赖门禁(entry > ui > app > service > infra > core)强制约束

L1

多模态入口层

REPL 终端
React + Ink 构建的终端 UI,内置 Buddy 伙伴系统
Tauri 桌面客户端
429 个 TSX 组件,32 个功能页面(Tauri 2.11 + React 19)
MCP / 渠道网关
MCP Server + 27 个消息渠道(微信/钉钉/飞书/TG 等)
CLI / HTTP API
Liri / liri-memory / liri-ink 三个可执行入口 + HTTP API
L2

安全第一层

Rust AST 编译时分析
FFI 层解析 Bash AST,37 条危险命令规则
TypeScript 语义分析
复合只读命令逐段判定,拒绝原因可归因
Guardrail 规则引擎
14 条注入模式 + 10 条 Shell 专项规则
AutoMode 分类器
自动判断任务风险等级,决定放行 / 询问 / 拒绝
L3

智能路由层

19 种任务类型识别
编码 / 写作 / 分析 / 工具 / 翻译 / 搜索 / 创意 / 闲聊等
4 档 tier
simple / medium / complex / reasoning
5 层决策管线
开关 → 快通道 → 会话黏性 → LLM 判别 → Tier 解析
FallbackChain 回退
主供应商不可用按序回退,配套 RetryPolicy
L4

外脑注入层

知识库
Markdown 落盘 + 语义索引,关键词 / 向量 / RRF 融合检索
记忆系统
分层记忆 + SQLite 向量表,按相关性加权召回
会话事件
events.jsonl 追加存储,可回放、可审计
DreamEngine
空闲时整理知识:采集 → 分析 → 生成 → 写入 → 索引
L5

TAOR 决策循环

Think(思考)
4 种 Agent 策略:通用 / 编码 / 探索 / 规划
Act(行动)
69 个内置工具,按构建变体动态注册
Observe(观察)
结果评估 + 上下文分层切窗与自动压缩
Reason(推理)
Token 预算管理 + 检查点续跑 + 轮级熔断
L6

执行沙箱层

Linux Landlock
内核级文件系统访问限制
macOS / Windows
系统沙箱 + Low IL / Job 对象兜底隔离
Docker 容器
完整容器隔离 + 资源限制 + 网络策略
SSH / PTY
远程纯净执行环境与伪终端路径控制
L7

长程任务层

PDCA 管线
Plan-Do-Check-Act 闭环,进度按产物存在性推进
Swarm 多智能体
AgentSwarm + 议事编排,注册表动态发现
Cron 定时任务
支持 once / interval / cron 表达式(含时区)
任务持久化
会话快照 + 断点恢复 + 等待中可见倒计时
L8

反馈与进化层

失败样本归纳
把失败模式归纳后写回提示词与技能,形成改进闭环
成本账本
按数据库定价表计费,记录 provider 回显的真实模型名
评测门禁
内建基线题库 + pass^k 可靠性口径 + 成对安全测量
事件回放
每一次模型调用的上下文都能事后重建

架构哲学

🛡️
安全内生
安全不是插件,是每一层架构的 DNA
🏠
本地优先
数据本地存储,离线可用,隐私默认保障
🧠
智能路由
19 类任务匹配对应档位的模型
🧬
外脑设计
知识库 + 记忆 + 事件日志,三段上下文可检索
🔄
可核对闭环
失败样本归纳写回,变更由门禁拦住
🔌
多模态统一
终端/桌面/IM/API 共用同一套引擎

时间线

每月一条,只记架构与治理上的变化,不收录普通提交。

  1. 2026-05-25 v0.1:100 次实质提交,终端助手跑起来
  2. 2026-06-18 第一次代码复查:7200 行巨石文件,测试与源码比约 4%
  3. 2026-08-09 第一次架构健康度:10/40(D),105 个超限文件未登记
  4. 2026-10-09 沙箱被清理误删 → 整批回滚;次日落地删除流程 CD01–CD07
  5. 2026-10-20 状态词表门禁上线:34 个值、1795 对基线
  6. 2026-10-28 内核外移落定;默认可见工具收口到 12 个、1397 token
  7. 2026-10-28 中英双语文档站与本站上线

之后的每月更新会继续追加在这里。

参与方式

这页不是结项报告,是邀请。三件事,都有人手缺口。

安全审计清单

  • 危险命令规则:37 条规则在哪、怎么触发——构造一次,看拦截是否落在预期的那一条
  • 提示注入规则:14 条注入规则,喂一段恶意文档看是否被拦
  • Shell 规则:10 条白 / 黑名单,验证绕过路径(管道、子 shell、编码)
  • 沙箱降级逻辑:6 种后端各自在什么条件下降级、降级后是否 fail-closed
  • 审批四段:requested → presented → decided → recorded 是否有漏段或乱序
  • 越权面:工具调用能否绕过权限分类器直接落盘或执行

入口:app/src/security、app/src/sandbox、app/src/permission。

发现漏洞细节请按 SECURITY.md 私密报告,不要开公开 issue;公开 issue 只讨论审计流程与覆盖范围。

想用资金支持?查看赞助页