Skip to content

架构 ​

eyeful 是一套审查工作流,加上在用户机器上运行它的两个程序:eyeful 命令和桌面应用。它们都不需要服务器。云端 action是另一个程序:cmd/eyeful-action,它的包在 internal/,在 GitHub Actions 的 job 里运行。它共用 workflow 模块和 local,不和本地交换任何数据。local/app 留在 CLI 和桌面端。

组件 ​

桌面应用和 CLI 都调用 local/app,它用 local/subject 读取改动,用 local/worktree 检出快照,并通过 local/agents 运行 workflow(见本地运行)。local/app 直接装配普通构造函数。

审查工作流 ​

workflow 让一次审查走完各个阶段。它自己不运行 agent、命令或存储:调用方在 Session 里传入四个接口。

接口提供云端本地
Agents每个角色调用一次,返回带类型的结果和花费的 tokenlocal/agents:审查容器里的 pi,由 EYEFUL_AGENT 指定local/agents
Classifier两条发现是同一个问题的概率,以及花费的 tokenlocal/classify,经 TypeSafe APIlocal/classify,经 TypeSafe API
WorkspaceCI 检查、setup、读文件、在全新副本上运行测试CI 检查读 GitHub Actions;其余走 internal/sandboxlocal/worktree
Archive读取和保存每个阶段的输出local/archive,只在 job 期间保留local/archive

所有循环都由 Go 掌管:workflow 检查每份计划和报告、管理预算、决定重试,并在下一阶段开始前保存当前阶段。它不包含 fx、数据库或服务器的类型。

Jev ​

Jev 是 TypeSafe 的分类模型,这里通过 go-jev 调用 TypeSafe 的 API:它针对给定的 state 回答带类型的问题,返回概率,不生成文字。只有判断所需的信息能全部放进 state 时,eyeful 才把它交给 Jev。

位置问 Jev 的问题调用方式
workflow,验证之前同样几行上的两条发现是不是同一个问题Classifier.Same,用 go-jev 的类型

语言 ​

  • Go:action、CLI 和工作流。
  • TypeScript:桌面前端。
  • Python:只用于评估。

eyeful 没有自己的 agent 循环。agent 在云端跑在 pi 里,在本地跑在用户的编码 agent CLI 里。

布局 ​

模块 ​

每一块是一个独立的 Go 模块,边界由编译器保证。根模块里有两个程序;.golangci.yml 里的一条 depguard 规则不让 cmd/eyeful 导入 internal/。

模块内容可以导入
workflow编排及其接口无
localCLI 和桌面端共用的部分workflow
根模块cmd/eyeful,本地 CLIworkflow、local
cmd/eyeful-action、internal/workflow、local
apps/desktop桌面应用,Wails 和 cgo 留在这里workflow、local

目录 ​

路径负责
cmd/eyeful本地 CLI(kong):review、provider、connect、commit
apps/desktop本地 GUI:Wails v3,独立的 Go 模块
apps/desktop/frontend桌面端的 SvelteKit 前端及其 Wails 绑定
packages/ui桌面端的组件:diff 视图、文件树、主题
packages/pulls从 @pulls.review/core 构建 workflow/pulls/core.js
workflow审查编排:分拣、计划检查、专家、验证器、汇总、预算、检查点
workflow/prompts专家和角色的提示词、vendored 的 skill
workflow/pulls打包成 core.js 的 @pulls.review/core,用 moejs 运行
workflow/project从清单文件找出的项目命令
workflow/report把结果渲染成 Markdown 和 SARIF 2.1.0
local/subject本地分支、提交或未提交改动的快照
local/app本地的组合根;CLI 和桌面端唯一调用的包
local/agents基于 claude、codex、pi CLI 实现的 workflow.Agents
local/worktree快照的一次性检出;workflow.Workspace
local/store.eyeful/runs/ 和已确认的命令
local/settings已连接的 agent 和桌面端上次打开的仓库
local/classify基于 TypeSafe API 上的 Jev 实现的 workflow.Classifier
local/archive以文件保存的阶段检查点
local/git、local/tail用固定环境运行 git;保留输出的末尾
eval/评估脚本,Python
action.yml、cmd/eyeful-action、cmd/eyeful-sandbox、internal/云端 action

前端 ​

桌面前端只通过 Wails 绑定调用自己的 Go 服务。它的组件放在 packages/ui。

数据流 ​

生产者和消费者接在管线的两端,彼此不知道对方。

workflow 发起审查,它的 job 发布一条 COMMENT review 和排序报告。每次发布都带着 workflow 运行的 id,重新运行会跳过已经发过的内容。