domi开发者文档
DOMI · DOCS

三端

本页回答四个问题:三端怎么连 daemon?共享层做什么?端上有什么坑?出错了会怎样? apps/tui · apps/web · apps/desktop + packages/client-core。 domi 的端规约一句话:端上没有业务逻辑(INV-02),全是事件流的视图。 贯穿例子:给登录接口加限流——你在 Web 设置页改配置,TUI 里跑任务。

先说结论

用到的词

词 意思
DomiClient 三端共用的协议客户端类。
seq 事件流里递增的序号。
续订 重连后从 last seq 接着订阅。
投影 把事件流变成视图状态的计算。
接线处 端上把输入接进来、把输出打出去的地方。

1. 总体流程

三端共享层

2. 共享层:client-core

三端连 daemon 都走 DomiClient(client-core/src/client.ts)这一个类,它负责三件事(渲染层一件都不用管):

  1. 握手:版本不匹配停在 incompatible,不重连、不降级。
  2. 断线重连 + 断点续订:每个会话记着最后收到的 seq,重连后用 session.subscribe 的 fromSeq 续订,断开期间的事一条不漏。
  3. 去重:同一个 seq 只进一次 store。

它必须能在浏览器里跑(不 import node 模块、不依赖 DOM 类型)。投影逻辑(SessionStore、trajectory.ts、questions.ts 的问题框状态机、tokens.ts 的 token 估算、highlight.ts 的语法高亮)全在这层——某项如果需要在 apps/web 里写判断才能对等,那是 client-core 缺东西,先补那边(parity-checklist 的判定规则)。

3. TUI(apps/tui,Ink 7)

4. Web(apps/web,Vite + React + Tailwind v4)

5. Desktop(apps/desktop,Tauri)

Web 的一个打包目标(端顺序:TUI → Web → Desktop 套壳)。src-tauri + 一个 README。

6. 端之间的一致性

docs/parity-checklist.md 是 TUI ↔ Web 功能对等的判据本身:一项算「对等」,要求两端 e2e 都有用例且都绿,断言的是同一件事——同一份事件流 fixture 进去,两端渲染出来的 seq 序列与关键文本一致。加一项 / 删一项都是改 AC,走回写门。 目前两端 e2e 仍缺(Web 等 Playwright;TUI 有假 stdin 可以直接写)。

7. 出错了怎么办:网断了,任务还在跑

  1. 断线。DomiClient 重连,fromSeq 续订——断开期间的事件一条不漏,store 去重。
  2. 版本不匹配。握手停在 incompatible:不重连、不降级。升级对应端。
  3. TUI 首帧挂掉。写 ~/.domi/state/tui-fallback,之后自动用 classic 渲染器。
  4. Web 设置页改敏感键。白名单拒绝——界面不能给自己提权。改配置文件。
  5. 两端行为不一致。parity-checklist 判据:先在 client-core 补投影,再修端。

一张表看全部情况

情况 domi 做什么 你要做什么
断线 重连 + fromSeq 续订 + 去重 不用管
版本不匹配 停在 incompatible 升级对应端
TUI 首帧挂 写 tui-fallback,自动用 classic 不用管
设置页改敏感键 白名单拒绝 改配置文件
端行为不一致 parity-checklist 判定 先补 client-core

8. 可靠性靠什么

  1. 连接逻辑单点:三端共用 DomiClient,行为一致。
  2. 续订不丢事件:断开期间的事件按 seq 补回来。
  3. 去重:同一个 seq 只进一次 store。
  4. 业务在共享层:端上没有业务逻辑,对等由 client-core 保证。
  5. 失败可回退:TUI 渲染器失败自动降 classic。

已知限制

代码在哪里

主题 位置
DomiClient(握手 / 续订 / 去重) packages/client-core/src/client.ts
投影(store / 轨迹 / 问题框 / tokens) packages/client-core/src/{store,trajectory,questions,tokens,highlight}.ts
TUI 接线 / 渲染 apps/tui/src/
Web apps/web/src/
Desktop 壳 apps/desktop/
对等判据 docs/parity-checklist.md

测试:apps/web/test/*.spec.tsx、apps/tui/test/*.spec.tsx(渲染 / 按键级)、daemon/test/transport.spec.ts(真 WebSocket 推送)。

相关